16 August 2018

Algoritmalar Neden Önemlidir?


Son zamanlarda algoritma sözcüğüne haberlerde daha sık rastlıyoruz. Haber sitelerinde algoritma kelimesini (bkz https://www.ntv.com.tr/ara?q=algoritma) arattığımızda çok sayıda güncel haber listeleniyor. “WhatsApp, ‘herkesten sil’ özelliğini değiştirdi”  (https://bit.ly/2Dm4p84) haberinde yeni algoritmayla “atılan mesajı silme” özelliğinin çalışma prensibinin değiştiği; “Pelikan yuvadan uçmaya hazırlanıyor” (https://bit.ly/2oOGYjg) haberinde Meteksan Savunma’nın geliştirdiği Pelikan Güdümlü Mermi Simülatörü’nün kullanıcıya farklı algoritma ve parametreleri deneyebilme imkanı verdiği; “Facebook kaç paranız olduğunu bilecek” (https://bit.ly/2ovrPmL) haberindeyse Facebook’un satın aldığı yeni algoritma anlatılıyor.

Önümüzdeki günlerde bu sözcüğü daha çok duyacağız gibi görünüyor. Henüz ülkemizde yaygınlaşmadı ama bir “algoritma çağı”ndan bahsedenler de var (http://radioopensource.org/the-algorithmic-age/, http://firstmonday.org/ojs/index.php/fm/article/view/8097/6583). Rainie vd.’ye (2017) göre algoritmalar her şeyi optimumlaştırmaya çalışıyor, hayat kurtarıyor, işleri kolaylaştırıyor ve kaosu önlüyor ancak şirket ve hükümetlerin elde edebileceği güç nedeniyle de endişe uyandırıyor. Rainie vd.’nin (2017) algoritmalar ve etkileri üzerine yaptıkları çalışmaya katılan bilişim teknolojileri uzmanların neredeyse tamamı algoritma tabanlı uygulamalar hakkındaki endişelerini ifade ediyor. Bu uzmanların %38’i algoritmaların olumlu ve %37’si olumsuz etkilerinin daha ağır bastığını düşünüyor. %25’ine göreyse algoritmaların olumlu ve olumsuz etkileri yarı yarıya. Ancak uzmanların büyük çoğunluğu, algoritmaların görünmez bir şekilde hızla yayılacağı ve gelecekteki etkilerinin çok daha büyük olacağı hakkında hemfikir.

Enformasyon çağı, bilgi çağı ve şimdi karşımıza çıkan algoritma çağı gibi tanımlamalara karşı bazı çekincelerim olsa da önümüzdeki günlerde algoritmaları daha çok konuşacağımız ve tartışacağımız kesin. Algoritmaları daha sağlıklı tartışabilmek için de bir zamanlar sadece matematikçilerin ve yazılım geliştirenlerin aşina olduğu bir terim olan algoritmanın ne olduğunun ve bilgisayımsal (computational) işlemlerdeki yerinin anlaşılması gerekiyor. Dolayısıyla kodlama eğitimlerini yalnızca bir meslek edindirme kursu olarak değerlendirmemeli. Bu eğitimler, öğrencilere bilgisayımsal bakış açısı kazandırmak için önemli bir fırsat. Hatta kodlamayı, eğitimin amacı değil, bilgisayımı anlamanın ve yaparak öğrenmenin bir aracı olarak ele almak daha yerinde bir yaklaşım olabilir. Birçok okulda yeterli bilgisayar altyapısının olmadığını düşünerek karamsarlığa kapılmamak lazım. Bilgisayımsal bakış açısı, bilgisayar olmadan da (belki daha başarılı olabilir) kazandırılabilir. Örneğin https://classic.csunplugged.org/ adresinde çocuklara bilgisayar bilimini, bilgisayar olmadan öğretebilmek amacıyla çeşitli oyunlar ve etkinlikler hazırlanmış. Aynı sitede, ücretsiz indirebilen ve çeşitli dillere çevrilmiş bir kitap da var. Kitap henüz Türkçeye çevrilmemiş olmasına karşın kitaptaki bazı etkinliklerin Türkçe çevirileri de var. İkilik düzeni, sıralama, arama ve metinleri sıkıştırmada kullanılan algoritmaları oyunla öğreten eğlenceli etkinlikler var.

Okullarda yıllardır Word, Excel, Power Point vb anlatılarak yapılan teknoloji eğitiminden kökten farklı bir eğitim anlayışına gereksinim var. ABD ve Avrupa’da kodlama eğitiminin hedefleri arasında ucuz işgücü yetiştirmek olabilir; belki biz de sadece onların acemi bir taklitçisiyiz. Buna rağmen bilgisayar bilimini, çeşitli algoritmaları ve kodlamayı neden öğrenelim? Bilişim teknolojilerinden yararlanmak (örneğin tweet atmak, sosyal ağlarda örgütlenmek) için tüm bunları bilmeye gerek var mı? Sonuçta, televizyon izleyebilmek için elektronik ya da modern sağlık hizmetlerinden yararlanmak için tıp üzerine çalışmıyoruz.

Kimi zaman eğlenceli de olabilecek bu öğrenme zahmetine katlanmak için başlıca iki nedenimiz olduğunu düşünüyorum. Birincisi, adı ister algoritma çağı isterse başka bir şey olsun algoritmalara dayalı toplumsal düzenlemelerin çoğalacağı bir sisteme doğru ilerliyoruz. Bilgisayarların çalışma ilkelerinin büyüden arındırılması gerekiyor. Bilgisayarların nasıl çalıştığı bilinmediği zaman bilişim teknoloji hakkındaki mitsel düşüncelere daha kolay kapılıyoruz. Ayrıca Erwig’in (2017) belirttiği gibi yaşadığımız dünyada kendi başına hareket edemeyen nesnelerle etkileşim halindeyiz ve temel mekanik bilgisi bu nesnelerin hareketini önceden tahmin edebilmemizi böylece daha güvende olmamızı sağlıyor. Erwig’e (2017) göre bilgisayar bilimi de benzer bir yarar sağlayacaktır. Toplumsal yaşamı ve politik sistemleri etkileyen algoritmaların nasıl çalıştıklarının, varsayımlarının, hangi koşullarda daha iyi sonuç verebildiklerinin ya da sonuçlarının kesin mi yoksa olasılık hesabına mı dayandığının bilinmesi önemlidir.

İkinci neden ise bilgisayar biliminin, bilgisayar ve elektronik cihazlar dışında da gündelik yaşamdaki sorunları anlamaya ve çözmeye katkıda bulunabilme potansiyelidir. Algoritma kelimesi, Ebu Abdullah Muhammed Bin Musa El-Harezmi’den (780-850) gelmektedir. Harezmi, Hindistan’da geliştirilmiş onluk sistemi ve Arap rakamlarıyla sıfır kavramını Avrupa’ya tanıtmıştır. Cebir kelimesi El-Harezmi’nin 1830’da yazdığı “El’Kitab’ül-Muhtasar fi Hısab’il Cebri ve’lMukabele” (Cebir ve Eşitlik Üzerine Özet Kitap) adlı eserinde geçmektedir. El-Harezmi bu kitabında “hangi sayının karesi, sayının 10 katı ile toplanırsa 39 eder?” probleminin çözüm yolunu hem sözlü hem de geometrik olarak göstermektedir. El-Harezmi’nin adını “Algorizm” olarak telafuz eden Avrupalılar da “Arap sayıları kullanarak aritmetik problemler çözme kuralları”na algoritma adını vermiştir (http://bit.ly/1hcAajP). Fakat algoritmalar, bu terim kullanılmaya başlamadan önce de vardır. Ayrıca belirli bir problemi çözmek için uygulanan bu alışılmış yöntemler (rutinler), olarak tanımlayabileceğimiz algoritmaların kullanım alanları matematikle sınırlı değildir. Babiller’in hukuksal sorunlarda karar verebilmek ve Latince öğretmenlerinin doğru gramer elde edebilmek için algoritmalardan yararlandığı bilinmektedir. Tüm kültürlerde algoritmaların geleceği tahmin etmek, hangi tıbbi tedavinin uygulanacağına karar vermek, yemek hazırlamak gibi uygulama alanları vardır (Barbin vd., 2012). Yemek ya da bir sandviç hazırlarken bir tarifte yer alan talimatları uygularız. Aslında yaptığımız şey malzeme, mutfak gereci, enerji ve hazırlama zamanı gibi kaynaklardan yararlanarak alışılmış yöntemleri uygulamak ve ham içeriği nihai bir ürüne dönüştürmektir. Bilgisayımsal eğitim, gündelik yaşamımızdaki bu tip süreçleri tekrar gözden geçirmemizi sağlayabilir.

Bu bağlamda, Erwig’in (2017) Once Upon an Algorithm: How Stories Explain Computing (Bir Zamanlar Bir Algoritma: Masallar Bilgisayımı Nasıl Açıklar) adlı kitabının güzel bir çeviriyle bilgisayımsal eğitim için eşsiz bir kaynak olacağını düşünüyorum. Erwig (2017), popüler masallar, romanlar ve filmler aracılığıyla bilgisayar biliminin temel kavramlarını basit ama ayrıntılı bir biçimde anlatıyor. Erwig’in (2017) Hansel ve Gretel’den nasıl yararlandığına bakalım.

Hansel’in Algoritması

Erwig (2017) algoritmaları tartışmaya bilgisayımın ne yaptığı ve ne olduğu sorularıyla başlar. Birinci görüş, bilgisayımın problem çözdüğüdür. Bu bakış açısında, bir problemin uygun biçimde gösterildikten ve alt problemlere ayrıldıktan sonra çözülebileceği vurgulanmaktadır. Bilgisayımla problem çözme arasındaki farklılıkları dikkate alan ikinci görüşe göreyse bilgisayım herhangi bir problem çözme değil bir algoritmanın uygulanmasıdır. Algoritma, bilgisayımı kesin olarak tanımlar, bilgisayımın otomatikleştirilmesini ve analizini olanaklı hale getirir. Bilgisayımda problemler ortak özelliklerine göre sınıflandırılır ve bu sınıfta yer alan problemlerin çözümü için bir algoritma tasarlanır. Böylece algoritmalar, belirli bir sınıfta yer alan problemlerin çözümünde uygulanabilecek bir beceri haline getirilir.

Erwig (2017) daha sonra bu tartışmayı Hansel ve Gretel adlı masalla derinleştirir. Masalı hatırlayalım. Hansel ve Gretel, babalarıyla ve üvey anneleriyle yaşayan iki kardeştir. Üvey anneleri, çocuklardan kurtulmak ister ve babalarını, çocukları ormanın derinliklerinde bir yere bırakmaya zorlar. Babasıyla üvey annesinin konuşmasına kulak misafiri olan Hansel’in aklına ormandan eve geri dönebilmek için bir çözüm gelir. Gece dışarı çıkar ve çakıl taşı toplayıp cebine doldurur. Sabahleyin ormanın derinliklerine doğru yola çıktıklarında Hansel cebindeki çakıl taşlarını yol boyunca serper. İki kardeş ormanda yalnız başlarına kaldıklarında havanın kararmasını beklerler. Daha sonra ay ışığında parlayan çakıl taşlarını takip ederek evlerine geri dönerler.

Burada temel problem, tehlikeli ormandan güvende olabilecekleri evlerine dönebilmektir. Problem tek adımda çözülemeyeceğinden Hansel problemi parçalara ayırır. Asıl problem şimdi iki çakıl taşı arasındaki mesafeyi kat etmekle çözülebilecek daha alt problemler haline getirilmiştir. Sistematik biçimde, çakıl taşlarını izlemeleri gerekmektedir. Sistematik yaklaşım, bilgisayımın temel özelliklerinden biridir. Aşağıdaki resimden de görüldüğü gibi Hansel, ana problemi daha kolay çözülebilir parçalara ayırarak çözebilmiştir. Fakat bu stratejinin tek başına yeterli olmadığına ve çakıl taşı gibi tamamlayıcı bir ögeye gereksinim duyduğuna dikkat edelim. Çözüm sürecinden anlaşıldığı gibi bilgisayımın gerçek dünyadaki bir problemi çözebilmesi için problemin gösterimi (representation) gerekmektedir. İlk gösterim, ormanın tehlikeli ve evin güvenli olduğu bir durumu ifade etmektedir. Hansel ve Gretel, tehlikeli bölgeden güvenli bölgeye geçmelidir. Hansel’in çözümünde ise bir çakıl taşı, o anda bulundukları yeri ve çakıl taşlarının tamamı da ormandan çıkış yolunu göstermektedir. Çakıl taşları, bilgisayımı olanaklı hale getirmektedir.

Bilgisayım, problem çözme sürecidir. Ama ne her bilgisayım bir problem çözer ne de her problem çözümü bilgisayımdır. Hansel ve Gretel, problemin gösterimiyle ilgisiz biçimde, etrafa çakıl taşı serpmiş olabilir. Ormanın içinde bunları takip ederek dolaşmaları ve sonra aynı yere gelmeleri bir çözüme götürmeyecektir. Her çözüm de bilgisayım kapsamında değerlendirilemez. Hansel’in gözleri iyi görmeyen cadıyı kilo almadığına inandırmak için parmağını uzatmak yerine bir kemik parçasını uzatması zekice ama anlık bir çözümdür. Bu çözümde sistematik bir yaklaşım yoktur. Hansel’in geri dönüş takibi için çakıl taşlarını kullanmayı akıl etmesi de sistematik bir düşüncenin sonucu olmayıp anlık bir çözümdür. Hansel’in daha sonra çakıl taşı bulamayınca ekmek parçalarını kullanması yine anlık bir çözümdür. Çakıl taşlarının takip edilerek eve dönülmesiyle uygulanan çözüm tekrarlanabilme özelliğine sahiptir. Ama Hansel’in çözüme yardımcı olmak amacıyla çakıl taşını kullanmayı akıl etmesi ve daha sonra bunun yerine ekmek parçalarını kullanmayı akıl etmesi tekrarlanamaz; üçüncü kere ormana bırakılmaları gerekseydi Hansel’in aklına bir başka parlak fikrin gelmesini bekleyecektik.

Bilgisayımın problem çözümü olarak ele alınması bilgisayımı sistematik ve bölünebilir bir süreç olarak göstermesi açısından önemlidir. Ancak bilgisayımın nasıl çalıştığını ve neden benzer durumlarda uygulanabilir olduğunu göstermekte yetersiz kalmaktadır.

Hansel ve Gretel, aşağıdaki algoritmayı uygulamaktadır:

  1.  Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle.
  2. Eve geri dönene kadar bu adımı uygula

Algoritmaların en büyük özelliği tekrarlanabilirliktir. Hansel ve Gretel, aksi bir koşul oluşmadıkça aynı algoritmayı her seferinde başarıyla uygulayabilir. Bu nedenle, algoritmalar bilgisayımda temeldir. Bir algoritmanın bir dilde ifade edilebilmesi, bir sınırının olması (sonsuza kadar gitmemesi) ve işe yarar olması gerekir. Algoritma ayrıntılandırılabilir. Örneğin, Hansel’in taşları serperken görüş mesafesini dikkate alması gerekir. Çünkü bir taşın bulunduğu yerden sonraki taşın nerede olduğunu görerek hangi yöne gideceğine karar verebilmelidir. Masal da anlatılmamış ama aynı taşı iki kere ziyaret etme gibi bir durum da olabilir. O zaman ne yapmaları gerekir? Bu tip sorunların önüne geçebilmek için Hansel ve Gretel önlerine çıkan çakıl taşlarını toplamaları gerekecektir. Yeni algoritma aşağıdaki gibi olabilir:

  1.  Daha önce ziyaret edilmemiş parlak bir çakıl taşı bul, bulunduğun yerdeki taşı cebine koy ve yeni taşa doğru ilerle.
  2. Eve geri dönene kadar bu adımı uygula

Ne yazık ki bu yeni algoritma nedeniyle masalın yeniden yazılması gerekecektir. Çünkü eve vardıklarında Hansel’in cebinde yine taşlar olacağından ekmek kullanmak zorunda kalmayacaklar, kuşlar yoldaki ekmekleri yemeyecek ve cadının eline düşmeyeceklerdir. Ama masalda anlatılmayan başka olasılıklar da vardır. Algoritmanın her zaman sonlanabilmesi ve doğru sonucu vermesi gerekmektedir. Eğer ormana doğru ilerlerken düz bir yol takip etmeyip zikzak çizdilerse aşağıdaki gibi bir durumla da karşılaşılabilir:

D noktasından hem B hem de C görülebiliyorsa algoritmanın bunu da dikkate alması, örneğin DCBA yolu yerine DBC’de takılıp kaldıysa bir önceki konumuna dönmesi gerekir. Algoritmaların durması da önemli bir özelliktir. “Daha önce ziyaret edilmemiş” şartını kaldırdığımızda işler yine karışabilir. Algoritmada sonsuz döngüye girilebilir.

Erwig (2017) daha sonra “bilgisayım algoritmanın uygulanmasıdır” görüşüne geçer ve bilgisayımın algoritma uygulandığında gerçekleştiğini belirtir. Bilgisayar, bilgisayım yapan kişi ya da şeydir. Buna göre iki tip bilgisayar vardır. Birincisi, anlayabileceği dilde tarif edilen herhangi bir algoritmayı en azından (prensipte) uygulayabilen, insan, dizüstü bilgisayar ya da akıllı telefon gibi evrensel bilgisayarlardır. İkinci tip bilgisayarlarsa tek bir algoritmayı çalıştırabilirler. Algoritmanın donanımla bütünleştiği hesap makineleri bu tip bilgisayarlardır.

Ayrıca bilgisayarın tipi veya bilgisayımı yapanın insan veya makine olması fark etmeksizin bilgisayımın bir maliyeti vardır. Bilgisayım için bilgisayarın kaynak kullanması gerekir. Oyun oynarken dizüstü bilgisayarınız ısınabilir ya da akıllı telefonda çok fazla uygulama çalıştırırsanız pili daha hızlı bitebilir. Bu nedenle, bir algoritmanın bir problemi çözebilmesinin yanında yeterince hızlı hesaplama yapabilmek için bilgisayım kaynaklarını nasıl kullandığı değerlendirilmelidir. Örneğin, bir sıralama algoritması 100 kaydı çok hızlı biçimde sıralayabilir. Ama milyonlarca kaydın aynı algoritmayla istenilen zamanda sıralanıp sıralanamayacağını öngörebilmek için algoritmanın sonuca nasıl ulaştığı bilinmelidir. Kayıt sayısının artması algoritmadaki adım sayısını nasıl etkilemektedir? Bir diğer deyişle, algoritmanın çalışma zamanı karmaşıklığı (runtime complexity) nedir?

Hansel ve Gretel’e dönersek… Çocukların algoritmasındaki “daha önce ziyaret edilmemiş parlak bir çakıl taşı bul ve ona doğru ilerle” bir algoritma adımıdır. Hansel ve Gretel’in adım büyüklüklerindeki farklılıklar ya da bilgisayarların işlemci modelleri algoritmanın uygulama hızında etkilidir. Ama algoritmaların verimlilik analizi ve birbiriyle karşılaştırılabilmesi için gerçek adımdan farklı olan algoritma adımı dikkate alınır:

Algoritmaların çalışma zamanı karmaşıklıklarının ölçümü daha büyük girdilerin (masalımızda daha uzun mesafelerde) çalışma zamanını nasıl etkileyeceğini göstermektedir. Hansel ve Gretel örneğinde, mesafe (kullanılan çakıl taşı) artıkça algoritma adımı sayısı da aşağıdaki gibi doğrusal olarak artmaktadır:

Her adımda bir çakıl taşı olmak zorundadır ve algoritmanın problemi çözüp çözememesi gidilen mesafeye, Hansel’in cebinin bu kadar çakıl taşı alıp alamayacağına bağlıdır. Hansel’in cebinin büyüklüğünün yolu bulmaya etkisi veya bilgisayar bilimi bağlamında bilgisayarın bir algoritmayı çalıştırabilmesi için gerekli alan, alan karmaşıklığı (space complexity) olarak adlandırılır. Görüldüğü gibi Hansel’in çakıl taşlı algoritması işe yarar gibi gözükmesine rağmen cebine sığan çakıl taşlarıyla sınırlıdır.

Şimdi masalı değiştirelim. Hansel’in cebi yeterince büyük değil ve bunun için yola bir çakıl taşı bıraktıktan sonra aşağıdaki gibi eve geri dönüp yeni bir çakıl taşı alması gerekiyor:

Bu durumda bir çakıl taşı koymak için 1 adım atacaktır. İkinci çakıl taşı için önce eve geri gidecek (1 adım), sonra da 2 adım ileri atacaktır. Üçüncü çakıl taşı için gidiş gelişte 5 (2 geri, 3 ileri adım), dördüncü için 7 adım (3 geri, 4 ileri adım) atacaktır. Böylece atılması gereken adımlar aşağıdaki gibi olacaktır:

Yukarıdaki örüntüye göre n çakıl taşlık mesafe için n² tane algoritma adımı gerekmektedir ve çalışma zamanı karmaşıklığını gösteren fonksiyonumuz bu sefer doğrusal değil, ikinci derece fonksiyondur:

Algoritmaların çalışma zamanı karmaşıklarının hesaplanması çeşitli algoritmaları karşılaştırma ve problemi istenilen sürede çözüp çözemeyeceğini öngörebilme olanağı sağlar. İkinci algoritma belki kısa mesafede uygulanabilir; ama mesafe artıkça Hansel’in kondisyonu yetersiz kalacaktır.

Erwig (2017), Hansel ve Gretel’den yola çıkarak bilgisayar bilimiyle ilgili birçok konuyu tartışmakta ve açıklamaktadır. Dil Derneği’nin sözlüğünde bilgisayar “çok sayıda aritmetiksel ya da mantıksal işlemlerden oluşan bir işi, önceden verilmiş bir izlenceye göre yapıp sonuçlandıran elektronik aygıt, elektronik beyin” olarak tanımlanıyor. Ama Erwig’in (2017) de vurguladığı gibi bilgisayar, bir insan da olabilir, elektronik aygıt da. Christian ve Griffiths’in (2017) Hayatımızdaki Algoritmalar adlı kitabı, “insan” bilgisayarların bilinçli veya bilimsiz kararlarında algoritmaların önemli bir yere sahip olduğunu göstermektedir. Yazının devamında da görüleceği gibi bu algoritmalardan yola çıkarak daha gerçekçi ve yararlı öneriler içeren bir kişisel gelişim kitabı bile yazılabilir.

En Doğru Yerde Duraklama

Boş park yeri bulmanın zor olduğu bir yere giderken çoğu zaman tereddüt ederiz: Boş bir yer gördüğümüzde hemen park etmeli miyiz? Yoksa daha az yürümek için arabayla biraz daha gidip şansımızı zorlasak mı? Ama ne kadar ilerlemeliyiz?

Seyahat eden bir turistiz. Haritaya baktığımızda güzergahımızda n tane otel olduğunu gördük. n. otele kadar gelip daha sonra içlerinden en iyi otele geri dönmek gibi bir şansımız olmadığından bir yerde durup konaklamamız gerekiyor. En uygun oteli nasıl seçeceğiz?

Otuz gün içinde bir kiralık ev bulmamız gerekiyor. İlk gördüğümüz evi beğendik. Hemen tutmalı mıyız? Ama biraz daha araştırma yapsak daha iyi olmaz mı? 29 gün boyunca kiralık evlere baksak, son gün de en beğendiklerimizi karşılaştırsak daha iyi olmaz mı? Ama ya beğendiğimiz ev tutulursa?

Ev kiralamaya bir de karşı taraftan, ev sahiplerinin gözünden bakalım. Kiralık ilanı verdikten sonra gelen ilk kiracı adayıyla anlaşalım mı? Ya daha iyi bir kiracı gelirse? Biraz daha bekleyebiliriz, ama Dimyat’a pirince giderken evdeki bulgurdan olmak da var.

Genç kızın kapısından görücü eksik olmuyor. Ne doktorlar, ne mühendisler evlenmek için kapısını çalıyor ama hiçbirine yüz vermiyor. Daha iyi bir koca adayı bekliyor. Anne ve baba, kızları evde kaldı diye endişeleniyor. Genç kız, daha ne kadar beklemeli?

Bu problemlerin hepsinde zamana karşı yarışırız. Tüm seçenekleri değerlendirmek istesek de kaynaklarımız sınırsız değildir; bir yerde durmamız ve kararımızı vermemiz gerekir. Nerede duracağız? Araştırmaya ne zaman son vermemiz gerekiğinin yanıtını arayan bu tip problemler en doğru yerde duraklama (optimal stopping) problemleri olarak adlandırılır. Christian ve Griffiths’in (2017) belirttiği gibi bu problemlerin en ünlülerinden biri de sekreter problemi olarak tanınmaktadır. Belirli bir sayıda sekreter adayı vardır ve işe alım, adayların özgeçmişine bakarak değil de birebir görüşülerek yapılacaktır. Aday uygunsa işe kabul edilecek ve görüşmeler sonlandırılacaktır. Yine yukarıdakilere benzer bir sorun vardır. Eğer aceleci davranılırsa en iyiyle hiç karşılaşmama, çok geç karar verilirse de belki de hiç olmayan daha iyiyi boş yere beklemiş olma ihtimali vardır. Ama matematik önemli bir ipucu sunmaktadır. Tek bir aday varsa bu adayın en iyi olma ihtimali %100’dür. İkinci aday varsa onun en iyi olma ihtimali %50, beşinci adayınki %20, yüzüncü adayınkiyse %1’dir. Dolayısıyla sonraki görüşmelerde daha iyi bir adayla karşılaşma ihtimali olabilir ama bu ihtimal giderek azalacaktır.

Şimdi adım adım ilerleyelim. İki adayımız var. Doğrudan birinciyi seçebiliriz veya onu göz ardı edip ikinciye geçebiliriz. Her iki durumda da en iyi adayı seçme ihtimalimiz %50. Üç adayımız varsa rastgele bir seçimle en iyi adayı seçebilme şansımız %33. Sonraki iki adayla görüşmeden ilk adayı seçersek veya ilk iki adayı eleyip üçüncüyü seçmek zorunda kalırsak en iyi aday için şansımız sadece %33 olacaktır. Ama algoritmamız şöyle olursa başarı şansımız %50 olacaktır:

  1. Birinci adayla görüş
  2.  İkinci adayla görüş
    • Eğer ilk adaydan daha iyiyse ikinci adayı seç
    • Eğer ilk adaydan daha iyi değilse üçüncü adayı seç

Deneyelim. Üç kişi için altı farklı sıralama yapılabilir: 1-2-3, 1-3-2, 2-1-3, 2-3-1, 3-1-2, 3-2-1. Eğer birinci aday en iyi adaysa (1-2-3 ve 1-3-2 durumlarında) en iyiyi ararken onu kaçırırız. Eğer ikinci aday en iyi adaysa, ikinci adayın birinci adaydan güçlü olduğu durumlarda (2-1-3 ve 2-3-1 durumlarında) ikinci aday seçilecektir; zaten en iyi adaydır. İlk adayla görüştükten sonra ikincinin birinciden daha kötü olduğunu gördüğümüzden (3-1-2 durumu) üçüncü adaya geçerek yine en iyi adayı seçebiliriz. 3-2-1 durumunda ise ikinci aday birinciden daha iyi diye üçüncü adayı beklemediğimizden en iyi adayı seçme şansını kaçırırız. %100 doğru seçim yapamayız ama şansımızı %33’ten %50’ye çıkarmış oluruz.

Aday sayısı dört olduğunda ikinci, beş olduğunda da üçüncü adaydan sonra seçme işlemine başlamamız önerilmektedir. Aslında aday sayısı artıkça bu algoritma daha çok önem kazanmaktadır. Dört adaylı bir seçmede ikinciden, beş adaylıda üçüncüden sonra seçme işlemine başlamamız rastlantı değildir. Burada geçerli algoritma şöyledir:

  • Hiçbirini seçmeden adayların %37’sine bakın
  • %37’yi aştıktan sonra o ana kadar gördüğünüz adaylardan en iyi olanını seçin

Aşağıdaki tablodan da görüleceği gibi en iyi adayı seçme şansı yine %37’ye yaklaşacaktır:

Christian ve Griffiths’in (2017) belirttiği gibi algoritmaların içerdiği temel varsayımlar önemlidir. Yukarıdaki sekreter probleminde temel varsayım adayları ancak birbirleriyle karşılaştırarak hangisinin daha iyi olduğuna karar verebildiğimizdir. Elimizde ikinci adayın birincisinden ne kadar iyi olduğu hakkında hiçbir bilgi yoktur. Ama YDS (Yabancı Dil Bilgisi Seviye Tespit Sınavı) puanı gibi bir parametre eklersek en iyi adayı bulmaya daha çok yaklaşırız. Bu yeni koşulda, ilk %37’ye bakarken YDS puanı 95 olan birini doğrudan elemeyiz. Çünkü geri kalan adaylar arasında 95’ten yukarı puana sahip birini bulmak daha düşük olasılıktır. Bu nedenle, en iyi adayı bulmak için algoritmayı değiştirmek ve iyileştirmek gerekir.

Benzer bir durum, bir evini kiraya veren kişi için de geçerlidir. Sekreter probleminde olduğu gibi ev sahibinin bazı ön bilgilerle hareket etme şansı vardır. Kiracı adaylarını sadece verdikleri tekliflerle karşılaştırmaz; eve ödenecek en düşük ve en yüksek miktarları tahmin edebilir ve evin boş kalma maliyetini dikkate alarak kiracı adaylarıyla görüşür.

Christian ve Griffiths (2017), ev satışı, park yeri, sevgili seçimi gibi en uygun zamanda durup seçim yapmayı gerektiren problemler için uygulanabilecek farklı algoritmaları tartışmaktadır. Bu algoritmalar, her zaman en iyi adaya ulaştıramasa da rastgele bir seçimle karşılaştırıldığında en iyiye ulaşabilme olasılığını artırmaktadır.

Araştır veya Kullan

Christian ve Griffiths (2017), araştır/kullan ikileminde bilgi toplamak ve eldeki bilgiyi kullanma arasındaki dengeyi tartışmaktadır. Yabancı bir şehirde yemek yiyeceğiz. Daha önce gittiğimiz ve beğendiğimiz bir yere mi gitmeliyiz? Belki daha önce hiç gitmediğimiz bir yere giderek yeni tatlar aramalıyız. Bulunduğumuz şehri birkaç gün sonra terk edeceksek yeni tatlar aramak pek yararlı olmayacaktır. Çünkü iyi bir restoran keşfetsek bile bunun keyfini çıkarma süresi az olacaktır. Ama vaktimiz bolsa yeni şeyler denemek keşfettiğimiz tatların keyfini çıkarma süresi vereceğinden daha iyi bir seçenek gibi görünmektedir.

Christian ve Griffiths (2017) matematikçileri yıllardır meşgul eden bir soru sorar: “Bir kumarhanede iki kumar makinesi var. Birinde 15 oyun oynayıp 9 kere kazandınız ve 6 kere kaybettiniz. Diğerinde ise sadece iki oyun oynadınız ve sadece bir oyun kazandınız. Sonraki oyununuzu hangisinde oynardınız?” Birincisinde başarı oranı %60, diğerinde %50’dir. Hemen bir karar vermeden önce birincisinde 15 oyun oynarken diğerinde sadece iki oyun oynadığımızı dikkate almamız gerekir. Lokanta seçiminde olduğu gibi zaman yine önemli bir parametredir: Kumarhanede ne kadar kalacağız?

Herber Robbins 1952’de yazdığı makalesinde iki kumar makinesi için “Kazan kal, kaybet değiştir” stratejisinin işi şansa bırakmaktan daha iyi bir çözüm olduğunu savunmaktadır: Kazandığın sürece aynı makinede kal, kaybedince diğer makineye geç. Robbins’in bu stratejisini tartışan çok sayıda çalışma vardır. Bu tip araştırmalardan elde edilen sonuçlar hükümet ve şirket politikalarının oluşturulmasına yardımcı olmaktadır. Unilever 1970’lerde John Gittins adlı matematikçiden ilaç denemelerini en iyi şekilde planlamasını ister. Çünkü diğer ilaç şirketleri gibi Unilever de bir yandan yeni ilaçlar bulabilmek için AR-GE yatırımları yapmak isterken (araştır) diğer yandan mevcut ilaçlarından kazanç sağlamayı devam ettirmek istemektedir.

Web sitelerinde en uygun tasarımı bulmak için kullanılan A/B testi de yine bir araştır/kullan problemidir. A/B testlerinde web sitelerinin renk, resim, haber başlığı vb özellikleri değiştirilerek ziyaretçiler rastgele ama eşit bir şekilde farklı versiyonlara yönlendirilir. Sonra “KATKIDA BULUN”, “BAĞIŞ YAP”, “SATIN AL” gibi bağlantılara ne kadar tıklandığı karşılaştırılarak en uygun tasarıma doğru ilerlenir. İnternet reklamcılığında ve e-ticarette çok sık kullanılan bir stratejidir. ABD’deki son seçimlere sosyal ağlardaki yalan haberler damga vurmuş olsa da Obama’nın kazandığı seçimin yıldızı A/B testleridir.

Önbellekleme

Web tarayıcıların önbelleği, daha önce ziyaret edilen html sayfaları, resimler gibi içerikleri saklar ve daha sonraki ziyaretlerde bu içeriği web sunucuna gidip almak zorunda kalmadığı için önbellekteki içerik daha hızlı yüklenir. Önbellekleme, bilişim teknolojilerinde çok sık başvurulan bir yöntemdir. İşlemcilerin, sabit disklerin ve işletim sistemlerinin önbellekleri vardır. Bu nedenle, hafıza mimarisinde ve işlemci çiplerinin milimetrik yerleşiminde önbellekleme önemli parametrelerden biridir. Web sitelerinin hızlı açılması için sadece web tarayıcılarında değil sunucu tarafında da önbelleklemeye başvurulur.

Kısaca önbellekleme, sıklıkla başvurulan içeriğin daha hızlı erişilebilecek bir yerde saklanmasıdır. Önbelleklemeyi gündelik yaşamda da çok sık kullanırız. Sürekli kütüphaneye gitmemek için daha sık başvurulan kitapları kütüphaneden ödünç almak bir tür önbelleklemedir. Önbellek uygulamalarındaki en büyük kısıtlama önbelliğin sınırlı kapasitesidir. Örneğin kütüphaneden en fazla beş kitap ödünç alabiliriz. Yeni bir kitap almak istediğimizde elimizdeki beş kitaptan birinden vazgeçmemiz gerekir. Burada temel sorun, hangi kitabı iade edeceğimizdir. Farklı algoritmalar kullanılabilir. Örneğin, rastgele bir kitabı iade edip yenisini alabiliriz. İade ettiğimiz kitaba tekrar ihtiyacımız olduğunda ise yine elimizdeki beş kitaptan herhangi birini rastgele seçip iade edebiliriz. Bazı durumlarda basitliği nedeniyle tercih edilebilecek bir yöntemdir. İkinci yöntem, FIFO’dur (First-In, First-Out, İlk Giren İlk Çıkar). Buna göre yeni kitabı ödünç alabilmek için ilk aldığımız, yani en uzun süredir elimizde bulunan kitap iade edilmelidir. Fakat bu çözüm her zaman uygun olmayabilir. Belki de FIFO’da en önde yer alan kitabın en uzun süredir elimizde bulunma nedeni ona çok başvurmamızdır. Üçüncü yöntem, son zamanda en az kullanılanı çıkar (Least Recently Used – LRU), çoğu zaman en verimli sonucu sağlamaktadır:

LRU bize bir sonrakine ihtiyaç duyacağımız şeyin en son ihtiyacımız olan olduğunu, bundan sonra ihtiyaç duyacağımızın da muhtemelen en son ikinci kullanılan şey olduğunu söylemektedir. Ve en son ihtiyacımız olacak şey de en uzun zamandır kullanmadığımızdır (s. 140).

Gündelik hayatta LRU’ya sıklıkla başvururuz. Bazen de farkında olmadan. Dağınıklığın altında LRU algoritması yatıyor olabilir. Okumakta olduğu kitapları, kitaplığa geri yerleştirmek yerine masaya veya koltuğa koyanları ve dışarıdan gelince montu askıya asmayıp ortalıkta bırakanları bir de bu açıdan değerlendirebiliriz.

LRU önbellekleme için kullanılan tek algoritma değildir. Elde önbelleğe konulacak içeriğin ne olabileceği hakkında veri olduğunda farklı yöntemler de kullanılabilmektedir. Amazon, bir bölgede popüler olan ürünleri o bölgedeki alt depolarına göndererek çok daha hızlı teslimat yapabilmektedir. Netflix de insanların yaşadıkları yerlerle ilgili filmleri daha çok seyretmeye eğilimli olduğunu fark ettikten sonra filmlerini sunucularında buna göre depolamaya başlamıştır.

Çizelgeleme

Gündelik hayatta çok sık başvurduğumuz bir başka algoritma da önceliklerimizi belirlediğimiz ve buna göre harekete geçtiğimiz çizelgeleme algoritmalarıdır. Vaktimiz sınırlı ve yapmamız gereken işler vardır. Cuma gününde olduğumuzu ve önümüzde dolu dolu bir hafta olduğunu varsayalım. Pazartesi fizik ödevinin teslimi için son gün. Çarşamba matematikten, perşembe geometri ve biyolojiden sınav var. Cuma günü de matematik ödevimiz var. Bu arada doğalgaz almaya gitmemiz gerekiyor, en fazla beş gün yetecek doğalgaz kalmış.

Hayatta bazen işler yığılır ve her işi aynı anda yapamayacağımıza için bunları bir sıraya koymamız gerekir. Sıralamayı yaparken farklı ölçütler devreye girer. Bazen en yakın zamanda bitirilmesi gereken işten bazen de en kısa sürede bitebilecek işten başlarız. Bazı kişisel gelişim kitapları kısa sürede tamamlanabilecek bir işi hemen yapıp listeden çıkarmayı, bazıları önce en zordan başlamayı öğütler.

Matematikçiler ise olaya daha bilimsel yaklaşmaktadır. RAND’da çalışan Selmer Johnson 1954’te yayımlanan bir makalesinde şöyle bir problem ortaya atar: Biri çamaşırınızı yıkayan diğeri kurulayan iki makineniz var. Çamaşırları önce yıkayıp, sonra kurutmanız gerekiyor. Ancak bazı çamaşırlar fazla lekeli olduğu için daha uzun sürede yıkanmakta, ama kurulama zamanı değişmemektedir. Ayrıca çamaşırın fazla olması kurutmayı olumsuz etkilerken yıkamayı etkilememektedir. Çamaşır yıkamanın ve kurulamanın en iyi yolu nedir?

Johnson, en kısa yıkama süresini en başta, en kısa kurutma süresinin de en sonda olacağı bir algoritmanın en iyi çözüm olacağını belirtmektedir. Johnson’un çizelgelemeyi algoritmik olarak ifade etmesi, optimum çizelgeleme hakkında yapılan araştırmaları da artırır. Christian ve Griffiths (2017), Johnson’un çalışmasının iki makinenin çalışma sürelerini en iyileştirmek üzere kurulduğunu gündelik hayatta günlük kararlarımızda ise tek makine gibi davrandığımızı hatırlatmaktadır. Bir diğer deyişle, işlerin belirli yapılma süreleri varsa toplam zamanda bir iyileştirme yapmak söz konusu olmayacaktır. Nasıl bir iyileştirmenin hedeflendiği önemlidir.

İstenen iyileştirme, maksimum gecikmeyi azaltmak olabilir. Bunun için teslim tarihi en erken olan işten başlama stratejisi uygulanabilir. Hizmet sektöründeyseniz, müşterinin teslim tarihi, karşınıza geldiği andan itibaren başlayacağı için geliş sırasına göre bir çizelgeleme yapılması gerekecektir. Her hafta pazara gidip taze meyve alıyorsanız meyvelerin bozulma zamanı, teslim tarihleri olacaktır. En erken bozulacak meyveden başlanabilir. Christian ve Griffiths (2017) bunun en lezzetli ve sağlıklı seçenek olmasa da yiyeceklerin bozulma sürelerini en az indireceğini yazmaktadır.

Teslim tarihinin önemli olduğu işleri bitirmek içinse işlem sırası en kısa olan işi bitirmek daha uygun sonuç verecektir. Örneğin, pazartesi günü başlamanız gereken A (dört gün sürecek) ve B (bir gün sürecek) işleri varsa, B’den başlamak daha uygun bir çözüm olacaktır. Böylece B bir gün (iş teslimi pazartesi öğleden sonra), A da beş gün (iş teslimi cuma öğleden sonra) bekleyeceğinden müşterilerin toplam bekleme süresi altı gün olacaktır. A’dan başlanırsa bu iş perşembe günü biteceğinden A’nın bekleme süresi dört gün, B’ninki ise beş gün olacaktır. Her iki durumda da işler toplam beş günde tamamlanacaktır. Fakat toplam bekleme zamanı dikkate alındığında birinci ve ikinci seçenek arasında üç günlük bir fark vardır.

Önce en kısa olan işleri yapmak işler arasında bir öncelik sıralaması yoksa işe yarayacaktır. B işine başlamak için A’yı tamamlamak gerekiyorsa problem değişecektir ve yeni bir algoritmaya ihtiyaç vardır. Christian ve Griffiths’in (2017) sorunun bununla sınırlı olmadığını ekler. Hayat durağan değildir; A ve B için bir planlama yapıp işe koyulmuşken C işi gelmişse nasıl karar vermemiz gerekir? Hangi durumda yaptığımız işi yarım bırakıp C’ye başlamalıyız yoksa yeni işi göz ardı mı etmeliyiz? Farklı bir algoritma tasarlamak ve uygulamak gerekecektir; bu durumda benzer sorunlarla karşılaştığında “kullanıcıyı yavaşlatmadan ya da gerginlik içine sokmadan mümkün olduğu kadar uzun bir süre göreve devam eden” işletim sistemlerinin çalışma ilkelerinden yararlanılabilir.

***

Christian ve Griffiths’in (2017) kitabında yer alan diğer algoritmalar incelendiğinde zaten insan denen bilgisayarın sezgisel olarak sık sık bunlara başvurduğu; ama elektronik bilgisayarların çalışma ilkelerinden de yeni şeyler öğrenilebileceği ya da günlük kararlarını bu algoritmaları kullanarak iyileştirilebileceği görülmektedir. Christian ve Griffiths’in (2017) algoritma örnekleri, kişisel gelişim kitaplarından çok daha yararlı olabilir!

Algoritmaların doğası ve çalışma mantığı kavrandıktan sonra her bir algoritma karşılaşılan soruna göre olduğu gibi uygulanabilir veya yeni koşullara göre geliştirilebilir. Ancak son yıllarda, hükümetler ve şirketlerin hem gündelik hayata gömülü algoritmalara müdahale edebilme hem de yukarıdan yeni algoritmalar dayatabilme gücüne erişmeye başladığına da dikkat etmek gerekiyor. Algoritmalara dayalı düzenlemeler, kişisel sağlıktan sosyal politikalara kadar her alanda, hızla ve fazla dikkat çekmeden yayılıyor. Sonraki yazılarda özellikle algoritmaya dayalı düzenlemeler üzerinde duracağım.

Kaynaklar:

Barbin, E., Borowczyk, J., Chabert, J. L., Guillemot, M., Michel-Pajus, A., Djebbar, A., &

Christian, B., Griffiths, T. (2017). Hayatımızdaki Algoritmalar, Çev. Ali Atav, Buzdağı Yayınevi.

Erwig, M. (2017). Once Upon an Algorithm: How Stories Explain Computing. MIT Press.

Martzloff, J. C. (2012). A history of algorithms: from the pebble to the microchip. Springer Science & Business Media.

Rainie, L., Anderson, J., & Page, D. (2017). Code-dependent: Pros and cons of the algorithm age. Pew Research Center, 8.



02 August 2018

Zemberek NLP 0.15.0 ve Metin Sınıflandırma


Zemberek NLP 0.15.0 yayınlandı.  Bu sürümdeki en büyük değişiklik metin sınıflandırma (text classification) modülünün eklenmesi. Metin sınıflandırma, doküman kategorisi bulma, duygu analizi ya da spam tespiti gibi farklı amaçlarla kullanılabilir.

Bu özelliği eklemek için oldukça meşakkatli bir iş yaparak C++ ile geliştirilen fastText kütüphanesini Java'ya taşıdık. Aslında metin sınıflandırma için fastText kütüphanesi kendi başına da kullanılabilir ama çalışma anında doğrudan sınıflandırıcıya erişme ve biraz da sistemin iç yapısını öğrenme adına bu yolu seçtik.

Metin sınıflandırma konusundaki tanıtım yazısı  ve 0.15.0 değişiklik listesini inceleyebilirsiniz.

23 April 2018

16 October 2017

KRACK: WPA2 Protokolünü Hedef Alan Bir Saldırı


Kablosuz internet cihazlarımızla (bilgisayar, telefon, vb) evlerde, iş yerlerinde vs bağlandığımız kablosuz ağların çoğunu koruyan WPA2 şifreleme algoritmasını etkisiz hale getiren bir atak geliştirilmiş. KRACK adı verilen bu atak kablosuz ağların parolalarını kırmıyor, yani evlerimizdeki internete kaçak ortağımız olmuyor ancak daha kötüsü cihaz ve erişim noktası arasındaki şifrelemeyi etkisiz hale getirerek bizler ve internet arasında giden gelen bilgileri saldırgan kişilerin okuyabilir hale gelmesine yol açıyor.

Biz ne yapabiliriz bu atak karşısında? Bağlandığımız erişim noktasının şifrelemesine güvenemeyeceğimize göre ziyaret ettiğimiz web sayfalarına mümkün olduğunca https üzerinden erişmeye çalışalım, ne kadar az şifrelenmemiş web trafiği yaratırsak o kadar iyi. Ayrıca kullandığımız bilgisayarların, telefonların, modemlerin vb her fırsatta yazılım güncellemelerini takip edelim. Örneğin bir çok Linux tabanlı işletim sisteminde WPA2 şifrelemeli ağlara bağlanmamızı sağlayan wpasupplicant yazılımına gerekli yamalar geldi bile. Windows’lar için de gerekli yamalar yayınlanmış. Şu an için yapacak başka da bir şey görünmüyor.

Atak hakkında detaylı bilgiye https://www.krackattacks.com/ adresinden, atakla ilgili yayınlanan bilimsel makaleye de https://papers.mathyvanhoef.com/ccs2017.pdf adresinden erişebilirsiniz.



10 July 2017

LKD’nin 14. Olağan Genel Kurulu Yapıldı


lkdlogo

Derneğimizin 14. Genel Kurulu, 8 Temmuz 2017 Cumartesi günü, Elektrik Mühendisleri Odası Genel Merkezi’nin ev sahipliğinde yapıldı. Genel Kurul sonuçlarını paylaşıyoruz.

Genel Kurul’da yapılan oylama sonucunda 2017-2018 dönemi LKD Yönetim Kurulu’na seçilen üyelerin, aralarında yaptıkları görev dağılımı sonrası Yönetim Kurulu şu şekilde oluştu:

– Volkan Uygun (Başkan)

– Duygu Hatıpoğlu Aydın (Genel Sekreter)

– Adil Güneş Akbaş (Sayman)

– Ahmet Sezgin Duran (Üye)

– Barış Büyükakyol (Üye)

 

Oylama sonucunda, Denetleme Kurulu ise

– Volkan Evrin (Başkan)

– Türker Gülüm

– Doruk Fişek

olarak belirlendi.



12 June 2017

LibreOffice Hesap Tablosu Korumasız Hücreleri Seç


Hesap tablosunda hücrelerin hepsi varsayılan olarak korumalıdır. Bu koruma ancak siz çalışma kağıdını koruma altına aldığınızda aktif olur. Hücrenin koruma durumunu hızlıca değiştirebilmek için bir toggle butonu daha önce eklemiştim.

Bir çalışma kağıdını koruma altına aldığınızda içindeki koruması kaldırılmış hücrelere toplu işlemler yapmanın (Hepsini sil, hepsinin font büyüklüğünü değiştir vs vs) bir yolu yoktu. Elle tek tek seçmeniz gerekiyordu. Hücrenin korumalı/korumasız olması da gözle ayırt edilemediği için imkansızdı diyebilirim.

Eklediğim bu özellik çalışma kağıdı korumalı yada korumasız olduğunda içindeki tüm koruması kaldırılmış hücreleri seçmenize izin veriyor. 6.0 sürümünden itibaren kullanılabilecektir.

İlgili hata kaydı: https://bugs.documentfoundation.org/show_bug.cgi?id=95883
Gönderdiğim yama: https://gerrit.libreoffice.org/gitweb?p=core.git;a=commitdiff;h=ed715a460254e4d72c78ff6eb244a9fc6692e2a6
Sürüm notu:  https://wiki.documentfoundation.org/ReleaseNotes/6.0#Calc

24 April 2017

İnternet Haftası Bilişim STK’ları Bildirisi


Biz Bilişim STK’ları İnternet kültürünü yaymak, İnternetin Türkiye için önemini anlatmak,
ülkemiz İnternet politikalarını tartışmak, yeni projeler başlatmak için İnternet Haftalarını yapıyoruz. Bu yılda, Türkiye İnternetinin 24 yaşı nedeniyle, 10- 23 Nisan tarihlerinde 20. İnternet Haftasını kutluyoruz.

Bizler, İnterneti, insanlığın yeni toplum biçimi olduğunu düşündüğümüz, Bilgi Toplumunu oluşturan araç ve kavramların temsilcisi olarak görüyoruz. Sanayi devrimi insanın kol gücünü çokladı, onun etkin kullanımını mümkün kıldı. İnternetin temsil ettiği devrim ise, insanın beyin gücünü çokluyor, onun ürünlerinin paylaşılmasını, yeniden üretilmesini kolaylaştırıyor. Yaşam gittikçe artan bir şekilde bilgi ve enformasyon üzerine dönüyor. Artı değer yaratmanın ana unsuru, bilgi, ar-ge, inovasyon, yani eğitimli insanların beyinsel ürünleri oluyor. İnternet bireyi özgürleştiriyor, güçlendiriyor. Kitlelere örgütlenme ortamları sunuyor, onları güçlendiriyor. İnternet dünya üzerinde milyarlarca insanın katıldığı bir paylaşım, öğrenme, üretim ve eğlence ortamıdır. Biz, toplum olarak sosyal medya da kavga ederken pek fark etmiyoruz, ama İnternet, sektörleri yeniden yapılandıran, meslekleri değiştiren, kamu yönetimi, demokrasi, hizmet ve ticareti yeniden tanımlayan devrimsel bir gelişmedir. Birbirlerini hiç görmeyen insanlar, insanlığın ortak mülkiyeti için ürünler geliştirmekte; özgür yazılım, açık erişim, açık ders malzemeleri, açık bilim, açık tıp, açık biyoloji gibi projeleri hayata geçirmektedirler. Bu bağlamda İnternet, Sanayi devriminden daha önemli bir gelişmedir. AB’nin bir önceki Sayısal Gündem sorumlusu, toplumu yeniden yapılandırmak açısından, İnternetin elektrik, telgraf ve matbaadan daha önemli olduğunu söylemiştir. Büyük Veri, Nesnelerin İnterneti, 3 Boyutlu Yazıcılar, Yapay Zeka, 5G gibi yeni teknolojiler, 4. Sanayi Devrimi yada Sanayinin İnterneti konuları gündeme taşımaktadır. Bu teknolojilerin birbirini beslemekte ve ekonomiyi etkilemektedir.

Dünyada 3.6 milyara yakın insan İnternet kullanıcısı, 1.86 milyarı Facebook kullanıyor. Ülkemizde 16-74 yaş grubunde kullanım %61, Erkekler %70, Kadınlar %51, Kent ve Kırsal arasında kadın erken a rasında fark var. Bir başka deyişle halkımızım %40 interneti kullanmıyor. TUİK 2013 verilerine göre Kent’te %61 Erkek -%42 Kadın ve Kırsalda bu %33 Erkek ve %14 Kadın internet kullanıyor. Kabaca değerlendirirsek; dünya ortalamasını yakaladık ama Avrupa ortalamasını yakalayamadık.
Ülkeler, İnterneti ekonomiyi geliştirme, kamu hizmetlerini iyileştirme, toplumsal katılımı artırmak, demokrasiyi geliştirmek için kullanmak çabasında. Dünya bireyin gelişmesi, toplumun üretken bir parçası olması için İnternetin önemli olduğuna karar vermiş ve bilgiye ve İnternete erişimi temel bir yurttaşlık hizmeti olarak ilan etmiştir. Bu temel hak, anayasalara ve hükümet programlarına girmeye başlamıştır.

Önemli gelişmelere rağmen, maalesef, ülkemiz bir bütün olarak, İnterneti ekonomik kalkınmanın, bireysel gelişmenin, toplumsal katılımın motoru olarak görememiş, marjinal problemlere odaklanarak, İnterneti olanak değil, baş edilecek bir sorun olarak görmüştür. Siyasi kadrolar, gündelik siyasi hesaplarını bir kenara koymalı ve yurttaşların temel hak ve özgürlüklerine saygı göstermelidir.

Uluslarası indekslere durum, parçalı bulutlu; çoğunlukla bulutlu. Genellikle, 190 ülke arasında 60’ın üstündeyiz. İnsani gelişme 71/188, demokrasi 97/179, basın ve ifade özgürlüğü, (rsf 151/179; FH 156, özgür değil, ve internet: özgür değil 50/65) ve toplumsal cinsiyet indekslerinde çok kötüyüz;, 130/144 (Ekonomi: 129, Eğitim:109, Sağlık:1-38, siyaset: 113), . WWW vakfının sıralamasında 38/86 durumdayız: bu özgürlük, içerik ve yarar alt indekslerinde de aynı civarda. Rekabet indeksinde 55/138, Inovasyon indeksinde 42/128, Network Readiness (GITR) 48/138 (Çevresel: 49, hazırlık:40, kullanım:59, Etki: 58). Dünya Telekom Birliği (ITU) Bilişim Gelişme indeksinde 70/175, Avrupada 40 ülke arasında 38., kullanımda 76, erişimde 81, beceride 39. sıradayız. İnternet.org ve Ekonomist (EIU) araştırmasında 31/75 deyiz; erişim ve fiyatta 33/75, işe yarar içerikte 19/75 , yetkinlik (etkin kullanım) da ise 48/75 üzerindeyiz. Dünya geniş bant indeksinde 70/173 sıradayız.
Türkiye İnterneti gelişiyor. Mobilde ilginç uygulamalar var, en yeni cihazları alıyoruz. Finans sektörümüz İnternet işinde oldukça başarılı. Kamuda Maliye, Sağlık, Adalet sisteminde önemli projeler var. E-devlet hizmetleri sunumunda Avrupa ortalamasının üstündeyiz. Ülkemizde çeşitli ar-ge teşvikleri var, teknokentler çoğalıyor. İnternet ve Bilişimle ilgili bir kaç bakanımız var. Bütün bunlara rağmen:
Türkiye Gemisi Rotasını Bilgi Toplumuna Döndüremedi
Ülkemizde önemli gelişmelerde olsa, bütünsel bir bakış açısıyla koordineli bir çaba eksik. Bilgi Toplumu Stratejisi ve Eylem Planı ile e-devlet eylem planımız var, ama pek bir kimsenin haberi yok. Yönetişim yapısı yok. Bilişim STK’ları olarak önerimiz:
Ülkemiz Bilişim ve İnterneti stratejik sektör ilan etmelidir. Bunun için en başta Bakan düzeyinde bir siyasal sahiplenme olmalıdır. Tüm paydaşları kapsayan, katılımcı saydam yapılar kurulmalı, kamuoyunca açık ortamlarda yeterince tartışılan, gözden geçirilen eylem planları yapılmalı ve hayata geçirilmelidir. Yurttaş ve sivil toplum bu gelişmelerin odağında olmalı, gelişmeler saydam ve katılımcı bir şekilde hayata geçmelidir.
Telekom ve Bilişim sektöründe adil rekabet koşulları yok. Devlet ve tarafsız olması gereken kurumlar tekeli koruyorlar. Fiber altyapısında ülke olarak geri kaldık. Ağ tarafsızlığını sağlamak üzere hem ekonomik, hem siyasi önlemlerin alınması, bu önlemlerin bilginin serbest akışını güvence altına alacak politikalarla desteklenmesi gerekmektedir.

3G ve 4G gecikmeli olarak hayata geçmiştir. 4G için fiber altyapısı yeterli değildir. Fiber altyapısı konusunda ülke olarak oldukça geri kalmış durumdayız. Türkiye’de sabit ve mobil genisbant değerleri OECD ortalamasının yarısında. 189 ülkede arasında sabit de 73 sırada, mobil’de 75. sıradayız. 3G ve 4G ihaleleriinde göstermelik yerli araştırma şartı arandı, ama ülkede geliştirilen 4G için baz istasyonları, Ulak projesi, kenara konuldu. Fiber altyapısının gelişmesi önündeki engeller kaldırılmalıdır.

Ülkemiz İnternetin devrimsel bir gelişme olduğunu algılayamamış marjinal problemlerine odaklanarak, adeta İnternete savaş açmıştır. Ülkemiz, kalkınmanın, ar-ge ve inovasyonun ifade ve basın özgürlüğünün tam olduğu, farklı ve aykırı fikirlerin yeşerebildiği hoşgörü ortamlarında var olduğunu algılayarak, özgürlükçü bir çizgiye gelmelidir. Ülkemiz yasaklama refleksinden kurtulmalıdır. Github, dropbox gibi weblerin yasaklaması sadece ülkemizin tanıtımına, turizmine ve ülkede şirketlere ve bireylere zarar vermektedir. Booking.com, ve trivago gibi weblerin yasaklanması öncelikle kendi istekleri ile üye olan şirketlere zarar verir. Aksine bu tür portalların değişik sektörler için geliştirilmesi için Türk firmaları teşvik edilmelidir.mYasaklanan web sayısı 3yıl önce 30 bin, 2 yıl önce70 bin iken geçen yıl 110 bine çıkmıştır. Bu yıl engelliweb de yasaklı. Bu daha çok Türkiye’ye zarar vermektedir. 5651 ve ona bağlı yasal düzenlemeler iptal edilmeli ve STK’ların katılımıyla yeniden yapılmalıdır.

Yukarıda da belirtildiği gibi ülkemizde Kır-Kent ve kadın-erkek arasında İnternet kullanımında ciddi uçurumlar var ve nüfusun yaklaşık %40’ı ı İnternetin dışında. Sadece TÜİK rakamları değil, uluslararası gelişmişlik indekslerinde de Türkiye maalesef sonlarda yer almaktadır. Türkiye’nin bu indekslerin altlarında yer alması sosyal eşitsizliklere, hatta uçurumlara işaret ediyor. Sayısal uçurum da bunların arasında en önemli başlıklardan birisidir. Sayısal uçurumu ortadan kaldıracak, tüm yurttaşları yeni medya okuryazarı yapacak çabalar, kamu, özel sektör ve STK işbirliği ile yapılmalıdır. Ulaştırma Bakanlığı öncülüğünde başlatılan sayısal uçurumu kapatmaya yönelik Kars’ta başlatılan projeyi sevinçle karşılıyoruz. Evrensel hizmet fonu bu amaçla kullanılmalı, cihaz alımı, eğitim, ve varlığı unutulan KİEM (Kamu İnternet Erişim Merkezleri) kullanılmalı, çaba diğer paydaşları kapsamlıdır. Sayısal uçurumu kapatma çabası yurttaşları bilgi okuryazarı yapmalı; onları yeni medya etiği, mahremiyet ve güvenlik konularında yeterli ve kendilerini geliştirebilen bir konuma gelmelidir.

Bilişim teknolojilerin eğitimi ülkenin kalkınması, dünya ile rekabet edebilmesi içinde önemlidir. Bu kapsamda özgür yazılımların önemine işaret etmek isteriz. Özgür yazılımlar tasarruf, güvenlik, istihdam ve rekabet açılarından önemlidir. Bilişimci yetiştirme ve yazılım geliştirme açılarından özgür yazılımlar çok önemlidir. İnsanlığın ortak mülkiyetinde olan 1.4 milyon olan özgür yazılım, Türkiye’de üretilen yazılımlar kadar “yerli ve milli”dir. Pardus ve Fatih projelerinin özgür yazılım temelinde yaygınlaştırılmasını öneririz.

Temel öğrenim kurumlarındaki “Medya Okuryazarlığı” ve “Bilgisayar” dersleri müfredatının dijital okuryazarlığı geliştirecek şekilde gözden geçirilmesi gereklidir. Bu yönde pilot çalışmayı destekliyoruz. Bütün dünya anaokulundan itibaren herkese programlama/yazılım kavramlarını öğretmeye çalışıyor. Webin kurucusu Tim Berners-Lee politikacılara programlama öğretelim diyor. Programlama düşünme ve planlama yetisini geliştiriyor. Dünya gittikçe daha fazla bir şekilde yazılımın etrafında dönüyor. Ülkemizde, okullarda bu yönde ders konması konusunda çaba harcamaya başladı. Umarız, yakında bu konuda pilot çalışmalar başlar.

Herkese açık, özgür, güvenli, bütünsel İnternet tüm insanlığın yararınadır.

İnternet Yaşamdır!

Saygılarımızla kamuoyuna duyururuz.

23 Nisan 2017

2017


Destekleyen STK’lar:
Alternatif Bilişim Derneği 
Alternatif Medya Derneği 
Bilgisayar Mühendisleri Odası 
Bilişim Teknolojileri Eğiticileri Derneği
EHD – Elektronik Ticaret ve Internet Hukuku Derneği 
EMO – Elektrik Mühendisleri Odası 
SOC-TR – Internet Derneği 
INETD – Internet Teknolojileri Derneği 
IYAD – Internet Yayıncıları Derneği 
Ankara Barosu Bilişim Hukuku Komisyonuy
İstanbul Barosu Bilişim Hukuku Komisyonu 
Kadın Yazılımcı Oluşumu 
LKD – Linux Kullanıcıları Derneği 
PKD – Pardus Kullanıcıları Derneği 
TBD – Türkiye Bilişim Dernegi 
TELKODER- Serbest Telekomunikasyon İşletmecileri Derneği
TKD – Türk Kütüphaneciler Derneği



22 March 2017

Kullandığım Linux işletim sistemi 32bit mi? 64bit mi?


Kullandığınız bir Linux işletim sistemini siz kurmamış olabilirsiniz veya birden fazla bilgisayar ve farklı işletim sistemleri ile çalışıyor olabilirsiniz. Bu nedenle bazen kullandığımız Linux işletim sisteminin sürümünün 32 bit mi yoksa 64 bit sürümü olduğunu öğrenme ihtiyacı duyabilirsiniz. Bunu terminal ekranından aşağıdaki kod ile hızlıca öğrenebilirsiniz.

Linux işletim sisteminin 32bit mi 64 bit mi olduğunu öğrenmek için;

uname -a

kodunu terminal ekranına yazdığımızda karşımıza çıkan ibarelerde i686 i386 geçiyor ise 32bit, x86_64 ibaresi geçiyor ise 64bit olduğunu anlayabiliriz.

i686 i386 32bit
x86_64 64bit

Bu işlemi terminal penceresinden 4 farklı şekilde daha yapabilirsiniz.

dpkg –print-architecture

getconf LONG_BIT

arch

file /sbin/init



28 January 2017

Bilgisayarda Hi-Res Ses Kullanımı


Kullandığım masaüstü bilgisayarın ana kartında (GA-Z68MA-D2H-B3) tümleşik çalışan ses kartının (RealTek ALC889), High-Resolution (24bit/192kHz) ses yeteneği olduğunu bugün farkettim. Anakartın dokümanlarında HD audio yeteneği olduğu yazıyordu fakat bu seviyede kaliteli bir ürünü anakart üzerinde sunacaklarını düşünmemiştim. Ayrıca dokümanda DAC (Digital-to-Analog Converter) yetenekleri yazmıyordu. Sonrasında şu metni okudum “GIGABYTE strongly believes that in 2011, HD audio playback is a standard specification”. E hal böyle olunca Ubuntu ve Windows‘da HD sesin nasıl ayarlanacağını, stüdyo kalitesinde sesin nasıl alınacağını anlatan bir blog yazısı ile sevincimi taçlandırmaya karar verdim. Bu yeteneklerin varsayılan olarak açık gelmediğinin altını çizmek gerekiyor. HD sesin farkını anlamak için 24bit/192kHz‘lik kaydedilmiş FLAC ses dosyalarına ve kaliteli bir ses sistemine ihtiyacınız var, ben YAMAHA HS80M kullanıyorum ve ses kalitesindeki farkın keyfini sürmeye başladım.

High-Res müzik kaynakları için güzel bir liste hazırlamış şu site; http://www.head-fi.org/…

Ubuntu HD ses yapılandırma;
Öncelikle şuanda kullanmakta olduğunuz Sample Spec değerlerini aşağıdaki komut ile kontrol edin;

pacmd list-sinks

Muhtemelen şuna benzer bir satır göreceksiniz, “sample spec: s16le 2ch 44100Hz“. Kullanmakta olduğum kart 24bit 192kHz desteklemesine karşın, 16bit 44100Hz seviyesinde çıkış veriyor.

/etc/pulse/daemon.conf dosyasına aşağıdaki satırları ekleyin. “;” ile yorum satırı haline gelmediğinden emin olun;

default-sample-format = s24le
default-sample-rate = 192000

Dosyaya tanımları ekledikten sonra aşağıdaki komutla pulseaudio’yu yeniden başlatın;

pulseaudio -k

Sample Spec değerini tekrar kontrol ettiğinizde farkı görmeniz gerekiyor.

Windows HD ses yapılandırma;
“Ses ayarları > Hoparlör Özellikleri > Gelişmiş” sekmesi altından çalışma değerleri tanımlanabiliyor.

Macintosh HD ses yapılandırma;
“Utilities > Audio MIDI Setup” aracından gerekli ayarları tanımlayabilirsiniz.

Hamdi Özcan – ozcan.com



21 January 2017

10 Dakika 7 Saniyede Kendi Github Sunucumuzu Kurmak


"21 Günde Python Öğrenin" veya "24 Saatte Java" gibi kitapları görmüşsünüzdür ve sonuç, hiç de kitabın adında yazdığı gibi olmaz. Bu başlıkta yazan da aslında doğru değil ama bir farkla: zaman kısmı doğru, GitHub kısmı yalan... Aslında GitHub değil, web arayüzü GitHub'a çok benzeyen, kendi Git sunucumuzu kuruyoruz.

Saat tutup denedim ve gerçekten de 10 dakika 7 saniye sürdü. Ve daha da güzeli, bütün yapacağımız, sadece 2 komut yazıp basit bir web formunu doldurmak...

Bu bilişime fazla kafa yorarsan, sıyırırsın
Aslında yapılacak işlem hiç de basit değil. Birazdan yazacağım birkaç basit komutu çalıştırdığınızda, arkaplanda şunlar gerçekleşecek:
  • host makinede, dışarıya kapalı sanal bir network oluşturulacak
  • bir Linux container (LXC) oluşturulacak ve ayarlanacak
  • veritabanı sunucusu kurulacak
  • Reverse proxy olarak çalışacak bir Nginx sunucu kurulacak ve ayarlanacak
  • Git sunucu kurulacak
  • iptables ile NAT ayarları yapılacak
  • Self signed SSL sertifikası oluşturulacak
  • vs vs vs
Şimdi bütün bu adımları detaylı detaylı yazarsam ne olur? Değerli bir büyüğümüzün dediği gibi kafayı sıyırılsınız. Büyüğümüz ne demiş bakalım: "Bu bilişime fazla kafa  yorarsan sıyırırsın, nimetlerinden kullanıp yararlanıp işini göreceksin. Kafayı taktın mı o zaman işin kötü."                        
                                                  
"Yok, ben illa kafayı sıyırmak istiyorum. Olayın detaylarını da öğrenmek istiyorum" dersen, kaynak kodlar açık. Dilediğin gibi inceleyebilirsin. Takıldığın yer olursa bana email at.              
                                                  
Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor              
Yalnız bu işi yapabilmek için tek bir şey gerekiyor: Debian Jessie kurulu bir makine...                                         
                                                  
"Ya şimdi kim uğraşacak Debian kurmakla" dersen, cevap yine sayın büyüğümüzden geliyor: "Bulut sistemi dedikleri bir şey var, herkes oraya bir şey atıyor gelen oradan işine yarayanı alıyor kullanıyor ben böyle anlıyorum. Sistematik bir şey yok. Abur cubur dolduruyorsun, herkes ihtiyacını oradan alıyor ama hiç de karışmıyor. İstediğini buluyorsun"             
                                                  
Siz de öyle yapın. Ben öyle yaptım. Gittim Digital Ocean'a, açtım Debian Jessie bir makina... Beyin bedava...

"Yok ben yine arıza çıkaracağım. Bulutsuz olmaz mı" dersen, sanal makineye, Debian Jessie kurup deneyebilirsin. Yalnız (swap dahil) minimum 1 GB RAM ayırmanız gerekiyor ve (i386 değil) AMD64 mimarisini kullanın.

Bildiğiniz gibi bilgisayarlar Binali sistemiyle çalışır
Şimdi sıra geldi mucizevi komutlarımıza... Debian Jessie makineye root olarak bağlandıktan sonra şu 2 komutu veriyoruz:

wget https://raw.githubusercontent.com/emrahcom/emrah-jessie/master/installer/ej
bash ej ej-gogs

Birinci komut, kurulumu yapacak olan Bash scriptini indiriyor. İkinci komut ise kurulumu yapıyor. Script işini bitirdikten sonra web tarayıcımızı açıp IP adresini kullanarak sunucuya bağlanıyoruz. Açılan formda sadece 2 yeri değiştirmeniz gerekiyor: Domain ve Application URL

Eğer bu sunucu için bir alan adı kullanmayacaksanız, "your.domain.name" yazan yerlere, sunucunun IP adresini yazabilirsiniz. Bu kadar...

Başka numaraların var mı
Evet, var. Aynı yöntemle kendi Gmail sunucunuzu, canlı video yayını yapabileceğiniz stream sunucunuzu, web panelden yönetebileceğiniz PowerDNS sunucunuzu veya web sitenizin önüne koyabileceğiniz WAF (web application firewall) sunucunuzu da kurabiliyorsunuz. Her biri yaklaşık 10 dakikada ve 2 komutla oluyor. Detaylar, benim GitHub hesabında var ama siz yine de detaya girmeyin, kafayı sıyırmayın.

selamlar

30 October 2016

Özgür Web ve Teknoloji Günleri 2016


Herkese selam,

Yine kısa bir etkinlik sonrası yazısı yazıyorum. Etkinliklerden sonra hep blog yazmamın nedeni, böyle günlerin kayıtlara geçmesini istiyor olmam. Bu yıl "Özgür Web Teknolojileri Günleri" 22-23 Ekim'de Boğaziçi Üniversitesi'nde gerçekleşti.  Etkinliğe sadece ilk günü katılabildim ama dopdolu geçti.

Sunumlar 2 salonda paralel gerçekleşti. Ancak etkinliğe katılım çok fazla olduğu için salonlarda yer kalmadı. Kısa bir süre sonra da "Kendimi Şanslı hissediyorum" sınıfı açıldı. Burada, etkinliğe katılan herhangi birisi kısa ya da uzun anlatmak istediği ne varsa dinleyicilerle paylaşabiliyordu.

Benim ilk katıldığım sunum Halil Kaya ve Fatih Kadir Akın'ın "Belgelendirme Güdümlü Geliştirme" sunumuydu. Github'daki projelerimde belgelendirmeyi neden önemsemem gerektiği ile ilgili başka bir bakış açısı edindim diyebilirim.
Ardından Uğur Arıcı'dan "Modern Web Uygulamalarında Özgür Teknolojiler" sunumunu dinledim. 
Bu sunumdan sonra benim sunumum vardı. Ben de, Web Dünyasında Uluslararası Özgür Yazılım Fırsatları'nı anlattım. Bu sunumu yapmak için başvurmamın nedeni; böyle etkinliklere ilk defa katılıp, birşeyler yapmak isteyen ve nereden başlayacağı konusunda kafasında sorular olanlar için çevremde gördüklerimi, okuduklarımı ve kendi yaşadıklarımı anlatarak dinleyiciler için bir fikir oluşturmaktı. Sunumdan sonraki sorular, geri dönüşler beni çok çok mutlu etti.

Ardından Burak Can'ın "Elm Dili ile Fonksiyonel Programlama" sunumunu dinledim. Sunum sonunda bunu da bir denesem iyi olacak şeklinde ikna olmuştum. Boş bir vaktimde Elm'e vakit ayıracağım.
  Tabiki sunum araları hep aşırı süperli :)
Sunumları merak edenler buradan ulaşabilirler. 

Benim için yine çok harika geçen bir gündü. Yeni insanlarla tanıştım, az görebildiğim arkadaşlarımla görüştüm. Bir sonrakine siz de gelin. :)


31 May 2016

Bilgisayar Mühendisliği


Ekşisözlük'teki bilgisayar mühendisliği tanımlarına bakınca, "bilgisayar mühendisi mimar, programcı ameledir", "utp kablo takmayı bilmezler", "temeli hardware'dir", "programlamayla alakası yoktur", "bilgisayar bilimlerinden farklı bir şeydir", "asıl işi işlemci tasarlamak" gibi saçmalıklar arasında kayboluyorsunuz.

Bu da şaşırtıcı değil çünkü bazı hocalar ve mezunlar bile bu yanlış fikirleri yaymaya devam ediyor.

Bilgisayar Mühendisleri Odası'nın şu kuruluş raporuna bakın:

Meslek Alanında Yaşanan Tahribat (sayfa 9): ...sektör kamu ile akademiden ziyade serbest piyasa koşulları içinde büyümüş... kamusal düzenleme olmaması (yüzünden) ülkemiz salt tüketici konumda kalmış... bilgisayar mühendisleri teknoloji ve bilim dünyasında çığır açan çalışmalara imza atmak yerine kod yazan kişiler olarak kalmışlardır.

Bu metni yazan ve okuyan hiç kimsenin aklına, "silikon vadisinde çığırları açanların kamu düzenlemesi mi vardı?", "serbest piyasa hakimiyetindeki Amerika, bilişim tüketicisi konumunda mı?" ya da "Knuth, Tarjan, Sedgewick gibi teorik araştırmacılar bile her gün kod yazıyorken bizim bilgisayar mühendislerinin ayağına bu niye bağ oluyor" gibi çok basit sorular gelmemiş anlaşılan!

Bu bilgi kirliliğine engel olmak için bazı kavramları temelden açıklamak gerekiyor.

Bilgisayar Mühendisliği

Bir çok ülkede Computer Science (Bilgisayar Bilimi) olarak geçen bölümdür. Bir uygulamalı matematik alanıdır. Temel problemleri: neleri hesaplayabiliriz (karmaşıklık, quantum), nasıl hesaplayabiliriz (algoritmalar, veri yapıları, yapay zeka, diller ve derleyiciler) ve neyle hesaplayabiliriz (bilgisayar mimarisi, ağlar, sistemler) olan bir bilim dalıdır.

Türkiye'de bir mühendislik bölümü olarak açılmasının nedeninin devlet kadrolarında mühendis olmayanların teknik kadro sayılmasının zorluğu ve yüksek maaş alamamaları olduğunu düşünüyorum.

Mühendislik iki anlamda kullanılabiliyor: Bilimsel bilginin bir şeyler geliştirmek için kullanılması ile bir profesyonel meslek dalı. Birinci anlamın bir sakıncası yok. Örneğin bir problemin çözülmesi için bir program geliştirmek bir mühendislik çalışması olarak görülebilir.

İkinci anlamda ise sıkıntı büyük. Profesyonel mühendislik, tıpkı doktorluk ya da tesisatçılık gibi bir meslektir. Denetime bağlıdır, mesleği yapanlar bir oda ya da kuruma kayıtlı olmak ve belli yeterlik şartlarını yerine getirmek zorundadır. Bunun amacı da, örneğin evinize patlama riski olan bir doğalgaz borusu bağlanmasını ya da iki inşaat mühendisinin aynı bina için farklı statik hesapları vermesini önlemektir.

Böyle bir durum bilgisayar mühendisliği için iki nedenden anlamsız. Birincisi bu bir profesyonel meslek değil, bir bilim dalı ve bu bilgiye herhangi biri sahip olabileceği gibi kendi başına her türlü amaçla da kullanabilir. İkincisi ise yaratıcılığa ve çeşitliliğe açık bu alanda, şu iş bu şekilde yapılır gibi meslek kurallarını üretecek bilgiye sahip değiliz. Evet, bazı tasarım kalıpları (design patterns), ve yazılım geliştirme teknikleri (test tabanlı geliştirme, sürüm kontrolü, vb) icat ettik ama hâlâ genel problemi çözebilmiş değiliz. Bu iş bir bilim olduğu kadar aynı zamanda bir sanat da. Şirketlerin diplomaya sertifikaya değil kendi mühendisleriyle yapılacak mülakata bakmasının altında da bu yatıyor.

Bilgisayar Bilimcisi Program Yazmaz mı?

Bu saçma fikrin savunulmasının ardında diplomayı aldıktan sonra yan gelip yatarak para kazanma beklentisi var herhalde.

Araştırmacılar için hipotezlerini test etmenin, modellerini incelemenin önemli bir yolu program yazmak. Bazen teorileri ispatlamanın bir yolu bile olabiliyor.

Endüstride ise program yazmayacağım diyen adamı görüşmeye bile çağırmazlar. Google, Microsoft, Apple gibi şirketlerin herhangi bir pozisyonuna girmek için iş görüşmesinde bile program yazmanız gerekiyor.

Bir kişi analiz yapacak, diğeri tasarım yapacak, kalanlar da tasarımdaki fonksiyonları yazacak modeli 60'larda kaldı. Yazılım geliştirme, yazılımların artan karmaşıklığı ile birlikte çok daha dinamikleşti. Tasarım, gerçekleme, test ve hata ayıklama ayrı süreçler değil artık. Takımlar, hiyerarşi yerine birlikte çalışan uzmanlardan oluşuyor.

Elini kirletmeyen biriyle hiç kimse çalışmaz. Okulda ödev olarak yazdığı programlar dışında bir deneyimi olmayan adamın zaten tasarım bilgisi de olamaz. Dahası, bu işlerden bir kaç yıl kopmuş birinin bile tasarım becerisi hızla düşmeye başlar.

Okullu mu Alaylı mı?

Bir başka saçma tartışma. Genelde bu tartışma teorik bilgi mi yoksa pratik bilgi mi gibi yanlış bir düzleme de çekiliyor. O yüzden ikisine de bakalım.

Örneğin elindeki dosyalardan bazı bilgileri tarayıp istatistiksel bir sonuç çıkarmak isteyen bir kişiye Python ile basit betikler yazmaya yetecek kadar bilgisayar bilimleri bilgisi yeterli olabilir. Benzer şekilde bir felsefeci hiç programlama öğrenmeden yalnızca karmaşıklık teorisini çalışarak kendi alanında ihtiyaç duyacağı bilgilere kavuşabilir.

Karşılaşılan herhangi bir problemi çözebilecek genel bir program yazma yeteneği ya da bilgisayar bilimleri alanında yeni bilgiler keşfedebilecek bir araştırma yeteneği için ise üniversite eğitimi programında yer alan hemen her konuyu öğrenmek şart.

Bilgisayarlar bir çok katmandan ibaret. Algoritmalar, kitaplıklar, diller, işletim sistemi, işlemci, transistörler, elektronlar. Bu katmanların hangi seviyesinde çalışırsanız çalışın altınızda kalan kısımlara bağımlısınız. Dolayısıyla işinizi daha iyi yapabilmeniz altta neler döndüğünü bilmenize bağlı.

Teorik ve pratik bilgiden biri daha üstün diyemezsiniz. Daha iyi bir algoritmayla kazandığınız teorik hızı, o algoritmanın işlemci önbelleği kullanımı daha kötü olduğu ve veri setiniz yeterince büyük olmadığı için geri kaybedebilirsiniz örneğin.

Bu bilgileri nereden ve nasıl öğrendiğiniz değil, öğrenmiş olmanız önemli. Dahası dünyanın en iyi üniversitelerinde bile okusanız, işlenen konular ve yaptığınız ödevler sizi bu alanda uzman yapmaya yetmeyecek.

Orko der ki...

Eskiden İstanbul'da her kahvede, satrançta o kahvedeki herkesi yenmiş ama başka birileriyle oynamadığı için Kasparov'u yenerim ben diye böbürlenen tipler vardı.

Ne iş yapıyorsanız yapın, o alanda dünyanın en iyileri kimse onları bulun ve onları tanımaya ve geçmeye çalışın. Bilgisayar alanında bir şeyler keşfetmiş her araştırmacının, günlük yaşamda kullandığımız ürünleri yapan her geliştirici ve girişimcinin, Internet üzerinde blog'ları, sunumları, ders videoları, makale ve kitapları var.

Hayatında büyük ölçekli bir ar-ge projesinde yer almamış, eski ders kitaplarından okuduğu arkaik tanımları öğreten hocaları, yaptığı e-ticaret sitesi ya da muhasebe programıyla kendini girişimci sananları, yabancı dilden yarım yamalak çevirilerle kitap yazanları, forumlarda iki üç soru cevapladığı için büyük üstat havalarına giren tipleri ciddiye almayın.

Yoksa yukarda alıntıladığım kişiler gibi kendi küçük mağaramızda dışardaki dünyanın gölgeleriyle oyalanır dururuz.



20 May 2016

Veri Bilimi Bülteni — 40


Her cuma yayın­ladığım ‘Veri Bil­imi Bül­teni’ ile son 1 haf­tada veri ve veri bil­imi konusuyla ilgili okuduk­larım­dan dikka­timi çeken­leri pay­laşıy­o­rum. Bu bül­ten her yayın­landığında hab­er­dar olmak istiy­or­sanız “Haf­talık Veri Bil­imi Bül­teni” linkedin grubuna üye ola­bilirsiniz. Küçük bir not: Önümüzdeki haftadan itibaren bülteni tamamen ingilizce olarak çıkarmayı (zaten içerikler ingilizce, ben bazen yorumlarımı türkçe Devamını Oku […]

09 May 2016

Vodem’in (Huawei 4231) Linux’ta Ethernet Olarak Kullanımı


Elime Vodafone’un bir modemi (Vodem) geçti. Bilgisayarıma taktığımda Linux bir ethernet olarak görmedi ve doğrudan çalışmadı. Daha önce Turkcell’in yeni nesil VINN’larında bu hiç başıma gelmediğinden, bir miktar uğraşmam gerekti.

Huawei’nin K4203 isimli bir modeliymiş (lsusb sağolsun). Kendisi öntanımlı olarak MBIM isimli, Linux 3.8’de desteği gelen bir protokolle bağlanıyormuş (Google sağolsun). Bir sonraki nesil bir cihaz kısaca. Ama ethernet aygıtı olarak da çalıştırmak da mümkün. Bunun için usb_modeswitch ile cihaza komut gönderilmesi gerekiyor.

lsusb çıktısında aygıtın ID’sini 12F1:1F1C olarak görüyoruz:

# lsusb
# lsusb | grep Huawei
Bus 002 Device 012: ID 12f1:1f1c Huawei Technologies Co., Ltd.

usb_modeswitch ile şu komutu gönderince kendisi bir ethernet aygıtına dönüşüyor:

# usb_modeswitch -v 12d1 -p 1f1c -W -I -M 55534243123456780000000000000011062000000101000100000000000000
Taking all parameters from the command line

* usb_modeswitch: handle USB devices with multiple modes
* Version 1.2.5 (C) Josua Dietze 2012
* Based on libusb0 (0.1.12 and above)

! PLEASE REPORT NEW CONFIGURATIONS !

DefaultVendor= 0x12d1
DefaultProduct= 0x1f1c
TargetVendor= not set
TargetProduct= not set
TargetClass= not set
TargetProductList=""

DetachStorageOnly=0
HuaweiMode=0
SierraMode=0
SonyMode=0
QisdaMode=0
GCTMode=0
KobilMode=0
SequansMode=0
MobileActionMode=0
CiscoMode=0
MessageEndpoint= not set
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
NeedResponse=0
ResponseEndpoint= not set

InquireDevice disabled
Success check disabled
System integration mode disabled

Looking for default devices ...
searching devices, found USB ID 12d1:1f1c
found matching vendor ID
found matching product ID
adding device
searching devices, found USB ID 04f2:b230
Found device in default mode, class or configuration (1)
Accessing device 012 on bus 002 ...
Getting the current device configuration ...
OK, got current device configuration (1)
Using interface number 0
Using endpoints 0x01 (out) and 0x81 (in)

USB description data (for identification)
-------------------------
Manufacturer: Vodafone(Huawei)
Product: HUAWEI Mobile
Serial No.: FFFFFFFFFFFFFFFF
-------------------------
Looking for active driver ...
OK, driver found; name unknown, limitation of libusb1
OK, driver "unkown" detached
Setting up communication with interface 0
Using endpoint 0x01 for message sending ...
Trying to send message 1 to endpoint 0x01 ...
OK, message successfully sent
Resetting response endpoint 0x81
Resetting message endpoint 0x01
-> Run lsusb to note any changes. Bye.

Artık lsusb ile baktığımızda USB ID’sinin de değiştiğini görüyoruz:

# lsusb | grep Huawei
Bus 002 Device 013: ID 12d1:1590 Huawei Technologies Co., Ltd. 

Şimdi bir ağ aygıtı olarak da onu görebilmeliyiz ve eğer ağ yöneticimiz otomatik IP almaya ayarlıysa IP’sini bile almış olmalı:

# ip a
8: enp0s29u1u3: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 86:c9:ec:4d:51:bb brd ff:ff:ff:ff:ff:ff
inet 192.168.9.100/24 brd 192.168.9.255 scope global enp0s29u1u3
valid_lft forever preferred_lft forever

Bu yaptığımız ayarlar, ne yazık ki kalıcı değil. Modemin üzerine böyle bir bilgi yazamıyoruz. Onun yerine Linux’un aygıt yöneticisi olan udev’e bu modemin her takıldığını farkettiğinde bu komutu çalıştırmasını söylememiz gerekiyor.

Bunun için udev’in kuralları okuyabileceği bir dosya oluşturuyoruz:

echo 'ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1f1c", RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f1c -W -I -M 55534243123456780000000000000011062000000101000100000000000000"'> /etc/udev/rules.d/45-usb_modeswitch.rules

udev’e kuralları tekrar okumasını söylüyoruz:

# udevadm control --reload-rules

Artık “Vodem”i taktığımızda, otomatik olarak ethernet kartı olarak görünmeli ve DHCP’ten IP alabilmeli.

Not: Aygıta gönderilmesi gereken “55534243123456780000000000000011062000000101000100000000000000” gibi bir mesajı kafadan yazmadım :). İnternet’ten araştırdığımda rastladım. Sadece bu cihaz değil, başka Huawei cihazlarında da işe yarıyor gibi okudum. Teknik kaynağını bilen varsa, yorumlara eklerse sevinirim.



23 March 2016

Bir “Portal” üzerine…


Türkiye’de özgür yazılım katkıcılığı yapmak zor iş… Hatta katkıcılığı bırakın topluluk üyesi olmak bile pek kolay değil…

2007 benim için bu alanda bir milat, kişisel aydınlanma, özgür yazılımın alnımda çıkardığı 3. göz… Bu tarihi referans alırsam 2007 öncesi -topluluk/camia ne derseniz artık- aitlik süreci çok zordu. Bakıyorum da 2007 sonrasından ta ki hatırlamak istemediğim bir tarihteki Özgürlükİçin.org çöküşüne kadar gerçekten güzel zamanlar geçirmişiz… Bu çöküşten sonra ise, topluluk ve aidiyet dışında özgür yazılım dünyasıyla olan bağlarımız da zayıflamaya başladı… En büyük zorluk ise bir portal, bir ana gemi olmayışı.

Efsanevi Özgürlükİçin sitesi hayalet gemi gibi bant genişliklerinde seyretmekte... Efsanevi Özgürlükİçin sitesi hayalet gemi gibi bant genişliklerinde seyretmekte…

Bu zorluğu kısaca masaya yatırırsak -aslında buna da çok zamanım yok- madde madde gidelim:

  • Özgür yazılım dünyasından haberler / sürüm duyuruları
  • Ortak bir paylaşım/yardımlaşma alanı – forum
  • Blog kardeşliği – gezegen
  • İncelemeler – özellikle oyun ve heyecan verici şeyler

Bu ve bunun gibi onca şeyi bir araya getiren harika bir şeye sahipmişiz; özgürlükiçin.org hatta o zman o kadar zenginmişiz ki bir de pardus-linux.org‘a sahipmişiz… ve cahilmişiz… bunların artık geride kaldığını kabul etmek gerekiyor…

Özgür yazılımda böyle “değerler” (bu kelimeyi kullanmayı da pek sevmiyoırum) ne kadar önemliymiş, onu düşünüyorum bir kaç gündür… Bunların eksikliği gerçekten özgür yazılım dünyasını takip etmekte insanı çok zorluyor… Hadi ben İngilizce biliyorum takip edebiliyorum… Ya ait olmak? Paylaşmak? Yardımlaşmak? Birlikte bir şeyler yapmak isteyip de o marşa basıp o enerjiyi boşaltabilmek? Yapabilmek? Bunlar yok…

Atlamadan bir de teknokedi.com vardı, o da bu açığı kapatmak için kendi öz amacı olmasa da alan yaratmak için katkı vermişti. Sevgili Ali Işıngör abimizin iyi niyetiydi…

Şu anda bu alan içice dağınık halde… Andoid, tabletler  ve mobil teknoloji birçok kişinin başını döndürdü ve masaüstü arka plana itildi, fakat şimdi GNU/Linux masaüstünün güçlenerek geldiğini görüyorum. Steam’in GNU/Linux’a gelmesi ve süpersonik oyunları Linux’a taşıması, Nvidia – Ati sürücülerindeki yenilikler + Vulkan vs, ve nihayetinde de Microsoft’un başlayan Linux aşkı(!) (hem Office’in potansiyel Linux sürümü beklentisi hem de Office 365)… Bunlar harika şeyler aslında… Masaüstünde Linux kullanımını kısıtlayan birçok sıkıcı bahane ortadan kalkıyor -konuyu uzatmamak adına özgür yazılım felsefesiyle kapalı yazılım tercihini kullanıcıya bırakalım… Yakında kendi adam akıllı dağıtımıyla pazara çıkacak masaüstü/dizüstü bilgisayarlar görmeyi umuyorum. (Dejavu değil…)

Konuya dönersek, şu anda bildiğim birkaç site arasında GNU/Linux dünyasına özel bir amiral gemi görebileceğim bir portal yok. Bildiğim siteler ise adeta kahramanca bir bireysel mücadele ile ayakta tutulmaya çalışılıyor, içerik sunmak için büyük emek ve zaman harcanıyor… Bunlardan bazıları:

  • getgnu.org – Fortran takma ismiyle adeta bir süperkahraman edasıyla paylaşılabilir bütün haberleri neredeyse tüm özgür yazılımla ilişkili forumlara ileten süper kişi. nasıl yaptığını hala çözebilmiş değilim.
  • linuxnotlari.co – Sevgili Mustafa Gökay’ın epeyce emek verdiği Linux Haber Platformu. OMG ubuntu tadında
  • acikgunluk.net – Sevgili Özgür Ilgın’ın günlüğü, özgür yazılım artı hobileri (özel ilgi alanı nostaljik ve avatür türk sineması)

* Başka bildiğiniz aktif sayılabilecek site varsa yorumlara yazarsanız sevinirim.

Yeni bir site?

Hayır, yeni değil, birleştirici, geniş ve yeni içeriği sunan bir site… Kolektif ve eğlenceli, hatta daha önce olmadığı kadar eğlenceli olmalı… Özgür yazılım caps galerisi dahi olsa olur…

Neden?

Çünkü ihtiyaç var

Peki gönüllü mü olacak, nasıl ayakta duracak?

Ticari bir proje olmalı. Para kazanmalı, en azından masraflarını çıkarmalı.

Özgür yazılım projeleri ve ticari amaç???

Böyle bir tabu var, ticari amaç güdülebilir. Özgür yazılım ürünleri dahi parayla satılabilir ki bu gibi işlerde “reklamsızlık” sanki bir bekaret kemeri gibi her projeye iliştiriliyor. Çok anlam veremiyorum…

Ticari amaç olmalı, diğer türlü hiçbir şekilde ayakta duramadı. Bağış kültürü bizim ülkemizde yok, şahsi fedakarlık bir yere kadar… Bir de bu işleri üstlenen kişiler sürekli rica minnet ile istekte bulunmak gerekiyor; damdan düştüm bilirim, yok bize sunucu, yok bize alan adı lazım diye aramaktansa parayı basıp almak en sağlıklısı.

Kim yapacak? Nasıl bir model?

Şu an bu işi hobi olarak yapan arkadaşlar ve böyle bir projeye girmek isteyen kişiler bir araya gelebilir, gelir paylaşımlı kolektif bir model üzerinde anlaşabilir. Dileğim de budur. Şayet onlar olmazsa, İngilizce bilen birkaç üniversite öğrencisi arkadaş böyle bir projeye girerse hem hobi, hem harçlık hem de ileriye yönelik belki de kendi işlerini kurabilirler.

Gelir yeterli olur mu?

Varsayalım Google Adsense ile yola çıktılar, Türkçe içeriğin reklam başı getirisi tabi ki İngilizce içerikten daha düşük olacaktır, ama akmasa da damlar, ileriye doğru hacim arttıkça tatmin edici bir gelir gelebilir.

Özellikle Steam sayesinde oyun inceleme ve tanıtım içeriklerinin ileride büyük potansiyeli olacağına inanıyorum.

Zorlukları?

Tahmin ettiğim bazı zorlukları var, bunun yanı sıra yukarıda bahsettiğim arkadaşların yaşayıp deneyimlediği zorluklar da vardır. Sonuçta protonların çarpıştırmayacakları için kolayca üstesinden gelebileceklerini düşünüyorum. Linus Torvalds’ın “Just for fun – Yanlızca Eğlenmek İçin…” sözüne yaslanıp eğlenceli bir yola girilebilir…

***

Yukarıdaki kendi kendime röportajım daha kısa bir yazı yazmak içindi, kendimi havaya sokmak için değildi. Epeydir bir şey karalamamıştım, lafı iyice uzatmak istemedim 😉

Dilerim bu yazım bir açık davet olur, en azından bir tartışma başlar ve şu üzerimizdeki ölü toprağını silkeleyebiliriz.

***

Bonus: “Var mı peki bu haberleri takip edebileceğimiz yabancı bir site?” diyenler özgür Ilgın’ın 10 sitelik listesine bakabilirler: En çok takip ettiğim 10 yabancı GNU/Linux haber ve blog

***

Son olarak, ben bu yukarıda yazdıklarımı düşünürken LKD‘den şöyle bir ileti de geldi. Katkı verebilceklerin dikkatine:

Merhaba,

Dünyada özgür yazılım ve ilgili alanlar (kişisel verilerin gizliliği, ifade özgürlüğü, telif hakları vs.) hakkında önemli gelişmeler yaşanmakta. Ancak bu gelişmeler hakkında yayımlanmış güncel haber ve yazılar yabancı dil (başta İngilizce) bilmeyen ilgililere ulaşamamakta. Bu nedenle, güncel haber ve yazıları Türkçeye çevirmek amacıyla bir çeviri grubu kuruyoruz. Çeviri grubu çalışmalarına LKD üyesi olsun ya da olmasın özgür yazılıma gönül vermiş herkes katılabilir.

Çevirisi yapılacak haber ve yazılar, LKD tarafından hazırlanacak bir sitede düzenli olarak yayımlanacak. Ayrıca aylık olarak da bülten haline getirilerek duyurusu yapılacak.

Çeviri grubuna katılmak için yk@linux.org.tr adresine, kısaca kendinizi tanıtan ve çalışma grubuna katılmak istediğinizi belirten bir e-posta atmanız yeterli olacaktır.

— 

ibrahim izlem GÖZÜKELEŞ

https://plus.google.com/109568522902358862122/posts/SC6dNnTsZAJ

~DAVET~

Özgür Yazılım Günleri 2016: LibreOffice Geliştirme ve Yaygınlaştırma ToplantısıÖzgür Yazılım Günleri 2016: LibreOffice Geliştirme ve Yaygınlaştırma Toplantısı –

(twitter bağlantısını yapıştırınca yukarıdaki kendiliğinden çıktı, vay be!)

Fırsatınız varsa katılın, detaylı bilgi için: http://ozguryazilimgunleri.org.tr/2016/etkinlik-programi/

Mutlu günler.



17 February 2016

PostgreSQL'de Türkçe sıralama destekli veritabanı yaratmak


Bu soru bana çok soruluyor, arşiv olsun diye yazayım. Öncelikle bu komut işletim sisteminin İngilizce ve UTF-8 kurulduğunu varsayıyor.

Komut şu:

CREATE DATABASE tr ENCODING='UTF-8' LC_COLLATE = 'tr_TR.UTF-8' LC_CTYPE='tr_TR.UTF-8' TEMPLATE template0;

Burada önemli şeylerden birisi CTYPE. Onu C yapsaydık upper/lower fonksiyonları düzgün çalışmazdı.

Bir de şablon olarak template0 kullanmalıyız -- bunun nedeni template1'in dil kodlamasının İngilizce olması (üstteki varsayım nedeniyle).

En basit hali ile konu bu kadar.



04 February 2016

One of The Largest Events in Europe: FOSDEM



This year, I've been attended Fosdem for the first time. Fosdem is one of the largest events of free software and open source world that happens every january, gathering thousands of the developers (+5000) in Brussels. It is great opportunity to get in touch with the developers of world's leading organisations.

Fosdem has really strong infrastructure to satisfy needs of the attenders.
I've attended the event through Episkey Limited Company's travel fund which is part of Cottange Labs. I've seen the converisation on the mailing list and said if there is any other company that supplies travel fund please let me know because Google have not published scholarship for Fosdem and I could not find another company. Emanuil Tolev has volunteered since 2011 for Fosdem. He replied me and said me and my coworkers would like to sponsor for a person. Then we started a private thread and solved sponsorship requirements. I am thankful for travel grant to Emanuil and Episkey Limited developers.

First day of the event, I've met with Michel, he works as Linux Kernel developer at Intel. We took coffe and talk little. Talking with the kernel developers makes me happy and I really feel very excited. After the meeting, I've discovered the event place, it was at Brussels University, ULB Campus, Solbosh. Fosdem is biggest event that I've attended untill now.

In general, I've joined Main Track sessions. Rspamd is one of my favorites. Vsevolod Stakhov is developer of Rspamd, he told project stages quite clear.

Libreboot and Frosted Embedded Posix OS are my favorites as well. I love to learn about low level software that's why I contribute Linux Kernel. I am former Linux Kernel at Outreachy and would like to keep contribution.

There was an Embedded Systems DevRoom, it was in Building U. I should say, location of the building is hard to find little because there was no sign about Fosdem front of the building. We could not see at least.

In the evening, I've met with my Turkish friends. We have a community photo:


Second day, I've met with Emanuil to talk face to face. He said, I really am glad to sponsor you. That's great to hear.

I've bought tshirts to donate the organisations. It is really great, I am happy to be part of free software and to move it forward.


There was a talk for in memory of Ian Murdock. I would have loved to attend it but I had to leave early because had a flight in the evening. Talks are stored here so far. This is great opportunity to watch the presentation later.

I am very happy about my first Fosdem experience because I improved my network recognizing great folks.

I've seen on the event brochure, it says 8000 developers attended! and you can see diversity at the event. Hope to improve diversity and see underrepresented groups in computer science.

Fosdem is a free event, you can attend without registration. We should donate individualistically or institutionally, if we woud like to see the event in future years.

08 January 2016

Stow ile yapılandırma paketleri


GNU/Stow bir süredir bildiğim fakat bir türlü deneme fırsatı bulamadığım çok basit bir paket veya sembolik link yöneticisi. Her ne kadar /usr/local içerisindeki linkleri yönetmek için düşünülmüş olsa da, esnek yapısı nedeniyle kullanım alanlarından biri de ev dizininde bulunan yapılandırma dosyalarını (yani nokta dosyaları ya da dotfiles) yönetmek.

Örneğin ~/dotfiles içerisinde x ve zsh adında iki dizininiz var. Bu dizinler stow için aslında birer paket ve diyelim bu paketlerin yapısı şu şekilde:

~/dotfiles
├── x
│   ├── .i3
│   │   └── config
│   ├── .Xdefaults
│   ├── .xsession
│   └── ...
└── zsh
    ├── .zlogin -> .zprezto/runcoms/zlogin
    ├── .zlogout -> .zprezto/runcoms/zlogout
    ├── .zprezto
    │   └── ...
    ├── .zpreztorc -> .zprezto/runcoms/zpreztorc
    ├── .zprofile -> .zprezto/runcoms/zprofile
    ├── .zshenv -> .zprezto/runcoms/zshenv
    └── .zshrc -> .zprezto/runcoms/zshrc

Eğer kullandığınız ve herhangi bir x ortamı bulunmayan bir sunucuda, sadece zsh ayarlarınızı kullanmak isterseniz stow zsh dediğinizde, stow sizin için sadece zsh dizini altında bulunan dosyalar ve dizinlerin ev dizininde yer alan gerekli linklerini oluşturacaktır. Bu şekilde yapılandırma dosyalarınızı paketlere bölerek, istediğiniz yapılandırmayı istediğiniz makinada rahatça kullanmanızı sağlıyor.

Bir başka örnek kullandığım yapılandırma dosyalarım verilebilir. gitin sağladığı dağıtık model ile her zaman tüm makineler arası senkronize olan bu dosyalar, stow ile de sadece gerekli makinede gerekli uygulamaları yapılandırmak için kullanılabiliyor.



03 September 2015

Bir Linux Yaz Kampı’nın Daha Ardından: Perde Arkası


Bilindiği gibi Linux Kullanıcıları Derneği (LKD), İnternet Teknolojileri Derneği (INETD) ile işbirliği içinde her sene yaz aylarında, herkesin katılımına açık olan 15 günlük Linux yaz kampı düzenlemekte. Bu yaz kampına katılım için katılımcılardan herhangi bir ücret alınmıyor. Sadece katılımcıların kendi yol/konaklama/yemek masraflarını karşılamaları gerekiyor. KYK ve üniversite yurtlarında uygun fiyatlı konaklama imkanı sunuluyor. Bu sene, yani 2015 yılında bu kampın 6.sı düzenleniyor. Son 4 yıldır ise Linux Yaz Kampı, Bolu Abant İzzet Baysal Üniversitesi’nde üniversitenin de desteği ile düzenleniyor. Geçtiğimiz 5-6 yıldır her sene artan başvuru sayıları bu organizasyonun başarısının bir göstergesi. Ben son birkaç yıldır aktif olarak bu organizasyona destek olamasam da e-posta grubunu elimden geldiğince takip ediyorum. Bu yazıya başlarken bu kadar popüler olan bir organizasyonun perde arkasında neler olduğu ve gönüllü dernek üyelerinin bu etkinliği gerçekleştirebilmek adına nelerle özenle ilgilendiği konusunda herkesin fikri olsun istedim. Şimdi detaylar…

Öncelikle başvurular alınmaya başlamadan önce yapılması gerekenleri sayarak başlayacağım. Kamp tarihinin belirlenmesi (Ramazan Ayı ve Bayramı ile çakışmamasına özen gösteriliyor.), üniversite ve yurt müdürlükleri ile iletişime geçilip belirlenen tarihlerde dersliklerin ve yurtların müsait olduğunun netleştirilmesi, gönüllü eğitmenler ile iletişime geçilip belirlenen tarihlerde kampa katılıp katılamayacakları ve hangi dersleri/sınıfları açabileceklerinin belirlenmesi, web sitesinin güncellenip kayıt almaya hazır hale getirilmesi, sponsor dosyasının hazırlanıp çeşitli firmalara sponsorluk teklifinde bulunulmak üzere gönderilmesi, kampta dağıtılacak promosyon malzemelerinin ve katılımcılara yol gösterecek afişlerin belirlenmesi, hazırlanması. Özetle, daha ortada görünen hiçbir şey yokken hummalı bir çalışma başlıyor.

Başvurular başladığında tüm kayıtlar veritabanında depolanıyor. Başvuranlar arasında üniversite öğrencilerinden, çok çeşitli kurum ve şirketlerde çalışanlara kadar farklı yaş ve hatta meslek gruplarından kişiler oluyor. 2015 yılındaki toplam başvuru sayısı 775. Sınıflar ve eğitmenlerin üst limiti belirlediği toplam kontenjan ise 300 kişi civarı. Dernek olarak stratejik görevlerdeki kişilerin eğitiminin daha önemli olduğunu düşündüğümüz için başvurularda öncelik görevlendirme alan kamu ve üniversite bilgi işlem personellerine veriliyor. Ancak daha önce de belirttiğim gibi kampa katılım herkese açık ve başvurular kapandıktan sonra kontenjan elverdiğince homojen bir seçim yapılıyor. Bu seçimler yapılırken daha önce INETD ya da LKD’nin benzer etkinliklerinde çeşitli sebeplerle kara listeye alınmış kişilerin de elenmesi gerekiyor. Seçim sürecinde yeterince hızlı olunamazsa gecikmeler yaşanabiliyor. Bu sene de gönüllü arkadaşlarımızın yoğunluğu sebebiyle sonuçları açıklamakta biraz geciktik.

Başvuranlar arasından elimizden geldiğince adil ve homojen bir seçim yaptıktan sonra kampa katılmaya hak kazananların bir listesi yayınlanıyor. Bu kişiler ile iletişime geçilerek kesin kayıtları yapılıyor ve bundan sonra yapmaları gerekenler açıklanıyor. Bunun yanı sıra bir yedek liste, bir de reddedilenler listesi oluyor. Tabii ki tüm bu kişilerle de iletişime geçilip durumdan haberdar ediliyor. Bu sırada üniversite ve KYK yurtları ile iletişim sürdürülerek kaç kadın kaç erkek katılımcı olduğu bilgisi veriliyor ki hem yaz okulu ya da staj sebebiyle yurtta kalmak isteyen öğrencilerin kontenjanlarını işgal etmeyelim, hem de Linux Yaz Kampı katılımcıları açıkta kalmasın. Bir yandan da eğitmenlerin geliş – gidiş tarihleri ve konaklama imkanları netleştiriliyor.

Eğitimlere kabul edilen kişilerden aynı sınıfta ders göreceklerin bilgi düzeylerinin birbirine yakın olmasına gayret ediliyor. Yoksa sınıftaki hiç kimse memnun kalmıyor, ders ya çok hızlı geliyor ya da çok sıkıcı. Bunun önüne geçmek için birkaç sene önce eğitimlere başlamadan bir seviye belirleme sınavı yapılmasına karar verilmişti. Bir yandan eğitmenler ve organizatörler bu sınavları hazırlamak için çalışıyorlar. Geçtiğimiz senelerde eğitimlerin başlamasına çok az bir süre kalmasına rağmen onaylanmış katılımcılardan kampın nerede yapılacağı, eğitim için ücret ödenip ödenmeyeceği, dersler başladıktan birkaç gün sonra kampa gelip gelemeyecekleri gibi, kamp web sitesinde üzerine basa basa belirttiğimiz soruları içeren e-postalar yağıyordu. Birçok kişiye garip ya da saçma gelmiş olabilir ancak bu sorunun üstesinden gelmek için kampa katılmak isteyenlere bu soruların yanıtlarını içeren ufak bir test yaptık. Açıkçası işe yaramış görünüyor. 2015 yılında kampın başlamasından hemen öncesine kadar alınan ve gönderilen e-posta sayısı 2500’ü geçmişti. Buraya kadar işlerin karışık olduğunu düşünüyorsanız gelin bir de bu noktadan sonra neler olduğuna bakalım.

Yaz kampının başlamasına 2 gün yani tam 48 saat kalmasına rağmen, çeşitli sebeplerle kampa katılamayacağını belirten katılımcılardan e-postalar yağıyor. Son anda çıkan acil işler, devam etmekte olan stajlar, kimi zaman da belirtilmeyen sebeplerle iptal e-postaları yağmaya devam ediyor. Elbette, insanlık hali, gerçekten ters giden ve önceden öngörülemeyen şeyler, seyahat engeli oluşturabilecek çeşitli sağlık sorunları olabilir. Ancak son anda yağmaya başlayan iptal e-postalarının hepsine bu gözle bakabilmemiz ve anlayışla kabul etmemiz mümkün değil. O yüzden kamp web sitesinin Sık Sorulan Sorular bölümünde belirttiğimiz gibi kampa kesin kayıt yapıldıktan sonra başvurusunu iptal edenler LKD ve INETD’nin kara listesine alınıyor. Kara listeye alınanlar gelecekte bu iki derneğin düzenlediği herhangi bir kontenjanlı etkinliğe kabul edilmiyor. Kişileri kara listeye alırken iptal e-postasını gönderen kişinin iyi niyetine ve samimiyetine güvenerek, önceden tahmin edilemeyen önemli sorunlar yaşadığını belirten katılımcıları hariç tutuyoruz. Bunu anlamak çoğu zaman birkaç kez karşılıklı yazışmayı gerektiriyor. Bu konuda da herkese eşit davranmaya özen gösteriyoruz. Elbette iptal eden katılımcıların yerlerinin doldurulması gerekiyor. Bu noktada yedek listeler devreye giriyor ancak kampın başlamasına 1-2 gün kala yedek listedeki insanlara haber vermek pek hoş olmadığı gibi, pek verimli de olmuyor. Yine son ana kadar katılımcılardan gelen çok çeşitli sorular ve örneğin konaklama şeklinin değiştirilmesi gibi çözülmesi gereken sorunlar oluyor. Tüm bunların sonucunda son ana kadar yurt listelerinin ve katılımcı sayılarının güncellenmesi gerekiyor. Bütün bu sürecin üzerine kayıt yaptırıp haber vermeden kampa gelmeyenler ya da kampa gelip sonra kaçanlar da oluyor. Eh biz de anaokulu öğretmeni değiliz tabii kocaman insanları kulağından tutup getirelim ya da köşede tek ayak üstünde durma cezası verelim. Elimizden geldiğince adil ve herkese faydalı olacak bir organizasyon yapmaya çalışıyoruz ama elimizde olmayan şeyler de oluyor. Örneğin bu sene yukarıdan gelen bir emirle kampın son haftası KYK kadın yurtlarını boşaltmak zorunda kaldık. Şehirle üniversitenin ulaşımı ise belediyedeki koşullar değiştiğinden istediğimiz gibi sağlanamadı.

Sonuç olarak, bu kampın organizasyonunda perde arkasında yaşananları olabildiğince kısa şekilde anlatmaya çalıştım. Yazıyı daha da uzatıp okunabilirliğini azaltmamak adına bahsedemediğim şeyler de var, onlar da başka bir yazıya kalsın. Elbette bizler de insan olduğumuzdan hatalarımız da oluyordur. Ancak yukarıda anlattığım bütün hazırlık sürecinin ve kamp sırasındaki eğitim sürecinin tamamının gönüllülük esasına dayandığını bir kez daha belirtmem gerekir. Bu süreçlere katkı veren herkes kendi profesyonel işlerinde çalışmaktadır. Organizasyonla ilgilenen ya da kampa eğitmen olarak katılan herkes bu kamp için zaman yaratmakta, işlerinden izin alarak (kimi zaman alabildikleri kadar ya da uzaktan çalışarak), herhangi bir ücret almadan, kampa katılmakta ve katkıda bulunmaktadırlar. Kampın eğitmenlerin yol-konaklama ücretleri, sınıflarda kullanılacak olan elektrik kabloları, projeksiyon cihazları, perdeler gibi giderleri ise LKD, INETD, Bolu Abant İzzet Baysal Üniversitesi ve bulabilirsek sponsorlar tarafından karşılanmaktadır.

Tüm bu süreç sosyal bir deney olsaydı herhalde pek çok insanın kendilerine ücretsiz olarak sunulan imkanları ciddiye almayışlarının güzel bir kanıtı olurdu. Oysa insanlar böyle bir etkinlik için para ödeselerdi son dakika iptalleri ya da şartları okumadan kayıt formunu dolduranlar yine bu kadar çok olur muydu? Ama bu kez de derneğin misyonuna ters olan bir etkinlik olurdu. LKD’nin tüm etkinlikleri herkese açık ve ücretsizdir. Çünkü özgür yazılım herkesçe erişilebilir olmalı, özgür yazılım ve Linux’u olabildiğince fazla kişiye anlatabilmeliyiz. Parası olanlara değil, gerçekten istekli olanlara ulaşabilmeliyiz. İşte yukarıdaki bu uzun yazı sadece bu amaç doğrultusunda verilmiş emeklerin çok kısa bir özetidir. Bu organizasyonda emeği geçen herkese teşekkürler, iyi ki varsınız.



24 August 2015

Bash Script İçerisindeki Arşiv Dosyasını Açmak


Geçen gün elime bash script bir dosyası gelmişti. Yaklaşık ilk 200 satırı klasik bash script dosyasıydı, ancak geri kalanında binary bir şekilde duran bir arşiv (tar.gz gibi) dosyası olduğunu gördüm. Binary şekilde bash script dosyasının içine gömülen bu arşivin açılması gerekliydi.

Şu komutlar ile binary kısımdaki arşiv açıldı:

match=$(grep --text --line-number '^ARCHIVE:$' DOSYA_YOLU | cut -d ':' -f 1)
archive=$((match + 1))
tail -n +$archive DOSYA_YOLU | tar -xzvf - -C .

Not: DOSYA_YOLU yazan yerleri değiştirmeyi unutmayınız.



27 February 2015

Gemalto – İstihbaratcılar İzin Almadan İstediklerini Dinleyebilecek


ABD istihbarat örgütü NSA ve ingiliz gizli istihbaratının (GCHQ) ortaklaşa yaptığı operasyonda, Dünyanın en büyük sim kart üreticisi Gemalto hacklendi. Gemalto senede 2 milyar sim kartı üreten ve dünya çapında […]

04 February 2015

Uyap Döküman Editörünün linux sistemlerde çalıştırılması. (UDF Editör)


Bilindiği üzere Adalet Bakanlığı ve Milli Eğitim Bakanlığı (ve belkide benim bilmediğim bazı diğer kurumlar) döküman editörü olarak "udf editör" adı altında bir yazılım kullanmakta. Bu editörle elektronik imzalama işlemlerini de gerçekleştirmekteler. Yazılım java da yazılmış olduğundan platform bağımsız çalışır hissi verse de, son kullanıcılar için hazırlanmış bir linux kurulum yönergesi veya paketi bulunmuyor.(En azından ben bulamadım).

Bir ubuntu kullanıcısı olarak sistemim de uyap döküman editörünü çalıştırmak için önce uyap.gov.tr den windows kurulum dosyasını indirip wine ile çalıştırdım. /home/username/.wine/drive_c/ altına uyap adında bi dizin oluşturup dosyaları buraya atmıştı. Baktığımda ise bir bat dosyası da bu java dosyalarını tetikliyordu. Bunun için ben de bi sh dosyası oluşturup bu jar dosyalarını çalıştırması için gerekli değişiklikleri yapmam yeterli oldu. Zaten deb dosyasının içini bir arşiv yöneticisi ile açarsanız yaptığım değişiklikleri görebilirsiniz.

Buraya kadar olan kısım kendi isteklerine göre dağıtımlarına uyap editörü kurmak isteyenler içindi. Bundan sonrası için ise; ubuntu kullanıcıları için hazırladığım deb dosyasını direk indirip kurabilirler. Bu deb i komut satırından indirdiğiniz dizinde sudo dpkg -i uyapeditor.deb komutu ile kurabilirsiniz. Dash da ise Uyap Editor yazdığınızda başlangıç simgesini göreceksiniz. Komut satırında ise uyap komutu ile açılıyor.


Ubuntu 14.04.1 LTS olan sistemimde denedim sorunsuz çalıştı. Olur da çalışmazsa haberleşelim :)

