<?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>guzik &#187; Tech</title>
	<atom:link href="http://guzik.net.pl/blog/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://guzik.net.pl/blog</link>
	<description>Mój blog</description>
	<lastBuildDate>Wed, 16 May 2012 20:15:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>PHP i transakcje w MySQL</title>
		<link>http://guzik.net.pl/blog/2012/05/php-i-transakcje-w-mysql/</link>
		<comments>http://guzik.net.pl/blog/2012/05/php-i-transakcje-w-mysql/#comments</comments>
		<pubDate>Wed, 16 May 2012 20:15:38 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PDO]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3832</guid>
		<description><![CDATA[Nie jestem programistą, ani Programistą PHP. Czasem robię code review lub piszę protezę dla jakichś systemów. Po ostatnim przeglądzie uważam, że warto wspomnieć o prostych sposobach na transakcje w (My)SQL. Jeśli mamy do dyspozycji PDO (PHP Data Objects) i PHP >= 5.1 (ew. 5.0 i PDO jako PECL), to możemy użyć gotowych mechanizmów do obsługi [...]]]></description>
			<content:encoded><![CDATA[<p>Nie jestem programistą, ani Programistą PHP. Czasem robię <em>code review</em> lub piszę protezę dla jakichś systemów.<br />
Po ostatnim przeglądzie uważam, że warto wspomnieć o prostych sposobach na transakcje w (My)SQL.</p>
<p>Jeśli mamy do dyspozycji <a href="http://www.php.net/manual/en/book.pdo.php">PDO (PHP Data Objects)</a> i PHP >= 5.1 (ew. 5.0 i PDO jako PECL), to możemy użyć gotowych mechanizmów do obsługi transakcji i <a href="http://php.net/manual/en/language.exceptions.php">wyjątków</a> (od PHP 5.0):</p>
<blockquote><p><code>try {<br />
&nbsp;&nbsp;$dbh-><a href="http://php.net/manual/en/pdo.begintransaction.php">beginTransaction</a>();<br />
&nbsp;&nbsp;$dbh-><a href="http://www.php.net/manual/en/pdo.exec.php">exec</a>('pierwsze zapytanie');<br />
&nbsp;&nbsp;$dbh->exec('drugie zapytanie');<br />
&nbsp;&nbsp;$dbh->exec('trzecie zapytanie');<br />
&nbsp;&nbsp;$dbh-><a href="http://www.php.net/manual/en/pdo.commit.php">commit</a>();<br />
} catch (<a href="http://www.php.net/manual/en/class.exception.php">Exception</a> $e) {<br />
&nbsp;&nbsp;$dbh-><a href="http://www.php.net/manual/en/pdo.rollback.php">rollBack</a>();<br />
&nbsp;&nbsp;echo $e-><a href="http://www.php.net/manual/en/exception.getmessage.php">getMessage</a>();<br />
}</code></p></blockquote>
<p><span id="more-3832"></span>Jeśli wystąpi jakikolwiek wyjątek, blok <code>try{}</code> jest przerywany i wykonuje się <code>catch{}</code>. Na końcu tego pierwszego mamy <code>commit()</code>, w przypadku wystąpienia błędu &#8211; wywołany zostanie <code>rollback()</code>.<br />
<code>try{} catch{}</code> znane jest z innych języków i jest przydatne &#8211; warto zapamiętać.</p>
<p>W przypadku, gdy nie używamy PDO, można użyć sztuczki z operatorami logicznymi:</p>
<blockquote><p><code>mysql_query("BEGIN");<br />
$r = mysql_query('pierwsze zapytanie');<br />
$r &#038;= mysql_query('drugie zapytanie');<br />
$r &#038;= mysql_query('trzecie zapytanie');<br />
if ($r)<br />
&nbsp;&nbsp;mysql_query('COMMIT');<br />
else<br />
&nbsp;&nbsp;mysql_query('ROLLBACK');</code></p></blockquote>
<p>Naturalnie brak tu obsługi błędów, bo po <code>else</code> <code>mysql_error()</code> zwróci nam to, co nastąpiło po ostatnim <code>mysql_query</code>, ale czasami i to wystarcza.</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/05/php-i-transakcje-w-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache i mod_proxy</title>
		<link>http://guzik.net.pl/blog/2012/05/apache-i-mod_proxy/</link>
		<comments>http://guzik.net.pl/blog/2012/05/apache-i-mod_proxy/#comments</comments>
		<pubDate>Tue, 15 May 2012 20:39:12 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_proxy]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3827</guid>
		<description><![CDATA[Ot taka ciekawostka &#8211; zmieniam serwer WWW na świeższy i przenoszę na niego wszystkie usługi. Źródłowy to Apache 2.0.52 (Magic Number: 20020903:9) na RHEL 4.4, docelowy &#8211; Apache 2.2.3 (Magic Number: 20051115:3) na OEL 5.8 (Tikanga). Pewna aplikacja działa na IIS na innym serwerze (to w zasadzie oczywiste), a Apache tylko pośredniczy w przekazywaniu ruchu [...]]]></description>
			<content:encoded><![CDATA[<p>Ot taka ciekawostka &#8211; zmieniam serwer WWW na świeższy i przenoszę na niego wszystkie usługi. Źródłowy to Apache 2.0.52 (Magic Number: 20020903:9) na RHEL 4.4, docelowy &#8211; Apache 2.2.3 (Magic Number: 20051115:3) na OEL 5.8 (Tikanga).<br />
Pewna aplikacja działa na IIS na innym serwerze (to w zasadzie oczywiste), a Apache tylko pośredniczy w przekazywaniu ruchu za pomocą <code>mod_proxy</code>. Z racji tego, że programista Windows nie zwracał uwagi na wielkość znaków, czasami odwołania zaszyte w kodzie są małymi, czasami wielkimi literami. Dlatego też konfiguracja wygląda tak:</p>
<blockquote><p><code>SSLProxyEngine on<br />
ProxyPass /app/ https://winsrv/app/<br />
ProxyPassReverse /app/ https://winsrv/app/<br />
ProxyPass /APP/ https://winsrv/app/<br />
ProxyPassReverse /APP/ https://winsrv/app/</code></p></blockquote>
<p>I na starym serwerze wszystko działało. Na nowym przy ładowaniu konfiguracji pojawia się ostrzeżenie:<span id="more-3827"></span></p>
<blockquote><p><code>[Fri May 11 09:17:05 2012] [warn] worker https://winsrv/app/ already used by another worker</code></p></blockquote>
<p>Dla jasności &#8211; chodzi o <code>ProxyPass</code>. Jeśli wyrzucę konfigurację z wielkimi literami, to część odwołań nie działa, a to oznacza, że sprawdzanie jest <em>case sensitive</em>, natomiast przetwarzanie już nie. Dziwne.</p>
<p>Jakoś głęboko nie szukałem na razie wyjaśnienia (przejrzałem tylko <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=44350">jeden wątek na forum</a>). Uznaję, że tak to właśnie ma działać, a ostrzeżenie jest dla przestrogi, jeśli rzeczywiście będę miał kiedyś błąd.</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/05/apache-i-mod_proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitorowanie procesów Java</title>
		<link>http://guzik.net.pl/blog/2012/05/monitorowanie-procesow-java/</link>
		<comments>http://guzik.net.pl/blog/2012/05/monitorowanie-procesow-java/#comments</comments>
		<pubDate>Mon, 14 May 2012 20:31:42 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[GCViewer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JConsole]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3819</guid>
		<description><![CDATA[Dla fanów monitoringu i podglądania co w trawie piszczy &#8211; dziś prezentacja JConsole. Narzędzie umożliwia podłączenie się do działającego procesu Java i jego analizę (głównie pod kątem pamięciowym). Aby cieszyć się JConsole potrzebne jest JDK (w JRE go nie ma). Podłączyć można się zarówno do lokalnego procesu, jak i do procesu działającego na zdalnej maszynie. [...]]]></description>
			<content:encoded><![CDATA[<p>Dla fanów monitoringu i podglądania co w trawie piszczy &#8211; dziś prezentacja JConsole.</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/05/jconsole.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/05/jconsole-300x230.png" alt="" title="jconsole" width="300" height="230" class="aligncenter size-medium wp-image-3821" /></a><br />
<span id="more-3819"></span><br />
Narzędzie umożliwia podłączenie się do działającego procesu Java i jego analizę (głównie pod kątem pamięciowym). Aby cieszyć się JConsole potrzebne jest JDK (w JRE go nie ma).<br />
Podłączyć można się zarówno do lokalnego procesu, jak i do procesu działającego na zdalnej maszynie. Jako parametr przy wywołaniu możemy podać pid (lokalnego procesu) lub JMX URL (service:jmx:&lt;protocol&gt;://&#8230;) &#8211; osobiście tego drugiego sposobu nie używam, zawsze robię przekierowanie X&#8217;ów (zobacz: <a href="http://www.varlog.pl/2011/03/praca-zdalna-na-systemach-nix-w-trybie-graficznym/">Praca zdalna na systemach *nix w trybie graficznym</a>).</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/05/jconsole-process.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/05/jconsole-process-300x258.png" alt="" title="jconsole-process" width="300" height="258" class="aligncenter size-medium wp-image-3822" /></a><br />
Jak uruchamiam lokalnie, to zazwyczaj znam id procesu, który chcę podejrzeć, ale może ich być tak dużo, że nie wiemy który za co odpowiada (huh!). Można zastosować prostą sztuczkę &#8211; do wywołania dodać jako pierwszy parametr, który nie jest do niczego używany, jak na poniższym zrzucie (tu akurat nie jest pierwszy):</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/05/java-identify.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/05/java-identify-300x39.png" alt="" title="java-identify" width="300" height="39" class="aligncenter size-medium wp-image-3823" /></a><br />
Uruchamiając JConsole bez parametrów też go zobaczymy w takiej postaci.</p>
<p>Więcej informacji o tym narzędziu na stronach Oracle:</p>
<ul>
<li><a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html">Using JConsole to Monitor Applications</a></li>
</ul>
<p>I na koniec bonus &#8211; świetne narzędzie do analizy logów GC: <a href="http://www.tagtraum.com/gcviewer.html">GCViewer</a></p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/05/monitorowanie-procesow-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle 11gR2 na SUSE Linux Enterprise Server 11.1</title>
		<link>http://guzik.net.pl/blog/2012/05/oracle-11gr2-na-suse-linux-enterprise-server-11-1/</link>
		<comments>http://guzik.net.pl/blog/2012/05/oracle-11gr2-na-suse-linux-enterprise-server-11-1/#comments</comments>
		<pubDate>Sun, 13 May 2012 20:27:24 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SuSE]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3815</guid>
		<description><![CDATA[W sieci jest mnóstwo ściąg jak zainstalować Oracle 11gR2 na SLES 11, nawet na stronie Novell, ale instalacja/aktualizacja 11.2.0.2 wygląda trochę inaczej. Mianowicie przy wyborze grupy systemowej (dla SYSDBA i SYSOPER) mamy na liście disk, oinstall i dba. Niezależnie od tego co wybierzemy instalator sprawdza istnienie wszystkich tych grup w systemie (11.2.0.1 tak nie miał). [...]]]></description>
			<content:encoded><![CDATA[<p>W sieci jest mnóstwo ściąg jak zainstalować Oracle 11gR2 na SLES 11, nawet <a href="http://ftp.novell.com/partners/oracle/docs/11gR2_sles11_install.pdf">na stronie Novell</a>, ale instalacja/aktualizacja 11.2.0.2 wygląda trochę inaczej. Mianowicie przy wyborze grupy systemowej (dla SYSDBA i SYSOPER) mamy na liście <code>disk</code>, <code>oinstall</code> i <code>dba</code>. Niezależnie od tego co wybierzemy instalator sprawdza istnienie wszystkich tych grup w systemie (11.2.0.1 tak nie miał). Jeśli którejś nie znajdzie, zwraca błąd <code>INS-30060</code>.</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/05/sles11ora11202.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/05/sles11ora11202-300x234.png" alt="" title="sles11ora11202" width="300" height="234" class="aligncenter size-medium wp-image-3816" /></a><br />
<span id="more-3815"></span><br />
Pytanie brzmi &#8222;<em>Are yuo sure you want to continue?</em>&#8222;, ale niestety odpowiedź &#8222;<em>Yes</em>&#8221; nie oznacza, że uda nam się przejść dalej. Po prostu instalator się zamyka.</p>
<p>Żeby było jasne &#8211; za pomocą pakietu orarun przygotowałem wcześniej system. Ale nawet te programy/skrypty nie dodają grupy <code>dba</code>.</p>
<p>Obejściem problemu jest uruchomienie instalatora z parametrem <code>-ignoreInternalDriverError</code>. Rozwiązaniem &#8211; dodanie przed instalacją grupy dba w systemie i dorzucenie do niej użytkownika, z którego prawami działać będzie baza (zazwyczaj oracle).</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/05/oracle-11gr2-na-suse-linux-enterprise-server-11-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Enterprise Linux 5.5 na Fujitsu PRIMERGY RX200 S7</title>
		<link>http://guzik.net.pl/blog/2012/05/oracle-enterprise-linux-5-5-na-fujitsu-primergy-rx200-s7/</link>
		<comments>http://guzik.net.pl/blog/2012/05/oracle-enterprise-linux-5-5-na-fujitsu-primergy-rx200-s7/#comments</comments>
		<pubDate>Sat, 12 May 2012 20:27:13 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Fujitsu]]></category>
		<category><![CDATA[OEL]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RHEL]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3808</guid>
		<description><![CDATA[Ta wersja systemu musi być i już. Cała instalacja przebiega pomyślnie z małym wyjątkiem &#8211; nie działa sieć. W przypadku serwera ma to duże znaczenie :/ Interfejsy rozpoznawane są jako: Ethernet controller: Intel Corporation Unknown device 1521 (rev 01) W zasadzie większość urządzeń to &#8222;Unknown device&#8221; Moje rozwiązanie problemu: Na innej maszynie z tym samym [...]]]></description>
			<content:encoded><![CDATA[<p>Ta wersja systemu musi być i już.<br />
Cała instalacja przebiega pomyślnie z małym wyjątkiem &#8211; nie działa sieć. W przypadku serwera ma to duże znaczenie :/<br />
Interfejsy rozpoznawane są jako:</p>
<blockquote><p><code>Ethernet controller: Intel Corporation Unknown device 1521 (rev 01)</code></p></blockquote>
<p>W zasadzie większość urządzeń to &#8222;Unknown device&#8221;<br />
<a href="http://guzik.net.pl/blog/wp-content/uploads/2012/05/rhel55rx200s7.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/05/rhel55rx200s7-300x225.png" alt="" title="rhel55rx200s7" width="300" height="225" class="aligncenter size-medium wp-image-3811" /></a><br />
Moje rozwiązanie problemu: <span id="more-3808"></span>Na innej maszynie z tym samym systemem ściągnąłem aktualizację jądra (miałem ten komfort, że taką maszynę mam; choć z drugiej strony, gdybym nie miał, nie było by wymogu instalacji właśnie tej wersji systemu). W domyślnej instalacji jest jądro 2.6.18-194.el5.</p>
<p>Żeby tylko ściągnąć paczkę za pomoca yum potrzebny jest dodatek <code>yum-downloadonly</code>:</p>
<blockquote><p><code>yum install yum-downloadonly</code></p></blockquote>
<p>Dzięki tej wtyczce możemy użyć dodatkowych opcji do yum:</p>
<ul>
<li><code>--downloadonly</code> &#8211; nie instaluj/aktualizuj, jedynie pobierz,</li>
<li><code>--downloaddir=/path/to/dir</code> &#8211; określa gdzie trafią pobrane paczki (domyślnie <code>/var/cache/yum/el5_latest</code> &#8211; ten ostatni katalog w zależności od ustawionego repozytorium)</li>
</ul>
<p>Po instalacji wtyczki pobrałem paczkę z jądrem (na chwilę obecną <code>kernel-2.6.18-308.1.1.0.1.el5.x86_64.rpm</code>):</p>
<blockquote><p><code>yum update --downloadonly kernel</code></p></blockquote>
<p>Przeniosłem ją na docelową maszynę za pomocą pamięci flash, zaktualizowałem za pomocą <code>rpm -Uvh</code> (2.6.18-308.4.1.0.1.el5) i od tego czasu cieszę się działającą siecia :-)<br />
Aczkolwiek z poprawną identyfikacją nadal jest problem:</p>
<blockquote><p><code>Ethernet controller: Intel Corporation Device 1521</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/05/oracle-enterprise-linux-5-5-na-fujitsu-primergy-rx200-s7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Idzie zima, kopii nie ma</title>
		<link>http://guzik.net.pl/blog/2012/02/idzie-zima-kopii-nie-ma/</link>
		<comments>http://guzik.net.pl/blog/2012/02/idzie-zima-kopii-nie-ma/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 17:00:30 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3748</guid>
		<description><![CDATA[Wstępem do tego wpisu powinna być historia firmy zza oceanu, w której to wysypywały się obliczenia, bo inżynier idąc wymienić taśmę do streamera przechodził przez miejsce, w którym pod podłogą biegły kable i na skutek nacisku coś tam interferowało. Nie pamiętam dokładnie tej historii i nie wiem gdzie o niej czytałem, ale liczę, że ktoś [...]]]></description>
			<content:encoded><![CDATA[<p>Wstępem do tego wpisu powinna być historia firmy zza oceanu, w której to wysypywały się obliczenia, bo inżynier idąc wymienić taśmę do streamera przechodził przez miejsce, w którym pod podłogą biegły kable i na skutek nacisku coś tam interferowało. Nie pamiętam dokładnie tej historii i nie wiem gdzie o niej czytałem, ale liczę, że ktoś poda odnośnik do oryginału w komentarzu.</p>
<p>Ja spotkałem się z sytuacją, gdzie z powodu zbyt niskiej wilgotności powietrza (spadek poniżej 5%) streamer nie chciał nagrywać. Prawdopodobnie taśma kleiła się do głowicy czy gdzieś pojawiały się ładunki.<br />
<span id="more-3748"></span>Taka sytuacja może mieć miejsce w czasie gdy temperatura zewnętrzna mocno spada (np. niedawne -20 stopni). Specjalistą nie jestem, ale wilgotność względna powietrza zaciągniętego do środka pomieszczenia i gwałtownie ogrzanego mocno spada.</p>
<p>Pracowałem w wielu serwerowniach (jak kto woli DC) i tam gdzie była klimatyzacja precyzyjna pewnie było dobrze i nikt nie zwracał na to uwagi, tam gdzie działały klimatyzatory &#8216;biurowe&#8217; też nikt nie zwracał na to uwagi, bo trzeba by dodatkowo nawilżać powietrze. Czasem ignorowanie tego czynnika może mieć fatalne konsekwencje.<br />
A producenci jasno podają warunki w jakich sprzęt i materiały powinny pracować. Przykładowo napęd <a href="http://www.fujitsu.com/global/services/computing/storage/eternus/products/tape/lt20/spec/">Fujitsu Eternus LT-20</a> powinien pracować w zakresie 20 &#8211; 80%:<br />
<div id="attachment_3757" class="wp-caption aligncenter" style="width: 310px"><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/02/lt20-env.png"><img class="size-medium wp-image-3757" title="lt20-env" src="http://guzik.net.pl/blog/wp-content/uploads/2012/02/lt20-env-300x47.png" alt="" width="300" height="47" /></a><p class="wp-caption-text">Fujitsu Eternus LT-20</p></div><br />
<a href="http://www-03.ibm.com/systems/storage/tape/ts3100/specifications.html">IBM TS3100 Tape Library Express</a> ma szerszy zakres &#8211; 10 &#8211; 80%:<br />
<div id="attachment_3764" class="wp-caption aligncenter" style="width: 310px"><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/02/ibmlto.png"><img class="size-medium wp-image-3764" title="ibmlto" src="http://guzik.net.pl/blog/wp-content/uploads/2012/02/ibmlto-300x63.png" alt="" width="300" height="63" /></a><p class="wp-caption-text">IBM TS3100 Tape Library Express</p></div><br />
natomiast taśmy <a href="http://www.fujifilmusa.com/products/tape_data_storage/midrange_tape/lto/lto_ultrium_4/index.html">FujiFilm LTO Ultrium4</a> &#8211; 10 do 80% (przechowywanie 20 &#8211; 80%):<br />
<div id="attachment_3758" class="wp-caption aligncenter" style="width: 310px"><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/02/lto4-env.png"><img class="size-medium wp-image-3758" title="lto4-env" src="http://guzik.net.pl/blog/wp-content/uploads/2012/02/lto4-env-300x48.png" alt="" width="300" height="48" /></a><p class="wp-caption-text">FujiFilm LTO Ultrium4</p></div><br />
z kolei <a href="http://www-03.ibm.com/systems/storage/media/lto_800gb/specifications.html">IBM LTO Ultrium 4</a> pracują w zakresie 10 &#8211; 80%, a długoterminowe przechowywanie to 20 &#8211; 50%.<br />
<div id="attachment_3765" class="wp-caption aligncenter" style="width: 310px"><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/02/ibmlto1.png"><img class="size-medium wp-image-3765" title="ibmlto" src="http://guzik.net.pl/blog/wp-content/uploads/2012/02/ibmlto1-300x92.png" alt="" width="300" height="92" /></a><p class="wp-caption-text">IBM LTO Ultrium 4</p></div></p>
<p>Gdyby ktoś chciał nawilżać powietrze, to istnieją urządzenia do tego &#8211; często sprzedawane do muzeum. Ew. można przetrzeć podłogę co godzinę mokrą szmatą ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/02/idzie-zima-kopii-nie-ma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnatt i Bacula &#8211; czas pracy streamera</title>
		<link>http://guzik.net.pl/blog/2012/02/gnatt-i-bacula-czas-pracy-streamera/</link>
		<comments>http://guzik.net.pl/blog/2012/02/gnatt-i-bacula-czas-pracy-streamera/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 17:00:16 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Bacula]]></category>
		<category><![CDATA[Gnatt]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3751</guid>
		<description><![CDATA[Gnatt zastąpił u mnie Bweb i teraz on rysuje wykresy. Gdyby ktoś chciał również go użyć do tego celu, poniżej gotowy skrypt dla MySQL: SELECT Job,StartTime,EndTime INTO OUTFILE 'streamer.csv' FIELDS TERMINATED BY ';' FROM( SELECT Job,StartTime,EndTime,sortcol FROM (SELECT CONCAT("Week ", WEEK(NOW())-1) AS Job, DATE_SUB(CURDATE(), INTERVAL 7-WEEKDAY(CURDATE()) DAY) AS StartTime, DATE_SUB(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 [...]]]></description>
			<content:encoded><![CDATA[<p>Gnatt zastąpił u mnie <a href="http://guzik.net.pl/blog/2011/06/bweb-i-gentoo/">Bweb</a> i teraz on rysuje wykresy. Gdyby ktoś chciał również go użyć do tego celu, poniżej gotowy skrypt dla MySQL:</p>
<blockquote><p><code>SELECT Job,StartTime,EndTime<br />
INTO OUTFILE 'streamer.csv' FIELDS TERMINATED BY ';'<br />
FROM(<br />
SELECT Job,StartTime,EndTime,sortcol<br />
FROM<br />
(SELECT CONCAT("Week ", WEEK(NOW())-1) AS Job, DATE_SUB(CURDATE(), INTERVAL 7-WEEKDAY(CURDATE()) DAY) AS StartTime, DATE_SUB(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 1 SECOND) AS EndTime,1 AS sortcol<br />
 UNION ALL<br />
<span id="more-3751"></span> (SELECT NAME,StartTime,EndTime,2<br />
   FROM bacula.Job<br />
  WHERE WEEKOFYEAR(EndTime) >= WEEKOFYEAR(NOW())-1<br />
    AND WEEKOFYEAR(StartTime) < WEEKOFYEAR(NOW())<br />
    AND Type = 'B'<br />
    AND JobStatus != 'A')) A<br />
  ORDER BY 4,2,3) B;</code></p></blockquote>
<p>Brzydko wygląda, ale działa :-)</p>
<p>Przykładowe wywołanie:</p>
<blockquote><p><code>mysql &lt; streamer.sql</code></p></blockquote>
<p>Trzeba pamiętać, że <code><a href="http://dev.mysql.com/doc/refman/5.5/en/select-into.html">SELECT INTO OUTFILE</a></code> ma tę właściwość, że nie nadpisuje pliku i przed wywołaniem trzeba usunąć poprzedni plik (lub zapisywać do nowego).</p>
<p>Zobacz także:</p>
<ul>
<li><a href="http://guzik.net.pl/blog/2011/06/bacula-i-wlasne-zestawienia/">Bacula i własne zestawienia</a></li>
<li><a href="http://guzik.net.pl/blog/2011/07/raport-kopii-bacula/">Raport kopii Bacula</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/02/gnatt-i-bacula-czas-pracy-streamera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnatt &amp; dbms_scheduler</title>
		<link>http://guzik.net.pl/blog/2012/02/gnatt-dbms_scheduler/</link>
		<comments>http://guzik.net.pl/blog/2012/02/gnatt-dbms_scheduler/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 06:00:08 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[dbms_scheduler]]></category>
		<category><![CDATA[Gnatt]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3737</guid>
		<description><![CDATA[Było zastosowanie Gnatt do kopii Oracle, to teraz do zadań harmonogramu Oracle (przez dbms_scheduler): set colsep ';' set head off; set feed off; set trimspool on; set linesize 32767; set pagesize 32767; set echo off; set termout off; set timing off; spool sched.csv SELECT 'Week ' &#124;&#124; TO_CHAR(SYSDATE-7, 'iw'), NEXT_DAY(trunc(SYSDATE)-14, 'MONDAY'), NEXT_DAY(trunc(SYSDATE)-7-1/60/60/24, 'SUNDAY') FROM dual; [...]]]></description>
			<content:encoded><![CDATA[<p>Było zastosowanie <a href="http://guzik.net.pl/blog/2012/02/gnatt-rman/">Gnatt do kopii Oracle</a>, to teraz do zadań harmonogramu Oracle (przez dbms_scheduler):</p>
<blockquote><p><code>set colsep ';'<br />
set head off;<br />
set feed off;<br />
set trimspool on;<br />
set linesize 32767;<br />
set pagesize 32767;<br />
set echo off;<br />
set termout off;<br />
set timing off;</p>
<p>spool sched.csv</p>
<p>SELECT 'Week ' || TO_CHAR(SYSDATE-7, 'iw'), NEXT_DAY(trunc(SYSDATE)-14, 'MONDAY'), NEXT_DAY(trunc(SYSDATE)-7-1/60/60/24, 'SUNDAY') FROM dual;<br />
<span id="more-3737"></span><br />
SELECT OWNER || '.' || JOB_NAME AS job, to_char(ACTUAL_START_DATE, 'YYYY-MM-DD HH24:MI:SS') as start_date, to_char(LOG_DATE, 'YYYY-MM-DD HH24:MI:SS') as end_date<br />
  FROM DBA_SCHEDULER_JOB_RUN_DETAILS<br />
 WHERE OWNER NOT IN ('EXFSYS', 'SYS')<br />
   AND TO_CHAR(LOG_DATE, 'iw') >= TO_CHAR(SYSDATE-7, 'iw')<br />
   AND TO_CHAR(ACTUAL_START_DATE, 'iw') < TO_CHAR(SYSDATE, 'iw')<br />
ORDER BY 1, 2, 3;</p>
<p>exit</code></p></blockquote>
<p>Podobnie jak poprzednio w wyniku otrzymamy plik sched.csv z zadaniami z minionego tygodnia, który ręcznie wczytujemy do Gnatt (ciągle brak przetwarzania wsadowego).<br />
Wywołanie:</p>
<blockquote><p><code>sqlplus -S '/ as sysdba' @sched.sql</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/02/gnatt-dbms_scheduler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnatt &amp; RMAN</title>
		<link>http://guzik.net.pl/blog/2012/02/gnatt-rman/</link>
		<comments>http://guzik.net.pl/blog/2012/02/gnatt-rman/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 15:22:03 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Gnatt]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[RMAN]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3730</guid>
		<description><![CDATA[Gnatt nadal się rozwija (aktualna wersja 1.0.7). Gdyby ktoś prócz mnie chciał użyć tego oprogramowania do zobrazowania czasu wykonywania kopii bazy Oracle przez RMAN, może użyć poniższego skryptu: set colsep ';' set head off; set feed off; set trimspool on; set linesize 32767; set pagesize 32767; set echo off; set termout off; set timing off; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://infowizja.nazwa.pl/projects/Gnatt/publish.htm">Gnatt</a> nadal się rozwija (aktualna wersja <a href="http://infowizja.nazwa.pl/projects/Gnatt/ChangeLog.txt">1.0.7</a>). Gdyby ktoś prócz mnie chciał użyć tego oprogramowania do zobrazowania czasu wykonywania kopii bazy Oracle przez RMAN, może użyć poniższego skryptu:</p>
<blockquote><p><code>set colsep ';'<br />
set head off;<br />
set feed off;<br />
set trimspool on;<br />
set linesize 32767;<br />
set pagesize 32767;<br />
set echo off;<br />
set termout off;<br />
set timing off;</p>
<p>spool backup.csv</p>
<p>SELECT 'Week ' || TO_CHAR(SYSDATE-7, 'iw'), NEXT_DAY(trunc(SYSDATE)-14, 'MONDAY'), NEXT_DAY(trunc(SYSDATE)-7-1/60/60/24, 'SUNDAY') FROM dual;<br />
<span id="more-3730"></span><br />
SELECT OBJECT_TYPE || '#FF0000', START_TIME, END_TIME<br />
  FROM V$RMAN_STATUS<br />
 WHERE OPERATION = 'BACKUP'<br />
   AND TO_CHAR(END_TIME, 'iw') >= TO_CHAR(SYSDATE-7, 'iw')<br />
   AND TO_CHAR(START_TIME, 'iw') < TO_CHAR(SYSDATE, 'iw')<br />
 ORDER BY 1,2,3;</p>
<p>exit</code></p></blockquote>
<p>Wywołanie np. tak:</p>
<blockquote><p><code>sqlplus -S '/ as sysdba' @backup.sql</code></p></blockquote>
<p>W wyniku dostaniemy plik backup.csv z danymi za miniony tydzień, który należy wczytać do Gnatt. Gotowy wykres może wyglądać tak (kliknij, żeby powiększyć):<br />
<a href="http://guzik.net.pl/blog/wp-content/uploads/2012/02/output2.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/02/output2-1024x45.png" alt="" title="output" width="450" height="19" class="aligncenter size-large wp-image-3734" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/02/gnatt-rman/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bugzilla &amp; Lighttpd @ Gentoo</title>
		<link>http://guzik.net.pl/blog/2012/02/bugzilla-lighttpd-gentoo/</link>
		<comments>http://guzik.net.pl/blog/2012/02/bugzilla-lighttpd-gentoo/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 17:00:16 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3721</guid>
		<description><![CDATA[W maju zeszłego roku opisałem próbę uruchomienia Icinga na Lighttpd pod Gentoo. Wróciłem jednakże po testach do Nagios i nie interesowałem się tym więcej. Gdyby ktoś chciał popróbować, to pod koniec zeszłego roku Icinga pojawiła się w drzewie portage. Dziś przymierzyłem się do Bugzilla na Lighttpd pod Gentoo. Jako, że Mozilla nie wspiera Bugzilla na [...]]]></description>
			<content:encoded><![CDATA[<p>W maju zeszłego roku opisałem próbę uruchomienia <a href="http://guzik.net.pl/blog/2011/05/icinga-i-lighttpd-lub-inny-apache-pod-gentoolinux/">Icinga na Lighttpd pod Gentoo</a>. Wróciłem jednakże po testach do Nagios i nie interesowałem się tym więcej. Gdyby ktoś chciał popróbować, to pod koniec zeszłego roku Icinga pojawiła się w <a href="http://packages.gentoo.org/package/net-analyzer/icinga">drzewie portage</a>.</p>
<p>Dziś przymierzyłem się do <a href="http://www.bugzilla.org/">Bugzilla</a> na Lighttpd pod Gentoo. Jako, że Mozilla nie wspiera Bugzilla na innym serwerze jak Apache, tak samo <em>ebuild</em> w Gentoo nie jest do tego przystosowany. Ale da się to zrobić. Poniżej moje zapiski z placu boju.<span id="more-3721"></span></p>
<p>1. Na początek instalacja:</p>
<blockquote><p><code>USE="-modperl" emerge bugzilla</code></p></blockquote>
<p>Flaga <code>modperl</code> jest dla Apache, więc nas nie interesuje.<br />
Domyślnie wybrana jest baza MySQL (flaga <code>mysql</code>), ale możemy zmienić na PostgreSQL (flaga <code>postgres</code>). Być może uda się również z Oracle, bo Bugzilla wspiera tą bazę przez <code>DBD-Oracle</code>, ale osobiście nie testowałem (choć mam <code><a href="http://guzik.net.pl/blog/2008/12/dbdoracle-problem-z-kompilacja/">DBD-Oracle</a></code>).<br />
Instalacja prawdopodobnie zakończy się powodzeniem, ale <code>webapp-config</code> już nie. Żąda Apache. Trzeba wywołać go ręcznie podając jako typ serwera <code>lighttpd</code>:</p>
<blockquote><p><code>/usr/sbin/webapp-config -I -s lighttpd -h localhost -u root -d /bugzilla bugzilla 3.6.8</code></p></blockquote>
<p>2. Dodatki:</p>
<blockquote><p><code>emerge dev-perl/GD dev-perl/GDTextUtil dev-perl/GDGraph dev-perl/MIME-tools dev-perl/libwww-perl dev-perl/Authen-SASL dev-perl/SOAP-Lite dev-perl/HTML-Parser dev-perl/Chart dev-perl/Template-GD dev-perl/XML-Twig dev-perl/PatchReader dev-perl/JSON-RPC dev-perl/Test-Taint dev-perl/HTML-Scrubber dev-perl/Email-MIME-Attachment-Stripper dev-perl/Email-Reply dev-perl/TheSchwartz dev-perl/Daemon-Generic dev-perl/Math-Random-Secure perl-ldap</code></p></blockquote>
<p>Nie wszystkie są potrzebne &#8211; zależy od konfiguracji, być może niektóre już są.<br />
<code>Authen::Radius</code> nie ma w Gentoo, więc (jeśli potrzebne) trzeba zainstalować dodatkowo poprzez:</p>
<blockquote><p><code>/usr/bin/perl install-module.pl Authen::Radius</code></p></blockquote>
<p>3. Przechodzimy do konfiguracji. Edytujemy plik <code>localconfig</code> i zmieniamy grupę z prawami której działa serwer WWW (<code>$webservergroup = 'lighttpd';</code>). Oczywiście resztę danych też powinnismy ustawić na tym etapie (np. dane do bazy).</p>
<p>4. Tworzymy brakujący katalog</p>
<blockquote><p><code>mkdir /var/www/localhost/htdocs/bugzilla/lib</code></p></blockquote>
<p>5. A następnie finalizujemy instalację:</p>
<blockquote><p><code>/var/www/localhost/htdocs/bugzilla/checksetup.pl</code></p></blockquote>
<p>6. Jeszcze tylko konfiguracja serwera WWW i gotowe. Tworzymy nowy plik, np. <code>/etc/lighttpd/bugzilla.conf</code> (opcjonalnie poniższe wstawiamy w <code>lighttpd.conf</code>) z następującą zawartością:</p>
<blockquote><p><code>server.modules += ("mod_cgi")<br />
server.modules += ("mod_access")</p>
<p>$HTTP["url"] =~ "^/bugzilla/.*" {<br />
        dir-listing.activate = "disable"<br />
        cgi.assign = (".cgi" => "")<br />
        index-file.names   = ("index.cgi")<br />
        url.access-deny = ("localconfig", "data/params")<br />
}</code></p></blockquote>
<p>Plik ten trzeba dodać do globalnej konfiguracji Lighttpd:</p>
<blockquote><p><code>include "bugzilla.conf"</code></p></blockquote>
<p>7. Restart serwera WWW i działa!</p>
<p>Nie udostępniam Bugzilla, więc poprawki do powyższego tekstu możecie zgłaszać w komentarzach.</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/02/bugzilla-lighttpd-gentoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

