<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>BBProject.net</title>
	<atom:link href="http://www.bbproject.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bbproject.net</link>
	<description>Programowanie, webmastering, informatyka</description>
	<lastBuildDate>Tue, 03 Aug 2010 08:22:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Wtyczka Adobe Flash uległa awarii</title>
		<link>http://www.bbproject.net/2010/08/wtyczka-adobe-flash-ulegla-awarii/</link>
		<comments>http://www.bbproject.net/2010/08/wtyczka-adobe-flash-ulegla-awarii/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 08:20:17 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[izolacja]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wtyczka]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=385</guid>
		<description><![CDATA[Tytuł tego wpisu jest jednym z najczęściej widzianych przeze mnie tekstów od czasu wydania Firefox&#8217;a w wersji 3.6.4. Dlaczego od tej akurat wersji? Dlatego że właśnie wtedy wprowadzono w owej przeglądarce izolację wtyczek od głównego procesu programu. Mechanizm ten jednak nie do końca działa poprawnie wyłączając momentami obiekt flash&#8217;a zaraz po jego załadowaniu &#8211; już [...]]]></description>
			<content:encoded><![CDATA[<p>Tytuł tego wpisu jest jednym z najczęściej widzianych przeze mnie tekstów od czasu wydania Firefox&#8217;a w wersji 3.6.4. Dlaczego od tej akurat wersji? Dlatego że właśnie wtedy wprowadzono w owej przeglądarce izolację wtyczek od głównego procesu programu.</p>
<p style="text-align: center;"><img class="size-full wp-image-386 alignnone" title="Firefox - awaria wtyczki" src="http://www.bbproject.net/wp-content/uploads/2010/08/ff_plugin_crash.png" alt="" width="447" height="168" /></p>
<p>Mechanizm ten jednak nie do końca działa poprawnie wyłączając momentami obiekt flash&#8217;a zaraz po jego załadowaniu &#8211; już nie pamiętam kiedy udało mi się wejść w Google Analytics i nie musieć zaraz po załadowaniu odświeżać strony aby zobaczyć wykresy (obiekty flash) wyłączone przez FF, gdyż ten uznał że przestały działać.</p>
<p><span id="more-385"></span>Wszystko miało być pięknie i cudownie, zwieszona wtyczka nie miała powodować wykładania się całej przeglądarki. Jak jest w praktyce? Mimo iż obecnie mamy wersję 3.6.8, czyli 4 później, nie widzę żadnego komfortu wynikającego z izolacji wtyczek. Jeśli na jakiejś zakładce aplet flash&#8217;a zacznie się przysłowiowo przycinać, to i tak prawie cały Firefox się tnie &#8211; zmiana zakładki graniczy z cudem. Być może gdyby wtyczka faktycznie całkowicie „padła”, to uratowało by to główny proces, nie mniej, nie pamiętam kiedy ostatni raz miałem taką sytuację.</p>
<p>Podsumowując, poziom frustracji wynikający z nieprawidłowego działania mechanizmu izolacji wtyczek jest kilkukrotnie wyższy od ew. strat, jakie wynikły by gdyby tej funkcji nie wprowadzono a jakaś wtyczka spowodowała by błąd całej przeglądarki.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/08/wtyczka-adobe-flash-ulegla-awarii/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Wyłączanie komputera o określonej porze</title>
		<link>http://www.bbproject.net/2010/07/wylaczanie-komputera-o-okreslonej-porze/</link>
		<comments>http://www.bbproject.net/2010/07/wylaczanie-komputera-o-okreslonej-porze/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 08:03:47 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[shutdown]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wyłączenie]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=383</guid>
		<description><![CDATA[Oczywiście bez użycia zewnętrznych narzędzi, gdyż takich jest sporo. Czasami zachodzi potrzeba zostawienia komputera włączonego jeszcze przez godzinę, jeśli nie mamy innego softu, bądź nie chcemy go instalować tylko do tej jednej czynności, proponuje skorzystanie z systemowego polecenia shutdown.exe. Polecenie to ma mnóstwo przełączników, nas jednak interesuje poniższa składnia: shutdown.exe /s /t 1200 &#8230;gdzie: /s [...]]]></description>
			<content:encoded><![CDATA[<p>Oczywiście bez użycia zewnętrznych narzędzi, gdyż takich jest sporo. Czasami zachodzi potrzeba zostawienia komputera włączonego jeszcze przez godzinę, jeśli nie mamy innego softu, bądź nie chcemy go instalować tylko do tej jednej czynności, proponuje skorzystanie z systemowego polecenia <em>shutdown.exe</em>.</p>
<p>Polecenie to ma mnóstwo przełączników, nas jednak interesuje poniższa składnia:</p>
<pre>shutdown.exe /s /t 1200</pre>
<p>&#8230;gdzie: <em>/s</em> oznacza zamknięcie systemu, a <em>/t</em> określa czas w sekundach do tego zdarzenia (w tym wypadku 1200 sekund, czyli 20 minut). Po wydaniu tego polecenia naszym oczom ukaże się poniższy komunikat.</p>
<p><img class="size-full wp-image-384 aligncenter" title="shutdown" src="http://www.bbproject.net/wp-content/uploads/2010/07/shutdown.png" alt="" width="507" height="129" /></p>
<p>Gdybyśmy się rozmyślili, odliczanie łatwo przerwać poleceniem:</p>
<pre>shutdown.exe /a
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/07/wylaczanie-komputera-o-okreslonej-porze/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Co to jest Sender w procedurach zdarzeń?</title>
		<link>http://www.bbproject.net/2010/06/co-to-jest-sender-w-procedurach-zdarzen/</link>
		<comments>http://www.bbproject.net/2010/06/co-to-jest-sender-w-procedurach-zdarzen/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 03:22:06 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[sender]]></category>
		<category><![CDATA[zdarzenie]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=380</guid>
		<description><![CDATA[Mały wpis dla początkujących programistów Delphi. Co to jest i do czego służy parametr Sender, występujący niemal zawsze przy procedurach zdarzeń (np.: naciśnięcia przycisku)? W skrócie, jest to wskaźnik na obiekt który wywołuje dane zdarzenie. Jeśli widzimy to w zdarzeniu OnClick przycisku, to jest to właśnie wskaźnik na ten przycisk (oczywiście trzeba go rzutować na [...]]]></description>
			<content:encoded><![CDATA[<p>Mały wpis dla początkujących programistów Delphi. Co to jest i do czego służy parametr <em>Sender</em>, występujący niemal zawsze przy procedurach zdarzeń (np.: naciśnięcia przycisku)?</p>
<p>W skrócie, jest to wskaźnik na obiekt który wywołuje dane zdarzenie. Jeśli widzimy to w zdarzeniu <em>OnClick</em> przycisku, to jest to właśnie wskaźnik na ten przycisk (oczywiście trzeba go rzutować na <em>TButton</em> aby odnieść się do jego własności).</p>
<p><span id="more-380"></span>Ktoś może zapytać, po co mi coś takiego, skoro dobrze wiem które zdarzenie przypisane jest któremu przyciskowi? Ano po to, że istnieje możliwość przypisania tego samego zdarzenia kilku obiektom, a nie tylko jednemu.</p>
<p>Weźmy prosty przykład, mam na formie 3 przyciski o różnych etykietach. Załóżmy że chcę, po kliknięciu w każdy z nich, aby na belce okna wyświetlała się etykieta tego klikniętego. W tradycyjnym podejściu należało by oprogramować 3 zdarzenia kliknięcia. My zrobimy to w jednym, wykorzystując parametr <em>Sender</em>, oraz przypisując owe zdarzenie do wszystkich przycisków:</p>
<pre class="brush: delphi">procedure TForm1.ButtonClick(Sender: TObject);
begin
  Caption := TButton(Sender).Caption;
end;
</pre>
<p>I to już wszystko! Przy pierwszym przycisku utworzyłem nowy event (zmieniając nieco jego nazwę), przy kolejnych wybrałem go z rozwijanej listy dla zdarzenia <em>OnClick</em>. Szybko, łatwo i bez zbędnego kodu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/co-to-jest-sender-w-procedurach-zdarzen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jak sprawdzić czy telefon ma simlock&#8217;a?</title>
		<link>http://www.bbproject.net/2010/06/jak-sprawdzic-czy-telefon-ma-simlocka/</link>
		<comments>http://www.bbproject.net/2010/06/jak-sprawdzic-czy-telefon-ma-simlocka/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 09:58:10 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[blokada]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[nss]]></category>
		<category><![CDATA[sim]]></category>
		<category><![CDATA[simlock]]></category>
		<category><![CDATA[telefon]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=374</guid>
		<description><![CDATA[Pomijając porady typu „włożyć kartę innego operatora”, nie jest to wcale takie proste. Oczywiście włożenie obcej karty sim rozwiewa nasze wątpliwości w 100% (pomijając sieci należące do jednego właściciela, np.: Era, Heyah). Co jednak jeśli nie mamy pod ręką innej karty, nie chcemy jej kupować, bądź jest 22:00 w niedzielę i nawet jakbyśmy chcieli to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-375" title="iPhone simlock" src="http://www.bbproject.net/wp-content/uploads/2010/06/unlockedcellphone-160x145.jpg" alt="" width="160" height="145" />Pomijając porady typu „włożyć kartę innego operatora”, nie jest to wcale takie proste. Oczywiście włożenie obcej karty sim rozwiewa nasze wątpliwości w 100% (pomijając sieci należące do jednego właściciela, np.: Era, Heyah). Co jednak jeśli nie mamy pod ręką innej karty, nie chcemy jej kupować, bądź jest 22:00 w niedzielę i nawet jakbyśmy chcieli to nie mamy skąd takowej wziąć?</p>
<p>W takim wypadku skorzystać najlepiej z oprogramowania które potrafi ustalić <strong>czy telefon ma blokadę sim</strong>, i nawet <strong>na jaką konkretnie sieć</strong>! Oczywiście będzie nam potrzebny kabel służący do podłączenia telefonu do komputera &#8211; jeśli takowego nie mamy, może faktycznie prościej i taniej będzie kupić kartę innego operatora <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' /> .</p>
<p><span id="more-374"></span>Kluczową aplikacją, której będziemy używać, jest <strong>Nemesis Service Suite</strong> (NSS) &#8211; niestety obsługuje jedynie telefony marki Nokia <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_sad.png' alt=':(' class='wp-smiley' /> . Ową aplikację możemy pobrać z <a href="http://www.b-phreaks.co.uk/index.php?main_page=page_2">tej strony</a>.</p>
<h4>Instalacja</h4>
<p>Procedura instalacji nie wyróżnia się niczym szczególnym. Jedyne o czym musimy pamiętać to wybór opcji <em>Virtual USB Device</em> na ekranie <em>Hardware Selection page</em>, jak na obrazku poniżej.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-376" title="NSS - Hardware Selection page" src="http://www.bbproject.net/wp-content/uploads/2010/06/nss01.png" alt="" width="503" height="386" /></p>
<h4>Sprawdzanie simlock&#8217;a</h4>
<p>Po uruchomieniu programu, klikamy w ikonę lupy (<em>Scan for new device</em>) znajdującej się w prawej, górnej części okna aplikacji. Spowoduje to wyszukanie podłączonych urządzeń do komputera.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/06/nss02.png"><img class="alignnone size-large wp-image-377" title="NSS - główne okno aplikacji" src="http://www.bbproject.net/wp-content/uploads/2010/06/nss02-512x275.png" alt="" width="512" height="275" /></a></p>
<p>Naszym oczom powinien pojawić obrazek podobny do tego powyższego. Przechodzimy do zakładki <em>Security</em> (ikona kłódki).</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/06/nss03.png"><img class="alignnone size-large wp-image-378" title="NSS - Security" src="http://www.bbproject.net/wp-content/uploads/2010/06/nss03-512x275.png" alt="" width="512" height="275" /></a></p>
<p>Interesuje nas wartość pola <strong>MCC+MNC</strong>. Jeśli w polu tym widnieją <strong>same zera</strong>, oznacza to że telefon nie posiada blokady sim. Jeśli jakiekolwiek inne liczby, to jest to kod operatora na którego założony jest simlock. Szczegółową rozpiskę kodów MCC+MNC znajdziecie chociażby w <a href="http://en.wikipedia.org/wiki/Mobile_Network_Code">Wikipedii</a>. W przypadku z powyższego screena mamy do czynienia z siecią Era.</p>
<h4>Podsumowanie</h4>
<p>Tym oto prostym sposobem, bez potrzeby zakupu karty sim innego operatora, możemy sprawdzić czy, i na jaką sieć, założony jest w telefonie simlock.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/jak-sprawdzic-czy-telefon-ma-simlocka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magiczne stałe PHP</title>
		<link>http://www.bbproject.net/2010/06/magiczne-stale-php/</link>
		<comments>http://www.bbproject.net/2010/06/magiczne-stale-php/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 08:55:09 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[magiczne]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[stała]]></category>
		<category><![CDATA[stałe]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=370</guid>
		<description><![CDATA[Stałe noszące miano „magicznych” w języku PHP to zbiór stałych które posiadają przedefiniowaną i niezmienną wartość, jednak jest ona określona jedynie w obrębie wykonywania danego skryptu. Oznacza to że w przypadku innego pliku wartości poszczególnych stałych będą inne. Mało tego, niektóre z nich mogą zmieniać swą zawartość w zależności od miejsca wywołania (np.: wew. funkcji [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-371" title="Magiczny kapelusz" src="http://www.bbproject.net/wp-content/uploads/2010/06/magic_hat-160x160.png" alt="" width="160" height="160" />Stałe noszące miano „magicznych” w języku PHP to zbiór stałych które posiadają przedefiniowaną i niezmienną wartość, jednak jest ona określona jedynie w obrębie wykonywania danego skryptu.</p>
<p>Oznacza to że w przypadku innego pliku wartości poszczególnych stałych będą inne. Mało tego, niektóre z nich mogą zmieniać swą zawartość w zależności od miejsca wywołania (np.: wew. funkcji czy metody klasy).</p>
<p>Owe „magic constans” są jednak bardzo przydatne w programowaniu w PHP i każdy powinien je znać, aby niepotrzebnie nie wynajdywać od nowa przysłowiowego koła. Zapraszam do zapoznania się z nimi.</p>
<p><span id="more-370"></span>Dla każdej poniższej stałej, został dołączony przykład użycia wraz z wynikiem wykonania danego kodu.</p>
<h4>__LINE__</h4>
<p>Zawiera numer linii pliku skryptu, w której została użyta ta stała.</p>
<pre class="brush: php">echo __LINE__;</pre>
<pre>2</pre>
<h4>__FILE__</h4>
<p>Przechowuje bezwzględną ścieżkę do pliku skryptu który jest wykonywany.</p>
<pre class="brush: php">echo __FILE__;</pre>
<pre>G:\Server\www\~dev\magicconstants.php</pre>
<h4>__DIR__</h4>
<p>Przechowuje bezwzględną ścieżkę do folderu skryptu który jest wykonywany (bez slasha na końcu jeśli nie jest to folder główny &#8211; root). Stała ta dostępna jest począwszy od wersji PHP 5.3.0.</p>
<pre class="brush: php">echo __DIR__;</pre>
<pre>G:\Server\www\~dev</pre>
<h4>__FUNCTION__</h4>
<p>Nazwa funkcji w której użyta została stała.</p>
<pre class="brush: php">function test_function()
{
  return __FUNCTION__;
}
echo test_function();</pre>
<pre>test_function</pre>
<h4>__CLASS__, __METHOD__</h4>
<p>Pierwsza z stałym zwraca nazwę klasy obiektu w którym została użyta. Druga natomiast, dodaje do tego ciągu dodatkowo nazwę wywołanej metody owej klasy.</p>
<pre class="brush: php">class test_obj
{
  public function test_class()
  {
    return __CLASS__;
  }
  public function test_method()
  {
    return __METHOD__;
  }
}
$test_obj = new test_obj();
echo $test_obj-&gt;test_class()."\n";
echo $test_obj-&gt;test_method();</pre>
<pre>test_obj
test_obj::test_method</pre>
<h4>__NAMESPACE__</h4>
<p>Nazwa aktualnej przestrzeni nazw &#8211; jednej z głównej nowości w PHP 5.3.0.</p>
<pre class="brush: php">namespace test_namespace;
echo __NAMESPACE__;</pre>
<pre>test_namespace</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/magiczne-stale-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Będę na HotZlot 2010</title>
		<link>http://www.bbproject.net/2010/06/bede-na-hotzlot-2010/</link>
		<comments>http://www.bbproject.net/2010/06/bede-na-hotzlot-2010/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 05:30:31 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[dobreprogramy]]></category>
		<category><![CDATA[hotzlot]]></category>
		<category><![CDATA[spotkanie]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=372</guid>
		<description><![CDATA[W dniach 9-11 lipca będę uczestniczył w imprezie integracyjnej połączonej z sesjami technicznymi HotZlot 2010, organizowanej dla czytelników serwisów dobreprogramy, TechIT i Gamikaze. Jeśli ktoś z zainteresowanych osób również się tam pojawi (dostać się niestety nie jest łatwo) to zapraszam do wspólnej integracji . Więcej informacji o zlocie można znaleźć na stronie www.hotzlot.pl, jak i [...]]]></description>
			<content:encoded><![CDATA[<p>W dniach 9-11 lipca będę uczestniczył w imprezie integracyjnej połączonej z sesjami technicznymi <a href="http://www.hotzlot.pl">HotZlot 2010</a>, organizowanej dla czytelników serwisów dobreprogramy, TechIT i Gamikaze. Jeśli ktoś z zainteresowanych osób również się tam pojawi (dostać się niestety nie jest łatwo) to zapraszam do wspólnej integracji <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' /> .</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/06/hotzlot2010.jpg"><img class="alignnone size-large wp-image-373" title="HotZlot 2010" src="http://www.bbproject.net/wp-content/uploads/2010/06/hotzlot2010-512x320.jpg" alt="" width="512" height="320" /></a></p>
<p>Więcej informacji o zlocie można znaleźć na stronie <a href="http://www.hotzlot.pl">www.hotzlot.pl</a>, jak i przystąpić do publicznej rejestracji od dnia 16 czerwca. Uczestnicy będą wybrani na drodze losowania.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/bede-na-hotzlot-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Podświetlanie składni PHP</title>
		<link>http://www.bbproject.net/2010/06/podswietlanie-skladni-php/</link>
		<comments>http://www.bbproject.net/2010/06/podswietlanie-skladni-php/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 08:23:00 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[highlight]]></category>
		<category><![CDATA[highlight_file]]></category>
		<category><![CDATA[highlight_string]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[składnia]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=368</guid>
		<description><![CDATA[Szybki wpis pod tytułem, jak podświetlić składnię języka PHP w samym PHP. Sprawa jest dziecinnie prosta, i sprowadza się do użycia jednej z dwóch wbudowanych funkcji samego języka: mixed highlight_string  (  string $str  [,  bool $return = false  ] ) &#8230;lub: mixed highlight_file  (  string $filename  [,  bool $return = false  ] ) Pierwsza koloruje [...]]]></description>
			<content:encoded><![CDATA[<p>Szybki wpis pod tytułem, jak podświetlić składnię języka PHP w samym PHP. Sprawa jest dziecinnie prosta, i sprowadza się do użycia jednej z dwóch wbudowanych funkcji samego języka:</p>
<pre>mixed <a href="http://pl2.php.net/manual/en/function.highlight-string.php"><strong>highlight_string</strong></a>  (  string $str  [,  bool $return = false  ] )</pre>
<p>&#8230;lub:</p>
<pre>mixed <a href="http://pl2.php.net/manual/en/function.highlight-file.php"><strong>highlight_file</strong></a>  (  string $filename  [,  bool $return = false  ] )</pre>
<p>Pierwsza koloruje i wyróżnia składnię w zadanym ciągu znaków, druga z kolei w podanym pliku. Prosty przykład demonstrujący działanie:</p>
<pre class="brush: php">&lt;?php
  $var = 'Ten skrypt PHP podswietla skladnie samego siebie';
  $num = 1024;
  highlight_file(__FILE__);
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/podswietlanie-skladni-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moje najdziwniejsze programy</title>
		<link>http://www.bbproject.net/2010/06/moje-najdziwniejsze-programy/</link>
		<comments>http://www.bbproject.net/2010/06/moje-najdziwniejsze-programy/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 10:46:28 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Projekty]]></category>
		<category><![CDATA[edytor]]></category>
		<category><![CDATA[gra]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[modyfikacja]]></category>
		<category><![CDATA[poziom]]></category>
		<category><![CDATA[program]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=356</guid>
		<description><![CDATA[Z programowaniem, jak z każdą inną twórczością, jedne rzeczy wychodzą lepiej, inne gorzej, jeszcze inne lądują w koszu nie ujrzawszy nigdy światła dziennego. Chciałbym się dziś z Wami podzielić moimi najdziwniejszymi programami jakie udało mi się stworzyć a które z różnych względów nie zostały nigdzie opublikowane, bądź znikły z uwagi na ich wiek. Główna przyczyna [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-367 alignright" title="Samo zniszczenie" src="http://www.bbproject.net/wp-content/uploads/2010/05/selfdestruct-160x141.jpg" alt="" width="160" height="141" />Z programowaniem, jak z każdą inną twórczością, jedne rzeczy wychodzą lepiej, inne gorzej, jeszcze inne lądują w koszu nie ujrzawszy nigdy światła dziennego.</p>
<p>Chciałbym się dziś z Wami podzielić moimi najdziwniejszymi programami jakie udało mi się stworzyć a które z różnych względów nie zostały nigdzie opublikowane, bądź znikły z uwagi na ich wiek. Główna przyczyna tego stanu rzeczy? Bardzo wąska specjalizacja bądź też typowo prywatny cel stworzenia czegoś, co ułatwia mi codzienną pracę przy komputerze.</p>
<p>Zapnijcie zatem pasy i nie próbujcie tego w domu <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' /> .</p>
<p><span id="more-356"></span></p>
<h4>Bot Routes Editor</h4>
<p>Zdecydowany lider, niedościgniony wzór i autorytet w dziedzinie najbardziej specjalizowanej aplikacji jaka wyszła spod mojej ręki. Cóż to takiego?</p>
<p>Bot Routes Editor to narzędzie służące do optymalizacja i naprawianie konfiguracji ścieżek botów dla moda (!) do gry Soldier of Fortune II.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/05/bre_01.png"><img class="alignnone size-medium wp-image-361" title="Bot Routes Editor" src="http://www.bbproject.net/wp-content/uploads/2010/05/bre_01-256x216.png" alt="" width="256" height="216" /></a> <a href="http://www.bbproject.net/wp-content/uploads/2010/05/bre_02.png"><img class="alignnone size-medium wp-image-362" title="Bot Routes Editor" src="http://www.bbproject.net/wp-content/uploads/2010/05/bre_02-256x216.png" alt="" width="256" height="216" /></a></p>
<p>Swego czasu byłem zapalonym fanem tej gry. Wraz z przyjacielem bardzo często korzystaliśmy z pewnego moda który dodawał obsługę CPU w grach multiplayer. Aby boty mogły działać należało stworzyć im tzw. ścieżki. Jako że przykładałem się do tego aż za bardzo, mod ten nie wytrzymywał ilości punktów i po prostu się wieszał. I tutaj z pomocą przychodził mój program, który analizował oraz wyszukiwał zbędne punktu, usuwał je, łączył odpowiednio ścieżki i zapisywał poprawiony plik.</p>
<p>Prawdopodobieństwo że komuś innemu przydała by się ta aplikacja było niemal zerowe.</p>
<h4>TGAStudio</h4>
<p>Kolejny program związany z grą i jej edycją. Tym razem sprawa tyczy się gry Tomb Raider, a konkretnie czasów w których zaczęły pojawiać się pierwsze nieoficjalne edytory do tejże gry, wraz z aplikacją Room Edit &#8211; oficjalnym edytorem dostarczonym wraz z premierą Tomb Raider Chronicles (piąta część gry).</p>
<p>Do czego służy TGAStudio? Wbrew pozorom nie do tworzenia poziomów do Tomb Raider&#8217;a. Jego zadaniem jest ułatwienie kompletowania zestawu tekstur który następnie wykorzystuje się w edytorze leveli.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/05/tgastudio_01.png"><img class="alignnone size-medium wp-image-363" title="TGAStudio" src="http://www.bbproject.net/wp-content/uploads/2010/05/tgastudio_01-256x292.png" alt="" width="256" height="292" /></a> <a href="http://www.bbproject.net/wp-content/uploads/2010/05/tgastudio_02.png"><img class="alignnone size-medium wp-image-364" title="TGAStudio" src="http://www.bbproject.net/wp-content/uploads/2010/05/tgastudio_02-256x292.png" alt="" width="256" height="292" /></a></p>
<p>Program umożliwia nie tylko zwykłe kopiowanie pojedynczych tekstur między dwoma ich pakietami, ale również potrafi wyciągać je bezpośrednio z etapów gry. Do dyspozycji użytkownika oddane zostało kilkadziesiąt efektów graficznych oraz narzędzi do korekcji grafiki.</p>
<p>W latach swojej świetności (rok 2002) posiadał całkiem spore grono użytkowników zarówno w Polsce jak i na świecie, gdzie społeczność skupiona wokoło tworzenia poziomów była bardzo rozwinięta.</p>
<h4>Analizator WLAN</h4>
<p>Aplikacja której zadaniem było „podpinanie” się do programu zarządzającego kartą sieci bezprzewodowej i wyciąganie aktualnej siły sygnału.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/05/awlan_01.png"><img class="alignnone size-medium wp-image-365" title="Analizator WLAN" src="http://www.bbproject.net/wp-content/uploads/2010/05/awlan_01-256x155.png" alt="" width="256" height="155" /></a> <a href="http://www.bbproject.net/wp-content/uploads/2010/05/awlan_02.png"><img class="alignnone size-medium wp-image-366" title="Analizator WLAN" src="http://www.bbproject.net/wp-content/uploads/2010/05/awlan_02-256x155.png" alt="" width="256" height="155" /></a></p>
<p style="text-align: center;">
<p>Analizator WLAN przedstawiał siłę sygnału w postaci ładnego wykresu, ale co najważniejsze, umożliwiał ustawienie alarmu dźwiękowego w sytuacji w której poziom sygnału wzrastał powyżej określonej wartości (plus ew. warunek czasu przejścia pakietu). Po co to? Używałem go podczas manewrowania z anteną sieci ad-hoc. Jako że antena była w znacznej odległości od komputera (na dachu), nie byłem w stanie optycznie stwierdzić kiedy „trafiłem” w punkt odbioru <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' /> . Stąd też pomysł na taką aplikację.</p>
<p>Aplikacja obsługiwała kilka, najpopularniejszych na owe czasy, programów narzędziowych do kart WLAN.</p>
<h4>Podsumowanie</h4>
<p>To nie koniec, był jeszcze inne twory, jak program do optymalizacji rozmiaru poziomów do gry Tomb Raider, konwerter leveli Tomb Raider do Soldier of Fortune II a na edytorze zapisanych stanów gry skończywszy.</p>
<p>Większość kręciła się wokoło modyfikacji takiej czy innej gry. Zapał programistyczny przekłada się na inne dziedziny, stąd też moje duże zainteresowanie tworzeniem etapów czy przeróżnych modyfikacji a w związku z tym narzędzi wspomagających.</p>
<p>W każdej jednak sytuacji sprawdziło się powiedzenie: „potrzeba matką wynalazków” <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_smile.png' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/moje-najdziwniejsze-programy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optymalizacja działań matematycznych w Delphi</title>
		<link>http://www.bbproject.net/2010/06/optymalizacja-dzialan-matematycznych-w-delphi/</link>
		<comments>http://www.bbproject.net/2010/06/optymalizacja-dzialan-matematycznych-w-delphi/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 05:29:36 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[delphi]]></category>
		<category><![CDATA[optymalizacja]]></category>
		<category><![CDATA[potęgowanie]]></category>
		<category><![CDATA[power]]></category>
		<category><![CDATA[sqr]]></category>
		<category><![CDATA[sqrt]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=353</guid>
		<description><![CDATA[Mnożenie, potęgowanie, pierwiastkowanie, wszystkie te operacje trwają ułamek sekundy na obecnych maszynach, ułamek sekundy do czasu gdy nie musimy wykonać tysięcy czy miliony iteracji danego działania. W takiej sytuacji odpowiedni dobór użytych funkcji może mieć duży wpływ na czas trwania całej operacji. W tym wpisie pokaże jakich błędów unikać pisząc w Delphi skomplikowane działania, aby [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-354 alignleft" title="Sqrt" src="http://www.bbproject.net/wp-content/uploads/2010/05/sqrt-160x87.png" alt="" width="160" height="87" />Mnożenie, potęgowanie, pierwiastkowanie, wszystkie te operacje trwają ułamek sekundy na obecnych maszynach, ułamek sekundy do czasu gdy nie musimy wykonać tysięcy czy miliony iteracji danego działania. W takiej sytuacji odpowiedni dobór użytych funkcji może mieć duży wpływ na czas trwania całej operacji.</p>
<p>W tym wpisie pokaże jakich błędów unikać pisząc w Delphi skomplikowane działania, aby nie marnować czasu użytkownika końcowego naszej aplikacji. Do dzieła!</p>
<p><span id="more-353"></span></p>
<h4>Stałe</h4>
<p>Zacznijmy od rzeczy najprostszej, wykluczania operacji których wynik jest zawsze taki sam. Głupota? Prosty przykład, obliczenia w których występuje liczba PI podniesiona do kwadratu. Wartość tego wyrażenia jest zawsze taka sama, gdyż PI wynosi zawsze tyle samo.</p>
<pre class="brush: delphi">procedure TForm1.Button1Click(Sender: TObject);
var
  k: Double;
begin
  k := GetTickCount * Sqr(PI) + 4;
end;</pre>
<p>W takiej sytuacji zamiast podnosić 3,14 za każdym razem do kwadratu, najlepiej wyliczyć sobie tą wartość chociażby na systemowym kalkulatorze i zadeklarować nową stałą. Rzecz jasna, jak wcześniej wspomniałem, ma to sens tylko gdy wykonujemy naprawdę dużo obliczeń &#8211; inaczej jest to sztuka dla sztuki.</p>
<pre class="brush: delphi">procedure TForm1.Button1Click(Sender: TObject);
const
  PI_2 = 9.8696044010893586188344909998762;
var
  k: Double;
begin
  k := GetTickCount * PI_2 + 4;
end;
</pre>
<h4>Unikanie dzielenia</h4>
<p>Swego czasu, wyczytałem iż lepiej jest przykładowo mnożyć razy 0,5 niż dzielić przez 2. Próbowałem potwierdzić to różnymi testami, ale za każdym razem dostawałem identyczny wynik. Strzelam że obecne procesory lepiej sobie radzą z dzieleniem w stosunku do mnożenia liczb zmiennoprzecinkowych niż kiedyś.</p>
<p>Dlatego też porada ta nie ma dzisiaj większego sensu, ale warto o niej pamiętać.</p>
<h4>Power, Sqr, Sqrt</h4>
<p>Funkcja <em>Power</em>, analogicznie do swojej nazwy kryje w sobie dużą moc <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' /> , nie mniej, należy się jej wystrzegać jak ognia. <em>Power</em> przyjmuje 2 argumenty, pierwszym jest liczba którą chcemy podnieść do potęgi, a drugim wykładnik potęgi.</p>
<p>Daje to ogromne możliwości z uwagi na fakt iż jest to liczba zmiennoprzecinkowa. Nie mniej, w sytuacji w której podnosimy liczbę do potęgi drugiej, bądź wyciągamy pierwiastek stopnia drugiego bezwzględnie stosujmy funkcje <em>Sqr</em> oraz <em>Sqrt</em>. Pierwiastek 4 stopnia? Zagnieżdżone dwie funkcję <em>Sqrt</em> będą na pewno szybsze niż jeden <em>Power</em>.</p>
<p>Oto małe porównanie szybkości wykonywania się poszczególnych operacji:</p>
<table>
<tbody>
<tr>
<th>Funkcja</th>
<th>Czas wykonania</th>
</tr>
<tr>
<td>Sqr(x)</td>
<td>0,0547ms</td>
</tr>
<tr>
<td>Sqrt(x)</td>
<td>0,6396ms</td>
</tr>
<tr>
<td>Power(x, 2)</td>
<td>0,8642ms</td>
</tr>
<tr>
<td>Power(x, 0.5)</td>
<td>3,9702ms</td>
</tr>
</tbody>
</table>
<p>I na koniec wynik testu z pierwiastkiem czwartego stopnia:</p>
<table>
<tbody>
<tr>
<th>Funkcja</th>
<th>Czas wykonania</th>
</tr>
<tr>
<td>Sqrt(Sqrt(x))</td>
<td>1,7472ms</td>
</tr>
<tr>
<td>Power(x, 0.25)</td>
<td>4,5896ms</td>
</tr>
</tbody>
</table>
<h4>Podsumowanie</h4>
<p>Liczę że te kilka porad pozwoli Wam na optymalizację wielokrotnie wykonywanych działań matematycznych w Delphi. Oczywiście należy też pamiętać o doprowadzeniu danego równania do jak najprostszej postaci przed przystąpieniem do implementacji w programie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/06/optymalizacja-dzialan-matematycznych-w-delphi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facebook&#8217;owy model promocji gier</title>
		<link>http://www.bbproject.net/2010/05/facebookowy-model-promocji-gier/</link>
		<comments>http://www.bbproject.net/2010/05/facebookowy-model-promocji-gier/#comments</comments>
		<pubDate>Wed, 26 May 2010 11:41:50 +0000</pubDate>
		<dc:creator>M@ster</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Rozrywka]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[farmville]]></category>
		<category><![CDATA[gra]]></category>
		<category><![CDATA[promocja]]></category>
		<category><![CDATA[social city]]></category>

		<guid isPermaLink="false">http://www.bbproject.net/?p=348</guid>
		<description><![CDATA[Ostatnimi czasy kieruje swoje moce twórcze bardziej w kierunku aplikacji a niżeli gier, nie mniej chciałbym przedstawić, a w zasadzie opisać, bardzo ciekawy model promocji gier jaki zastosowano w portalu społecznościowym Facebook. Starając się latami wypromować swój projekt Enemy Flag, po tym co zobaczyłem na 2 przykładowych grach w tym portalu, przeszła mi przez głowę [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-349" title="FarmVille" src="http://www.bbproject.net/wp-content/uploads/2010/05/farmville_logo-160x60.jpg" alt="" width="160" height="60" />Ostatnimi czasy kieruje swoje moce twórcze bardziej w kierunku aplikacji a niżeli gier, nie mniej chciałbym przedstawić, a w zasadzie opisać, bardzo ciekawy model promocji gier jaki zastosowano w portalu społecznościowym <a href="http://www.facebook.com">Facebook</a>.</p>
<p>Starając się latami wypromować swój projekt <a href="http://www.enemyflag.net">Enemy Flag</a>, po tym co zobaczyłem na 2 przykładowych grach w tym portalu, przeszła mi przez głowę tylko jedna myśl: „czemu wcześniej na to nie wpadłem?”.</p>
<p><span id="more-348"></span>Założenie jest bardzo proste, <strong>pozyskiwanie nowych graczy jest warunkiem do rozwoju w rozgrywce</strong>. Weźmy na przykładzie bardzo popularnego FarmVille czy Social City. W celu powiększenia swojego terytorium, musimy posiadać „sąsiadów”, których werbujemy wysyłając zaproszenia do znajomych na Facebook&#8217;u. Czyż to nie jest genialne?</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/05/farmville.jpg"><img class="alignnone size-large wp-image-350" title="FarmVille" src="http://www.bbproject.net/wp-content/uploads/2010/05/farmville-512x404.jpg" alt="" width="512" height="404" /></a><br />
<em>FarmVille</em></p>
<p>Drugim czynnikiem, podnoszącym zyski autorów gry, jest wirtualna, dodatkowa waluta którą zdobywamy za każdy następny poziom jaki osiągniemy, bądź kupując za żywą gotówkę. Osobiście nie przepadam za tego typu rozwiązaniami, gdyż prawdę mówiąc sprowadza się to do sytuacji w której gracz z kasą po prostu zyskuje przewagę. Mechanizm ten wiąże się z w/w sposobem pozyskiwania sąsiadów. Powiększenie terenu gry następuje albo przy pomocy werbowania nowych graczy lub zakupu jej za wirtualną walutę &#8211; autorzy gry zyskują albo korzyści finansowe, albo nowych graczy.</p>
<p style="text-align: center;"><a href="http://www.bbproject.net/wp-content/uploads/2010/05/socialcity.jpg"><img class="alignnone size-large wp-image-351" title="Social City" src="http://www.bbproject.net/wp-content/uploads/2010/05/socialcity-512x437.jpg" alt="" width="512" height="437" /></a><br />
<em>Social City</em></p>
<p>Zastosowanie tego typu mechanizmu (z umiarem) ma całkiem wymierne korzyści zarówno dla twórcy gry, jak i samych graczy. Rzecz jasna aby to wszystko się kręciło, gra musi się podobać, inaczej możemy zapomnieć o polecaniu jej przez graczy.</p>
<p>Paradoksalnie, sam ten wpis jest spełnieniem jednej z woli twórców obu gier <img src='http://www.bbproject.net/wp-includes/images/smilies/icon_wink.png' alt=';)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bbproject.net/2010/05/facebookowy-model-promocji-gier/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
