<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>tom000.info - The Personal Website</title><link>http://tom000.info/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tom000info" /><description>Blog - Ostatnie wpisy</description><language>en</language><managingEditor>noemail@noemail.org (Tomasz Chudyk)</managingEditor><lastBuildDate>Fri, 11 Nov 2011 04:26:10 PST</lastBuildDate><feedburner:info uri="tom000info" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noemail@noemail.org</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>Blog - Ostatnie wpisy</itunes:subtitle><item><title>Ukrywanie adresu linku</title><link>http://feedproxy.google.com/~r/tom000info/~3/MtBfStc5JkM/ukrywanie-adresu-linku.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" /><pubDate>Fri, 11 Nov 2011 04:26:10 PST</pubDate><guid isPermaLink="false">http://tom000.info/blog/ukrywanie-adresu-linku.html</guid><description>&lt;p&gt;
	&lt;img alt="JavaScript" src="http://tom000.info/share/articles/253/js.png" style="width: 90px; height: 90px; border-width: 1px; border-style: solid; float: left; margin: 3px 5px;" /&gt;Ciężko mi było dopasować do tego tematu tytuł, ale chciałem dzisiaj opisać małą sztuczkę polegająca na takiej podmianie docelowego adresu, że osoba odwiedzająca stronę, nie jest świadoma tak naprawdę na jaką stronę zostanie przeniesiona po kliknięciu w dany link. Zacznę od zaprezentowania &lt;b&gt;&lt;a href="http://tom000.info/share/articles/253/przykladLinkow.html" target="_blank"&gt;demo&lt;/a&gt;&lt;/b&gt;, tego prostego skryptu.&lt;br /&gt;
	Poniżej znajduje się kod JavaScript/HTML, kt&amp;oacute;ry pozwala &amp;bdquo;ukryć&amp;rdquo; docelowy adres linku:&lt;/p&gt;
