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

9 Ağustos 2016

Posted In: fdatasync, FileChannel, fsync, java, OutputStream

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).

6 Ağustos 2016

Posted In: bloomfilter, data structures, probabilistic data structure

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)

27 Temmuz 2016

Posted In: effectivejava, hashcode, java, string

How to build Hadoop Native Library with Snappy Compression Support

Snappy is a compression library that can be utilized by the native code.
It is currently an optional component, meaning that Hadoop can be built with
or without this dependency.

Download and compile snappy codecs. or you can install from your distro repo. I installed libsnappy and libsnappy-dev packages from Ubuntu repo. If everything is fine you can use -Drequire.snappy to fail the build if libsnappy.so is not found. If this option is not specified and the snappy library is missing,silently build a version of libhadoop.so that cannot make use of snappy. After than You just need to enter below command:

mvn clean package -Pdist,native -DskipTests -Dtar -Drequire.snappy

If you build snappy and It is located different place you can use this parameters

  • -Dsnappy.prefix to specify a nonstandard location for the libsnappy header files and library files. You do not need this option if you have installed snappy using a package manager.
  • -Dsnappy.lib to specify a nonstandard location for the libsnappy library files. Similarly to snappy.prefix, you do not need this option if you have installed snappy using a package manager.
  • -Dbundle.snappy to copy the contents of the snappy.lib directory into the final tar file. This option requires that -Dsnappy.lib is also given, and it ignores the -Dsnappy.prefix option.

After compiling finished you can find your native libraries 

<source_folder>/hadoop-dist/target/hadoop-2.5.2/lib/native/

Good luck

13 Temmuz 2016

Posted In: hadoop, hadoop-native, snappy

Java 8 Optional ve null dönebilen metotlar

Merhabalar, bu yazıda sizlere Java 8 ile beraber gelen Optional sınıfından bahsedeceğim. Bu yazı ile birlikte Java programlama dili ve teknolojileri konusunda ufak bilgiler paylaşmaya devam edeceğim. Umarım faydalı olur.

Optional sınıfının kullanımına bir örnek vererek anlatacağım. Doğrudan anlatabilecek kadar basit bir sınıf olmasına rağmen örnek üzerinden gitmenin daha kalıcı olduğunu düşünüyorum. Örneğimizde bir UserRepository sınıfı tasarlayacağız. Interface’imiz şu şekilde:

UserRepository interface’inde getByUsername() metodunun tanımlandığını görüyoruz. Adından da anlaşılacağı üzere kullanıcı adı ile veritabanında kayıtlı bir kullanıcıyı bulmak istiyoruz. Basitçe aşağıdaki implementasyonu yapabiliriz.

Herhangi bir persistent api kullanarak kullanıcı listesini aldık. Eğer liste boş dönerse girdiğimiz kullanıcı adına sahip bir kullanıcı olmadığı anlamına geldiğinden null object döndük. Eğer kullanıcı varsa listenin ilk elemanını dönüyoruz. Kullandığınız api’nin ne olduğunun bir önemi yok. Bundan farklı bir implementasyonda olabilirdi. Burda dikkat etmemiz gereken eğer veritabanında kullanıcı yoksa ne döneceğimiz. Bu tasarımda null dönmüş olduk.

Başlangıçta tasarım kusursuz görünse de null dönmenin dezavantajları var. Bu sınıfı kullanan istemciye bir sorumluluk yükledik. İstemci kullanıcıyı sorguladıktan sonra ayrıca bir de nulldönüp dönmediğini kontrol etmek zorunda. Aksi takdirde NullPointerException’a sebep olur. Ayrıca bu aslında bir implementasyon detayı. İstemci açısından interface’e baktığınızda aslında null bir değer bekleyemeyiz. Basitçe bir metot var ve kullanıcı adı verip kullanıcı nesnesi alıyoruz. Yani interface de null obje gelebileceğine dair herhangi bir tanımlama yok. Javadoc veya yorum satırı mı geldi aklınıza? Burdaki javadoc veya yorum satırı kötü koda sebep olur. Ayrıca kod açısından yine istemciyi bağlayan birşey yok. Bir diğer sorun ise null dönülmesi bir implementasyon detayı. İmplementasyon yüzünden defensif programlama yapmak zorunda kalıyoruz.

Burdaki durumda aslında kullanıcı nesnesinin null gelebileceğini tahmin edebiliriz. Mantıken baktığınızda kullanıcı veritabanında yoksa ne olur diye düşündüğünüzde null dönebileceğini anlayabilirsiniz. Fakat her durumda bu kadar basit bir durumda olmayabilir. Daha karmaşık bir implementasyonda istemci olarak bunu görmek daha zordur. null dönmek yerine exception kullanarak bir tasarım yapabiliriz:

interface’i de şu şekilde değiştiriyoruz:

Bu implementasyon yukarıda bahsettiğim sorunu çözüyor. Burada basit bir şekilde kullanıcı yoksa UserNotFoundException’u fırlattık. Ayrıca checked exception olduğundan istemci bu metodu çağırırken exception’u handle etmek zorunda veya bir üst katmana bırakabilir. Sonuç olarak implementasyona bakmadan interface bize exception fırlatabileceğini tanımlar.

Bu tasarımın da yine dezavantajları var. İstemci taraf ya bir try-catch bloğu yazmak zorunda. Yani exception mekanizmasını bir istisna durumu için değil normal akışın bir parçası olarak kullandık. Burada örneğin veritabanı bağlantısı kesilirse exception atabilirdik veya istemci geçersiz bir kullanıcı adı gönderdiğinde IllegalArgumentException gibi bir exception fırlatabilirdik. Fakat burdaki durum ne istemciye bağlı bir input hatası ne de beklenmeyen bir durum. O yüzden bu tarz yapılarda Exception kullanmamalıyız.

