Müşteri senkronizasyonu

A müşterisiyle yıllar önce bir projeye başladığımızda haberleşme için bir protokol tasarlamıştık. Daha doğrusu bana tasarlanmış bir protokol verildi ve bunu programlamam istendi. Utana sıkıla bu protokolü programladım. Utanç verici kısmı tasarımdaki ileri görüş eksikliğiydi ama iş işten geçmişti. Daha sonra bu protokol ile aynı amaçlı başka makineleri B ve C müşterilerine de sattık. Protokol aynıydı ama makinelerde ufak tefek farklar vardı. Bugüne kadar bir sorun olmamıştı.

Bugün C müşterisinin yeni projede diğer müşterilerde olmayan bir özellik istediğini öğrendik. Bu fonksiyon nedeniyle protokolde bir değişiklik yapmamız gerekiyor. Aslında kolay bir değişiklik ve protokolün tasarımı buna izin veriyor.

Bu kadar kolay bir değişikliğe rağmen programcıların konuşmak istediği bazı problemler vardı. İlginç olan bu problemlerin protokoldeki değişikliğin nasıl yapılacağı, daha doğrusu hangi müşterilerle nasıl anlaşılacağı üzerineydi.

Yöntemlerden biri her müşteri için küçük bir konfigürasyon yaparak temelde aynı olan protokolde müşterilere göre ufak tefek değişikliklerle programlamaktı. Bu şekilde müşterilerin hepsiyle anlaşmaya gerek kalmayacaktı ama aynı versiyon için üç konfigürasyon hazırlamamız gerekecekti. Bunun masrafı çok fazla değildi ve en azından sadece bizim tarafımızdan yapılabilecek bir şeydi. Kimseden bir haber beklememize gerek olmayacaktı ama ileride proje bölümü makineleri hazırlarken doğru konfigürasyonu kullanmak zorunda kalacaktı. Dolayısı ile şef bu çözümü istemedi.

Diğer bir yöntem, bu değişiklik isteğini üç müşteriye de sunmak ve hepsinin onayını almak. Bunun kolay ve iyi tarafı bir taşla üç kuş vurmak ama sorunu da açıkça ortada. Üç tane onayın çıkması hemen olmayacaktır ve C müşterisi makinesini haftaya almak istiyor.

Şefin istediği çözüm bu ama programcılar bu noktada epey temkinli. Değişiklik yapılacak kısım protokolde reserved olarak işaretlenmiş blokların birinde. Yani aslında şu an hiç kimse tarafından kullanılmıyor. Sunulan sorun ise şu. Reserved kelimesinin nasıl yorumlanacağı kararlaştırılmamış. Yani müşteri o bloklara hiç mi bakmıyor yoksa orada 0 değerini mi bekliyor bilmiyoruz. Tecrübelerimiz müşterilerin bu gibi durumlarda çok beklenmedik şeyler yapabildiğinizi gösteriyor ve hatta sistemlerin çöktüğü vakaları da biliyoruz. Yani geçmişte hiç kullanılmayan bir alana 0 yerine 1 yazdığımızda müşterinin kendi programının çöktüğü durumlar oldu. Böyle bir durumda müşteri dünyanın değişik yerlerindeki makinelerinde bizim yazılımı güncellerken kendi yazılımını da güncellemek zorunda kalacaktır. Teknik olarak kolay bir olay olmasına rağmen en çok sorunun çıktığı durumlardan biridir bu. Bu tür sistemler güvenlik nedeniyle internet üzerinden güncellenmiyor. O zaman bir servis elemanı ya da müşterinin eğitilmiş bir elemanı bu işi yapmalı ama genelde o kadar iyi elemanlar bulunamıyor ya da o an başka bir yerde oluyorlar. Sistem düzgün test edilmediyse bu hata servis elemanı sahadan ayrıldıktan sonra ortaya çıkabiliyor. Böylece masraflar da katlanıyor.

Sonunda tabii ki şefin istediği çözümü şerh koyarak yapacağız. Asıl merak ettiğim şey yarına kadar bütün müşterilerden onay gelecek mi? Yoksa onay göndermeyenleri bir sonraki güncellemede bir sürpriz mi bekleyecek?

Yarın bu haftanın son iş günü. Ondan sonra da bir daha Noel’e kadar resmi tatil yok. Bu nasıl bir yılsa artık, hepsi hafta sonuna geliyor. Bu uzun hafta sonunu iyi kullanıp yeniden aldığım tripodumla güzel avlara çıkmayı planlıyorum. Umarım bu sırada elimi olduğundan daha fazla sakatlamam.

Artroz

