Kodfabrik
RSS

Turkiye'de Yazilim Kulturu

Turkiye’de yazilim sektorunun oteden beri ciddi sikintilari var. Gelistiriciler olarak yillardir karsilastigimiz sikintilar ancak bugunlerde isverenlerin de dahil oldugu tartismalara donusturulebildi. Oldukca fazla insanin hayatini dogrudan etkileyen onemli bir tartismaya daha fazla katilim beklesem de, fazlaca iyimser bir yaklasimla bu surecin olumlu sonuclar dogurabilecegine inaniyorum.

Bu blog yazisinda, hem bir yazilimci olarak, hem de Turkiye’ye dondugunde kendi isini kurmak bir isveren adayi olarak, Istanbul’da 4, 1.5 yildan bu yana da ABD’de edindigim deneyimlerden cikardigim, bazi politik temaslari da olan gozlemleri ve onerilerimi paylasacagim.

Yazilim Kulturumuzdeki Eksikler

Tartisamamak

Tartismak, basit bir birey acisindan, insanin kendisi olabilmesi icin, ya da olmayi istedigi kisi olabilmesi icin gerekli bir sosyal protokoldur. Temel bir insan hakkidir. Birarada yasama gayesi olan saglikli bir toplumun surekli yapmasi gereken cimnastik hareketleridir. Bir girisim acisindan onemini vurgulamak gerekirse, uygulanmak istenen fikrin gerceklik zeminiyle olan baglantisi, uretilen tartismalarin kapsami ve icerigi ile dogru orantilidir.

Bana gore Turkiye’deki temel sikinti tam bu noktada basliyor; zengin icerikli kolektif sonuclar uretebilecegimiz tartismalari bir kenara birakalim, hic tartisamiyoruz! Okulda, isyerinde, bir isimizin oldugu herhangi bir kurumda, kendi sesinin digerlerinin sesinden daha onemli oldugunu dusunen, verdigi kararlarin sorgulanmasini saygisizlik olarak degerlendirenlerle karsilasiyoruz.

Herhangi bir teknoloji kullanimiyla para kazanmak, is kurmak isteyen herkesin saglikli bir tartisma kulturu yerlestirmesi gerekiyor. Cogunlugun mutlu olacagi kolektif kararlar uretmenin tek gecerli yolu herkesin ozgurce katildigi ve konustugu zengin tartismalar uretmektir.

Turkiye’de uretilen girisimlerin tipik sorunlarindan biri, fikirlerin saklanarak, yuceltilerek, gerceklik zeminiyle baglanti gelistirme bilincinden yoksun bir sekilde uygulanmaya calisilmasidir.

Tartismaliyiz ve kolay yem olmamaliyiz. Hakkimiz yendigi zaman, soz gumusse sukut altin falan degildir. Paylastigimiz pastadaki adaletsizlige, ev kirasi kadar gelistirici maaslarina, bircok parlak fikir mikro yatirim dahi alamazken yillarca kendini yuceltmekten ve Facebook’u kopyalamaktan baska ne yaptigi belli olmayan “sey”lerin milyonlarca dolar yatirim almasina, dunyaya yeni bir deger katmak gibi bir gayesi olmayan ama gunasiri yazilimcilardan sikayet eden kopyaci girisimcilere bir cift laf etmemek, susmak, altin falan degildir beyler ve bayanlar. Insanlarin yok sayildigi, haklarinin yendigi sirketler yerine daha adil, calisanlarinin hayatlarina katkida bulunmayi onemseyen alternatifler icin, daha cok tartismali ve kimligimiz, beklentimiz her ne ise, acik acik soylemeliyiz.

Basari Anlayisi

Bugun ABD’nin yazilim figuru Mark Zuckerberg ise, Turk yazilim sektorunu temsil eden figur de Turgut Ozal’dir. Absurd bir ornek gibi gorunebilir lakin, bir kulturel sorundan bahsedeceksek eger, 80 sonrasi girisimcilik ve basari kavramlarinin gecirdigi mutasyonu yok sayamayiz.

