Ako na responsive design

napísal , 10 Apr 2012

Responsive design je v poslednej dobe je tak omieľaný trend, že o ňom hovorí pomaly aj moja babka. V zásade ide o fajn koncept. Namiesto kódenia a udržiavania niekoľkých samostatných verzií stránky (normálnej desktopovej verzie a mobilnej verzie) sa spraví jedna s pár dodatočnými informáciami, vďaka ktorým sa stránka prispôsobí akémukoľvek (rozumnému) rozlíšeniu. Od mobilu až po FullHD display.

Otvorte si demo, pohrajte sa so šírkou prehliadača a hneď pochopíte.

Skôr, ako prejdem ku konkrétnemu kódu, by bolo vhodné povedať, prečo uprednostniť responsive design pred starším trendom mobilných verzií.

Nuž. V ideálnom prípade stačí responsive design vytvoriť pridaním pár riadkov CSSka, v horšom aj pár riadkami JavaScriptu (tj. robota na pár hodín). Mobilná verzia je proste iná verzia generovaná serverom. Čiže má samostatné HTML, CSS a zrejme aj JavaScripty. Ak chcete niečo pridať, musíte prepisovať obe verzie.

Ignorantské INSERTy

napísal , 29 Feb 2012

INSERT? Fuck that!
3 malé tipy, s ktorými si ušetríte pár riadkov kódu a budete takí ťažkí frajeri, že sa už nezbavíte ženských (chlapov, v prípade, že to číta nejaká programátorka (do they even exist?:)).

Predstavte si, že vaša životná púť dospeje do situácie, kedy chcete niečo zapísať do MySQL tabuľky, ale nechcete sa zapodievať kontrolami, či daný záznam už existuje. Čo s tým..

1) Chcem vložiť riadok do tabuľky. Ak už existuje, nič sa nebude zapisovať.

INSERT IGNORE INTO vajcia (id, nazov, kaliber)
VALUES(NULL, 'Vajčisko', 'masívny')

Úplne normálny INSERT s tým rozdielom, že keď ak by sa bili primárne kľúče alebo unikátne kľúče (čiže záznam už existuje), query sa odignoruje. Vloženie sa odignoruje alebo riadok sa uloží neočakávaným spôsobom aj ak bude obsahovať iné chyby, na čo si treba dávať pozor.

2) Chcem vložiť riadok do tabuľky. Ak už existuje, chcem update-núť jeho údaje

INSERT INTO checkins (id, id_user, id_venue, count, last_checkin)
VALUES (NULL, 230, 6434, 1, NOW())
ON DUPLICATE KEY UPDATE count = count + 1, last_checkin = NOW()

Príklad ukazuje niečo ako "check in" na 4square. Pri prvom raze sa vloží záznam, že som na nejakom mieste vôbec bol, pri ostatných razoch sa zvýši počítadlo návštev a čas posledného check-in-u sa aktualizuje. Je to v podstate INSERT a UPDATE spojený do jednej query.

3) To isté čo druhý prípad, s malým rozdielom
Ak by som vkladal nejaký dlhý text, musel by som ho v predchádzajúcom spôsobe zopakovať 2x (raz v INSERTE a raz v UPDATE časti). Pri extrémne dlhých textoch by nám to teoreticky mohlo vadiť. Situáciu zachráni REPLACE.

REPLACE INTO poznamka (id, id_projekt, datum, text)
VALUES (NULL, 42, '2012-12-12', 'Všetko som vybavil, môžme spustiť tú apokalypsu... [1MB dalsich kecov]')

Je tu však jedna zradafeature. Ak záznam existuje, vymaže sa a vloží sa nový, čiže sa zmení aj primárny kľúč (ak je AUTO_INCREMENTovací).

Bonus
Prvý prípad s INSERT IGNORE sa dá riešiť trocha lepším, ale divnejším spôsobom, použitím ON DUPLICATE KEY UPDATE, takto:

INSERT INTO vajcia (id, nazov, kaliber)
VALUES(NULL, 'Vajčisko', 'masívny')
ON DUPLICATE KEY UPDATE id = id

Výhoda je, že sa neignorujú žiadne chyby, iba duplicitné kľúče. Nevýhodou je trocha mätúca syntax.

