ccert based auth és az apache_getenv()

Phpból elméletileg client cert alapú azonosítás esetén lekérdezhető lenne az apache_getenv()-el az, hogy a kliens cert tárgy része milyen adatokat tartalmaz. Szintén elméletileg a környezeti változóként is regisztrálnia kéne a mod_ssl-nek az adatokat. Mindezt valami miatt nem csinálja, így kerülő megoldást kell alkalmazni:

apache configba:
SSLOptions +ExportCertData

Ezáltal a következő kód segítségével hozzáférhetővé válnak a kliens cert tárgyadatok:
[snippet=25115]

usability és a bejelentkezés

Barátilag támogatom a Cultura Nostra versenyt, aminek az első fordulója ma zajlott. Ahogy az ismert Mátyás mesében is van sikeres is volt meg nem is. Tapasztalatom mindenesetre lett sok. De kezdjük az elején!

A jelentkezés folyamata úgy nézett ki, hogy egy két lépcsős regisztrációs folyamatban az iskola regisztrálja a saját adatait az első lépésben. A második lépésben a csapatot lehet felvinni, majd vagy új csapatot visz fel vagy befejezi a regisztrációt. Ez a folyamat két gomb egyszerű feliratán bukott el:

gombok

Első gomb egy üres csapatregisztrációs formot adott vissza a másik egy üzenetet, hogy sikeres volt a regisztráció. Eredmény? Sok iskola kétszer vitte be a csapattagokat. Két hiba van a gombokkal:

1, Egymás alatt vannak.

2, Ha nem olvasta el figyelmesen, vagy elsőre nem tudta értelmezni a szöveget megfelelően, akkor megijed az üres formtól amit az első gombra kattintva kap vissza és újra felviszi.

Helyes(ebb) megoldás? Jövőre egy gomb lesz és egy üzenet: “Szeretne-e még egy csapatot regisztrálni?” Igen/Nem. Meglátjuk mi lesz az eredmény!

A következő problémás pont a bejelentkezés volt. Regisztráció után 10 karakter hosszú jelszót kapott a felhasználó A-Za-z0-9 minta szerint. Naplóztam a hibás bejelentkezéseket és abból a következő tapasztalatot szűrtem le:

1, A biztonsági kockázat ellenére néha igen is jó ha meg tudja nézni mit írt be! Volt, hogy egész sorokat másoltak be és volt, hogy csak 9 karaktert gépeltek be a 10 helyett.

2, A véletlenszerű jelszót igenis el lehet téveszteni ha valaki nem másolja (egyik legnagyobb tévesztés a 0 helyett P). Ezzel nem hiszem, hogy lehetne mit kezdeni. Pláne a verseny előtti stresszes helyzetben.

3, A citromailes felhasználók mindegyike kivétel nélkül úgy akart bejelentkezni, hogy a @citromail.hu -t lehagyta. Erre nyilván elég lenne egy “valós cím-e?” email validáció is, de azért elgondolkodtató, hogy sokan ha ilyen mezőt látnak és a webmailes felületen nem kell a domaint mögéírni akkor itt is téveszteni fognak (megszokás). Érthető a webmail fejlesztőinek, hogy szeretnék megspórolni azt, hogy a felhasználók végiggépeljék a teljes címet, de ezzel többet ártanak mint amennyit használnak… Ha már szabad álmodozni, akkor jó lenne ha openid provider lenne a citromail és a freemail is. 🙂

Ez ugyan nem usability, viszont szintúgy tapasztalat: van olyan böngésző ami excel fájlok feltöltésekor application/octet-stream mime-ot küld. Tehát a szerver oldali mime vizsgálatra minden esetben szükség van! pl ezzel: http://www.php.net/manual/en/ref.fileinfo.php

Ezt találtam fejlesztés közben: http://code.google.com/p/php-spreadsheetreader/ Könnyen kezelhető táblázat parser (xls, ods, csv, xml stb). Ennek kapcsán belenéztem az ods szerkezetébe. Egész szimpatikus cucc (zippelt xml-ek halmaza).

opensearch és javascript

