<?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; Różności</title>
	<atom:link href="http://www.konri.com/category/roznosci/feed" rel="self" type="application/rss+xml" />
	<link>http://www.konri.com</link>
	<description>KONRI.COM - Java, GWT, Spring, Billing dla SaaS...</description>
	<lastBuildDate>Fri, 27 Jan 2012 21:07:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Pomiar i monitoring czasu wykonania metod w aplikacjach Springframework</title>
		<link>http://www.konri.com/2012/01/pomiar-i-monitoring-czasu-wykonania-metod-w-aplikacjach</link>
		<comments>http://www.konri.com/2012/01/pomiar-i-monitoring-czasu-wykonania-metod-w-aplikacjach#comments</comments>
		<pubDate>Fri, 27 Jan 2012 20:50:46 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Polecane]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[anotacje]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[springframework]]></category>
		<category><![CDATA[wydajność]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=498</guid>
		<description><![CDATA[W pewnym momencie rozwoju aplikacji najpoważniejszym wyzwaniem staje się zapewnienie wydajności. Przy wzroście ilości użytkowników wzrasta obciążenie systemu. Wzrasta również ilość przechowywanych danych i operacje na tych samych tabelach zajmują znacznie więcej czasu niż dotychczas.
Często trudno jest ocenić w którym miejscu aplikacji tracimy najwięcej, dodatkowo takich miejsc jest wiele i trudno wybrać, które fragmenty kodu optymalizować najpierw, aby uzyskać jak najwięcej.
Z pomocą programowania aspektowego (Aspektów), anotacji oraz prostego obiektu generowania statystyk można łatwo stworzyć idealne narzędzie do analizy wydajności i wyszukiwanie wąskich gardeł w systemie.
Wystarczy stworzyć anotację:

package pl.benhauer.salesmanago.tools.monitoring;
&#160;
import java.lang.annotation.*;
&#160;
@Target&#40;&#123;ElementType.METHOD, ElementType.TYPE&#125;&#41;
@Retention&#40;RetentionPolicy.RUNTIME&#41;
@Inherited
@Documented
public ...]]></description>
		<wfw:commentRss>http://www.konri.com/2012/01/pomiar-i-monitoring-czasu-wykonania-metod-w-aplikacjach/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Natywnie czy nie&#8230; o aplikacjach mobilnych troszkę&#8230;</title>
		<link>http://www.konri.com/2010/12/natywnie-czy-nie-o-aplikacjach-mobilnych-troszke</link>
		<comments>http://www.konri.com/2010/12/natywnie-czy-nie-o-aplikacjach-mobilnych-troszke#comments</comments>
		<pubDate>Thu, 09 Dec 2010 10:51:36 +0000</pubDate>
		<dc:creator>Konrad</dc:creator>
				<category><![CDATA[Polecane]]></category>

		<guid isPermaLink="false">http://www.konri.com/?p=483</guid>
		<description><![CDATA[Od jakiegoś czasu zastanawiam się, jak obecnie podejść do tworzenia oprogramowania dla urządzeń mobilnych. Częstym, jeżeli nie wyborem jest tworzenie aplikacji natywnych &#8211; czyli budowanych w oparciu o SDK danego producenta (w przypadku Androida  grupy producentów/urządzeń).
Wybór taki przypomina decyzje, jakie podejmowane były, i w sumie nadal są, w przypadku aplikacji na zwykłe komputery. Inaczej tworzymy aplikację na Windows &#38; inaczej na Mac OS X, jeszcze inaczej na Linux&#8217;a (oczywiście to uproszczony pogląd).
Sytuację to ogromnie zmienił trend jakim stał się SaaS, czyli aplikacje dostępne 24h na dobę, w przeglądarce, dla dowolnej ...]]></description>
		<wfw:commentRss>http://www.konri.com/2010/12/natywnie-czy-nie-o-aplikacjach-mobilnych-troszke/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>2026</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>2026</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>2398</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>3351</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>3374</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>3374</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>3415</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>3467</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>3467</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>3612</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>3612</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>2</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>
	</channel>
</rss>

