Tuesday, December 27, 2011

How to write a technical report

There are many good sources on the basics of writing a technical report, see 1, 2 (pdf), 3 (pdf). What I want to emphasize in this blog post is the actual writing process.

I found that it is difficult to write a report after you have done the technical work, feel exhausted, and want to move on to greener pastures (i.e. new technical challenges). The most productive approach is to begin writing before you have started any analysis, i.e. when you don't have a clue what you're going to do. I start by taking notes on the blank report about why I am undertaking this effort, what mathematical tools I might need to develop, what scenarios I might try. Thereby, I make up my mind on how I will approach the problem. That allows me to get over one of the main procrastination reasons, namely not knowing where to start. This makes the report an integral part of the overall picture. The rest is following/updating your outline and filling the blanks (and sometimes realizing you are at a dead end and giving up).

Your report and analysis will be finished at the same time and both of them will be much better than if you had done them separately.

Update 31.10.2012: See In Defense of the Scientific Paper for similar ideas.

p.s. Having more than one computer monitor where you will use one for the report and one for the calculations, is a big productivity boost.

p.p.s For basic English writing rules, see The Elements of Style

music:
* Akrep Nalan - Sarhoş
Adele - Set Fire to the Rain
Placebo - Every You, Every Me (covered by Basement Alchemy)

Wednesday, December 21, 2011

Film: Changeling

Changeling filmi 1928'de yaşanan bir olaya dayanıyor. Küçük oğlu kaybolan annenin oğlunu bulma mücadelesini ve bu sırada polisin kendisine kötü muamelesini anlatıyor. Beni etkileyen kısmı kadının otorite/güç karşısındaki çaresizliği ve direnişi idi. Nedense aklıma ruhsat maceramız ve İzmir'de polislerce dövülen kadın geldi... Nedense... Sözlerimizi filmden bir alıntı ile bitirelim:
Fuck you and the horse you rode in on!

Saturday, December 17, 2011

Wired

Thanks to Umut, I read the September and November issued of Wired magazine. I found it entertaining (no surprise there considering my character). For example, check out Self-Help for Nerds:
Ladies will be sexually aroused to know that I was the Memphis City Junior High Chess Champion of 1983.

Nerds get caught up in minutiae, because there is a tremendous and fulfilling sense of control in understanding every single detail of a thing more than any other living creature.

We are hyper-self-aware. We have difficulty “chilling out.”

It’s the nerd’s greatest weakness that is the nerdist’s greatest strength: a laserlike ability to focus on something. Nerdist = obsession + direction.

Nerds tend to spend a lot of time in the past and future, but to achieve happiness you have to cultivate the skill of living in the present.
Another interesting read was The Wired Atlas of the Human Ecosystem.
In short, if you are a nerd and have some time left from other serious things (like optimizing your Civilization IV strategies), go read Wired.

music:
Morcheeba - Otherwise
Finley Quaye - Dice

Tuesday, October 18, 2011

Otomobil ruhsatı maceraları - 2

Geçen yıl başlayan ruhsat maceramız nihayet bugün bitti (inşallah). Önce sorunun vergi dairesinden kaynakladığını düşünmüştük, meğerse Emniyet Trafik Tescil Şubesi'ndeki görevli ruhsata plakayı hatalı yazmış, dolayısı ile de arabamıza hatalı plaka takılmış. Hikayeyi ilginç kılan böyle bir hatanın yapılmış olması değil, konudan sorumlu başkomiserin tepkileri (daha doğrusu baştan savma taktikleri) idi. Madem Emniyet'imizin sloganı bilinçli toplum, buyrun baştan savmaya karşı bilinçlenmeye sevgili yurttaşlarım:

Wednesday, October 05, 2011

Book: The Pragmatic Programmer

"The Pragmatic Programmer", Hunt, A., Thomas, D., 1999, 321 pages is mainly about the practical technical aspects of programming like "don't repeat yourself (DRY) Principle". It also gives advice on how to improve yourself in general by recommending constant learning. A good book for people interested in software development.

Sunday, September 04, 2011

Book: Please Understand Me

Please Understand Me - Character & Temperament Types describes our basic character types. It should be read for inspiration, not for scientific precision because some parts are vague and the character test [pp.5-11] was wrong about my character: The test told me that I was ISTJ but when I read the rest of the book I saw that I was much closer to INTP (i.e. being obsessed with analysis and information gathering).

