<?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/"
	>

<channel>
	<title>Domowe Metody Wzbogazania Uranu</title>
	<atom:link href="http://dmwu.jjroman.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://dmwu.jjroman.net</link>
	<description>Jak stanąć na głowie w poprzek? Jak ugryźć się w piętę? Dlaczego ziemia jest płaska? I skąd القاعدة ma bombę atomową? Jeżeli nurtują cię tego typu pytania lub mniej trywialne, jesteś tu mile widzianay.</description>
	<pubDate>Fri, 15 Jan 2010 19:40:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>trzy komputery jedna domena</title>
		<link>http://dmwu.jjroman.net/?p=101</link>
		<comments>http://dmwu.jjroman.net/?p=101#comments</comments>
		<pubDate>Wed, 02 Dec 2009 22:10:44 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[ogólnie]]></category>

		<category><![CDATA[technicznie]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[DNS]]></category>

		<category><![CDATA[Routing]]></category>

		<category><![CDATA[SQUID]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=101</guid>
		<description><![CDATA[Dzisiaj pokażę w jaki sposób skonfigurowałem moją domenę do działania z trzema fizycznymi komputerami. Było mi to potrzebne do uruchomienia hostingu swoich .NETowych projektów. Ale najpierw pokażę jaki jest cel a potem sposób dojścia.


Legenda:
K1 czyli zewnętrzny hosting w linuxpl.com
K2 czyli mój domowy serwer pod kontrolą linuxa
K3 czyli prywatny laptop windows XP z serwerem IIS
K2 i [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj pokażę w jaki sposób skonfigurowałem moją domenę do działania z trzema fizycznymi komputerami. Było mi to potrzebne do uruchomienia hostingu swoich .NETowych projektów. Ale najpierw pokażę jaki jest cel a potem sposób dojścia.<br />
<img src="http://dmwu.jjroman.net/img/schemat.png" alt="schemat domen" /><br />
<span id="more-101"></span><br />
Legenda:<br />
K1 czyli zewnętrzny hosting w linuxpl.com<br />
K2 czyli mój domowy serwer pod kontrolą linuxa<br />
K3 czyli prywatny laptop windows XP z serwerem IIS<br />
K2 i K3 mają jeden wspólny zewnętrzny adres IP który jest na domiar złego dynamiczny.</p>
<p>1. Ustawienie DNS<br />
Po pierwsze, korzystając z serwisu dyndns.com (lub podobnego) neleży utworzyć domenę wskazującą na dynamiczne IP. W moim przypadku jest to <strong>pinochet.ath.cx</strong>. Następnie należy skonfigurować program który będzie aktualizował wpis w DNSie. W moim przypadku program nie był potrzebny, router miał możliwość skonfigurowania konta na popularniejszych serwisach dynamicznych domen. Dzięki temu router od razu po zmianie IP przez ISPa loguje się na konto dyndns i zmienia potrzebne dane.</p>
<p>Kolejnym krokiem jest edycja wpisu w DNSie dla naszej docelowej domeny. Konkretnie dodanie kilku rekordów CNAME. Nie wszystkie hostingi to umożliwiają, więc dobrze jest sprawdzić co się kupuje. Hosting w linuxpl daje taką możliwość. Podam tu kompletny wpis DNS dla mojej domeny i oddelegowanych subdomen.</p>
<blockquote>
<table>
<tr>
<td>
jjroman.net.</td>
<td>	A</td>
<td>	78.46.99.149</td>
</tr>
<tr>
<td>jjroman.net.</td>
<td>		NS</td>
<td>		dns10.linuxpl.com.</td>
</tr>
<tr>
<td>jjroman.net.</td>
<td>		NS</td>
<td>		ns10.linuxpl.com.	</td>
</tr>
<tr>
<td>asp</td>
<td>		CNAME</td>
<td>		pinochet.ath.cx.	</td>
</tr>
<tr>
<td>www.asp</td>
<td>		CNAME</td>
<td>		pinochet.ath.cx.	</td>
</tr>
<tr>
<td>jsp</td>
<td>		CNAME</td>
<td>		pinochet.ath.cx.	</td>
</tr>
<tr>
<td>www.jsp</td>
<td>		CNAME</td>
<td>		pinochet.ath.cx.</td>
</tr>
</table>
</blockquote>
<p>Jak widać rekordy typu CNAME pozwalają mi uniknąć wpisywania na stałe adresu IP. Ostatnie 4 wpisy oznaczają po prostu, że ruch z subdomen: asp, jsp, będzie kierowany na adres pinochet.ath.cx czyli na dynamiczny adres IP mojego łącza internetowego.</p>
<p>2. Rozdzielenie ruchu według subdomeny.<br />
Po dodaniu powyższych wpisów do DNSa wszystkie żądania o adresy asp.jjroman.net i jsp.jjroman.net są kierowane do mojej sieci lokalnej. Tu router ruch z portu 80 kieruje do lokalnego serwera linuxowego(K2).<br />
Subdomena jsp jest obsługiwana przez serwer tomcat na komputerze K2, a subdomena asp przez IIS na komputerze K3. Najlepszym rozwiązaniem na rozdzielenie requestów pomiędzy te 2 komputery jest skorzystanie z dobrodziejstw proxy i cache. Często stosowanym rozwiązaniem jest postawienie proxy na porcie 80 a apacha na jakimś innym. Takie rozwiązanie powoduje, że strona jest niedostępna pod adresem bez końcowego slasha np:</p>
<blockquote><p>http://jjroman.net/strona</p></blockquote>
<p>ale </p>
<blockquote><p>http://jjroman.net/strona/</p></blockquote>
<p>Dzieje się tak dla tego że apache gdy otrzymuje żądanie o stronę <strong>http://jjroman.net/strona</strong> wysyła przekierowanie na stronę: <strong>http://jjroman.net/strona/</strong> ale kiedy apache stoi na porcie np 83 to wysyła przekierowanie na stronę: <strong>http://jjroman.net:83/strona/</strong> Oczywiście ten port jest z zewnątrz nie dostępny więc użytkownik dostaje błąd &#8220;przekroczono limit czasu połączenia&#8221;. Rozwiązań jest kilka.<br />
1. Podobno odpowiednie ustawienie nazwy hosta w systemie oraz zmiennej visible_hostname w squid&#8217;zie daje oczekiwane rezultaty - niestety nie u mnie.<br />
2. Ustawienie squida na porcie 81(lub inny) apacha na 80,  A na routerze wejściowym do sieci ustawić forwardowanie w taki sposób aby port 80 -> K2:81, niestety moj router z standardowym softem tego nie potrafi.<br />
3. Ustawienie squida oraz apacha na porcie 80 ale na różnych interfejsach - ten sposób nie może nie zadziałać <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
No to do dzieła. /etc/apache/sites-enabled/jjroman </p>
<blockquote><p>NameVirtualHost 127.0.0.1<br />
&lt;VirtualHost 127.0.0.1&gt;<br />
ServerName pinochet.ath.cx<br />
DocumentRoot /var/www<br />
# &#8230;.<br />
&lt;/VirtualHost&gt;
</p></blockquote>
<p>Jako proxy wykorzystałem serwer SQUID. Oto listing konfiguracji:</p>
<blockquote><p>
visible_hostname pinochet.ath.cx<br />
redirect_rewrites_host_header on</p>
<p># Define the HTTP port<br />
http_port 192.168.1.101:80 vhost vport=80 defaultsite=pinochet.ath.cx</p>
<p>#http_port 192.168.1.101:80 vhost vport=83 defaultsite=pinochet.jjroman.net<br />
# Specify the local and remote peers<br />
cache_peer 127.0.0.1 parent 80 0 no-query originserver name=server1<br />
cache_peer 192.168.1.103 parent 80 0 no-query originserver name=server2<br />
cache_peer 127.0.0.1 parent 8080 0 no-query originserver name=server3</p>
<p>#ProxyPreserveHost yes</p>
<p># Tell squid which domains to forward to which servers<br />
acl sitedomains dstdomain .pinochet.ath.cx<br />
acl sitedomains2 dstdomain .asp.jjroman.net<br />
acl sitedomains3 dstdomain .jsp.jjroman.net<br />
acl sitedomains4 dstdomain .pinochet.jjroman.net</p>
<p>cache_peer_access server1 allow sitedomains<br />
cache_peer_access server1 allow sitedomains4<br />
cache_peer_access server2 allow sitedomains2<br />
cache_peer_access server3 allow sitedomains3</p>
<p># some restriction definitions<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl webcluster src 87.233.132.112/28<br />
#acl webcluster src 192.168.1.100/28<br />
acl purge method PURGE<br />
acl CONNECT method CONNECT</p>
<p># some restrictions<br />
http_access allow manager localhost<br />
http_access allow manager webcluster<br />
http_access deny manager<br />
http_access allow purge localhost<br />
http_access allow purge webcluster<br />
http_access deny purge</p>
<p># Make sure that access to your accelerated sites is allowed<br />
http_access allow sitedomains<br />
http_access allow sitedomains2<br />
http_access allow sitedomains3<br />
http_access allow sitedomains4<br />
# Deny everything else<br />
http_access deny all</p>
<p># Do not cache cgi-bin, ? urls, posts, etc.<br />
hierarchy_stoplist cgi-bin ?<br />
acl QUERY urlpath_regex cgi-bin \?<br />
acl POST method POST<br />
no_cache deny QUERY<br />
no_cache deny POST</p>
<p>acl apache rep_header Server ^Apache<br />
broken_vary_encoding allow apache<br />
refresh_pattern .              60       100%     4320</p>
<p># Do not cache 404s 403s, etc<br />
negative_ttl 0 minutes</p>
<p># Debug info in cache.log?<br />
# debug_options ALL,1 33,2</p>
<p># Cache properties<br />
cache_mem 500 MB<br />
maximum_object_size_in_memory 2048 KB<br />
cache_replacement_policy heap LRU<br />
memory_replacement_policy heap LRU<br />
cache_dir ufs /var/spool/squid 20000 16 256<br />
access_log /var/log/squid/access.log squid<br />
hosts_file /etc/hosts</p>
</blockquote>
<p>kluczowe dla konfiguracji wielu komputerów są dyrektywy:<br />
acl sitedomainsX dstdomain &#8230;<br />
cache_peer_access&#8230;<br />
http_access allow&#8230;<br />
No to chyba tyle. Mam nadzieję że się komuś przyda.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=101</wfw:commentRss>
		</item>
		<item>
		<title>ASP .NET MVC i Http.RenderAction</title>
		<link>http://dmwu.jjroman.net/?p=134</link>
		<comments>http://dmwu.jjroman.net/?p=134#comments</comments>
		<pubDate>Mon, 30 Nov 2009 15:19:42 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Studia]]></category>

		<category><![CDATA[technicznie]]></category>

		<category><![CDATA[ASP]]></category>

		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=134</guid>
		<description><![CDATA[Kolejny bład napotkany przy pracach nad moją małą .NETową aplikacją webową:
	&#8216;System.Web.Mvc.HtmlHelper&#8217; does not contain a definition for &#8216;RenderAction&#8217;	 
Jak się okazało zainstalowanie framework&#8217;a to nie wszystko. Należy jeszcze ściągnć i zainstalować dodatkowe fjuczery od Microsoftu. ;] Jest to biblioteka: Microsoft.Web.Mvc.dll 
Bibliotekę ASP.NET MVC v1.0 Futures można ściągnąć z tąd: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471 albo z mojego mirrora: http://jjroman.net/pliki/MVCFutures.zip [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejny bład napotkany przy pracach nad moją małą .NETową aplikacją webową:<br />
<blockquote>	&#8216;System.Web.Mvc.HtmlHelper&#8217; does not contain a definition for &#8216;RenderAction&#8217;	 </p></blockquote>
<p>Jak się okazało zainstalowanie framework&#8217;a to nie wszystko. Należy jeszcze ściągnć i zainstalować dodatkowe fjuczery od Microsoftu. ;] Jest to biblioteka: Microsoft.Web.Mvc.dll <span id="more-134"></span><br />
Bibliotekę ASP.NET MVC v1.0 Futures można ściągnąć z tąd: <a href="http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471">http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471</a> albo z mojego mirrora: <a href="http://jjroman.net/pliki/MVCFutures.zip ">http://jjroman.net/pliki/MVCFutures.zip </a><br />
W projekcie należy dodać Referencję do tej biblioteki przez</p>
<blockquote><p>Solution Explorer -&gt; Add Reference &#8230; -&gt; Browse -&gt; ścieżka do biblioteki -&gt; OK</p></blockquote>
<p>Następnie w pliku Widoku - ASPX należy zaimportować dodaną bibliotekę:</p>
<blockquote><p>&lt;%@ Import Namespace=&#8221;Microsoft.Web.Mvc&#8221; %&gt;</p></blockquote>
<p>Albo dodać do Web.config następującą linię w gałęzi assemblies</p>
<blockquote><p>
&lt;add assembly=&#8221;Microsoft.Web.Mvc&#8221;/&gt;
</p></blockquote>
<p>Oczywiście przy drugiej metodzie &#8220;udogodnienia&#8221; <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> z biblioteki są dostępne w całym projekcie.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=134</wfw:commentRss>
		</item>
		<item>
		<title>NetBeans i File Connection optional package</title>
		<link>http://dmwu.jjroman.net/?p=132</link>
		<comments>http://dmwu.jjroman.net/?p=132#comments</comments>
		<pubDate>Sun, 22 Nov 2009 19:46:00 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=132</guid>
		<description><![CDATA[Witam dziś pół dnia walczyłem aby mi się wykonała następująa komenda:
import javax.microedition.io.file.*;
NetBeans cały czas zwracał komunikat: &#8220;package javax.microedition.io.file does not exist&#8221; Powodem takiego stanu rzeczy było nie dołączenie pakietu &#8220;File Connection and PIM Optional Package 1.0&#8243; do projektu. Niestety takiego pakietu nie było na liście pakietów opcjonalnych w netbeans 6.7.1

Dodanie pakietu (czyli pliku jsr75_1.0.jar) ręcznie, [...]]]></description>
			<content:encoded><![CDATA[<p>Witam dziś pół dnia walczyłem aby mi się wykonała następująa komenda:<br />
<code>import javax.microedition.io.file.*;</code><br />
NetBeans cały czas zwracał komunikat: &#8220;package javax.microedition.io.file does not exist&#8221; Powodem takiego stanu rzeczy było nie dołączenie pakietu &#8220;File Connection and PIM Optional Package 1.0&#8243; do projektu. Niestety takiego pakietu nie było na liście pakietów opcjonalnych w netbeans 6.7.1<br />
<span id="more-132"></span><br />
Dodanie pakietu (czyli pliku jsr75_1.0.jar) ręcznie, powodowało błąd &#8220;Autoryzacja nie powiodła się&#8221; ( na noki E55)<br />
Pakiety opcjonalne dodaje się w okienku projekt -> properties -> platform. Niestety nie przyszło mi do głowy aby zmienić wybrany typ telefonu. Po ustawieniu Device na ClamshellCldcPhone1 pojawił się zaginiony pakiet i wszystko śmiga.<br />
<img src="http://dmwu.jjroman.net/img/DefaultCldcJtwPhone1.png" alt="Brak pakietu File Connection" /><br />
<img src="http://dmwu.jjroman.net/img/ClamshellCldcPhone1.png" alt="opcjonalne pakiety dla ClamshellCldcPhone1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=132</wfw:commentRss>
		</item>
		<item>
		<title>Image.CreateImage &#038; misunderstanding</title>
		<link>http://dmwu.jjroman.net/?p=128</link>
		<comments>http://dmwu.jjroman.net/?p=128#comments</comments>
		<pubDate>Sat, 21 Nov 2009 00:07:07 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=128</guid>
		<description><![CDATA[Dokładnie chodzi o następujące przeciążenie metody:
createImage(byte[] imageData, int imageOffset, int imageLength) 
Otóż w dokumentacji stoi:
The imageoffset and imagelength parameters specify a range of data within the imageData byte array. The imageOffset parameter specifies the offset into the array of the first data byte to be used. It must therefore lie within the range [0..(imageData.length-1)]. The [...]]]></description>
			<content:encoded><![CDATA[<p>Dokładnie chodzi o następujące przeciążenie metody:<br />
<code>createImage(byte[] imageData, int imageOffset, int imageLength) </code><br />
Otóż w dokumentacji stoi:</p>
<blockquote><p>The imageoffset and imagelength parameters specify a range of data within the imageData byte array. The imageOffset parameter specifies the offset into the array of the first data byte to be used. It must therefore lie within the range [0..(imageData.length-1)]. The imageLength parameter specifies the number of data bytes to be used. It must be a positive integer and it must not cause the range to extend beyond the end of the array. That is, it must be true that imageOffset + imageLength < imageData.length. </p></blockquote>
<p>Z czego wprost wynika że imageLength = imageData.length-1 natomiast powinno być imageLength = imageData.length łopatologicznie: jeżeli mamy byteArray o długości 10 w tablicy [0...9] to wywołujemy metodę tak:<br />
<code>Image.createImage(byteArray, 0, 10);</code><br />
a nie tak jak to wynika z dokumentacji:<br />
<code>Image.createImage(byteArray, 0, 9);</code> </p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=128</wfw:commentRss>
		</item>
		<item>
		<title>Język wyjątków w ASP.NET</title>
		<link>http://dmwu.jjroman.net/?p=109</link>
		<comments>http://dmwu.jjroman.net/?p=109#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:11:20 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<category><![CDATA[Studia]]></category>

		<category><![CDATA[technicznie]]></category>

		<category><![CDATA[ASP]]></category>

		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=109</guid>
		<description><![CDATA[Od jakiegoś czasu pracuję nad aplikacjami webowymi tworzonymi w ASP .NET. Platforma ta posiada taki fajny feature, który generuje wyjątki w języku strony: UICulture language. Chodzi o wyjątki generowane przez maszynę wirtualną czyli wiadomości dla NullPointerException to "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu." a NotImplementedException ma Message: "Metoda lub operacja nie jest zaimplementowana.". Widząc taki komunikat każdy średnio zaawansowany programista poradzi sobie bez wujka G. Ale gdy treść komunikatu brzmi: "Istniejący obiekt w obiekcie ObjectContext jest w stanie Added. Zmiany można zastosować tylko wtedy, gdy istniejący obiekt jest w stanie niezmieniony lub zmodyfikowany." sytuacja nieco się komplikuje.]]></description>
			<content:encoded><![CDATA[<p>Od jakiegoś czasu pracuję nad aplikacjami webowymi tworzonymi w ASP .NET. Platforma ta posiada taki &#8220;fajny&#8221; feature, który generuje wyjątki w języku strony: UICulture language. Chodzi o wyjątki generowane przez maszynę wirtualną czyli wiadomości dla NullPointerException to</p>
<blockquote><p> &#8220;Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.&#8221;</p></blockquote>
<p> a NotImplementedException ma Message: </p>
<blockquote><p>&#8220;Metoda lub operacja nie jest zaimplementowana.&#8221;</p></blockquote>
<p>Widząc taki komunikat każdy średnio zaawansowany programista poradzi sobie bez wujka G. Ale gdy treść komunikatu brzmi: </p>
<blockquote><p>&#8220;Istniejący obiekt w obiekcie ObjectContext jest w stanie Added. Zmiany można zastosować tylko wtedy, gdy istniejący obiekt jest w stanie niezmieniony lub zmodyfikowany.&#8221;</p></blockquote>
<p> sytuacja nieco się komplikuje.<br />
<span id="more-109"></span><br />
Dlatego właśnie ten piękny w swojej idei pomysł M$ jest strasznie głupi i zamiast ułatwiać, komplikuje życie. Jeden argument opisałem wyżej: EnglishNETCommunity.size() > PolishNETCommunity.size(). Dodatkowo każda dobrze napisana aplikacja nigdy nie wyświetli użytkownikowi komunikatu wygenerowanego przez maszynę wirtualną - opisy są tylko dla programisty. Zaprezentowany powyżej komunikat sugeruje istnienie trzech stanów dla obiektu: Added, zmieniony, niezmieniony. BRAWO</p>
<p>Ponarzekałem - i od razu lepiej. A teraz jak sobie poradzić z takim stanem rzeczy. Najlepiej ustawić sobie w projekcie UICulture oraz Culture na &#8220;auto&#8221;. A robi się to w ten prosty, oczywisty i banalny sposób: Należy wyedtować plik: <b>Web.config</b> UWAGA chodzi o plik znajdujący się w głównym katalogu projektu(w projektach MVC są 2 pliki Web.config :O WTF?). W głównym elemencie &#8220;configuration&#8221; odszukujemy node: &#8220;system.web&#8221; i dodajemy nowy child-node globalization o następującej treści:<br />
<code>&lt;globalization uiCulture="auto" culture="auto" /&gt;</code><br />
Dzięki takiemu ustawieniu zmianę Culture będziemy dokonywać w ustawieniach przeglądarki w preferowanym języku. Aby ustawić na sztywno kulturę trzeba zamiast auto wpisać en-US(lub inną szczegółową lokalizację), podanie samego en skutkuje wyrzuceniem wyjątku - oczywiście w języku polskim. Można także włączyć globalizację tylko dla jednej strony. W takim wypadku należy dodać w nagłówku strony ASP tag:<br />
<code>&lt;%@ Page UICulture="en-US" Culture="en-US" %&gt;</code><br />
Aby ustawić globalizację programowo można zastosować poniższe polecenie:<br />
<code> System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");</code><br />
Jak widać zmiana dotyczy wątku a nie aplikacji także nie można sobie tego wpisać gdzie popadnie <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>A mój wyjątek brzmi teraz tak:</p>
<blockquote><p>The existing object in the ObjectContext is in the Added state. Changes can only be applied when the existing object is in an unchanged or modified state.</p></blockquote>
<p> I wszystko jasne - trzeba było tak od razu <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Edit: widzę że jest tu kilku gości od wujka G. <a href="http://stackoverflow.com/questions/1277786/problem-with-edm-in-asp-net-mvc/1751991#1751991">Roziazanie problemu opisałem na stackoverflow</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=109</wfw:commentRss>
		</item>
		<item>
		<title>Akcja &#8220;ETI kocha komputer&#8221; - retrospekcje</title>
		<link>http://dmwu.jjroman.net/?p=29</link>
		<comments>http://dmwu.jjroman.net/?p=29#comments</comments>
		<pubDate>Sun, 08 Feb 2009 18:05:52 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[Studia]]></category>

		<category><![CDATA[technicznie]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=29</guid>
		<description><![CDATA[Bot niedostępny do końca konkursu. Jako autor proszę o nierozpowszechnianie kodu. Najprawdopodobniej w tym roku zmieni się system, w związku z czym i tak nie będzie on działał, ale dmuchamy na zimne.
Chyba każdy kto choć trochę interesował się akcją wie, że wygraliśmy. Chciałem w tym miejscu podziękować wszystkim za udział - pokazaliśmy naszą siłę 
Spis [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color:#FF0000">Bot niedostępny do końca konkursu. Jako autor proszę o nierozpowszechnianie kodu.</span> Najprawdopodobniej w tym roku zmieni się system, w związku z czym i tak nie będzie on działał, ale dmuchamy na zimne.</strong><br />
Chyba każdy kto choć trochę interesował się akcją wie, że wygraliśmy. Chciałem w tym miejscu podziękować wszystkim za udział - pokazaliśmy naszą siłę <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
<h3>Spis treści:</h3>
<ul>
<li> Program głosujący
<ul>
<li><a href="http://dmwu.jjroman.net/?p=29#opis_dzialania">Opis działania</a></li>
<li><a href="http://dmwu.jjroman.net/?p=29#changelog">changelog</a></li>
<li><a href="http://code.jjroman.net/milkabot/">kod źródłowy</a></li>
</ul>
</li>
<li><a href="http://dmwu.jjroman.net/?p=29#statystyki">Statystyki</a>
<ul>
<li><a href="http://dmwu.jjroman.net/?p=29#wykresiki">wykresiki</a> </li>
</ul>
</li>
<li>Społeczeństwo <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
<ul>
<li><a href="http://dmwu.jjroman.net/?p=29#wykop">Wykop</a></li>
<li><a href="http://dmwu.jjroman.net/?p=29#dogomania">dogomania</a></li>
</ul>
</li>
</ul>
<p><span id="more-29"></span></p>
<h2 id="program">Program głosujący</h2>
<h3 id="opis_dzialania">Opis działania:</h3>
<p>Głosowanie jak wiadomo miało dwie fazy. Pierwsza to wpisanie &#8220;swojego&#8221; adresu e-mail do formularza na stronie, druga to kliknięcie linka który przychodził na naszą skrzynkę. Właśnie takie działanie symulował robot. Najpierw skrypt wielokrotnie wypełniał formularz, wygenerowanymi losowo adresami e-mail. Kluczem powodzenia całej akcji było zastosowanie skrzynek typu catch-all. Polega to na tym, że nie ważne jaki ciąg znaków pojawi się przed &#8216;@&#8217; w adresie e-mail - poczta zostanie przekazana na jedną zdefiniowaną skrzynke np maile wysłane na:<br />
<code><br />
Adolfina_Princessau31@domenaA.pl<br />
Agnes_Sonet73@domenaB.pl<br />
Spryciarz_Quakeu19@domenaC.pl<br />
Uruk_Zombieu19@domenaD.pl<br />
</code><br />
można odebrac logując się na konto:<br />
<code><br />
milka@domenaA.pl<br />
</code><br />
Kolejnym krokiem działania było zalogowanie się skryptu na skrzynkę i odebranie maili. Było to możliwe dzięki funkcjom napisnym przez <a href="http://www.weberdev.com/get_example-4015.html">bastien koerta</a>. Po odebraniu wiadomości, skrypt zapisywał linki do klikania w bazie danych. </p>
<p>Trzecia faza głosowania polegała na dystrybucji linków pomiędzy wszystkich uczestników akcji. Skrypt wpisywał session_id osoby która pobrała link do bazy, przy pobraniu kolejnego linka poprzedni był oznaczany jako wykorzystany. Jak się okazało prowadziło to do dość dużych strat linków - a także nadużyć. Lepszym rozwiązaniem byłaby dystrybucja oparta na adresie IP oraz sesji - no cóż międzyczasie był egzamin z AI (a skoro coś działa to po co to zmieniać.);P<br />
<a href="http://code.jjroman.net/milkabot/">Kod źródłowy bota</a></p>
<h3 id="changelog">Changelog:</h3>
<ol>
<li> Wersja 1.0 - skrypt instalowany na serwerze zarówno wypełnianie formularza jak i klikanie linków wykonuje program. Odbieranie maili za pomocą imap_open.</li>
<li>Wersja 1.1 - dodanie możliwości zainstalowania skryptu na serwerach bez imap_open - funkcje bastien koerta.</li>
<li>Wersja 2.0 - możliwość ręcznego klikania linków + zgłaszania już wykorzystanych linków.</li>
<li>Wersja 3.0 - modyfikacje zaproponowane przez Aliego i Wojtiku. Automatyczne klikanie linka poprzez IFRAME + oznaczenie linka jako wykorzystany - by Wojtiku</li>
<li>Wersja 3.1 - generowanie ładnych adresów e-mail wykorzystano bazę imion dla piesków <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> - by Wirus.</li>
<li>Wersja 3.2 - dodanie do bota funkcji która oprócz klikania linku wypełnia formularz z losowo wygenerowanym adresem e-mail(po stronie klienta). - by Wojtiku</li>
</ol>
<p><a href="http://code.jjroman.net/milkabot/">Kod źródłowy bota</a></p>
<h2 id="statystyki">Statystyki</h2>
<p>Liczba uruchomień skryptu(każde przeładowanie): 408170 ( 337.63 MB)<br />
Liczba unikalnych numerów IP z których głosowano: <b style="color:#DD0000; size:15px">817</b><br />
system operacyjny uczestników:
<ol>
<li>Windows - 75,9%</li>
<li>Linux - 24,1%</li>
<li>Mac - 0,1‰</li>
</ol>
<p>przeglądarka uczestników:
<ol>
<li>Firefox - 49,1 %</li>
<li>Opera - 19,5 %</li>
<li>Wget - 16,0 %</li>
<li>Safari - 8,5 %</li>
<li>MSIE - 3,8 % (YEAH !!)</li>
</ol>
<p>strony odsyłające (referer) w sumie 18:</p>
<ol>
<li> http://eti.dragoart.info/ - 11980
<li> http://yeti.panic.pl/ - 10687
<li> http://www.eit07.boo.pl/ - 829</li>
<li> http://www.dogomania.pl/ - 166</li>
</ol>
<p>Baza danych (tylko full_automat.php): 23,6 MB</p>
<table style="border:1px solid #000000" cellpadding="5px">
<tr style="text-align:center; font-weight:bold">
<th>walentynka </th>
<th>linków do głosowania </th>
<th>wykorzystanych linków</th>
</tr>
<tr style="text-align:center">
<td> krzysioo </td>
<td>64098</td>
<td> 23001 </td>
</tr>
<tr style="text-align:center">
<td> Majckel </td>
<td>10578 </td>
<td> 5169 </td>
</tr>
<tr style="text-align:center">
<td> JaMajka </td>
<td> 8094 </td>
<td> 6555 </td>
</tr>
<tr style="text-align:center">
<td> inne, błędy itp. </td>
<td>1010 </td>
<td> 2 </td>
</tr>
<tr style="text-align:center">
<td> Razem: </td>
<td>  83780 </td>
<td> 34727 </td>
</tr>
</table>
<h3 id="wykresiki">Wykresiki:</h3>
<p>Jak zmieniała się liczba głosów w top10(część danych została utracona :[ ) by Ali:<br />
<a href="img/top10_bold.png"><img src="img/top10_thumb.png" alt="load serwera forum ETI" style="border:0px"/></a></p>
<p>Ilość requestów wysyłana na stronę roman.s0s.pl/milka/ &#8230;<br />
<img src="img/3.02.2009.png" alt="load serwera 3.02" style="width:480px"/><br />
<img src="img/4.02.2009.png" alt="load serwera 4.02" style="width:480px"/><br />
W tym dniu głosowali tylko zaufani <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
<img src="img/5.02.2009.png" alt="load serwera 5.02" style="width:480px"/></p>
<p>Load forum yETI.panic.pl:<br />
<img src="img/loadpanic.jpg" alt="load serwera forum ETI" style="width:450px"/></p>
<p>I jeszcze jedno &#8230; może ktoś mi wytłumaczy o co chodzi <img src='http://dmwu.jjroman.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
<img src="img/swf.png" alt="jakie znowu SWF" style="width:320px"/></p>
<h2>Społeczeństwo </h2>
<h3 id="wykop">Wykop</h3>
<p>Na wykopie powstały 2 artykuły:<br />
<a href="http://www.wykop.pl/link/139365/prawdziwa-milosc-pomozmy-ja-zrealizowac">Z prośbą o głosowanie na walentynke Majckela.</a><br />
<a href="http://www.wykop.pl/link/140485/skandal-milka-oszukala-w-swoim-konkursie">Ciekawszy po usunięciu walentynki Majckela wykopany ponad 700 razy</a></p>
<h3 id="dogomania">dogomania</h3>
<p>Na forum dogomaniaków powstało ponad 50 stron wątku po tym jak walentynka Majckela pojawiła się na pierwszym miejscu. Pierwsze 50 powstało w ciągu 3 tygodni całej akcji. Pozwolę sobie jeszcze co nieco o tym napisać. Na forum tym pojawiło się trochę obraźliwych postów, które pokazały nas - studentów PG oraz wydziału ETI w złym świetle. Sam zabierałem tam głos kilkakrotnie ( tylko przez PW). Niestety bezmyślność ludzi w tym i studentów naszej uczelni nie zna granic. </p>
<p>Po usunięciu walentynki Majckela stwierdziłem, że nie będziemy głosować na dogomaniaków. Po pierwsze nie wiedziałem czy zdążymy wypromować kolejną walentynkę. Po drugie, myślałem że dogomaniacy przyczynili się do usunięcia. Kolejną sprawą było to, że pomimo zawartego układu (a powiedzieliśmy, że się nie poddamy)&#8230; ich walentynka zdobyła dodatkowe 4 tysiące głosów. </p>
<p>Kiedy przeczytałem posty niektórych osób stwierdziłem, że musimy pomóc JaMajce gdyż tylko w ten sposób pokażemy, że nie jesteśmy bandą dzieci neostrady. Jak pokazuje tabelka wyżej &#8230; Z naszej strony na ich walentynkę poszło maksymalnie 6555 głosów (głosowaliśmy tylko w ostatnim dniu, dla porównania: linki na Majckela w większości były wykorzystane dwukrotnie; stosunek wykorzystanych linków na krzysioo do uznanych głosów jest 4:3) Dizzer przez jakis czas też głosował na JaMajke - około 500 głosów &#8230; a więc LeCoyote i jego &#8220;tajne sposoby&#8221; także przyczyniły się do pierwszej pozycji walentynki dogomaniaków. Pozatym na pewno w głosowaniu udział brało dużo ludzi :D. </p>
<p>Na zakończenie chciałbym powiedzieć, że pierwsze miejsce dogomaniaków jest w największej części ich zasługą. Gdyby nie mieli 1. pozycji na Operze w ogóle byśmy im nie pomagali. </p>
<p><img src="http://img99.imageshack.us/img99/9081/p1050660rk9.jpg" style="width:400px" /></p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=29</wfw:commentRss>
		</item>
		<item>
		<title>Walentynki na ETI</title>
		<link>http://dmwu.jjroman.net/?p=23</link>
		<comments>http://dmwu.jjroman.net/?p=23#comments</comments>
		<pubDate>Mon, 02 Feb 2009 20:55:06 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=23</guid>
		<description><![CDATA[Dobrze a więc bot gotowy &#8230;
Opis działania:
Bot składa się z 2 skryptów:
1. Skrypt dodaje kolejne adresy mail na milce adresy są tworzone md5(time()) a więc nie za ładnie (kolejny_adres.php)
2. Skrypt odbiera pocztę ze zdefiniowanej skrzynki i zapisuje e-mail + token do bazy danych. Na podstawie tych danych &#8220;klika linki&#8221; (glosuj.php)
Wymagania:
NIE WYMAGA juz imap_OPEN 
cURL, PDO [...]]]></description>
			<content:encoded><![CDATA[<p>Dobrze a więc bot gotowy &#8230;<br />
Opis działania:<br />
Bot składa się z 2 skryptów:<br />
1. Skrypt dodaje kolejne adresy mail na milce adresy są tworzone md5(time()) a więc nie za ładnie (kolejny_adres.php)<br />
2. Skrypt odbiera pocztę ze zdefiniowanej skrzynki i zapisuje e-mail + token do bazy danych. Na podstawie tych danych &#8220;klika linki&#8221; (glosuj.php)<br />
Wymagania:<br />
<strong>NIE WYMAGA juz imap_OPEN </strong><br />
cURL, PDO (imap_open | fsock )<br />
krótki opis instalacji:<br />
1. ustawiamy alias catch-all i przekierowujemy pocztę na jakieś konto POP3<br />
2. ściągamy <a href="http://jjroman.net/pliki/milka.zip"> pliki </a> i wgrywamy na serwka.<br />
3. Tworzymy tabele w bazie danych<br />
4. edytujemy config.php ( chyba intuicyjnie opisane zmienne)<br />
5. ustawiamy Crona &#8230; <code><br />
*/3 * * * * /bin/bash/php /home/username/kolejny_adres.php </code><br />
w zaleznosci od zainstalowanych na serwerze bibliotek:<br />
<code><br />
*/3 * * * * /bin/bash/php /home/username/glosuj.php<br />
#lub<br />
*/3 * * * * /bin/bash/php /home/username/glosuj_fsock.php </code><br />
lub przez wget</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=23</wfw:commentRss>
		</item>
		<item>
		<title>MSI SoundCard nie działa.</title>
		<link>http://dmwu.jjroman.net/?p=18</link>
		<comments>http://dmwu.jjroman.net/?p=18#comments</comments>
		<pubDate>Sat, 17 Jan 2009 09:32:42 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[hardware]]></category>

		<category><![CDATA[technicznie]]></category>

		<category><![CDATA[brak dźwięku]]></category>

		<category><![CDATA[karta dźwiękowa]]></category>

		<category><![CDATA[MSI]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=18</guid>
		<description><![CDATA[Ostatnio kupiłem płytę główną MSI. Model (MS 7010) ze względu na to, że stara (MS 7030) spaliła się.
Po instalacji okazało się, że pomimo zainstalowanych sterowników C-Media ( menadżer urządzeń nie pokazuje żadnych konfliktów ) karta dźwiękowa nie działa.
Rozwiązaniem okazało się zwarcie zworek w &#8220;gnieździe JAUD1&#8243;. Chyba wszystkie płyty MSI a przynajmniej obie wymienione mają zbiór [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio kupiłem płytę główną MSI. Model (MS 7010) ze względu na to, że stara (MS 7030) spaliła się.<br />
Po instalacji okazało się, że pomimo zainstalowanych sterowników C-Media ( menadżer urządzeń nie pokazuje żadnych konfliktów ) karta dźwiękowa nie działa.</p>
<p>Rozwiązaniem okazało się zwarcie zworek w &#8220;gnieździe JAUD1&#8243;. Chyba wszystkie płyty MSI a przynajmniej obie wymienione mają zbiór bolców opisany JAUD1 schemat bolców:<br />
:::.:<br />
zworki należy umieścić w ten sposób:<br />
::|.|<br />
oczywiście schemat dotyczy używania zintegroanej karty dźwiękowej</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=18</wfw:commentRss>
		</item>
		<item>
		<title>Reklama kontekstowa</title>
		<link>http://dmwu.jjroman.net/?p=15</link>
		<comments>http://dmwu.jjroman.net/?p=15#comments</comments>
		<pubDate>Sun, 11 Jan 2009 14:04:27 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[ogólnie]]></category>

		<category><![CDATA[Reklama kontekstowa]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=15</guid>
		<description><![CDATA[Reklama kontekstowa zadomowiła się już w internecie na dobre. Powstaje coraz więcej wszelkiego rodzaju systemów. Wszystko pięknie ładnie ale:  Jak mam rozumieć taką reklamę zamieszczoną poniżej zdjęcia mojej klasy na jednym z popularnych serwisów?
]]></description>
			<content:encoded><![CDATA[<p>Reklama kontekstowa zadomowiła się już w internecie na dobre. Powstaje coraz więcej wszelkiego rodzaju systemów. Wszystko pięknie ładnie ale: <img src="http://dmwu.jjroman.net/img/kontekst.png" alt="Jak mam to rozumieć" /> Jak mam rozumieć taką reklamę zamieszczoną poniżej zdjęcia mojej klasy na jednym z popularnych serwisów?</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=15</wfw:commentRss>
		</item>
		<item>
		<title>Zmiany w Namespace - PHP 5.3</title>
		<link>http://dmwu.jjroman.net/?p=3</link>
		<comments>http://dmwu.jjroman.net/?p=3#comments</comments>
		<pubDate>Mon, 05 Jan 2009 13:30:30 +0000</pubDate>
		<dc:creator>Jan Roman</dc:creator>
		
		<category><![CDATA[technicznie]]></category>

		<category><![CDATA[MVC]]></category>

		<category><![CDATA[Namespace]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dmwu.jjroman.net/?p=3</guid>
		<description><![CDATA[O namespace troche bez sensu ale jest :]]]></description>
			<content:encoded><![CDATA[<p>Jak powszechnie wiadomo głównym udogodnieniem w nowej wersji php (5.3) ma być obsługa przestrzeni nazw (namespace). Postanowiłem sprawdzić jak obsługa wygląda obecnie. Pojawiła się ku temu okazja gdyż miałem przygotować projekt na przedmiot: &#8220;Aplikacje Internetowe&#8221;.<br />
<span style="font-weight:bold;">Trójwarstwowość i MVC</span><br />
Moim zadaniem było stworzenie aplikacji prostego sklepu z podstawową funkcjonalnością. Może troche na wyrost ale postanowiłem że w aplikacji wydzielę trzy warstwy ( danych , logiki i prezentacji) a całość oprę na wzorcu MVC. No i właśnie z tym wzorcem wiąże się zastosowanie w moim projekcie namespaces.<br />
Moje postrzeganie MVC jest oparte o frameworka phiend i wydaje mi się być jednym z najsłuszniejszych:<br />
M - Model zapewnia abstrakcję na dane ( warstwa danych );<br />
C - Controler realizuje logikę aplikacji ( jest to warstwa logiki )<br />
V - View wyświetla dane (jest to warstwa prezentacji )</p>
<p>Odrazu nasuwa się aby implememntując wymusić jakiś podział kodu na te trzy części.<br />
Ciężko jednak byłoby zaimplementować każdą z części używając jednej klasy. Nie mówie tutaj o tworzeniu na siłę klas abstrakcyjnych a później dziedziczeniu po nich np tylko po to aby mieć dostęp do instancji PDO - jest to błędne w sensie OOP.<br />
Zamist tego można wykorzystać dość dobrze juz rozwinięty mechanizm przestrzeni nazw w PHP co według mnie jest najbardziej intuicyjne i zgodne OOP.</p>
<p><span style="font-weight:bold;">Namespace w praniu</span><br />
Przestrzenie nazw w PHP ewaluowały. Przeżyły one ostatnio zupełną rewolucję - została zmieniona składnia przestrzeni nazw(<a href="http://news.php.net/php.internals/41374">wiadomość na php</a>). Dotychaczasowe podwójne dwukropki zostały zastąpione backslashami. Przestrzeń która kiedyś wyglądała tak</p>
<blockquote><p>namespace jjroman_net::kontroler;</p></blockquote>
<p>teraz wygląda tak:</p>
<blockquote><p>namespace jjroman_net\kontroler;</p></blockquote>
<p>Podczas zabawy z wersją alpha2 okazało się że jest ona strasznie zabugowana. Z bugtracka dowiedziałem się ze większość moich problemów została już usunięta w wersji CVS, No więc nie pozostało nic innego jak ściągnąć takową.<br />
Z przyjemnością stwierdzam, że obecna wersja alpha4 jest dużo bardziej dopracowana i da się na niej pracować. Co prawda zdarza się że muszę zgłosić buga :] ale są to juz dość drobne w porównaniu do wersji alpha2 uchybienia.<br />
Reasumując zachęcam wszystkich do zapoznania się z możliwościami nowej wersji PHP gdyż są one duże :}</p>
]]></content:encoded>
			<wfw:commentRss>http://dmwu.jjroman.net/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
	</channel>
</rss>
