<?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/"
	>

<channel>
	<title>vmario techblog</title>
	<atom:link href="http://blog.vmario.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.vmario.org</link>
	<description>zapiski przyszłego inżyniera</description>
	<pubDate>Tue, 23 Jun 2009 19:07:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Laptop z WiFi, czyli router na szybko</title>
		<link>http://blog.vmario.org/2009/06/23/laptop-z-wifi-czyli-router-na-szybko/</link>
		<comments>http://blog.vmario.org/2009/06/23/laptop-z-wifi-czyli-router-na-szybko/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 18:18:14 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=569</guid>
		<description><![CDATA[Czasem zachodzi potrzeba, by zmienić laptopa z WiFi w router, który mógłby udostępnić połączenie z Internetem np. innemu komputerowi. Wydawałoby się, że na Linuksie nie ma nic prostszego, a w najgorszym razie wystarczy chwilę poszukać rozwiązania w Sieci. W praktyce może okazać się, że łatwo wpaść w konsternację, widząc mnogość rozwiązań.
Ponieważ dziś na własnej skórze [...]]]></description>
			<content:encoded><![CDATA[<p>Czasem zachodzi potrzeba, by zmienić laptopa z WiFi w router, który mógłby udostępnić połączenie z Internetem np. innemu komputerowi. Wydawałoby się, że na Linuksie nie ma nic prostszego, a w najgorszym razie wystarczy chwilę poszukać rozwiązania w Sieci. W praktyce może okazać się, że łatwo wpaść w konsternację, widząc mnogość rozwiązań.</p>
<p>Ponieważ dziś na własnej skórze doświadczyłem, jak dużo czasu może zająć konfiguracja tak banalnej rzeczy, postanowiłem podzielić się swoim doświadczeniem. Nie jestem specjalistą od sieci komputerowych, dlatego chętnie przyjmę krytykę i poprawię błędy, jeżeli dostrzeżecie takowe w poniższej instrukcji.</p>
<p><span id="more-569"></span></p>
<p>Zatem do dzieła! Zakładamy, że mamy laptopa z WiFi na interfejsie <code>wlan0</code>, który ma udostępnić połączenie internetowe drugiemu komputerowi, podłączonemu na interfejsie <code>eth0</code> w podsieci <code>192.168.42.0/24</code> (tj. <code>192.168.42.0</code> z maską <code>255.255.255.0</code>). Nasz laptop pracuje pod kontrolą Arch Linuksa.</p>
<ol>
<li>
<p>Przygotowanie interfejsów sieciowych.</p>
<p>Tu napotkałem na pierwszy problem w postaci <a href="http://projects.gnome.org/NetworkManager/">NetworkManagera</a>. Jest to program, którego z przyjemnością używam na co dzień, ale który doprowadza mnie do białej gorączki, gdy chcę użyć bardziej wymyślnej konfiguracji. Oczywiście, można by go wyłączyć:</p>
<pre><code># /etc/rc.d/networkmanager stop</code></pre>
<p>ale co nam wtedy skonfiguruje automatycznie połączenie? Zostawiamy więc NetworkManagera, licząc się z tym, że przy każdej możliwej okazji będzie nam bruździł, wyłączając <code>eth0</code>. Ja to zaakceptowałem, bo połączenie miało pracować tylko kilka minut. W innym przypadku, wziąłbym się za ręczną konfigurację WiFi.</p>
<p>Pozostałem jednak przy najprymitywniejszym rozwiązaniu: w konfiguracji NetworkManagera odznaczyłem opcję <i>Łączenie automatyczne</i> we wszystkich połączeniach przewodowych. Bez tego wetknięcie kabla do gniazda wyłączało połączenie radiowe.</p>
<p><code>eth0</code> konfigurujemy ręcznie:</p>
<pre><code># ifconfig eth0 up 192.168.42.1 netmask 255.255.255.0</code></pre>
</li>
<li>
<p>Włączenie serwera DHCP i DNS.</p>
<p>Wbrew pozorom, jest to bardzo prosta czynność. Instalujemy <code>dnsmasq</code>, a w <code>/etc/dnsmasq.conf</code> wpisujemy dwie opcje:</p>
<pre><code>interface=eth0
dhcp-range=192.168.42.2,192.168.42.41,12h</code></pre>
<p>W razie potrzeby możemy też przypisać sztywne IP wskazanemu MAC-owi lub w ogóle wyłączyć DHCP (co jest mniej wygodne) &mdash; osoby zainteresowane znajdą stosowne informacje i przykłady w dokumentacji.</p>
<p>Teraz musimy tylko uruchomić serwer:</p>
<pre><code># /etc/rc.d/dnsmasq start</code></pre>
</li>
<li>
<p>Uruchomienie routingu.</p>
<p>Routing można włączyć jednym poleceniem:</p>
<pre><code># echo 1 > /proc/sys/net/ipv4/ip_forward</code></pre>
<p>Niektórzy zalecają jeszcze dodanie linijki</p>
<pre><code>net.ipv4.ip_forward = 1</code></pre>
<p>do <code>/etc/sysctl.conf</code>, jest to chyba jednak potrzebne tylko do automatycznego startu routingu po powtórnym uruchomieniu systemu. Nas to nie interesuje, bo na co dzień nie będziemy nic routować.</p>
</li>
<li>
<p><abbr title="Network Address Translation">NAT</abbr>, czyli maskarada IP.</p>
<p>Jest to najbardziej skomplikowany krok, wymagający grzebania się w iptables, a niezbędny do tego, by pakiety z Internetu mogły trafiać na odpowiednie IP i porty wewnątrz naszej miniaturowej sieci.</p>
<p>Tutaj skorzystałem z <a href="http://www.gentoo.org/doc/pl/home-router-howto.xml">dokumentacji Gentoo</a> i proponuję poniższe regułki:</p>
<pre><code># iptables -F
# iptables -t nat -F
# iptables -I FORWARD -i eth0 -d 192.168.42.0/255.255.255.0 -j DROP
# iptables -A FORWARD -i eth0 -s 192.168.42.0/255.255.255.0 -j ACCEPT
# iptables -A FORWARD -i eth0 -d 192.168.42.0/255.255.255.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE</code></pre>
</li>
</ol>
<p>To wszystko, czego potrzebujemy. Oczywiście, ręczne kopiowanie i wklejanie komend w terminalu jest niewygodne, proponuję zatem skorzystać z poniższego skryptu, okraszonego paroma dodatkowymi instrukcjami, zapożyczonymi ze wspomnianej dokumentacji Gentoo. Przyznaję się bez bicia, że rozumiem tylko część z nich, ale ufam, że zwiększają one uniwersalność i bezpieczeństwo naszego routingu.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Włączenie DHCP, DNS, NAT, routingu.</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Iptables i routing na podstawie dokumentacji Gentoo.</span>
<span style="color: #666666; font-style: italic;"># http://www.gentoo.org/doc/pl/home-router-howto.xml</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Zmienne konfiguracyjne.</span>
<span style="color: #007800;">LAN</span>=<span style="color: #ff0000;">&quot;eth0&quot;</span>
<span style="color: #007800;">WAN</span>=<span style="color: #ff0000;">&quot;wlan0&quot;</span>
<span style="color: #007800;">SIEC</span>=<span style="color: #ff0000;">&quot;192.168.42.0&quot;</span>
<span style="color: #007800;">MASKA</span>=<span style="color: #ff0000;">&quot;255.255.255.0&quot;</span>
<span style="color: #007800;">NASZEIP</span>=<span style="color: #ff0000;">&quot;192.168.42.1&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Podniesienie interfejsu.</span>
<span style="color: #c20cb9; font-weight: bold;">ifconfig</span> <span style="color: #800000;">${LAN}</span> up <span style="color: #800000;">${NASZEIP}</span> netmask <span style="color: #800000;">${MASKA}</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Na początek czyścimy regułki:</span>
iptables <span style="color: #660033;">-F</span>
iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-F</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Domyślne zasady dla pakietów nie pasujących do żadnej regułki.</span>
iptables <span style="color: #660033;">-P</span> INPUT ACCEPT
iptables <span style="color: #660033;">-P</span> OUTPUT ACCEPT
iptables <span style="color: #660033;">-P</span> FORWARD DROP
&nbsp;
<span style="color: #666666; font-style: italic;"># Potem blokujemy usługi tak, aby były dostępne tylko dla sieci LAN:</span>
iptables <span style="color: #660033;">-I</span> INPUT <span style="color: #000000;">1</span> <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-j</span> ACCEPT
iptables <span style="color: #660033;">-I</span> INPUT <span style="color: #000000;">1</span> <span style="color: #660033;">-i</span> lo <span style="color: #660033;">-j</span> ACCEPT
iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> UDP <span style="color: #660033;">--dport</span> bootps <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-j</span> REJECT
iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> UDP <span style="color: #660033;">--dport</span> domain <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-j</span> REJECT
&nbsp;
<span style="color: #666666; font-style: italic;"># (Opcjonalnie) pozwalamy na dostęp do naszego serwera SSH z Internetu:</span>
<span style="color: #666666; font-style: italic;">#iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Upuszczamy pakiety TCP/UDP dla uprzywilejowanych portów:</span>
iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> TCP <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-d</span> <span style="color: #000000;">0</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0</span> <span style="color: #660033;">--dport</span> <span style="color: #000000;">0</span>:<span style="color: #000000;">1023</span> <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> INPUT <span style="color: #660033;">-p</span> UDP <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-d</span> <span style="color: #000000;">0</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0</span> <span style="color: #660033;">--dport</span> <span style="color: #000000;">0</span>:<span style="color: #000000;">1023</span> <span style="color: #660033;">-j</span> DROP
&nbsp;
<span style="color: #666666; font-style: italic;"># Ostatecznie dodajemy regułki dla NAT (to są najważniejsze regułki!):</span>
iptables <span style="color: #660033;">-I</span> FORWARD <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-d</span> <span style="color: #800000;">${SIEC}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${MASKA}</span> <span style="color: #660033;">-j</span> DROP
iptables <span style="color: #660033;">-A</span> FORWARD <span style="color: #660033;">-i</span> <span style="color: #800000;">${LAN}</span> <span style="color: #660033;">-s</span> <span style="color: #800000;">${SIEC}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${MASKA}</span> <span style="color: #660033;">-j</span> ACCEPT
iptables <span style="color: #660033;">-A</span> FORWARD <span style="color: #660033;">-i</span> <span style="color: #800000;">${WAN}</span> <span style="color: #660033;">-d</span> <span style="color: #800000;">${SIEC}</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #800000;">${MASKA}</span> <span style="color: #660033;">-j</span> ACCEPT
iptables <span style="color: #660033;">-t</span> nat <span style="color: #660033;">-A</span> POSTROUTING <span style="color: #660033;">-o</span> <span style="color: #800000;">${WAN}</span> <span style="color: #660033;">-j</span> MASQUERADE
&nbsp;
<span style="color: #666666; font-style: italic;"># Informujemy jądro o chęci przekazywania IP:</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>ip_forward
<span style="color: #000000; font-weight: bold;">for</span> f <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>proc<span style="color: #000000; font-weight: bold;">/</span>sys<span style="color: #000000; font-weight: bold;">/</span>net<span style="color: #000000; font-weight: bold;">/</span>ipv4<span style="color: #000000; font-weight: bold;">/</span>conf<span style="color: #000000; font-weight: bold;">/*/</span>rp_filter ; <span style="color: #000000; font-weight: bold;">do</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$f</span> ; <span style="color: #000000; font-weight: bold;">done</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Uruchomienie DHCP i DNS.</span>
<span style="color: #666666; font-style: italic;"># W /etc/dnsmasq.conf wystarczy:</span>
<span style="color: #666666; font-style: italic;"># interface=eth0 (nasz interfejs lan)</span>
<span style="color: #666666; font-style: italic;"># dhcp-range=192.168.42.2,192.168.42.41,12h (zakres IP dla DHCP)</span>
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.d<span style="color: #000000; font-weight: bold;">/</span>dnsmasq start</pre></div></div>

<p>Mam nadzieję, że mój bardzo nieprofesjonalny poradnik mimo wszystko komuś się przyda. Jeżeli nie, to trudno, będzie przynajmniej stanowił rozwiązanie, do którego będę mógł w razie potrzeby wrócić.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/06/23/laptop-z-wifi-czyli-router-na-szybko/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sage policzy to za Ciebie</title>
		<link>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/</link>
		<comments>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/#comments</comments>
		<pubDate>Thu, 21 May 2009 18:07:57 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[Elektronika]]></category>

		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<category><![CDATA[Recenzje]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=535</guid>
		<description><![CDATA[Z pewnym żalem obserwuję czasem wśród moich kolegów z uczelni prawie że kompletny brak umiejętności posługiwania się oprogramowaniem matematycznym. Rozumiem jednak niechęć do MATLAB-a, a nawet do samej matematyki; ze wstydem przyznaję też, że sam, po blisko czterech latach na politechnice, posiadam wciąż bardzo ubogi aparat matematyczny i z trudem udaje mi się zmusić komputer [...]]]></description>
			<content:encoded><![CDATA[<p>Z pewnym żalem obserwuję czasem wśród moich kolegów z uczelni prawie że kompletny brak umiejętności posługiwania się oprogramowaniem matematycznym. Rozumiem jednak niechęć do <abbr title="MATrix LABoratory">MATLAB</abbr>-a, a nawet do samej matematyki; ze wstydem przyznaję też, że sam, po blisko czterech latach na politechnice, posiadam wciąż bardzo ubogi aparat matematyczny i z trudem udaje mi się zmusić komputer do tego, do czego został stworzony, czyli do&hellip; liczenia.</p>
<p>Chcąc nie chcąc, uczyłem się w ramach zajęć na <abbr title="Elektronika, Telekomunikacji i Informatyka">ETI</abbr> wykorzystywać <abbr title="MATrix LABoratory">MATLAB</abbr>-a, a więc przy okazji i Octave&#8217;a, do podstawowych obliczeń, szybko jednak zapominałem pokręconą składnię tego środowiska. Brakowało mi też wsparcia dla obliczeń analitycznych i możliwości pisania programów z użyciem wygodnej składni. Potrzebowałem czegoś, co pozwoli mi zarówno policzyć analitycznie całkę, z którą nie poradzi sobie mój kalkulator (Casio Algebra FX 2.0 Plus), wykreślić przebieg dowolnej funkcji, wyznaczyć <abbr title="Discrete Fourier Transform">DFT</abbr> sygnału, jak i szybko zaimplementować jakiś własny algorytm.</p>
<p>Cóż więc mi pozostawało? SciPy, Maxima, Scilab? A może coś jeszcze innego? W końcu trafiłem na środowisko <a href="http://www.sagemath.org/">Sage</a>.</p>
<p><span id="more-535"></span></p>
<p>Powiedzieć, że Sage jest programem matematycznym, to nieścisłość. Określić go jako zgrabne środowisko do wszelkiego rodzaju obliczeń to nadużycie, przynajmniej jeżeli chodzi o mój pogląd na piękno. Uważam, że tutaj najbardziej pasuje określenie &bdquo;<a href="http://pl.wikipedia.org/wiki/Srebrna_ta%C5%9Bma_klej%C4%85ca">duct tape</a>&rdquo;. Jeżeli jesteś matematykiem lub cenisz eleganckie rozwiązania programistyczne (albo miejsce na twardym dysku&hellip;), Sage może nie wzbudzić Twojego zachwytu. Jeżeli jednak masz w sobie ducha MacGyveryzmu, Sage może okazać się świetnym rozwiązaniem wielu problemów.</p>
<p>Sage jest zbiorem programów i bibliotek matematycznych, takich jak Maxima, SciPy czy <abbr title="GNU Scientific Library">GSL</abbr>, powiązanych Pythonem i okraszonych interfejsem <abbr title="Command-line interface">CLI</abbr> i dziwacznym <abbr title="Graphical user interface">GUI</abbr> w postaci&hellip; strony WWW. Jego niewątpliwą zaletą jest darmowość i otwartość (możemy więc poznać sposób, w jaki przeprowadzane są obliczenia).</p>
<p>Korzystam z Arch Linuksa, gdzie Sage dostępny jest w repozytorium <abbr title="ArchLinux User-community Repository">AUR</abbr> jako <code>sage-mathematics</code> i <code>sage-mathematics-bin</code>. Pierwszy pakiet chyba nie chciał mi się kompilować, a w każdym razie miałem z nim jakiś problem, ściągnąłem więc źródła bezpośrednio ze strony programu i próbowałem sam go zbudować. Niestety, udało mi się rozwiązać tylko część problemów i w końcu zakończyłem na błędzie po dwóch czy trzech godzinach kompilacji. Zrezygnowany sięgnąłem po binarkę. Pomijając fakt, że pobrałem bodaj 400MB, instalacja przebiegła bezboleśnie. Co prawda z dysku zniknęło mi 1,2GB, ale nie byłem zdziwiony &mdash; o ile dobrze zauważyłem, Sage zawiera w sobie wszystkie niezbędne biblioteki i programy, więc mam teraz zdublowanego Pythona, Maximę, SciPy i pewnie sporo innych rzeczy&hellip;</p>
<p>Przejdźmy jednak do meritum. Po uruchomieniu program może krzyczeć o odpowiednie uprawnienia do katalogu konfiguracyjnego. Poniższa komenda powinna rozwiązać problem:</p>
<pre><code># chmod +x ~/.sage/ipython</code></pre>
<p>Teraz odpalamy powłokę Sage&#8217;a i możemy przystępować do liczenia. Jednak od interfejsu linii poleceń znacznie wygodniejszy jest interfejs webowy, uruchamiany poleceniem <code>notebook()</code>. Jego działanie polega na wystartowaniu serwera WWW i przeglądarki z aplikacją webową. Jest to rozwiązanie w takim samym stopniu dziwne, co wygodne. Zgodnie z nazwą, serwuje nam ono coś w rodzaju notesów, w których możemy zapisywać obliczenia i ich wyniki. Przyznaję, że jest to bardzo intuicyjne rozwiązanie. Niestety, jesteśmy pozbawieni jakiegoś zgrabnego <abbr title="Integrated Development Environment">IDE</abbr>, pozwalającego wykorzystać możliwości Sage&#8217;a do pisania dłuższych skryptów czy programów. Może to i lepiej&hellip;</p>
<p>Odłóżmy jednak na bok ironiczne uwagi i przyjrzyjmy się bliżej <i>notebookowi</i>. <a href="http://www.sagemath.org/help-video.html">Screencasty</a> pokazują bogate możliwości tego interfejsu. W szczególności należy zwrócić uwagę na <a href="http://wiki.sagemath.org/interact">tryb interaktywny</a> &mdash; możliwość szybkiego napisania skryptu, który na bieżąco wizualizuje parametry ustawiane suwakiem, zrobiła na mnie wrażenie. To aż się prosi o wykorzystanie w szkołach czy na uczelniach!</p>
<p>Wykresy są całkiem estetyczne, do wypisywania wzorów można wykorzystać składnię LaTeX-a, a możliwość zapisania stanu pracy i powrotu w każdej chwili do obliczeń jest bardzo wygodna. Brakuje mi tylko skrótu klawiaturowego, który obliczałby wyrażenie bez przenoszenia do kolejnego wiersza (a tak działa <i>Shift + Enter</i>). Może jednak to tylko mój brak znajomości klawiszologii.</p>
<p>Jako podsumowanie cisną mi się na usta słowa: &bdquo;To jest naprawdę świetne narzędzie, <strong>ale&hellip;</strong>&rdquo;. Owych &bdquo;ale&rdquo; jest, niestety, sporo: od samej idei zlepienia różnych programów matematycznych, przez duże rozmiary aplikacji po dziwny interfejs. W zamian jednak otrzymujemy ogromne możliwości, pomysłowy tryb interaktywny i w sumie niegłupią ideę <i>notebooków</i>. Warto zatem instalować? Szczerze mówiąc, gdyby projekt <a href="http://www.wolframalpha.com/">Wolfram|Alpha</a> wystartował trochę wcześniej, to pewnie nie sięgnąłbym po Sega&#8217;a, w każdym razie nie po to, by policzyć analitycznie kilka całek czy wykreślić przebieg funkcji. Myślę jednak, że warto spróbować przygody z tą aplikacją czy to przez LiveCD, czy przez instalację binarki. W mojej krótkiej recenzji nie zabrakło złośliwości, ale nie mam zamiaru usuwać w najbliższym czasie programu z dysku &mdash; czas pokaże, czy to narzędzie rzeczywiście okaże się niezastąpione.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/05/21/sage-policzy-to-za-ciebie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nut/OS na Linuksie i MMnet104</title>
		<link>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/</link>
		<comments>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/#comments</comments>
		<pubDate>Wed, 06 May 2009 19:29:57 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[Elektronika]]></category>

		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=479</guid>
		<description><![CDATA[Tydzień temu pisałem o przywróceniu do życia modułu MMnet104. Dziś opiszę krótko instalację i uruchomienie środowiska, które pozwoli oprogramować ten moduł pod Linuksem z użyciem systemu operacyjnego Nut/OS.
Nut/OS jest modularnym systemem operacyjnym czasu rzeczywistego (RTOS) opracowanym w ramach projektu Ethernut. Ethernut jest projektem typu &#8222;open source hardware&#8221;, mającym na celu udostępnienie systemów wbudowanych obsługujących Ethernet.

Nas [...]]]></description>
			<content:encoded><![CDATA[<p>Tydzień temu pisałem o <a href="http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/">przywróceniu do życia</a> modułu <a href="http://www.propox.com/products/t_130.html">MMnet104</a>. Dziś opiszę krótko instalację i uruchomienie środowiska, które pozwoli oprogramować ten moduł pod Linuksem z użyciem systemu operacyjnego Nut/OS.</p>
<p><a href="http://www.ethernut.de/en/firmware/nutos.html">Nut/OS</a> jest modularnym systemem operacyjnym czasu rzeczywistego (<abbr title="Real-Time Operating System">RTOS</abbr>) opracowanym w ramach projektu <a href="http://www.ethernut.de/index.html">Ethernut</a>. Ethernut jest projektem typu &bdquo;open source hardware&rdquo;, mającym na celu udostępnienie systemów wbudowanych obsługujących Ethernet.</p>
<p><span id="more-479"></span></p>
<p>Nas w tej chwili interesuje jednak tylko część software&#8217;owa tego projektu, czyli Nut/OS, udostępniający gotowy stos <abbr title="Transmission Control Protocol/Internet Protocol">TCP/IP</abbr> i obsługę protokołów takich jak <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr>, <abbr title="Domain Name System">DNS</abbr>, <abbr title="Simple Mail Transfer Protocol">SMTP</abbr>, a nawet <abbr title="Hypertext Transfer Protocol">HTTP</abbr> czy <abbr title="File Transfer Protocol">FTP</abbr>. Nut/OS bardzo dobrze wspiera kompilator AVR-GCC, a poza tym autorzy projektu przewidzieli możliwość pracy na Linuksie, więc czas przystąpić do dzieła.</p>
<p>Zaczynamy od ściągnięcia źródeł, rozpakowania i uruchomienia konfiguracji:</p>
<pre><code>$ tar jxvf ethernut-4.8.2.tar.bz2
$ cd ethernut-4.8.2
$ ./configure</code></pre>
<p>Powinniśmy zobaczyć m.in.:</p>
<pre><code>configure: nutconfgui is enabled</code></pre>
<p>co oznacza, że będziemy mogli skorzystać z konfiguratora graficznego. W innym wypadku zapewne będziemy musieli doinstalować <a href="http://www.wxwidgets.org/">wxWidgets</a> lub inną bibliotekę, której brak wskaże nam konfigurator.</p>
<p>Ja napotkałem inny problem, związany ze specjalną biblioteką <a href="http://wxpropgrid.sourceforge.net/cgi-bin/index">wxPropertyGrid</a>, wymaganą przez narzędzie <code>nutdisc</code>, czyli Discoverera:</p>
<pre><code>configure: WARNING: wxpropgrid not found
[&hellip;]
configure: nutdisc requires propgrid</code></pre>
<p>Discoverer nie jest na szczęście niezbędny, jest to dodatkowy program, umożliwiający odnalezienie w sieci Ethernet nie do końca skonfigurowanych hostów, pracujących pod kontrolą Nut/OS-a.</p>
<p>Niestety, u mnie Ethernut najpierw nie widział skompilowanej biblioteki, a po wprowadzeniu zmian w <code>configure</code> i tak kończył kompilację z błędem. Koniec końców zignorowałem więc brak Discoverera i odpaliłem:</p>
<pre><code>$ make
$ make check
$ su -c "make install"</code></pre>
<p>Podczas kompilacji może nas jednak spotkać kolejna przykra niespodzianka: proces przerwie się niespodziewanie, sypiąc błędami, zapoczątkowanymi przez komunikat</p>
<pre><code>error: wx/setup.h: Nie ma takiego pliku ani katalogu</code></pre>
<p>Na szczęście i na to jest prosta rada:</p>
<pre><code># ln -s /usr/lib/wx/include/gtk2-unicode-release-2.8/wx/setup.h /usr/include/wx-2.8/wx/setup.h</code></pre>
<p>Teraz <code>make clean</code> i jazda od nowa z kompilacją!</p>
<p>Po zainstalowaniu nie zmieniamy katalogu, tylko uruchamiamy <code>nutconf</code> i wybieramy plik konfiguracyjny <code>MMnet104.conf</code>.</p>
<p>Następnie klikamy <i>Edit -&gt; Settings</i>. W zakładce <i>Build</i> <i>Source Directory</i> powinien wskazywać na katalog, do którego rozpakowaliśmy źródła, zaś <i>Platform</i> powinien mieć wartość <code>avr-gcc</code>. Jako <i>Build Directory</i> podałem katalog <code>~/test/build</code>, zaś jako <i>Install Directory</i> &mdash; <code>~/test/build/lib</code>. W zakładce <i>Samples</i> wskazałem <code>~/test/samples</code>.</p>
<p>Teraz klikamy <i>Build -&gt; Build Nut/OS</i> i <i>Build -&gt; Create Sample Directory</i>. W efekcie uzyskujemy gotowe środowisko pracy: jądro <abbr title="Real-Time Operating System">RTOS</abbr>, liczne biblioteki i przykładowe aplikacje. Możemy zacząć np. od serwera <abbr title="Hypertext Transfer Protocol">HTTP</abbr> &mdash; po wydaniu komendy <code>make</code> w katalogu <code>samples/httpd</code> powinniśmy otrzymać HEX-a gotowego do wgrania do naszego mikrokontrolera.</p>
<p>Przy okazji wspomnę, iż warto skorzystać z debugowania za pomocą interfejsu RS232. Interfejs ten coraz rzadziej spotyka się w komputerach, jeżeli jednak korzystamy z płytki wyposażonej w konwerter RS232&lt;-&gt;USB na bazie układu scalonego <a href="http://www.ftdichip.com/">FTDI</a>, Linux powinien nam automatycznie wykryć port i przypisać go do urządzenia <code>/dev/ttyUSB0</code>. Na PC-cie wystarczy uruchomić terminal RS232, np. <a href="http://sourceforge.net/projects/gtkterm/">GTKTerm</a> czy <a href="http://cutecom.sourceforge.net/">CuteCom</a> (baudrate odczytamy z kodu źródłowego; w moim przypadku parametry transmisji wynosiły <code>115200, 8N1</code>), a w kodzie programu mikrokontrolera umieścić wywołania <code>printf()</code> czy <code>puts()</code>, raportujące stan urządzenia.</p>
<p>Jedyną niedogodnością jest fakt, iż po odłączeniu kabla lub zasilania płytki oba terminale zawieszają się, zajmując przy okazji całą moc CPU PC-ta. Dlatego w takich sytuacjach warto pamiętać o wcześniejszym rozłączeniu połączenia w terminalu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/05/06/nutos-na-linuksie-i-mmnet104/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JTAG vs. fuse bity ATmegi128</title>
		<link>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/</link>
		<comments>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 20:38:59 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[Elektronika]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=498</guid>
		<description><![CDATA[W naszym projekcie grupowym na ETI korzystamy z modułu MMnet104 z mikrokontrolerem ATmega128. W wyniku bliżej nieokreślonych manipulacji procesor przestał odpowiadać na próby komunikacji po SPI za pomocą programatorów ISP.
Po konsultacjach uzgodniliśmy, że przed dramatyczną próbą wybebeszenia ATmegi i potraktowania ją programatorem równoległym spróbujemy użyć JTAG-a. Szczęśliwie okazało się, że da się w miarę prosto [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/vmario/3487121562/" title="AVR JTAG by vmario, on Flickr"><img class="vmlewa" src="http://farm4.static.flickr.com/3414/3487121562_5deb72b0e9_t.jpg" width="75" height="100" alt="AVR JTAG" /></a>W naszym projekcie grupowym na <abbr title="Elektronika, Telekomunikacja i Informatyka">ETI</abbr> korzystamy z modułu <a href="http://www.propox.com/products/t_130.html">MMnet104</a> z mikrokontrolerem ATmega128. W wyniku bliżej nieokreślonych manipulacji procesor przestał odpowiadać na próby komunikacji po <abbr title="Serial Peripheral Interface">SPI</abbr> za pomocą programatorów <abbr title="In-System Programming">ISP</abbr>.</p>
<p>Po konsultacjach uzgodniliśmy, że przed dramatyczną próbą wybebeszenia ATmegi i potraktowania ją programatorem równoległym spróbujemy użyć <abbr title="Joint Test Action Group">JTAG</abbr>-a. Szczęśliwie okazało się, że da się w miarę prosto zbudować taki programator w warunkach domowych.</p>
<p><span id="more-498"></span></p>
<p>W Internecie nietrudno natrafić na <a href="http://www.scienceprog.com/build-your-own-avr-jtagice-clone/">opisy</a> wykonania <abbr title="Joint Test Action Group">JTAG</abbr>-a, także <a href="http://liku.sdfpau.org/artykuly.php?a=avrjtag">w języku polskim</a>. Jak widać, schemat ideowy jest całkiem prosty, a elementy dosyć popularne i łatwe do zdobycia. Wyjątkiem jest oscylator kwarcowy o częstotliwości 7,3728MHz. Ja znalazłem go dopiero w czwartym sklepie (jeżeli ktoś mieszka w trójmieście, radzę od razu odwiedzić sklep Jacktronic). Warto też pamiętać, by kupić dwie ATmegi16, dzięki czemu będziemy mieli jeden czysty mikrokontroler, który posłuży do sprawdzenia poprawności działania <abbr title="Joint Test Action Group">JTAG</abbr>-a.</p>
<p>Postępując zgodnie z opisem powinniśmy uruchomić całość w miarę szybko i sprawnie. Ja napotkałem tylko na problem z wgraniem bootloadera za pomocą programatora AVR USBasp, który <a href="http://blog.vmario.org/2008/10/22/programator-avr-usbasp-na-linuksie/">opisywałem</a> kilka miesięcy temu. Programator ciągle przerywał pracę, strasząc jakimś &bdquo;broken pipe&rdquo;. Nie udało mi się znaleźć wytłumaczenia tego problemu &mdash; być może jest to kwestia zakłóceń, powstających na skutek montażu na płytce stykowej. W każdym razie wystarczy odrobina cierpliwości i wgrywanie wsadu aż do skutku (w trybie spowolnionego programowania, które wlecze się niemiłosiernie, ale w końcu odnosi skutek). Co do samego wsadu, to radzę zastosować <a href="http://liku.sdfpau.org/files/avrboot.hex">gotowy</a> (u mnie samodzielna kompilacja nie zaowocowała działającą binarką).</p>
<p>Jeżeli komuś nie chce się przeliczać fuse bitów dla ATmegi16 w <abbr title="Joint Test Action Group">JTAG</abbr>-u, poniżej podaję gotową komendę dla <code>avrdude</code> (<i>Fuse Low Byte</i> równy <code>0xFF</code> i <i>Fuse High Byte</i> równy <code>0xD8</code>).</p>
<pre><code>$ avrdude -p m16 -c usbasp -v -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m</code></pre>
<p>Przypominam, że należy starannie zaciskać złącza IDC10 na taśmie programującej, a w przypadku użycia scrossowanego kabla RS232 należy zamienić odpowiednie końcówki w gnieździe.</p>
<p>Jeżeli ktoś chciałby uruchomić cały programator pod Linuksem, to, niestety, nie jestem w stanie służyć pomocą. Pod Linuksem wgrałem tylko bootloader, a resztę załatwiło AVR Studio pod Windowsem.</p>
<p>Co do naszej nieszczęsnej ATmegi128 &mdash; za pomocą JTAG-a odblokowałem lock bity, ustawiłem poprawną konfigurację oscylatora i wyłączyłem flagę <i>WDTON</i>, która niepotrzebnie włączała watchdoga, dzięki czemu moduł w końcu ruszył.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/04/29/jtag-vs-fuse-bity-atmegi128/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Uruchamianie programu Java z użyciem Pythona</title>
		<link>http://blog.vmario.org/2009/04/25/uruchamianie-programu-java-z-uzyciem-pythona/</link>
		<comments>http://blog.vmario.org/2009/04/25/uruchamianie-programu-java-z-uzyciem-pythona/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 11:26:08 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=488</guid>
		<description><![CDATA[Na potrzeby jednego z projektów na uczelni chciałem sprawdzić, jakie możliwości udostępnia GUI pakietu JDMP. Nie lubię jednak Javy i nie chciało mi się w niej pisać nawet króciutkiego programiku. Postanowiłem, że zamiast tego po raz pierwszy spróbuję Jythona.
Jython, następca JPythona, jest implementacją Pythona w Javie i, co w tym przypadku najważniejsze, pozwala posługiwać się [...]]]></description>
			<content:encoded><![CDATA[<p>Na potrzeby jednego z projektów na uczelni chciałem sprawdzić, jakie możliwości udostępnia GUI pakietu <a href="http://www.jdmp.org/"><abbr title="Java Data Mining Package">JDMP</abbr></a>. Nie lubię jednak Javy i nie chciało mi się w niej pisać nawet króciutkiego programiku. Postanowiłem, że zamiast tego po raz pierwszy spróbuję Jythona.</p>
<p>Jython, następca JPythona, jest implementacją Pythona w Javie i, co w tym przypadku najważniejsze, pozwala posługiwać się klasami Javy przez skrypty Pythona (a także z użyciem trybu interaktywnego!).</p>
<p><span id="more-488"></span></p>
<p>Po zainstalowaniu Jythona warto nadać odpowiednie uprawnienia dla katalogu cache&#8217;a. W moim przypadku było to:</p>
<pre><code># /opt/jython/jython
# chmod -R a+rw /opt/jython/cachedir/</code></pre>
<p>Dzięki temu unikniemy komunikatów takich jak poniższy:</p>
<pre><code>*sys-package-mgr*: can't write index file</code></pre>
<p>Poza tym cache powinien odrobinę przyspieszyć pracę Jythona, a przynajmniej tak mi się wydaje ;)</p>
<p>Wracając do meritum: skrypt wywołujący funkcję <code>main()</code> interesującej mnie klasy wygląda bardzo prosto. Wystarczy dodać do ścieżki systemowej plik <abbr title="Java ARchive">JAR</abbr> i zaimportować klasę.</p>
<p>W moim przypadku funkcja <code>main()</code> wywołana bez argumentów zgłosiła błąd, więc szybko dopisałem coś, co powinno z grubsza symulować wywołanie z konsoli.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env /opt/jython/jython</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;jdmp.jar&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">import</span> org.<span style="color: black;">jdmp</span>.<span style="color: black;">gui</span>.<span style="color: black;">JDMP</span>
&nbsp;
org.<span style="color: black;">jdmp</span>.<span style="color: black;">gui</span>.<span style="color: black;">JDMP</span>.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;test&quot;</span>,<span style="color: #483d8b;">&quot;-g&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>PS Domyślam się, że pewnie jest prosty sposób na uruchomienie tej funkcji za pomocą Javy, ale znalezienie takiego rozwiązania zajęłoby mi pewnie tyle samo, co napisanie powyższego skryptu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/04/25/uruchamianie-programu-java-z-uzyciem-pythona/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Walka z RandR w GNOME</title>
		<link>http://blog.vmario.org/2009/04/16/walka-z-randr-w-gnome/</link>
		<comments>http://blog.vmario.org/2009/04/16/walka-z-randr-w-gnome/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 20:37:23 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=467</guid>
		<description><![CDATA[RandR to rozszerzenie X-ów, które pozwala m.in. na dynamiczną zmianę rozdzielczości ekranu i zarządzanie monitorami. Bardzo rzadko z niego korzystam, bo na ogół albo pracuję na wbudowanej matrycy laptopa, albo podłączam zewnętrzny monitor jeszcze przed uruchomieniem systemu, a wtedy X-y same go wykryją. Oczywiście, w razie czego zawsze można skorzystać z
$ xrandr --auto
i wszystkie podłączone [...]]]></description>
			<content:encoded><![CDATA[<p><abbr title="Resize and Rotate Extension">RandR</abbr> to rozszerzenie X-ów, które pozwala m.in. na dynamiczną zmianę rozdzielczości ekranu i zarządzanie monitorami. Bardzo rzadko z niego korzystam, bo na ogół albo pracuję na wbudowanej matrycy laptopa, albo podłączam zewnętrzny monitor jeszcze przed uruchomieniem systemu, a wtedy X-y same go wykryją. Oczywiście, w razie czego zawsze można skorzystać z</p>
<pre><code>$ xrandr --auto</code></pre>
<p>i wszystkie podłączone monitory automatycznie się skonfigurują. Z użyciem tego konsolowego programu można też pobawić się w tworzenie bardziej złożonych ustawień, typu jeden monitor nad drugim, jeden obok drugiego itp.</p>
<p>Żeby było nam wygodniej, przyjemniej i cieplej w plecy GNOME udostępnia GUI dla <abbr title="Resize and Rotate Extension">RandR</abbr>. Wynalazek ten figuruje w moim menu jako <i>Ekran</i> i uruchamia program <code>gnome-display-properties</code>. Jest to narzędzie, które teoretycznie może i ułatwia życie, ale w praktyce przynosi więcej szkody niż pożytku, przynajmniej w moim wypadku.</p>
<p><span id="more-467"></span></p>
<p>Po uruchomieniu wspomnianej aplikacji pobawiłem się trochę ustawieniami, pochwaliłem w duchu dobry pomysł, wykrzaczyłem X-y i w końcu stwierdziłem, że mi to do szczęścia potrzebne nie jest. Niestety, w międzyczasie zdążyłem coś zmienić i cały pulpit przesunął się kilka pikseli poza obszar ekranu. Po restarcie X-y podnosiły się poprawnie, ale po zalogowaniu do GNOME-a wszystko znów się przesuwało. Była to przypadłość tylko i wyłącznie GNOME-a, więc doszedłem do wniosku, że środowisko to musi przy włączaniu ładować jakieś dziwne ustawienia. Ponieważ w autostarcie nie znalazłem nic podejrzanego, zacząłem męczyć <code>gnome-display-properties</code> i w końcu znalazłem przyczynę kłopotów: złą częstotliwość odświeżania. Po jej zmianie ekran przesunął się na dawne miejsce, ale&hellip; tapetę miałem rozciągniętą strasznie w dół. Podniesienie pokrywy laptopa ukazało istotę problemu: miałem ustawione dwa monitory, połączone w pionie. Niestety, ustawienia tego nie mogłem anulować, bo próba wyłączenia wbudowanego wyświetlacza kończyła się restartem X-ów.</p>
<p>Ponieważ tapeta jest w komputerze najważniejsza (a ponadto piekielnie niewygodny jest kursor myszy, który nie zatrzymuje się na dole ekranu, ale jedzie sobie śmiało poniżej paska zadań; że o dziwnie maksymalizujących się niektórych oknach już nie wspomnę), zabrałem się za poszukiwania tego-czegoś-co-trzeba-wyłączyć.</p>
<p>Na pierwszy ogień poszedł autostart. Wyłączenie <i>Usługi ustawień środowiska GNOME</i> pomogło, ale przecież trudno używać GNOME bez <code>gnome-settings-daemon</code>. Musiałem więc znaleźć miejsce, w którym nieopatrznie zmieniłem jakieś ustawienie. Oszczędzę Wam szczegółów tych poszukiwań, dość powiedzieć, że w końcu sięgnąłem nawet po hexedytor i przeglądając jedną z bibliotek GNOME-a w końcu znalazłem to, czego szukałem.</p>
<p>Otóż GNOME używa wątpliwej proweniencji (czyżby inspiracja rejestrem Windows?) wynalazku jakim jest GConf. Po uruchomieniu edytora <code>gconf-editor</code> można użyć wyszukiwarki, by znaleźć pozycję <code>/apps/gnome_settings_daemon/plugins/xrandr</code>. Teraz wystarczy odznaczyć opcję <i>active</i> i po sprawie.</p>
<p>Proste, prawda? Oczywiście, można by tę opcję umieścić w <code>gnome-display-properties</code>, ale wtedy byłoby aż za łatwo&hellip;</p>
<p>Na przyszłość radzę wspomnianej aplikacji nie dotykać, a w systemie przypisać jakiś łatwy skrót klawiaturowy (np. <i>Win + x</i>) do komendy</p>
<pre><code>$ xrandr --auto</code></pre>
<p>Tak na wszelki wypadek, gdyby nam kiedyś X-y oszalały po podłączeniu nowego monitora.</p>
<p>PS O GConf możecie poczytać u <a href="http://grzglo.jogger.pl/2009/04/16/gconf-a-czy-ty-wiesz-jak-podrasowac-swoj-pulpit/">Grzglo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/04/16/walka-z-randr-w-gnome/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ranking mirrorów Archa</title>
		<link>http://blog.vmario.org/2009/04/01/ranking-mirrorow-archa/</link>
		<comments>http://blog.vmario.org/2009/04/01/ranking-mirrorow-archa/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:13:38 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=455</guid>
		<description><![CDATA[Dziś coś z cyklu &#8222;Mała rzecz a cieszy&#8230;&#8221;. Otóż od dłuższego czasu irytowała mnie powolność działania pacmana w Archu. W szczególności nawiązanie połączenia z repozytorium nierzadko trwało wieki. W końcu postanowiłem coś z tym zrobić. Oczywiście, okazało się, że problem można rozwiązać w ciągu kilku minut, włączając to odnalezienie stosownej informacji na wiki dystrybucji.

Zaczynamy od [...]]]></description>
			<content:encoded><![CDATA[<p>Dziś coś z cyklu &bdquo;Mała rzecz a cieszy&hellip;&rdquo;. Otóż od dłuższego czasu irytowała mnie powolność działania pacmana w Archu. W szczególności nawiązanie połączenia z repozytorium nierzadko trwało wieki. W końcu postanowiłem coś z tym zrobić. Oczywiście, okazało się, że problem można rozwiązać w ciągu kilku minut, włączając to odnalezienie stosownej informacji na wiki dystrybucji.</p>
<p><span id="more-455"></span></p>
<p>Zaczynamy od przygotowania rankingu mirrorów. W najprostszym wypadku możemy po prostu wpisać:</p>
<pre><code># cd /etc/pacman.d/
# rankmirrors mirrorlist</code></pre>
<p>Po kilku minutach otrzymamy listę mirrorów posortowanych wedle szybkości połączenia. Listę kopiujemy do pliku <code>mirrorlist-rankmirrors</code>. Możemy też od razu zapisać np. 5 najszybszych mirrorów do pliku:</p>
<pre><code># rankmirrors -n 5 mirrorlist > mirrorlist-rankmirrors</code></pre>
<p>Później w <code>/etc/pacman.conf</code> linie</p>
<pre><code>Include = /etc/pacman.d/mirrorlist</code></pre>
<p>poprawiamy na</p>
<pre><code>Include = /etc/pacman.d/mirrorlist-rankmirrors</code></pre>
<p>Na koniec wymuszamy aktualizację aktualnej bazy pakietów:</p>
<pre><code># pacman -Syy</code></pre>
<p>Na anglojęzycznym wiki Archa można też znaleźć <a href="http://wiki.archlinux.org/index.php/Improve_Pacman_Performance">opis innych sposobów na przyspieszenie pacmana</a>. Ja pokusiłem się tylko o optymalizację bazy danych:</p>
<pre><code># pacman-optimize &#038;&#038; sync</code></pre>
<p>Jak mówi pomoc do tego programiku:</p>
<blockquote><p>Ponieważ pacman używa wielu małych plików aby śledzić pakiety pliki te mają tendencję do fragmentacji w miarę upływu czasu. Ten skrypt próbuje przenieść je w jedno ciągłe miejsce na dysku. W rezultacie dysk twardy powinien czytać je szybciej, ponieważ jego głowica nie musi się często przemieszczać.</p></blockquote>
<p>Oczywiście, <q>powinien</q> nie jest równoważne z &bdquo;musi&rdquo;, ale zawsze możemy liczyć na efekt placebo&hellip; ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/04/01/ranking-mirrorow-archa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Problem z drukowaniem z KDVI</title>
		<link>http://blog.vmario.org/2009/03/07/problem-z-drukowaniem-z-kdvi/</link>
		<comments>http://blog.vmario.org/2009/03/07/problem-z-drukowaniem-z-kdvi/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 16:17:03 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=448</guid>
		<description><![CDATA[Na swoim Arch Linuksie pracuję pod GNOME, ale korzystam z kilku aplikacji KDE, w tym z Kile, który jest edytorem LaTeX-a. Przygotowałem dziś sprawozdanie z laboratorium, które chciałem wydrukować bezpośrednio z przeglądarki KDVI, jednak ta opluła mnie błędem /bin/bash: cupsdoprint: command not found. Pomyślałem, że może to wina kdemod3, które zawiera ten programik w jakimś [...]]]></description>
			<content:encoded><![CDATA[<p>Na swoim Arch Linuksie pracuję pod GNOME, ale korzystam z kilku aplikacji KDE, w tym z <a href="http://kile.sourceforge.net/">Kile</a>, który jest edytorem LaTeX-a. Przygotowałem dziś sprawozdanie z laboratorium, które chciałem wydrukować bezpośrednio z przeglądarki KDVI, jednak ta opluła mnie błędem <i>/bin/bash: cupsdoprint: command not found</i>. Pomyślałem, że może to wina <code>kdemod3</code>, które zawiera ten programik w jakimś oddzielnym pakiecie. Okazało się jednak, że wspomniany program znajduje się w systemie w katalogu <code>/opt/kde/bin/</code> i powłoka bash widzi go, zarówno z konta użytkownika, jak i roota.</p>
<p>Postanowiłem zatem obejść problem, eksportując sprawozdanie do PDF-a i drukując za pomocą <a href="http://projects.gnome.org/evince/">Evince</a>. Niestety, z poziomu Kile nie udało się to ze względu na błędy w osadzaniu plików <abbr title="Encapsulated PostScript">EPS</abbr> (buntował się albo TeX, albo Evince, zależnie od użytego sposobu). Pozostał tylko wydruk do PDF-a z poziomu KDVI.</p>
<p>Rzuciłem jednak okiem na <i>Options</i> w oknie wydruku KDVI i zmieniłem opcję <i>Print system currently used</i> z <i>CUPS</i> na <i>Generic UNIX LPD Print System</i>. Ku mojemu zdziwieniu, wydruk ruszył, a co jeszcze bardziej zaskakujące, jakość okazała się lepsza niż w pierwszym obejściu problemu (wydruk był bardziej &bdquo;gładki&rdquo;).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/03/07/problem-z-drukowaniem-z-kdvi/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zagospodarowanie paska bocznego w Firefoksie</title>
		<link>http://blog.vmario.org/2009/02/25/zagospodarowanie-paska-bocznego-w-firefoksie/</link>
		<comments>http://blog.vmario.org/2009/02/25/zagospodarowanie-paska-bocznego-w-firefoksie/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:55:35 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<category><![CDATA[Lifehacking]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=442</guid>
		<description><![CDATA[Od czasu do czasu miewam coś w rodzaju przebłysku inteligencji, co na ogół objawia się tym, że usprawniam jakiś fragment mojego otoczenia, który od dawna mnie irytował.
Ostatnio padło na zbyt szerokie okno przeglądarki internetowej. Przyzwyczajony jestem do maksymalizowana okna Firefoksa, jednak w czasach coraz większych rozdzielczości ekranu nawyk ten niesie ze sobą pewną niedogodność. Otóż [...]]]></description>
			<content:encoded><![CDATA[<p>Od czasu do czasu miewam coś w rodzaju przebłysku inteligencji, co na ogół objawia się tym, że usprawniam jakiś fragment mojego otoczenia, który od dawna mnie irytował.</p>
<p>Ostatnio padło na zbyt szerokie okno przeglądarki internetowej. Przyzwyczajony jestem do maksymalizowana okna Firefoksa, jednak w czasach coraz większych rozdzielczości ekranu nawyk ten niesie ze sobą pewną niedogodność. Otóż niektórzy twórcy stron nie ograniczają szerokości bloków z treścią, co owocuje wyświetlaniem zbyt długich wierszy tekstu, które po prostu nie nadają się do czytania.</p>
<p><span id="more-442"></span></p>
<p>W związku z tym zacząłem szukać jakiejś skryptozakładki lub rozszerzenia, które pozwoliłyby szybko zmniejszyć szerokość strony bez potrzeby normalizowania całego okna. Wtedy przypomniałem sobie o <a href="https://addons.mozilla.org/en-US/firefox/addon/1027">All-in-One Sidebar</a> i pomyślałem, że może po prostu zagospodaruję jakoś pasek boczny w przeglądarce. All-in-One Sidebar nie oferował mi jednak nic przydatnego. Wyświetlanie zakładek? Wystarczy mi pasek zakładek u góry okna. Wyświetlanie jakiejś strony WWW? Może, tylko jakiej? Pomyślałem, o <a href="http://www.netvibes.com/">Netvibes</a>, ale w wąskim pasku to wyglądało po prostu tragicznie. Dałem więc szansę <a href="http://www.google.pl/ig">iGoogle</a>. Tu rzecz miała się znacznie lepiej dzięki rozszerzeniu <a href="https://addons.mozilla.org/en-US/firefox/addon/3130">iGoogle Sidebar</a>.</p>
<p>Teraz miałem węższy obszar dla stron, a z boku zgrabny pasek z kalkulatorem, kalendarzem, programem telewizyjnym i innymi bajerami. Choć w sumie&hellip; tą &bdquo;zgrabnością&ldquo; nie byłem do końca zachwycony, bo nie wszystkie widgety dobrze sobie radziły z tak małą szerokością. Niemniej nie było źle.</p>
<p>Kontynuowałem jednak poszukiwania i w końcu trafiłem na <a href="https://addons.mozilla.org/en-US/firefox/addon/5890">Tree Style Tab</a>, który gości u mnie od kilkunastu dni. Ma on pewne wady, np. nie znalazłem żadnego, poza użyciem <i>F11</i> sposobu, na szybkie schowanie tego rozszerzenia (jest dostępne autoukrywanie, ale ja autoukrywania po prostu nie znoszę), gdy jakaś strona potrzebuje pełnej szerokości ekranu, ale poza tym jest to całkiem sprytne rozszerzenie. Mogę teraz znacznie łatwiej połapać się w kartach, gdy jest ich większa liczba.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/02/25/zagospodarowanie-paska-bocznego-w-firefoksie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Konwersja kluczy z OpenSSH do PuTTY&#8217;ego</title>
		<link>http://blog.vmario.org/2009/02/09/konwersja-kluczy-z-openssh-do-puttyego/</link>
		<comments>http://blog.vmario.org/2009/02/09/konwersja-kluczy-z-openssh-do-puttyego/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 08:46:18 +0000</pubDate>
		<dc:creator>vmario</dc:creator>
		
		<category><![CDATA[GNU/Linux]]></category>

		<category><![CDATA[Komputer]]></category>

		<guid isPermaLink="false">http://blog.vmario.org/?p=436</guid>
		<description><![CDATA[Jeżeli wygenerujemy sobie klucz SSH (nazwijmy go test_id_dsa), korzystając z OpenSSH:
$ ssh-keygen -t dsa
to PuTTY przy próbie autoryzacji tym kluczem wesoło zamiga do nas komunikatem Unable to use key file &#8220;C:\test_id_dsa&#8221; (OpenSSH SSH-2 private key).
Zagadką jest dla mnie, dlaczego tego klucza nie przekonwertuje sobie w locie na swój własny format, ani nawet nie podpowie użytkownikowi, [...]]]></description>
			<content:encoded><![CDATA[<p>Jeżeli wygenerujemy sobie klucz <abbr title="Secure Shell">SSH</abbr> (nazwijmy go <code>test_id_dsa</code>), korzystając z OpenSSH:</p>
<pre><code>$ ssh-keygen -t dsa</code></pre>
<p>to PuTTY przy próbie autoryzacji tym kluczem wesoło zamiga do nas komunikatem <i>Unable to use key file &#8220;C:\test_id_dsa&#8221; (OpenSSH SSH-2 private key)</i>.</p>
<p>Zagadką jest dla mnie, dlaczego tego klucza nie przekonwertuje sobie w locie na swój własny format, ani nawet nie podpowie użytkownikowi, że ten może zrobić to ręcznie. Na szczęście, my wiemy, co robić.</p>
<p>Uruchamiamy <i>PuTTYgen</i> (<i>PuTTY Key Generator</i>), wybieramy <i>Conversions -&gt; Import key</i>, importujemy klucz (jeżeli jest zabezpieczony hasłem, zostaniemy o nie zapytani) i klikamy <i>Save private key</i>. Otrzymujemy klucz <code>test_id_dsa.ppk</code>, który będzie akceptowany przez PuTTY&#8217;ego.</p>
<p>Jeżeli z jakichś powodów chcemy dokonać konwersji kluczy pod Linuksem, instalujemy PuTTY&#8217;ego, po czym wydajemy polecenie:</p>
<pre><code>$ puttygen test_id_dsa -o test_id_dsa.ppk</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.vmario.org/2009/02/09/konwersja-kluczy-z-openssh-do-puttyego/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
