uno in oo.org

Tegnap egy egész érdekes szárnypróbálgatást tettem az uno háza táján. Aki nem tudná mi az az uno (helyesen UNO, Universal Network Objects) annak elmondom: openoffice.org API megvalósítása. Ennek segítségével java-ban c++-ban vagy akár pythonban lehet programozni az OpenOfficet. Mivel c++-ban annyira nem vagyok otthon, Java-t meg még csak most tanulom, így maradt a python.
A program mérete miatt el lehet képzelni, hogy mennyire hatalmas az API dokumentációja, arról már ne is beszéljünk hogy milyen bonyolult és átláthatatlan első ránézésre. A hab a tortán, hogy python példakódok nem lévén (Java se nagyon van!) azért nem 5 perc mire átlátja az emberfia hogy mit és hogyan kéne.
Két 2 óra alatt sikerült is megtalálnom hogy hogyan keressek meg egy táblát a dokumentumban név alapján. A kulcs a getTextTables() és a getByName() metódusok. Logikus elnevezések. 🙂 Aki használta annak mindenképpen.

itemsTable = doc.getTextTables().getByName(‘elemek’)
tableText = itemsTable.getCellByName(“A1”)
tableText.setString(“szöveg”)
Sötöbö.

Így lehetőségem nyílt például ilyen irodai felhasználásra:

  • Gizike megírja a dokumentumsablont (vagy körlevélsablont)
  • betölti egy erre megírt célszoftverbe
  • a program megtalálja a sablonban az entitásokat (vagy mezőket) amiket gizike elhelyezett.
  • majd fogja a forrás adatbázist (partnerek, megrendelések, számlák, árajánlatok, raktárnyilvántartás stb…) és a sablont az adatokkal összeműtve a kimenetet valahogy feldolgozza: PDF, email küldés, e-szignó, Fax, nyomtatás)

Így, minimális energiabefektetéssel kaptunk egy minőségien megszerkeszthető sablonozható rendszert. Teszt gyanánt kipróbáltam, és pár óra alatt sikerült Szállítólevél készítő programot összedobni a vállalatirányítási szoftverhez amit most kezdtem el csinálni. Az eredmény lenyűgözően szép és pontos. Ráadásul minden formázási eszköz rögtön rendelkezésemre áll, nem kell fejleszteni.
Pár óra fejlesztést vessük össze azzal, mi lenne akkor ha az ismétlődő fejléc (élőfej), ismétlődő táblázatfej, behúzások, automatikus szövegigazítások, stb mindezt nekem kéne implementálni és produkálni hasonló minőséggel mondjuk egy számlázó szoftver esetén. Nem beszélve arról, hogy így gyakorlatilag egy-két napos munkával akár egy számlázót is össze tudok már pakolni. Kész a linux alapú táviroda. 🙂

Hihetetlen perspektívák nyíltak így meg. Még magam se nagyon tudom elképzelni hogy mennyi mindenre fel tudnám használni ezt az infrastruktúrát. Pár gyakorlati terv és biztos vevő már így is akad. Van egy tippem, hogy a google is használja az UNO-t… 🙂

javascript médiatípus

Épp oktatóanyagot írok HTML és XHTML témakörben (sok elfelejtett/nem használt dolog kerül elő 🙂 ), és a content-type témakörben találtam egy számomra új dolgot. Az IANA MIME Media type oldalán a text/javascript elavult címkével van jelölve (a vonatkozó RFC-ben is). Helyette az application/javascript -et javasolja. Kipróbáltam és működik. Lehet tippelni melyik böngésző nem kezeli…

raid1 és 3 merevlemez

Cél: szoftveres raid1 (tükrözés) megoldása.
Adott hardver:

  • 1db 40 gigás merevlemez, rajta a hardy rendszerrel. (sda)
  • 2db 160 gigás merevlemez, ezekre kerül a raid és a rendszer kissé átméretezve. (sdb és sdc)

