Dünyanın en iyi anıları

Lise ikinci sınıfta (yoksa üçüncü sınıf mıydı?) bir gün matematik dersinden önceki teneffüste bizim bir alt dönemden B.D. ile koridorda konuşuyorduk. Hangi konuda konuştuğumuzu artık hatırlamıyorum. Bu sırada aynı zamanda müdür yardımcısı olan matematik öğretmenimiz A.B. merdivenlerden çıkıp koridorumuzun başında belirdi. Ben de hocayı görmemize rağmen, artık ne konuşuyorduysak anlatmaya devam ettim. Hoca yanımızdan geçerken sadece başını hafifçe çevirip bize baktı ama hiçbir şey demedi. Bundan cesaret alarak konuşmaya devam ettik, zaten sonuna da gelmiştik. Birkaç saniye sonra konuşmamız bitti, B.D. da kendi sınıfına doğru yollandı, ben de kapıyı açıp sınıfa girdim. Herkes yerlerine oturmuştu, Hoca tahtaya dönük duruyordu. Bu fırsattan faydalanıp yerime geçmeyi ve koridordaki sessiz karşılaşmanın unutulmasını umuyordum. Sırama doğru ilerlerken hoca bana doğru döndü ve hafifçe gülümseyerek şöyle dedi:

Sınıfa senden önce girdim Yılmaz, şimdi ne yapmak lazım?

Düşünmeye başladım. Koridordaki sessizce yanımızdan geçişi bu sorudan sonra pek de hoşgörülmüş bir sahneye benzemiyordu artık ama o zaman soruyu sorarken neden gülümsemişti? Bu iki ipucu üzerinde gidip geliyordum ama bir türlü cevap bulamıyordum. Eğer kızılacak bir olay olsa koridorda yanımızdan geçerken her öğretmenin yapacağı gibi önce bizi sınıflarımıza gönderebilirdi. Bunu yapmamıştı ama. Şimdi hesap mı sormaya başlamıştı yoksa? Sorunun üzerinden neredeyse bir saniye geçmişti ve artık bir cevap vermek zorundaydım. Aslında mantıklı ya da kötümser bir insan tabii ki güvenli bir yolu seçerdi ama ben bir kere o gülümsemeyi görmüştüm ve tabii ki bu bilgiler ışığında en mantıklı hareketi yaptım. Sağ elimi sola doğru açık bir şekilde, baş parmağını da diğerlerinden biraz daha ayrı bir şekilde tutup konkav bir yay çizdirerek hocaya doğru uzattım ve “Tebrik etmek lazım hocam” dedim.

İtiraf edeyim ki, hocanın uzattığım elimi sıkmaması beklediğim bir tepki değildi. Anlaşılan hoca da beklediği cevabı almamıştı. Sınıf da sanki içeride müdür ya da müdür yardımcısı varmış gibi sessizliğe gömülmüştü. Bu hiç de iyi bir işaret değildi. Demek ki gülümseme işaretini çok yanlış anlamıştım. Hoca karşımda hareketsiz duruyordu ama yüzünde küçük seğirme gibi hareketler de dikkatimi çekiyordu. Bu sefer biraz önceki iyimserliğimden eser kalmamıştı. Yine ihtimaller beynime üşüşmeye başladı. Belki sadece bağırır, sakin ol! Kolu da kasılmış durumda, ya yumruk geliyorsa? Şansım iyi giderse sadece bir tokatla atlatabilirim. Bağırsa en iyisi olur bence. Tekme atabilir mi acaba? Gözler! Bacakları kontrol edin! Hayır, tekme atacak gibi gözükmüyor. Özür dilesem mi acaba? Sakin ol! Yapacağımız herhangi bir hareket hocanın vücudunda birikmiş statik enerjiyi birden kinetik enerjiye çevirebilir. Şimdilik olası bir yumruk ya da tokata karşı kafamızı omuza doğru gömerek darbenin şiddedini azaltma hazırlığıyla yetinelim. Şimdilik iyi gidiyor, hocanın pozisyonunda bir değişiklik yok. Bütün organlar! Ana plana sadık kalın!

