Thursday, January 8, 2009

Web uygulamasını deploy ederken python yardımı

Yazdığım bir web uygulamasının dosyalarını web sunucusuna ftp ile göndermeye çalışırken çektiğim eziyet yüzünden aşağıdaki özellikleri içeren bir script yazmaya karar verdim.
    Script;
  1. Benim seçeceğim bir klasör altındaki tüm dosyaları tarayacak.

  2. Benim belirteceğim süre içerisinde güncellenmiş dosyaları bulacak.

  3. Bulduğu dosyalar CVS (.cvs) ya da SVN (.svn) tarafından kullanılan dosyalar olmayacak

  4. Seçilen dosyaları belirteceğim bir sunucunun belirteceğim bir klasörüne secure ftp ile kopyalacak.

Python standart library içerisisinda ftp istemcisi için ftplib modülü bulunuyor. Fakat bu modül güvenli bağlantıyı (SSH2) desteklemiyor. Bu devirde de ssh haricinde bağlantı kabul eden hosting firması yoktur diye tahmin ediyorum. Google'a arama yaparken Paramiko adındaki modülü buldum. Eğer easy_install kurulu ise paramiko'yu kurmak çok kolay. Burada paramiko kurulumundan bahsetmeye gerek yok zaten README dosyasında detaylı bir şekilde anlatmış adam. Bir hayırsever de paramiko modulünü almış ve üzerine basitleştirilmiş, http://media.commandline.org.uk/code/ssh.txt adresinden indirebileceğiniz python kodunu yazmış. Ben de bu kadar hazır yazılmış kodun üzerine asağıdaki satırları yazdım.

import subprocess
import sys
from ssh import Connection

if len(sys.argv)<4:
print 'usage : python ' + sys.argv[0] + ' source_dir destination_dir hour(s)'
sys.exit()

source_dir = sys.argv[1]
destination_dir = sys.argv[2]
minutes = 60 * int(sys.argv[3])

findCommand = 'find ' + source_dir + ' -type f -mmin -' + str(minutes)
process1 = subprocess.Popen(findCommand.split(), stdout=subprocess.PIPE)
process2 = subprocess.Popen('grep -v .svn'.split(), stdin=process1.stdout, stdout=subprocess.PIPE)

files = process2.stdout.read().strip().split('\n')
host = 'HOST'
username = 'USER'
password = 'PASSWORD'
print 'connecting to ', host
ftp = Connection(host, username=username, password=password)
print 'connected.'
for file in files:
local = file
remote = destination_dir + file.split(source_dir)[1]
print 'sending file ', local, ' to ', remote
ftp.put(local, remote)
ftp.close()
print 'connection closed.'

Yeni güncellenmiş dosyaları bulup bunlar arasından SVN(subversion) dosyaları ayıklamak için linux find ve grep komutlarından yararlandım. Örneğin:
find . -type f -mmin -60 |grep -v 'svn'

komutu bulunduğun dizindeki dosyalardan (klasörler hariç) son 60 dakika içinde güncellenenleri bulur. (subversion dosyalari hariç)
Python ile sistem komutlarını çalıştırmak için subprocess modülünü kullandım. Subprocess modülü ile
  • Sistem komutları çalıştırılabilir.
  • Bir process'in çıktısı başka bir process'e girdi olarak yönlendirilebilir(pipe)
  • Çalıştırılan process'in çıktısı python script'i içinden okunabilir.

Yukarıdaki script'te find komutu çıktısı subprocess modulu yardımı ile grep komutuna veriliyor ve sonuç grep process'inin stdout alanından okunuyor. Yukarıdaki script'i ftp.py olarak kaydettim. /home/ilkinulas/projects/webapps/test dizini altındaki son 5 saat içinde güncellenmiş dosyaları ftp ile web sunucusundaki /home/ilkinulas/webapps/ dizinine atmak için aşağıdaki komutu yazmak yeterli oluyor.
python ftp.py /home/ilkinulas/projects/webapps/test /home/ilkinulas/webapps 5

Thursday, December 4, 2008

Django uygulamasını deploy etmek


