Öğrendiğim şeyleri ara ara paylaşmak hoşuma gitti. Yazmaya devam.
Jim Keller
Bu hafta Jim Keller’in bir röportajına denk geldim. AMD, Intel ve Apple gibi şirketlerde çip tasarımı yapmış, efsane olarak adlandırılan bir adam. Çok çok farklı bir dünyayı anlatıyor. Kodumuzu çalıştıran işlemciler alttan alta ne gibi optimizasyonlar yapıyor, insan öğrenince şaşırıyor.
Örneğin kodun (ya da instructionların) parçalara bölündüğünden, bu parçaların paralel bir şekilde çalıştırıldığından haberim yoktu. Programın yapmaya çalıştığı şey değişmiyor, ancak instructionların çalışma sırası farklı olabiliyor. Ne kadar büyük parçalar keşfedilirse o kadar iyi. Bu sebeple CPU’lar, koddaki branchlerin de (if, while gibi) ne yöne gideceğini tahmin edip bunları da parçalara dahil etmeye çalışıyorlar
Roportajda Jim Keller’in vurguladigi gibi, ayni kod CPU uzerinde hicbir zaman ayni çalışmıyor.
Pek alttaki katmanlardan haberdar olmayan benim gibi developerlar için müthiş bir kaynak. İlk 20 dakikasını kesinlikle izleyin.
En Gurur Duydugum Şey
Bu hafta evde eşyalarımı toplarken eski şeylere denk geldim. Arasında 5 sene önce tamamladığım sensorlu bisiklet ışığını buldum. Benim için programlamaya giriş demekti bu cihaz.
Hala ilk taktigim pillerle duruyor ve isin en guzel yani hala calisiyor. Uyku modu gercekten ise yariyor olmalı.
Sonra evi toparlamaya devam ederken bunun en gurur duyduğum şeylerden biri olduğunu fark ettim.
Bunu yapmaya başlamadan önce programlama bilmiyordum. AVR 8 bit bilgisayarlara dair herhangi bir ipucum yoktu. 8 bitlik bir bilgisayara kod nasıl atılır bilmiyordum. Elektroniğe dair bir şey bilmiyordum. Devre yapmaya dair bir şey bilmiyordum. Lehim havya nedir bilmiyordum.
Sıfırdan başladım, Arduino ekosisteminin yardımıyla programlama öğrendim. Sonra ordan direkt 8 bitlik ATTıny 13’u programlamaya geçtim. Collin’s Lab bölümleriyle elektronik komponentleri öğrendim. Bir şekilde 600 sayfalık mikrocontroller dokümanlarını okumayı öğrendim ve sonunda bir şekilde bitirmeyi başardım.
Büyük bir motivasyon oldu bana ve sonra da programlamayı hiç bırakmadım ve kariyerim haline getirdim. Benim için önemli bir dönüm noktasıydı.
Bu süreçteki adımları da bu bisiklet ışığını Arduino üzerinde yapıyormuş gibi dokümante ettim. Buradan okuyabilirsiniz.
Vultr ve IPv6
Vultr adlı VPS sunucu sağlayıcısını duymuşsunuzdur. Şu anda en ucuz VPS’leri onlardan alabiliyorsunuz. Atlanta konumundaki seçenekler şu şekilde:
2.5$ epey iyi bir fiyat. Ben de bir tane alıp VPN kurmayı planladım. Ancak tabi üstte ufak bir uyarı var. Bu alacağınız VPS’de sadece IPv6 var. IPv4 yok.
IPv6 ile IPv4 arasındaki farkları biliyorum ancak sadece IPv6 ile erişilebilir olacak bir sunucunun pratikte ne gibi problemler çıkarabileceğine dair herhangi bir fikrim yok.
Pek fazla heyecanlamaya da gerek yokmuş. Türkiye’de internet sağlayıcıların IPv6 desteği yok gibi bir şey. Hem evdeki Türksat’ta hem de telefondaki Vodafone ile IPv6 adresi alamadım. Vultr’dan sadece IPv6 olan bir VPS açarsanız SSH yapmanız bile mümkün değil.
IPv4 adreslerinin tükenmesine karşı ISP’ler, Carrier Grade NAT kullanıyorlarmış. Bir şekilde IP adresini birden fazla kullanıcı arasında paylaştırıyorlar.
Snippet Manager
Uzun zamandır eksikliğini hissettiğim bir şeydi. Sonunda bir snippet manager kurdum bilgisayara. O da MassCode oldu.
Pek kod atmıyorum içine. Genelde işle alakalı şifre, nginx config’i, arada bakmak gereken SQL sorgularını kaydediyorum.
Şimdilik memnunum, tavsiye ederim.
MySQL Full Text Search
Vaktinizin %20’sini ayırarak, işin %80’ini tamamlamanıza olanak sağlayan araçları severim.
Bir iş için full text search çözümüne ihtiyacım vardı. Elasticsearch kurmak maliyetli ve meşakkatli geliyor bazen. Bu sebeple sitede zaten kullanılan MySQL’daki toollara bakmaya başladım.
MySQL’in da bir full text search sağlayan ındex’i bulunuyor. Elinizdeki CHAR, VARCHAR, TEXT sütunlarına bu ındex’i ekleyebiliyor ve sorgu atabiliyorsunuz. Vaktimin yüzde %20’si ile işin %80’ini halledebilirim gibi geldi ve implemente ettim.
Bendeki versiyon 5.7 idi. Belki 8.0’da bu problemler giderilmiştir, tam bilemiyorum ancak hiç memnun kalmadım. Şunun gibi sorunlar yaşıyorum:
- Aynı dataset sunucudaki versiyonda verdiği sonuçları lokaldeki kurulumda vermiyor. Aynı arama farklı sonuçlar veriyor. Bir kurulum Ubuntu üzerinde 5.7.24, diğeri Maç üzerinde 5.7.27.
- Skorlama ve sıralama özellikleri tam beklediğim gibi çalışmıyor. Antik Roma araması, antik ve roma kelimelerini arıyor ancak “antik roma” aramalarını öne çıkarmıyor. “Antik Roma” şeklinde tırnaklar içinde arayarak exact match bulabiliyorsunuz ancak bu sefer de sadece “antik” ve sadece “roma” araması yapmamış oluyorsunuz.
Basit bir blog için belki önerilir ancak ondan ötesi için kesinlikle önermem. Dokunmayın.