Blogi

Vaarallinen pickle-moduuli ja testauksesta yleensä

10.9.2009, kirjoittanut Jussi Kasurinen

No niin,

Taas on kuukausi vierähtänyt ja tämänkertaiseen artikkeliin ajattelin kirjoitella uusia kuulumisia ohjelmointiaiheiden piiristä. Kuukauden ensimmäinen aihe onkin yllättäen pickle-moduuli, jonka käytöstä mainitsin myös kurssiin liittyvässä kirjassa. Yleisesti varsin viattomalta datantallennus- ja palautusmoduulilta näyttävä paketti näet sisältää mielenkiintoisen ongelman: sen avulla pystyy ajamaan ohjelmakoodia. Vaikka tämä mainitaankin moduulin dokumentaatiossa, on syytä huomata että esimerkiksi datagrammien (eli pickellä luotujen datapakettien) lähetteleminen esimerkiksi verkko-ohjelmassa ei ole kovin turvallista. Kuten allaolevassa linkissä osoitetaan, voi pahaatahtova käyttäjä tällöin lähetellä toiseen päähän ohjelmia, jotka voivat suorittaa varsin ikäviä toimenpiteitä:

http://nadiana.com/python-pickle-insecure

Esimerkiksi käyttäjän omien tiedostojen -tai miksei koko tietokoneen kiintolevyn- tyhjentäminen onkin varsin suosittu jäynä tälläisissa tapauksissa, ja se varmasti herättää lämpimiä tunteita kaikissa osapuolissa. Osassa jopa varsin paljon lämpimämpiä kuin toisissa.

Viikon toinen aihe, josta ajattelin tähän kirjoittaa liittyy sekin ohjelmoinnin nostattamiin suuriin tunteisiin. Ohjelmien testaaminen onkin näet aihe, joka saa alalla olevan altistumaan helposti päihdeongelmille ja alasta mitään tietämättömät ihmettelemään että ”no miksi et kodaa”. Allaoleva linkki listaakin varsin osuvasti 62 tavallisimmin testaajia ärsyttävää ominaisuutta:

http://api.ning.com/files/QJi*hMri9yLAaJLwOayr07w0YIdLUmjoWnOO4PaBv6xzcxpbvSGEbTxgy3Iv65kcGPO5gBEltcf*2fcvndjPIKHr2t7RYMBt/stcwhatdotestershateabouttesting.pdf

Listaa katsellessa tulee helposti mieleen, että eräs piikkitukkainen hallinnon henkilö heittää kuutamokeikkaa useammassakin ohjelmistofirmassa. Itse haluan muistuttaa siitä, virheiden metsästys alkaa jo ohjelmoinnista, joten kommentoikaa ja testatkaa omat koodinne. Joku muu, tai viimeistään itse, osaa arvostaa tätä toimenpidettä kun puolen vuoden päästä palataan puukottamaan samaa koodia.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Viraalinen Python3-mainos (lähetä tämä kavereillesikin tai se ei toimi)

4.8.2009, kirjoittanut Jussi Kasurinen

Hei taas,

Tässä pikkuhiljaa kaikenmaailman siat ja flunssat nurkista ajaneena alkaa taas pikkuhiljaa hissi mennä vintille asti. Jo välittömästi viikon väistelyn jälkeen päätinkin kirjoittaa taas uuden merkinnän blogiin kun Python-puolella on taas liikehdintää.

Tällä tietenkin viittaan Python 3:n esimmäiseen suurempaan päivitykseen, joka on siis Python 3.1.  Pieniä muutoksia näyttäisi tulleen mm. tuhatlukujen tulostamiseen, pyöristysfunktion käyttöön sekä muutamaan muuhun toimintoon, kuten yksikkötestien ajamiseen. Testauksen ollessa eräs uusista mielenkiinnon kohteistani olen hyvin kiinnostunut tästä ominaisuudesta, mahdollisuus tehdä ajurimoduuli automaatiocaseja varten… Pitääkin tutustua tarkemmin.