Yaklaşık on saniye süren bu sessiz hareketsizliği arka sıralardan gelen D.Ş. adlı arkadaşın kahkahası bozdu. Hoca başını kahkahanın geldiği yöne çevirirken ben de “tamam, kurtuldum” diye seviniyordum, tabii ki ana plana sadık kalarak. Neyse ki koca sınıfta espriden anlayan cesur biri vardı. Hoca sonra bana döndü ve “geç yerine otur!” dedi. Ben zaten hoca daha ünlemi bitirmeden sırama ulaşmıştım bile.

O günden sonra bir daha ne zaman bir hoca “Komik bir şey varsa söyleyin de hep beraber gülelim” dediyse, sustum, cevap vermedim. Çekirge bazen ikinci kez de sıçrayamaz.

Basit vektör işlemleriyle ilgili bir oyun (Toplama)

Bu seferki test oyunumuz da vektör işlemleri üzerine. İlk olarak toplama işlemini ele aldım. Koordinat sisteminde verilen iki vektörün toplamını bulmaya dayalı bir oyun. Cevap, toplam vektörünün bitiş ucunu seçerek veriliyor, vektörün başlangıcı (0,0) noktası olarak kabul ediliyor.

Eğer verilen cevap doğruysa seçilen vektör yeşil renkle gösteriliyor, yanlışsa kırmızıyla. Bu durumda doğru cevap tabii ki yeşil bir vektörle gösteriliyor. Her doğru cevap 100 puan. Belki ileride doğru cevapla beraber toplanan vektörlerin oluşturduğu paralelkenarı da çizdirebilirim, ya da vektörlerden birini diğer vektörün ucuna kaydırıp toplamı gösterebilirim.

 

Oyun

 

Doğru denklemleri oyunu – 2

Bu oyunda da geçen oyunun tersi yapılıyor. Her soruda değişik renklerde dört doğru grafiği veriliyor ve altta verilen denklemin hangi grafiğe ait olduğu soruluyor.

Tablet ve cep telefonları için tuşları ve ekran büyüklüklerini bir aksilik çıkmazsa bu hafta iyileştirmeyi düşünüyorum.

Oyun

Bir doğru denklemi bulma oyunu

Geçen yıl bir veli toplantısında bir velinin sorduğu şu soru beni hayretlere düşürmüştü:

– Çocuklar matematik çalışmak için ders kitabından başka nereden soru bulabilir? Ders kitabında çok az soru var.

Ders kitabında çocuğun öğrenmesi beklenen her fikir ya da yöntem için normalde en fazla on tane soru oluyor. Bunların da çoğu derste yapılıyor ya da ev ödevi olarak veriliyor. Sınava hazırlanmak için kitaptaki soruları çöz deyince de çocuklar genelde biz onları zaten yaptık diyorlar. Anlaşılan bu veli de böyle bir cevap almıştı ve daha başka soru kaynağı arıyordu. Oysa sonsuz sayıda sayı olduğuna göre yeni soru üretmek çocuk oyuncağıdır. Kitaptaki örnek sorular alınır ve değişik sayılarla sonsuz adet soru yapılır. Tabii ebeveynler bu iş için zaman harcamak istemez. Ne de olsa sorunun kolay çözülebilmesi için sayıları doğru seçmek biraz enerji gerektiren bir işlemdir.

Geçenlerde çocuklar eve gelince bana bir android uygulaması gösterdi. Verilen bir tamkare sayının kare kökünü bulmaya dayanan bir oyun. Nedense çocuklar bunu sevmişti. Ben de matematik soru üretme işini böyle denemeye karar verdim. İlk programımda x-y koordinat sisteminde verilen bir doğru grafiğinin y = mx + n şeklindeki denklemini seçeneklerden bulma şeklinde bir test oyunu yaptım. Her doğru cevaba 100 puan veriliyor. Bakalım çocukların ilgisini hiç çekecek mi?

Oyun

Saraydan kız kaçırma (Çözüm)

Soru

Madem kralın verdiği cevapları bilmiyoruz, o zaman her ihtimali deneyelim. Yani verilebilecek her cevabın kralın doğrucu ya da yalancı olduğu durumlarda prens için yardımcı olup olmadığına bakacağız.

