Translate to:

 

Október 2009
P U S Š P S N
« Sep   Nov »
 1234
567891011
12131415161718
19202122232425
262728293031  

Odznaky

Pixmac pictures
Opencaching.cz - Statistika - georgik


Add to Technorati Favorites

PageRank - hodnotenie tejto webstranky
  • 30Okt

    Ha! Teraz si myslíte, že napíšem preinštalovať. Houby! Windows nepreinštalujem, ani keby drivery na blue screen padali. Ja tvrdím, že systém netreba preinštalovať. Preinštalovanie je väčšinou príznakom, že dotyčná/ý systému nerozumie.

    Uznávam, že pre valnú väčšinu ľudí je to jednoduhší prístup. Na druhú stranu je časovo náročný.

    Dobre, dobre, prestávam rozvádzať svoju hypotézu o správnej lenivosti. Tak k veci.

    Windows štartuje pomaly. Aj po tom, čo ste odstránili zo zložky po spustení všetko vrátane Solitéra. Ono sa tam voľačo ešte stále spúšťa. Tu by sa bežný používateľ počítačov vzdal, lebo všade na internete nájde, že má ísť do registrov. Čo je rovnaké zaklínadlo ako príkazová riadka na Linuxe.

    Omyl! Stačí spustiť program msconfig. A vypnúť programy, ktoré sa vám tam nasáčkovali a spúšťajú sa po prihlásení. Ako to vyzerá?

    msconfig

    To je celé.

    Pokiaľ by niekoho zaujímalo, prečo mám nemecký Windows. Tak sa spýtajte Mišua alebo sa zamyslite nad mojou hypotézou. ;-)

    Tags: , ,

  • 29Okt

    Nejakú chvíľku som investoval do hľadania spôsobu, ako nahradiť textareu v jednom plugine pre Wordpress. Chcel som použiť komfortnejším TinyMCE. Najskôr som použil dokumentáciu od TinyMCE. To fungovalo. Každopádne nešlo prepojenie na tlačítka slúžiace na pridávanie obrázkov a súborov cez Wordpress galériu.

    Nakoniec som zistil, že priamo vo Wordpresse je fcia the_editor. Tá síce vygenerovala TinyMCE obálku. Ale akosi to moc nefungovalo. Handlery nehandlovali. Proste nepoužiteľné.

    To čo chýbalo, bol nasledujúci kúsok kódu, ktorý aktivuje loadovanie TinyMCE (autor: Anthony @ Zend-reams.com ):

    add_filter('admin_head','ShowTinyMCE');
    function ShowTinyMCE() {
    	// conditions here
    	wp_enqueue_script( 'common' );
    	wp_enqueue_script( 'jquery-color' );
    	wp_print_scripts('editor');
    	if (function_exists('add_thickbox')) add_thickbox();
    	wp_print_scripts('media-upload');
    	if (function_exists('wp_tiny_mce')) wp_tiny_mce();
    	wp_admin_css();
    	wp_enqueue_script('utils');
    	do_action("admin_print_styles-post-php");
    	do_action('admin_print_styles');
    }

    Samotný kód pre vytvorenie editoru s podporou multimediálnych tlačítok sa vyvolá nasledovne:

    the_editor('tralala obsah', 'policko_z_formu', 'policko_z_formu' ,true ) ;

    Tak jednoduché ;)

    Tags: , ,

  • 29Okt

    Príklad ako z marketingového šlabikára. Veď posúďte.

    Istá nemenovaná firma, nazvyme ju ReAjbí, produkuje produkt pre klientov. Je na trhu niekoľko rokov. Má dobré meno. Produkty sú síce relatívne drahé, ale klienti to zaplatia, pretože ich produkt má pre nich význam.

    Firma pošle klientovi formulár na objednávku. Klient je zvyknyutý, že je všetko ako bolo predtým, podpíše, odošle. A teší sa na nové produkty. Po týždni nájde na stole kópiu toho, čo podpísal a zrak mu padne na Hviezdičku.

    Hviezdičky s pripojeným malým textom vo formulároch neveštia nič dobré.

    Číta: “Touto objednávkou sa zavezujete k odberu 4 ďalších produktov.”

    Firma ReAjbí práve spôsobila zvýšenie tlaku v krvnom riečišti osoby, ktorá dokument podpísala. Priehršť nadávok sa rozlieha v jemnom echu, po dlhej chodbe budovy.

    Nuž. Čo už? Dobre. Tak nás dostali. Povie si klient.

    … dva dni neskôr …

    Telefón: “Cŕrn. Cŕrn. Haló. Dobrý deň. Tu je obchodné oddelenie ReAjbí. Rád by som vám ponúkol produkt blá, blá blá, blablablabla blá. Vyskúšajte. Blablablá VÝHODNÉ bláblabla blabla. Naše vynikajúce služby. Bla bla bláááá bla bla.”

    Klient: “No! Kľudne vzorok pošlite. Ale vám ho rovno vátim späť a rozhodne od vás nič nebudem objednávať! Vzhľadom na nekorektné podmienky v zmluve.”

    Telefón: Chvíľka ticha. “No, ale to my neriešime, to my za to nemôžeme…”

    Vernému čitateľovi určite neunikne profesionálna technika, ktorú obchoník úplne amatérsky použil. Jedná sa o Problém Niekoho Iného. Drobný teoretický základ: Pokiaľ obalíte niečo obálkou Problému Niekoho Iného, vec sa stane neviditeľná.

    V čom sa obchodník zmýlil je viac ako jasné. Samozrejme, že je to jeho problém. On nedostane do firmy ďalšie peniaze od klienta. Telefonuje s klientom, ktorého firma naštvala a klient mu rovno hovorí, že jeho produkty nechce.

    A tu sa pozná rozdiel medzi amatérskym a profesionálnym obchodníkom.

    Amatér nedokáže využiť moment toho, že klient je nahnevaný a rozpálený do červena. Profesionál by v tomto momente nepoužil obalenie záležitosti  do Problému Niekoho Iného. Namiesto toho, by dokázal nájsť cestu, ako vyriešiť s klientom problém. Možno by stačilo len vysvetliť, prečo spravili taký ťah s hviezdičkami a že klient nie je prvý, kto sa sťažuje na teraz už bývalého šéfa marketingového oddelenia. Hviezdička už bola odstránená. A ako uznanie našej chyby vám posielame poukaz na naše školenie. Výsledok? Klient spokojný. Pretože jeho námietka bola relevantná a je v riešení. Obchodník preukázal Leadership without title a priniesol do firmy ďalšie peniaze.

    Ako dopadol náš príbeh v skutočnosti? Obchodník bol amatér. Potom, čo aj napriek vysvetleniu: že je to jeho problém a mal by sa ho pokúsiť vyriešiť. Použil nie len techniku Problém Niekoho Iného, ale aj Opar a Stratenie sa v Hmle. Klient naštvane zavesil telefón a vyhodil do koša kalendár s vysmiatym tímom od spoločnosti ReAjbí.

    Tags: , , , ,

  • 28Okt

    Jaj. To som zase mal veľkú radosť, keď som zistil, že TurboMail má problémy s odosielaním mailov s diakritikou. Ja chápem, že ľudí v anglofónnych krajinách príliš netrápia nejaké tie srandovné veci nad písmenkami. Bez diakritiky je aplikácia pre Európu bezcenná.

    Tak, dosť lamentu. Ako poslať z Pythonu mail v UTF-8?

    Tu je kód, ktorý som prevzal od Mariusa Gedminasa a rozšíril som ho o pár riadkov, aby bol priamo spustiteľný.

    # -*- coding: utf-8 -*-
    from smtplib import SMTP
    from email.MIMEText import MIMEText
    from email.Header import Header
    from email.Utils import parseaddr, formataddr
    
    def send_email(sender, recipient, subject, body):
        """Send an email.
    
        All arguments should be Unicode strings (plain ASCII works as well).
    
        Only the real name part of sender and recipient addresses may contain
        non-ASCII characters.
    
        The email will be properly MIME encoded and delivered though SMTP to
        localhost port 25.  This is easy to change if you want something different.
    
        The charset of the email will be the first one out of US-ASCII, ISO-8859-1
        and UTF-8 that can represent all the characters occurring in the email.
        """
    
        # Header class is smart enough to try US-ASCII, then the charset we
        # provide, then fall back to UTF-8.
        header_charset = 'ISO-8859-1'
    
        # We must choose the body charset manually
        for body_charset in 'US-ASCII', 'ISO-8859-1', 'UTF-8':
            try:
                body.encode(body_charset)
            except UnicodeError:
                pass
            else:
                break
    
        # Split real name (which is optional) and email address parts
        sender_name, sender_addr = parseaddr(sender)
        recipient_name, recipient_addr = parseaddr(recipient)
    
        # We must always pass Unicode strings to Header, otherwise it will
        # use RFC 2047 encoding even on plain ASCII strings.
        sender_name = str(Header(unicode(sender_name), header_charset))
        recipient_name = str(Header(unicode(recipient_name), header_charset))
    
        # Make sure email addresses do not contain non-ASCII characters
        sender_addr = sender_addr.encode('ascii')
        recipient_addr = recipient_addr.encode('ascii')
    
        # Create the message ('plain' stands for Content-Type: text/plain)
        msg = MIMEText(body.encode(body_charset), 'plain', body_charset)
        msg['From'] = formataddr((sender_name, sender_addr))
        msg['To'] = formataddr((recipient_name, recipient_addr))
        msg['Subject'] = Header(unicode(subject), header_charset)
    
        # Send the message via SMTP to localhost:25
        smtp = SMTP("localhost")
        smtp.sendmail(sender, recipient, msg.as_string())
        smtp.quit()
    
    send_email('odosielatel@sinusgear.com',
     'prijemca@sinusgear.com',
     u'Guľôčka v jamôčke',
     u"""Lečo, haruľa, šašlík.
    A ako dopadne odosielanie ďalšieho riadku? Bude na novom riadku.
    A čo tak odoslať trošku dlhší reťazec znakov, než obyčajných 80, aby sme videli, ako si s tým mailer programy poradia. """)

    Všetko. Stačí uložiť do send.py a zavolať: python send.py

    Tisíce ďakovných listov od spokojných Pythonierov a neskonalá vďaka Mariusovi.

    Tags: , , , ,

  • 27Okt

    Rád by som sa pochválil referenciou z portálu zdrojak.cz – Střípky z WebExpo 2009.

    Ďakujem za referenciu. :-)

    Tags: , ,

  • 26Okt

    Zadáte:

    svn up

    A dostanete:

    svn: OPTIONS of 'https://svn....../repo/trunk':
    Certificate verification error: signed using insecure
    algorithm (https://svn.....)

    Čo teraz? Diskusie na internete nenesú jediné rozumné vodítko. Okrem toho, že vám odporúčajú downgradovať jednu knižnicu. Neznalému čitateľovi napoviem, že knižnica je vyžadovaná asi 40 ďalšími aplikáciami.

    Fix je jednoduchý. Zeditujte ~/.subversion/servers a do sekcie global pridajte:

    ssl-trust-default-ca = no

    Subversion sa opäť rozbehne.

    Upozornenie! Jedná sa o workaround.

    Tags: , , , ,

  • 25Okt

    Facebook ponúka API pre rôzne jazyky a technológie. Poďme sa pozrieť, ako je možné vytvoriť jednoduchú dekstopovú aplikáciu v Pythone, ktorá zaktualizuje stav požívateľa.

    Najskôr si stiahnime PyFacebook pomocou Gitu

    git clone git://github.com/sciyoshi/pyfacebook.git

    Potom nainštalujeme PyFacebook:

    cd pyfacebook
    python setup.py install

    Ďalej je nutné zaregistrovať aplikáciu na Facebooku, čím získame API Key a Secret. Pri konfigurkácii zvolíme v záložke Advanced položku Application Type – Desktop.

    facebook-desktop-appKým sa vyreplikuje zmena nastavenia aplikácie, zostavíme jednoduchý program v Pythone, ktorý bude vedieť zaktualizovať status na Facebooku. API_KEY a SECRET si nahraďte svojimi hodnotami.

    import facebook
    fb = facebook.Facebook(API_KEY, SECRET)
    fb.auth.createToken()
    fb.login()

    V tomto mieste, už máme vytvorenú inštanciu triedy Facebook a môžeme veselo volať jej metódy, napríklad v konzole pomocou iPython. Na to, aby sme mohli aktualizovať status na Facebooku, budeme musieť používateľa požiadať o právo na aktualízáciu.

    fb.request_extended_permission('status_update')

    A môžeme aktualizovať.

    fb.status.set('Uspesny update statusu pomocou PyFacebook a iPython')

    Ako to vyzerá v praxi? Ukážka v iPython konzole:

    facebook-ipython-updateVýsledok na Facebooku:

    facebook-vysledokEšte doplním odkaz, pre vývojárov v Adobe Flex/AIR. Dobrý zdroj nájdete na adrese: http://www.adobe.com/devnet/facebook/

    Tags: , , , ,

  • 24Okt

    Vyvinúť aplikáciu, ktorá by používala spoločnú code base a bola by funkčná na webe, desktope aj mobile, nie je v súčastnosti úplne dobre možné. Každá z platforiem používa inú technológiu. Jedným z možných riešení je implementácia pomocou Adobe Flex a Adobe AIR. Vývojár je tým pádom odtienený od problému portability aplikácii a výsledný produkt beží na Linuxe, Windowse aj Macu.

    Pekným príkladom využitia Adobe Air je softvér na plánovanie a monitoring cieľov -- Goalscape. Na vývoji sa podieľa aj slovenská firma Flexets. Táto aplikácia pracuje nezávisle na operačnom systéme.

    Poďme sa pozrieť na open source technológie. Tam máme k dispozícii typicky Python, PHP alebo Ruby. Zaujímavý projekt spustila firma Appaccelerator pod názvom Titanium. Cieľom tohoto projektu je vybudovať prostredie pre tvorbu aplikácií, ktoré je možné prenášať hravo medzi platformami.

    Video, kde hovoria o platforme znie veľmi lákavo.

    Aká je však realita?

    Skúsil som teda Titanium. Inštalácia na Linux prebehla bez problémov. Otvorilo sa pekné rozhranie na štýl iTunes. Kde som si mohol vytvoriť aplikáciu. Zvoliť technológiu, ktorú používam. Zabaliť a publikovať. Všetko pekne graficky upravené. Na pár klikov som dostal funkčnú aplikáciu. Potom som zvolil zabaliť aplikáciu a div sa svete. Dist adresár mal 101 MB. Huh. To je na Ahoj Svet aplikáciu skutočne dosť.

    Pokúšal som sa nájsť teda tutoriály ako vyvíjať aplikácie. Moc úspešný som nebol. Videá na stránke ukazovali stále dookola niekoľko hotových produktov. V tomto stave bol Adobe AIR pred pár rokmi. Vravím si nevadí, nedarí sa mi vyvinúť vlastnú aplikáciu, sitahnem ukážkové. A tu som narazil. Vačšina aplikácii z nejakého dôvodu bola nestiahnuteľná.

    Za zmienku stojí, že Titanium integruje do seba aj podporu pre technológiu YQL, ktorá podstatne mení paradigmu písania aplikácii využívajúcich webové služby.

    Záver? Titanium má ukážkový marketing. Aktuálna verzia 0.7 zatiaľ pokryvkáva za štandardnou úrovňou komerčných riešení. Každopádne rozhodne budem tento produkt sledovať ďalej. Minimálne preto, že podporuje Python. ;-)

    Tags: , , , , , ,

  • 22Okt

    Ako som už písal, WSGI posúva možnosti hostovania Python aplikácii o míľové kroky dopredu. U WSGI je však jedna zrada, ktorá môže spôsobiť, že vaša aplikácia má namiesto dramaticky vysokého výkonu, výkon dramaticky mizerný.

    Problém je v tom, že väčšina tutoriálov vám odporúča nainštalovať WSGI a spraviť drobnú konfigurácie. Tradá a aplikácia funguje.

    Lenže!

    Ide relatívne rýchlo a ešte rýchlejšie vám zožiera pamäť. Pri vysokej záťaži odvarí server na load 55 a podobné radosti. V čom je problém? Neprečítali ste si manuál.

    Autori WSGI už asi boli znechutený tým, ako na nich ľudia neustále frflú a  upozornenie pre používateľa dali na prvú stránku projektu. Niečo na štýl: nesušte zápalky v mikrovlnke.

    Problém je v tom, že v základnom móde beží WSGI ako embeded aplikácia. Čo je tak dobré na malé jednoduché aplikácie typu Ahoj Mexiko. Pokiaľ teda nie ste expertom na tunenie Apacha, je pre vás vhodnejší mód, kedy beží aplikácia v démon procese.

    Čo na to treba? Vlastne pridať len dva riadky do konfigurácie VirtualHostu:

    WSGIDaemonProcess georgik.sinusgear.com threads=15 maximum-requests=10000
    WSGIProcessGroup georgik.sinusgear.com

    Úžasné! Rozdiel, ktorý vidíte, aj cítite :)

    Update: Rozhodne si prečítajte komentár od Messa. Veľmi dobre vysvetľuje princíp fungovania Apache/Python.

    http://georgik.sinusgear.com/2009/10/22/wsgi-mizerny-vykon-co-tak-precitat-manual/#comment-303

    Tags: , , ,

  • 21Okt

    Screen je užitočný nástroj, vďaka ktorému môžete nechať svoju rozpracovaná prácu v terminálovom okne a neskôr sa k nej môžete vrátiť. Využitie nájde typicky pri kompilácii veľkých projektov. Screen je veľmi užitočný pomocník aj keď  sa pripájate cez nestabilnú linku. Screen stačí vždy len znova pripojiť a vaša práca je v takom stave, v akom ste ju nechali.

    Ovládanie

    • screen – spustenie aplikácie
    • CTRL+a, d – detach – odpojenie
    • screen -r – reattach – pripojenie
    • CTRL+a, c – vytvorenie nového terminálu
    • CTRL+a, a – prepnutie medzi terminálmi (alá ALT+TAB)
    • CTRL+a, číslo – prepnutie na konkrétny terminál

    Materiály v PDF formáte.

    Tags: , , , , , ,

« Previous Entries