Durup dururken durdurmak.

Youtube’un son durumunu kesin olarak bilen yok. Yetkililerin yaptığı açıklamalara göre yasal olarak henüz erişime açılmamış. Buna rağmen kimi kullanıcılar hiçbir hile hurda kullanmadan youtube’a erişebiliyor. Erişemeyenler de elbet erişmenin bir yolunu buluyor.

Ben youtube’a aracısız erişebilen kitledenim ve zaman zaman youtube’ta “related videos” marifetiyle -eskinin moda tabiriyle- sörf yapıyorum. Bu sırada da bu ve benzeri sitelerin neden “durup dururken” durdurulduklarını gitgide daha iyi anlıyorum.

Bugün dolanırken şimdiye kadar çokça duyduğum ama cevabını kimsenin ver(e)mediği bu memleketin politik durumu neden böyle sorusunun cevabını buldum. Üstat Attila İlhan gayet açık ve anlaşılır şekilde cevabını vermiş bu karmaşık ve anlatması zor görünen sorunun.

Tabii bu cevabı izlemek için bu cevabın önündeki engelleri aşmak, etrafı saran uyutucuların arasından sıyrılmak gerekiyor. Bunun için de hedefinizin bunları bulmak olması yani konularla bir miktar ilgili olmanız gerekiyor. Kısacası insanların bu bilgilere denk gelmesi ihtimali başarıyla ortadan kaldırılmış. İnce ince çalışıp bunu başaranları tebrik etmek gerekli.

Biraz daha açık yazmak gerekirse aşağıda -biri devletin resmi yayın organı olmak üzere ki özellikle bu kanalın yayın içeriği dikkat çekici- 3 ulusal TV kanalının yayın akışı var ve görülüyor ki yayınlar sadece akıp gitmesi geride bir iz bırakmaması için özel olarak hazırlanıyor. İnsanların iz bırakması muhtemel içeriklere ulaşmasının da önüne bir şekilde geçildi mi işlem tamam.

İnternete, herşeye rağmen insanlara doğruyu görebilmek adına bir şans daha tanıdığı için teşekkür ederek bahsettiğim videonun bağlantılarını ekleyeyim.

Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (1)
Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (2)
Attila İlhan’la Zaman İçinde Yolculuk, 3 Nisan 2004 (3)

Star TV ATV TRT 1
06:40 Mesut Yar’la Uyan Türkiye
08:00 Her Eve Lazım
08:30 Sabrina
09:10 Ramazan Sofrası
10:20 Arım Balım Peteğim
13:30 Gün Ortası
14:00 Esra Erol’la İzdivaç
17:30 İftara Doğru
19:00 Uğur Dündar’la Star Ana Haber
19:50 Star Spor
20:00 Pulsar
22:00 Mega Magazin
00:00 Baba Ocağı
02:00 Uğur Dündar’la Star Ana Haber
03:00 Nihat Hatipoğlu İle Sahur
05:00 Esra Erol’la İzdivaç
06:30 Kahvaltı Haberleri
08:30 Jetgiller
09:00 Kadının Gücü
10:45 Hepsi 1
13:00 Gün Ortası
13:20 Kadın Olmak
14:45 Selena
16:40 Avrupa Yakası
19:00 atv Ana Haber
19:50 Spor Haberleri
20:00 Sıla - Bölüm 67
22:00 Hatırla Sevgili - Bölüm 60
00:10 Öldüren Cazibe
02:30 Hüdaverdi
03:45 Köfteci Holding
05:00 atv Ana Haber
06:00 Çilek Kız
06:58 İstiklal Marşı ve Günün Program Akışı
07:00 Sabah Haberleri
09:00 Elma Kurdu Nam Nam
09:20 Çizgi Film “Pembe Panterin Maceraları”
09:40 Çizgi Film “Goof’un Takımı”
10:10 Hayal Fabrikası
10:30 Bir Ramazan Sabahı
12:00 Ötelerden Esintiler
13:00 Haber
13:20 Hava Durumu
13:25 Fragmanlar + Reklam
13:30 Ramazan Klipleri
13:35 Yaprak Dökümü
14:45 Türk Sineması “Rabia-İlk Kadın Evliya”
16:35 Gönlümüzde Yaşayan Peygamber
17:10 Manşettekiler
17:35 Ramazan Geldi Hoşgeldi
17:50 Ramazan Sevinci
19:50 Reklam
20:00 Ana Haber Bülteni
20:35 Spor
20:40 Hava Durumu
20:45 Milli Piyango Çekilişi
20:55 Reklam
21:00 Akşam Sefası
22:25 Reklam
22:30 Sürgün Hayatlar
23:45 Reklam
23:50 Ezberbozan
00:50 Reklam
00:55 Günün Ardından
01:15 Ramazan Geldi Hoşgeldi
01:30 Semavi Duyuşlar
02:30 Gönlümüzde Yaşayan Peygamber
03:00 Sahur Zamanı
05:00 Mukabele
06:00 Yaprak Dökümü

