24 Ocak 2012 Salı

tumblr'a taşındım oradan devam: http://miratcan.tumblr.com

14 Aralık 2011 Çarşamba

Tornado'mu Node.js mi dedim kendi kendime...

Yeni ve artık son okul dönemi ile birlikte Lookremix projesinden ayrılmak zorunda kaldım. Bir startup içerisinde bulunmak oldukça eğitici oldu benim için. Hem bir sosyal medya aracının oluşturulurken ne gibi badireler atlattığını görmüş oldum. Hem de bir yazılım geliştirici olarak daha önce hiç el atmadığım meselelere el atmak durumunda kaldım. Bunun yanında venezuelalı kadınların nasıl çekilmez olabileceğini devamlı sizle nasıl dalga geçmeyi başarabileceğini öğrenmiş oldum :P. Benim için oldukça çetrefilli ama bir yandan da oldukça zevkli bir iş oldu. Keşke daha fazla devam edebilseydim diyorum ama belli olmaz belki ileride yollarımız tekrar kesişir.

Şu anda ise ilk göz ağrım bilsin'i tekrar ayağa kaldırmak için elime bir fırsat geçti. Geçerli sosyal medya araçlarının zayıflığı ve bilsin'in neden güçlü bir araç olacağı konusunda okuldaki jüriye yaptığım sunum oldukça ikna edici oldu ve şu bilsin resmi olarak bitirme projem haline dönüştü. Ancak çok çalışmam gerek çünkü şu anda her ne kadar kırık dökük de olsa çalışan bir alet (tool) görünümü verse de aslında kafamdaki ideolojiden ve sağlamlıktan uzak durumda.

Projeye daha önce başlarken yaptığım yanlış teknoloji seçimlerini ve kervan yolda düzülür diyip yolda yol değiştirmeleri (gerçekten çok fazla enerji ve kaybı oluyor) tekrar yaşamamak için mümkün olduğunca belgeli, planlı davranmaya çalışıyor. Çıkacak sorunları mümkün olduğunca ön görmeye çalışıyorum. Blog üzerinden çok fazla ayrıntı vermeyi uygun görmüyorum ama projenin %90'ının sağlam restFul api oluşturmaktan geçtiğini ve mümkün olduğunca akışkan bir yapıda olacağını söyleyebilirim. Tabi bu noktada Django kullanmak bir az saçma oluyor zira api yazmak için context processorlere ya da template sistemine ihtiyaç duymuyorum. Bunun yanında Django ile long pooling yapmak ya da websockets kullanmak deveyi at yarışına sokmak gibi bir şey olurdu.

Bu noktada Node.js gel beni kullan diye göz kırpıyor, diğer kolumda da Tornado var. Bunları kendimce karşılaştırmaya çalıştım ancak eğer yanlış bilgi verdiğimi, yanıldığımı düşünüyorsanız lütfen yorum bırakın.

Performans

Node.js Google beyin V8 adlı javascript motorunu kullanıyor. Javascript kodları derlenip makina diline çevriliyor. Bu da kallavi bir hız demek. Tornado ise bunu ta ki Python 3.3 çıkana kadar yapamayacak(mış). İzlediğim node.js sunumunda yapılan testte ki bu test sadece bir "hello world" testi. Node.js saniyede 4340 cevap verebilirken tornado ise sadece 2344 cevap verebilmiş. Sözün özü Node.js performans konusunda Tornado'yu ikiye katlıyor.

Dil Yapısı

Bu noktada Tornado golünü atıyor zira hiç bir programcının Python varken Javascript kullanmak isteyeceğini sanmıyorum. Javascript'in iğrenç bir syntax yapısı var. Bu Python sever birinin şahsi fikri olmakla beraber, pek çok kişinin de noktalı virgül ya da memeli parantezler ile boğuşmak isteyeceğini sanmıyorum. Hoş, syntax olayı CofeeScript sayesinde çözülebiliyor ancak yine de dahili standartlaşmış kütüphanelerin eksikliği hissediliyor. Bir each döngüsü yaratmak için bile harici bir kütüphaneye ihtiyaç duymak, bende huzursuzluğa yol açıyor. Yengeç burcu programcılar için önermiyorum. :)

