Bug v poli

napísal , 9 Oct 2010

...alebo skôr feature? Keď v PHP používate foreach s referenciou (&), treba si dávať veľký pozor. Môžu sa diať vcelku záhadné veci. Zoberme si takýto príklad:

$ciselka = array(1,2,3,4,5,6);

foreach ($ciselka as &$cislo) $cislo *= 10;

foreach ($ciselka as $cislo) echo "$cislo ";

V prvom foreach cykle všetky čísla v poli vynásobíme desiatimi a v druhom ich vypíšeme - triviálna vec, takže výsledok je úplne jasný:
10 20 30 40 50 60

Alebo aj nie? Ak to skúsite naozaj spustiť v PHP, uvidíte niečo trocha iné:
10 20 30 40 50 50 - WTF is goin' on?

Prečo sú posledné 2 prvky rovnaké? Cyklus foreach funguje tak, že do pomocnej premennej ($cislo) vždy kopíruje aktuálny prvok poľa a podľa toho, či pred ňu nedáme alebo dáme "&" sa buď do nej skopíruje hodnota aktuálneho prvku alebo odkaz/pointer na aktuálny prvok. V prvom cykle úkladáme do pomocnej premennej odkazy na prvky poľa, takže po skončení je v premennej $cislo odkaz na posledný prvok.

Ak by sme teraz premennej $cislo priradili hocijakú hodnotu, zmenila by sa aj hodnota posledného prvku poľa. A presne toto sa deje pri druhom cykle foreach - postupne, ako prechádzame poľom, sa priraďujú premennej $cislo hodnoty 10, 20, 30, 40, 50. Takže je logické, že keď prijdeme na posledný prvok, je v ňom hodnota predposledného prvku.

Ako tomu zabrániť? Nuž velice jednoducho. :p
Za prvý foreach stačí napísať unset($cislo). Premenná prestane existovať, odkaz sa zruší a v druhom cykle sa úplne nanovo vytvorí premenná $cislo, takže sa nič nebude prepisovať.

Je diskutabilné, či sa toto vôbec dá označiť ako bug... Na jednej strane prakticky nepredvídateľné, ale na druhej aj celkom logické. Asi preto je to v PHP nezmenené odvtedy ako existuje foreach s referenciou.

Ako NAOZAJ rozbehať zdieľanie súborov v XP

napísal , 4 Oct 2010

Zdieľanie je fajn. O to viac zamrdí, že v XP dosť často nejde. Svojho času som čítal strašné množstvo návodov a diskusií na fórach a NIČ nepomáhalo. Nakoniec som ale prišiel na ultimátne riešenie a konečne som sa oň™ rozhodol podeliť so svetom.

V prvom rade vypnite jednoduché zdieľanie (Control Panel » Folder Options » View » Use simple file sharing). Potom stačí dať zdieľať hocijaký adresár (pravý klik » Sharing and security), na druhom počítači napísať do explorera alebo Total Commandera \\[meno prvého počítača] a ... pravdepodobne sa nič nebude diať :) Ale sme na dobrej ceste!

Teraz prichádza ten zapeklitý problém, s ktorým mi nikto nevedel pomôcť. Nestačí povoliť guesta, nestačí si vytvoriť ani odstrániť heslo, nestačí reštartovať systémové služby.. nie, zrada je niekde inde.. Pripravte sa už to ide!

Najrýchlejší úvod do vytvárania web stránok

napísal , 3 Oct 2010

Tento návod som sa rozhodol napísať, keďže už dosť ľudí po mne chcelo, nech im vysvetlím ako sa dajú tvoriť vlastné web stránky, ako to všetko okolo nich funguje a kde sa to naučiť. Samozrejme, že si môžu nakúpiť knihy, ale tie bývajú spravidla tak rozťahané, že ich veľa ľudí ani nedočíta. Plus zaťažujú množstvom detailov, ktoré na začiatku iba mýlia a zdržujú.

Preto píšem tento návod čo najstručnejšie, aby slúžil ako alternatíva k prehnane ukecaným knihám a aby ste namiesto zbytočného čítania mohli radšej kódiť. :p