Kuukauden tyhmin idea kuitenkin lienee PSF:n ympärillä liikkunut markkinointiajatus pyrkiä markkinoimaan Python-ohjelmointikieltä viraalisesti. Eli siis, luoda suusta-suuhun markkinointia kaikenmaailman kikoilla ja tempuilla hyödyntäen Twitteriä, Facebookkia ja ylipäänsä vastaavia webin sosiaalisia verkostoja ja yhteisöjä. Ehkä jonkin nuorisotuotteen markkinoinnin voisin vielä ymmärtää, mutta ohjelmointikielen esittely ja promoaminen ”viraalisesti”… Noh, on se ainakin idea. Youtube-video Python3-ohjelmoinnista ei luultavasti saa kovin montaa linkkiforwardointia, mutta yrittää toki saa. Kuten sanoin, on se ainakin idea. Jos rickrollingista on onnistuttu tekemään Internet-meemi niin kuka tietää.

Joskus syksymmällä koitan taas palata aiheeseen jonkin ohjelmointiaiheen, kuten verkko-ohjelmoinnin tai vastaavan kanssa; tälläerää onnistuin väistelemään varsinaisen sisällöntuotannon kirjoittamalla viraalisesta markkinoinnista. Ai niin mutta eihän sitä nyt olisi tähän pitänyt kirjoittaa…

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Rinnakkaisuudesta ohjelmien ajamisessa

7.7.2009, kirjoittanut Jussi Kasurinen

Hei taas,

Tällä kertaa päivitän blogia tien päältä, olen par’aikaa Pariisissa tietojenkäsittelytieteiden konferenssissa kuuntelemassa alan uutta tutkimustietoa.

Konferenssissa eräs yksityiskohta kiinnosti minua erityisesti; erään suuren Yhdysvaltalaisen prosessorivalmistajan pitämä sponsoritilaisuus, jossa kovaan ääneen toitotettiin rinnakkaisuuden tuovan tietokoneiden toimintaan uutta, kauan kaivattua tehoa.  Luennoija näytti kyllä mielellään esimerkkejä C++ ja Java-kielillä, ja totesi, että lähitulevaisuudessa pystytään rakentamaan 128 yleisytimen koneita, joissa pystytään ajamaan suuri määrä raskaita ohjelmia yht’aikaa ilman että yksikään niistä alkaisi hidastella. Ihan komea visio (ja promoständiltäkin irtosi kivasti taskunpohjalle kaikenlaista pikkulelua).

Itseasiassa, Mooren lakiakin pitäisi heidän mielestä viimeistään nyt päivittää muotoon ”prosessoriytimien määrä tuplaantuu kerran kahdessa vuodessa”. Totuus jäänee kuitenkin tässä asiassa nähtäväksi, rinnakkaisuuden kanssa on painittu ennenkin mm. hyperkuution yhteydessä, joten itse suhtaudun visioon hieman skeptisesti. Toisaalta taas, nykyisellään yksiytimisellä prosessorilla varustetun tietokoneen hankkiakseen pitää alkaa kiertelemaan kierrätyskeskuksia, muutaman vuoden päästä teknologiamuseoita.

Ajattelin kuitenkin huomattaa siitä, että kävi vision kanssa kuinka tahansa, on Pythonissa vastaavat toiminnot oletuskirjastoissa threading ja thread, joiden avulla ohjelma voi käynnistellä uusia prosesseja ja threadeja, käyttiksen huolehtiessa itse kuormajaosta. Tällä tavoin pystyy rinnakkaisuudella jakamaan raskaan suorituksen useaan osaan. Tai sotkemaan ohjelman lopullisesti pikkubugien ja synkronointiongelmien viidakkoon. Kummin tahansa, vaikuttaisi siltä että threadingin käyttämistä pitäisi alkaa jossain vaiheessa opettelemaan.

Vielä lopuksi, robotille josta mainitsin viimeksi, kuuluu hyvää. Ilokseni robotti osasi suoraan lukea sarjaporttiin USB-emulointisoftan läpi lähetettyjä käskyjä, tehden robotin ohjelmoinnista ja ohjaamisesta helppoa. Ainakin silloin kun se pirulainen ei ole ajamassa pöydältä tai portaista alas.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Se elää! Robotin ohjausta Pythonilla

12.6.2009, kirjoittanut Jussi Kasurinen

No niin,

Reilu kuukausi vierähtikin nopiasti opetus- ja tutkimushommia tehdessä, mutta koitetaan nyt välillä muistaa tännekin jotain kirjoitella.

