Yeni blog

Django ile yaptığım blog sayfam sonunda kullanılabilecek hale geldi. Bundan sonra oradan yazmaya devam edeceğim. http://test.osa1.net

Yazılar nasıl etiketlenir?

Django ile yazdığım bloguma otomatik etiketleme sistemi eklemeye çalışıyorum. Etiketleme sistemi arama ve alakalı yazıları tespit etme özellikleri için gerekli. Etiketleme olayını otomatiğe bağlamamın sebebi ise daha hızlı bir şekilde yazı girebilecek olmam.

Uygulayacağım yöntem sanırım şöyle birşey olacak; kendimi sitedeki içeriğe uygun büyük bir etiket bulutu oluşturacağım. Kelimleri eklentiye gireceğim ve daha sonra bir yazı girdiğimde eklenti yazılarda o kelimeleri arayacak, ve eğer varsa, o yazıyı o etiketle etiketleyecek. Daha sonra örneğin alakalı yazıları göstermek istediğimde, benzer etiketlere sahip yazıları, çok benzer etikete sahip olandan az olana doğru sıralayacak. Bu da böyle bir blog yazısıdır.

Django geliştirmenin kolay yolu?

Bir süredir Django ile uğraşıyordum ve Django ile yazdığım blog sayfamı bitirmek üzereyim fakat bazı sorunlar yaşıyorum:

  • Localhost’da çalıştıktan sonra dosyalarımı upload etmeden önce bir sürü değişiklik yapmam gerekiyor(url ayarları, veritabanı bağlantıları vs). Bunu kolaylaştırmak için LOCAL_DEVELOPMENT adlı bir değişken tanımladım, ve upload etmeden önce buna False atıyorum. Daha sonra örneğin veritabanı bağlantı sayfamda if LOCAL_DEVELOPMENT: #ayarlar şeklinde değişiklikler yapıyorum. Yine de sıkıcı bir işlem(gün içerisinde 10 kere yaptığım düşünülürse).
  • Localhost’da tamam da, internette bir türlü resim, css vb. dosyaların bağlantılarını sağlayamadım. Ayarlara bakıldığında herşey normal gözüküyor..
  • Değişiklikleri upload ettiğimde geçerli olmaları için bazen 10-15 dakika beklemem gerekiyor. -Sanırım- sunucum py dosyalarını ön bellek gibi birşeye(herneyse artık) yüklüyor, değişiklikleri de belirli aralıklarla kontrol ediyor ve değişiklik varsa yenisini okuyor. Beni çok yavaşlatan bir işlem.
  • Admin panelinden birşey eklerken veri tabanına formlarda olmayan bir değeri nasıl girebilirim?

Bunların dışında bir de etiket sistemi eklemek istiyorum fakat nasıl bir yöntem izlemeliyim karar veremedim. Yani örneğin tüm yazıyı kelime kelime tarayıp, bağlaçları vs. eleyip, geriye kalan kelimeleri etiket olarak mı kabul etmeliyim, yoksa büyük bir etiket bulutu oluşturup, yazılarda o kelimeleri mi aramalıyım(bu daha mantıklı geliyor)?

2 hafta sonra hazırlık biteceğinden ve benim ilk seneki ingilizce derslerinden muafiyet alma ihtimalim yüksek olduğundan ara sıra ders çalışıyorum, pek zaman ayıramıyorum, fakat en kötü ihtimalle 9 Temmuz’a kadar bitirmem gerekiyor bu sayfayı, yoksa hiçbir zaman bitiremeyebilirim..

django.contrib.comments nasıl çalışır?

Django yorum eklentisi(django.contrib.comments)ni çalıştırabilen var mı? Django’nun destek sitesinde de hakkında başlık açmışlar, tüm yöntemleri denememe rağmen aynı hatayı almaya devam ediyorum.

