Tag Archives: python

Running Python on Axis devices

Axis’ platform for running applications on the camera itself is really great. For you who haven’t seen ACAP share I really suggest you click yourself over there to see what it’s all about.

As mentioned in other posts, Axis have created an embedded platform where you can install applications on the different devices to add features to the edge. This can be analytics that is looking for something unique like a people counter or advanced cross line-type detection. It can also be for simpler tasks like sending a message using a service platform similar to the pushbullet integration that I published here some time ago.

The only downside is that to develop these applications you have to know C which can be tough for the average script kiddie who just wants to perform something small. So, in order to solve some of the more simple scripting that you can be interested in doing. On ACAP Share there’s a PHP application that allows someone to write a PHP script that can be executed on a camera. This is a great application if you’re looking to use smaller APIs for your task.

PHP is extremely popular and allows you to do a number of great things. Python is another extremely popular language. Soo.. Enough said, below is the compiled ACAP and how to build it if you have the environment.

Build script:

buildpython

The python binary itself:

Python_2.7.1_1_0_mipsisa32r2el

Recommended FW: 5.80+. The reason is that the package is pretty big and will need some space. We’ve seen problems with 5.60 and 5.70 firmware that doesn’t allow the package to go through due to it’s size. After 5.80 it seems fine though. (Yes, python is a big library)

It’s build to run on the MIPS architecture, meaning it will work on ARTPEC-4 and ARTPEC-5 devices but that’s it. Python version is 2.7.1 with some limitation built to it (see buildpython.sh)

When you upload the binary there’s an attached python script in that folder. Edit that and make sure you run a continuous loop on it to perform whatever you want to achieve.

ACAP is actually so powerful that you can create your own applications that are essentially script that runs off another application. To start a python script from the command line, use:

LD_LIBRARY_PATH=/usr/local/packages/python_2_7_1/lib /usr/local/packages/python_2_7_1/bin/python /path/to/script.py

This can be called from system(); as well in your C application.

Hopefully this can save some time for people who’re interested in developing in python on Axis devices.

/Marcus

Adding bit.ly support to mu-feeder

My twitterfeed haven’t been working for  a while now. The last update was 2009-11-25, so I went out googling on “twitterfeed replacement” and found mu-feeder. A small python script that publish your blog entrys (or whatever RSS feed that you might have) to twitter. It’s very sweet but i missed the bit.ly support.

But, since it’s open source, there’s nothing that you can’t do about it :). I went out hunting and i found python-bitly. A library for the bit.ly API!

After some tweaking in the bitly file I got it working.

Step 1: Download mu-feeder and unpack it.
Step 2: Download the modified bitly file and put it in mu-feeder/shorteners (diff here)
Step 3:  Edit your mu-feeder settings.py. set URL_SHORTENING_SERVICE to “bitly” and URL_SHORTENER_LOGIN plus URL_SHORTENER_PASSWORD to your bit.ly username and the API key that you have on bit.ly.

That’s it. Now it should work just fine :).

Have a nice weekend.
Marcus

2010 – Goals for the year

I didn’t make any new year promise to myself. Mostly because there’s nothing more broken than a promise made when welcoming the new year. So, instead of making promises, I’ve made goals that i’ll try to complete and deliver.

#1 – My first iPhone application released

A couple of months ago I beta tested MonoTouch, the .NET framework for the iPhone. It’s a great tool for all of us who doesn’t want to learn Objective-C. After some testing I started to do some actual work for an application. It still needs  more work to be functional but at least I have something to go on. I all goes well this will be done somewhat in April.

#2 – Payson Drupal Module

This one is a bit disturbing and embarrasing. For a long time I’ve wanted to make this module for Drupal where you, as a user have the possibility to sponsor sites by paying a small amount of cash using paysons money transaction system. I like Payson, and it really deserves more focus :). Hopefulle this will come handy to Drupal site administrators. Hopefully this will can be expected in fall of 2010.

#3 – Community Site based on Django

The Swedish Community has for a long time lacked a good community web site for tracking one of the finest things with open source – The great open project that makes whatever disitribution worthy of. It can be all from background search engines like beagle to music players like Listen. All small components that makes the linux experience that great! This should be expected in late 2010.

That’s the three prioritized goals that I have as it is right now. I’ll end this post now to get started :).

See you!
/Marcus

Getting Drupal Modules using Python

A good friend of mine wrote yesterday a small python script that allows the user to search and download Drupal modules directly via the official ftp.
This was made since it is quite boring/irritating to first browse through the module page on drupal.org and then copy the link to a shell where you download the module you want on your web server.

Instead, Jonas (that’s my friends name, btw) wrote this program that directly scans through the drupal module directory on the ftp and returns the output in a shell where the user just enter the choice that he/she wants. Example:

jonas@thinkpad61:~$ ./idm.py hello
Found 32436 files!
[0] hellomobile-5.x-1.0.tar.gz
[1] hellomobile-5.x-1.1.tar.gz
[2] hellomobile-5.x-1.x-dev.tar.gz
[3] hellotxt-6.x-1.x-dev.tar.gz
Which module do you want to download? 1
Ok, lets get hellomobile-5.x-1.1.tar.gz
jonas@thinkpad61:~$ ls -l hellomobile-5.x-1.1.tar.gz
-rw-r--r-- 1 jonas jonas 824473 2009-10-22 22:34 hellomobile-5.x-1.1.tar.gz

I believe that this is quite usefull and interesting. But, as Jonas mentions in this post. It does not contain the functions that you might need, such as: version filter and dev filter. Meaning that you don’t want to see results for drupal 5 if you are running six. Nor do you want to use developer packages when you are in a critical installation.

I had some time so I made some improvements on the original:

tomburk@linux-e9bm:~> python idm-mf.py --help
Usage: idm-mf.py [options]

Options:
-h, --help            show this help message and exit
-f version, --filter=version
Filter the results in version numbers.
-d, --dev             Show developer packages

This allows the user to filter between the version, of course “all” can be applied, if one wants to show all the results. Plus, It’s possible to toggle between showing the developer packages or not.

Final result:

tomburk@linux-e9bm:~> python idm-mf.py -f 5 hello
Found a total of 32451 files!
Files containing "hello"
 Based on filter: 5
  Not showing developer packages
[0] hellomobile-5.x-1.0.tar.gz
[1] hellomobile-5.x-1.1.tar.gz
Which module do you want to download? 1
Ok, lets get hellomobile-5.x-1.1.tar.gz
tomburk@linux-e9bm:~> ls -s hellomobile-5.x-1.1.tar.gz
812 hellomobile-5.x-1.1.tar.gz

The file is available here: http://marcusfollrud.net/wp-content/idm-mf.py
Or at github: http://github.com/marcusfollrud/idm
See you!

A small update

2009-10-24 – Added support for multiple file download, Available on both github and in wp-content

Publish to WordPress plasmoid v0.02

Igårkväll satt jag och skissade lite på hur framtida versioner av wordpress-plasmoiden skulle kunna se ut.

Jag använde mig utav QT Designer för att göra själva moc-upen och det blev såhär:

Wordpress Plasmoid
Wordpress Plasmoid

Plasmoiden blir lite större, men känns mer komplett, med möjligheterna att:

  • Lägga till taggar
  • Markera flera kategorier
  • Editera i redan skapade bloggposter
  • Förhandsvisa material

Jag tror det kan bli riktigt bra!
Funderar även på hur mycket jobb det skulle vara att lägga in bilder med drag-n-dropfunktionalitet. WordPress libbet som är integrerat stöder det, men det är nog lite jobb att ställa in storlek med en extra dialogruta. Vi får helt enkelt se.

Ett sista försök

Igår blev det inte så mycket programmerat som jag egentligen skulle velat. Men lite grann blev det iallafall.

De trevliga grabbarna på #despotify var väldigt engagerade med att få in mig i deras irc kanal #despotify på EFNet för att diskutera just spytify och hur man skulle få igång det.

Det blev inte jättemycket diskussioner dock, men det berodde nog mest på att jag inte var så aktiv på kanalen utan satt länge och letade efter information om hur Qt “tar över” trådarna utan att hitta något vettigt. Mitt sista försök blev till att göra spytify till sig egna python tråd och låta Qt sköta sitt, men det fungerade inte heller utan fick enbart fönstret att verkligen hänga sig. Mycket märkligt.. Men jag lärde mig att skapa trådar i python iallafall så helt i onödan var det inte :-).

Koden: http://pastebin.se/198606

Lite senare på kvällen blev det en diskussion med “Kagee” som också hade försökt sig på att göra en spytifyklient med pyQt och även libdespotify med C++, med precis samma resultat som mig. Den enda gemensamma nämnaren till problemet jag kan komma på är gstreamer som används för uppspelningen och att libdespotify trådar en massa som kanske “tar över”. Jag är osäker, men det är en teori :-).

Kagee hade iaf löst sitt problem med QProcess och simple-klienten. Något jag också funderat på men skippat för att det inte känns rätt då man blir helt bunden till vad simple klarar av.

Jag ger mig på ett sista försök med pyQt/pyKDE idag. Denna gången ska jag starta två trådar där en är QT-tråden och den andra spytify, så de inte får något direkt med varandra att göra. Det kanske kan fungera, men å andra sidan vet jag inte ifall det är möjligt att köra MainWindow i en egen tråd. Vi får se :-).

Fungerar inte detta ger jag upp pyQt och går på wxWidgets istället!

Nu är lunchen snart slut så.. Synes!
/marcus

Försök med despotify med python bindings

Jag spenderade mestadelen av kvällen med att programmera lite pyQT/pyKDE med despotify python-bindings.

Till en början tänkte jag “Gud vad lätt detta måste vara. Bara att skriva lite pythonkod och så spelar den min musik.”

Och i 90% av fallet var det så också. Det gick enkelt att söka och klistra in i en ListWidget, skapa action på signaler som dubbelklick för att spela.

Men…. När uppspelningen börjar fryser fönstret tills låten är klar vilket är lite konstigt, ifall man kör test.py (i despotify/src/bindings/python/) går verkar den skapa sin egna tråd och gå vidare.

Vilket den även gör här, men inte på samma vis. När musiken börjar spela kommer det fram felmeddelande i terminalen som säger:

  • QMetaMethod::invoke: Unable to invoke methods with return values in queued connections
  • QObject ::startTimer: QTimer can only be used with threads started with QThread

Visst, hade jag använt något av de objekten hade jag förstått att det kunde gå fel. Men det gör jag inte (ivf inte medvetet).

Mitt första försök till lösning var såklart att skapa en egen tråd till spytify där den kan få hänga sig hur mycket den vill. Sagt och gjort, men det hjälper inte, MainWindow hänger sig lik förbaskat!

Nästa försök var att göra spytify global och därmed utesluta den direkt ut MainWindow-funktionerna, men det fungerade ej heller.

Och nu som sista grej var att koppla bort KDE helt och bara köra pyQt, men lika mycket stopp där.

Jag har inga idéer kvar.

Hade varit jättetacksam för hjälp med det här.
Sources: http://github.com/marcusfollrud/KSpot/

Screenshot

Ang. (de)Spotify

Jag har länge varit ett fan av despotify-gänget och deras fantastiska entusiasm när det gäller att få spotify på skrivbordet med öppen kod.

För någon månad sedan skapade dom bindings till både python och ruby, men fortfarande finns där inte någon klient till skrivbordmiljöerna (förutom om man gillar java…). Vilket har fått mig att tänka:

Hur svårt är det att skapa en klient som använder libdespotify och som sen bygger på exempelvis python?
Vilket fick mig att tänka ännu ett steg. Jag programmerade just pyKDE för min plasmoid (okej, den kunde blivit bättre), och även om jag inte är killer på det så kanske det går att lära sig relativt lätt. För python är ju trots allt inget direkt svårt språk. Någon mer som är sugen?

Detta tål att täna på, precis som allt annat. Jag måste först få igång mitt blomprojekt, då jag har alla delar. Så fort det är klart ska plasmoiden bli lite bättre, med stöd för taggar, hämta kategorier, ladda upp bilder i mediabiblioteket och göra KTextEditor-bakgrunden vit!

Det kanske redan finns en despotifyklient till KDE? Tipsa gärna isåfall.

Publish to WordPress Plasmoid

Vill du blogga på din wordpressblogg utan att aktivt gå in via din webbläsare?

Isåfall har jag en lösning att erbjuda dig 🙂

Publish to WordPress Plasmoid är en plasmoid till KDE4 som enkelt låter dig skriva ett blogginlägg utan att gå in direkt på själva bloggsidan.

Den är väldigt enkelt skriven och är baserad på pyKDE och wordpresslib.

Just nu erbjuder den inget annat än det mest simpla. Att skapa ett inlägg med enbart en titel och text.

Funktioner som skulle kunna integreras är taggar,kategorier och inmatning av bilder. Men, det har jag inte gjort i denna release.

Vill du testa den?
Ladda ner här

Kolla källkoden på github (GPL licensierad):
http://github.com/marcusfollrud/Publish-to-Wordpress-plasmoid/tree/master

Kontaka mig gärna ifall du skulle vilja hjälpa till med något!
mail: marcus.follrud<canelbull>gmail.com

Skapandet av en Plasmoid

Jag har sagt det innan, jag säger det relativt ofta, jag säger det igen:
KDE är fantastiskt!

Detta inlägget kommer lite sent p.g.a jag har mestadelen av kvällen suttit och programmerat en plasmoid för att skapa inlägg till wordpress bloggar (bland annat min egen).

Det är inget som är svårt, att skapa en plasmoid. Man har alla möjligheter till att göra det. Du kan skapa en plasmoid om du har kunskaper inom:

  • Javascript
  • C++ (QT)
  • Python
  • Ruby

Många som någon gång sysslat med utveckling kan något av de här språken. Eller iallafall någolunda förstå sig på dem, vilket var KDE-utvecklarnas tanke när Plasma skapades; att göra det enkelt för alla att skapa tillägg! De har verkligen lyckats, för särskilt svårt är det inte!

Plasmoiden kommer att fungera väldigt enkelt. Du lägger in den, konfigurerar efter din bloggadress + credentials och voila. Sen är det bara att skriva :-).

Jag har tyvärr ingen screenshot att lägga upp just nu (Sitter med Linux Mint på min AAO, som inte riktigt gillar KDE), men uppdaterar inlägget imorgon!

Projektet finns ute på github.com för den som vill kolla koden 🙂
Länk: http://github.com/marcusfollrud/Publish-to-Wordpress-plasmoid/tree

Ha en bra kväll/natt
Marcus