symfony in progress

Az első után kicsit elmaradt a symfony2-ről a folytatás. A helyzet az, hogy a napokban fejezek be egy nagyobb lélegzetvételű projectet symfony2 alapokon. Ha azt lezárom, mindenképpen megosztom a tapasztalatokat! A honi hobbi project után azért sok megoldás született!

A mai agymenésem twitteren a következő témák körül forogtak:
– yaf nagyon jól néz ki (pecl-ben megírt MVC keretrendszer)! teljesítmény tesztek twitterpajtitól remélem érkezni fognak
– miért nem írnak több modult zend enginge-ben (c-ben) gyorsítva ezáltal a kódokat? minden adott! még akár 1 az 1ben átültethető lehetne a php kód, interface zend enginge alá.
– innentől gurult el a gyógyszer, egy mobilfejlesztő cégben ahol iphone kódokat túrunk, miért ne lehetne objective c-ben megírni a weboldalt?
– a múltkori crossplatform objective c kód után teljesen felvillanyozott az elgondolás, hogy objective c-ben írjak meg weboldalakat. Egyedül talán a doctrine-t kéne portolni objective c alá. iOS alatt a Core Data nagyjából teljesen megoldja az ORM kérdést. ezt kéne átültetni ebbe a környezetbe cserélhető DB backenddel (mysql, pgsql, oracle, sqlite stb). MVC elv nem tétel, más meg minden létezik lib szinten. max egy objc binding kell hozzá.
– későbbi megvizslatásra eltesszük a cappuccino-t és a frothkit-et. előbbi objective-j és kliens oldali kódot, javascriptet generál egy objective-cre hajazó kódhalmazból, utóbbi objective c és szigorúan szerver oldali. alaposabb ismerkedés és remélhetőleg egy éles project preview-ja közeljövőben érkezik!

telefon mint hangkártya

A régi laptopomat használom újra. Azon viszont rossz a hangkártya. Mivel elég muzikális egyén vagyok, az egy hét csönd itthon kissé sok. Így adva volt a feladat, csináljunk az androidból hangkártyát. Ehhez csak a rygel és a rygel-properties programokat kellett feltenni, illetve a telefonra a UPnPlay programot. Így a számítógépen lévő zenéket out-of-the-box tudom hallgatni. Az még nem egészen megy, hogy a PulseAudio stream-et is továbbítsa. Bár létezik modul és a pavucontrol-ban meg lehet adni, hogy mint kimenet jelenjen meg a lehetőségek között, hang mégsem jön ki a torkán. Ugyan így a banshee-t is látja a telefonos app, hang viszont nem jön. Gyanítom ha felerőszakolnám rá a legújabb rygel-t (0.12-nél járnak, 11.10-ben viszont még csak 0.10 van), akkor működne.

M.j.: 11.10 előtti verzióval nem sikerült, hibaüzenetet dobott a rygel.
M.j.2: annyira megtetszett a dolog, hogy hirtelen egy HTPC-t vizionáltam aminek egy android tablet a “kijelzője”. Elgurult a gyógyszer…

objc ubuntun

Az ember fia mivel múlassa szabad esti idejét mint olyan valami vad perverzióval, hogy objective c-ben ír ubuntu-n egy kis projectet? 🙂
Nosza nézzük mi kell hozzá!

Egyszerűség kedvéért most gcc-t fogunk használni llvm helyett. Mer’ az mindig kéznél van. 🙂

apt-get install libgnustep-base-dev

Csak ezt az egy csomagot kellett feltenni, egy könyvtárban létrehozni a main.m fájt és egy makefile-t.

main.m
#include
#include

@interface Hello
+ (const char *) Word;
@end

@implementation Hello
+ (const char *) Word;
{
return "Hello Word!";
}
@end

int main (void)
{
printf("%s\n", [Hello Word]);
return(0);
}

GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = hello
hello_OBJC_FILES = main.m

include $(GNUSTEP_MAKEFILES)/tool.make

Két parancs futtatása szükséges:

. /usr/share/GNUstep/Makefiles/GNUstep.sh
make

Ezek után ha mindent jól csináltunk akkor az obj/hello kiírja a stringet. 🙂

GNUStep doksi.

Hello Symfony2!

Még tavasszal kezdtem el foglalkozni a symfonyval. Mivel már akkor béta állapotban volt a kettes verzió, ezért leginkább azt fedeztem fel. Aztán annyira megtetszett, hogy a folkrádió újraírásánál is erre alapoztam.
Egy többrészes életszerű példán keresztül szeretném bemutatni, hogy mit tud és mit hol lehet benne megtalálni.

Telepítés

A symfony.com-ról kell letölteni a megfelelő fájlt. Abban az esetbe ha van telepítve GIT érdemes a without vendors verziót. Ez annyiban különbözik a másiktól, hogy a vendors könyvtárat, amiben az egész symfony lelke van, a netről szedi le és frissíti. Ez a parancs telepíti a vendorst:

bin/vendors install

A frissítés értelem szerűen update paraméterrel történik. Ha új verzió jön ki, elég ezt lefuttatni és a cache-t kiüríteni.

app/console cache:clear –env=dev

Az alkalmazás index a web mappa app.php vagy app_dev.php. Szabadon fel lehet venni új environmentet is és azt használni. A különféle környezetekhez lehet egyedi beállítást fűzni. Én például arra használom, hogy a migrációkor az adatbázis műveleteket ne naplózza. Ha ezt nem tenném meg, előbb utóbb bármekkora memória elfogyna, hiszen hatalmas adatbázist kell migrálni. Kezdetnek viszont teljesen elég a dev és a prod env.

na még egyszer

Egy éve helyreállítottam a blogot, aztán jött egy félresikerült upgrade majd elszállt megint. Most egy hozzászólás kapcsán vettem észre, hogy a maintenance lejött a blogról és használható. Így nekifutunk még egyszer a blognak. Utóbbi egy évem iOS fejlesztéssel és symfony2 ismerkedéssel telt, így ezeket a témákat szeretném kicsit megkörnyékezni.

Blogra fel!

eladó

Eladó egy LC-Power EH-35BSII típusú külső merevlemez-keret. Jellemzők: SATAII, usb2, esata.
Megkímélt állapotban, fél éves sincs talán.
Boltban újonnan 5500 Ft-ért láttam. 2500 Ft-ért odaadom.
Linux-szal out-of-the-box működik probléma nélkül.

things a dropboxban

Mivel a Things valami egészen elvetemült helyre teszi az adatbázis fájlját így kis trükközés kell, hogy a dropboxba szinkronizálható legyen. Az ehhez szükséges lépések:

1. Kapcsoljuk ki az esetleg futó Things-t.
2. Finderben keressük meg a ~/Library/Application Support/Cultured Code/ mappát és a Things mappát helyezzük át a dropboxba.
3. Indítsunk egy terminált és a következő sorokat gépeljük be:
ln -s “/Users/connor/Dropbox/Things” “/Users/connor/Library/Application Support/Cultured Code/Things”
Értelem szerűen a connor-t cseréljük le a saját home nevünkre.
4. Kiléphetünk.

Ha mindent jól csináltunk akkor a megfelelő symlink létrejött és az a megfelelő mappára mutat.

szégyen

http://picasaweb.google.hu/funtineli/AmikorAHargitaiRendszamuAutoKobanyanParkolAkkorAKedvesEsJoindulatuPolgarokIgy#

Szégyen és gyalázat bazdmeg! A nagy magyarkodó barma arra nem veszi a fáradtságot, hogy mielőtt kinyilvánítja hazaszeretetét a román rendszámú autót látva, megnézze, hogy melyik megyéből jött a kocsi. Történetesen az autó egy budapesti leányt szállított aki csángóföldön tanít magyart a csángók gyerekeknek. 3 hónap alatt többet tett a leány azokért mint ez a barom egész életében fog… Szégyen… Ez az orális hazaszeretet!

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