Sproutcore vs Cygwin

Ieri m-am chinuit câteva ore să-mi dau seama de ce naiba primesc eroare de la Sproutcore la orice încercare de a rula serverul integrat (sort of). Era atât de încăpățânat încât nici măcar Hello World nu îmi mergea:

/static/sproutcore/runtime/en/current/javascript.js?1283061540
[2010-08-29 09:19:55] ERROR bad header '"GET /static/sproutcore/testing/en/current/javasc"'.
iamntz.selfip.com - - [29/Aug/2010:09:19:55 GTBDT] "GET /static/sproutcore/foundation/en/current/stylesheet.css?1282820155 HTTP/1.1" 400 333
- -> /static/sproutcore/foundation/en/current/stylesheet.css?1282820155
Aborted (core dumped)

Și am încercat cât am încercat, până am renunțat. Azi dimineață mi-a sugerat un amic să fac următoarele chestii în consola cygwin:

gem install rack --version 1.2
git clone git://github.com/eventmachine/eventmachine.git
cd eventmachine
rake gem
gem install pkg/eventmachine-0.12.11.gem
gem install thin rack

Dacă primești vreo eroare (cum am primit eu) încearcă să actualizezi toate jucăriile:

gem update
gem update --system
gem install rails
gem install Ruby

Dacă încă mai primești vreo eroare, ori ești extrem de ghinionist ori nu ai instalat make. Deschizi frumușel setup-ul de cygwin, alegi din listă make, îi dai next și mai încerci primul pas.

Mie mi-a mers.

Update

Mi-a mers pe moment. După 15 minute a refuzat categoric să funcționeze. Prin urmare, am renunțat la ideea de a folosi Sproutcore în Windows. Îl pun într-o mașină virtuală și gata, am rezolvat toate problemele :D

Update 2

Într-o ultimă încercare, am reușit să-l „pun” cum trebuie. Greșeala cea mai mare a fost că eu încercam să-l instalez în cygwin, când, de fapt, trebuia să îl instalez în cmd. Prin urmare, am dezinstalat rake (aveam 1.2.x și era nevoie de 1.1.x) și am instalat versiunea care trebuie. Am citit cu și mai mare atenție pașii de instalare și… tadaaa!

Note to myself: citește TOȚI pașii cu ATENȚIE!

  • Object oriented PHP5. O listă de proiecte ce folosesc OO PHP5.
  • $.map(), $.each(), live, oh my!
  • Ce verificări trebuie să faci când lansezi o temă de WordPress? Astea, desigur!
  • Harta Europei în … CSS & jQuery
  • Optimizarea site-urilor pentru device-uri mobile.
  • Îți aduci aminte de anul 2000 și panica de atunci cu mărețul bug y2k? Ei bine… Următorul pas este y2k38 :D Toate limbajele pe 32bit ce folosesc unix time sunt afectate de această problemă. Enjoy!
  • Cum scapi de procrastinare definitiv? Cred că pe ăsta îl voi citi mai târziu… :D
  • Una din chestiile ce mă enervează maxim la JS este că nu există o modalitate built in de a genera un număr random între X și Y. Soluția? Asta pare ok.
  • S-a lansat Firebug 1.6. Beta, dar să sperăm că aduce și o îmbunătățire de viteză și că repară buguri enervante de genul „nu mai merge consola”.
  • Pimp my wp-config.php.
  • Quality Control – un plugin ce transformă WordPress într-un sistem de bug tracking. Asta în situația în care te-ai săturat de Trac, Bugzilla sau alte asemenea.
  • Știai că poți scrie cod PHP fără a scrie… cod? Nici eu, dar treaba asta pare interesantă. Da, ai nevoie de un iPad :D
  • Îți place să o arzi pe wireframe-uri ? Uite aici o listă destul de generoasă.
  • Vrei propriul Twitter? Uite aici câteva soluții!
  • Hidden features of MySQL – nu am știut cum s-ar putea traduce într-un mod cât mai necaraghios, deci a rămas în engleză :D

Cum mâine nu voi fi acasă, săptămâna se cam termină azi pentru mine. Prin urmare… enjoy!

Usability rant

Sunt curios de următoarele chestii:

  1. Ce face bifa din dreptul săgeții portocalii?
  2. Ce reprezintă săgetuțele din dreptul săgeților roșii?

Așa așa, că tot Apple este cel mai user friendly…

Baseproject

De-a lungul timpului m-a enervat la maxim necesitatea de a creea foldere și fișiere pentru fiecare proiect nou:

  • Fă un folder css, unul js și unul images;
  • Fă un fișier *.css, unul *.js și *.html (sau *.php) și să mută-l pe fiecare în folderul propriu;
  • Ia ultima versiune de jQuery și copiaz-o în folderul js.
  • Inițializează un repo git și dă-i commit-ul inițial.

Ei bine… Până aici! Chiar dacă nu îmi lua prea mult timp, la un moment dat am făcut o arhivă cu fișierele/folderele de bază și, de fiecare dată când începeam un proiect nou, dădeam un extract strategic la arhivă. Timpul a trecut, CSS Reset-ul s-a îmbunătățit, au apărut alte versiuni de jQuery etc. Prin urmare… back to square one.