Seksen sonrasi Turkiye halki, insanlarin hayatina yeni bir fikir, yeni bir olumlu deger ve davranis kazandirarak para kazanmak yerine, bireysel olarak en kisa zamanda koseyi nasil donebileceginin pesine dusmeye basladi. Basari kavraminin ugradigi mutasyon, garanticilik, guvensizlik, ilkesizlik, kopyacilik ve inovasyon kitligi gibi sorunlar, toplumumuzun aydinlari tarafindan yillardir halka aktarildigi gibi, darbe sonrasi baslatilan degisimin sonuclari.

Sermaye sinifinda bu konuya donuk bir aydinlanma beklemesem de, fikirlerini girisime donusturme sansi bulan farkindalik sahibi yazilimcilarin yakin gelecekte global basari kavraminin icini dolduran girisimler uretecegine inaniyorum.

Yazilim bir muhendislik degil sanat dalidir!

Kulaginiza klise geldiginin farkindayim, ama bu, bir yazilimin uretim surecinden keyif alan herkesin farkinda oldugu bir gercekliktir. Yazilim muhendislikten daha ote bir sanattir ve bunun farkinda olarak icra edenlerin belirli ozgurluklere, en onemlisi, uretkenliklerini ifade edebilecekleri bir ortama ihtiyaclari vardir.

Turkiye’deki uretimlerin genel karakteristigi ise yazilimcilara istedikleri tuvalleri saglayabilecek nitelikte degil. Muhendislerin pek cogununun yurtdisinda calismak istemesinin en baslica nedenlerinden biri de budur.

Isverenlerin Yaklasimi

Turkiye’deki sermaye sinifinin dunyaya ve insana bakis acilari ve yaklasimlari baslibasina kulturel bir kanserdir. Bu konuda yazip cizdiklerinden gordugumuz gibi, bir sekilde kendilerini basarili gordukleri sektorun en temel gerceklerine olan hakimiyetleri ve farkindaliklari, ancak tasrali bir mahalle esnafinin Wall Street ile olan iliskisi duzeyinde. Hicbiri, ne global olarak, ne de lokal olarak birlikte yasadigi insanlarin hayatlarina bir deger kazandirma heyecanina ve cesaretine sahip degil.

Isverenlerin idrak sinirlarini asan bir baska gercek, calisanlarinin onlarin servetlerini genisletmek icin hayatlarindan her hafta 5 gun, 8’er saat vermesidir. Sahsen benim acimdan bugunku calisma saatleri kabul edilemeyecek kadar fazla ve dunyada hicbir sirket hayatimdan bu miktarda zamani calmayi haketmiyor. Hic kimsenin hayatinin bu derece buyuk bolumunun fiyati, ozellikle de Turkiye’de odenen maaslar olamaz. Lakin bu dusuncemin, insan hayatinin degerini degil mal ve mulklerini yucelten girisimciler tarafindan onemsenecegini hic zannetmiyorum.

Cozum Onerileri

Enternasyonel Calisma Ortami

Yasadigimiz kulturel aksakliklara yapilacak en etkili pansuman enternasyonel yazilim ekipleri kurmaktir. Aramizda uzakdogulu, amerikali, avrupali insanlarin olmasi hem bizi ici bosaltilan kavramlara ceki duzen vermeye zorlayacak, hem de dunya ile senkronizasyonumuz acisindan buyuk katkida bulunacaktir. Sili’deki startup programininin bu konuda oldukca iyi bir ornek oldugunu dusunuyorum.

Anadoluyu enternasyonellestirmeliyiz. Ornegin Antalya’nin Kas gibi guzel bir ilcesinde, veya Nevsehir’de, Mardin’de, Fethiye’de ofisi olan bir sirkete dunyanin her yerinden calisan bulabilecegimizi dusunuyorum. Bu tip guzel sanslarin oldugu bir sektorde herkes calismayi ister. Yurtdisina kacan isgucunun de bu sekilde elde tutulabilecegini dusunuyorum

Istanbul Disina Cikmak

