20 Mart 2014 Perşembe

Mısır İletişim Bakanlığı Açık Kaynak Yazılım Stratejisini Benimsedi

Atef Helmy
Mısır İletişim ve Bilgi Teknolojileri Bakanı Atef Helmy bakanlığın özgür ve açık kaynaklı  yazılımları (FOSS) destekleme stratejisini benimsediğini duyurdu.

6 Ocak 2014 Pazartesi

5651'de Değişiklik Kapıda



Toz duman arasında mecliste bir çorba kanun teklifi var ve 5651 sayılı kanun için değişiklikler içeriyor. Tam metnine http://www2.tbmm.gov.tr/d24/2/2-1928.pdf adresinden ulaşabilirsiniz, ben hızlıca göz attığımda şunları gördüm;

9 Ekim 2013 Çarşamba

Fransız Jandarma Teşkilatı 37.000 Bilgisayarı Ubuntu'ya Taşıdı

Fransa’da ordunun bir kolu olan ve kamu güvenliğinden sorumlu Jandarma teşkilatı son yıllarda sahipli yazılımlardan kurtulma konusunda liderlik ediyor.

29 Ağustos 2013 Perşembe

Tornado websocket client

Tornado'nun sunucu hizmetleri ile ilgili bir sürü örnek var ama istemci olarak hele hele WebSocket için neredeyse hiçbir örnek bulamadım internette, onun için buraya yazalım dursun, bir gün birine lazım olur.

from tornado import websocket, ioloop, gen, escape




class SocketClient():




    def __init__(self):
        self.headers = httputil.HTTPHeaders()
        self.headers['Content-Type'] = 'application/json'
        self.request = httpclient.HTTPRequest(
            url = "wss://some.url",
            validate_cert = False,
            client_key = "client-key.pem",
            client_cert = "client-cert.pem",
            connect_timeout = 60,
            request_timeout = 60)




    def connect(self, connCallback, msgCallback):
        self.request.headers = self.headers
        self.__msgcallback = msgCallback
        self.__conncallback = connCallback
        wssConn = websocket.WebSocketClientConnection(ioloop.IOLoop.current(), self.request)
        wssConn.connect_future.add_done_callback(self.__on_connResult)




    def __on_connResult(self, conn):
        if conn.exception() == None:
            self.__wssConn = conn.result()
            self.__conncallback(True)
            self.__read()
        else:
            print(conn.exception().args)
            self.__conncallback(False)




    def send(self, data):
        self.__wssConn.write_message(escape.utf8(json.dumps(data)))




    @gen.coroutine
    def __read(self):
        while True:
            msg = yield self.__wssConn.read_message()
            if msg is None:
                self.__conncallback(False)
                break
            self.__msgcallback(msg)

5 Temmuz 2013 Cuma

Yun, BeagleBoard, Rascal, Raspi, Cubieboard & pcDuino

(http://www.cooking-hacks.com/ Sitesinden çeviridir.)

Arduino Yun’un piyasaya çıkmasını beklerken  sanıyorum piyasadaki yeni Linux aygıtları hakkında daha çok bilgi sahibi olmak ilginç olabilir. Yeni geliştirilenlerle birlikte pek çoğu Arduino uyumluluğu konusunda anlaşmış.

Neden?

Arduino 2005 yılında piyasaya sürüldüğünde  modüler bir platform olarak standart olmuştu. Sonraki tüm yeni aygıtlar insanlara Arduino kadar kolay kullanılabilir özellikte bir platform sağlamak istedi.

Bazıları Ethernet, Wifi, HDMI ve NAND Flash ile gelebiliyor, karşılaştıracağımız her kartta özellikler değişiyor. Fakat hepsi GPIO arabirimine sahip, hatta kolay port etmek için genişletilebilir kartları var.


Her birine kısaca bakalım

28 Mayıs 2013 Salı

Websocket soyutlama mümkün mü?

Geçen yıl zaten çok az ilgilenebildiğim yazılım hobimi sadece Web geliştirme üzerine yoğunlaştırmaya karar vermiştim, önceki yıllarda Python ile masaüstü uygulamaları falan yapıyordum.

HTML5 Uygulamaları mobil cihazlarda falan her yerde çalışabiliyor, yani tek bir kod ile tarayıcı çalıştıran her türlü cihaza uygulama sunma imkanı var. Doğal kod çalıştırmanın avantajları elbette var ama bence Dünya yavaş yavaş HTML5 çevresinde dönmeye başlıyor, zamanla tarayıcılar donanım kaynaklarına  ulaşabilecek API'lere kavuşacak. Bunun son örneği Google'ın başını çektiği bir organizasyonun geliştirdiği WebRTC API.

HTML5'te neler yeni diye bakınca Websocket'i gördüm, bir W3C standardı. Klasik HTTPRequest işleminin aksine istemci ve sunucu arasında kalıcı bir bağlantı kuruluyor ve bağımsız olarak karşılıklı mesaj gönderilebiliyor. Bir nevi e-posta sistemi gibi. Bu, long polling gibi zorlama yöntemlerin yerine geçecek bir teknoloji. Bağlantı ws:// adresine basit bir HTTP 1.1 çağrısı ile başlıyor, sunucu bağlantıyı kabul ederse HTTP protokolü terk ediliyor ve sabit bir bağlantı açılıyor.

HTTPRequest ile RPC çağrıları yapmaya devam ederken Websocket ile sunucudaki olaylar anlık olarak istemciye iletilebiliyor. Bu konu oldukça ilgimi çektiğinden en azından basit bir chat uygulaması yaparak pratik yapmaya karar vermiştim. Ama bir sorun vardı hiç JS bilmiyordum, çünkü en sevmediğim dildir :)