Çözüm olarak yine ilk tasarımımıza dönüp User entity’si dönmek yerine bir Result objesi dönebiliriz.

User entity’sini doğrudan dönmek yerine araya başka bir sınıf yerleştirerek ilk durumdaki sorunu çözmüş oluyoruz. Artık kullanıcının veritabanında olmayacağını daha net bir şekilde ifade ettik. Bu tür Result sınıflarını immutable tanımlarsak daha iyi bir tasarım yapmış oluruz. Constructor’lara isim veremediğimiz için burada static metod kullanmayı tercih ettim. UserResult sınıfı’da aşağıdaki gibi.

İstemci taraf doesUserExist() metodu ile kontrol edip gereken işlemi yapabilir. Bu şekilde tasarımımız daha stabil oldu. Àyrıca bunun büyük bir proje olacağını düşünürsek UserResult sınıfını daha generic olarak tasarlayabiliriz.

UserRepositoryImpl sınıfımızı da düzenleyelim.

EntityResult gibi result objeleri farklı implementasyonlar da içerebilir. Burda nulldönme problemini için kullandık. Özellikle katmanlar arası iletişim bu şekilde yapılmalıdır.

Java7 ile geliştirme yapsaydık eğer muhtemelen bu şekilde geliştirme yapacağız. Fakat Java 8 de bunun için java.util paketinin içerisinde Optional diye bir sınıf eklendi. Kendi EntityResult gibi sınıflar yazmak yerine null dönebilen metodlar için return type’ı Optional olarak tanımlayabiliriz.

