Jún 19, 2009

Generovanie náhodného reťazca v Pythone

Nedávano som potreboval vygenerovať náhodný reťazec v Pythone, ktorý by pozostával výhradne z definovaných znakov. Úloha je to celkom triviálna. Riešení som našiel veľa. Každopádne toto sa mi pozdávalo najviac:

import random

key = “”.join([random.choice(“1234567890”) for i in range(30)])

O jeden príspevok nižšie bol vo fóre vtipný fór:

Do you know how to generate real long random string in Python?
Find a Perl file on your system and read it 🙂

A tento poznáte?

Perl je jediný jazyk, v ktorom kód po zašifrovaní pomocou RSA vyzerá rovnako ako predtým.

😉 Poznáte nejaký dobrý frk na iné programovacie jazyky? 🙂

Jún 11, 2009

ZSI Web Services jednoducho a rýchlo

Ten, čo  Web Services ponzá, ten mi môže dosvedčiť, aká je to vec hrozná do XML zablúdiť.

Už pri prvých pokusoch narazí nešťastník na komplexnú problematiku namespacov, formátovania XML a iných netušených veselostí, o ktorých sa bežnému človeku našťastie ani nesníva. Ako hovorí jeden slávny celebrit: “Každé komplexné riešenie obsahuje netriviálnu imaginárnu zložku.”

Existujú kvalitné nástroje na prácu so SOAPom, napríklad SOAP UI. Pomocou tohoto nástroja si môžete vytvárať XML požiadavky na základe WSDL. Vytvárať simuláciu SOAP funkcie (mock-up), bez toho, aby ste mali k dispozícii službu poskytujúcu túto funkciou. Ďalšou veľmi dobrou vecou sú Test casy a Load testy, takže vývojár môže otestovať stabilitu svojho riešenia a automatizovať prácu.

Kde to má háčik? Človek sa stále pohybuje v XML.

Ako hovorí veľa významný bádateľ Cimrman: “Zkuste to bez drátů, Markoni!”

Čo tak skúsiť Web services bez XML?

Na pomoc si zavoláme mocný Python s rozšírením Zolera Soap Infrastructure (ZSI).

import sys
from ZSI.client import NamedParamBinding

srv = NamedParamBinding(“https://lagoon-03.atollon.com/axis2/atollon”, tracefile=sys.stdout)
response = srv.QuickLogin(server=’test’, userName=’cimrman’, password=’b6……c01′)

Ako výsledok z funkcie QuickLogin dostaneme dictionary a môžeme s ním ďalej pracovať. 🙂

print response[‘session’]

Ešte dodám, že na tému Web Services a Python som našiel celkom zujímavú sériu článkov.

Jún 10, 2009

IPython interaktívny shell

Jednou z veľkých výhod Pythonu je jeho interaktívny shell, do ktorého môže človek písať kód. Stačí jednoducho spustiť Python shell a tradá.

$ python
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex….

Nejakú dobu som bádal, či by nebolo možné vložiť do Python shellu funkcie, ktoré sú dostupné v shelloch ako Zsh alebo Bash. Hľadal som, hľadal a našiel IPython.

ipython-ukazka

Čo to všetko vie?

  • dopĺňanie kódu pomocou tabulátora
  • rýchle vypísanie dostupných atribútov a funkcii objektu (tabulátor)
  • veľmi užitočný príkaz help
  • kombinácia so shell príkazmi ako cd, ls
  • farebný a podrobný stack trace v prípade výnimky
  • história
  • vyhľadávanie v histórii (CTRL+R)
  • logovanie

IPython určite stojí za vyskúšanie.

December 27, 2008

Vypísanie UTF8 reťazca na konzolu a presmerovanie do súboru

Narazil som na zaujímavý problém v Pythone. Mám nasledujúci kód, ktorý vypíše utf-8 reťazec:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name = u'žinčica'
print name

Pri štandardnom spustením dostanem pekne výstup:

$ python zincica.py

žinčica

Keď ale presmerujem výstup do súboru, dostanem nasledujúcu chybu:

$ python zincica.py >/tmp/ostiepok

...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u017e' in position 0: ordinal not in range(128)

Problém spočíva v tom, že stdout má ako kodek na kódovanie výstupu automaticky nastavený ‘ascii’. Riešenie problému je jednoduché, stačí na stdout prestaviť kodek na utf8:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs
import sys

sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

name = u'žinčica'
print name

Zdroj: http://www.gossamer-threads.com/lists/python/python/701452