Istanbul guzel oldugu kadar fazla miktarda problemleri de olan bir sehir. Ozellikle Izmir, Ankara, Antalya gibi genc profesyonellerin universiteden mezun olduktan sonra daha kolay adapte olabilecekleri sehirlerde de yeterli miktarda firsatlar yaratilmasi gerekiyor. Sirketlerin benim bilmedigim bir nedenden oturu Istanbul bagimliligi sozkonusuysa gelistiriciler icin ikinci ofislerin acilmasi veya evden calisma olanaklarinin gelistirilmesi gereklidir.

Gelistirici Etkinlikleri

Daha fazla gelistirici etkinligine, bu etkinlikleri Istanbul disinda, Anadolu’nun temiz nefes alinabilinen yerlerinde yapmaya ihtiyacimiz var. Spesifik teknik konular veya hicbir fokusu olmayan oylesine gelistirici etkinlikleriyle en basta bahsettigimiz toplumsal jimnastikleri gelistiriciler icinde gerceklestirmemiz gerekli. Yazilim dunyasinin gelecegi maruz kaldigimiz sermayedarlar degil yazilimcilarin bizzat kendisidir. Startuplarin baslica sloganlarindan birini tekrar etmek gerekirse, bu buyuk para makinesinde guc en basta bizim elimizde.

Meslek Liseleri

Her yil meslek liseleri ve meslek yuksek okullari binlerce yazilim mezunu veriyor. Bu okullara baslayan ogrencilerin tamami da yazilimin gecerli bir meslek olduguna inanarak, buyuk bir hevesle okula baslayip, butun umutlarini yitirdikten sonra mezun oluyor.

Hem teknik lise hem de meslek yuksekokulu mezunu biri olarak bu konunun yakindan sahidiyim. Benden daha hizli algoritma problemleri cozen, basit bir cizim programinda harikalar yaratan bir sinif arkadasim en son konustugumda bir insaatta dozer operatoru olarak calisiyordu.

Isgucu konusunda sikintisi olan buyuk sirketlerin meslek lise ve yuksekokullarini degerlendirmesi gerekli. Endustrimiz icin bu okullarin altin madeni olmasi gerekirken bulunduklari sehre terkedilmeleri buyuk bir israf ve acimasizliktir.

Sonuc

Turkiye yazilim endustrisininin olumlu bir kulturel mutasyon surecine girmedigi muddetce gelecegininin bugunden farkli olacagini hic zannetmiyorum. Bay Area’daki firsatlarin ve uretimin dahi devamli bir tartisma surecine maruz kaldigi donemde “hersey yolunda, sorun yok” ilustrasyonlari yapmak ancak yapilmasi gereken tartismalarin ertelenmesine ve sorunlarin daha da derinlesmesine yol acacaktir. Konu herkes tarafindan ele alinmali ve her acidan talepler dile getirilmeli, daha katilimci tartismalarla kolektif sonuclar ortaya cikarilmalidir.

Yazilim Gelistirici Olarak ABD'de Calisma Vizesi Almak

Bu blog yazisinda ABD’de calisma izni almak isteyen yazilimcilar icin yasadigim deneyimleri aktaracagim. Umarim “gerekli” oldugunu dusunenlere -ozellikle de benim gibi 4 yillik diplomasi olmayan arkadaslara- ulasir ve islerine yarar.

Giris

Yazinin birinci bolumunde okul ve askerlikle ilgili verdigim hatali kararlari ve bunlarin H1b surecini nasil etkiledigini anlatacagim. Bu bolumu biraz da askerlik problemleriyle ugrastigim donemi merak eden arkadaslar icin yazdigimdan okumadan atlayabilirsiniz. Ikinci kisminda neden daha is bulmadan ABD’ye geldigimi, ucuncu kisimda hazirlik surecimi anlatacagim. Dorduncu kisimda ise ABD’ye geldikten sonra ne yapilmasina dair oneriler paylasacagim.

Askerlik, Onlisans, Acikogretim Seytan Ucgeni

