web development notes

by Murat Çorlu

Disqus yorumlarının görünür olduklarında yüklenmesi

Disqus, artık bir çok blogda kullanılan çok başarılı bir yorumlama hizmeti. Özellikle statik blogların yaygınlaştığı günümüzde, dinamik üretilmeyen sayfalarda bile yorum yazılabilmesi imkanı verdiği için hayat kurtarıcı bir çözüm.

Disqus’ın sunduğu javascript kodunu kullandığınızda sayfa yüklenirken yorumların olacağı yere gelindiğinde Disqus tarafından sunulan javascript dosyası yükleniyor ve bu dosya ihtiyaç duyduğu dosyaları da yükletip, yorumları sayfaya ekliyor. Bloglarda genelde bir yazı açıldığında yazının uzunluğundan dolayı yorumlar ilk anda görüntüde olmuyorlar. Ancak bu geleneksel yöntemimizde birşeyi değiştirmiyor ve görüntüde olmamasına rağmen yorumlar sayfa açılırken yükleniyor. İçinde başka öğelerin de bulunduğu(videolar, resimler ve başka javascriptler) uzun yazılı blog sayfalarını açarken, görüntüde olmadığı halde Disqus yorumlarının da ilk açılışta yükleniyor olması hissedilir bir yük oluşturuyor. İşte buna çözüm olarak, jQuery kütüphanesinden ve Mike Green’in bir yazısından faydalanarak yazdığım aşağıdaki javascript dosyası ve HTML5’in data attribute özelliğinden faydalandığım aşağıdaki gibi bir HTML yazımı ile Disqus yorumlarını kullanıcı sayfayı yorumların olduğu bölümlere kaydırdığı anda yükletebilirsiniz:

HTML5 ile gelen data attribute’ları bu tür ihtiyaçlar için biçilmiş kaftan. Ancak eğer HTML dokümanlarınızı HTML5 tipinde deklare etmiyorsanız bu attribute’ları kullanmak dosyanızın validasyonunu bozacaktır. Bunun yanında normalde IE7’nin data attribute desteği olmamasına rağmen jQuery bu problemi çözmektedir.

Bu çözümü şu anki blog üretme motorum olan Octopress‘de nasıl uyguladığımı görmek isterseniz Github’daki bu iş için yaptığım değişikliklerden ibaret olan commitimi inceleyebilirsiniz.

Django’da Haystack ve Elasticsearch ile arama

Django, verilere hızlıca erişim ve düzenleme için çok güzel bir model katmanına sahip. Her ne kadar bu modellerde filtreleme imkanları oldukça kullanışlı görünse de, büyük veri ve yoğun kullanımlarda veritabanından sorgular yaparak arama yapma devri geçmişte kaldı. Çünkü artık küçük verilere çok daha hızlı erişebilen ve arama konusu üzerine uzmanlaşmış bir çok başarılı uygulama var. Bunlara en bilinen örnekler olarak Solr, Sphinx ve henüz bunlara göre toy olmasına rağmen performansı ve kullanım kolaylığıyla bir çok yazılımcıyı büyüleyen Elasticsearch uygulamalarını verebiliriz. Ben bu yazımda yakın zamanda kullanmaya başladığım Elasticsearch’den ve Elasticsearch’ü Django’da nasıl kullanabileceğimizden bahsedeceğim.

Python ile TC Kimlik Numarası doğrulama

Merak edip TC Kimlik no algoritmasını araştırdığımda aşağıdaki kurallara ulaştım:

* 11 hanelidir.
* Her hanesi rakamsal değer içerir.
* İlk hane 0 olamaz.
* 1. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında, elde edilen sonucun 10’a bölümünden kalan, yani Mod10’u bize 10. haneyi verir.
* 1. 2. 3. 4. 5. 6. 7. 8. 9. ve 10. hanelerin toplamından elde edilen sonucun 10’a bölümünden kalan, yani Mod10’u bize 11. haneyi verir.