What I benefitted from is the realization that people might be feeling very different things inside for similar outside behaviour. It is also good to know what your weaknesses are. And finally, there are things that you cannot change no matter how good your arguments are. And, no, that doesn't mean they are stupid or crazy. It means they have a different character.

Saturday, August 27, 2011

Kitap: Büyümenin Türkçe Tarihi

Büyümenin Türkçe Tarihi'nde Murathan Mungan tarafından seçilmiş yazarlar kendilerini çocuklukta/gençlikte etkileyen öyküler hakkındaki düşüncelerini anlatıyorlar önce, arkasından da öykünün orjinali geliyor. Tanıdığım öykülerin (örneğin Kaşağı) yanı sıra hoş birkaç öykü daha vardı. Özellikle Kin ve Beyaz Öküz öykülerini beğendim. Kin'de (Cihat Burak, 1948) hoşuma giden fantastik tasvirlerdi, bir nevi Amat tadı yakaladım [s.173]:
Caddenin iki tarafında sıralanan elektrik direkleriyle yere çakılmış büyük yassı yılanlara benziyen [sic] kaldırımlar başı ezilen canavarlar gibi ortalığı sarsan bir şiddetle kıvranmaya, kendilerini yerden yere çarpmıya [sic] başlamışlardı.
Beyaz Öküz'deki kadın kahramanımız Zeli'nin iç dünyası ile Derya'nınki arasında ilginç bulduğum benzerlikler vardı. Son öykü olan Babama Mektup ise henüz hiçbir kitabını okumadığım Oğuz Atay hakkında epeyce ipucu barındırması bakımından öğretici idi [s.199]:
...Allah kimseyi genç yaşta anasız babasız bırakmasın filan diyorum. Sana oranla daha "münevver bir zat" sayıldığım ya da kendimi öyle sandığım için, bu yargıya "filan" sözünü eklemeyi de ihmal etmiyorum.
Dikkatimi çeken husus öykülerin biri hariç (Bir Kasabanın Ruhu) geriye kalan onbirinin kederli ve kasvetli öyküler olmasıydı. Kitaptaki yazarların edebiyatın insanı tanımada çok güçlü bir araç olduğu argümanına katılmıyorum. Hele hele de böyle iç burkan öykülerle insanı tanımaktan çok mazoşist dürtülerimizi tatmin ederiz.

Aceba bu "edebiyat insanı tanıtır" iddiası Oğuz Atay'ın babasının yazdıklarını "uydurma" diye küçümsemesinden kaynaklı bir kendini ispat, "edebiyat faydalıdır" deme çabasının sonucu mu? Bence edebiyatın klasik manada faydalı olması gerekli değildir, böyle bir iddiada bulunmak yersizdir. Sosyoloji, psikoloji varken edebiyatın ne kendimizi ne de başkalarını anlamamıza yardımı olmaz. Edebiyatın ve sanatın asıl değeri kendi duygu yelpazemizi genişletmesi, günlük hayatta pek hissetmediğimiz yoğunlukta duygular yaşatmasıdır.

music:
Nazan Öncel - Dillere Düşeceğiz Seninle
* Nazan Öncel - Boncuk
Yeliz - Yalan
Diamond Style Productions - Every Single Day

Monday, August 01, 2011

Karadeniz Gezisi

Bu yaz Raed ve İman bize misafir oldu, yanlarına Deniz ve Mesude'yi de katıp Doğu Karadeniz yayla turu yaptık. Tur şirketi Tempo Tur idi. Hem Karadeniz'de gördüklerimizden, hem de organizasyondan memnun kaldık. Ortak görüşümüz herkesin bu turu mutlaka yapması gerektiğidir. En uygun zaman Temmuz ortası (yağmur makul miktarda, hava bunaltıcı değil).

Monday, July 04, 2011

Khan Academy - A new hope for education

Khan Academy by Salman Khan (A very smart and funny guy with a big heart)
"I teach the way that I wish I was taught. The lectures are coming from me, an actual human being who is fascinated by the world around him."

"With so little effort on my own part, I can empower an unlimited amount of people for all time. I can't imagine a better use of my time."
—Sal


Part 2

Detailed (1.5 hour) video

Example lecture: Cuban Missile Crisis

music: Caro Emerald - Back it up (acoustic)

Friday, July 01, 2011

Heap > Stack

I wrote the following code which attempts to allocate memory for a two dimensional array of known dimensions:

Saturday, June 25, 2011

Limiting an angle to [0 360) or bit operations for dummies

Let's write a C function which takes as input an angle in degrees and if that angle is outside [0, 360), limits it to [0 360). Normally I would write it like this:

