Wednesday, July 23, 2014

Tips for software integration

I have been involved in software development efforts where my module (~20 KLOC) had to be integrated into a larger module (~1 MLOC). Complicating factors:
  • It was not possible to install the larger module on my development environment. There was no offline version.
  • Interface Control Document (ICD) did not exist or was out of date the minute it was written because the larger module was also in development.

Friday, June 06, 2014

The path of the autodidact

I like learning, be it a new computer algorithm or political history. My problem is that I spend a lot of time looking around, sampling information from different domains but not being able to focus and get deeper. Since I am in need of depth to feel happy about a topic, I always feel that there is something missing. I watch lots of YouTube videos and I am enrolled (but have never finished) in dozens of online courses. There is no end to sampling in this age of easy access to all sorts of information. Since September 2012, I have a second job, namely being a father, which does not leave any time for prolonged concentration.

My plan: Sample for 6 months, then in the final two weeks, decide on what to focus on (at most 2 things). Take a week of off from job and get down and dirty. If it is related to programming, create a working application. Make sure there is a babysitter during the day, i.e. father time = mainly evenings and weekends.

So, here is my plan for July 2014: First, find a babysitter. Then take a week off and study German. Rationale: I am speaking German with my son but I am not as fluent as I wish to be. I feel that a concentrated push would result in a large leap. My primary study tool is Duolingo. Additionally I will try to improve German Wikipedia pages and watch videos in German, DW for example.