Tosiaan, aikaisemmin mainitsin siitä, että olin kiinnostunut aloittamaan BASIC Stamp-robotin rakentelun ja rakentamaan siihen rajapinnan Pythonille. Aika ei vielä silloin ollut ilmeisesti sopiva, mutta heti pian kaksi vuotta ihmisiä suostuteltuani hankimme labraan ko. robotin ja aloitin sen kanssa painimisen tässä viikko sitten.

Toistaiseksi olen vasta ehtinyt tekemään jotain perus-juttuja, asentamaan ja kalibroimaan servot ja testaamaan anturit, mutta kunhan tästä nyt kesä etenee niin ehkäpä voin kirjoitella enemmänkin juttua uudesta robotistamme.

MItäs muuta, Python 3.1 näyttäisi olevan nurkan takana. Kyseessä ei kuitenkaan ole periaatteessa kuin laajennettu bugipäivitys, joten sen asenteleminen tulee varmaankin ajankohtaisesti kunhan beta- ja RC-vaihe on saatu päätökseen.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Liikuteltavampaa ohjelmointia

5.5.2009, kirjoittanut Jussi Kasurinen

Jees, vaput on pidetty ja sitkeimmätkin sissit alkaa pikkuhiljaa palailla krapulan vietosta takaisin arkiin. Ainakin siihen asti kun juhannus ja kesälomat alkaa painamaan päälle. Mutta niin, kesäinen sää saakin nyt jäädä taka-alalle verhojen taakse kun keskityn pääasiaan, eli ohjelmointiin.

Edellisessä artikkelissani kirjoitin USB-tikulla liikuteltavasta Pythonista, ja kommentoin sitä kuinka älylaitealustalle löytyy hyvin huonosti suoraa tukea. Nyt voin sitten ottaa jalan suustani, koska tarkemman etsimisen jälkeen löysin pari mielenkiintoisempaa linkkiä;

http://www.eriksmartt.com/blog/pys60

On Python S60-sarjan Symbian-alustalle, ja

http://code.google.com/p/jythonroid/

Jython Googlen Android-alustalle. Lisäksi Se Windows Mobilelle kaipaamani Python löytyi kun laski simat ja tippaleivät käsistään ja käytti hetken aikaa linkkien etsimiseen:

http://pythonce.sourceforge.net/

Tuo versio näyttää itseasiassa niin hyvältä, että taidan etsiä vanhan HPn PDAn-ruoskan ja kokeilen josko saisin sillä tehtyä jotain mielenkiintoista.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Liikuteltavaa ohjelmointia

23.4.2009, kirjoittanut Jussi Kasurinen

Joskus matkoilla ollessa tai esimerkiksi koululla voi tulla tilanteita, jossa Python-ohjelmointityökaluista olisi apua mutta niihin ei juuri silloin pääse käsiksi. Vastaavasti, joskus työhommissa voidaan päätyä tilanteeseen, jossa haluaisit demota jotain lähdekoodia, mutta esityskone ei anna asentaa mitään ohjelmia ja demoamiset jää silläerää siihen.

Tähänkin ongelmaan on olemassa ratkaisu. Mieti tuo lause uudelleen OstosTV-äänellä. No niin, eli siis Portable Python

http://www.portablepython.com/

mahdollistaa vanhan USB-tikun kierrättämisen Python-ajoalustana, ja sen ansiosta Pythonia voi nyt kodata ja demota millä tahansa Windows-koneella joka sallii USB-tikun kiinnittämisen. Paketti ei ikävä kyllä vielä toimi Linux-ympäristössä.

Vaikuttaisi ihan näppärältä idealta, joskin itse olen hieman harmissani, ettei laite nimestään huolimatta ollutkaan Pocket PC -ohjelmia takova Python. Ovat itseassa jopa hyvin yksikäsitteisiä tämän asian suhteen, en tainnut olla ensimmäinen asiaa tältä kannalta ajatellut.

Täältä tähän,

Jussi Kasurinen Lue koko artikkeli »

Artikkeliin ei ole kommentteja »

Python ja avoimet työpaikat

23.3.2009, kirjoittanut Jussi Kasurinen

