Archyvas

Įrašai, pažymėti ‘Python’

Geriausias Python+Django IDE

2010.09.21 Xamas Komentarų: 1

Prisimenu, kaip prieš beveik metus pradėjo giliau žvelgi į Python(Dive ir Python) ir peršokti iš statuso ‘aš žinau kas tai yra ir galiu parašyti 5 eilutes kodo‘ į ‘aš galiu programuoti python‘, gana rimto pavadinimo blogo įrašu: ‘Python VS Php‘:

http://www.prisimenu.lt/2009/11/xml-amadeus-pnr-crs-gds-soap-python-vs-php/

Tai va, praėjo metai, ir pagal idėją turėjau padaryti progresą šioje srityje. Na ir šiokį tokį padariau, tačiau bene svarbiausias dalykas manau būtų būtent pats ’system setup’as ir IDE. Dažnai teko gūglo klausti ‘best Python IDE‘, ‘best ide for python‘ bei ‘python+django for windows7‘.

Išbandžiau turbūt bene visus žinomus populiaresnius IDE:

  • 1. Aptana Studio 2 including PyDev 1.6.2
  • 2. Eclipse+PyDev 1.6.2
  • 3. Eric 5 Python IDE (QT + QScintilla)
  • 4. Komodo Edit
  • 5. NetBeans 6.9 + Python plugin
  • 6. PyCharm 1.0 Beta 2 (PY-96.1203 , Rev 2010, Sep 17)
  • 7. Python IDLE
  • 8. µ.dev
  • 9. WingIDE 4.0 Beta 4 / WingIDE 3.2.9

ir dar išsigooglinai ir apsišviečiau apie dar kelioliką įrankių skirtų Python’ui.

Mano progresas į Python’ą, o vėliau į Django buvo gana nestandartinis.

NetBeans 6.9 + Python plugin:
Kadangi gerai mokėjau Java, ir labai myliu NetBeans įrankį, kuris, mano nuomone, yra vienas geriausių IDE pasaulyje apskritai, tai pradėjau nuo Jython+Django buildo skirto NetBeans. Kas puiku – visa tai gavau per pačią NetBeans programą ‘plugins manager’ pagalba, todėl nieko instaliuoti kaip ir nebūtų reikėję, jeigu ne ’stable Jython’ problemos. T.y. Jython’as 2.5.1 ir senesni turėjo problemų su Exception’ų valdymu, todėl papildomai instaliavau 2.5.2 beta realyzus, kurie beje iki šiol vis dar beta stadijoje.