İkinci olarak javascript ilk defa browser dışında bir mecrada iş görmeye başladığı için bir çok kütüphane olgunlaşmamış durumda. Halbu ki Python 1994 de 1.0 versiyonuna ulaştı yıllardır her konuda kütüphane geliştirilmekte kendisi için. Node.js nin şu anki versiyonu 0.4.1 Tornado'nun ise 2.1.1.

Üçüncü olarak, Javascript in doğal halinin etkinlik tabanlı (event-driven) bir dil olduğunu bu yüzden geliştirilen kütüphanelerin haliyle asenkron kütüphaneler olduğunu. Python ise aslında sıralı (satır satır) işlenen bir dil olması itibari ile Tornado ile kullanacağınız kütüphanelerin özel olarak asenkron olarak yazılmış kütüphaneler olması gerektiğini eklemem gerekiyor. Anlayacağınız Tornado içinde mysqllib'i direkt olarak import edip kullanamıyorsunuz. Bunun yerine asenkron çalışacak şekilde tasarlanmış mysql kütüphanesi ne ise onu bulup kullanmanız gerekiyor.

Ancak ilginçtir ki her ne kadar Tornado daha olgun olsa da içerisinde bir session management olayı bulundurmuyor. Bu bana çok garip geldi. Sanırım Django'da ki:

if user.is_authenticated():
   ...
   ...

Türevi sorular soramayacağımız manasına geliyor Tornado'ya. Belki authentication olayları başka türlü cookie tabanlı atraksiyonlarla (OAuth?) çözülüyordur bilemiyorum.

Topluluk

Node.js'in çok heyecanlı bir topluluk henüz bir velet olmasına rağmen inanılmaz ilgi görüyor. Aşağıdaki bu rakamlar söylediğimi kanıtlar nitelikte: (Fork, Takipçi ve İlgili Depo sayılarını Github'dan aldım)

Fork Takipçi İlgili Depo Eposta Listesi
Tornado 510 3,313 364 1779
Node.js 1,339 11,944 5842 6590

Sonuç

Sonuç olarak Node.js topluluk ve performans olarak Tornado'yu dövüyor gözüküyor. Ancak sanırım geliştiriciler arasında bir garip moda ya da trendin peşinden hızla gitme durumu var. Yeni bir teknoloji afili bir sunumla anlatılıp da bir kaç yerde yazılıp çizildiği zaman hurra herkes o tarafa gidiyor. Sonra herkes sakinleşiyor hangi dili rahat kullanıyorsa onu kullanmaya devam ediyor. Bu yüzden bu 7000 kişilik e-posta listelerini falan biraz şişirilmiş rakamlar olarak görüyorum. Ayrıca bu devasa kitleden kaç tanesi gerçek bir iş görebilmek üzere sizin ofisinize gelip çalışabilecek insanlardır bunu hesap etmek gerek. üç mü beş mi?

Bunun yanında Node.js teoride bu kadar ilgi görmesine rağmen, henüz kendisini savaş arenasında görmüş değiliz. Gerçek - büyük projelerde ne gibi problemler çıkaracağı konusunda pek fikrimiz yok. Tornado ise halihazırda Facebook'un ve FriendFeed'in ağır işlerini gören bir sistem.

Bütün bunlara dayanarak, üzülerek Node.js ye bizimle değilsin diyorum. Zira saniyede 4bin request karşılayabiliyor olması bende yarattığı rahatsızlık hissini gidermeye yetmiyor. Zaten bir gün sunucularım altından kalkamayacağım bir yükle karşılaşırsa zaten para kazanıyorum demektir bir sunucu daha koyarım.

Kaynaklar:

11 Aralık 2011 Pazar

Python İstanbul Buluşması