Kütüphanemde bulunması için bu kurallara göre bir Python doğrulama metodu yazayım dedim. Ortaya şöyle birşey çıktı:

Herhangi bir hata ya da eksik gördüğünüzde iletin lütfen.

Django geliştirme ortamı için basit statik sunucu

Django‘da web uygulamaları geliştirirken, geliştirme ortamında her seferinde beni en çok sıkıntıya sokan mevzu css ve js dosyaları gibi statik dosyaların sunulması işiydi. Böyle bir iş için bilgisayarıma http sunucusu kurmaktan ve bunu konfigüre etmekten hep kaçtım. Ancak bugün tam da aradığım basitlikte bir çözüme ulaştım. Python’un imdadımıza yetişen SimpleHTTPServer modülü ile yazdığımız aşağıdaki tek satırlık komut, bulunduğum klasörü http üzerinden sunma imkanı veriyor:

django-project/static$ > python -m SimpleHTTPServer $portnum

Django projemde, statik dosyalarımın bulunduğu klasörde yukarıdaki komutu $portnum yerine herhangi bir port numarası yazarak çalıştırıyorum. Django projemin settings.py dosyasında da aşağıdaki şekilde statik dosyalarımın yerini ve sunucu adresini bildiriyorum:

1
2
3
4
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = 'http://127.0.0.1:9876/'

Dilerseniz komutu django projesinin kök dizininde çalıştırarak birden fazla klasör için tek bir portu kullanabilirsiniz de:

django-project$ > python -m SimpleHTTPServer 9876
1
2
STATIC_URL = 'http://127.0.0.1:9876/static/'
MEDIA_URL = 'http://127.0.0.1:9876/media/'

Sunucunun loglarını bir dosyaya yazarak arka planda çalıştırmayı dilerseniz, komutu aşağıdaki şekilde de çalıştırabilirsiniz:

django-project/static$ > python -m SimpleHTTPServer $portnum > ~/temp/static-server.log 2>&1 &

Hatta yapılabilecek bir diğer güzellik de, django-admin.py’ın runserver komutunu genişleterek, django geliştirme sunucusuyla beraber konfigürasyondaki bilgilere göre statik sunucuların da çalıştırılması olabilir.

Son olarak, bu yöntemi ağ üzerinden dosya paylaşımı yapmak için de kullanabileceğinizi hatırlatmak isterim. Ağ üzerinde paylaşmak istediğiniz dizinde bu komutu çalıştırdığınızda ağdaki bir diğer bilgisayardan bilgisayarınızın ip adresi ve belirttiğiniz port numarası ile dizininizde gezilebilir ve dosyalar çekilebilir.

Mac OSX Lion’da SSHFS kullanımı

Mac OS Snow Leopard sürümünde Macports yardımıyla kolayca kurup kullandığımız(port install sshfs) sshfs uygulamasını Lion’da kullanmakta sıkıntılar yaşıyoruz zira sshfs’in kullandığı MacFUSE uygulamasının Lion uyumlu bir versiyonu çıkmadı. Lion’da sshfs ile uzak bir noktayı bilgisayarınıza mount etmek istediğinizde aşağıdaki hatayı alıyorsanız, az sonra ileteceğim çözüm sizin de işinizi görecektir:

this MacFUSE library version is incompatible with the MacFUSE kernel extension

SSHFS’i Lion’da sorunsuz olarak kullanabilmek için MacFUSE’un varisi Fuse for OSX’i kullanabilirsiniz. Kendi sayfasından son versiyonunu indireceğiniz Fuse for OSX uygulamasını kurduktan sonra, SSHFS’in Fuse for OSX ile kullanabileceğiniz versiyonunun paketini github’daki downloads sayfasından indirip kurarak sorunsuz şekilde kullanabilirsiniz.

Faydası olması dileğiyle…

Dropbox’ı FTP gibi kullanmak