Deb Kurulum Dosyası


Not: Bu arada github dan baktığımda editörün paketi PisiLinux depolarında görünüyor. PisiLinux Geliştiricilerini de buradan selamlıyorum :) Harikasınız.

24 January 2015

Amazon Web Services


Amazon Web Services hakkında internette zilyon tane makale bulabilirsiniz. Ben ilk başlarda araştırırken çok fazla türkçe döküman görmedim. Gerçi türkçe döküman hiç aramadım, yoksa kesin birileri yazmıştır. Amazon Web Services, biz kısaca AWS diyelim. AWS benim için atıl kapasiteye giden...

The post Amazon Web Services appeared first on Bahri Meriç CANLI Kişisel Web Sitesi.



31 December 2014

Socks Vekil Sunucu (Proxy) ile Git Kullanımı


Öncelikle yazımdaki araya sıkışıp kalan İngilizce kısımlar için anlayış göstereceğinizi umarak başlamak istiyorum.  Bu yazımda, socks vekil sunucu kullanarak uzaktaki bir git sunucusuna (ssh protokolünü kullanarak) bağlanmak için izlediğim birkaç küçük adımı paylaşmak istiyorum.

Gelelim asıl konumuza. Vekil sunucu olarak “ssh-tunneling” [2] yardımıyla kendi yerel makinamı kullanmaktayım ve hedef git sunucu olarak github.com’u ele almak istiyorum. İnternette `git clone user@git.example.com:repo.git` şeklinde gördüğümüz ifadeler sadece ssh protokolünün kısa yazımıdır ve `ssh://user@git.example.com:repo.git` ifadesi ile aynı anlama gelmektedir [1].

