<?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>Michał Agata :: BLOG</title>
	<atom:link href="http://www.michalagata.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.michalagata.com</link>
	<description>IT Journal</description>
	<lastBuildDate>Fri, 10 Feb 2012 08:32:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>EURO 2012</title>
		<link>http://www.michalagata.com/2012/02/10/euro-2012/</link>
		<comments>http://www.michalagata.com/2012/02/10/euro-2012/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 08:32:20 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=181</guid>
		<description><![CDATA[Dzisiaj lekkie nawiązanie do artykułu http://finanse.wp.pl/kat,72914,title,Euro2012-nie-tak-dobre-dla-gospodarki-Polski-jak-planowano,wid,14236155,wiadomosc.html. Do dzisiaj pamiętam atmosferę rodem z powieści Harlequin towarzyszącą dumnej wiadomości, że Polska i Ukraina &#8222;wygrały&#8221; EURO w 2012 roku. Wydarzenie pokazywane jako olbrzymi sukces polityczny i sportowy. Skrzętnie zatuszowane były nadchodzące informacje dotyczące &#8230; <a href="http://www.michalagata.com/2012/02/10/euro-2012/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dzisiaj lekkie nawiązanie do artykułu <a href="http://finanse.wp.pl/kat,72914,title,Euro2012-nie-tak-dobre-dla-gospodarki-Polski-jak-planowano,wid,14236155,wiadomosc.html">http://finanse.wp.pl/kat,72914,title,Euro2012-nie-tak-dobre-dla-gospodarki-Polski-jak-planowano,wid,14236155,wiadomosc.html.</a></p>
<p>Do dzisiaj pamiętam atmosferę rodem z powieści Harlequin towarzyszącą dumnej wiadomości, że Polska i Ukraina &#8222;wygrały&#8221; EURO w 2012 roku. Wydarzenie pokazywane jako olbrzymi sukces polityczny i sportowy.</p>
<p>Skrzętnie zatuszowane były nadchodzące informacje dotyczące finansowania. TAK, tak &#8211; Unia nam da, UEFA nam da. Wszystko pięknie, cudownie, fantastycznie. Nie padło sprostowanie ani komentarz, że powyższe &#8222;dadzą&#8221; ale tylko w pewnym procencie (aka części). Resztę trzeba sfinansować samemu. Również nie było ani słowa na temat kosztów utrzymania obiektów PO EURO. Jakby przejrzeć statystykę &#8211; to tylko i wyłącznie jedno państwo po EURO wyszło na &#8222;zero&#8221; (nazywając to &#8222;na plus&#8221;). Niektóre z państw wręcz rozbierały obiekty sportowe, zmniejszano je, przebudowywano. Koszty &#8211; jak (nie)wiadomo &#8211; są olbrzymie. Ale ludzie nie lubią mówić o kosztach. A póki nie ma kosztów &#8211; finalna statystyka finansowa wychodzi zawsze na &#8222;plus&#8221;. Pytanie, którego wygodniej jest nie zadawać &#8211; brzmi: kto za to zapłaci? Odpowiedź jest prosta: pan za to zapłaci, pani za to zapłaci. Bo będzie to dobro narodowe! Kasa z wszelkich (po EURO) imprez będzie pewnie zasilała budżet powołanych fundacji lub organizacji &#8222;zajmujących&#8221; się obiektami &#8211; zapewne &#8222;straszliwie&#8221; blisko powiązanych z PZPN. Ale jak przyjdzie do regulowania rachunków &#8211; nagle nikt wśród &#8222;opiekuno-właścicieli&#8221; się poczuwać nie będzie. Podejrzewam więc w niedługiej przyszłości kolejny z absurdalnych podatków.</p>
<p>Ciekawym jest natomiast fakt, że dwie najbardziej cieszące się z wydarzenia siły &#8211; dzisiaj wyglądają absolutnie mizernie. PZPN &#8211; chyba nie muszę opisywać. Korupcja, przegięcia wysokości pensji, układy, ustawianie wyników itd. Wyglądem przypomina to ZSRR tuż przed rozpadem. Obecnie mości nam rządzące ugrupowanie polityczne &#8211; również chyba nie muszę ooisywać. Tysiące obietnic, zero realizacji. Realizacja najbardziej krzywdzących dla obywateli tematów. Przywalenie podatków i opłat do granic możliwości (również kojarzę zabawny cytat Tuska pod tytułem &#8222;ktokolwiek z mojego rządu podwyższy podatki, natychmiastowo go zwolnię&#8221;. Tam chyba był dopisek małym drukiem &#8222;jako premier sam się zwolnić nie mogę&#8221;). Niekompetencja, brak wiedzy, układy. Zwiększanie monitoringu i kontroli obywatela. DEZINFORMACJA. Szkoda prądu żeby kontynuować ten wątek&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2012/02/10/euro-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Islandia</title>
		<link>http://www.michalagata.com/2012/02/07/islandia/</link>
		<comments>http://www.michalagata.com/2012/02/07/islandia/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 01:41:45 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=177</guid>
		<description><![CDATA[Poniższy wpis nie jest mojego autorstwa. Ze względu jednakże na fakt &#8222;tłumienia&#8221; nagłaśniania tego konkretnego przypadku &#8211; dołączam się do akcji promowania tego wpisu. Islandczycy sprawili, że rząd, który aprobował pod dyktando światowej finansjery zubożyć islandzki naród zgodnie ze scenariuszem &#8230; <a href="http://www.michalagata.com/2012/02/07/islandia/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Poniższy wpis nie jest mojego autorstwa. Ze względu jednakże na fakt &#8222;tłumienia&#8221; nagłaśniania tego konkretnego przypadku &#8211; dołączam się do akcji promowania tego wpisu.</p>
<h5><em>Islandczycy sprawili, że rząd, który aprobował pod dyktando światowej finansjery zubożyć islandzki naród zgodnie ze scenariuszem aktualnie „przerabianym” przez Grecję podał się w komplecie do dymisji! Główne banki w Islandii zostały znacjonalizowane i mieszkańcy zdecydowali jednogłośnie zadeklarować niewypłacalność długu, który został zaciągnięty przez prywatne banki w Wielkiej Brytanii i Holandii. Doprowadzono też do powołania Zgromadzenia Narodowego w celu ponownego spisania konstytucji. I to wszystko w pokojowy sposób. To prawdziwa rewolucja przeciw władzy, która doprowadziła Islandię do aktualnego załamania. Na pewno zastanawiacie się, dlaczego te wydarzenia nie zostały szeroko nagłośnione? Odpowiedź na to pytanie prowadzi do kolejnego pytania: Co by się stało, gdyby reszta europejskich narodów wzięła przykład z Islandii? Oto krótka chronologia faktów: Wrzesień 2008 roku: nacjonalizacja najważniejszego banku w Islandii, Glitnir Banku, w wyniku czego giełd zawiesza swoje działanie i zostaje ogłoszone bankructwo kraju. Styczeń 2009 roku: protesty mieszkańców przed parlamentem powodują dymisję premiera Geira Haarde oraz całego socjaldemokratycznego rządu, a następnie przedterminowe wybory. Sytuacja ekonomiczna wciąż jest zła i parlament przedstawia ustawę, która ma prywatnym długiem prywatnych banków (wobec brytyjskich i holenderskich banków) wynoszącym 3,5 miliarda euro obarczyć islandzkie rodziny na 15 lat ze stopą procentową 5,5 procent. W odpowiedzi na to następuje drugi etap pokojowej rewolucji. Początek 2010 roku: mieszkańcy zajmują ponownie place i ulice, żądając ogłoszenia referendum w powyższej sprawie. Luty 2010 roku: prezydent Olafur Grimsson wetuje proponowaną przez parlament ustawę i ogłasza ogólnonarodowe referendum, w którym 93 procent głosujących opowiada się za niespłacaniem tego długu. W międzyczasie rząd zarządził sądowe dochodzenia mające ustalić winnych doprowadzenia do zaistniałego kryzysu. Zostają wydane pierwsze nakazy aresztowania bankowców, którzy przezornie odpowiednio wcześniej uciekli z Islandii. W tym kryzysowym momencie zostaje powołane zgromadzenie mające spisać nową konstytucję uwzględniającą nauki z dopiero co „przerobionej lekcji”. W tym celu zostaje wybranych 25 obywateli wolnych od przynależności partyjnej spośród 522, którzy stawili się na głosowanie (kryterium wyboru tej „25%u2033 – poza nieposiadaniem żadnej książeczki partyjnej – była pełnoletniość oraz przedstawienie 30 podpisów popierających ich osób). Ta nowa rada konstytucyjna rozpoczęła w lutym pracę, która ma się zakończyć przedstawieniem i poddaniem pod głosowanie w najbliższych wyborach przygotowanej przez nią „Magna Carty”. Czy ktoś słyszał o tym wszystkim w europejskich środkach przekazu? Czy widzieliśmy, choćby jedno zdjęcie z tych wydarzeń w którymkolwiek programie telewizyjnym? Oczywiście – NIE! W ten oto sposób Islandczycy dali lekcję bezpośredniej demokracji oraz niezależności narodowej i monetarnej całej Europie pokojowo sprzeciwiając się Systemowi. Minimum tego, co możemy zrobić, to mieć świadomość tego, co się stało, i uczynić z tego „legendę” przekazywaną z ust do ust. </em></h5>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2012/02/07/islandia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UE &#8211; and all the followed crap</title>
		<link>http://www.michalagata.com/2012/02/06/ue-and-all-the-followed-crap/</link>
		<comments>http://www.michalagata.com/2012/02/06/ue-and-all-the-followed-crap/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 09:56:12 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=173</guid>
		<description><![CDATA[W założenia BLOG IT &#8211; migruje się chyba do zwykłego &#8222;przemyśleniowego&#8221; bloga Nie było to moją intencją, ale chroniczny brak czasu nie pozwala mi na wspominanie i opisywanie problemów z działki IT, które miałem okazję rozwiązywać. Nie potrafię natomiast pozostać &#8230; <a href="http://www.michalagata.com/2012/02/06/ue-and-all-the-followed-crap/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>W założenia BLOG IT &#8211; migruje się chyba do zwykłego &#8222;przemyśleniowego&#8221; bloga <img src='http://www.michalagata.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Nie było to moją intencją, ale chroniczny brak czasu nie pozwala mi na wspominanie i opisywanie problemów z działki IT, które miałem okazję rozwiązywać. Nie potrafię natomiast pozostać obojętny na wydarzenia obserwowane na co dzień.</p>
<p>Od zawsze byłem przeciwnikiem wejścia do UE. Nie wierzyłem w cudowne fundusze i dopłaty &#8211; aby wszystkim żyło się lepiej. Wielkokrotnie rozmawiałem ze znajomymi, którzy UE po prostu byli zachwyceni. Do dzisiaj nie rozumiem dlaczego ludzie tak ślepo wierzą, że ktoś dobrodusznie chce im podarować pieniądze. Na świecie NIE MA NIC ZA DARMO. Pierwsza podstawowa zasada &#8211; im szybciej się z tym oswoisz, tym mniej problemów i rozczarowań będziesz miał. Kasa nie spada z nieba. No chyba, że mówimy o drogocennych ładunkach wybuchowych. Podobnie &#8211; nikt nie inwestuje w wojnę bez chęci osiągnięcia korzyści finansowych. Wyjątkiem jest Polska, która do Afganistanu wysłała wojska, straciła kupę kasy i nic de facto z tego nie ma. Oj, zagalopowałem się &#8211; Polska coś z tego MA: najprawdopodobniej kolejną hordę wydatków, gdyż rząd Afganistanu wysnuł do &#8222;misjonarzy NATO&#8221; żądanie finansowania kraju przez następne 20 lat (&#8222;skoro zwalczyliście poprzedni ustrój i rozwaliliście kraj, to teraz pomóżcie go odbudować i utrzymać ustrój w nowej wersji 2.0&#8243;). NATO klepnęło &#8211; w końcu najważniejsi &#8222;najeźdźcy&#8221; będą odbudowywać kraj, utworzą firmy wydobywcze etc. Ale&#8230; nie POLSKA. Super, nie? Jak zwykle potrafimy jedynie logicznie myśleć i się jednoczyć jak walczymy ze wspólnym wrogiem.</p>
<p>Wracając jednak do UE &#8211; w pierwotnym założeniu miała to być Unia Gospodarcza. I tylko gospodarcza. Istnienia takowego tworu w życiu bym nie potępił (współpraca gospodarcza między państwami jest wszakże bardzo ważna!). W obecnej nedka formie UE przerosło chyba wszelkie (nie)oczekiwania. Narzucanie reform, narzucanie praw, ograniczenia. Mówiąc wprost: zniewolenie w białych rękawiczkach i pod niebieską flagą. Czy naprawdę człowiek niczego nie nauczy się od natury? Skoro wielkie, jednorakie państwo nigdy wcześniej nie było w stanie przetrwać &#8211; skąd wierzenia, że da się to zrealizować? W przeszłości było wiele heroicznych podbojów &#8211; ale wszystkie kończyły się tym samym skutkiem: rozpadem. Z najbliższych wydarzeń mogę przytoczyć chociażby historię ZSRR. Przyglądając się kierunkowi UE &#8211; nie sposób nie uwierzyć w przesłanki i faktu filmu &#8222;WAKE UP CALL&#8221;, którego obejrzenie na YouTube gorąco polecam. Cała sprawa śmierdzi spiskiem i to na szeroką skalę. Fenomen BANKU KRAJOWEGO/BANKU ŚWIATOWEGO powinien na starcie budzić najwięcej wątpliwości i pytań. Wracając jednak do sedna: ilość nowych, narzucanych przepisów oraz ich bezsensowność robi z obywatela &#8211; NIEWOLNIKA. Do tego rozdmuchana administracja tępych osłów, którzy MUSZĄ być na stanowiska pozatrudniani, bo trzeba ogarniać miliony przepisów narzucanych przez UE. Często przepisów gwarantujących przeżycie jedynie wielkim korporacjom. A to nie te korporacje utrzymują państwo. Do protestu dojść musi &#8211; jest to kwestia czasu. Czekam więc na nadchodzącą rewolucję, która &#8211; mam nadzieję &#8211; nadejdzie na szeroką skalę. Będzie krew, będzie zabijanie. Ale jest to chyba nieuniknione. Cały ten system zaszedł za daleko &#8211; nie da sięgo wyprostować. To trzeba zaorać, zniszczyć i zbudować od nowa. Od nowa &#8211; mam nadzieję &#8211; bazując na złych doświadczeniach teraźniejszości. Nie ma sensu powielać złych praktyk. Sama historia pokazuje, że &#8222;władza&#8221; nagina ścianki mydlanej bańki (w tej roli obywatele) sprawdzając jak dużo jeszcze wytrzymają, ile jeszcze można poprzeginać zanim coś pęknie. A ludzie JUŻ są na granicy wytrzymałości. Czas więc na rewoltę, na (używając opisów historycznych) wyrżnięcie w pień mas z władzą związanych. Dopiero wtedy następuje &#8222;otrzeźwienie&#8221;, strach i zmiana frontu. I po takowych wydarzeniach przez kilka(-naście) kolejnych lat jest dobrze. Wystarczy przejrzeć ostatnie 500 lat historii, aby dokładnie odnaleźć fakty, o których w obecnym artykule piszę.</p>
<p>Chylę natomiast czoła Islandii i ludziom tam żyjącym. Być może jest to wskaz, że tam należałoby się przenieść. Utarli nosa i politykom i korporacjom. Odsyłam do lektury: <a href="http://demotywatory.pl/3680983/Nie-dajmy-sie-zrzucic">http://demotywatory.pl/3680983/Nie-dajmy-sie-zrzucic</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2012/02/06/ue-and-all-the-followed-crap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>STOP ACTA!</title>
		<link>http://www.michalagata.com/2012/01/25/stop-acta/</link>
		<comments>http://www.michalagata.com/2012/01/25/stop-acta/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 08:38:58 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[acta]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=167</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
<a href='http://www.michalagata.com/2012/01/25/stop-acta/stop-acta-gf/' title='Stop ACTA GF'><img width="150" height="150" src="http://www.michalagata.com/wp-content/uploads/Stop-ACTA-GF-150x150.jpg" class="attachment-thumbnail" alt="Stop ACTA GF" title="Stop ACTA GF" /></a>
<a href='http://www.michalagata.com/2012/01/25/stop-acta/stop-acta-gf-2/' title='Stop ACTA GF'><img width="150" height="150" src="http://www.michalagata.com/wp-content/uploads/Stop-ACTA-GF1-150x150.jpg" class="attachment-thumbnail" alt="Stop ACTA GF" title="Stop ACTA GF" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2012/01/25/stop-acta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zmiany, zmiany&#8230;</title>
		<link>http://www.michalagata.com/2011/12/25/zmiany-zmiany/</link>
		<comments>http://www.michalagata.com/2011/12/25/zmiany-zmiany/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 09:57:43 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[Zmiany]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=163</guid>
		<description><![CDATA[Została zmieniona domena blogu &#8211; z wcześniejszej michalagata.pl na obecną michalagata.com. Powód kuriozalny &#8211; wysokość opłaty za domenę. Sam chyba jednak Czytelniku przyznasz, że nie jest to do końca normalne, aby: za domenę .com płacić ~ 37PLN z VAT za &#8230; <a href="http://www.michalagata.com/2011/12/25/zmiany-zmiany/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Została zmieniona domena blogu &#8211; z wcześniejszej <span style="color: #ff0000;">michalagata.pl</span> na obecną <span style="color: #ff0000;">michalagata.com</span>. Powód kuriozalny &#8211; wysokość opłaty za domenę. Sam chyba jednak Czytelniku przyznasz, że nie jest to do końca normalne, aby:</p>
<ul>
<li>za domenę .com płacić ~ <strong>37</strong>PLN z VAT</li>
<li>za domenę .pl płacić ~ <strong>123</strong> PLN z VAT</li>
</ul>
<p>Tym bardziej, że domena .com niejako jest definiowana jako komercyjna, a .pl w dużej mierze obsługuje prywatne inicjatywy.</p>
<p>&#8222;Well &#8211; life&#8217;s a bitch&#8230;&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/12/25/zmiany-zmiany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Służba &#8222;zdrowia&#8221;</title>
		<link>http://www.michalagata.com/2011/11/18/sluzba-zdrowia/</link>
		<comments>http://www.michalagata.com/2011/11/18/sluzba-zdrowia/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 08:49:59 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[OFF-TOPIC]]></category>
		<category><![CDATA[bandyctwo]]></category>
		<category><![CDATA[nfz]]></category>
		<category><![CDATA[niesprawiedliwość]]></category>
		<category><![CDATA[zdrowie]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=159</guid>
		<description><![CDATA[Dzisiejszy wpis dedykuję tak zwanej &#8222;służbie zdrowia&#8221;. Tak zwanej, gdyż cały ten monstrualny twór bazuje na kompletnie chorych zasadach. Skąd nagle ich tematyka? No cóż, gdyby nie kolejka zajmująca również przejście dla pieszych i nie pozwalająca mi przejechać &#8211; skierowana &#8230; <a href="http://www.michalagata.com/2011/11/18/sluzba-zdrowia/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dzisiejszy wpis dedykuję tak zwanej &#8222;służbie zdrowia&#8221;. Tak zwanej, gdyż cały ten monstrualny twór bazuje na kompletnie chorych zasadach. Skąd nagle ich tematyka? No cóż, gdyby nie kolejka zajmująca również przejście dla pieszych i nie pozwalająca mi przejechać &#8211; skierowana w stronę placówki <strong>NFZ</strong>&#8230; i nie wisząca szmata z podpisem &#8222;<span style="color: #ff0000;">Pogotowie strajkowe &#8211; żądamy podwyżki wynagrodzeń</span>&#8222;&#8230; to pewnie bym tematu nie podjął.</p>
<p>Tematyka &#8222;zdrowia&#8221; w tym kraju niezaprzeczalnie powiązana jest z <strong>ZUS</strong>, któremu jednak zadedykuję któryś z kolejnych wpisów.</p>
<p>Powróćmy jednak do &#8222;zdrowia&#8221;. Uważam, że wszelkiego rodzaju strajki i siłowe wywieranie wpływu na instancjach wyższych jest po prostu bezczelnością. Dlaczego &#8211; podpunkty poniżej:<br />
 <br />
* jeżeli ktokolwiek próbował się dostać do lekarza, w szczególności specjalisty &#8211; wie z jakim piekłem musi się zmierzyć. Terminy &#8211; nieakceptowalne. Załatwienie skierowania &#8211; graniczy z cudem. Jakość &#8222;obsługi&#8221; &#8211; skandaliczna. Obsługi, bo wszelkie państwowe jednostki medyczne w tym kraju świadcząusługi &#8211; nie jest to jakieś kapłańskie powołanie &#8211; nie można w ten sposób mydlić oczu! Wniosek: w tym kraju nie opłaca się chorować.</p>
<p>* na dziś dzień stałą praktyką jest &#8211; &#8222;idę do lekarza &#8211; płacę&#8221;. Państwowa służba zdrowia jest mitem i nic tego nie zmieni. Również obserwując zachowania firm i korporacji wobec pracowników można zauważyć, iżstandardem są pakiety zdrowotne w prywatnych centrach medycznych. Bo każdy wie z czym to się wiąże.</p>
<p>* promowanie jakiejkolwiek grupy społecznej jest naocznym dowodem niesprawiedliwości. A promowanych grup, które straszą i wywierająwpływ (i co ciekawe &#8211; nikt im skrzydeł nie ucina!) jest kilka: lekarze, pielęgniarki, górnicy, PKP, stoczniowcy, nauczyciele, urzędnicy. Bezczelność bez granic. Ciekawe, że pozostała część pracującego społeczeństwa (czyli co najmniej 80% pracującej całości) nie ma co liczyć na jakiekolwiek przywileje. I nikt się o nich nie martwi. No ale tak &#8211; nie blokują Sejmu, nie palą kukieł, nie blokują ruchu. Dlatego nie trzeba być specjalnie uzdolnionym aby zauważyć, że dziwnym trafem sterujący państwem promują i ulegają klasom, które w najbardziej zwierzęcy, siłowy i agresywny sposób wymuszają na nich specjalne traktowanie.</p>
<p>* kompletnie nielogicznym, niezrozumiałym i abstrakcyjnym faktem jest opłacanie składek &#8222;zdrowotnych&#8221;. Jak się pracuje w więcej niż 1 firmie &#8211; opłaca się dodatkowe składki &#8222;zdrowotne&#8221;. To jest ciekawe, czyż nie? Czy to, że pracuję w 2 miejscach na raz oznacza, że jestem potencjalnie 2 razy bardziej chory? A może 2 razy więcej leków zużywam? A może uprawnia mnie to do zapisania się i zajęcia kolejek do 2 lekarzy na raz?</p>
<p>Ciekawym jest natomiast fakt, iż od kilkunastu lat obserwuję przeróżne ekipy polityczne &#8211; deklarujące w programach wyborczych zmianęsystemu &#8222;zdrowotnego&#8221; i od kilkunastu lat wszystkie z ekip <strong>KŁAMIĄ</strong>! Bo na chęciach i obietnicach się kończy.</p>
<p>Ze swojej strony proponuję rozwiązanie może brutalne, ale nie bardziej chore niż obecna &#8222;służba zdrowia&#8221;. Kompletna prywatyzacja &#8222;służby zdrowia&#8221;. Wszyscy niezmiernie wolno kumający czaczę od razu wyskoczyliby, że nie byłoby darmowej opieki zdrowotnej. G$$$$$ prawda, że tak od razu odstrzelę. Zamiast <strong>NFZ</strong> i składek &#8222;zdrowotnych&#8221; powstałaby instytucja ubezpieczeń zdrowotnych &#8211; taka jak <strong>PZU</strong>. Uiszczanoby składki od kwoty, na którą klient by się ubezpieczał. Istniałby tzw. pakiet standard, który obejmowałby leni, mało-ochoczo pracujących i emeryckie próchno (definicja nie obejmuje wszystkich, ale te osoby, które w harmonogramie codziennym lub tygodniowym zajmują kolejki w celu kolekjonowania leków, pogadania czy też wrąbania się na łóżko szpitalne, bo nie ma z kim spędzić wigilii &#8211; a syn straszliwie pije w więzieniu). Nie oszukujmy się &#8211; wszyscy płacą, ale nie wszyscy w jednym czasie korzystają. A to prowadzi &#8211; tak jak to w firmach ubezpieczeniowych bywa &#8211; do kumulowania pieniędzy, a przy tej zasadzie pojedyncze przypadki korzystające z usługi &#8211; mogłyby jak do tej pory liczyć na zabiegi bardzo kosztowne.</p>
<p><span style="text-decoration: underline;"><strong>Straty</strong> w porównaniu do obecnego systemu &#8211; żadnych</span>. Nadal istnieje pojęcie bezpłatnej opieki zdrowotnej.</p>
<p><strong>Korzyści</strong> &#8211; niezmierne oszczędności, a w przypadku niezadowolenia pracowników &#8211; skierowanie problemu do lokalnego managementu, dzięki czemu nie jest wymagane zdzierstwo podatkowe, aby grupie zrobić dobrze. A przy okazji management lokalny miałby szansę na uskutecznienie akcji znanej we wszystkich dziedzinach NIE-PROMOWANYCH (o których pisałem wyżej) pod tytułem: &#8222;jak się nie podoba, to wy%^&amp;$%lać!&#8221;.</p>
<p>Howgh!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/11/18/sluzba-zdrowia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux &#8211; likwidacja RAID-1</title>
		<link>http://www.michalagata.com/2011/08/31/linux-likwidacja-raid-1/</link>
		<comments>http://www.michalagata.com/2011/08/31/linux-likwidacja-raid-1/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 07:50:05 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[APPS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mdadm]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[raid-1]]></category>
		<category><![CDATA[raid1]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=152</guid>
		<description><![CDATA[W weekend zdarzyło mi się rozwiązywać kolejny z problemów doczesnego LINUX’a, czyli zejście z istniejącego RAID-1 na standardowy, pojedynczy dysk posiadający kilka partycji z logicznie rozłożonymi strukturami (/boot, swap, /). Zadanie wydawało się proste, jednakże szybko pojawiły się komplikacje. Poniżej &#8230; <a href="http://www.michalagata.com/2011/08/31/linux-likwidacja-raid-1/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>W weekend zdarzyło mi się rozwiązywać kolejny z problemów doczesnego LINUX’a, czyli zejście z istniejącego RAID-1 na standardowy, pojedynczy dysk posiadający kilka partycji z logicznie rozłożonymi strukturami <strong>(/boot</strong>, <strong>swap</strong>, <strong>/</strong>).</p>
<p>Zadanie wydawało się proste, jednakże szybko pojawiły się komplikacje. Poniżej postaram się opisać rozwiązanie, które zakończyło temat w trybie sukces. Można podejść do tematu wykonując operacje przy użyciu LiveCD, jednakże sposobu tego nie polecam.</p>
<p><strong>/dev/sda – pierwszy dysk w RAID-1</strong><br />
<strong>/dev/sdb – drugi dysk w RAID-1</strong></p>
<p>Oba dyski jednakowej pojemności.</p>
<p><strong>/dev/md0 – partycja RAID (/boot)</strong><br />
<strong>/dev/md1 – partycja RAID (swap)</strong><br />
<strong>/dev/md2 – partycja RAID (/)</strong></p>
<p>Partycje RAID ustawione jako Linux RAID Autodetect. Na starcie dyski były zsynchronizowane, nie wykazywały błędów.</p>
<p>Na pierwszy ogień poszło wypięcie z RAID pierwszego z dysków (jako, że ten własnie dysk miał po operacji pełnić główną rolę dysku systemowego).</p>
<p>Procedura klarowna i prosta:</p>
<p><em><span style="color: #0000ff;">linux# mdadm –manage /dev/md0 –fail /dev/sda1</span></em><br />
<em><span style="color: #0000ff;">linux# mdadm –manage /dev/md1 –fail /dev/sda2</span></em><br />
<em><span style="color: #0000ff;">linux# mdadm –manage /dev/md2 –fail /dev/sda3</span></em></p>
<p><em><span style="color: #0000ff;">linux# mdadm –manage /dev/md0 –remove /dev/sda1</span></em><br />
<em><span style="color: #0000ff;">linux# mdadm –manage /dev/md1 –remove /dev/sda2</span></em><br />
<em><span style="color: #0000ff;">linux# mdadm –manage /dev/md2 –remove /dev/sda3</span></em></p>
<p>W tym momencie RAID powinien składać się jedynie z dysku /dev/sdb (wszystkie partycje jako [<strong>_U</strong>]).</p>
<p>Nie ma obowiązku wykonywania kolejnego kroku, gdyż w założeniu – oba dyski posiadają zbieżną strukturę. W celu usystematyzowania struktury – „tworzymy” jej klon na pierwszym dysku:</p>
<p><em><span style="color: #0000ff;">linux# sfdisk –d /dev/sdb | sfdisk /dev/sda</span></em></p>
<p>Następnie czas pozbyć się systemu plików Linux RAID Autodetect:</p>
<p><em><span style="color: #0000ff;">linux# fdisk /dev/sda</span></em></p>
<p>i kolejno zmieniamy partycje (w moim przypadku <strong>1 – LINUX (/boot), 2 – SWAP, 3 – LINUX (/)</strong>):</p>
<p><span style="color: #0000ff;"><em>fdisk&gt; t</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 1</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 83</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; t</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 2</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 82</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; t</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 3</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; 82</em></span><br />
<span style="color: #0000ff;"><em>fdisk&gt; w</em></span></p>
<p>Po zapisaniu nowych partycji – wpinamy dysk w RAID celem synchronizacji zawartości:</p>
<p><span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md0 –add /dev/sda1</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md1 –add /dev/sda2</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md2 –add /dev/sda3</em></span></p>
<p>Stan synchronizacji sprawdzamy poprzez:</p>
<p><span style="color: #0000ff;"><em>linux# cat /proc/mdstat</em></span></p>
<p>Kiedy dyski zostaną zsynchronizowane – ponownie wypinany dysk pierwszy:</p>
<p><span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md0 –fail /dev/sda1</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md1 –fail /dev/sda2</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md2 –fail /dev/sda3</em></span></p>
<p><span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md0 –remove /dev/sda1</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md1 –remove /dev/sda2</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –manage /dev/md2 –remove /dev/sda3</em></span></p>
<p>Resetujemy blok RAID na wszystkich partycjach dyski pierwszego:</p>
<p><span style="color: #0000ff;"><em>linux# mdadm –zero-superblock /dev/sda1</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –zero-superblock /dev/sda2</em></span><br />
<span style="color: #0000ff;"><em>linux# mdadm –zero-superblock /dev/sda3</em></span></p>
<p>po czym przygotowujemy środowisko pod chroot (nowy „system” montuję przykładowo w /mnt/root):</p>
<p><span style="color: #0000ff;"><em>linux# mount /dev/sda3 /mnt/root</em></span><br />
<span style="color: #0000ff;"><em>linux# mount /dev/sda1 /mnt/root/boot</em></span><br />
<span style="color: #0000ff;"><em>linux# mount –o bind /dev /mnt/root/dev</em></span><br />
<span style="color: #0000ff;"><em>linux# mount –o bind /dev/pts /mnt/root/dev/pts</em></span><br />
<span style="color: #0000ff;"><em>linux# mount – o bind /proc /mnt/root/proc</em></span><br />
<span style="color: #0000ff;"><em>linux# mount –o bind /sys /mnt/root/sys</em></span></p>
<p>Startujemy chroot:</p>
<p><span style="color: #0000ff;"><em>linux# chroot /mnt/root /bin/bash</em></span></p>
<p>Po chwili wirtualnie “siedzimy” w systemie na dysku pierwszym. Czas wykonać zmiany:</p>
<p><span style="color: #0000ff;"><em>linux# rm /etc/mdadm.conf</em></span><br />
<span style="color: #0000ff;"><em>linux# rm /etc/mdadm/mdadm.conf</em></span></p>
<p>Edytujemy wpisy dysków, aby zmienić wpisy na odpowiednie partycje dysku pierwszego. W moim przypadku wyglądało to tak:</p>
<p><strong>/dev/md0 -&gt; /dev/sda1</strong><br />
<strong>/dev/md1 -&gt; /dev/sda2</strong><br />
<strong>/dev/md2 -&gt; /dev/sda3</strong></p>
<p><span style="color: #0000ff;"><em>linux# vi /etc/fstab</em></span></p>
<p>Podobnie w pliku mtab:</p>
<p><span style="color: #0000ff;"><em>linux# vi /etc/mtab</em></span></p>
<p>oraz w pliku GRUB:</p>
<p><span style="color: #0000ff;"><em>linux# vi /boot/grub/menu.lst</em></span></p>
<p>Czas na instalację GRUB oraz aktualizację ustawień:</p>
<p><span style="color: #0000ff;"><em>linux# grub-install /dev/sda</em></span></p>
<p>Dla pewności możemy jeszcze wykonać reconfigure:</p>
<p><span style="color: #0000ff;"><em>linux# dpkg-reconfigure grub-pc</em></span></p>
<p>Wybieramy instalację GRUB na dysku pierwszym (/dev/sda).</p>
<p><span style="color: #0000ff;"><em>linux# update-grub</em></span><br />
<span style="color: #0000ff;"><em>linux# update-grub2</em></span></p>
<p>Teraz wystarczy wyjść z chroot, odmontować partycje i zrestartować system pamiętając, aby przed restartem usunąć drugi z dysków.</p>
<p>Od tej chwili możemy cieszyć się zejściem z RAID-1! Alleluja i od przodu!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/08/31/linux-likwidacja-raid-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# &#8211; rozwiązania warunkowe &#8222;IF&#8221;</title>
		<link>http://www.michalagata.com/2011/08/04/c-rozwiazania-warunkowe-if/</link>
		<comments>http://www.michalagata.com/2011/08/04/c-rozwiazania-warunkowe-if/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 11:37:39 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ELSE]]></category>
		<category><![CDATA[IF]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=148</guid>
		<description><![CDATA[Rozwiązania przejść warunkowych w C# można zrealizować na wiele sposobów. Podstawowymi z nich są: (1) IF..ELSE: if(warunek) {    &#8230;    return varA; } else {    &#8230;    return varB; } (2) IF..RETURN: if(warunek) {    &#8230;    return &#8230; <a href="http://www.michalagata.com/2011/08/04/c-rozwiazania-warunkowe-if/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Rozwiązania przejść warunkowych w C# można zrealizować na wiele sposobów. Podstawowymi z nich są:</p>
<p><strong>(1) IF..ELSE:</strong></p>
<p><span style="color: #0000ff;">if(warunek)</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">   &#8230;</span><br />
<span style="color: #0000ff;">   return varA;</span><br />
<span style="color: #0000ff;">}</span><br />
<span style="color: #0000ff;">else</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">   &#8230;</span><br />
<span style="color: #0000ff;">   return varB;</span><br />
<span style="color: #0000ff;">}</span></p>
<p><strong>(2) IF..RETURN:</strong></p>
<p><span style="color: #0000ff;">if(warunek)</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">   &#8230;</span><br />
<span style="color: #0000ff;">   return varA;</span><br />
<span style="color: #0000ff;">}</span><br />
<span style="color: #0000ff;">&#8230;</span><br />
<span style="color: #0000ff;">return varB;</span></p>
<p><strong>(3) IF..SINGLERETURN:</strong></p>
<p><span style="color: #0000ff;">PrzykladowyTyp rezultat;</span><br />
<span style="color: #0000ff;">if(warunek)</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">    //stworzenie i konfiguracja rezultatu</span><br />
<span style="color: #0000ff;">    rezultat = varA;</span><br />
<span style="color: #0000ff;">}</span><br />
<span style="color: #0000ff;">else</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">    //stworzenie i konfiguracja rezultatu</span><br />
<span style="color: #0000ff;">    rezultat = varB;</span><br />
<span style="color: #0000ff;">}</span><br />
<span style="color: #0000ff;">return rezultat;</span></p>
<p><strong>(4) IF..MULTIRETURN:</strong></p>
<p><span style="color: #0000ff;">if(objekt == null)</span><br />
<span style="color: #0000ff;">    return null;</span></p>
<p><span style="color: #0000ff;">if(objekt.Id &lt;= 0)</span><br />
<span style="color: #0000ff;">    return null;</span></p>
<p><span style="color: #0000ff;">// inne działania</span><br />
<span style="color: #0000ff;">return objekt;</span></p>
<p><strong>(5) IF..GOTO:</strong></p>
<p><span style="color: #0000ff;">int rezultat;</span></p>
<p><span style="color: #0000ff;">  if (warunek) {</span><br />
<span style="color: #0000ff;">    rezultat = varA;</span><br />
<span style="color: #0000ff;">    goto out;</span><br />
<span style="color: #0000ff;">  }</span></p>
<p><span style="color: #0000ff;">  if (inny_warunek) {</span><br />
<span style="color: #0000ff;">    rezultat = varB;</span><br />
<span style="color: #0000ff;">    goto out;</span><br />
<span style="color: #0000ff;">  }</span></p>
<p><span style="color: #0000ff;">  rezultat = varC;</span></p>
<p><span style="color: #0000ff;">out:</span><br />
<span style="color: #0000ff;">  metoda1(argument1);</span><br />
<span style="color: #0000ff;">  return rezultat;</span></p>
<p>Postaram się poniżej omówić poszczególne przypadki i zwrócić Twoją uwagę na związane z poszczególnymi rozwiązaniami – szczegóły:</p>
<p><strong>ROZWIĄZANIE (1):</strong><br />
Silnie rozdzielona instrukcja warunkowa, jawnie reprezentowane bloki, które są wykonywane w zależności od spełnienia warunku. Nie jest spełnione „best practice” mówiące, że dana metoda powinna mieć jeden punkt wyjścia (<strong>return</strong>).</p>
<p><strong>ROZWIĄZANIE (2):</strong><br />
Rozwiązanie mocno zoptymalizowane pod względem zawartości kodu, może jednak powodować problemy przy rozczytywaniu kodu. <strong>W tym przypadku bardzo ważne jest dokładne skomentowanie poszczególnych kawałków kodu.</strong> Ponownie nie jest spełniony „best practice” – metoda posiada więcej niż jeden punkt wyjścia (<strong>return</strong>).</p>
<p><strong>ROZWIĄZANIE (3):</strong><br />
Ponownie silnie rozdzielona instrukcja warunkowa, spełniony traktat „best practice” – czyli pojedynczy punkt wyjścia metody. Tyle, że z powodzeniem można byłoby <strong>pozbyć się else’a</strong>.</p>
<p><strong>ROZWIĄZANIE (4):</strong><br />
Zestaw pojedynczych bloków warunkowych „if” i kilka punktów wyjścia metody (<strong>return</strong>). Rozwiązanie nie spełnia traktatu „best practice”. Na pierwszy rzut oka nie jest także zbyt optymalne. Ale tylko pozornie. Zwykle namnożenie kolejnych „if” powoduje, że w każdy z nich musi być sprawdzony! <strong>W tym konkretnym rozwiązaniu po każdym warunku „if” mamy punkt wyjścia w postaci return’a.</strong> Zatem konstrukcja zachowuje się jak kompleksowa konstrukcja <strong>if..else</strong>.</p>
<p><strong>ROZWIĄZANIE (5):</strong><br />
Rozwiązanie celowo zaprezentowane jako ostatnie. O ile spełniony jest traktat „best practice”, o tyle użycie funkcji skoku „<strong>GOTO</strong>” nie jest rozwiązaniem ani eleganckim, ani bezpiecznym. Zdecydowanie odradzam jego użycie.</p>
<p>Rozważmy jeszcze przez chwilę, czy wspomniane „best practice” jest rzeczywiście zawsze spełnione. <strong>Moim zdaniem – nie.</strong> Dana metoda, pomimo posiadania pojedynczego return’a – teoretycznie może mieć kolejny punkt wyjścia. Wystarczy, że zostanie przerwana jako skutek wyjątku (<strong>Exception</strong>).</p>
<p>Pozostaje jeszcze rozwiązanie wydzielenia rezultatu do podmetod, po czym zwrot warunkowy:</p>
<p><span style="color: #0000ff;">return rezultat ? metodaPozytywnegoRezultatu() : metodaNegatywnegoRezultatu();</span></p>
<p>Jeszcze ostatnie słowo na niedzielę w tej kwestii: aby uzyskać najlepszy rezultat pod względem wydajności kodu (aczkolwiek spotkałem się ostatnio ze stwierdzeniem „Na dziś dzień wydajność nie jest priorytetem”) – gdziekolwiek jest to możliwe – należy stosować <strong>SWITCH</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/08/04/c-rozwiazania-warunkowe-if/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# &#8211; operatory &#8222;IS&#8221; oraz &#8222;AS&#8221;</title>
		<link>http://www.michalagata.com/2011/08/04/c-operatory-is-oraz-as/</link>
		<comments>http://www.michalagata.com/2011/08/04/c-operatory-is-oraz-as/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 10:31:52 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[AS]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[IS]]></category>
		<category><![CDATA[operator]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=145</guid>
		<description><![CDATA[W języku C# na platformie .NET istnieją operatory: IS oraz AS. W większości są używane do osiągnięcia twgo samego (zamierzonego – mam nadzieję ) celu. Ich podstawową funkcją jest wykonanie rzutowania objektu na dany typ (CAST). Jak wiadomo również (lub &#8230; <a href="http://www.michalagata.com/2011/08/04/c-operatory-is-oraz-as/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>W języku C# na platformie .NET istnieją operatory: <strong>IS</strong> oraz <strong>AS</strong>. W większości są używane do osiągnięcia twgo samego (zamierzonego – mam nadzieję <img src='http://www.michalagata.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) celu. Ich podstawową funkcją jest wykonanie rzutowania objektu na dany typ (<strong>CAST</strong>).</p>
<p>Jak wiadomo również (lub nie) – najwyższą klasą, z której każda potomna dziedziczy – jest <strong>System.Object</strong>. Jeżeli nie dziedziczymy z System.Object bezpośrednio w kodzie &#8211; .NET CLR odziedziczy po nim w tle bez ingerencji developera. Ciekawym może być również fakt, iż metoda <strong>GetType()</strong> również pochodzi z System.Object.</p>
<p>Zacznijmy zatem analizę od operatora „<strong>IS</strong>”. Poniższy przykład ilustruje bezpieczne rzutowanie obiekty na zdefiniowany typ:</p>
<p><span style="color: #0000ff;">if( objektPrzykladowy is KlasaPrzykladowa )</span><br />
<span style="color: #0000ff;"> { </span><br />
<span style="color: #0000ff;">     KlasaPrzykladowa objPrzyklad = (KlasaPrzykladowa) objektPrzykladowy;</span><br />
<span style="color: #0000ff;"> }</span></p>
<p>Powyższy przykład jest bezpiecznie rozpisany, jako, że rzutowanie jest zależne od wyniku sprawdzanego w klauzuli „<strong>if</strong>”.</p>
<p>W przypadku braku sprawdzenia możliwości rzutowania – mógłby pojawić się wyjątek:</p>
<p><strong><span style="color: #0000ff;">KlasaPrzykladowa objPrzyklad = (KlasaPrzykladowa) objektPrzykladowy;</span></strong></p>
<p>Reasumując – powyższy przykład w przypadku braku możliwości zrzutowania objektPrzykladowy na typ KlasaPrzykladowa – spowodowałaby pojawienie się <strong>wyjątku i przerwanie wykonywania kodu</strong>.</p>
<p>Drugim analizowanym operatorem jest „<strong>AS</strong>”. Jego działanie jest nieco inne niż w przypadku operatora „<strong>IS</strong>”. Operator „<strong>IS</strong>” najpierw próbuje zrzutować obiekt do zdefiniowanego typu – jeżeli rzutowanie siępowiedzie – jest zwracany objekt typu rzutowanego, w innym przypadku – zwracany jest „<strong>null</strong>”.</p>
<p>Poniżej przykład użycia „<strong>IS</strong>”:</p>
<p><span style="color: #0000ff;">KlasaPrzykladowa objPrzyklad =  objektPrzykladowy as KlasaPrzykladowa;</span><br />
<span style="color: #0000ff;"> if(objPrzyklad != null)</span><br />
<span style="color: #0000ff;"> {</span><br />
<span style="color: #0000ff;"> //użycie objektu</span><br />
<span style="color: #0000ff;"> }</span></p>
<p>Analizując powyższy kod – widać, że w pierwszej linii CLR sprawdzi, czy rzutowanie jest możliwe zwracając albo obiekt rzutowanego typu, albo „<strong>null</strong>”. W drugiej linii wystarczy sprawdzić, czy dany objekt nie jest „null’em” i w przypadku <strong>TRUE</strong> – wykonywane są dalsze operacje na zrzutowanym już objekcie.</p>
<p>Należy jednak pamiętać o tym, że sprawdzanie możliwości rzutowania przez CLR jest <strong>operacją dość kosztowną</strong>.</p>
<p>Porównując oba operatory, można dojśćdo następujących wniosków:<br />
Używanie operatora „<strong>IS</strong>” niesie ze sobą ryzyko, gdyż w razie braku możliwości rzutowania – <strong>nie jest zgłaszany wyjątek</strong>! Należy zatem sprawdzać, czy rzutowany objekt <strong>NIE JEST NULL’EM</strong>.</p>
<p>Z kolei używanie operatora „<strong>AS</strong>” jest idealne w przypadku przyporządkowywania wartości do objektów (np. Label, TextBox czy InputBox).</p>
<p>Aby to zobrazować, posłużę siędwoma przykładami – używając operator „<strong>AS</strong>” oraz bez użycia tego operatora:</p>
<p>(1) <span style="color: #0000ff;">textbox1.Text = data row["kolumnaPrzykladowa"] as String;</span><br />
(2) <span style="color: #0000ff;">textbox1.Text = data row["kolumnaPrzykladowa "].ToString();</span></p>
<p>W obu przykładach rzutowanie przyniesie podobny rezultat z tą jednak bardzo ważną różnicą, że w przykładzie (2) <strong>.ToString()</strong> może rzucić wyjątkiem, gdy <strong>data row["kolumnaPrzykladowa "]</strong> będzie <strong>NULL’EM</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/08/04/c-operatory-is-oraz-as/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wykorzystywanie wyjątków w regularnym działaniu aplikacji.</title>
		<link>http://www.michalagata.com/2011/08/04/wykorzystywanie-wyjatkow-w-regularnym-dzialaniu-aplikacji/</link>
		<comments>http://www.michalagata.com/2011/08/04/wykorzystywanie-wyjatkow-w-regularnym-dzialaniu-aplikacji/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 09:04:20 +0000</pubDate>
		<dc:creator>Michał Agata</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[exception]]></category>

		<guid isPermaLink="false">http://www.michalagata.com/?p=142</guid>
		<description><![CDATA[W procesie developmentu aplikacji zdarzają się sytuacje, kiedy programista świadomie decyduje się na wystąpienie wyjątku typu Exception. Przykładów jest wiele, jednym z moich ulubionych jest utworzenie metody sprawdzającej, czy plik nie jest używany (aby go przykładowo chwycić do zapisu). W &#8230; <a href="http://www.michalagata.com/2011/08/04/wykorzystywanie-wyjatkow-w-regularnym-dzialaniu-aplikacji/">Czytaj dalej <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>W procesie developmentu aplikacji zdarzają się sytuacje, kiedy programista świadomie decyduje się na wystąpienie wyjątku typu Exception. Przykładów jest wiele, jednym z moich ulubionych jest utworzenie metody sprawdzającej, czy plik nie jest używany (aby go przykładowo chwycić do zapisu).</p>
<p>W powyższej sytuacji często najlepszym rozwiązaniem jest utworzenie metody, która próbuje podjąć plik do zapisu (i w razie sukcesu zwraca TRUE) – a jeżeli zostanie wygenerowany Exception – zwraca FALSE.</p>
<p>Jest to typowe użycie błędu typu Exception w ramach poprawnego działania aplikacji.</p>
<p>Postanowiłem przedstawić 2 podstawowe techniki bezawaryjnej obsługi Exception tak, aby aplikacja kontynuowała działanie bez dodatkowych problemów związanych z wystąpieniem wyjątku.</p>
<p style="text-align: center;"><strong>ROZWIĄZANIE #1</strong></p>
<p>Pierwszym rozwiązaniem jest utworzenie „metody nadrzędnej”. Dzięki przekazywaniu metody jako argumentu – możemy w prosty sposób utworzyć obsługiwany blok try…catch:</p>
<p><span style="color: #0000ff;">public void OlejExceptions(Action przyklad)</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">    try</span><br />
<span style="color: #0000ff;">    {</span><br />
<span style="color: #0000ff;">        przyklad.Invoke();</span><br />
<span style="color: #0000ff;">    }</span><br />
<span style="color: #0000ff;">    catch { }</span><br />
<span style="color: #0000ff;">}</span></p>
<p>Poniższe wywołanie spowoduje zignorowanie wszystkich rzuconych wyjątków w metodzie Przykladowa:</p>
<p><strong><span style="color: #0000ff;">OlejExceptions(() =&gt; Przykladowa());</span></strong></p>
<p style="text-align: center;"><strong>ROZWIĄZANIE #2</strong></p>
<p>Drugim rozwiązaniem jest tzw. PostSharp. Dzięki PostSharp możemy utworzyć atrybut, który byłby w stanie wykonać oznaczoną metodę przy pomocy MethodInterceptionAspect:</p>
<p><span style="color: #0000ff;">public class OlejExpections : MethodInterceptionAspect</span><br />
<span style="color: #0000ff;">{</span><br />
<span style="color: #0000ff;">    public override void OnInvoke(MethodInterceptionArgs przyklad)</span><br />
<span style="color: #0000ff;">    {</span><br />
<span style="color: #0000ff;">        try</span><br />
<span style="color: #0000ff;">        {</span><br />
<span style="color: #0000ff;">            przyklad.Proceed();</span><br />
<span style="color: #0000ff;">        }</span><br />
<span style="color: #0000ff;">        catch { }</span><br />
<span style="color: #0000ff;">    }</span><br />
<span style="color: #0000ff;">}</span></p>
<p>Teraz wystarczy wykorzystać w wywołaniu przykładowej metody Przykladowa użyć zdefiniowanego atrybutu:</p>
<p><strong><span style="color: #0000ff;">public class KlasaPrzykladowa </span></strong><br />
<strong><span style="color: #0000ff;">{</span></strong><br />
<strong>    <span style="color: #0000ff;">[IgnoreExpections]</span></strong><br />
<strong><span style="color: #0000ff;">    public void Przykladowa()</span></strong><br />
<strong><span style="color: #0000ff;">    {</span></strong><br />
<strong>        <span style="color: #0000ff;">throw new Exception();</span></strong><br />
<strong><span style="color: #0000ff;">    }</span></strong><br />
<strong><span style="color: #0000ff;">}</span></strong></p>
<p>Developer może przekazać specyficzny rodzaj wyjątku poprzez atrybut konstruktora. Tak więc – nie ma praktycznie w tym przypadku jakichkolwiek ograniczeń.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.michalagata.com/2011/08/04/wykorzystywanie-wyjatkow-w-regularnym-dzialaniu-aplikacji/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

