Trial and Error in the middle of the road http://t.co/8HMskGz9
I generally don’t write answers to other posts. Indeed I only did one time (http://blog.ozansener.net/?p=14). But, when I read the Salih’s article, I just felt the same idea. Idea that things that I will write can matter a little bit. Then, I decided to write my ideas on “Trial and Error”. I don’t know are they somehow related or not.
let’s start from very very basics. Life is simple, it is not complicated my dear friend. It will never be complicated. Let’s start from the begining, “evolution” the amazing mechanism which results in the enormously complicated creatures (are they complicated, I don’t know :p) is far most simplist thing that I have ever seen. If you adapt better, you live more. How can you adapt better ? Do you think that being complicated means adapting better. No it is not. I am so sorry, but the one who will live most will be the most basic one. Universe is somehow constructed with the aim of beng simple and the illusion of the lie that being complicated matters. So, you can say that what is the relation between this sentences and yours. Let me explain, making mistakes is much simpler and better than being perfect. Being perfect is an illusion like being complicated and successfull in the same time. Therefore, making somemistakes and making them more an more is the correct way of living. Especially, if this mistakes are simple ones, like believing on someone, like feeling same thing again and again. So, I believe you are in the correct way. Indeed, you said that you does not care about far future because it is far fetched. Yes, you are completeley right. Future is also quite complicated, as complicated as being impossible to be true :p
Are you confused, Me too, don’t worry. For the last couple of moths, I am obssessed with lots of ideas and being simple enough is one of them. If you spend some time on seeing the fact that world is simple, I think you will understand me. And. don’t worry a cure for an obsession is getting another one :p.
As a final remark in Turkish (I don’t know why the rest in english :p). “Bir seye bir yil sonra uzulmeyeceksen, simdi de uzulmeye degmez :p”
Offline Programlama :p
Hemen bayram oncesi ev degistirdigim icin henuz evin tum sorunlari cozulmedi, hala IKEA mobilyalarini birlestirme islemiyle mesgulum bile denebilir. Bu yuzden evde internet de yok. Anliycaginiz offlineim bir suredir :p. Ulasmaya calisip ulasamayanlara, mail atip cevap alamayanlara da burdan bir ozur yollayalim madem.
Neyse konumuz bu degil, gecen gun evde gecirecegim yaklasik 7 saatim (19:00-02:00 – evden cikamayacak kadar yorgundum ve genelde 2′den once uyuyamiyorum :p) vardi ve henuz son gunlerin eglencesi puzzle mobilyalarim da gelmedigi icin yapicak pek de bir seyim yoktu. Oncelikle Nokia vb. isler ile ilgili okunacak bir kac makale vardi, bari onlari okuyayim dedim. Dogal olarak Facebook, Mail, Twitter vb. distractionlar olmadan gecirilen 2 saatte tum bu makaleler okundu. Bekledigim gibi asiri verimliydim internetim olmadigi icin. Sasirmadim tabi bu duruma :p Sasiridigim kisima simdi geliyoruz. Kalan 5 saatte yapicak is olarak elimde bulunan is icin kullanabilecegim bir windows kodunu (c++ ama win.specific library’ler kullanilmis) linux’a port etmeyi sectim. Internetsiz kod yazmak oldum olasi kabus gibi gelmistir, hatta bir gun Siemens’de calisirken sirf internette sorun var diye isten erken cikip eve gittigimi bilirim. Neyse basladim, dogal olarak bir kac yerde takildim ama library’nin dokumantasyonu yetti o takilmalar icin. Taki c deki binary operatorler ile ilgili bir sorunla karsilasana kadar. Dedim yapicak bir sey yok acicaz o kalin ANSI-C Programming Language kitabini okuycaz binary operatorleri. Sonra baska bir sorun function pointerlarla ilgili yine ayni cozum ve 3 saatin sonunda is bitti. Normalde internetim olsa cok daha uzun sureceginden suphem yok, hele bitmesi bile mucize olurdu :p. Ve kalan 2 saatte ne zamandir ihmal ettigim bir kitabi okuyup bitirdin, yine hic bir bolunme olmadan.
Ve sonunda artik interneti calisirken dengeli kullanmaya karar verdim. Sadece is mailimi acik tutup, kalan herseyi kapatarak calismayi dusunuyorum. Ve cok daha onemlisi, internetten kolay bilgi yerine acip kitapdan okumak hem daha verimli bir cozum cunku cikacak diger hatalari da cozuyorsunuz ayni anda :p. Hem de tabiki asiri derecede ogretici.
Internetsiz birkac gunu deneyin derim, evet aci veriyor ama verimli de olabiliyor :p.
Jonglorluk, Bilim ve Doga
Kafasindan binlerce fikir gecen, hiperaktif garip bir muhendislik grad ogrencisi, ODTU’de fizik cimlerinde elinde garip birkac oyuncak, onlari havada ve dengede tutmaya calisiyor, jonglorluk de deniyor bu eyleme. Yoldan gecen merakli gozler, cogu gulup geciyor, ciddi bir kismi katilmak istiyor ama korkup cesaret edemiyorlar. Hatta agir abiler geciyor, iclerinden gecirdikleri sey belli “Ne gereksiz islerle ugrasiyor bu cocuklar ya”.
En cok mutlu oldugum aktivitelerden biri jonglorluk, zamanin nasil gectigini anlayamiyorum hic bir zaman. Hatta o kadar ciddi bir hobi oldu ki benim icin bu yaz sirf jonglorluk yapmak icin EJC(European Juggling Convention)a Munih’e gidiyorum. Onca yol, onca para sadece jonglorluk icin sacma geliyor coguna. Ama degil benim icin, hayatim boyunca yanimda olacak ve beni eglendirecek bir hobim oldugu icinde mutluyum. Anlamiyor cogu kisi ama sevdigim icin jonglorum sadece, sevdigim iste calistigim gibi, sevdigim kisilerle eglendigim gibi. Sevmiyorsam, eglenmiyorsam yapmiyorum arkadasim, ne kadar para verirse versinler, ne vaad ederse etsinler yapmiyorum iste :p.
Neyse konu bu degil, konu neden bilim insanlarinin, yada dogayi anlamak isteyenlerin jonglor olmasi gerektigi :p. Jonglorluk temelinde yatan 3 onemli prensip var benim gordugum. Biri objeleri havada tutmaniz gerek :p, ikincisi paylasim, ucuncusu de nasil yapicagini bilmek yapmaniza yetmez. Sanirim teori ve pratigin birbirinden en farkli oldugu yer jonglorluk. Haraketlerin anlatimi ve aciklamalari asiri derece de kolay, ama elinize aldiginizda her sey degisiyor. Teori pratikten hic olmadigi kadar farkli oluyor. Ayrica jonglor olmak icinde yapmaniz gereken iki sey var. Birincisi yeni seyler denemekten korkmamak, ikincisi sonsuza kadar “trial and error” dongusunu hizli ve yilmadan yapabilmek. Birincisi cesaret evet cok onemli, fizik cimlerinden yururken en azindan gelip bana bunu ogretsene demeniz gerek, ardindan kendi bedeninizle savasacak kadar cesur olmalisiniz, sol elinize sag elinizden farki olmadigini ogretmelisiniz mesala. Gelelim asil onemli kisma “trial and error”, her elinize aldiginiz yeni oyuncak ya da her yeni trick aslinda bir “trial” ve ilk denemede basarili olma sansiniz yok. Defalarca basarisiz olmak zorundasiniz, her basarisizlikta tekniginizi degistirip tekrar denemelisniz. Hatta eger sansli iseniz birakin o denediginiz seyi ogrenmeyi arada yanlislikla yeni trickler bile uretebilirsiniz.
Gelelim doga ve bilim kismina, aslinda bilimsel surec yada evrim’in de iki temel ilkesi var. Birincisi degisimden korkmamak ve cesur olmak ikincisi de “trial-error”. Bilimsel surec de aslinda zor ve cogu insanin cozmekten kokrtugu bir probleme cesur olarak yaklasmak ve “trial-error” dongusunu yilmadan uygulamaktan geciyor. Bu surecte bir sekilde hedefe ulasiyor ya da ulasamiyorsunuz ama yolda o “trial”lar sonuc veriyor. Ve hayal bile edemeyeceginiz seyler buluyorsunuz.
Yani diyorum ki eger egitim sistemimizi tasarlayanlar bu “trial-error” kavramini cozmus olsaydi eger her sinav bir “trial” olarak gorulecek ve ikinci-ucuncu sanslar verilecek “error”‘lar sabit kalmak yerine azalacakti. Ya da muhendislerimiz jonglor olsalardi, yenilikci olma cesaretini gosterecekler, hata yapmaktan korkmayacaklardi. Kisa surede calisan ve ordan burdan asirilmis teknolojilerle degil, ilk seferinde calismayan ama yenilikci teknolojilerle ugrasacaklardi.
Sonuc olarak, ya insanlara “trial-error”‘in doganin temel kanunu oldugunu ve sistemlerini onlara gore ayarlamalari gerektigini ogretin ya da onlarin jonglor olmalarini saglayin kendileri ogrensinler :p
I Brain ODTU
O kadar cok sey okudum ki bu video ile ilgili, kimi mantikli kimi mantiksiz ama bir bilim insani adayi ve bir ODTU’lu olarak bende kendi fikirlerimi soylemek istedim. Ilk olarak su yazi benim bu post’u yazmamin temel nedeni. http://bit.ly/pGhmD5.
Once kendi kisisel elestirilerim, I brain ODTU slogan olarak uzerine cok da dusunulmemis bir slogan, I think METU cok daha guzel olabilirdi. Ilk olarak brain verb anlami olarak http://www.merriam-webster.com/dictionary/brain cok alakasiz bir anlama sahip ve bu cumlede olmamis. Ayrica ODTU ingilizce bir cumlenin icinde olmamis, eger ODTU’yu bir marka yapacagiz METU kullanmayacagiz derseniz anlarim ama METU acilimi da kullanimda iken, ODTU olmamis.
Bunlarin disinda bence harika bir video olmus, her ne kadar ODTU yillardir tanitima ihtiyaci olmadigini dusunse de tanitima ihtiyaci vardir. Iyi bir universite olmak icin iyi bir ogrenci kitlesine ve de iyi olanaklara ihtiyaciniz var. Bunun icin de bu olanaklari saglayacak kurum ve kuruluslari ve de iyi ogrencilere ihtiyaciniz var. Ve son yillarda ODTU’nun cok iyi bir PR politikasi oldugunu dusunuyorum. Ayrica slogan da cok guzel olmus, biz dunyayi degistirebiliriz. Bunun uzerine saatlerce konusulabilir ama bence gerek yok, bence video yeterince anlatiyor.
Gelelim bu videoyu zirva olarak goren ODTU ogrencilerinin savlarina:
1 – Gunden gune bilimden kopan: Bilimden koptugunu iddia ettiginiz universite 2010 Times Higher Education University Rankings de ilk defa ilk 200′e girmistir. Bilkent ile birlikte, ki Bilkent’in siralamasi 112 olarak ODTU’nun ustunde olsa da, Research Quality metrikinde ODTU daha onde bulunmaktadir. Benim kisisel gozlemime gelirsek de, ODTU disindaki universiteler ya bilimsel olarak yetersiz durumdalar, yada ogrencilere bilimsel ozgurluk saglamayip sadece kole gibi calistirip iyi yayinlar yapmaktalar.
2 – Piyasaya yardiran/Teknokentteki sirketler vb.: Bir universite’nin akademik dunya disinda endustriyel dunyaya da hizmet etmesi gerektigini kimse inkar edemez. Zaten modern universite kavrami endustri devrimi ile tum dunyada degismistir. Endustriden kopuk bir universite bence asil zirvaliktir. Ote yandan su da bir gercek ki, ODTU’yu iyi bir dereceyle bitiren ogrenciler buyuk olcude akademik hayati secmektedir, bu bile ODTU’nun akademik hayati ne kadar desteklediginin bir gercegidir.
3 – Homofobik Yonetim: Sonuna kadar hak veriyorum bunun karsisinda durulmasina, ODTU yonetimi LGBTT’nin topluluk olmasini engelleyerek bir hata yapmistir ve bence bu durumun cozulmesi gerekiyor.
4 – OTK: Bu konu da cok bir sey soylemek istemiyorum, OTK secimi tamamiyla demokratik gerceklesmektedir, ve her ne kadar OTK baskani ile ben de mutlu olmasam da sonucta benim de katildigim bir secim sonucu secildi. Demokratik bir toplumun parcasi olarak, saygi duymak zorundayim.
5 – ODTU Yonetimi : Ve hepsinden onemlisi, asil ODTU’yu ODTU yonetiminden ibaret gormek gercek bir zirvaliktir. ODTU’yu ODTU yapan ogrencisidir, akademisyenidir ama yonetimi degildir. Yonetimi elestirmenize birsey demem. Hatta arkanizda da yer alirim, ama bana cikip ODTU ruhunu anlatan bir video uzerinden ODTU yonetimini elestirirseniz is degisir. Kusura bakmayin ama siz ODTU’yu sadece bir bina yigini ve isletme olarak goruyorsunuz.
Sonuc olarak ODTU’lu olmaktan hep gurur duydum hala da duyuyorum. Herseyin gulluk gulistanlik oldugunu iddia etmiyorum, olamaz da.
Korkma sevgili okur, Yazmaya devam edecegim :p
Bir ay olmus yazmayali, hic oyle siradan bir ay da degil. Bu surede TR’de secim oldu, dunyada yine en uzun gun gerceklesti, ben Finlandiya’dayim simdilik, Nokia N9′u tanitti, tum projelerim calisti, finaller oldu falan filan :p. Yazamadim ne zamandir usengeclik yada belki yazasim gelmedi, uygun degildi psikolojim. Neyse, donelim ise. Aslinda, Nokia projesinden ve su Tampere’de gecirdigim bir haftadan bir suru deneyim kazandim, belki daha net bir sekilde gelecegi gormeye basladim. Su an kendi konumda (multi-touch screenlerle 2D/3D conversion) sanirim bir kac yil sonrasinin demolarini, urunlerini paperlarini tahmin edebiliyorum, hatta sanirim prototip cihazlari ile oynayip o teknolojinin arkasinda calisacak algoritmalari gelistiriyorum. Ilginc seyler var kafamda ama sanirim paylasmama izin vermiyor birileri (Big Brother-Nokia :p). Ama su patent vb. basvurulari ciksin aradan sanirim bu islerin gelecegini da yazacagim. Gelelim bu yazinin teknik kismina :p.
“EE 586 Artificial Intelligence” dersi projesi ile ugrasirken karsima cikan iki guzel kutuphane ile tanistirmak istiyorum seni sevgili okur :p. Biri Valgrind oburu GraphLabAPI. Valgrind aslinda tam bir can kurtarici ozellikle benim gibi multi dimensional-multi threaded-statistical uygulamalar yazmayi pek sevenler icin :p. Kutuphanein aslinda bunlarla hic bir ilgisi yok, bir error detector. Dynamic memory kullaniyorsaniz GDB ile beraber calisip, hangi satirda aldigin memory’yi geri vermedigini falan gayet guzel buluyor ve developer’in hayatini kurtariyor. Bununla yetmiyor, gidiyor multi-thread deadlock’larini ve mutex hatalarini da cikartiyor. Anlaycaganiz tam bir debugger dostu :p. GraphLabAPI ise graph kullanarak machine learning uygulamalari yazmak isteyenler icin, biraz kisitli gibi gozukuyor ama aslinda degil :p. Markov random fileld vb. straightforward uygulamlarini geciyorum ama temel mantik su, eger datani node ve edgelerden olusacak hale getirebiliyorsan, node ve edgelerdeki datayi update etme fonksiyonunu yazip multi-core calistirabiliyorsun hemde ekstra hicbir efor olmadan. Bizde Alternating Least Square kodunu bu kutuphaneyi kullanarak implement ettik.
Ozetle hersey yolunda sevgili okur, paylasicak cok sey birikti :p Yaz geldi, zamanim da var artik. Daha cok yazarim heralde artik…
Size MATTERs not.
Dark Matters from PHD Comics on Vimeo.
Uppss I Learned Gravity :p

Hatirlariz hepimiz coyote’nin road runner’i kovaliyisini ve bir ucurumun kenarina geldiklerinde road runner’in ucup kacisinin ama coyote’nin yurumeye devam edip tam ucurum ortasinda yer cekimini, ya da havada oldugunu farketmesini ve sonra dusmesini. Ya da diger cizgi filmlerde o kahramanlarin dusmeleri gerektiklerini farkedene kadar dusmeyislerini. Birden aklima geldi bu gun, acaba biz yanlis mi baktik hep bu duruma hayatimiz boyunca, acaba biseyler mi ima etti o cizerler bize yillar boyu. Sanirim evet, bize caktirmadan yanlis yapmanin, yanlis olmanin dogrulugunu gosterdiler sanirim :p Aslinda o ucurumdan atlamanin yanlis olmadigini gosterdi bize, yercekimini takmayanlarin orda yuruyebilecegini ogretti. Toplumun cakal’a yanlis yaptigini zorla ogrettigini, aslinda ona bir seyler ogreterek o ucurmundan dusmesine neden oldugunu anlatti.
Peki yanlis yapmak cidden kotu bir sey mi?. Ya da yer cekimi gercekten uyulmak zorunda olunan bir kural mi?. Eger yanlis yaptigimi farketmezsem hala yanlis yapiyor olur muyum? Ya da yercekimini ogrenmek beni mutlu bir insan yapmasi gerekirken mutsuz mu yapiyor? Bu sorularin cevabini verebilirmiyim bilmiyorum, ama baska bir soru sorabilirim hem de evrene. Acaba doga yanlislarla mi yuruyor, yoksa dogrularla mi?. Dinozorlarin yok olmasi bir yanlislik ve hata sonucu degil miydi yani, yada evrim aslinda mutasyon’a (dna daki yanlisliklara :p) dayanmiyor mu?. Eger yanlislik duzene ve kurallara karsi olmaksa, son donemde arap dunyasinda yasananlarda mi yanlis? Sanirim yanlis fazlaca yanlis anlasilmis bir kavram :p, dogru ise fazlaca abartilmis. Belki dogrularin odullendirildigi bir sistemle yetisen bir nesil oldugumuz icin boyle yanlis bir sonuc ortaya cikti, dogru olmak konusunda o kadar takintiliyiz ki her sey yanlis oldu belki de. Ama eger doga da yanlissa, ne diyelim yanlis dogruymus megerse :p.
Accessing Facebook Graph API through Python
I needed to fetch some statistics from Facebook for one of my fun projects (details are coming :p). First I checked couple of developer pages on facebook, and I have found out a graph-api which is amazingly easy to use and powerfull. It simply uses JSON requests through web. I ll try to summarize the process of developing desktop application which fetch data from facebook.
First step is setting up a new app on http://www.facebook.com/developers/ then finish set-up and note App ID and App Secret. At that point writing a web application with a django or any other framework is much easier than rest of this process because API is designed for web usage. But we will write a desktop application. By the way, I ll not try to explain details of Graph API, I ll just try to explain authantication and request sending part. For details about API please refer to http://developers.facebook.com/docs/reference/api/.
Although sendin http requests and parsing json files are quite easy, authentication is the main problem if this application. Because, authentication is working on web browsers. Therefore, in our code we will use a simple browser for authentication purpose. Mozilla has a libraray called mozembed. Therefore, we will include and use this library. Another problem is that, mozembed is working on gtk therefore there is main event loop and you can not distract it easily. You need either timer or something like try-catch block. We will simply use timer utilities. We will write a function to check authentication, and call this function regularly. This function simply check whether the authentication is over or not. Then, if it is over, it simply prints the name of the friends of the user to standart output.
import gobject
import urllib
import json
import pygtk
pygtk.require('2.0')
import gtk
import gtkmozembed
import time
FACEBOOK_APP_ID = 'App Id'
FACEBOOK_APP_SECRET = 'App Secret'
def do_sth(pbobj):
#Functions called by timer if auth suceed call plot function.
returnURL= pbobj.moz.get_location()
print returnURL
if not returnURL.find('login_success')==-1:
if returnURL.find('login.php')==-1:
if returnURL.find('error')==-1 and returnURL.find('uiserver')==-1:
pbobj.plot()
return False
return True
class FBBrowser:
#Embedded browser
def __init__(self):
#Addresses
self.graph='https://graph.facebook.com'
self.face='http://www.facebook.com'
#init mozembed
self.moz = gtkmozembed.MozEmbed()
#create a basic GTK+ window
win = gtk.Window()
win.resize(800,600)
# Box for multiple widgets
self.box = gtk.VBox(False, 0)
win.add(self.box)
self.box.pack_start(self.moz,True,True,0)
self.timer = gobject.timeout_add(10,do_sth,self)
win.show_all()
#load the URL
self.moz.load_url(self.graph+ '/oauth/authorize?client_id='+FACEBOOK_APP_ID+'&redirect_uri='+self.face+ '/connect/login_success.html&type=user_agent&display=popup')
def plot(self):
returnURL= self.moz.get_location()
key = returnURL.replace(self.face+ '/connect/login_success.html#access_token=','')
pos = key.index('=')
keyWOExp=key[0:pos]
keyFinal = keyWOExp.replace('&expires_in','')
print 'AAAA'+keyFinal
friendData = json.load(urllib.urlopen(self.graph+ '/me/friends?access_token='+keyFinal))
for frnd in friendData['data']:
print frnd['name']
def main():
a=FBBrowser()#Embed a browser
gtk.main() #Main loop
if __name__ == "__main__":
main()
Ozan Sener v3.0
There are times in my life that I feel I have changed significantly, and this is one of these moments. So, It needs extra changes in my life. I changed my web page (it is not over yet but hopefully within a week it will be :p). This time I decided to do sth that I am planning for long time, from this moment, I ll write all my technical posts in English and the ones related to other things in Turkish. There are millions of reasons for that but main two are that; my Non-Turkish friends want to read my posts :p. And, I am much more confident if I use English for technical topics. Therefore, hopefully I ll share a lot for the next couple of months, especially about python, computer vision and machine learning. So, add this to your RSS feeder. I am even planning to translate some of my old blog posts.