Hizlica ozetleyeyim; ben teknik lise yazilim bolumu mezunuyum. Liseden sonra iki yillik bilgisayar teknolojilerine bolumune gecip 2007’de onlisans diplomasi aldim. Bunun ardindan bildiginiz gibi acikogretime gecis hakkimiz var, lakin ben 2 yil askerligi tecil hakkimi kullanip daha sonra acikogretime girersem daha zekice bir is yapacagimi dusundum o zaman. Boyle onemli bir karari arastirmadan verdigim icin acikogretimin ilk yilinda askerlik tecil hakki verilmediginden haberim yoktu.

Bu nedenle mecburen 2 yil sonra yeniden normal bir universiteye gitmek zorunda kaldim ve Istanbul’daki isimi birakip ailemin yaninda dondukten sonra DGS sinavina hazirlanip Izmir Yuksek Teknoloji Enstitusu’nun Fizik bolumune yerlestim. Ingilizce oldugu icin bu okulu tercih etmistim. Bu arada sinava hazirlanirkenki beklentim Bilgisayar Muhendisligi veya ITU Uzay Muhendisligi kazanmakti, girdigim butun denemelerde de iyi sonuclar aliyordum ama 2009’daki sinavda (bana gore saibeliydi) sorularin inanilmaz kolaylasmasiyla herkes full yapti ve okul puani one cikti. Benim de okul puanim dusuk oldugu icin ancak Fizik bolumune yerlesebildim.

Ozetlemek gerekirse, Acikogretim Iktisat ve Fizik bolumlerine ayni anda basladim, boylece AOF’nin ilk hazirlik yilinda da askerlikten kurtulmus oldum. Bir yil sonra AOF hazirlik sinifini gecince Fizik bolumunu birakip Istanbul’da tekrar bir ise girdim, bundan birkac ay sonra da ABD’ye gelme hazirliklarina basladim.

Bu baslik altinda benimle benzer durumdaki arkadaslara onerim bir sekilde en hizli yoldan 4 yillik diploma sahibi olmalaridir. Bu hem H1b icin gerekli (eger lisans diplomaniz yoksa onlisans + 3 yillik is deneyimi isteniyor), hem de master yapmayi dusundugunuz zaman onunuzdeki engel.

Sonuc olarak, 15 ay askerligi tecil ettirmek icin sarfettigim cabalarin hayatima en buyuk katkisi Istanbul’daki isimi birakip gerekli riskleri almami kolaylastirmasi oldu.

Nasil?

Bu sorunun birden cok yaniti var, benim takip ettigim yol ise buraya kendi imkanlarimla B1 vizesiyle gelip H1b olacak bir sirket bulmak. H1b konusunda deneyim sahibi olanlara gore aceleci ve acemice gorunmesi muhtemel olabilir lakin benim sartlarim acisindan en dogru olaniydi.

Askerlik sorunumu hallettigimde 23 yasindaydim ve is hayatima ABD’de devam etmek uygulamaya koymayi en cok istedigim plandi. Turkiye’deyken H1b sponsoru bulmak pek kolay bir is degil. Microsoft, Google gibi buyuk sirketlerle anlasmak gerekiyor. Bunun icin de iyi ingilizce, lisans diplomasi veya 36 ay is deneyimi gibi benim o donem sahip olmadigim ozellikler isteniyordu. San Francisco’da karsiniza kolayca cikacak firsatlar Turkiye’de birkac yilda bir iki defa cikiyor. Bu nedenle en sonunda is teklifi beklemeden, dogrudan buraya gelip, kalacagim 4 ay icinde bu isleri halletmeye karar verdim. Nitekim bekledigim gibi ikinci ay vize sponsorumu bulmustum, Turkiye’ye donerken de vize dosyam hazirlanmisti.

Hazirlik

San Francisco’ya gelme hazirliklarina 25.000 Lira banka kredisi alarak basladim. Hemen bir vize randevusu alip bir yandan MultiplayerChess.com‘u gelistirmeye bir yandan da elimdeki parayla doviz ve altin alip satarak giderlerimi karsilamaya calistim.

