Yazılımın ilk 250 günü - Part 13

8 dk okuma

121. Gün

Sabah takvime bakınca çok şaşırdım. Çünkü bugünün Çarşamba olduğunu sanıyordum. Bu hafta nasıl geçti hiç anlamadım. Yapmak istediklerimi zamanında yapamadım. Bugün kendi koduma bakınca solid’deki OCP (open-closed principle)’nin cinayetinden sorumluymuşum gibi hissettim. Çünkü hem open for extension hem open for modification oldu özellikle bugün yazdığım koda bakılırsa. Daha önce yaptığım hataların farkına varıp sonra yapmamaya çalışıyorum. Yeniliyorum. Sonra tekrar deniyorum.
//bullshit mode on // in free lang
do {
the same things
}
while (still you don’t know how to implement object oriented design in a correct ways)
gibi bir durum olmuyor. daha çok: 
attemptCounter = 0;
while( you don’t know how to implement your ideas in a solid way)
{
tryFailTryAgainFailBetter(effort, labor, time, experience, performance);
attemptCounter += 1;
if (you were satistied from your work and its results) {
things gonna be okay in a desired way somehow;
then you can get out from loop;
}
hide “the way you crawl along, failed attempts, etc”;
show “the result as (fail || success);
}
//bullshit mode off
Bugün genel olarak aynı yerlerde çokça takılı kaldım. Bu da kendi hatalarımdan kaynaklanıyordu. Akşam hatalı yerleri düzelttim. Yarın daha hızlı olacağım.

122. Gün

Günün başında yine PHP kısmındaki eksiklerimi düzeltiyordum. Sonrasında güvenlik ayarlarını tamamlayacaktım. Ama frontend kısmına yöneldiğim için orası kaldı. Giriş kısmının çok çok benzerini yaptığımı düşünüyorum. Ama pixel perfect olmadığını söylemeliyim.

Bugünlük bu kadardı.

123. Gün

Bugün yaptıklarıma bakıyorum. Aslında az gibi görünüyor fakat ben tatmin oldum açıkçası. Özellikle Javascript ile frontend’de mühalelerde bulunmak mükemmel keyifli ve öğretici. Bugün en çok o yüzden mutluydum. Bilmediğim ya da kullanamadığım şeyler olsa da bir şekilde (sizin de yardımınızla) kullanabilmek çok güzel bir duygu.

Yarın sabah ilk iş IP ile ilgili kısımları tamamlamak planımda. Veritabanı tablosunu düzeltme, IP koruması özelliğini ekleme ve ona göre giriş sağlama, frontent’de kayıtlı ip’leri gösterme (yine javascript devreye girecek basitçe).

İş dışında ise konuşacak olursam (hobi niyetine konularda), daha önce çokça kez agar.io oynamıştım. Agar.io chat’inde istemediğim kişileri muteleme, bot mesaj gibi konuları javascript ile yapmak istiyorum boş zamanımda (çok zor olduğunu sanmıyorum). Yine aynı oyunda bot yapabilir miyim diye düşünüyorum. Örnekleri github’ta var ama biraz karışık geldi şu aşamada. Ama en çok yapmak istediğim de o. (Evet biraz gereksiz görünebilir bu düşünceler ama ilgimi çekiyor).

Diğer konu ise hobi değil aslında. Yıllardır dizi-filmleri türkçe altyazılı izlerdim. Artık ingilizce altyazılı olarak izlemeye başladım. Anlamadığım yerler fazla olsa da anladığım yerler de az değil. 22 bölüm person of interest bu şekilde bitti. Dile maruz kalıp gelişim sağlanır diye umuyorum.

Ek olarak sizin gönderdiğiniz “fast inverse square root” konusuna da baktım. Açıkçası hexadecimal şekilde verilen magic number ile 32 bit işlemcilerde yapılan bit hesaplamasını anlamadım. Byte shifting’ten bahsedilmiş ama orada tıkandım (asıl önemli olan yer de o gibi, newton-raphson metodunu kavradıktan sonra). Yarın yine bakacağım çünkü ufkumun açılmasından çok soru işaretleri bıraktı.

124. Gün

