Yazılım Nedir?

Skandalı bol ülkemizin nisan ayındaki skandallarından biri ortalığa saçılan kişisel verilerdi. 2009 yerel seçimlerinde oy kullanan vatandaşların verilerini içeren veritabanı ilk kez şubat ayında paylaşılmış, 4 Nisan’da da şifresiz olarak dolaşıma girmişti. Ulaştırma Denizcilik ve Haberleşme Bakanı Binali Yıldırım’ın belirttiği gibi verilerin çalınması yeni bir olay değildi. 2010 yılında kişisel verilerin bir DVD içinde satıldığına dair haberler yayımlanmıştı. Fakat internet kullanıcıları sosyal medyadan duyurulan bir web sitesinde, ad soyad bilgileriyle sorgulama yaptıklarında durumun vahametini daha net gördüler. Yapılan sorgulamalarda herhangi bir kişinin TC kimlik numarası, anne adı, baba adı, cinsiyet, doğum yılı, doğum yeri, nüfus kayıt yeri bilgilerinin yanı sıra adres bilgilerine de erişilebiliyordu. Bu bilgilerin dolandırıcılık ve sahtecilik amaçlı kullanılabilecek olması insanları ürküttü.

Verilerin kim tarafından, kimden ve nasıl sızdırıldığının yanında zamanlaması (neden 6 yıl sonra?) da sorgulandı. Ama kimse, “bu işin fıtratında var” demedi. Onu da ben ekleyeyim. Tüm seçmenlerin bilgilerinin ortalığa saçılmış olması büyük bir skandal. Ancak bunu, günümüz toplumunun gelişiminin doğal bir sonucu olarak görüyorum. Bu olay büyük bir patlamaydı. Öncesinde de kişisel verilerimizi teslim ettiğimiz yerlerden veri sızıntıları oluyordu. Üstelik kişisel verilerimizi yalnız kamu kurumlarına değil, özel kuruluşlara da sonrasını düşünmeden ve çoğu zaman gönüllü olarak sunuyorduk. Kişisel Verilerin Korunması Kanunu bile henüz yeni yasalaşmışken (http://www.resmigazete.gov.tr/eskiler/2016/04/20160407-8.pdf), bu tip skandalların yaşanması neredeyse kaçınılmaz. Bu kanunun ne kadar etkili olabileceğini ve ne ölçüde uygulanabileceğini zaman içinde göreceğiz. Şu an için bu skandalı geleceğe dair kritik bir uyarı olarak değerlendirmeli.

Her Türkiye Cumhuriyeti vatandaşının benzersiz (unique) TC kimlik numarası vardır. Herhangi iki kişinin aynı kimlik bilgilerine (ad, soyad, baba adı, anne adı, doğum tarihi vb.) sahip olmasının önünde hiçbir engel yoktur. Fakat aynı TC kimlik numarasına sahip iki kişi olamaz. Bunun yanında TC kimlik numaraları, farklı kurumların veritabanlarındaki kişi verilerini de birbirine bağlamaktadır. Örneğin, TC kimlik numarası ile kişinin tüm hastane kayıtları, adres bilgileri, elektrik abonelikleri, öğrenim bilgileri, banka işlemleri vs ilişkilendirilebilmektedir. Benzersizlik ve farklı veritabanlarını ilişkilendirme gereksinimi, toplumsal ilişkileri daha çok yazılımın içine gömmüştür.

Artık yazılımın farklı derecelerde gündelik hayatı koşullandırdığı, ekonomik ve toplumsal ilişkileri düzenlediği bir dünyada yaşıyoruz. Yazılım, yeni iş yapma biçimleri sunuyor, var olan pratikleri otomatikleştiriyor ve hızlandırıyor. Yazılım gündelik hayattaki ilişkilerde dört farklı düzeyde karşımıza çıkmaktadır. Birincisi, hızla yaygınlaşan kodlanmış nesneler. Nesneler kodlanarak daha akıllı hale gelmekte ve yeni işlevler kazanmaktadır. İkincisi, kodlanmış nesnelerin ağından oluşan kodlanmış altyapılardır. Bu altyapılar, kısmen ya da tamamen yazılımla izlenip düzenlenebilmektedir. Örneğin bilgisayar ağları, yayın ağları (televizyon, radyo, uydu), kamu hizmeti ağları (su, elektrik, gaz, kanalizasyon). Üçüncü düzey ise kodlanmış süreçlerdir. Kodlanmış süreçler, kodlanmış altyapılardaki işlemleri ve dijital veri akışını ifade etmektedir. Kodlanmış süreçlerde dijital veri akışı, oluşturulmuş belirli kurallar ve biçimler doğrultusunda gerçekleşir. Banka kartınızı (kodlanmış nesne) bankamatiğe yerleştirip şifreyi girdikten sonra şifreniz doğrulanır ve bankanın kodlanmış altyapısına erişirsiniz. Bu erişimden sonra da belirli kurallar çerçevesinde belirli işlemler yaparsınız. Dördüncü düzey, kodlanmış birliktelikler, kodlanmış altyapıların entegrasyonu veya yakınsamasıyla oluşur. Farklı altyapılar bir araya geldiğinde parçaların toplamının ötesinde bir bütün meydana getirirler; bu yeni bütünlük onunla etkileşim halinde olan kullanıcıları da değiştirir. Örneğin, finans kuruluşları birbirleri ile bağlandığında arka planda sistemler birbirleriyle konuşur, veri transferi gerçekleşir. Artık bir bankaya, kredi başvurusunda bulunan herhangi bir müşteri yoktur. Banka, kendisine başvuran müşterinin finansal geçmişini bilir ve krediye uygunluk kararını buna göre verir. Ülkemizde kişi verilerini tutan kodlanmış birlikteliklerde TC kimlik numaralarının rolü kritiktir; parçalar çoğunlukla TC kimlik numaralarıyla bağlanmaktadır. Dolayısıyla son kriz sonrası gündeme gelen TC kimlik numaralarının değiştirilmesi önerisinin maliyeti de yüksek olacaktır.

Gündelik hayattaki etkinlikler, yazılım ile dolayımlanmakta, güçlenmekte, kolaylaşmakta ve düzenlenmektedir. Bu yeni dünya, makinelerce okunan ve yazılan bir dünyadır; enformasyon insan müdahalesi olmaksızın rutin bir biçimde toplanmakta, işlenmekte ve üzerinde çalışılmaktadır. Buna karşın yazılım hakkındaki bilgimiz son derece sınırlıdır. Yazılım denilince ilk akla gelen, bilgisayarın donanım ve yazılım olarak ikiye ayrıldığı, yazılımın da,

“Bir bilgisayarda donanıma hayat veren ve bilgi işlemde kullanılan programlar, yordamlar, programlama dilleri ve belgelemelerin tümü” (Türk Dil Kurumu)

olduğudur.

Yazılım terimini ilk kullanan John W. Tukey olmuştur. Tuckey, 1958 yılında American Mathematical Monthly dergisinde yayımlanan makalesinde, elektronik hesap makinelerinde bulunan matematiksel ve mantıksal komutların giderek daha önemli hale geldiğini yazmaktadır. Makalede, kablolar, transistörler, teypler vs donanım olarak nitelendirilirken yordamlar ve derleyiciler yazılım olarak nitelendirilmektedir. 1968 yılında IBM’in donanım ve yazılım bölümlerini ikiye ayırması, yazılım sektörünün önünü açar.

Yazılım, bilgisayar donanımını, donanımın içerdiği elektrik devreleri komuta eder. Kullanıcının kodu görmemesine karşın kodun etkileri son derece görünür ve somuttur. Yazılımın bir canlı olmadığı açıktır. Ama Thrift ve French (2002) yazılımın suni olarak da değerlendirilemeyeceğini iddia eder. Yazılım, ikisinin arasında bir yerdedir. Yazılım, veri toplamakta, enformasyonu işlemekte, durumları değerlendirmekte, kararlar verebilmekte ve en önemlisi de bunları insan müdahalesi olmadan özerk olarak yapabilmektedir. Mackenzie’ye (2006) göre yazılım kendini çalıştırdığı zaman ikincil bir eylemliliğe sahiptir. Çalışması her zaman görünür ya da açık seçik değildir; kimi zaman oldukça karmaşık çıktılar üretmesine karşın ancak hatalı işlem yaptığında ya da çalışmadığında varlığından haberdar olunmaktadır.

Çoğu insan yazılımı, kendisiyle bir şeyler yaptıkları bir araç olarak görmektedir. Yazılım mühendisliği, bu aracın nasıl daha iyi geliştirilebileceği üzerine çalışırken sosyal bilimciler de bu aracın topluma etkilerini tartışmaktadır. Her ikisinin de yararı vardır. Ama toplumsal etkilerine bakarak yazılımın ne olduğunu anlamamız olanaklı değildir. İşte bu olanaksızlıktan yola çıkan Yazılım Çalışmaları disiplini, yazılımın kendisine odaklanmaktadır.

Yazılım Çalışmaları

Kitchin ve Dodge (2011), yazılım çalışmaları ile bilişim teknolojilerinin topluma etkileri üzerine yapılan çalışmalar arasındaki farklılığı açıklarken bunu hastalıkların epidemiolojisine çalışmakla hastalıkların dünyadaki etkisine çalışmak arasındaki farka benzetir. Hastalıkların dünyadaki etkisini araştırırken çok şey öğrenilebilir. Ama hastalığın etiolojisini (nedeni, kökeni, evrimi) bilmeden hastalığın topluma etkisi hakkındaki bilgilerimiz de eksik olacaktır.

Yazılım çalışmalarına ilk kez Lev Manovich’in The Language of New Media adlı kitabında değinilmiştir. Manovich (2001), yeni medyanın mantığının anlaşılabilmesi için yüzümüzü bilgisayar bilimine dönmemiz gerektiğini savunur. Manovich’e (2001) göre medya çalışmalarından yazılım çalışmalarına, medya teorisinden yazılım teorisine kayılması gerekmektedir. Yazılımın nasıl yazılıp geliştirildiği; yazılımın çalışması sonucu dünyada nasıl öznellikler, pratikler, etkileşimler, ve hareketlilikler yaratıldığı; yazılım endüstrisinin doğası; kodun farklı alanlardaki (iş, sağlık, eğitim, eğlence) sosyal, ekonomik, kültürel ve politik etkileri yazılım çalışmaları kapsamında araştırılması gereken konulardır. Bu bağlamda, yazılımın günümüz kültürünün oluşumuna etkisi kadar yazılımın geliştirilmesinde etkili olan kültürel, toplumsal ve ekonomik güçler de tartışılmalıdır.

Manovich (2001), yeni medyayı da bu doğrultuda tanımlar. Yeni medyaya atfedilen etkileşim ve programlanabilirliği, yeni toplumsal etkinlikleri, bireylerin duygu ve düşüncelerini paylaşabilme olanağının artmasını yeni medyayı var eden yazılımın beş temel özelliğiyle ilişkilendirir: Sayısal temsil, modülerlik, otomasyon, değişkenlik, kod çevrimi.

Sayısal temsil, yeni medya verisinin matematiksel olarak tanımlanabilirliğini ve verinin algoritmik olarak müdahaleye açık olduğunu belirtmektedir. Modülerlik, yeni medyanın çeşitli elemanlardan (piksel, poligon, katman, ses kanalı) oluşmasıdır. Böylece herhangi bir görüntüyü yeniden çekmeden görüntünün pikselleriyle oynamak mümkün olabilmektedir. Otomasyon, yukarıdaki iki özelliğin sağladığı olanaklarla, içerik üzerindeki işlemlerin otomatikleştirilebilmesidir. Örneğin, görüntülerin otomatik olarak düzenlenmesi, renk karşıtlıklarının (contrast) ayarlanması, gürültünün ayıklanması yazılımlarla otomatik olarak yapılabilmektedir. Değişkenlik ise aynı medyadan neredeyse sonsuz sayıda farklı medya üretilebilmesidir. Değişen gereksinimlere göre, ana medyaya zarar vermeden farklı medyalar türetilebilmektedir. Sonuncu özellik, kod çevrimi (transcoding), en kritik olanıdır. Kod çevrimi teknik anlamda, bilgisayardaki bir dosyayı bir biçimden diğerine dönüştürmeyi anlatır. Manovich (2001) ise kod çevrimiyle bir medyadaki anlam ve işlevin, başka medyalara aktarıldığını anlatmak istemektedir. Bilgisayarlardaki mantık ve iş yapma şekilleri farklı medyalara taşınmakta, oradaki iş yapma biçimlerini değiştirmekte, yeni bir kültür oluşturmaktadır.

Manovich’in (2001) kitabının dışında yazılım çalışmaları alanındaki başlıca çalışmalar şunlardır:

  • Behind the Blip (Fuller, 2003)
  • Protocol (Galloway, 2004)
  • Media Ecologies (Fuller, 2005)
  • Cutting Code (Mackenzie, 2006)
  • Software Studies: A Lexicon (Fuller, 2008)
  • Software Takes Command (Manovich, 2008)
  • My mother was a computer (Hayles, 2010)
  • Code/space: Software and everyday life (Kitchin ve Dodge, 2011)

Bu yazıda, Kitchin ve Dodge’un (2011) Kod/mekan (Code/space) kitabını, sonraki yazılarda da yazılım çalışmaları disiplininin diğer kitaplarını tanıtmak istiyorum.

Kod/mekan

Kitchin ve Dodge’un (2011) temel tezi, yazılımın mekanı ürettiği, toplumsal süreçleri ve ekonomik ilişkileri şekillendirdiğidir. Mekanın üretimi her geçen gün koda daha bağımlı hale gelmekte ve kod mekanın yeniden üretimi için tekrar yazılmaktadır. Bu bağlamda, kod/mekanlar ve kodlanmış mekanlar arasında bir ayrım yapmaktadırlar. Kodlanmış mekanlarda kod, yine mekanın oluşumuna etkide bulunmasına rağmen mekanın bir parçası değildir. Kod ve mekan karşılıklı olarak birbirlerini oluşturmazlar. Örneğin, bir dersin LibreOffice Impress ya da Microsoft PowerPoint ile anlatılmasının hem öğretmen hem de öğrenciler üzerinde (olumlu ya da olumsuz) etkisi olur. Sunum yapılan bilgisayarın arızalanması dersin daha verimli anlatılmasını engelleyebilir, öğretmen bazı konuları aktarmakta zorlanabilir. Ama bu dersin yapılmasını engellemez; sınıfın sınıflığı devam eder. Kod/mekanın varlığı ise koda bağımlıdır. Kodun çalışmaması durumunda mekan niteliğini kaybedecektir. Kitchin ve Dodge (2011), süpermarket ve havaalanı örneğini verir. Süpermarketteki yazılımlar çalışmazsa kasiyerin bir bakkal gibi çalışması, markette satılanların fiyatlarını bilmesi, meyveleri tartması o kadar kolay olmayacaktır. Çalışanlar bu duruma göre eğitilmemiştir. Havaalanındaki yazılımların arızalanması durumunda ise havaalanı işlevini yerine getirmekte zorlanacak ve bir kaos oluşacaktır. Bir diğer deyişle, kodlanmış mekanlarda yazılım kolaylaştırma, izleme ve iyileştirme aracıyken kod/mekanlarda kontrol ve düzenleme aracıdır.

Kitchin ve Dodge’un (2011) kod/mekanları tartışırken yaptığı yazılım sınıflandırması açıklayıcı ve öğreticidir. Önce, yazılım içermeyen nesneleri, yazılım dünyasına dahil edebilmek için bu nesnelerin nasıl benzersiz ve makinece okunur (machine readable) hale getirildiklerini ele alırlar. 1970’lerin sonlarından itibaren tüketim malları barkodlanmaktadır. Barkod bilgisi lazer ile taranmakta ve ürün eşleştirilmektedir. Kitchin ve Dodge (2011), barkodlu nesnelerin okunma sırasında pasif olduğunu belirtir. RFID (Radio Frequency ID ) etiketi taşıyan ürünlerde ise bilgi aktif olarak, radyo sinyalleri ile iletilir, etiketin lazer ile taranmasına gerek yoktur. RFID’nin yakın zamanda barkod teknolojisinin yerini alması beklenmektedir. Nesneler, kendileri herhangi bir yazılım içermeksizin dışsal olarak etiketlenerek ağa dahil olmaktadır. Ama günümüzde asıl belirleyiciliği olan yazılım nesneleridir.

Yazılım nesneleri iki gruba ayrılmaktadır: Çevresel olarak kodlanmış nesneler ve kodneler (codejects).

Çevresel kodlanmış nesneler de yazılım içerir. Yazılım nesneyi daha işlevsel hale getirir. Fakat içerdikleri yazılımın çalışmaması onların kullanımına engel değildir. Yalnızca daha verimli ve üretken kullanımları sınırlanmış olur. Örneğin bir fırındaki dijital saatin bozulması, fırının pişirme aracı olarak kullanımını engellemez.

Kodneler ise işlevleri doğrudan içerdikleri yazılıma bağlı olan nesnelerdir. Adından da anlaşılabileceği gibi kodun ve nesnenin bütünlüğünü gösterir. Kodneler, programlanabilirlik, etkileşim, hatırlama, önceki kullanımlara göre sonrakini tahmin etme ve ilişkisellik kapasitelerine göre üçe ayrılır: Sabit kodneler (hard codejects) , üniter kodneler (unitary codejects), logne (logjects).

Sabit kodneler, USB belleklerde olduğu gibi, bellenim (firmware) adı verilen, işlevselliği önceden belirlenmiş ve sabit bir yazılım içerirler.

Üniter kodneler belirli bir düzeyde programlanabilme ve etkileşim olanağına sahiptir. Üniter olarak adlandırılmalarının nedeni işlevsellikleri için gerekli olan her şeyi kendi yapılarında barındırmalarıdır. Üniter kodneler de ikiye ayrılır. Kapalı kodneler ve algısal kodneler. Kapalı kodneler, çevrelerinden bağımsız çalışırlar. DVD oynatıcılar ve dijital saatler bu tipte nesnelerdir. Arayüzleri son derece sınırlı bir etkileşime ve programlamaya (saat ayarlama, DVD içinden seçim yapma gibi) olanak vermektedir. Algısal kodneler ise dış dünyadaki değişimlere karşı duyarlıdırlar. Klima sistemindeki dijital termostatlar ya da ışık düzeyini ayarlayabilen dijital kameralarda olduğu gibi çevresel faktörler dikkate alınmaktadır.

Logneler, durum ve kullanım bilgilerini kaydetmeleriyle üniter kodnelerden ayrılmaktadır. Bir logne aşağıdaki özelliklere sahiptir:

  • Benzersiz olarak dizinlenebilir.
  • Çevresinden haberdardır ve işlevi bağlamındaki çevresel değişimlere yanıt verir.
  • Belirli bir düzeyde programlanabilir (ayarları değiştirilebilir.)
  • Belirli bir zaman ve mekandaki kullanımları ağdaki diğer bilgisayarlara iletebilir.

Ağa bağlı kodneler, makineden makineye, makineden insana, insandan makineye haberleşebilmektedir. Bir kargo aracı konumunu belirli aralıklarla izleme istasyonuna iletir (makineden makineye), trafik enformasyon sistemi sürücüyü rotasındaki kazalar hakkında uyarabilir (makineden insana), arabanın kapısı uzaktan kumanda (insandan makineye) ile açılabilir.

Bu sınıflandırmanın yanında Kitchin ve Dodge (2011), Greenfield’in (2010) ortaya attığı everyware terimini değerlendirir. Everyware ile bilgisayarların klasik kullanım alanlarının genişletilerek gündelik hayatın temel bileşenleri haline gelmeleri anlatılmaktadır. Everyware ile,

  • Yazılımın işlevselliği mekana ve nesnelere gömülmektedir
  • Algılayıcılar belirli tip etkinlikleri algılayıp kaydetmektedirler
  • Etiketler, aktörleri tanımlamaktadır
  • İnsanlar sistemlere tepki vermemekte, onlarla etkileşim halinde olmaktadır.
  • Yazılım durumları modellemektedir

Günümüzde everyware beş biçimde karşımıza çıkmaktadır: her tarafa yayılan berim (pervasive computing), duyarlı berim (sentient computing), somut berim (tangible computing), aynı zamanda her yerde olan berim (ubiquous computing), giyilebilir berim (wearable computing).

Her tarafa yayılan berim, gündelik hayatı ve etkinlikleri, gündelik hayattaki nesnelere çeşitli algılayıcılar ve kısmen karar verebilen teknolojiler ekleyerek değiştirip dönüştürmektedir. Artık yalnızca fare ve klavye ile kullanılan bilgisayarlar yoktur. Duyarlı berimde ise bilgisayar kişiyi algılar ve buna göre hareket eder. Örneğin kişiyi algılayınca kilitli kapıyı açar, adres defterini gösterir, ağ kullanımlarını kişiselleştirir. Somut berim, insan ve bilgisayar arasındaki etkileşimi daha doğal hale getirmeye çalışmaktadır. Bir bilgisayarı fare ve klavye ile kontrol etmek her zaman olanaklı olmayabilir. Bunun yerine ses ve jest tanıma teknolojileri kullanılabilmektedir. Aynı zamanda her yerde olan berim, her tarafa yayılan berime benzemesine karşın burada algılayıcı olan çevreden değil kişiyle beraber hareket eden berimsel (computational) güçten söz edilmektedir. Dolayısıyla, her tarafa yayılan berimde her şey berimsel güçle donatılmak istenirken aynı zamanda her yerde olan berimde bu gücün her yere taşınması hedeflenmektedir. Giyilebilir berimde ise yazılım belirli kodnelerden giysilere ve aksesuarlara kaymaktadır. Ülkeler, everyware’in farklı türlerine yoğunlaşmaktadırlar. Kitchin ve Dodge (2011), Japonya’da eğilimin aynı zamanda her yerde olan berim, Kuzey Amerika’da ise her tarafa yayılan berim yönünde olduğunu belirtmektedir.

Kitchin ve Dodge’in (2011) yazılım çalışmalarına en büyük katkısı çoğu zaman ihmal edilen mekanın önemine yaptıkları vurgudur. Yazılım, içinde bulunduğu toplumun, mekanın ve zamanın bir parçasıdır. Onlarla etkileşim içinde etkin olur ve gelişir. Yazılım hem bir ürün hem de bir süreçtir; özyineli (recursive) bir süreç. Yazılımı geliştirenler, kodlarla mekanın temsilini yaratmakta; bu temsili mekan, gerçek dünyadaki ilişkileri düzenlemeye girişmekte; bu girişimin sonucunda da mekanın yazılımla yeni temsili geliştirilmektedir. Dolayısıyla her yazılım eksiktir. Tamamlandığı anda değişen mekan, değişen toplumsal ilişkiler yeni gereksinimler yaratır.

Kitchin ve Dodge (2011) kod/alan tanımlamasının teknolojik determinizm olmadığını savunmaktadır. Kod ve alan arasında tek yönlü bir belirlemenin olmadığını, kodun ve mekanın karşılıklı olarak birbirlerini oluşturduklarını vurgularlar. Ayrıca kod/mekanın doğasının ve dönüşümünün olumsal bir süreç olduğunu belirtirler. Yere, zamana ve bağlama (kültürel, politik, ekonomik ilişkilere ve durumlara) göre farklılaşabilmektedir.

Bunun yanında, Kitchin ve Dodge’un (2011) yazılımın hegemonyası hakkında yazdıkları da son derece ilgi çekicidir. Yazılım gündelik hayatın her alanına yayılmakta ve yoğunlaşmakta ama çok az sorgulanmaktadır. Neden? Sorgusuz sualsiz kabullenmenin başlıca nedeni insanların, güvenlik ve refah, terörizmle savaş, sağlık, refah vb için bu sistemlerin gerekli olduğu konusunda ikna edilmiş olmalarıdır. Daha öncekilerin kimin için ne ifade ettiğini sorgulamadan n. sanayi devrimlerini selamlamaktadırlar. İkincisi, yazılımların evrimsel gelişimlerinin de etkisiyle yeniliklerin hep öncekinin bir devamı olarak görülmesidir. Örneğin, yakın zamanda kullanıcı adı ve şifrelerin yerini biyometrik temelli güvenlik sistemleri alacak ve bu da doğal bir durum olarak kabullenilecektir. Üçüncüsü, yeni sistemlerin kaçınılmaz olarak gösterilmesi ve doğallaştırılmasıdır. Dördüncüsü, çoğu yazılımın doğrudan insanlara hissettirilmeden ve onları hayatına doğrudan bir zorluk katmadan çalışmasıdır. Arka planda büyük veri üzerinde düzenleyici ve ayrıştırıcı algoritmalar çalışır; ama bunun gündelik hayata hemen fark edilebilir olumsuz etkisi olmamaktadır. En önemlisi de insanların ayrımcılığa uğrayacakları ya da kötü muameleye maruz kalacakları endişesiyle itiraz etmekten kaçınmalarıdır.

***

Kişisel verilerimizin çalınmasına kızmak, sorumluları kınamak ve olabilecekler konusunda endişelenmek hakkımızdır. TC kimlik numarası bilgileri ile yapılabilecek sahtecilikler korkutucu. Ancak TC kimlik numaralarının yaşadığımız mekanların kritik bir yazılımsal bileşeni olduğunu ve yalnız dolandırıcıların değil “yasal” olarak birçok yerde saklanıp rızamız olmadan paylaşıldığını da unutmamak gerekiyor. Büyük olasılıkla bu skandalın ardından hükümet kimlik bilgilerinin paylaşımı konusunda kısıtlamalar getirecek ve bilişim profesyonelleri veri güvenliği konusunu teknolojik çözümler kapsamında tartışacaklar. Ama yazılım deryasında, “derya içre olup deryayı bilmeyen balık” gibiyiz. Yeni teknolojik çözümlerle yazılım deryasına daha çok gömüleceğiz…

Kaynaklar

Fuller, M. (2003). Behind the blip: Essays on the culture of software. New York: Autonomedia.

Fuller, M. (2005). Media ecologies: Materialist energies in art and technoculture. MIT Press.

Galloway, A. R. (2004). Protocol: How control exists after decentralization. MIT press.

Hayles, N. K. (2010). My mother was a computer: Digital subjects and literary texts. University of Chicago Press.

Greenfield, A. (2010). Everyware: The dawning age of ubiquitous computing. New Riders.

Kitchin, R., Dodge, M. (2011). Code/space: Software and everyday life. Mit Press.

Mackenzie, A. (2006). Cutting code: Software and sociality. New York: Peter Lang.

Manovich, L. (2001). The language of new media. MIT press.

Manovich , L. (2008). Software takes command. http://black2.fri.uni-lj.si/humbug/files/doktorat-vaupotic/zotero/storage/D22GEWS3/manovich_softbook_11_20_2008.pdf, son erişim 20 Nisan 2016.

Thrift, N., S. French. (2002). The automatic production of space. Transactions of the Institute of British Geographers 27 (3): 309–335.

Java happens before rules for Concurrency

The rules for happens-before are:

Program order rule. Each action in a thread happens-before every action in that thread that comes later in the program order.
Monitor lock rule. An unlock on a monitor lock happens-before every subsequent lock on that same monitor lock.
Volatile variable rule. A write to a volatile field happens-before every subsequent read of that same field.
Thread start rule. A call to Thread.start on a thread happens-before every action in the started thread.
Thread termination rule. Any action in a thread happens-before any other thread detects that thread has terminated, either by successfully return from Thread.join or by Thread.isAlive returning false.
Interruption rule. A thread calling interrupt on another thread happens-before the interrupted thread detects the interrupt (either by having InterruptedException thrown, or invoking isInterrupted or interrupted).
Finalizer rule. The end of a constructor for an object happens-before the start of the finalizer for that object.

HDFS hflush vs hsync

hflush:  This API flushes all outstanding data (i.e. the current unfinished packet) from the client into the OS buffers on all DataNode replicas.

hsync: This API flushes the data to the DataNodes, like hflush(), but should also force the data to underlying physical storage via fsync (or equivalent). Note that only the current block is flushed to the disk device.

[1] https://github.com/apache/hadoop/blob/trunk/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java

How to really persist your file in Java

Use FileChannel.force(boolean) or FileDescriptor.sync() to force data to be persistent on disk. Either of them can work. FileChannel.force use FileDispacther.force[1] and it calls fdatasync or fsync in Java 8. 

When you use OutputStream.flush, it does not guarantee the data to be written to disk, just flush it to OS. Better to use FileOutputStream.getChannel().force(true) or FileOutputStream.getFD().sync() to guarantee the persistency, performance might not be good.

Special Thanks to Yongkun. He wrote very good blog post. [2]

[1] http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c#l141

[2] http://yongkunphd.blogspot.com/2013/12/how-fsync-works-in-java.html

Bloom Filters

Good tutorial for Bloom Filter understanding: http://billmill.org/bloomfilter-tutorial/

Bloom filters use case is following:

You have very large data sets that typically don’t fit in memory and you want to check your element it contains or not contains. Obviously It works very well for not contains detection.

if the bloom filter gives a hit: the item is probably inside
if the bloom filter gives a miss: the item is certainly not inside

How can I use in Java. Guava Provide a library for Bloom Filter:

https://github.com/google/guava/blob/master/guava/src/com/google/common/hash/BloomFilter.java

m denotes the number of bits in the Bloom filter (bitSize) 

n denotes the number of elements inserted into the Bloom filter (maxKeys)

k represents the number of hash functions used (nbHash) 

e represents the desired false

positive rate for the bloom (err) If we fix the error rate (e) and know the number of entries, then the optimal bloom size 

m = -(nln(err) / (ln(2)^2) ~= nln(err) / ln(0.6185)

The probability of false positives is minimized when k = m/n ln(2).

Why does Java’s hashCode() in String use 31 as a multiplier?

The value 31 was chosen because it is an odd prime. If it were even and the multiplication overflowed, information would be lost, as multiplication by 2 is equivalent to shifting. The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance: 31 * i == (i << 5) - i. Modern VMs do this sort of optimization automatically.

(from Chapter 3, Item 9: Always override hashcode when you override equals, page 48, Joshua Bloch’s Effective Java)