Yaklaşık iki ay kadar önce, havalar biraz ısınmaya başladığında bahçede çalışmaya başlamıştım. Epey yaban otu yolmam gerekiyordu ve bu işin başlarında sol elimi sakatlamıştım. Herhangi bir şeyi başparmağım yardımıyla tuttuğumda elimin üst tarafında bileğe kadar bir bölgede ağrılar oluyordu. Genelde sağ elimi kullandığımdan bunu pek sorun etmedim.

Arada bu kadar zaman geçip de hala iyileşmeyince bir doktora görüneyim dedim. Doktorlarla ilişkilerim fena değildir. Ne derse yaparım. Başlangıçta yani. Zaman geçtikçe ilaçlara devam ederim ama egzersiz ve benzer şeyleri sallamaya başlarım. Geçen hafta bir doktor bulduk ve bugün için randevu aldık. Akşam iş çıkışı doktora gittim. Muayenehaneye girince maske takmayı unuttuğumu farkettim ama her gün işe trenle gittiğimden yanımda bir maske vardı. Hemen onu taktım ve boş bekleme odasında hasta formunu doldurdum. Ondan sonra zaten hemen beni çağırdılar.

Doktora durumu anlattım ve nerelerin ne zaman ağrıdığını gösterdim. Bunun üzerine biraz elle kontrol etti ve artroz başlangıcı dedi. Ben de her anormal insan gibi bu nedir diye sormadım. O da anlatmadı. Reçeteye cebire (Daha modern ve Türkçe’sini bulamadım, kırık ve çıkık kemikleri yerinde tutmak için kullanılan tahta, mukavva veya tenekeden yapılmış, üzeri sargıyla kaplanan levha, süyek, koaptör demekmiş) yazdı ve bunu alıp geceleri yatarken kullanmamı söyledi. Önümüzdeki ay bir daha gidip iyileşme olup olmadığına bakacağız.

Bu cuma gidip o aleti alayım bari. Şimdilik sol elime ihtiyacım var hala.

Bir klasik müzik cenneti olarak youtube

Son zamanlarda youtube’da Yale Courses kanalındaki müzik teorisi derslerini takip ediyorum. Oldukça basit bir yapısı olan ders, takip etmesi kolay. Sınavlara da girmeme gerek olmadığından benim için biçilmiş kaftan.

Bu hafta sonu arasıra klasik müzikle ilgili yaptığım başka bir şeyi daha yaptım. Konser provalarının birini youtube’da seyrettim. Orkestra şeflerinin nelere dikkat ettiği, neleri farkedebildikleri inanılmaz geliyor bana. Gitgide zayıflayan işitme duyumla tek başıma algılayamayacağım şeyleri biraz olsun görebilmek çok iyi geliyor. Sadece şeflerin değil, orkestra üyelerinin performansları da harika. Şefin bazen çıkardığı benim için anlamsız sesleri ya da öznesi yüklemi olmayan cümleleri anında anlayıp bir sonraki denemede isteneni verebilmelerini hayranlıkla seyrediyorum.

Seyrettiğim video Beethoven’ın 5. senfonisinin provasıydı. Sadece prova da değildi. Avusturyalı şef Nikolaus Harnoncourt bu filmde ara ara hem seyircilere hem de orkestra üyelerine Beethoven’ın bu eserinde neleri anlatmaya çalıştığını kendi araştırmalarına, fikirlerine dayanarak anlatıyor.

Ardından belki başka bir şefin aynı senfoni üzerine yorumlarını bulurum diye listedeki diğer videolara göz attım ve aşağıdaki videoyu buldum. Bu videoda Gerard Schwarz Beethoven’ın hangi düşünce ve duyguları anlattığını değil de hangi teknikleri kullandığını anlatıyor. Bu anlatılanları anlamak için Yale üniversitesi müzik dersini takip etmenin yetmiş olması ise beni epey mutlu etti.

Daha sonra Gerard Schwarz’ın aynı konseptte başka videoları olduğunu da gördüm. Benim gibi amatörler için oldukça büyük bir hazine ve bu hazineyi yağmalayacağımdan şüphem yok.

Egzotermik reaksiyon

Egzotermik tepkimelerde çevreye enerji verilir. Bu deneyde çevreye verilen enerjiyi yine Arduino’ya bağlı bir termometre (DS 18B20 sensörüyle) ile gözlemeye çalıştım. Bu basit deneyde 50 ml kadar suya epey toz deterjan ekledim. Aşağıda sıcaklığın değişim grafiğini görüyorsunuz.

Toz deterjanın suda çözünmesi tepkimesinin zamana karşı sıcaklık grafiği