Django uygulamamı deploy ederken karşılaştığım sorunu ve sorunun çözümünü paylaşmak istiyorum. Bilişim Terimleri sitesi deploy teriminin Türkçe karşılığı icin yerleştirme, konuşlandırma terimlerini kullanmış. Fakat bu karşılıklar bana biraz komik geldiği için ("Abi dün gece uygulamayı yerleştirirken problem oldu" gibi), ben "deploy" terimini Türkçeye çevirmeden kullanmaya devam edeceğim.

Bu yazıda bahsettiğim Django (cango diye okunuyor) Tatlı Kaçıklar dizisinde oynayan Mehmet Ali Erbil'in köpeği değil Python ile geliştirilmiş bir Web Framework. Python ile geliştirilmiş onca web framework arasından Django'yu seçmemin nedeni çok iyi bir dokümantasyona sahip olması (gerçekten çok iyi, abartmıyorum) ve web sitesinde yapılan şu Django tanımı oldu :

Web Framework For Perfectionists With Deadlines


Kısaca Django reklamı yaptıktan sonra ana meseleye gelelim. Yazının bundan sonrası Django ile ilgilenmeyenler için sıkıcı olabilir baştan söyleyeyim.
Django, uygulama ayarlarını setting.py dosyasından okur. Genelde development ve test yaparken kullandığınız ayarlar ile production ortamında kullandığınız ayarlar aynı olmaz. En basit örneği database ayarları: url, database adı, kullanıcı adı, şifre gibi.. settings.py dosyasını production sunucusuna upload ettikten sonra her seferinde gidip settings.py'de production ayarlarını yapmak bir süre sonra insanı bayar. Uygulamayı deploy ettikten sonra sağını solunu değiştirmeden çalıştırabilmek için setting.py dosyasına aşağıdaki numarayı çekiyoruz: (Dosyanın sonuna bu satırları yazıyoruz)

try:
from settings_local import *
except ImportError:
pass

Bu sayede Django settings.py'deki ayarları yükledikten sonra settings_local.py dosyamızdaki ayarları yükler. settings_local.py dosyasında development ve test platformunda kullanmak istediğimiz ayarları yazarız. settings_local.py dosyasını production sunucusuna upload etmemize gerek yok, çünkü bu dosyada çalışma ortamımızın production ortamından farkını yazıyoruz. Örnek bir settings_local.py dosyası şu şekildedir:

DEBUG = True

DATABASE_ENGINE = 'mysql'
DATABASE_NAME = 'tututil'
DATABASE_USER = 'nikli'
DATABASE_PASSWORD = 'drowssap
DATABASE_HOST = ''
DATABASE_PORT = ''

MEDIA_ROOT = '/var/www/GOF'
MEDIA_URL = 'http://localhost/gof/'

settings_local.py dosyası settings.py ile aynı klasörde olmalıdır. Dosyalarınızı FTP ile production sunucusuna gönderirken aman dikkat edin settings_local.py dosyasını göndermeyin.

Wednesday, October 29, 2008

Sonunda evlilik telaşı bitti

22 Ekim'de balayı tatilinden dönüp, 23 Ekim'de iş başı yaptım. Daha yeni yeni tatil havasından çıkıyorum. Söz verdiğim gibi yazılara evlilik sonrası daha çok zaman ayıracağım.

Geçenlerde günlüğe yeni bir yazı yazmak için kolları sıvamıştım ki ne göreyim TELEKOMÜNİKASYON İLETİŞİM BAŞKANLIĞI yine yapacağını yapmış; Blogger servisine Türkiye'den erişimi kapatmış. Tünel servisleri aracılığı ile erişim açık olmasına rağmen içimdeki yazma hevesini kırdığı için tatil sonrası ilk yazım bugüne kadar sarktı.

