szakma

Mérnök vagyok!

Pár napig nem volt post és most még néhány napig nem is lesz. Ez azért van, mert 07-01-17-én sikeresen megvédtem a diplomámat, úgyhogy most már a BME végzett diplomás mérnöke vagyok, konkrétan Műszaki Informatikus. A post-ok elmaradása pedig nyilván azért van, mert ünnepelek :)

De nemsokára 200%-osan belevetem magam a munkába, és akkor majd lesz téma is, amiről írhatok! A terveimről az első post-ban beszámoltam.

UPDATE: ebben a postban volt néhány vicces videó, azokat külön post-ba tettem.

Theme developer a 6-os drupálhoz.

Nemrég megjelent a hír a Drupal.org-on egy "új modulról": Theme developer. (Nem önálló modul, hanem a devel modul része.) A drupal smink (theme) fejlesztőknek hihetetlen (és mától nélkülözhetetlen) segítséget nyújt majd ez a modul.

Röviden arról van szó, hogy a böngészőben megjelenő oldal bármely komponensét meg lehet vizsgálni és ki lehet deríteni, hogy:

  • melyik függvény/fájl generálta
  • melyik függvény generálhatta volna, azaz mivel lehet felüldefiniálni
  • milyen paramétereket kap és mik a pontos értékei a változóknak
  • melyik theme függvény mennyi ideig futott

Érdemes megnézni a screencast-et (legalsó link), abból jól látszik, hogy mit is tud ez az eszköz.

Megdöbbentő micsoda fejlesztéseket látnak napvilágot, csak úgy a semmiből :)

Linkek:
Devel modul a Theme developer-el együtt
Bejelentés
Screencast (.MOV, angol, 13 perc)

Karakter alapú szöveg-összehasonlítás PHP-vel

Tartalom

Bevezető

Készülve a csütörtöki diplomavédésre, megnéztem a bíráló által feltett kérdéseket. Diplomatervem egy adatbázis séma alapú PHP kódgenerátor. (Később majd írok erről egy részletes post-ot.) A bíráló egyik kérdése volt, hogy a generált forráskód hány százalékát kell átírni egy valós környezetben.

Ez egy nagyon jó kérdés, bennem is felmerült már. Forráskód bázis rendelkezésre áll, úgyhogy van kód amin meg lehet mérni. Első ötlet lehet a diff parancs. De ebben az esetben problémás lehet, hogy a diff soronként vizsgálja a forráskódot. Ez két dolog miatt gond:

  • A generált kódban vannak felesleges blokkok, amelyeket nem töröltem hanem a // jelekkel kommenteztem ki.
  • Minden táblához létrejön egy konfigurációs fájl, amelynek az a célja, hogy testreszabáskor módosítsák. Minden sorát!

Ez a két eset nagyon gyakori, ezért a soronként összehasonlítás alapján megítélni a forráskód-generátor jóságát félrevezető lenne.

Egy karakter alapú összehasonlítás ennél sokkal pontosabb információt adna. Kicsit kutattam az interneten és találtam egy megoldást, amit kicsit átírva született a lenti kód.

Karakter alapú szöveg-összehasonlító PHP szkript

A lenti szkript definiál egy CharDiff osztályt, amit a PEAR Text_Diff csomagban található Text_MappedDiff osztályból öröklődik. A Text_MappedDiff pedig a Text_Diff-ből öröklődik, tehát a lenti osztály egyben Text_Diff osztályú is. Ez azért jó, mert a fent említett csomagban van jónéhány renderer, amelyekkel különböző szabványos patch kimeneteket lehet generálni.

De szerettem volna vizualizálni is a dolgot, ezért az osztály része egy render metódus ami HTML kimenetet ad, és grafikusan ábrázolja a a különbséget a két szöveg között.

Eredeti kód: www.hawkee.com

Íme a kód, CharDiff.php:

<?php
/**
 * Karakter alapú szövegösszehasonlító
 * -----------------------------------
 * Használat:
 * $text1 = 'árvíztűrő tükörfúrógép';
 * $text2 = 'árvíztörő tükörfúrógép';
 *
 * $diff = new CharDiff($text1, $text2);
 *
 * $diff->render();
 */

require_once 'Text/Diff.php';