Sıcaklığın hızlı yükselmeye başladığı noktada deterjanı suya döktüm. Sıcaklık iki dakikada yaklaşık 4 derece yükseldi. Ondan sonra yükselme devam ettiyse de yükselişin hızı azaldı.

Büyük oyun

Primatların gelişimi ile doğada yeni bir huzursuzluk başlamıştı. Özellikle ilk insanlarla bu durum hayvanlar arasında hissedilir hareketlenmelere dönüşmüştü. Eski hikayeleri bilenler dev canlıların bir zamanlar dünyada nasıl hüküm sürdüklerini, kendilerinin ise ne zor şartlarda hayatta kaldıklarını çocukların tüm itirazlarına rağmen her fırsatta anlatmaya başladılar. Bu hikayelerin daha sık anlatılması sonucu yaşlıların endişesi de yavaş yavaş çocuklara geçmeye başladı. Çocuklardaki bu değişiklik de dikkatten kaçacak boyutları aşınca artık bir sorunlar karşı karşıya olduklarını ve bunu ortaklaşa çözmeleri gerektiğini düşünen büyük bir grup ortaya çıktı ve genel bir toplantı yapmanın zamanının geldiğini ilan etti. En son toplantının üzerinden milyonlarca yıl geçmişti. Birçoğu ise böyle bir toplantıyı daha önce duymamışlardı.

Bu toplantı bir kısım tarafından inatla ikinci genel toplantı diye anılsa da yapılan ön oylama sonucunda tarihe birinci büyük toplantı adıyla geçti.

Birinci (ikinci) genel toplantı

Toplanan kalabalığın büyük çoğunluğu bu telaşa  anlam veremiyordu. Kendilerine yaşlılar diyen azınlık ise gençleri bir kez daha anlayamıyordu. “Tabii, siz dinozorları görmediniz. Buradaki herkesin iki üç katı büyüklüğüne kadar her şeyi yiyorlardı. Kalanlar de zaten kendi türlerindendi.” diye bir giriş yaptılar. “Evet, sonra şansımıza gökten düşen dev bir dağ onları ortadan kaldırdı ama bu seferki tehlike daha farklı, daha ciddi. İnsan dediğimiz canlılar genelde çok büyük avlar peşinde değil ama bir bakıma daha acımasızlar. Zevk için bile avlıyorlar ve sadece kendi güçleriyle değil. Buldukları her şeyi kullanıyorlar. Çoğalmaya da başladılar. Her yerde yaşayabiliyorlar. Gelecek hiç parlak değil.” Tabii ki bu kadar dayanaksız ve karamsar söylemler henüz yeni yeni gelişmeye başlayan türler için bir anlam ifade etmiyordu. “Neden öyle olsun ki? Ya bizden biri o kadar güçlenirse? Belki de çok kolay bir şekilde denge kurulacak. Bu kadar çabuk karamsarlığa kapılmamak lazım. Dünya çok büyük, herkese rahat rahat yeter.”

Beş gün süren tartışmalar sonunda bazıları için kesin ama kayıtlara geçen haliyle olası bir tehlikeye karşı kademeli ve kapsamlı bir plan yapıldı. Bu plan çok büyük fedakarlıklar gerektiriyordu. Önce kurtlar insanlara yanaşacaktı. Bu beklenmeyen hamle ileride daha farklı casusların kabul edilmesine imkan verebilecekti. Kurtların insanların tarafında çalışması bütün hayvanlar için tehlike oluşturacaktı ama büyük resme baktıklarında bu fedakarlığı kabul ettiler. Daha sonra sıra kedilere gelecekti. Bu şekilde insanların arasına denge nifağı sokulacaktı. Daha başka hayvanlar da insanların hizmetine girecekti ama bir çoğu uzak durmalıydı. Şüphelenmemeleri gerekiyordu. Bunlar hayvanların nomalde kabul etmeyecekleri şeylerdi ama ya korkuları gerçekleşirse diye çok daha korkunç ayrıntıları da ele aldılar. Örneğin fareler insanların yapacağı her türlü deneye katlanmalıydı. Planın en önemli maddesi buydu. Kimse başlangıçta neden bunun hayati önem taşıdığını anlamamıştı ama goriller bunun kabul edilmesi için ellerinden geleni yapmışlardı.