Tässä taloustilanteen ollessa mitä on, tein ihan pienen yleiskatsauksen avoimiin työpaikkoihin, erityisesti Python-kielen saralla. Tein ihan sanahaun kolmella Suomessa vaikuttavalla työpaikkailmosivustolla, ja huomasin seuraavia tuloksia:

-Avoimia työpaikkoja Python-koodareille oli ~25 kpl, laskentaa vaikeuttaa ristiinpostatut työpaikat ja samalla ilmoituksella haetut useammat virat.

-Pääsääntöisesti työpaikat oli testauksen puolella, mutta ihan sovelluskehitystäkin pääsi joissain paikoissa tekemään.

-Työnantajia oli laidasta laitaan kunta-alalta suureen langattomia henkilökohtaisia viestintälaitteita valmistavaan yritykseen sekä virus- ja haittaohjelmia etsivää softaa tekevään yhtiöön. Tietysti näin Savon seudulta Etelä-Karjalaan muuttaneena itäsuomalaisena oli hieman penseää havaita, että melkein kaikki paikat oli pääkaupunkiseudulla, joskin joitakin hajapaikkoja oli muuallakin.

Luonnollisesti kannattaa pitää mielessä, että tämä tutkimus on kahvitauon aikana tehty pikatesti, ja pitääkin olla päässä vikaa mikäli meinaa noita lukuja käyttää mihinkään muuhun kuin suuntaa-antavana arviona. Osaan tehtävistä vaadittiin tietysti muutakin osaamista, eikä kaikki yritykset edes mainosta paikkoja, jotka ”voisi ottaa jos joku tulisi vastaan”.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Internet meme-Python

4.3.2009, kirjoittanut Jussi Kasurinen

Jokainen Internetissä surffaileva, ja erityisesti keskusteluforumeita seuraava, ihminen on varmaan jossain vaiheessa päässyt tutustumaan Internetin erikoiseen alakulttuuriin, meemeihin (eng. meme). Nämä meemit ovat tavallisesti jokin satunnainen tapahtuma jota on pidetty huvittavana, ja täten Internetissä linkittynyt paikasta toiseen. Tutuimpia näistä meemeistä lienee kissa-kuvamakrot eli LOLcatsit, joissa on kissoja ja väärin kirjoitettua tekstiä, ”All your base are belong to us”-jutut tai Rickrollaus, jossa pahaa-aavistamaton surffailija ohjataan asiallisesta vaikuttavasta linkistä katsomaan Rick Astleyn musiikkivideota. Lisäksi muilla kulttuurialueilla on omia memejä; aasialaisille bussissa huutava ja riehuva mies on ehkä tutumpi kuin meidän 300- ja Sparta-viittaukset.

Noh, joka tapauksessa Python-ohjelmointikieleen on olemassa LOLcats-hengessä tehty laajennus nimeltä LOLPython:

http://www.dalkescientific.com/writings/diary/archive/2007/06/01/lolpython.html

Vaikka kyseessä ei olekaan kuin eräänlainen suodatin, jolla vaihdetaan avainsyntaksia toiseen, aiheuttaa valintakäsky IZ BIGNESS ARGZ OK KINDA LIKE 1? sekä keskeytyskomento KTHXBYE pienoisen hymyn ainakin allekirjoittaneen kasvoille.

Jos loppuun sitten vaikka vakavana uutisena kertoisi sen, että LinuxQuestions.org valitsi vuoden ohjelmointikieleksi toista kertaa peräkkäin Pythonin, C++:n ja PHP:n ollessa toinen ja kolmas. Java sijoittui viidenneksi. Muista voittajista mainittakoon Ubuntu, joka voitti vuoden pöytäkonejulkaisun sekä live-käyttöjärjestelmän palkinnon, serverisarjan mennessä samaa sukua olevalle Debianille.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Sisennys vs. sulkeet

18.2.2009, kirjoittanut Jussi Kasurinen

Selailin tuossa päivänä eräänä verkosta sivuja ja huomasin sellaisesta asiasta, josta olen joutunut monesti vääntämään kättä. Python-kielestä puhuttaessa ihmiset ovat kauhuissaan mm. siitä, että kielessä on sisennyksillä ohjautuva syntaksi, joka pakottaa tekemään asiat yhdellä tavalla tai potkii käyttäjää takapään puolelle. Tämä ei kuitenkaan pidä varsinaisesti paikkaansa, mikä allaolevassa artikkelissa on hyvin käsitelty