Dropbox birden fazla bilgisayar, telefon veya tablet üzerinde senkronize bir klasör sahibi olmanızı sağlayan, bu klasörden istediklerinizi başkalarıyla paylaşarak, üzerinde ortak çalışma şansı sunan, son zamanların en güzel yazılım çözümlerinden biri. Biraz daha açmak gerekirse; Dropbox’a ücretsiz üye olup, bilgisayarınıza kurduğunuzda, Belgelerim altında bir klasörünüz artık devamlı Dropbox sunucularına yedeklenmeye başlanıyor. Aynı üyelikle başka bir bilgisayara daha(mesela iş bilgisayarınıza) Dropbox kurduğunuzda, aynı dosyalar otomatik olarak buraya da kopyalanıyor. Herhangi bir bilgisayarda bu dosyalarda bir değişiklik yapıldığında, diğer bağlantılı bilgisayarlara da otomatik yansıtılıyor.

Bu tür teknoloji aslında yeni sayılmaz. Uzak disklerin bilgisayara bağlanması ve bu disk üzerinde çalışmak daha önce de kullanılan bir yöntemdi ancak Dropbox işi oldukça kolaylaştırdı. Aynı dosyalara web tarayıcısı üzerinden, iPhone ve Android uygulamaları sayesinde mobilden de erişebilmek de Dropbox’ı temel ihtiyaç maddesine dönüştürebiliyor.

Bense bu yazıda size Dropbox’ın komut satırı istemcisinin sağladığı bir nimetten bahsetmek istiyorum.

Yerimizi bilelim

Blog yazmaya başladığım yaklaşık 6 yıl öncesinden itibaren, blogumun kişisel ve teknik içeriğinin bir arada sunuluyor olmasından rahatsızlık duymuşumdur. Zira websayfamda yazdıklarımı takip etmek isteyenlerin bir kısmı çalışma arkadaşlarım veya ilgilendiğim teknik mevzularla ilgisi olan yazılımcı topluluğu iken, diğer bir kısmı ise, ailem, okul arkadaşlarım, değişik hobiler vesilesiyle tanıştığım kişiler veya bir şekilde internet ortamında beni tanıyanlardan oluşuyor. Hal böyle olunca, siteye teknik bir yazı eklediğimde teknik mevzulara uzak bir çok takipçi için gereksiz ve manasız bir içerik önlerine düşüyor. Tam tersi şekilde, sanatla veya gündem mevzularıyla ilgili düşüncelerimi yazdığımda ise, bir çok teknik takipçim “hep böyle şeyler yazacaksan beni yorma” diye düşünüyorlardır muhakkak.

Bu problem aslında bir alanda kendini gösteren herkesin sosyal mecraları kullanması konusunda kendini gösteriyor. Bir fotoğrafçı, Twitter’da yazarken, kendisini takip eden binlerce fotoğraf severin baskısıyla, bir Fenerbahçe-Galatasaray eleştirisi yazmaktan çekinebiliyor. Veya tanıdık bir firmanın genel müdürü olarak tanınan ve takip edilen birinin, hesabından yemek izlenimlerini paylaşması, takipçileri arasında homurdanmaya sebebiyet verebiliyor. Aslında bu probleme Google+ “çevreler” özelliğiyle hatırı sayılır bir çözüm üretmiş durumda. Ancak konuyu dağıtmamak için ona girmiyorum.

Velhasıl-ı kelam, ben de artık yazacağım yazılarımı iki farklı siteye bölmeye karar verdim. Bundan böyle muratcorlu.com sitesinden teknik bir içerik sunmaya çalışacağım. Şimdiye kadar varolan ve kişisel içeriklere de sahip olan sitemi de bundan böyle muratcorlu.net adresimden yayınlamaya başlayacağım.

Bunun tüm takipçilerimi(böyle yazınca karizmatik oluyor ama aslında onlar 3 kişiden ibaretler) mutlu edeceğini ümid ediyorum.