Teraz si už len treba dávať pozor na tie ženské.

Závislosti na iOS

napísal , 1 Feb 2012


Hovoríte, že máte príliš veľa voľného času? Že RSSká pri sraní už nie sú to pravé? Že by sa zišla nejaká poriadna závislosť? Tak to ste na správnom mieste. Nechajte si poradiť od odborníkov na zabíjanie času.

Aby som nespomínal to, čo už všetci poznáme (Angry Birds), pozrieme sa na pár menej známych tipov.

Super Crate Box

Ešte dobre, že táto hra nevyšla v ére arkádových automatov lebo by zbavila svet všetkých drobných. Čo by bolo vlastne fajn, aj tak sú mince otravné. Anyway. Základom je otrepaná myšlienka zbierať krabice, z čoho si robí srandu už samotný názov. Čo robí tento koncept čerstvým, je náhodná zbraň v každej zobranej krabici. Vďaka tomu odpadá potreba sledovať množstvo nábojov a rozýšlanie nad tým ktorú zbraň použiť v danej situácii. Musíte sa brániť stále niečím iným proti zástupom nepriateľov, ktorí sa donekonečna spawnujú z hora.

Ako správna arkádová plošinovka, je aj SCB ťažké jak sviňa a ide hlavne o najvyšší počet bodov. Kráča však s modernými trendami a rôzne úlohy a počty nazbieraných krabíc odomykajú ďalšie levely, postavy a herné módy. Najzávisláckejší komponent je jednoznačne systém používania zbraní a solídne ovládanie. To poskytuje kopec priestoru na zdokonaľovanie sa. Dáte viac ako 101? ;)

Stiahnete z App store (1.60€) alebo dokonca zadarmo na PC a Mac

Advanced PHP Trickery

napísal , 22 Jan 2012

Viete čo sú v PHPčku anonymné funkcie, closures, ako fungujú statické premenné vo funkciách a načo je register_shutdown_function()? Ak nie, ste na správnom mieste, za 2 minúty to budete vedieť a budú z vás neporaziteľní mágovia PHP. Ak to už viete, môžte sa spokojne potľapkať po chrbte, znamená to, že ste asi s PHP strávili viac času, ako by bolo zdravé :)

Poďme si tieto 4 veci vysvetliť na krátkom príklade "zo života". Predstavte si, že máme triedu na odosielanie SMSiek. Ale predtým než začneme posielať SMSky, sa treba prostredníctvom triedy pripojiť k serveru a po doposielaní všetkých SMS sa treba odhlásiť.

My sa však nechceme zaoberať takými blbinami ako pripájanie a odpájanie. Cheme mať len globálnu funkciu send_sms(). Na to použijeme celkom elegantné riešenie, v ktorom budú obsiahnuté všetky spomínané advanced koncepty.

Statické premenné vo funkciách