Balayı tatilimiz için Nurten'le Maldivler'e gittik. Yüzlerce adadan oluşan bu ülkede kendi bütçemize göre bir ada seçtik ve çantamızı sırtlanıp Maldivler'in yolunu tuttuk. Katar aktarmalı 10 saatlik bir uçak yolculuğundan sonra Maldivler'in başkenti Male'ye ulaştık. Male'den tatilimizi geçireceğimiz Sun Island adasına transferimiz de deniz uçağı ile oldu. Yeryüzündeki cennete benzetilen Maldivler'de 6 gün geçirdikten sonra gözümüz arkada kalarak dönüş yolculuğuna başladık.

http://picasaweb.google.com/ilkinulas/MaldivesEkim2008 adresinde tatilde çektiğimiz fotoğraflara göz atabilirsiniz.

Aşağıda fotoğraf makinası ile çektiğim ve benim ilginç olduğunu düşündüğüm videolar var. İlk video Sting ray denilen balığın (bu balığın türkçe ismini bilmiyorum. Bilen varsa söylesin lütfen) kendini insanlara nasıl sevdirdiğini, insanların elinden nasıl yemek yediğini görebilirsiniz.



İkinci videoda ise su altı kamerasına alternatif olarak su üstü kamerası ile yaptığım çekimleri izleyebilirsiniz :)



Maldivler bizim için unutulmaz bir deneyim oldu. İlk başta Maldivler'de bir hafta tatil için harcayacığımız para ile Türkiye'de bir ay tatil yaparız diye düşünüyordum. Fakat beyaz kumlar üzerinde güneşlenip,ılık okyanus suyunda mercanlar ve rengarenk balıklar arasında yüzdükten sonra balayımız için Maldivler'i seçmenin ne kadar iyi bir tercih olduğunu anladım.

Friday, September 26, 2008

Evleniyorum...


Selam dostlar, uzun zamandır yazamadım. Bu suskunluğumu güzel bir haberle bozayım dedim. 11 Ekim 2008'de memleketim Denizli'de evleniyorum. 8 Ekim 2008 Çarşamba günü İstanbul, Salon Palmina'da bir düğünümüz var, hemen sonrasında 11 Ekim Cumartesi Denizli'de nikah törenimiz var. Tüm dostlarım davetlidir.

Evlilik telaşı biter bitmez yazılarıma devam edeceğim.

Monday, August 11, 2008

Google Chart API artık QR Codes da destekliyor

