Kategorijos ‘Kodas’ 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

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 »

Desertui – AutoIt

Parašė: Tadas, 2008-07-28 | Nėra komentarų
Kategorijose: Kodas, Programavimas

AutoIt – tai nemokama (bet ne atviro kodo) programavimo kalba, skirta automatizuoti ir palengvinti įvairius veiksmus “Windows” operacinėse sistemose. Pirmoji versija (išleista 1999 metų sausį) galėjo tik simuliuoti klavišų paspaudimus, bet 3 versija (išleista 2004 metų vasarį) turi visas programavimo kalbai būdingas savybes. Kodą galima sukompiliuoti į suspaustą exe failą, kuriam paleisti kituose kompiuteriuose nereikia interpretatoriaus. Paprastas “Windows” aplinkos valdymas, TCP/UDP protokolų palaikymas, galimybė dirbti su Win32 DLLais, kodo bibliotekos ir žinoma paprasta sintaksė daro šią kalbą verta dėmesio.
Read the rest of this entry »

El-pašto siuntimas su PHP: pažvelkime giliau.

Parašė: Armandas, 2007-08-26 | Nėra komentarų
Kategorijose: Kodas, PHP

Šiame straipsnyje apžvelgsiu daugiaformačių laiškų, bei laiškų su priedais (attachments) siuntimą. Kad suprastumėt kaip tai daroma, jums iš pradžių reikės susipažinti su MIME formatu, ką vėliau ir padarysime. Dabar pažvelkime į paprasto laiško siuntimą, naudojant funkciją mail().

Pavizdys iš php.net:

$to      = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "\\r\\n" .
           'Reply-To: webmaster@example.com' . "\\r\\n" .
           'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

Bene svarbiausia dalis čia – header’iai. Headeriai yra plačiai naudojami ir kitų aplikacijų kūrime, bet čia jau kita tema. Pašto headeriuose nurodome siuntėją, atsakymo adresą, kliento tipą, dokumento (turinio) tipą ir t.t. Pradedantiesiems, tai bene sunkiausia dalis, todėl dėliojant headerius patartina pasitikslinti su kitais šaltiniais. Siunčiant daugiadales (multipart) žinutes taip pat nurodysime reikalingus headerius. Daugiadalio laiško sudėtis tokia (MIME formatas):

  1. laiško headeriai
  2. sienelė (boundary)
  3. konkrečios dalies headeriai, po jų, standartiškai – tuščia eilutė
  4. tos dalies turinys
  5. žr. 2
  6. žr. 3
  7. žr. 4
  8. žr. 2
  9. ir t.t.
  10. laiškas užbaigiamas sienele

Laiško headerius jau aptarėme, dabar išsiaiškinsime, kas tas boundary. Boundary – speciali eilutė, skirta atskirti turinio dalims (pvz.: paveiksliuką nuo teksto). Eilutė turi būti unikali ir nebūti kaip turinio dalis (akivaizdu). Sienelei sugeneruoti galima panaudoti tokį kodą:

//parašas. galite sienelę supersonalizuoti :)
$signature = 'p4i-rules-';
    //sugeneruojam simbolių eilutę, unikalumui užtikrinti
    $hash = md5(time());
    //sujungiame parašą ir eilutę
    $boundary = $signature.$hash;

Laiško dalies headeriuose reiktų nurodyti dalies turinio tipą (Content-type) ir turinio koduotę (Content-Transfer-Encoding). Papildomus headerius norodome pagal poreikį.

Kokio tipo laiškas bebūtų, jis sudarytas tik iš (surprise!) teksto/simbolių. Jei siunčiamas ne tekstas, duomenys užkoduojami base64 koduote. (Taip, base64 tam ir skirtas, o ne slaptažodžių “saugojimui” ar unFriendly urls gamybai). Failo užkodavimui galite naudoti tokį būdą:

$file = 'rozhes.gif';
//atsidarom failą (binary mode)
$f = fopen($file, 'rb');
//nuskaitom failą (didesniems failams geriau naudoti ciklą)
$c = fread($f, filesize($file));
//daliname koduotą eilutę į gabalus
$encoded = chunk_split(base64_encode($c));

Dalių pavyzdžiai:

Teksto dalis:
Atkreipkite dėmesį į du brūkšnelius prieš sieneles.

--p4i-rules-53a5ddb48feded5bec130878c979f778
Content-Type: text/plain; charset=UTF-8;
Content-Transfer-Encoding: 7bit

labas, maryte! šiandien 8 prie medžio! lauksiu!

Paveikslėlio (priedo) dalis:

--p4i-rules-53a5ddb48feded5bec130878c979f778
Content-type: image/gif; name="rozhes.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rozhes.gif"

R0lGODlhAgACAIABAP8AAAAAACH5BAEKAAEALAAAAAACAAIAAAIChFEAOw==

O dabar galime viską sujungti:


$signature = 'p4i-rules-';
    $hash = md5(time());
    $boundary = $signature.$hash;

$to      = 'maryte@example.com';
$subject = 'meet\'as';
$headers = 'From: petriukas@example.com'."\\r\\n" .
           'Reply-To: petriukas@example.com'."\\r\\n" .
           'MIME-Version: 1.0'."\\r\\n".
           'Content-Type: multipart/mixed; boundary="'.$boundary.'"'; //čia dviejų brūkšnelių nededame
           //šioje vietoje tuščią eilutę paliks pati mail funkcija

$message = '--'.$boundary.'
Content-Type: text/plain; charset=UTF-8;
Content-Transfer-Encoding: 7bit

labas, maryte! šiandien 8 prie medžio! lauksiu!

--'.$boundary.'
Content-type: image/gif; name="rozhes.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="rozhes.gif"

R0lGODlhAgACAIABAP8AAAAAACH5BAEKAAEALAAAAAACAAIAAAIChFEAOw==
--'.$boundary.'';

mail($to, $subject, $message, $headers);

Išsisiuntę sau tokį laišką, gausime tekstą ir prikabintą paveiksliuką (2×2 px). Pasinaudojus vaizduote (ir headeriais), galima siųsti įvairiausius laiškus (pvz.: html su paveikslėliais ir stiliais (css)). Tik nepiktnaudžiaukit ;)

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)