Viskas kaip ir gerai, išskyrus tai, kad Python’o pluginas NetBeans’e neturi Django palaikymo (tai yra suplanuota neva į NetBeans 7.0 įdiegti, tačiau bijau kad Python+NetBeans projektas šiuo metu yra apmiręs (viskas sustoję nuo berods dar 2008′ųjų).

Kitas trūkumus, nėra pilnaverčio Python auto-complete.

Tačiau pereinant nuo Javo’s į Python(Jython)  tai labai puikus dalykas, teko netgi vieną Java programą perrašyti ant Jython’o. Be to labai puikiai ir lengvai pavyko prijungti PostgreSQL DB prie Jython programos.

—–

O dabar apie kitus IDE:

Python IDLE – na nebent kažką minimaliai pratęstuoti, tikrai netinka daryti kažką daugiau.

Eclipse+PyDev 1.6.2AŠ NEKENČIU ECLIPSE . Apsivėmiau nuo Eclipse kai teko ieškoti Java IDE įrankių prieš 3 metus. Ir daugiau matyti nebenoriu. Nuomonės nepakeitė ir Eclipse+Pydev naujausios versijos. Gal kam nors tai ir tinkami įrankiai, bet man aplinka visai nedraugiška, nemaloni ir nepatogi.

Eric 5 Python IDE (QT + QScintilla) – neva turėjo būti kažkoks stebuklingas įrankis. Instaliacija – tragedija. 99 proc. žmonių nė susiinstaliuoti kad viskas veiktų nesugebėtų. Nepatogu ir apskritai ‘ką kūrėjas sau galvojo’.

µ.dev – jokios instaliacijos, kažkas neva minimalistiško, bet absoliučiai niekas neveikė, bent jau su Windows 7. Python net programos hello world nepavyko paleisti.

Komodo Edit - Freeware variantas neskirtas sukurti kažką daugiau, trūksta daugybės galimybių. Pilnos versijos net tingėjosi bandyti. Iš video, galbūt ir pusiau velnio įrankis, tačiau esama versija neplaiko Django.

WingIDE 4.0 Beta 4 / WingIDE 3.2.9 – palaiko Django, bet man nepatiko.  Nežinau kodėl taip buvo, bet kai kurios Python funkcijos neveikė, print’as nepripažindavo simbolių, o galbūt apskritai dvigubų kabučių, normaliai patogiai pasikurti ir valdyti projektų nepavyko. Yra nemažai kitų trukumų. Todėl nusprendžiau ieškoti kažko kito.

Aptana Studio 2 including PyDev 1.6.2 – variantas jau labai iš bėdos. Gana smarkiai jaučiasi Eclipse kvapas. Aš netgi sakyčiau, jog iš pirmo žvilgsnio atrodo tik Eclipse su pakeistu dizainu. Jeigu nebūtų nieko geriau, turbūt naudočiau. Beje, vienas kompetetingas su Python dirbantis kolega, paklausus jo nuomonės rekomendavo šį įrankį. Gaila, tačiau jis nebuvo girdėjęs apie PyCharm.

PyCharm 1.0 Beta 2 (PY-96.1203 , Rev 2010, Sep 17) – na va, štai ir priėjome. Ilgai bebėgiojus tarp įvairiausių IDE, apsistojau prie šio. Kol kas jis yra nemokamas, nes neturi dar 1.0 Stable versijos. Tačiau jos man tiesa sakant nelabai ir reikėjo. Projektas  dar visai naujas, tačiau progresuoja valandomis, vien per šį rugsėji jau buvo padaryti 3 relyzai šios programo versijų. Naujausias 96.1203. O programa išties puiki – automatinis paketų kurimas, ir atpažinimas, Python ir Django Unit testai, Source control – Mercurial, Perforce, Subversion, CVS, Git; itin gilus Python ir Django debuggeris, demo projektai, Python ir Django auto-complete, automatinis instaliacijų suradimas (tiesa, kol kas – kai pridedate Platform,  tai dar papildomai per add pridėkite ir Site-Packages direktoriją, kad ir Django instaliuotą surastų).

Automatizuotas Python+Django serverio paleidimas/buildas vos vieno klavišo paspaudimu, grafinis debugeris, panašus į C# naudojama Microsoft Visual Studio 2008. Be to labai paprastas Windows-1257/UTF-8 koduočių switch’ingas ir daugybė kitų dalykų.

Na o tiems, kurie dar netiki PyCharm’u, geriau pasižiūrėkite šį video:

PyCharm – Getting_started

O svarbiausia, aš dievinu šį tūlsą dėl labai faino interfeiso. Ir pamėgiau jį iškart – taip kaip buvo Free Pascal AKL atveju(kai rinkausi Pascal IDE), taip kaip buvo Code::Blocks(kai rinkausi C++ IDE, ir po to kai supykino DevC++), ir lygiai taip kaip atradau NetBeans IDE(ieškodamas geriausio Java redaktoriaus, ir 3 dienas pykinus nuo Eclipse).

Be abejonės seksiu šio projekto pažanga, bet jeigu JetBrains PyCharm kurėjai sukurė tai, ką mačiau, jau dabar, dar 1.0 beta versijoje, tai net baisu galvoti, ką mes turėsime su 2.0.

Atsiųsti Pycharm galima iš čia (Developer blogas su naujausiais relyzais):

http://blogs.jetbrains.com/pycharm/

Aišku taip pat laukčiau Python+NetBeans 7.0, jeigu Python geek’ai neapleido dar šio projekto.

Pastebėjimo dėlei - su PyCharm, nuo atsisiuntimo ir visiško nulio, pakurti minimalų Django hello world saituką prisireikė vos 20 minučių, su kitomis programomis, vien Python paleisti per IDE užtrukdau dieną ar ilgiau, ką bekalbėti apie antrąjį, Django etapą.

Tiesa, neužsiminau apie IronPython’ą, bet čia manau viskas aišku – MS Visual Studio 2010. Beje, kaip kad CPython+Django, su IronPython’u pasiėmiau alternatyvą – IronPython+SilverLight. Beje, labai smagiau programavosi ir pakūriau pora projektėlių. Minusas tik tas, kad jie veikė tik Windows serveriuose. O tai gana didelė prabanga. Per daug komerciška nedideliems projektams įmonėms.

Išvados:

Jeigu nori kad būtų paprasta, ir turi patirties su Java – naudok NetBeans+Jython pluginus. Galėsi dalį kodo rašyti Python, dalį Java, maišyti bibliotekas ir paketus. Paprastai sukonfigūruosi duom. bazės naudojimą.

Antras etapas – jeigu neteko dirbti su Java, arba jau moki Jython, ir nori labiau pasinerti į web on Python – Django, imk PyCharm+Python 2.7+Django, arba MS Visual Studio+IronPython+SilverLight, jeigu tekę dirbti nemažai su MS Visual Studio ir šiaip prijauti MicroSoftui bei norėtum SilverLight’o, o Django tau nėra prioritetinis web framework’as.

2. NetBeans Python plugin

Sumąsčiau, kad mokytis per lengva

2009.11.26 Xamas Komentarų: 0

Ne iš šio ne iš to. Na galbūt iš to, kad labai dažnai pagaunu save prisilaikantį idėjos apibėgti viską ką pajėgiu(ar net nebepajėgiu). Tai šį kartą neišsitekau su vienu LPD(laisvai pasirenkamas dalykas), tai toks dalykas kuris egzistuoja VU(manau ir kitur), kur mačiau du tikrai naudingus dalykus[python kursas ar C# kursas yra nenaudingi kursai - tai kuo puikiausiai įmanoma išmokti pačiam]. Taigi mano akys užkliuvo už dviejų – multi-kernel’ingo(C#) bei Mobilijųjų technologijų. Multi-kernel’ingas toks labiau pagal specialybę sakyčiau dalykas, iš jau hi-end srities. Bet vat mobiliųjų technologijų įrašas bakalaure ar magistre tikrai šiek tiek praplečia veiklos galimybes baigus studijas ar/ir studijų metu. Faktiškai tai sritis, kurią savaime, kaip kad Fizika(astronomija, el. dalelių fizika ir kt.) ar Matematika(Mat. analizė, algebra ir kt.) tikrai nepulsi narsiai gilintis niekieno neverčiamas. Tačiau tai labai įdomūs dalykai juos suprantant – tai juos išskirčiau prie tų, kurie itin tinkami tapti lankomų paskaitų objektu.

Tas pats ir su mob. technologijom, toks dalykas kuris labai platus ir manau tikrai vertas tapti klausomu kursu.

Taigi, kadangi niekaip nesigavo išsirinkti vieną, nuėjau į studijų skyrių ir pasiskolinau 3 kreditus iš kito semestro :D .

Vien jau sandas kaip neblogai atrodo(tikiuosi čia nėra ‘totally secret’ informacija kurią griežtai draudžiama publikuoti(?)):
GSM tinklo architektūros apžvalga. Septinta signalizacijos sistema SS7. Komutacinė stotis MSC. Namų ir vizitaciniai registrai HLR ir VLR. Bazinių stočių kontroleris BSC. Bazinės stotys BS. Trumpųjų žinučių centras SMSC. Paketinio duomenų perdavimo elementai GGSN ir SGSN. SIM kortelė, jos sandara ir paskirtis. Mobilus įrenginys ME. Pozicionavimas. Paslaugų apskaita. 3G/UMTS tinklas. Trumpųjų žinučių paslauga SMS. SMS centro architektūra ir veikimo principai. Standartai. Žinučių tipai: SMS-SUBMIT, SMS-SUBMIT-REPORT, SMS-DELIVER, SMS-DELIVERY-REPORT. SS7 MAP (Mobile Application Part) pranešimai tarp tinklo elementų HLR/VLR, MSC, SMSC. Žinučių teksto kodavimas: GSM alfabetas, dvejetainiai duomenys ir unikodas. Vartotojo duomenų antraštė UDH. Ilgosios žinutės. Specialios žinutės: EMS, WAP push, MMS indikacija. Adresacija. AT komandos. Žinučių perdavimo per IP protokolas SMPP. Apmokestinimas. Daugiaformačių pranešimų paslauga MMS. MMS centro architektūra ir veikimo principai. Standartai. MM1, MM3, MM4, MM7 protokolai. Tranzakcijų modelis. MMS išsiuntimas, priėmimas ir gavimo ataskaitos. MMS kodavimas. MMS prezentacijų kalba SMIL. MMS transportavimas: tarp šalies ir užsienio operatorių, el. paštu bei pridėtinių paslaugų tiekėjams VASP. MMS turinio adaptavimas. Apmokestinimas. Mobilusis protokolas WAP. WAP 1.x ir WAP 2.0 (wHTTP, HTTPS) protokolai. Standartai. Autentifikavimas, autorizavimas ir apskaita (AAA). Paketiniai duomenys GPRS, prieigos taškas APN. WAP šliuzas. WAP žiniatinklo (proxy) serveris. Tinklo adresų transliavimas NAT. Push proxy šliuzas PPG. WML ir xHTML puslapiai. Duomenų kešavimas. Mobilaus įrenginio savybių nustatymas pagal WAP antraštes ir UAProf. Kannel ir Apache 2.x moduliai.
Oj kiek daug visokių įdomių trumpinių :D .

Na anyway, jeigu ir išnaudosiu savo LPD rezervus, tai blogiausiu atveju iš didelio noro galima tų kreditų ir nusipirkti.

Bet dabar pagalvojau – jeigu koks matanas(mat.analizė) būtų koks LPD ar man kiltų nors kokia pagunda jį pasirinkti. Dėl kažkokių priežasčių nesu tuo labai tikras :D .

XML – Amadeus, PNR, CRS, GDS, SOAP; Python VS Php

2009.11.24 Xamas Komentarų: 7

Prieš kelis mėnesius maniau kad apie XML’ą žinau didžiąją dalį ir ten nieko naujo būti negali. xml.gz kūrimus/eksportavimus/nuskaitymus laikiau sudėtingesne užduotimi.
Tačiau, kaip sakome, technologijos ir reikalavimai vietoje nestovi.

Todėl visai nenustebau gavęs requirement listą su reikalavimais:

  • Įsisavininti ir tinkamai panaudoti SOAP duomenų perdavimo šifravimą vykdant prisijungimus per XML.
    Pilnai įsisavinti Amadeus sistemos sąsajos kvietimus ir panaudojimus.
  • Suprogramuoti ir automatizuotai įvykdyti(sheduled cronjobs) P.N.R.(part of <– CRS) transakcijos importus automatizuotų modulių pagalbą.
  • Naudoti GDS sitemų gražinamą informaciją tiesioginės transakcijos būtu.

* Tiems, kas nežino:
PNR - Passenger Name Record
CRS – Computer reservations system
GDS – Global Distribution Systems

Dar vienas dalykas kuris mane kiek nudžiugino yra tai, kad vis dėl to iš universiteto naudos kažkiek yra. Iki universiteto UML diagramų paišyti ir jų skaityti tikrai papildomų pastangų mokytis nedariau. Turėjau galima sakyti tik pačius pagrindus, būtinus suprasti reikalavimus.

O štai dabar jau turbūt gerą pusmetį pastebiu kad visi projektai kuriuos kuruoju/programuoju ar dalyvauju realizuojant/programuojant eina su milžiniškomis *.pdf dokomentacijomis:

  • prieš metus-pora 80 proc. atvejų jos būdavo 1-5 A4 puslapių dydžių, be UML diagramų, ir tik 20 proc. turėdavo primityviais diagramas, būtinas suprasti reikalavimams.
  • pastarąjį pusmetį dokomentacijų dydžiai vis augo jau geometrine progresije. Ir pastaruosiuose projektuose vien dokomentacijoms perskaityti reikia skirti keleta dienų, kadangi jų dydžiai pradėjo viršyti 100-140 puslapių.

Na ir čia jau turbūt nenuostabu, kad visi tie ‘docummentation’ai kupini sekų, būsenų, ER, klasių(class), veiklos(activity), objektų(objects) ir netgi diegimo(deployment) diagramų.

Todėl dabar jau turbūt užtikrintai galiu sakyti, neįsisavinus UML’o praktiškai nieko stambesnio nesuprogramuosi, nes requirementus ir realizaciją aprašo matomai specialūs UML ‘profai’, kurių atrodo kiekvienoje stambesnėje įmonėje yra net po keletą.

Na o iš viso to seka, kad funkcinis programavimas tampa praktiškai neįmanomas norint teisingai realizuoti reikalavimus. Viskas praktiškai seka tik per objektus.

———-

Python:

Vis dažniau pastaraisiais mėnesiais į mano valgiaraštį patenka prieskonis ‘Python’. Todėl visai nenustembu kad Gūglas gražina 28 milijonus rezultatų su fraze ‘Python VS Php’.

Vienas žmogelis kaip argumetą ‘why the php is the greatest programming language in the world’, pateikia šias eilutes:

$a = 'var'; $b = 'iable';
$variable = 'var';
echo ${$a.$b};
$filter = array("name", "email");
foreach($filter as $v) $$v = $_POST[$v];

Šaunu, ar ne? :) Nedaugelis programavimo kalbų gali pasigirti tokia realizacija :)