http://www.secnetix.de/~olli/Python/block_indentation.hawk

Itse en mielelläni ota sisennys vs. sulkeet -keskusteluun kantaa, mutta näin tehdessäni kommentoin useimmiten, että aloittaessa ohjelmoinnin opettelun sisennys tekee sulkeita paremmin ymmärrettävää koodia, ja tietyssä mielessä ”ohjaa” rakentamaan lähdekoodin järkevällä tavalla. Sulkeet olisi tietysti pidemmälle mennessä ihan kiva optio ainakin kun sisennystasot ja komentojen pituus kasvaa, mutta ainakin Python 2.x:ssä yritys ”from __future__ import braces” antaa hyvin selvän vastauksen.

Mutta joo, mitäs muuta. Python 3 sai ekan päivityksensä, 3.0.1 näyttäisi karsivan reiluhkon määrän löytyneitä bugeja mutta ei muuta. Itseasiassa toiminnot on nyt ”jäädytetty” toistaiseksi; kaikki toimii päivityksen jälkeen samalla tavalla, joten tulkki kannattaa ainakin tälläerää pitää ajantasalla ilman pelkoa että tehty koodi menee rikki. Joten ei kai tässä muuta kuin versiopäivitystä latailemaan.

Täältä tähän,

Jussi Kasurinen

Artikkeliin ei ole kommentteja »

Ohjelmointia, yksinkertaisesti

9.2.2009, kirjoittanut Jussi Kasurinen

Tällä kertaa ajattelin poiketa blogin tavallisesta Python3-linjasta ja mainita parilla sanalla eräästä toisesta ohjelmointikielestä, johon olen viimeaikoina upottanut aikaa.  Tämä kieli on siis Brainf*ck. Olisi sillä vähemmän sensuroitu nimikin mutta kaikenmaailman suodattimet välttääkseni olen ottanut vapauden korvata erään kirjaimen tähdellä. Nokkelimmat varmaan jo arvaavatkin ”oikean” nimen.

Tämä ohjelmointikielien ansiokkaasti nimetty kaunokainen on kielen syntaksin yksinkertaistamisessa eräänlainen sankari: siinä on ainoastaan kahdeksan komentoa, joista yksikään ei ota syötteinä minkäänlaisia argumentteja.  Vielä huvittavammaksi kielen tekee se, että komentoja edustaa merkit + – , . [ ] < ja >, kaikkien muiden ollessa automaattisesti kommentteja. Käytännössä tämä tarkoittaa sitä, että esimerkiksi ohjelma

++++++++[>++++++<-]>++++.>++++++++[>++++++<-]>++.

Tulostaa vastauksen 42. Mielenkiintoisinta Brainf*ckissa on se, että se on Turing-täydellinen kieli. Tämä tarkoittaa siis sitä, että kielen avulla on mahdollista toteuttaa mikä tahansa tietokoneen algoritmi, eli periaatteessa tehdä millainen ohjelma hyvänsä. Tehokkuudesta, tai sen puoleen debuggaajan mielenterveydestä, tässä tosin ei parane puhua. Siitä vaan tekemään käyttöjärjestelmää tai samantien pitämään ohjelmoinnin perusteita kielellä; eihän kahdeksan komennon opettelu voi NIIN vaikeaa olla. Ja kun kerran on lähtenyt sille tielle, niin perään luentokalvot klingoniksi, kohderyhmämarkkinointia ajatellen.

Lopuksi vielä aasinsilta, joka yhdistää tämän artikkelin tekstin näppärästi blogin yleiseen kategoriaan, eli ohjelma joka tulostaa PYTHON3:

++++++++++[>++++++++<-]>.>++++++++++[>+++++++++<-]>-.>++++++++++[>++++++++<-]>++++.>+++++++++[>++++++++<-]>.>++++++++++[>++++++++<-]>-.>++++++++++[>++++++++<-]>–.>++++++++[>++++++<-]>+++.

Täältä tähän,

++++++++++[>+++++++<-]>++++.>++++++++++[>++++++++<-]>+++++.>++++++++++[>++++++++<-]>+++.>++++++++++[>++++++++<-]>+++.>+++++++++[>++++++++-]>+. Kasurinen

Artikkeliin ei ole kommentteja »