Kisvirág csiripelte, hogy Johu designja megújult (nem igazán használom, nem tudom mi változott :)). Az oldalt megnézve feltűnt, hogy JSből hozzá tudják adni az opensearch keresést Firefox böngészőkhöz. A kód mivel csak Firefoxot támogat kicsit kibővítettem. Ilyen lett:

[snippet=24145]

Így már IE-t is támogat (7.0+). Van még opensearch képes böngésző?

mobil vízió

Valamikor a nem túl távoli jövőben: Fut a dietetikus program a mobilon. Étteremben fizetek, a program megkérdi hogy eltárolja-e azt hogy mit ettem? Eltárolom. Majd átküldöm a dietetikusnak az aktuális étrendem. Aztán már csak konzultálni megyek hozzá az új étrendemről.
Ha nem étteremben eszem, akkor egy két gombnyomásra felvihetem, hogy éppen most mit ettem. (finom kolbászos kenyeret :))

(elég inspirálóak Doransky mobilos feed-megosztásai)

hunspell c api

Ahogy a cím írja!

Hunhandle
Megnyitott szótárállományok struktúrája.

void Hunspell_create(const char *, const char *)
Szótárat nyit meg.
Első paraméter aff fájl útvonala.
Második paraméter dic fájl útvonala.

int Hunspell_spell(Hunhandle *, const char *)
Szó helyességét ellenőrzi.
Paraméterek:
1. megnyitott szótár
2. szó
Visszatérési érték:
0 – hibás
> 0 – helyes

char *Hunspell_get_dic_encoding(Hunhandle *)
Szótár karakterkészletét adja vissza.
pl: UTF-8

int Hunspell_suggest(Hunhandle *, char***, char *)
Javaslatot tesz a hibás szóra.
Paraméterek:
1. szótárállomány
2. lista amibe elhelyezi a javaslatokat
3. szó
Visszatérési értéke a lista hossza. Ha nincs elem a lista NULL.

Teszt kód:
[snippet=24205]

A kód a következő kimenetet produkálja:
0
1

UTF-8

11
helyes
tejes
lejes
nejes
pejes
vejes
bejes
fejes
hetes
heges
heves

gugli os

Bejelentették. Kb sejthető is volt, hogy mit akarnak, azt is hogy hogyan.
Rögtön kapóra is jön egy -egyenlőre- tervben létező rendszerhez:
Sokszor volt már az, hogy mentünk volna el, de hoppá meg kéne nézni a menetrendet! Minden gép már ki volt kapcsolva, mire betölt el is megy a busz/vonat/hév/akármi. Ezért már egy ideje gondolkodtam azon, hogy fel kéne használni a “csökkentsük a bootidőt” hype-ot.  Összeszedni egy vasat, amire egy megfaragott linux kerül, valami egyszerű felülettel.  És itt jön be a google os. Ők már alapból azokon gondolkodnak, hogy gyorsan bootoljon és csak egy böngésző legyen rajta. Még ugyan nem szedtem le, de ha reszelhető annyira amennyire nekem kell máris megvan az operációs rendszer, csak egy kezdőlapot és egy megfelelő vasat kell alátolni! (hibernáláskompatibilis + ssd merevlemezes + passzív hűtésű/csendes)

Jó móka lesz!

ActivityFeed

A twitteren már elcsipogott program béta állapotba került. Mi ez az ActivityFeed?
Volt egy gondom, miszerint a youtube felhasználók aktivitását nem tudtam rss-ben követni*. Magamnak megírtam, majd viteez “nyüstölésének” köszönhetően publicitást kapott. Ezen az oldalon. Egyenlőre próbálgatás szintjén megy a program, de a tesztjeim egész biztatóak. A sebessége és működőképessége nagyban függ a youtube-tól, de ezzel együtt is egész jól megy.

* nem mondom hogy lehetetlen a követés, de nem is a legpraktikusabb.

Kiránduljunk gwave-vel!

Pár hete megérkezett a google wave. Eddig nézegettem, szoktam a felületet. Kiment néhány meghívó, így többed magammal is ki tudtam próbálni mire jó. A klasszikus msn-féle több szereplős játék a sodoku személyében jelent meg, ez a fajta felhasználás nem is volt váratlan. Viszont ennél sokkal többre is lehet használni a programot, igaz egyenlőre csak tervben. Az én példám amin keresztül szeretném bemutatni egy lehetséges felhasználási módot, az a klasszikus szervezzünk kirándulást. Azért ez, mert jelenleg is elérhető eszközökkel ezt tudom elég szemléletesen bemutatni. Persze olykor-olykor el fogok rugaszkodni a valóságtól és néhány lehetséges kiterjesztés ötletet is bemutatok.

