<?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>JakiLinux &#187; norbert_ramzes</title>
	<atom:link href="http://jakilinux.org/author/norbert_ramzes/feed/" rel="self" type="application/rss+xml" />
	<link>http://jakilinux.org</link>
	<description>GNU/Linux dla każdego: newsy, artykuły, porównania dystrybucji</description>
	<lastBuildDate>Fri, 11 May 2012 18:16:49 +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>Tune2fs &#8211; tuning systemów plików ext2, ext3 i ext4</title>
		<link>http://jakilinux.org/linux/tune2fs-tuning-systemow-plikow-ext2-ext3-i-ext4/</link>
		<comments>http://jakilinux.org/linux/tune2fs-tuning-systemow-plikow-ext2-ext3-i-ext4/#comments</comments>
		<pubDate>Thu, 10 May 2012 18:57:26 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Administracja]]></category>
		<category><![CDATA[Aplikacje]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Konsola]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Teksty]]></category>

		<guid isPermaLink="false">http://jakilinux.org/?p=212412</guid>
		<description><![CDATA[<a href="http://man.cx/tune2fs(8)/pl">tune2fs</a> jest jednym z wielu zaawansowanych i przydatnych narzędzi w <a href="http://pl.wikipedia.org/wiki/Dystrybucja_Linuksa">dystrybucjach systemu Linux</a>. Pozwala ujarzmić kilkanaście ustawień <a href="http://pl.wikipedia.org/wiki/System_plik%C3%B3w">systemów plików</a> <a href="http://pl.wikipedia.org/wiki/Ext2">ext2</a>, <a href="http://pl.wikipedia.org/wiki/Ext3">ext3</a> i <a href="http://pl.wikipedia.org/wiki/Ext4">ext4</a>.]]></description>
			<content:encoded><![CDATA[<p><a href="http://man.cx/tune2fs(8)/pl" class="extlink">Tune2fs</a> jest jednym z wielu zaawansowanych i przydatnych narzędzi w <a href="http://pl.wikipedia.org/wiki/Dystrybucja_Linuksa" class="extlink">dystrybucjach systemu Linux</a>. Pozwala ujarzmić kilkanaście ustawień <a href="http://pl.wikipedia.org/wiki/System_plik%C3%B3w" class="extlink">systemów plików</a> <a href="http://pl.wikipedia.org/wiki/Ext2" class="extlink">ext2</a>, <a href="http://pl.wikipedia.org/wiki/Ext3" class="extlink">ext3</a> i <a href="http://pl.wikipedia.org/wiki/Ext4" class="extlink">ext4</a>.<br />
<!-- more --><!--header--></p>
<p class="img-right"><!--adsense--></p>
<p>Przed pracą musimy wybrać system plików, który chcemy modyfikować/sprawdzać. Można do tego użyć m.in. cfdisk, GParted lub <a href="http://library.gnome.org/users/gnome-system-monitor/" class="extlink">Monitor Systemu</a>:</p>
<p><a href="http://jakilinux.org/reviews/Norbert_Kiszka/tune2fs-tuning-systemow-plikow-ext2ext3ext4/tune2fs_monitor_systemu.jpg"><img src="http://jakilinux.org/reviews/Norbert_Kiszka/tune2fs-tuning-systemow-plikow-ext2ext3ext4/tune2fs_monitor_systemu_thumb.jpg" alt="wybór systemu plików przy użyciu Monitor Systemu" /></a></p>
<p>Musimy posiadać zainstalowany tune2fs w systemie. W Debianie będzie to paczka e2fsprogs.</p>
<p>Polecenie uruchamiane jest z poziomu konsoli &#8211; jeśli nie jesteś z nią zaznajomiony(a), rzuć okiem na <a href="http://jakilinux.org/aplikacje/konsola/terminal-dla-poczatkujacego-cz-1/">krótki tutorial</a>.</p>
<p>Przyjrzyjmy się wybranej partycji (nieco więcej informacji pokazuje <a href="http://man.cx/dumpe2fs(8)/pl" class="extlink">dumpe2fs</a>):</p>
<pre>
ramzes@rh1:~$ sudo tune2fs -l /dev/sda8
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name: root
Last mounted on: /
Filesystem UUID: a2e7776b-0f0d-49ba-80fc-ada4d2f2eda2
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode
dir_index filetype needs_recovery extent flex_bg sparse_super
large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 983040
Block count: 3931900
Reserved block count: 39319
Free blocks: 3758856
Free inodes: 974645
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 959
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Nov 29 15:43:52 2010
Last mount time: Mon Feb 14 17:49:07 2011
Last write time: Sun Mar 6 21:08:14 2011
Mount count: 3
Maximum mount count: 34
Last checked: Mon Jan 24 01:43:50 2011
Check interval: 15552000 (6 months)
Next check after: Sat Jul 23 02:43:50 2011
Lifetime writes: 2364 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 537f84a1-d96e-4c37-a20f-5b176e946e08
Journal backup: inode blocks</pre>
<p>Wyjaśniając ważniejsze terminy:</p>
<table class="arttable">
<tbody>
<tr>
<td>Filesystem volume name</td>
<td><a href="http://en.wikipedia.org/wiki/Volume_(computing)#Volume_label" class="extlink">Etykieta woluminu</a> (nazwa dysku) &#8211; dowolna nazwa ułatwiająca nam identyfikację systemu plików</td>
</tr>
<tr>
<td>Last mounted on</td>
<td>Ostatni <a href="http://jakilinux.org/instalacja/podzial-na-partycje/">punkt (katalog) montowania</a></td>
</tr>
<tr>
<td>Filesystem UUID</td>
<td><a href="http://en.wikipedia.org/wiki/Universally_unique_identifier" class="extlink">Unikalny identyfikator</a>, generowany jednorazowo podczas tworzenia systemu plików. Jego jedną z zalet, jest możliwość montowania przy jego użyciu &#8211; o czym będzie w dalszej części artykułu</td>
</tr>
<tr>
<td>Filesystem magic number</td>
<td>Magiczna liczba, mówiąca o rodzaju systemu plików</td>
</tr>
<tr>
<td>Filesystem revision</td>
<td>Rewizja (podwersja) systemu plików. Większa wartość oznacza nowszą podwersję.</td>
</tr>
<tr>
<td><a href="http://linuxsoftware.co.nz/wiki/ext4" class="extlink">Filesystem features</a></td>
<td>Funkcjonalności/flagi. Ważniejsze z nich w kolejności alfabetycznej:</td>
</tr>
</tbody>
</table>
<ul >
<li>dir_index &#8211; włącza indeksowanie plików w katalogach &#8211; przyśpiesza wyszukiwanie w katalogach z dużą ilością plików</li>
<li>dir_nlink &#8211; flaga która włącza limit ilości <a href="http://pl.wikipedia.org/wiki/Dowi%C4%85zanie_twarde" class="extlink">twardych dowiązań</a> (dla ext3 domyślnie 32000 a dla ext4 domyślnie 65000 &#8211; według źródeł jądra Linuksa). Ma to znaczenie, gdyż dowiązanie może linkować do nadrzędnego katalogu, co wywołuje zapętlenie.</li>
<li>extent &#8211; oznacza, że używane są <a href="http://pl.wikipedia.org/wiki/Extent" class="extlink">extenty</a> (dostępne od ext4). Extenty to w wolnym tłumaczeniu &#8222;bloki&#8221;, których jest dokładnie jeden na plik, w przeciwieństwie do tradycyjnych <a href="http://pl.wikipedia.org/wiki/System_plik%C3%B3w#Organizacja_danych" class="extlink">bloków</a> &#8211; zmniejsza to <a href="http://pl.wikipedia.org/wiki/Fragmentacja_(system_plik%C3%B3w)" class="extlink">fragmentację</a> oraz przyśpiesza operacje, zwłaszcza przy dużych plikach</li>
<li>ext_attr &#8211; wykorzystywane przy <a href="http://pl.wikipedia.org/wiki/Security-Enhanced_Linux" class="extlink">SELinux</a></li>
<li>filetype &#8211; zapisuje w katalogu <a href="http://man.cx/stat(1)/pl" class="extlink">typ</a> każdego pliku</li>
<li><a href="http://linuxsoftware.co.nz/wiki/ext4" class="extlink">flex_bg</a> &#8211; zaawansowana flaga w ext4, która znacznie zwiększa wydajność systemu plików. Niestety, może zostać włączona tylko podczas formatowania (a nie podczas konwertowania ext3 na ext4) oraz niektóre wersje e4defrag mogą nie działać przy niej.</li>
<li>has_journal &#8211; posiada <a href="http://pl.wikipedia.org/wiki/Ksi%C4%99gowanie_(informatyka)" class="extlink">dziennik</a></li>
<li>huge_file &#8211; podobnie jak w &#8222;large_file&#8221;, jednak przy plikach większych niż ext3 jest w stanie obsłużyć</li>
<li>large_file – flaga ustawiana automatyczna podczas zapisu pliku większego niż 2GB</li>
<li><a href="http://www.linuxsymposium.org/archives/OLS/Reprints-2007/OLS2007-Proceedings-V2.pdf" class="extlink">meta_bg</a> &#8211; zaawansowana funkcjonalność powiększająca pojemność systemu plików &#8211; dostępne w ext3 (Linux &gt;= 2.6.0) i ext4</li>
<li><a href="http://linuxsoftware.co.nz/wiki/ext4" class="extlink">multi mount protection (MMP)</a> &#8211; uniemożliwia montowanie w więcej niż jednym miejscu (punkcie)</li>
<li>needs_recovery &#8211; ustawiane zawsze podczas montowania i usuwane podczas odmontowywania. Jeśli filesystem nie jest zamontowany, a posiada tę flagę, oznacza to, że nie był poprawnie zdemontowany, np. w wyniku awarii zasilania</li>
<li>resize_inode &#8211; pozwala na zmianę rozmiaru systemu plików w trakcie pracy</li>
<li>sparse_super &#8211; limit ilości kopii zapasowych superbloków &#8211; oszczędza miejsce przy dużych systemach plików. Lepiej nie włączać w starszych dystrybucjach bez obsługi ext4.</li>
<li>uninit_bg &#8211; oznacza, że nie wszystkie <a href="http://jkluczewski.republika.pl/utk/utk_041_system_plikow_ext.pdf" class="extlink">grupy bloków</a> są zainicjowane oraz włącza dodatkowe sumy kontrolne. Zwiększa to wydajność, zwłaszcza podczas sprawdzania przy użyciu <a href="http://en.wikipedia.org/wiki/Fsck" class="extlink">e2fsck</a> (<a href="http://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_fujita.pdf" class="extlink">parę sekund zamiast paru godzin</a>)</li>
</ul>
<p><strong>Default mount options</strong> &#8211; domyślne <a href="http://man.cx/mount(8)/pl" class="extlink">opcje montowania</a> Filesystem stateStan systemu plików:</p>
<ul>
<li>clean &#8211; nie znaleziono problemów</li>
<li>not clean &#8211; błąd dziennika lub jego brak</li>
<li>clean with errors oraz not clean with errors &#8211; oznacza, że są błędy (uszkodzenia) systemu plików &#8211; należy jak najszybciej odmontować (jeśli jest zamontowany), a następnie sprawdzić/naprawić za pomocą polecenia <a href="http://man.cx/fsck(8)/pl" class="extlink">fsck</a></li>
</ul>
<p><strong>Errors behavior</strong> &#8211; Ustawienie, które mówi, co powinien zrobić system podczas znalezienia (wystąpienia) błędu:</p>
<ul>
<li>continue &#8211; kontynuacja pracy &#8211; używane zwykle dla systemowych partycji, gdyż inne zachowanie w razie błędu może spowodować nieprawidłową pracę <a href="http://pl.wikipedia.org/wiki/System_operacyjny" class="extlink">systemu</a> &#8211; w takim przypadku należy jak najszybciej zrestartować system, aby podczas startu system plików mógł zostać sprawdzony</li>
<li>remount-ro &#8211; powoduje przejście w tryb tylko do odczytu &#8211; brak możliwości zapisu uniemożliwia dalsze uszkodzenia, jednak nadal można czytać istniejące pliki</li>
<li>panic &#8211; wywołuje <a href="http://en.wikipedia.org/wiki/Kernel_panic" class="extlink">panikę jądra</a></li>
</ul>
<p><strong>Filesystem OS type</strong> &#8211; typ systemu operacyjnego, który utworzył ten system plików.<br />
<strong>Inode count</strong> &#8211; ilość <a href="http://en.wikipedia.org/wiki/Inode" class="extlink">inodów</a> &#8211; po tym można ocenić, ile jest plików i katalogów w danym systemie plików.<br />
<strong>Block count</strong> &#8211; ilość bloków.<br />
<strong>Reserved block count</strong> &#8211; ilość zarezerwowanych bloków &#8211; wyjaśnimy to w dalszej części artykułu.<br />
<strong>Free blocks</strong> &#8211; ilość wolnych bloków.<br />
<strong>Block size</strong> &#8211; rozmiar bloku (klastra).<br />
<strong>Reserved GDT blocks</strong> &#8211; zarezerwowane bloki, które umożliwiają zmianę rozmiaru systemu plików w trakcie pracy (bez konieczności odmontowania).<br />
<strong>Blocks per group</strong> &#8211; ilość bloków na każdą <a href="http://pl.wikipedia.org/wiki/System_plik%C3%B3w#Organizacja_danych" class="extlink">grupę</a>. Inodes per group &#8211; ilość <a href="http://en.wikipedia.org/wiki/Inode" class="extlink">inodów</a> na <a href="http://pl.wikipedia.org/wiki/System_plik%C3%B3w#Organizacja_danych" class="extlink">grupę</a><br />
<strong>Filesystem created</strong> &#8211; data utworzenia systemu plików.<br />
<strong>Last mount time</strong> &#8211; data ostatniego montowania.<br />
<strong>Last write time</strong> &#8211; data ostatniego zapisu.<br />
<strong>Mount count</strong> &#8211; ilość montowań od ostatniego sprawdzania przez <a href="http://pl.wikipedia.org/wiki/Fsck" class="extlink">fsck</a>.<br />
<strong>Maximum mount count</strong> &#8211; maksymalna ilość montowań, po której system powinien sprawdzić system plików (fsck) &#8211; można porównać do przeglądu samochodu po ilości przejechanych kilometrów.<br />
<strong>Last checked</strong> &#8211; data ostatniego sprawdzania przez fsck.<br />
<strong>Check interval</strong> &#8211; czas, co jaki system plików zostanie sprawdzony, niezależnie od wymienionego wyżej &#8222;Mount count&#8221; i &#8222;Maximum mount count&#8221;. Next check after &#8211; data następnego sprawdzenia &#8211; na podstawie daty ostatniego oraz &#8222;Check interval&#8221; Lifetime writes(ext4) &#8211; łączna ilość zapisanych danych do danego systemu plików &#8211; przydatne zwłaszcza dla użytkowników dysków SSD, które mają ograniczoną wytrzymałość na zapis do jednego bloku &#8211; można w ten sposób ocenić zużycie i wymienić dysk zanim nastąpi awaria.<br />
<strong>Reserved blocks uid</strong> &#8211; <a href="http://pl.wikipedia.org/wiki/UID" class="extlink">uid</a> użytkownika(-ów), którym służą zarezerwowane blokiReserved blocks. gid &#8211; <a href="http://pl.wikipedia.org/wiki/GID" class="extlink">id grupy</a>, której służą zarezerwowane bloki. </p>
<h3>Zmiana zarezerwowanej pojemności</h3>
<p>Zarezerwowana pojemność to część miejsca na <abbr title="ang. File System: system plików">FS</abbr> zarezerwowana wyłącznie dla jednego użytkownika, zwykle <a href="http://pl.wikipedia.org/wiki/Root" class="extlink">root</a>. Pozwala to na prawidłową pracę systemu nawet przy &#8222;przepełnieniu&#8221;. Zwykle domyślna wartość to 5%. Przy pojemnych systemach plików może to stanowić problem, gdyż 5% z 1TiB to aż 51.2GiB, co może nie być pożądane, np. gdy na osobnej partycji trzymamy pliki multimedialne.</p>
<p>Gdy chcemy zwiększyć lub zmniejszyć procentową ilość zarezerwowanej powierzchni systemu plików (ilość zarezerwowanych bloków w procentach):</p>
<pre>ramzes@rh1:~$ sudo tune2fs -m 6 /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Ustawianie procent zarezerwowanych bloków na 6% (943778 bloków)
ramzes@rh1:~$ sudo tune2fs -m 1 /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Ustawianie procent zarezerwowanych bloków na 1% (157296 bloków)</pre>
<p>Aby całkowicie wyłączyć, wystarczy podać 0 jako parametr.</p>
<p>W razie potrzeby, można podać ilość zarezerwowanego miejsca w blokach (zwykle jeden blok = 4KiB):</p>
<pre>ramzes@rh1:~$ sudo tune2fs -r 20000 /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Ustawianie liczby zarezerwowanych bloków na 20000</pre>
<h3>Profilaktyczne sprawdzanie systemu plików</h3>
<p><a href="http://pl.wikipedia.org/wiki/Fsck" class="extlink">Fsck</a> sprawdza montowane przy starcie systemy plików. Jeśli któryś (lub któreś) nie został(y) prawidłowo odmontowany(e) (np. w wyniku awarii zasilania), to automatycznie podlega(ją) sprawdzeniu. Również można nakazać, aby sprawdzanie było wykonywane mimo wszystko co określoną ilość montować i/lub co pewien czas.</p>
<p>Sprawdzanie co określoną ilość montowań:</p>
<pre>ramzes@rh1:~$ sudo tune2fs -c 40 /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Ustawianie maksymalnej liczby montowań na 40</pre>
<p>Sprawdzanie co określoną ilość czasu (2m oznacza 2 miesiące, przedrostek d oznacza dni, a w tygodnie):</p>
<pre>ramzes@rh1:~$ sudo tune2fs -i 2m /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Ustawianie odstępu pomiędzy sprawdzeniami na 5184000 sekund</pre>
<p>Aby wyłączyć, należy podać 0 jako parametr. Jednak nie jest to zalecane, gdyż drobna awaria sprzętowa bądź niezauważony błąd w jądrze systemu może spowodować uszkodzenie danych.</p>
<h3>Zmiana etykiety systemu plików</h3>
<p>Etykieta pozwala opisać nam systemy plików, dzięki czemu trudniej się pogubić. Wiele programów pozwala podejrzeć m.in. ustawione etykiety. Najczęściej przeze mnie używane to, wyżej już wymienione cfdisk, &#8222;Monitor Systemu&#8221; oraz GParted.</p>
<pre>ramzes@rh1:~$ sudo tune2fs -L "porn" /dev/sda1
tune2fs 1.41.12 (17-May-2010)</pre>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/linux/tune2fs-tuning-systemow-plikow-ext2-ext3-i-ext4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wstęp do CSS3 i HTML5 &#8211; Bartosz Danowski &#8211; recenzja</title>
		<link>http://jakilinux.org/linux/inne/wstep-do-css3-i-html5-bartosz-danowski-recenzja/</link>
		<comments>http://jakilinux.org/linux/inne/wstep-do-css3-i-html5-bartosz-danowski-recenzja/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 19:50:03 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://osblog.pl/?p=209437</guid>
		<description><![CDATA[Zapewne wielu z was, wie jak szybko rozwijają się technologie WWW, a w tym HTML oraz CSS. Tworząc stronę internetową można wykorzystać każdą technologię, jednak korzystając z najnowszych rozwiązań, można mieć przy tym więcej frajdy z tworzenia, skończyć szybciej z [...]]]></description>
			<content:encoded><![CDATA[<p>Zapewne wielu z was, wie jak szybko rozwijają się technologie WWW, a w tym HTML oraz CSS. Tworząc stronę internetową można wykorzystać każdą technologię, jednak korzystając z najnowszych rozwiązań, można mieć przy tym więcej frajdy z tworzenia, skończyć szybciej z lepszym &quot;dziełem&quot;.<span id="more-209437"></span></p>
<p>Dlatego też, dzięki uprzejmości <a href="http://helion.pl/" class="extlink">Wydawnictwa Helion</a> oraz <a href="http://osmedia.pl/" class="extlink">Grupy OSmedia</a> przeczytałem książkę &quot;<a href="http://helion.pl/ksiazki/wstep-do-html5-i-css3-bartosz-danowski,wshtcs.htm" class="extlink">Wstęp do HTML5 i CSS3</a>&quot; Bartosza Danowskiego. Została ona wyraźnie napisana aby była bezbolesnym wprowadzeniem do tych technologii, zarówno dla zaawansowanych webmasterów jak i dla początkujących. Choć dla tych drugich poleciłbym wpierw przeczytać kurs oparty na HTML4/XHTML1.x, a potem dopiero tę.</p>
<p>Niektórzy będą narzekać, że książka nie jest gruba, bądź, że zawiera dużo opisów starych znaczników i rozwiązań w css. Jednak czytając ją, można szybko zmienić zdanie &mdash; jest to doskonałe przypomnienie starszych specyfikacji i różnic między nimi, zwłaszcza w kontekście działania w różnych przeglądarkach. Są czytelne listingi, przykłady i wymienione różnice w interpretacji w różnych popularnych przeglądarkach.</p>
<p>Oczywiście nie ma książki bez wad. Na nie jednej stronie, przydałby się kolorowy wydruk, choćby dla samej wygody, jak w prawie każdym pierwszym wydaniu: literówki czy nawet jedno brzydkie powtórzenie. W jednym listingu (dół str. 113) zauważyłem powtórzony argument id. Ważną rzeczą, której nie da się ukryć, jest to, że znaczniki HTML w listingach pisane są z dużych liter, a w XHTML oraz HTML5 zalecane jest pisanie wyłącznie małymi literami. Być może autor założył, że czytelnik będzie o tym wiedział, lecz wielu to może wprowadzić w błąd. Kolejną rzeczą, która rzuca się w oczy, to bardzo pobieżny opis nowego znacznika canvas, który jest jedną z najbardziej obiecujących rzeczy.</p>
<p>W wielu miejscach została napisana typowo podręcznikowo, przez co z początku będzie się ciężko wpajać przekazywaną przez autora wiedzę. Jednak z czasem, takie rozwiązania okazują się najlepsze &mdash; przynajmniej moim zdaniem.</p>
<p>Mimo pewnych wad, jest bardzo dobrym wprowadzeniem a zarazem podręcznikiem, który będzie wręcz niezbędny podczas tworzenia pierwszych witryn napisanych w XHTML5/CSS3, jak i dla przypomnienia pewnych rzeczy w dalszym czasie. Powtórzę jeszcze dokładnie to samo co w tej książce jest wałkowane, HTML5 i CSS3 to technologie które dopiero powstają, a więc, czytając ją trzeba być tego świadom. Lecz z drugiej strony warto się już z nimi zapoznać, a wyżej wspomniana pozycja jest do tego dobrym, jeśli nie najlepszym wyborem.</p>
<p><em>Norbert Kiszka</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/linux/inne/wstep-do-css3-i-html5-bartosz-danowski-recenzja/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lepiej się zabezpiecz!</title>
		<link>http://jakilinux.org/linux/inne/lepiej-sie-zabezpiecz/</link>
		<comments>http://jakilinux.org/linux/inne/lepiej-sie-zabezpiecz/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 14:05:38 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Inne]]></category>

		<guid isPermaLink="false">http://osblog.pl/?p=207005</guid>
		<description><![CDATA[83% polskich rodzin z dziećmi posiada dostęp do Internetu. Czy rodziny te są zatem dobrze chronione przed zagrożeniami, które niesie ze sobą korzystanie z sieci? Wg badań GUS ponad połowa Polaków ma świadomość zagrożenia wirusami, ale nie korzysta z zabezpieczeń [...]]]></description>
			<content:encoded><![CDATA[<p>83% polskich rodzin z dziećmi posiada dostęp do Internetu. Czy rodziny te są zatem dobrze chronione przed zagrożeniami, które niesie ze sobą korzystanie z sieci? Wg badań GUS ponad połowa Polaków ma świadomość zagrożenia wirusami, ale nie korzysta z zabezpieczeń w postaci programów antywirusowych.<br />
<span id="more-207005"></span><br />
W dzisiejszych czasach internauci narażeni są w dużej mierze na niebezpieczeństwa wynikające z prezentowania im niechcianych treści wbrew ich woli (w szczególności dotyczy to dzieci) oraz niebezpieczeństwa związane z kradzieżą danych. Fałszywe linki, wiadomości na portalach społecznościowych rozsyłane do znajomych bez wiedzy użytkowników to nierzadko próby przejęcia kontroli nad profilami internautów. Znane są również przypadki wykradania prywatnych zdjęć w celu publikacji ich na różnych portalach.</p>
<p>Zabezpieczeniem przed tego rodzaju zagrożeniami są programy klasy Internet Security, które chronią tożsamość użytkowników w sieci, dbają o bezpieczeństwo transakcji internetowych i bankowych oraz wyposażone są w funkcje ochrony rodzicielskiej.</p>
<p>Wg ekspertów sklepu internetowego lepiej-sie-zabezpiecz.pl, największą popularnością cieszą się rozwiązania umożliwiające regulowanie połączeń, jakie wykonuje komputer w sieci, ograniczenie dostępu do treści dla nieletnich, oraz te chroniące transakcje bankowe i zakupy w sklepach internetowych.</p>
<p>&nbsp;<kbd>-</kbd> Oferujemy wsparcie doświadczonych doradców oraz największy wybór antywirusów w Polsce &mdash; mówi Justyna Mikuła z lepiej-sie-zabezpiecz.pl.</p>
<p>Eksperci bezpieczeństwa ze sklepu lepiej-sie-zabezpiecz.pl przypominają, że każdy plik czy informacja, która raz dostanie się do sieci pozostaje w niej na zawsze a dostęp do wszelkiego rodzaju groźnych treści jest coraz łatwiejszy. Pozostaje nam tylko posłuchać rady zawartej w adresie sklepu: lepiej się zabezpiecz!</p>
<p><em>Artykuł dzięki uprzejmości firmy Ikaria.</p>
<p>Skład: Norbert Kiszka</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/linux/inne/lepiej-sie-zabezpiecz/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Instalacja zamkniętego sterownika Nvidia 190.53 na Linux 2.6.33.1</title>
		<link>http://jakilinux.org/linux/debian/instalacja-zamknietego-sterownika-nvidia-190-53-na-linux-2-6-33-1/</link>
		<comments>http://jakilinux.org/linux/debian/instalacja-zamknietego-sterownika-nvidia-190-53-na-linux-2-6-33-1/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 19:39:30 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[2.6.33]]></category>
		<category><![CDATA[2.6.33.1]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[jądro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jakilinux.org/?p=121322</guid>
		<description><![CDATA[W normalnej sytuacji, nie ma możliwości aby zainstalować najnowszy (190.53) zamknięty sterownik kart graficznych Nvidia na kernelu Linuksa 2.6.33.1. Jednak jest prosty sposób aby to obejść.]]></description>
			<content:encoded><![CDATA[<p>Z konieczności chwili, postanowiłem skompilować najnowsze stabilne jądro Linuksa 2.6.33.1. Jednak po długiej konfiguracji i kompilacji pojawił się problem w postaci braku kompatybilności obecnie najnowszego sterownika kart graficznych firmy Nvidia (190.53) z tym kernelem.<span id="more-121322"></span><!--header--></p>
<p class="img-center"><!--adsense--></p>
<style type="text/css">
.prebox{border:1px dotted #ff9900;padding:8px;margin-bottom:12px}
.prebox code{white-space:pre-wrap}
span.nowrap{white-space:nowrap !important}
span.diff_minus{color:#c00}
span.diff_plus{color:#0a0}
.artfile{color:#940 !important; font-weight:bold !important}
</style>
<blockquote><p>Unable to build the NVIDIA kernel module.</p></blockquote>
<blockquote><p>Installation has failed.  <strong>Please see the file<br />
&#8216;/var/log/nvidia-installer.log&#8217; for details.</strong>  You may find suggestions<br />
on fixing installation problems in the README available on the Linux<br />
driver download page at www.nvidia.com.</p></blockquote>
<p>Do wyboru miałem otwarty i <a href="http://pl.wikipedia.org/wiki/Free_software" class="extlink">wolny</a> <a href="http://www.x.org/wiki/Projects/Drivers" class="extlink">sterownik</a> albo samemu rozwiązać problem. Wybrałem to drugie rozwiązanie, ze względu na obsługę sprzętowej akceleracji 3D.</p>
<p><a href="#art_rozwiazanie">Gotowe rozwiązanie.</a></p>
<p>Rzut oka na jedne z ostatnich linii w pliku <span class="artfile">/var/log/nvidia-installer.log</span>:</p>
<div class="prebox"><code>...<br />/tmp/selfgz6879/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:511: error: too few arguments to function &#8216;acpi_walk_namespace&#8217;<br />...</code></div>
<p>Tłumacząc na polski:</p>
<blockquote><p>/tmp/selfgz6879/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:511: błąd: za mało argumentów dla funkcji &#8216;acpi_walk_namespace&#8217;</p></blockquote>
<p>Pasowałoby wpierw zajrzeć do tego <a href="#nvacpi_c">nvacpi.c</a>, ale niestety instalator jest samorozpakowujący i po instalacji usuwa wszystkie pliki &#8211; również po błędzie. Najlepszym wyjściem jest rozpakowanie za pomocą wbudowanego przełącznika:</p>
<div class="prebox"><code>~/nvidia # sh ./NVIDIA-Linux-x86_64-190.53-pkg2.run -h | grep extract<br />-x, --extract-only<br />~/nvidia # sh ./NVIDIA-Linux-x86_64-190.53-pkg2.run -x<br />Creating directory <span class="nowrap">NVIDIA-Linux-x86_64-190.53-pkg2</span><br />Verifying archive integrity... OK<br />Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 190.53........................................</code></div>
<p>Wszystkie pliki zostały rozpakowane do nowego katalogu <span class="nowrap">&quot;NVIDIA-Linux-x86_64-190.53-pkg2&quot;</span> w bieżącej ścieżce (~/nvidia).</p>
<p>W pliku z logu, jak na razie, interesują nas tylko linijki w których występuje problem (tam gdzie jest wywoływana funkcja &quot;acpi_walk_namespace&quot;):</p>
<p><a name="nvacpi_c" id="nvacpi_c" class="artfile">~/nvidia/NVIDIA-Linux-x86_64-190.53-pkg2/usr/src/nv/nvacpi.c:</a></p>
<div class="prebox"><code>...<br />510:     acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,<br />511:                         ACPI_UINT32_MAX, nv_acpi_find_methods, NULL, NULL);<br />...<br />1151:     acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, nv_acpi_walk_callback, acpi_name, NULL);<br />...</code></div>
<p>Grepując źródła jądra Linuksa w wersji 2.6.33.1, znajdujemy pierwszy plik w którym jest zdefiniowana ta funkcja.</p>
<p><span class="artfile">/usr/src/my_linux/linux-2.6.33.1/include/acpi/acpixf.h:</span></p>
<div class="prebox"><code>...<br />153: acpi_status<br />154: acpi_walk_namespace(acpi_object_type type,<br />155: 		    acpi_handle start_object,<br />156: 		    u32 max_depth,<br /><strong>157: 		    acpi_walk_callback pre_order_visit,<br />158: 		    acpi_walk_callback post_order_visit,</strong><br />159: 		    void *context, void **return_value);<br />....</code></div>
<p>A następnie kernel 2.6.32:</p>
<div class="prebox"><code>...<br />153: acpi_status<br />154: acpi_walk_namespace(acpi_object_type type,<br />155: 		    acpi_handle start_object,<br />156: 		    u32 max_depth,<br /><strong>157: 		    acpi_walk_callback user_function,</strong><br />158: 		    void *context, void **return_value);<br />....</code></div>
<p>Powyższe fragmenty robią wrażenie, że brakuje jednego argumentu &quot;post_order_visit&quot; oraz wcześniejszy argument &quot;user_function&quot; został zamieniony na &quot;pre_order_visit&quot;.</p>
<p>Na oko można dopisać NULL bądź &quot;nv_acpi_find_methods&quot; jako ten brakujący argument &quot;post_order_visit&quot; albo usunąć odwołania do &quot;acpi_walk_namespace&quot;, ale jest takie powiedzenie: &quot;na oko to chłop w szpitalu umarł&quot;.</p>
<p>Jednak trzeba mieć 100% pewności i szukamy dalej, gdzie jest kod tej funkcji.</p>
<p class="artfile">/usr/src/my_linux/linux-2.6.33.1/drivers/acpi/acpica/nsxfeval.c:</p>
<div class="prebox"><code>...<br />462: acpi_status<br />463: acpi_walk_namespace(acpi_object_type type,<br />464: 		    acpi_handle start_object,<br />465: 		    u32 max_depth,<br /><strong>466: 		    acpi_walk_callback pre_order_visit,<br />467: 		    acpi_walk_callback post_order_visit,</strong><br />468: 		    void *context, void **return_value)<br />469: {<br />470: 	acpi_status status;<br />471: <br />472: 	ACPI_FUNCTION_TRACE(acpi_walk_namespace);<br />473: <br />474: 	/* Parameter validation */<br />475: <br />476: 	if ((type > ACPI_TYPE_LOCAL_MAX) ||<br /><strong>477: 	    (!max_depth) || (!pre_order_visit &#038;&#038; !post_order_visit)) {<br />478: 		return_ACPI_STATUS(AE_BAD_PARAMETER);<br />479: 	}</strong><br />480: <br />481: 	/*<br />...<br />491: 	 */<br />492: 	status = acpi_ut_acquire_read_lock(&#038;acpi_gbl_namespace_rw_lock);<br />493: 	if (ACPI_FAILURE(status)) {<br />494: 		return status;<br />495: 	}<br />496: <br />497: 	/*<br />...<br />502: 	 */<br />503: 	status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);<br />504: 	if (ACPI_FAILURE(status)) {<br />505: 		goto unlock_and_exit;<br />506: 	}<br />507: <br /><strong>508: 	status = acpi_ns_walk_namespace(type, start_object, max_depth,<br />509: 					ACPI_NS_WALK_UNLOCK, pre_order_visit,<br />510: 					post_order_visit, context,<br />511: 					return_value);</strong><br />512: <br />513: (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);<br />514: <br />515:       unlock_and_exit:<br />516:	(void)acpi_ut_release_read_lock(&#038;acpi_gbl_namespace_rw_lock);<br />517: 	return_ACPI_STATUS(status);<br />518: }<br />...</code></div>
<p class="artfile">/usr/src/my_linux/linux-2.6.33.1/drivers/acpi/acpica/nswalk.c:</p>
<div class="prebox"><code>...<br />192: acpi_status<br />193: acpi_ns_walk_namespace(acpi_object_type type,<br />194: 		       acpi_handle start_node,<br />195: 		       u32 max_depth,<br />196: 		       u32 flags,<br /><strong>197: 		       acpi_walk_callback pre_order_visit,<br />198: 		       acpi_walk_callback post_order_visit,</strong><br />199: 		       void *context, void **return_value)<br />200: {<br />201: 	acpi_status status;<br />202: 	acpi_status mutex_status;<br />203: 	struct acpi_namespace_node *child_node;<br />204: 	struct acpi_namespace_node *parent_node;<br />205: 	acpi_object_type child_type;<br />206: 	u32 level;<br /><strong>207: 	u8 node_previously_visited = FALSE;</strong><br />208: <br />209: 	ACPI_FUNCTION_TRACE(ns_walk_namespace);<br />210: <br />211: 	/* Special case for the namespace Root Node */<br />212: <br />213: 	if (start_node == ACPI_ROOT_OBJECT) {<br />214: 		start_node = acpi_gbl_root_node;<br />215: 	}<br />216: <br />217: 	/* Null child means "get first node" */<br />218: <br />219: 	parent_node = start_node;<br />220: 	child_node = acpi_ns_get_next_node(parent_node, NULL);<br />221: 	child_type = ACPI_TYPE_ANY;<br />222: 	level = 1;<br />223: <br />224: 	/*<br />225: 	 * Traverse the tree of nodes until we bubble back up to where we<br />226: 	 * started. When Level is zero, the loop is done because we have<br />227: 	 * bubbled up to (and passed) the original parent handle (start_entry)<br />228: 	 */<br /><strong>229: 	while (level > 0 &#038;&#038; child_node) {</strong><br />230: 		status = AE_OK;<br />231: <br />232: 		/* Found next child, get the type if we are not searching for ANY */<br />233: <br />234: 		if (type != ACPI_TYPE_ANY) {<br />235: 			child_type = child_node->type;<br />236: 		}<br />237: <br />238: 		/*<br />239: 		 * Ignore all temporary namespace nodes (created during control<br />240: 		 * method execution) unless told otherwise. These temporary nodes<br />241: 		 * can cause a race condition because they can be deleted during<br />242: 		 * the execution of the user function (if the namespace is<br />243: 		 * unlocked before invocation of the user function.) Only the<br />244: 		 * debugger namespace dump will examine the temporary nodes.<br />245: 		 */<br />246: 		if ((child_node->flags &#038; ANOBJ_TEMPORARY) &#038;&#038;<br />247: 		    !(flags &#038; ACPI_NS_WALK_TEMP_NODES)) {<br />248: 			status = AE_CTRL_DEPTH;<br />249: 		}<br />250: <br />251:		/* Type must match requested type */<br />252:<br />253:		else if (child_type == type) {<br />254:			/*<br />255:			 * Found a matching node, invoke the user callback function.<br />256:			 * Unlock the namespace if flag is set.<br />257:			 */<br />258:			if (flags &#038; ACPI_NS_WALK_UNLOCK) {<br />259:				mutex_status =<br />260:				    acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);<br />261:					if (ACPI_FAILURE(mutex_status)) {<br />262:						return_ACPI_STATUS(mutex_status);<br />263:					}<br />264:				}<br />265:	<br />266:				/*<br />267:				 * Invoke the user function, either pre-order or post-order<br />268:				 * or both.<br />269:				 */<br /><strong>270:				if (!node_previously_visited) {<br />271:					if (pre_order_visit) {<br />272:						status =<br />273:						    pre_order_visit(child_node, level,<br />274:								    context,<br />275:								    return_value);<br />276:					}<br />277:				} else {<br />278:					if (post_order_visit) {<br />279:						status =<br />280:						    post_order_visit(child_node, level,<br />281:								     context,<br />282:								     return_value);<br />283:					}<br />284:				}</strong><br />285:	<br />286:				if (flags &#038; ACPI_NS_WALK_UNLOCK) {<br />287:					mutex_status =<br />288:					    acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);<br />289:					if (ACPI_FAILURE(mutex_status)) {<br />290:						return_ACPI_STATUS(mutex_status);<br />291:					}<br />292:				}<br />293:	<br />294:				switch (status) {<br />295:				case AE_OK:<br />296:				case AE_CTRL_DEPTH:<br />297:	<br />298:					/* Just keep going */<br />299:					break;<br />300:	<br />301:				case AE_CTRL_TERMINATE:<br />302:	<br />303:					/* Exit now, with OK status */<br />304:	<br />305:					return_ACPI_STATUS(AE_OK);<br />306:	<br />307:				default:<br />308:	<br />309:					/* All others are valid exceptions */<br />310:	<br />311:					return_ACPI_STATUS(status);<br />312:				}<br />313:			}<br />314:	<br />315:			/*<br />316:			 * Depth first search: Attempt to go down another level in the<br />317:			 * namespace if we are allowed to.  Don't go any further if we have<br />318:			 * reached the caller specified maximum depth or if the user<br />319:			 * function has specified that the maximum depth has been reached.<br />320:			 */<br /><strong>321:			if (!node_previously_visited &#038;&#038;<br />322:			    (level < max_depth) &#038;&#038; (status != AE_CTRL_DEPTH)) {<br />323:				if (child_node->child) {<br />324:	<br />325:					/* There is at least one child of this node, visit it */<br />326:	<br />327:					level++;<br />328:					parent_node = child_node;<br />329:					child_node =<br />330:					    acpi_ns_get_next_node(parent_node, NULL);<br />331:					continue;<br />332:				}<br />333:			}<br />334:	<br />335:			/* No more children, re-visit this node */<br />336:	<br />337:			if (!node_previously_visited) {<br />338:				node_previously_visited = TRUE;<br />339:				continue;<br />340:			}<br />341:	<br />342:			/* No more children, visit peers */<br />343:	<br />344:			child_node = acpi_ns_get_next_node(parent_node, child_node);<br />345:			if (child_node) {<br />346:				node_previously_visited = FALSE;<br />347:			}<br />348:	<br />349:			/* No peers, re-visit parent */<br />350:	<br />351:			else {<br />352:				/*<br />353:				 * No more children of this node (acpi_ns_get_next_node failed), go<br />354:				 * back upwards in the namespace tree to the node's parent.<br />355:				 */<br />356:				level--;<br />357:				child_node = parent_node;<br />358:				parent_node = acpi_ns_get_parent_node(parent_node);<br />359: <br />360: 			node_previously_visited = TRUE;<br />361: 		}</strong><br /><strong>362: 	}</strong><br />363: <br />364: 	/* Complete walk, not terminated by user function */<br />365: <br />366: 	return_ACPI_STATUS(AE_OK);<br />367: }<br />...</code></div>
<p>Teraz sprawdzamy różnicę w stosunku do poprzedniej wersji jądra 2.6.32:</p>
<div class="prebox"><code>...<br />189: acpi_status<br />190: acpi_ns_walk_namespace(acpi_object_type type,<br />191: 		       acpi_handle start_node,<br />192: 		       u32 max_depth,<br />193: 		       u32 flags,<br /><strong>194: 		       acpi_walk_callback user_function,</strong><br />195: 		       void *context, void **return_value)<br />196: {<br />197: 	acpi_status status;<br />198: 	acpi_status mutex_status;<br />199: 	struct acpi_namespace_node *child_node;<br />200: 	struct acpi_namespace_node *parent_node;<br />201: 	acpi_object_type child_type;<br />202: 	u32 level;<br />203: <br />204: 	ACPI_FUNCTION_TRACE(ns_walk_namespace);<br />205: <br />206: 	/* Special case for the namespace Root Node */<br />207: <br />208: 	if (start_node == ACPI_ROOT_OBJECT) {<br />209: 		start_node = acpi_gbl_root_node;<br />210: 	}<br />211: <br />212: 	/* Null child means "get first node" */<br />213: <br />214: 	parent_node = start_node;<br />215: 	child_node = NULL;<br />216: 	child_type = ACPI_TYPE_ANY;<br />217: 	level = 1;<br />218: <br />219: 	/*<br />220: 	 * Traverse the tree of nodes until we bubble back up to where we<br />221: 	 * started. When Level is zero, the loop is done because we have<br />222: 	 * bubbled up to (and passed) the original parent handle (start_entry)<br />223: 	 */<br /><strong>224: 	while (level > 0) {</strong><br />225: <br />226: 		/* Get the next node in this scope.  Null if not found */<br />227: <br />228: 		status = AE_OK;<br />229: 		child_node = acpi_ns_get_next_node(parent_node, child_node);<br />230: 		if (child_node) {<br />231: <br />232: 			/* Found next child, get the type if we are not searching for ANY */<br />233: <br />234: 			if (type != ACPI_TYPE_ANY) {<br />235: 				child_type = child_node->type;<br />236: 			}<br />237: <br />238: 			/*<br />239: 			 * Ignore all temporary namespace nodes (created during control<br />240: 			 * method execution) unless told otherwise. These temporary nodes<br />241: 			 * can cause a race condition because they can be deleted during<br />242: 			 * the execution of the user function (if the namespace is<br />243: 			 * unlocked before invocation of the user function.) Only the<br />244: 			 * debugger namespace dump will examine the temporary nodes.<br />245: 			 */<br />246: 			if ((child_node->flags &#038; ANOBJ_TEMPORARY) &#038;&#038;<br />247: 			    !(flags &#038; ACPI_NS_WALK_TEMP_NODES)) {<br />248: 				status = AE_CTRL_DEPTH;<br />249: 			}<br />250: <br />251: 			/* Type must match requested type */<br />252: <br />253: 			else if (child_type == type) {<br />254: 				/*<br />255: 				 * Found a matching node, invoke the user callback function.<br />256: 				 * Unlock the namespace if flag is set.<br />257: 				 */<br />258: 				if (flags &#038; ACPI_NS_WALK_UNLOCK) {<br />259: 					mutex_status =<br />260: 					    acpi_ut_release_mutex<br />261: 					    (ACPI_MTX_NAMESPACE);<br />262: 					if (ACPI_FAILURE(mutex_status)) {<br />263: 						return_ACPI_STATUS<br />264: 						    (mutex_status);<br />265: 					}<br />266: 				}<br />267: <br /><strong>268: 				status =<br />269: 				    user_function(child_node, level, context,<br />270: 						  return_value);</strong><br />271: <br />272: 				if (flags &#038; ACPI_NS_WALK_UNLOCK) {<br />273: 					mutex_status =<br />274: 					    acpi_ut_acquire_mutex<br />275: 					    (ACPI_MTX_NAMESPACE);<br />276: 					if (ACPI_FAILURE(mutex_status)) {<br />277: 						return_ACPI_STATUS<br />278: 						    (mutex_status);<br />279: 					}<br />280: 				}<br />281: <br />282: 				switch (status) {<br />283: 				case AE_OK:<br />284: 				case AE_CTRL_DEPTH:<br />285: <br />286: 					/* Just keep going */<br />287: 					break;<br />288: <br />289: 				case AE_CTRL_TERMINATE:<br />290: <br />291: 					/* Exit now, with OK status */<br />292: <br />293: 					return_ACPI_STATUS(AE_OK);<br />294: <br />295: 				default:<br />296: <br />297: 					/* All others are valid exceptions */<br />298: <br />299: 					return_ACPI_STATUS(status);<br />300: 				}<br /><strong>301: 			}</strong><br />302: <br />303: 			/*<br />304: 			 * Depth first search: Attempt to go down another level in the<br />305: 			 * namespace if we are allowed to.  Don't go any further if we have<br />306: 			 * reached the caller specified maximum depth or if the user<br />307: 			 * function has specified that the maximum depth has been reached.<br />308: 			 */<br />309: 			if ((level < max_depth) &#038;&#038; (status != AE_CTRL_DEPTH)) {<br />310: 				if (child_node->child) {<br />311: <br />312: 					/* There is at least one child of this node, visit it */<br />313: <br />314: 					level++;<br />315: 					parent_node = child_node;<br />316: 					child_node = NULL;<br />317: 				}<br />318: 			}<br />319: 		} else {<br />320: 			/*<br />321: 			 * No more children of this node (acpi_ns_get_next_node failed), go<br />322: 			 * back upwards in the namespace tree to the node's parent.<br />323: 			 */<br />324: 			level--;<br />325: 			child_node = parent_node;<br />326: 			parent_node = acpi_ns_get_parent_node(parent_node);<br />327: 		}<br /><strong>328: 	}</strong><br />329: <br />330: 	/* Complete walk, not terminated by user function */<br />331: <br />332: 	return_ACPI_STATUS(AE_OK);<br />333: }<br />...</code></div>
<p>Pogrubione zostały najważniejsze dla nas zmiany.</p>
<p>W obydwu wersjach jądra, definicja typu acpi_walk_callback:</p>
<div class="prebox"><code>...<br />typedef<br />acpi_status(*acpi_walk_callback) (acpi_handle obj_handle,<br />				  u32 nesting_level,<br />				  void *context, void **return_value);<br />...</code></div>
<p>Łopatologicznie można powiedzieć, że &quot;user_function&quot; został rozbity na &quot;pre_order_visit&quot; i &quot;post_order_visit&quot; &#8211; odpowiednio, funkcja z pierwszego wskaźnika (&quot;pre_order_visit&quot;) jest wywoływana jako pierwsza, a w każdym następnym przebiegu pętli while wywoływana jest ta z &quot;post_order_visit&quot;.</p>
<p>Nie wgłębiając się zbytnio w szczegóły, wniosek nasuwa się sam. W jądrze 2.6.32, &quot;user_function&quot; jest wywoływany &quot;zawsze&quot; a żeby w 2.6.33.1 działanie było <u>podobne</u>, musimy &quot;podać dwukrotnie ten sam wskaźnik &#8211; jako pre_order_visit i jako post_order_visit&quot;.</p>
<p><a name="art_rozwiazanie" id="art_rozwiazanie" style="color:inherit">Jak już powiedziałem, <strong>nie wgłębiając się zbytnio w szczegóły</strong>, modyfikujemy plik </a><a href="#nvacpi_c">nvacpi.c</a> w ten sposób:</p>
<div class="prebox"><code>...<br /><span class="diff_minus"><strong>-</strong> 510:     acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,<br /><strong>-</strong> 511:                         ACPI_UINT32_MAX, <strong>nv_acpi_find_methods</strong>, NULL, NULL);</span><br /><span class="diff_plus"><strong>+</strong> 510:     acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,<br /><strong>+</strong> 511:                         ACPI_UINT32_MAX, <strong>nv_acpi_find_methods, nv_acpi_find_methods</strong>, NULL, NULL);</span><br />...<br /><span class="diff_minus"><strong>-</strong> 1151:     acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, nv_acpi_walk_callback, acpi_name, NULL);</span><br /><span class="diff_plus"><strong>+</strong> 1151:     acpi_walk_namespace(ACPI_TYPE_ANY, handle, 1, <strong>nv_acpi_walk_callback, nv_acpi_walk_callback</strong>, acpi_name, NULL);</span><br />...</code></div>
<p>Zabijamy proces gdm (albo innego menadżera logowania) o ile jest uruchomiony i pracujemy na docelowym jądrze 2.6.33.1:</p>
<div class="prebox"><code>$ ps -C gdm<br />  PID TTY          TIME CMD<br /> 7865 ?        00:00:00 gdm<br /> 7866 ?        00:00:00 gdm<br /># kill 7865</code></div>
<p>Usuwamy moduł nvidia (jeśli jest załadowany):</p>
<div class="prebox"><code># modprobe -r nvidia</code></div>
<p>albo:</p>
<div class="prebox"><code># rmmod nvidia</code></div>
<p>Kopiujemy nagłówki kernela (jeśli nie zrobiliśmy tego wcześniej):</p>
<div class="prebox"><code><span class="nowrap"># cp /usr/src/my_linux/linux-2.6.33.1/include/generated/*</span> <span class="nowrap">/usr/src/my_linux/linux-2.6.33.1/include/linux</span></code></div>
<p>Albo lepiej linkujemy je:</p>
<div class="prebox"><code><span class="nowrap"># ln -s /usr/src/my_linux/linux-2.6.33.1/include/generated/*</span> <span class="nowrap">/usr/src/my_linux/linux-2.6.33.1/include/linux</span></code></div>
<p>Następnie ponownie instalujemy sterownik karty graficznej:</p>
<div class="prebox"><code>~/nvidia # <strong>cd <span class="nowrap">NVIDIA-Linux-x86_64-190.53-pkg2</span></strong><br /><span class="nowrap">~/nvidia/NVIDIA-Linux-x86_64-190.53-pkg2 #</span> <span class="nowrap"><strong>./nvidia-installer \</strong></span><br /><span class="nowrap"><strong>--kernel-source-path=/usr/src/my_linux/linux-2.6.33.1 \</strong></span><br /><span class="nowrap"><strong>-k 2.6.33.1</strong></span></code></div>
<blockquote><p>-&gt; Would you like to run the nvidia-xconfig utility to automatically update you<br />
   r X configuration file so that the NVIDIA X driver will be used when you res<br />
   tart X?  Any pre-existing X configuration file will be backed up. (Answer: N<br />
   o)</p></blockquote>
<blockquote><p>-&gt; Installation of the NVIDIA Accelerated Graphics Driver for Linux-x86_64<br />
   (version: 190.53) is now complete.  Please update your XF86Config or<br />
   xorg.conf file as appropriate; see the file<br />
   /usr/share/doc/NVIDIA_GLX-1.0/README.txt for details.</p></blockquote>
<p>Uruchamiamy ponownie komputer:</p>
<div class="prebox"><code># reboot</code></div>
<p>Albo uruchamiamy gdm/xdm/kdm, jeśli pracujemy na docelowym 2.6.33.1:</p>
<div class="prebox"><code># gdm</code></div>
<p>Nic nie wybuchło! Grafika działa bez najmniejszych problemów. Jeszcze test glxgears:</p>
<p><a href="http://jakilinux.org/reviews/instalacja/instalacja-zamknietego-sterownika-nvidia-190-53-na-linux-2-6-33-1/zrzutekranu.png" target="sdfsdgs_glxgears_nvidia"><img style="clear:both" alt="udany test glxgears" width="450" height="338" src="http://jakilinux.org/reviews/instalacja/instalacja-zamknietego-sterownika-nvidia-190-53-na-linux-2-6-33-1/zrzutekranu_thumb.png" /></a></p>
<p>I problem z głowy.</p>
<p>Literówki proszę zgłaszać na <span class="nowrap">(JID/mail) norbert at linux dot pl</span> albo <span class="nowrap">(mail) redakcja at jakilinux dot org.</span></p>
<p>Problemy z instalacją proszę zgłaszać w komentarzach bądź lepiej na forum.</p>
<p><em>Autor: Norbert Kiszka<br />
Skład: Norbert Kiszka</em></p>
<p>Aktualizacja:</p>
<p>Równolegle opublikowałem na <a href="http://newbie.linux.pl/?id=article&#038;kategoria=4&#038;show=600" target="_blank" class="extlink">linux.pl</a>.</p>
<p>Jeden z użytkowników w komentarzu potwierdził, że działa na 2.6.34-rc1:</p>
<blockquote><p>Od dłuższego czasu jadę na wersji BETA przez tą przypadłość.<br />
Cieszę się że jest działające rozwiązanie.<br />
Mogę potwierdzić że działa na Slackware z kernelem 2.6.34-rc1.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/linux/debian/instalacja-zamknietego-sterownika-nvidia-190-53-na-linux-2-6-33-1/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>O kłopotach z chmurami</title>
		<link>http://jakilinux.org/aplikacje/o-klopotach-z-chmurami/</link>
		<comments>http://jakilinux.org/aplikacje/o-klopotach-z-chmurami/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 18:50:10 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Aplikacje]]></category>
		<category><![CDATA[Teksty]]></category>
		<category><![CDATA[cloud-computing]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://osnews.pl/o-klopotach-z-chmurami/</guid>
		<description><![CDATA[Wśród autorów fachowych artykułów roi się od zwolenników przejścia do &#34;obróbki w chmurze&#34; (cloud-computing) &#8211; przeniesienia wszystkich danych oraz ich obróbki do ogromnych, profesjonalnie zarządzanych centrów. Ten artykuł jest tłumaczeniem tekstu: Not every cloud has silver lining autorstwa Cory Doktorowa. [...]]]></description>
			<content:encoded><![CDATA[<p>Wśród autorów fachowych artykułów roi się od zwolenników przejścia do &quot;obróbki w chmurze&quot; (<em>cloud-computing</em>) &#8211; przeniesienia wszystkich danych oraz ich obróbki do ogromnych, profesjonalnie zarządzanych centrów.<!--header--><span id="more-51431"></span></p>
<p class="img-right"><!--adsense--></p>
<style type="text/css"><!--
a.sup { text-decoration: none; margin-left: 2px; }
sup { text-decoration: underline; }
--></style>
<p><em>Ten artykuł jest tłumaczeniem tekstu: <a href="http://www.guardian.co.uk/technology/2009/sep/02/cory-doctorow-cloud-computing" class="extlink">Not every cloud has silver lining</a> autorstwa Cory Doktorowa. Tłumaczenie wykonał <strong>Włodzimierz Natorf</strong>.</em></p>
<p>Jest jednak rzecz, o której nikt głośno nie wspomina: głównym celem, jaki widzą w &quot;chmurze&quot; inwestorzy i przedsiębiorcy to wieczne i coraz to nowe opłaty pobierane od usług, które dziś można mieć za darmo albo za zryczałtowaną opłatą, bez rezygnacji z prywatności i wydawania pieniędzy, z których powstaną fortuny <em>cloud companies</em>.</p>
<p>Od chwili powstania komercyjnego, cywilnego Internetu inwestorzy marzyli o powrocie do gwarantującego wysokie zyski systemu zmonopolizowanej telekomunikacji, pochłoniętego przez skrajnie konkurencyjny rynek Sieci. Podobał im się bardzo model usług, gdzie od każdej, nawet najdrobniejszej &quot;funkcji&quot;, jak choćby &quot;prezentacja numeru&quot;, naliczany był rachunek &#8211; pamiętacie czasy<a href="#przypis_1" id="p1" class="sup"><sup>1</sup></a>, gdy trzeba było płacić za możliwość sprawdzenia, kto do nas dzwoni? Wyobraźcie sobie, że wasz dostawca internetu każe Wam płacić za możliwość zobaczenia nagłówka &quot;From:&quot; w mailach, zanim je odczytacie! W USA działalność takich dostawców jak Minitel, AOL czy MSN nasuwa skojarzenia z iPhone&#8217;m &#8211; kontrolowali oni całkowicie rynek usług w swoich sieciach, w szczególności wysokość pobieranych od usługodawców opłat za możliwość świadczenia usług użytkownikom.</p>
<p>Jednak odkąd powstała Sieć &#8211; publiczny Internet, gdzie każdy mógł stworzyć nową usługę, protokół czy aplikację, zawsze znajdował się ktoś chętny do odgryzienia kawałka dla siebie, oczywiście po cichu i nie bez zysku. Pierwsze serwisy pobierały opłaty za każdy wysłany i odebrany e-mail. Następna generacja wyparła je oferując ryczałtowe opłaty za pocztę. Krok po kroku, konkurencja zlikwidowała licznik tykający z każdym kliknięciem myszy w czasie sesji w Sieci. &quot;Cloud services&quot; mogą, przynajmniej częściowo, przywrócić poprzedni stan rzeczy. Zamiast kupować twardy dysk i płacić dodatkowo jedynie rachunki za prąd, możesz kupić miejsce na dysku i płacić za jego użytkowanie dostawcy. Podobnie, zamiast kupować szybki procesor, możesz prowadzić obliczenia zdalnie i płacić za każdy użyty cykl procesora.</p>
<p>Ma to sens dla pewnej ograniczonej liczby zastosowań. Jeśli jesteś usługodawcą, dostęp do takiej ilości przestrzeni dyskowej i hostingu otwiera wspaniałe perspektywy. Wiele firm takich jak Twitter stwierdziło, że kupowanie hurtem przestrzeni dyskowej, szybkich łącz i mocy obliczeniowej dostępnej na żądanie od firm hostingowych jest bardziej opłacalne niż inwestowanie we własną serwerownię i sprzęt. Z kolei jeśli prowadzisz obliczenia wymagające superkomputerów, dobrym rozwiązaniem może być podłączenie się do kilku klastrów administrowanych przez centra fizyki.</p>
<p>Jednak dla przeciętnego ciułacza <em>cloud computing</em> jest, delikatnie mówiąc, mało dochodowe. Dostęp poprzez sieć pozostaje wolniejszy, droższy i mniej pewny niż tradycyjny. Firmy z branży rozrywkowej, spyware, botnety, węsząca policja czy bezczelny szef, dając sobie prawo do łamania zabezpieczeń, śledzenia, czy wręcz przerywania połączeń sprawiają, że Twój dostęp do sieci staje się z dnia na dzień coraz bardziej uciążliwy.</p>
<p>Niestety, nie wygląda na to, żeby w najbliższym czasie sytuacja uległa zmianie. Wejście na rynek dysków czy komputerów nie jest tanie, nawet jeśli wykorzysta się &quot;chmurę&quot; chińskich wytwórni, jest jednak tańsze niż wejście na rynek dostawców Internetu &#8211; okablowanie każdego domu w całym państwie to poważne zadanie. Dlatego masz szczęście, jeśli na rynku dostawców konkurują ze sobą dwie czy trzy firmy, i dlatego możesz kupić trzydzieści rodzajów twardych dysków na Amazonie. Wątpię, czy dostęp poprzez sieć kiedykolwiek będzie tańszy, wydajniejszy i pewniejszy od użycia lokalnego dysku i procesora. Dziś można kupić terabajtowy dysk za 57 funtów i raczej ciężko go zapełnić, chyba, że zgrywa się regularnie programy telewizyjne.</p>
<p>Podobnie, za 348 funtów można kupić niemarkowy komputer z czterordzeniowym procesorem i wspomnianym terabajtowym dyskiem. Maszyna ta bez większego wysiłku przeliczy wszystkie arkusze, jakie kiedykolwiek stworzysz.</p>
<p>Łatwo sobie wyobrazić pewne skrajnie wyspecjalizowane środowiska współpracy, które zyskują na <em>cloud computing</em> &#8211; używaliśmy arkusza kalkulacyjnego Google tworząc listę gości na nasze wesele, oraz kalendarza Google przed spotkaniem z moimi rodzicami w Kanadzie &#8211; jeśli jednak projektuje się te aplikacje mając na względzie maksimum wygody użytkowników, a nie dochodu twórców, uzyska się przestrzeń dyskową, gdzie przechowywane będą zaszyfrowane dane, od czasu do czasu odczytywane przez szybkie komputery, dokonujące większości obliczeń lokalnie.</p>
<p>W ten sposób korzystam z przestrzeni dyskowej S3 Amazona: nie jako wolnego i niepewnego twardego dysku, ale jako miejsca na zaszyfrowane kopie ważnych plików, zapisywanych na S3 za pomocą narzędzia JungleDisk. To rozwiązanie tańsze i lepsze niż jakikolwiek własny, lokalny system kopii zapasowych. Ale nie zamierzam zarabiać na S3 w najbliższym czasie.</p>
<p><a href="#p1" id="przypis_1" style="text-decoration: none;"><sup>1</sup></a> u nas wciąż aktualne, przynajmniej u wiadomo kogo&#8230; ; )</p>
<p><em>Korekta i skład: Norbert Kiszka</em></p>
<p><em>Tekst jest objęty licencją Creative Commons Attribution NonCommercial ShareAlike</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/aplikacje/o-klopotach-z-chmurami/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Open source i wolne standardy &#8211; nowy rodzaj ekonomii przedsiębiorstwa IT</title>
		<link>http://jakilinux.org/felietony/open-source-i-wolne-standardy-nowy-rodzaj-ekonomiki-przedsiebiorstwa-it/</link>
		<comments>http://jakilinux.org/felietony/open-source-i-wolne-standardy-nowy-rodzaj-ekonomiki-przedsiebiorstwa-it/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 00:31:28 +0000</pubDate>
		<dc:creator>norbert_ramzes</dc:creator>
				<category><![CDATA[Felietony]]></category>
		<category><![CDATA[Teksty]]></category>
		<category><![CDATA[biznes]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[standardy]]></category>

		<guid isPermaLink="false">http://jakilinux.org/felietony/open-source-i-wolne-standardy-nowy-rodzaj-ekonomiki-przedsiebiorstwa-it/</guid>
		<description><![CDATA[Czy oprogramowanie open source stanowi część rozwiązania problemu, jakim jest kryzys finansowy? Ingres uważa, że tak. Ten artykuł jest tłumaczeniem tekstu: Open source and open standards: the new economics of IT z itwire.com. Tłumaczenie wykonał Maciej Meller. Jeśli polecono Ci [...]]]></description>
			<content:encoded><![CDATA[<p>Czy oprogramowanie <a href="http://pl.wikipedia.org/wiki/Otwarte_Oprogramowanie" class="extlink">open source</a> stanowi część rozwiązania problemu, jakim jest kryzys finansowy? <a href="http://www.ingres.com/" class="extlink">Ingres</a> uważa, że tak.</p>
<p><span id="more-46171"></span><!--header--></p>
<p><em>Ten artykuł jest tłumaczeniem tekstu: <a href="http://www.itwire.com/content/view/23209/1231/1/0/" class="extlink">Open source and open standards: the new economics of IT </a> z itwire.com. Tłumaczenie wykonał <strong>Maciej Meller</strong>.</em></p>
<p>Jeśli polecono Ci ograniczyć wydatki na IT, oszczędności możesz szukać właściwie w dwóch obszarach: aktualnej działalności oraz innowacji.</p>
<p>Jeśli w pierwszej kolejności firma decyduje się na redukcję personelu, nasuwają się dwie główne kwestie. Jeżeli zwolnienia zachodzą po stronie bieżącej działalności, jak przedsiębiorstwo dotrzyma warunków istniejących już umów o gwarancji jakości świadczonych usług? I czy możliwe jest zwolnienie pracowników bez utraty osób o zasadniczych zdolnościach?</p>
<p>Nawet jeżeli redukcja zatrudnienia wpłynie na innowacje, to wciąż będzie istnieć gospodarcza potrzeba, która je kreuje. W każdym razie, innowacje prawdopodobnie przyczynią się do tego, że niektóre przedsiębiorstwa wyjdą z obecnych kłopotów obronną ręką.</p>
<p>W związku z tym <a href="http://www.ingres.com/about/management/shine.php" class="extlink">Steve Shine</a>, wicedyrektor działu globalnej sprzedaży i usług w firmie Ingres, radzi przyjrzeć się dokładniej kosztom licencjonowania oprogramowania.</p>
<p>Według niego, korzystanie z <a href="http://pl.wikipedia.org/wiki/Ingres_(baza_danych)" class="extlink">bazy Ingress</a> to wydatek około 1/10 tego ile kosztuje produkt <a href="http://pl.wikipedia.org/wiki/Oracle_(baza_danych)" class="extlink">Oracle</a> w ciągu trzech lat. Co więcej, Ingres nalicza opłaty w zależności od liczby procesorów a nie ich <a href="http://en.wikipedia.org/wiki/Processor_core" class="extlink">rdzeni</a>, dlatego wspomniana proporcja może zmaleć nawet do 1/20.</p>
<p>Nawet jeśli dostawca <a href="http://pl.wikipedia.org/wiki/Zamkni%C4%99te_oprogramowanie" class="extlink">oprogramowania opatentowanego</a> oferuje początkowy upust, koszty zapewne wzrosną wraz z instalacją nowego sprzętu z procesorami wielordzeniowymi, przejęciem innej firmy lub upłynięciem okresu wstępnej <a href="http://pl.wikipedia.org/wiki/Licencja_oprogramowania" class="extlink">licencji</a> i przejściem na ceny katalogowe.</p>
<p>Sprzedawca wiedząc, że klient jest od niego zależny, znajduje się w dogodnej pozycji przetargowej i zajmie twarde stanowisko podczas bieżących negocjacji</p>
<p><em>Od redakcji:</em> <a href="http://www.fwioo.pl/fileadmin/dokumenty/publikacje/dr-tomasz-barbaszewski/locked_in.pdf" class="extlink">Uzależnienie od dostawcy (Vendor Lock-In)</a></p>
<p>Jeśli jednak firma rozpocznie zamianę wybranych aplikacji na <a href="http://pl.wikipedia.org/wiki/Wolne_Oprogramowanie" class="extlink">wolne oprogramowanie</a> oraz bazę danych w <a href="http://pl.wikipedia.org/wiki/Otwarty_standard" class="extlink">otwartym standardzie</a>, proporcje stron zaczynają się wyrównywać.</p>
<p>Jak mówi Steve Shine, konwersja oprogramowania pewnego niemieckiego banku z Sybase do Ingres zajęła mu jedynie cztery dni.</p>
<p>&quot;Wolne oprogramowanie samo nie załatwi sprawy&quot; ostrzega Shine, ponieważ wciąż istnieje ryzyko uzależnienia od dostawcy poprzez niestandardowe sprzężenia. Na przykład, jeśli serwer z własnościowym oprogramowaniem komunikuje się z bazą danych tego samego dostawcy w niestandardowy sposób, wymiana tylko jednej warstwy nie będzie łatwym zadaniem.</p>
<p>Podobna sytuacja miała miejsce w przypadku wspomnianego banku. Przekonwertowanie innej aplikacji z <a href="http://pl.wikipedia.org/wiki/MySQL" class="extlink">MySQL</a> na Ingres zajęło całe osiem tygodni, ponieważ owy program korzystał z komponentów swoistych dla MySQL.</p>
<p>Rzecz w tym, że transfer aplikacji, które już korzystają z wolnych standardów, jest szybkie i tanie. To nic innego jak kolejny przykład łatwych oszczędności będących w zasięgu ręki.</p>
<p>Jeśli firma zdoła uniezależnić około 15 procent swojego oprogramowania od głównego dostawcy, uzyska ona znaczący wpływ na przebieg negocjacji, sugeruje Shine. Dzięki temu można odwrócić niekorzystną sytuację, w jakiej znalazła się firma wskutek próby uproszczenia swojego środowiska IT poprzez związanie się z małą grupą producentów. Można spodziewać się ponownego wzrostu liczby takich przedsięwzięć w najbliższych 12 miesiącach, co czyni z nich rozsądny tok postępowania w tych trudnych czasach. Shine uważa, że 60 do 70 procent systemów jest w stanie przejść na wolne standardy i wolne oprogramowanie w ciągu 3 lat.</p>
<p>Dlaczego więc, nie każdy to czyni? &quot;Niektórzy nie odczuwają zbyt dużych trudności&quot; twierdzi Shine. Ingres zajmuje twarde stanowisko w swoich wysiłkach sprzedażowych. Jeśli komuś trzeba tłumaczyć i uzasadniać ekonomiczne i technologiczne korzyści wolnego oprogramowania, Ingres zwyczajnie przechodzi do następnego potencjalnego klienta.</p>
<p>Jednak organizacje, które wcześniej sceptycznie podchodziły do wolnego oprogramowania, otworzyły swoje drzwi. Niektóre z nich same kontaktują się z Ingres. Stan rzeczy uległ zmianom przez ostatnie sześć miesięcy.</p>
<p>Ale czy wolne oprogramowanie jest naprawdę gotowe do użycia w obszarach kluczowych dla misji przedsiębiorstwa? Steven Shine wskazuje na fakt, że zeznania podatkowe w Irlandii oraz duża część międzybankowych płatności w Szwajcarii jest przetwarzana przez wolne oprogramowanie. Oba przykłady ilustrują zadania jak najbardziej kluczowe dla misji organizacji.</p>
<p>Shine zaznacza także, że niektóre banki używają darmowej, <a href="http://en.wikipedia.org/wiki/Social_software_(computer_software)" class="extlink">społecznościowej</a> wersji Ingres w mniej ważnych systemach.</p>
<p>Organizacje takie jak <a href="http://pl.wikipedia.org/wiki/Red_Hat" class="extlink">Red Hat</a>, wyrobiły sobie renomę dostawcy wolnego oprogramowania w zakresie systemów operacyjnych oraz warstw serwerów aplikacji a teraz tego samego chce dokonać Ingres w sferze wysokiej klasy baz danych, czyli tam gdzie można najwięcej zarobić, mówi Shine.</p>
<p>Do tych czytelników iTWire (wiecie o kim mowa!), którzy są zdania, że projekty open source to tylko podróbki <acronym title="oprogramowania zamkniętego">oprogramowania własnościowego</acronym> &#8211; Ingres ma za sobą 35 lat historii. To się nazywa dojrzałe oprogramowanie.</p>
<p><em>Korekta i skład: Norbert Kiszka</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jakilinux.org/felietony/open-source-i-wolne-standardy-nowy-rodzaj-ekonomiki-przedsiebiorstwa-it/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