Future candidates:
  • Write a web browser (that's the project of a Udacity course I did not finish).
  • Bayesian statistics
  • Machine learning. Might chess be a good application? Check other people's projects and replicate one that could be completed in a week (documentation + test). See  Tic Tac Toe, alpha-beta pruning, Rubik's CubeDama, Backgammon, Java Chess Engine Tutorial.
  • Study AI in Quake 3
  • Finish the online courses (assignments + projects) that are worth the time spent.
  • Write a spam blocker for Android.
  • Write a lunar lander clone. Write an autopilot that handles speed control with minimum fuel consumption. Write a computer AI that can finish the game all by itself.

Saturday, May 03, 2014

Başka bir okul mümkün

Geçen hafta Başka Bir Okul Mümkün Derneği'nin Ankara'da Eylül ayında açacağı ilokulun tanıtım etkinliğine gittik. Sağolsun, Gonca Hn bizimle ilgilendi. Ken Robinson'un TED konuşmasından ilham alarak çevresindeki insanlarla böyle bir oluşuma girmişler. Okulun yeri İncek'te. Daha önce Melek İpek İlköğretim okulu olan binayı 10 yıllığına kiralamışlar. Veliler derneğe/kooperatife üye oluyorlar, yani okulun sahibi veliler. MEB'e bağlı özel okul statüsünde olacakmış.

Eylül için hedefleri 30 öğrenci. Max kapasite 100. Sınıfların 20 kişi olmasını, sınıf başına bir sınıf öğretmeni bir de yardımcı öğretmen olmasını düşünüyorlar.

Hoşumuza gitti, takipçisi olacağız. Yarın (4 Mayıs) Tunalı Otel'deki toplantıya da gideceğiz.

Güncelleme, 4 Mayıs 2014: Toplantıya gittik. Maksadımız Ankara kooperatifinin üyeleri hayal dünyasında yaşayan hippi tipler mi, yoksa ayağı yere basan, ne yaptığını bilen insanlar mı diye görmekti. Kısacası gördüklerimizden memnun kaldık, hepsi güzel insanlardı.

Hafta boyunca izlediğim videolardan derlediğim soru ve cevaplar:

Soru: Milli eğitim müfredatı ile uyumlu musunuz?
Cevap: Evet. Milli eğitimde verilmek istenen kazanımlar var. Bu kazanımlar normal okullarda fiziksel şartların yetersizliği nedeniyle verilemiyor. Biz bu şartları sağlayarak zaten verilmek istenenleri daha etkili bir şekilde verme imkanına sahibiz. Örneğin milli eğitimde öğrenci konseyi kavramı var ancak öğrenci sayısının fazlalığı nedeniyle uygulanamıyor. Biz sayıyı bu tür şeyleri uygulayacak seviyede tutuyoruz.

Soru: Velilerin rolü ne?
Cevap: Veliler kooperatifin ortağı, yani okulun sahibiler. Okulda çocuğu olmayan birisi ortak olamaz, ancak bağış yapabilir. Yani veliler normal okullara göre çok daha sahiplenici bir konumdalar.

Soru: Açılan okullarla derneğin ilişkisi ne?
Cevap: Okulları çocuklarını okula gönderecek veliler açıyor. Dernek onlara sadece yol gösteriyor, eldeki bilgi birikimini paylaşıyor. Okulların yönetimi tamamen kooperatiflerin elinde.

Soru: Öğretmenleri nasıl seçiyorsunuz?
Cevap: Milli eğitimin kriterlerine uygun adaylar arasından seçiyoruz. Detay şurada.

Soru: Ya çocuk birşey öğrenmezse?
Cevap [Bodrum'daki okula çocuğunu yollayan bir veliden]: Çocuğun ilkokulda öğreneceği temel konular okuma yazma ve dört işlem. En kötü durumda, yani okul bunları öğretmede yetersiz kalsa bile ebeveyni olarak ben öğretirim. Çocuğumun sağlıklı bir sosyal çevrede çocukluğunu yaşaması, öğrenme heyecanını kaybetmemesi çok daha önemli.

Soru: Çocuklar okuldaki ideal şartlar yüzünden toplumdan kopuk hale gelebilirler mi?
Cevap: Mevcut okulların hayatla iç içe olduğunu iddia edebilir miyiz? Biz hayat bilgisi derslerini dışarıda, örneğin pazaryerinde işliyoruz. Bir gezimizde çöplüğe gittik, dönüşte çocuklar neden bazı insanlar çöplüğü karıştırmak zorunda diye sordular. Kitapların ötesindeki gerçek hayatı daha yakından tanıma fırsatı buluyorlar.

Kaynaklar:

Friday, April 04, 2014

Returning objects in C++

I recently discovered that returning an object in C++ might not be what you expect. I was surprised because in Java things would be different. Consider the following code:


getClassB() returns the mClassB attribute. Class B is as follows:


I wrote the following main function to test results:


I thought that a.getClassB().setVal(1) would set mClassB.mVal to 1. But when I read it using a.getClassB().mVal I got a meaningless number hinting that mVal was not set.

When I set the result of a.getClassB() to ClassB b and then set b.setVal(2) and read b.mVal I get 2 as expected.

Finally, when I use a.getClassBReference()->setVal(4) and then read it using a.getClassBReference()->mVal, I get 4.

I think that a.getClassB() returns a copy of mClassB which means that a setVal() operation on that copy does not modify a.mClassB.mVal. If you want to modify an field of an object attribute, the getter of that attribute has to return a reference, not a copy.

Thursday, March 06, 2014

Book: Waltzing with Bears

"Waltzing with Bears - Managing Risk on Software Projects", DeMarco, T., Lister, T., 2009, 196 pages

The book tells how things really are: People like tales more than reality, nobody likes bad news. People are 10 times more prone to believe things they like. The odds are against risk management. It is surprising if anybody can do it properly:
"We are like a primitive tribe that tries to hold the devil at bay by refusing to say his name." [p.113]
"The Ethics of Belief" by William Kingdon Clifford, which is mentioned in the book is well worth reading on its own.

Sunday, October 13, 2013

Dezenformasyon

Facebook sayfaları yalan haberin çarpıcı örnekleriyle dolu. Geçenlerde aşağıdaki fotoya denk geldim. Fotonun altına "Arakan yanıyor, müslümanları diri diri yakıyorlar" diye yazmışlar, millet de galeyana gelmiş, verip veriştiriyor, paylaşıyor.


Fotoda insanların düzgünce sıralanmış olması içime bir şüphe düşürdü ve bu resmi google image search'te arattım, işin aslını anlatan 2011'e ait şu sayfaya rast geldim. Kongo'da Petrol tankeri kazası sonucu ölen insanlarmış bunlar (ayrıca Arakan Kongo'da değil, Burma'da). İşin ilginç yanı, ilk başta bu resmi "Müslümanlar Nijerya'da hristiyanları yakıyorlar" diye kullanmışlar!

Ne tarih, ne olay, ne yer, hiçbir şey tutmuyor ama müslümanı da, hristiyanı da "aceba doğru mu" demeden atlıyor! Neyse ki artık internet var da bu hikayelerin aslını anlamak mümkün. Ticari medyaya çuvaldızı batırmadan önce iğneyi kendimize batıralım, gaza gelip bir haberi paylaşmadan önce beş dakikacık araştıralım, komik duruma düşmeyelim.

Bu taktiklere başka örnekler:

Thursday, August 01, 2013

Math tests

Java's java.lang.Math library provides methods for performing numeric operations. It's a good idea to have a basic test list to test the math functions of whichever programming language you are using at the moment. You should know about the behavior of math functions (in cases like overflow) so that you won't waste a lot of time looking for bugs in the wrong places.