[table id=45 /]

Yukarıdaki tabloda turuncu satırlar prensin kesin bir sonuca ulaşamayacağı satırları gösteriyor. Kırmızı satırlar cevaplar bir çelişkiye yol açtığı için prensin hemen eleyebileceği durumlar. Kalan iki yeşil satırda prens belli bir sonuca varabiliyor. İki satırın da aynı sonuca varması sayesinde de problemi çözebiliyoruz. Kralın verdiği cevapları tam olarak bulamıyoruz ama prensesin adada olduğu sonucunu bulabiliriz. Prensle aramızda o kadar da fark olsun yani.

 

Evrim ve genetik algoritmalara küçük bir giriş

Richard Dawkins, Kör Saatçi adlı kitabında bir programdan bahseder. Bu program rastgele değişimler ve rastgele olmayan seçimler sayesinde nesiller boyu işleyen bir algoritmanın tamamen rastgele şekilde işleyen bir mekanizmadan çok daha çabuk hedefe ulaşacağını gösteren bir deneydir.

Bu deneyde Dawkins ‘METHINKS IT IS LIKE A WEASEL’ cümlesini kullanır. Eğer bir maymun rastgele İngilizce alfabedeki 26 harfi ve boşluk karakterlerini kullanarak bu cümleyi yazmaya çalışırsa çok çok uzun zaman bu işle meşgul olurdu.

Dawkins, bunun yerine maymunun çalışma prensibinde hafif bir değişiklik yapılırsa çok ilginç bir sonuç çıkacağını söyler kitabında. Diyelim ki maymun yine rastgele 28 harflik (cümle 28 harf uzunluğunda) bir şey yazsın. Daha sonra bu cümleyi kopyalamaya başlasın ama bir farkla. Kopyalarken arada rastgele hatalar yapsın, yani bazı harfler kopyalarda değişsin (mutasyon). Daha sonra maymun o yazdığı ve kopyaladığı cümleler grubunda hedef cümleye en yakın cümleyi seçsin ve o ana kadar yaptığı adımları tekrarlasın. Böylece nesiller sonra maymun hedef cümleyi bulacaktır ve bu iş için gereken nesil sayısı tamamen rastgele seçim olan algoritmadan çok daha az olacaktır.

Bunu denemek için bir javascript simulasyonu programladım. Her nesildeki birey sayısını ve mutasyon oranını girdikten sonra ya animasyonlu ya da animasyonsuz çalıştırılabilir. Öncelikle animasyonsuz çalıştırılmasını öneririm. Böylece daha hızlı çalışacaktır ve daha kısa sürede bütün işlemlerin yaklaşık kaç nesil süreceği görülebilir. Bu esnada yukarıda nesil numaraları ve o nesildeki hedefe en yakın cümleyi görebilirsiniz.

Eğer animasyonla çalıştırılırsa maymunun yaptığı işlemleri ‘ağır çekimde’ görülebilir. Cümlelerdeki mutasyonlar, yani hatalı kopyalanan harfler kırmızı gösteriliyor. Ardından maymunun seçimi yeşil arkaplan rengiyle gösteriliyor. Bundan sonra o nesil komple siliniyor ve yerine maymunun seçtiği cümlenin tam kopyaları koyuluyor. Animasyon bu adımların tekrarlanmalarıyla devam ediyor. Küçük bir uyarı yapayım, bu adımlar çok yavaş gösterildiğinden bütün simulasyonu seyretmek çok zaman alacaktır.

Hedefe çabucak ulaşmak için kalabalık popülasyonlar seçmek daha iyi olacaktır. Animasyon kullanılmayacaksa 100 iyi bir popülasyon büyüklüğüdür. Animasyon için ise ne kadar küçükse o kadar iyi ama bu durumda da bütün simulasyon çok uzun sürecektir. Mutasyon değerini küçük tutmak iyidir. Örneğin 0.05 (Her harf yüzde beş ihtimalle değişebilir) yeterli bir değer. Aşağıdaki linkten simulasyon sayfasına ulaşabilirsiniz.

Gelincik programı

Bana ne, kendimi başkasının yerine koymayacağım işte