Optional yine tasarladığımız EntityResult gibi generic ve immutable bir sınıf. Yine Optional.empty() aynı şekilde boş bir result dönüyor. null dönebilen yerlerde bunu kullanmalıyız. Optional.of() metodunu da kullanırken dikkatli olmak gerekiyor. Eğer parametre olarak verdiğiniz objenin değeri null ise NullPointerException alırsınız. Eğer bir nesne null olabilirse `Optional.ofNullable metodunu kullanın. Diğer metodlarına da kısaca değinirsem:

  • isPresent() : eğer empty ise false diğer durumda true döner. İlk tasarımımızdaki null kontrolü yerine kullanılabilir.
  • get() : Empty olmayan durumlarda Optional içerisinde tanımlanan nesneyi döner. Mutlaka get den önce isPresent() ile kontrol edilmesi gerekiyor. Aksi takdirde değer empty ise NoSuchElementException alırsınız.
  • orElse(T value) : Eğer varsayılan bir değeriniz varsa kullanabilirsiniz. empty ise verdiğiniz değeri, değilse tanımlanan değeri döner. Örneğin null almak istiyorsanız orElse(null) şeklinde nesneyi alabilirsiniz.

Bunun gibi birçok metodu var. Aynı zamanda fonksiyonel özellikler de taşıyor. Java 8 ile beraber gelmesi bir raslantı değil :) Başlangıçta metodları kullanırken mutlaka javadoc ile inceleyin. get() metodunda olduğu gibi exception alabilirsiniz. Ayrıca eğer Java 8 de Stream Api ile tanıştıysanız muhtemelen Optional sınıfını kullanmışsınızdır. Stream Api’de oldukça fazla kullanılır. Primitive tipler için de OptionalInt, OptionalDouble gibi sınıfları da kullanabilirsiniz.

Bu yazımda örnek bir tasarım ile Optional sınıfını anlatmaya çalıştım. Umarım faydalı olmuştur.

Bir sonraki yazıda görüşmek üzere…

3 Haziran 2016

Çok yakında! Açık donanım için ilk onaylama

Bu yıl Ekim ayı Open Source Hardware Association (OSHWA, Açık Kaynak Donanım Birliği) ile Açık Kaynak Donanım Ayı olacak!

Açık kaynak donanım tasarımı halka açık olan donanımdır, herkes tasarım veya tasarımı temel alan donanım üzerinde çalışabilir, değiştirebilir, dağıtabilir, inşa edebilir ve satabilir. Donanımın kaynağı onu meydana getiren tasarımıdır ve değişiklik yapmak için tercih edilen biçimde mevcuttur.

Açık Kaynak Donanım Ayı açık kaynak donanım tanımına açıklık getirme, harekete katkıda bulunması için daha fazla insanın davet edilmesi ve bir tasarının ya da ürünün açık kaynak donanım olarak nasıl yayınlanacağı hakkında eğitim sağlamak amacıyla üç büyük etkinliğe ev sahipliği yapacak. Bu etkinlikler Açık Kaynak Zirvesini, bir açık kaynak donanım onaylamasını ve bir dizi belgeleme günlerini içeriyor.

Yıllık Açık Kaynak Zirvesi 7 Ekim 2016 tarihinde Portland, Oregon'da gerçekleşecek. Takvimlerinizi işaretleyin! Zirve biletleri satışta, konuşmacı ve destekçiler arıyoruz. Belgeleme günleri tüm kişi ve kurumlara açık ve bu tasarıyı belgelemek için harika bir zaman. Bizi Twitter veya Facebook‘tan takip edebilirsiniz.

Yeni! Açık kaynak donanım onaylaması

Zirvede, OSHWA açık kaynak onayının ilk sürümünü çıkaracak. Bu onay açık kaynak donanım topluluğunun en az iki bölümüne yarar sağlayacak şekilde tasarlandı.

İlki, pazarda ürünün gerçekten açık kaynak olduğunu anlamayı kolaylaştırarak alıcıya fayda sağlacak. Tasarılar ve ürünler onay alarak ve onay simgesini göstererek açıklık tanımı üzerine kabul görmüş genel kanıyı müşterilere ve kullanıcılara iletmiş olacak. Onay belgesi açıklık için bir koşul olmasa da onay almak tasarının açık kaynak donanım olduğunu diğerlerine anlatmanın bir yolu olacak.

İkincisi, açık kaynak donanımın yaratıcılarına fayda sağlayacak. Yaratıcılara belirli yönergeler vererek, açık kaynak donanım yaratıcılarının güvenle kendi tasarılarının ve ürünlerinin açık kaynak donanım olduğunu açıklamasını sağlayacak. Ayrıca onay yaratıcıların onay sürecinde tanımlanan belirli ölçütlere uygunluğu işaret ederek bu açıklamalarını savunmayı sağlayacak.

Kullanıcılar da onay simgesini kullanma amacı ile uygunluğu kendileri onaylayacak. Öz-onaylama yaratıcılara OSHWA açık kaynak donanım onay simgesini kullanma hakkını verecek. Öz-onaylama sürecinin bir parçası olarak, yaratıcılar uygunsuzluk için cezalara boyun eğecek. OSHWA bu cezaları zorla uygulama için sorumlu olacak.

Open Source Hardware Association bir 501©3 kar amacı gütmeyen kuruluştur, kendini açık kaynak donanım topluluğunun sesi olmaya, uygulayımsal bilginin herkese açık olduğunu sigortalamaya ve eğitime, çevresel sürdürülebilirliğe ve insan refahına hizmet eden uygulayımbilimin işbirlikçi biçimde geliştirilmesini özendirmeye adamıştır. Bugün OSHWA'nın bir üyesi olun!

Lisans: Bu metin CC BY-SA 4.0 lisansı altında dağıtılan “Coming soon! First ever certification for open hardware” metninden çevrilmiştir. Özgün metin Alicia Gibb tarafından yazılmıştır. Çeviri metni CC BY-SA 4.0 altında lisanslanmıştır.

25 Mayıs 2016

Posted In: açık donanım, açık kaynak donanım, linuxgezegeni, open source hardware, open source hardware association, oshwa, özgür donanım

Çok yakında! Açık donanım için ilk onaylama

Bu yıl Ekim ayı Open Source Hardware Association (OSHWA, Açık Kaynak Donanım Birliği) ile Açık Kaynak Donanım Ayı olacak! Açık kaynak donanım tasarımı halka açık olan donanımdır, herkes tasarım veya tasarımı temel alan donanım üzerinde çalışabilir, değiştirebilir, dağıtabilir, inşa edebilir ve satabilir. Donanımın kaynağı onu meydana getiren tasarımıdır ve değişiklik yapmak için tercih edilen biçimde … Okumaya devam et "Çok yakında! Açık donanım için ilk onaylama"

25 Mayıs 2016

Posted In: açık donanım, açık kaynak donanım, linuxgezegeni, open source hardware, open source hardware association, oshwa, özgür donanım

Okullarda Kodlama Dersi – 2

Geçen yazıda çocuklara yönelik kodlama eğitimini tartışmış ve Bilim, Sanayi ve Teknoloji Bakanlığı’nın kodlama dersinin ortaokul ve lise müfredatına alınması için yapacağı çalışmaları desteklediğimi belirtmiştim. Desteğimi de üç maddeyle açıklamıştım: Berimsel (computational) okuryazarlığın (literacy) yaygınlaşıyor olması, günümüzde toplumsal düzenlemelerin giderek artan biçimde kodla yapılması (“Kod kanundur”) ve programcılığın eğlenceli olması. Bu yazıda da aynı konuya devam etmek istiyorum. Ama önce kodlama ile programlama arasındaki farka açıklık getirmek gerekiyor. Kodlama, analiz, tasarım, test gibi yazılım geliştirmenin aşamalarından biridir. Programlama ise daha geniş anlamda kullanılmaktadır. Kodlamanın yanında diğer aşamaları da içerebilmektedir. Kodlama eğitimi ile ilgili yazılarda (bu yazıda da) aslında çoğu zaman programlamadan söz edilmektedir. Bakanlığın hedefleri ve planladığı kodlama eğitiminin kapsamı hakkında bilgim yok fakat başta İngiltere olmak üzere birçok ülkedeki müfredat değişikliğinde hedeflenen öğrencilerin belirli bir programlama diline özgü komutları alt alta sıralamayı öğrenmesi değildir. Eğer Türkiye’deki eğitim müfredatı bir ya da birkaç programlama dilinin öğretimi ile sınırlandırılırsa sonuç pek parlak olmayacaktır. Yurt dışındaki örneklerde öğrencilere belirli bir aracın (örneğin programlama dilini) kullanımının öğretilmesi değil, berimsel okuryazarlık (DiSessa, 2001) ya da berimsel düşünme (Wing, 2006) denilen yetinin kazandırılması hedeflenmektedir.

DiSessa (2001), kod eğitimi furyası başlamadan önce Hal Abelson ile beraber Boxer Programlama Ortamı’nı geliştirmiş ve öğrencilerin Boxer ile etkileşimini izlemiştir. DiSessa (2001), berimsel okuryazarlığın yeni bir bilme ve ifade biçimi sağlayacağını düşünmektedir. Wing (2006) ise berimsel düşünmenin basitçe programlama öğrenmenin ötesinde bir anlam taşıdığını ve çoklu soyutlama düzeyinde düşünmeyi gerektirdiğini belirtmektedir. Berimsel düşünme sürecinde problem ve çözümü, makine ya da insan tarafından gerçekleştirilebilecek biçimde ifade edilmektedir. Dolayısıyla herhangi bir teknolojiden bağımsızdır. Wing’e göre (2006) berimsel düşünce,

  • Programlama değil, kavramsallaştırmadır.
  • Modern toplumda edinilmesi gereken bir yetenektir.
  • İnsanların bilgisayar gibi düşünmesi değildir.
  • Matematik ve mühendislik düşüncesini tamamlar ve birleştirir.
  • Aletlerle değil, fikirlerle ilgilidir.
  • Her yerde, herkes içindir.

Ancak şimdiye kadar yazdıklarım berimsel okuryazarlığın yalnızca görünen yüzüdür ve apolitiktir. DiSessa on beş yıl önce yayımlanan kitabında berimsel okuryazarlığı bir eğitimci gözüyle incelemektedir; öngörüleri son derece değerlidir. Kitabında, hem teknoloji uzmanlarını hem de eğitim bilimcileri ikna etmeye çalışmaktadır. Şimdi ise farklı aktörler sahnededir. Örneğin İngiltere’deki müfredat değişikliği yalnızca eğitimcilerin düşünüp taşınarak önerdiği ya da bir bakanın emriyle gerçekleşen bir reform değildir. Müfredat değişikliği, farklı aktörlerin çabasıyla gelişen olumsal bir süreçtir. Çocuklara bilgisayar programlamanın öğretilmesi ilk kez 2010’da eğitimcilerden, bilgisayar bilimcilerinden ve bilgisayarla ilgi kitle örgütlerinden oluşan dar bir toplulukta tartışılmaya başlamıştır. Daha sonra farklı kesimlerin (sivil toplum örgütleri, özel sektör ve kamu kuruluşları) katılımıyla küçük kampanyalardan köklü eğitim reformuna doğru bir süreç gelişmiştir. Bu sürecin gelişiminde özellikle iki örgüt, Nesta (National Endowment for Science, Technology and the Arts) ve Nominet Trust hükümet, sivil toplum ve özel sektör arasında bir ağ oluşturarak ve farklı kesimlerin kodlama eğitimi hakkındaki farklı görüşlerini uzlaştırarak belirleyici bir rol üstlenmiştir.

NESTA 1998 yılında İşçi Partisi Hükümeti tarafından bir vakıf olarak kurulmuştur. NESTA’nın temel amacı İngiltere’nin inovasyon kapasitesini artırmaktır. 2010 yılında hükümet, NESTA’nın yararlı işler yapıyor olmasına karşın kamu kuruluşu olarak faaliyet göstermesine gerek olmadığını ve etkinliklerinin gönüllü bir kuruluşa daha uygun olduğunu belirten bir değerlendirme yapar. Bunun sonucunda 2012 yılında NESTA bağımsız bir kuruluş olur ve adı Nesta olarak değiştirilir. Nesta çeşitli yardım kuruluşlarıyla, özel sektörle ve hükümetle ortak çalışmalar yapmaktadır. Nesta’nın farklı çalışma alanları vardır: kamu hizmetlerine vatandaş katılımı, hükümet inovasyonu, sağlık ve yaşlanma, dijital sanat ve medya, dijital eğitim, sosyal etki fonları vb. Nominet Trust ise İngiltere’de .uk uzantılı alan adlarının kaydını yapan Nominet şirketi tarafından 2008 yılında kurulmuştur. Nominet Trust da Nesta gibi toplumsal sorunlara yönelik teknolojik çözümler geliştirmeyi hedeflemektedir. Williamson (2015), bu iki kuruluşun ne resmi ne de ticari aktörler olduğunu, ama iki kesim arasındaki ilişkiyi sağladıklarını belirtmektedir. Kodlamayı öğrenme kampanyalarının oluşumu buna güzel bir örnektir.

Okullarda bilgisayar kullanma eğitiminin yerini bilgisayar bilimine bırakması gerektiği önerisi ilk kez 2010 yılında Computing at School (bilgisayar öğretmenlerine yönelik, Microsoft, Google ve British Computing Society tarafından maddi olarak desteklenen bir dernek) tarafından gündeme getirilmiştir. Konunun politik olarak önem kazanması ise ancak Nesta’nın 2011’de yayımlanan Next Gen (http://www.nesta.org.uk/sites/default/files/next_gen_wv.pdf) adlı raporundan sonra gerçekleşmiştir. Next Gen de okul müfredatının yenilenmesini talep etmektedir. Ama bu talep doğrudan eğitimle ilgili değildir. Rapor, Muhafazakar Parti Hükümeti’nin Kültür, İletişim ve Yaratıcı Endüstriler Bakanı Ed Vaizey’in talebi doğrultusunda Ian Livingstone ve Alex Hope tarafından hazırlanmıştır. Raporun yazarları, İngiltere’nin ekonomik olarak değerli ve yenilikçi sektörleri olan video oyunu ve görsel efekt endüstrilerinin önemli isimlerindendir. Raporda ilgili sektörlerdeki yetenek açığı tartışılmakta ve bunu kapatmak için bir müfredat değişikliği önerilmektedir. Google’ın CEO’su Eric Schmidt 2011 yılında Edinburgh Televizyon Festivali’nde yaptığı konuşmada konuyu tekrar gündeme getirene dek raporun fazla bir etkisi olmaz. Raporun yazarlarından Livingstone’un da belirttiği gibi Schmidt’in konuşması rapordaki müfredat değişikliğine siyasi desteği artırmıştır. Bundan kısa bir zaman sonra Royal Society yönetiminde ve Microsoft, Google ve üniversitelerin bilgisayar bilimi bölümlerinin katkılarıyla hazırlanan Shutdown or Restart (https://royalsociety.org/~/media/education/computing-in-schools/2012-01-12-computing-in-schools.pdf) başlıklı raporda da müfredat değişikliği önerisi tekrarlanır. Bu raporun ardından The Observer gazetesi yazarlarından John Naughton da konuyu destekler yazılar yazmaya başlar. Daha sonra oluşturulan, Nesta, BCS, Google, Microsoft, Computing at School ve Raspberry Pi’den oluşan “Next Gen Skills” adlı koalisyon Eğitim Bakanlığı’nı müfredat değişikliği konusunda ikna etmeyi başarır (age).

Bu gelişmeler (raporlar, konuşmalar ve oluşturulan koalisyonlar) üst düzeyde gerçekleşmektedir. Kodlama eğitiminin kamudaki görünürlüğü ise Code Club (https://www.codeclub.org.uk/) adlı gönüllü girişimle artar. Code Club, programcıların ilkokul öğrencilerine programlamanın temellerini öğrettikleri okul sonrası bir etkinlik olarak ortaya çıkmıştır. 2012 yılında kurulan Code Club, kısa sürede tüm ülkeye yayılır. Şu anda İngiltere’de 4000’den fazla Code Club ve bundan faydalanan 50000’den fazla öğrenci vardır. Code Club, Nesta ve Nominet Trust tarafından örgütlenmekte ve Digital Makers fonundan faydalanmaktadır. Code Club, Microsoft, Google, ARM, Samsung, Mozilla ve TalkTalk gibi şirketlerin yanı sıra hükümet tarafından da desteklenmektedir.

Code Club, Next Gen raporu sonrasında ortaya çıkan, bir orkestra gibi hareket eden ve gençleri kodlama öğrenmeye teşvik eden ağlardan sadece biridir. 2013 yılının Mayıs ayında Nesta kamu inovasyonu laboratuvarında, Nominet Trust ve Mozilla ortaklığında Make Things Do Stuff adlı kampanya başlatılır. Kampanyanın hedefi çocukların dijital teknolojileri yaparak, etkileşimle öğrenmelerini sağlamaktır. Yine ülke çapında bir örgütlenme söz konusudur. Kampanya büyük şirketler (Facebook, Microsoft, O2, Mozilla ve Virgin Media), gönüllü girişimler (Codecademy, Code Club, Raspberry Pi, Technology Will Save Us, Coding for Kids and Decoded vb) ve hükümet kuruluşları tarafından desteklenmektedir.

Kısacası, reformu baştan sona planlayan bir hükümet değil, ikna edilen bir hükümet vardır. Hükümet okul dışındaki bu uygulamaları yeni müfredatla okullarda daha sistematik hale getirmektedir. Bilgisayar uzmanları, girişimciler, yatırımcılar, gazeteciler, lobi grupları, politikacılar ve uluslararası şirketler Nesta ve Nominet Trust etrafında bir araya gelmiş, bu aktörlerin katkısı ve etkileşimiyle bir eğitim müfredatı oluşmuştur. Fakat karşımızda hiç de tarafsız olmayan bir eğitim müfredatı vardır. Oluşumunda payı olan aktörlerin değerlerini ve çıkarlarını içermektedir.

Kamusal Sorunları Çözmek İçin Kodlamayı Öğrenmek

Yazı,

Bilgiyi, konuşmanın yaptığından farklı biçimde düzenler ve depolar; sonuç olarak, dilin farklı bir biçimidir (Crowley ve Heyer, s. 99).

Yazı sonrası, hatırlama gereksiniminin azalması insan zihninin edinebildiği bilginin de artmasını sağlamış ve yazıyla bilenin bilgiden ayrılması “soyutlamayı, sistemleştirmeyi ve bilimsel düşüncenin nesnelliğini teşvik etmiştir” (age, s. 100).

Berimsel okuryazarlık, bunu daha ileriye taşıma iddiasındadır. Wing (2006) berimsel düşüncenin insanın soyutlama gücünü artırmasının yanında ona düşüncesini otomatikleştirme olanağını verdiğini iddia etmektedir. Bir kelimeyi sözlükten ararken ya da markette hangi kasada kuyruğa girmek gerektiğini düşünürken farkında olmadan berimsel düşünceye başvurulmaktadır. Berimsel okuryazarlık, bunu daha sistematik hale getirecektir. Olumlu ya da olumsuz olarak nitelendiremem ama berimsel okuryazarlıkla dünya farklı biçimde okunabilecektir.

Kodlama (yazma) program komutlarının alt alta sıralandığı mekanik bir iş değildir. Dünyanın nasıl çalıştığını berimsel olarak okuyup anlamayı ve insanın onunla etkileşimini biçimlendirebilmek için modellemeyi içerir. Dünya hesaplanabilir bir olgu olarak algılanır ve kodla algılanan bu dünya yeniden yaratılır. Programcılar işlerinin doğası gereği var olan ilişkileri ve iş süreçlerini modelleyip sayısallaştırırken bunları yeniden düzenler ve kurarlar; aksayan bir yer varsa ona yönelik çözümler geliştirirler. Bunu da gayet olağan ve işlerinin bir parçası olarak görürler.

Fakat bu pratiklerden beslenen, özellikle Silikon Vadisi’nin öncülüğünü yaptığı (http://www.nytimes.com/2013/03/03/opinion/sunday/the-perils-of-perfection.html) iki büyük tehlike vardır. Birincisi, toplumsal sorunları kültürel, ekonomik ve politik bağlamlarından kopartarak berimsel terimlerle çözümleme eğilimidir. İkincisi de bunun sonucu olarak doğru kod ve algoritmalarla karmaşık toplumsal problemlerin çözülebileceği inancıdır. İngiltere’de bu inanç neoliberal politikalarla eklemlenmekte ve devletin görev ve sorumluluklarını gönüllü kişi ve kuruluşlara devretmenin aracı haline gelmektedir. Örneğin, Nominet Trust ve Nesta toplumsal sorunlara yönelik teknolojik çözümler geliştirme gibi bir hedefleri olduğunu açıkça beyan etmektedir. Hatta Nesta tarafından hazırlanan ve kamu hizmetlerinin geleceğinin tartışıldığı People Helping People adlı raporun giriş bölümünde İngiltere’nin refah devleti deneyimi öncesinde kamu hizmetlerinin gönüllülerce yerine getirildiği ve bunun köklü bir gelenek olduğu yazılmaktadır (http://www.nesta.org.uk/sites/default/files/people_helping_people_the_future_of_public_services_wv.pdf). Nesta’nın kodlama öğrenimine bakışı da bu yöndedir. Programcılar hackathon (https://tr.wikipedia.org/wiki/Hackathon) etkinlikleriyle bir araya getirilmekte ve kamudaki sorunlara dijital çözümler bulmaları istenmektedir (https://nationalhackthegovernment.wordpress.com/). Öğrenciler berimsel yeteneklerle donatılırken de beklenti bu yeteneklerini kamu hizmetlerinin iyileştirilmesi ve toplumsal sorunların çözümü için kullanabilmeleridir. Ne kadar başarılı olabileceğini ve ne gibi sonuçlar doğurabileceğini bilemem, ama kodlama öğrenimi İngiltere’de neoliberal politikalar için bir kaldıraç görevi üstlenmektedir.

Geleceğin Mesleği: Programcılık?

Williamson (2015), kodlama öğrenimi hakkında yazılmış bir çok makale ve raporda, kodlama öğrenecek çocuklar geleceğin iş gücü olarak görüldüğünün altını çizmektedir (bkz. http://www.nesta.org.uk/publications/next-gen, https://royalsociety.org/topics-policy/projects/computing-in-schools/report/, http://www.ednfoundation.org/wp-content/uploads/TechnologyEducation_systemview.pdf, http://www.ukdigitalskills.com/). Bu çalışmalarda kodlama, ileriye yönelik, talep edilen ve nitelikli meslek olarak ele alınmakta ve çocukların piyasanın gereksinimlerine yanıt verebilecek yeteneklerle donatılması istenmektedir. Williamson (2015), bu söylemin dijital dünyadaki kırılganlığı, karmaşıklığı ve birçok kodlama işinin sıradanlığını gizlediğini vurgulamaktadır. Dışarıdan bir motivasyon olmadan programcılıkla uğraşıldığında programlama eğlencelidir; bulmaca çözmek ya da satranç oynamak gibidir. Ama söz konusu profesyonel olarak programcılık olunca iş hayatı rutin ve sıkıcı işlerle, fazla mesailerle doludur. Bunun yanında, öğrencilerin edinmesi istenen yetenekler (teknolojik yeniliklere kısa sürede uyum sağlayabilme ve esneklik gibi) piyasanın çalışanlardan beklentisidir.

Eğitim reformuna ya da kampanyalara destek veren bir çok programcı ve aktivistin geleceğin iş gücünü yetiştirmek gibi bir hedefi yoktur. Çoğu benimkilere benzer gerekçelerle kampanyaları desteklemekte ve gönüllü katkıda bulunmaktadır. Bir diğer deyişle, farklı hedefleri olanların desteklediği bir oluşum vardır. Fakat kimi zaman değerler ve çıkarlar çatışabilmektedir. Code Club’ın kurucularından Linda Sandvik’in başına gelenler buna iyi örnektir. Sandvik, Code Club’ın sponsorlarından Google’ın kitlesel gözetim pratiklerini eleştirdiğinde Code Club yönetim kurulu Sandvik’e ültimatom vermiştir: Ya sponsorlar hakkında olumsuz şeyler söyleme ya da Code Club yönetiminden ayrıl. Sandvik, ikincisini tercih etmiştir (https://gist.github.com/drtortoise/5dc254c614d6b6a19116).

Ayrıca programcılığın bir meslek olarak gelecekte daha önemli olacağı ve çocukların küçük yaştan itibaren bunun için gerekli yetenekleri edineceği iddiası ne kadar gerçekçidir? Programlama dillerinin insan diline yaklaşması ve kolaylaşması programcılığı gereksizleştirmemiş, aksine yaygınlaştırmıştır. Yakın zamanda da programcılığın tamamen ortadan kalkacağını düşünmüyorum. Fakat bilgisayar bilimindeki gelişmeler programcılık bilgisi isteyen bazı işleri otomatikleştirebilir ve sektördeki programcı açığı beklenenden çok daha az olabilir. “Bilgisayarların algılayıcı verisi ya da veritabanları gibi veri türlerine dayalı öğrenimini olanaklı kılan algoritmaların tasarım ve geliştirme süreçlerini konu edinen bir bilim dalı” olan makine öğrenimi (machine learning) ile programcılık da dahil olmak üzere birçok mesleğin otomasyonu söz konusudur. Kodlama eğitimi kampanyaları çoğu zaman bu olasılığı göz ardı etmektedir (Frey ve Osborne, 2013).

Şirketler İçin Yeni İş Alanları

Makine öğrenimindeki gelişmeler ve gelecekte piyasanın ihtiyaç duyacağı iş gücünün niteliği ve niceliği hakkında sponsor şirketlerin elinde çok daha kapsamlı veriler vardır. Geleceğe dair daha ayrıntılı öngörüler yapabilirler. Bu verilerin ve buna dayalı öngörülerinin ne olduğu hakkında bilgi sahibi olmasak da kodlama eğitiminin şirketler için şu an yeni bir pazar yarattığı ortadadır. ABD’deki Hour of Code kampanyasının kurucuları arasında Silikon Vadisi’nin melek yatırımcılarından Partovi twins de vardır ve kampanya üç büyük şirket (Google, Microsoft ve Facebook) tarafından desteklenmektedir. Bu kampanyanın İngiltere’deki kuzeni Year of Code da uluslararası bir girişim sermayesi firması olan Index Ventures tarafından desteklenmektedir. Index Ventures, insan hayatının ve ekonominin her yönünün teknoloji ve girişimci ruhu ile dönüştürülebileceğini savunmaktadır. Daha ilginci Year of Code’un arkasındaki 23 kişi incelendiğinde bunlardan sadece üçünün gerçekte teknolojiyle ilgili, diğerlerinin sermayedar ya da halkla ilişkiler yüzü olmasıdır (https://tommorris.org/posts/8776). Year of Code’un arkasındaki en önemli isimlerden biri kısa bir süre öncesine kadar Index Ventures ekibinde yer alan girişimcilerden biri olan Saul Klein’dır. Ne tesadüftür ki Klein’ın kuzeni Alex, çocuklara kendi bilgisayarlarını yapmalarına ve kodlama öğrenmelerine yardımcı olan takımlar (kit) üreten Kano (http://us.kano.me/) şirketinin kurucularındandır.

John Naughton’a (http://www.theguardian.com/technology/2014/feb/15/year-of-code-needs-reboot-teachers) göre girişim sermayesinin yoğun ilgisinin iki açıklaması olabilir. Birincisi, safça olan, girişimciler Year Of Code’a hayırsever duygularla yaklaşmaktadır. Fakat başarısız halka ilişkiler nedeniyle kampanya fiyaskoyla sonuçlanmıştır. Kampanyanın sözcüsü Lottie Dexter’ın kodlama bilmediğini itiraf etmesi kampanyanın inandırıcılığını sarsmıştır (http://www.theregister.co.uk/2014/02/11/coding_in_schools_madness/). İkincisi, şirketler müfredat değişikliğinin ve Raspberry Pi Vakfı tarafından okullarda bilgisayar bilimini öğretmek amacıyla geliştirilmiş, kredi kartı büyüklüğünde tek kartlı bir bilgisayar olan Raspberry Pi’nin başarısını fark etmişlerdir ve kendilerine yeni ticari fırsatlar yaratmak istemektedirler. Hayırseverlik inandırıcı olmasa da bir beceriksizlik vardır. Ama daha önemlisi müfredat değişikliğinin arkasında büyük bir pazar fırsatı vardır.

***

Giroux’un (1998) Gramsci’den alıntıladığı sözler berimsel okuryazarlık için de geçerlidir:

Gramsci’ye göre okuma-yazma iki yanı da keskin bir kılıçtı; bireysel ve toplumsal güçlenme amacıyla kullanılabileceği gibi, baskı ve egemenlik ilişkilerinin sürdürülmesi için de kullanılabilirdi. Gramsci, bir mücadele alanı olarak eleştirel okuma-yazma için, hem ideolojik bir yapı, hem de toplumsal bir hareket olarak, uğruna savaşım verilmesi gerektiğine inanıyordu (s. 34).

Bu mücadeleye de berimsel okuryazarlığın politik bağlamını dikkate alarak başlamak gerekiyor. Kodlama eğitimiyle liberal politikaları güçlendirmek, sömürüyü artırmak ve geleceğin işçilerini yetiştirmek istenmektedir. Uluslararası tekellerin, girişim sermayesi şirketlerinin ve liberallerin ilgisi boşuna değildir. Ama internetteki geçmiş mücadeleler bunun karşıtının da yaratılabileceğini, sistemde çatlaklar oluşturulabileceğini göstermektedir.

Kaynaklar

Crowley, D., Heyer, P. (2011). İletişim Tarihi, teknoloji-Kültür-toplum, çev. Berkay Ersöz, Siyasal Kitabevi, Ankara.

DiSessa, A. A. (2001). Changing minds: Computers, learning, and literacy. Mit Press.

Fischer, G. (2005). Computational literacy and fluency: being independent of high-tech scribes. Strukturieren-Modellieren-Kommunizieren. Leitbild mathematischer und informatischer Aktivitäten, Franzbecker, Hildesheim, 217-230.

Frey, C. B., Osborne, M. A. (2013). The future of employment: how susceptible are jobs to computerisation. http://www.oxfordmartin.ox.ac.uk/downloads/academic/The_Future_of_Employment.pdf, son erişim 21/03/2016.

Giroux, H. A. (1998). Okuma-yazma ve siyasal güçlenme eğitbilimi. içinde (der.) Paulo Freire ve Donaldo Macedo, Okuryazarlık: Sözcükleri ve Dünyayı Okuma, çev. Serap Ayhan, Ankara, İmge Yayınevi, 33-71.

Williamson, B. (2015). Political computational thinking: policy networks, digital governance and ‘learning to code’. Critical Policy Studies, 1-20.

Wing, J. M. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35.

24 Mayıs 2016

Posted In: berimsel okuryazarlık, Bilgisayar Bilimi, Emek, google, kodlama, neo-liberalizm, Özgür yazılım

Paylaşımın geleceği: Pydio ve ownCloud bütünleşiyor

Açık kaynak dosya paylaşma çevre-dizgesi1 büyük bir tasarı çeşitliliği barındırıyor, her biri kendi çözümünü tedarik ediyor ve her biri farklı bir yaklaşıma sahip. Dropbox, Google Drive, iCloud ya da OneDrive gibi ticari çözümler yerine açık kaynak bir çözümü seçmenin birçok sebebi var. Bu çözümler verinizi yönetirken endişe etmemenizi sağlıyor ama bazı sınırlamalarla; denetim yetersizliği, varolan altyapıyla bütünleştirme sorunları gibi.

Kullanıcılar için ownCloud ve Pydio gibi birçok dosya paylaşma ve eşzamanlama seçenekleri mevcut.

Pydio

Pydio (Put your data in orbit, Verini yörüngeye oturt) tasarısı büyük ses dosyalarını çalgı takımıyla paylaşmak isteyen müzisyen Charles du Jeu tarafından kuruldu. Pydio çoklu depolama arka uçlarıyla birlikte bir dosya paylaşma ve eşzamanlama çözümüdür, geliştiriciler ve düzen2 yöneticileriyle birlikte tasarlanmıştır. Dünya çapında bir milyondan fazla indirilmiştir ve 27 dile çevrilmiştir.

İlk andan beri açık kaynak olan tasarı doğal olarak SourceForge‘de büyüdü ve şimdi yeni evi GitHub'da.

Kullanıcı arayüzü Google'nin “Materyal Tasarımı"nı taban alıyor. Kullanıcılar varolan eski dosya altyapısı kullanabilir ya da Pydio'yu bir mülk üstü3 yaklaşımla kurabilir. Web, masaüstü ve taşınabilir uygulamaları kullanarak varlıklarını her yerde yönetebilirler. Yöneticiler için ince taneli erişim izinleri varlıklara erişimi yapılandıran güçlü bir araçtır.

Pydio topluluk sayfasında sizi çabucak hızlandıracak çeşitli kaynaklar bulacaksınız. Pydio web sitesi GitHub'daki Pydio depolarına nasıl katkıda bulunacağınızı açıklıyor. Forum geliştiriciler ve topluluk için bölümler içeriyor.

ownCloud

ownCloud dünya çapında 8 milyon kullanıcıya sahip ve açık kaynak, kişilerin kendi kendini barındırdığı dosya eşzamanlama ve paylaşım teknolojisi. Ana düzlemler için eşzamanlama istemcileri yanısıra WebDAV aracılığıyla bir web arayüzü bulunuyor. ownCloud kolay kullanılan bir arayüze, güçlü yönetici araçlarına ve geniş paylaşma ve iş birliği özelliklerine sahip. Kullanıcıların kendi verileri üzerinde denetimini sağlıyor.

ownCloud'un açık mimarisi bir UPA4 aracılığıyla genişletilebiliyor ve uygulamalar için bir düzlem sunuyor. 300'den fazla uygulama yazıldı, bunlar takvimi, kişileri, postayı, müziği, parolaları, notları ve diğer türden verileri idare eden yetkinlikte. ownCloud güvenlik sağlıyor, bir Raspberry Pi'den petabaytlarca depolamaya sahip kümeye, milyonlarca kullanıcıya kadar uzanıyor. Yüzlerce katkıcıdan oluşan uluslararası topluluk tarafıdan geliştiriliyor.

Birleşmiş paylaşım

Dosya paylaşma takım çalışmasını bir üst düzeye çıkarıyor ve ölçünleme böylesi iş birliği için sağlam bir taban sağlıyor.

Birleşmiş paylaşım, OpenCloudMesh tasarısının yeni bir açık ölçünü, bu doğrultuda bir adım. Diğer şeylerin yanında, Pydio ve ownCloud örneklerindeki gibi bu ölçünü destekleyen sunucular arasında dosya ve dizin paylaşımına izin veriyor.

İlk olarak ownCloud 7'de tanıtıldı, bu sunucudan sunucuya paylaşım özelliği uzak sunuculardan dosya paylaşımlarını bağlamanızı sağlıyor, bulutlarda kendi bulutunuzu oluşturmaya yarıyor. Birleşmiş bulut paylaşımını destekleyen diğer sunuculardaki kullanıcılarla doğrudan paylaşım bağlantısı oluşturabilirsiniz.

Bu yeni UPA'yı uygulamak depolama çözümleri arasında derin bütünleşme sağlarken güvenliği, denetimi ve özgün düzlemlerin özniteliklerini koruma altına alıyor.

"Dosyaları değiş tokuş etme ve paylaşma bugün ve yarın için birinci derecede önemli,” diyor ownCloud kurucusu Frank Karlitschek. “Bu nedenden, bunu birleşmiş ve özeksel veri siloları olmadan dağıtık yoldan yapmak önemli. Birleşmiş paylaşımın en önemli tasarım noktası kullanıcıların güvenliğini ve gizliliğini korurken en kolay ve kusursuz yoldan paylaşımı sağlamasıdır.”

Sırada ne var?

OpenCloudMesh gibi bir girişim Pydio ve ownCloud gibi kurum ve şirketlerin dosya paylaşımında ortaklaşa çalışmasını bu yeni açık ölçün ile geliştirecektir. ownCloud 9 kullanıcı listelerini değiş tokuş edebilen birleşmiş sunucular yeterliliğini tanıtmıştı, böylece kendi sunucunuzdaki kullanıcılarla yaşadığınız kendiliğinden tamamlama deneyimi de aynı kusursuzlukta sağlanıyor. Gelecekte, (birleşmiş!) özeksel yer defteri sunucularına sahip olma fikri diğer birleşmiş bulut kimliklerini aramakta kullanılabilir, böylece bulutlar arası iş birliği yeni bir düzeye taşınabilir.

Girişim şüphesiz büyümekte olan açık teknik topluluğuna katkıda bulunacak, bu toplulukta üyeler kolayca tartışabilir, geliştirip, sağlayıcı-bağımsız olan “OCM paylaşım UPA"sına katkıda bulunabilir. OCM tasarısının tüm öncü eşleri açık UPA tasarım ilkelerine tamamen katkıda bulundu ve diğer açık kaynak dosya paylaşma ve eşzamanlama topluluklarının iştirakine, bağlanmış buluta katılımlarına kapıları açık.

Lisans: Bu metin CC BY-SA 4.0 lisansı altında dağıtılan “The future of sharing: integrating Pydio and ownCloud” metninden çevrilmiştir. Özgün metin ben van ’t ende tarafından yazılmıştır. Çeviri metni CC BY-SA 4.0 altında lisanslanmıştır.


  1. BSTS / Kentbilim Terimleri Sözlüğü 1980, TDK.gov.tr 

  2. "Sistem” kelimesi yerine Türkçe bir kelime olan “düzen” kelimesini kullanmayı daha uygun buluyorum. 

  3. Mülk üstü yazılım (on-premises software): yazılımı kullanan kişinin ya da işletmenin mülkündeki (binasındaki) bilgisayarlara kurulan ve çalışan yazılımdır. Yazılım sunucu çiftliği veya bulut gibi uzak bir işletmede değildir. Wikipedia 

  4. Uygulama programlama arayüzü

22 Mayıs 2016

Posted In: Açık kaynak, Bulut, Çeviri, linuxgezegeni, OpenCloudMesh, ownCloud, Özgür yazılım, Pydio

WP Twitter Auto Publish Powered By : XYZScripts.com