Bir önceki yazımda Facebook'a sövüp saymış, hesabımı kapattığımı bir zafer konuşması edasıyla anlatmıştım. Ancak final haftası sebebiyle hesabımı tekrar açmak zorunda kaldım; zira okuldaki elemanlarla başka bir şekilde iletişim kurmam imkansız. "Bari hesabımı açtım gelen saçma sapan davetler kimden geliyorsa engelleyeyim de kurtulayım" derken hiç bakmadığım etkinlikler sayfasına baktım. Bir de ne göreyim? kırk yılın başı mantıklı bir etkinlik daveti gelmiş...

davet

Bu pyist buluşmalarını daha önce bir kaç kez duymuş, gitmek istemiştim ancak nasip olmamıştı. Bu gün sonunda buluşmalarından birine katılmayı başardım. Yaklaşık 3-4 saat boyunca oldukça keyifli bir sohbet oldu. Mengü bize güzel bir TurboGears sunumu yaptı. Özet geçmek gerekirse Pylons ile Django arasında kalan bir framework TurboGears. Sizi template sistemi seçmek, orm seçmek gibi özgürlüklere kavuştururken yönetim paneli vermek ya da veri modellerinden formlar üretmek gibi nimetlerden de mahrum bırakmıyor.

Her ne kadar sunum eksiksiz olsa da biz Django Cumhuriyeti'nin elamanları olarak "Neden TurboGears kullanayım ki?" sorusuna pek tatmin edici cevap alamadık diye düşünüyorum. Örneğin Django'da SqlAlchemy kullanmak oldukça zor, takla attıran bir işlem. Django sizi kendi orm'sini kullanmaya zorluyor. Bunu TurboGears'ta kullanmak ise oldukça kolay. Ancak soru şurada ki neden buna ihtiyaç duyayım? Şimdiye kadar Django'nun sorgu setlerinin işimi görmediği hiç olmadı. (Ancak yinede kişisel görüşüm olarak Django'nun generic foreign keyler'lere ulaşırken, sorgular biraz karmaşıklaştığı anda çekilmez olabildiğini söylemem gerek). Neyse sözü fazla uzatmadan Django'nun bana henüz "artık yeter ben senin ihtiyacını karşılayamıyorum başkasına git" demediğini söylemem gerek. Belki zamanla kalkıştığım işler karmaşıklaşır Django bana yetmemeye başlar orasını bilemiyorum. Sanırım biraz da zevk meselesi bu frameworkler arası geçişler yapmak :)

Bunun dışında "abi bu javascript sevilir mi yeaaa" türevinde çıkışlar yaparak gelecek cevapları tarttım. Ben nefret ediyorsam herkes etmeli değil mi? Sanırım herkes onun antik bir dil olduğu konusunda hemfikir ancak bu başaçıkılmaz olduğu anlamına gelmiyor. Arkadaşların bu konuda okumamı önerdikleri kitap ise Douglas Crockfold'un Javascript: The Good Parts kitabı. Mümkün olan en yakın zamanda almayı planlıyorum. Artık e-book olarak ya da A4 kağıtlarda değil de gerçekten kütüphanemde dursa iyi olacak bu tip kaynakları. Ekrandan yazı okumaktan nefret ettiğimi söylemiş miydim?

Not: Bahsi geçen kitabı araştırırken Douglas denen abinin 2009'da Özgür Yazılım ve Açık Kaynak Günleri'ne geldiğini ve orada uzun bir konuşma yaptığını öğrendim. İzlemek için buraya tıklayabilirsiniz

Aslına bakarsanız buluşma her ne kadar güzel geçti ise de koskoca İstanbul'dan sadece 8 kişinin bir araya gelebilmesi garip geldi bana. Geliştirici tayfasının yani işi devamlı bir şeyler öğrenmek olan insanların bir arada olmaya çok daha fazla ihtiyacı var. Bilgi paylaştıkça çoğalır geyiği tam bu noktada çok işe yarayan bir klişe. Her ne kadar artık yeni iletişim yöntemleri ile bilgi paylaşılabiliyor, soru sorulabiliyor ya da laf atılabiliyor olsa da. Bir masanın etrafında oturup çay-bira içerken konuşmak, el kol hareketleri ve mimikleri kullanmak hala icat edilmiş en hızlı ve verimli iletişim çeşidi. Ayrıca güzel hatıra fotoğraflarına da sebep olabiliyor:

hararetli konuşmalar

Uzun uzun topluluk olmanın neden önemli olduğunu uzun uzun anlatmama gerek yok sanırım hemfikirizdir. Yazıyı burada ufak ufak noktalıyorum. Yine 4 paragraf yazıyı doğrultmak için 2 saatten fazla zaman harcadım :). Ancak Oğuz'un bana gösterdiği şu twit düşünülmeye değer.

Boston, zuckerberg'in Facebook'un temellerini attığı üniversiteyi bıraktığı şehir. Topluluğun bu kadar güçlü olması sebep mi? yoksa sonuç mu?

9 Kasım 2011 Çarşamba

Facebook hesabınızı kapatmak için üçyüzyetmişsekiz sebep

Bir zaman öldürgeci olarak FacebookÖğretmenlerin çocuklara not vermek için tuttuğu defterler vardı ben ilköğretime devam ederken. Bu defterde ad ve soyadının yanında bir de vesikalık fotoğraf olurdu ki öğretmen not verirken o çocuk sınıfta ne kadar aktif ne kadar uyumsuz hatırlayıp ona göre not verebilsin. İşte bu deftere Face Book deniyormuş Amerikan illerinde. Facebook'un asıl amacı bu şekilde ortaya çıkmış: tanıdıklara ulaşabilmek için bir sanal bir yüz defteri oluşturmak. Buraya kadar her şey normal ve kullanılabilir iken daha sonra gerçek sosyal hayatın sanal bir kopyası olmaya çalışan Facebook bokunu çıkartmış ve tam bir zaman terminatörü olarak hayatımızda yer etmiş. Hemde öyle bir girmiş ki bir kere elini veren kolunu kaptırıyor.

Hala arada bir el alışkanlığı ile adres çubuğuna fa.. yazıp dursam da sonunda Facebook hesabımı başarılı bir şekilde dondurmayı başardım. 4 gündür temizim sayılır :) Sonraki aşama ise hesabı tamamen kapatmak. (Evet tamamen kapatmak mümkün şuradan: ) Peki ne değişti hayatında? diye soracak olursanız şu şeylerden kurtulduğumu söyleyebilirim:
  1. Arada bir beni içine çekip saatlerimi alan, yetmezmiş gibi beni belli periyodlarda tekrar gelmeye zorlayan oyunlar.
  2. Birden bire kendini hiç tanımadığı insanların fotoğraflarına bakarken bulmalar.
  3. Üye olmadığım halde Düşsel avuntular, sikimsonik hüzün treni, KopuqLaR gibi sayfalardan gelip bir şekilde önüme düşen iletiler, fotoğraflar, videolar.
  4. Facebook üzerinden kamuya fayda sağladığını zanneden mallar: Profil fotoğrafı değiştirerek terör lanetlemeler. Hz. Muhammed için sekiz saatte bir milyon olalım adlı etkinlikler.
  5. Gerçekten cevap vermem gereken bir etkinlik ya da paylaşım olduğu zaman salak salak videolara dalıp reaksiyon göstermeyi unutmalar.
  6. Bol küfürlü ya da pornografik imalı bir şeyler paylaştıktan bir hafta sonra; paylaşılan şeyin şeyin yenge anne baba tarafından görüldüğünü fark etmeler.
  7. Tamam toplaşırsanız kesin beni de çağırın dediğim arkadaş toplantılarına ait fotoğrafların karşıma çıkması gibi olaylar.
  8. Sevgili olunma yolunda karşı cinsten gelen ilk talebin Facebook'daki ilişki durumunu değiştirmem olması. İlişkiyi reklam filmi tadında yaşamaya zorlanmak.
  9. Hayatımda neler oluyor anlatmak istediğimde Facebook'un beni kendi içine çekmesi (gel diyor tanıdığın bütün insanlar bende gel...), bütün ilhamın bir Facebook iletisine harcanması.
  10. ...
  11. ...