Van egy baráti társaság, akik rendszeresen eljárnak kirándulni. Az ötletgazdag főszervező kitalálja, hogy szombaton olyan szép esős nap lesz, miért ne mennének el, kirándulni valahova?!
Mivel mindnyájan Budapest környékén élnek, adott a gondolat, valahova a környékbe induljanak el. A szervezőt nevezzük mondjuk connornak. Connor készít egy új bejegyzést, amibe térképre felviszi a szükséges információkat, leírja, hogy mikor és hol van találkozási pont, mi a cél stb.

tervezet
M.j.:
El tudnék képzelni egy alkalmazást a turistautak.hu-tól ami képes keresni és megjeleníteni a különféle útvonalakat, azok szakaszait kijelölve be tudnám illeszteni a bejegyzésbe. A bejegyzés megkapja a geo koordinátákat.
Egy másik alkalmazást is el tudnék képzelni a geocaching.hu-tól, amit beágyazva a bejegyzéshez kapcsolt útvonalterv alapján a lehetséges környéken lévő geocacheing ládákat listázza ki. (kis program a túrához)

Következő lépésként megnézzük, hogy milyen időjárás lesz. Az időjárást lekérdezem az adott napra majd beszúrom:

idojarasM.j.:
Ide is van ám ötletem! 🙂 Az idokep.hu gadgetjét beszúrva ismét a geo koordináták alapján lekérdezi az adott napra az időjárást, és javasol túrázáshoz megfelelő öltözéket a várható időjárás mellé.

Majd a bejegyzést elkészítve, a többeket meghívja Connor és megindul a szervezés.

A túra után a picasa-ra feltöltött galériám képeit beszúrva mondok köszönetet a résztvevőknek:

képmegosztás

Összegzés

Ha mindezt meg lehetne csinálni így ahogy leírtam akkor nagyon tetszene az alkalmazás! Persze jelenleg is lehet ilyet szervezni a wave-vel csak egyenlőre suta. Ez a példa is mutatja, hogy milyen lehetőségek rejtőznek egy ilyen alkalmazásban, ha írhatunk hozzá szabadon kiterjesztést! Milyen adatok beágyazásának lehet értelme? Turisztikai nevezetességek, útvonal tervezés, menetrend tervezés, galéria/kép beszúrás, videó beszúrás, fájl csatolás, naptár/esemény beszúrás, tv műsor beszúrás, fesztiválok, események programjainak beszúrása (pl mire menjünk el a szigeten ?!) stb.

Annak egyenlőre nem néztem utána, hogy egy adott bejegyzéshez lehet-e csatolni mikróformátumot API szinten. Ennek azért lehet jelentősége, mert így a különféle gadget-ek tudnának egymással kommunikálni, még nagyobb automatizmust elérve ezzel. A fenti ötletelésem is ezeken alapul, hiszen a gadgetek beszúrásával a bejegyzés még nem lesz felokosítva a gadget által végzett munka eredményeivel.

M.j.: Így például egy hogyan jutok oda gadget-nek is látnám értelmét. Otthonról megnézem a fenti bejegyzést. Egy gadget atomatikusan lekérdezi a honnan-t (laptop geo adata), a hovát (bejegyzésben található indulás helyszíne) és a mikort (indulás időpontja). Majd ezek alapján javasol közlekedési eszközöket. Gödöllőn lakom, Gödöllőről megyek => javasol vonatot a Keletihez 8:00-ra. Ezt beszúrhatom és kereshetek társaságot az utazáshoz. stb
A mikróformátumokban meg közismert, hogy milyen lehetőségek rejlenek!

Nekem alapvetően tetszik ez a játékszer és látok is benne fantáziát a jövőre nézve! Persze mindez akkor fog kiderülni, hogy életképes-e ha mondjuk édesanyám ül le a kifrorrott magyarul beszélő program elé. Akkor fog megmérettetni az alkalmazás. Ők még csak az e-mailnél tartanak. A számítógépet nem használók közül mondjuk a húgom féle emberek azok akik eljutottak az RSS-ig. És akkor hol van még a többi hype?!…