Sunday, June 12, 2011

Gücüksu Hikayeleri

Geçen hafta Gücük'teydim. Yağmur bolluğu ve havanın serin olması nedeniyle geçen yılki kadar çiçek açmamıştı, örneğin kuşburnu çiçekleri ve gelincik tarlası henüz ortada yoktu.

Thursday, May 26, 2011

Book: Fooled by Randomness

Fooled by Randomness - The Hidden Role of Chance in Life and in the Markets, 2nd edition, Nassim Nicholas Taleb, 2004, 316 pages

We tend to see reasons/patterns even when there are none. Some things simply happen by chance. This bias leads to many stupid decisions, especially in economic and social matters. We should be aware of our foolishness and think twice before we reach conclusions. It reminds me of the warning by Montaigne:
"I realize that if you ask people to account for 'facts', they usually spend more time finding reasons for them than finding out whether they are true... They skip over the facts but carefully deduce inferences. They normally begin thus: 'How does this come about?' But does it do so? That is what they ought to be asking."

Sunday, May 22, 2011

Book: Indefensible

"Indefensible - One Lawyer's Journey into the Inferno of American Justice", David Feige

Justice as portrayed in movies is closer to fantasy than reality. The system is overloaded and cannot deal with the volume it is presented, therefore they try to make people surrender instead of going through lengthy procedures. Justice is of secondary importance. Poor people suffer more from injustice than anyone else. Neither judges nor police are your friends, don't trust them... It is a depressing account of how so-called justice really works.

Sunday, May 15, 2011

Hırsızlık

İki gün önce biz işte iken eve hırsız girmiş, neyse ki hiçbir şey almadan gitmiş, sanırım panikledi. Levye ile dört denemede kilit dilini bükerek girmiş, herhalde en fazla 5 dakika sürmüştür:


Dil büküldüğü için kapının kapanamaması hırsızın tedirginliğini arttırmış olmalı. Apartmanda tadilat olduğundan apartmana daha fazla insan girip çıkıyordu, ayrıca tadilat gürültüsünün yanında kapının zorlanması sırasında çıkan ses dikkat çekmemiştir. Geçmişte iki tanıdığımızın evine de hırsızlar apartmanda tadilat varken girmişler.

Olaydan beni kapıcı haberdar etti (o sırada işteydim). Kapıyı açık görünce beni aramış. Eve gelince sırayla yaptığım işler:
* Araba ruhsatı ve anahtarı yerinde mi: Evet
* Az miktardaki ziynet eşyası yerinde mi (potansiyel hırsıza not: İki kolye için bence değmez kardeşim, başka kapıya): Evet
* Laptop yerinde mi: Evet
* Fotoğraf makinesi: Evet
* Tek çalınan şey kapının yanındaki bozuk paralar (<20 TL)
* 155'i arayıp ekip istedim. 10 dakika sonra "kphhhh" efektli telsizleri ile iki polis geldi, hıza şaşırdım. Evden birşey çalınmadığını, sadece hırsızlık girişimi olduğunun kayıtlara geçmesini isteğimi söyledim. Tutanak tutulmasını istiyorsam karakola gitmeliymişim. Erindim, Behzat komser pozu takınıp "size söyledim, haberiniz olsun la" dedim... "La" dememiş de olabilirim(!) Geçmiş olsun deyip ayrıldılar.
* Çilingir çağırıp kilidi tamir ettirdim.
* Apartman sakinlerinin geçmiş olsun dileklerini kabul ettim, ne tür tedbirler uyguladıklarını öğrendim.
* Ev sahibini arayıp durumu bildirdim.

Alınan dersler:

* Apartmanda tadilat varken hırsızlık riski yüksekliyor.
* Hırsızı en az yarım saat uğraştıracak bir kapı yaptır: Ev sahibi ile temasa geçtik, kapı değiştirilecek. Ancak yeni kapı en az bir ay sonra hazır olabiliyormuş. Kapıyı tamir eden çilingirin söylediğine göre kapı esnemeyecek yapıda olmalı ve göbeği kolayca çıkarılamamalıymış ("rozetli" olmalıymış). İyi kapılar 1500 TL civarındaymış.
* Üst kilidi de kilitle, erinme. En azından hırsız biraz daha uğraşmak zorunda kalsın, ganimeti hak etsin :P
* Evde kıymetli eşya bulundurma. Araba anahtarını ve ruhsatını ne yapmalı? Benim KASKO poliçesinde "Araç Çalınmasında Uygulanacak İstisnalar" başlığı altında şu yazıyor:
Araç anahtarının ele geçirilmesi suretiyle aracın çalınması ve/veya çalınmaya teşebbüsü sonucu meydana gelecek ziya ve hasarlar teminat kapsamı dışındadır. Ancak,
1.Araç anahtarlarının gasp sonucu ele geçirilmesi yoluyla aracın çalınması ya da çalışmaya teşebbüs edilmesi
2.Araç anahtarlarının, sigortalının veya aracı kullanan kişinin kendi ev veya işyeri niteliğindeki kapalı ve kilitli bir mekanda bulunması sırasında, bu mekana; kırma, delme, yıkma, devirme zorlama, öldürme, yaralama, zor ve şiddet kullanarak veya tehditle ya da araç gereç veya bedeni çeviklik yoluyla tırmanmak suretiyle ele geçirilerek aracın çalınması veya çalınmaya teşebbüs edilmesi, teminat kapsamına alınmıştır.

Ayrıca, kanunen geçerli bir belge karşılığında otopark, servis/tamirhane, oto yıkama vb işletmeye teslim edildiği ispatlanan aracın çalınması veya çalınmaya teşebbüs edilmesi sonucu meydana gelecek hasarlar sigortalı tarafından mevzuata uygun işlemlerin yerine getirilmesi ve yasal tahkikatın başlatılması şartı ile teminat kapsamındadır.
Yani anahtarları evde bırakırsam ve biri eve zorla girerek (tutanak lazım) anahtarları alıp arabayı çalarsa sigorta karşılıyor. Ruhsatın önemi yok, arabada bırakabiliriz.

* Laptop eninde sonunda çalınacak diye düşün, laptop'ta önemli bilgi barındırma. Ben o tür bilgileri internette sağlamlığına güvendiğim ve sık kullanmadığım sitelerde tutuyorum. Sık kullandığım mail şifresinin bir gün çalınma olasılığı yüksek çünkü.

Alarm taktırmayı düşündüm ama onu da her evden çıkışta aktive etmek, her eve girmeden önce de deaktive etmek lazım. Ana bir merkezle haberleşmesini istiyorsun ayda 70 kaat bayılman lazım. Benim gibi kapıyı kilitlemeye erinen biri için 10 yılda bir hırsız girecek diye böyle tedbir çok fazla.

Zihni sinir projesi:
* Kapı açıldığında
** Alarm çalacak
** Bana "eve biri girdi" diye SMS atacak
** Opsiyonel: Video/foto çekip bana email/SMS ile yollayacak
** Hırsızın sistemi bozması için 1 dakikadan fazla zaman gerekecek. Hırsızın görememesi için güzel bir kamuflaj lazım.
* Sadece benim ayarladığım zamanlarda faal olacak (misal hafta içleri 09:00 - 17:00 arasında). Böylece her gün alarmı ayarlamam gerekmeyecek.
* Her ay sabit ücret ödemek istemiyorum. Aceba kontörlü sim kartlı sistemler var mı?

İlk aşamada zaman ayarlı bir alarm bulmayı/yapmayı düşünüyorum. Böylece yıllardır planladığım amatör elektroniğe başlayabilirim. Faydalı bir iş yapıyorum diye Derya lehim kokularına ses çıkarmaz umarım ;)

Sözün özü, herkesin evine eninde sonunda hırsız girecek. Mühim olan mahvolmayacak şekilde organize olmak.

Thursday, May 05, 2011

Book: Getting Things Done

"Getting Things Done", David Allen, 2001, 278 pages

The abundance of things to do and trying to hold all of them in our heads results in stress. The human mind cannot concentrate on more than a few things (usually one) at a given time. The issues that we are not currently dealing with disturbs our focus and saps away our energy. We need to analyze our to do items and break them down to actions. We also need a recording system which holds our to do items and reminds us at the appropriate time so that we can empty our brain (aka peace of mind).

Tuesday, May 03, 2011

C: Two dimensional arrays and pointer indexing

Pointer indexing of two dimensional array:
my2DArray[iCol][iRow] =
*(mpPointer+iRow*nCol+iCol);
"The C Programming Language", 2nd edition, Brian W. Kernighan, Dennis M. Ritchie:
[p.29] When the name of an array is used as an argument, the value passed to the function is the location or address of the beginning of the array - there is no copying of array elements. By subscripting this value, the function can access and alter any argument of the array.