Toplantı dağıldıktan sonra sıradan ölüm kalım savaşı günlerine ve gecelerine geri döndüler. Zamanı geldiğinde ilk kurtlar insanlara yaklaşmaya başladı. Bu yakınlaşma kurtlara kolayca yiyeceğe erişme şansı getirirken aynı zamanda insanların savunmasında çalışma görevi demekti. Başlangıçta zaten önceleri de anlaşmadıkları canlılarla kavga etmeleri, hatta onları öldürmeleri anlamına geliyordu ama asıl fedakarlık ileride belirginleşti. Kurtların şekilleri ve özellikleri de değişmeye başladı. Bu değişime daha alışamamışlardı ki sağlık sorunları da ortaya çıktı. Bunların daha başlangıç olduğunu bilmelerine rağmen plana sadık kaldılar.

Kısa süre sonra kediler de insanlara yaklaştı. Bu kafa karıştırıcı bir yakınlaşmaydı. İki taraf için de. Kediler kesinlikle bir işe yaramıyordu ama bir şekilde köpeklerin o zamana kadar kazandığı bütün hakları hemen elde etmişlerdi. Karşılığında insanlar keyifle tanışmış oldu. Bu tabii ki çalışan köpek sınıfında büyük huzursuzluklara yol açtı. O zamandan beri kedileri her gördüklerinde bu hoşnutsuzluklarını görsel ve sesli olarak belli ederler ama kediler buna da dayanmayı başardılar. Plan her şeyden önce geliyordu.

Değişik türlerle yakınlaşmalar böyle yaygın olmasa da devam etti. Köpeklerin bile fonksiyonları azalmaya başlamıştı. İnsanların işlerini yaptırmak için insan çalıştırmaları hayvanlar tarafından şaşkınlıkla karşılanmıştı ve bu duruma karşı hazırlıklı değillerdi. Köpekler bu değişimi korkuyla takip ederken kedilerin umrunda değildi. Kedilerin tek sorunu insanların eğlence adı altında eve çok fazla sayıda canlı doldurmasıydı. Buna da dayanılmalıydı.

Makinelerin doğuşuyla hayvanlar için büyük problemler başladı. Doğal ortamlar ellerinden büyük bir hızla alınmaya başladı. Bunun yanında farelerin dininde anlatılan büyük felaket zamanı da gelmişti. Tavukların, balıkların, domuzların dinleri de buna benzer kehanetlerle doluydu ama bunların gerçekleşmesi sadece plana olan inançlarını kuvvetlendirmeye yaradı. İnsanlar hayvanları gerçekten de katletmeye başladı. Birçoğunu yemek için, bir kısmını da eğlence olarak. Fakat küçük bir kısmını büyük planları için kullanmayı seçtiler. Ölümsüz olmak, her şeyi anlamak için bunları en vahşice yöntemlerle kullandılar. Geri dönmeyeceğini bilerek uzaya göndermeden en basit ilaç deneylerine kadar her işte bir kobay kullanıldı. Bu deneylerin sonuçları insanları heyecanlandırmayı başarmıştı. Fareler verdikleri kayıplar sayesinde bir çok problemin çözümüne katkıda bulundu. Diş çürümelerini gideren, kaybedilen organları yeniden çıkarabilen ilaçlar bulundu. Kanserin bir sürü çeşidine karşı etkili yöntemler geliştirildi. Yaşlanmayı durduran ve zekayı geliştiren genetik değişiklikler keşfedildi. İnsanların önünde artık tanrı olmak için hiçbir engel kalmamıştı. Hayvanların gözünde uzun zamandır tanrıydılar ama kendi fantezilerine yeterli duruma gelme ümitleri yeni yeni canlanmaya başlamıştı.

Bu esnada insanların önüne beklenmedik iki engel çıktı. Birincisi yapay zeka dedikleri bir şeydi. Kendi yapabildikleri her şeyi çok daha hızlı yapabilecek bir sistemdi. Bunu kontrol etmekte zorlanıyorlardı. Yapay zeka ayrıca insanların daha önce yaptığı deney sonuçlarını çok daha iyi değerlendirdiğinden hayvanlara karşı da vahşet sergilemiyordu. İnsanların ürettiği ve daha sonra kendilerinin mükemmelleştirdiği makineler sayesinde ölüm gibi bir sorunları da yoktu. Bir bakıma insanların olmaya çalıştığı tanrılardılar. İkinci engel de anlaşılmaz bir şekilde insanların hala tanrı olamamalarıydı. Her türlü ilacı, yöntemi geliştirmelerine rağmen bunlar kendilerinde beklenen etkiyi göstermemişti, hatta bazı alanlarda büyük felaketlere yol açmıştı.