Milli yatirimimiz oldugu icin altin konusunu biraz daha detaylandiralim. En kolay yoldan Garanti’nin internet subesinden altin alip satabilirsiniz. Piyasaya gore biraz daha ucuza alip pahaliya satar ama girdiginiz risk hesabinin yaninda bunun cok bir onemi yok. Altinin ben hazirlik yaparken yani 2011’in ilk aylarindaki egilimi dusustu ama Guney Kore ve Cin’de yapilan duzenli alimlar sayesinde belli bir ivmeyle dogrusal olarak yukseliyordu. Bu alimlarin 2011’de bitecegi kesin, zamani net degildi. O donem birkac gun sikica takip edip guzel bi sekilde yukseldigini gorunce butun parami altina yuklemistim. Sonuc olarak da vize islerini takip ederkenki masraflarimi epeyce karsilamami saglamisti o para. Size de ABD’ye varmadan once paranizi bu tip guvenli ve basit yatirim araclariyla -tabii ki dikkatli bir sekilde- degerlendirmenizi oneririm.

Paranizi degerlendirmenin yanisira zamaninizi da olabildigince iyi degerlendirmeniz gerekli. Bu nedenle kafanizdaki bir startup firkini hizlica hayata gecirmenizde fayda var. Lakin fikrinizin background’inizi guclendirecek nitelikte olmasina dikkat edin. Kendinizi tekrar edeceginiz hicbir sey yapmayin bu surecte. Butun zamaninizi hali hazirda uzmanliginizin oldugu alandaki modern problemleri cozmeye ayirin.

Vize randevusunu beklerken yapmaniz gereken bir diger onemli is ise randevuda size soracaklari sorulara iyi hazirlanmak. ABD’den vize almak zor bir is degil ama bu isi sansa birakmak da pek akillica olmaz. Hali hazirda ilginizi ceken bir konferansa (Orn. Google IO) bilet alip elinizde bir davetiye ile gidin vize gorusmesine.

Vize gorusmeniz basarili gectiyse, sonraki adim olarak gideceginiz sehirde kalacaginiz yerleri ayarlamaniz gerekiyor. San Francisco’daki en ucuz otel genellikle Kore’li ogrencilerin kaldigi O’Farrell caddesindeki Vantaggio oteldir. Gecen yil iki kisilik odalarin aylik fiyati 700 dolardi. Eger oda icinde banyo istemezseniz 500 dolarlik da odalari var. Gelmeden once muhakkak butun rezervasyonlarinizi duzgunce yapin ve dogrulayin, yoksa su an bir arkadasimin basina geldigi gibi tenderloin bolgesinde (San Francisco sehir merkezinin pislik icindeki suc orani yuksek kismi) kasvetli, dandik bir otele aylik 1800$ odemek durumunda kalabilirsiniz.

ABD’deki bir diger temel ihtiyaciniz ise yazilim yapmaya devam edebileceginiz bir ortam. Otelinizde, starbucks’larda bu isi yapacaginizi dusunuyorsaniz bundan suphe duymanizi oneririm. Aylik makul bir ucrete shared calisma ortami programlari olan NextSpace, HackerDojo gibi coworking organizasyonlarina uye olmanizi siddetle oneririm. Hem yeni insanlar taniyabileceginiz, happy-hours’lari olan sosyal bir ortama girmis oluyorsunuz hem de San Francisco’nun cok kotu isiklandirilmis kasvetli Starbucks’lari yerine, 24/7 acik, mutfagi ve toplanti odalari olan, guzel ve rahat bir ortama sahip olmanizi sagliyor.

H1b

San Francisco’ya geldikten hemen sonra LinkedIn ve Github profillerinizde ve CV’nizde gerekli updateleri yapin. Bu update’lerden en onemlisi tabii ki yasadiginiz sehri San Francisco olarak cevirip yeni telefon numaranizi yazmak olmali :)

Daha sonraki adim olarak background’inizin tuttugu sirketler ve buyuk sirketlerin calistigi recruitment firmalariyla temasa gecin. Eger onlar sizi bulmadiysa, bir mail gonderip kendinizi tanitabilirsiniz. Ozellikle recruitment firmalari size H1b sponsoru bulmak icin sasirtici bir performans sergileyeceklerdir.