[p.78] The unary operator & gives the address of an object, so the statement "p = &c;" assigns the address of c to the variable p, and p is said to "point to" c... The unary operator * is the indirection or dereferencing operator; when applied to a pointer, it accesses the object the pointer points to.

[p.83] By definition, the value of a variable or expression of type array is the address of element zero of the array... a reference to a[i] can also be written as *(a+i)... In short, an array-and-index expression is equivalent to one written as a pointer and offset... There is one difference between an array name and a pointer that must be kept in mind. A pointer is a variable, so pa=a and pa++ are legal. But an array name is not a variable; constructions like a=pa and a++ are illegal.

[p.83] As formal parameters in a function definition, "char s[];" and "char *s;" are equivalent...

Thursday, April 21, 2011

SABİM

SABİM web sayfasından:
SABİM Türkiye’ye, haftanın 7 günü, 24 saat kesintisiz bir şekilde hizmet vermektedir. Vatandaşlarımıza düşen “184 ALO SABİM” hattımızdan aramak, ya 0 312 430 18 49 numaralı faksımızdan ulaşmak, ya da şahsen Bakanlık Merkez Binasında bulunan SABİM’e şahsen başvurmaktır.

Bu yollarla bize ulaşan vatandaşlarımız:
— Sağlık sisteminin işleyişine yönelik her türlü konuda bilgi alabilirler.
— Sağlık sistemine yönelik talep, eleştiri ve önerilerde bulunabilirler.
— Sağlık hizmetlerinden yararlanırken, sistemin herhangi bir aşamasında yaşadıkları sorunlarını iletebilirler.
Bu hizmeti ve etkili olduğunu bir asistan doktorun yazısından öğrendim:
...siz bir hasta olarak SABİM’i arayıp falanca doktor bana gerekli ilgiyi göstermedi, 10 dakikadır sıra ilerlemiyor, doktor odayı terketti dediğiniz anda sağlık bakanlığı yarım saat içerisinde hastaneye döner ve falancayı bulur ve sorar.
Geçenlerde doktorlar grev yapmıştı, bu vesile ile bir iki kelam etmek isterim. Doktorların çalışma koşullarının kolay olmadığının, doktor olana kadar uzun süre okuduklarının farkındayım. Ama çok daha farkında olduğum şey vatandaşın hastanelerde eziyet çektiğidir. Doktorların empatik davrandığı pek görülmez, görülünce şaşırılır. Çoğunluk için doktor soğuk ve kibirli biridir, ondan korkulur. Her an sizi azarlama hakkına sahiptir. İyi davranması bir lütuftur.

İçinde bulunulan sıkıntıları gidermek için basit adımları dahi atmadığınız sürece sevgili doktor kardeşlerim, ihtiyacınız olduğunda aradığınız sempatiyi bizlerden bulamazsınız.

Müzik: Ezginin Günlüğü - Ebruli

Film:
* Sunshine (2007)
* The Source Code

Saturday, April 16, 2011

Lise 1 Fizik Sorularına Cevaplar

Aşağıdaki Lise 1 fizik sınavına verilen cevaplar pek çok öğrencinin fiziğe değil, temel Türkçe'ye ihtiyacı olduğunu gösteriyor çünkü böyle cevaplar ancak anlamadığınız bir dilde soru sorulsa verilebilir:


Adventures with Visual Studio 2010

How to prevent console from exiting immediatly when you run using Ctrl + F5:
With the new visual studio 2010 you might see this behavior even when you use ctrl f5 aka "start without debugging". This is most likely because you created an "empty project" instead of a "Win32 console application". If you create the project as a "Win32 console application" you can disregard this as it does not apply.