JS Sorununu CoffeeScript ile aştım, Coffee ile gerçekten okunası kodlar yazılabiliyor. Diğer sorun da arayüz yazmak, tarayıcılar arası uyumsuzluklar vs. ile uğraşmak. Bunları da Dojo Framework ile hallettim, Dojo kütüphanesi tam teşekküllü bir araç takımı sunuyor, mobil cihazlar için kütüphaneleri de var, ayrıca  kodu doğal DOM nesnelerden de soyutluyor, declare, hitch gibi bazı fonksiyonları ve evented gibi sınıfları doğal JS'ten de uzaklaştırıyor, iyi yani. Tarayıcı uyumunu da dert etmiyorsun. En önemlisi iyi belgelenmiş.

Sunucu tarafında fazla zorlanmamak için zaten bildiğim Python kullanmak istedim, tabii ki Tornado Server. Basit, hızlı, belgesi bol, kütüphane olarak hemen her şey var. Tornado'yu Nginx'in arkasına aldım, çok gerekli miydi bilmiyorum açıkcası ama ileride bir şeyler yapıp deploy etmek istediğimde veya bir VPS kiralamaya kalkarsam diye Nginx'i tecrübe etmiş olayım dedim.

Dojo ve Tornado'da emekleme aşamasını geçmem bayağı zaman aldı, zira bazen 15-20 gün tek satır kod yazmadım ve her seferinde yav ne yazmıştım diyerek yeni baştan öğreniyormuşum gibi oldum. Neyse ki artık temel bazı kütüphaneler yazmaya başladım.

Sunucuda yazdığım chat/main.py uygulamasındaki nesneleri;

@rpchook
class login(object):


 def run(self, data):
  ...




@sockethook
class chat(object):


 
 def message(self, msg):
            ...

İstemcide;


login = new chat.main.login()
login.on("loaded", lang.hitch(this, this.loaded))
login.send(data)

chat = new chat.main.chat()
chat.on("message", lang.hitch(this, this.message))
chat.send(msg)

gibi kullanabilmek için bir şeyler yazdım, RPC tarafı kolaydı ama Socket konusu farklı, sunucuda her bir socket için bir loop çalışıyor, ben istemcide soyutlama yapmak istediğimden tek bir loop kullanacak bir tasarım yaptım, iyi mi kötü mü henüz bilmiyorum, kodlama bitip çalışan bir şeyler ortaya çıkarsa belli olacak. 

Eli yüzü düzgün bir şey olana kadar kod yayınlamayacağım. Kod vermeyeceksen ne diye bu kadar dil döktün demeyin, sıkıntıdan öylesine yazdım, zaten hiç bağlantı falan uğraşamayacağım, hızlı hızlı yazdım geçtim, adı üstünde günlük değil mi bu?

15 Mart 2013 Cuma

Google Reader'dan Taşınma Zamanı

Google, en çok kullandığım RSS takip uygulamasını 1 Temmuz'da emekliye ayıracağını açıkladı. Daha 3 ay var ama o gün gelmeden başka bir yere taşınıp alışmak iyi olur diye düşündüm. 15 Dakikalık bir araştırma sonucu Bloglines'ı bir deneyeyim dedim.

Abonelikleri almak için https://www.google.com/takeout/#custom:reader adresine gidip zip arşivini bilgisayarınıza indiriyorsunuz, içinden çıkan subscriptions.xml dosyası OPML biçiminde, yani bloglines gibi sitelerde içeri aktarabiliyorsunuz.

26 Şubat 2013 Salı

WebRTC Değişimin başlangıcı mı?

