fejlesztés - 2011 - 30 megfelelő bejegyzés.

Mutass mindent

Jelöld be, hogy főbb mely kategóriákat akarod olvasni, vagy ha csak egyet: kattints a nevére.


Haszprus

Day 49 @ Sanoma

©   Haszprus   |   buli energiablog fáradtság fejlesztés sanoma zene

Hétvégén alapoztunk, voltunk Morri Ligetben és Coronitában, hajnalban csatlakozott egy kedves régi ismerős is, közben befoglaltam megint a szekusok székét , hétfőn éjfélig dolgoztunk, este hívnak telefonon bocs dolgozom, írnak skype-on bocs dolgozom, taxi haza és még tovább, power, kedden pedig alvásmennyiség alapján kipihenetlenül, gyakorlatilag mégis úgy pörögve, mint még soha folytattam (boss meg is kérdezte, mit tolok). Vuttu-tuttu vuttu-tuttu. Red Bull Hell C Vitamin Béres csepp Ginseng ampulla kávé, szóval mindent, de ami leginkább pörget az az ha valamit lerakok és azt elismerik. (Másik boss másnap külön odajött mosolyogva gratulálni, apróság, de mégsem.) Nap végén hazaindulás előtti percekben beesik egy task amit csináljunk meg még ma, nyilván. Safranek, jöjjön közelebb... Itthon megnyitom a shellt, majd telefont emelek az ágyban hogy felhívjam akivel nem lehetek, helyben elalszom ruhában, égő lámpával, ahogy kell, de ezúttal legalább cipő nincs rajtam. Éjfélkor felébredek, kipihent vagyok, emaileket írok meg ticketeket kezelek 3 órán keresztül, elolvasom amire napközben nem volt időm, megírok pár irányelvet és kitűzök pár célt a karbantarthatóbb folyamatok érdekében, aztán ráébredek, hogy nem is tudok már aludni, no meg hogy hajnal 5 múlt.

Ami most jó:

  • Yves Larock - The Zoo (Muzzaik Remix)

Jó még:

  • Djuma Soundsystem - Les Djinns (Trentemoller remix)
  • Wawa - SOMBRITA ( Lauer & Canard ft Greg Note Rmx )
  • ANIMA SOUND SYSTEM - Tedd a napfényt be a számba ( MATULA feat GOLDSOUND remix )
  • Andy Caldwell feat. Lisa Shaw-Warrior (Tiger Stripes Mix)
  • Loco & Jam - Medusa [Rekluse]
  • Popmodell - Kiskece (radio edit)
  • Loco & Jam - Medusa [Rekluse]
  • Pet Shop Boys-Love Etc (Gui Boratto Remix)
  • Serge Devant Addicted with lyrics 2009 [HQ Club Mix]
  • Radio Slave Feat Danton Eeprom - Grindhouse ( Dubfire Terror Planet Remix )
  • Mightyb - Taj Mahal (Original Mix)
  • MATULA feat GOLDSOUND - Wonderful World (original)
  • Chris Lake & Nelski - Minimal Life (Original Mix) (HD)
  • Federico Scavo, Alex Kenji - Gimme Five (Mix 1)
  • Modestep - To The Stars (Break The Noize & The Autobots Remix) (Official Video)

A reggeli kardio alapjai. És az fontos.

Haszprus

Query optimalizálás

©   Haszprus   |   fejlesztés sanoma sql

30 másodperces query:

SELECT webshop_id,
  w.name,
  w.hidden,
  (SELECT count(*) FROM prices 
    WHERE webshop_id=w.webshop_id)
    AS prices_count,
  (SELECT count(*) FROM prices 
    WHERE webshop_id=w.webshop_id and deleted=1)
    AS deleted_count,
  (SELECT count(*) FROM prices 
    WHERE webshop_id=w.webshop_id and product_id>0
     and skipped=0 and deleted=0)
    AS paired_count,
  (SELECT count(*) FROM prices 
    WHERE webshop_id=w.webshop_id and skipped=1 and deleted=0)
    AS skipped_count,
  (SELECT count(*) FROM prices 
    WHERE webshop_id=w.webshop_id and skipped=0
     and product_id=0 and deleted=0)
    AS waiting_count 
  FROM webshops w
  WHERE w.book_shop = 0 
  HAVING prices_count>0 
  ORDER BY w.name