&lt;pre class="javascriptCode"&gt;
function LinkMonitor(links) {
&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; this.monitorURL = &amp;#39;http://test.com/?url=&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var scope = this;
&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(var i=0; i&amp;lt;links.length; ++i) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; links[i].onmousedown = function(event) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scope.changeLink(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; links[i].onmouseup = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scope.clearLink(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; links[i].onmouseout = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scope.clearLink(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(LinkMonitor.prototype_initialized != &amp;#39;undefined&amp;#39;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinkMonitor.prototype.changeLink = function(a) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a.href = this.monitorURL + a.href;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinkMonitor.prototype.clearLink = function(a) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setTimeout(function(domLink) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domLink.href = domLink.href.replace(scope.monitorURL,&amp;#39;&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, 100, a
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}

window.onload = function() {
&amp;nbsp;&amp;nbsp;&amp;nbsp; new LinkMonitor(document.links);
}
&lt;/pre&gt;
&lt;p&gt;
	Idea działania jest bardzo prosta. Po załadowaniu drzewa DOM przekazujemy tablicę z linkami, kt&amp;oacute;rych kliknięcia mają być monitorowane. Obserwowane są zdarzenia wciśnięcia i puszczenia klawisza myszy. Aby obsłużyć prawy przycisk myszy (np. kopiowanie adresu linku) obserwowane jest r&amp;oacute;wnież zdarzenie &amp;bdquo;wyjścia&amp;rdquo; poza obszar linku. Jeżeli kopiowany adres ma być jednak oryginalny, a nie ten podmieniony to można zrezygnować ze zdarzenia &amp;bdquo;&lt;code&gt;mouseout&lt;/code&gt;&amp;rdquo; i przy &amp;bdquo;&lt;code&gt;mousedown&lt;/code&gt;&amp;rdquo; wykrywać kliknięcia przycisk&amp;oacute;w &lt;code&gt;event.button==0&lt;/code&gt; i &lt;code&gt;event.button==1&lt;/code&gt;. Ze względu, że zdarzenie &amp;#39;mouseup&amp;#39; jest wcześniej niż &amp;#39;&lt;code&gt;click&lt;/code&gt;&amp;#39; na kt&amp;oacute;rym następuje wywołanie linku, dodane jest op&amp;oacute;źnienie (100ms) przed przywr&amp;oacute;ceniem oryginalnego linku.&lt;br /&gt;
	&lt;br /&gt;
	Jak to wykorzystać? Opr&amp;oacute;cz zwykłego oszukiwania można przede wszystkim wykorzystać to do monitorowania aktywności użytkownik&amp;oacute;w &amp;ndash; np. kliknięć w linki zewnętrzne na stronie (robi tak. m.in. Google i Facebook), tak żeby użytkownik nie widział że jest monitorowany.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tom000info/~4/MtBfStc5JkM" height="1" width="1"/&gt;</description><feedburner:origLink>http://tom000.info/blog/ukrywanie-adresu-linku.html</feedburner:origLink></item><item><title>Własny hosting repozytorium GIT</title><link>http://feedproxy.google.com/~r/tom000info/~3/TxwvH_J2GfI/wasny-hosting-repozytorium-git.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" /><pubDate>Thu, 13 Oct 2011 12:40:44 PDT</pubDate><guid isPermaLink="false">http://tom000.info/blog/wasny-hosting-repozytorium-git.html</guid><description>&lt;p&gt;
	&lt;img alt="" src="http://tom000.info/share/articles/252/git.png" style="width: 100px; height: 100px; float: left; margin: 5px; border-width: 1px; border-style: solid;" /&gt;Rozproszona struktura systemu GIT umożliwia bardzo łatwe tworzenie zdalnych repozytori&amp;oacute;w &amp;nbsp;kodu, z kt&amp;oacute;rym można synchronizować swoje lokalne repozytoria. Nie ma nawet potrzeby w tym celu stawiania i konfiguracji serwera HTTP do komunikacji z repozytorium, czy wymogu jakiegoś dodatkowego specjalnego oprogramowania. Wystarczy serwer z zainstalowanym GITem, oraz dostęp do tego serwera przez protok&amp;oacute;ł SSH.&lt;/p&gt;
&lt;p&gt;
	Zdalne repozytorium komunikujące się przez protok&amp;oacute;ł SSH można utworzyć na kilka sposob&amp;oacute;w. Jednym z nich jest utworzenie nowego czystego repozytorium na zdalnym serwerze posługując się komendą &amp;#39;&lt;i&gt;git init&lt;/i&gt;&amp;#39; (znajdując się w folderze gdzie będą przechowywane jego pliki). Innym rozwiązaniem jest skopiowanie na serwer istniejącego repozytorium nie tracąc przy tym historii jego aktualnych commit&amp;oacute;w. Skopiować można ręcznie &amp;ndash; kopiując folder, lub posługując się komendą &amp;#39;&lt;i&gt;git clone&lt;/i&gt;&amp;#39;.&lt;/p&gt;
&lt;p&gt;
	Nowe repozytorium trzeba przekształcić w repozytorium publiczne, czyli przechowujące tylko wysłane do niego obiekty &amp;ndash; bez możliwości lokalnej modyfikacji plik&amp;oacute;w. Zrobić to można za pomocą polecenia:&amp;nbsp;&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
git config --bool core.bare true&lt;/pre&gt;
&lt;p&gt;
	lub, po prostu edytując plik konfiguracyjny w folderze repozytorium:&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
vim .git/config&lt;/pre&gt;
&lt;p&gt;
	i dodając flagę opcję &lt;span style="font-family:courier new,courier,monospace;"&gt;bare = true&lt;/span&gt; w grupie &lt;span style="font-family:courier new,courier,monospace;"&gt;[core]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
	Jeżeli w folderze z repozytorium zdalnego znajdują się jeszcze jakieś pliki, lub foldery poza samym &amp;#39;&lt;i&gt;.git&lt;/i&gt;&amp;#39;, można je usunąć &amp;ndash; nie będą już potrzebne (właściwe repozytorium znajduje się właśnie w folderze &amp;#39;&lt;i&gt;.git&lt;/i&gt;&amp;#39; i tam też są przechowywane wszystkie zatwierdzane do repozytorium zmiany).&lt;/p&gt;
&lt;p&gt;
	Teraz pozostaje już tylko powiązanie lokalnego repozytorium ze zdalnym, czyli zapisanie informacji w tym lokalnym o ścieżce do zdalnego repozytorium. Służy do tego polecenie:&amp;nbsp;&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
git remote add origin ssh://remote-srv.pl/home/my_repo&lt;/pre&gt;
&lt;p&gt;
	gdzie origin oznacza nazwę zdalnego repozytorium (oczywiście można wybrać dowolną).&lt;/p&gt;
&lt;p&gt;
	Aby wysłać zatwierdzone zmiany z lokalnego repozytorium do zdalnego można to zrobić poleceniem:&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
git push origin master&lt;/pre&gt;
&lt;p&gt;
	Origin jest zapamiętaną nazwą zdalnego repozytorium, master to natomiast gł&amp;oacute;wna gałąź repozytorium.&lt;/p&gt;
&lt;p&gt;
	Aby pobrać zmiany ze zdalnego repozytorium (co będzie nieraz konieczne, jeżeli ze zdalnego repozytorium korzysta wielu użytkownik&amp;oacute;w) można użyć polecenia:&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
git pull origin master&lt;/pre&gt;
&lt;p&gt;
	Znaczenie parametr&amp;oacute;w takie samo jak w przypadku polecenia push.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tom000info/~4/TxwvH_J2GfI" height="1" width="1"/&gt;</description><feedburner:origLink>http://tom000.info/blog/wasny-hosting-repozytorium-git.html</feedburner:origLink></item><item><title>Mniej technicznie</title><link>http://feedproxy.google.com/~r/tom000info/~3/fQ1SxjttnLU/mniej-technicznie.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" /><pubDate>Sat, 01 Oct 2011 08:24:56 PDT</pubDate><guid isPermaLink="false">http://tom000.info/blog/mniej-technicznie.html</guid><description>&lt;p&gt;
	&lt;img alt="tom000 - logo" src="http://tom000.info/share/articles/179/tom000_logo.png" style="margin-left: 5px; margin-right: 5px; margin-top: 5px; margin-bottom: 5px; float: left; width: 90px; height: 90px; " /&gt;Zauważyłem, ze nie bardzo lubię się dzielić jakimiś newsami odnośnie mojego życia prywatnego i będzie to pierwsza (lub jedna z pierwszych) z takich notek na tej stronie/blogu.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
	Ostatnio dużo się pozmieniało w moim życiu: zmiana miejsca zamieszkania, zmiana pracy, zmiana stanu cywilnego. W międzyczasie zdarzały się i będą się zdarzać dłuższe podr&amp;oacute;że. Zauważyłem, że podr&amp;oacute;ż np. pociągiem, jest dobrym momentem, żeby pomyśleć o nowym wpisie na stronę (w końcu w trakcie podroży mam kilka mało produktywnych godzin). Tak wiec powstało w moim telefonie kilka notek, kt&amp;oacute;re pewnie jak dopracuję, pojawią się na stronie.&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Mimo małej aktywności we wpisach i tak chcę poinformować, ze strona moja ciągle istnieje i nie planuję jej likwidować, a notki mimo wszystko będą się pojawiać, choć za pewne jak to do tej pory było w nieregularnych odstępach czasu.&lt;/div&gt;
&lt;div&gt;
	&lt;p style="text-align: center; "&gt;
		&lt;img alt="" src="http://tom000.info/share/articles/251/2890706354_7b38fc1268.jpg" style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; margin-left: 5px; margin-right: 5px; margin-top: 5px; margin-bottom: 5px; width: 500px; height: 220px; " /&gt;&lt;br /&gt;
		&lt;span style="font-size: 10px; "&gt;&lt;i&gt;foto by&amp;nbsp;&lt;a href="http://www.flickr.com/photos/mariareyesmcdavis/"&gt;Maria Reyes-McDavis&lt;/a&gt;&amp;nbsp;na licencji&amp;nbsp;&lt;a href="http://creativecommons.org/licenses/by/2.0/deed.en"&gt;CC&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
	&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Z rzeczy bardziej technicznych - ostatnio przepisałem na nowo silnik bloga. W tej chwili oparty jest na ZendFramework, wcześniej był na Symfony (jeszcze w wersji 1.2). Z punku widzenia czytelnika zmian nie jest dużo - od strony technicznej otworzyłem sobie bramkę do wygodniejszej rozbudowy i testowania własnych rozwiązań. Zmieniłem r&amp;oacute;wnież hosting na serwer VPS - utrzymanie jest trochę droższe, ale mam większe możliwości konfiguracji i uruchamiania usług.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
	Odnośnie mojego software&amp;#39;u, to tez mam trochę plan&amp;oacute;w. Mam już od dłuższego czasu przygotowaną nowszą wersję odtwarzacza jMPD, choć jeszcze nie do końca sprawdzoną. Planuję też zmienić silnik w Calummie z Xine na inny (prawdopodobnie VLC), ale na to potrzebuje już większej ilości wolnego czasu.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/tom000info/~4/fQ1SxjttnLU" height="1" width="1"/&gt;</description><feedburner:origLink>http://tom000.info/blog/mniej-technicznie.html</feedburner:origLink></item><item><title>Operatory bitowe</title><link>http://feedproxy.google.com/~r/tom000info/~3/EEPlnleLC9o/operatory-bitowe.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" /><pubDate>Sun, 01 May 2011 11:53:00 PDT</pubDate><guid isPermaLink="false">http://tom000.info/blog/operatory-bitowe.html</guid><description>&lt;p&gt;
	Dla programist&amp;oacute;w (gł&amp;oacute;wnie tych początkujących) operatory bitowe często stanowią problem ich zrozumienia i wykorzystania. Dlatego też postaram się tutaj w skr&amp;oacute;cie pokazać na czym to wszystko polega.&lt;/p&gt;
&lt;p&gt;
	Operatory bitowe w większości język&amp;oacute;w wysokiego poziomu wyglądają raczej podobnie. Należą do nich: &amp;amp; (AND), | (OR), ~ (NOT), ^ (XOR), &amp;lt;&amp;lt; (przesunięcie w lewo), &amp;gt;&amp;gt; (przesunięcie w prawo).&lt;/p&gt;
&lt;p&gt;
	Jak nazwa wskazuje &amp;ndash; w operatorach bitowych operuje się bezpośrednio na bitach, więc do ich wykorzystania niezbędna będzie umiejętność posługiwania się systemem binarnym.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;
	Przesunięcia&lt;/h2&gt;
&lt;p&gt;
	Przesunięcia bitowe polegają po prostu na przesunięciu bit&amp;oacute;w o podaną liczbę pozycji. Dla przykładu wybierzmy liczbę 5. W systemie binarnym będzie ona zapisana jako (000101). W wyniku jej przesunięcia o wskazaną liczbę bit&amp;oacute;w otrzymamy wartości:&lt;/p&gt;
&lt;table class="table"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;
				Liczba&lt;/th&gt;
			&lt;th&gt;
				Postać binarna&lt;/th&gt;
			&lt;th&gt;
				Operacja&lt;/th&gt;
			&lt;th&gt;
				Postać binarna po operacji&lt;/th&gt;
			&lt;th&gt;
				Wynik&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				5&lt;/td&gt;
			&lt;td&gt;
				(000101)&lt;/td&gt;
			&lt;td&gt;
				5 &amp;lt;&amp;lt; 1&lt;/td&gt;
			&lt;td&gt;
				(001010)&lt;/td&gt;
			&lt;td&gt;
				10&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				5&lt;/td&gt;
			&lt;td&gt;
				(000101)&lt;/td&gt;
			&lt;td&gt;
				5 &amp;lt;&amp;lt; 3&lt;/td&gt;
			&lt;td&gt;
				(101000)&lt;/td&gt;
			&lt;td&gt;
				40&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				5&lt;/td&gt;
			&lt;td&gt;
				(000101)&lt;/td&gt;
			&lt;td&gt;
				5 &amp;gt;&amp;gt; 1&lt;/td&gt;
			&lt;td&gt;
				(000010)&lt;/td&gt;
			&lt;td&gt;
				2&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;
	Łączenie liczb&lt;/h2&gt;
&lt;p&gt;
	Przy pomocy operator&amp;oacute;w &amp;amp;, |, ^ możemy połączyć ze sobą kilka liczb por&amp;oacute;wnując ze sobą ich kolejne bity. Najłatwiej można to zrozumieć patrząc na poniższą tabelkę:&lt;/p&gt;
&lt;table class="table"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;
				Liczby&lt;/th&gt;
			&lt;th&gt;
				Wynik dla &amp;amp; (AND)&lt;/th&gt;
			&lt;th&gt;
				Wynik dla | (OR)&lt;/th&gt;
			&lt;th&gt;
				Wynik dla ^ (XOR)&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				5 (0101) i 3 (0011)&lt;/td&gt;
			&lt;td&gt;
				1 (0001)&lt;/td&gt;
			&lt;td&gt;
				7 (0111)&lt;/td&gt;
			&lt;td&gt;
				6 (0110)&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				9 (1001) i 4 (0100)&lt;/td&gt;
			&lt;td&gt;
				0 (0000)&lt;/td&gt;
			&lt;td&gt;
				13 (1101)&lt;/td&gt;
			&lt;td&gt;
				13 (1101)&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;
				3 (0011) i 1 (0001)&lt;/td&gt;
			&lt;td&gt;
				1 (0001)&lt;/td&gt;
			&lt;td&gt;
				3 (0011)&lt;/td&gt;
			&lt;td&gt;
				2 (0010)&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
	&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;
	Jak to wykorzystać?&lt;/h2&gt;
&lt;p&gt;
	Operacje bitowe można wykorzystać np. w celu przekazania do funkcji, lub przechowania w bazie wielu informacji typu prawda/fałsz w jednej zmiennej, za pomocą wcześniej przygotowanych flag/mask. Flagi (zapisane np. w postaci binarnej, &amp;oacute;semkowej, heksadecymalnej) przekazujemy tworząc nową liczbę przy pomocy operatora |. Następnie sprawdzamy wystąpienie danej flagi w tej liczbie operatorem &amp;amp;. Sprawa jest dość prosta i żeby za dużo nie tłumaczyć wystarczy spojrzeć na kr&amp;oacute;tki poniższy kod i zwr&amp;oacute;cone wyniki.&lt;/p&gt;
&lt;pre class="javaCode"&gt;
class BityTest {
    
    final public static int FLAG1 = 0001;
    final public static int FLAG2 = 0010;
    final public static int FLAG3 = 0100;
    
    public static void main(String[] args){
        parametersTest(FLAG1);
        parametersTest(FLAG1 | FLAG3);
        parametersTest(FLAG1 | FLAG3 | FLAG2);
    }
    
    public static void parametersTest(int flags){
        System.out.print(&amp;quot;przekazane flagi: &amp;quot;);
        if((flags &amp;amp; FLAG1) == FLAG1)
            System.out.print(&amp;quot;FLAG1 &amp;quot;);
        if((flags &amp;amp; FLAG2) == FLAG2)
            System.out.print(&amp;quot;FLAG2 &amp;quot;);
        if((flags &amp;amp; FLAG3) == FLAG3)
            System.out.print(&amp;quot;FLAG3 &amp;quot;);
    }
}

&lt;/pre&gt;
&lt;p&gt;
	Wynik:&lt;/p&gt;
&lt;pre class="htmlCode"&gt;
przekazane flagi: FLAG1  
przekazane flagi: FLAG1 FLAG3  
przekazane flagi: FLAG1 FLAG2 FLAG3&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/tom000info/~4/EEPlnleLC9o" height="1" width="1"/&gt;</description><feedburner:origLink>http://tom000.info/blog/operatory-bitowe.html</feedburner:origLink></item><item><title>Synchronizacja zakładek z Xmarks</title><link>http://feedproxy.google.com/~r/tom000info/~3/7Z9Dn1qppHo/synchronizacja-zakladek-z-xmarks.html</link><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Tomasz Chudyk</dc:creator><pubDate>Sat, 26 Feb 2011 10:44:00 PST</pubDate><guid isPermaLink="false">http://tom000.info/blog/synchronizacja-zakladek-z-xmarks.html</guid><description>&lt;p&gt;Jednym z gł&amp;oacute;wnych problem&amp;oacute;w pracy na wielu komputerach jest synchronizacja danych między nimi. Od jakiegoś czasu powstaje coraz więcej narzędzi pomagających w tym procesie. Korzystam w tej chwili z kilku tego typu narzędzi. Jednym z nich jest &lt;a title="Dropbox - synchronizacja plik&amp;oacute;w" href="http://db.tt/epuEn5D"&gt;Dropbox&lt;/a&gt;, innym właśnie &lt;a title="Synchronizacja zakładek" href="http://www.xmarks.com/"&gt;Xmarks&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Xmarks jest narzędziem do synchronizacji zakładek między komputerami i r&amp;oacute;żnymi przeglądarkami. W tej chwili obsługuje synchronizację z Firefoxem, IE, Chromem i Safari. Wersja premium ułatwia r&amp;oacute;wnież dostęp do zakładek na urządzeniach mobilnych.&lt;br /&gt;&lt;br /&gt;Dodatki wydane przez Xmarks bardzo dobrze integrują się przeglądarkami &amp;ndash; zakładki nie są wyświetlane na osobnej stronie (jak np. w przypadku &lt;a title="Diigo" href="http://www.diigo.com/"&gt;Diigo&lt;/a&gt;), lub w osobnym specjalnym panelu (&lt;a title="Delicious" href="http://www.delicious.com/"&gt;Delicious&lt;/a&gt;), tylko w menu/panelu zakładek danej przeglądarki. Jeżeli w danym momencie nie mamy dostępu do przeglądarki z zainstalowanym dodatkiem synchronizującym, możemy zawsze skorzystać z &lt;a href="https://my.xmarks.com/"&gt;wersji online&lt;/a&gt; naszych zakładek, logując się na stronie producenta &amp;ndash; przeglądanie zakładek jest niemal tak samo wygodne jak w przeglądarce (zgrupowane w utworzone przez nas kategorie, z poprzypisywanymi tagami). &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="http://tom000.info/./../../share/articles/249/xmarks.png" alt="Xmarks - przeglądanie online" width="500" height="262" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;em&gt;Przeglądanie zakładek online.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Wszystkie gromadzone przez nas zakładki są prywatne &amp;ndash; widoczne tylko dla nas, jeżeli istnieje potrzeba podzielenia się danym katalogiem zakładek, możemy go udostępnić w postaci kanału RSS, lub strony WWW.&lt;br /&gt;&lt;br /&gt;Opr&amp;oacute;cz synchronizacji zakładek Xmarks pozwala r&amp;oacute;wnież na synchronizację otwartych kart, czy haseł pamiętanych w przeglądarkach. Zachęcam do przetestowania.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tom000info/~4/7Z9Dn1qppHo" height="1" width="1"/&gt;</description><feedburner:origLink>http://tom000.info/blog/synchronizacja-zakladek-z-xmarks.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>