Sözün özü Facebook, yaraması gereken işten başka her işe yarıyor olduğu için hesabımı kapattım. Kapalı tutmayı da düşünüyorum. Şimdi çıkmam gerektiği için yazıyı burada bırakıyorum ancak siz kendi sebeplerinizi yorum olarak yazabilirseniz sevinirim. 378'e tamamlamak lazm listeyi :)

4 Ağustos 2011 Perşembe

Google Code Prettify Nasıl Kullanarak Kod Renklendirme Nasıl Yapılır?

Malum bir python programcıları olarak bir gezegenimiz var artık. Ne mutlu ki katılımcı olmak isteyen arkadaşlar gelmeye de başladılar. Ancak bir iki arkadaşı geri çevirmek zorunda kaldık zira onlardan ufak bir isteğimiz var. Kod bloklarını google-code-prettify ile renklendirmelerini istiyoruz. Bunun sebebi farklı farklı kod renklendirme sistemi ile gelen yazıları gezegen içerisinde düzgün gösteremiyor olmamız. Gezegen içerisinde google-code-prettify çalışıyor. Bu güzel aletin özellikleri ise şöyle:

  • Her hangi bir dil tanımlamasına ihtiyaç duymuyor, dilin ne olduğunu kendisi anlayıp renklendirmeyi yapıyor
  • Kod bloğu çeşitli sayılar, satır numaralarına sahip olsa da çalışıyor
  • Hafif, dosya boyutu küçük ve render işlemi sırasında browser'ı yormuyor
  • CSS kullanılarak temalandırılabiliyor
  • C, Bash, Xml benzeri kodları da renlendirebiliyor

Kullanımı ise çok basit, eğer inline bir kod verecekseniz örneğin aşağıdaki gibi bir cümle kuracak iseniz:

Bir listeyi oluşturmak için değişkenin karşısına liste elemanlarını sepet = ["elma", "armut", "cilek"] gibi köşeli parantez içerisine virgülle ayırarak vermeniz yeterlidir.

Sadece cümlede kod olarak belirtmek istediğiniz yeri "code" etiketi altıa alın ve sınıf ismi olarak "prettyprint" verin.

Eğer inline değil blok olarak kod verecekseniz örneğin aşağıdaki gibi bir şey çıkarmak istiyorsanız:

from os import uname, getcwd
from os.path import join
MACHINE_NAME = uname()[1]

if MACHINE_NAME == "XXX.webfaction.com":
    DOCUMENT_ROOT = "/path/to/document/"
else:
    DOCUMENT_ROOT = getcwd()
    DATABASE_ENGINE = 'sqlite3'
    DATABASE_NAME = join(DOCUMENT_ROOT,'sqlite3.db')

yine prettyprint sınıfı ile ancak bu sefer pre etiketi ile çerçeveleyerek bloğumuzu veriyoruz.

Yazıyı yazarken kodun gezegen içerisinde düzgün çıkması için yapmamız gerekenler sadece bu ikisi. Kendi blogunuzda çalışmasını sağlamak için ise ilgili js dosyasını ve tema galerisinden seçtiğiniz bir css dosyasını sayfa başında implemente ettikten sonra sayfanızın body etiketine onLoad="PrettyPrint()" parametresini vermeniz yetiyor.

Ayrıca isterseniz gezegenin html kodunu inceleyebilirsiniz.

17 Temmuz 2011 Pazar

Diyete Başlanılan Günün Anatomisi