Is aradiginiz surec boyunca hack night gibi hacker etkinliklerine mumkun oldugunca katilin. Bu hem network acisindan, hem sosyallesmek acisindan cok onemli. Bu tip etkinlikleri Twitter, HackerSpaces, Meetup gibi sitelerden bulup takip etmenizi siddetle oneriyorum. Ayrica Google’da Bay Area’ya gelen hackerlar icin hazirlanmis guide’lari aradiginizda da oldukca faydali kaynaklar bulabilirsiniz.

Gorustugunuz sirketler eger size vize almaya karar verirse bir recruiter araciligi ile yapacaklari teklifi iletecekler. Su an San Francisco’da normal hayat standardi icin gerekli yillik maas en az 80.000$. Ev kiralari 1300 dolardan basliyor. Bunun yanisira bir de 10.000 dolar civarinda relocation bonus’u alirsiniz. Bu arada tum bu kazanclarinizin yuzde kirkini devlete vergi olarak kesilecegini hatirlatayim.

3-4 aylik aktif bir eylem sureci sonunda background’inizin eslestigi bir firmayi bulmaniz epey muhtemel. Sirketiniz sureci avukata yonlendirdikten sonra yapmaniz gereken tek sey istedikleri belgeleri temin etmek ve basvuru surecinin tamamlanmasini beklemek. Bu bekleyis sirasinda bol bol gezmenizi ve Yosemite’de kamp kurmanizi siddetle tavsiye ederim.

Sorularinizi ve onerilerinize acigim. E-mail yoluyla, veya baskalarinin da faydalanmasi icin comment veya blog basliklari olarak paylasirsaniz vaktim yettigince yanitlamaya calisacagim.

Ilgili Linkler

Asagidaki baglantilarda gecen yazismalarda konuyla ilgili daha fazla oneri ve yorum bulabilirsiniz;

Functional Way of Avoiding Nested Callbacks in JavaScript

Functools is a minimal JavaScript library that provides functional programming utilities for manipulating functions and collections both synchronously and asynchronously. I’ve been developing and using it in my almost all projects and want to show you how I avoid nested callbacks using it.

Function composition is the first technique (and my favorite one) that I’ll explain. To give an example for it, assume that we want to find all HTML files in a directory, read their content and send them to a friend via e-mail.

// sendEmail.js

function findHTMLFiles(path, callback){
  implementation++;
}

function readFiles(filenames, callback){
  implementation++;
}

function sendToAFriend(files, callback){
  implementation++;
}

You may notice that the last two functions above take what its previous function produce, with no need of any modification. Which makes them pretty suitable for function composition:

var compose = require('functools').compose;

compose.async(findHTMLFiles, readFiles, sendToAFriend)('/home/me/docs', function(error){
  if(error) throw error;

  console.log('OK :)');
});

Looks much simpler compared to a regular code with 3 nested callbacks. Function composition may also remind you method chanining.

Second technique I would like to mention is juxtaposition. Functools has both sync and async implementations of juxt. Even if you haven’t used it yet on your projects, I think following example will be enough to give the whole idea of it:

function foo(callback){
  setTimeout(callback, 100, 'foo');
}

function bar(callback){
  setTimeout(callback, 250, 'bar');
}

function qux(callback){
  setTimeout(callback, 50, 'qux');
}

So, we have the assume async functions above and need to take all the content of them in a minimalistic way;

var juxt = require('functools').juxt;