Google App Engine üzerinde 13 basit adımda Django

Google, eposta hizmeti, dosya alanı, proje yönetim sistemi derken şimdi de web uygulamaları için altyapı ve barındırma desteği vermeye başladı. Artık Python ile hazırladığımız web uygulamalarımızı Google’ın altyapısından faydalanarak sunabileceğiz. Google App Engine, henüz önizleme sürümü aşamasında bir hizmet ama şimdiden ısınmaya başlamakta fayda var.
Thomas Brox Røst’un blogunda basit bir eğitsel buldum ve çevirebildim. Umarım konunun meraklılarına en azından fikir verir.

Not: Aşağıda yazanları deneyebilmeniz için Python 2.5 veya üzeri bir sürüm kullanmanız gerekiyor.

Pardus kullanıcıları “Pardus 2008″ ile Python 2.5 kullanıyor olacaklar. Az biraz daha beklemek gerekecek :)


11 Nisan 2008, Türker Sezer (Çeviri)
8 Nisan 2008, Thomas Brox Røst (Özgün metin)

Bu eğitselde arkaplanda datastore kullanan basit bir Django uygulamasının Google App Engine üzerinde nasıl çalıştırılacağını göstereceğim. Yazıyı yazarken, Django’ya aşina olduğunuzu varsayacağım.

Güncelleme: Tüm dosyaları buradan indirebilirsiniz. “main.py” içindeki “sys.path” değerini düzelttiğinize emin olun.


Adım 1: Bir uygulama adı kaydedin ve yönlendirmelere göre geliştirme setini kurun.


Adım 2: Uygulamanız için bir dizin yaratın. Bu eğitselde uygulamamın adı “mashname” olacak.

1. tmp$ mkdir mashname
2. tmp$ cd mashname

Adım 3: Yeni dizininize “main.py” adında bir dosya ekleyin:

main.py

1.  import os, sys
2.  os.environ["DJANGO_SETTING_MODULE"] = "mashname.settings"
3.  sys.path.append("/home/mew/tmp/mashname")
4.
5.  # Google App Engine kütüphaneleri
6.  from google.appengine.ext.webapp import util
7.
8.  # Djangoyu ayarlarını yeniden yüklemeye zorla
9.  from django.conf import settings
10. settings._target = None
11.
12. import django.core.handlers.wsgi
13. import django.core.signals
14. import django.db
15. import django.dispatch.dispatcher
16.
17. # Hataları kaydet.
18. #django.dispatch.dispatcher.connect(
19. #   log_exception, django.core.signals.got_request_exception)
20.
21. # Rollback olay yakalayıcısının kaydını sil
22. django.dispatch.dispatcher.disconnect(
23. django.db._rollback_on_exception,
24. django.core.signals.got_request_exception)
25.
26. def main():
27.     # WSGI için bir Django uygulaması yarat
28.     application = django.core.handlers.wsgi.WSGIHandler()
29.
30.     # WSGI CGI yakalayıcısını bu uygulama ile çalıştır
31.     util.run_wsgi_app(application)
32.
33. if __name__ == "__main__":
34.     main()