Pitonu paskutinės dvi eilutės būtų realizuojamos taip:

post = {'name': 'ijoshua', 'email': 'spam@example.com', 'extra': 'data'}
filter = ['name', 'email']
for k in filter: locals()[k] = post[k]
print name, email

Kuri programavimo kalba yra geresnė, atsakymai ir ginčai turbūt būtų beprasmiai, tačiau bendrai ką pastebėjau, tai, jeigu žmogus programuoja Php, jis yra linkęs po kiek metų išmokti ir Python(o jeigu tiksliau, tai Ruby on Rails programavimą, na bet Python turbūt būtų geriausias jų atstovas). Ir būna nemažai atveju netgi taip, kad tas programuotojas pereina nuo Php į Python.
Tačiau visi Python’instai kažkodėl labai dažnai pasisako prieš Php, ir nė nebando pažinti šios programavimo kalbos subtilybių.

Python(ir viso ruby on rails) privalumas yra tas, kas jis pasižymi geresniu skaitomumu nei Php. Ten nebėra kabučių print’e, kabliataškių eilutės pabaigoje, nebeliko ir laužtinių skliaustų {}. Praktiškai kodas turėtų išties gebėti būti rašomas ir skaitomas greičiau. Bet ne visada praktika atitinka tikrovę.