Redmine from Eclipse with mylyn

There is a great Eclipse plugin witch helps you to use various bugtrackers. This plugin’s name is Mylyn! There is a connector for Redmine too, witch name is redmin-mylyncon. Let’s see how to set it up!

Server side:
ruby script/plugin install https://redmin-mylyncon.svn.sourceforge.net/svnroot/redmin-mylyncon/redmine_mylyn_connector/tags/CURRENT
mv vendor/plugins/CURRENT vendor/plugins/mylyncon
rake db:migrate_plugins RAILS_ENV=production
/etc/init.d/apache2 restart

Client side:
Download the plugin from this Eclipse repository:
http://redmin-mylyncon.sourceforge.net/update-site/nightly/

Redmine eclipse-ből

Eclipse-hez létezik egy nagyszerű plugin ami segítségével a programból lehet használni a különféle bugtracker programokat (annyira különféléket hogy akár Gmail&calendar-hez is kötni lehet). Ez a plugin a mylyn! A redminehoz is létezik kötés, ezt redmin-mylyncon -nak hívják. Nézzük meg hogyan kell beüzemelni:

Szerver oldal:
ruby script/plugin install https://redmin-mylyncon.svn.sourceforge.net/svnroot/redmin-mylyncon/redmine_mylyn_connector/tags/CURRENT
mv vendor/plugins/CURRENT vendor/plugins/mylyncon
rake db:migrate_plugins RAILS_ENV=production
/etc/init.d/apache2 restart

A ruby hajlamos néha elhasalni az SF terheltsége miatt. –force kapcsolóval adjuk újra ki mindaddig amíg probléma nélkül le nem fut!
Ha mindent jól csináltunk a plugin oldalon megjelenik az új elem.

Ecplise alá pedig a szokásos módon telepítsük innen a plugint:
http://redmin-mylyncon.sourceforge.net/update-site/nightly/

redmine telepítése

Több időt töltöttem már eddig redmine telepítésével mint amennyit feltétlenül szerettem volna ezért álljon itt egy howto (amolyan comment nélküli):

svn co http://redmine.rubyforge.org/svn/branches/0.8-stable redmine-0.8
apt-get install libapache2-mod-fcgid libopenssl-ruby1.8 ruby rubygems libmysql-ruby1.8 rake libfcgi-ruby1.8
gem install -v=2.1.2 rails
mv public/dispatch.cgi.example public/dispatch.cgi
mv public/dispatch.fcgi.example public/dispatch.fcgi
rm public/.htaccess public/dispatch.rb.example

mv config/database.yml.example config/database.yml
mv config/email.yml.example config/email.yml

rake db:migrate RAILS_ENV=”production”

apache2:
<VirtualHost *:80>
ServerName redminehost

DocumentRoot /path/redmine-0.8/public

SetEnv RAILS_ENV production
DefaultInitEnv RAILS_ENV production
# Loglevel debug
<Directory /path/redmine-0.8/public>
AddHandler fcgid-script .fcgi
Options -Indexes +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
</Directory>
</VirtualHost>

a2ensite …

admin/admin

audió fájlok egyesítése

A youtubeon találtam egy egész jó felvételt Rachmaninov op.18 zongoraversenyényről. Alexis Weissenberg zongorázik és Herbert von Karajan vezényel. Egyetlen probléma, hogy 4 részben van.
Nosza egyesítsük!

Kiszedjünk az audiót:
ffmpeg -i r01.mp4 -vn r01.wav
ffmpeg -i r02.mp4 -vn r02.wav
ffmpeg -i r03.mp4 -vn r03.wav
ffmpeg -i r04.mp4 -vn r04.wav

Összefűzzük őket:
sox r01.wav r02.wav r03.wav r04.wav r.wav

Majd mp3-at csinálunk belőle.
ffmpeg -i r.wav -acodec libmp3lame -ab 192000 r.mp3

A kevésbé ráérősek csinálhatják pl audacity-vel. 🙂

mj: sox program a sox csomagban van! (meglepő)