Következők történtek első nekifutásra:
Itthon csak 6.10-es ubuntu cd-t találtam, de mivel elméletileg teljesen mindegy milyen verzióval csinálom, így azt tettem be (persz a gparted miatt nem teljesen mindegy). Gparteddel létrehoztam az egyik új merevlemezen a partíciókat és a meglévőket átmásoltam/átméreteztem. A grub-ot az fstabot és a grub menu.lst-t beállítottam majd megnéztem, hogy betölt-e a rendszer. Itt kezdődtek a bonyodalmak. Egy érdekes ata bugba futottam ami az eredeti hardy telepítést érinti. Bejegyzések alapján azt javasolták hogy frissítsem, intrepidet már nem érinti a hiba. Ezt már nem akartam a régi live cd-ről megcsinálni, ezért leszedtem egy intrepid-et. Viszont itthon csak dvd van, munkahelyen van cd. K3b probléma nélkül kiírta a cd imaget dvd-re. Végre valami ami működik. Intrepid betölt, a root és a boot partíciókat felcsatoltam, majd chroot-olva a környezetet jött a dist upgrade. Probléma nélkül. Feltettem az mdadm-ot, majd létrehoztam a raid tömböket. Ekkor követtem el a végzetes hibát, nem hoztam létre a fájlrendszert a raiden is, hanem rögtön megkezdtem a szinkronizálást. Az mdadm viszont nem hoz létre superblockot és betöltéskor az fsck be is szólt hogy ez így nem lesz jó… Éjjel egy. S láttam hogy mindez nem jó. Alvás. Ma új lappal, zsibbadó arcszerkezettel (pofánrúgott a fogtündér délelőtt), megnézzük hogyan is kellett volna tegnap…

Raid vs Connor második menet:
Intrepid korong be. Partíciók legyalulása. Új szerkezet létrehozása. Így néz ki per winyó:


/dev/sdb5 /boot: 2 giga
/dev/sdb6 swap: 3 giga
/dev/sdb7 /root: 20 giga
/dev/sdb8 /home: maradék

Ugyan így az sdc is. Mindegyik raid flag-et, a /boot boot flag-et kap.
Hozzuk létre a raid-eket. Ehhez mdadm kell majd ami alapból nincs fenn, tehát feltesszük:
apt-get install mdadm


boot:
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sdb5 /dev/sdc5
swap:
mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sdb6 /dev/sdc6
root:
mdadm --create /dev/md2 --level=1 --raid-disks=2 /dev/sdb7 /dev/sdc7
home:
mdadm --create /dev/md3 --level=1 --raid-disks=2 /dev/sdb8 /dev/sdc8

A háttérben megkezdődik a resync ezt várjuk meg (avagy nézzük a macskát ahogy játszik az mdstat-al).

watch cat /proc/mdstat

Hozzuk létre a fájlrendszert a raiden:

mkfs.ext2 /dev/md0
mkswap /dev/md1
mkfs.ext3 /dev/md2
mkfs.ext3 /dev/md3

Most pedig mindent szépen átpakolunk a régiről az újra. Ehhez felcsatolunk mindent és létrehozzuk a szükséges struktúrát:


mkdir /mnt/new /mnt/old
mount -t ext3 /dev/md2 /mnt/new
mount /dev/sda6 /mnt/old
mount /dev/sda7 /mnt/old/home

mkdir /mnt/new/home /mnt/new/boot
mount -t ext2 /dev/md0 /mnt/new/boot
mount -t ext3 /dev/md3 /mnt/new/home

Kezdődhet a másolgatás:


cd new
tar -C ../old -clspf - . | tar -xlspvf -
cd ..

umount /mnt/old/home
umount /mnt/old

Mivel nálam frissítés kell (hardy nem bootolna), ezért ezt most elvégzem:


chroot /mnt/new
mount -t proc proc /proc
cat /etc/apt/sources.list | sed s/hardy/intrepid/ > new; mv new /etc/apt/sources.list
apt-get update
apt-get dist-upgrade

Újabb szünet.
Ezek részek megint általánosak, mindenki számára el kell végezni. Írjuk át a szükséges fájlokat:

  • vim new/etc/fstab
  • vim new/boot/grub/menu.lst

    root=/dev/md2 md1,/dev/sda7,/dev/sdb7
  • vim new/etc/initramfs-tools/modules

    md
    raid1

Fstabnál md esetén uuid helyett /dev/md[0-9] formátumban adjuk meg, grubnál a root-t kell átírni a megfelelőre. Esetemben /dev/md2. Az initramfs-tools modules fájlába md és raid1 sorok kellenek, hiszen szükséges hogy az initramfs tartalmazza ezeket a kernelmodulokat.