10:00
Önceki gün kahvaltı için alınmış kırmızı eriklere doğru gidilir. Bir tane büyük ve olgun erik yıkanır. O erik sanki acayip doyuracakmış ve bünyeye neşe katacakmış gibi düşünmeye çalışarak bir güzel yenir. Ancak erik yedikçe ağızda büyümekte giderek ekşimektedir. Çay poğça eski kaşar bekleyen mide burulur, hüzünlenir. Burukluktan ötürü eriğin ancak yarısı yenebilmiştir. mide isyandadır.
10:30
Peksimet ile mideye bir mektup gönderilir. Mektupta "İsyanı bırak, eğer acıkmaya burulmaya devam edersen olacaklardan ben sorumlu değilim." yazmaktadır.
11:00
Mide elçiyi asit havuzunda boğar, bu kaçınılmaz bir savaş ilanı demektir.
12:10
Marul, domates, turp ve ton balığı bölüklerinden oluşan büyük bir salata ordusu mutfak tezgahının üzerindeki tabağın üzerinde mevzilenir.
12:30
Salata kuvvetleri "İnsan" boğazından geçerek mideye giriş yapar, yaklaşık 20 dakikalık yoğun mücadeleden sonra savaş kazanılmış, ancak eldeki bütün kaynaklar tüketilmiştir.
13:30
Tekar açlık başlar, bünye enerjisiz hissetmektedir.
14:30
İnceden bir baş ağrısı başlar
15:30
Sırf spor olsun diye (vallahi bak) yürüyüşe çıkılır, böylelikle açlık unutulacak hemde kalori yakılacaktır
16:30
yenilgi...

15 Temmuz 2011 Cuma

Barselona'dan bir fıstık :)

İspanyol insanında biraz tembellik var. En hayati ihtiyaçları sunan dükkanlar bile akşam 5 oldu mu kapatıyor. Hafta sonları ise hiç açmıyorlar. Açıkçası ben bir Türk olarak bu güne kadar hafta sonu açmayan dükkan görmemiştim. Ama Allah'tan göçmenler var ve oldukça çalışkanlar. Şu an oturduğum mahallede akşam altıdan sonra yemek yemem gerektiğinde gittiğim Çin lokantası da Çinli (ya da Japon) göçmenlere ait. Çin lokantası dediğime bakmayın aslında hamburger tost falan yapıyorlar. Gide gele alıştık oradaki insanlarla birbirimize. Aynı dili konuşamasak da aramızda güzel bir iletişim var. Sabahları bana çikolatalı poğaça ısmarlayan bir teyzem bile var orada. Ancak bazen gerçekten çevirmene ihtiyaç oluyor. O zaman li çi devreye giriyor, sizi kendisiyle tanıştırayım,

li çi

Dükkandaki tek ingilizce bilen kişi o, ve annesi onunla gurur duyuyor. Kendisi tam bir halkla ilişkiler uzmanı, ben daha onun adını ezber edemeden o kolamda limon sevdiğimi, ve kahveyi sütlü ve küçük fincanda sevdiğimi çoktan öğrenmişti. :)

fıstık :)

O bana İspanyolca kelimeler öğretiyor ben de onun İngilizce'sini pratik etmesine yardım etmiş oluyorum. Bir de dükkana takılan kıvırcık saçlı bir eleman var. Sanırım ona aşık, çünkü eleman ne zaman gelse pek bir şımarıyor bizimki. :) Şimdilik bu kadar.

14 Temmuz 2011 Perşembe

Python'da listenin kopyasını almak

Python da her eşitlik referans gösterir. Bu iddalı lafın anlamını şöyle ifade edeyim.
Örneğin şekildeki gibi bir liste = başka bir liste şeklinde kopya almaya çalıştığınızda şöyle bir gariplik (aslında güzellik) ile karşılaşırsınız.

a = ["a","b","c"]
>>> b = a
>>> b.append("d")
>>> print a, b
['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd']
Nesnelere gelince yine aynı mantık, nesne = başkabirnesne dediğinizde referans göstermiş oluyorsrunuz :

>> class obj:
...     def __init__(self):
...         self.counter = 0
...     def inc(self):
...         self.counter += 1
... 
>>> a = obj()
>>> b = a
>>> a.inc()
>>> print a.counter
1
>>> print b.counter
1
Bir nesnenin ya da değişkenin kopyasını almak istediğinizde çeşitli yöntemler var, sanırım verilerin (list, tuple, dict vs) kopyasını alırken karşılaştığım en yakışıklı yöntem şu :