function send_sms($number, $text)
{
	static $connection = false;

	if (!$connection)
	{
		require_once('extensions/SMS/connect.php');
		$connection = new SMSConnect();
		if (!$connection->create("login","heslo")) return false;

Statická premenná vo funkcii si zachováva hodnotu v rámci všetkých volaní danej funkcie. Pri prvom spustení bude obsahovať hodnotu false. Podmienka nižšie sa teda vykoná, do premennej $connection strčíme SMSkovú triedu a pripojíme sa k serveru. Pri ďalšom spustení funkcie bude v premennej SMSková trieda a celý tento blok "if" sa preskočí.

V OOP sa zvyknú používať statické premenné vo vnútri tried, každopádne je dobré vedieť, že sa dajú použiť aj vo vnútri funkcií. V manuále nájdete ďalšie príklady využitia.

		$callback = function() use($connection)
		{
			$connection->Logout();
		};

		register_shutdown_function($callback);

Na tomto čudnom kúsku sa nachádzajú zvyšné 3 koncepty. V skratke docielime, že keď dobehne PHP skript, zavolá sa odhlasovacia metóda SMSkovej triedy.

Čo nenapadlo mládencom z Apple

napísal , 2 Jan 2012

Viete aký je rozdiel medzi Sony-Ericssonom K750i z roku 2005 a iPhone-om 4(S) z roku 2011?

K750-tka sa dá použiť ako prehrávač hudby bez nutnosti vyťahovať ho z vrecka. Dá sa pridávať a uberať hlasitosť, preskakovať medzi pesničkami a zapauzovať alebo spustiť prehrávanie.. stačí len nahmatať a stlačiť správny gombík.
To je jeden z dôvodov prečo som si ten telefón tak obľúbil a zavrhol standalone MP3 prehrávače. Dal sa použiť ako plnohodnotný a dobre spravený prehrávač hudby a bol stále so mnou.

Dá sa tak použiť aj najlepší* telefón súčasnosti?
* teda aspoň podľa mňa :)

Na prehadzovanie skladieb alebo zastavenie prehrávania treba iPhone pekne vytiahnuť z vačku, 2x stlačiť home a potom ťuknúť na obrazovku. To nie je moc user-friendly.. hlavne nie v zime.. s rukavicami.. a hlavne keď si zoberieme, že iPhone má na boku tiež tlačítka ako spomínaný Sony-Ericsson. Ok, na iPhone sa dajú prehadzovať pesničky s dodávaným handsfree, ale ak chcete použiť normálne sluchátka, máte smolu.

Dosť bolo kecov, povedzme si radšej čo s tým.

SSD v notebooku

napísal , 27 Dec 2011

Asi ste už počuli skratku SSD. "Solid State Drive" je moderná verzia klasického pevného disku (HDD), ktorá má namiesto otáčajúcich sa diskov rýchlu flash pamäť. To prináša viacero výhod - väčšiu odolnosť, nulovú hlučnosť a hlavne mega rýchlosť.

Aby som uviedol do obrazu, klasický notebookový disk má prenosové rýchlosti ~60MB/s, kým SSD dosahuje cez 500MB/s. Hlavnou praktickou výhodou je ale rýchlosť náhodného čítania. Pri čítaní roztrúsených súborov (najčastejší prípad) sa klasický disk musí fyzicky posunúť na dané miesto, čo nejaký čas trvá a SSD môže čítať odkiaľkoľvek, hneď. Pozrite si porovnanie HDD a SSD, v tejto tabuľke. V prvom stĺpci je veľkosť dát, ktoré sa čítali z náhodných miest a v druhom počet takýchto blokov, ktoré disk prečíta za sekundu.

Obyčajný disk zvláda maximálne 50 náhodných čítaní za sekundu a SSD viac ako 10000. Holy balls! :) Maximálne rýchlosti SSDčka sú v mojom prípade "len" 256MB/s, lebo nemám rozhranie SATA3, iba SATA2 s polovičnou rýchlosťou.

V praxi to znamená, že Windows sa spustí za 15 sekúnd, Word za 1 sekundu, Photoshop za 6, Chrome za štvrť sekundy.. you get the idea. Rozdiel je cítiť skoro pri všetkom. Všetko sa deje takmer okamžite. (Okrem spúšťania veľkých bordelov ako je Photoshop alebo Windows;)

I want it NOW

Keďže sa píše rok 2011(2), pravdepodobne používate notebook a notebooky majú miesto len na jeden disk. Ak by ste chceli nahradiť pôvodný 500GB harddisk 500GB SSDčkom, vyšlo by vás to okolo 1000€. To je, samozrejme, hovadina. Za normálnu cenu (okolo 100€) dostanete len 60 gigabajtové SSD, čo je na reálne existovanie málo. Kam by ste sťahovali všetky tie seriály a porná? ;)

Farby do očí

napísal , 1 Dec 2011

Toto je ovládač. Ovláda farby vášho okolia. Čo je to za ovládač, že ovláda farby okolia? To je ovládač ovládajúci svetlo-emitujúce-diódy. Ak vám to nedošlo z obrázku, je s ním dosť veľká sranda. Za predpokladu, že vlastníte spomínaný svetlo emitujúci objekt.

Jedného dňa, počúvajúc hudbu som zistil, že moja izba, akokoľvek sa snaží, veľmi biedne reflektuje atmosféru znejúcej skladby. O niekoľko týždňov na to, som zistil, že existuje vec ako 5 metrový RGB LED pás a o niekoľko ďalších týždňov sa ocitol v mojej pozesii: