sidenote

Archívum
A(z) „szoftver” kategória bejegyzései

A több éves hagyománynak megfelelően minden évben egy konferenciával tervezzük ünnepelni a szabad szoftverek világnapját. Célunk, hogy egyre többen lássák meg a szabad szoftverekben rejlő lehetőségeket új ismereteket és emberi kapcsolatokat szerezve, legyen az akár kezdő otthoni felhasználó, rendszergazda, vállalkozó, kormányzati vagy oktatási felhasználó.

Idén, 2013-ban terveink szerint november 29-én, pénteken tervezzük a konferencia megrendezését.

Tervezett szekcióink:

  • Mobil szekció: szabad szoftveres mobil platformok, pl. Android, Firefox OS, Ubuntu Phone
  • Hardverközeli szekció: szabad szoftverrel programozható, konfigurálható „kütyük”, alap hardveres kapcsolásokkal, pl. Raspberry Pi, Arduino, Udoo, OpenWrt routerken
  • Felhasználói szekció: népszerű és még kevésbé ismert felhasználói programok, pl. LibreOffice, Mozilla, Gimp, …
  • Rendszergazdai szekció: asterisk, biztonsági kérdések
  • Geoinformatikai szekció: a GIS-ben egyre jobban teret nyerő desktop (pl. QGIS, GRASS) és szerver (pl. GeoServer, OpenLayers) megoldások
  • Multimédia, jog: nyílt formátumok, szabad licencek, jogi kérdések

A belépés ingyenes lesz. A megrendezéshez a korábbi évektől eltérően sajnos nem áll rendelkezésünkre pályázati forrás, így azt teljes egészében szponzori felajánlásokból kell összegyűjtenünk. Számításaink szerint 1,4 millió forintra lenne szükségünk, hogy igényesen meg tudjuk rendezni (de minimálisan 1,1 millióra), amelyet – a helyszínnel való megállapodásunk szerint – 2013. szeptember végéig kell összegyűjtenünk. Ha van lehetőséged (neked, cégednek, ismerősődnek), akkor támogasd, hogy megvalósulhasson a konferencia.

Szabad Szoftver Konferencia Szeged 2013

Mindenféle (média)megjelenés, és akármilyen kicsi adomány is sokat számít. Tessék reblogolni, támogatni, mert jó ügyre megy!

Megosztás, like stb.

About a month and a half ago I planned to build a Raspberry Pi controlled car. The idea was to control it through WiFi with live video feedback. Unfortunately the car won’t be built due to lack of money and time, etc.

However I gathered a little experience during this “project”, so I’m sharing it through a guide on how to put together all the necessary hardware and software parts together. First, though, here are the main weaknesses of my setup:

  • The live video feed takes about 30–50% the Pi’s CPU, depens on motion.
  • High lag (up to 2 seconds).
  • Jittery software PWM.

In sum, this guide shows how to control a DC and a servo motor with live video feedback, but the end result will be slow and imprecise.

Hardware

I planned to use two motors for the car, a DC motor for driving and a servo motor for steering. I followed The Adafruit Learning System’s guides for controlling a DC and a servo motors using the Raspberry Pi, so I won’t go into the details of the hardware setup and PWM signaling.

I combined the circuit diagrams of the two guides into one using Fritzing. You can download the Fritzing format of the diagram, it’s included in the downloadable tarball (doc directory) towards the end of the post.

Circuit diagram

Software

The idea was to control the car through a simple webpage with embedded live video. This had set the course which led me to use the following software setup.

Architectural diagram

Note: As for the OS I stayed with Raspbian, and since I didn’t have a camera board I used a webcam.

Necessary packages

First let’s install the necessary packages.

$ sudo apt-get install subversion libjpeg8-dev imagemagick python-rpi.gpio lighttpd

Subversion will be needed to checkout MJPG-Streamer’s source from SourceForge, while ImageMagick and libjpeg8-dev are needed for building MJPG-Streamer. RPi.GPIO is a Python package which we’ll use to control the GPIO pins, and lighttpd will serve the web page to the client.

MJPG-Streamer

Now we’ll checkout MJPG-Streamer’s source from SourceForge, enter the proper directory, modify the Makefile, and build MJPG-Streamer.

$ svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer/mjpg-streamer
$ sed -i 's/$(CC) $(CFLAGS) $(LFLAGS) $(OBJECTS) -o $(APP_BINARY)/$(CC) $(CFLAGS) $(OBJECTS) $(LFLAGS) -o $(APP_BINARY)/g' Makefile
$ make

If MJPG-Streamer was built successfully, edit your /etc/rc.local file.

$ sudo nano /etc/rc.local

Add the following lines right before the exit 0 statement. This command will launch MJPG-Streamer at system startup.

1
2
3
4
5
6
# Start MJPG-Streamer on multiuser runlevels
/home/pi/mjpg-streamer/mjpg-streamer/mjpg_streamer \
-i "/home/pi/mjpg-streamer/mjpg-streamer/input_uvc.so \
-f 30 \
-r 640x480"
\
-o "/home/pi/mjpg-streamer/mjpg-streamer/output_http.so"

Lighttpd

Edit lighttpd’s config file.

$ sudo nano /etc/lighttpd/lighttpd.conf

Make sure that lighttpd’s document root is the /var/www directory.

server.document-root        = "/var/www"

Add the following lines to the end of the file. These will load the CGI module, create an error log at /var/log/lighttpd/breakage.log, run Python scripts with a “custom” binary, and map the /usr/lib/cgi-bin/ directory to the document root as cgi-bin/.

server.modules             += ( "mod_cgi" )
server.breakagelog          = "/var/log/lighttpd/breakage.log"
cgi.assign                  = ( ".py" => "/usr/bin/python-root" )
alias.url                   = ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )

Make lighttpd start on system startup, and restart lighttpd to use the updated configuration.

$ sudo update-rc.d lighttpd defaults
$ sudo service lighttpd restart

Nasty Python hack

I was using RPi.GPIO version 0.5.3a for controlling the GPIO pins and at the moment RPi.GPIO needs root permission to do this. So I needed to run the Python scripts as root, but since lighttpd can not be run as root – which would be a sechole – I needed to hack a little bit.

I found the solution in Dav’s Raspberry Pi – Controlling GPIO from the Web post: I made a copy of Python’s executable and gave it the setuid attribute.

$ sudo cp /usr/bin/python2.7 /usr/bin/python-root
$ sudo chmod u+s /usr/bin/python-root

Note: All Python scripts executed by lighttpd will now run as root. DO NOT USE THIS ON ANY PUBLIC SERVER AS THIS IS “A POTENTIALLY DANGEROUS TECHNIQUE”.

Control scripts

You can download the GPIO control scripts and the client web site by either clicking the link below or typing the following command.

$ wget http://sidenote.hu/wp-content/uploads/2013/07/motorcontrol.tar.gz

Now all we have to do is to extract the archive, copy all the files to the proper places, and add some permissions.

$ tar -xvzf motorcontrol.tar.gz
$ cd motorcontrol
$ sudo cp cgi-bin/* /usr/lib/cgi-bin/
$ sudo chmod +x /usr/lib/cgi-bin/*.py
$ sudo cp -R www/* /var/www/

The code in the archive is mostly uncommented especially the JavaScript part, but it’s not complicated.

The client side uses jQuery, so you’ll have to download jQuery 2.0.2 minified and copy it to /var/www/js/, or use the following command.

$ sudo wget http://code.jquery.com/jquery-2.0.2.min.js -O /var/www/js/jquery-2.0.2.min.js

The final step is to download a HTML5 CSS reset and place it in /var/www with the name reset.css.

$ sudo wget http://reset5.googlecode.com/hg/reset.css -O /var/www/reset.css

Using the software

If everything was setup correctly then all you have to do is to enter your Pi’s IP in your browser’s address bar, and you should see the webpage with the controls and the live video.

Controlling motors with mouse Controlling motors with keyboard

You can either use the mouse or the keyboard to control the motors. If you use the mouse, then you can turn the servo by clicking on the left or right arrows (this will toggle the direction), and drive motor by holding down left click on the forwards or backwards arrow. When you use the keyboard you have to keep the arrow keys pressed to turn or drive the motors.

Megosztás, like stb.

Eric S. Raymond: A katedrális és a bazár

Tíz éve el kellett volna olvasnom már ezt a könyvet.

Megosztás, like stb.

A héten bevásároltam játékból, megvettem a Humble Indie Bundle 8-at: Hotline Miami, Proteus, Little Inferno, Awesomenauts, Capsized, Thomas Was Alone, Dear Esther + soundtrackek. Azért döntöttem a vásárlás mellett, mert a hétből három játék (amiből már egy megvan) érdekelt, plusz akartam a zenéiket is, és persze mert pokoli olcsó.

Dear Esther

Egyszer volt már szó erről a játékról, úgyhogy nem írom le, mi is ez. Azért jó, hogy a Dear Esther is bekerült a Humble Indie Bundle-be, mert így megkaptam a teljes soundtracket is a már meglévő játék mellé. A zenét Jessica Curry írta, és külön is megvásáráolható.

Hotline Miami

Hotline Miami is a high-octane action game overflowing with raw brutality, hard-boiled gunplay and skull crushing close combat. Set in an alternative 1989 Miami, you will assume the role of a mysterious antihero on a murderous rampage against the shady underworld at the behest of voices on your answering machine.

Hotline Miami – Steam

Erősen tizennyolc-pluszos játék. Teljesen 80’s feeling GTA 1-2-vel nyakonöntve, szóval nagyon addiktív és nagyon beteg.

Proteus

A Proteus annyiban hasonló a Dear Esther-hez, hogy ez is egy „felfedezős” játék, ám itt nincs történet, nincs puzzle, csak gyönyörködni kell a tájban és a zenében. Szerintem csodaszép.

+ a többiek

Meh.

Megosztás, like stb.

Csak röviden, tömören: elkészült a múltkor beharangozott bash-weather.

bash-weather

Megtalálható a bash.sidenote.hu-n, de elsődlegesen a GitHub-on.

Megosztás, like stb.

Folytatom a teljesen értelmetlen, ámde bonyolultabbnál bonyolultabb shell scriptek írását. Most egy időjárásjelentő script van soron. Íme a mockup:

bash-weather

A script úgy működik, hogy a gép IP címe alapján lekéri a jelenlegi tartózkodási helyünket (freegeoip.net), majd az OpenWeatherMap-ről leszedi a jelenlegi időjárási adatokat, valamint az előrejelzést. Ez eddig nem volt para, csak XML-t kellett parsolni, ami Bash-ben némi Perl regexp grep-pel simán megoldható.

Viszont némi segítségre volna szükségem a nagy ASCII képeket illetően. Művészi véna hiányában nem vagyok jó ilyenek „rajzolgatásában”, ezért olyasvalakit keresek, aki elkészítené a szükséges ASCII képeket. Az OpenWeatherMap API/Weather Codes oldalon, az Icon List szekcióban megtalálható, hogy milyenek kellenek:

  • tiszta ég (napsütés, éjszakai ég),
  • kevés felhő (nappali és éjszakai változat),
  • felhős (ebből elég egy fajta),
  • tiszta – esős (külön nappali, éjszakai),
  • eső,
  • zápor/felhőszakadás,
  • havazás,
  • köd.

Ráadásul, hogy mindezt nehezítsem, ezekre 40×16 karakter (40 oszlop, 16 sor) méretben volna szükségem.

Help, I need somebody,
Help, not just anybody,
Help, you know I need someone,
Help!

Megosztás, like stb.

A bash-gorillas után itt a „legújabb” shell scriptem, a bash-life. Igazából tavaly nyáron írtam, de csak most tettem rendbe a kódot.

Így néz ki, természetesen karakteres képernyőn:

                                   bash-life                                    
+------------------------------------------------------------------------------+
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                        o                                                     |
|                         o                                                    |
|                       ooo                                                    |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
+------------------------------------------------------------------------------+
Navigate: arrow keys, Toggle cell: spacebar                Start: 's', Quit: 'q'

A bash-life egy Bash-ben írt Game of Life szimulátor. Hogy mi az a Game of Life, a Wikipédiáról megtudható:

Az életjátékot (angolul: The Game of Life) John Conway, a Cambridge Egyetem matematikusa találta ki. Játékként való megnevezése megtévesztő lehet, mivel „nullszemélyes” játék; és a „játékos” szerepe mindössze annyi, hogy megad egy kezdőalakzatot, és azután csak figyeli az eredményt. Matematikai szempontból az ún. sejtautomaták közé tartozik. A játék egyes lépéseinek eredményét számítógép számítja ki […]

A négyzetrács mezőit celláknak, a korongokat sejteknek nevezzük. Egy cella környezete a hozzá legközelebb eső 8 mező (tehát a cellához képest „átlósan” elhelyezkedő cellákat is figyelembe vesszük, feltesszük hogy a négyzetrácsnak nincs széle). Egy sejt/cella szomszédjai a környezetében lévő sejtek. A játék körökre osztott, a kezdő állapotban tetszőleges számú (egy vagy több) cellába sejteket helyezünk. Ezt követően a játékosnak nincs beleszólása a játékmenetbe. Egy sejttel (cellával) egy körben a következő három dolog történhet:

  • A sejt túléli a kört, ha két vagy három szomszédja van.
  • A sejt elpusztul, ha kettőnél kevesebb (elszigetelődés), vagy háromnál több (túlnépesedés) szomszédja van.
  • Új sejt születik minden olyan cellában, melynek környezetében pontosan három sejt található.

Szóval, ezen szabályok alapján működik a bash-life is. A játék indítása után a négyzetrácson a nyíl gombokkal lehet navigálni, space-szel lehet egy sejtet életre kelteni/kinyírni, az „s” billentyűvel indítható a szimuláció, „q”-val pedig bármikor ki lehet lépni.

Előkövetelmény Bash ≥ 4.2, ncurses-bin és minimum 80×6 méretű terminál (ez utóbbi még változhat). A kód elérhető GitHub-on, a futtatáshoz pedig a következőket kell terminálba bepötyögni:

$ git clone https://github.com/szantaii/bash-life.git
$ cd bash-life
$ bash bash-life.sh

További fejlesztések:

  • a kód további kommentelése;
  • bejegyzés létrehozása a bash.sidenote.hu oldalon.

Bugreportot küldhettek mailen, akár diffet is, de jöhetnek a pull request-ek is GitHub-on.

Megosztás, like stb.

Ezt írtam legutóbb:

A következő nagy projekt a Gorillas játék Bash változata. Hosszú lesz megírni, és egészen biztos vagyok benne, hogy fájdalmasan lassan fog futni, de akkor is… Jó lesz!

Nem volt hosszú, vagy nehéz megírni, és nem fut „fájdalmasan lassan” sem (ez persze géptől függ), viszont tényleg jó lett.

bash-gorillas

Előkövetelmény Bash ≥ 4.2, ncurses-bin, bc és minimum 80×22 méretű terminál. A kód elérhető GitHub-on, a futtatáshoz pedig a következőket kell terminálba bepötyögni:

$ git clone https://github.com/szantaii/bash-gorillas.git
$ cd bash-gorillas
$ bash bash-gorillas.sh

bash-gorillas bash-gorillas

További fejlesztések:

  • README frissítése (hét második fele);
  • kód kommentezése (majd valamikor);
  • dobás szög és sebesség felhasználó által való javítási lehetősége (ezt a hét második felében megcsinálom);
  • max_speed, wind_value beállítása a játék indításakor getopts használatával (hétvégén vagy jövő héten megírom);
  • bejegyzés létrehozása a Projektek, illetve a bash.sidenote.hu oldalakon.

A hátralevő fejlesztések ellenére már használható a cucc. Viszont ne habozzatok írni, ha találtok bugot, elérhetőségem a Rólunk oldalon. (Diffeknek örülnék a legjobban.)

Megosztás, like stb.

#!/bin/bash

Az utóbbi időben mindenféléket írogatok, Bash-ben. Hogy miért shell script? Egyszerűen azt is mondhatnám, miért ne, de igazából arról van szó, hogy élvezem ennek a nyelvnek a használatát. Adatstruktúrából nincs sok, van tömb, asszociatív tömb és kb. ennyi, nincs objektum, nincs beépített lebegőpontos aritmetika. :) Igazi kihívás valami bonyolultabb problémát shell scriptben megírni, mégis előfordul, hogy a megoldás egész hatékony.

Ismét felmerül a kérdés, hogy miért próbálok bonyolult dolgokat shell scriptben megcsinálni, mikor azokra vannak más, bejáratott programozási nyelvek, metódusok. Egyszerűen azért mert szívás. Folyton workaroundokban kell gondolkodni, különböző trükköket kell bevetni, gondolkodtat, és szeretem feszegetni a határokat. Emellett ott van még a teljes userland, amit aztán úgy használok, ahogy csak akarok. A megoldás természetesen nem a leggyorsabb, néha fájdalmasan is lassú lehet, viszont shell scripteket könnyedén és gyorsan lehet írni.

Létrehoztam egy oldalt, ahol közzétettem néhány scriptemet: http://bash.sidenote.hu/

Eddig a következőket tettem fel:

  • ASCII labirintus generátor,
  • Debian font csomag preview script,
  • logaritmikus spirál kirajzoló script,
  • Mandelbrot halmaz kirajzoló script.

ASCII maze Debian fontpackage previewer
Logarithmic spiral Mandelbrot set

Minden script GNU GPL v3-as licenccel van ellátva. Hogy a licenc mit enged és mit nem, megtaláljátok a shell script oldalon. További scriptek várhatók, pl. amint lesz időm szépen bekommentezem, és kiteszem a Bash-ben írt Game of Life szimulátoromat, mely az alábbi képre kattintva működés közben is megtekinthető. VIGYÁZAT, MÁSFÉL MEGÁS ANIMGIF!

Game of Life Shell Script

A következő nagy projekt a Gorillas játék Bash változata. Hosszú lesz megírni, és egészen biztos vagyok benne, hogy fájdalmasan lassan fog futni, de akkor is… Jó lesz!

BashGorillas

Megosztás, like stb.

Csak néhány videó, kép és animáció, amik érdekesek lehetnek. Remélem nem kell mondanom, hogy a képek kattintásra nagyobbak lesznek.

Az SDK-ra leghamarabb hétvégén tudok pillantást vetni. Lehet, hogy arról is ejtek majd pár szót.

Ubuntu for phones

Hands-on videók az engadgettől, és a Verge-től:

App ikonok:

Kérdés persze, hogy ezek közül melyek a natívak, és melyek azok amik csak webappok. Skype?

Infografikák:

Ubuntu for phones infographics #1 Ubuntu for phones infographics #2
Ubuntu for phones infographics #3 Ubuntu for phones infographics #4

Animációk:

 
 

Megosztás, like stb.