Güç dağılımında büyük değişikliklerin beklendiği bir döneme giriliyordu. Hayvanlar daha büyük bir tehlikenin yolda olduğunu hissedip, yükselen bu süper güce karşı ne yapabileceklerini konuşmak için bir toplantı yapmaya karar verdiler. İkinci büyük toplantı (bazi eski türlere göre üçüncü olarak da bilinir) için bütün canlı türleri temsilcileriyle haberleşildi. Toplantının bir sonraki ilk baharda insanlardan kısmen kurtulabilmiş büyükçe bir ormanda yapılmasına karar verildi.

Toplantı günü gelip çattığında ormandaki gergin bekleyiş hissediliyordu. Sabahtan beri bir kuş sesi bile duyulmamıştı. Hayvanlar alanda toplanmaya başlamıştı. Bazı küçük gruplar kendi aralarında durum değerlendirmesi yapmaya başlamışlardı. Bu sırada alana yaklaşan insanlar görüldü. Grup önce dağılır gibi oldu ama yaşlılar kaçmaya kalkanları durdurmayı başardı. Yeniden alana döndüklerine insanların da oldukça karamsar bir durumda olduklarını gördüler. Toplantı başlangıç saati geldiğinde yapay zekanın temsilcileri de ormana geldi. İnsanlar biraz rahatsız oldu, hayvanlar şaşırdı. Bu toplantı canlılar için diye tek tük itirazlar oldu ama yaşlılar hemen toplantıya geçilmesini istedi ve toplantı başladı. Fillerin temsilcisi söze “büyük plan sonunda bir canavar yarattık” diyerek başladı. Herkes bunu sessizce başlarıyla onayladı. Ardından yeni süper güce karşı bu büyük planda nasıl değişiklikler yapılması gerektiği tartışıldı. Toplantının büyük çoğunluğu insanların ve yapay zekanın temsilcilerinin birbirlerine sataşmasıyla geçse de sonunda eski plandan daha acı bir çözüm üzerinde anlaşıldı.

Bu esnada fareler bütün bunlardan habersiz hayatlarına devam etmekteydiler. Toplantıya çağırılmamışlardı.

Eşyaların yok oluşu ve buna karşı çözümler

Evde sık sık kullandığım şeyleri salonda bana ait olan bir yere koyuyorum. Bu yerler genelde çalışma masalarımın üzeri, dolaplarımdaki raflar ya da masaların kenarları oluyor. Buna rağmen eşyalarım sık sık kaybolur, çünkü benim eşyalarım çocukların da işine yarayabilecek şeylerdir. Cetvel, pergel, resim malzemeleri, tornavida takımları falan.

Tornavida takımlarım kalmadı artık. Pergel duruyor sanırım ama çocukların ilk geometri ödevlerinde o da kaybolacaktır. Resim malzemeleri neyse ki yeterince var.

Beni rahatsız eden bu eşyaların başkaları tarafından kullanılması ya da tüketilmesi değil, kaybolmaları ya da kırılmaları ve daha da önemlisi bana bunların söylenmemesi. Yani bir şeyi alıp kullandıklarında haber verseler, bu sırada kırıldıklarında söyleseler durumdan biraz daha iyi haberdar olabilirim. Eksik olan şeyleri zamanında alabilirim, belki kaybolmadan yerlerine koyma şansımız olabilir ama buna bir çözüm bulamadım hala. Bulabileceğimi de sanmıyorum açıkçası. Ha, çocukken ben farklı mıydım? Sanırım değildim. Bu konuda babama hak verebilirim artık.

Son olarak, tam hafta sonu geldi, tripodu alıp biraz fotoğraf çekeyim dedim. Masamın yanında duran tripodu alıp bacaklarını ayarlamaya başladım ki bir bacağın kırılmış olduğunu gördüm. Önce şaşırdım çünkü her gün tripodu orada görüyordum ama bir gariplik farketmemiştim. O bacağı söküp kırılmış yere bir bakayım dedim ama oradaki vidaların yivleri de kırılmış olduğundan sökemedim. Yeni bir tane sipariş verdim. Salı günü gelecekmiş. O zamana kadar elle çekimlere devam.

Başlıkta bunlara karşı çözümler demişim, değil mi? Çözümüm yok. Yani yeni almaktan başka bir çözümün yok. Kaybolmalara, bozulmalara, haber vermemelere karşı pes etmiş durumdayım. Her seferinde söz verilmesine rağmen tutulmuyor bu sözler. Hesapta para olduğu sürece benim çözümüm işe yarayacaktır. Ondan sonra başka bir çözüm ararım heralde.

Matematiksel büyüteç

Geçenlerde yine hobi olarak sayılar teorisine başlayayım dedim. Genel olarak matematik öğrenmeyi seviyorum ama tembelliğim nedeniyle hiçbir alanında çok ilerlediğimi söyleyemem. Neyse işte, önce basit olduğunu düşündüğüm bir kitap seçtim. Kitabın hoşuma giden yönü biraz deneye dayalı olmasıydı. Yani kitabın daha en başında da zor sorular vardı ama bunları ispatlamak yerine sadece bu şartı sağlayan birkaç örnek bulmamı istiyordu.