Günün çoğunluğu veritabanına json verisi ekleme, güncelleme, okuma konusu ile geçti. Kayıtlı ip ekleme ve silme işlemi henüz yapılmadı ama altyapısı kısmen kuruldu. Yarın ilk iş kalınan yerden devam edilecek. Günün en zorlayıcı yanı sql sorgusu için prepared statement hazırlama konusu idi. Daha önce veritabanı işlemleri için kurulan sisteme entegre edilmeye çalışıldı ilk önce fakat başarılı olunmadığı için sonrasında bu problem için geçici çözüm oluşturuldu. Genel bir çözüm olmadı, sadece güncel ihtiyaçların karşılanması için kuruldu şu aşamada. Ama daha iyi hale getirilmek istenirse genel çözüm zaman alacağı için o kısım future development olarak kalacak.

125. Gün

Dile kolay 125 gün olmuş günlük olarak rapor tutmaya başlayalı. Toplamda 5 ay oldu neredeyse. Bu kısa farkındalıktan sonra bugüne gelelim:

Veritabanından bilgileri çekme konusu, güncelleme konusu için json_set(), json_delete(), json_array_insert() gibi mysql fonksiyonları kullanılmaya çalışılmıştı. Fakat verimli sonuç alınmadığı için eski yöntemler (sizin de bahsettiğiniz select ile veriyi çekip decode etmek ve işlemek sonrasında encode edip tekrar yazmak gibi) kullanıldı. Okuma, silme işlemleri yapıldı. Geriye sadece olan ip’lerden birini güncelleme ve yeni ip ekleme kısmı kaldı. Aslında hepsi de aynı şey düşününce (update işlemi), sadece ayrı bölümlere ayrıldı.

Frontend kısmında bugün javascript’e zaman ayrıldı tekrar. Aslında daha basitçe yapılabilir fakat biraz da challenge olması için yapılmaya çalışıldı.

126. Gün

