% Linuxov� noviny, ��slo 11-12, srpen-z��� 1998
% (c) 1998 Pavel Jan�k ml. <Pavel.Janik@linux.cz>
% sazba: Ond�ej V�cha <Ondrej.Vacha@cstug.cz>
% p�evod do�HTML: Pavel Juran <XJURAN@cs.felk.cvut.cz>
% p�eklady: Hanu� Adler <had@pdas.cz>
% jazykov� korektor: Bohumil Chalupa <bochal@met.mff.cuni.cz>

% makro \oblom zde pou�it� je p�evzato z~knihy
% Petra Ol��ka: TeXbook naruby, str. 236-237

\input ln.sty

\hbadness=10000

\mesic{Srpen--Z��� 1998}
\cislo{08--09/98}

\hlavicka

\section{�vodem}

\autor{Pavel Jan�k ml., 1. z��� 1998}

Pr�v� je jedna hodina po p�lnoci, vyp�n�m svoji Sn�hurku a~moje
�estilet� dcerka se r�no chyst� poprv� do׹koly a~j� jsem nerv�zn�j��
ne� ona. Se�ity u� m� nachystan�, velk� kornout s~denn� d�vkou
sladkost� tak�, chyb� jenom sva�ina, kterou maminka nestihla ve�er
nachystat\ldots

Tak takhle n�jak mohl vypadat dne�n� den i~u~n�koho z~v�s. Pokud ano,
tak zapome�te na�Linuxov� noviny, zapome�te na�Linux a~v�nujte se mal�
dceru�ce. A� dceru�ku odvedete do׹koly, pohodln� se usa�te, otev�te
(l�hev beaujolais, \dots) nov� ��slo Linuxov�ch novin a~za�n�te ��st.

Tohle ��slo je v�jime�n� hned kv�li n�kolika v�cem. Prvn� z~nich jsou
dva zaj�mav� �l�nky, kter� napsaly dv� sli�n� d�vky. Druhou v�jime�nou
v�c� je to, �e toto ��slo je vlastn� dvoj��slem. V�ichni jist�
ch�pete, co n�s k~tomu vedlo. Ano, byly pr�zdniny a~doba dovolen�ch
a~i~auto�i Linuxov�ch novin pot�ebuj� n�kdy zregenerovat sv� s�ly, aby
mohli i~nad�le p�in�et zaj�mav� informace ze sv�ta opera�n�ho syst�mu
Linux.

A~co se vlastn� do�tete? Michal Choura n�m uk�e, �e SGML opravdu nen�
tak stra�n�, ve�sv�m �l�nku \ref{sgml}. Vl��a Michl n�s provede vl�kny
a~jejich pou�it�m v~�l�nku \ref{threads}.

V~�l�nku \ref{kernel} najdeme prvn� d�l dlouh�ho
�l�nku o~tom, co se zm�nilo v~j�d�e Linuxu od verze 2.0. Autorem
p�ekladu je Nathan~L.~Cutler. Martin Mare� n�m ve�sv�m �l�nku
\ref{kernelnet} p�edstav� novinky v~podpo�e s�ti ve�v�vojov�ch verz�ch
j�dra.

Michal Fadljevi� se n�m ve�sv�m seri�lu pokus� p�ibl��it, jak za��t
s~editorem Emacs \ref{emacsintro}.

V~�l�nku \ref{installfest} se v�m pomoc� n�kolika fotografi� pokus�m
p�ibl��it, jak� vlastn� byl prvn� Linux InstallFest po��dan� v~na��
republice.

Novinky na�serveru \emph{sunsite.unc.edu} najdete jako v~ka�d�m ��sle
Linuxov�ch novin v~�l�nku \ref{sunsite} a~pr��ez p��sp�vky ve�skupin�
COLA (\emph{comp.os.linux.announce}) je v~�l�nku \ref{cola}.

P�eji p��jemn� �ten� a~t��m se na�va�e p�ipom�nky na�adrese redakce
\citeurl{Adresa redakce}{mailto:noviny@linux.cz}.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Magick� dny pro Linux?}
\label{magicdays}

\autor{Pavel Jan�k ml., 1. z��� 1998}

Kdy� jsem p�ipravoval nov� ��slo Linuxov�ch novin, postupn� jsem si
tiskl dokumenty, kter� jsou zaj�mav� a~o~kter�ch bych mohl n�co
napsat. M�j p�vodn� z�m�r byl do��vodn�ku zahrnout �vahu na�t�ma:
\uv{Linux ve�sv�t� velk�ch aplikac�}, proto�e v~pr�b�hu �ervence do�lo
ke�t�em velmi zaj�mav�m ud�lostem. Ale za�n�me od za��tku.