Bilmeyenler için, {% load comments %} ile yorumla için template taglarını yükledikten sonra {% render_comment_form for code %} tagı ile yorum formunu çekmem gerekiyor fakat Caught NoReverseMatch while rendering: Reverse for ‘django.contrib.comments.views.comments.post_comment’ with arguments ‘()’ and keyword arguments ‘{}’ not found. şeklinde bir hata alıyorum(ya da alıyoruz mu demeliydim?)

Django’da modeller nasıl oluşturuluyor?

Django’da örneğin şöyle bir modelim var:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

Bu sınıftan p1 = Publisher(…) şeklinde onlarca instance oluşturabiliyorum, fakat işin garip yanı, tüm instanceların özellikleri(attribute) farklı olabiliyor, halbuki böyle olması için bu kodun şu şekilde olması gerekmez miydi?

class Publisher(models.Model):
    def __init__(self):
        self.name = models.CharField(..)
        vs vs vs..

Bu nasıl olabiliyor ve kendi sınıflarıma nasıl uygulayabilirim? Araştırıyorum..

Python ile altyazı işlemleri 2

Daha önceden Python’da regex kullanarak altyazılar üzerinde bazı değişiklikler yapmıştım(ilk yazı burda). Bu seferki kod altyazılar srt formatlı altyazılar için birkaç fonksiyon içeriyor.

"""
subtools.py
Some subtitle tools for .srt formatted subtitles.
"""
import re

def convert(a):
    parts = a.split(":")
    hour, minute, sec = int(parts[0]), int(parts[1]), parts[2]
    minute += hour*60
    sec = sec.split(",")
    sec = int(sec[0])*1000 + int(sec[1])
    sec += minute*60000
    return sec

def revert(a):
    a = int(a)
    sec, remainder = a/1000, a % 1000
    minute = sec/60
    sec = sec%60
    hour = minute/60
    minute = minute%60
    # kod tekrarini nasil engelleyebilirim?
    if len(str(hour)) == 1:
        hour = "0%s" % hour
    if len(str(minute)) == 1:
        minute = "0%s" % minute
    if len(str(sec)) == 1:
        sec = "0%s" % sec
    if len(str(remainder)) == 1:
        remainder = "00%s" % remainder
    elif len(str(remainder)) == 2:
        remainder = "0%s" % remainder
    return "{0}:{1}:{2},{3}".format(hour, minute, sec, remainder)

def adder(a, b):
    return revert(convert(a) + convert(b))

def subtracter(a, b):
    return revert(convert(a) - convert(b)))

def submod(sub, time):
    "Advance subtitles"
    Sub = open(sub, "r").readlines()
    format = re.compile(r"(\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) --> (\d{1,2}:\d{1,2}:\d{1,2},\d{1,3})")
    for line in Sub:
        if format.findall(line):
            parts = format.findall(line)
            parts = parts[0]
            P1, P2 = adder(parts[0], time), \
                           adder(parts[1], time)
            Sub[Sub.index(line)] = "%s --> %s" % (P1, P2)
    new = open("new_%s" % sub.split("/")[-1], "w")
    new.writelines(Sub)
    new.close()

def setsub(sub, first, last):
    submod(sub, subtracter(first, last))

Linux ortamında VLC ile birşeyler izlerken en çok sıkıntı çektiğim konu GOM Player’daki altyazının istenilen kısmının filmdeki istenilen zamana denk getirilme özelliğinin olmaması, bu fonksiyonlar kullanılarak kolayca yapılabilir aslında..

10.04

10.04 kurulumum bitti ve yerleşme işlemlerimi tamamladım(Python, Django, Apache, Php, Mysql, vs.). Son ve şimdilik temiz hali şöyle:
Ayrıca http://forum.ubuntu-tr.org/index.php/topic,18251.msg221599.html adresinden bazı çılgın masaüstleri görebilirsiniz, ara sıra farklı dağıtımlar da olsa da çoğu Ubuntu(ya da en azından Gnome).