>>>>> "VST" == Vehbi Sinan Tunalioglu <[EMAIL PROTECTED]> writes:

>>>>> "ES" == Emre Sevinc <[EMAIL PROTECTED]> writes:
    ES> VST bana "social network analysis" baglaminda basladigi
    ES> programdan ve Common Lisp ile mailman arsivlerini analiz
    ES> etmekten bahsediyordu, son konustugumuzda string'leri
    ES> birlestirmek icin vector-push-extend yerine baska bir sey
    ES> kullanilmasinin daha performansli olabilecegine dair bir
    ES> seyler düsünmüstük. Son durum merak ettim (neden bu kadar
    ES> merakliyim ben? :))

    VST> Hemen aciklayayim.

    VST> Amac : Pipermail ile text formatinda arsivlenmis eposta
    VST> listelerinin islenebilir hale getirilmesini saglamak.

    VST> Ornek : http://cs.bilgi.edu.tr/pipermail/cs-lisp/ adresindeki
    VST> tum arsivlenmis mailleri bir assoc. list ya da sinif
    VST> kullanarak teker teker bir listeye atmak ve bunlari thread
    VST> haline sokmak.

    VST> Kullanilan Araclar: Verilerin internetten alinmasini saglamak
    VST> icin thttp (trivial-http) ve stringler uzerinde regex ile
    VST> filtreleme yapmak icin cl-ppcre (regular exp. kutuphanesi)

    VST> Sorun: Cok yavas calisiyor.
    [..]
    VST> Asagida kirli kodu gonderiyorum.


Optimizasyon ile ilgili BM bir seyler söylemis, ben de yazim
tarzi ile ilgili dikkatimi ceken bazi seyler söylemek istedim.
Gördügüm kadari ile Java ve Scheme etkisi hissediliyor kodda:

Misal:

(defun is-from-line? (line)
  (ppcre:scan "^From [^ ]+ at [^ ]+" line))

Yani hem basinda "is" var, hem sonunda "?" var. Bildigim
kadari ile CL kültüründe bir seyi test ediyorsak o bir
"predicate" fonksiyondur, misal evenp, oddp, typep, ...
Ya da yapmak istedigimiz test alfa mi degil mi gibi bir
test ise alfa-p gibi. Yukaridaki görüntü de cok kötü
bir görüntü degil ama hem "is" hem de "?" olunca 
pek "idiomatic" degil gibi ve de fazladan bir seyler
yaziyormusuz gibi.

En alttaki fonksiyonu SLIME ile biraz daha alisik
oldugum ve kolay okunabilir sekilde formatladim:

(defun one-shot-mail-extractor (url-list)
  (let ((maillist nil)
        (mail nil))
    (loop for rfile in url-list do
          (let ((content-stream (caddr (thttp:http-get rfile))))
            (do ((line (read-line content-stream nil nil)
                       (read-line content-stream nil nil)))
                ((null line) maillist)
              (cond
                ((is-from-line? line) 
                 (progn 
                   (setf maillist (cons mail maillist)) 
                   (setf mail nil) 
                   (setf mail (cons (cons ':FROM line) mail))))
                ((is-date-line? line) (setf mail (cons (cons ':DATE line) 
mail)))
                ((is-subject-line? line) (setf mail (cons (cons ':SUBJECT line) 
mail)))
                ((is-msgid-line? line) (setf mail (cons (cons ':MESSAGE-ID 
line) mail)))
                ((is-reply-to-line? line) (setf mail (cons (cons ':REPLY-TO-ID 
line) mail))))))) 
    maillist))


BM'nin dedigi gibi satir satir okumak isi yavaslatiyor
olabilir diye düsünüyorum. Önerilen "arsiv dosyasini al
oradan kullan" fikrine ek olarak yani oradan yapilsa
bile satir satir yapmak yerine önce tüm dosya icerigi
okunsa hafizaya, bir degiskene, sonra onun üzerinden is
yapilsa daha hizli olmaz mi?


Hazir bir de böyle enteresan bir proje baslamisken, mesela DARCS
deposu acilsa (bir nevi CVS, olmadi CVS deposu acilsin Bilgi'de)
sonracima Emacslarimizla o CVS'e baglansak, kodun son halini ceksek,
kurcalasak, yollasak, vs. 

Bir de SLIME ortaminda profiling nasil yapilir bir baksak
(tembelim ben, birileri anlatsa da dinlesem diyorum ;-) 

Sonra ortaya yavas yavas CL-SNA projesi ciksa, cümle
alem "vay canina ne acayip social network analysis araci
gelistirmissiniz be birader!" dese... (Emre hayallere dalar...)


-- 
Emre Sevinc

eMBA Software Developer         Actively engaged in:
http:www.bilgi.edu.tr           http://ileriseviye.org
http://www.bilgi.edu.tr         http://fazlamesai.net
Cognitive Science Student       http://cazci.com
http://www.cogsci.boun.edu.tr


_______________________________________________
cs-lisp mailing list
cs-lisp@cs.bilgi.edu.tr
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp

Cevap