6 másodperces query:

SELECT w.webshop_id, w.name, w.hidden, 
  x.prices_count, x.deleted_count, x.paired_count, 
  x.skipped_count, x.waiting_count
  FROM webshops w
  JOIN (
    select p.webshop_id,
    count(*) AS prices_count,
    sum(deleted) 
      AS deleted_count,
    sum(if(product_id > 0 and skipped = 0 and deleted = 0, 1, 0)) 
      AS paired_count,
    sum(if(skipped = 1 and deleted = 0, 1,0)) 
      AS skipped_count,
    sum(if(skipped = 0 and product_id = 0 and deleted = 0, 1, 0)) 
      AS waiting_count
    from prices p
    group BY webshop_id
    HAVING prices_count > 0
    ORDER BY webshop_id
  ) AS x
  ON x.webshop_id = w.webshop_id
  WHERE w.book_shop = 0
  ORDER BY w.name

Note: ez a bejegyzés évekkel azután lett publikus hogy a rendszert lecserélték egy másikra.

Haszprus

Sanoma day 25

©   Haszprus   |   energiablog fejlesztés sanoma sql

Pár napja megbeszéltünk egy feladatot az Atyaúristennel és a juniorommal. Az atya elment szabira. A juniorom előadta a dolgot a technikai pm-nek, aki egy iszonyat optimizer csávó, komolyan fekete mágia amit sql query optimalizálásban lenyom, közölte, hogy ezt a dolgot nem lehet megoldani, mert van benne egy akkora descartes szorzat amit a világegyetem összes szerverével se fogunk tudni kiszolgálni. Persze égett a képem, de nem volt semmi az ügyből. Ma este ahogy hazamentek már a népek és csillapodott a nyüzsi a Sanomában, eszembe jutott egy remek ötlet amivel szerintem lineárisan halál lazán végigmászhatunk a db-n, baromira nem lesz descartes szorzat, kb. a tábla mérete lesz 2-vel szorozva a szükséges lépések száma, és annyira jó érzéssel jöttem el 19-kor (még maradtam volna, csak időre mentem), hogy ihaj. Remélem meg tudjuk oldani így.

Haszprus

Optimalizációs feladatok

©   Haszprus   |   css fejlesztés howto javascript képzés mysql php sanoma
  • PHP optimalizálás
    • Jenkinses elemzés a kódra
      • CPD és PMD checkre van szükség
    • XHPROF elemzés
  • DB optimalizálás
    • CT mérés javítása
      • Ne okozzon table lockot a CT mérés során keletkező INSERT-ek és UPDATE-ek. Lehetőségek: delayed vagy low priority.
    • MySQL 5.5 percona frissítés
    • Adatok elemzése
      • Nagy méretű táblák elemzése, törlési, archiválási stratégiák kialakítása és a szerkesztőséggel egyeztetés.
    • InnoDB storage engine használat
    • Query optimalizálások
      • Queries not using indexes lekérdezések optimalizálása
      • Slow query optimalizálás
      • Jetprofiler elemzések
    • Táblák particionálása
  • Kereső optimalizálás, Sphinx bevezetés
    • Admin és frontend kereső átalakítása
    • Feleslegessé vált indexek törlése
  • Admin folyamatok optimalizálása
    • Workflow felülvizsgálata, tapasztalatok implementálása
  • HTML, JS, CSS optimalizálás
    • http://gtmetrix.com/ javaslatok alkalmazása

Na ez például egy remek szakmai fejlődési program.

Igazából nem kéne meglepődnöm. Abban a szobában kb. 40 projektnek a fejlesztése zajlik, rengeteg külsős cégnek adnak ki megbízásokat a senior fejlesztőink. Csupa ilyen arccal vagyok körülvéve, juniorok nem nagyon dolgoznak a Sanomában, mert a legtöbb projektet kizárólag külső erőforrásokkal fejlesztik, plusz a hotfixeket belül, meg a deploy, üzemeltetés, ilyesmi. A lényeg hogy rengeteg tudás koncentrálódik körülöttem, és ha jól csinálom akkor rengeteget profitálhatok az itt eltöltött időből. Sajnos ebből a szobából hamarosan ki leszünk emelve egy kevésbé szakmai közegbe, de lobbizni fogok hogy tarthassam minél jobban a DPO-s kapcsolataimat.