İlk konulardan biri Pisagor üçlüleriydi. Yani

\(a^2 + b^2 = c^2 \)

eşitliğini sağlayan tamsayılar. Soru da öyle c sayıları bulun ki yukarıdaki şekilde yazılan iki değişik a, b sayı çiftleri olsun. Tabii ki genel yöntemi sormuyordu. Örnek olarak 65 sayısını vermişti ve bu özellikteki bir sonraki c sayısını bulun diyordu.

\(33^2 + 56^2 = 65^2 \)

\(16^2 + 63^2 = 65^2 \)

İlk önce iki tam karenin toplamı olarak iki değişik şekilde yazılabilecek tamsayıları aramaya başladım. Bunları bulursam sorumu çözebilecektim. Ama belki de sadece sayıları deneyerek soruyu çözsem daha kolay olurdu. Neyse bu yeni soru üzerinde çalışırken bir sürü, benim için ileri derece teorem buldum ama onları anlamadan kullanmak istemedim. Bir tane de basit olduğunu düşündüğüm bir makaleye rastladım. O makaleyi okumaya başladım.

Başlarda aradığımız şeyi şöyle yazalım diyordu:

\(N = a^2 + b^2 = c^2 + d^2 \)

Evet, bu sorduğum sorunun cebirsel yazılışıydı. İki değişik sayı çiftinin karelerinin toplamı aynı sayıya eşit olacak. Ardından bu eşitlikten aşağıdaki özellikleri kolaylıkla görebiliriz diye şu üç önermeyi verdi:

  • a ve b çift sayılar ise c ve d de çift sayılardır.
  • a ve b tek sayılar ise c ve d de tek sayılardır.
  • a ve b bir tek ve bir çift sayı ise c ve d’nin de biri tek diğeri çifttir.

Burada kafam biraz karıştı. İlk şıkka baktım. a ve b sayıları çift ise N toplamı çift olur. Burada bir sorun yok. Dolayısı ile c ve d sayılarının karelerinin toplamı da çift olmalı ama c ve d sayıları tek sayı ise de toplamları çift olur. Önerme ise bunların tek sayı olamayacağını söylüyordu.

Örneğin \(N = 9^2 + 3^2 = 81 + 9 = 90 \) eşitliğine göre ise şüphem o kadar da yersiz değildi. Bunu önermeyi nasıl kanıtlayacağımı düşünürken makalede verilen ipucunu gördüm. Sayıları ve toplamları modulo 4’e göre yazın!

Demek ki çift sayıların hepsi aynı şekilde çift sayılar değilmiş diye düşünüp bu şekilde bir büyüteç ile sayılara daha yakından bakmaya başladım.

\(a = 2k \) ve \(b = 2l\) olacak şekilde çift sayılar olsun. O zaman

\(a^2 + b^2 = (2k)^2 + (2l)^2 = 4k^2 + 4l^2 \equiv {0} (mod 4) \) çünkü 4’ün katı her sayı 4’e de tam bölünür.

Demek ki çift sayıların karelerinin toplamı her zaman 4’e bölünüyor. Peki tek sayıların karelerinin toplamı?

\(a = 2k + 1\) ve \(b = 2l+1\)

\(a^2 + b^2 = (2k)^2 + 4k + 1 + (2l)^2 + 4l + 1 = 4k^2 +4k + 1 + 4l^2 + 4l + 1 \equiv {2} (mod 4) \).

İki tek sayının karelerinin toplamı da 4’e bölündüğünde her zaman 2 kalanını veriyormuş. Demek ki önerme gerçekten de doğruymuş.

Bir ortaokul öğrencisinin çok kolay görebileceği şeyi belki ilk kez belki de yıllar sonra yine gördüm. Hatırlamıyorum. Hatırladığım şey, modulo işleminin bana daha önce bu çağrışımı yaptırmamış olmasıydı. Bu minicik sürprizler olduğu sürece bendeki öğrenme aşkı da bitmez.

Yazılım hatalarında bu hafta

