<?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>Mateusz Leszek Solecki</title>
	<atom:link href="http://mateusz-solecki.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://mateusz-solecki.pl</link>
	<description>blog, portfolio, programowanie, php, html, css, jquery, tworzenie stron www, elbląg, gdańsk, trójmiasto, sopot, zend framework, xsl, html5, css3, frameworki</description>
	<lastBuildDate>Fri, 18 May 2012 19:47:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Nasz własny GA, czyli jak sprawdzić z jakiego słowa kluczowego user trafił na nasza stronę</title>
		<link>http://mateusz-solecki.pl/nasz-wlasny-ga-czyli-jak-sprawdzic-z-jakiego-slowa-kluczowego-user-trafil-na-nasza-strone/</link>
		<comments>http://mateusz-solecki.pl/nasz-wlasny-ga-czyli-jak-sprawdzic-z-jakiego-slowa-kluczowego-user-trafil-na-nasza-strone/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 07:43:03 +0000</pubDate>
		<dc:creator>Mateusz Solecki</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://mateusz-solecki.pl/?p=476</guid>
		<description><![CDATA[Google Analitycs przechowuje tylko 50 000 ostatnich słów kluczowych z jakich użytkownik trafił na naszą stronę. Co jeżeli potrzebujemy większej liczby słów? Wtedy możemy skorzystać z mniej więcej takiej funkcji: [crayon-4fb963f9620ab/] Jako $link możemy podać wartość tekstową np. [crayon-4fb963f963049/] lub jeżeli chcemy prowadzić logi automatycznie np zapisując słowo do bazy to gdzieś w headerze php [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Google Analitycs przechowuje tylko 50 000 ostatnich słów kluczowych z jakich użytkownik trafił na naszą stronę. Co jeżeli potrzebujemy większej liczby słów? Wtedy możemy skorzystać z mniej więcej takiej funkcji:<span id="more-476"></span></p>
<p style="text-align: justify;"></p><pre class="crayon-plain-tag">function find_keyword($link) { $thereferer = strtolower($link); if (strpos($thereferer, &quot;google.com&quot;) || strpos($thereferer, &quot;google.pl&quot;)) {

$a = substr($thereferer, strpos($thereferer, &quot;q=&quot;)); $a = substr($a, 2); if (strpos($a, &quot;&amp;&quot;)) {
$a = substr($a, 0, strpos($a, &quot;&amp;&quot;));
} return urldecode($a); } else { return false; } }</pre><p></p>
<p style="text-align: justify;">Jako <strong>$link</strong> możemy podać wartość tekstową np. </p><pre class="crayon-plain-tag">https://www.google.com/webhp?sourceid=chrome-instant&amp;amp;ix=seb&amp;amp;ie=UTF-8&amp;amp;ion=1#sclient=psy-ab&amp;amp;hl=pl&amp;amp;safe=off&amp;amp;site=webhp&amp;amp;source=hp&amp;amp;q=s%C5%82%C3%B3weczko&amp;amp;oq=&amp;amp;aq=&amp;amp;aqi=&amp;amp;aql=&amp;amp;gs_sm=&amp;amp;gs_upl=&amp;amp;gs_l=&amp;amp;pbx=1&amp;amp;fp=e9049c3591bbc8a6&amp;amp;ix=seb&amp;amp;ion=1&amp;amp;bav=on.2,or.r_gc.r_pw.,cf.osb&amp;amp;biw=1280&amp;amp;bih=899</pre><p></p>
<p style="text-align: justify;">lub jeżeli chcemy prowadzić logi automatycznie np zapisując słowo do bazy to gdzieś w headerze php dać jsko <strong>$link</strong> np. <strong>$_SERVER['HTTP_REFERER']</strong></p>
<p style="text-align: justify;">// EDIT</p>
<p style="text-align: justify;">Jednak znalazłem lepszy sposób na wydzielenie słowa kluczowego z linka:</p>
<p style="text-align: justify;"></p><pre class="crayon-plain-tag">if (!empty($_SERVER['REQUEST_URI']) &amp;&amp; strpos($thereferer, &quot;google.com&quot;) || strpos($thereferer, &quot;google.pl&quot;)) {

$arr = parse_url($thereferer);
parse_str($arr['query'], $data);
$keyword = (!empty($data['q']) &amp;&amp; $data['q'] != '') ? $data['q'] : null;

if ($keyword != null) {
 //KOD
}
}</pre><p></p>
]]></content:encoded>
			<wfw:commentRss>http://mateusz-solecki.pl/nasz-wlasny-ga-czyli-jak-sprawdzic-z-jakiego-slowa-kluczowego-user-trafil-na-nasza-strone/feed/</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Zaciemnianie / ukrywanie kodu</title>
		<link>http://mateusz-solecki.pl/zaciemnianie-ukrywanie-kodu/</link>
		<comments>http://mateusz-solecki.pl/zaciemnianie-ukrywanie-kodu/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 08:21:15 +0000</pubDate>
		<dc:creator>Mateusz Solecki</dc:creator>
				<category><![CDATA[HTML5 / XHTML]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mateusz-solecki.pl/?p=462</guid>
		<description><![CDATA[Czasami zachodzi taka potrzeba, że musimy coś wysłać klientowi na serwer ale nie chcemy żeby kod naszych starań (czy to HTML, JavaScript czy CSS) był za bardzo widoczny, bo np nie ufamy klientowi itp. Wtedy właśnie między innymi przydaje się zaciemnianie kodu. Aplikację z zaciemnionym kodem wynikowym możemy podesłać klientowi a po otrzymaniu wynagrodzenia przesyłamy [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img style="float: left; margin: 10px;" src="http://mateusz-solecki.pl/wp-content/uploads/2012/02/kodowanie.jpg" alt="" width="150" height="113" />Czasami zachodzi taka potrzeba, że musimy coś wysłać klientowi na serwer ale nie chcemy żeby kod naszych starań (czy to HTML, JavaScript czy CSS) był za bardzo widoczny, bo np nie ufamy klientowi itp. Wtedy właśnie między innymi przydaje się zaciemnianie kodu. Aplikację z zaciemnionym kodem wynikowym możemy podesłać klientowi a po otrzymaniu wynagrodzenia przesyłamy wersję oryginalną.<span id="more-462"></span></p>
<h3 style="text-align: justify;">#1 &#8211; JavaScript</h3>
<p style="text-align: justify;">Najłatwiejszym i najszybszym sposobem jest przeniesienie swojego kodu html/css do javascriptu (document.write) a potem zaciemnienie całego js&#8217;a. Wystarczy napisać dwie metody koder i dekoder:</p>
<p style="text-align: justify;">Funkcja do odkodowania zaciemnionego kodu:</p>
<p style="text-align: justify;"></p><pre class="crayon-plain-tag">eval(unescape(&quot;%66%75%6E%63%74%69%6F%6E%20%68%70%5F%64%28%73%29%7B%73%3D%75%6E%65%73%63%61%70%65%28%73%29%3B%76%61%72%20%6F%3D%22%22%3B%66%6F%72%28%69%3D%30%3B%69%3C%73%2E%6C%65%6E%67%74%68%3B%69%2B%2B%29%7B%63%3D%73%2E%63%68%61%72%43%6F%64%65%41%74%28%69%29%3B%69%66%28%63%3C%31%32%38%29%63%3D%63%5E%32%3B%6F%2B%3D%53%74%72%69%6E%67%2E%66%72%6F%6D%43%68%61%72%43%6F%64%65%28%63%29%7D%3B%64%6F%63%75%6D%65%6E%74%2E%77%72%69%74%65%28%6F%29%3B%7D&quot;));</pre><p></p>
<p style="text-align: justify;">Zakodowany kod HTML:</p>
<p style="text-align: justify;"></p><pre class="crayon-plain-tag">hp_d(&quot;&amp;gt;OGVC%22JVVR/GSWKT? Rpceoc %22AMLVGLV? Lm/Acajg &amp;lt;&amp;gt;OGVC%22LCOG? Pm`mvq %22AMLVGLV? LmKlfgz &amp;lt;&amp;gt;OGVC%22JVVR/GSWKT? Gzrkpgq %22AMLVGLV? /3 &amp;lt;&amp;gt;OGVC%22JVVR/GSWKT? KocegVmmn`cp %22AMLVGLV? Lm &amp;lt;&amp;gt;OGVC%22LCOG? OQQocpvVceqRpgtglvRcpqkle %22AMLVGLV? Vpwg &amp;lt; &amp;gt;vkvng-vkvng&amp;lt; &amp;gt;ogvc%22lcog? Fgqapkrvkml %22amlvglv? &nbsp;%22-&amp;lt; &amp;gt;ogvc%22lcog? Ig{umpfq %22amlvglv? &nbsp;%22-&amp;lt; &amp;gt;ogvc%22lcog? Pm`mvq %22amlvglv? klfgz.dmnnmu %22-&amp;lt; &amp;gt;ogvc%22lcog? amr{pkejv %22amlvglv? Uqxgnikg%22rpcuc%22xcqvpxgżmlg, %22-&amp;lt; &amp;gt;ogvc%22jvvr/gswkt? Amlvglv/Nclewceg %22amlvglv? rn %22-&amp;lt; &amp;gt;ogvc%22jvvr/gswkt? Amlvglv/v{rg %22amlvglv? vgzv-jvon9%22ajcpqgv?WVD/: %22-&amp;lt; &amp;gt;nkli%22pgn? qv{ngqjggv %22v{rg? vgzv-aqq %22jpgd? ,-ug`-qv{ng-pgqgv,aqq %22-&amp;lt; &amp;gt;nkli%22pgn? qv{ngqjggv %22v{rg? vgzv-aqq %22jpgd? ,-ug`-qv{ng-vgzv,aqq %22-&amp;lt; &amp;gt;nkli%22pgn? qv{ngqjggv %22v{rg? vgzv-aqq %22jpgd? ,-ug`-qv{ng-;42,aqq %22-&amp;lt; &amp;gt;nkli%22pgn? qv{ngqjggv %22v{rg? vgzv-aqq %22jpgd? ,-ug`-qv{ng-fgqkel,aqq %22ogfkc? cnn %22-&amp;lt; &amp;gt;#//Ykd%22nv%22KG%22:_&amp;lt; %22%22&amp;gt;nkli%22pgn? qv{ngqjggv %22v{rg? vgzv-aqq %22jpgd? ,-ug`-qv{ng-kg,aqq %22-&amp;lt; &amp;gt;#Yglfkd_//&amp;lt; &quot;);</pre><p></p>
<p style="text-align: justify;">Teraz omówmy jak to ugryźć.</p>
<ul style="text-align: justify;">
<li>w funkcji dekodującej korzystamy z dwóch wbudowanych funkcji: <em>unescape</em> oraz <em>eval</em>,</li>
<li>do funkcji <em>unescape</em> trafia zakodowany łańcuch z kodem JavaScript – wykonujemy tutaj dekodowanie i przekazujemy do funkcji <em>eval</em>,</li>
<li>eval zajmuje się wykonaniem odkodowanego kodu, co powoduje utworzeniem funkcji<em>hp_d</em>, która zajmuje się odkodowaniem kodu HTML/CSS,</li>
<li>do funkcji <em>hp_d</em> trafiają zaciemnione dane, natomiast zwracany jest już normalny kod HTML/CSS z wykorzystaniem <em>document.write</em></li>
</ul>
<p style="text-align: justify;">Wadą i zarazem zaletą tego rozwiązania jest prostota kodowania i dekodowania. Wystarczy przeanalizować sposób dekodowania kodu i przechwycić wynik. Poza tym <strong>Firebug</strong> czy <strong>Opera Dragonfly</strong> widzą kod, jaki trafia bezpośrednio do przeglądarki. Wniosek z tego, że bardzo łatwo można pobrać ten kod (jako już zdekodowany HTML/CSS). </p>
<p style="text-align: justify;">Kolejną wadą jest konieczność obsługi JavaScript, zwiększenie ilości kodu, konieczność dekodowania kodu w locie po stronie klienta, co może powodować chwilowe zawieszenie okna przeglądarki i inne.</p>
<p style="text-align: justify;">I choć powyższe wady nie byłyby do przyjęcia w prawdziwym systemie, to na nasze potrzeby są w zupełności wystarczające (należy powiadomić klienta o takiej sytuacji i wyjaśnić na jakiej przeglądarce zadziała prawidłowo).</p>
<h3 style="text-align: justify;">#1 &#8211; HTML/CSS</h3>
<p style="text-align: justify;">Jak wiadomo każdemu, <strong>HTML jest zestawem znaczników do opisu prezencji z wykorzystaniem XML</strong>. Fakt ten można wykorzystać w bardzo wymyślny i ciekawy sposób.</p>
<p style="text-align: justify;">Otóż można w całym dokumencie zastąpić wszystkie elementy HTML ich fałszywymi odpowiednikami.</p>
<p style="text-align: justify;">Zamiast:</p><pre class="crayon-plain-tag">&lt;/p&gt;
&lt;h1&gt;Nagł&oacute;wek strony&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;</pre><p></p>
<p style="text-align: justify;">wstawić:</p><pre class="crayon-plain-tag">Nagł&oacute;wek strony</pre><p></p>
<div style="text-align: justify;">A następnie w CSS:</div>
<div style="text-align: justify;"><span style="font-size: 11px; line-height: 16px;"><pre class="crayon-plain-tag">n1&nbsp;{ &nbsp;&nbsp;display:&nbsp;block;&nbsp; &nbsp;&nbsp;font-size:&nbsp;28px;}</pre></span></div>
<div style="text-align: justify;"> </div>
<p style="text-align: justify;">I tak dla każdego elementu strony. Na koniec powstałaby niezła papka w stylu:</p>
<p style="text-align: justify;"></p><pre class="crayon-plain-tag">&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&nbsp; &nbsp;&nbsp;&lt;br /&gt;&nbsp; &nbsp; &nbsp; &nbsp; Cześć:&nbsp;Admin&nbsp;|&nbsp;wyloguj się&lt;br /&gt;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&lt;br /&gt;&nbsp; &nbsp;&nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;</pre><p></p>
<p style="text-align: justify;">Oczywiście należałoby jeszcze dopisać do tego właściwe style CSS oraz przy pomocy JavaScript poprzypinać zdarzenia (np. element ll byłby linkiem, a url adresem -&gt; a href):</p>
<div style="text-align: justify;"><pre class="crayon-plain-tag">&lt;br /&gt; $(&quot;ll&quot;).click(function(e)&nbsp;{&lt;br /&gt; &nbsp; &nbsp;&nbsp;// cancel the default action (navigation) of the click&lt;br /&gt; &nbsp; &nbsp; e.preventDefault();&lt;br /&gt; &nbsp; &nbsp;&nbsp;// open link&nbsp; &nbsp; window.location.href&nbsp;=&nbsp;$(this).attr(&quot;url&quot;);&lt;br /&gt; });</pre></div>
<p style="text-align: justify;">Sposób ten jest nieco bardziej wymyślny i ciekawszy, choć dużo trudniejszy w implementacji. </p>
<p style="text-align: justify;">Główną zaletą takiego rozwiązania jest schowanie kodu przed narzędziami typu Firebug czy Opera Dragonfly</p>
<p style="text-align: justify;">Niestety to rozwiązanie ma kilka uporczywych wad, tj. :</p>
<ul>
<li style="text-align: justify;">konieczność pisania własnego narzędzia do takiego zamieniania kodu,</li>
<li style="text-align: justify;">kod nie będzie semantyczny i zgodny ze standardami <img src='http://mateusz-solecki.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> , co raczej nikogo nie będzie obchodzić na takim etapie pracy (w końcu strona nie trafi w takim stanie do użytkowników),</li>
<li style="text-align: justify;">nie wszystkim przeglądarkom uda się otworzyć taki dokument, a przynajmniej nie bez odpowiednio spreparowanego dokumentu DTD – możliwe więc, że będzie trzeba takowy utworzyć,</li>
<li style="text-align: justify;">konieczność pisania dedykowanych plików CSS i JavaScript (choć jest możliwość zautomatyzowania),</li>
<li style="text-align: justify;">strona zadziała tylko z przeglądarkami z włączoną obsługą JavaScript,</li>
<li style="text-align: justify;">jeśli oryginalny dokument operuje na JavaScript i drzewie DOM dokumentu to może być problem z przepisaniem tej funkcjonalności na nowe elementy (i to jest największy problem moim zdaniem).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mateusz-solecki.pl/zaciemnianie-ukrywanie-kodu/feed/</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Przycisk &#8220;wstecz&#8221;</title>
		<link>http://mateusz-solecki.pl/przycisk-wstecz/</link>
		<comments>http://mateusz-solecki.pl/przycisk-wstecz/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 15:17:30 +0000</pubDate>
		<dc:creator>Mateusz Solecki</dc:creator>
				<category><![CDATA[HTML5 / XHTML]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://mateusz-solecki.pl/?p=402</guid>
		<description><![CDATA[Aby stworzyć odwołanie do wcześniej przeglądanej strony  wystarczy utworzyc linka: [crayon-4fb963f97108d/] jedyny chyba kod który mi działa pod każdą przeglądarką.]]></description>
			<content:encoded><![CDATA[<p>Aby stworzyć odwołanie do wcześniej przeglądanej strony  wystarczy utworzyc linka:</p>
<p></p><pre class="crayon-plain-tag">&lt;/p&gt;
&lt;a href=&quot;javascript: history.go(-1)&quot;&gt;wstecz&lt;/a&gt;
&lt;p&gt;</pre><p></p>
<p>jedyny chyba kod który mi działa pod każdą przeglądarką.</p>
]]></content:encoded>
			<wfw:commentRss>http://mateusz-solecki.pl/przycisk-wstecz/feed/</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>ładny pasek przewijania czyli scrollbar css</title>
		<link>http://mateusz-solecki.pl/ladny-pasek-przewijania-czyli-scrollbar-css/</link>
		<comments>http://mateusz-solecki.pl/ladny-pasek-przewijania-czyli-scrollbar-css/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 14:48:15 +0000</pubDate>
		<dc:creator>Mateusz Solecki</dc:creator>
				<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://mateusz-solecki.pl/?p=385</guid>
		<description><![CDATA[bez zbędnego gadania: [crayon-4fb963f97202c/] Jedyny mankament jest taki że działa to tylko na webkitowych przeglądarkach]]></description>
			<content:encoded><![CDATA[<p>bez zbędnego gadania:</p>
<p></p><pre class="crayon-plain-tag">::-webkit-scrollbar {
cursor:pointer;
	background: #fafafa;
}

::-webkit-scrollbar-thumb {
	border: 3px solid #fafafa;
	background-color: rgba(208, 187, 168, 0.7);
}

::-webkit-scrollbar-thumb:hover {
	background-color: rgba(208, 187, 168, 0.8);
}</pre><p></p>
<p>Jedyny mankament jest taki że działa to tylko na webkitowych przeglądarkach</p>
]]></content:encoded>
			<wfw:commentRss>http://mateusz-solecki.pl/ladny-pasek-przewijania-czyli-scrollbar-css/feed/</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Drzewo XML w źródle strony</title>
		<link>http://mateusz-solecki.pl/drzewo-xml-w-zrodle-strony/</link>
		<comments>http://mateusz-solecki.pl/drzewo-xml-w-zrodle-strony/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 13:04:19 +0000</pubDate>
		<dc:creator>Mateusz Solecki</dc:creator>
				<category><![CDATA[XML / XSL]]></category>

		<guid isPermaLink="false">http://mateusz-solecki.pl/?p=383</guid>
		<description><![CDATA[Dziś prosty trick aby zobaczyć drzewo XML w źródle danej strony. Przydatne jeżeli strona np jest oparta na XSL. Dodajemy na końcu adresu ?SHOW_FORCE_XSLT=1 po czym klikamy enter i sprawdzamy źródł ostrony Małe acz przydatne ;p]]></description>
			<content:encoded><![CDATA[<p>Dziś prosty trick aby zobaczyć drzewo XML w źródle danej strony. Przydatne jeżeli strona np jest oparta na XSL.</p>
<p>Dodajemy na końcu adresu</p>
<p><strong>?SHOW_FORCE_XSLT=1</strong></p>
<p><strong></strong>po czym klikamy enter i sprawdzamy źródł ostrony <img src='http://mateusz-solecki.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Małe acz przydatne ;p</p>
]]></content:encoded>
			<wfw:commentRss>http://mateusz-solecki.pl/drzewo-xml-w-zrodle-strony/feed/</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
	</channel>
</rss>

