<?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>www.konri.com &#187; Polecane</title>
	<atom:link href="http://www.konri.com/category/roznosci/polecane/feed" rel="self" type="application/rss+xml" />
	<link>http://www.konri.com</link>
	<description>KONRI.COM - Java, GWT, Spring, Billing dla SaaS...</description>
	<lastBuildDate>Mon, 19 Jul 2010 07:26:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Reklama w internecie &#8220;dla opornych&#8221;</title>
		<link>http://www.konri.com/2010/07/reklama-w-internecie-dla-opornych</link>
		<comments>http://www.konri.com/2010/07/reklama-w-internecie-dla-opornych#comments</comments>
		<pubDate>Mon, 19 Jul 2010 06:58:31 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Polecane]]></category>
		<category><![CDATA[Różności]]></category>
		<category><![CDATA[adwords]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[reklama]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=468</guid>
		<description><![CDATA[
Witam!
Jakiś czas temu znajomy strasznie męczył mnie, by mu pomóc zareklamować się w Google. Gość ma konto AdWords, pokazał mi jak to funkcjonuje, i przyznam się, że z jako takim obyciem wśród aplikacji internetowych &#8211; przestraszyłem się! Chodziło mu o jedną prostą reklamę, no &#8211; może ambitniejszym zadaniem było to, że znajomy prowadzi firmę w Bielsku &#8211; i tylko tam chciał się reklamować.
Ja niestety nie mam czasu &#8211; jak zresztą widać po liczbie wpisów na blogu, więc musiałem coś wymyślić &#8211; w końcu ktoś musiał zetknąć się z rozmiarem skomplikowania ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/07/reklama-w-internecie-dla-opornych/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Szybka konwersja obiektu na i z XML&#8217;a</title>
		<link>http://www.konri.com/2010/02/szybka-konwersja-obiektu-na-i-z-xmla</link>
		<comments>http://www.konri.com/2010/02/szybka-konwersja-obiektu-na-i-z-xmla#comments</comments>
		<pubDate>Fri, 26 Feb 2010 12:49:12 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=455</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>1904</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>1904</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>2257</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3206</b><br />
<br />
<b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Argument must be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3258</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3289</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3289</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3332</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3332</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3477</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3477</b><br />
Często pisząc krótkie &#8220;spike&#8217;i&#8221; (dla nie wtajemniczonych mianem spike określa się testowe/demonstracyjne aplikacje, lub ich zmodyfikowane fragmenty) potrzebujemy gdzieś zapisać lub przesłać obiekt Javy w formacie XML&#8217;a. Znajdziemy całą masę rozwiązań wspomagających to zadanie, jednak gdy zależy nam na czasie, niekiedy najprostsze rozwiązania są najlepsze.
Oto bardzo szybki przykład takiego zadania:

package com.konri.spikes.xml;
&#160;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.text.MessageFormat;
&#160;
public class Sample &#123;
&#160;
	public static void main&#40;String&#91;&#93; args&#41; throws UnsupportedEncodingException &#123;
		SampleObj sampleObj = new SampleObj&#40;&#41;;
		sampleObj.setLabel&#40;&#34;This is test message&#34;&#41;;
		sampleObj.setValue&#40;123&#41;;
		sampleObj.setCheck&#40;true&#41;;
&#160;
		String res = write&#40;sampleObj&#41;;
		System.out.println&#40;&#34;XML:\n&#34; + res&#41;;
&#160;
		SampleObj sampleObj2 = read&#40;res&#41;;
		System.out.println&#40;&#34;Loaded object: &#34; + sampleObj2&#41;;
	&#125;
&#160;
	public static class ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/02/szybka-konwersja-obiektu-na-i-z-xmla/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konferencja Zimowy AgileTuning</title>
		<link>http://www.konri.com/2010/02/konferencja-zimowy-agiletuning</link>
		<comments>http://www.konri.com/2010/02/konferencja-zimowy-agiletuning#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:53:03 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=436</guid>
		<description><![CDATA[W sobotę 20 marca 2010 r. w krakowskich Przegorzałach odbędzie się konferencja Zimowy AgileTuning. Na spotkaniu zaplanowane są prezentacje i dyskusje dotyczące inżynierii oprogramowania, jak i o tematyce całkowicie dowolnej, prowadzone w małych grupach.
Na niezwykłą atmosferę wieczoru składa się obecność właściwych ludzi oraz dobór odpowiedniego miejsca sprzyjającego bezpośrednim i nieskrępowanym dyskusjom. Duża część uczestników przyjeżdża na specjalne zaproszenie organizatorów. Każdy z nich ma bogate i różnorodne doświadczenia.
Program




Ludzie
Rzemiosło


14:00
Rozpoczęcie


14:15
Autoprezentacje Uczestników


15:00
Antonello Caboni, Colin Grossman -
Agile in a Start-up, a rapidly growing organization
Bartosz Bankowski, Szczepan Faber -
Be a VIP and rid your WIP


16:00
Nigel Baker ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/02/konferencja-zimowy-agiletuning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Czego unikać w prezentacjach &#8230;</title>
		<link>http://www.konri.com/2010/01/czego-unikac-w-prezentacjach</link>
		<comments>http://www.konri.com/2010/01/czego-unikac-w-prezentacjach#comments</comments>
		<pubDate>Thu, 28 Jan 2010 13:23:23 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Narzędzia]]></category>
		<category><![CDATA[Polecane]]></category>
		<category><![CDATA[Różności]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=428</guid>
		<description><![CDATA[Świetna &#8211; właśnie &#8211; prezentacja, polecam:

]]></description>
		<wfw:commentRss>http://www.konri.com/2010/01/czego-unikac-w-prezentacjach/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak podtrzymać &#8220;żywą&#8221; instancję aplikacji na Google App Engine</title>
		<link>http://www.konri.com/2010/01/jak-podtrzymac-instancje-aplikacji-na-google-app-engine</link>
		<comments>http://www.konri.com/2010/01/jak-podtrzymac-instancje-aplikacji-na-google-app-engine#comments</comments>
		<pubDate>Tue, 12 Jan 2010 21:28:56 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=411</guid>
		<description><![CDATA[W poprzednim poście pisałem iż czas życia instancji aplikacji w kontenerze GAE jest bardzo ograniczony ? aplikacja ładowana jest w momencie zapytania ? pozostaje w pamięci przez krótki czas ? o ile nie nadejdzie kolejne zapytanie.
Przy małym ruchu powoduje to w praktyce ładowanie aplikacji dla każdego zapytania &#8211; używając np. Springframework powoduje to kilkunasto sekundowe opóźnienie w obsłudze zapytania ? co jest niedopuszczalne.
Jak na razie jedynym rozwiązaniem, choć nie jestem w 100% przekonany, iż można założyć, że kolejne zapytanie zostanie obsłużone przez tą samą instancję, a po drugie zjada to ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/01/jak-podtrzymac-instancje-aplikacji-na-google-app-engine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zanim zdecydujesz się na Google App Engine</title>
		<link>http://www.konri.com/2010/01/zanim-zdecydujesz-sie-na-google-app-engine</link>
		<comments>http://www.konri.com/2010/01/zanim-zdecydujesz-sie-na-google-app-engine#comments</comments>
		<pubDate>Tue, 12 Jan 2010 20:19:54 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=402</guid>
		<description><![CDATA[Zanim zdecydujesz się na Google App Engine warto wiedzieć o pewnych przypadłościach i zastosowanych rozwiązaniach.

[-] Zapytania do Datastore mogą zwrócić jedynie do 1000 rekordów, zespół GAE pracuje nad propozycją kursora, który będzie pozwalał na iteracje po większej ilości danych.
[--] Duże limitacje GQL &#8211; w sortowaniu oraz użyciu operatorów. Szczegóły można przeczytać tutaj.
[---] Znaczne zużycie API CPU dla zapisu i odczytu danych z Datastore, zwłaszcza gdy ich hierarchia jest dość głęboka (więcej na ten temat w moim poprzednim poście &#8211; i o rozwiązaniu używając pola Serializowalnego).
[-] Długi czas tworzenia indeksów &#8211; ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/01/zanim-zdecydujesz-sie-na-google-app-engine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pole serializowalne w GAE datastore</title>
		<link>http://www.konri.com/2010/01/pole-serializowalne-w-gae-datastore</link>
		<comments>http://www.konri.com/2010/01/pole-serializowalne-w-gae-datastore#comments</comments>
		<pubDate>Sun, 03 Jan 2010 21:18:13 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=393</guid>
		<description><![CDATA[W poprzednim poście napisałem o problemach z niebywale dużym zużyciem CPU podczas operacji zapisu do datastore Google App Engine. Od kilku dni zastanawiałem się, jak zaradzić temu problemowi &#8211; rozwiązanie znalazłem i zaimplementowałem dosłownie przed chwileczką.
Struktura rekordu z danymi zapisywany podczas zapytania do API była dość rozgałęziona &#8211; coś w stylu drzewa o 3 poziomach na drugim poziomie około 3-4 rekordów &#8211; na kolnym po około 2-3 dla każdego elementu z poziomu wyżej. Co ważne, żaden z elementów poniżej głównego rekordu nie był używany w zapytaniach.
Po kilku nieudanych próbach ograniczenia ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/01/pole-serializowalne-w-gae-datastore/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Czy użycie CPU przez Datastore Cię zrujnuje?</title>
		<link>http://www.konri.com/2010/01/czy-uzycie-cpu-przez-datastore-cie-zrujnuje</link>
		<comments>http://www.konri.com/2010/01/czy-uzycie-cpu-przez-datastore-cie-zrujnuje#comments</comments>
		<pubDate>Fri, 01 Jan 2010 22:18:16 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=372</guid>
		<description><![CDATA[Bawiąc się z małym projektem aplikacji dla Google App Engine doszedłem do różnych interesujących wniosków.
Jednym z ciekawszych jest użycie CPU &#8211; i bynajmniej nie CPU generowanego przez kod samej aplikacji &#8211; a CPU użyte przez datastore (jak wywnioskować można z panelu administracyjnego &#8211; około 90% użycia CPU jest generowane przez API Calls CPU).
Konsumowane jest ono w dość dużym tempie. Moja przykładowa aplikacja zapisuje pewne dane przy zapytaniu przesłanym do API. Zapytanie takie może zapisać/uaktualnić około (oszacowane manualnie na podstawie definicji modelu klas danych) 20 wierszy, musi załadować również dwa troszkę ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/01/czy-uzycie-cpu-przez-datastore-cie-zrujnuje/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App engine i DatastoreTimeoutException</title>
		<link>http://www.konri.com/2009/12/google-app-engine-i-datastoretimeoutexception</link>
		<comments>http://www.konri.com/2009/12/google-app-engine-i-datastoretimeoutexception#comments</comments>
		<pubDate>Mon, 28 Dec 2009 22:55:42 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=383</guid>
		<description><![CDATA[Po kilku tygodniach zabawy z GAE zauważyć można masę problemów. Jedną z bardzo denerwujących przypadłości Clouda w wykonaniu Google jest problem z Datastore, do którego proste zapytanie przekracza dozwolony czas odpowiedzi.
Logi prostej aplikacji po pewnym czasie pełne są informacji o DatastoreTimeoutException.
Na dyskusję na ten temat można natknąć się tu. Sugestią inżynierów z Google zdaje się być ponowienie próby operacji na datastor&#8217;ze w przypadku takiego błędu. O ile nie najgorzej to wygląda w przypadku odczytu danych o tyle już sprawa zapisu z takim rozwiązaniem była by co nieco dyskusyjna. Jak na ...]]></description>
		<wfw:commentRss>http://www.konri.com/2009/12/google-app-engine-i-datastoretimeoutexception/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mail w Google App Engine &#8211; IllegalArgumentException: Unauthorized Sender</title>
		<link>http://www.konri.com/2009/11/mail-w-google-app-engine-illegalargumentexception-unauthorized-sender</link>
		<comments>http://www.konri.com/2009/11/mail-w-google-app-engine-illegalargumentexception-unauthorized-sender#comments</comments>
		<pubDate>Mon, 30 Nov 2009 20:11:11 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=369</guid>
		<description><![CDATA[<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>1904</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>1904</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>2257</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3206</b><br />
<br />
<b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Argument must be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3258</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3289</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3289</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3332</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3332</b><br />
<br />
<b>Warning</b>:  array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3477</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/home/konrad/public_html/wp-content/plugins/wp-syntax/geshi/geshi.php</b> on line <b>3477</b><br />
Jeżeli w Google App Engine próbujesz wysłać wiadomość e-mail i w logu widzisz błąd:

Illegal Arguments java.lang.IllegalArgumentException: Unauthorized Sender

upewnij się, czy aby na pewno jaki SENDER ustawione jest konto, które jest zarejestrowane jako jeden z administratorów Twojej aplikacji.
GAE pozwala wysyłać maile jedynie z kont zarejestrowanych jako administrator aplikacji. Możesz dodać dowolną ilość takich kont do swojej aplikacji w zakładce &#8220;Developers&#8221; w panelu administracyjnym.
]]></description>
		<wfw:commentRss>http://www.konri.com/2009/11/mail-w-google-app-engine-illegalargumentexception-unauthorized-sender/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