Megnézzük, hogy a grub megtalálja-e amit kell:


grub

root (hd1,4)
setup (hd1)

root (hd2,4)
setup (hd2)

Elméletileg mindent megcsináltunk, leválaszthatjuk a régi merevlemezt. Gép kikapcs, régi winyó leköt, gép elindít. Újra a livecd-t indítsuk. Hozzuk létre a tömböket újra. Mivel a winchester leválasztása után már átrendeződtek, így ennek megfelelően paraméterezzük:

mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda5 /dev/sdb5
mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sda6 /dev/sdb6
mdadm --create /dev/md2 --level=1 --raid-disks=2 /dev/sda7 /dev/sdb7
mdadm --create /dev/md3 --level=1 --raid-disks=2 /dev/sda8 /dev/sdb8

Csatoljuk fel a boot és a root partíciókat majd lépjünk be a chroot-ba. Erre azért van szükség mert az update-initramfs parancs livecd-n nem fut, ami meg fut az meg nem úgy fut ahogy kéne. Hozzáadjuk az mdadm-hoz, az elkészített tömböket és újrageneráljuk az initramfs-t (initramfs csomagolja az mdadm.conf-ot is, ezért szükséges, hogy a tömb benne legyen!!!):
mdadm --detail --scan >> /mnt/etc/mdadm/mdadm.conf
update-initramfs -u

Reboot és betöltés a merevlemeről.

Megjegyzések:

  • mdadm: metadata format 00.90 unknown, ignored.

    /etc/mdadm/mdadm.conf fájlban a metadata=00.90 -t cseréljük le metadata=0.90 -re

  • Talán egyszerűbben is létre lehet hozni a rendszert. Különös tekintettel a második “tömblétrehozásra”. A neten leginkább olyan megoldások vannak amiknél a felét hozzák létre, arról töltenek be majd hozzácsapják a másik felét. Ez még tesztelést igényel részemről. A másik elképzelés aminek nem tudtam utánajárni, hogy uuid-t adok meg a régi típusú megadás helyett. Bár az initramfs pillanatában még ahogy elnéztem nem létezik a /dev/disk/by-uuid, így ez az elképzelés necces.
  • id változtatása parancssorból:
    sfdisk --change-id /dev/sdb 1 fd
  • Ha nem lenne éles irodai rendszer akkor most jönne az a játék hogy lehúzom az egyiket és úgy bootolok.

Következő (számomra) érdekes dolog a virtualbox xp partíció átméretezése.

php és a névterek

Szétnéztem a php5.3 táján, hogy milyen újdonságot hoz. Hamarosan itt van így meg kell nézni már csak hivatalból is. Aztán a namespace kivágta a biztosítékot. ilyen\namespace\operator ??
Normálisak ezek? Annó szó volt valami teljesen más lesz, még az is jobb lett volna… De ez? Tényleg el kell gondolkodnom azon, hogy valami normális nyelv felé mozdulok el. Eddig jó volt, de ez már nekem is sok… 🙁

kísérlet

Kipróbálom milyen hatása van egy ilyen levélnek 2009-ben Magyarországon.

“Tisztelt cím!

A két továbbított levelet a mai illetve a tegnapi napon kaptam.
Mindkettő megszegi a 2008. évi hatályos spam törvényt.

Idézet a 2008. évi XLVIII. törvényből:
“…reklám természetes személynek […] elektronikus levelezés vagy
azzal egyenértékű más egyéni kommunikációs eszköz útján […] kizárólag
akkor közölhető, ha ahhoz a reklám címzettje előzetesen egyértelműen és
kifejezetten hozzájárult.”

Kijelentem, hogy nem járultam hozzá előzetesen, címemet feltehetőleg
illegális adatbázis útján szerezte meg a levelet küldő cég.

A levelek a segits-magadon.hu domaint hírdetik, melynek tulajdonosa a
domain adatbázis alapján a TOGRUL Bt. A domain jelenleg a 213.163.8.130
IP címen található.

A levelek fejléce alapján mindkettőt a(z) 213.163.8.132 IP című
kiszolgálóról küldték ki, melynek a revers-e autoresponder.hu.

autoresponder.hu domain tulajdonosa Silihost Kft.
A fent található címekhez tartozó tartományok közvetlen felhasználója
szintúgy a Silihost Kft, internet szolgáltatója az Invitel Távközlési Zrt.