Yıllar önce, Visual Basic program geliştirme ortamının yaygınlaşmak üzere olduğu bir dönemde ben de bu dili ve programı öğreneyim demiştim. Görsel kontrollerin desteğiyle uygulama yazmak çok daha kolay ve eğlenceli olacaktı. İşe başladıktan kısa bir süre sonra çok sinir bozucu bir olayla karşılaşmıştım. Bir satırdaki kodu bitirmeden başka bir satıra geçildiğinde ekranda birden bir hata mesajı beliriyordu. Program geliştirme ortamı tabii ki yarım kalmış satırı hemen yorumluyordu ve bu satır hatalıydı. Bu şekilde bakıldığında yerden göğe kadar haklıydı ama kullanıcıyı bu durumlarda bir hata mesajını okumak (tamam, hangimiz hata mesajlarını okuyor ki?) ve daha da önemlisi bu mesajı aktif bir şekilde kapatmak zorunda bırakarak kullanıcının dikkatini dağıtıyordu ve çalışma zevkini öldürüyordu. Günümüzde çok daha iyi geliştirme ortamları bu hataları daha az saldırgan yöntemlerle (Örneğin satırdaki hatalı yerin altını kırmızı çizerek) kullanıcıya iletip çalışma temposunu ve akıcılığı bozmamayı başarabiliyor. Artık eski günler bir daha geri gelmez diye düşünüyordum ki tabii ki yanıldığımı gördüm.

Üretim hattındaki paketlerin içinde yabancı maddelerin olup olmadığını kontrol eden makinelerimiz böyle hatalı bir ürün tespit edildiğinde bu paketi hemen üretim hattının dışına atıp, hatalı ürünü de ekranda gösteriyor. Daha doğrusu operatör doğru pencereyi açmışsa gösteriyor. Cin fikirli bir müşterimiz, böyle önemli bir olayın, yani hatalı bir paketin üretilmiş olmasının ne olursa olsun operatör tarafından görülmesinin gerektiğine inanarak yazılımda şöyle bir değişiklik yapmamızı istedi: Hatalı ürün hattan atılır atılmaz hangi pencere açık olursa olsun otomatik olarak hatalı ürünlerin gösterildiği pencere açılsın. Böylece operatör hemen bu durumdan haberdar olup duruma müdahale edebilecek ve üretimin kalitesi yükselecek.

Yazılımla her şeyin yapılabileceğine ve daha da önemlisi yapılan her şeyin satılabileceğine inanan satış elemanı hemen olur demiş ve bu istek bizim bölüme geldi. Tabii ki zamanında Visual Basic öğrenmeye başlayıp bunu yarıda bırakan nesle ait olan programcılar hemen bunun saçma olduğunu söylediler. “Operatör belki o anda makineyi ayarlamakla meşgul olacak ve otomatik olarak başka bir ekrana sıçramak ayarları bozmasa da operatörün asabını bozacaktır. Bu işlem üç beş kere tekrarlarsa da o operatör kesin ekranı bıçaklar” dendi. Proje yöneticisiyle konuşuldu ve ikna edildi ama müşteriyi ikna edemedik. Satış elemanı da “parayı veren düdüğü çalar” dedi ve biz de bunu programladık.

Birkaç hafta sonra servisten bir eleman bize geldi ve müşterinin yeni bir isteği olduğunu söyledi. Son yaptığımız özelliği kapatmamızı istiyormuş ve bunun için de ödeme yapacakmış. Müşteriyi kimin ikna ettiğini sorduk. Servis elemanının kendisi ikna etmiş ve çok kolay olmuş. Hayretler içinde kalmıştık. Bütün departmanın yapamadığını tek başına başarmıştı. Asıl ilginç olan ise satış elemanının olmaması gerken bir şeyden iki satış çıkarabilmesiydi. Umarım şirketteki herkes bu olaydan bir ders çıkarmıştır.

Kendini kullanıcının yerine koyabilmek

