<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">

<channel>
	<title>/home/Śpiechu-&gt;Blog</title>
	
	<link>http://spiechu.pl</link>
	<description>o wszystkim co się nawinie… a najczęściej o PHP, Linuksie i szerzącej się głupocie</description>
	<lastBuildDate>Thu, 25 Feb 2010 20:05:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/spiechu" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="spiechu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/2.5/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><item>
		<title>Weź mi zrób procesor tekstu cz. 2 / 2</title>
		<link>http://spiechu.pl/2010/02/25/wez-mi-zrob-procesor-tekstu-cz-2-2/</link>
		<comments>http://spiechu.pl/2010/02/25/wez-mi-zrob-procesor-tekstu-cz-2-2/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 20:03:52 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://spiechu.pl/?p=490</guid>
		<description><![CDATA[Zgodnie z zapowiedzią, dzisiaj będziemy implementować moduły, które coś z podanym tekstem robią. Do tego celu głównie używać będziemy wyrażeń regularnych.
1. Na pierwszy ogień pójdzie poprawiacz spacji. Jak często trafiają się wam dokumenty formatowane za pomocą 20 spacji? Za pomocą tego cuda wywalimy wszystko co ma powyżej dwóch za koleją.
class SpaceFixer implements TextJob {
  [...]]]></description>
			<content:encoded><![CDATA[<p>Zgodnie z zapowiedzią, dzisiaj będziemy implementować moduły, które coś z podanym tekstem robią. Do tego celu głównie używać będziemy wyrażeń regularnych.</p>
<p><strong>1.</strong> Na pierwszy ogień pójdzie poprawiacz spacji. Jak często trafiają się wam dokumenty formatowane za pomocą 20 spacji? Za pomocą tego cuda wywalimy wszystko co ma powyżej dwóch za koleją.</p>
<pre class="php" name="code">class SpaceFixer implements TextJob {
   public function process($string) {
      $string = trim($string);
      $string = preg_replace('/\s{2,}/' , ' ' , $string);
      return $string;
   }
}</pre>
<p>Zasada działania prosta: najpierw wyrzuć wszelkie spacje przed i za stringiem, a następnie poszukaj dwie lub więcej spacji za koleją i zamień je na pojedyncze.</p>
<p><strong>2.</strong> Teraz coś sporo trudniejszego: dodawacz twardych spacji do spójników. Zasada działania taka: znajdź mi spację, pojedynczy znak, znowu spację i jeden lub więcej znaków (np. jedzenie<strong>_i_p</strong>icie).</p>
<pre class="php" name="code">class AddNbsps implements TextJob {
   public function process($string) {
      $output = ''; // inicjalizujemy pustą zmienną, zostało mi to po Javie
      foreach ($this-&gt;splitStringsByTagChar($string) as $split) {
         $output .= substr($split , 0 , 1) == '&lt;' ? $split : $this-&gt;fixLine($split);
      }
      return $output;
   }
   private function splitStringsByTagChar($string) {
      return preg_split('/(&lt;.+?&gt;)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
   }
   private function fixLine($line) {
      return preg_replace('/(\s{1}[-\("\w]{1})\s{1}([-\)"\w]+)/' , '$1&amp;nbsp;$2' , $line);
   }
}</pre>
<p>Jak widać trochę się pokomplikowało. Po co nam te dodatkowe funkcje? Ano po to żeby nie popsuły się nasze HTMLowe tagi. Funkcja <code>splitStringsByTagChar</code> niezachłannie szuka czegoś co przypomina sekwencję <strong>&lt;coś&gt;</strong> i szatkuje nam ciąg do tablicy.</p>
<p>Operator trójargumentowy po foreach sprawdza czy element tablicy zaczyna się od znaku <strong>&lt;</strong> . Jeżeli tak, to zostawia go w spokoju, a jak nie, to kieruje do przeróbki do <code>fixLine</code>. Można zauważyć, że oprócz klasy znaków <em>\w</em> (alfanumeryczne i _) dodałem również ” ( ). Po przeanalizowaniu kilku tekstów stwierdziłem, że tak lepiej działa (a mogłoby pewnie lepiej gdybym poświęcił na to jeszcze trochę czasu).</p>
<p><strong>3.</strong> Wyszukiwacz linków.</p>
<pre class="php" name="code">class AddLinks implements TextJob {
   public function process($string) {
      return preg_replace('`(?&lt;!href="|src=")((https?://|www\.)[\w{1,}./?=#&amp;]+)`i' , '&lt;a href="$1"&gt;$1&lt;/a&gt;' , $string);
   }
}</pre>
<p>Tutaj można zauważyć dziwną konstrukcję <strong>(?&lt;!</strong> Jest to asercja wsteczna. Działa tak: znajdź mi ciąg znaków zaczynający się od <strong>http://</strong> lub <strong>www.</strong>, a jak znajdziesz, to sprawdź czy czasami przed znalezionym ciągiem nie ma konstrukcji z asercji. Po co to? Do wykrycia, czy link znajduje się już w tagu <strong>&lt;a href=”</strong> lub <strong>&lt;img src=”</strong>, a więc czy nie popsujemy kodu html. Do tego mógłbym równie dobrze użyć funkcji szatkującej z poprzedniego modułu, ale chciałem żeby było trudniej <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Jak tego wszystkiego używać? Dosyć prosto: w atrybutach podajemy moduły, które nas interesują i podajemy tekst:</p>
<pre class="php" name="code">$jakisTekst = 'Ala ma kota, a kot ma HIV';
$txtProcesser = TextProcesser::getInstance(array('SpaceFixer','AddNbsps','AddLinks'));
$processedTxt = $txtProcesser-&gt;processJobs($jakisTekst);</pre>
<p>Tekst będzie przetwarzany w podanej kolejności. Fajne, co?<br />
[czeka na oklaski]</p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2010/02/25/wez-mi-zrob-procesor-tekstu-cz-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weź mi zrób procesor tekstu cz. 1 / 2</title>
		<link>http://spiechu.pl/2010/02/20/wez-mi-zrob-procesor-tekstu-cz-1-2/</link>
		<comments>http://spiechu.pl/2010/02/20/wez-mi-zrob-procesor-tekstu-cz-1-2/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 16:06:29 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=482</guid>
		<description><![CDATA[Dzisiaj będzie wpis o ułatwianiu życia użytkownikom paneli administracyjnych. Chodzi tutaj o sytuację, gdy użytkownik naszej strony wkleja byle jak jakiś tekst z Worda do TinyMCE, a następnie dziwi się, że na stronie wychodzi kaszana.
Parę rzeczy da się poprawić z automatu poprzez przetworzenie przez procesor tekstu. Skąd taki wziąć? A napiszemy sobie sami.
W tym wpisie [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj będzie wpis o ułatwianiu życia użytkownikom paneli administracyjnych. Chodzi tutaj o sytuację, gdy użytkownik naszej strony wkleja byle jak jakiś tekst z Worda do TinyMCE, a następnie dziwi się, że na stronie wychodzi kaszana.</p>
<p>Parę rzeczy da się poprawić z automatu poprzez przetworzenie przez procesor tekstu. Skąd taki wziąć? A napiszemy sobie sami.</p>
<p>W tym wpisie stworzymy “rusztowanie”, a w następnej części parę modułów robiących jakieś konkretne rzeczy.</p>
<p>Pierwsze czego potrzebujemy to interfejs pojedynczego modułu przetwarzającego tekst. Będzie banalnie prosty: metoda <code>process</code> pobiera stringa i zwraca przetworzonego stringa.</p>
<pre name="code" class="php">interface TextJob {
   public function process($string);
}</pre>
<p>Dalej piszemy klasę procesora tekstu.</p>
<pre name="code" class="php">class TextProcesser {
   private $jobsToDo = array();
   private function __construct() {}
   public static function getInstance($params = array()) {
      $textProcesser = new TextProcesser();
      foreach ($params as $param) {
         try {
            if (!class_exists($param)) throw new Exception('Klasa ' . $param . ' nie istnieje!');
            $param = new $param;
            if (!($param instanceof TextJob)) throw new Exception('Klasa ' . $param . ' nie obsluguje interfejsu TextJob!');
         } catch (Exception $e) {
            echo $e-&gt;getMessage();
            die();
         }
         $textProcesser-&gt;addJob($param);
      }
      return $textProcesser;
   }

   private function addJob(TextJob $tj) {
      $this-&gt;jobsToDo[] = $tj;
   }

   public function processJobs($string) {
      foreach ($this-&gt;jobsToDo as $job) {
         $string = $job-&gt;process($string);
      }
      return $string;
   }
}</pre>
<p>Po kolei:</p>
<ol>
<li>Zmienna <code>$jobsToDo</code> trzyma tablicę prac do wykonania.</li>
<li>Klasy nie będziemy tworzyć poprzez konstruktor, dlatego został zmieniony na prywatny.</li>
<li>Statyczna metoda <code>getInstance</code> tworzy obiekt procesora i przy okazji sprawdza czy podana tablica <code>$params</code> zawiera istniejące klasy i czy implementują one interfejs <code>TextJob</code>.</li>
<li>Metoda <code>addJob</code> dodaje kolejną pracę do wykonania do kolejki.</li>
<li><code>processJobs</code> wykonuje właściwą robotę — pobiera stringa do przetworzenia i w kolejności dodania prac przetwarza go.</li>
</ol>
<p>Co mamy do tej pory? Klasę, do której możemy dodawać tyle konkretnych zadań ile chcemy, o ile tylko implementują interfejs <code>TextJob</code>. W następnej części będziemy wyrzucać zbędne spacje, dodawać twarde spacje i szukać linków.</p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2010/02/20/wez-mi-zrob-procesor-tekstu-cz-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Całodzienna walka z wirusem Bagle</title>
		<link>http://spiechu.pl/2010/02/14/calodzienna-walka-z-wirusem-bagle/</link>
		<comments>http://spiechu.pl/2010/02/14/calodzienna-walka-z-wirusem-bagle/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 20:06:41 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://spiechu.pl/?p=453</guid>
		<description><![CDATA[Wczoraj miałem okazję majstrować przy laptopie z ciekawymi objawami: po uruchomieniu jakiegoś exe Windows XP sam się zrestartował, po czym przestał działać Avast.
Próby odpalenia przez tryb awaryjny powodowały błysk niebieskiego ekranu z błędem i natychmiastowy restart. Przywrócić system również się nie dało.
To, że nie działał Avast to jeszcze nic. Nawet nie dało się uruchomić programów [...]]]></description>
			<content:encoded><![CDATA[<p>Wczoraj miałem okazję majstrować przy laptopie z ciekawymi objawami: po uruchomieniu jakiegoś exe Windows XP sam się zrestartował, po czym przestał działać Avast.</p>
<p>Próby odpalenia przez tryb awaryjny powodowały błysk niebieskiego ekranu z błędem i natychmiastowy restart. Przywrócić system również się nie dało.</p>
<p>To, że nie działał Avast to jeszcze nic. Nawet nie dało się uruchomić programów do zbierania logów typu ComboFix czy Gmer.</p>
<p>Postanowiłem, że spróbuję szkodnika podejść z zewnątrz poprzez wypalenie na CD-RW jakiegoś antywirusa typu Live CD. Wybór padł na <a href="http://www.gdata.pl/portal/PL/content/view/116/145/">G Data AntiVirus</a>. Dzięki niemu dowiedziałem się, że mam do czynienia z niebezpiecznym stworem: wirusem Bagle (dokładny typ Win32.Bagle.SUQ@mm). G Data wprawdzie usunął 64 miejsca, w których wirus zdążył się zreplikować, problem jednak istniał nadal.</p>
<p><a href="http://www.searchengines.pl/Usuwanie-rootkita-Bagle-wariant-srosasys-t106680.html">Idąc tą instrukcją</a> utknąłem niestety przy próbie przywrócenia trybu awaryjnego. SafeBootKeyRepair nie umiał sobie poradzić. Szukając czegoś innego <a href="http://www.bezpieczenstwosystemow.pl/index.php?topic=4518.0">natknąłem się na Findy Kill</a> — program dedykowany do usuwania Bagla. Program poradził sobie z infekcją błyskawicznie (wykrył jeszcze ponad 50 miejsc zadomowienia wirusa) i nawet przywrócił tryb awaryjny.</p>
<p>Rady na przyszłość?</p>
<ul>
<li>nie ściągaj podejrzanych programików z netu — to chyba oczywiste, ale widać ciągle nie dociera</li>
<li>odłącz kabel z netu w zainfekowanym kompie jeżeli możesz — zapewne puszcza sporo spamu lub co gorsza robi jako zombie</li>
<li>najlepiej nie używaj Windowsa — tu oczywiście żartuję <img src='http://spiechu.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2010/02/14/calodzienna-walka-z-wirusem-bagle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Śpiechu po delegacji w Warszawie</title>
		<link>http://spiechu.pl/2010/02/09/spiechu-po-delegacji-w-warszawie/</link>
		<comments>http://spiechu.pl/2010/02/09/spiechu-po-delegacji-w-warszawie/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 20:25:20 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Dyrdymały]]></category>

		<guid isPermaLink="false">http://spiechu.pl/?p=445</guid>
		<description><![CDATA[Dzisiaj wpis typu “flaki z olejem”. Żądnych kolejnej dawki wiedzy programistycznej muszę odesłać niestety z kwitkiem.
Od 2 do 7 lutego byłem sobie w Warszawie. Wysłano mnie na szkolenia trenerskie w ramach Programu Rozwoju Bibliotek. Biblioteki wojewódzkie (a więc i Biblioteka Śląska) zobowiązały się do przeszkolenia bibliotekarzy z bibliotek regionu, które otrzymają sprzęt komputerowy (prezentacja tutaj). [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj wpis typu “flaki z olejem”. Żądnych kolejnej dawki wiedzy programistycznej muszę odesłać niestety z kwitkiem.</p>
<p>Od 2 do 7 lutego byłem sobie w Warszawie. Wysłano mnie na szkolenia trenerskie w ramach <a href="http://www.biblioteki.org/pl">Programu Rozwoju Bibliotek</a>. Biblioteki wojewódzkie (a więc i Biblioteka Śląska) zobowiązały się do przeszkolenia bibliotekarzy z bibliotek regionu, które otrzymają sprzęt komputerowy (<a href="http://www.biblioteki.org/repository/PLIKI/UCZESTNICY/prezentacja%20sprzetowa_final.pdf">prezentacja tutaj</a>). Będę miał przyjemność brać udział w szkoleniach tych osób.</p>
<p>Jeżeli ktoś nie za bardzo wie o co chodzi to wyjaśniam kąśliwie w skrócie: Fundacja Melindy i Billa Gatesa dysponująca ułamkiem sumy “skoszonej” od uzależnionej od Microsoftu polskiej administracji publicznej, “dobroczynnie” zdecydowała się podarować najbiedniejszym bibliotekom w Polsce sprzęt, oprogramowanie (Win 7 + Office 2007) i darmowy internet przez kilka lat. Dodatkowo, dla niepoznaki, szkolenia bibliotekarzy przeprowadzą trenerzy przeszkoleni w używaniu produktów Microsoftu (m.in. ja <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Warto by zastanowić się ile sprzętu dałoby się kupić za pieniądze wywalane na licencje za MS Windows i Office. W końcu utrwaliło się wszystkim, że sprzęt + oprogramowanie = PC + Windows. Mam rację?</p>
<p>Teraz przejdę do wrażeń z pobytu w Warszawie:</p>
<ol>
<li><strong>Dworzec Centralny</strong> — sporo większy niż w Katowicach. W lepszym stanie technicznym (działające ruchome schody!), ale za to bardziej śmierdzący. No cóż, nie można mieć wszystkiego…</li>
<li><strong>Chodniki</strong> zdecydowanie słabiej odśnieżone niż w Katowicach. Czyżby Warszawiacy poruszali się wyłącznie samochodami?</li>
<li>Liczba <strong>psich kup</strong> na metr chodnika w centrum może śmiało konkurować z liczbą w Katowicach (zwanych czasem “Kupowicami”).</li>
<li><strong>Muzeum Wojska Polskiego</strong> — old fashion muzeum. W każdym pomieszczeniu siedzący na stołeczkach cerberzy patrzący na każdy ruch zwiedzających. Najlepiej byłoby zamknąć muzeum, wtedy muzealnicy spokojnie mogliby czekać na koniec dniówki nieniepokojeni.</li>
<li><strong>Muzeum Powstania Warszawskiego</strong> — całkowite przeciwieństwo poprzedniego. Wszystkiego możesz dotknąć, posłuchać i zobaczyć parę filmów. Pomysł przyjścia tam w dzień wolny (niedziela) był całkowicie chybiony. Czułem się jak w supermarkecie: masa ludzi z dziećmi zbierającymi karteczki z datami.</li>
</ol>
<p>Na koniec mam dla Was specjalny bonus z muzeum: MS Fail, czyli kolejny powód, dla którego Windows to system, któremu nie można zaufać.</p>
<p><img class="alignnone" src="/wp-content/uploads/2010/02/img_7089resized.jpg" alt="" width="480" height="320" /></p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2010/02/09/spiechu-po-delegacji-w-warszawie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pierwszy projekt WWW zrealizowany :-)</title>
		<link>http://spiechu.pl/2010/01/25/pierwszy-projekt-www-zrealizowany/</link>
		<comments>http://spiechu.pl/2010/01/25/pierwszy-projekt-www-zrealizowany/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 23:21:51 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=420</guid>
		<description><![CDATA[Po długiej przerwie Śpiechu znowu nadaje… Mam nadzieję, że tym razem częściej. Zwłoka wynikła z tego, że ponad miesiąc po godzinach pracy w bibliotece pracowałem nad projektem dla WRiTV Uniwersytetu Śląskiego.
Efekt można zobaczyć tutaj.
Można powiedzieć, że do tego typu roboty przygotowywałem się 2 lata. Co składa się na całokształt strony?

3300 linii kodu PHP,
600 linii kodu [...]]]></description>
			<content:encoded><![CDATA[<p>Po długiej przerwie Śpiechu znowu nadaje… Mam nadzieję, że tym razem częściej. Zwłoka wynikła z tego, że ponad miesiąc po godzinach pracy w bibliotece pracowałem nad projektem dla WRiTV Uniwersytetu Śląskiego.</p>
<p>Efekt <a href="http://writv.us.edu.pl">można zobaczyć tutaj</a>.</p>
<p>Można powiedzieć, że do tego typu roboty przygotowywałem się 2 lata. Co składa się na całokształt strony?</p>
<ul>
<li>3300 linii kodu PHP,</li>
<li>600 linii kodu HTML,</li>
<li>380 linii kodu CSS,</li>
<li>80 linii kodu JavaScript</li>
</ul>
<p>Zastosowane narzędzia “dobajerowujące”:</p>
<ul>
<li>jQuery,</li>
<li>jQuery Uploadify,</li>
<li>jQuery Lightbox,</li>
<li>Tiny MCE</li>
</ul>
<p>Strona została napisana “od zera”, tzn. wszystko co składa się na stronę to mój autorski projekt. Mamy tutaj np.:</p>
<ul>
<li>autorska galeria (tworzy miniaturki zadanego rozmiaru, skaluje zdjęcia, dodaje do bazy danych),</li>
<li>autorska captcha,</li>
<li>ajaksowy uploader plików z normalizacją nazw,</li>
<li>procesor tekstu dodający twarde spacje za spójnikami,</li>
<li>system newsów dynamicznych (tzn. pobieranych z bazy),</li>
<li>system stron statycznych (tzn. z pliku),</li>
<li>obsługa “ładnych linków” za pomocą mod_rewrite,</li>
<li>możliwość edycji tego wszystkiego w miarę prosty sposób</li>
</ul>
<p>Jednocześnie odcinam się od strony graficznej. Wykonała ją moja żona. Bez bicia przyznaję się, że nie znam się na tym. Ja tylko dostałem obrazek w pdf i miałem przełożyć go na XHTML/CSS. Pod różnymi przeglądarkami trochę kuleje wygląd, ale ciągle nad tym pracuję <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ogólnie mówiąc, uniwersytet dostał “dużo za niedużo”. Nie powiem ile ich to kosztowało, bo zostanę posądzony za “psucie rynku” (ta uwaga w kontekście <a href="http://www.wykop.pl/link/289618/stworzenie-zlozonej-strony-internetowej-kosztuje-1000-zl">ostatniego wykopu</a>).</p>
<p><strong>Update 25.01.2010:</strong> Uznałem, że RSS warty był zaimplementowania. Tym sposobem dochodzi do witryny jeszcze autorski generator RSS <img src='http://spiechu.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2010/01/25/pierwszy-projekt-www-zrealizowany/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Informatyczne lektury do poduchy</title>
		<link>http://spiechu.pl/2009/11/25/informatyczne-lektury-do-poduchy/</link>
		<comments>http://spiechu.pl/2009/11/25/informatyczne-lektury-do-poduchy/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 18:21:58 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=415</guid>
		<description><![CDATA[Od ponad roku wszelkimi sposobami (Allegro, biblioteka) staram się zdobywać książki z serii Head First. Muszę przyznać, że to chyba najlepsza seria książek informatycznych jaka powstała. W żartobliwy sposób, prawie od zera jesteśmy stopniowo wprowadzani w dane zagadnienie. Czytając, podążamy prawdopodobną (złą) ścieżką wtajemniczenia, a następnie otrzymujemy wytłumaczenie dlaczego jest zła   Do znudzenia [...]]]></description>
			<content:encoded><![CDATA[<p>Od ponad roku wszelkimi sposobami (Allegro, biblioteka) staram się zdobywać książki z serii <em>Head First</em>. Muszę przyznać, że to chyba najlepsza seria książek informatycznych jaka powstała. W żartobliwy sposób, prawie od zera jesteśmy stopniowo wprowadzani w dane zagadnienie. Czytając, podążamy prawdopodobną (złą) ścieżką wtajemniczenia, a następnie otrzymujemy wytłumaczenie dlaczego jest zła <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Do znudzenia czasem wałkuje się ten sam temat z różnych stron. Malkontenci marudzą na zbytnie marnotrawstwo miejsca na marginalia i duże obrazki, ale moim zdaniem to właśnie to odróżnia serię od konkurencji.</p>
<p>Ja swoją przygodę z <em>Head First</em> za namową wykładowcy zacząłem od <em>“Object-Oriented Analysis&amp;Design”</em>. Potem było <em>“Design Patterns”</em> i nagle okazało się, że programować w PHP można w zupełnie inny sposób niż “ciurkiem”. Patrząc z perspektywy czasu, należało PHP również rozpocząć od <em>HF</em>. SQL i Java tak samo. Błędem w moim przypadku było zażyczenie sobie na urodziny <em>“Thinking in Java”</em> do nauki Javy od zera. Skutecznie na jakiś czas dałem sobie spokój z Javą (ale całe szczęście zacząłem od nowa po przeczyteniu <em>“Head First Java”</em>). Nie mam oczywiście nic do <em>“TiJ”</em>, ale poziom trudności dla nowicjusza jest po prostu za duży.</p>
<p>Ostatnio w moje łapki trafiła pozycja wydawnictwa <em>Packt Publishing “Programowanie obiektowe w PHP 5″</em> autora obco brzmiącego nazwiska Hasina Haydera. Helion wydaje książki tego wydawnictwa w sporo niższych cenach niż zwykle (pewnie biorą mniejszą marżę od O’Reilly i oczywiście średnia liczba stron jest mniejsza). Po przeczytaniu również muszę stwierdzić, że książka “daje radę”. Autor wprowadza nas w rzeczy, które najprawdopodobniej nam się mogą przydać, w razie czego odsyłając do dokumentacji <img src='http://spiechu.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Łatwo serię rozpoznać po ujednoliconej szacie graficznej.</p>
<p>Eh, jakie życie byłoby piękne gdyby Helion przekazywał egzemplarz obowiązkowy bibliotekom tak jak mówi ustawa… (myślę to w czasie kiedy myślę o <em>“Myśleniu obiektowym w programowaniu”</em> Matta Weisfelda, które stanie się moim następnym celem).</p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2009/11/25/informatyczne-lektury-do-poduchy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O pehapowcu, który chciał zostać javowcem</title>
		<link>http://spiechu.pl/2009/10/27/o-pehapowcu-ktory-chcial-zostac-javowcem/</link>
		<comments>http://spiechu.pl/2009/10/27/o-pehapowcu-ktory-chcial-zostac-javowcem/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 19:09:28 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=402</guid>
		<description><![CDATA[Znowu zleciał prawie miesiąc od ostatniego wpisu… Nie ozanacza to oczywiście, że przez ten czas nic się nie działo. Wręcz przeciwnie, a to za sprawą próby “wgryzienia się” w Javę.
Na różnych mądrych forach wyczytałem, że PHP to właściwie zabawka, a prawdziwe programowanie zaczyna się dopiero od Javy. Szkoda tylko, że niektórzy nie zauważają, że “zabawki” [...]]]></description>
			<content:encoded><![CDATA[<p>Znowu zleciał prawie miesiąc od ostatniego wpisu… Nie ozanacza to oczywiście, że przez ten czas nic się nie działo. Wręcz przeciwnie, a to za sprawą próby “wgryzienia się” w Javę.</p>
<p>Na różnych mądrych forach wyczytałem, że PHP to właściwie zabawka, a prawdziwe programowanie zaczyna się dopiero od Javy. Szkoda tylko, że niektórzy nie zauważają, że “zabawki” typu Allegro napisane są w PHP. Dodatkowo zachęcony hasłem “write once, use everywhere” zainstalowałem sobie NetBeans na Ubuntu  i “ruszyłem z tym koksem”.</p>
<p>Co nowego zauważyłem w Javie z punktu widzenia znajomości wyłącznie PHP (nie liczę Logo, Basic a potem Turbo Pascal za dzieciaka):</p>
<ul>
<li>Nie ma w Javie zmiennych bez wcześniejszego zadeklarowania ich typu. Koniec ze zmienną będącą raz integerem, a innym razem stringiem.</li>
<li>Koniec z funkcjami zwracającymi wartości ładnie w PHPDoc nazwane <em>mixed</em>, czyli jak wszystko fajnie poszło, to <em>return true</em>, jak niefajnie to <em>false</em>, a jak trochę fajnie to stringa.</li>
<li>Przeciążanie metod to jest to czego mi brakuje w PHP. Wiele zadań programistycznych dałoby się łatwo i szybko rozwiązać gdyby można było przeciążać metody (np. różne warianty konstruktora).</li>
<li>Tablice mają z góry ustaloną liczbę elementów. Z drugiej strony mamy rozbudowane implementacje kolekcji typu <em>List</em>, <em>Set</em> i <em>Map</em> (w których słabo się jeszcze poruszam na dzień dzisiejszy).</li>
<li>Cała nowa grupa zagadnień (i angielskiego słownictwa) w ogóle nie występujących w PHP, czyli współbieżność (problem dostępu wielu wątków do tych samych danych, zakleszczenia, wzorzec producent-konsument itd.)</li>
<li>Ciekawe rozwiązanie “niuansików OSowych”, np. w windowsach ścieżki dostępu tworzy się znakiem \ , a w uniksach / . Wpisując <em>File.pathSeparatorChar</em> Java sama dobierze sobie odpowiedni znak.</li>
<li>Budowa interfejsu graficznego i jego oprogramowywanie (nieźle rozwiązane w NetBeans).</li>
<li>Wszystko jest obiektem i dziedziczy po <em>Object</em>!</li>
<li>Nie da się niechlujnie pisać kodu <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Towarzysz kompilator (to również nowość) od razu zgłosi, że mu się coś nie podoba.</li>
</ul>
<p>Z punktu widzenia czytelnika tego bloga zapewne wygląda to tak jakbym  zabierał się za wszystko tylko po łebkach. Może i trochę tak jest, że szybko się czymś nudzę, ale w tym przypadku chodzi o czystą ciekawość czy rzeczywiście “poważna Java” jest aż tak trudna do zrozumienia. Po miesiącu nauki stwierdzam, że nie jest to  takie trudne. Oczywiście mam tutaj na myśli same podstawy języka (bez tych tysięcy bibliotek). Samo czytanie dokumentacji to już wyzwanie <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2009/10/27/o-pehapowcu-ktory-chcial-zostac-javowcem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Atak klonów w PHP</title>
		<link>http://spiechu.pl/2009/09/28/atak-klonow-w-php/</link>
		<comments>http://spiechu.pl/2009/09/28/atak-klonow-w-php/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 20:26:22 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=394</guid>
		<description><![CDATA[Dzisiaj wieczorkiem rozpracowywałem sobie klonowanie obiektów w PHP. Dokładnie zainteresowała mnie metoda __clone(). W manualu PHP za dużo nie napisali, więc naskrobałem sobie krótki kod do przeprowadzenia testów. Chodziło mi o to czy podczas wykonywania klonowania obiektu uruchamiany jest konstruktor oraz czy można jakoś numerować klony (a co za tym idzie — “na gorąco” przypisywać [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj wieczorkiem rozpracowywałem sobie klonowanie obiektów w PHP. Dokładnie zainteresowała mnie metoda <em>__clone()</em>. <a href="http://php.net.pl/manual/pl/language.oop5.cloning.php">W manualu PHP</a> za dużo nie napisali, więc naskrobałem sobie krótki kod do przeprowadzenia testów. Chodziło mi o to czy podczas wykonywania klonowania obiektu uruchamiany jest konstruktor oraz czy można jakoś numerować klony (a co za tym idzie — “na gorąco” przypisywać polom sklonowanego obiektu jakieś wartości). Poniżej podaję kod z komentarzem.</p>
<pre name="code" class="php">
&lt;?php
class Klon {

   // Ogolna liczba klonow
   private static $liczbaKlonow = 0;
   // Nr konkretnego klona
   private $klonNr;

   public function __construct() {
      // Na etapie konstruktora przypisujemy polu klonNr wartość 0,
      // jako iż nie jest żadnym klonem
      $this-&gt;klonNr = 0;
      // Dodatkowo wywalamy na ekran komunikat upewniający nas, że uruchomiono konstruktor
      echo 'Uruchomiono konstruktor i stworzono obiekt Klon!&lt;br /&gt;';
   }

   public function __clone() {
      // Zwiększamy licznik liczby wszystkich klonów
      self::$liczbaKlonow += 1;
      // Przypisujemy aktualną wartość licznika nowo utworzonemu klonowi
      $this-&gt;klonNr = self::$liczbaKlonow;
   }

   // Proste sprawdzenie czy obiekt jest klonem, a jeżeli tak to którym
   public function getKlonNr() {
      if ($this-&gt;klonNr == 0) return 'nie jest klonem';
      return 'jest ' . $this-&gt;klonNr . ' klonem';
   }

   // Zwrócenie liczby wszystkich klonów obiektu
   public function getLiczbaKlonow() {
      return self::$liczbaKlonow;
   }
}

$oryg = new Klon();
// Klonujemy "oryginalny" obiekt
$klon1 = clone $oryg;
$klon2 = clone $oryg;
// Klonujemy klon
$klon3 = clone $klon2;

// Wypisujemy "kto jest kim"
echo 'Zmienna $oryg ' . $oryg-&gt;getKlonNr() . '&lt;br /&gt;';
echo 'Zmienna $klon1 ' . $klon1-&gt;getKlonNr() . '&lt;br /&gt;';
echo 'Zmienna $klon2 ' . $klon2-&gt;getKlonNr() . '&lt;br /&gt;';
echo 'Zmienna $klon3 ' . $klon3-&gt;getKlonNr() . '&lt;br /&gt;';

echo 'Wszystkich klonow: ' . $oryg-&gt;getLiczbaKlonow() . '&lt;br /&gt;';
?&gt;</pre>
<p>Uruchomienie kodu wyświetli:<br />
<code>Uruchomiono konstruktor i stworzono obiekt Klon!<br />
Zmienna $oryg nie jest klonem<br />
Zmienna $klon1 jest 1 klonem<br />
Zmienna $klon2 jest 2 klonem<br />
Zmienna $klon3 jest 3 klonem<br />
Wszystkich klonow: 3</code></p>
<p>Wnioski:</p>
<ul>
<li>podczas klonowania nie jest uruchamiany konstruktor,</li>
<li>metoda <em>__clone()</em> wywoływana jest <strong>po</strong> sklonowaniu obiektu, a zmieniając coś poprzez  $this-&gt;cośTam operujemy już na klonie!</li>
<li>prywatne zmienne statyczne to fajna zabawa <img src='http://spiechu.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2009/09/28/atak-klonow-w-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O konsumpcji śledzia i szerzącej się głupocie</title>
		<link>http://spiechu.pl/2009/09/25/o-konsumpcji-sledzia-i-szerzacej-sie-glupocie/</link>
		<comments>http://spiechu.pl/2009/09/25/o-konsumpcji-sledzia-i-szerzacej-sie-glupocie/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 11:08:52 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=386</guid>
		<description><![CDATA[Na początku września nasz “ulubiony” serwis społecznościowy, czyli Nasza-Klasa.pl dodała nowy bajer: Śledzik. W skrócie jest to prostsza kopia takich serwisów microbloggingowych jak Twitter czy rodzimy Blip. Wg mnie może być bardzo przydatna, ale…
Od momentu wprowadzenia nowej funkcjonalności  dzieje się coś dziwnego. Wszyscy użytkownicy jednoczą się w celu “zatopienia śledzia”. To jednoczenie polega na [...]]]></description>
			<content:encoded><![CDATA[<p>Na początku września nasz “ulubiony” serwis społecznościowy, czyli Nasza-Klasa.pl dodała nowy bajer: Śledzik. W skrócie jest to prostsza kopia takich serwisów microbloggingowych jak Twitter czy rodzimy Blip. Wg mnie może być bardzo przydatna, ale…</p>
<p>Od momentu wprowadzenia nowej funkcjonalności  dzieje się coś dziwnego. Wszyscy użytkownicy jednoczą się w celu “zatopienia śledzia”. To jednoczenie polega na całkowicie bezmyślnym wklejaniu różnego rodzaju kodów wyłączających. Hiciorem wg mnie jest <strong>5P13RD4L4J-5L3D21U</strong> wklejane przez wykształconych znajomych. Jest to tak zabawne (i żenujące), że stało się <a href="http://www.joemonster.org/art/12467/Duchowna_ofiara_kodu_na_Sledzika_">pożywką dla JoeMonstera</a>. Okazuje się, że nie tylko moich znajomych opanowała jakaś dziwna fala “antyśledzikowa”, ale jest to działanie ogólnopolskie. Powstał nawet “<a href="http://anty-sledzik.blogspot.com/">blog antyśledziowy</a>”.</p>
<p>Skoro nie podoba się Śledzik, to po prostu nie używajcie. Spamując głupimi linkami uniemożliwiacie korzystanie z nowej funkcjonalności zainteresowanym. Praktycznie od początku istnieją co najmniej dwa sposoby wyłączenia “śledzia”:</p>
<ul>
<li>“legalna” — poprzez kliknięcie przycisku “nie śledź” przy każdym znajomym</li>
<li>“nielegalna” — poprzez skorzystanie z <a href="http://pokazywarka.pl/sledzikssie/">instrukcji zawartych np. tutaj</a> lub jeżeli macie Firefoksa i Adblock Plusa do reguł blokowania dodajecie <em>nasza-klasa.pl#DIV(id=sledzik_box)</em></li>
</ul>
<p>W ten co teraz sposób kompromitujecie się coraz bardziej. Wklejajcie dalej różne głupoty, a ich twórcy będą się nieźle bawić.</p>
<p><a rel="lightbox" href="http://spiechu.all.pl/wp-content/uploads/2009/10/demot.jpg"><img class="alignnone" src="http://spiechu.all.pl/wp-content/uploads/2009/10/demot_480.jpg" alt="" width="480" height="409" /></a></p>
<p>Źródło: <a href="http://demotywatory.pl/178761/Uwierzyli">demotywatory.pl</a></p>
<p><strong>Aktualizacja z 30.09.2009</strong>, pojawił się nowy kandydat na hicior śledzikowy:</p>
<blockquote><p>J3273M-D38113M &lt;– Wklej cala ta wiadomosc, razem z tym kodem na sledzika, a on zniknie NATYCHMIAST! Potwierdzone przez administratora portalu Nasza-Klasa.pl!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2009/09/25/o-konsumpcji-sledzia-i-szerzacej-sie-glupocie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowa Opera 10 i blokowanie reklam</title>
		<link>http://spiechu.pl/2009/09/01/nowa-opera-10-i-blokowanie-reklam/</link>
		<comments>http://spiechu.pl/2009/09/01/nowa-opera-10-i-blokowanie-reklam/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 18:52:00 +0000</pubDate>
		<dc:creator>Śpiechu</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://spiechu.all.pl/?p=381</guid>
		<description><![CDATA[Dzisiaj ukazała się najnowsza stabilna wersja Opery, opatrzona numerkiem 10. Przyznam się, że ostatnio Operę używałem w czasie, gdy jeszcze miała u góry nieznośny banner reklamowy. Jak tylko pojawił się Firefox, ma się rozumieć bez żadnych reklam, po jakimś czasie w Operze zlikwidowano reklamy. Ja tymczasem już na stałe zadomowiłem “ognistego liska” u siebie na [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj ukazała się najnowsza stabilna wersja Opery, opatrzona numerkiem 10. Przyznam się, że ostatnio Operę używałem w czasie, gdy jeszcze miała u góry nieznośny banner reklamowy. Jak tylko pojawił się Firefox, ma się rozumieć bez żadnych reklam, po jakimś czasie w Operze zlikwidowano reklamy. Ja tymczasem już na stałe zadomowiłem “ognistego liska” u siebie na kompie i tak już zostało do dzisiaj. No ale nie o tym miała być dzisiaj mowa.</p>
<p>Na stronie <a href="http://www.opera.com">www.opera.com</a> mamy ładną paczkę deb przygotowaną specjalnie pod Ubuntu. Niestety wszystkie przeglądane strony wyglądają hmm… zbyt “ruchomo i kolorowo” (a to za sprawą wszechobecnych reklam, od których odwykłem). Spróbowałem tego ustrojstwa się pozbyć. Poniżej recepta:</p>
<p>Wyłączamy Operę.</p>
<p>W naszym katalogu domowym znajdujemy ukryty katalog <em>.opera</em> i tworzymy tam pusty plik o nazwie <em>urlfilter.ini</em></p>
<p>Do pustego pliku wklejamy ten tekst:</p>
<p><code>﻿Opera Preferences version 2.1<br />
; Do not edit this file while Opera is running<br />
; This file is stored in UTF-8 encoding</code></p>
<p><code>[prefs]<br />
prioritize excludelist=1</code></p>
<p><code>[include]<br />
*</code></p>
<p><code>[exclude]</code></p>
<p>Następnie ze strony <a href="http://niecko.pl/adblock/adblock.txt">http://niecko.pl/adblock/adblock.txt</a> wklejamy całą zawartość począwszy od <em>*ad2.*</em> aż do <em>whitelist</em>. Dodatkowo możemy wkleić adresy <a href="http://my.opera.com/Tamil/blog/ad-block">stąd</a>. Ostrzegają jednak, że im więcej wpisów tym wolniej uruchomi się Opera. Zapisujemy plik.</p>
<p>Odpalamy Operę i w razie napotkania reklam używamy prawego przycisku na wolnym polu i opcji <em>zablokuj zawartość…</em> w celu uzupełnienia filtrów (dodadzą się na koniec urlfilter.ini).</p>
]]></content:encoded>
			<wfw:commentRss>http://spiechu.pl/2009/09/01/nowa-opera-10-i-blokowanie-reklam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