Örnek olarak aldığımız github.com adresi için ~/.ssh/config dosyasına birkaç ekleme yapmamız gerekiyor. Kendi kullanıcı dizininizde bu dosya mevcut değilse oluşturup düzenlemeye devam edebilirsiniz. ~/.ssh/config dosyasına aşağıdakine benzer şekilde eklemelerinizi yapabilirsiniz.

Host github.com
    User                    git
    ProxyCommand            nc -x localhost:1080 %h %p

İlk olarak burada kullandığımız `nc` (netcat) aracı sisteminizde yoksa bunu kurmanız gerekmekte. Kendi sistemim Debian olduğundan dolayı aşağıdaki komutla bu paketi kuruyorum.

apt-get install netcat-openbsd

Daha sonra, Host ile belirttiğimiz alana git sunucumuzun adresini giriyoruz (github.com yerine kendi sunucumuz olabilir). User alanı ise git sunucusu üzerinde size açılan kullanıcı adı olacaktır. ProxyCommand bağlantı sırasında vekil sunucumuzu kullanmamızı yarayacak temel alanımızdır. `-x` parametresi ile vekil sunucu adresimizi ve port numarasını belirttikten sonra `%h` ile hedef adresimizi (git sunucumuzu) ve `%p` hedef portumuzu belirtmiş oluyoruz.