Kendini başkasının yerine koyabilmek genelde oyunlarda kullanılan bir yöntemdir. Rakibim bu durumda ne yapardı diye düşünerek iyi bir hamle ya da strateji bulmanın güzel yollarından biridir. Nedense yazılım projelerinde çok sık gözardı edilen bir yöntemdir ama. Yaptığımız programı ya da makineyi kendi klonlarımızın kullanacağını ya da bu sistemlerin bizim çalıştığımız ortamlarda kullanılacağını varsayıyoruz heralde.

İşe başladığım ilk günlerdi. Şirketin endüstriyel teraziler üretip sattığını biliyordum ama henüz hiçbir tanesini görmemiştim. Birgün hemen yanımızdaki elektronik tasarım bölümüne servisten bir dokunmatik ekran birimi geldi. Bu ekranı tasarlayan eleman elindeki şeye şaşkınlıkla bakıyordu. Servis elemanı bunun tamir edilip edilemeyeceğini sordu. Arkası paslanmaz çelikten yapılmış 20 inç büyüklüğündeki tamamen yamulmuş dokunmatik ekran tasarımcının vereceği cevabı bekliyordu. Geleceği bu cevaba bağlıydı. Sonunda herkesin bildiği cevap geldi. Yenisini gönderin!

Sonra öğrendik ki müşteri teraziye, düşük ağırlıkta bir ürün tartıldığında her yerden duyulabilen bir alarm sistemi eklenmesini istemiş. Aslında mantıklı bir istek. Bazı üretim bölümleri çok hareketli ve gürültülü olur ve buralarda görsel sinyaller her zaman fark edilmeyebilir. Bazen de operatör birden fazla makineyi kontrol ederken sistemde ortaya çıkan sorunları kaçırabilir. Dolayısıyla müşteri, operatör müdahale edene kadar bu alarmın çalması istenmiş ve biz de yapmışız. Hamur ürünleri üretilen bu fabrikada operatör alarmı susturmayı başaramayınca o an şans eseri elinde bulunan kilolarca ağırlıktakı hamur bloğunu ekrana fırlatmış. Alarmın sustuğunu hiç sanmıyorum ama eleman elinden geleni yapmış.

Birkaç gün sonra bir başka müşteriden başka bir ekran geldi. Bu yamulmamıştı ama bizim de sorunlardan düşündüğümüz kadar uzakta olmadığımız hissini veren bir durumdaydı. Ekran boydan boya yarılmıştı.

Bu ekran da yine operatörün uzun süre doğru menüyü bulamaması nedeniyle bıçaklanarak (evet demek ki bazı operatörler üretimde bıçak kullanıyor) yırtılmıştı.

Bu örneklerde ne müşteri ne de bizim ekip kendini kullanıcı operatörlerin yerine koyabildi. Sonuçta belki o operatörler ceza aldılar ama müşteriler de bir bir süre üretim yapamayıp kayıplar yaşamış oldu. Bu derece olmasa da bu işin buralara varacağını kimse göremedi mi acaba? Tabii ki görenler olmuştur, hatta söylemişlerdir de ama bazen müşteriyi, bazen de satış departmanını ikna etmek kolay olmuyor. Herkes kendini başkasının yerine koyabilseydi çok farklı bir dünyada başka başka programlar yazıyor olurduk heralde.

Saraydan kız kaçırma

Prensle prenses tam evlenme hazırlığındayken prens acı haberi alır. Prenses kaçırılmıştır. Söylentiye göre de mantık adasına kaçırılmış. Mantık adasında iki kabile yaşamaktadır. Bir kabile sadece doğruyu söyleyenlerden oluşmaktadır, diğeri de sadece yalan söyleyenlerden. Adanın kralı da bu kabilelerden birinden ama hangisinden olduğu bilinmiyor. Kral hakkında bilinen tek şey o adada o an olan ve daha önce olmuş olan her şeyi biliyor olması.

Prens bir koşu adaya gidiyor ve kralla görüşüyor. Ona şu soruları soruyor:

Prenses mantık adasında mı?

Prensesi gördünüz mü?

Kralın bu sorulara verdiği cevapları (cevapların evet ya da hayır olduğu kesin ama) bilmiyoruz ama prensin bu cevaplarla prensesin mantık adasında olup olmadığını bulduğunu biliyoruz.

Prenses mantık adasında mı?

Çözüm