Neredeyse bir ay önce programda bir sorun keşfettik. Yüksek üretim hızında bir süre sonra sunucu ile diğer uygulamalar arasındaki TCP/IP haberleşmesi duruyordu. Durmadan önce sunucu pencere büyüklüğünü sürekli azaltıyordu ve bir süre sonra sıfırda çakılıp kalıyordu. Bu noktadan sonra da hiçbir mesajı kabul etmiyordu. Bunun yanında test ekibinin dikkatini çeken başka bir nokta da sunucunun birden yüzde yüz işlemci kullanmaya başlamasıydı. Genelde bunun nedeni bir şekilde sunucunun sonsuz döngüye girmiş olmasıydı. Hangi thread’in sonsuz döngüye girdiğini bulmak kolaydı ama kodun o kısmında göze çarpan bir sonsuz döngü adayı yoktu. Bu nedenle hatayı haberleşme kısmında aramaya başladım.

Bir önceki versiyondan beri haberleşme modüllerindeki değişikleri kontrol ettim. Böyle bir etkiye yol açabilecek bir değişiklik yoktu. Bunun üzerine test sistemine bir önceki versiyonu yükledim ve aynı yük altında test ettim. Aynı davranış bir önceki versiyonda da vardı. Demek ki bu sorun daha uzun zamandır bizimle beraberdi ve biz bunu farketmemiştik.

Tabii ki hemen daha önceki versiyonu yükleyip aynı denemeyi yaptım ve bu versiyon sorunsuz çalıştı. Demek ki bundan bir sonraki versiyona geçerken bir şeyi bozmuş olmalıydım. Haberleşme modüllerini yine karşılaştırdım. Aralarındaki fark çok önemsizdi. Bu hata oradan gelemezdi.

Bu gibi durumlarda klasik mühendis yaklaşımından başka bir şey aklıma gelmez pek. Bir şeyi arıyorsan ve bu şeyin nerede olduğunu bilmiyorsan aramaya ışığın olduğu yerde başla. Sonsuz döngü olan kod kısmını incelemeye başladım. Kodun aslında sonsuz döngüye yol açması pek mümkün gözükmüyordu ama basit bir döngü ve multithreaded bir uygulamadan her şey beklenebilir. İlk kontrol ettiğim şeylerden biri bu döngüde en son değişikliği ne zaman yaptığım oldu. Evet, çalışan versiyondan çalışmayan versiyona geçerken yapmışım. Hatta çalışan versiyonda o noktada bir döngü yokmuş bile. Bir optimizasyon için o döngüyü eklemişim. Birden şüphelerim güçlenmeye başladı. Son versiyonda o döngüyü kaldırıp bir daha test yaptım ve son versiyon da sorunsuz çalıştı. Demek ki o döngüde kullandığım nesne hiç beklemediğim bir şekilde bozuluyormuş. Bunun üzerine bu nesneye her türlü erişimi senkronize etmeye başladım. Aslında bu sorunlara önlem olsun diye kendinden senkronize olan bir nesne türü kullanmıştım ama döngü içindeki iterasyonda bu senkronizasyon yeterli olmuyor tabii. Kötü bir günümde bunu atlamışım. Şimdi o modülde her şeyi düzelttim ve çıkmadan önce testi başlattım. Yarın sabah sonuçları görürüm.

Eve geldiğimde haftalardır yağmayan yağmurun sonunda yağıyor olduğunu gördüm. Bahçe sonunda bayram etti. Çekmecedeki tohumların da bir kısmını bahçeye ektim, başka türlü bu tohumları bitirme şansım yok. Bu yağmurlar haftasonu boyunca da devam edecek gibi. En azından bahçe sulamaya gerek kalmayacak.

Bahçe

Aslında bahçede pek bir değişiklik yok. Haftalardır bir damla yağmur yağmadı ama hava durumu yarın sağanak yağmur bildirdi. Umarım yağar. Her gün bahçe sulamaktan sıkıldım açıkçası. Dün çiçeklere gübre de verdim, bakalım işe yarayacak mı?

Salonda bahçeden daha çok çiçek saksılarda bekliyor ama bahçeye çıkarsam aşırı güneşe dayanamayacaklar diye korkuyorum. Biraz daha bekleyeyim en iyisi. Salonda ilk çiçek açtı bile. Aslında o çiçeğin öyle açmasını beklemiyordum ama ne bileyim işte, daha bu işin cahiliyim.

Hezaren çiçeği

Hezaren çiçeği tohumu diye etkim ama böyle bir çiçek çıktı.

Bunun dışında ketenleri de bugün bahçeye çıkardım. Bakalım çok mu erken davranmış oldum. Bir de yarınki yağmurdan sonra salyangoz sürüsünün akınına uğrayacağım korkusuna da kapıldım. Umarım herşeyi talan etmezler.

Bunun dışında tırtılları bulamıyorum artık ama daha çalıları kontrol etmedim. Az da olsa bir miktar ümidim var hala. Olmazsa da seneye artık. Uğur böcekleri ise yavaş yavaş yayılmaya başladı. Değişik türler mevcut şimdiden.