juxt.async({ 'foo':foo, 'bar': bar, 'qux': qux)(function(error, results){
  if(error) throw error;

  assert.equal(results.foo, 'foo');
  assert.equal(results.bar, 'bar');
  assert.equal(results.qux, 'qux');
});

Other powerful tools I like using are map, filter and reduce functions. As you expect, both sync and async implementations of them exist in Functools.

To give an example for map and reduce, assume that we have a list of filenames and want to merge the content of them. Here is the implementation using Functools:

var functools = require('functools'),
    map = functools.map,
    reduce = functools.reduce;

var filenames = ['/home/me/docs/foo', '/home/me/docs/bar', '/home/me/docs/qux'];

function readFile(path, callback){
  implementation++;
  callback(undefined, content);
}

function merge(a, b){
  return a + '\n' + b;
}

map.async(readFile, filenames, function(error, contents){

  var all = reduce(merge, contents);
  
  console.log(all); // puts foo\nbar\nqux

});

To summarize, Functools has async implementations of some powerful functional programming tools that can let us avoid nesting callbacks.

There are more examples at the homepage of Functools. Besides of the documentation of it, you may also take a look at Combiner, a command-line tool and library for finding and manipulating files. It’s based on a middleware that lets us initialize different layers of map and filter functions.

It would also be very helpful to check the source code of Functools itself. You’ll notice that it uses map and reduce functions a lot, to implement its remaining functionalities.

Please feel free to share your thoughts, recommandations and examples.

“Just because something is a standard doesn’t mean it is the right choice for every application. Like XML, for example.”Douglas Crockford, JSConf.eu

Thoughts on IE9 and Teleportation

Imagine a universe that is growing instantly with an environment that includes the necessary resources and basic means of production for its people who live peacefully without borders, governments or militaries. As a result of this, everything is free and all production devices are under control of all humanity, which means a vast increase in production. Additionally, the imagination-universe provides teleportation that makes it easier and faster to distribute/obtain products. Sounds so cool, doesn’t it? I’m talking about the web, we invented a kind of a universe which includes a teleportation network by default! Everyone has access to free production tools (thanks to the FSF movement) and can distribute them to the entire world, for almost free. The only problem that we couldn’t solve is that we have to design our products for old teleportation clients since most of the people are not aware of modern teleportation tools because they prefer to live in private property of a genius Richie Rich.

Even though I’m pretty happy to see the great technical effort on the future of Microsoft Internet Explorer, it’s a disappointment to see that there is still nothing improved about the business approach of Microsoft that seems to believe that they can act like an oil company, posess and control all of the production devices. This is why I’m still not excited about Internet Explorer 9. This may sound like as if I’m a fan of an any other web browser embracing more social business models (BTW My browser choice is UZBL) but I’m actually pretty ok with the technical approach of Microsoft. I’m following IEBlog for years and learning lots of things from the posts about their development experiences, also think that MSDN (Compare it with Apple’s mysterious reference pages) is one of the great resources for web developers. The only thing to which I oppose is business models of Microsoft products.

On the other hand, Internet Explorer isn’t the only proprietary browser which belongs to a commercial company, we have Safari and several mobile web browsers, too. The only difference between the IPhone’s mobile browser and Internet Explorer 6 is that IPhone ones rendering engine is a little better, not much. Distribution methods -even though Webkit is open source, it’s not perfect)- are almost same, except the companies are different. Most of the mobile browsers are IE6 candidates to me.

To summarize, the main issue about the web is whether to take the advantage of modern distribution methods or not. Even if all of the web browsers follow the web standards, we will continue to lose time for the software playing catch-up since implementation times differ between months and years. In my opinion, all of the rendering/javascript engines should be open source, able to update itself automatically and totally independently from browsers. This is what the web needs immediately.

Many thanks to Yusuf Arslan for reading draft versions of this.

vim: tw=100

“I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake.”Douglas Crockford

“It’s better to have 100 functions operate on 1 data structure than to have 10 functions operate on 10 data structures”Alan Perlis

Volume Widget For AwesomeWM 3.4

Ubuntu 9.10 was the distro I had been using for 10 months with AwesomeWM until my Arch Linux migration on last week. I started the migration by moving my development environment to the VPS located in Linode servers firstly, configuration of the hardware and desktop environment followed this step. During the configuration I noticed that most of the widgets in the AwesomeWM wiki doesn’t work with latest release. I took this situation as a sign  from the Gods of computer world to start learning Lua and read Programming In Lua book which is available to read online for free. A little training that took just 3-4 hours made me available to code a volume control widget for AwesomeWM. Here is the code:

------------------------------
-- Volume Widget For AwesomeWM 3.4
-- Azer Koculu <azerkoculu@gmail.com>
-- Wed Apr 7 01:34:35 UTC 2010
------------------------------
local widgetobj = widget({ type = 'textbox', name = 'volume_widget' })
local channel = "vmix0-outvol"