Bu yerelde test edebilmek için eklediğim Python yolu dışında temel olarak buradaki ile aynı dosya. Ayrıca DJANGO_SETTING_MODULE değerini de ayarladım-bu belki App Engine üzerinde çalışırken gerekli olmayabilir. Hata kaydını çalıştıramadığım için iptal etmek zorunda kaldım.


Adım 4: Aynı dizine app.yaml adında bir dosya ekleyin.

app.yaml

1. application: mashname
2. version: 1
3. runtime: python
4. api_version: 1
5.
6. handlers:
7. - url: /.*
8. script: main.py

Burada uygulama adının doğru yazıldığına emin olun.


Adım 5: “mashname” dizininizde, yeni bir django projesi yaratın

1. tmp/mashname$ django-admin.py startproject mashname

(Django’nuzun olması gerektiği gibi çalıştığını varsayıyorum)


Adım 6: Şu an uygulamanızı test edebiliyor olmalısınız:

1. tmp/mashname$ cd ..
2. tmp$ dev_appserver.py mashname
3. INFO     2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
4. INFO     2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
5. INFO     2008-04-08 19:08:10,404 dev_appserver_main.py]Running application mash
6. name on port 8080: http://localhost:8080

Tarayıcınız ile http://127.0.0.1:8080/ adresine girin. Django’nun standart “It worked!” mesajını görüyor olmalısınız.


Adım 7: Proje içinde bir Django uygulaması yaratın:

1. tmp$ cd mashname
2. tmp/mashname$ python mashname/manage.py startapp main

Adım 8: Şimdi sıra bir model eklemeye geldi. Tüm ziyaretçilerin kaydını datastore’a yazan ve onların IP adresini ve ziyaret zamanını gösteren basit bir uygulama yaratacağız. “~/tmp/mashname/main/models.py” dosyasını düzenleyin. Dosya şöyle görünmeli:

models.py

1. from google.appengine.ext import db
2.
3. class Visitor(db.Model):
4.     ip = db.StringProperty()
5.     added_on = db.DateTimeProperty(auto_now_add=True)

Django modellerini kullanmadığımız için veri tabanını eşlemeye gerek yok.


Adım 9: Şimdi “Visitor” modeline veri eklemekten ve önceki ziyaretçilerin kayıtlarını göstermekle sorumlu görünümümüzü yaratacağız. views.py dosyasını aşağıdaki gibi düzenleyin (models.py ile aynı dizinde):

1.  from django.http import HttpResponse
2.
3.  from mashname.main.models import Visitor
4.
5.  def main(request):
6.      visitor = Visitor()
7.      visitor.ip = request.META["REMOTE_ADDR"]
8.      visitor.put()
9.
10.     result = ""
11.     visitors = Visitor.all()
12.     visitors.order("-added_on")
13.
14.     for visitor in visitors:
15.         result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u"<br/>"
16.
17.     return HttpResponse(result)

Adım 10: Son olarak, urls.py dosyasını görünümümüzü gösterecek şekilde düzenleyelim.

urls.py

1. from django.conf.urls.defaults import *
2.
3. urlpatterns = patterns("",
4. (r"^$", "mashname.main.views.main"),
5. )

Adım 11: Uygulamanızı test edebilirsiniz. (6. adımdaki gibi) Herşey yolunda gidiyor olmalı. Her sayfa yenilendiğinde, “Visitor” modeline yeni bir kayıt ekleniyor ve ekrana basılıyor.


Adım 12: Uygulamanızı “Google App Engine”e yükleyin:

1. tmp$ appcfg.py update mashname

İlk yüklemede Google hesabınız için eposta adresinizi ve şifrenizi girmelisiniz.


Adım 13: İyi eğlenceler! Bu uygulamanın sonucunu görmek için, http://mashname.appspot.com/ adresine bakabilirsiniz.

Şeffaf eğitim sistemi

Son yıllarda bir "şeffaflık" furyasıdır gidiyor. Herkes birşeylerin şeffaf olmasını istiyor -genelde bu talepler sonuçsuz kalıyor-.