Gerçekte Skype, GoogleTalk, Jitsi gibi uygulamalar ve Adobe Flash uygulamaları olmadan da web tarayıcısı üzerinden ve hiçbir eklenti kurmadan anında görsel ve sesli iletişim kurabilmek teknik olarak mümkün. Ancak bunun için standart bir protokol olmadığından her firma kendi teknolojilerini geliştirmek zorunda kalıyor. Örneğin Google, Hangout uygulaması için her bir tarayıcı ve her bir işletim sistemi için ayrı ayrı eklenti ve uygulamalar geliştirmek durumunda. Ancak yakında tüm bu yazılımlara gerek kalmayacak gibi görünüyor.

Google, Mozilla ve Opera ile birlikte bu iş için WebRTC (Web Real Time Communications) adında bir W3C standardı üzerinde 2011 yılından beri çalışıyor. Bu sayede tek bir HTML5 uygulaması ile farklı sistemler ve tarayıcılar üzerinden gerçek zamanlı sesli ve görsel iletişim mümkün olacak. Gerekli kütüphaneler tarayıcılarda gömülü olacak ve standart Javascript API'leri sayesinde yönetilecek, herhangi bir cihazda kullanıcının ihtiyacı olan tek şey modern bir web tarayıcıdan ibaret olacak.

AT&T, Mozilla ile birlikte geliştirdiği WebRTC'yi temel alan WebPhone projesi için "vision for the future of seamlessly integrated communication." diyor.  İnternet bağlantısının olduğu her yerden hiçbir ek yazılıma gerek duyulmadan platform bağımsız kesintisiz anlık veri paylaşımı imkanı A.Graham Bell’in icadını tarih kitaplarına kaldırabilir mi? Özellikle IPv6’nın sağlayacağı avantajlar, mobil cihazların gelişimi ve VOIP desteği ile birlikte düşününce olabilir diyorum. 


WebRTC Desteği Firefox ve Chrome tarayıcıların son sürümlerine ekleniyor, Firefox ile test etmek için http://mozilla.github.com/webrtc-landing/ adresindeki örneklere bakabilirsiniz.

WebRTC'de öntanımlı kodlama VP8 olmuş (başka açık kodlamalar da destekleniyor ve ileride eklenebilir), ancak Microsoft bu durumdan pek memnun olmamış olacak ki CU-RTC adını verdiği benzer bir çalışmayı bağımsız olarak yürütüyor ve WebRTC'den daha esnek ve özelleştirilebilir olduğunu iddia ediyor.
 

http://html5labs.interoperabilitybridges.com/cu-rtc-web/cu-rtc-web.htm


15 Ocak 2013 Salı

Windows'ta başlangıç komutlarını arkaplanda çalıştırmak

Bir Windows sistemde belirli aralıklarla sonsuz bir döngüde bir komutun çalışmasına ve bu işin sistem açılışında MSDOS penceresi olmadan arkaplanda başlamasına ihtiyacım oldu. Linux tecrübelerime dayanarak bu işin oldukça kolay olabileceğini sanmıştım ama hiç de öyle değilmiş. Bu işi yapmak için araçlar vardır mutlaka ama böyle basit bir şey için ek yazılım kullanmak... Önce CMD, START ve CALL komutlarının parametrelerine bakmaya başladım, işin içinden çıkamayınca Gogıllamaya ve deneme/yamulma yöntemine başladım... derken aşağıdaki çözüme ulaştım.

Çalıştırmak istediğim komutlar ve timeout parametresiye belirlediğim saniye cinsinden zaman aşımı süresini C:\run.bat dosyasına kaydediyorum. (Örnek işe yarar bir şey olsun diye TMP dizinini temizleyen bir komut yazayım)


:deltmp
del %TMP%\* /s /q
for /D %%i IN ("%TEMP%\*") do rmdir /S /Q "%%i"
timeout /t 10
goto deltmp

Sonra bunu çağıracak aşağıdaki VBScript kodunu bir run.vbs dosyasına kaydedip, kullanıcının Başlangıç menüsüne yapıştırıyorum.


Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\run.bat" & Chr(34), 0
Set WshShell = Nothing

5 Ocak 2013 Cumartesi

Bodhi Linux, epey eğlenceli bir eleman

Enlightenment (bundan sonra E diyeceğim) sonunda kararlı 17 sürümünü yayınladı. Yaklaşık 1.3 sürümünden bugüne kullandığım Ubuntu LTS tabanlı E dağıtımı Bodhi Linux ise 2.2.0 sürümü ile bu güncellemeyi ilk sunan dağıtımlardan birisi oldu. Bence E, hız ve hafiflik konusunda harika, Bodhi Linux ise E'yi en iyi, en güncel ve en derli toplu sunan dağıtım. Meraklısı için aşağıda bol görselli bir inceleme var;