class
CharDiff extends Text_MappedDiff {

  function
CharDiff ($text_src, $text_tgt) {

   
$chars_src = str_split($text_src, 1);
   
$chars_tgt = str_split($text_tgt, 1);

   
$chars_src_mapped = $chars_src;
   
$chars_tgt_mapped = $chars_tgt;

     
parent::Text_MappedDiff($chars_src, $chars_tgt, $chars_src_mapped, $chars_tgt_mapped);
  }

  function
getStat() {
   
$stat = array();

   
$stat['copy']  = 0;
   
$stat['add']  = 0;
   
$stat['del']  = 0;
   
$stat['change']  = 0;
   
$stat['change-del']  = 0;
   
$stat['change-add']  = 0;

    foreach(
$this->getDiff() as $op) {
      if (
is_a($op, 'Text_Diff_Op_copy')) $stat['copy'] += $op->norig();
      if (
is_a($op, 'Text_Diff_Op_delete')) $stat['del'] += $op->norig();
      if (
is_a($op, 'Text_Diff_Op_add')) $stat['add'] += $op->nfinal();
      if (
is_a($op, 'Text_Diff_Op_change')) { $stat['change-del'] += $op->norig(); $stat['change-add'] += $op->nfinal(); }
    }

    return
$stat;
  }

  function
render($color_delete = 'red', $color_add = 'green') {
    foreach (
$this->getDiff() as $op) {
      if (
is_a(&$op,'Text_Diff_Op_copy')) {
        echo
$this->_implode($op->final);
      }
      elseif (
is_a(&$op,'Text_Diff_Op_delete')) {
        echo
'<span style="background-color: ', $color_delete, ';">', $this->_implode($op->orig), '</span>';
      }
      elseif (
is_a(&$op,'Text_Diff_Op_add')) {
        echo
'<span style="background-color: ', $color_add.';">', $this->_implode($op->final), '</span>';
      }
      elseif (
is_a(&$op,'Text_Diff_Op_change')) {
        echo
'<span style="background-color: ', $color_delete.';">', $this->_implode($op->orig), '</span>';
        echo
'<span style="background-color: ', $color_add.';">', $this->_implode($op->final), '</span>';
      }
    }
   
    return
$return;
  }

  function
_implode($chars) {
    return
nl2br( implode('', array_map( array($this, '_htmlFilter'), $chars) ) );
  }

 
// used with array_map
 
function _htmlFilter($text) {
    return
$text = str_replace( array('&', '<', '>'), array('&amp;', '&lt;', '&gt;'), $text);
  }

}
?>

A feneti kód letölthető itt: [attachment:CharDiff.php.txt=CharDiff.php]

Az osztály használata:

<?php
  $text1
= 'árvíztűrő tükörfúrógép';
 
$text2 = 'árvíztörő tükörfúrógép';

 
$diff = new CharDiff($text1, $text2);

 
$diff->render();
?>

Remélem lesz aki hasznosnak találja majd.

Ki a fontos: a látogató vagy az üzemeltető?

  • honlapkészítés

Az elmúlt években gyakran volt alkalmam megrendelőknek honlapot készíteni. Ilyenkor gyakran felmerül a kérdés, hogy mire kell nagyobb hangsúlyt fektetni: a jövendőbeli oldal látogatóira vagy az üzemeltetőkre, azaz a megrendelőre. Mely felületek és funkciók kialakítására fordítsuk a nagyobb hangsúlyt?

Fejlesztők erre kapásból rávágják: a látogató a legfontosabb. Nos, szerintem tévednek.

A megrendelő a legfontosabb!

Hogy miért? Egyáltalán nem azért mert a megrendelő fizet, ennek a pénzhez semmi köze! Azért fontosabbak a megrendelő igényei, mert Ő az akinek célja van az oldallal! Kitűzött maga elé egy célt, és nekünk (programozóknak) el kell készíteni azt az eszközt, amellyel képes lesz elérni azt.

A látogatók csak oda tévednek.

Ők csak szórakozni, vásárolni vagy olvasgatni akarnak. A céljaik nagyon homályosak, ha egyáltalán van nekik. Persze a megrendelő valódi terveinek eléréséhez az is szükséges, hogy a látogatók is elégedettek legyenek, ezért aztán ők is fontosak. De nem szabad leértékelni azt a munkát, amit az üzemeltető kényelméért teszünk meg.

Mindezt csak azért írtam ide, mert még manapság is készülnek olyan honlapok, amelyek adminisztrációs felülete szinte használhatatlan. Érdemes elgondolkodni azon, hogy ki fogja a legtöbbet használni azt oldalt és hogy mit is jelent pontosan a felhasználó szó!

Három új Drupal a mai napon

Három új Drupal kiadás jelent ma meg, egyrészt biztonsági frissítések és hibajavítások az aktuális stabil verziókhoz, azaz 4.7-es és az 5-ös verzióhoz. Másrészt a legújabb "major release", a 6-os verziónak a RC2 változata.

A kiadások hivatalos bejelentései a Drupal.org-on:
4.7.11 és 5.6, illetve
6.0 RC2

És a felelős fejlesztő, Hojtsy Gábor is megírta a Drupal.hu-n:
4.7.11 és 5.6
6.0 RC2

Én személy szerint örömmel olvastam a hivatalos közleményben hogy a poll modulban található néhány régi bug-ot javított Gábor. Köszönjük!

Oldalak

Feliratkozás RSS - szakma csatornájára