Cross Platform mobil app fejlesztés HTML5 JavaScript alapokoneRise
Egy mobil alkalmazás fejlesztésekor nagy kihívás a különböző platformokra való fejlesztés. Gondoljunk csak arra, hogy az iOS, Android, Blacberry, Windows Phone készülékekre más-más nyelven és környezetben kell fejleszteni. Ez azt jelenti, hogy ahány platform, annyi különböző alkalmazás. Ha cross platform HTML5 JavaScript alapú alkalmazást fejlesztünk elvileg csak egy kódot kell karbantartani, de persze ez sem ennyire egyszerű. Az előadáson bemutatásra kerülnek a különböző mobil cross platform megoldások (HTML5, JavaScript alapokon) és a különböző platformokon létező HTML5 CSS különbségek.
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-beKálmán "KAMI" Szalai
Rengeteg fajta adatforrás érhető el, amellyel az OpenStreetMap-ben lévő adatok kiegészíthetők. Azonban ezeknek az adatoknak a felhasználásának engedélyeztetése OpenStreetMap szempontjából nem mindig egyszerű és egyértelmű. A felhasználható adatok beimportálása az OpenStreetMap adatbázisba is összetett feladat, figyelni kell a már meglévő adatokra: csak a megfelelő adatok és új POI-k kerüljenek fel, ne legyenek duplikációk. Ráadásul az OpenStreetMap-ben lévő adatok sem konzisztensek. Az egymás közelében hasonló tulajdonságú POI-k közül biztos, hogy jót kívánunk szerkeszteni? Mi az OpenStreetMap-be importálásnak a menete? Ki hagyja jóvá, kikkel lehet konzultálni? Számos kérdés, amelyek megválaszolása egyáltalán nem triviális. Ebben az előadásban összefoglalom tapasztalataimat, eddigi importálásokat, az ezzel kapcsolatos terveimet, valamint bemutatom azokat a munkafolyamatokat és az egyszerű pythonos eszközöket, amelyeket készítettem a feladat megkönnyítésére.#Importálás, #Python, #Overpass, #JOSM, #Közösség
Cross Platform mobil app fejlesztés HTML5 JavaScript alapokoneRise
Egy mobil alkalmazás fejlesztésekor nagy kihívás a különböző platformokra való fejlesztés. Gondoljunk csak arra, hogy az iOS, Android, Blacberry, Windows Phone készülékekre más-más nyelven és környezetben kell fejleszteni. Ez azt jelenti, hogy ahány platform, annyi különböző alkalmazás. Ha cross platform HTML5 JavaScript alapú alkalmazást fejlesztünk elvileg csak egy kódot kell karbantartani, de persze ez sem ennyire egyszerű. Az előadáson bemutatásra kerülnek a különböző mobil cross platform megoldások (HTML5, JavaScript alapokon) és a különböző platformokon létező HTML5 CSS különbségek.
Külső adatok (GTFS, UIC, boltok) félautomatikus importálása az OpenStreetMap-beKálmán "KAMI" Szalai
Rengeteg fajta adatforrás érhető el, amellyel az OpenStreetMap-ben lévő adatok kiegészíthetők. Azonban ezeknek az adatoknak a felhasználásának engedélyeztetése OpenStreetMap szempontjából nem mindig egyszerű és egyértelmű. A felhasználható adatok beimportálása az OpenStreetMap adatbázisba is összetett feladat, figyelni kell a már meglévő adatokra: csak a megfelelő adatok és új POI-k kerüljenek fel, ne legyenek duplikációk. Ráadásul az OpenStreetMap-ben lévő adatok sem konzisztensek. Az egymás közelében hasonló tulajdonságú POI-k közül biztos, hogy jót kívánunk szerkeszteni? Mi az OpenStreetMap-be importálásnak a menete? Ki hagyja jóvá, kikkel lehet konzultálni? Számos kérdés, amelyek megválaszolása egyáltalán nem triviális. Ebben az előadásban összefoglalom tapasztalataimat, eddigi importálásokat, az ezzel kapcsolatos terveimet, valamint bemutatom azokat a munkafolyamatokat és az egyszerű pythonos eszközöket, amelyeket készítettem a feladat megkönnyítésére.#Importálás, #Python, #Overpass, #JOSM, #Közösség
3. 27/3
Roadmap
● https://wiki.php.net/rfc/releaseprocess
– Évenkénti kiadások (minor vagy major verzió)
– 3 év támogatás a megjelenéstől számítva
● 2 évig hiba és biztonsági javítások
● +1 évig biztonsági javítások
● https://wiki.php.net/rfc/php53eol
– Az 5.5 megjelenését követően az 5.3-höz már csak a
biztonsági javítások jönnek 1 évig.
4. 27/4
Roadmap
● Az eredeti roadmap: https://wiki.php.net/todo/php55
● Elméletileg január 31 lett volna a beta1 (Feature Freeze).
● Gyakorlatilag március 31 lett belőle.
● A csúszás egyik legnagyobb oka a Zend Opcache feltűnése.
● Q1 helyett Q2 lesz a végleges kiadás időpontja a szükséges
beta/RC-k számától függően.
● Tehát az 5.3 EOLed lesz ~2014 Q2-től.
6. 27/6
Finally
● A finally minden esetben(siker, el nem kapott
kivétel,return) meghívódik, kivéve a fatális hibákat.
● Így a legegyszerűbb megoldani, hogy minden
esetben feltakarítson maga után a kódunk (temp
fájlok törlése, lock elengedése, etc.).
● Egymásba ágyazott try blokkok esetén belülről
kifelé(fentről lefelé) haladó sorrendben hívódnak
meg a finally-k.
8. 27/8
Generátorok
● 1-1 sor lekérdezése belekerülhetne a ciklusba, de az csúnya, nem érdekel
minket honnan, vagy hogyan jön az adat, mi fel akarjuk dolgozni.
● getFilesFromFile() visszatérhetne egyben az egész tömbbel, de az
feleslegesen emelné a peak memória használatot, plusz nem biztos, hogy
mindig csak véges elemszámot tudnánk generálni.
● getFilesFromFile() visszatérhetne egy iterátorral ami már jó, nem kell
egyszerre sok memóriát allokálni, és megvalósítható a végtelen elemszám
generálása is de elég sok boilerplate kell hozzá, plusz szembemegy a PHP
multiparadigmás elveivel, ha csak így lehet megoldani.
9. 27/9
Generátorok
●
A yield-et tartalmazó függvény első hívásakor egy Generator példánnyal tér vissza, amely egy
Iterator-t valósít meg.
●
A Generator osztály nem példányosítható manuálisan.
●
A visszakapott Generator bejárása meghívja(folytatja) a függvény futását a következő yield-ig,
amelynek az értékével visszatér.
●
Ez a pingpong megy amíg nem jön egy return; a Generatorból, vagy el nem fogynak a yieldek,
vagy abba nem hagyja a hívó az iterálást, vagy nem jön egy a generátorban el nem kapott
Exception.
● Yield dobhat kulcs => érték párt, illetve mind érték mind referencia szerint.
● A Generator példány send metódusának hívásával lehet adatot is küldeni a generátor
függvénynek, ez ugyanúgy lépteti az iterációt és a függvénytörzsben a yield visszatérési
értékeként érkezik meg a küldött adat.
●
A Generator példány throw metódusával lehet kivételt is dobni kívülről, amit ugyanúgy lépteti az
iterációt, ha a függvénytörzsben elkapódik a kivétel, akkor a következő elem jön vissza, ha nem,
akkor a kivétel.
10. 27/10
Opcache
●
A Zend az Optimizer+ nevű fizetős opcode cache-ét tette nyílt forrásúvá, és (alapból
kikapcsoltan) be fog kerülni az 5.5-be core ext-ként.
● A core fejlesztők között van több jelenlegi/ex Zend alkalmazott, aki ismeri a
kódbázist, a kódnyitás után elég sokan kezdék el nézegetni, talán több aktív
fejlesztője lesz, mint az APCnek.
●
Sajnos a Zend stackben nem használnak Thread Safe SAPI-t, szóval TS
környezetben akad még vele munka, de elméletileg dolgoznak az ügyön.
●
Mivel a core része, ezért jó esetben nem jöhet ki úgy új kiadás, hogy nincs hozzá
vagy törött az opcode cache támogatás (PHP 5.4 /o).
●
Data Cache funkciót nem tartalmaz, az APC ezen részét nem váltja ki,de
folyamatban van egy kicsontozott APC fejlesztése, ami csak változók tárolására
használható az APC-vel azonos API-n keresztül: https://github.com/krakjoe/apcu
●
Az APC fejlesztése valószínűleg le fog lassulni, meg fog állni.
13. 27/13
Egyszerűsített jelszó hash API
● array password_get_info ( string $hash )
– Visszaad egy tömböt: algo, algoName és options elemekkel.
● string password_hash ( string $password , integer $algo [, array $options ] )
● boolean password_needs_rehash ( string $hash , string $algo [, string $options
] )
● boolean password_verify ( string $password , string $hash )
● $options a salt-ot és a cost-ot tartalmazhatja jelenleg.
● algo PASSWORD_BCRYPT illetve PASSWORD_DEFAULT értékeket fogadja,
ahol a bcrypt az alapértelmezett. A későbbi verziókban ez a lista bővülhet (pl.
scrypt) illetve a default is változhat.
14. 27/14
Tömbök
● array_column()
– többdimenziós tömbből lehet vele visszakérni minden
sorból egy megadott oszlophoz tartozó értékek listáját.
● Egy Iterator key() függvényéből visszaadott tömb/object már
használható a foreach fejlécben közvetlenül.
● Foreach fejlécben a list() mostantól szabadon használható az
aktuális iterációhoz tartozó elem kibontására.
15. 27/15
Config
● sys_temp_dir
– Alapértelmezett temp dir adható meg.
– Ha ki van töltve, akkor ezt használja a php az OS specifikus
találgatás helyett.
● intl.use_exceptions
– Szabvány php hibák helyett kivételt dobjanak-e az intl funkciók
hiba esetén.
● mysqlnd.sha256_server_public_key
– Mysql SHA256 auth támogatáshoz a szerver nyilvános
kulcsának helye.
16. 27/16
Biztonság
● FILTER_VALIDATE_MAC, FILTER_SANITIZE_MAC
● hash_pbkdf2()
– hash függvény pbkdf2 alapokon, kötelezően meg kell adni a
használni kívánt hash algot, egy salt-ot és egy iterációszámot.
● openssl_pbkdf2()
– ugyanezt tudja, van rá némi esély, hogy ez nem éri meg a
release-t.
● A /e kapcsoló a preg_replace() hívásban (preg_replace_callback
javasolt helyette).
18. 27/18
gd
● Összefésülésre került a GD bitbucket tárolós és a php repóban lévő
verzió kódja.
● Új függvények(illetve tartozik hozzájuk egy kupac konstans is):
– imageflip()
– imagecrop()
– imagecropauto()
– imagesetinterpolation()
– imageaffine()
– imageaffinematrixget()
– imageaffinematrixconcat()
– imagescale()
19. 27/19
curl
● Új függvény: curl_file_create
● Új osztály: CURLFile
● Új konstans: CURLOPT_SAFE_UPLOAD
● Fájlfeltöltés 5.5 előtt:
curl_setopt($curl_handle, CURLOPT_POST, 1);
$args['file'] = '@/path/to/file';
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
● Fájlfeltöltés 5.5ben:
curl_setopt($curl_handle, CURLOPT_POST, 1);
$args['file'] = new CurlFile('filename.png', 'image/png');
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $args);
● A régi működés kikapcsolható a CURLOPT_SAFE_UPLOAD
20. 27/20
intl
● Uconverter osztály:
– Karakterkódolások között lehet oda-vissza
konvertálgatni szöveget.
– mb_convert_encoding()-hez képest extraként
megadható, hogy megadható, hogy mi történjen
az alapból nem leképezhető karakterekkel.
● rengeteg további intl/ICU okosítás(75 új függvény),
cserébe ICU követelmény felkúszott >= 4.0-ra.
21. 27/21
date
● Új DateTimeInterface interface.
● Új DateTimeImmutable osztály
– DateTime-mal szemben nem módosítja saját
magát, csak visszatér a módosult példánnyal,
● Mind a DateTime, mind a DateTimeImmutable a
DateTimeInterface megvalósítása.
23. 27/23
42
● 'The answer to life, the universe and everything'[0]
● array(42 =>'The answer to life, the universe and everything')[42]
● Abszolút osztálynév feloldás a class konstans használatával:
echo ClassName::class; // 'ANamespacedClassName'
● cli_get_process_title/cli_set_process_title: cli processzhez tartozó cím (ami ps kimenetben,
ablakfejlécben, etc. látszik) lekérdezhető és beállítható lesz minden nagyobb platformon.
● set_error_handler/set_exception_handler NULL callbackkel hívva visszaállítja a gyári handlert és
visszatér az utoljára beállítottal.
● boolval()
● Az empty() mostantól kifejezések vizsgálatára is használható.
● Systemtap támogatás, az 5.3-ban hozzáadott dtrace probe-ok mostantól systemtap-en keresztül is
elérhetőek.
● Az új Apache 2.4 handler támogatott lett windowson.
● Max-Age attribútum minden php-ből kreált sütire.
24. 27/24
Ami felmerült, de végül kimaradt
●
Accessors
– https://wiki.php.net/rfc/propertygetsetsyntax-v1.2
●
DateTime::__toString()
– https://wiki.php.net/rfc/datetime_tostring
●
Escaper
– https://wiki.php.net/rfc/escaper
●
Annotációk DocBlock alapokon
– https://wiki.php.net/rfc/reflection_doccomment_annotations
– https://wiki.php.net/rfc/annotations-in-docblock
●
Opcionális paraméterek default értékének használata a hívásnál
– https://wiki.php.net/rfc/skipparams
●
Függvényhívás paraméterlista végén vessző elfogadása
– https://wiki.php.net/rfc/trailing-comma-function-args
● „assuming $this from incompatible context” ellenjavalttá tétele
– https://wiki.php.net/rfc/incompat_ctx
●
(new Foo)->bar = 'baz'
– http://www.mail-archive.com/internals@lists.php.net/msg64194.html
●
„Pure-code” php fájlok
– https://wiki.php.net/rfc/phpp
● array_part()
– https://wiki.php.net/rfc/array_part
25. 27/25
Ami kimaradt, de szerintem igény
lenne rá
● AST alapú parser
– https://wiki.php.net/rfc/ast_based_parsing_compilation_process
● Natív, teljes körű Unicode támogatás
● Typehint skaláris típusokra is
– A Fatal error-os formában nem valószínű hogy valaha is bekerül.
● Kivétel alapú hibakezelés
– Nem tudja kiváltani a jelenlegi infrastruktúrát, plusz nem illeszkedik a multiparadigmás imázsba.
– https://github.com/ircmaxell/ErrorExceptions
● Chainelhető user error/exception handlerek
– Mint ahogy pl. most az spl autoloader működik.
● Skalár objektek
– https://github.com/nikic/scalar_objects
● Thread kezelés
– http://pecl.php.net/package/pthreads
● PDO2
26. 27/26
Visszafelé nem(teljesen) kompatibilis
változások
● ext/mysql (ext/mysqli javasolt helyette)
● mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() and mcrypt_ofb() (mcrypt_generic/mdecrypt_generic
használható helyette).
● Bugfix: unpack("a5", "str00") 5.5 előtt 3 hosszú stringet adott vissza, 5.5től a helyes 5 hosszú NUL
paddolt stringet, a 'Z' kapcsolóval elérhető a régi hibás viselkedés továbbra is.
● A függvények, osztályok és konstans nevek belső case insensitive-ségének biztosítása mindig ASCII
szabályok szerint történik ezentúl (pl. török locale-lel voltak korábban problémák:
https://bugs.php.net/bug.php?id=18556).
● Windows XP és 2003 támogatása megszűnik.
● php_logo_guid(), php_egg_logo_guid(), php_real_logo_guid(), zend_logo_guid() függvények
eltávolításra kerültek, helyettük data url-ek használata javasolt.
● --with-curlwrappers configure kapcsoló és az ehhez tartozó experimental kód eltávolításra került.
● '@/path/to/file' típusú curl fájlfeltöltés ellenjavalttá vált.
● IntlDateFormatter::setTimeZoneID() és datefmt_set_timezone_id() ellenjavalttá vált. A
IntlDateFormatter::setTimeZone() vagy a datefmt_set_timezone() használható helyette.