Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Svelte Vue

Apps

Posts

Mengenal Python Lists: Panduan Lengkap dari Dasar hingga Multidimensional
Mengenal Python Lists: Panduan Lengkap dari Dasar hingga Multidimensional
Sebagai developer independen, saya sering banget ketemu kasus di mana data harus disimpan dan diolah dengan fleksibel. Awalnya saya rada bingung bedain kapan pakai list biasa, nested list, atau cara querying yang efisien. Tapi setelah sering eksperimen, Python lists itu ternyata powerful banget. Gini deh, mari kita kupas tuntas. 1. Membuat Lists Dasar Copy # Kosong empty_list = [] # Integer numbers = [1, 2, 3, 4, 5] # Campur-campur mixed_list = [1, "Hello", 3.14, True] # Nested list nested_list = [[1,2,3], [4,5,6], [7,8,9]] Menggunakan list() Copy tuple_to_list = list((1,2,3)) string_to_list = list("hello") 2. Mengakses & Mengubah Elemen Copy numbers = [10, 20, 30, 40, 50] # Akses first_element = numbers[0] last_element = numbers[-1] slice_of_list = numbers[1:4] # Modifikasi numbers[1] = 99 3. Menambah & Menghapus Elemen Copy numbers = [1,2,3] # Menambah numbers.append(4) numbers.extend([5,6]) numbers.insert(1, 10) # Menghapus numbers.remove(3) removed = numbers.pop(1) del numbers[1] 4. Operasi Dasar Lists Copy list1 + list2 # Concatenation [1,2,3] * 3 # Repetition 3 in [1,2,3] # Membership 5. Iterasi & List Comprehension Copy for n in numbers: print(n) squares = [x**2 for x in range(10)] evens = [x for x in range(10) if x%2==0] 6. Multidimensional Lists Copy matrix = [ [1,2,3], [4,5,6], [7,8,9] ] tensor = [ [[1,2],[3,4]], [[5,6],[7,8]], [[9,10],[11,12]] ] # Akses element = matrix[1][2] block = tensor[0] # Iterasi for row in matrix: for val in row: print(val, end=' ') print() 7. Querying Lists Copy numbers = [1,2,3,4,5,6,7,8,9,10] # Filtering evens = [x for x in numbers if x%2==0] evens2 = list(filter(lambda x: x%2==0, numbers)) # Searching greater_than_five = next((x for x in numbers if x>5), None) all_positive = all(x>0 for x in numbers) # Aggregating total_sum = sum(numbers) min_value = min(numbers) max_value = max(numbers) 8. Kesimpulan Gini deh, Python lists itu simpel tapi powerful. Dari list dasar, nested list, sampai querying, semuanya bikin manipulasi data lebih fleksibel. Kita rutin pakai list dan list comprehension, coding Python sehari-hari jadi lebih cepat dan enak.
Cari Kata di Banyak Teks Sekaligus Pakai Goroutine di Go
Cari Kata di Banyak Teks Sekaligus Pakai Goroutine di Go
Go punya fitur konkuren yang kece banget lewat goroutine. Salah satu contoh penggunaannya: cari kata tertentu di banyak teks sekaligus. Daripada cek teks satu-satu secara berurutan, saya bisa suruh goroutine kerja bareng-bareng, hasilnya lebih cepat dan efisien. Gambaran Umum Program ini bakal: Cari kata di satu teks (fungsi searchInText). Cari kata di banyak teks secara paralel pakai goroutine (fungsi searchWordInTexts). Print hasil pencarian di main. Kode Program Copy package main import ( "fmt" "strings" "sync" ) // searchInText: cek apakah kata ada di dalam teks func searchInText(text, word string) bool { if text == "" || word == "" { return false } // Biar pencarian nggak case-sensitive text = strings.ToLower(text) word = strings.ToLower(word) return strings.Contains(text, word) } // searchWordInTexts: cari kata di banyak teks sekaligus func searchWordInTexts(texts []string, word string) bool { var wg sync.WaitGroup var mu sync.Mutex found := false for _, text := range texts { wg.Add(1) go func(t string) { defer wg.Done() if searchInText(t, word) { mu.Lock() found = true mu.Unlock() } }(text) } wg.Wait() return found } func main() { texts := []string{ "This is a long example text", "Another text for word searching", "This program uses goroutines for searching", } word := "program" if searchWordInTexts(texts, word) { fmt.Printf("Kata '%s' ketemu di salah satu teks\n", word) } else { fmt.Printf("Kata '%s' nggak ditemukan\n", word) } } Penjelasan searchInText Ubah teks dan kata jadi huruf kecil semua biar pencarian nggak peka kapital. Habis itu tinggal pakai strings.Contains.
Enkripsi & Dekripsi Data di Go Pakai AES (Contoh Praktis)
Enkripsi & Dekripsi Data di Go Pakai AES (Contoh Praktis)
Kalau kamu bikin aplikasi yang butuh ngamanin data (misalnya password, token, atau informasi sensitif), kamu pasti perlu enkripsi. Salah satu algoritma paling populer dan kuat adalah AES (Advanced Encryption Standard). Di Go, saya bisa pakai AES dengan cukup mudah lewat paket bawaan crypto/aes dan crypto/cipher. Dalam contoh ini, saya bakal pakai mode CFB (Cipher Feedback) karena fleksibel dan bisa langsung dipakai buat data dengan panjang sembarang. Konsep Singkat AES Simetris: kunci yang dipakai buat enkripsi dan dekripsi sama. IV (Initialization Vector): angka acak yang bikin hasil enkripsi beda-beda walaupun plaintext-nya sama. CFB mode: mode enkripsi yang cocok buat data bergaya stream, jadi nggak perlu padding ribet. Contoh Program Go Copy package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/base64" "fmt" "io" ) func generateRandomKey() ([]byte, error) { key := make([]byte, 32) // AES-256 _, err := rand.Read(key) if err != nil { return nil, err } return key, nil } func encrypt(plaintext []byte, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) return ciphertext, nil } func decrypt(ciphertext []byte, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } if len(ciphertext) < aes.BlockSize { return nil, fmt.Errorf("ciphertext too short") } iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCFBDecrypter(block, iv) stream.XORKeyStream(ciphertext, ciphertext) return ciphertext, nil } func main() { plaintext := []byte("Ini data rahasia yang harus diamankan 🔒") key, _ := generateRandomKey() ciphertext, _ := encrypt(plaintext, key) fmt.Println("Ciphertext (base64):", base64.StdEncoding.EncodeToString(ciphertext)) decrypted, _ := decrypt(ciphertext, key) fmt.Println("Decrypted text:", string(decrypted)) } Cara Kerjanya Bikin kunci acak (generateRandomKey) → panjang 32 byte (AES-256). Enkripsi (encrypt) → bikin IV acak, lalu enkripsi plaintext pakai AES-CFB. Dekripsi (decrypt) → ambil IV dari awal ciphertext, lalu kembalikan data ke bentuk asli. Main → demonya: enkripsi string, print hasil base64, lalu dekripsi lagi buat bukti bahwa datanya aman bolak-balik. Output Contoh Copy Ciphertext (base64): QZrR9m0dpN9Yk3cGYn1xY1Hu0+8EJz6fC4oYc5V1qDqPV6Y= Decrypted text: Ini data rahasia yang harus diamankan Kesimpulan Dengan AES + CFB mode di Go:
chevron-up