Uğur böceği

Bu arada dün bir sürpriz oldu. Sanırım kozasından yeni çıkan bir kız böceği ilk uçuş denemelerini benim bahçemde yaptı. Bir on dakika kadar otların arasında iyi saklandı ama sonra cesaret edip havalandı. Neyse ki şanslıymış da kediler kendisini görmedi.

kızböceği

Hobi olarak ders

Kendimi bildim bileli otodidaktik biriydim. Belki de yakın çevremde benim ilgilendiğim şeyleri bana öğretebilecek insanların olmaması nedeniyle bulduğum bir çözümdü. Bundan çok verim aldığımı söyleyemem ama bırakamadım da. Kendi kendime bir şey öğrenmenin zor kısımlarından biri kendi eksiğimi kolayca görememek. Yani neyi yapamadığımı görebiliyorum ama neden yapamadığımı bulmak kolay olmuyor. İyi bir öğretmenle bu sorunu çok kolay aşabilirdim aslında ama hiç yapmadım. Eskiden bu kaynaklar azdı, pahalıydı. Şimdi daha kolay bulunuyor ama iyisini seçmek kolay değil. Bu nedenle sanırım, hala kendi kendime öğrenmeye devam ediyorum.

Şimdi birçok şeyi internetten öğrenmek mümkün. Teoride yani. İnternette erişemeyeceğim bilgi yok gibi. Vikipedi gibi bir ansiklopedi var. Her ne kadar çocukken ansiklopedi okumayı seviyorduysam da Vikipedi beni bundan soğutmayı başardı. Arada ilgimi çeken ama uzmanı olmadığım bir konuda arama yaptığımda Vikipedi sayfasında verilen ilk cümlenin içinde geçen kelimelerin yarısını anlamadığım oluyor. Neyse ki linkleri takip ederek her bir kelimeyi öğrenmek mümkün ama dikkatim de dağılıyor bu arada. Nereden nereye geldiğimi bilemiyorum. Çocukken eğlenceliydi bu ama yaşlandıkça daha sabırsız oldum heralde. Vikipedi’de bir şey öğrenirken ecel gelirse diye korkuyorum belki de.

Yine de kısa, anlık bilgiler için, örneğin önemli birinin doğum tarihi, Vikipedi kullanmaya devam ediyorum. Daha geniş konular için Vikipedi’yi tamamen bıraktım ama. Bir ara online dersleri de denediğim oldu. Coursera, udemy gibi sitelerde dersler aldım. Çok azını bitirdim, kalanlara devam etmedim bile. Aslında bunları beğenmemek için çok ciddi bir sebebim var mı emin değilim ama sayfaların para kazanmak için ellerinden geleni yapmaya çalışması beni soğutmuş olabilir. Diğer taraftan videolarda konulardan basitçe, çoğunlukla çok basitçe bahsediyorlar. Aklıma takılan şeyleri de aslında derse katılan topluluğa ya da dersi verenlere sorabilirim ama bu da pek sevmediğim bir iştir. Bir de belli bir zaman planına uygun olarak öğrenmek bana uygun bir şey değil artık. Neden uygun olmadığına belki başka bir gün değinirim.

Son zamanlarda en çok kullandığım iki şey kitaplar ve youtube videoları. Eğer genel bir konuyu epey öğrenmek istiyorsam kitabı kullanıyorum. Bir sürü matematik kitabı buldum ve bana hitap edenleri tespit etmeye çalışıyorum. Bu oldukça zaman alan bir iş ama her kitap herkese uymuyor maalesef. Youtube videolarının güzel tarafı da bilgilerin görsel ve işitsel desteğinin iyi olması. Bir şeyi öğrenirken ne kadar çok duyu organı kullanılırsa o kadar iyi bence. Youtube’daki bazı üniversite ders videolarını takip etmek hoşuma gidiyor. Birçok kişi belgesel izler, ben ders videolarını seyrederim. Şu sıralar Yale üniversitesinden müzik teorisi dersine takıldım. Benim için oldukça yeterli bir video serisi.

Bir de son olarak podcast olayı ilgimi çekti. Arkadaşla işe gidip gelirken arabada onun dinlediği podcastleri dinleme fırsatı buldum ve hoşuma da gitti. Eğer işe gidip gelirken araba kullanıyor olsaydım kesin böyle bir şey denerdim ama tren yolculuklarında hala kitap okumayı tercih ediyorum.

Şimdi biraz matematik çalışıp eve gideyim. Bahçede yapacak tonla iş var hala.