Bugün yapmak istediğim şeyleri tamamladım. Çok daha kısa zamanda biteceğini umduğum şeyler ekstra zaman aldı. Zaman yönetimi konusunu pratikle daha da iyileştireceğimi düşünüyorum. Javascript ya da PHP farketmeksizin kurgular oluşturup yaratıcı eylemlerde bulunmak çok güzel bir his oluşturuyor (Özellikle JS'in bir albenisi var. Sözdizimi daha tatlı ama teknik anlamda profesyonel yorumlarım henüz yok). Aynı şekilde bir problem çözmek için de farklı yaklaşımlar bulmaya çalışmak, farklı yaklaşımları anlayıp kavramaya çalışmak da çok güzel bir hissiyata neden oluyor.

Genel olarak şu aşamada karşılaştığım problemlerin çözümsüzlüğü bulunmuyor. Karşılaşılan problemler elbette çözülüyor fakat en büyük arzum “bad code”a sebep olmadan, çok şık ve zarif çözümler oluşturabilmek. Henüz o seviyede değilim. Bunun farkındayım. İyi bir yazar, sanatçı gibi olmak istiyorum. Sesim güzel mi, kalemim mürekkebini ilhamla mı dolduruyor, kıvrak bir bedene mi sahibim, ya da zeki ve dahice fikirlerim mi var hiçbir fikrim yok. Sadece yaptığım işten bir sanat dalı ile uğraşırmışçasına, her sabah ilk kez seyircinin karşısına çıkacak ve karanlığın içinden perdeyi aralayıp seyirciyi ve sahneyi izleyen bir tiyatro oyuncusu gibi, dünya rekorunu kıracağı gün Usain Bolt’un adanmışlığını kendimde bulmaya çalışıyorum. Ve sadece istemek değil, birçok gün aynı heyecanı taşıyorum, yaşıyorum, bir sorunu çözdüğümde sessizce kendi içimde havalara uçuyorum. Böyle konuşuyorum ama bu bahsettiklerim "n'olur beni atmayın, ben böyle iyiyim, şöyle tırı vırıyım" seviyesindeki ucuz ve basit gayeler ile yazıya dökülen düşünceler değil, içten gelen seslerin yankısı sadece. Elbette biraz fantastic örneklerdi ama yine de yazmak istedim.

127. Gün

Zamanın yavaşlaması gerekli, çok hızlı hareket etmekte.

Bugün ajax nedir ve nasıl kullanılır bu konuya baktım genel olarak. Ne olduğunu daha önce araştırıp görmüştüm fakat kullanmamıştım. Açıkçası kullanmanın da bir zorluğu pek yok hatta (.png uzantılı dosyayı bilgisayara yükleyemeyip bilgisayardan çekemesem de) kullanması daha güzel bir yöntem. Tam olarak tabii ki öğrenmedim ve kullanmadım fakat çok zaman alacak bir konu gibi durmuyor. Biraz daha matematiksel bir denklem kullanmak gibi geldi Ajax konusu. Nesne-ler hazır, property’ler hazır. Sadece denklemi doğru şekilde oluşturmak ve sonuçları bulmak için hesaplamanın yapılması gerekiyor. Elbette bu analoji birçok şey için de geçerli fakat Ajax’ın yapısı gereği bu formülize halini kullanabilmek yeterliymiş gibi geldi.

128. Gün

Dün XMLHttpRequest nesnesini kullanarak get ya da post metodu ile veri alışverişinin nasıl sağlandığını öğrenmiştim. Bugün de yine aynı sisteme dayalı fakat daha kolaylaştırılmış fetch api ile bu işlemlerin nasıl yapıldığını öğrendim, kendi kodumda da deneyip biraz pratik yapmaya çalıştım.

XMLHttpRequest and the Fetch API same origin policy’yi takip etmekteymiş. Yani, diğer kaynaklardan gelen cevapta doğru cors header’ı yoksa sadece aynı kaynağa request gönderebiliyoruz. Kaynaktan kasıt ne peki? Protocol, host, ve port’u (eğer belirtilmişse) aynı olması gerekli.

Genel olarak ajax-fetch api ile veri alışverişi konusunda bolca okumalar yapıp pratikte de yazmaya çalıştım. Farklı kullanım şekilleri olsa da genelde aynı kapıya çıkıyorlardı.

Günün sözü:

God helps those who help themselves.

129. Gün

Bugün React Native’e giriş yapıldı. Çok basit şekilde component’ler oluşturulup görseller yaratıldı. Genel olarak konseptin anlaşılmaya çalışıldığı bir gün oldu. Yarın daha fazla ilerleme kaydedileceğini düşünüyorum.

Akşam yardım ettiğiniz için ayrıca çok teşekkür ederim.

130. Gün

Bugün moralim bozuldu takılı kaldığım yerlerden dolayı. Sonlara doğru artık yılanın zehri vücudunun her yerine yayılmış ve geçici felç geçiren bir hayvan gibi bilgisayarın başında kaldım. O an uğraştığım ya da uğraştığımı sandığım problemlere dar bir bakış açısıyla bakıp çözümü akıllıca düşünüp bulmak yerine her tuşa basarak sorunu kaldırmaya çalışıyordum. Çünkü sinir etmişti çözememek. Sonlara doğru kendi düşüncelerim beni yemeye başlamıştı: “Yapamıyorsun işte, senden yazılımcı ya da bi şey olmaz oğlum, zorlama, pes et”. İçimdeki Tyler Durden beni aşağılamakta, kendi kendimi dövmemi, kendime zarar vermemi istemekteydi. Kabusvari düşüncelerin aklıma gelmesini engellemeye çalışırken baktığım ve anlamaya çalıştığım konulara odaklanamıyordum. Sanki dünyanın sonuydu. Kendimle sanal bir yüzleşmeydi sanki (neyin yüzleşmesiyse artık).

Daha geniş açıdan düşündüğümde ise bazı zamanlar problemler yaşayabilirim. Her zaman istediğim şeyleri başaramayabilirim. Böyle bir durumla karşılaştığımda üzülebilirim. Çünkü meme isteyince ve annesi vermeyince bebek ağlar. Annesi hala vermiyorsa daha da ağlar. Ama meme istemeyi bırakmaz. O yüzden ben de meme istemeye devam etmeliyim (Benim istemem ne alaka öyle değil mi, bu nasıl bi mantık Buğra?). Bir kere ağlayıp memeye küsmek gibi bir durum söz konusu olamaz. Daha çok ağlayıp, çırpınıp, yırtınıp o memeyi almalıyım. Er ya da geç alacağım.