Islak Çevre Hesaplayıcı: Kanal Şekilleri için Hesaplama Aracı
Trapezler, dikdörtgenler/kareler ve dairesel borular dahil olmak üzere çeşitli kanal şekilleri için ıslak çevreyi hesaplayın. Hidrolik mühendisliği ve akışkanlar mekaniği uygulamaları için gereklidir.
ULID Üretici
Oluşturulan ULID:
ULID Yapısı
Zaman Damgası (10 karakter)
Rastgelelik (16 karakter)
Dokümantasyon
ULID Üretici
Giriş
ULID (Evrensel Benzersiz Lexikografik Sıralanabilir Tanımlayıcı), zaman damgasını rastgele verilerle birleştirerek 26 karakterlik bir dize oluşturan benzersiz bir tanımlayıcıdır. ULID'ler, yüksek derecede benzersizlik ve rastgelelik sağlarken lexikografik olarak sıralanabilir olacak şekilde tasarlanmıştır.
ULID Yapısı
Bir ULID iki ana bölümden oluşur:
- Zaman Damgası (10 karakter): İlk 10 karakter, Unix Epoch'tan (1970-01-01) itibaren milisaniye cinsinden zamanı temsil eder.
- Rastgelelik (16 karakter): Kalan 16 karakter, kriptografik olarak güvenli rastgele veriler kullanılarak üretilir.
Sonuçta elde edilen 26 karakterlik dize, Crockford'un base32 alfabesi kullanılarak kodlanır (0-9 ve A-Z, I, L, O ve U hariç).
Formül
ULID, aşağıdaki adımlarla üretilir:
- Unix Epoch'tan (milisaniye cinsinden) 48 bitlik bir zaman damgası oluşturun.
- 80 bitlik kriptografik olarak güvenli rastgele veri oluşturun.
- Birleşik 128 bitlik veriyi Crockford'un base32 kodlaması ile kodlayın.
Hesaplama
ULID üretici aşağıdaki adımları gerçekleştirir:
- Mevcut zaman damgasını milisaniye cinsinden alın.
- Kriptografik olarak güvenli bir rastgele sayı üreteci kullanarak 10 rastgele byte (80 bit) oluşturun.
- Zaman damgasını ve rastgele veriyi 128 bitlik bir tam sayıya birleştirin.
- 128 bitlik tam sayıyı Crockford'un base32 kodlaması ile kodlayın.
Kullanım Alanları
ULID'ler çeşitli senaryolar için faydalıdır, bunlar arasında:
- Veritabanı anahtarları: ULID'ler, veritabanı kayıtları için benzersiz tanımlayıcılar olarak kullanılabilir, benzersizlik ve sıralanabilirlik sağlar.
- Dağıtık sistemler: Dağıtık ortamlarda, ULID'ler düğümler arasında koordinasyonsuz olarak üretilebilir.
- Günlükleme ve izleme: ULID'ler, günlük girişlerini veya olayları etiketlemek için kullanılabilir, sıralanabilir ve benzersiz bir tanımlayıcı sağlar.
- URL dostu kimlikler: ULID'ler URL güvenlidir ve web uygulamalarında URL'lerde tanımlayıcılar olarak kullanılabilir.
Alternatifler
ULID'ler çok yönlü olsa da, dikkate alınması gereken diğer benzersiz tanımlayıcı sistemleri vardır:
- UUID (Evrensel Benzersiz Tanımlayıcı): Zaman damgası bileşeni içermeyen 128 bitlik bir tanımlayıcı.
- KSUID (K-Sıralanabilir Benzersiz Tanımlayıcı): ULID'ye benzer ancak farklı bir zaman damgası kodlaması vardır.
- Snowflake ID: Twitter'ın dağıtık benzersiz ID üretim sistemi, zaman damgası ve işçi kimliği içerir.
Tarihçe
ULID'ler, 2016 yılında Alizain Feerasta tarafından UUID'lere alternatif olarak tanıtılmıştır. Sıralanabilirlik ve okunabilirlik açısından UUID'lerin bazı sınırlamalarını gidermek için tasarlanmıştır. ULID spesifikasyonu tanıtımından bu yana kararlı kalmış ve farklı programlama dillerinde çeşitli uygulamalar mevcuttur.
Örnekler
Farklı programlama dillerinde ULID üretmek için bazı kod örnekleri:
1// JavaScript uygulaması
2function generateULID() {
3 const timestamp = Date.now().toString(36).padStart(10, '0');
4 const randomness = crypto.getRandomValues(new Uint8Array(16))
5 .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6 return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10
1## Python uygulaması
2import time
3import secrets
4import base64
5
6def generate_ulid():
7 timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8 randomness = secrets.token_bytes(10)
9 return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12
1// Java uygulaması
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6 private static final SecureRandom random = new SecureRandom();
7 private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9 public static String generateULID() {
10 long timestamp = Instant.now().toEpochMilli();
11 byte[] randomness = new byte[10];
12 random.nextBytes(randomness);
13
14 StringBuilder result = new StringBuilder();
15 // Zaman damgasını kodlayın
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Rastgeleliği kodlayın
21 for (byte b : randomness) {
22 result.append(ENCODING_CHARS[b & 31]);
23 }
24 return result.toString();
25 }
26
27 public static void main(String[] args) {
28 System.out.println(generateULID());
29 }
30}
31
Bu örnekler, JavaScript, Python ve Java'da ULID'leri nasıl üreteceğinizi göstermektedir. Bu işlevleri belirli ihtiyaçlarınıza uyarlayabilir veya benzersiz tanımlayıcılar gerektiren daha büyük sistemlere entegre edebilirsiniz.
Referanslar
- "ULID Spesifikasyonu." GitHub, https://github.com/ulid/spec. Erişim tarihi 2 Ağu. 2024.
- "Crockford'un Base32 Kodlaması." Base32 Kodlaması, http://www.crockford.com/base32.html. Erişim tarihi 2 Ağu. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Erişim tarihi 2 Ağu. 2024.
Geri Bildirim
Bu araç hakkında geri bildirim vermeye başlamak için geri bildirim toast'una tıklayın
İlgili Araçlar
Çalışma akışınız için faydalı olabilecek daha fazla aracı keşfedin