Kategorijos ‘Python’ Archyvas



Apie daugiskaitą

Parašė: Armandas, 2008-10-29 | Komentarų: 11
Kategorijose: Kodas, Python

Neseniai užmačiau vienąArtūro projektų. Iš karto prisiminiau, kad turiu nebaigtą blogo funkciją žodžių vertimui iš daugiskaitos į vienaskaitą:

def dgs(number, word=''):
    """Pluralization for Lithuanian (works partially)
 
       Kaip argumentą pateikite daugiskaitos vardininką
        - Pvz1: {{ 10|dgs:"Komentarai"}}
        - Pvz2: {{ 21|dgs:"Knygos"}}
    """
    if number in range(11,20) or (number % 10) == 0:
        #masculine and feminine forms are the same
        word = word[:-2] + u"ų"
 
    elif number == 1 or (number % 10) == 1:
        if word[-2:] == "ai":
            #masculine form
            word = word[:-2] + "as"
        elif word[-2:] == "os":
            #feminine form
            word = word[:-2] + "a"
 
    #default value is used in all other cases
    return "%d %s" % (number, word)

Nusprendžiau patobulinti taip, kad veiktų su bet kokiu daiktavardžiu, turinčiu vienaskaitos ir daugiskaitos formas (atkrenta tokie žodžiai kaip pienas, alus, durys, miltai).

Procesas buvo gan ilgas, Tomas astsiuntė žodžių sąrašą, su Python jį išparsinau, tada sekė duomenų analizavimas bei abstrakcija, o galiausiai programavimas (lengviausia dalis ;)

Šiaip rekomenduoju visiems pasižiūrėti į kodą ir prisitaikyti savuose projektuose. Kažkaip susidaro įspūdis, jog programuotojai bijo Lietuvių kalbos. Kur tik pažiūrėsi, vis matai “10 Komentarai (-ų)”, “5 Prekių (-ės)” ir pan. Tikrai nėra taip sunku parinkti tinkamą žodžio formą.

P.S. nebijokit Python’o, jis kaip pseudo-kodas :)

P.P.S. Žinau, kad mano unit testas nėra labai rafinuotas, tad kitą kartą pasitengsiu labiau :D

Išleista Django 1.0 versija

Parašė: Armandas, 2008-09-04 | Komentarų: 8
Kategorijose: Atviras kodas, Naujienos, Python

Pagaliau pasirodė ilgai laukta, populiaraus web karkaso Django, 1.0 versija. Ši versija žymi visapusišką karkaso stabilumą. Nors ir iki šiol Django buvo labai plačiai naudojamas, dabar tai galima daryti dar drąsiau. Pakeitimai nebus tokie drastiški, o backwards compatibility yra garantuojamas.

Parsisiųsti galite iš http://www.djangoproject.com/download/.

Pasidaryk pats: fraktalai

Parašė: Armandas, 2008-07-30 | Komentarų: 8
Kategorijose: Kodas, Python, Smagumynai

Mandelbrot set

Mandelbrot set

Fraktalas yra geometrinė forma, kuriai yra būdingas panašumas į save, bei begalinis detalumas. Mandelbroto aibė yra vienas iš žinomiausių fraktalų pasaulyje, išgarsėjęs apie 1980 metus. Vėlus tokio įspūdingo objekto atsiradimas buvo nulemtas modernių kompiuterių nebuvimo.

Nors Mandelbroto aibė yra begalo (tikrąja šio žodžio prasme) komplikuota forma, ją sugeneruoti galima naudojant neįtikėtinai paprastą formulę: z = z2 + C. Čia z yra iteruojamas kompleksinis skaičius, o C – konstanta – koordinatė kompleksinėje plokštumoje. Read the rest of this entry »

Paleidinėjam Django “localhost’e”

Parašė: Armandas, 2008-05-01 | Komentarų: 4
Kategorijose: Python

Django tai Python web programavimo karkasas, skirtas sparčiam aplikacijų kūrimui. Django, kaip ir kitų kalbų karkasai – CakePHP, Ruby on Rails – naudoja MVC architektūrą. Šiame straipsnyje aptarsim Django development serverio paleidimą Linux sistemose.

Aš dirbsiu su Kubuntu 8.04 (Hardy Heron), tačiau su minimaliais pakeitimais serverį pasileisite ant bet kokios distribucijos. Taigi, mums prireiks:

Kadangi mūsų tikslas nėra paleisti viešą serverį, o tik sukurti aplinką patogiam programavimui su Django, pasinaudosime XAMPP paketais. Taigi, keliam pirmojo archyvo turinį į /opt katalogą:

$ sudo tar xvfz xampp-linux-1.6.6.tar.gz -C /opt

Tą patį padarom su development paketu:

$ sudo tar xvfz xampp-linux-devel-1.6.6.tar.gz -C /opt

Root’o teisės reikalingos norint rašyti į /opt katalogą, taip pat serveris bus paleidinėjamas su root teisėmis. Development paketas reikalingas norint pridėti papildomų modulių.

Toliau išsiskleidžiam mod_python archyvą ir cd’inam į tą katalogą. Pasiskaitom manualą ir vedam tokią komandą:

$ ./configure --with-apxs=/opt/lampp/bin/apxs

