2012. augusztus 1., szerda

Doxygen Bash szkript támogatás


A Doxygen egy dokumentáció generáló eszköz, amellyel viszonylag könnyen szinkronban tudjuk tartani a dokumentációnkat a kóddal, mert a dokumentációt a kódba kell írni kommentek formájában. Elég sokféle programozási nyelvet támogat, azonban például Bash szkriptek dokumentálására alapértelmezetten nem képes ez a program.
Kis módosítással azonban írhatunk akár teljes dokumentációt is a segítségével.

A Doxygen a legtöbb disztribúció fő szoftvertárolóiban szerepel, szóval telepíthetjük apt-get-tel:
sudo apt-get install doxygen
Doxyfile generálás:
doxygen -g
Ezután már szerkeszthetjük a Doxyfile-t, hogy testreszabjuk a dokumentációnkat:
gedit Doxyfile
A Bash szkriptek támogatásához a következő módosításokat tegyük meg (a megoldást egy amerikai fiatalember honlapján találtam meg):
FILE_PATTERNS = *.sh
INPUT_FILTER = "sed -e 's|##|//!|'"
FILTER_SOURCE_FILES = YES
 Ezután dupla kettőskereszt (##) után írhatjuk a dokumentációt, azonban csak kivonatok (brief description) formájában tehetjük meg. Ebben az esetben az egy oldalra szánt dokumentációkat sorfolytonosan, összefüggően kell megírni; valamint elég sok Doxygen parancsot nem használhatunk.

Én a következő parancsokat szoktam használni (az összes parancs leírása itt található):
@author
@file
@version
@mainpage
@page
@section
@subsection
@param
@return
@details
\code - \endcode
Természetesen működik néhány parancs még, de ezeket teszteltem.

2012. július 25., szerda

apt-get update/upgrade és insserv hiba

Apt-get telepítés közben valamilyen hiba történt, ekkor találkoztam a következő esettel. Telepítés közben valami tönkre ment, és onnantól frissítésnél, telepítésnél az apt-get közölte egy csomó hibaüzenet kíséretében, hogy nem hajlandó dolgozni.
Ilyesmi hibaüzeneteket kaptam:
insserv: warning: script 'smfpd' missing LSB tags and overrides
insserv: Starting smfpd depends on rc.local and therefore on system facility `$all' which can not be true!
Rövid olvasgatás után találtam egy hasonló esetet, kiderült, hogy az init.d szkripteknél az egyiknél hiányoznak az LSB mezők. Ezekben a mezőkben megadhatóak az init szkripteknél futás idejű függőségek, melyek segítségével könnyebben megállapítható egy helyes szkript lefutási sorrend bootolásnál, és fel is gyorsítható a bootolás több szkript párhuzamos futtatásával. Azonban egy optimális sorrend eldöntéséhez szükségesek ezek a függőségi információk. Először a Debian Lenny változat kiadásakor jelentek meg, Squeeze-ben pedig már alapértelmezett beállítás volt a függőség alapú boot sorrend meghatározás.
A hiba megoldásához csak a hiányzó függőségeket kell pótolnunk:

Nyissuk meg a hibás init scriptet (az error-ban az smfpd szkriptben hiányolt valamit, ez amúgy a Samsung nyomtató driver):

sudo gedit /etc/init.d/smfpd
Majd a megnyíló Gedit-ben a kommentek után helyezzük el a következő LSB mezőket:
### BEGIN INIT INFO
# Provides: smfpd # Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Samsung Unified Linux Driver LPT Support daemon
# Description: Enable support for LPT port service provided by Samsung Unified Linux Driver package.
### END INIT INFO

Mentsük el a változásokat, és már kész is! :)

Kiegészítés: A hibát okozó csomagra, amúgy nem sok szükség van induláskor, mert LPT nyomtatók esetén (párhuzamos porton keresztül csatlakozó nyomtató) kapcsolja be a TCP porton keresztüli elérést. Nem sokan használnak manapság már ilyen eszközöket, szóval a hiba kijavítása után nyugodtan kikapcsolhatjuk. Ehhez ajánlom az rcconf nevű programot, mellyel kikapcsolhatjuk milyen service-ek induljanak a rendszer elindulásakor:
sudo apt-get install rcconf 
majd:
sudo rcconf 

Több információ az LSBInitScriptekről

2012. július 18., szerda

Android képernyő megosztás PC-n

Az egyetemen gyakran látom, hogy oktatók odamennek és az iPadjüket csatlakoztatják a kivetítőre egy átalakítóval, és már megy is az előadás. Ez alapján jutott eszembe, hogy ezt talán egy Android-os telefonnal is megtehetném. Az első megoldás talán egy MHL-HDMI vagy VGA átalakító lenne, sajnos ezek azonban elég drágák.
Találtam azonban egy másik lehetőséget, amelynél rövid teszt után arra jutottam, hogy bár prezentáció előadásra nem alkalmas a módszer, azonban máskor hasznos lehet. A telefon képernyőjét USB kábelen keresztül is megoszthatjuk. Ilyenkor nem iktatódik ki a "rendszerből" a számítógép, és a kép is akadozni fog, mégis mondjuk egy Androidos alkalmazás bemutatására hasznos eszköz lehet.

A, Először is telepítsük fel a Java Development Kit-et (JDK):
sudo apt-get install sun-java6-jdk
B, Szükségünk lesz az Android SDK-ra is:
     1. Töltsük le a legfrissebb SDK-t ITT.
     2. Csomagoljuk ki:
tar -xvzf android-sdk_r20-linux.tgz
     3. Lépjünk be a tools/ könyvtárba:
cd android-sdk-linux/tools/
     4.  Indítsuk el az SDK Manager-t, és telepísük fel az Android SDK Platform-tools-t
     5. Állítsuk be a rendszert, a telefon felismeréséhez:
sudo echo "SUBSYSTEM==\"usb\", ATTR{idVendor}==\"04e8\", MODE=\"0666\", GROUP=\"plugdev\"" > /etc/udev/rules.d/51-android.rules
sudo chmod a+r /etc/udev/rules.d/51-android.rules
 idVendor-hoz a telefon gyártójának USB Vendor ID-jét írjuk, innen megtudhatjuk.
     6. Másoljuk át tools könyvtárból platform-tools-ba az ADB és teszteljük, hogy minden tökéletesen működik-e?
cp ../platform-tools/adb ./
Csatlakoztassuk a telefont az USB portra, majd:
adb devices
Ha kilistázza a telefonunkat, az SDK-t helyesen telepítettük fel.

C, A telefonon kapcsoljuk be a Beállítások/Alkalmazások/Fejlesztés menüpont alatt az USB-hibakeresés opciót.

D, A képernyőkép megosztására két programot is találtam, mindkettőt Java-ban írták, szóval Linux-on kívűl Win-en, Mac-en is használhatóak.

Az első az Android Screen Cast nevű, melyet akár böngészőból is indíthatunk, vagy letöltés után:
javaws androidscreencast.jnlp
A képernyőkép megosztásán kívűl, rootolt eszköz esetén a számítógépről egérrel és billentyűzettel vezérelhető a telefon, jobb egér gombra fekvő módba vált a kép, képes videó felvételére, és van egy nagyon fapados fájlböngésző is a programban.

A másik program az AShot nevű:

Letöltés után csomagoljuk ki, és indítsuk:
unzip AndroidScreenCapture-1.1.zip
cd AndroidScreenCapture_1.1/
java -jar AShot-1.1.jar
Ez a program sokkal jobban megnyerte a tetszésem, mint az előző. Képes fullscreen-ben mutatni a telefon kijelzőjét, és forgatni is lehet a kijelzett képet.

Sajnos kicsit akadozik a kép, de van amikor hasznos lehet ez az eszköz.

2012. július 10., kedd

Gimp 2.8 telepítése Debian Squeeze-re

Már elég régen megjelent a Gimp nevű képszerkesztő program 2.8-as verziója, mely egy régen várt új funkciót tartalmaz: egy ablakban jeleníti meg az eszköztárakat a főablakkal, így sok bosszúságot előz meg, melyet még okozott. Sokat próbálkoztam már a telepítéssel forráskódból, de mindig elakadtam valamelyik függőség telepítésénél.
Most azonban találtam egy szkriptet, melynek segítségével minden függőséget lefordíthatunk és egy működő Gimp 2.8-at kapunk Debian Squeeze-en.
A szkriptet ITT találtam, köszönet érte Andrea Roscioli-nak. Eredetileg Ubuntu 10.04 (Lucid Lynx-re készítette el):
#!/bin/sh
# by this script you can install gimp 2.8 on your ubuntu 10.04 LTS lucid
# this script has been made by http://www.facebook.com/andrea.roscioli
# this script has been tested on ubuntu 10.04 LTS only
# make a new dir called tmp*****************************
mkdir -p ~/tmp/gimp
chmod 777 ~/tmp
cd ~/tmp/gimp
# download gimp**************************************
wget ftp://ftp.gimp.org/pub/gimp/v2.8/gimp-2.8.0.tar.bz2
tar -xjf gimp-2.8.0.tar.bz2
rm -f gimp-2.8.0.tar.bz2
export PATH=/opt/gimp-2.8/bin:$PATH
export PKG_CONFIG_PATH=/opt/gimp-2.8/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/gimp-2.8/lib
#***************************************************
sudo apt-get build-dep gimp
sudo apt-get install git-core
#****************************************************
#install libtool************************************
sudo apt-get install libtool
#install babl***************************************
git clone git://git.gnome.org/babl
cd babl
./autogen.sh --prefix=/opt/gimp-2.8
make -j5
sudo make install -j5
cd ..
rm -rf babl
#install glib***************************************
wget http://ftp.gnome.org/pub/gnome/sources/glib/2.32/glib-2.32.2.tar.xz
tar -xvf glib-2.32.2.tar.xz
rm -f glib-2.32.2.tar.xz
cd glib-2.32.2
./configure --prefix=/opt/gimp-2.8
make
sudo make install
cd ..
rm -rf glib-2.32.2
#install gegl****************************************
wget ftp://ftp.gimp.org/pub/gegl/0.2/gegl-0.2.0.tar.bz2
tar -xjf gegl-0.2.0.tar.bz2
rm -f gegl-0.2.0.tar.bz2
cd gegl-0.2.0
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf gegl-0.2.0
#install atk*****************************************
wget http://ftp.gnome.org/pub/gnome/sources/atk/2.4/atk-2.4.0.tar.xz
tar -xvf atk-2.4.0.tar.xz
rm -f atk-2.4.0.tar.xz
cd atk-2.4.0
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf atk-2.4.0
#install pango***************************************
wget http://ftp.gnome.org/pub/gnome/sources/pango/1.30/pango-1.30.0.tar.xz
tar -xvf pango-1.30.0.tar.xz
rm -f pango-1.30.0.tar.xz
cd pango-1.30.0
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf pango-1.30.0
#install gdk-pixbuf**********************************
wget http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.26/gdk-pixbuf-2.26.1.tar.xz
tar -xvf gdk-pixbuf-2.26.1.tar.xz
rm -f gdk-pixbuf-2.26.1.tar.xz
cd gdk-pixbuf-2.26.1
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf gdk-pixbuf-2.26.1
#install pixman**************************************
wget http://cairographics.org/releases/pixman-0.24.4.tar.gz
tar -zxvf pixman-0.24.4.tar.gz
rm -f pixman-0.24.4.tar.gz
cd pixman-0.24.4
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf pixman-0.24.4
#install cairo****************************************
wget http://cairographics.org/releases/cairo-1.12.2.tar.xz
tar -xvf cairo-1.12.2.tar.xz
rm -f cairo-1.12.2.tar.xz
cd cairo-1.12.2
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf cairo-1.12.2
#install gtk+****************************************
wget http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.10.tar.xz
tar -xvf gtk+-2.24.10.tar.xz
rm -f gtk+-2.24.10.tar.xz
cd gtk+-2.24.10
./configure --prefix=/opt/gimp-2.8
make -j5 && sudo make install -j5
cd ..
rm -rf gtk+-2.24.10
#install gimp****************************************
cd gimp-2.8.0
./configure --prefix=/opt/gimp-2.8
make -j5
sudo make install -j5
cd ..
rm -rf gimp-2.8.0
cd
rm -rf ~/tmp/gimp
Ezekután az /opt/gimp-2.8/bin/gimp paranccsal indítható a Gimp, és a "Windows->Single-Window Mode" opcióval állítható be a régen áhított funkció. Ha mindent jól végeztünk el a következőhöz hasonló látvány fogad majd:

2012. június 23., szombat

Firefox sqlite tömörítés

Már régen írtam cikket a Firefox könyvjelzők szinkronizálásáról Dropboxban, mely művelet során a places.sqlite fájlban eltárolt könyvjelzőket tároljuk el Dropboxban. A könyvjelzőkön kívűl még sok mindent tárol a Firefox SQL adatbázisban, például a cookie-kat, letöltéseket, kiegészítőket is. Ezen fájlok viszont hajlamosak a hosszantartó böngészések során igencsak megnőni. Az Sqlite nevű program azonban tartogat egy megoldást, mellyel jelentősen csökkenthetjük ezen fájlok méretét (Dropboxban tárolás esetén hasznos tulajdonság), és ezzel a böngésző gyorsaságát is növelhetjük.
Az interneten sok leírás található, hogyan tömöríthetnénk ezeket a fájlokat, én az sqlite3 nevű programot használom, szükség esetén feltelepíti a szkript:
#!/bin/bash
if [ `aptitude search '~i ^sqlite3$' | grep "sqlite3" -c` == '0' ];
then
sudo apt-get install sqlite3
fi

for i in /home/$USER/.mozilla/firefox/*/*.sqlite
do
echo -en "\e[1;33mOptimizing: \e[0;37m$i... "

sqlite3 $i 'VACUUM;'

if [ $? -eq 0 ]
then
echo -e "\e[1;32mOK\e[0;37m"
else
echo -e "\e[1;31mERROR\e[0;37m"
fi
done
 A következőképpen állíthatjuk szolgálatunkba a szkriptet:
sudo gedit /usr/bin/vacuum
A megnyíló Geditbe illesszük be a fenti szkriptet, majd adjunk neki futási jogosultságot:
sudo chmod +x /usr/bin/vacuum

Ezután már futásra kész a szkript, bármilyen mappából kiadhatjuk a vacuum parancsot, én nálam a places.sqlite fájlt jelentősen rövidítette:
-rw-r--r--  1 chef chef 10485760 jún   22 22.35 places.sqlite
-rw-r--r--  1 chef chef 4214784 jún   22 23.06 places.sqlite

2012. június 14., csütörtök

Multiboot backup pendrive


Néha előfordulhat, hogy még kedvenc Linux rendszerünk is elromlik. Ilyenkor jól jönne, ha 10 perc rendszervisszaállítás után újra használhatnánk a rendszerünket. Most bemutatok egy lehetőséget, mellyel mindezt megtehetjük. Egy multiboot-os pendrive-ot fogunk készíteni rajta minden eszközzel, mellyel a gépélet-mentést végrehajthatjuk. Természetesen több lehetőség is adott, és tetszés szerint konfigurálható lesz - akár más célokra is - a pendrive.

A rendszer mentéséhez és visszaállításához egy nagyon hasznos programot szeretnék bemutatni, melyre nem rég találtam rá. A Clonezilla egy backup készítő program, hasonló, mint a Windows-ra is elérhető Norton Ghost. Hasznos lehet, ha kedvenc Linux rendszerünkről akarunk mentést készíteni, és aztán később gyorsan arra az állapotra akarunk visszatérni.
A Clonezilla gyakorlatilag egy Linux operációs rendszer, melynek Live verzióját ajánlom, mellyel nagyon gyorsan készíthetünk biztonsági másolatot rengeteg féle operációs rendszerről (Linux, Win, Mac, stb), egyéb partícióról, vagy akár egy teljes lemezről. Szerver verziójában akár 40, vagy több gépre is telepíthetünk egy korábban ezzel a programmal lementett rendszert.
Én egy 12 Gb használt területű ext4 partícióról készítettem mentést, körülbelül 10 perc alatt, és az eredmény egy 4 Gb-os backup lett. Visszaállítás mentésből is körülbelül 10 percet vett igénybe.

A rendszerek telepítésekor gyakran használunk partícionáló eszközöket, ezek közül én a GParted Live  nevűt részesítem előnyben egyszerű használata és megbízhatósága miatt.

További kiegészítésként (pl.: a rendszeren tárolt adatok gyors lementésére elromlott operációs rendszernél) jól jöhet, ha van az USB pendrive-on egy kisebb használható GUI-s rendszer. Ezek közül én a rendkívűl gyors és szinte bármilyen őskövületet felismerő Damn Small Linux-ot (DSL) ajánlom, nagyon jól összeválogatott kis programgyűjteménye van és nagyon kicsi a rendszerigénye.

A multiboot-os pendrive elkészítéséhez pedig a MultiSystem nevű programot fogjuk használni.
Itt találtam egy szkriptet mellyel könnyen telepíthetjük a MultiSystem függőségeit. Ehhez töltsük le telepítő szkriptet:
wget http://liveusb.info/multisystem/install-depot-multisystem.sh.tar.bz2
tar xvjf install-depot-multisystem.sh.tar.bz2
chmod +x install-depot-multisystem.sh
./install-depot-multisystem.sh
Mivel a telepítő szkriptet elvileg Ubuntu rendszerre készítették, ezért lehet, hogy nem talál majd a telepítés előtt minden csomagot. A nem talált csomagokat apt-get-tel tegyük fel, nálam az xterm hiányzott:
sudo apt-get install xterm
Ha minden megvan már csak egy FAT32-re formázott USB eszközre lesz szükségünk. Én a 16 Gb-os pendriveomon 700 Mb-os FAT32 partíciót készítettem GParted-del, melyből 290 Mb-ot foglal el a fent említett 3 rendszer.

Ezután ha elindítjuk a multisystem nevű programot, akkor kiválaszthatjuk a pendrive-ot amelyre telepíteni akarjuk majd a rendszereket:

A kiválasztás után már pakolhatunk is a pendrive-ra letöltött, LiveCD módban működni képes OS-eket.
A "Menü ->  LiveCD-k letöltése" résznél lehet keresgélni a kompatibilis Live rendszerek között, a fent említett programokat innen töltöttem le:


A letöltött .iso képfájlokat betallóztam, a MultiSystem néha root jelszót kér Grub2 generáláshoz, és ha minden jól megy a végén már kész is a működő multiboot-os mindentudó backup pendrive! :D


Ha tesztelni akarjuk az elkészített pendrive-ot akkor a MultiSystem-en belül Qemu-val, vagy VirtualBox-al is kipróbálhatjuk mit is sikerült alkotni.
A programon belül is felkínált Live rendszerek listájából is láthatjuk, hogy rengeteg lehetőség van és nagyon sokféle multiboot-os eszközt rakhatunk össze, ha valaki erre jár kíváncsi vagyok mit talált ki. :)

2012. június 1., péntek

Fájlmásolás, link küldése Androidra


Gyakran szükség van gyorsan valamilyen adat átvitelére számítógépről Androidos telefonunkra. Két lehetőséget mutatok be, melyeket én is használok, az első akkor lehet hasznos amikor csak egy honlap, vagy fájl linkjét akarjuk átküldeni, és azt majd a telefonról megnézzük, illetve letöltjük. A második megoldásban konkrétan fájlokat másolhatunk át számítógépünkről mobilunkra. Mindkét megoldás platform független, szóval minden rendszeren (Linux, Windows, Mac) használhatóak.

Link küldése

Telefonunkra a ChromeToPhone alkalmazást kell telepítenünk, ezt itt tudjuk beszerezni (az oldal állításával ellentétben Marketről(Google Play) nem tölthető le): Letöltési link
Számítógépen pedig böngészőnhöz kell egy kiegészítőt telepítenünk, Firefox-hoz használható a következő FoxToPhone add-on, mely a mobilra telepített alkalmazásnak tud küldeni linket.
Első link küldésekor engedélyt kér az alkalmazás a telefonnal való kommunikációra.


Ha a fenti programokat telepítettük, akkor a böngészőben (ahogy a képen is látszik fent), ha egy linkre jobb egérgombbal kapcsolunk, vagy csak simán egy oldalon, akkor az adott linket el tudjuk küldeni telefonunkra ("Link küldése az Androidra"), amit ott később megnyithatunk.
 A ChromeToPhone eredetileg -mint ahogy a neve- is mutatja Chrome-ra készült, tehát elérhető hozzá is egy kiegészítő.

Fájlműveletek

Többféle fájlküldési módszert is kipróbáltam már mióta Androidot használok és végül az FTP kapcsolaton keresztül történő műveleteknél maradtam. A telefonra fel kell telepíteni egy FTP szervert, ehhez ajánlom SwiFTP FTP Server-t, melyet Google Play-ről letölthetünk.
A mobilunkra telepített FTP szerverre pedig számítógépről egy FTP klienssel lehet csatlakozni, ehhez én a nyílt forráskódú, platformfüggetlen FileZilla klienst ajánlom.
A telefonon ezután a SwiFTP programot megnyitva a Setup résznél állítsunk be egy felhasználónevet, egy jelszót hozzá, mentsük el a beállításokat a Save gombbal, majd a Start gombbal el is indíthatjuk FTP szerverünket, mellyel a kiírt címre a gépen lévő FileZilla programmal csatlakozhatunk.


A SwiFTP által Wifi URL-nél kiírt cím kettőspont előtti részét kell FileZillában a Cím részhez beírni ("ftp://" nélkül), felhasználónévhez és jelszóhoz a Setup résznél megadottakat, porthoz a Wifi URL-nél a kettőspont utáni számot.

Sok sikert a műveletekhez, és mint mindig a kérdéseket, észrevételeket örömmel várom! :D