21. �ervence vydala spole�nost Netscape Communications
Corp. \citeurl{Netscape Corp.}{http://www.netscape.com} tiskovou
zpr�vu, ve�kter� oznamuje sv� pl�ny portovat sv� programov� vybaven�
pro servery na�opera�n� syst�m Linux a~umo�nit tak poskytovatel�m
p�ipojen� provozovat servery Netscape i~na�Linuxu. Netscape Messaging
Server a~Netscape Directory Server by m�ly b�t k~dispozici v~prvn�
�tvrtin� roku 1999.

Ale 21. �ervence to je�t� nebylo v�e. Podobn� prohl�en� vydala
i~spole�nost Oracle \citeurl{Oracle
Corp.}{http://www.oracle.com}. Jejich datab�zov� server Oracle8 bude
k~dispozici je�t� na�konci tohoto roku. Budeme si dokonce moci
vyzkou�et verzi, jej�� licence bude omezena na�90 dn�. Mysl�m, �e
spole�nost Oracle ud�lala velice d�le�it� krok pro to, aby se stala
nej�sp�n�j��m producentem datab�zov�ho vybaven� pro opera�n� syst�m
Linux.

Den pot� --- tedy 22. �ervence --- si dal�� spole�nost, tentokr�te
Informix Corporation \citeurl{Informix Corp.}{http://www.informix.com}
uv�domila, �e by mohla z�stat pozadu za�Oraclem a~tak nejen ohl�sila
portov�n�, ale dokonce ji� uvolnila Informix-SE pro Linux.

Jak vid�te, n�hody se d�j� (t�m m�m samoz�ejm� na�mysli shodn� datum,
nikoli to, �e tak �sp�n� spole�nosti se zab�vaj� Linuxem) a~doufejme,
�e se objev� i~dal��. Na�Internetu koluj� zpr�vy nap�. o~tom, �e by
spole�nost IBM mohla portovat n�jak� sv� aplikace a~dokonce i~o~tom,
�e u� n�co maj� hotovo, ale nechme se p�ekvapit.

Magick� to dny, jen v�ce jich \ldots\KC


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{M�s�c v~comp.os.linux.announce}
\label{cola}

\autor{Pavel Jan�k ml., 1. z��� 1998}

V~konferenci \emph{comp.os.linux.announce} je co ��st i~o~pr�zdnin�ch,
a~tak v�m p�in��me i~nyn� v�b�r toho nejzaj�mav�j��ho.

Spole�nost Linux Central \citeurl{Linux
Central}{http://linuxcentral.com} vydala novou knihu pro program�tory
pod n�zvem Linux Programmer's Reference. Autorem je Richard
Petersen. Bli��� informace o~knize samotn� naleznete na�adrese
\citeurl{Linux Programmer's
Reference}{http://linuxcentral.com/products/book/progref/}.

Pot�ebujete konvertovat textov� dokumenty do�form�tu PDF a~nechcete
pou��vat pdf\TeX ? Potom pr�v� pro v�s je ur�en program {\tt txt2pdf},
kter� najdete na�adrese
\citeurl{txt2pdf}{http://www.geocities.com/CapeCanaveral/Hangar/4794/}.

% Obr�zek SiagOffice.png
Sv�tlo sv�ta spat�il dal�� office-like bal�k pro Linux. Jeho jm�no je
Siag Office a~je samoz�ejm� ���en pod licenc� GPL. V�ce informac�
naleznete na�adrese \citeurl{Siag
Office}{http://www.edu.stockholm.se/siag/}.

Markku Rossi (mtr@ngs.fi) ozn�mil nov� interpreter Javascriptu --- NGS
JavaScript Interpreter \citeurl{NGS JavaScript
Interpreter}{http://www.ngs.fi/js/}.

4Front Technologies (front@best.com) portovala sv�j Open Sound System
v3.9 i~na�pracovn� stanice Alpha. V�ce informac� z�sk�te na�adrese
\citeurl{Open Sound System}{http://www.opensound.com}.

Stan Shebs (shebs@cygnus.com) ozn�mil novou verzi hry Xconq
\citeurl{Xconq}{ftp://ftp.cygnus.com/pub/xconq/}.

Tigran Aivazian (tigran@einstein.london.sco.com) vytvo�il zaj�mav�
modul do�j�dra Linuxu (Time Travel), kter� umo��uje --- jak ji� n�zev
napov�d� --- cestovat v~�ase. Je vhodn� nap�. pro testov�n� odolnosti
va�ich program� proti roku 2000 apod. Najdete jej na�adrese
\citeurl{Time Travel}{http://www.aivazian.demon.co.uk/tt/tt.html}.

\Obr{SiagOffice}
Spole�nost Transvirtual Technologies, Inc. uvolnila svoji implementaci
Java VM pod n�zvem Kaffe OpenVM v�etn� kompletn�ch zdrojov�ch text�.
Dal�� informace o~tomto z�slu�n�m �inu naleznete na�adrese
\citeurl{Kaffe OpenVM}{http://www.transvirtual.com/}.

H.~J.~Lu zve�ejnil posledn� verzi knihovny {\tt libc} verze 5 ---
5.4.46. Knihovnu najdete na�adrese \citeurl{Knihovna libc
5.4.46}{ftp://sunsite.unc.edu/pub/Linux/GCC}.

% Obr�zek TimeMan.png
\Obr{TimeMan}
Arne O.~Morken (arnemo@ii.uib.no) vytvo�il program TimeMan, kter�
jist� mnoh�m z~na�ich �ten��� nahrad� jejich ADK. TimeMan naleznete na
adrese
\citeurl{TimeMan}{http://www.bgif.no/neureka/TimeMan/TimeMan.html}.

Linux Quake Howto naleznete na�adrese \citeurl{Linux Quake
Howto}{http://quake.medina.net/howto}.

% Obr�zek Executor.png
Spole�nost ARDI uve�ejnila novou verzi sv�ho emul�toru prost�ed�
Macintosh --- Executor
\citeurl{Executor}{http://www.ardi.com}. Executor umo��uje spou�t�t
bin�rky pro Macintosh --- mezi podporovan� programy pat�� nap�.:
Microsoft Word, Microsoft Excel, Adobe Illustrator.\KC

\vskip\bas
\Obr{Executor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Co nov�ho na�sunsite.unc.edu?}
\label{sunsite}

\autor{Pavel Jan�k ml., 1. z��� 1998}

\subsection{X11}

\begin{citations}
\item [X11/desktop/xnc-4.0.5.src.tar.gz] XNC desktop
\item [X11/devel/builders/mgui-2.0.1.tar.gz] rozhran� s~okny pro DOS,
 Windows, and X
\item [X11/xutils/xgreekeychanger-1.3.0.tar.gz] um� m�nit mapu
kl�vesnice pod X~Window System
\end{citations}

\subsection{apps}

\begin{citations}
\item [apps/database/postgresSQL/pe-0.96.tgz] editace formul���
PostgresSQL v~Emacsu
\item [apps/doctools/man/man-1.5e.tar.gz] prohl��e� manu�lov�ch str�nek
\item [apps/editors/X/GXedit-1.08.tar] jednoduch� editor zalo�en� na
knihovn� Gtk
\item [apps/graphics/wisio-0.5.tgz] grafick� okenn� server pro VGA
\item [apps/sound/cdrom/X/xfreecd-0.7.7.tar.gz] p�ehr�va� zvukov�ch CD
disk� s~rozhran�m Gtk
\item [apps/wp/maxwell-0.5.3-src.tar.gz] WYSIWYG textov� procesor
\end{citations}

\subsection{commercial}

\begin{citations}
\item [commercial/visualmail-3.0s.tar.gz] visu�ln� mailer
\end{citations}

\subsection{distributions}

\begin{citations}
\item [distributions/small-linux-v0.20.tar.gz] mini distribuce Linuxu
na�dvou disket�ch
\end{citations}

\subsection{games}

\begin{citations}
\item [games/strategy/phalanx-16.tar.gz] �esk� �achov� program pro Linux
\end{citations}

\subsection{kernel}

\begin{citations}
\item [kernel/getpatch-2.8.tar.gz] skript uleh�uj�c� stahov�n� patch soubor�
\end{citations}

\subsection{logos}

\begin{citations}
\item [logos/penguins/linux\_logo-2.05.tar.gz] pokud chcete m�t na�sv�
obrazovce barevn�ho tu���ka, nev�hejte
\end{citations}

\subsection{system}

\begin{citations}
\item [system/network/management/fwconfig.tar.gz] konfigurace Linuxu
jako firewallu pomoc� {\tt ipfwadm} (GUI)
\end{citations}
\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Linux Journal --- �ervenec}
\ref{lj1}

\autor{Petr B�rta, 4.~srpna 1998}

% Obr�zek LinuxJournal-1.png
\ObrLogo{LinuxJournal-1}%
V~�ervencov�m ��sle Linux Journalu se dozv�te o~tom, jak je mo�n�
Linux vyu��t v~praxi --- konkr�tn� ve�v�deck� a~in�en�rsk� pr�ci.

Autory prvn�ho z~�l�nk� v�novan�ch tomuto t�matu jsou P.~Klosowski,
N.~Maliszevskyj a~B.~Dickerson, zam�stnanci americk�ho Institutu pro
standardy a~technologie. T�matem je pou�it� Linuxu p�i sb�ru
a~zpracov�n� dat ve�v�deck�m prost�ed� (National Institute of Standards
and Technology).

F.~Rodemaker a~R.~Burn p�edstavuj� \emph{ROOT} --- syst�m pro
zpracov�n�, anal�zu a~prezentaci velk�ho mno�stv� dat, vyv�jen�
v~CERNu.

��ste�n� z~CERNu je i~dal�� �l�nek, tentokr�t v�novan� pou�it� Linuxu
p�i prom��ov�n� vlastnost� krystal� pou��van�ch
v~urychlova��ch. S~podrobnostmi seznamuj� E.~Leonardi a~G.~Organtini.

O~tom, �e nejenom na�sou�i, ale i~p�i n�mo�n�ch v�zkumech se uplat�uje
Linux, n�s informuj� C.~Donlon a~J.~Crawshaw. Konkr�tn�m p��kladem je
britsk� v�zkumn� lo� \emph{James Clark Ross}.

R.~Sevenich a~R.~Prize p�in�� �l�nek o~vyu�it� \uv{fuzzy}
logiky. Jejich program na�odhad lavinov�ho nebezpe�� vyu��v� pr�v�
tento algoritmus, byl naps�n v~Jav� a~na�Debian/GNU Linuxu.

GPS (\emph{Global Positioning System}) byl vyvinut hlavn� pro vojensk�
��ely. �e se ale d� pou��t i~jinak, n�s p�esv�d�� R.~Parry ve�sv�m
�l�nku o~APRS (\emph{Automatic Position Reporting System}).

V~rubrice \uv{Kernel Korner} vysv�tluje A.~Rubini, jak napsat a~pou��t
sv�j vlastn� \uv{misc} driver do�j�dra.

Zn�te \emph{Icon}? Pokud ne, p�e�t�te si �l�nek C.~Jefferyho
a~S.~Mohameda, kte�� p�in�ej� stru�n� �vod k~tomuto jazyku.

Bezpe�nosti se v�nuje B.~Giles, v~tomto �l�nku vysv�tluje, jak se
postarat o~za�ifrov�n� ne jednotliv�ch soubor�, ale cel�ho
filesyst�mu.

Dal�� z~programovac�ch jazyk�, kter� je v~tomto ��sle Linux Journalu
p�edstaven, je Graphical Desktop Korn Shell (DtKsh), sou��st Common
Desktop Enviroment (CDE). P�edstavuje ho G.~Kraft.

Sezn�mit se s~bal�kem \emph{Samba} m��ete (tedy ti, kte�� ho je�t�
neznaj�) prost�ednictv�m �l�nku J.~Blaira.

V~rubrice \uv{Take command} uv�d� D.~A.~Provins p��klad pou�it� dvou
m�n� zn�m�ch p��kaz� --- {\tt lex} a~{\tt yacc}.

Pohled na�t�et� programovac� jazyk v~tomto ��sle --- \emph{Yorick} ---
p�in�� C.~O'Brien v~�l�nku p�evzat�m z~Linux Gazette.

R.~M.~Lerner se v~dal�� pravideln� rubrice \uv{At the Forge} v�nuje
kombinaci Apache a~PERLu --- modulu {\tt mod\_perl} a~jeho pou�it�.

Samoz�ejm� i~v~tomto vyd�n� Linux Journalu najdete je�t� n�kolik
dal��ch �l�nk�, spoustu reklam, n�jak� ty recenze a~informace o~nov�ch
produktech.

Na�z�v�r bych se r�d omluvil za�p�eklep v~t�to rubrice v~minul�m ��sle
Linuxov�ch novin --- t�kala se �ervnov�ho ��sla Linux Journalu,
a~nikoliv �ervencov�ho, jak bylo nespr�vn� uvedeno.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Linux Journal --- srpen}
\ref{lj2}

\autor{Petr B�rta, 9.~z��� 1998}

% Obr�zek LinuxJournal-2.png
\ObrLogo{LinuxJournal-2}%
Srpnov� ��slo Linux Journalu podle m�ho n�zoru nem� jedno hlavn� t�ma.
Ostatn� m�te mo�nost posoudit sami.

Prvn�, velmi rozs�hl� �l�nek, resp. rozhovor, je v�nov�n firm�
Netscape, jej� strategii p�ihl�en� se k~filosofii Open Source,
a~problematice Open Source obecn�. Doc Searls, Mark Andreessen a~Tom
Paquin diskutuj� o~sm�rech rozvoje software pr�myslu, d�vodech, kter�
vedly k~rozvoji Open Source filosofie, o~d�vodech a~d�sledc�ch
uvoln�n� zdrojov�ho k�du Netscape prohl��e�e a~uplat�ov�n� Darwinov�ch
metod p�irozen�ho v�b�ru v~produkci program�.

�l�nkem Normana M.~Jacobowitze za��n� nov� seri�l, ve�kter�m autor
popisuje sv� osobn� zku�enosti s~p�echodem k~Linuxu. V~tomto d�lu se
v�nuje rozd�l�m v~instalaci, rychlosti u�en�, cen�, stabilit�
a~n�kladech na�provoz mezi Linuxem (pou�it� distribuce Red~Hat~5.0)
a~Windows NT~4.0.

Pokud nev�te, kterou distribuci si vybrat pro sv�j po��ta�, zkuste si
p�e��st porovn�n� P.~Hughese. Autor srovn�v� jednotliv� distribuce, se
kter�mi se setkal, krom� toho je k~�l�nku p�ipojena zaj�mav�
srovn�vac� tabulka.

Hlavn� za��te�n�k�m, tou��c�m po v�t��m mno�stv� dokumentace, je ur�en
�l�nek M.~Stutze, shrnuj�c� jednotliv� metody, jak se v~p��pad�
probl�m� dobrat n�pov�dy a~�e�en�.

Nev�te, jak nastavit sv�j server jako z�lo�n� po�tovn� po��ta� pro
p��pad v�padku hlavn�ho po�tovn�ho po��ta�e ve�va�� firm�? Pak si
nenechte uj�t �l�nek J.~Blaira pr�v� na�toto t�ma.

M.~Telgarsky popisuje standardn� rozd�len� adres��� v~Linuxu v~�l�nku
v�novan�m op�t hlavn� za��te�n�k�m.

Informace o~projektu \emph{MUSCLE}, jeho� auto�i se sna�� o~integraci
tzv. \uv{smart cards} do�Linuxu, se dozv�te z~�l�nku D.~Corcorana.

Zaj�mav� �l�nek o~tom, co je \emph{XSuSE}, pro� vznikl a~jak souvis�
s~XFree86, napsal viceprezident projektu XFree86, D.~H.~Hohndel.

D.~Haraburda seznamuje s~novou distribuc� --- \emph{Linux Stampede}.

Zaj�m� v�s problematika s��ov�ch cluster� a~rychl� v�m�ny dat mezi
jednotliv�mi �leny t�chto cluster�? Potom je �l�nek B.~Ellistona
o~zapouzd�en� IP do�protokolu SCSI ur�en pr�v� pro v�s.

Vytv��en� graf� pro WWW str�nky v~re�ln�m �ase na�vy��d�n� se v�nuje
M.~Pruett.

Pro zobrazen� v�stupu z~datab�z� na�WWW serverech m��ete pou��t mimo
jin� i~modul pro server Apache --- \emph{mod\_perl}. Ve�voln�m
pokra�ov�n� �l�nku z~minul�ho ��sla Linux Journalu se R.~Lerner v�nuje
modulu DBI, DBD a~Apache::DBI.

A~op�t, jako v�dy, je v~Linux Journalu spousta inzer�t�, recenz�,
report�� a~informac� o~nov�ch produktech. Zaujala mne recenze
na�knihu \emph{The No B.S. Guide to Linux} B.~Rankina nebo �l�nek
o~vyu�it� Linuxu a~OCR p�i b�n� pr�ci americk� po�ty (t� �ne��
\smile).\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Linux 2.1 a~s�t�}
\label{kernelnet}

\autor{Martin Mare�, 10. z��� 1998}

\subsection{�vod}

Ji� p�ibli�n� dva roky prob�h� pr�ce na�v�vojov� �ad� linuxov�ch
kernel�~2.1 a~v~sou�asn� dob� sm��uje k~vyvrcholen� v~podob�
stabiln�ho release~2.2. Za�tuto dlouhou dobu se zm�nily spousty v�c�
v~prakticky v�ech koutech j�dra, nevyj�maje ani s��ov� subsyst�my, ba
naopak zna�n� procento zm�n bylo pr�v� v~nich.

Tento �l�nek se sna�� formou alespo� trochu p�ehlednou �ten��i
osv�tliti, co nov�ho p�in�� Linux 2.1 (respektive co p�inese Linux
2.2) ohledn� s�t� ve�srovn�n� s~p�edchoz� stabiln� verz� 2.0.  P�vodn�
byl tento text p�ednesen v~kv�tnu 1998 jako refer�t v~r�mci Linuxov�ho
semin��e MFF UK \citeurl{Linuxov� semin�� MFF
UK}{http://sunsite.mff.cuni.cz/linux/seminar/Linux.shtml}. Zde se
autor sna�� o~pon�kud systemati�t�j�� a~�pln�j�� pod�n� t�ho� t�matu.

P�i rozsahu s��ov� podpory v~Linuxu a~zejm�na pak p�i rozsahu
diskutovan�ch novinek jsou pouze dv� mo�nosti, jak tento �l�nek m��e
dopadnout: bu�to bude ne�pln� (prost� se o~m�n� d�le�it�ch �i m�n�
zaj�mav�ch v�cech nebude zmi�ovat) a~nebo bude s�hodlouh�, nudn�
a~v�t�ina �ten��� jej p�ed polovinou odlo�� jako vy�erp�vaj�c�, a~to
nejen t�ma. Pokusil jsem se vybrat si variantu prvn� jako�to men��
z~obou zel.

\subsection{TCP/IP}

V~oblasti TCP/IP se toho zm�nilo snad nejv�ce. Prakticky cel� k�d
obhospoda�uj�c� tuto sadu protokol� se do�kal p�eps�n� od z�kladu
(n�kdy i~n�kolikan�sobn�ho), obvykle z�sluhou nejv�t��ho ze s��ov�ch
m�g� Alexeje Kuzn�cova.

Jeliko� klasick� UNIXov� (z~BSD UNIXu poch�zej�c�) p��kazy ji� dlouhou
dobu neposta�uj� (nejen implementa�n�, ale zejm�na svou \uv{dinosau��}
koncepc� neberouc� p��li� na�v�dom� d�vno ji� b�n� v�ci jako je
nap�. \emph{classless routing} ke�konfiguraci v�ech parametr�
linuxov�ho TCP/IP, vznikla nov� utilita kr�tk�ho a~v�sti�n�ho jm�na
{\tt ip} \citeurl{IP routing
commands}{http://ftp.gts.cz/FTP/pub/MIRRORS/ftp.inr.ac.ru/ip-routing/}
syntax� v~mnoha ohledech podobn� p��kaz�m router� firmy Cisco
\citeurl{Cisco}{http://www.cisco.com} a~pro pou��v�n� velice
�ikovn�. Le� bohu�el zat�m bez jedin�ho ��dku dokumentace, nepo��taje
v~to zabudovan� help popisuj�c� syntaxi p��kaz�.

T��dy adres (v~dne�n�m sv�t� maj�c� v�znam �ist� historick�) ji�
nejsou v~kernelu podporov�ny, p�i zakl�d�n� routy �i konfiguraci
interfacu je ji� {\bf nutno} zadat vedle adresy tak� netmask �i d�lku
prefixu.

�etn� parametry protokol� je nyn� mo�no nastavovat p�es {\tt sysctl},
p��padn� pomoc� interfacu v~{\tt /proc/sys/net} p��mo ze shellu. Viz
dokumentace od utility {\tt ip} \smile

\subsubsection{Socket Hashing}

P�ed del�� dobou se k~u��m Davida Millera doneslo, �e FreeBSD m�
n�kolikan�sobn� rychlej�� p�i�azov�n� p��choz�ch packet� ke�spojen�m
ne� m�l tehdej�� Linux. Po cca t�dnu pr�ce vznikl nov� k�d pro socket
hashing, kter� tyto v�ci �e�� n�kolikan�sobn� rychleji ne� FreeBSD.

\subsubsection{IP Aliasing}

Zcela se zm�nila podpora alias� za��zen� (p�vodn� {\tt eth0:1}
apod.). Dnes ji� p�vodn� aliasy neexistuj�, le� ka�d� s��ov� karta
m��e m�t mimo prim�rn� IP adresy je�t� libovoln� mnoho adres
sekund�rn�ch. P�vodn� interface s~dvojte�kami ve�jm�nech za��zen� byl
zachov�n pro kompatibilitu, nicm�n� v~detailech se m�rn� li��.

\subsubsection{IP Routing}

Linux ji� nem� jedinou routovac� tabulku, ba naopak tabulek m��e
existovat v�ce a~za�pomoci konfigurovateln�ch pravidel je mo�no
vyb�rat pro ka�d� p��choz� packet, podle kter� tabulky bude routov�n,
a~to na�z�klad� zdrojov� a~c�lov� adresy a~dal��ch parametr�, jako je
nap��klad TOS (\emph{Type Of Service}) a~interface, ze kter�ho packet
p�i�el. Tento mechanismus umo��uje velice p�kn�m zp�sobem
implementovat jak \emph{policy based routing}, tak \emph{routing by
TOS} i~spoustu jin�ch trik�.

Rovn� p�i p�i�azen� IP adresy interfacu automaticky vznikaj� device
routy a~p�i odkonfigurov�n� samy miz�. Toto se p�ipravovalo ji� pro
kernel 2.0, nicm�n� kv�li probl�m�m s~kompatibilitou to bylo odlo�eno
o~release pozd�ji.

K~dispozici je \emph{Equal Cost Multipath}, to jest distribuce packet�
mezi n�kolik ekvivalentn�ch polo�ek v~routovac� tabulce.

\subsubsection{TCP}

TCP bylo rovn� prakticky od z�kladu p�eps�no, z~v�t�iny z�sluhou
Davida Millera. Nyn� m� o~dost lep�� logiku timeout� a~retransmit�
a~zejm�na podporuje n�kolik nov� standardizovan�ch roz���en�:

\begin{itemize}
\item SACK (\emph{Selective Acknowledge}) --- v�hodn� pro linky maj�c�
    vysokou chybovost.
\item \emph{Window Scaling} --- u�ite�n� na�spoj�ch, kter� jsou rychl�,
    ale p�itom maj� zna�n� zpo�d�n� (typicky nap��klad satelitn�
    kan�ly).
\item \emph{Timestamps} --- napom�haj� l�pe poznat charakter spoje
    a~d�ky tomu t� zvolit lep�� strategii timeout�.
\end{itemize}

\subsubsection{Firewalling}

Stejn� jako verze 2.0, i~2.1 p�in�� zcela p�epracovan� syst�m
firewallingu.  Do�kernelu byla kone�n� za�azena podpora \emph{IP Firewalling
Chains}
\citeurl{IP Firewalling Chains}{http://www.adelaide.net.au/~rustcorp/ipfwchains/}
umo��uj�c� �et�zen� filtr� (co� je jednak rychlej��, jednak snaz�� na
�dr�bu). Tato zm�na op�t nen� zp�tn� kompatibiln�, firewall je nyn�
nutno konfigurovat nov�m programem {\tt ipfwchains}. Podrobnosti viz
�l�nek v~��sle 3/1998 Linuxov�ch novin.

\subsubsection{Masquerading}

P�ibyla podpora pro p�eklad adres v~dal��ch protokolech, rovn� pak
mo�nost o�et�ovat p�eklad protokol� prost�ednictv�m d�mona b��c�ho
mimo kernel (viz bal�k {\tt ipautofw}
\citeurl{\tt ipautofw}{ftp://ftp.netis.com/pub/members/rlynch/}).

\emph{Masquerading} se nyn� konfiguruje pomoc� programu {\tt ipmasqadm}
\citeurl{\tt ipmasqadm}{http://juanjox.home.ml.org/}.

K~dispozici je t� \emph{Port Forwarding}
\citeurl{Port Forwarding}{http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html}
umo��uj�c� p�esm�rov�vat vybran� TCP spojen� na�zadan� stroj a~zadan�
port (u�ite�n� nap��klad tehdy, chcete-li m�t WWW server za�firewallem
na�po��ta�i s~intern� adresou a~forwardovat v�echna spojen� s~portem
80 firewallu na�tento po��ta�). Konfiguruje se programem {\tt
ipportfw} \citeurl{\tt
ipportfw}{ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/}.

\subsubsection{Network Address Translation (NAT)}

V~souvislosti s~nov�m routovac�m k�dem je podporov�no p�ekl�d�n� IP
adres, prozat�m pouze p��pady s~navz�jem jednozna�n�m
p�i�azen�m. (Tedy m��ete si kup��kladu nechat p�ekl�dat ��st adres
intern� s�t� na�ve�ejn� dostupn� adresy bez rekonfigurace intern�ch
po��ta��.)

Pl�nuje se sjednocen� tohoto mechanismu s~masqueradingem, co� p�inese
mo�nost jak statick�ho, tak dynamick�ho p�ekladu libovoln�ho po�tu
adres na�libovoln� jin� po�et.

\subsubsection{Tunneling}

Linux se t� nau�il l�pe tunelovat (packety, nikoliv banky --- zd� se,
�e studiem kvantov� ekonomie se linuxov� hacke�i dosud nezab�vaj�).
K~dispozici je jak klasick� protokol \emph{IP in IP} (nyn� ov�em v�razn�
l�pe implementovan�), tak GRE (\emph{Generic Routing Encapsulation},
umo��uje tunelov�n� r�zn�ch protokol�, \emph{multicasting}, \emph{soft
state management} apod.)  a~SIT (\emph{Simple Internet Transition},
p�enos IPv6 p�es IPv4).

\subsubsection{Fast Switching}

Tato zna�n� experiment�ln� feature umo��uje p��m� p�enos packet� mezi
buffery jednotliv�ch s��ov�ch karet bez \uv{p�estupu} v~hlavn� pam�ti,
co� znateln� urychluje routing. Autor (ji� zmi�ovan� Alexej Kuzn�cov)
tvrd�, �e pak jeho vesm�s norm�ln� PC m� jen o~30\% men�� propustnost
p�i forwardov�n� ne� routery Cisco �ady 7200. Bohu�el zat�m je tato
vymo�enost dostupn� pouze se s��ov�mi kartami vybaven�mi chipsetem
Digital 21140 (DECChip Tulip) �i 8390 (nutn� speci�ln� podpora v~driveru).

\subsubsection{IP Autoconfiguration}

Automatick� konfigurace IP prost�ednictv�m protokol� BOOTP �i RARP ji�
nen� spojena s~NFS-rootem a~lze ji pou��vat i~samostatn�.

\subsubsection{Netlink}

\emph{Netlink} je nov� mechanismus pro komunikaci mezi u�ivatelsk�mi programy
(nej�ast�ji routovac�mi d�mony) a~s��ovou vrstvou. Umo��uje mimo jin�:

\begin{itemize}
\item P�enos zm�n v~routovac� tabulce, tak�e ji� nen� nutn� periodicky
 scanovat celou (mo�no i~n�kolikamegabytovou) tabulku.
\item Dozv�dat se o~ud�lostech typu interface up, interface down apod.
\item P�enos packet�, kter� nepro�ly firewallem (nap�. pro detailn� anal�zu
    �tok�).
\end{itemize}

\subsubsection{IP version 6}

Linux~2.1 podporuje nov� protokol IPv6
\citeurl{Str�nka o~IPv6}{http://playground.sun.com/pub/ipng/html/ipng-main.html},
kter� by m�l b�hem p�r let zvolna za��t nahrazovat p�vodn� IPv4
a~zbavit tak sv�t probl�m� spojen�ch s~r�stem Internetu.

IPv6 v~kernelu funguje bez v�t��ch probl�m� (i~kdy� tento protokol
samoz�ejm� dosud nen� tak vylad�n� jako IPv4 a~je v~neust�l�m v�voji),
ov�em na�slu�nou podporu v~aplikac�ch si budeme muset je�t� n�jakou
dobu po�kat.

Viz t� Linux IPv6 FAQ/HOWTO.
\citeurl{Linux IPv6 FAQ/HOWTO}{http://www.linuxhq.com/IPv6/index.html}

\subsubsection{Berkeley Packet Filter (BPF)}

P�eci jen jsme se v~n��em inspirovali syst�mem BSD: \emph{Generic
Packet Filtering}. Tato feature umo��uje u�ivatelsk�m program�m
pos�lat kernelu packetov� filtry v~jednoduch�m byte-k�du a~tak si
vyb�rat, kter� packety je zaj�maj� a~kter� ne. Nezb�v� ne� doufat, �e
se {\tt tcpdump} a~podobn� programy tuto vymo�enost brzy nau��
pou��vat, a~nebudou tak ztr�cet drahocenn� �as procesoru p�en�en�m
packet�, kter� samy po trivi�ln� anal�ze zahod�.

\subsubsection{Drivery}

P�ibyla spousta nov�ch driver� s��ov�ch karet a~je�t� v�t�� mno�stv�
jich bylo aktualizov�no. Viz str�nka o~driverech
\citeurl{Str�nka Donalda Beckera o~s��ov�ch
ovlada��ch}{http://cesdis.gsfc.nasa.gov/linux/drivers/} od Donalda
Beckera.

T� se za��naj� objevovat drivery na�n�kter� synchronn� s�riov� karty,
zejm�na pak z�sluhou Alana Coxe.

\subsubsection{Soundmodem}

P��znivci packet radia nyn� mohou pou��vat softwarov� packet modemy
vyu��vaj�c� zvukovou kartu jako A/D a~D/A~p�evodn�k. Za�tuto mo�nost
Linux vd��� Thomasi Sailerovi.  Zdrojov� texty soundmodem� jsou velice
zaj�mav�m �ten�m\ldots

Na�druhou stranu Linux dosud nepodporuje (a~po del�� diskusi na
mailing-listu kernelov�ch v�voj��� to vypad�, �e ani podporovat
nebude) tak �e�en� WinModemy, co� jsou \uv{vylevn�n�} ��ste�n�
softwarov� modemy pro b�n� telefonn� linky.  Hlavn�m d�vodem je
notorick� neochota firem tyto modemy vyr�b�j�c� k~jak�koliv
spolupr�ci.

\subsubsection{Syscall sendfile}

P�ibyla nov� syst�mov� slu�ba umo��uj�c� kop�rov�n� dat mezi souborem
a~libovoln�m file-handlem. Nejedn� se sice o~�ist� s��ovou z�le�itost,
nicm�n� pr�v� u~s��ov�ch aplikac� to m��e b�t velice u�ite�n�
(nap�. FTP server pos�laj�c� data p��mo ze souboru do�socketu bez
kop�rov�n� p�es adresn� prostor FTP daemona).

\subsection{S��ov� filesyst�my}

\subsubsection{NFS}

Implementace NFS (\emph{Network File System} firmy SUN) doznala
zna�n�ch zm�n.  Nyn� m� podstatn� lep�� cacheov�n� a~t� by m�l b�t
schopen fungovat p�es TCP.

Na�druhou stranu, NFS je sice podporov�no v~UNIXov�m sv�t� prakticky
ka�d�m syst�mem, le� je to neoby�ejn� mizern� navr�en� protokol, kter�
ji� dlouh� l�ta �ek� na�n�koho, kdo bude m�t dost odvahy na�to, aby
jej nahradil n���m lep��m. M�te-li o~pr�ci na�podobn�m projektu z�jem,
nev�hejte a~ozv�te se autorovi tohoto �l�nku \citeurl{The Project
List}{http://atrey.karlin.mff.cuni.cz/~mj/plist.html}.

\subsubsection{Kernel NFS Server (knfsd)}

Olaf Kirch vytvo�il NFS server b��c� v~kernelu. Na�prvn� pohled by se
mohlo zd�t, �e to je kr�sn� p��klad n��eho, co se m� �e�it jako
user-level daemon, ale bohu�el, Olafovo �e�en� je podstatn� rychlej��
(u�et�� se kop�rov�n� v�ech dat mezi kernelem a~adresn�m prostorem
p��slu�n�ho d�mona). Na�druhou stranu, mo�n� by st�lo za�zamy�len�,
jestli by se podobn� rychlosti nedalo dos�hnout �ikovn�m pou�it�m
(a~p��padn� roz���en�m) mechanismu {\tt sendfile}.

\subsubsection{CODA}

Linux nyn� m� i~implementaci distribuovan�ho filesyst�mu CODA.  Bli���
informace viz str�nky projektu CODA \citeurl{CODA Distributed
Filesystem}{http://www.coda.cs.cmu.edu/}.

\subsubsection{Automounter (autofs)}

Kone�n� d�stojn� n�hrada za�star�ho auto-mount daemona ({\tt amd}), to
jest n�co, co umo��uje \emph{spolehliv�} automaticky mountovat disky
p�i prvn�m pokusu o~p��stup do�dan�ho adres��e.

\subsubsection{Sv�t Novellu}

Stran podpory s�t� sv�ta novellsk�ho m�me pouze dv� novinky: jednou je
podpora protokolu SPX (\emph{Sequence Packet Exchange}) a~druhou pak v�emo�n�
vylep�en� NCPFS.

Pom�rn� podrobn� pov�d�n� o~t�chto v�cech je v~kv�tnov�ch Linuxov�ch
novin�ch.

\subsubsection{Packet Socket}

P�vodn� metoda p��m�ho p��stupu k~packet�m (op�t podivn� d�dictv�
z~archaick�ch UNIX�) byla nahrazena metodou rozumnou a~konsistentn�,
konkr�tn� zaveden�m nov�ho protokolu {\tt PF_PACKET}, kter� umo��uje
p��mo vys�lat i~p�ij�mat jak kompletn� link-level packety, tak packety
zbaven� linkov�ch hlavi�ek.

D�sledky: {\tt tcpdump} ji� nemus� podporovat v�echny existuj�c� linkov�
vrstvy --- kdy� link layer nepozn�, prost� si nech� packety pos�lat
\uv{rozbalen�} a~obsahu porozum�. Kone�n� je mo�n� �ist� implementovat
servery, jako� i~klienty pro BOOTP a~DHCP a~neuchylovat se kv�li tomu
k~podivn�m trik�m typu p�i�azov�n� nulov� IP adresy interfacu, co�
stejn� s~kernelem 2.1 nefunguje.

\subsubsection{Packet Scheduling}

V�znamn�m p��nosem je zaveden� nastaviteln�ch a~vym�niteln�ch packet
queue manager� pro jednotliv� s��ov� za��zen�. Pro ka�d� interface si
nyn� m��ete vybrat, jak p�esn� bude spravov�na jeho odchoz� fronta
a~jak se budou �e�it p��pady, kdy m�sto na�packety bude doch�zet. Tento
mechanismus �e�� hned n�kolik probl�m� najednou:

\begin{itemize}
\item QoS (\emph{Quality of Service}) --- spojen� o~zaru�en�
propustnosti, prioritn� toky, spolupr�ce s~protokolem RSVP a~jin� vymo�enosti.

\item \emph{Load Balancing} --- distribuce z�t�e mezi n�kolik
interfac� vedouc�ch stejn�m sm�rem, n�hrada za�p�vodn� \emph{equalizer
device} a~rozumn� alternativa k~\emph{Equal-Cost Multipath}. �e�� se
velice jednodu�e: interfac�m, mezi n� chceme rozd�lovat tok dat,
nastav�me speci�ln� queue m�d a~vytvo��me virtu�ln� interface, kter�
bude fungovat jako zdroj dat pro tuto frontu.
\item TOS --- priorita packet� je automaticky zvolena na�z�klad�
jejich \emph{Type Of Service}.
\end{itemize}

K~tomuto v�emu je je�t� nutn� p�idat algoritmus, kter� packet�m
p�id�luje jejich priority. M��ete si vybrat z~n�sleduj�c�ch mo�nost�:

\begin{itemize}
\item klasifikace dle routovac�ch pravidel --- ka�d� z~pravidel pro
v�b�r routovac� tabulky m��e rovn� volit prioritu.
\item klasifikace dle firewallu --- firewallov� tabulky mohou rovn�
p�id�lovat prioritu packet�.
\item RSVP --- klasifikace dle �daj� zas�lan�ch RSVP daemonem.

\item U32 --- p��m� matchov�n� dat v~hlavi�k�ch packet�. Univers�ln�,
    ale pomalej�� ne� ostatn� mo�nosti.
\end{itemize}

V�e se konfiguruje novou utilitou {\tt tc}, dokumentace jako obvykle
zat�m ��dn�.

\subsubsection{Acorn Econet}

Podporov�n jest i~Econet, podivn� to propriet�rn� s�� navr�en�
a~pou��van� firmou Acorn, a~to jak po p�vodn�ch kart�ch od Acornu, tak
po jin�ch s�t�ch (\emph{d�rkov� balen�} v~UDP).

\subsubsection{WAN Router}

Linux 2.1 rovn� obsahuje kostru k�du pro WAN routing --- na�ni se
mohou \uv{p�iv�ovat} modul�rn� drivery pro Frame Relay a~jin� WAN
protokoly.

Viz str�nka o~X.25 a~Frame-Relay s��ov�n� \citeurl{X.25 a~Frame-Relay
s��ov�n�
s~Linuxem}{http://users.skynet.be/kribonne/linux-x.25/index_old.html}.

\subsubsection{X25 a~LAPB}

Ti ne��astn�ci, kte�i pot�ebuj� pou��vat s��� zalo�en� na�protokolu
X25 (opravdu je lituji, n�co tak mizern� navr�en�ho jsem snad v~�ivot�
nevid�l
\ldots\ mo�n� s~v�jimkou NFS \smile), naleznou jistou podporu tohoto
archaismu, ��taje v~to i~LAPB (ni��� vrstva ur�en� pro spolehliv� p�enos
datagram� \uv{na dost�el}).

\subsubsection{Network Block Device}

Pavel Machek stvo�il driver, kter� po TCP spojen� emuluje blokov�
za��zen� (zat�m bez {\tt ioctl} a~podobn�ch fines, nicm�n� vcelku
pou�iteln�). Viz dom�c� str�nka projektu NBD \citeurl{Projekt
NBD}{http://atrey.karlin.mff.cuni.cz/~pavel/nbd/nbd.html}.

Z~odd�len� �patn�ch zpr�v: Ani NBD nepom��e k~bezbolestn�mu (�t�te:
nepadaj�c�mu) swapov�n� po s�ti. K~tomu jsou nutn� netrivi�ln� zm�ny
v~memory-managementu a~ty se rozhodn� hned tak nepoda�� prosadit\ldots

\subsubsection{Pohled do�budoucnosti}

�asu na�v�voj bylo bohu�el k~dispozici pouze kone�n� mno�stv�, tak�e
zdaleka ne v�echno, co si kdo p��l, bylo dokon�eno. Na�verzi 2.3 bylo
nap��klad odlo�eno:

\begin{itemize}
\item P�enos IP p�es SCSI (nen� od v�ci m�t dva po��ta�e spojeny
linkou rychlosti 80 MByte/s).
\item P�enos IP po Fibre-Channelu (dokonce 1 Gbit/s).
\item PLIP vyu��vaj�c� rychl� obousm�rn� paraleln� porty.
\item P�ed�l�n� bridgingu (cel� bridge group by se ke�zbytku j�dra m�l
    chovat jako jedin� interface).
\item P��m� p�enos packet� p�es DMA z~u�ivatelsk�ho prostoru do
s��ov�ch karet �i zp�t.
\item Integrace podpory ATM a~HIPPI.
\end{itemize}

\subsection{Z�v�rem}

Tento v��et \uv{s��ov�ch novinek} ukazuje, �e j�dra 2.1 toho stran
s��ov�n� opravdu mohou nab�dnout mnoho nov�ho. Za�zm�nku ov�em stoj�,
�e ani kernel�m 2.0 se vylep�ov�n� nevyhnulo --- i~tam byly postupn�
(po d�kladn�m prozkou�en� ve~2.1) n�kter� v�ci z~2.1 p�eneseny:
nap��klad \emph{autofs} �i \emph{socket hashing}.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{B�je�n� sv�t j�dra v. 2.2}
\label{kernel}

\autor{p�elo�il Nathan L.~Cutler, 14. srpna 1998}

Jak v�m zajist� �ekne jak�koliv v�voj�� j�dra, bl��� se zve�ejn�n�
Linuxu~2.2.

Zat�mco Linux~2.1 se pomalu, ale jist� zdokonaluje (p�i�em� ��sla
verz� stoupaj� do�z�vratn�ch v��ek --- v~dob�, kdy p��i tento text, u�
je verze 2.1.115), v�ichni netrp�liv� o�ek�vaj� den, kdy verze 2.2.0
bude standardn�m kernelem jednotliv�ch distribuc�. Verze 2.2
linuxov�ho j�dra je d�le�it�m miln�kem a~je dobr� v�d�t, v~�em spo��v�
jej� rozd�lnost, i~kdy� v�voj kernelu
\uv{tolik} nesledujete. Proto v�m p�edkl�d�m tyto post�ehy ohledn� novinek
ve�v�voji j�dra v~posledn� dob�. T�kaj� se hlavn� x86, nebo� tento Linux
pou��v�m doma nej�ast�ji.

Podot�k�m, �e tento text nepojedn�v� o~v�ech nov�ch typech hardwaru,
kter� Linux podporuje. Za prv�, mnoho periferi� (nap�. scannery a~tisk�rny)
je obsluhov�no v�hradn� z~u�ivatelsk�ho prostoru. Jin�, jako
jsou videokarty a~my�i, jsou o�et�eny kombinac� u�ivatelsk�ch
a~kernelov�ch ovlada��. Pokud v~tomto textu nenaraz�te na�ten �i onen
kus �eleza, kter� v�s zaj�m�, zdaleka to neznamen�, �e Linux~2.2 ho
nepodporuje. Naopak je docela pravd�podobn�, �e podporuje, ale mo�n�
jin�mi ne� kernelov�mi prost�edky.

\subsection{Matouc� sple� procesor�}

Je velmi zaj�mav� sledovat postupn� v�voj procesor� firmou Intel ---
pokud zrovna nem�te nic lep��ho na�pr�ci. Merced, Celeron, MMX\ldots\
neust�le se objevuj� nov� jm�na technologi�, a~neust�le je nahrazuj�
nov�, je�t� modern�j�� technologie. (Ot�zku, zda a~nakolik tyto
technologie \uv{stoj� za�to}, nehodl�m v~��dn�m p��pad� rozv�jet.)
Firm� Intel ji� docela solidn� konkuruj� dal�� firmy (AMD, Cyrix ad.),
jejich� jednotliv� procesory maj� sv� zvl�tnosti, mal� optimalizace
a~chybi�ky. Je velmi t�k� se v~tom v�em orientovat.

Linux~2.2 bude prvn�m stabiln�m j�drem, podporuj�c�m nejnov�j��
mo�nosti optimalizace v~r�mci konfigurace p�ed p�ekladem
j�dra. Linux~2.2 (i~pozd�j�� revize kernelu v.~2.0) obsahuje �pravy,
kter� opravuj� nejroz���en�j�� chyby procesor� nebo je alespo�
neutralizuj�. Jako p��klad a� slou�� nechvaln� proslul� bug \uv{F00F}
v~Pentiu. Jin� chyby, kter� se nedaj� na��rovni kernelu neutralizovat,
jsou detekov�ny a~ohl�eny b�hem startu.

Merced je zat�m v~nedohlednu, ale Linux~2.2 ji� byl portov�n na
Sparc64, Alpha a~dal�� 64-bitov� platformy, tak�e infrastruktura
64-bitov�ho j�dra ji� byla
\uv{vybudov�na}. (Samoz�ejm� existuj� jin� p�ek�ky, kter� by se
musely p�ekonat d��ve ne� by bylo mo�n� zve�ejnit Linux/Merced,i
ale pouh� existence 64-bitov�ho j�dra je v�znamn�m krokem.)

V�ceprocesorov� stroje budou mnohem v�konn�j�� pod 2.2 ne� pod 2.0,
nebo� probl�my jako \emph{global spinlock} byly odstran�ny. Podpora se
vztahuje a��na 16 procesor� (stejn�, jako v~2.0), ale i~tak by
v�konov� rozd�l m�l b�t ��asn�. D�le je nyn� nov� podporov�no IO-APIC
v~intelovsk�ch boardech, co� znamen� lep�� podporu SMP obecn�.

V~ostatn�ch portech bude Linux 2.2 obsahovat zlep�enou podporu �ady
stroj� typu server jako jsou Sparc, Sparc64 a~Alpha. Co se t��e
stroj� typu desktop, Linux 2.2 ji� b�� na�Macintosh�ch (ve�variant�ch
m68k i~PPC) s~r�zn�m stupn�m hardwarov� podpory. (D� se p�edpokl�dat,
�e podpora se bude jen zlep�ovat a� se za�ne pracovat na�dal��
kernelov� �ad� (2.4?).) Rovn� je snaha portovat Linux na�jin�
procesory, nap�. ARM, kter� jsou ��m d�l popul�rn�j�� v~tzv.
\emph{embedded syst�mech}.

Net�k� se to p��mo verze \uv{dva-dva}, ale snad stoj� za�zm�nku, �e
pokra�uj� pr�ce na�podmno�in� linuxov�ho j�dra pro stroje s~procesory
8086, 8088, 80186 a~80286. Nejsp��e to v~dob� zve�ejn�n� verze 2.2
nebude hotovo, ale u�ivatel� t�chto stroj� se na�to mohou t�it
v~n�kter�ch z~budouc�ch kernelov�ch release.

Je to trochu smutn�, ale mno�stv� nov�ch vlastnost�, kter� bylo do
Linuxu 2.2 p�id�no, zp�sobilo jeho zv�t�en� tak, �e tato kernelov�
�ada zab�r� podstatn� v�ce pam�ti ne� jej� p�edch�dkyn�. Nezb�v� ne�
doufat, �e budou do�release zahrnuty voliteln� polo�ky, kter� umo�n�
stla�it pam�ov� n�roky na�rozumnou m�ru. Tak�e skute�nost, �e
absolutn� minimum pam�ti RAM, nutn� k~provozu textov� linuxov�
instalace ji� vzrostlo na�5 Mb, zde uv�d�m s~jistou m�rou l�tosti.
(U~Linuxu 2.0 bylo minimum 4 Mb.) P�ibli�n� hranice rozumn� pou�itelnosti
bez swapov�n� v�ak z�st�v� kolem 8 Mb. Na�druh� stran�, pokud m�te to
�t�st� m�t po��ta� vybaven� v�t�� pam�t�, m��ete si b�t jisti, �e
Linux 2.2 tuto skute�nost vyu�ije v�ce, ne� kdykoliv jindy, m� toti�
n�kolik \uv{vymakan�ch} cacheovac�ch re�im� a~jin� optimalizace,
s~kter�mi dostane z~va�eho �eleza maxim�ln� v�kon.
\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Jak na�Linuxdoc-sgml}
\label{sgml}

\autor{Michal Choura, 2. srpna 1998}

\subsection{Co to je sgml}

Bal�k program� {\tt sgml-tools} byl vytvo�en Mattem Welshem jako
jednotn� prost�ed� pro psan� dokument� projektu LDP (Linux
Documentation Project). Utility jsou nadstavbou nad SGML a~auto�i
mohou ps�t sv� texty v~jednoduch�m a~p�ehledn�m form�tu, jak�m SGML
je. Dokument je potom mo�n� zform�tovat do�podoby �ist�ho textu,
syst�mu info, HTML str�nky s~hypertextov�mi odkazy, \LaTeX u �i
Postscriptu k~vyti�t�n�, a~dokonce i~do�form�t� editoru LyX nebo do
rtf. Struktura SGML dovoluje jednodu�e napsat dal�� konvertory do
jin�ch, t�eba i~dnes nezn�m�ch form�t�.

Tento �l�nek popisuje versi 1.0.3 bal�ku {\tt sgml-tools}. Star�� verse
dod�van� nap�. s~distribuc� Linuxu Red~Hat~5.0 nemaj� preprocesor
a~mohou se odli�ovat i~v~jin�ch vlastnostech od tohoto textu.

\subsection{Z�kladn� struktura dokumentu}

Ka�d� dokument v~Linuxdoc-sgml m� takovouto z�kladn� kostru:

\begin{verbatim}
<!doctype linuxdoc system>

<article>

<title>Co z toho asi bude
<author>B�l� Pan�

<date>31. prosince 1999

<abstract>
Informace o gener�ln�m sjezdu v�ech stra�idel
   k problematice roku 2000.
</abstract>

<toc>

</article>
\end{verbatim}

Form�tov�n� textu ur�uj� p��kazy, uveden� v~�hlov�ch z�vork�ch
$<$$>$. V�t�ina p��kaz� se vztahuje jen na�blok textu, potom je
ohrani�ena znaky $<$p��kaz$>$ a~$<$/p��kaz$>$.

Ka�d� SGML dokument mus� za��nat ��dkem {\tt $<$!doctype linuxdoc
system$>$}. Ten specifikuje DTD typ SGML dokumentu. P��kaz {\tt
$<$article$>$ ... {$<$}/article$>$} ��k�, �e pou�ijeme styl
,,article``. V�znam zna�ek {\tt $<$title$>$}, {\tt $<$author$>$}
a~{\tt $<$date$>$} je z�ejm�, {\tt $<$abstract$>$ ... {$<$}/abstract$>$}
m��e obsahovat stru�n� popis dokumentu. P��kaz {\tt $<$toc$>$} vys�z�
ve�v�sledn�m textu obsah.

\subsection{Nadpisy kapitol, odstavce}

Pro nadpisy kapitol se pou��vaj� p��kazy {\tt $<$sect$>$}, {\tt
$<$sect1$>$}, {\tt $<$sect2$>$}, {\tt $<$sect3$>$} a~{\tt
$<$sect4$>$}. Syntaxe v~dokumentu je n�sleduj�c�:

\begin{verbatim}
<sect>Kapitola

<sect1>Podkapitola

<p>
Text odstavce.
\end{verbatim}

Za�zm�nku stoj� p�edev��m uveden� zna�ky {\tt $<$p$>$}. Mezi nadpisem
kapitoly a~textem b�t mus�, jinak by konvertor nepoznal, kde kon��
nadpis a~za��n� odstavec. P�i odd�lov�n� odstavc� mezi sebou je mo�n�
pou��t bu� {\tt $<$p$>$}, nebo sta�� jen vynechat pr�zdn� ��dek.

\subsection{Zv�raz�ov�n� textu}

Z�kladn� zp�sob zv�razn�n� textu je kursiva. Tu vysad�me p��kazy {\tt
$<$em$>$ ...kursiva... {$<$}/em$>$}. Sazbu tu�n�ho textu je mo�no
dos�hnout p��kazy {\tt $<$bf$>$
...tu�n�.. {$<$}/bf$>$}. Neproporcion�ln� font psac�ho stroje lze
vytvo�it p��kazy {\tt $<$tt$>$ ...strojov�... {$<$}/tt$>$}.

U~podobn�ch p��kaz� je povolena je�t� syntax tohoto tvaru: {\tt $<$em/
... /}. Pochopiteln�, �e text uvnit� p��kazu nesm� obsahovat
lom�tka. To p�ipou�t� pouze prvn� syntax.

Prost�ed� verbatim pro sazbu textu beze zm�ny tak, jak je ve�zdrojov�m
textu, lze vytvo�it zna�kami

\begin{verbatim}
<verb>
N�jak� text. @#$%^&.
</verb>
\end{verbatim}%$

Uvnit� verbatim prost�ed� mus� b�t pou�it p��kaz {\tt \&ero;} pro znak
\& a~{\tt \&etago;} m�sto dvojice znak� {\tt {$<$}/}. Uvnit� verbatim
prost�ed� se nesm� vyskytovat ani sekvence
{\tt $\backslash$end$\{$verbatim$\}$}, proto�e koliduje s~\LaTeX ov�m
koncem verbatim prost�ed�.

Obdobn� p��kazu verbatim je {\tt $<$code$>$ main()$\{$$\}$
{$<$}/code$>$}. Ten se u��v� k~sazb� zdrojov�ho k�du. Jedin� rozd�l
oproti {\tt verb} je, �e p�ed a~za�textem v~p��kazu se um�st�
vodorovn� ��ra p�es celou ���ku sazby.

Prost�ed� {\tt tscreen} nastav� font na�{\tt tt} a~odsad� s�zen�
text. Ten je op�t zad�n ve�tvaru

\begin{verbatim}
<tscreen>
N�jak� text.
</tscreen>
\end{verbatim}

Obdobn� prost�ed� {\tt quote} provede tot�, ale nenastav� font na
{\tt tt}. U��v� se pro sazbu cit�t�.

\subsection{V��ty}

Linuxdoc-sgml um� s�zet t�i druhy v��t�:

\begin{itemize}
\item {\tt itemize} jsou polo�ky ozna�en� punt�kem,
\item {\tt enum} jsou automaticky ��slovan� a~\item {\tt descrip}
 je popisn� v��et.
\end{itemize}

Prvn� dva typy v��t� maj� tuto strukturu:

\begin{verbatim}
<itemize>
  <item>Prvn� polo�ka,
  <item>Druh� polo�ka.
</itemize>
\end{verbatim}

Jak v��et dopadne je vid�t na�za��tku odstavce. Posledn�, popisn�
v��et, se vytv��� trochu jinak:

\begin{verbatim}
<descrip>
  <tag>Polo�ka</tag> A jej� vysv�tlen�.
  <tag>Jin�</tag> Polo�ka jin�.
</descrip>
\end{verbatim}

\subsection{Sazba speci�ln�ch znak�}

V~SGML je mnoho tzv. speci�ln�ch znak�, kter� je t�eba s�zet
sekvencemi tvaru {\tt \&n�co;}. Mezi nejd�le�it�j�� pat��:

\begin{itemize}
\item \& --- {\tt \&amp;}
\item $<$ --- {\tt \&lt;}
\item $>$ --- {\tt \&gt;}
\item \$ --- {\tt \&dollar;}
\item \# --- {\tt \&num;}
\item \% --- {\tt \&percnt;}
\item \~{} --- {\tt \&tilde;}
\item {\tt\char`\"} --- {\tt \&dquot;}
\item $|$ --- {\tt \&verbar;}
% Ond�eji, tady nen� zobrazen� te�ka - asi n�jak� probl�m s fontem.
% PAVLE, je to tak dobre? - BoChal: ted jo, ale proc to predtim nefungovalo?
\item $\mathchar"2202$ --- {\tt \&times;}
\item @ --- {\tt \&commat;}
\end{itemize}


Takov�ch znak� je podstatn� v�ce, doporu�uji pod�vat se do
dokumentace, dod�van� s~bal�kem sgml-tools.

\subsection{Odkazy a~reference}

Pokud se chcete odkazovat na�n�jakou kapitolu, je t�eba p�idat za
nadpis kapitoly takovouto definici:

\begin{verbatim}
<sect>O bezhlav�m ryt��i<label id="hlava">
\end{verbatim}

V~textu je potom mo�n� se odkazovat na�tuto kapitolu p��kazem
{\tt $<$ref id="hlava" name="O bezhlav�m ryt��i"$>$}. Argument
{\tt name} se vyu�ije p�i tvorb� HTML verse dokumentu, kde nebude
uvedeno ��slo, ale p��mo n�zev kapitoly s~hypertextov�m odkazem na�ni.
V~n�zvech odkaz�, tedy v~argumentu {\tt id}, by se nem�ly
% Ond�eji, tady je stra�n� mal� mezera, pod�vej se na to.
vyskytovat ��dn� speci�ln� znaky, ani podtr��tko {\tt \_}\,, ani �esk�
znaky. 

Odkazy do�prostoru Internetu maj� form�t:
\begin{verbatim}
<url url="http://www.strasidla.org/~jozin/"
   name="J�in z b�in">
\end{verbatim}

Argument {\tt name} se pou�ije v~HTML versi jako odkaz a~v~\TeX ov�
versi pro popis odkazu.

Pro odkazy na�emailov� adresy je lep�� pou��t alternativu

\begin{verbatim}
<htmlurl url="mailto:hejkal@huste-lesy.edu"
name="mailto:hejkal@huste-lesy.edu">
\end{verbatim}

Tak se p�i v�stupu do�textu neobjev� adresa dvakr�t za�sebou, jednou
jako URL a~podruh� jako popis, ale p�esto z�stane spr�vn� odkaz v~HTML
versi.

\subsection{Podm�nky \uv{preprocesoru}}

Nov�j�� verse {\tt sgml-tools} obsahuj� velmi jednoduch�
preprocesor. S~jeho pou�it�m je mo�n� vytv��et odli�n� text pro r�zn�
v�stupn� form�ty. Z�kladn� struktura je:

\begin{verbatim}
Tento <#if output="latex">TeXov�</#if> dokument...
\end{verbatim}

Slovo TeXov� se objev� jen v~\LaTeX ov� versi dokumentu. V~p��kazu je
povolen i~znak \uv{nebo}: {\tt name="latex$|$html"} vys�z� takov�
podm�n�n� text v~\LaTeX ov� i~HTML versi.

Jako argument p��kazu {\tt \#if} je mo�n� pou��t i~libovolnou
konstantu, t�eba {\tt version="oficialni"}. Pokud potom {\tt version}
bude nastaveno na�{\tt oficialni} nebo nebude nastaveno, v�stup bude
text v~podm�nce obsahovat. Konstanta se nastav� na�p��kazov� ��dce p�i
p�ekladu dokumentu (p�i v�stupu do�HTML) takto:

\begin{verbatim}
$ sgml2html -D version=moje text.sgml
\end{verbatim}%$

Obdobn� existuje p��kaz {\tt $<$\#unless$>$}, kter� se chov� opa�n�
ne� {\tt \#if}. Tedy vlo�� podm�n�n� text jen tehdy, neplat�-li
podm�nka uveden� v~argumentu.

Na�tyto p��kazy Linuxdoc-sgml je t�eba d�t si obzvl�t� pozor. Proto�e
jsou zpracov�ny preprocesorem, m��e se p�i chybn�m pou�it� st�t, �e
samotn� p�eklada� SGML bude vyd�vat zcela nesrozumiteln� chybov�
hl�ky na��pln� jin�ch m�stech textu.

\subsection{Pozn�mky k~�esk� sazb�}

V~�e�tin� je pravidly pravopisu stanoveno, �e by nem�ly na�konc�ch
��dk� z�st�vat jednoslabi�n� p�edlo�ky. V~SGML je na�takovou mo�nost
pamatov�no a~je definov�na, stejn� jako v~\TeX u, pevn� mezera, ve�kter�
nikdy nebude proveden ��dkov� zlom. Tato mezera se zapisuje jako
vlnovka {\tt \~{}} a~m�la by b�t ve�v�ech ke�zlomu nevhodn�ch m�stech
uv�d�na.

Tak� uvozovky se v~�e�tin� zapisuj� jinak ne� v~jin�ch
jazyc�ch. Doporu�uji i~v~SGML pou��vat pro po��te�n� uvozovky dva
znaky ��rka hned za�sebou~({\tt ,,}) a~pro koncov� dva znaky zp�tn�
apostrof za�sebou~({\tt ``}). \TeX{} v~takov�m p��pad� vys�z� spr�vn�
�esk� uvozovky a~i~v~ostatn�ch form�tech to vypad� l�pe ne� znak
palec~({\tt {\tt\char`\"}}).


\subsection{P�eklad Linuxdoc-sgml}

Bal�k {\tt sgml-tools} obsahuje sadu skript�, kter� poslou��
k~pohodln�mu p�ekladu dokument�. Nejd�le�it�j�� z~nich jsou:

\begin{itemize}
\item {\tt sgmlcheck strasidla.sgml} --- Provede syntaktickou
kontrolu dokumentu.

\item {\tt sgml2txt -c latin strasidla.sgml} --- Vygeneruje textovou
versi dokumentu. Je pot�eba ��ci, �e dokument je v~latin~1, jinak
poni�� �esk� znaky.

\item {\tt sgml2html strasidla.sgml} --- Vygeneruje str�nky HTML jazyka.

\item {\tt sgml2latex -p a4 -o tex strasidla.sgml} --- Vygeneruje
\LaTeX ov� zdrojov� k�d. S~touto vers� je pro �e�tinu nejv�ce
pr�ce. Proto�e {\tt sgml-tools} �e�tinu neznaj�, mus� se vygenerovat
t�mto p��kazem zdrojov� k�d pro {\tt cslatex} a~na�jeho za��tku
nahradit ��dku {\tt $\backslash$usepackage[latin1]$\{$inputenc$\}$} za
��dek {\tt $\backslash$usepackage$\{$czech$\}$}. T�m na�teme styly
{\tt cslatexu} a~budeme m�t spr�vn� dokonce i~d�len� slov. Pak se
nejm�n� dvoj�m p�ekladem {\tt cslatex strasidla} vygeneruje DVI
a~p��padn� {\tt dvips strasidla} i~Postscript.

\end{itemize}

Dal�� konvertory jsou {\tt sgml2info}, {\tt sgml2lyx} a~{\tt
sgml2rtf}.

\subsection{Kde lze sgml-tools z�skat a~z�v�re�n� post�ehy}

Bal�k sgml-tools m� svou domovskou str�nku
\citeurl{Sgml-tools}{http://www.sgml-tools.org/}, na�kter� lze z�skat
nejnov�j�� versi a~i~dal�� podrobn�j�� dokumentaci.

Linuxdoc-sgml je u�ite�n� bal�k pro psan� dokumentace, u~kter� je
po�adov�n v�stup do�co nejv�t��ho po�tu form�t� sp��e, ne� vyt��ben�
typografick� kvalita. Ti�t�n� verse dokument� maj� daleko ke�kr�se
text� psan�ch p��mo v~\TeX u. P�esto je na�p��kladu cel�ho Linux
Documentation Projectu vid�t, �e jej lze pou��t i~na�velk�ch
projektech s~dobr�mi v�sledky. Jako ostatn� v�dy, mus� �esk� u�ivatel
po��tat s~t�m, �e naraz� na�drobn� probl�my v~d�sledku pou��v�n� sv�ho
rodn�ho jazyka.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Za��n�me s~Emacsem: I~--- Spu�t�n� a~ukon�en�}
\label{emacsintro}

\autor{Michal Fadljevi�, 11. z��� 1998}

V�t�m v�s u~prvn�ho d�lu seri�lu o~Emacsu. Cht�l bych v~n�m p��stupnou
formou nau�it �lov�ka, kter� nem� (zat�m) v~Unixu sv�j obl�ben�
editor, jak s~Emacsem ��t a~p�e��t. Nepova�uji se za�n�jak�ho
emacsov�ho guru a~douf�m, �e pr�v� proto by mohl b�t seri�l
srozumiteln�.

\subsection{Pro� jsem vybral Emacs}

Kdy� jsem p�ed lety za�al pracovat v~Unixu, za�al jsem hledat editor,
kter� by spl�oval moje po�adavky:

\begin{itemize}
 \item{velmi mocn� (a~konfigurovateln�)}
 \item{b��c� v�ude (Unix, DOS, Win*)}
\end{enumerate}

Emacs oba tyto po�adavky spl�uje, tak�e jsem spokojen� �lov�k \smile.

\subsection{Co se v~Emacsu d� d�lat}

Je dobr� ��ci si hned na�za��tku to, co v�dycky s~humorem ��kaj�
Emacsov� guru, a~sice, �e:

% Ond�eji, tady Ti n�kde l�taj� okraje v prost�ed� quote - modr�
% podklad je o n�co �ir�� ne� r�me�ek.
\begin{quote}
V~Emacsu je mo�n� v�echno.
\end{quote}

Skute�n�, v~Emacsu m��ete s~velk�m komfortem ps�t knihy v~\TeX u,
vyv�jet a~ladit programy v~C/C++/Jav� a~spoust� jin�ch jazyk� (Emacs
si t�eba pod sebou spust� {\tt gdb} nebo {\tt dbx} a~vy na�jedno
stisknut� kl�vesy prov�d�te \uv{Next}, \uv{Step}, \uv{Finish} a~Emacs
v�m zobrazuje p�kn� graficky

% Obr�zek ema11.png
\Obr{ema11}
\noindent
a~s�m p�ep�n� zdrojov� soubory tak, jak krokujete --- prost� r�j
program�tora), d�l m��ete ��st po�tu a~newsov� skupiny (dal�� obr�zek),
editovat bin�rn� soubory, po��tat si da�ov� p�izn�n�, v�st jednoduch�
��etnictv�, proch�zet se po anonymn�ch FTP serverech stejn� pohodln�
jako po lok�ln�ch disc�ch (velmi podobn� jako v~obl�ben�m {\tt mc})
a~v~podstat� cokoliv, na�co se�enete p��slu�n� bal�k maker nebo na�co
si makra nap��ete sami. Ke�v�em v��e zm�n�n�m v�cem se dostaneme
v~pr�b�hu �asu, jen co budeme m�t za�sebou �pln� za��tky. Za�sebe je�t�
na��pln� konec �vodu dod�v�m: \uv{Bu�te na�sv�j editor n�ro�n�}, �ili
v�echno co d�l�te opakovan� si zautomatizujte. V~Emascu to skute�n�
jde.

\Obr{ema12}
\Obr{ema13}

% Obr�zek ema12.png
% Obr�zek ema13.png
% Obr�zek ema14.png

\subsection{Instalace}

Proto�e instalace Emacsu pro danou distribuci je trochu nad r�mec 
tohoto pov�d�n�, budu p�edpokl�dat, �e pou��v�te Red~Hat~4.2 a~m�te
nainstalov�ny p��slu�n� RPM bal�ky s~Emacsem jako j�. Jsou to tyto
bal�ky: 

\begin{verbatim}
$ rpm -qa|grep emacs
emacs-19.34-4
emacs-el-19.34-4
a jeden z bal�k�
emacs-nox-19.34-4
emacs-X11-19.34-4
\end{verbatim} %$

Pokud m�te jinou distribuci, budete si muset p��slu�n� instala�n�
bal�ky n�kde iniciativn� sehnat, p��padn� pop�trejte po standardn�ch
GNU FTP mirrorech a~tam se d� Emacs naj�t i~ve�zdrojov�ch souborech.
Pou��v� {\tt autoconf}, tak�e na�v�t�in� rozumn�ch syst�m� vysta��te
s~obvykl�m:

\begin{verbatim}
 $ tar xfvz ema*tar.gz; cd ema*
 $ ./configure
 $ make 
 ... �as na �aj - n�kdy i na dva {:)
 $ make install
\end{verbatim}

\Obr{ema14}

Podle m�ch instrukc� jste zv�dav� a~hned p�edchoz� zm�nka o~t�ech
bal�c�ch v�s jist� zasko�ila. Tak�e mal� vysv�tlen�

\begin{itemize}
\item {\tt emacs-19.34-4} --- zde je vlastn� distribuce Emacsu
\item {\tt emacs-el-19.34-4} --- zde jsou r�zn� dal�� bal�ky
 ve�zdrojov� form� pro zv�dav� nebo pro ty, kdo si cht�j� t�eba opravit
 n�jakou chybu
\item {\tt emacs-X11-19.34-4} --- {\tt /usr/bin/emacs}
\item {\tt emacs-nox-19.34-4} --- {\tt /usr/bin/emacs-nox}
\end{itemize}

Pokud chcete spou�t�t Emacs pouze v~�ist� znakov�m re�imu, sta�� v�m
bal�k {\tt emacs-nox} a~obdobn� jste-li zaryt� \uv{X~Window-s�k},
nainstalujete si z�ejm� {\tt emacs-X11}. Rozhodn� v�m sta�� jen jeden
z~nich.

\begin{verbatim}
/usr/bin/emacs ... 1908308 B
/usr/bin/emacs-nox ... 1473692 B
\end{verbatim}

Rozd�l je mezi nimi (krom� velikosti) ten, �e verze zkompilovan� pro
X Window System pou��v� p��mo menu v~horn� ��sti obrazovky, posuvnou li�tu
po prav� stran� a~p�i b�hu n�kter� dialogy vyskakuj� jako nov� dialogov�
okna, zat�mco verze {\tt -nox} tyto vymo�enosti nem�. Jinak
funkcionalita z�st�v� stejn�. To je vlastn� jedna z~hlavn�ch my�lenek
tohoto hlavn�ho proudu tzv. \emph{GNU Emacsu} a~sice, �e p�enositelnost
by m�la z�stat maxim�ln�. Jen pro vysv�tlen�, b�hem let vznikaly r�zn�
n�zorov� proudy a~skupiny v�voj��� Emacsu se svobodn� �t�pily a~�t�pily,
tak�e dodnes m��ete naj�t (a~p��padn� pou��vat) \emph{XEmacs},
\emph{Lucid Emacs} atd., a~je jich je�t� v�ce. Jak asi spr�vn� tu��te,
XEmacs se chce v�ce integrovat do�X Window Syst�mu a~z�ejm� mu nevad�,
�e pak
u� nep�jde spustit na�uboh� konzoli nebo p�es termin�lov� emul�tor po
modemu. My se budeme v�novat pouze GNU Emacsu, tzn. tomu Emacsu, kter�
skute�n� b�� v�ude (��dkov� re�im, X Window System, MS-Windows, DOS)
a~t�m, �e jste ho pustili t�eba na�konzoli, neztr�c�te ��dnou z~jeho
��asn�ch schopnost�.

Pokud v�m velikost nevad�, nainstalujte si {\tt emacs-X11}. Pokud ho
spust�te v~X Window System nap�. z~{\tt xtermu}, nasko�� v�m norm�ln� nov�
okno s~Emacsem a~ve�znakov�m re�imu ho udr��te tak, �e ho spust�te:

\begin{verbatim}
$ emacs -nw
\end{verbatim}%$

\noindent Jako: spus� Emacs bez okna ({\tt -nw} \uv{NoWindow}).
Pak nevysko�� nov� okno, ale p�kn� se rozb�hne spo��dan� v~okn�,
kde jste napsali tenhle ��dek.

\subsection{Spu�t�n�}

Emacs se d� pou��t b�n�m zp�sobem jako {\tt vi}, {\tt joe}, {\tt
vim}, {\tt elvis}, {\tt pico} apod.  Postupem �asu d�l� �lov�k st�le
v�ce v�c� p��mo v~Emacsu, tak�e spr�vn� Emacs-lover spou�t� Emacs jen
r�no a~vyp�n� ho a� ve�er.

\begin{verbatim}
$ emacs mujprvni.txt
\end{verbatim}%$

\noindent resp. na�konzoli

\begin{verbatim}
$ emacs -nw mujprvni.txt
\end{verbatim}%$

% Obr�zek ema15.png

%\vadjust{\Obr{ema16}}%

\Obr{ema15}
Ocitli jste se ve�sv�t� Emacsu. V�echno zde m� sv� pravidla
a~p�izn�v�m otev�en�, �e to chce ur�it� �sil� a~�as zvyknout si.
(PS: Prvn� dva m�s�ce jsou nejhor��, pak je to zase naopak ��asn�).
Na obr�zku vid�te (v~po�ad� shora dol�) \emph{menu}, velkou ��st
obrazovky (\emph{pracovn� oblast}) slou��c� pro vlastn� pr�ci, vpravo
\emph{posuvnou li�tu} (vyzkou�ejte si prav�, lev� a~prost�edn� tla��tko),
v~doln� ��sti pak velmi u�ite�n� (a~samoz�ejm� konfigurovateln�)
\emph{stavov� ��dek} (mode-line) a~�pln� posledn� ��dek je snad
nejd�le�it�j�� ��st a~sice \emph{komunika�n� oblast}
(minibuffer), kde
se odehr�v� velk� ��st Va�� komunikace s~Emacsem. Emacs v�m tam
zobrazuje r�zn� varov�n�, chyby, rady a~z�rove� tam odpov�d�te
jednoduch� ot�zky apod. Kdy� u� jsme u~t�ch ot�zek. V�imn�te si,
% Ond�eji, kolem t�ch dvou kl�ves ud�lej n�jakou mezeru - o n�co
% v�t�� ne� je te�.
�e u~\uv{m�n� d�le�it�ch} ot�zek vysta�� s~odpov�d� \key{y}\hskip2dd/\hskip2dd\key{n},
ale u~\uv{destruktivn�j��ch} vy�aduje p�kn� vypsat
{\tt yes}/{\tt no} --- to proto, aby
v�s donutil uv�domit si, jestli opravdu chcete danou v�c
ud�lat. �ikovn�, nemysl�te? D�vejte se tam �asto. Emacs v�m tam �asto
rad�, co m��ete d�lat a~jak se do��st n�pov�du.

% Obr�zek ema16.png

Obr�zek ukazuje, jak vypad� Emacs p�i pr�ci ve�znakov�m
re�imu. P�ich�z�te pouze o~menu v~horn� ��sti. To je up��mn� pro
za��te�n�ky docela praktick� v�c, proto�e u~polo�ek jsou p�kn�
p�ehledn� p�ips�ny kl�vesov� sekvence, kter� akci vyvolaj�. B�hem
n�kolika m�s�c� si tak �lov�k ty nej�ast�j�� nen�siln� zapamatuje.
Tak�e pokud m�te mo�nost a~slu�n� v�po�etn� v�kon, pou�t�jte si (ze
za��tku) rad�ji X-ovou verzi.

\Obr{ema16}

Plat� to, �e Emacs s~v�mi neust�le komunikuje, t.j. m�li byste vid�t
nebo sly�et odezvu na�to co d�l�te. Pokud se tak ned�je, je to divn�.
V~takov�ch situac�ch ma�kejte nejprve jednou a~n�kdy i~v�cekr�t po
sob� \key{C-g}, co� je ve�v�ech situac�ch stornuj�c� kombinace kl�ves,
kter� p�eru�� a~skon�� to, co jste pr�v� d�lali (a~z�ejm� se v�m to
z~n�jak�ho d�vodu neda��).

Te� trochu typografick� konvence. V~Emacsu je hodn� povel� a~�asto se
pou��vaj� kl�vesov� sekvence a~to n�kdy s~p�ep�na�i a~n�kdy bez
p�ep�na��. Tak�e

\vskip0.5\bas plus 0.5\bas
\BeginTable
\OpenUp{2}{2}
\Expand
\BeginFormat
|4 l | p(0.7\hsize) |4.
" z�pis  "   	znamen� "\\
" \key{C-g}    "   p�idr� p�ep�na� \key{Ctrl} --- \key{Control} a~zm��kni jednou p�smeno \key{g}"\\
" \key{C-g} \key{C-g} "  p�idr� p�ep�na� \key{Ctrl} a~zm��kni dvakr�t p�smeno \key{g}"\\
" \key{C-g} \key{g}   "  p�idr� \key{Ctrl} a~zm��kni jednou p�smeno \key{g} potom pus� \key{Ctrl} a~zm��kni je�t� jednou p�smeno \key{g}"\\
" \key{M-v}   "    zm��kni p�ep�na� \key{Meta} --- u~n�s v�t�inou \key{Alt} --- a~jednou p�smeno \key{v}"\\
"         "  Pokud toto nefunguje, pou��v� se m�sto \key{M-v} n�hrada \key{ESC} \key{v}, �ili"\\
"         "  zm��kni \key{ESC} a~potom p�smeno \key{v}"\\
" \key{C-M-v}    "  p�idr� sou�asn� \key{Ctrl} a~\key{Meta} a~jednou p�smeno \key{v}. Zde se nebojte --- pokud v�m z~n�jak�ho d�vodu nefunguje \key{Meta}, ekvivalent je skute�n� \key{Esc} \key{C-v}"\\
" \key{C-x} \key{r} \key{l}  "   Nejprve \key{C-x}, uvolnit v�echno a~         postupn� kl�vesy \key{r} a~\key{l}"\\
" \key{C-x} \key{s}   "  Nejprve p�idr� \key{Ctrl} a~p�smeno \key{x}, pak uvolni \key{Ctrl} a~zm��kni \key{s}"\\
" \key{C-x} \key{C-s} "  Nejprve p�idr� \key{Ctrl} a~p�smeno \key{x}, a~pak zm��kni \key{s}"\\
\EndTable
\vskip0.5\bas plus 0.5\bas

Zde si v�imn�te d�le�it�ho rozd�lu --- v~posledn�m p��pad� po��d
dr��te \key{Ctrl} stisknut�, zat�mco v~p�edposledn�m ho po p�smenu \key{x}
uvoln�te.  Na�to si brzy zvyknete, jen je pot�eba si d�t ze za��tku
trochu pozor.  Tak a~te� u� jsme definovali konvenci z�pisu, tak�e te�
u� v�te, co znamen�, kdy� v�m prozrad�m nejnejd�le�it�j�� v�c a~sice ---
jak skon�it s~Emacsem --- je to pomoc� sekvence \key{C-x} \key{C-c}.

Ne� se dostaneme k~tomu, co kter� sekvence d�l�, mal� vysv�tlen� toho,
pro� toto asi vzniklo. Celkem jednoduchou �vahou dost�v�me:

M�-li program ps�t text, mus� v�t�ina kl�ves po stisku vlo�it do�textu
p��slu�n� znak. To ano, ale mus�me se n�jak textem pohybovat,
opravovat ho a~podobn�. Dobr�, m��eme pou��t p�ep�na� + kl�vesa
nap�. \key{C-a}, \key{C-b}, a� \key{C-z} nebo \key{M-a}, \key{M-b} a�
\key{M-z}. Jak �asem uvid�te, p��kaz� um� Emacs na�stovky, tak�e ani
to by nesta�ilo, proto se pou��v� i~\key{C-M-a} a� \key{C-M-z} a~nav�c r�zn�
dlouh� sekvence po prefixech \key{C-x} a~\key{C-c}.  A~v�echny tyto sekvence
jsou v�mi modifikovateln�. �ili ad absurdum po spu�t�n� Emacsu jenom Vy
m��ete v�d�t, co jste si posledn� p�i�adil za�akci t�eba s~sekvenci
\key{C-c} \key{v} \key{v} \key{d} \key{r}. No, to u� je opravdu trochu
zvrhl�\ldots

% Op�t bez r�me�ku % opet proc :-)
\vskip0.5\bas plus 0.5\bas
\BeginTable
\OpenUp{2}{2}
\Expand
\BeginFormat
s1|4 l | l | l |4.
" kl�vesa              " nebo           " akce			   "\\
% �lo by n�sleduj�c� ��pky ud�lat podobn� jako \uparrow
% a\downarrow? Takhle to vypad� blb�.
" \key{$\rightarrow$}  " \key{C-f}      " znak vp�ed 		   "\\
" \key{$\leftarrow$}   " \key{C-b}      " znak vzad		   "\\
" \key{$\uparrow$}     " \key{C-p}      " ��dek nahoru		   "\\
" \key{$\downarrow$}   " \key{C-n}      " ��dek dol�		   "\\
" \key{Del}            " \key{C-d}      " sma� znak pod kurzorem   "\\
" \key{BackSpace}      "                " sma� znak vlevo	   "\\
"                      " \key{C-k}      " sma� ��dek		   "\\
" \key{Home}           " \key{C-a}      " jdi na�za��tek ��dku	   "\\
" \key{End}            " \key{C-e}      " jdi na�konec ��dku	   "\\
" \key{PgUp}           " \key{M-v}      " str�nka nahoru	   "\\
" \key{PgDn}           " \key{C-v}      " str�nka dol�             "\\
"                      " 		" 			   "\\
"                      " \key{C-x} \key{C-s}  " ulo� tento soubor	  "\\
"                      " \key{C-x} \key{C-c}  " ukon�i Emacs		  "\\
\EndTable
\vskip0.5\bas plus 0.5\bas

�ekn�me si typickou konfiguraci. Po instalaci m�te (pom�rn�) rozumn�
vazby nadefinov�ny a~m�nit budete jen to, co v�m bude opakovan� vadit
a~hlavn�, co budete d�lat je, �e si budete p�id�vat svoje nov� vazby
(\emph{bindings}). Budu se sna�it ps�t do�z�vorek anglick� ekvivalenty
proto, abyste m�li lep�� vazbu na�to, o~�em se p��e v~dokumentaci. (Do
n� budete muset d��ve �i pozd�ji stejn� vklouznout, proto�e tento
seri�l v�m nem��e objasnit v�e. Jen pro zaj�mavost, �pln� referen�n�
p��ru�ka Emacsu m� n�co kolem 600 stran --- takov� bible Emacsu).

Tak�e je�t� jednou, pokud �eknu, �e \key{C-x} \key{C-s} ulo�� soubor, kter�
pr�v� editujte, znamen� to p�esn� to, �e ve�standardn� distribuci
Emacsu po prvn�m rozb�hnut� je na�sekvenci \key{C-x} \key{C-s} p�iv�z�na
funkce \uv{ulo� soubor}. Pokud jste n�co m�nili, je to na�v�s. �ili
opatrn� na�zm�ny, kter� d�l�te v~konfiguraci Emacsu. Z~90\% se pak
�lov�k roz�iluje nepr�vem na�Emacs, sp��e by m�l sp�lat s�m
sob�. (Mluv�m z~vlastn� zku�enosti.) V�echny takov�to �pravy si �lov�k
typicky p�id�v� do�sv�ho souboru {\tt ~/.emacs}, tak�e pokud byste si
ho n�jak pokazili, jednoduch� pomoc --- sma�te ho a~Emacs se rozb�hne
v~defaultn� konfiguraci, jak byl sestaven.


Proto�e Emacs je ur�en po pr�ci v~mnoha r�zn�ch podm�nk�ch, nen�
zvykl� se na�cokoliv v�zat. V~podstat� jak�koliv kl�vesnice bude
dobr�. I~kdy� t�eba nebude m�t \key{F1} a� \key{F12} nebo kl�vesu
\key{Alt} a~podobn�.  To neznamen�, �e nem�te pou��vat kl�vesy
\key{End}, \key{Home}, \key{PgUp}, \key{PgDn}, \key{F1} a� \key{F12},
\key{Ins} a~\key{Del}. V�t�ina z~nich funguje, jak je
obvykl�, a~t�m ostatn�m to vysv�tl�me v~n�kter�m z~p���t�ch d�l�. Je
dokonce velmi pravd�podobn�, �e v�m te� hned t�eba nap�. \key{Del}
nebude d�lat to, co m� --- to je nej�ast�j�� probl�m, ale na�v�echno
se pod�v�me a~v~tabulce vid�te, �e \key{Del} m� ekvivalent
\key{C-d}, tak�e se tak moc ned�je\ldots

Nyn� si zkuste napsat n�jak� odstavec textu  a~vyzkou�ejte si
editov�n�.

Nen� to tak hrozn�, co? Zkuste si jako samostatn� cvi�en� \uv{oeditovat}
n�kolik soubor�. --- To by bylo pro dne�ek v�e. Pokra�ov�n� p���t�. Pokud
v�m bylo n�co nejasn� nebo m�te n�pad, co byste se cht�li do��st
o~Emacsu p���t�, napi�te mi.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\section{Linux a~vl�kna}
\label{threads}

\autor{Vladim�r Michl, 7. srpna 1998}

Tento �l�nek si klade za��kol sezn�mit �ten��e s~vl�kny v~Linuxu
a~jejich pou�it�m, p��padn� s~t�m, �eho by se m�l �lov�k p�i pou��v�n�
vl�ken vyvarovat.

Ale od za��tku. Nejprve je t�eba osv�tlit rozd�l mezi term�nem proces
a~vl�kno.

Jako proces je v~syst�mu ch�p�n souhrn k�du programu, dat programu,
z�sobn�ku, �daj� o~procesem otev�en�ch souborech, a~tak� informac�
ohledn� zpracov�n� sign�l�. Tyto v�echny informace m� ka�d� proces
vlastn� (priv�tn�) a~nem��e je sd�let s~jin�m procesem, krom� datov�ch
oblast�. P�i vol�n� j�dra {\tt fork(2)} se pak tyto informace pro
nov� proces skop�ruj�, tak�e jsou pro n�j zase priv�tn�.

Jako vl�kno si m��eme p�edstavit odleh�en� proces, tj. pouze k�d
vl�kna a~z�sobn�k, v�e ostatn� je sd�leno s~ostatn�mi vl�kny t�ho�
procesu.  Vl�kno je tedy podmno�inou procesu a~proces m��e vlastnit
n�kolik vl�ken.  Vl�kno samo o~sob� v~syst�mu existovat nem��e, mus�
k~n�mu v�dy existovat proces, se kter�m sd�l� v�echna data, otev�en�
soubory, zpracov�n� sign�l�.

Pro implementaci vl�ken existuj� tyto modely:
\begin{itemize}

\item \emph{one-to-one} --- Implementace provedena na��rovni
j�dra. Ka�d� vl�kno je pro j�dro samostatn� proces, pl�nova� proces�
ne�in� rozd�l mezi vl�knem a~procesem. Nev�hodou tohoto modelu m��e
b�t velk� re�ie p�i p�ep�n�n� vl�ken.

\item \emph{many-to-one} --- Implementace provedena na��rovni
u�ivatele, program si s�m implementuje vl�kna a~v�e okolo. J�dro
o~vl�knech v~procesech nem� ani tu�en�. Tento model se nehod� na
v�ceprocesorov� syst�my, proto�e vl�kna nemohou b�et z�rove� (ka�d�
na�jin�m procesoru), jeden proces nelze nechat vykon�vat na�dvou
procesorech. V�hodou m��e b�t mal� re�ie p�ep�n�n� vl�ken.

\item \emph{many-to-many} --- Implementace provedena na��rovni j�dra
i~u�ivatele.  Tento model eliminuje nev�hody p�edchoz�ch implementac�
(velk� re�ie p�i p�ep�n�n� proces�, soub�n� nem��e b�et v�ce vl�ken)
a~je proto pou�it v~mnoha komer�n�ch UNIXech (Solaris, Digital Unix,
IRIX).
\end{itemize}

V~Linuxu je pou�it model prvn�. Nev�hoda velk� re�ie v~podstat� nen�,
proto�e p�ep�n�n� proces� je v~Linuxu implementov�no velmi
efektivn�. Pro tvorbu proces� a~vl�ken se v~Linuxu pou��v� vol�n�
j�dra {\tt clone(2)}, kter� ale pou��vaj� pouze knihovny
obhospoda�uj�c� vl�kna.

V~za��tc�ch, kdy se v~Unixech za�ala vl�kna objevovat, m�l ka�d�
unixov� opera�n� syst�m jin� aplika�n� rozhran� pro pr�ci s~vl�kny,
a~proto byly programy �patn� p�enositeln�. Proto vznikla norma POSIX,
kter� mimo jin� tak� definuje aplika�n� rozhran� pro pr�ci s~vl�kny
(POSIX 1003.1c). Toto POSIXov� rozhran� je dostupn� i na�OS
Solaris~2.5, Digital Unix~4.0, IRIX~6. S~ka�dou distribuc� Linuxu
postavenou na {\tt glibc-2.0} je dod�v�na knihovna {\tt pthread},
kter� pr�v� toto POSIXov� aplika�n� rozhran� implementuje.

\begin{vypis}[dt]
\begin{verbatim}
#include <pthread.h>
#include <stdio.h>
#define ITEMS 10000

void * process(void *a){
      int i;
      printf("Process %s: start\n", (char *)a);
      for (i = 0; i<ITEMS; i++){
            printf("%s", (char *)a);
      };
      printf("Process %s: end\n", (char *)a);
      return NULL;
}

int main(){
      int retcode;
      pthread_t a,b;
      void * retval;
      
      retcode = pthread_create(&a, NULL, process, "A");
      if (retcode != 0) fprintf(stderr, "create a~failed %d\n", retcode);
      retcode = pthread_create(&b, NULL, process, "B");
      if (retcode != 0) fprintf(stderr, "create b failed %d\n", retcode);
      retcode = pthread_join(a, &retval);
      if (retcode != 0) fprintf(stderr, "join a~failed %d\n", retcode);
      retcode = pthread_join(b, &retval);
      if (retcode != 0) fprintf(stderr, "join b failed %d\n", retcode);
      return 0;
}
\end{verbatim}
\caption{P��klad pou�it� vl�ken}
\label{example1}
\end{vypis}

\subsection{Tvorba vl�ken a~jejich ukon�en�}

Pro vytvo�en� a~ukon�en� vl�kna lze pou��t n�sleduj�c� funkce:

\begin{verbatim}
int  pthread_create(pthread_t * thread, 
 pthread_attr_t * attr,
 void * (*start_routine)(void *), void * arg);
\end{verbatim}

\begin{itemize}
\item funkce vytvo�� nov� vl�kno, kter� bude vykon�vat funkci {\tt
start\_routine}, co� je funkce akceptuj�c� jeden parametr typu {\tt
void *}. Na�adresu {\tt thread} je ulo�en identifik�tor vl�kna a~jako
atributy vl�kna m��eme uv�st {\tt NULL} pro implicitn� hodnoty.
\end{itemize}

\begin{verbatim}
void pthread_exit(void *retval);
\end{verbatim}

\begin{itemize}
\item tato funkce p�ed�asn� ukon�� vl�kno, ze kter�ho byla funkce zavol�na.
\end{itemize}

Vl�kno se tak� ukon��, skon��-li funkce {\tt start\_routine}. V~obou
p��padech se p�ed�v� n�vratov� k�d.

\begin{verbatim}
int pthread_join(pthread_t th, 
  void **thread_return);
\end{verbatim}

\begin{itemize}
\item funkce �ek� na�ukon�en� vl�kna {\tt th}. Na�adresu {\tt
thread\_return} je ulo�en n�vratov� k�d vl�kna.
\end{itemize}

P��klad, jak funkce pou��t, naleznete na v�pise \ref{example1}.

\subsection{P�eklad programu}

P�i p�ekl�d�n� programu, kter� pou��v� vl�kna, je t�eba tomuto
p�izp�sobit hlavi�kov� soubory knihovny {\tt glibc} tak, aby byly
reentrantn�. To provedeme definov�n�m makra {\tt \_REENTRANT}.
D�le je t�eba program slinkovat s~knihovnou {\tt pthread}.
Pro p�eklad programu na v�pise \ref{example1} pou�ijeme:

\begin{verbatim}
 gcc -D_REENTRANT -o example1 example1.c -lpthread
\end{verbatim}

\subsection{Kritick� sekce pomoc� mutexu}

Nejprve si polo�me ot�zku, co je to kritick� sekce. Za�kritickou sekci
pova�ujeme tu ��st k�du vl�kna, kter� operuje nad sd�len�mi daty
a~hroz�, �e paraleln� m��e jin� vl�kno operovat nad stejn�mi daty.
D�sledkem m��e b�t nekonzistence dat. Nap��klad jedno vl�kno zv���
sd�lenou prom�nnou A~o~jedna a~d�le s~n� po��t�, kde�to druh� vl�kno
prom�nou A~zmen�� o~dv� a~d�le s~n� po��t�. Pokud se po�t�st�, tak se
instrukce mohou prolo�it tak, �e ani jedno vl�kno ned� spr�vn�
v�sledek.  Tomuto je t�eba zabr�nit a~to t�m, �e do�t� ��sti, kter�
pracuje s~prom�nnou A~m��e vstoupit pouze jedno vl�kno, druh� mus�
�ekat a� to prvn� skon��. Takov�to kritick� sekce, kde m��e b�t
v~jednom okam�iku pouze jedno vl�kno, naz�v�me MUTEX (\emph{MUTual
EXclusion}).  Mutex m� dva stavy --- zam�en� (\emph{locked} --- n�kter�
vl�kno je uvnit�) a~odem�en� (\emph{unlocked} --- v~mutexu nikdo nen�).
 
Pro pr�ci s~mutexy pou�ijeme funkce:

\begin{verbatim}
int pthread_mutex_init(pthread_mutex_t *mutex, 
       const  pthread_mutexattr_t *mutexattr);
\end{verbatim}

\begin{itemize}
\item inicializace mutexu
\end{itemize}

\begin{verbatim}
int pthread_mutex_lock(pthread_mutex_t *mutex);
\end{verbatim}

\begin{itemize}
\item zam�en� mutexu. Po n�vratu je mutex v�dy zam�en pro vl�kno, 
kter� tuto funkci vykonalo. Pokud je mutex ji� zam�en, funkce
pozastav� vl�kno a~�ek� na�odem�en� mutexu, aby n�sledn� mutex zamkla
a~mohla nechat vl�kno pokra�ovat.
\end{itemize}

\begin{verbatim}
int pthread_mutex_trylock(pthread_mutex_t *mutex);
\end{verbatim}

\begin{itemize}
\item pokus o~zam�en� mutexu. Pokud je mutex ji� zam�en, funkce se 
vr�t� s~chybou EBUSY.
\end{itemize}

\begin{verbatim}
int pthread_mutex_unlock(pthread_mutex_t *mutex);
\end{verbatim}

\begin{itemize}
\item odem�en� mutexu
\end{itemize}

\begin{verbatim}
int pthread_mutex_destroy(pthread_mutex_t *mutex);
\end{verbatim}

\begin{itemize}
\item uvoln�n� zdroj� spojen�ch s~mutexem
\end{itemize}

V~p��kladu \ref{example2} m��ete vid�t pou�it� mutexu.

\begin{vypis}
\begin{verbatim}
pthread_mutex_t mut_var;
...
/* Inicializace mutexu */
      pthread_mutex_init(&mut_var, NULL);
...
/* Vstup do mutexu */
      pthread_mutex_lock(&mut_var);
/* Vykon�n� operac� nad sd�len�mi daty */
...
/* V�stup z mutexu */
      pthread_mutex_unlock(&mut_var);
...
/* Na konci programu zru�en� mutexu */
      pthread_mutex_destroy(&mut_var);
\end{verbatim}
\caption{Schematick� zn�zorn�n� pou�it� mutexu}
\label{example2}
\end{vypis}

U~mutex� se m��eme setkat s~t�m, �e bude t�eba mutex zamknout
v~z�vislosti na�podm�nce. Nap��klad probl�m producent -- konzument.
Producent produkuje data do�sd�len� prom�nn� a~konzument je �te.
P�itom prom�nn� mus� b�t zabezpe�ena mutexem a~z�rove� se mus�
hl�dat stav, zda prom�nn� obsahuje u�ite�n� data.
I~na toto POSIX mysl�, a~to pomoc� n�sleduj�c�ch funkc�:

\begin{verbatim}
int pthread_cond_init(pthread_cond_t *cond, 
       pthread_condattr_t *cond_attr);
\end{verbatim}

\begin{itemize}
\item inicializace podm�nky
\end{itemize}

\begin{verbatim}
int pthread_cond_signal(pthread_cond_t *cond);
\end{verbatim}

\begin{itemize}
\item zp�sob� spu�t�n� jednoho vl�kna, kter� �ek� na�podm�nce. 
Jestli�e ne�ek� ��dn� vl�kno, funkce nem� ��dn� efekt. �ek�-li 
v�ce vl�ken, spust� se pouze jedno, ale nen� definov�no jak�.
\end{itemize}

\begin{verbatim}
int pthread_cond_broadcast(pthread_cond_t *cond);
\end{verbatim}

\begin{itemize}
\item zp�sob� spu�t�n� v�ech vl�ken �ekaj�c�ch na�podm�nce. Jestli�e 
ne�ek� ��dn� vl�kno, funkce nem� ��dn� efekt.
\end{itemize}

\begin{verbatim}
int pthread_cond_wait(pthread_cond_t *cond, 
       pthread_mutex_t *mutex);
\end{verbatim}

\begin{itemize}
\item automaticky odemkne mutex, pozastav� vl�kno a~�ek� na�sign�l od 
podm�nky. Po p��chodu sign�lu je mutex uzam�en a~tato funkce
ukon�ena. Ka�d� podm�nka mus� b�t uzav�ena v~mutexu.
\end{itemize}

\begin{verbatim}
int pthread_cond_timedwait(pthread_cond_t *cond,
       pthread_mutex_t *mutex, 
       const struct timespec *abstime);
\end{verbatim}

\begin{itemize}
\item je podobn� {\tt pthread\_cond\_wait()} s~t�m rozd�lem, �e �ek�n�
       je �asov� omezeno.  Pokud �as vypr��, pak je sekce uzam�ena
       a~funkce je ukon�ena s~chybou {\tt ETIMEDOUT}.
\end{itemize}

\begin{verbatim}
int pthread_cond_destroy(pthread_cond_t *cond); 
\end{verbatim}

\begin{itemize}
\item uvoln� zdroje spojen� s~podm�nkou
\end{itemize}

V~p��kladu \ref{example3} m��ete vid�t pou�it� mutexu a~podm�nek na
probl�mu producent -- konzument. V�imn�te si rozd�ln� inicializace
podm�nek, samoz�ejm� ob� podm�nky jdou inicializovat stejn�m zp�sobem.

\begin{vypis}[dt]
\begin{verbatim}
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define ITEMS 100
#define NONVALID 0
#define VALID 1
pthread_mutex_t mut_var;
pthread_cond_t condvalid;
pthread_cond_t condnonvalid = PTHREAD_COND_INITIALIZER;
int valid;
int share;
void * konzument(void *a){
      printf("Process %s: start\n", (char *)a);
      while(1){
            pthread_mutex_lock(&mut_var);
            if (!valid)
              pthread_cond_wait(&condvalid, &mut_var);
            valid = NONVALID;
            printf("Process %s: %i\n", (char *)a, share);
            if (share == -1){
                  pthread_mutex_unlock(&mut_var);
                  break;
            };
            pthread_cond_signal(&condnonvalid);
            pthread_mutex_unlock(&mut_var);
      };
      printf("Process %s: end\n", (char *)a);
      return NULL;
}

void * producent(void *a){
      int i;
      printf("Process %s: start\n", (char *)a);
      for (i = 0; i<ITEMS; i++){
            pthread_mutex_lock(&mut_var);
            if (valid) 
              pthread_cond_wait(&condnonvalid, &mut_var);
            share = (int)rand();
            if (share == -1) share = 0;
            if (i == ITEMS - 1) share = -1;
            printf("Process %s: %i\n", (char *)a, share);
            valid = VALID;
            pthread_cond_signal(&condvalid);
            pthread_mutex_unlock(&mut_var);
      };
      printf("Process %s: end\n", (char *)a);
      return NULL;
}

int main(){
      pthread_t a,b;
      pthread_mutex_init(&mut_var, NULL);
      pthread_cond_init(&condvalid, NULL);
      pthread_create(&a, NULL, producent, "producent");
      pthread_create(&b, NULL, konzument, "konzument");
      pthread_join(a, NULL);
      pthread_join(b, NULL);
      pthread_cond_destroy(&condvalid);
      pthread_cond_destroy(&condnonvalid);
      pthread_mutex_destroy(&mut_var);
      return 0;
}
\end{verbatim}
\caption{Pou�it� mutexu v~probl�mu producent -- konzument}
\label{example3}
\end{vypis}


\subsection{Kritick� sekce pomoc� semafor�}

Semafory se pou��vaj� pro podobn� ��el jako mutexy, a~to pro
kontrolov�n� vstupu do�kritick�ch sekc�. Ale na�rozd�l od mutexu, kdy
v~sekci m��e b�t pouze jeden, se semafory lze doc�lit, �e v~sekci m��e
b�t v�ce vl�ken.  Semafor si m��eme p�edstavit jako po��tadlo
s~po��te�n� hodnotou, kterou nastav� u�ivatel. V�dy p�i vstupu do
kritick� sekce se �ek�, dokud nen� hodnota semaforu v�t�� ne� nula.
Pokud je, pak se hodnota zmen�� o~jednu a~vstoup� se do�kritick� sekce.
Na�konci sekce se hodnota semaforu o~jedni�ku zvedne. Pro pr�ci
se semafory pou��v�me funkce:

\begin{verbatim}
int sem_init(sem_t *sem, int pshared, 
       unsigned int value);
\end{verbatim}

\begin{itemize}
\item inicializace semaforu. Argument {\tt pshared} ur�uje, zda je semafor 
lok�ln� pro tento proces (hodnota 0) nebo je sd�len mezi procesy
(hodnota != 0). V~Linuxu jsou podporov�ny pouze lok�ln� semafory.
\end{itemize}

\begin{verbatim}
int sem_wait(sem_t * sem);
\end{verbatim}

\begin{itemize}
\item slou�� pro vstup do�kritick� sekce. Pokud je sekce obsazena
(semafor == 0), pak se �ek� a� se sekce uvoln�.
\end{itemize}

\begin{verbatim}
int sem_trywait(sem_t * sem);
\end{verbatim}

\begin{itemize}
\item slou�� pro vstup do�kritick� sekce. Je-li sekce obsazena,
funkce se vr�t� s~chybou EAGAIN.  
\end{itemize}

\begin{verbatim}
int sem_post(sem_t * sem);
\end{verbatim}

\begin{itemize}
\item slou�� k~ukon�en� kritick� sekce.
\end{itemize}

\begin{verbatim}
int sem_getvalue(sem_t * sem, int * sval);
\end{verbatim}

\begin{itemize}
\item vr�t� hodnotu semaforu.
\end{itemize}

\begin{verbatim}
int sem_destroy(sem_t * sem);
\end{verbatim}

\begin{itemize}
\item uvoln� v�echny zdroje spojen� se semaforem.
\end{itemize}

\begin{vypis}
\begin{verbatim}
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#define ITEMS 100

sem_t semfull;
sem_t semempty;
int share;

void * konzument(void *a){
  printf("Process %s: start\n", (char *)a);
  while(1){
    sem_wait(&semfull);
    printf("Process %s: %i\n", (char *)a, share);
    if (share == -1){
      sem_post(&semempty);
      break;
    };
    sem_post(&semempty);
  };
  printf("Process %s: end\n", (char *)a);
  return NULL;
}

void * producent(void *a){
  int i;
  printf("Process %s: start\n", (char *)a);
  for (i = 0; i<ITEMS; i++){
    sem_wait(&semempty);
    share = (int)rand();
    if (share == -1) share = 0;
    if (i == ITEMS - 1) share = -1;
    printf("Process %s: %i\n", (char *)a, share);
    sem_post(&semfull);
  };
  printf("Process %s: end\n", (char *)a);
  return NULL;
}

int main(){
      pthread_t a,b;
      
      sem_init(&semfull, 0, 0);
      sem_init(&semempty, 0, 1);
      pthread_create(&a, NULL, producent,
          "producent");
      pthread_create(&b, NULL, konzument, 
          "konzument");
      pthread_join(a, NULL);
      pthread_join(b, NULL);
      sem_destroy(&semfull);
      sem_destroy(&semempty);
      return 0;
}
\end{verbatim}
\caption{Pou�it� semafor� u~probl�mu producent -- konzument}
\label{example4}
\end{vypis}

Toto rozhran� pro semafory definuje norma POSIX 1003.1b a~POSIX
1003.1i.

\subsection{Ukon�en� vl�kna jin�m vl�knem}

\begin{verbatim}
int pthread_cancel(pthread_t thread);
\end{verbatim}

\begin{itemize}
\item vyvol� po�adavek na�zru�en� vl�kna.
\end{itemize}

\begin{verbatim}
int pthread_setcancelstate(int state,
      int *oldstate);
\end{verbatim}

\begin{itemize}
\item nastav� chov�n� vl�kna, kter� tuto funkci vyvolalo,
na�po�adavek jeho zru�en�. Mo�n� jsou dva stavy: {\tt
PTHREAD\_CANCEL\_ENABLE} a~{\tt PTHREAD\_CANCEL\_DISABLE}.
\end{itemize}

\begin{verbatim}
int pthread_setcanceltype(int type, int *oldtype);
\end{verbatim}

\begin{itemize}
\item nastav�, kdy je mo�no vl�kno zru�it. Mo�n� jsou dv� nastaven�:
{\tt PTHREAD\_CANCEL\_ASYNCHRONOUS} --- vl�kno bude zru�eno skoro
okam�it� po p�ijet� po�adavku nebo {\tt PTHREAD\_CANCEL\_DEFERRED} ---
vl�kno se zru�� a� v~okam�iku, kdy dojde do�bodu, kde je mo�no vl�kno
zru�it. Jako body jsou v~POSIXu definov�ny tyto funkce: {\tt
pthread\_join(3)}, {\tt pthread\_cond\_wait(3)}, {\tt
pthread\_cond\_timedwait(3)}, {\tt pthread\_testcancel(3)}, {\tt
sem\_wait(3)}, {\tt sigwait(3)}.
\end{itemize}

\begin{verbatim}
void pthread_testcancel(void);
\end{verbatim}

\begin{itemize}
\item tato funkce pouze testuje, zda byl p�ijat po�adavek na�zru�en� 
vl�kna. Pokud p�ijat byl, vl�kno je zru�eno, v~opa�n�m p��pad� se
funkce norm�ln� vr�t�. Funkce se pou��v� v~m�stech, kde jsou dlouh�
kusy k�du bez bod� vhodn�ch pro zru�en�.
\end{itemize}

Pokud je vl�kno v~bodu vhodn�m pro zru�en� (viz {\tt
pthread\_setcanceltype(3)}) a~p�ijalo po�adavek na�zru�en�, bude
zru�eno. Tot� se stane, pokud p�ijalo po�adavek na�zru�en� a~a�
n�sledn� vejde do�bodu vhodn�ho pro zru�en� (pouze p�i nastaven�m {\tt
PTHREAD\_CANCEL\_DEFERRED}).

Pokud se ukon�� hlavn� vl�kno, ani� by po�kalo na�vl�kna j�m
vytvo�en�, jsou tato vl�kna ukon�ena tak�.

Jak pou��t funkce m��ete vid�t na�p��kladu \ref{example5}.

\begin{vypis}
\begin{verbatim}
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <semaphore.h>

sem_t sem;

void * process(void *a){
   printf("Proces entered\n");
   sem_wait(&sem);
   printf("Proces exiting\n");
   return NULL;
}

int main(){
   pthread_t thid;
   void * thretval;
   
   sem_init(&sem, 0, 0);
   
   pthread_create(&thid, NULL, process, NULL);

   sleep(5); /* Vl�kno se zat�m rozb�hne */ 
   if (pthread_cancel(thid) != 0)
     printf("Cancel error\n");
   
   pthread_join(thid[i], &thretval);
   if (thretval != PTHREAD_CANCELED)
     printf("Thread not be canceled.\n", i);
   
   return 0;
}
\end{verbatim}
\caption{Ukon�en� vl�kna}
\label{example5}
\end{vypis}

\subsection{Dal�� u�ite�n� funkce}

\begin{verbatim}
pthread_t pthread_self(void);
\end{verbatim}

\begin{itemize}
\item vrac� identifik�tor vl�kna, kter� tuto funkci vyvolalo.
\end{itemize}

\begin{verbatim}
int pthread_equal(pthread_t thread1,
      pthread_t thread2);
\end{verbatim}

\begin{itemize}
\item porovn�, zda se identifik�tory vl�ken rovnaj�.
\end{itemize}

\begin{verbatim}
int pthread_detach(pthread_t th);
\end{verbatim}

\begin{itemize}
\item odpoj� vl�kno. V�echny pam�ov� prost�edky, kter� vl�kno pou��v�,
budou po ukon�en� vl�kna okam�it� uvoln�ny. S~odpojen�m vl�knem se nelze
synchronizovat a~vyzvednout jeho n�vratov� k�d funkc� {\tt pthread\_join(3)}.
\end{itemize}

\begin{verbatim}
int pthread_attr_init(pthread_attr_t *attr);
\end{verbatim}

\begin{itemize}
\item inicializuje objekt atribut� na�implicitn� hodnoty. Tento 
objekt se d� pou��t pro vytvo�en� v�ce vl�ken.
\end{itemize}

\begin{verbatim}
int pthread_attr_destroy(pthread_attr_t *attr);
\end{verbatim}

\begin{itemize}
\item uvoln� v�echny prost�edky pot�ebn� pro objekt atribut�.
\end{itemize}


\subsection{Probl�my, do�kter�ch se m��ete dostat}

\begin{itemize}
\item knihovna pro vl�kna pou��v� sign�ly {\tt SIGUSR1} a~{\tt
SIGUSR2}, proto je program  pou��vat nem��e.
\item pokud budete vl�kna pou��vat v~X aplikac�ch, je t�eba m�t {\tt Xlib}
kompilov�nu s~{\tt -D\_REENTRANT} a~podporou vl�ken (knihovna mus� b�t
naps�na reentrantn� --- v�ce vl�ken m��e vykon�vat tut� funkci ve
stejnou chv�li, bez vz�jemn�ho ovlivn�n� --- funkce nepou��vaj�
glob�ln� prom�nn�). Tot� plat� o~jak�koliv knihovn�, kterou budete
v~programu pou��vat.  Pokud knihovna takto reentrantn� nen�, je mo�no
ji pou��vat, ale pouze z~hlavn�ho vl�kna (k�du procesu). Toto souvis�
s~prom�nnou {\tt errno}. Ka�d� vl�kno m� toti� vlastn�, pouze hlavn�
vl�kno pou��v� glob�ln� {\tt errno}.
\item pou��v�n� vl�ken v~C++ s~{\tt libg++} asi nebude fungovat. Pro pou��v�n�
vl�ken v~C++ je doporu�en p�eklada� {\tt egcs} a~knihovna {\tt libstdc++}.
\item pokud program vytvo�� nap��klad 2 vl�kna, nedivte se, �e vid�te 4 
stejn� procesy. Jeden je hlavn� proces, pak vid�te 2 vl�kna a~posledn� je 
vl�kno staraj�c� se o~spr�vn� chod vl�ken. Toto vl�kno je vytvo�eno 
knihovnou {\tt pthread}.
\end{itemize}

\subsection{Odkazy}

Na�adrese \citeurl{FAQ
comp.programming.threads}{http://www.serpentine.com/~bos/threads-faq/}
lze naj�t �asto kladen� ot�zky newsov� skupiny
\emph{comp.programming.threads}.

Bli��� informace o~linuxov�ch vl�knech naleznete na�adrese
\citeurl{Linux Threads}{http://pauillac.inria.fr/~xleroy/linuxthreads}.
Lze zde tak� naj�t tutorial.

Na�adrese \citeurl{Single Unix
specification}{http://www.rdg.opengroup.org/onlinepubs/7908799/index.html}
najdete X/Open Group Single Unix specification, kde by se m�l tak� d�t
naj�t bli��� popis aplika�n�ho rozhran� pro vl�kna.

Na�adrese \citeurl{Vl�kna v~C++}{http://www.cs.wustl.edu/~schmidt/ACE.html}
najdete projekt, kter� tak� usnad�uje pou��v�n� vl�ken v~C++.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{autoconf, automake a~libtool aneb Makefile snadno a~rychle}
\label{automake}

\autor{Henryk Paluch, 9. z��� 1998}

Tyto t�i pom�cky slou�� k~rychl� tvorb� soubor� {\tt Makefile}, snadn�
a~na�platform� nez�visl� kompilaci knihoven, v�etn� dynamick�ch,
a~tak� poskytuj� rozs�hl� mo�nosti p�i testov�n� r�zn�ch specifik
syst�mu, na�kter�m bude program kompilov�n.

\begin{itemize}
\item {\tt libtool} unifikuje tvorbu dynamick�ch a~statick�ch
    knihoven. Vol� se m�sto p�eklada�e C a~podle typu platformy
    zajist� dopln�n� p��kazov� ��dky pot�ebn�mi parametry pro
    kompilaci a~instalaci staticky nebo dynamicky linkovan� knihovny.

\begin{vypis}[dt]
\begin{verbatim}
# Makefile.am - uk�zkov� program k libtool
AUTOMAKE_OPTIONS = foreign
# druh distribuce
# foreign - nejm�rn�j�� pravidla
# gnu     - mus� b�t p��tomny soubory README NEWS COPYNG aj.

# dal�� soubory, kter� jsou sou��st� distribuce
EXTRA_DIST = aclocal.m4

# vytvo�it knihovnu libhello pomoci libtool
# *.la je jm�no knihovny, kter� byla/bude vytvo�ena pomoc� libtool
lib_LTLIBRARIES = libhello.la
# zdrojov� soubory knihovny libhello
libhello_la_SOURCES = hello.c foo.c
# ��slov�n� verz� je specifick� pro libtool, viz. manu�l
libhello_la_LDFLAGS = -version-info 3:12:1

# hlavi�kov� soubory, kter� se maj� nainstalovat do
# ${prefix}/include, jinak je uve�te jen v *_SOURCES
include_HEADERS = foo.h

# spustiteln� programy
bin_PROGRAMS = hell hell.static

# zdrojov� soubory programu hell
hell_SOURCES = main.c
# knihovny 
hell_LDADD = libhello.la

# tot� pro hell.static
hell_static_SOURCES = main.c
# pokud byste cht�li linkovat knihovnu, kter� nebyla vytvo�ena 
# s libtool, tak pou�ijte klasick� libxxx.a m�sto libxxx.la
hell_static_LDADD = libhello.la
hell_static_LDFLAGS = -static
\end{verbatim}
\caption{�ablona Makefile {\tt Makefile.am}}
\label{sablonamakefile}
\end{vypis}

\item {\tt automake} vytv��� standardizovan� {\tt Makefile.in}
    podle �ablony {\tt Makefile.am}. Od verze 1.2 um� tak�
    spolupracovat s~utilitou {\tt libtool}. C�lov� soubory {\tt
    Makefile} generovan� programem {\tt autoconf} pak obsahuj�
    standardn� metody pro kompilaci, instalaci a~distribuci programu.

\item {\tt autoconf} generuje z~�ablony {\tt configure.in}
      konfigura�n� skript {\tt configure}.  {\tt autoconf} n�m
      poskytuje bohat� mo�nosti k~otestov�n� syst�mu. M��eme snadno
      ov��it p��tomnost r�zn�ch program�, hlavi�kov�ch soubor�
      a~hlavn� knihoven a~funkc�.  M�me k~dispozici nap�. makra, kter�
      zjist� p��tomnost X Window System a~dodaj� v�echny pot�ebn� parametry,
      v�etn� cest k~hlavi�kov�m soubor�m a~knihovn�m.\hfill\\
      Skript {\tt configure} se spou�t� p�ed samotnou kompilaci na�eho
      programu. Jeho �kolem je otestovat syst�m, vytvo�it {\tt
      Makefile} z~{\tt Makefile.in} a~prov�st v~n�m substituci
      prom�nn�ch. Dal�� �innost tohoto skriptu z�vis� pochopiteln� na
      �ablon� {\tt configure.in} --- nap�. konfigurace {\tt libtool}
      apod.
\end{itemize}


\subsection{Instalace}

M�li byste nainstalovat tyto RPM bal�ky (sou��st distribuce
Red~Hat~Linux~5.1):

\begin{verbatim}
# rpm -Uvh autoconf-2.12-3.noarch.rpm \
           automake-1.3-2.noarch.rpm  \
           libtool-1.0h-2.noarch.rpm
\end{verbatim}

Tyto programy na�sob� do�ur�it� m�ry z�visej�. Pokud si je budete
kompilovat sami, ujist�te se, �e v�echny maj� stejn� instala�n�
{\tt --prefix}!

\subsection{P��klad}

Uveden� p��klad poch�z� z~uk�zkov�ho programu {\tt hell-o} ke�skriptu
{\tt libtool}.

Obsahuje tyto soubory:
\begin{itemize}
\item {\tt hello.c} a~{\tt foo.c} jsou sou��st� knihovny {\tt libhello}
\item {\tt main.c} je testovac� program, kter� vyu��v� v��e zm�n�nou
    knihovnu
\end{itemize}



\begin{figure}
\begin{verbatim}
dnl AC_INIT - v�dy 1. p��kaz
dnl parametr - jm�no souboru, kter� je sou�. dist
dnl   pro kontrolu
AC_INIT(hello.c)
dnl jm�no bal�ku a ��slo verze
AM_INIT_AUTOMAKE(hell,1.0)

dnl otestuje p�eklada� C
AC_PROG_CC
dnl nakonfiguruje libtool
AM_PROG_LIBTOOL

dnl otestuje p��tomnost funkce cos() v knihovn�
dnl libm.a (resp. libm.so.*)
AC_CHECK_LIB(m, cos)
dnl v p��pad� �sp�chu definuje -DHAVE_LIBM

dnl Vygeneruje Makefile z Makefile.in 
dnl a provede substituci prom�nn�ch
AC_OUTPUT(Makefile)
\end{verbatim}
\caption{�ablona autoconfu {\tt configure.in}}
\label{sablonaautoconfu}
\end{vypis}

\subsubsection{Generov�n� skript�}

Poprv� zad�me tuto sekvenci:%$

\begin{itemize}
\item {\tt \$\ libtoolize} --- vytvo�� {\tt libtool} a~dal��
      pomocn� soubory
\item {\tt \$\ automake -a} --- 
      vygeneruje {\tt Makefile.in}. Volba {\tt -a} nav�c zajist�
      p�id�n� chyb�j�c�ch soubor�
\item {\tt \$\ aclocal} --- 
      p�id� makra {\tt AM\_INIT\_AUTOMAKE} a~{\tt AM\_PROG\_LIBTOOL}
      do�{\tt aclocal.m4}.
\item {\tt \$\ autoconf} ---
      vygeneruje {\tt configure} z~{\tt configure.in}.
\end{itemize}

Pokud jen modifikujeme nap�. {\tt Makefile.am}, pak sta�� zadat:

\begin{verbatim}
$ automake; aclocal; autoconf;
\end{verbatim}%$

To u� v�ak nen� nezbytn� nutn�: {\tt Makefile} obsahuje v�echny
pot�ebn� z�vislosti a~v�echny konfigura�n� soubory se znovu vygeneruj�
automaticky.

\subsection{Kompilace}

\begin{itemize}
\item {\tt \$\ ./configure} ---
      vytvo�� {\tt Makefile}. Pokud se objev� chybov� hl�en�
      {\tt AM\_INIT\_AUTOMAKE: File not found}, znamen� to, �e
      {\tt aclocal.m4} toto makro neobsahuje. Ujist�te se, �e v�echny
      t�i bal�ky byly instalov�ny se stejn�m prefixem.
\item {\tt \$\ make} ---
      zkompiluje program {\tt hell} a~knihovnu {\tt libhello}
\item {\tt \$\ ./hell} ---
      spust� dynamicky linkovan� hell
\item {\tt \$\ ./hell.static} ---
      spust� staticky linkovan� hell
\item {\tt \$\ make install} ---
      nainstaluje zkompilovan� programy a~knihovny
\item {\tt \$\ make dist} ---
      vygeneruje bal�k vhodn� pro distribuci zdrojov�ch text�.  Ke
      kompilaci tohoto bal�ku nejsou programy {\tt autoconf}, {\tt
      automake}, a~{\tt libtool} v�bec pot�ebn� --- ty slou�� pouze
      k~vytvo�en� konfigura�n�ch skript�.
\item {\tt \$\ make dist-all} ---
      vygeneruje kompletn� arch�v
\item {\tt \$\ make clean} ---
      vy�ist� projekt 
\end{itemize}

\subsection{Z�v�r}

Tento p��sp�vek jen nast�nil mo�nosti, kter� tyto programy
nab�zej�. Pokud se rozhodnete je pou��vat, zcela jist� v�m budou
k~u�itku referen�n� {\tt info} manu�ly
\citenourl{David MacKenzie}{Autoconf --- Creating Automatic
Configuration Scripts}, \citenourl{David MacKenzie, Tom Tromey}{GNU
Automake} a~\citenourl{Gordon Matzigkeit}{GNU Libtool}.  Bu�te
p�ipraveni na�r�zn� probl�my a~�skal�, kter� v�s mohou potkat. Zvl�t�
{\tt automake} je n�kdy pon�kud tvrdohlav� a~nezbyde v�m, ne� se
p�izp�sobit jeho stylu. Jako studijn� materi�l v�ele doporu�uji
skripty z~jin�ch program� (GIMP, gtk, SANE).\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Tvorba RPM bal�k� --- pokra�ujeme}
\label{rpm}

\autor{Jan Kasprzak, 25. srpna 1998}

V~minul�ch ��slech Linuxov�ch novin jsme si uk�zali z�kladn� sekce
{\tt spec}-souboru. Nyn� budeme pokra�ovat popisem skript�, kter� ve
{\tt spec}-souborech mohou b�t.

\subsection{Instala�n� skripty}

\looseness=1
Jak ji� bylo n�kolikr�t �e�eno, RPM bal�k m��e obsahovat skripty,
kter� se spust� p�ed instalac� bal�ku, po instalaci, p��padn� p�ed
nebo po odinstalov�n� bal�ku. V�echny tyto skripty dostanou od RPM
prom�nnou prost�ed� {\tt RPM\_INSTALL\_PREFIX} ud�vaj�c�, do�kter�ho
adres��e se bal�k instaluje. Tato prom�nn� se pou�ije pouze u~bal�k�,
kter� nemus� b�t instalov�ny v~pevn� adres��ov� struktu�e (mohou bez
probl�m� b�t nap��klad v~{\tt /usr/local} nebo v~{\tt /opt}.
P��slu�n� skripty jsou ve�{\tt spec}-souboru uvozeny jedn�m
z~n�sleduj�c�ch slov podle toho, o~kter� typ jde:

\begin{verbatim}
%pre
%preun
%post
%postun
\end{verbatim}

Samoz�ejm� ne v�echny �ty�i skripty je nutno uv�st. Tyto skripty jsou
jen jako v�pomoc pro p��pady, kdy nesta�� pouze nainstalovat soubory
dan�ho bal�ku, ale je je�t� pot�eba ud�lat n�co dal��ho (nap��klad
p�idat resp. odebrat z�znam z~{\tt /etc/shells}, jde-li o~bal�k
shellu).

Pokud upgradujeme dan� bal�k, jsou spu�t�ny nejprve
pre- a~post-instala�n� skripty z~nov� verze, a~potom teprve
pre- a~post-uninstall skripty ze star�� verze, jak lze poznat nap��klad
naps�n�m mal�ho RPM bal�ku s~testovac�mi v�pisy v~t�chto skriptech:

\begin{verbatim}
# rpm -U a-2-2.noarch.rpm
Here is a pre v2 script 2.
Here is a post v2 script 2.
Here is a preun v1 script 1.
Here is a postun v1 script 1.
\end{verbatim}

\subsection{Jak rozpoznat instalaci od upgrade?}

�asto ve�zmi�ovan�ch skriptech chceme vykonat n�jakou akci pouze
v~p��pad�, kdy jde o~prvn� instalaci dan�ho bal�ku (tedy nikoliv p�i
upgradu). P��kladem m��e b�t p�id�n� (pseudo)u�ivatele, kter�ho n�
bal�k pot�ebuje ke�sv� �innosti. V~tomto konkr�tn�m p��pad� je sice
mo�n� pod�vat se do�{\tt /etc/passwd}, jestli tam u� tento u�ivatel
nen�, ale jsou i~p��pady, kdy tato detekce nen� mo�n� nebo je p��li�
n�ro�n�. Pro p��klad nemus�me chodit daleko --- sta�� vz�t
post-uninstall skript, ve�kter�m chceme zru�it u�ivatele z~{\tt
/etc/passwd}. Jak zjistit, jestli jde o~skute�n� ru�en� bal�ku, nebo
jestli se jen post-uninstall skript vol� proto, �e je syst�m pr�v�
upgradov�n na�nov�j�� verzi bal�ku?

Syst�m RPM pro tento p��pad nab�z� skript�m ��seln� argument (dostupn�
ze shellu jako {\tt \$1}), kter� ��k�, kolik instanc� dan�ho bal�ku
bude v~syst�mu po dokon�en� akce nad aktu�ln�m bal�kem. V~p��pad�
instalace tedy {\tt \%post} a~{\tt \%pre} skripty dostanou parametr 1,
zat�mco v~p��pad� upgrade je parametr 2. Obdobn� skripty {\tt
\%postun} a~{\tt \%preun} dostanou v~p��pad� upgrade parametr 1,
zat�mco v~p��pad� �pln�ho ru�en� bal�ku parametr 0. N� testovac�
bal�k z~p�edchoz�ho odstavce vypisuje parametr skriptu jako posledn�
slovo.  Pokud tento bal�k odinstalujeme, dost�v�me n�sleduj�c�:

\begin{verbatim}
# rpm -e a
Here is a preun v2 script 0.
Here is a postun v2 script 0.
\end{verbatim}

\subsection{Verifika�n� skript}

Tento skript, uvozen� slovem {\tt \%verifyscript} je spou�t�n
v~okam�iku kontroly dan�ho bal�ku ({\tt rpm -V}). Je zde mo�n� nap��klad
kontrolovat, jestli je spr�vn� konfigurace bal�ku, jestli je
(nap��klad) n� shell uveden v~{\tt /etc/shells}, jsou-li vytvo�eni
p��slu�n� u�ivatel� a~podobn�.

Verifika�n� skript, stejn� jako �ty�i p�edchoz� skripty, je spou�t�n
programem {\tt /bin/sh}. Pokud chceme m�t skript v~jin�m programovac�m
jazyce, je mo�no pou��t p�ep�na� {\tt-p interpret}, nap��klad:

\begin{verbatim}
%pre -n /usr/bin/perl
print "Just another perl hacker.\n";
\end{verbatim}

\subsection{Spou�t�}

Pod slovem v~nadpisu se skr�v� p�eklad anglick�ho \emph{triggers}.
Z~datab�z� zn�me spou�t� jako procedury, kter� se spust� v~okam�iku
modifikace n�kter� ur�it� datab�zov� polo�ky. V~RPM je tato vlastnost
horkou novinkou (a~nen� ani pops�na v~Maximum RPM). Podrobn� informace
se lze do��st na�adrese
\citeurl{Triggery v~RPM}{http://www.rpm.org/support/RPM-Changes-6.html}.

Co jsou spou�t� a~k~�emu je lze pou��t? Jde o~skript, kter� je
sou��st� n�jak�ho bal�ku, a~kter� se spou�t� v~p��pad�, �e syst�m RPM
n�jak�m zp�sobem manipuluje (instaluje, upgraduje, ru��) s~jin�m
bal�kem. Ve�zmi�ovan� dokumentaci je p��klad, kdy n�jak� hypotetick�
po�tovn� klient m� sv�j symbolick� link {\tt /etc/mymail/mymailer},
kter� ukazuje na�p��slu�n� MTA (mail transport agent), nainstalovan�
v~syst�mu. A~jsou zde uvedeny dv� spou�t� --- jedna pro bal�k
{\tt sendmail} \citeurl{Sendmail}{http://www.sendmail.org} a~druh� pro
{\tt vmailer} \citeurl{Vmailer}{http://www.porcupine.org/vmailer}.
A~tyto skripty maj� pr�v� na�starost vytv��en� onoho linku.

Tento p��klad je dosti um�l�, proto�e po�tovn� klienti um�j� bu�to SMTP,
nebo um�j� nov� mail d�t na�vstup programu {\tt /usr/sbin/sendmail}.
A~MTA zase obsahuje program, link nebo skript {\tt /usr/sbin/sendmail},
kter� slou�� pro odesl�n� po�ty, a~MTA um� i~SMTP. J� jsem s~�sp�chem
pou�il spou�� v~bal�ku {\tt groff-latin2}, kdy je pot�eba modifikovat
konfigura�n� soubor {\tt groffu}.  Tak�e m�m skript, kter� toto ud�l�
v�dy, kdy� je {\tt groff} instalov�n nebo upgradov�n. Mechanismus
spou�t� se v�bec dob�e hod� pro bal�ky, kter� modifikuj� soubory,
pat��c� jin�m bal�k�m.

Jak se pou�ije spou��? Jde o~shellovsk� (nebo i~jin�) skript, uvozen�
jedn�m z~n�sleduj�c�ch slov:

\begin{verbatim}
%trigger
%triggerin
%triggerun
%triggerpostun
\end{verbatim}

Za�t�mto slovem jsou uvedeny p�ep�na�e (nap��klad {\tt -p interpret}),
n�sleduj� dva m�nusy ({\tt -{}-}) a~pak specifikace tzv. \uv{c�lov�ho}
bal�ku, tedy bal�ku, pro kter� se m� dan� spou�� spustit. Specifikace
m� stejnou syntaxi jako tag {\tt Requires:} v~hlavi�ce {\tt
spec}-souboru.  M�j bal�k {\tt groff-latin2} nap��klad m� tuto spou��:

\begin{verbatim}
%trigger -- groff
\end{verbatim}

Slo�it�j�� spou�� by mohla b�t uvozena takto:

\begin{verbatim}
%trigger -p /usr/bin/perl -- bal�k2 >= 2.1.117
\end{verbatim}

\subsection{Kdy se spou�� spust�?}

\begin{itemize}
\item \%trigger
\begin{itemize}
\item zdrojov� bal�k se instaluje nebo upgraduje a~c�lov� je ji� nainstalov�n.
Spou�t� se po {\tt\%post} skriptu (nov�ho) zdrojov�ho bal�ku.
\item c�lov� bal�k se instaluje nebo upgraduje a~zdrojov� je ji� nainstalov�n.
Spou�t� se po {\tt\%post} skriptu (nov�ho) c�lov�ho bal�ku.
\end{itemize}

\item \%triggerin
\begin{itemize}
\item je ekvivalentn� s~{\tt \%trigger}
\end{itemize}

\item \%triggerun
\begin{itemize}
\item zdrojov� bal�k se pr�v� ru�� nebo upgraduje a~c�lov� je nainstalov�n.
      Spou�t� se p�ed {\tt \%preun} skriptem (p�vodn�ho) zdrojov�ho bal�ku.
\item c�lov� bal�k se ru�� nebo upgraduje a~zdrojov� je nainstalov�n.
      Spou�t� se p�ed {\tt \%preun} skriptem (p�vodn�ho) c�lov�ho bal�ku.
\end{itemize}

\item \%triggerpostun
\begin{itemize}
\item c�lov� bal�k se ru�� nebo upgraduje a~zdrojov� je nainstalov�n.
      Spou�t� se po {\tt \%postun} skriptu (p�vodn�ho) c�lov�ho bal�ku.
\end{itemize}
\end{itemize}

V~p���t� ��sti si pov�me o~tom, jak vytv��et seznam soubor� obsa�en�ch
v~RPM bal�ku a~tak� o~problematice maker.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Maj� tu���ci �lut� nohy?}
\label{zlutenohy}

\autor{Pavl�na Vavre�kov�, 2. z��� 1998}

V~pond�l� 3. 8. 1998 prob�hla dal�� akce CZLUGu s~n�zvem \uv{Maj�
tu���ci �lut� nohy?}. Na�programu byla n�v�t�va ZOO Le�n�, kde letos
v~kv�tnu otev�eli novou expozici tu���k� Humboldtov�ch. C�lem --- jak
s�m n�zev akce napov�d� --- bylo podrobn�ji se sezn�mit se �ivotem
t�chto tvor� a~hlavn� zjistit, jak je to vlastn� s~barvou tu�����ch
nohou (probl�m, kter� ned� sp�t Pavlu Jan�kovi).

% Obr�zek Tucnaci5
\Obr{Tucnaci5}
Jednalo se o~prvn� akci v~historii CZLUGu, kde byla p�evaha n�n�ho
pohlav�, a~to v~pom�ru 3:2. V�ichni ��astn�ci byli vybaveni kultovn�mi
linuxov�mi tri�ky.  V�jimku tvo�ila jedna sle�na, kter� m�la tri�ko
s~obrovskou ��bou a~n�pisem \uv{rrrriiiib�t} (to pr� d�laj� anglick� ��by).

\Obr{Tucnaci1}

Hned po vstupu do�ZOO jsme se sna�ili dostat co nejrychleji k~tu���k�m.
Jen zb�n� jsme si prohl�dli lachtany a~plni o�ek�v�n�
pokra�ovali ve�sm�ru �ipek s~obr�zky tu���k�.  \uv{\ldots ji� zd�lky
bylo sly�et mumlav� zvuky, kter� postupn� s�lily, a~za�chv�li u� jsme
spat�ili tu���ky skanduj�c� \uv{Linux} a~v�taj�c� Yenyu.}  (P�evzato
od Rohl�ka). No dob�e, trochu si vym��l�m, ve�skute�nosti to bylo
jinak: tu���ci rozpa�it� p�e�lapovali a~vyd�vali zvuky, kter� podle
p��tomn�ch linuxov�ch odborn�k� vzd�len� p�ipom�naly slovo \uv{Linux}.

% Obr�zek Tucnaci1.gif

Po na�em p��chodu se v�ichni tu���ci zdr�ovali v~zadn� ��sti v�b�hu,
kde je vybudov�n syst�m jeskyn�k s~rozpra�ova�i.  D�le maj� tu���ci
k~dispozici dva baz�ny spojen� pot��kem.  Sou��st� horn�ho baz�nu je
dokonce mini-vodop�d.  Doln� baz�n se nach�z� nad �rovn� ter�nu a~m�
pr�hledn� st�ny, tak�e za�optim�ln�ch podm�nek je v~n�m mo�no
pozorovat chov�n� tu���k� pod vodou.  My jsme bohu�el takov� �t�st�
nem�li --- na�doln� baz�n toti� sv�tilo slun��ko, tak�e tu���ky ani
nenapadlo se do�n�j p�emis�ovat.  Kdy� u� jsme st�li u~v�b�hu
dostate�n� dlouho, za�alo to b�t tu���k�m podez�el�. Uspo��dali proto
n�co jako mal� sn�m, kter�mu velel star�� pelichaj�c� tu���k.

% Obr�zek Tucnaci2
\Obr{Tucnaci2}
Mezit�m co se tu���ci radili, do�etli jsme se, �e byli darov�ni
cury�skou ZOO, a~�e jsou velmi citliv� na�zne�i�t�n� ovzdu��.

Po chv�li se v�ichni tu���ci za�ali pl�cat k��dlem do��ela --- spr�vn�
pochopili, �e se od nich je�t� n�co o�ek�v�. Tak�e n�m za�ali
p�edv�d�t sv� plaveck� a~pot�p��sk� um�n�. A~my jsme si mohli
poznamenat dal�� poznatek ze �ivota tu���k�: plovouc� tu���k vypad�
jako ka�ena a~um� se d�sn� hluboko pot�p�t.

% Obr�zek Tucnaci4.gif
P�edstaven�, kter� pro n�s tu���ci p�ipravili, bylo zavr�eno krmen�m.
Krmen� tu���k� prob�h� tak, �e p�ijde �lov�k s~miskou ryb a~sna�� se
je rovnom�rn� rozd�lit mezi v�echny z��astn�n� tu���ky. Tu���k
zachytiv�� rybu s~n� v�dy sko�� do�baz�nu.  Mo�n� si chce namluvit, �e
ji skute�n� ulovil ve�vod�, mo�n� se nehodl� d�lit s~ostatn�mi. T�ko
��ct.  Tento rys tu�����ho �ivota si je�t� zaslou�� hlub�� pozorov�n�.
Jeden z~tu���k� se projevil jako zvlṻ inteligentn�, kdy� se sna�il
ostatn� p�elst�t t�m, �e nejprve sko�il do�vody bez rybi�ky a~pot�
vylezl na�b�eh p��mo u~z��zence s~potravou.  Iluze inteligence by byla
dokonal�, kdyby se tak v��e zm�n�n� tu���k nechoval je�t� p�l hodiny
pot�, co �lov�k s~krmen�m ode�el.

% Obr�zek Tucnaci3

Te�, jen tak pro zaj�mavost --- srovn�n� pra�sk�ch tu���k� (ty jsme
nav�t�vili loni) se�zl�nsk�mi: tu���ci v~Praze vyl�zaj� z~vody tak, �e
za�nou d�sn� rychle plavat proti b�ehu, tak�e to vypad�, jakoby z~vody
vyb�hli. Do�vody se dostanou tak, �e tam prost� rovnou sko��.  Tu���ci
v~Le�n� si p�i vyl�z�n� z~vody pom�haj� k��dlem. Do�vody se vz�jemn�
shazuj�.  No jo, jin� kraj, jin� mrav.

\Obr{Tucnaci3}

A~k~jak�mu z�v�ru jsme dosp�li? V�t�ina ��astn�k� se shodla na�tom, �e
mezi n�m zn�m�mi tu���ky p�evl�daj� tu���ci se �lut�ma nohama. Tuto
hypot�zu potvrdil i~tu���k, kter�ho jsme minul� t�den objevili
v~brn�nsk�m Tescu: je sice ply�ov�, ale je velk� a~m� �lut� nohy!!!
(Yenya mi ho nechce koupit, proto�e se boj�, �e by ho vytla�oval
z~betle \revsmile)\KC

\Obr{Tucnaci4}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Jak� byl Linux InstallFest?}
\label{installfest}

\autor{Pavel Jan�k ml., 31. srpna 1998}

Tak jak� byl? �navn� a~zaj�mav�, zni�uj�c� a~pou�n�, dlouh� i~kr�tk�.
Proto�e se jeho organiz�to�i z~n�j je�t� nevzpamatovali,
p�in��me v�m pouze fotografie, kter� Linuxov�m novin�m laskav�
poskytl pan Mirek Prokop. Ostatn� pokud si chcete p�e��st v�ce
o~pr�b�hu cel� akce, sta�� zabloudit na�Sv�t Namodro
\citeurl{Sv�t Namodro}{http://svet.namodro.cz} a~chv�li hledat.

% Obr�zek Prednaska.png
\Obr{Prednaska}
V~�vodu cel� akce jsme mohli vyslechnout p�edn�ku Jana \uv{Yenyi}
Kasprzaka o~hlasov�ch modemech.

% Obr�zek Trida.png
A~pot� se to v�e zvrhlo --- instalovalo se a~instalovalo a~instalovalo.

% Obr�zek Pdm.png
\Obr{Pdm}
P�edstavitel projektu Debian CZ/SK \citeurl{Debian
CZ/SK}{http://www.debian.cz} Milan Zamazal neskr�van� p�zuje s~pr�v�
vyp�len�m CD�kem s~nejnov�j�� po�e�t�nou distribuc� opera�n�ho syst�mu
Red~Hat Linux~5.1, kterou doma ihned rozebere a~v�e jist� dopln� do
projektu Debian CZ/SK.

% Obr�zek Yenya.png
\Obr{Trida}
\Obr{Yenya}
Na�konci akce toho ale n�kte�� ��astn�ci m�li opravdu dost --- Yenya
se nap�. modlil a~v~duchu si opakoval jedinou v�tu: \uv{CENZUROV�NO
--- {\tt kas@informatics.muni.cz}}.

V�ce v�m toho ale opravdu neprozrad�m, m�li jste tam b�t s~n�mi
\smile. Tak�e snad p���t�.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Z druh�ho b�ehu}
\label{druhybreh}

\autor{Miroslava Kr�tk�, 2. z��� 1998}

Byla to p�kn� letn� sobota. Slunce sv�tilo a~n�kolik nad�enc� se po
poledni bl��ilo k~fakult� informatiky MU. N�kte�� jen nesm�le
nakukovali do�otev�en� u�ebny, kde je�t� prob�haly posledn� �pravy, ti
m�n� stydliv� se zeptali a~mohli si pak vybrat to nejlep�� m�sto pro
sebe, p��padn� pro sv�ho hranat�ho mil��ka (pros�m p�ny o~prominut�
m�ho pon�kud neodborn�ho term�nu).

Kr�tce po jedn� si n�v�t�vn�ci vyslechli zaj�mavou p�edn�ku (tedy
alespo� podle v�razu jejich tv��� se zd�lo, �e je zaj�m�). A~potom se
instalovalo. Tu byla pot�eba disketka, tu s��ov� karta, jinde zase
chyb�l �roubov��ek, n�komu sta�ila jen mal� rada. V�e bylo k~zap�j�en�
pouze za�podpis, rady poskytovan� Pavlem Jan�kem a~Yenyou i~bez
podpisu.

Otev�en� knihkupectv� sk�talo mo�nost zakoupen� odborn�ch publikac�,
CD, ale tak� tri�ek s~tu���ky. Ta m�la velk� �sp�ch. N�kdo n�m dokonce
na�chvilku poodhalil svoji hru� (nebo se k~n�m naopak oto�il z�dy),
jen aby m�l co nejd��ve toto roztomil� �lutonoh� zv���tko bl��e sv�mu
srdci. Jin� byl na�tri�ko dokonce tak hrd�, �e si ho obl�kl obr�cen�
(asi proto, aby m�l v�t��ho tu���ka vp�edu).

Z�v�rem bych si dovolila mal� osobn� poznatek. Na�po��tku m�ho
st�edo�kolsk�ho studia jsem si myslela, �e do�po��ta�ov� u�ebny se
\uv{vejde} jen tolik poslucha��, pro kolik jsou zde kl�vesnice. Studia
na�gymn�ziu a~vysok� �kole tento m�j n�zor velmi ovlivnila. D�le�it�
je po�et �idl�, nez�visle na�tom, kolik p�r� o�� potom sleduje (nebo
se o~to sna��) jeden monitor. Nyn� je mi to ji� jasn�j��. Po��ta�ov�
u�ebna je toti� nafukovac�. Pokud nesta�� �idle, odn�kud se donesou;
st�l tak� nen� pot�eba, v�dy� notebook klidn� \uv{posed�} na
kl�n�\ldots

To� m� z�itky z~Linux InstallFestu.\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Zasm�li jsme se!}
\label{zasmali}

\autor{Pavel Jan�k ml., 31. srpna 1998}

Samoz�ejm� i~o~pr�zdnin�ch je lidsk� humor (u~n�s se tomu ��k� sranda)
sou��st� ka�dodenn� p��tomnosti na�S�ti a~proto bych se s~v�mi ---
�ten��i Linuxov�ch novin --- r�d pod�lil o~�sm�vn� okam�iky str�ven�
nad moj� po�tovn� p�ihr�dkou.

Za�n�me v~dom�c�ch luz�ch a~h�j�ch \ldots Asi nejzaj�mav�j��
signaturou v~konferenci \emph{linux@muni.cz} je:

\begin{quote}
Je libo Win98? --- Ne, d�ky, po�k�m si na�Win00.
\quoteautor{signatura Ivo ���ka}
\end{quote}

Ale samoz�ejm� i~v~zahrani�� pou��vaj� signatury:

\begin{quote}
LinuxScan report : Win95 virus found on boot sector of primary partititon.\\
Severity : medium, it could halt your computer at random time, corrupt your
           datas and hard disk or try to be reinstalled every two days.
Disinfectant exists, apply (Yes/Yes/Yes) ?
\quoteautor{Pascal A.~Dupuis v~linux-kernel@vger.rutgers.edu}
\end{quote}

Pokra�ujme pouze takovou malou zaj�mavost�, kterou m��ete tak�
potkat. Richard B.~Johnson, aktivn� to �ten�� listu
\emph{linux-kernel@vger.rutgers.edu}, si pov�iml, �e se mu pon�kud
z�hadn� zmen�uje dostupn� diskov� prostor na�jeho pracovn� stanici. Po
dlouh�m p�tr�n� zjistil n�sleduj�c� v�c:

\begin{verbatim}
# ls -la /var/spool/mail
total 71010
drwxrwxrwx  2 ...       1024 Aug  5 09:22 .
drwxr-xr-x 19 ...       1024 Jul 22 13:29 ..
-rw-------  1 ... 1972425472 Aug  5 09:23 ftp
-rw-------  1 ...          0 Jul 13 12:51 johnson
-rw-------  1 ...          0 Aug  5 09:20 root
\end{verbatim}

\noindent Inu spamme�i jsou nevypo�itateln�\ldots

J� jsem m�l v~posledn� dob� tak� podobnou p��hodu --- Du�an Dobe�
(autor �achov�ho programu {\tt phalanx}) si mi st�oval, �e na�na�em
�koln�m serveru ji� nejdou spustit ��dn� dal�� aplikace ({\tt Unable
to load interpreter} jste ji� jist� tak� n�kdy vid�li). Po drobn�m
zkoum�n� jsem zjistil, �e program Netscape Communicator se ne
dostate�n� dob�e vyrovnal s~m�m po�adavkem na�sta�en� ofici�ln�ho
image Debianu 2.0 ({\tt binary-i386.raw}) o~velikosti n�co kolem
600~MB a~t�sn� p�ed t�m, ne� byl korektn� ukon�en, spot�ebov�val 87\%
procesorov�ho �asu a~613~MB pam�ti.

Na�adresu konference \emph{lesstif@hungry.com} v�novanou
Lesstifu (Pro nezasv�cen�: jedn� se o~free knihovnu p��pravk�,
kter� si klade za�c�l b�t kompatibiln� s~komer�n� knihovnou Motif
jak na��rovni zdrojov�ch text�, tak na��rovni vzhledu v�sledn�ch
aplikac�.) poslal n�jak� t�m�� ��len� Ameri�an vystupuj�c� pod
pseudonymem {\tt Indl} n�sleduj�c� p��sp�vek.


\begin{quote}
why another similar widget set? why not something new, something you
have not copied from an~american? you have a~pompus attitude towards
americans, why copy them? why? why? why? I~am an american, (your web
site states you are some sort of hungarian effort,) I~am tired of seeing
the same widgets day in and day out, programming with the same *****
widget sets, etc\dots{} What is the point?

You are quite strange to be only copying some one else's work, ya know.
\vskip\bas\linka
Pro� dal�� takov� soubor p��pravk�?
Pro� n�co dal��ho, co jste okop�rovali od Ameri�ana?
Kdy� zauj�m�te k~Ameri�an�m takov� postoj, pro� je kop�rujete?
Pro�? Pro�? Pro�?
Jsem Ameri�an (v� webov� server na�v�s prozrazuje, �e va�e snahy
maj� ko�eny v~Ma�arsku) a~jsem unaven z~toho, �e den co den vid�m
ty sam� p��pravky, pou��v�m ty sam� ***** p��pravky, atd.
Co to je za�n�pad?

Sta��te jen na�to, abyste kop�rovali n��� d�lo, co.
\end{quote}
Blahoslaveni chud� duchem. Jeden z~nejaktivn�j��ch p�isp�vatel�
Jon Christopher v�ak odpov�d�l naprosto fam�zn�.
Jen m� p�itom napadlo, jak� konce by vzal podobn� �tok veden�
proti Linuxu na�\emph{linux@muni.cz}.

\begin{quote}
You're absolutely right.  We don't want to be doing this, but we're being
held prisoner by the Hungarian mafia, and forced to write widget sets.
Please help us regain our freedom by contributing code to our effort.
And we don't *want* to be pompus to Americans, but the Mafia doesn't like
Americans and forces us to say those awful things.
\vskip\bas\linka
M�te naprosto pravdu. My to d�lat nechceme, ale jsme v~zajet� ma�arsk�
mafie, kter� n�s nut� ps�t knihovny p��pravk�.  Pros�me, pomozte n�m
z�skat svobodu t�m, �e podpo��te na�e d�lo n�jak�m k�dem.  *Nechceme*
b�t proti Ameri�an�m, ale mafie je nesn�� a~nut� n�s ��kat takov�
o�kliv� �e�i.
\end{quote}

Kdy� jsem �etl jakousi konferenci, do�kter� p�i�el dopis se subjectem
\uv{Windows 98 Source code released}, nev��il jsem (\ref{winsourcecode}). Kdy�
jsem si ale porovn�val zdrojov� text s~v�sledkem, uv��il jsem\ldots

Pokud sledujete v�voj linuxov�ho j�dra a~pr�b�n� si kompilujete nov�
kernely pro sv� dvou �i v�ceprocesorov� stroje (pokud tento text n�kdo
takov� �te, r�d bych jej po��dal o~zam�stn�n� \smile) jist� jste si
pov�imli, �e v�m j�dro 2.1.112 nechodilo zrovna tak, jak byste si
p�edstavovali. Inu, co v�e se mu�e st�t, kdy� pou��v�te metodu
\emph{cut-and-paste} pro patchov�n� kernelu vysv�tlil Linus Torvalds
takto:

\begin{quote}
That should get 2.1.112 working again (and should teach me not to do
final touch-ups on code after I've tested it but before I~release it
even if those touch-ups look obvious, but it's hard to teach an old
dog new tricks\ldots)
\vskip\bas\linka
To by m�lo verzi 2.1.112 op�t zprovoznit (a~m�lo by mne to pou�it, �e
se u� nem�m dot�kat k�du, kter� jsem u� otestoval, ale je�t�
nezve�ejnil, i~p�esto, �e tyto \uv{doteky} mohou b�t z�ejm�, ale u�it
star�ho psa nov�m kousk�m je obt��n�\ldots)
\quoteautor{Linus Torvalds ve�vysv�tlen� chybi�ky v~2.1.112}
\end{quote}

A~kdy� u� jsme u~Linuse, tak v�m doporu��m p�e��st si jeden �l�nek
\citeurl{ComputerWorld: Meet Linus
Torvalds}{http://www.computerworld.com/home/features.nsf/all/980817linus},
kde je Linus citov�n:

\begin{quote}
I~knew I~was the best programmer in the world.\\
Every 21-year-old programmer knows that.\\
``How hard can it be, it's just an operating system?''\\
\linka
V�d�l jsem, �e jsem nejlep��m program�torem na�sv�t�.\\
Ka�d� program�tor ve�v�ku 21 let to v�.\\
\uv{Jak to m��e b�t t�k�, kdy� je to jen opera�n� syst�m?}
\quoteautor{Linus Torvalds}
\end{quote}

Ale to byla pouze takov� mal� odbo�ka co se m��e a~nem��e st�t. P���t�
ji� snad budete tak� na�S�ti a~p�isp�jete sv�mi dopisy i~do�t�to
rubriky Linuxov�ch novin.\KC


\begin{vypis}[dt]
\begin{verbatim}
/* The Win98 source code has been released recently; Per MicroSoft
   CopyRights, you can only view the code, but should not change it! */
         /*   TOP SECRET Microsoft(c)  Code
              Project: Chicago(tm)
              Projected release-date: Summer 1994   */
          #include "win31.h"
          #include "win95.h"
          #include "evenmore.h"
          #include "oldstuff.h"
          #include "billrulz.h"
          #define INSTALL = HARD
	  char make_prog_look_big[1600000];
          void main()
          {
              while(!CRASHED)
              {
                  display_copyright_message();
                  display_bill_rules_message();
                  do_nothing_loop();
                  if (first_time_installation)
                  {
                      make_50_megabyte_swapfile();
                      do_nothing_loop();
                      totally_screw_up_HPFS_file_system();
                      search_and_destroy_the_rest_of_OS/2();
                      hang_system();
                  }
                  write_something(anything);
                  display_copyright_message();
                  do_nothing_loop();
                  do_some_stuff();
                  if (still_not_crashed)
                  {
                      display_copyright_message();   do_nothing_loop();
                      basically_run_windows_3.1();   do_nothing_loop();
                      do_nothing_loop();
                  }
              }
	      if (detect_cache())
                  disable_cache();
	      if (fast_cpu())
              {
                  set_wait_states(lots);       set_mouse(speed, very_slow);
                  set_mouse(action, jumpy);    set_mouse(reaction, sometimes);
              }
              /* printf("Welcome to Windows 3.11"); */
              /* printf("Welcome to Windows 95"); */
	     printf("Welcome to Windows 98");
	      if (system_ok())
                   crash(to_dos_prompt);
              else
                  system_memory = open("a:\swp0001.swp", O_CREATE);

              while(something)
              {
                  sleep(5);  get_user_input();
                  sleep(5);  act_on_user_input();
                  sleep(5);
              }
              create_general_protection_fault();
          }

\end{verbatim}
\caption{Windows 98 Source Code}
\label{winsourcecode}
\end{vypis}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{A co p���t�?}
\label{acopriste}

\autor{Pavel Jan�k ml., 13. z��� 1998}

Jak jist� v�te, za�n�kolik m�lo t�dn� je zde v�stava INVEX, kter� se
kon� v~Brn�. V~p���t�m ��sle se v�m tedy pokus�me p�edstavit alespo�
n�kolik produkt�, kter� na�INVEXu nab�zeli vystavovatel� pro Linux
(tajn� douf�m, �e se n�m poda�� z�skat demo verze v�ech).

Cht�li bychom v�m tak� uk�zat, jak je mo�n� i~na�Linuxu vytv��et
kvalitn� dokumenty, kter� mohou ��st nejenom u�ivatel� Linuxu, ale
tak� nap�. Windows �i Macintosh�. Ano, uk�eme v�m program {\tt
pdf\TeX}, jeho� autorem je Han The Thanh.

Samoz�ejm� budou tak� pokra�ovat v�echny seri�ly a~doufejme, �e toho
bude mnohem v�ce.
\KC

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\OLN
\section{Linuxov� noviny a~jejich ���en�}
\label{OLN}

\autor{}

Linuxov� noviny vyd�v� �esk� sdru�en� u�ivatel� opera�n�ho syst�mu
Linux~\citeurl{�esk� sdru�en� u�ivatel� opera�n�ho syst�mu
Linux}{http://www.linux.cz/czlug} pro sv� p��znivce
a~sympatizanty. Vlastn�kem autorsk�ch pr�v k~tomuto textu jako celku
je Pavel Jan�k~ml. \hbox{(\PJemail)}.  Autorsk� pr�va k~jednotliv�m
�l�nk�m z�st�vaj� jejich autor�m.

Tento text m��e b�t ���en a~ti�t�n bez omezen�. Pokud pou�ijete ��st
n�kter�ho �l�nku zde uve�ejn�n�ho v~jin�ch d�lech, mus�te uv�st jm�no
autora a~��slo, ve�kter�m byl �l�nek uve�ejn�n.

Linuxov� noviny jsou otev�eny ka�d�mu, kdo by cht�l na�im �ten���m sd�lit
n�co zaj�mav�ho. P��sp�vky (ve�form�tu �ist�ho textu v~k�dov�n� ISO~8859-2)
pos�lejte na�adresu \citeurl{Adresa redakce}{mailto:noviny@linux.cz}. Autor
nem� n�rok na�finan�n� odm�nu a~souhlas� s~podm�nkami uveden�mi v~tomto
odstavci.  Vydavatel� si vyhrazuj� pr�vo rozhodnout, zda V� p��sp�vek
uve�ejn�, �i nikoli.

Registrovan� zn�mky pou�it� v~tomto textu jsou majetkem jejich
vlastn�k�.

Cht�l bych pod�kovat Fakult� informatiky Masarykovy university v~Brn�,
INET, a.s., Juraji Bedn�rovi, Milanu �ormovi za�poskytnut� diskov�ho
prostoru pro Linuxov� noviny.

Linuxov� noviny m��ete naj�t
na�akademick� s�ti TEN-34 CZ \citeurl{Linuxov� noviny
na�s�ti TEN 34-CZ}{ftp://ftp.fi.muni.cz/pub/linux/local/noviny},
na�s�ti IBM Global Network na�adrese \citeurl{Linuxov� noviny
na�s�ti IBM Global Network}{ftp://ftp.inet.cz/pub/People/Pavel.Janik/noviny},
na�serveru Gymn�zia V�de�sk� v~Brn� \citeurl{Linuxov� noviny
na�komer�n� s�ti CESNET}{http://www.gvid.cz/linux/noviny/},
na�serveru �asopisu Net��ik \citeurl{Slovensk� zrcadlo Linuxov�ch
novin}{ftp://netacik.sk/pub/linux/cz-noviny}, kter� je p�ipojen do
slovensk�ho SIXu, p��padn� na�serveru Mathew
\citeurl{Linuxov� noviny --- Mathew}{http://www.mathew.sk/noviny}.

Linuxov� noviny jsou k~dispozici tak� ve�form�tu HTML na
adrese \citeurl{Linuxov� noviny ve�form�tu
HTML}{http://www.linux.cz/noviny}.\KC

\KOLN

\tableofcontents

\bbye