Tačiau,

  • Python’as turi kur kas ribotesnį funkcijų sąrašą, metodų, operatacijų sąrašą nei Php.
  • Kitas dalykas, nors ir sakoma kad Python turi tokį pat gerą documentation’ą, tačiau aš visgi tikrai pastebėčiau, kad bendro internete išplatinto ‘example’ kodo, bei tutorial’u atžvilgiu, bei ypač DAUGIAKALBIŠKUMO šitiems dalykams(Php LT doc’as interneto platybėse yra tikrai didžiulis) atžvilgiu Php yra geresnėje situacijoje.
  • Trečias dalykas, visgi vėl tie patys Python naudotojai pripažysta, kad Php web terpėj kai kuriais atžvilgiai tikrai yra paprastesnis – pvz. sql prisijungimu ir pan. Tačiau Python’as dar yra plačiai taikomas Desktop programoms ir sisteminiam script’inimui, ko nėra Php atveju.
  • Python’as praktiškai turėjo sujungti C++ ir Php į kažką vieną, Ruby on Rails pagrindu. Kadangi Python’u suprogramuotas Jūtūbas, tai galima būtų sakyti, kad jiems tai neblogai ir pavyko.
  • Php kompiliavimo/vykdymo laikas yra geresnis nei Ruby on Rails atveju, t.y. naudojant pvz. Python. Tačiau jeigu labai aktualus greitis tai tam pasitelkiamas ASM arba išvis tiesiog 0/1 kodas.

 