Jelenlegi levelemről másolatot kap:
A törvénysértő magatartást mutató Togrul BT.
A szervereket üzemeltető Silihost Kft.
A szervereket elhelyező Invitel Távközlési Zrt.
A Nemzeti Hírközlési Hatóság.


Köszönettel:
Gossler Károly”

amarok, ardour, pulseaudio és jackd ubuntun (félmegoldás)

Reggeli elfoglaltság gyanánt (ma korán kellett kelni, és még nem vagyok munkaképes :)) elkezdtem szórakozni az ardour 2-vel. Illetve kezdtem volna, de ismét azt kellett tapasztalnom hogy ez biz nem megy.
m.j.: Amarok legyen jelen esetben a mindenféle hangot lejátszó program.

A problémáról nagyvonalakban:

  • alapértelmezett hangrendszer a pulseaudio, ami direktbe az alsa-t használja
  • az ardour a jackd-et használná alapból (csak sejtem, hogy miért nem lövik hozzá a pulse-t)
  • jackd is az alsa-t használná alapból

A megoldás látszólag pofonegyszerű (és nem csak látszólag az, tényleg egyszerűen összelőhető):
jackd => alsa
pulse => jackd
amarok => pulse
ardour => jackd

Lássuk milyen problémákat kell leküzdeni:

  • pulseaudio deb csomagja nem szállítja a szükséges modult ubuntu alatt
  • jackd futtatásásához elengedhetetlen egy olyan felhasználó akinek van joga állítani a folyamatok prioritását
  • a jackd csomagja nem szállít felhasználót és rendszer szintű daemon indítást (init.d)

És a megoldások:

  • deb csomag: ezzel sajna nincs mit tenni, újra kell forgatni a csomagot a debian eredeti alapján, hogy a szükséges deb csomagokat megkapjuk.
  • jackd felhasználó: ezt, jelenleg úgy oldottam meg, hogy a saját 1000-es felhasználómnak adtam jogot a folyamatszabályozásra
  • rendszer szintű indítás: kézzel indítom a pulse-t és a jackd-t, szóval nem megoldott

Releváns lépések:
apt-get install ardour2
apt-get source pulseaudio
pulseaudio deb újraforgatás
(nem részletezem, install és control fájlokat össze kell vadászni az unstable forrásából és a jack-dev csomagot fel kell tenni. Ki fogom tenni a deb fájlokat amiket csináltam.)

~/jack.pa:

#!/usr/bin/pulseaudio -nF
#
load-module module-jack-sink
load-module module-jack-source

load-module module-native-protocol-unix
load-module module-volume-restore
load-module module-default-device-restore
load-module module-rescue-streams
load-module module-suspend-on-idle
.ifexists module-gconf.so
.nofail
load-module module-gconf
.fail
.endif
.ifexists module-x11-publish.so
.nofail
load-module module-x11-publish
.fail
.endif

/etc/security/limits.conf:

@connor - rtprio 20
@connor - memlock 4194304
@pulse - rtprio 20
@pulse - nice -20

~/.jackdrc tartalmát ki kell kommentezni

jackd futtatása:

jackd -R -P4 -dalsa -r44100 -p512 -n4 -D -Chw:0 -Phw:0

pulseaudio futtatása kézzel (ami fut azt ki kell lőni előbb):

pulseaudio -nF ~/jack.pa

(sorrend: jackd, pulse)

A ardour-hoz tesztként egy mp3ból csináltam wav-ot:

mplayer -ao pcm:file="raw.wav" teszt.mp3

opera és mousewheel

Egérgörgetést elkapó alkalmazást írtam (jquery-t használ), és arra lettem figyelmes, hogy a mousewheel esemény linux alatt operában pont fordítva működik (legörgetek felmegy, felgörgetek lemegy). Utánajártam a neten és mindenhol ahol a mousewheel elkapásáról írnak megemlítik, hogy negálni kell a deltát mert az opera máshogy kezeli. Ezek szerint mégsem kezeli máshogy (nálam pont a “javítás” miatt lett hibás a görgetés-kezelés). Két dolog lehetséges: vagy linux alatt rendesen működik, vagy az általam próbált operában (9.27) már javították a hibát.

http://www.ogonek.net/mousewheel/jquery-demo.html