In the older versions it would default to the console subsystem even if you selected "empty project", but not in 2010, so you have to set it manually. To do this select the project in the solution explorer on the right or left (probably is already selected so you don't have to worry about this). Then select "project" from the menu bar drop down menus, then select "*project_name* properties" > "configuration properties" > "linker" > "system" and set the first property, the drop down "subsystem" property to "console (/SUBSYSTEM:CONSOLE)". The console window should now stay open after execution as usual.
When you have a C++ project with C files in it, you will get "error D8045: cannot compile C file". You need to change a setting [MSDN]:

1. Open the project's Property Pages dialog box.
2. Click the C/C++ folder.
3. Click the Advanced property page.
3. Modify the Compile As property and set it to /Tp. The /Tp option specifies that filename is a C++ source file, even if it doesn't have a .cpp or .cxx extension. Which is the case for C files which usually have .c extension.

Sunday, April 10, 2011

Suç ve Ceza

Yakınlarda açığa çıkan bir tecavüz ve cinayet vakası nedeniyle hangi suça nasıl ceza verilmeli konusunu ve idam cezasını tartıştık. Ceza miktarını belirleyebilmek için önceliği ortaya koymak gerekir: Mağdur tarafın yüreğinin soğuması mı, suçun azaltılması mı, suçlunun ıslahı mı daha öncelikli?

Eğer mağdur tarafın tatmini öncelikli ise ağır suçlarda neden idamla sınırlıyoruz ki kendimizi? Örneğin neden işkence etmiyoruz? Eskiden ağır işkencelerle öldürülme kabullenilen bir uygulama idi. İşkencenin insanlık dışı olduğunu öne süreceksek bugünkü uygulamaların insanlığa uygun olduğunu nereden biliyoruz? İnsanlığın ulaşabileceği en medeni noktada olduğumuzu iddia eden yoktur herhalde. Cezaların zamanla yumuşadığını göz önüne alırsak bir 10 yıl sonra bugünkü cezalarımızı insanlık dışı bulacağımız kesin.

Ayrıca suçun zanlı tarafından işlendiğini hangi kesinlikle biliyoruz? Dünya'da mükemmel bir adalet sistemi var mı? Sistemi işleten insanlar arasında kariyer hırsı ile gözü dönmüşler, beceriksizler, umursamazlar yok mu? İdamın geri dönüşü yok. Ne kadar hatayı göze alacağız? Örneğin her 9 suçluya karşılık 1 suçsuzu idam etmeyi göze alıyor muyuz?

İlk andaki öfkeyi atlatan çoğu kişinin suçun azaltılmasını öncelikli bulacağını tahmin ediyoruz. Suçun azaltılmasını nasıl sağlayacağız? İlk akla gelen caydırıcı cezalar vermek. Peki o zaman cezayı sınırlayan nedir? Tamam işkence etmeyelim ama neden hırsızlığa 30 yıl ceza vermiyoruz? Büyük olasılıkla cezanın ağırlığı ile  caydırıcılığı arasındaki ilişki sandığımızın daha zayıf. Bu aralar okumayı planladığım When Brute Force Fails kitabının konuya ışık tutmasını umuyorum.

Gelelim suçlunun ıslahına: Örneğin hadım yasasında ilaçla tedavi öngörülüyormuş. Adam tedavi olduktan sonra ona hala suçlu muamelesi yapacak mıyız, yoksa iyileştiği için (%100 kesinlikle söylenebilir mi?) salıvermemiz mi gerekir? Suçluyu cezalandırmaya duyulan heves kadar, suça teşvik eden çevresel/biyolojik faktörleri anlamaya da gayret edilmeli, edinilen bilgiler ışığında önleyici tedbirler güncellenmeli.

Tüm bu tartışmalardan sonra idam gibi cezaların en önemli probleminin aslında ölümü normalleştirmesi olduğu sonucuna vardık. Toplum ölmeyi, öldürmeyi anormal karşılamazsa, insan öldürmek meşru kılınırsa bu yetkiyi kimin nasıl kullanacağı bilinemez. İnsanlık tarihi gücün kendini çoğaltmak için ne hunharca yollara başvurduğunun örnekleri ile dolu. En iyisi geri dönülemez sonuçları olan böyle bir riske hiç girmemek ve hiç kimseye, hiçbir kuruma insan öldürme yetkisi vermemek.

Velhasıl kelam, televizyondaki sansasyonel haberin etkisinden kurtulup aklı selim ile düşündüğümüzde ilk başta parlak görünen "sallandıracaksın hepsini" fikrinin pek de zannettiğimiz kadar rahatlatıcı olmadığını gördük.

music:
* Aloe Blacc - I Need A Dollar
* Mireille Mathieu - Der Clochard

Thursday, April 07, 2011

Reading a text file using C

I wanted to read the following text file which has an extra line at the end (test.txt):
345
 <--empty line

I wrote the following C code:

FILE *fp;
char line[80], *myResult;
fp = fopen("test.txt", "rt");
while (!feof(fp))
{
         myResult = fgets(line, 80, fp);
         printf("line = %s", line);
         printf("myResult = %s", myResult);
         printf("feof(fp) = %d\n", feof(fp));
}

The output was:

line = 345
myResult = 345
feof(fp) = 0
line = 345
myResult = (null)feof(fp) = 16

I was surprised to see “line = 345” being written twice although there is only one value inside the file. My guess is that when fgets reads the last line, it directly returns NULL and while doing so it does not modify the value that was pointed to by “line”, so “line” stays at the same value from previous step.

I modified the while loop as follows:

while (fgets(line, 80, fp) != NULL)
{
         printf("line = %s", line);
}

New output is just one line as expected:

line = 345

Lesson learnt: Don’t use eof() in your while loop, use the return value of fgets() to check end of file.

Thursday, March 31, 2011

Adventures with Visual Studio 2010 and Matlab

I had to write a C-Mex function to be called from a Matlab script. I first wrote the C-Mex interface, then the algorithm in a separate C file and added unit tests using Visual Studio 2010's C++. I spent a lot of time on not-so-intuitive details.

I wanted to pass a two dimensional array (DCM_ce) to a function (calcXYMinusHFromLLH). In the main body, the Visual Studio watch gave correct answers:


But when it entered the function, the watch value was wrong. I realized that when passing multidimensional arrays to a function in C, Visual Studio's watch gives wrong answers. If you use printf, you see the real value that is used:


My suffering did not end yet(!) Later on, when I called the C-Mex function from an m-file script, I noticed that the interface function (mexGetPr) took the transpose of the 2-D matrix. I had to re-transpose it so as to obtain the original input from my m-file:

When I finished the job, the time I spent was like this:
* Designing and documenting the algorithm: 0.5 days
* Converting the algorithm to C code (with all necessary helper functions): 0.5 days
* Wrestling with Visual Studio: 1 day
* Wrestling with C-mex: 1 day

As you see, environmental problems took most of my time. That's a good reason to have specialized folks for implementing algorithms, especially if the project is complex.

Sunday, March 20, 2011

Nükleer Santral ve Adam Yerine Konmak

Japonya'daki depremin ardından Mersin-Akkuyu nükleer santral tartışmaları yoğunlaştı. Benim üzerinde durmak istediğim konunun teknik boyutu değil, sosyal/politik tarafı: Nükleer santral, baraj vb. geniş çaplı etkisi olan tesislerin kurulması kararı verilirken bölgedeki insanların rızası ne kadar önemlidir?

Klasik cevaplardan biri "uzmanlar gerekli enerji ihtiyacı ve risk değerlendirmelerini yapmışlardır herhalde, onlardan iyi bilecek değiliz". Buradaki "herhalde" kelimesi önemli çünkü bundan emin olamayız. Hele de o uzmanlar santralin yakınında oturmuyorlarsa... Ayrıca uzmanlar hep mükemmel kararlar verselerdi çok daha müreffeh bir hayat yaşıyor olurduk. Teknik nedenler %100 doğru bile olsa özellikle bölgedeki insanlara nedenlerin anlatılması ve ikna edilmeleri gerekir, tazminat yetmez. "Cahil halk anlamaz" argümanına sığınmak benim kabul ettiğim bir yaklaşım değildir.

Önerim uzmanların, bürokratların açıklamaları ile yetinmeyip o bölgede ikamet eden insanlara "santrale evet/hayır" referandumu yapılmasıdır. Böylece ikna ve tazminat çalışmaları daha ciddi ele alınır, bölge insanı da karar mekanizmasına dahil olan gerçek manada "vatandaş" haline gelir, ortalama zeka yükselir. İşler biraz uzar, maliyet artar ancak demokrasinin gereği budur ve "adam yerine konmak" paradan çok daha önemlidir.

music:
* Aşık Mahzuni Şerif - Mamudo
* Gregorian - Nothing Else Matters

Thursday, March 10, 2011

Bir fikri sevmek ya da sevmemek, işte bütün mesele bu!

İnsanları bir konuda ikna etmen gerektiğinde en çok dikkat edeceğin şey mantık değil, karşındakinin o konuyu sevip sevmediğidir. Eğer sevmiyorsa saf mantıkla ikna etmek deveye hendek atlatmaktan zordur, her iki tarafta sinir yaratır. Önce duygu durumunu tart, fikirden hoşlanmıyorsa neden hoşlanmadığını anlamaya çalış, mantıkla zaman kaybetme.

Örneğin ateşli tartışma konusu olan evrimi ele alalım. Evet evrim teorisini destekleyen tonla ispat var. Ancak ilk yapman gereken şey ispatları sıralamadan önce "evrim teorisinin bir an için doğru olduğunu düşün, bu senin  değerlerinle çelişir mi?" sorusunu sormaktır. Diğer canlılarla bağımızın olması fikri pek çok kişide insanın değerini düşürdüğü hissini uyandırıyor (bende tam tersi bir hisse yol açıyor - bkz. LUCA). Eğer evrimin insanın değerini azaltmadığına ikna edebilirsen gerisi kolay... Duygu ve ikna arasındaki bağlantı için bkz. On Being Certain.

Wednesday, March 09, 2011

Kar tatilinde yapılacaklar

Ankara'yı bir karış kar felç etmeye yetiyor, iki karış olunca doğal afet sayıldı, iki gün tatil olduk.


Tatilde neler yapabiliriz? Öncelikle blogspot'a erişim için gerekli ayarları yapar, sonra blog yazarız :)

Okunmayı bekleyen kitaplarımıza ilgi gösterebiliriz:


Kitap okumaktan sıkılınca dizi izleyebiliriz. Önerim Dr. House'dur. Derya'ya not: Hayır canım, Dr. House'u kattiyyen sensiz izlemiyorum. İzin verdiğin RTL'deki Dr. House dün akşammış, kaçırdım :(.

Film izleyebiliriz (bkz. playlist)

Belgesel izleyebiliriz:
* Life in the undergrowth
* The dog whisperer
* Coast
* Monsters inside me

NBA TV izleyebiliriz.

Portakal suyu sıkar, bademle birlikte yeriz (güzel bir kombinasyon). Acıkır, yemek yaparız (fırında soslu tavuk).

Müzik dinleyebiliriz (misal Gregorian'dan The Unforgiven ve Brothers in arms)

Thursday, January 27, 2011

How many monitors do I need for software development?

A constant theme for me is to improve the way I work. I just replaced my chair (unfortunately not a Hermann Miller) and adjusted the lighting. The remaining items are a better keyboard and finding the optimum monitor setup.

Right now I use two monitors but today I realized that I need three. While working I usually have three separate pages I need to constantly access. The main one is the development screen where I write code (Matlab, Visual Studio, Netbeans). Second page is the specification/design document for the problem at hand or the help page of the development environment. Third page is my notes about the code (steps I followed while solving a bug, lessons learnt etc.). I use Microsoft OneNote for this.


Therefore I need, three monitors (actually four if I had separate monitors for spec and help, but that would be too crowded on the desk). Other programs usually open all the time are Total Commander, MS Outlook and IE, but since I don't have to access them as often, they don't need their own monitors.

Further reading supporting my point:

* Why Developers Need a Multi-Monitor Setup
* What's your ideal multiple-monitor setup for programming?
* Joining The Prestigious Three Monitor Club
* Three Screens For One Computer

Technical details:

* Main questions:
** Does your motherboard support dual graphic cards?
** Are the chipsets of your graphic cards the same?
** It's crucial to have an adequate power supply, otherwise the PC will suffer low performance and random shutdowns as it overdraws the PSU's available wattage and amperage

* Multiple Monitors and Productivity: Motherboard must support it and both cards must have same chipset.
* Ultramon: for having separate taskbars on each screen

music: Massive Attack - Teardrop

Sunday, January 23, 2011

Akademik Yayın Stratejisi

Geçen Nesij'le akademik camia ve akademik yayın üzerine sohbet ediyorduk. Anladığım kadarı ile iki yaklaşım var:
* Az ama kaliteli yayın
* Çok ama daha "düşük kaliteli" yayın

Umut'tan öğrendiğime göre kaliteli bir yayını da alt parçalara bölerek yayın sayısını arttırmak mümkün. Camianın kullandığı terim hoşuma gitti: Least Publishable Unit, diğer adı ile Minimum Publishable Unit (MPU). MPU bilimsel bir dergide yayına yol açabilecek en az içeriği tanımlayan bir espiri.

Bazı üniversiteler kaliteden çok yayın sayısına bakarken, diğerleri sayıdan ziyade kaliteye bakıyormuş. O nedenle de akademik kariyerini sürdürmek istediğin yerin ne beklediğini bilmek kritik öneme haiz. Diyelim sen kaliteye önem verdin ve doğal olarak çok zahmetle az yayın yaptın. Ama eğer çalışmak istediğin yer sayıya göre eleman alıyorsa verimsiz çalışmış ve boşa kasmışsın demektir. Üniversitenin kriterini öğrenmek için sanırım tek çare oradaki akademik kadronun yayın geçmişine bakmaktır çünkü doğrudan dekana soracak olsan "tabi ki kaliteye önem veriyoruz" diyecektir.

music:
* Belle & Sebastian - I Want The World To Stop
* The Hooters - Johnny B