Na bet tai kol kas tik teoriją. Phyton teks išmokti iki kitos vasaros, lygiai taip pat kaip teko mokytis C# praėjusį šių metų pavasarį. Kaip sakoma nuo reikalavimų nepabėgsi – jeigu jau kartą teko rašyti WWW tinklapį C#(.NET)’u ir tą padaryti pavyko sakyčiau, kaip pirmą kartą dirbus konkrečiai su C# (.NET), tai matyt turėtų pavykti ir Phyton’u.

Na, nors projekto su Python’u end-line’as dar už bene pusmečio, tačiau jau šiandien parašiau pirmąsias 70 eilučių Python kodu. Liko dar 9930.  Aišku antrąjį skaičių primečiau kreivai iš akies, bet +-~ kažkas tokio :D .

Tad skirtumas tarp studentų besimokančių Python’ą universitete ir darbe matyt tiktais vienas – čia tau dar ir sumoka už tai kad tai išmoktum :).
Apie universitetines elgetos dydžio stipendijas nekalbu. Nors, tiesa sakant, turbūt per gerai pasakiau – tiksliau būtų ‘Prienų bobutės pensijos dalis išskaičiavus pragyvenimo išlaidas’. Taip, galbūt ir atsiras smerkiančiųjų, tačiau manau 95 proc. studentų pasirinktų ‘darbas+studijos(5-8 pažym.)’, vietoje ‘tik studijos 9-10 balų pažymais+stipendija’… Svarbiausiai, kad pirmajam atvejui nereiktų pridėti prie sąrašo “-X dalykų kartojimas” :D . Nes tada jau kuo toliau tuo labiau gaunasi ‘tas ant to’.