Pazar, Nisan 04, 2010

özgür yazılım ve linux günlerinin ardından

bir 'özgür yazılım ve linux günleri' etkinliği daha geride kaldı. biz eski parkyeri çalışanları için bir çeşit mezun günü buluşması anlamı da taşıyor bu senelik etkinlik, dostlarla bir araya gelmemize vesile oluyor.

bu seneki etkinlikten kazanımlarım ise 'Bilişim ve İletişim Çalışanları' derneğinin farkına varmam ve brian king'in sunumundan edindiğim jetpack ve drumbeat anahtar sözcükleri oldu.

bu arada yine brian king'in sunumu sırasında, firefox'ta, özellikle video üzerinde css'le yapılabilecek hareketleri gösterdiği demo oldukça etkileyiciydi, depodan son sürümü çekip derleyesim geldi.

drumbeat mozilla'nin oluşturmaya çalıştığı, internetin 10 sene sonraki sosyal portresini belirlemeyi hedefleyen felsefi tartışmaların döndüğü bir platformmuş. yani w3c'nin teknik olmayanı. internetin insani değerleri koruyarak, herkese açık kalarak, katılımı teşvik edici ve merkezi olmayan bir şekilde büyümesine devam edebilmesi için uzun vadeli stratejik kararların alınabileceği bir topluluk yaratmaya çalışıyorlar anladığım kadarıyla.

jetpack ise firefox'un insanı xul'le uğraştırmayan eklenti geliştirme paketiymiş, yeni bir eklenti yazmanız için sadece html, css ve javascript bilgisi yeterliymiş, jetpack ile yazılmış eklentiler tarayıcınızı açıp kapamanızı da gerektirmiyormuş kurulumdan sonra. ama tabiki xul ile yazılmış eklentiler kadar güçlü değil henüz, ama benim imkbizle gibi basit eklentiler için çok faydalı bir icat olmuş bence. muhtemelen eklenti yazan insan sayısını da arttıracaktır bu yaklaşım.

(hemen araya bir parkyeri reklamı sokayım) parkyeri'nde calışmanın ayrıcalıklarını insan uzaklaşınca farkediyor. misal jetpack diye birşeyi parkyeri'nde çalışıyorsanız duymamamınıza çok imkan yoktur, mutlaka biri lafını eder, ister istemez kulak misafiri olursunuz. jetpack'i özgür yazılım günlerinde duymuş olmam biraz dünyayla bağlantımın kesildiği hissi yarattı bünyemde. bu arada parkyeri bu hızla şirket doğurmaya devam ederse, yakında afişlerin altında diğer sponsorların logosuna yer kalmayacak.

bunlar dışında etkinliğin geneline bakacak olursak, sanki geçmis senelere oranla biraz daha sönük geçti gibi geliyor bana, tabi ben de büyümüş olabilirim artık. ama türkiye debian listelerinde de eskisine göre bir durağanlık söz konusu mesela. sanki özgür yazılım camiasının büyümesinde bir yavaşlama var. diğer yandan etrafımda linux kullanan insan sayısında da bir artış görüyorum. galiba artık linux kullanıcıları uzaylı muamelesi görmediğinden linuxcuları birbirine yaklaştıran bağlarda da bir zayıflama yaşanıyor. eskiden linux kullanan insanlar birbirlerine daha benzer bir profile sahipken, şimdi çesitlilik biraz daha arttı sanki, bağların zayıflamasını da buna bağlıyorum kendimce.

sonuç olarak faydalı ve birleştirici bir etkinlik oldu, emeği geçen herkeze teşekkürler, umarım hiç sonu gelmez bu etkinliklerin.

Salı, Ocak 12, 2010

siberfiber ne ki?

bu soruya sıklıkla maruz kalıyorum ve genelde siberfiber'i insanlara anlatma girişimim hüsranla sonuçlanıyor, yazayım rahatlayım dedim.

siberfiber intimatek çatısı altında geliştirilen, tübitak desteği alan, bir bilgisayar destekli yönetim yazılımı. iş analistlerinin, bir programcıya ihtiyaç duymadan, sektörlere ve şirketlere özel kurumsal kaynak planlama (KKP)[1] ve iş akışı yönetimi (IAY)[2] çözümleri üretebilmelerini sağlayan bir ortam yaratmayı hedefliyor.

siberfiber'i bir ar-ge çalışmasi yapan ise bazı köklü problemlere özgün çözümlerle yaklaşması. bir KKP yazılımında ana problem bir kaynakta meydana gelen değişimi, bu değişimden etkilenen diğer kaynaklara yansıtmaktır. programcılar kaynakların veri modellerini çıkarır ve gerekli veritabanı tablolarını oluşturur. ancak veritabanı sistemlerinde genel sıkıntı veriler arasında ilişkilerin tek taraflı tutulmasıdır.

peki ne demek bu? 'ögretmen' ve 'ögrenci' diye iki kaynağımız olsun, bu iki kaynak arasında 1'e n bir ilişki var ise (1 öğretmenin n ögrencisi olabilir, 1 öğrencinin yalnızca 1 ögretmeni olabilir). klasik veritabanı sistemlerinde yapılan, öğrenci tablosunda öğretmen'in id'sini tutan bir kolon eklemektir. bu durumda 'öğrenci' tablosunun şemasına bakarak, 'öğretmen' ve 'öğrenci' kaynakları arasındaki ilişkiyi görebiliriz, ancak 'öğretmen' tablosunun şeması bu ilişkiye dair herhangi bir bilgi içermez.eğer size lazım olan 'x ögretmenin ögrencileri bilgisi' ise yapmanız gereken bir programcı tutup, sizin için bir sql sorgusu yazmasını sağlamaktır.