Jei viskas gerai, o taip ir turėtų būti, sukompiliuosim modulį:

$ make

ir tada instaliuojame:

$ sudo make install

Dabar mums reikia sukonfigūruoti Apache. Tam pirmiausia reikia sužinoti, kur buvo instaliuotas mūsų modulis, skrolinam terminalą į viršų ir randam kažką panašaus į:

LoadModule python_module /opt/lampp/modules/mod_python.so

Su jums patogiu editorium atsidarom httpd.conf failą (nepamirštam root teisių):

$ sudo nano /opt/lampp/etc/httpd.conf

ir prie visų kitų modulių prirašom saviškį:

LoadModule python_module /opt/lampp/modules/mod_python.so

Na ir galiausiai pratestuojame. Sakydamas galiausiai, neturėjau omeny, kad darbas baigtas :) Iš tiesų, tai baigėsi lengviausia dalis. Dabar reikia instaliuoti ir sukonfigūruoti Django. Django instaliavimui yra du būdai, tačiau aš pasirinkau, mano manymu, lengvesnį bei aiškesnį. Taigi, išsiskleidžiame archyvą Django-0.96.1.tar.gz ir į einame į sukurtą katalogą. Iš ten kopijuojame viduje esantį django katalogą į python direktorijoje esančią site-packages direktoriją:

$ sudo cp django /usr/lib/python2.5/site-packages/

Atkreipkit dėmesį, kad jūsų sistemoje gali būti kitas kelias, tarkim /usr/lib/python2.4.

Dabar teks dar kartą atsidaryti httpd.conf bylą ir ten įrašyti konfigūraciją django karkasui:

<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE examples.settings
PythonDebug On
PythonPath "['/opt/lampp/www/'] + sys.path"
</Location>

Pasiaiškinkim kas ką reiškia. <Location “/”> ne kelią sistemoje, bet nurodo adresą. Kadangi aš noriu, kad mano aplikacja būtų šakninėje direktorijoje, nurodau “/”. DJANGO_SETTINGS_MODULE saugo kelią iki aplikacijos nustatymų. Šiam kartui įrašykime examles.settings, vėliau žinosime kuo jį pakeisti. Dar mums reikia pridėti direktoriją, kurioje bus ieškoma python failų. Tiesiog įrašome savo direktoriją kurioje bus projektas – /opt/lampp/www/. Tai neturėtų būti DocumentRoot direktorija.

Na štai, liko paskutinis žingsnis. Iš Django-0.96.1 direktorijos nusikopijuojam katalogą examles ir jį padedam į /opt/lampp/htdocs/ (Patarčiau htdocs katalogui suteikti rašymo teises, kad dirbant nereiktų root teisių). Paleidžiam Apache serverį (kolkas mums nereikia MySQL):

$ sudo /opt/lampp/lampp startapache

Einame į http://localhost/ ir matome neapsakomą vaizdą:

Django example

Valio! Ak taip, kai ką pamiršome. /opt/lampp/htdocs/examples/ direktorijoje yra failas settings.py, tai tas failas kurį nurodėme httpd.conf faile. Kai kursite savo aplikaciją, pakeisite ten esančią reikšmę į savo: direktorija.settings.
Visą dokumentaciją rasite adresu http://www.djangoproject.com/
Susipažinti su Django karkasu galite skaitytami Django knygą.

Smagaus programavimo!

Jamam gravatar’us!

Parašė: Armandas, 2007-05-31 | 1 Komentaras
Kategorijose: Kodas, PHP, Python

Gravatar – Globally Recognized Avatars. Tai populiarėjantis avatarų naudojimo būdas. Viskas labai paprasta:

  • Užregistruoji savo e-paštą(-us)
  • Įsikeli norimus avatarus
  • džiaugiesi

Nuo šiol bloguose, forumuose ir visur kur tik palaikomi gravatarai galėsi matyti savo avatarą šalia savo pranešimo. How cool is that?!

Dabar metas išmokti įsidiegti gravatarus pas save. PHP programavimo kalboje funkcija atrodytų štai taip:

function gravatar($email)
{
    //nustatom default reiksmes
    //gravataro dydis
    $size     = '48';
    //paveiksliukas kuris bus rodomas, jei vartotojas neturi gravataro
    $default  = 'http://www.example.com/images/gravatar.gif';
    $template = 'http://www.gravatar.com/avatar.php?gravatar_id=%s&default=%s&size=%s';

    //gaunam e-mail hasha, kuris naudojamas kaip gravataro id
    $email = md5($email);

    //paruosiam nuoroda
    $default = urlencode($default);

    $link = sprintf($template, $email, $default, $size);
    return $link;
}

Ši funkcija jum grąžins nuorodą iki avataro, kurią galėsit naudoti img taguose.

Na o čia skriptas Python mylėtojams. Kadangi tokių (manau) nedaug, tai kodas bus “for fun” :)

from md5 import md5
from urllib import quote

def gravatar(email):
    size = '48'
    default = 'http://www.example.com/grafavar.gif'
    url = "http://www.gravatar.com/avatar.php?gravatar_id=%s&default=%s&size=%s"
    email = md5(email).hexdigest()
    default = quote(default, safe='')
    return url % (email, default, size)