Kategori Arşivi Bir player olarak canavar

Play! Framework ile indirmeyi durdur/sürdür desteği

Şu sıralar geliştirmekte olduğum bir uygulamada kullanıcıların oldukça büyük dosyaları indirebilmelerini sağlıyorum. Dosya boyutları sıklıkla 1GB’ın üzerinde olabiliyor. Her indirme isteğinden önce uygulama, kullanıcının o dosyayı indirme yetkisi olduğunu doğruluyor ve doğrulama başarılı ise indirmeye izin veriyor. Diğer bir deyişle dosyalar statik olarak değil aksine dinamik olarak sunuluyor. Web sunucu olarak Apache HTTP proxy arkasında çalışan ve Play! Framework 1.2.4 içerisinde gelen Netty HTTP sunucuyu kullanıyorum.

Dosya boyutlarının oldukça fazla olduğundan bahsetmiştim. Bu durumda kullanıcıların indirme işlemine herhangi bir sebeple oluşan kesintinin ardından kaldıkları yerden devam etmeleri büyük önem kazanıyor. Flashget ya da DownThemAll! gibi indirme yöneticileri kullanıcılarına bu imkanı veriyorlar. Fakat söz konusu süreç yalnızca istemci tarafında bitmiyor. Eğer web sunucu bu desteği vermiyorsa durdur/sürdür(pause/resume) işlemi gerçekleşemiyor. Bu işlem için HTTP protokolünün Range başlığı kullanılıyor. Ayrıca sunucunun istemciye Range başlığını kabul ettiğini belirtmek için Accept-Ranges başlığını göndermesi gerekiyor. Aslında tüm bu süreç hem Apache HTTP server hem de Netty server tarafından destekleniyor. Fakat dosyaları statik sunmadığınız zaman durum ne yazık ki değişiyor.

Play! Framework ile gelen renderBinary() metodu binary dosyaları istemciye gönderebilmeniz için hem yalın hem de çok kullanışlı bir özellik olsa da Range başlığı desteği sunmuyor. Konu üzerinde biraz araştırma yaptığımda kuyrukta bekleyen bir pull isteğine rastladım. Söz konusu yama renderBinary metoduna Range başlığı desteği ekliyor. Ancak yama henüz kuyrukta olduğundan en erken bir sonraki Play! Framework sürümüne dahil edilecek.

Durum böyle olunca kendi başımın çaresine bakmak durumunda kaldım. HTTP protokolüne uygun şekilde bir gerçekleme yaptım ve DownThemAll! ile başarılı sonuç aldım. Böylece kullanıcılarım birden fazla thread ile dosya indirme ve indirmeyi durdurup sürdürme imkanına kavuştular. Gereken kodları içeren bir gist hazırladım. Aşağıda paylaşıyorum.

Video – Play Framework uygulama ayarları

Bir Play Framework uygulamasının ayarlarının yüklenmesini ve kaydedilmesini derinlemesine inceleyen bir video hazırladım. Video içerisinde geliştirilen uygulamanın kodlarına buradan erişebilirsiniz. İyi seyirler.



Play Framework, Zemberek ve Flot kullanarak kök sıklık grafiğinin çizilmesi

Play Framework, Zemberek ve Flot kullanarak kök sıklık grafiğinin çizilmesi konusunda bir video hazırladım. Zemberek konusunda daha fazla bilgiyi Merve ÇAVDAR’ın Zemberek konusundaki yazı ve videolarından, Flot ile ilgili ayrıntıları Mehmet Ali GÖZAYDIN’ın yazısından öğrenebilirsiniz.



Özgür Web Günleri 2011′in ardından

Bu yıl ikincisi düzenlenen Özgür Web Teknolojileri Günleri sona erdi. Geçen yıl da “Hibernate Çatısı ile Kalıtım ve Çok Biçimlilik Kullanılarak Kurumsal Varlıkların Modellenmesi” semineri ile yer aldığımız etkinliğin ardından yazdığım şu yazıyı görünce bu yılki etkinlikle ilgili yazmadığımı anımsadım ve yazmaya karar verdim.

Etkinlikte Umut ile birlikte Play Framework semineri vereceğimizi daha önce burada duyurmuştum. Sunumumuzun ana hatlarını aynı yazıda yayınlamıştım. 15 Ekim Cumartesi günü saat 10:00′da yaptığımız sunumun görüntüleri de ayrıca kaydedildi ve yakın zamanda etkinlik sitesinde yerini alacak.

Oldukça yoğun katılımın olduğu seminerimizin faydalı olduğunu düşünüyorum. Öyle ki seminer sonunda bir izleyici yanıma gelip

“İlk defa bir sunumda bir şeyler öğrendim. Bundan öncekiler çok sıradandı. Teşekkür ederim”

dedi. Bizden önceki ve sonraki sunumların pek çoğuna ben de katıldım. Kendi adıma hepsinin faydalı olduğunu düşünüyorum. Yine de etkinliğin son seminerlerinden biri olan Bora Gönül’ün verdiği Scala ve Fonksiyonel Programlama Dilleri seminerini diğerlerinden ayırmam gerekli. Hem anlatım tekniği hem de bilgi yoğunluğu açısından seminerin bence açık ara en iyi semineri buydu. Seminerin son dakikalarında servise yetişmek için çıkmak zorunda kalsam da Bora Gönül’e buradan tekrar teşekkür ederim.

Scala seminerini de izledikten sonra Play Framework geliştiricilerinin neden 2.0 sürümünde çekirdeği Scala ile yeniden yazmaya karar verdiklerini daha iyi anladım. Genel olarak sorunların doğru adreslendiği ve orta vadede Play Framework’ün geliştiriciler arasında kendine sağlam bir yer edineceği artık açık olarak görünüyor.

Diğer sunumlardan edindiğim bazı izlenimler ise şöyle.

  • Play Framework varken Django ile web uygulaması geliştirmeye çalışmak tam anlamıyla gereksiz.
  • Ruby on Rails konusunda yeterli bilgi edinemedim ama büyük ihtimalle aynı durum bu framework için de geçerli.
  • Pentaho Kettle çok başarılı bir ETL aracı.
  • Hantal JEE framework’leri ölmeye mahkum.
  • Scala ve fonksiyonel diller yoğun şekilde asenkron işlemler ve concurrency sorunları içeren önümüzdeki döneme hükmedecekler.

Bu arada 16 Ekim Pazar günü İstanbul’da Play Framework geliştiricileri buluşması düzenledik. Eğlenceli 1-2 saat geçirdik. Katılımcılara buradan teşekkür ederim. Bundan sonraki etkinlikler için Play Framework Türkiye Google Grubu‘nu takip edebilirsiniz.