Najskôr zbežný prehľad o tom, čo všetko sa deje, keď si v prehliadači otvoríte nejakú stránku. To aby ste vedeli kde sa vlastne používajú všetky tie technológie ako je HTML, CSS, PHP, SQL, JavaScript, jQuery, AJAX a iné.

1) Zadáte URL adresu - to je celý ten text, čo vidíte hore v address bare prehliadača.

2) Na základe názvu stránky (t.j. domény) sa zistí IP adresa servera, na ktorom sa nachádza hľadaná stránka. (Na toto slúži DNS server, ktorého adresu poznáme)

Underrated vs. Overrated #1 - RDKF vs. SSBB

napísal , 26 Sep 2010

Recenzia Rag Doll Kung Fu vs. Super Smash Bros. Brawl

Nie je väčšej nespravodlivosti vo svete ako keď nejakí wannabe kritici a iné trúby nadávajú na vašu obľúbenú hru, film, knihu, album, čokoľvek.. a pritom vyzdvihujú nejakú podobnú hovadinu, ktorú ste hrali/videli/čítali/počúvali a viete o tom svoje :) Tak som si povedal, že skúsim uviesť pár takýchto prípadov na pravú mieru a ako správny not-so-angry video game nerd začnem porovnaním jednej notoricky známej a jednej neprávom zabudnutej multiplayerovej hry.

GROUP_CONCAT

napísal , 22 Sep 2010

Jedným z dosť užitočných MySQL príkazov, ktorý nie je až taký známy, ako by sa na užitočnosť takého kalibru patrilo :), je GROUP_CONCAT. Používa sa ako agregujúca funkcia (s GROUP BY), podobne ako napríklad funkcia AVG, akurát že nerobí priemer zo všetkých prvkov stĺpca, ale ich pospája za sebou do jedného stringu.

Ako to funguje a načo je to dobré?

Tubelectric

napísal , 17 Sep 2010

na to, aby si počul tento awesomeness, potrebuješ Flash :p

Asi netreba vysvetlovať čo je toto za hru. Nedávno som si ju pustil a zistil som, že pesnička, ktorá je v tomto leveli, seriózne nakladá! :)
S Yablkom sme sa zhodli, že keby existovala (v 80-90tych rokoch) elektronická obdoba metalu, asi by znela nejak takto, dokonca ešte aj so sólom ;)

stiahnuť celú .mp3 alebo dokonca .s3m!

Mimochodom v spomínanom leveli bola táto jedna pasáž, ktorú som zamladi nevedel ani za ducha svatého™ prejsť :)

FFFFFUUUUUU

AutoHotkey

napísal , 6 Sep 2010

CTRL

Ak ste takí leniví ako ja, určite vás irituje každý klik navyše a radi používate všemožné klávesové skratky, gestá s myšou a podobné srandy. Ak ešte nie ste dostatočne leniví, raz to aj na vás prijde :p

Problém je, že často neexistujú skratky na to, čo zrovna potrebujete, či už vinou programu alebo operačného systému. Na druhej strane je kopa nevyužitých kombinácií kláves alebo dokonca samostatných kláves, na ktoré dal výrobca nejakú nepoužiteľnú hovadinu. :p Tu prichádza na pomoc AutoHotkey, vďaka ktorému môžete efektívnejšie ovládať počítač a využívať klávesy, ktoré by inak akurát zapadali prachom.

Čo je teda AutoHotkey? V podstate skriptovací jazyk (pre Windows), pomocou ktorého môžete veľmi jednoducho namapovať na prakticky ľubovoľnú udalosť v počítači (slačenie klávesy, pohyb myši, otvorenie okna, určitý čas bez aktivity, ...) vami zvolenú udalosť (stlačenie klávesy, poslanie správy oknu, spustenie programu, otvorenie súboru, zápis do logu, nič :), ...). Možno sa to na prvý pohľad nezdá, ale takáto vec má neskutočne veľa využití.

V tomto článku sa dozviete ako v priebehu zlomku sekundy spúšťat programy, prehadzovať skladby vo Winampe, písať super-advanced smajlíkov, ako čeliť zlým vtipom a ďalšie užitočné veci ;)