Când am început să folosesc git-ul, am început să folosesc și bash prompt mai mult. Prin urmare, skill-urile mele de noob absolut în bash mi-au permis să fac un script care face fix ce aveam nevoie. Așa a luat naștere Baseproject. Și cum e cool să ai cel puțin un proiect pe github, l-am pus și acolo, să-l vadă tot poporul. Read the rest of this entry »

Dev

Read the rest of this entry »

Cred că orice om are un punct în care începe să uite chestii învățate cu mult timp în urmă dar nefolosite. Bănuiesc că așa funcționează creierul, nu știu exact. Dar cum programatorii sunt oameni (am spulberat și mitul ăsta!), se întâmplă ca unele coduri ori să fie uitate ori să fie trecute cu vederea. Și m-am gândit să fac o listă cu coduri folosite mai rar decât ar trebui.

De ce ai folosi aceste tag-uri „exotice”? Cel mai bun motiv este păstrarea unui cod cu o structură semantică. Un alt motiv ar fi evitarea adăugării de clase peste clase diverselor elemente din pagină.

Tabele

Tag-ul table

Chiar dacă tot hype-ul în jurul codului fără tabele de acum cinci ani s-a stins, încă mai sunt clienți care cer – și evident, programatori care fac – cod fără tabele. Nimic greșit, nu? Doar atunci când ai date… tabulare. Probabil tag-ul table sună ca o fosilă și ar trebui lăsat să moară. Nimic mai fals! Este viu, este util și te scutește de bătăi de cap. A început să fie folosit pentru design pe la mijlocul anilor ’90 din motive foarte întemeiate: războiul browserelor era în floare, fiecare browser avea un mod unic de a interpreta CSS iar tabelele erau singura soluție pentru programatorii ce vroiau un site cross-browser.

Cu toate astea, întrebarea rămâne: Cum recunoști datele tabulare? Când pot folosi tabele fără frică? Dacă poți aranja informația respectivă într-un fișier excel foarte ușor, atunci ai nevoie de un tabel! Read the rest of this entry »

Cred că una din greșelile cele mai mari făcute de utilzatorii WordPress este setarea charset-ului bazei de date la armscii8_bin (sau care o fi default la momentul nașterii blogului). Asta nu înseamnă mare lucru pentru majoritatea utilizatorilor, dar unor comentatori le place să se simtă mai români decât restul. Prin urmare, încearcă să scrie cu diacritice. Cum baza de date este setată aiurea, diacriticele reprezintă un semn de întrebare. La propriu. Pentru că în loc de fiecare literă necunoscută se afișează ?.

Soluția

De fapt ai două soluții.

Prima este bună pentru nopțile în care nu ai somn, prietenii nu te mai vor iar nevasta te refuză. Deschizi PhpMyAdmin și începi să editezi fiecare câmp în parte.

A doua este să creezi un fișier – să zicem db-convert.php – în root (chiar lângă wp-config) în care pui următoarele:

<?php
require_once('wp-config.php');

mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
mysql_select_db(DB_NAME);

$utf = "utf8_unicode_ci"; //

echo "<ul>";
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res)){
  foreach ($row as $key => $table){
      mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE ".$utf);
      echo "<li>".$table." : <strong>ok</strong></li>";
  }
}
echo "</ul>";

Tot ce trebuie să faci după aceea este să accesezi blogul-tau/db-convert.php.

Felicitări! Ai cu 5% mai mulți comentatori fericiți :D

Math.floor() quick tip

Știai că în loc de

Math.floor(2.5);

sau

parseInt(2.5, 10);

poti folosi:

~~(1*2.5);

Sau chiar:

0|2.5

Nu? Nici eu, dar am aflat azi! :D
Detalii aici.

Sursa.

  • input type=”file” redefinit. O metodă un pic îmbunătățită față de ce foloseam eu de obicei. Încă n-am apucat să-l folosesc, dar pare ok.
  • Tutorial pentru Twitter oAuth API;
  • jQuery vs jQuery sau cum diferă unele funcții din jQuery între ele, chiar dacă la prima vedere fac același lucru;
  • alert() vs console(). Cam ce ziceam și eu acu vreo două-trei săptămâni;
  • Internet Explorer 9 este disponibil. Un preview, al patrulea, dar care promite multe. Cel mai mult îmi place că va suporta multe treburi din CSS3;
  • Lucruri pe care nu le știai despre comentariile condiționale. Cel puțin sunt unele pe care eu nu le știam!
  • jQuery hotkeys. Long story short, poți atașa evenimente (sună aiurea în română, știu!) tastelor sau combinațiilor de taste într-un mod foarte simplu:
    $(expression).bind(types, keys, handler);
    $(expression).unbind(types, handler);
    
    $(document).bind('keydown', 'ctrl+a', fn);
    
    // e.g. replace '$' sign with 'EUR'
    $('input.foo').bind('keyup', '$', function(){
      this.value = this.value.replace('$', 'EUR');
    });
    

Partea a doua conține numai link-uri despre WordPress dintr-un motiv foarte simplu: cu asta m-am „luptat” în ultimele zile :D