Günlüğe ilk yazılarımı eklemeye başladığımda QRCode'lar ile ilgili bir yazı yayınlamıştım. QRCode'un ne olduğundan, nerelerde kullanılabileceğinden bahsetmiştim. Geçenlerde Google Code Blog'ta 'QR Codes now available on the Google Chart API' yazısını görünce bunu siz sevgili blog okuyucularımla paylaşayım istedim.
Google Chart API ile nasıl QR code oluşturulacağı bu sayfada detaylı bir şekilde anlatılmış. Ben olayı bir tane örnek vererek özetlemek istiyorum.
Google'a size bir QR code üretmesi için aşağıdaki bilgileri vermeniz gerekiyor:

  • chs : QR Code olarak çizilecek resmin boyutu (chart size)
  • cht : Chart tipi
  • chl : Encode edilecek text. (örneğin bir URL)
  • choe : output encoding (örneğin UF-8)
    QR Code grafiğini çizdirmek için http://chart.apis.google.com/chart adresine, yukarıda sıralanan parametrelerin gönderilmesi gerekiyor. Bunu HTTP GET ile yapabilirsiniz. http://www.oksijen.com URL'ini QR Code içine gömmek için aşağıdaki resim URL'ini kullanabiliriz.

    <img src="http://chart.apis.google.com/chart?cht=qr&chs=200x200&chl=http://www.oksijen.com"/>



    Yukarıdaki resmin içerisinde http://www.oksijen.com URL'inin gömülü olduğuna inanmayanlar
    herhangi bir J2ME QR Code okuyucusunu cep telefonlarına kurup resmin içinde ne kodlandığını görebilirler.

  • Saturday, June 28, 2008

    TechCrunch & Webrazzi MeetUp Notları

    Bugün TechCrunch & Webrazzi MeetUp'a katıldım. Conrad/Istanbul Otel'de gerçekleşen etkinlik ile ilgili notlarımı paylaşmak istiyorum. Arda Kutsal'ı böyle bir etkinlik düzenlediği için tebrik ediyorum. Titizlikle seçilmiş panel konuları ve konuşmacılar bu güneşli cumartesi gününü bir konferans salonunda sıkılmadan geçirmeme yetti. Yaklaşık 400 kişinin katıldığı MeetUp'ta 7 ana panel vardı:
    1. Sosyal platformlar ve sosyal medyada pazarlama
    2. Kullanıcı içeriğinin yarattığı Web 2.0 hukuku
    3. Online reklam pazarı ve geleceği
    4. Türkiye’de web girişimciliği, yatırım imkanları ve çıkış stratejileri
    5. StartupPad
    6. Grou.ps Global Announcement
    7. European Startup Scene

    Sosyal platformlar ve sosyal medyada pazarlama:


  • Kariyer.net'i temsilen gelen Pazarlama Direktörü Ayça Arsan, Kariyer.net'in reklam harcamalarının 40%'ının internet reklamcılığına ayrıldığını söyledi. Internet reklamcılığının Türkiye'deki reklam piyasasının 2%'sini oluşturduğunu duyduğumda çok şaşırdım.
  • Can Karatoprak, meşhur facebook uygulması Rakı Sofrası'nın yazarı, Rakı Sofrası'nın 1 milyon 50 bin üyesi olduğunu söyledi. Rakı Sofrası gibi basit bir uygulamanın bir şirketi çekip çevirecek paralar kazandırdığını duymak, dikkatimi yeniden facebook platformuna çevirmeme sebep oldu. Can Karatoprak'ın dediğine göre şirketi BizBilişim Çözümleri, Mey İçki ile sağlam bir reklam anlaşması yapmış.

    Kullanıcı içeriğinin yarattığı Web 2.0 hukuku


  • Ekşisözlük'ünde avukatlığını yapan Av. Başak Purut, Türkiye'de bazı savcıların Internet'in ne olduğundan haberlerinin olmadığını, bu savcılar yüzünden youtube ve wordpress'in uzun süreler kapalı kaldığını söyledi.
  • TBD İstanbul Yönetim Kurulu Üyesi Av. Ceyda Cimilli Akaydın, Türkiye'deki bilişim davalarında bilirkişi sıkıntısının yaşandığını söyledi. Ceyda Hanım, isteyenlerin mahkemelere bilişim alanında bilirkişi olmak için başvurabileceklerini ve bilirkişi olarak görev yapmaları durumunda dava başına 300-400 YTL gibi paralar alabileceklerini söyledi. Bu sözün üzerinde salondakilerin bir anda gözleri parladı :)
  • Günün en eğlenceli konuşması Radikal Gazetesi Teknoloji Editörü Serdar Kuzuloğlu'nun konuşmasıydı. Internetin Türkiye'ye gelişinden günümüze kadar geçen sürede kendisinin bilişim adına yaptıklarını anlattı. Radikal Gazetesindeki bir habere yapılan yorum yüzünden kapama davası açılması üzerine, veritabanından elle ilgili yorumu silip davadan yırttığını anlattığında salon kahkahalara boğuldu.

    Online reklam pazarı ve geleceği


  • Bu panel'de, yayın yapanlarla reklam verenleri buluşturan şirket sahipleri Okyar Özlüpınar - Yönetici Ortak, ReklamZ ve Sarper Danış – Ortak, ZapMedya konuşmalar yaptı. Türkiye'de, reklam verenlerin Internet'in gücünden habersiz olduklarından basettiler. Reklam alanında geridönüşün en fazla olduğu ortamın Internet ortamı olduğunu söylediler.
  • Google Türkiye Ülke Müdürü Bülent Hiçsönmez'in, Google AdWords hakkında konuşmaması ilgi çekiciydi. Herkesin bildiği klasik "Internet gelecektir" sözleriyle konuşmasını geçiştirdi.

    Türkiye’de web girişimciliği, yatırım imkanları ve çıkış stratejileri


  • Panelin bu bölümünde Türkiye'deki başarılı girişimcilere ve bu girişimcilerin deneyimlerine yer verildi.
  • Cember.net kurucusu Çağlar Erol, Çember.net'i eşi ile beraber yazdığını 2 sene gibi kısa bir sürede 4 milyon dolara XING'e sattığını anlattı.
  • Startup şirketlerinin ömürlerinin çok uzun olmadığından, sektörde palazlandıktan sonra devler tarafından satın alınmadıklarında web'in karanlık sayfalarında kaldıkları söylendi. Girişimcilere para yatıran LeVenture'nin kurucu ortaklarından Cem Dalgıç, startup'ların mutlaka bir çıkış planının olması gerektiği söyledi.
  • Devrim Demirel Blogcu.com'u Nokta A.Ş. nasıl sattığını, Ersan Özer de itiraf.com'u GittiGidiyor'a nasıl sattığını anlattı. Milyon dolarla ifade edilen rakamlar inanın başımı döndürmeye yetti.

    StartupPad


  • Kindo.com, Mekanist.net, Mülakat.Net ,TakasMerkezi.com, Wridea tanıtımları yapıldı.
  • Benim için günün en şok edici anı, Mekanist.net'in, yaklaşık bir sene önce karşılaştığım ve bunun yerli versiyonunu yapabilir miyim acaba diye düşündüğüm yelp.com'un yerli versiyonu olduğunu gördüğüm andı.
  • Sunday, June 1, 2008

    Barış Manço ve Cacık


    Çocukluğumdan beri severek dinlerim Barış Manço'yu. "Barış Manço ile 7'den 77'ye" programını her pazar izlerdik ailecek. Daha sonra "Adam Olacak Çocuk" ile çıktı karşımıza Barış Abi. Çok iyi hatırlıyorum, üniversitede hazırlık okuduğum zamanlarda, "Barış Manço Taksim Marmara Cafe'de cam kenarında oturuyor" diye bir haber geldi biz üniversite kantininde otururken. Yarım saatte Ortaköy'den Taksim'e uçtuk resmen. Baktik ki harbiden Barış Manço Marmara Cafe'de üst katta cam kenarında oturmuş birileriyle konuşuyor. Yarım saat boyunca The Marmara'nın karşısından izlemiştik Barış Abi'yi.

    Bu sabah "Sözüm Meclisten Dışarı" albümünden bir parçasını dinledim. Kendisini zaman zaman hıyar gibi hissedenler için bu parçanın sözlerini buradan paylaşmak istedim.

    Sözüm meclisten dışarı dostlar Söz-Müzik: Barış Manço
    CACIK 
    
    Bugünlerde kendimi hıyar gibi hissediyorum
    Hani dilim dilim doğrasalar beni
    Marmara Ege Karadeniz ve hatta Akdeniz cacık olur diyorum
    
    Derdim öylesine büyük ki dostlar
    Kırka yarıp yine kırka bölseler
    Ve kırk bostana gübre diye serpseler
    Kırkbin tane ot biter de kırkbin derde deva olur diyorum
    
    Ne oldu bana böyle durup dururken
    
    Oğlan aldı başını gitti kız zaten lafımı dinlemezdi
    Düğmem kopuk paçam sökük oramda buramda çengelli iğneler
    Bir de çengelli iğne nazar bozar derler
    
    Hanımın çorabı kaçık başında bigudiler
    Karabaş bile, karabaş bile suratıma bakıp bakıp havlıyor
    Öğünmek gibi olmasın ama dostlar
    Kendimi hıyar gibi hissediyorum
    
    Hani ince kıyım doğrasalar beni Akdeniz cacık olur diyorum
    
    Ve hatta Atlas okyanusu ve hatta Hint okyanusu
    Ve hatta hatta Büyük okyanus bile cacık olur diyorum
    Böyle cacığa rakı mı dayanır
    
    Çivi çiviyi söker derler soğuktan donanı buzla ovarlar
    Ben zaten yanmışım dostlar peki beni fırına mı koysalar
    Zeytin suyuna kuru ekmek böyle gelmiş böyle gidecek