local function increase()
  awful.util.spawn("ossvol -i 3")
  update()
end

local function decrease()
  awful.util.spawn("ossvol -d 3")
  update()
end

local function update()
  local fd = io.popen("ossmix " .. channel)
  widgetobj.text = 'VOL' .. fd:read("*all"):match("(%d+%.%d+)")
  fd:close()
end

local function mute()
  awful.util.spawn("ossvol -t")
end

widgetobj:buttons(awful.util.table.join(
  awful.button({ }, '4', increase),
  awful.button({ }, '5', decrease),
  awful.button({ }, '1', mute)
))

--[[
globalkeys = awful.util.table.join(globalkeys,
awful.key({ }, "XF86AudioRaiseVolume", increase,
awful.key({ }, "XF86AudioLowerVolume", decrease,
awful.key({ }, "XF86AudioMute", mute)
)
]]--

local utimer = timer({ timeout=1 })
utimer:add_signal("timeout", update)
utimer:start()

update()

volume = {
  channel = channel,
  widget = widgetobj,
  increase = increase,
  decrease = decrease,
  mute = mute
}

return volume

I also coded an unnecessary wallpaper package without checking out man page of awsetbg, which provides randomizing already.

----------------------
-- Random Wallpaper Package For Awesome WM
-- Azer Koculu <azer@kodfabrik.com>
--
-- EXAMPLE USAGE
-- ------------
-- require "wallpaper"
-- theme.wallpaper_cmd = "awsetbg " .. wallpaper.pick( wallpaper.collect { "pics/wal1", "pics/wal2" } )
--
----------------------
local image_extensions = { jpg=true, png=true }

-- test whether given filename is an image
local function is_image(filename)
  return image_extensions[filename:match("%.(%w+)$")]
end

-- gather images from the passed directories
local function collect(dirs)
  local images = {}
  for i=1,table.getn(dirs),1 do
    local dir = dirs[i]
    for file in io.popen("ls "..dir):lines() do
      if is_image(file) then
        table.insert(images,dir .."/".. file)
      end
    end
  end
  return images
end

-- pick a random item from given table
local function pick(t)
  n = table.getn(t)
  if n > 0 then
    math.randomseed(os.time()+n)
    el = t[math.random( n )]
  end
  return el
end

-- declare exports
wallpaper = {
  extensions=image_extensions,
  collect=collect,
  pick=pick
}

return wallpaper

Lispy Fluent Interfaces In Javascript

By inspiring from Lisp and the functional programming utilities came with Javascript 1.6, I’ve coded a new function to iterate arrays -especially for those containing DOM nodes- by providing an alternative fluent interface and chaining. Usage examples;

// log elements of an array
each( ['Hello','World'] )
  (console.log)

// disable all form elements passing additional arguments
each( document.querySelectorAll('input, select, textarea') )
  (setattr, 'disabled', true)

// apply header elements several dom manipulations
each(document.querySelectorAll('header'))
  (style, 'fontSize', '16px Arial,sans-serif')
  (style, 'background', '#ffff00')
  (style, 'padding', '3px')
  (add_class, 'Foobar')
  (add_event, 'click', function(){ alert('Hello World') })

And here is the source code:

/**
 * A Function Providing Lispy Iteration For Javascript
 * @author Azer Koculu <azerkoculu@gmail.com>
 */
var each = function(list)
{
  var caller = function(fninitial)
  {
    var cargs = Array.prototype.slice.call( arguments, 1);
    
    var func = function(el)
    {
      var args = [ el ];
      Array.prototype.push.apply(args,cargs);
      fninitial.apply(null, args);
    }

    Array.prototype.forEach.call( list, func );

    return caller;
  }
  return caller;
}

The function defined in the code above simply returns a function returning itself and taking a function with optional arguments to call it by passing the element being iterated and the optional arguments specified. Thus, the high-order-function I’ve pointed make the iteration chainable, as well.

P.S: Functional module of the new web framework I’ve been working on provides some similar tools with much better implementation, which are available to be checked out;

Tags