Haszprus

Zend Framework

©   Haszprus   |   barátok fejlesztés képzés php symfony

Nu, Gábortól megint tanultam egy kis Zend Frameworköt, de igazából az eddigi rátekintéseim eddig mindig hiányérzettel zárultak, nem igazán érzem hogy ez miért jó, valahogy a Symfony úgy jobban egyben van…

Haszprus

Web developer

©   Haszprus   |   barátok fejlesztés

Ma a következő témakörökről meséltem Istvánnak (dankoi) 6 órában iszonyatosan összesűrítve:

  • fejlesztői környezet: phpstorm, netbeans, zend studio
  • verziókezelés: svn, hg, github
  • php frameworkök: symfony, mvc, orm, schema, yaml, routing, fixtures, modellek testreszabása, formok, modulgenerálás
  • javascript: ajax, jquery, dom
  • dokumentáció: phpdoc, doxygen
  • tesztelés: unit test, phpunit, mock object
  • elosztott nagyterheltségű rendszerek: cache-elés, memcache, kliens oldalt terhelni (js, számítások ott), sok php szerver, 1 db (legegyszerűbb eset): db-t kímélni
  • fejlesztés: refaktor, coding standard (zend), firebug
  • módszertan: scrum, kanban
Haszprus

Open Academy

©   Haszprus   |   barátok css fejlesztés javascript képzés php

Ott voltunk ezen is Orcával és PAStheLoDdal.

Szubjektív véleményem: nagyon hardcore advanced cuccot vártam, ehhez képest kicsit bme-sre sikerült, legalábbis az első egy-két előadást a magam részéről túl lassúnak ill. bealvósnak éreztem, a verziókezelős és a scrumos teljesen triviális dolgokról beszélt (szerintem elhibázott tematika). Volt viszont nagyon kellemes meglepetés is, éspedig a PHP Security, ami nagyon élvezetes volt (erről a témakörről még valszeg többször ennyit szívesen hallgatnék), illetve a HTML5 bemutató, ami viszonylag meglepő módon még mindig tudott egy csomó újdonsággal szolgálni a HTML 5 konferencia után is.

Amik voltak:

  • Multiplatform mobil fejlesztések (Dr. Forstner Bertalan)
  • Hogyan optimalizáljunk C/C++ kódokat! - Esettanulmány (Illés Márton)
  • Verziókövető rendszerek alkalmazása fejlesztési projektekben (Gyöngyösi Péter)
  • Webműves Kelemen tanácsai, avagy mi kell a PHP falába? (Varga-Perke Bálint)
  • Hogy kerül a csizma az asztalra? HTML 5, CSS3, JavaScript (Magyar Attila és Györkő Péter)
  • AGILIS / SCRUM fejlesztés (Bakonyi András)

Üdítő volt végre egy erősen szakmaibb konferencián ott lenni, nekem Bátorfi Zsolt HTML 5 bevezető előadása kellőképpen hatásosnak bizonyult. Mondjuk a későbbiek nem értek a nyomába, de ettől még rengeteg implementáció szinten új dolgot láttam. Örülök hogy ott voltam, legnagyobb hiba lett volna kihagyni. Az MS nagyon nyomulni akar, és valszeg a legjobb helyen teszik (a fejlesztőknél). Atomprofi szervezés stb. Elvileg lesz majd még ilyen, feltétlen menni akarok arra is.

Haszprus

Első node.js http szerverem :)

©   Haszprus   |   fejlesztés javascript node.js

Gondoltam kipróbálom ezt is. Szerver oldali javascript ugye ("server side javascript done right"). Íme az app.js tartalma:

var http = require('http'); var server = http.createServer(function(request, response) { response.writeHead(200, { 'Content-type': 'text/plain' }); response.end('Hello world'); }); server.listen(8000); console.log('Server is listening on http://127.0.0.1:8000');

As seen in the tutorial. És ez igen könnyen már futtatható is (konzolba node app.js), és a http://127.0.0.1:8000 címen meghívva valóban kapunk is egy hello world oldalt.

Haszprus

Twig template engine

©   Haszprus   |   fejlesztés howto php

Gondoltam eljátszom a twig template kezelővel, ami erősen a symfony 2-höz és fabien potencierhez kötődik, tekintve hogy ő az atyja mindkettőnek és ez a symfony 2 default templating engine-je.

A telepítés igen könnyű pearrel:

pear channel-discover pear.twig-project.org pear install twig/Twig

(Egyébként nem muszáj pearrel telepíteni.)

Hozzuk létre a kis hello world sablonunkat:

<html> <head></head> <body> <p>Hello {{ name }}</p> <p>The date is {{ date }}</p> <p>The time is {{ time }}</p> </body> </html>

Mentsük el templates/hello.tpl-ként.

A template-et adattal kiszolgáló php a következőképp fog kinézni:

<?php include 'Twig/Autoloader.php'; Twig_Autoloader::register(); try { // templates könyvtárban keressük a template-eket $loader = new Twig_loader_Filesystem('templates'); $twig = new Twig_Environment($loader); $template = $twig->loadTemplate('hello.tpl'); echo $template->render(array( 'name' => 'World', 'date' => date('Y-m-d'), 'time' => date('H:i:s'), )); } catch (Exception $e) { die('Hiba: ' . $e->getMessage()); }

Ez ennyiből már működik is. A twig lehetőségeibe mélyebben nem megyek bele, aki használt már bármilyen template engine-t, annak sok újat nem fog mutatni.

Haszprus

CakePHP modellek

©   Haszprus   |   cakephp fejlesztés howto php symfony

Nemrég kezdtem el picit ismerkedni a CakePHP MVC frameworkkel, igazából egyáltalán nem célom ismertetni a képességeit vagy bármi hasonló, mindössze megragadnék egy dolgot ami megtetszett. A dolog nem újdonság, mint ahogy a CakePHP sem az, sőt.

Induljunk ki onnan, hogy már megvannak a tábláid a db-ben, amit még korábban létrehoztál, hogy Cake-et kezdtél volna használni. Nem feltétlen tipikus felállás, tudom.

Megmondod az érintett kontrollerednek egy tagváltozóban, hogy

$uses = array('Restaurant', 'Place');

, aminek a hatására a kontroller a Restaurant és a Place nevű modelleket példányosítani fogja és hozzárendeli a $this->restaurant ill $this->place változókhoz a Controlleren belül.

Amennyiben a megfelelő könyvtárban nincs Restaurant ill. Place modell (az ezekhez tartozó php fájl és osztály), akkor megnézi, hogy a db-ben létezik-e restaurant ill. place nevű tábla, és ha igen, akkor ezekből generál on-the-fly egy-egy modellt.

Lekérdezi tehát a db-ből a táblák oszlopait, és rögtön használhatod is valamennyi tagfüggvényt rájuk, mint pl. megkeresheted az 5-ös id-jű éttermet:

$this->restaurant->findById(5);

Nem csak id alapján kereshetsz, hanem bármi egyéb oszlopnév alapján is természetesen, tehát pl. $this->restaurant->findByType('lacikonyha') hívás is teljesen valid.

Nekem ebben az tetszik mondjuk egy symfonyval szemben, hogy a modellt nem kell generálnod, létrehozza neked on-the-fly, aminek különösképp ott érzem előnyét, ha valami változik az adatbázis sémában (nevezetesen nem kell újragenerálgatni a modelleket, ami marha kényelmes dolog). Nyilván hátránya, hogy egy IDE sem fogja kitalálni neked, hogy vajon milyen tagfüggvényeket hívhatsz meg az ilyen módon használt modelljeiden.

Haszprus

Meetoff - videó a neten

©   Haszprus   |   12e barátok haszprus javascript képzés szülinap videó

Tegnap volt Meetoff, és kibiri kib* jó volt, valamint kiderült megint, hogy mennyire belterjes is ez a szakma Megint voltak ismerős arcok, ezúttal az előadók közt is, dumáltunk, rámköszöntek, nagyon jól esett. A helyszín választása egész jó volt, és hogy tartottunk szünetet, az is.

A téma Videó a neten volt (Tolni kell a kontentot alcímmel), volt pár érdekes előadás új kezdeményezésekről vagy akár meglévő trendekről, de meg kell mondjam, hogy nekem legalább ugyanennyit számított az a közeg is amiben voltam, mivelhogy ScoobyZolival és eL Gerivel mentem, a helyszínen pedig egyszercsak fölénk magasodott PAStheLoD, és még váltottunk pár szót a bárpultnál Kereskényi Balázzsal is. Plastik Józsit pedig életnagyságban láthattuk, akár meg is érinthettük volna a Mestert.

Ps. egyébként 27. szülinapom volt tegnap, és kaptam tortát a Virgótól (ügyvezető adta át), felköszöntöttek a kollégák, ami lássuk be, igen kellemes élmény.

Meetupokra, meetoffokra, és egyéb hasonló nyalánkságokra pedig megyünk a továbbiakban is, bejött a téma.

ápr. 25. 18:57 Ott voltunk! Megjött a bizonyíték

Quick fact: tegnap voltunk Gerivel budapest.js meetupon, és volt egy csomó ismerős arc. (Sajnos utána rohannunk kellett tovább.) A téma különböző javascript frameworkök bemutatása volt egy drag&drop + slideshow mintafeladaton keresztül (jquery, mootools, yui, dojo, valamint volt még egy közönségi jquery és egy közönségi fapad javascript bemutató is). Kicsit sajnáltam, hogy az, hogy mit láttunk, nemcsak a keretrendszernek, hanem leginkább az előadó előadásmódjának és egyéni elképzeléseinek függvénye volt (mivel a specifikáció nem volt strict, ami persze jó, hisz nyilván minden fw-ben mást és mást egyszerű vagy nehéz megcsinálni).

Magam részéről a versenyzőket látva és egymáshoz viszonyítva tetszett a jQuery és a mootools, számomra olvasható/emészthető kódja és felépítése miatt, dojora nem voksolnék az alacsony dokumentáltsága folytán, yui nagyon profi cuccnak tűnik, de ugyanakkor érzésem szerint igen macerás fejleszteni benne. Ugyanakkor még egyszer megjegyezném, reálisabb lenne az összehasonlítás, ha mindegyiket ugyanaz a személy mutatta volna be. Nyilván minden nyelvet meg lehet közelíteni egyszerűen és bonyolultan, mint ahogy a két jQuerys példában is egészen eltérő szemléletben oldotta meg a két bemutató ugyanazt a feladatot.

Tetszett amúgy.

Haszprus

Full text search stb

©   Haszprus   |   cakephp fejlesztés meló php seo symfony virgo

Múlt héten a CodeIgniter Framework megismerése volt terítéken, ma pedig kutattam egy kicsit, amit a napokban még folytatni fogok full text search témában, érintve, de nem korlátozódva a következőkre:

  • Zend Search Lucene
  • Sphinx
  • Xapian

Implementáltam egy a Zend Frameworkben található Zend Search Lucene-t használó megoldást (abszolút experimentális jelleggel, index buildelés és lekérdezés) CakePHP Framework alá beültetve.

Megjelenítési réteghez úgy tűnik 960 Grid System lesz a választottunk.

Itthon eközben symfony frameworköt nyomok továbbra is Doctrine ORM-mel.

Izgi mind.

SEO power.

Haszprus

symfony tech demo

©   Haszprus   |   barátok doctrine fejlesztés php symfony

Tegnap ledemóztam Zolinak a symfony - doctrine duó YAML alapú (schema.yml) adatbázis- és modellgenerálási képességeit, illetve hogy miként lehet ebből formokat és komplett modulokat legenerálni, valamint miként lehet testreszabni ezeket. Ahogy láttam, impresszív volt. Mondjuk szerintem is az.