Türkiye’nin nadide(!) yazılım firmalarından biri hazırladığı eğitim sistemi ile bir ilke imza atmış. Oluşturduğu sanal fakültenin tüm odalarını ince bir camdan yapmış. Fakülteye giren herkes, bir topluluk olmanın bilinciyle hiçbirşeyini gizle(ye)miyor.

İşin doğrucasını söylemek gerekirse, bankaların, devlet kurumlarının, iletişim, endüstri, sağlık sektörlerinde önde gelen kuruluşların ve bir çok üniversitenin kullandığı bu sistem, kullanıcılarına yaşattığı türlü olumsuzluğun yanısıra güvensiz bir ortam sunuyor.

Dahası bu yazılım "bir grup hevesli insan" tarafından değil de, "ciddi bir kuruluş" tarafından geliştirildiği için lisansı için yüklüce paralar verip alınan yazılım sorun çıkardığında, size "destek" sağlayan firmaya bağımlı kalıyorsunuz. Firma da gelen her isteği itina ile gelecek "yamaya" sallıyor.

Maalesef bir kullanıcı olarak kurbanı olduğum bu durum, insanın aklındaki tüm şüpheleri silen referansların, süslü tanıtım faaliyetlerinin, iş yazılıma gelince kâr etmediğinin, kendinizi içeriğini bilmediğiniz yazılımlarla, birilerine bağımlı kılmanın ne derece saçma olduğunun açık bir göstergesi.

HFS+ dosya sistemi ve unicode dosya adları

Okulda* yenice başladığımız bir proje için SVN kullanmaya karar verdik. Onlarca kişinin ortaklaşa çalıştığı işlerde bize büyük kolaylıklar sağlayan SVN, işin içine unicode dosya isimleri ve HFS+ dosya sistemi girince bizi epey sıkıntıya soktu.

İlk başlarda gayet güzel giden dosya ekleme işlemleri, OS X kullanan kullanıcılar işin içine girince birden karıştı. Dizinlerin içinde aynı dosyalardan ikişer tane olmaya, updateler sırasında hatalar oluşmaya başladı.

Bir süre dosya sisteminin aynı dosya adında iki dosyayı nasıl yanyana tutabildiğine şaşırdıktan sonra Google sayesinde öğrendim ki HFS+ dosya sisteminde dosya isimleri decomposed (”e\314\200″, 3 byte) biçimde yazılıyormuş. Linux ve Windows’ta ise composed (”\303\250″, iki byte) biçimde. Dolayısı ile bize aynı görünen dosya isimleri sisteme göre gayet farklılarmış.

Oluşan bu durum ile ilgili SVN tracker’dan bulduğum yamalar da işe yaramayınca, OS X kullananların en azından sisteme dosya ekleyip çıkarabilmesi için MacFuse kullanarak çok pratik olmasa da bir yol buldum.

Öncelikle sisteme MacFuse ve ntfs-3g kurdum. “Disk Utility” ile 1 GB’lik bir dmg yaratıp FAT olarak formatladım. Daha sonra bu dmg’yi mount edip, NTFS-3G ile tekrar formatladım. (Direk ntfs-3g ile bir dmg yaratmaya kalkınca “The device doesn’t exist; did you specify it correctly?” diye bir hata veriyor.)

Şimdi bu disk imajı üzerinde SVN depomuzu kullanabiliyoruz. Dosya ekleyebiliyoruz, çıkarabiliyoruz.Fakat buradan bir dosyaya erişmeye çalıştığımızda OS X programları dosyanın orada olmadığını iddia ediyor. Dosyaları düzenlemek için Terminal’den disk üzerinde bir yere kopyalamak ve oradan açmak gerekiyor.

Şimdilik sadece veri girişi yapıldığından, dosyaları düzenleme kısmı pek canımızı yakmıyor. Ama verileri düzenlemeye başladığımızda SVN tarafından hala bir çözüm gelmemiş olursa, dosyaları oradan oraya savuran kirli çözümler kullanacağız veya istemeyerek de olsa dosya adlarını sisteme uyduracağız gibi duruyor. :/

Pardus... Özgürlük İçin... Özgürlük için Pardus... Vi The Editor Google Summer of Code