Ayrıca

Port 444

alanı ile öntanımlı 22 yerine başka bir port kullanmamız (444 gibi) mümkün. Parola yerine ortak anahtar kullanarak giriş yapmak istiyorsak aşağıdaki eklemeyi (github.key yerine tabi ki kendi ortak anahtar dosyamızı belirterek) yaparak bu sorunu da halletmemiz mümkün.

IdentityFile ~/.ssh/github.key

Tüm bu adımlardan sonra uzaktaki git sunucumuza vekil sunucumuz üzerinden bağlanmaya hazırız. Yazının başında belirttiğim gibi bu adımlar ssh ile yapılan bağantıları kapsamaktadır. HTTP(S) için [3] adresindeki bilgilere göz atmanızı öneririm. Yazımın işinize yaraması dileğiyle.

[1] http://git-scm.com/book/tr/v1/Uzak-Serverda-Git-Protokoller

[2] http://www.revsys.com/writings/quicktips/ssh-tunnel.html

[3] http://cms-sw.github.io/tutorial-proxy.html



18 November 2014

Haydi sifreleyelim girisimi (let's encrypt initiative)


EFF bugun internetin gelecegini degistirme potansiyeli olan let's encrypt adini verdikleri projeyi duyurdu. Mozilla, Cisco, Akamai gibi devlerin yani sira IdenTrust ve Michigan Universitesi arastirmacilarinin da katkilariyla olusturduklari yeni bir sertifika otoritesi olan let's encrypt, web'in http'den https'ye gecisi onunde kalan son engelleri de kaldirmayi amacliyor. Bu yazida https'nin http'ye gore artilarini siralamaktansa let's encrypt otoritesini, girisimin kurmayi planladigi sistemi ve su anda gelistirmekte olduklari ACME protokolunu anlatacagim.

Internet guvenligi arastirma grubu, ISRG, ismiyle yeni olusturulan ve kar amaci gutmeyen bir organizasyon tarafindan isletilecek let's encrypt sertifika otoritesinin hangi problemi cozmeye calistigini aciklayarak baslamak yerinde olacaktir diye dusunuyorum. SSL/TLS'in genis capta uygulanabilmesinin onundeki en buyuk engellerden en onemlileri kurulum karmasikligi, burokrasi ve sertifikalarin yuksek ucretleri olarak goruluyor. 2015 yazindan itibaren ucretsiz olarak sertifika dagitmaya baslayacak olan yeni otoritemiz su siralar tek bir komut calistirilarak, hazirda sunulmakta olan sitelerin alan adi dogrulamasini yaptiktan sonra https'ye gecirilmesi islemini yapacak bir istemci yazilimi ve bu yazilimin insa edilerken temel alindigi protokol uzerinde calisiyor. Let's encrypt bu surecte gozetecegi ana prensipleri ise soyle siraliyor;

Bedelsiz: Alan adi sahipleri kontrol ettikleri alanlar icin hicbir ucret odemeden sertifika sahibi olabilecekler

Otomatik: Sertifika alim sureci ve yenilenmesi ve sunucuda konfigure edilmesi gibi islemler tamamen otomatiklestirilerek minimum operator mudahalesi gerektirecek

Guvenli: Let's encrypt modern guvenlik tekniklerinin ve alandaki en iyi uygulamalarin implemente edilebilecegi bir platform olacak

Seffaf: Verilen ya da gecersiz kilinan tum sertifikalar incelemek isteyen herkese acik olacak

Acik: Gelistirilen protokol herkese acik bir standart olacak, gelistirilen yazilimlar ise elverdigince acik kaynak olarak sunulacak

Katilimci: Tek bir organizasyonun kontrolunde olmaktansa her acik standartta oldugu uzere topluluktan katilimcilarin fayda saglayacagi tumlesik bir girisim olmayi amaclayacak

Gelelim nasil calistigina. Altyapi ve istemci yazilimi tamamlandiginda kendi ifadeleriyle

sudo apt-get install lets-encrypt  
sudo lets-encrypt ornek.com  

komutlarini calistirmak tum ayarlari ve sertifika surecini halletmek icin yeterli olacak. Peki arkaplanda neler oluyor? Aslinda bunun icin istemci yazilimin ne yaptigina bakmadan once ACME protokolune bakmakta fayda var. Taslak halindeki RFC'ye gore genel hatlariyla protokol soyle.

Istemci yazilimi operatore hangi alan adlari icin sertifika istedigini soracak. Bu islemin ardindan sertifika otoritelerinin bir listesi gelecek. Eger secilen otorite ucretsiz sertifika saglayan bir otorite degilse odeme bilgisi bu asamada istenecek. Daha sonra yazilim operatore kisa bir sure icinde sertifikanin verilecegini bildirecek. Arkaplanda sunucu, sertifika otoritesi ile ACME kullanarak operatorun belirttigi alan adlari icin sertifika isteginde bulunacak. Sertifika otoritesinin verilen sertifikanin tipine gore belirledigi gereksinimler yerine getirildiginde verilen sertifika otomatik olarak indirilecek ve web sunucu sertifikayi kullanacak sekilde yapilandirilacak. Tercihen operatore e-posta, sms vb. gibi bir yontemle haber verilecek. Normal web hizmeti surecinde web sunucu sertifika otoritesi ile gerektigi taktirde konusarak OCSP (cevrimici sertifika durum protokolu) cevaplari, sertifika listeleri gibi bilgileri almaya devam ederek sorunsuz bir web sunma isinin yururlugunu saglamaya devam edecek.

Burada araya girip bir iki konuya acikliga kavusturayim. Yukarida web sunucu olarak bahsedilse de e-posta, xmpp vs. gibi sertifika kullanabileceginiz her hizmette ACME protokolunu ve bu protokol uzerinden calisan istemciyi kullanabileceksiniz. Su asamada organizasyon dogrulamasi(organization validation) ya da kapsamli dogrulama(extended validation) surecleri nasil isleyecek cok net olmasa da alan adi dogrulama icin(domain validation) bir sorun yok gibi gozukuyor. Protokole doneyim.

Standardimizda uc adet anahtar/anahtar cifti tanimi bulunuyor.

Ozne acik anahtari (subject public key): Sertifikaya konu olan alanlar icin dahil edilecek acik anahtar

Yetkilendirilmis anahtar cifti (authorized key pair): Sertifika otoritesinin herhangi bir kimligin yonettigi/yonetebilecegi sertifikalar icin iletisimde kullanacagi anahtar cifti. Bu cift birden fazla kimlik icin kullanilabiliyor.

Sifirlama anahtari (recovery token): Diger anahtarlarin ya da anahtar ciftlerinin kaybedilmesi durumunda sertifika otoritesine kimlik kanitlamak icin kullanilabilecek gizli anahtar

Butun iletisim https uzerinden json ile saglaniyor. Kimlikler ACME'de anahtar ciftleri ile ifade ediliyor. Bir alan adi icin istek yapilmadan once gecerli bir anahtar ciftinin ozel anahtarinin o alan adini kontrol eden tarafindan sahipliginin gosterilmesi gerekiyor. Bu kisim bildigimiz acik anahtarli sifrelemenin aynisi oldugundan uzerinde cok durmaya gerek yok. Alan adinin ya bir DNS kaydi ile ya da sunulan bir dosya ile bir ozel anahtar tarafindan kontrol edildigi kanitlaniyor. Sertifika otoritesi bu kanitlama basarili olursa basarili mesaji ve sifirlama anahtari donuyor istemciye.

Kimlik kanitlama isleminin ardindan istemci, belirtilen alan icin bir sertifika imzalama istegi olusturuyor(CSR) ve bu istegi ozel anahtari ile imzalayip sunucuya gonderiyor. Sunucu gelen istegin daha once dogruladigi anahtar ciftine ait olduguna emin olduktan sonra sertifikayi olusturuyor ve istemciye gonderiyor. Bu cevapta sertifika yenilemenin tekrar bir dogrulama gerektirmedigi durumlarda, istemci tarafindan yenileme icin kullanilabilecek adres de gonderilebiliyor. Sertifikanin iptali icin istemci basitce, ozel anahtariyla imzaladigi iptal istemini sunucuya gonderiyor ve sunucu bu istegi aldiginda sertifikayi iptal ediyor. Istemci ya da sunucu yazacaklar icin taslak standardin burada atladigim teknik detaylarina yukarida paylastigim protokol adresinden ulasmak mumkun.

Sistem 100 metre yukaridan bakildiginda aciklamaya calistigim sekilde isliyor. Ucretsiz sertifikalarin edinilebilmesine olanak taniyacagi ve TLS implementasyonu onundeki teknik engelleri kaldirma potansiyeli oldugu icin interneti degistirebilecek bir proje olarak goruyor ve heyecanlaniyorum. Umarim Postfix, Nginx, ejabberd gibi projeler de ACME'yi ve dolayisiyla let's encrypt sertifika otoritesini otomatik olarak kullanabilmek ve yapilandirabilmek icin gereken adimlari en kisa surede atarlar. Bu sayede gorece daha guvenli bir internet deneyimi icin gereken en temel adimlardan birini atmis oluruz.