Citatul zilei (2014-11-07)

În caz că nu știați, am o problemă când vine vorba de MVP și de multe ori mă chinui să fac lucrurile cum trebuie deși nu este necesar. Astăzi am dat peste citatul ăsta:

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?

Brian W. Kernighan – „The Elements of Programming Style„, 2nd edition, chapter 2

Una din problemele proiectelor OpenSource

Nimeni nu vrea să repare bug-uri vechi (probabil greu de despistat), toți se chinuie să introducă feature-uri noi. Îmi place ideea aplicată de Microsoft, explicată în articolul de aici:

Microsoft universally adopted something called a „zero defects methodology”. Many of the programmers in the company giggled, since it sounded like management thought they could reduce the bug count by executive fiat. Actually, „zero defects” meant that at any given time, the highest priority is to eliminate bugs before writing any new code.

Argumentele le găsiți în articol. Și mai jos aveți câteva exemple de bug-uri uitate de ani de zile și de care m-am lovit eu:

  • Banshee Media Player, memory leak, la fiecare schimbare de piesă „pierzi” 1.5-2Mb de RAM. Bug raportat in 2008, în 2012 (când am instalat ultima oară Ubuntu) era încă playerul default.
  • GPartEditor strică partițiile NTFS la resize/move. Bug descoperit în 2009. Anul trecut am pierdut o zi jumate recuperând datele din cauza lui.
  • Chromium strică extensiile la fișierele downloadate. Raportat în 2008, încă mai există problema pe Mac.

Fac pariu că lista poate fi continuată foarte ușor.

Dezactivare inspector nativ în Firefox

Firefox InspectorCa utilizator de Firebug, mi se întâmplă foarte des să dau click pe „Inspect element” în loc de „Inspect element in Firebug”. Chiar nu văd rostul acelei opțiuni. Nu văd ce aduce în plus față de Firebug, și care e rolul ei. Chestia cu vizualizualizarea 3d este bună pentru show-off, însă n-ar nici un rol practic. Așa că m-am hotărât să dezactivez acea opțiune. Spre surprinderea mea a fost mai simplu decât credeam:

  • Open Firefox and go to about:config
  • Search for „inspector”
  • Disable (set to FALSE):
    • devtools.inspector.enable
    • devtools.styleinspector.enable

Sper să fie de folos 🙂

Cu să configurezi Drupal-ul să nu mai trimită mail-uri

Folosești modul devel și adaugi următoarea linie în fișierul settings.php:

Drupal 7:

$conf['mail_system'] = array('default-system' => 'DevelMailLog');

Drupal 6:

$conf['smtp_library'] = 'sites/all/modules/devel/devel.module';

Foarte util pentru development și testing. Toate mailurile „trimise” de Drupal se salvează ca fișiere text în folderul temp (poate fi setat din interfața de admin). L-am testat pe linux doar, dar cred că merge și pe Windows.

Poker Game

Texas-Holdem

După cum știti dintr-un post mai vechi, m-am decis să-mi dezvolt puțin abilitățile de game developer și să încerc să implementez câteva jocuri micuțe ca exercițiu de programare și să mă având puțin în afara tehnicilor arhicunoscute din programarea de zi cu zi din cadrul job-ului.

După ce mi-au trebuit câteva zile să învâț lucruri noi despre JavaScript și să implementez o versiune de Tetris, am început să mă gândesc la un joc care să necesite AI. Deși planul era să implementez Snake sau Escape, m-am apucat să studiez mai mult algoritmii despre Poker.

Am plecat cu ideea greșită că nu o să fie foarte complex, dar ca de obicei m-am înșelat. După ce am citit câteva articole mi-am dat seama că sunt multe probleme care trebuiesc rezolvate de AI-ul pentru poker, asta pe lângă aplicația de joc în sine (structuri pentru memorarea datelor, implementarea mesei de joc cu toate interacțiunile necesare, etc…)

Lista cu situațiile importante care trebuiesc rezolvate de un AI de poker am găsit-o deja într-un articol, și m-am gândit că ar fi interesant să fac o trecere în revistă (pentru cei care credeau că e simplu – la fel ca mine). Regulile se referă la Texas Hold’em, însă cu mici modificări cred că se poate aplica și la alte tipuri de poker.

Continuă lectura „Poker Game”

Drupal 7 responsive design

Dacă tot este un trend în ultima vreme, m-am gândit că ar fi util să posteze două teme de Drupal care oferă suport pentru ‘responsive design’:

1. Omega

  • Oferă două teme de bază. Una xhtml și una HTML5
  • suportă grid960 cu 12, 16 sau 24 de coloane
  • zone configurabile din admin panel
  • integrare cu Delta pentru a crea layout-uri diferite pentru anumite zone ale site-ului

2. Artica

  • Este mai performantă decât Omega (care se laudă și ea ca fiind performantă).
  • Vine cu Tundra care include câte lucruri extra: typography, jQuery slideshow, DropDown menus, Full screen wallpaper. Poți să folosești oricare din teme ca sub-temă când începi (depinde dacă vrei să ai sau nu feature-urile de Tundra incluse sau nu)
  • Suport pentru CSS3.
  • CSS reset

3. AdaptiveTheme

  • Suport pentru desktop, telefoane și tablete
  • HTML5, RDFa, ARIA Roles & super clean markup
  • Se lucrează intens la o temă bazată pe AdaptiveTheme pentru Commerce (la ora actuală RC2)

De citit:

Cum să instalezi PECL uploadprogress pentru Drupal în Ubuntu

Tot timpul am crezut că e ceva mai complicat, însă e foarte simplu:

sudo apt-get install php5-dev php-pear
sudo pecl install uploadprogress

După aceea trebuie doar să mai adăugați linia următoare în fișierul php.ini

extension=uploadprogress.so

Puteți face asta cu:

sudo nano /etc/php5/apache2/php.ini

Nu știu dacă este necesar, însă pentru a restarta apache-ul folosiți:

sudo service apache2 restart

Verificat și testat pe Ubuntu 11.10. Sursa.

 

PS: După modificare, upload progress bar funcționează și în phpMyAdmin. Foarte cool când imporți backup-uri mari

Drupal 7: Layout-uri diferite în funcție de context (Omega Themes, Delta & Context Modules)

Am găsit un video destul de interesant care explică cum poți implementa layouturi diferite în Drupal 7. Pe scurt ai nevoie de următoarele:

  • Omega: Responsive HTML5 Base Theme
  • Delta: Delta allows you, via the Context module to make duplicates of your theme settings for any context on your site.
  • Context: Context allows you to manage contextual conditions and reactions for different portions of your site.

via

Game developement – primul meu joc (Tetris)

Brick Game 9999 in 1

De când am început să învăț programare (Pascal) m-am tot gândit cum a fi să-mi scriu primul meu joc. Am avut mai multe idei, însă niciodată nu am făcut nimic concret. Am încercat să citesc mai mult pe această temă, însă nimic.

La ultima întâlnire de Code Retreat („The Timișoara Agile Software Meetup Group„) la care am participat (singura de altfel), s-au propus spre rezolvare 2 probleme: Conway’s Game of Life și Tetris. Împreună cu Horia am reușit să implementăm Game of Life folosing Javascript aplicând pair programming și TDD. Nu am reușit să găsim o metodă simplă de a implementa tetris și am renunțat.

Săptămâna trecut am zis că nu ar strica să ies din routina de webdeveloper (unde mai tot timpul am impresia că fac aceleași lucruri prea puțin modificate de fiecare dată), am început să lucrez la o versiune proprie de Tetris în Javascript. Am lucrat vreo 3 zile, câte 2-3 ore pe zi până să reușesc să-l fac jucabil.

Tetris game preview

Concluziile după acest mic experiment:

1. Să faci un joc oricât de simplu e ceva mai greu decât ai fi tentat să crezi prima oară. Ca webdeveloper nu lucrez decât cu interfețe grafice simple, elemente și acțiuni bine definite. În joc însă lucrurile sunt altfel, trebuie să te gândești mai mult la cum să simulezi realitatea (gravitație, colisiunea cu pereți)

2. Javascript e un limbaj puțin mai ciudat din punctul meu de vedere. Am învățat cu ocazia asta mai multe despre OOP în Javascript și câteva lucruri noi despre jQuery

3. Mi-ar fi prins bine o funcție wait() în javascript pentru loop-ul principal.

O să continui să experimentez game developmentul. Următorul joc cred că o să fie Snake (ca pe telefoanele Nokia), apoi o să continui cu Escape.

Dacă totul merge bine, o să încerc după toate astea să fac și Pac-Man, cel mai simplu joc în care trebuie să implementezi AI. Apropo, știați că în Pac-Man există patru tipuri diferite de comportament al adversarilor?