<?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>blog internauty o nicku horhe</title>
	<atom:link href="http://blog.mejor.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mejor.pl</link>
	<description>Blog głównie techniczny</description>
	<lastBuildDate>Tue, 01 Nov 2011 09:42:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Czarna list adresów ip (RBL) nadawców maili</title>
		<link>http://blog.mejor.pl/2011/10/czarna-list-rbl/</link>
		<comments>http://blog.mejor.pl/2011/10/czarna-list-rbl/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 19:15:09 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[spam]]></category>
		<category><![CDATA[polski rbl]]></category>
		<category><![CDATA[rbl]]></category>
		<category><![CDATA[rbl spam]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=403</guid>
		<description><![CDATA[Pod adresem rbl.mejor.pl jest dostępna moja własna lista adresów ip, od których nie chcę otrzymywać emaili. Najczęściej są to maile z &#8222;to nie jest oferta handlowa&#8221;. Jest to lista (obecnie) trójstopniowa, zwracam rekordy o wartości 127.0.0.1, 127.0.0.2, 127.0.0.5. Zwykle wygląda to w ten sposób, że pierwszy email to jeden punkt, drugi to dwa, trzeci to [...]]]></description>
			<content:encoded><![CDATA[<p>Pod adresem<strong> rbl.mejor.pl</strong> jest dostępna moja własna lista adresów ip, od których nie chcę otrzymywać emaili. Najczęściej są to maile z &#8222;to nie jest oferta handlowa&#8221;. Jest to lista (obecnie) trójstopniowa, zwracam rekordy o wartości 127.0.0.1, 127.0.0.2, 127.0.0.5. Zwykle wygląda to w ten sposób, że pierwszy email to jeden punkt, drugi to dwa, trzeci to pięć. Jak zawsze są wyjątki, jeśli mail dostał zbyt mało punktów z innych reguł to ipek nadawcy może już w pierwszym podejściu awansować na wyższy pułap (lub gdy treść była wyjątkowo irytująca).<br />
Na swojej liście mam umieszczony np. Linkedin, za spamowanie zaproszeniami. Ostrzegam&#8230;<br />
Sposób odpytywania rbla jest klasyczny, jeśli interesuje kogoś co sądzę o adresie <strong>1.2.3.4</strong> to odpytuje o rekord A dla hosta <strong>4.3.2.1.rbl.mejor.pl.</strong></p>
<p>Poniżej zamieszczam gotowca do spamassassina (zawierającego również punktację dla białej listy).</p>
<p><code><br />
header __LR_NADAWCA_W_H eval:check_rbl('horhe', 'rbl.mejor.pl.')<br />
describe __LR_NADAWCA_W_H Odebrane od nadawcy w RBL horhe<br />
tflags __LR_NADAWCA_W_H net<br />
reuse __LR_NADAWCA_W_H</p>
<p>header LR_NADAWCA_W_RBL_H1 eval:check_rbl_sub('horhe', '127.0.0.1')<br />
describe LR_NADAWCA_W_RBL_H1 Odebrane od nadawcy w RBL horhe<br />
tflags LR_NADAWCA_W_RBL_H1 net<br />
score LR_NADAWCA_W_RBL_H1 1<br />
reuse LR_NADAWCA_W_RBL_H1</p>
<p>header LR_NADAWCA_W_RBL_H2 eval:check_rbl_sub('horhe', '127.0.0.2')<br />
describe LR_NADAWCA_W_RBL_H2 Odebrane od nadawcy w RBL horhe<br />
tflags LR_NADAWCA_W_RBL_H2 net<br />
score LR_NADAWCA_W_RBL_H2 2<br />
reuse LR_NADAWCA_W_RBL_H2</p>
<p>header LR_NADAWCA_W_RBL_H5 eval:check_rbl_sub('horhe', '127.0.0.5')<br />
describe LR_NADAWCA_W_RBL_H5 Odebrane od nadawcy w RBL horhe<br />
tflags LR_NADAWCA_W_RBL_H5 net<br />
score LR_NADAWCA_W_RBL_H5 5<br />
reuse LR_NADAWCA_W_RBL_H5</p>
<p>header LR_NADAWCA_W_RWL_H1 eval:check_rbl_sub('horhe', '127.0.1.1')<br />
describe LR_NADAWCA_W_RWL_H1 Odebrane od nadawcy w RWL horhe<br />
tflags LR_NADAWCA_W_RWL_H1 net<br />
score LR_NADAWCA_W_RWL_H1 -1<br />
reuse LR_NADAWCA_W_RWL_H1</p>
<p>header LR_NADAWCA_W_RWL_H2 eval:check_rbl_sub('horhe', '127.0.1.2')<br />
describe LR_NADAWCA_W_RWL_H2 Odebrane od nadawcy w RWL horhe<br />
tflags LR_NADAWCA_W_RWL_H2 net<br />
score LR_NADAWCA_W_RWL_H2 -2<br />
reuse LR_NADAWCA_W_RWL_H2<br />
</code></p>
<p>To jest moja własna lista, nie ponoszę odpowiedzialności za skutki jej użycia przez innych.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2011/10/czarna-list-rbl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uwaga na certyfikaty SSL z KIRu</title>
		<link>http://blog.mejor.pl/2011/10/uwaga-na-certyfikaty-ssl-z-kiru/</link>
		<comments>http://blog.mejor.pl/2011/10/uwaga-na-certyfikaty-ssl-z-kiru/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 17:52:11 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[różne]]></category>
		<category><![CDATA[certyfikat ssl kir]]></category>
		<category><![CDATA[nie działa certyfikat ssl kir]]></category>
		<category><![CDATA[problem certyfikat ssl kir]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=389</guid>
		<description><![CDATA[certyfikat ssl kir nie ma pełnego łańcucha zaufania]]></description>
			<content:encoded><![CDATA[<p>Na dzień dzisiejszy wygląda to tak, że KIR sprzedaje certyfikat, który nie ma pełnego łańcucha zaufania. Sugestia od nich aby rozwiązać problem komunikatu w przeglądarce: należy w przeglądarce dodać ich CA do zaufanych!<br />
Reasumując sprzedają certyfikat, który jest tak samo zaufany jak certyfikat &#8222;self signed&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2011/10/uwaga-na-certyfikaty-ssl-z-kiru/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dziś jest piękny dzień</title>
		<link>http://blog.mejor.pl/2011/10/dzis-jest-piekny-dzien/</link>
		<comments>http://blog.mejor.pl/2011/10/dzis-jest-piekny-dzien/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 10:05:19 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[różne]]></category>
		<category><![CDATA[cisza wyborcza]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=384</guid>
		<description><![CDATA[piękny dzień]]></description>
			<content:encoded><![CDATA[<p>	I to pomimo tego, że za oknem jest pochmurno, siąpi deszcz, a temperatura nie rozpieszcza. Dzień jest piękny ponieważ trwa cisza wyborcza, w mediach nie ma nawet rozmów z politykami o pogodzie. Nie ma gruszek na wierzbie. Audycje w radio już nie są skracane aby w ich miejscu emitować audycje komitetów wyborczych.<br />
Cieszmy się takimi dniami, nie zdarzają się często.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2011/10/dzis-jest-piekny-dzien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Czy Net-Serwis dyskryminuje ze względu na wiek? Moja opinia to…</title>
		<link>http://blog.mejor.pl/2011/01/czy-net-serwis-dyskryminuje-ze-wzgledu-na-wiek/</link>
		<comments>http://blog.mejor.pl/2011/01/czy-net-serwis-dyskryminuje-ze-wzgledu-na-wiek/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 17:37:47 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[różne]]></category>
		<category><![CDATA[dyskryminacja ze względu na wiek net serwis]]></category>
		<category><![CDATA[net-serwis]]></category>
		<category><![CDATA[net-serwis dyskryminacja]]></category>
		<category><![CDATA[net-serwis dyskryminacja ze względu na wiek]]></category>
		<category><![CDATA[netserwis]]></category>
		<category><![CDATA[opinia]]></category>
		<category><![CDATA[opinia o net-serwis]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=369</guid>
		<description><![CDATA[Jeden z warszawskich dostawców internetu posiada na swojej stronie internetowej dział &#8222;praca&#8221;. Możemy sobie wybrać interesujące nas stanowisko i za pomocą dostępnego na stronie formularza możemy zaproponować firmie Net-Serwis swoją kandydaturę na ich nowego pracownika. I tutaj natknąłem się na problem, formularz posiada rozwijane pole &#8222;Rok urodzenia&#8221;, a wybór roku rozciąga się od 1965 roku [...]]]></description>
			<content:encoded><![CDATA[<p>Jeden z <a href="http://isp.net-serwis.pl/">warszawskich dostawców internetu</a> posiada na swojej stronie internetowej <a href="http://isp.net-serwis.pl/?p=praca">dział &#8222;praca&#8221;</a>. Możemy sobie wybrać interesujące nas stanowisko i za pomocą dostępnego na stronie formularza możemy zaproponować firmie Net-Serwis swoją kandydaturę na ich nowego pracownika.<br />
I tutaj natknąłem się na problem, formularz posiada rozwijane pole &#8222;Rok urodzenia&#8221;, a wybór roku rozciąga się od 1965 roku do 1985. Przyjmijmy, że nie mieszczę się w wymienionym zakresie, czy powinienem okłamać pracodawcę już na samym wstępie? Trochę zły początek współpracy, a co gorsze poświadczyłbym nieprawdę, łamiąc prawo. Czyli nie mogę tam aplikować, ponieważ jestem za młody (mimo,że pełnoletni) albo jestem zbyt stary.<br />
Moim zdaniem jest to dyskryminacja ze względu na wiek, czy jestem odosobniony w mym twierdzeniu?<br />
O to adres strony z działem &#8222;praca&#8221;: <a href="http://isp.net-serwis.pl/?p=praca">http://isp.net-serwis.pl/?p=praca</a> , oraz dodatkowo, adres do webarchive z zawartością strony sprzed 4 lat: <a href="http://web.archive.org/web/20070221191956/http://isp.net-serwis.pl/?p=zgloszenia&#038;ids=9">http://web.archive.org/web/20070221191956/http://isp.net-serwis.pl/?p=zgloszenia&#038;ids=9</a> .<br />
Ciekawe, sytuacja nie zmieniła się od tylu lat.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2011/01/czy-net-serwis-dyskryminuje-ze-wzgledu-na-wiek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Overlay do gentoo</title>
		<link>http://blog.mejor.pl/2010/11/overlay-do-gentoo/</link>
		<comments>http://blog.mejor.pl/2010/11/overlay-do-gentoo/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 14:56:54 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[overlay gentoo]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=345</guid>
		<description><![CDATA[Pod adresem http://repoz.mejor.pl/svn/gentoo/portage/ jest dostępny overlay dla Gentoo. Adres URL dla svn jest identyczny. Aby dodać overlay do systemu, korzystając z laymana, należy użyć takiego polecenia: layman -f -a horhe -o http://mejor.pl/overlay.xml]]></description>
			<content:encoded><![CDATA[<p>Pod adresem <a title="overlay" href="http://repoz.mejor.pl/svn/gentoo/portage/">http://repoz.mejor.pl/svn/gentoo/portage/</a> jest dostępny overlay dla Gentoo.<br />
Adres URL dla svn jest identyczny.<br />
Aby dodać overlay do systemu, korzystając z laymana, należy użyć takiego polecenia: <code>layman -f -a horhe -o http://mejor.pl/overlay.xml<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/11/overlay-do-gentoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prawo jazdy na internet</title>
		<link>http://blog.mejor.pl/2010/11/prawo-jazdy-na-internet/</link>
		<comments>http://blog.mejor.pl/2010/11/prawo-jazdy-na-internet/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 15:34:14 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[różne]]></category>
		<category><![CDATA[ladministratorzy]]></category>
		<category><![CDATA[niedouczeni administratorzy]]></category>
		<category><![CDATA[prawo jazdy na internet]]></category>
		<category><![CDATA[rfc-ignorant]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=333</guid>
		<description><![CDATA[Od czasu do czasu, gdy ktoś się załamie widząc szkody poczynione przez nieświadomych administratorów (albo nawet tzw. zwykłych użytkowników) to jak bumerang powraca hasło &#8222;Prawo jazdy na internet&#8221;. Jestem za czymś takim, a ostatnio co raz bardziej marzy mi się właśnie jakiś najprostszy egzamin aby ktoś miał prawo korzystać z pewnych usług. Pewnie pamiętacie niedawne [...]]]></description>
			<content:encoded><![CDATA[<p>Od czasu do czasu, gdy ktoś się załamie widząc szkody poczynione przez nieświadomych administratorów (albo nawet tzw. zwykłych użytkowników) to jak bumerang powraca hasło &#8222;Prawo jazdy na internet&#8221;. Jestem za czymś takim, a ostatnio co raz bardziej marzy mi się właśnie jakiś najprostszy egzamin aby ktoś miał prawo korzystać z pewnych usług.</p>
<p>Pewnie pamiętacie niedawne zamieszanie związane z <a href="http://www.komputerswiat.pl/nowosci/internet/2010/34/naukowcy-zepsuli-internet.aspx">nieprawidłową konfiguracją BGP?</a></p>
<p>Więc jestem za egzaminem na konfigurację BGP oraz na konfigurację SMTP. Brak konta <span style="color: #000000;">abuse</span> lub <span style="color: #000000;">postmaster</span> to jest już standardem, spotykam się także z nieprawidłową konfiguracją dnsa dla serwera pocztowego (nie zamyka się kółko adres ip-&gt;rev-&gt;ten sam adres ip). Szczytem głupoty jest dla mnie odpowiadanie komunikatem 4xx na brak użytkownika (domena telekomunikacja.pl), a ostatnio trafiłem na takiego geniusza:<span style="color: #666699;"> </span></p>
<p><span style="color: #000000;">: 450 4.1.1 &lt;xxxxxxxxxxa@burkert.com&gt;: Recipient address rejected: undeliverable address: host 10.40.0.35[10.40.0.35] said: 550 5.1.1 User unknown (in reply to RCPT TO command)</span></p>
<p>Ręce opadają&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/11/prawo-jazdy-na-internet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Weryfikacja nadawcy maila część 2.</title>
		<link>http://blog.mejor.pl/2010/10/weryfikacja-nadawcy-maila-czesc-2/</link>
		<comments>http://blog.mejor.pl/2010/10/weryfikacja-nadawcy-maila-czesc-2/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 19:08:33 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[konfiguracja usług]]></category>
		<category><![CDATA[aliasy]]></category>
		<category><![CDATA[exim]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[weryfikacja nadawcy]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=294</guid>
		<description><![CDATA[Założenie: chcemy pozwolić aby użytkownik, który przeszedł autoryzację, mógł wysłać maila z polem &#8222;From:&#8221; zawierającym jego główny adres mailowy lub alias prowadzący do bazowego konta. Opis z poprzedniego wpisu załatwiał nam część do momentu &#8222;lub alias&#8221;.  Czyli mieliśmy tak: deny authenticated  = * condition      = ${if eq {$authenticated_id}{${lc:$sender_address}}{no}{yes}} message         = rejected: Nieprawidłowy nadawca. Czyli potrzebujemy [...]]]></description>
			<content:encoded><![CDATA[<p>Założenie: chcemy pozwolić aby użytkownik, który przeszedł autoryzację, mógł wysłać maila z polem &#8222;From:&#8221; zawierającym jego główny adres mailowy lub alias prowadzący do bazowego konta.</p>
<p>Opis z poprzedniego wpisu załatwiał nam część do momentu &#8222;lub alias&#8221;.  Czyli mieliśmy tak:<br />
<code><br />
<span style="color: #000000;"><span style="color: #000000;">deny</span></span></code></p>
<p><code><span style="color: #000000;"> authenticated  = *</span></code><br />
<code><span style="color: #000000;"> condition      = ${if eq {$authenticated_id}{${lc:$sender_address}}{no}{yes}}<br />
message         = rejected: Nieprawidłowy nadawca.</span><br />
</code></p>
<p>Czyli potrzebujemy rozbudować to o warunek sprawdzający czy adres nadawcy jest aliasem do użytkownika, którym użytkownik się zautoryzował. Zaimplementowanie tego jest mocno uzależnione od sposobu przechowywania tych danych w konkretnej instalacji. I różnica powinna sprowadzić się do przepisania warunku w selekcie. Tutaj zapytanie będzie dostosowane do mojej bazy, która jest bardzo podobna do omawianej w innych wpisach na tym blogu. W międzyczasie od napisania poprzedniego artykułu, zmieniłem trochę ten warunek, obecnie wygląda następująco:<br />
<code><span style="color: #000000;"><code>condition = ${if or {</code><br />
{ !eqi{$authenticated_id} {$sender_address}}\<br />
{ !eqi{$authenticated_id} {${address:$header_From:}} }\<br />
}\<br />
}<br />
</span> </code><br />
Czyli mamy tutaj drugi test (dodatkowo sprawdzam nagłówek &#8222;From:&#8221;) oraz została odwrócona logika warunku. Drobiazg:)</p>
<p>Zdefiniujmy zapytanie do bazy danych zwracające nam wszystkie aliasy dla danego konta. Nie możemy zapomnieć także, że to zapytanie powinno zwrócić także głównego użytkownika!:)<br />
<span style="color: #000000;"><code>PGSQL_Q_AUTH = SELECT alias FROM aliasy WHERE destination = '${quote_pgsql:$authenticated_id}' UNION SELECT '${quote_pgsql:$authenticated_id}'</code></span></p>
<p><span style="color: #000000;">Oraz warunek, który sprawdza nadawcę:</span></p>
<p><code><span style="color: #000000;">!condition      = ${if  and{\<br />
{forany{&lt;\n ${lookup pgsql {PGSQL_Q_AUTH}}}{eqi{$item}{$sender_address}} }\<br />
{forany{&lt;\n ${lookup pgsql {PGSQL_Q_AUTH}}}{eqi{$item}{${address:$header_From:}}} }\<br />
}\<br />
}</span></code></p>
<p><span style="color: #000000;">Smacznego!</span></p>
<p><span style="color: #000000;">P.S. Nie mam pojęcia dlaczego tak trudno jest w wordpressie użyć tabulacji do robienia wcięć w tekście. Sprawdzałem jakieś dwie wtyczki, bez pozytywnego rezultatu. I z tego powodu, wpisy eximowe wyglądają okropnie.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/10/weryfikacja-nadawcy-maila-czesc-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profilowanie kompilowanych binarek w Gentoo</title>
		<link>http://blog.mejor.pl/2010/09/profilowanie-kompilowanych-binarek-w-gentoo/</link>
		<comments>http://blog.mejor.pl/2010/09/profilowanie-kompilowanych-binarek-w-gentoo/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 12:50:56 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[gcc gentoo profilling]]></category>
		<category><![CDATA[gcc profile-use]]></category>
		<category><![CDATA[gcc profilling]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[profilowanie gcc]]></category>
		<category><![CDATA[profilowanie Gentoo]]></category>
		<category><![CDATA[wydajność]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=249</guid>
		<description><![CDATA[Gcc, najczęściej używany kompilator w Gentoo (czy ktoś zna inne kompilatory, którymi da się skompilować system dający uruchomić się?) posiada możliwość profilowania kompilowanego kodu. Wykorzystując wcześniej przygotowane dane, stara się on utworzyć kod wykonywalny, który teoretycznie[1] powinien działać szybciej niż kod nieprofilowany. Odpowiednie flagi gcc to -fprofile-generate oraz -fprofile-use. Program skompilowany z flagą -fprofile-generate będzie [...]]]></description>
			<content:encoded><![CDATA[<p>Gcc, najczęściej używany kompilator w Gentoo (czy ktoś zna inne kompilatory, którymi da się skompilować system dający uruchomić się?) posiada możliwość profilowania kompilowanego kodu. Wykorzystując wcześniej przygotowane dane, stara się on utworzyć kod wykonywalny, który teoretycznie[1] powinien działać szybciej niż kod nieprofilowany.</p>
<p>Odpowiednie flagi gcc to <code>-fprofile-generate</code> oraz <code>-fprofile-use</code>. Program skompilowany z flagą <code>-fprofile-generate </code> będzie tworzył pliki .gcda w katalogu roboczym. Takie tworzenie plików &#8222;gdziekolwiek&#8221; nie jest zwykle pożądane, lepiej aby te pliki były generowane w określonej lokalizacji. Pomocą służy nam opcja <code>-fprofile-dir=</code> z której pomocą możemy wskazać katalog w którym będą tworzone pliki *.gcda . Musimy jednak wiedzieć, że ta flaga pojawiła się w GCC dopiero od wersji 4.4.0 .<br />
Wiemy już w jaki sposób możemy możemy wybrać miejsce w którym będą tworzone pliki potrzebne do profilowania. Krok do przodu i kolejny problem, czyli możliwość wystąpienia kolizji. Częstą sytuacją jest, że pliki źródłowe mają taką samą nazwę w różnych pakietach. Dobrym rozwiązaniem wydaje się być utworzenie podkatalogów o nazwie tworzonej na podstawie nazwy pakietu. I co? Może mamy dla każdego pakietu zmieniać flagę <code>-fprofile-dir=/sciezka/do/gcda/nazwa_pakietu</code> ? Jest to trochę mało wygodne.<br />
Ciekawe rozwiązanie znalazłem na <a href="http://www.gentoo.ru/node/15149">rosyjskojęzycznym forum dotyczącym Gentoo</a>, użytkownicy stworzyli modyfikacje do helpera o nazwie <code>emake</code>. Cała &#8222;obsługa&#8221; sprowadza się do ewentualnego ustawienia katalogu bazowego dla plików .gcda , a wybór czy tego czy binarka ma być skompilowana tradycyjnie, z opcją aby tworzyła pliki profilowe lub skompilowana z użyciem tychże plików dokonywany jest poprzez zmienną <code>FEATURES</code>.<br />
Podczas testowania tego rozwiązania natrafiłem na problem, make dosyć często ignorował CFLAGS ustawione jako zmienne środowiskowe (kwestia budowy Makefile?), użycie make w następujący sposób: <code>make CFLAGS=fprofile-use</code> uznaję za zbyt inwazyjne, nadpisuje flagi użytkownika oraz wprowadza flagi, które mogły być usunięte przez ebuild (filter-flags). Uznałem, że lepiej będzie gdy dodatkowe flagi będą dodane do istniejących zanim będzie pakiet konfigurowany (zazwyczaj przed słynnym ./configure). Niektóre pakiety (np.bzip2) nie mają w ogóle fazy src_configure() dlatego umieściłem  ten kod w src_unpack().  Dzięki temu CFLAGI zostaną, z pomocą configure, prawidłowo umieszczone w Makefile. Najlepszym miejscem do modyfikacji portage wydaje się mi plik <code>/usr/lib/portage/bin/ebuild.sh</code>. Dokonałem kilku drobnych zmian do oryginalnego rozwiązania, plik różnicowy wygląda tak:</p>
<pre class="brush: diff; title: ; notranslate">--- ebuild.sh.orig      2010-09-03 14:23:46.000000000 +0200
+++ ebuild.sh   2010-09-03 14:44:29.400038418 +0200
@@ -453,6 +453,33 @@
 # should be preserved.
 find . -mindepth 1 -maxdepth 1 ! -type l -print0 | \
 ${XARGS} -0 chmod -fR a+rX,u+w,g-w,o-w
+
+       # New implementation with profiling on compilation support
+       # source &quot;${PORTAGE_BIN_PATH}/isolated-functions.sh&quot;  &amp;&gt;/dev/null
+       PROFILE_DIR=&quot;${PROF_DIR:-/var/tmp/profile}&quot;
+       PROFILE_SUBDIR=&quot;${PROFILE_DIR}/${CATEGORY}/${PF}&quot;
+       GCC_VERSION=$(gcc --version | awk '{print $3;exit}')
+       if has profile ${FEATURES} ; then
+                       if [[ ${GCC_VERSION} &lt; 4.4.0 ]]; then
+                               ewarn &quot;\nGCC version is too old to use compilation with profile usage.&quot;
+                               ewarn &quot;GCC 4.4.0 or higher required.&quot;
+                               ewarn &quot;Falling back to compilation w/o profile usage.\n&quot;
+                       elif has profile-use ${FEATURES} ; then
+                               if [[ -d ${PROFILE_SUBDIR} ]] ; then
+                                       einfo &quot;\nCompiling with profiling data usage.\n&quot;
+                                       CFLAGS+=&quot; -fprofile-use -fprofile-dir=${PROFILE_SUBDIR} -Wcoverage-mismatch -fprofile-correction&quot;
+                                       CXXFLAGS=&quot;${CFLAGS}&quot;
+                               else
+                                       ewarn &quot;\nNo directory with profiling data. Did you run fist stage and then program itself?\n&quot;
+                               fi
+                       else
+                               einfo &quot;\nCompiling with profiling data gathering support.\n&quot;
+                               mkdir -m 777 -p &quot;${PROFILE_SUBDIR}&quot;
+                               CFLAGS+=&quot; -fprofile-generate -fprofile-dir=${PROFILE_SUBDIR}&quot;
+                               CXXFLAGS=&quot;${CFLAGS}&quot;
+                               LDFLAGS+=&quot; -fprofile-arcs&quot;
+                       fi
+       fi
 }

 strip_duplicate_slashes() {
</pre>
<p>Alternatywą jest pobranie pliku-patcha z adresu: <a href="http://repoz.mejor.pl/svn/gentoo/distfiles/ebuild-2.1.8.3-profile.patch">http://repoz.mejor.pl/svn/gentoo/distfiles/ebuild-2.1.8.3-profile.patch</a>.<br />
<strong>Lista nowych opcji jakie możemy ustawić w <code><strong>/etc/make.conf</strong></code>:</strong><br />
PROFILE_DIR=&lt; ścieżka do katalogu, poniżej którego będę tworzone pliki profilujące&gt;, domyślna wartość to <code>/var/tmp/profile</code><br />
W <code>FEATURES</code> można ustawić:<br />
<code>profile</code> &#8211; kompilacja z ustawieniem flagi aby tworzyć pliki służące profilowaniu<br />
<code>profile-use</code> &#8211; kompilacja z użyciem plików profilujących, aby ta flaga działała musi być również ustawiona opcja <code>profile</code></p>
<p>To co? Wszystko jest omówione? A co jeśli program zostanie uruchomiony najpierw przez roota, a potem zwykły śmiertelnik będzie chciał także go uruchomić? Wtedy dostanie listę komunikatów z serii permission denied dla wszystkich plików .gcda , i tyle byłoby z profilowania.<br />
Rozwiązałem to z użyciem ACL, czyli musimy pamiętać aby partycja, na której będę zbierane te pliki (nie są duże) była zamontowana z obsługą ACL.<br />
# getfacl profile/<br />
# file: profile/<br />
# owner: root<br />
# group: root<br />
user::rwx<br />
group::rwx<br />
other::rwx<br />
default:user::rwx<br />
default:group::rwx<br />
default:other::rwx</p>
<p>Tak nadajemy te uprawnienia:<br />
<code>setfacl -d -m g::rwx /var/tmp/profile<br />
setfacl -d -m o::rwx /var/tmp/profile<br />
setfacl -m g::rwx /var/tmp/profile<br />
setfacl -m o::rwx /var/tmp/profile</code></p>
<p>[1] &#8211; ktoś pokusi się i sprawdzi na ile takie profilowanie przyśpiesza wykonywanie programu? I zaprezentuje zarówno pozytywne jak i negatywne wyniki testów pomiarów szybkości ;)</p>
<p>P.S. Właśnie zauważyłem, że ta funkcja nie działa przy live ebuildach.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/09/profilowanie-kompilowanych-binarek-w-gentoo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Przepis na zapiekankę z bułek</title>
		<link>http://blog.mejor.pl/2010/07/przepis-na-zapiekanke-z-bulek/</link>
		<comments>http://blog.mejor.pl/2010/07/przepis-na-zapiekanke-z-bulek/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 09:26:03 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[kuchnia]]></category>
		<category><![CDATA[przepis na zapiekankę]]></category>
		<category><![CDATA[przepis na zapiekankę z bułki]]></category>
		<category><![CDATA[przepis na zapiekanki]]></category>
		<category><![CDATA[zapiekanka]]></category>
		<category><![CDATA[zapiekanka na bułce]]></category>
		<category><![CDATA[zapiekanka na bułce z piekarnika]]></category>
		<category><![CDATA[zapiekanka na bułkach]]></category>
		<category><![CDATA[zapiekanka z bułką wędliną serem]]></category>
		<category><![CDATA[zapiekanka z pieczywa]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=237</guid>
		<description><![CDATA[zapiekanka z bułką, serem, wędliną]]></description>
			<content:encoded><![CDATA[<p>Przekąska dobra jest na sytuacje, kiedy nie mamy weny do siedzenia w kuchni i robienia kaczki po pekińsku.<br />
Lista składników do wersji mocno rozbudowanej:<br />
<strong>- bułki , około 1.5-2 bułek na osobę<br />
- ketchup<br />
- masło (najlepiej masło czosnkowe, samodzielnie robione)<br />
- wędlina/kiełbasa<br />
- cebula<br />
- żółty ser<br />
- ogórek kiszony</strong></p>
<p>Procedura wygląda następująco. Przecinamy bułki, smarujemy je masłem, a po maśle rozprowadzamy keczup. Dzięki temu bułeczki są trochę mniej suche. Kolejną warstwę możemy zrobić na jeden z poniższych sposobów:<br />
<strong>a) kiełbasę kroimy, zesmażamy, dodajemy cebulę do kiełbasy, trzymamy na ogniu do momentu, kiedy cebula zmięknie ale jeszcze się nie zeszkli<br />
b) po prostu kładziemy plasterki kiełbasy lub wędliny na bułkach</strong><br />
Kolejną warstwę układamy z kiszonych ogórków, na nie kładziemy cebulę pokrojoną w kółka (cebulę kładziemy, jeśli wybraliśmy farsz w opcji <strong>b)</strong> ). Całość posypujemy startym żółtym serem.<br />
Wkładamy do piekarnika, temperatura około 160 stopni, ustawiamy grzanie od góry aby bułki przypiekły się trochę.<br />
Po około 10 minutach mamy gotowe zapiekanki.<br />
Smacznego.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/07/przepis-na-zapiekanke-z-bulek/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Najlepsza pizza w Warszawie, a przynajmniej na Mokotowie ;)</title>
		<link>http://blog.mejor.pl/2010/06/najlepsza-pizza-w-warszawie-na-mokotowie/</link>
		<comments>http://blog.mejor.pl/2010/06/najlepsza-pizza-w-warszawie-na-mokotowie/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 14:51:32 +0000</pubDate>
		<dc:creator>horhe</dc:creator>
				<category><![CDATA[kuchnia]]></category>
		<category><![CDATA[dobra pizzeria Mokotów]]></category>
		<category><![CDATA[dobra pizzeria Warszawa]]></category>
		<category><![CDATA[pizza]]></category>
		<category><![CDATA[pizza czerniakowska]]></category>
		<category><![CDATA[pizza mokotów]]></category>
		<category><![CDATA[pizza warszawa]]></category>
		<category><![CDATA[pizzeria Mokotów]]></category>
		<category><![CDATA[pizzeria Warszawa]]></category>
		<category><![CDATA[pyszna pizza]]></category>

		<guid isPermaLink="false">http://blog.mejor.pl/?p=225</guid>
		<description><![CDATA[Gdybyś szukał porządnej, pysznej pizzy,  o wysokiej zawartości składników:) to polecam pizzerię Don Vito przy ul. Czerniakowskiej 127, na przeciwko kładki dla pieszych. Wyświetl większą mapę]]></description>
			<content:encoded><![CDATA[<p>Gdybyś szukał porządnej, pysznej pizzy,  o wysokiej zawartości składników:) to polecam pizzerię <strong>Don Vito</strong> przy ul. Czerniakowskiej 127, na przeciwko kładki dla pieszych.<br />
<iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=pl&amp;geocode=&amp;q=warszawa,+czerniakowska+127&amp;sll=52.20887,21.047607&amp;sspn=0.009651,0.027874&amp;ie=UTF8&amp;hq=&amp;hnear=Czerniakowska+127,+Warszawa,+Mazowieckie,+Polska&amp;t=h&amp;ll=52.208869,21.047573&amp;spn=0.025246,0.054932&amp;z=14&amp;iwloc=A&amp;output=embed"></iframe><br /><small><a href="http://maps.google.com/maps?f=q&amp;source=embed&amp;hl=pl&amp;geocode=&amp;q=warszawa,+czerniakowska+127&amp;sll=52.20887,21.047607&amp;sspn=0.009651,0.027874&amp;ie=UTF8&amp;hq=&amp;hnear=Czerniakowska+127,+Warszawa,+Mazowieckie,+Polska&amp;t=h&amp;ll=52.208869,21.047573&amp;spn=0.025246,0.054932&amp;z=14&amp;iwloc=A" style="color:#0000FF;text-align:left">Wyświetl większą mapę</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mejor.pl/2010/06/najlepsza-pizza-w-warszawie-na-mokotowie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