>>> a = ["a","b","c"]
>>> b = list(a)
>>> print a , b
['a', 'b', 'c'] ['a', 'b', 'c']
>>> a.append("d")
>>> print a, b
['a', 'b', 'c', 'd'] ['a', 'b', 'c']

Peki bir nesnenin kopyasını almak istiyorsak? bunun için copy adında bir modül yapmışlar:

>>> class obj:
...     def __init__(self):
...         self.counter = 0
...     def inc(self):
...         self.counter += 1
... 
>>> a = obj()
>>> from copy import copy
>>> b = copy(a)
>>> a.inc()
>>> b.inc()
>>> b.inc()
>>> b.inc()
>>> print a.counter, b.counter
1 3

Eğer copy modülünden deepcopy fonksionunu import eder kullanırsak, nesneyi özyinelemeli olarak kopyalıyormuş. Herkese iyi hafta sonları :)

Django'da iki sunucuda birden çalışmak ve settings.py

Şu sıralar uğraştığım bir Django uygulaması var geliştirirken karşılaştığım bir sorunu ve çözümünü paylaşayım dedim.

Geliştirdiğim uygulamayı sunucuya yükledikten sonra lokalde geliştirirken oluşturduğum bir çok seçeneğin sunucudayken değişmesi gerektiğini farkettim. Bu ayarları değiştirmek kolaydı fakat sıkıntı çektiğim nokta uygulamanın hem sunucuda hemde kendi laptopumda tek bir settings.py ile sorunsuzca çalışması gerekiyordu. Bende şöyle bir çözüm buldum :

from os import uname, getcwd
from os.path import join
MACHINE_NAME = uname()[1]

if MACHINE_NAME == "XXX.webfaction.com":
    DOCUMENT_ROOT = "/path/to/document/"
    DATABASE_ENGINE = ...
    DATABASE_NAME = ...
    DATABASE_USER = ...
    DATABASE_PASSWORD = ...
    DATABASE_HOST = ...
    DATABASE_PORT = ...
else:
    DOCUMENT_ROOT = getcwd()
    DATABASE_ENGINE = 'sqlite3'
    DATABASE_NAME = join(DOCUMENT_ROOT,'sqlite3.db')

13 Temmuz 2011 Çarşamba

Barselona'dayım (Madrit amcam diyesim geliyor)

Vizeler finaller bütünlemeler pasaport alışveriş derken temmuzun başına kadar nefessiz bir 2,5 ay geçirdim. Resmen stresten ve yorgunluktan başım döner olmuştu son zamanlarda. O kadar uğraşmamın sonucunu aldım neyse ki. Bu satırları Rambla de la Muntanya daki evimden yazıyorum. Mahallemin adı yeterince karizmatik gelmediyse daha etkileyici ispanyolca isimler de sıralayabilirim. (akıllı olun.) Havalı olmasının yanında benim için sokak isimlerini aklımda tutmak çok zor. O yüzden gideceğim geleceğim mahalleleri ve o mahallelere gitme yollarını küçük bir not defterinde tutuyorum. Barselona nispeten bir turizm şehri, o yüzden ingilizce bilen birilerini bulmam oldukça kolay oluyor. Ancak aslında aynı dili konuşmanın o kadar da mühim bir şey olmadığını fark ettim. Zira sokağımdaki çin lokantasına gidip gayet maymunsal hareketlerle anlaşıp yeme içme olaylarına girebiliyorum. Vücut dili önemli, bunun yanında gülümseme de çok önemli. Zira kelimelere iletişim kuramadığınız insanlar ilk olarak yüzünüze bakıyor ve dost musunuz düşman mısınız anlamaya çalışıyor. Benim gibi poker suratlı, mimikleri zayıf biriyseniz daha çok dikkat etmeniz gerekli. Neyse, şimdi banyo yapmam gerekli ama sık sık birşeyler yazmaya çalışacağım.

Artık facebook, twitter, friendfeed, google plus dan uzak durmak istiyorum. Blog güzel, sevgili günlük tadında.