siberfiber'in geleneksel işlemsel programlama (procedural programming) anlayışına göre değil de tanımsal programlama (declarative programming) anlayışı ile geliştirilmiş olmasi, kaynaklar arasındaki ilişkilerin tamamının çift taraflı tutuluyor olması birçok problemi kökünden çözüyor.

siberfiber'de öğretmen-öğrenci arasındaki ilişki hem 'öğrenci' hem de 'öğretmen' tiplerinin şemasından görülebilir, çünkü tüm ilişkiler tanımlama aşamasında kurulur.

örneğimizi biraz daha karmaşıklaştıralım, örneğin 'x öğretmenin başarılı öğrencileri' bilgisine ihtiyacımız olsun, bunun için de öğrenci tablosuna 'not' diye bir kolon ekleyelim, ve programcımıza başarılı öğrenci tanımı olarak "notu 50'den yüksek olan öğrenci başarılıdır' bilgisi verilmiş olsun. bu durumda programcı şu sql'i yazacaktır:

[sql]
select * from ogrenci, ogretmen where ogretmen.id=ogrenci.ogretmen_id and ogrenci.not > 50;
[/sql]

siberfiberde ise bu mantık öğretmen ve öğrenci tiplerinin oluşturulduğu aşamada, şu sfs[3]'le ifade edilir.

[sfs]
createsifter "ogretmen" "basarili ogrenciler" n "ogrenci" "basarili oldugu ogretmen" 1 filtervaluesgreaterthan ogrenci.not 50
[/sfs]


(burada sfs hakkında bilgilendirme yapmayacağım, 3 satırda anlatılabilecek bir şey değil malesef, bu aşamada gereksiz detay olacaktır diye düşünüyorum, ama örnek vermeseydim de çok havada kalacaktı anlattıklarım)

yukarıda tek bir sfs komudu hem öğrenci tipinde hem de öğretmen tipinde iki property (klasik veritabanı sistemindeki tablo kolonu gibi düşünülebilir) yaratır.

bizden 'başarılı olduğu öğretmen' bilgisi istenmemiş olmasına rağmen, siberfiberin tip tanımında ilişkileri çift taraflı kurmaya zorluyor olması bu soruya kendiliğinden cevap verilmesini sağladı. aslında yukarıda yaptığımız iki tip arasında bir ip çekmek, ve bu ipin başına ögrenci tipi tarafında 'başarılı olduğu öğretmene gider' tabelası koymak, öğretmenin tipi tarafına da 'başarılı öğrencilere gider' tabelasını koymak. bu ip üzerinde iki yönde de seyehat etmek mümkün.

klasik veritabanlarında ise ipler genelde sadece inmeye izin verir, yukarı çıkamazsınız, 'başarılı olduğu öğretmen' bilgisini elde etmek için yeni bir ip çekmeniz gerekir, yani programcınızın yeni bir sql daha yazmasını gerektirir.

çift yönlü ilişkiler sayesinde, siberfiber uzayında herhangi bir tipte gerçekleşen değişimden etkilenen tüm tipler anında kendiliğinden güncellenir. (tipler derken bu tipte yaratılmış nesnelerden, yani siberfiber jargonundaki 'thing'lerden bahsediyorum)

KKP yazılımı dünyasında, iş analistleri süreçleri ve kaynakları belirler, sonra bunu programcılara anlatırlar, programcıdan konuya kendileri kadar hakim olmalarını beklerler, programcı da anladığı kadarıyla kodlamasını yapar ve ortaya bir yazılım çıkar. ya da programcı o kadar çok aynı sektörle ilgili KKP ve IAY yazılımı yazmıştır ki artık bir iş analisti-programcı'ya dönüşmüştür, kendisinin tanrı olduğunu düşünmektedir.

siberfiber'de ise tanımlamalar programcıya değil doğrudan sisteme yapılır. tabi ki iş analistlerinden sfs kodu yazmasını beklemiyoruz, bunun için bir siberfiber tasarım arayuzu yazılmakta, siberfiber tanımlamaları BPMN[4]'e benzer bir gösterimle ifade edilebilir. iş analistleri tasarim arayüzünü kullanarak bu gösterimleri oluşturabilecek ve bu gösterimlerin ürettiği gerçek zamanlı sfs kodları ile sistemde güncellemeler yapılabilecek.

tabi bir de, bir BDY yazılımının bir kullanıcı arayüzü olması gerekiyor, peki bu arayüzü kim oluşturacak. yine iş analistleri, maske adı verilen tanımlamalarla. maskeler bir tipin arayüzde ne şekilde gösterileceğini belirler, mesala öğrenci tipindeki 'not' kolonu öğretmen arayüzünde değiştirilebilir bir metin kutucuğu şeklinde görünecektir, öğrenci arayüzünde ise salt-okunur bir etiket şeklinde. bu maske tanımlamaları da tiplerde olduğu gibi siberfiber tasarım arayüzünden çizilerek oluşturulacak.

umarım siberfiber hakkında az da olsa bir fikir verebilmişimdir, bu sadece buz dağının görünen kısmı, tamamına değinmeye çalışırsam gereksiz kafa karıştırıcı olacaktı, şu anda bile öyle oldu sanki.

[1] KKP ~= ERP (Enterprise resource planning)
[2] IAY ~= BPM (Bussiness Process Management)) cozumleri
[3] SFS(SiberFiber Script) => siberfiber icin tasarlanan DSL (Domain Specific Language)
[4] Bussiness Process Modeling Notation