Download: Krecipes

Transkrypt

Download: Krecipes
LINUX USER
Krecipes
Przepisy kulinarne w Krecipes
Gotujemy z Krecipes!
Nie musimy już przekopywać się przez książki kucharskie, aby wywołać
uśmiech zadowolenia gości po wykwintnym obiedzie. Program Krecipes
umożliwia domowym szefom kuchni odpowiednią organizację przepisów
kulinarnych, a nawet automatyczne tworzenie list zakupów.
FRAUKE OSTER
Miejsce na przepisy
Krecipes przechowuje przepisy kulinarne
w bazie danych – obecnie mamy do wyboru
MySQL [2] lub SQLite [3]. W kolejnych wersjach programu planowane jest także dołączenie obsługi bazy PostgreSQL – ale prawdopodobnie dopiero w wersji 1.0. Obsługa
MySQL i SQLite działa prawidłowo.
Baza danych MySQL jest bardziej skomplikowana i jest to osobny serwer, który trzerojekt Krecipes [1] istnieje dopiero
ba uruchomić przed włączeniem programu
od roku, a już oferuje mnóstwo możKrecipes. Jeżeli mamy już serwer MySQL na
liwości – jest to program zarządzająkomputerze, możemy mu zlecić zarządzanie
cy przepisami kulinarnymi, sprawiający, że
przepisami kulinarnymi, jeśli go nie posiakomputer z systemem Linux stanie się przydamy, najlepiej użyć SQLite.
datny także w kuchni. Ostatnia wersja proAby skorzystać z dobrodziejstw MySQL,
gramu 0.4.1 wydana została w 2003 roku,
musimy zainstalować jeszcze pakiety mysql,
przed Świętami Bożego Narodzenia. Trzej
Qt-devel oraz qt3-mysql (pakiety te znajdują
programiści pracujący nad tym projektem
się zazwyczaj na płytach z dystrybucją). Jeże„wysmażyli” od tego czasu pewne ulepszeli nie możemy znaleźć pakietu qt3-mysql, ponia, więc w niedługim czasie możemy spozostaje wtedy samodzielna kompilacja całej
dziewać się pierwszej, oficjalnej wersji testobiblioteki Qt, dzięki czemu utworzony zostawej o numerze 0.5.
nie dodatek (plug-in) obsługujący MySQL
Brak nowej wersji nie powstrzyma nas jed(Ramka 1). Bez wykonania tych czynności
nak przed zaglądaniem w garnki programinie będziemy mogli korzystać z Krecipes
stów. Repozytorium CVS programu znajduje
w połączeniu z bazą MySQL.
się w gałęzi kdenonbeta na głównych serweSprawa wygląda dużo prościej, gdy zdecyrach KDE i stamtąd można go pobrać. Krecidujemy się na skorzypes jest programem dość niestanie z SQLite – Krecitypowym, jak na program
pes posiada wbudowaną
z kategorii kdenonbeta, ponieodpowiednią funkcjoważ już od wersji 0.4.1 wystęnalność, która umożlipuje w sześciu wersjach języwia współpracę z SQLikowych. Część tłumaczeń nie
te. Pakiet SQLite możzostała jeszcze ukończona
na pobrać z Internetu
(np. brakuje pomocy), więc
[3]. Następnie rozpakogdyby ktoś mógł i chciał weswujemy go, przechodziprzeć swoją osobą prace nad
my do katalogu ze źrótym projektem, prosimy
Rysunek 1: W MySQL trzeba zadłami i uruchamiamy
o bezpośredni kontakt z twórłożyć konto użytkownika bazy
proces konfiguracji:
cami Krecipes.
danych.
P
92
Lipiec 2004
www.linux-magazine.pl
tar xvzf sqlite-2.8.12.tar.gz
cd sqlite
./configure
Jeżeli wszystko poszło dobrze, możemy przejść do kolejnych etapów kompilacji i instalacji. Aby zainstalować system SQLite, wpisujemy polecenie make install. Do jego wykonania wymagane są uprawnienia administratora (wpisujemy su i podajemy hasło użytkownika głównego root):
make
su -c „make install”
Zarządzanie przepisami
Po ustawieniu wybranej bazy danych przezorni
użytkownicy mogą pobrać kod źródłowy Krecipes dla wersji 0.4.1 ze strony projektu. Pozostała grupa użytkowników może skorzystać z działu rozwoju programów CVS dystrybucji KDE.
Bez względu na to, jaką wersję Krecipes
wybierzemy, musimy w naszym systemie
mieć zainstalowane pakiety programistyczne
kdelibs. Jeżeli nie mamy takiej biblioteki, konieczne jest zainstalowanie pakietu (kdelibs3devel-version.rpm lub podobnego) odpowiedniego dla używanej dystrybucji. Jest to jedyny sposób tworzenia programów KDE z plików źródłowych.
Jeżeli używamy plików źródłowych
Krecipes, musimy najpierw rozpakować
archiwum tar:
tar xvjf krecipes.tar.bz2
Przechodzimy do otworzonego właśnie katalogu krecipes i uruchamiamy narzędzie konfiguracyjne (wymaga ścieżki dostępu do katalogu głównego Qt):
Krecipes
LINUX USER
zy danych (patrz Ryprzeglądać. Jeżeli szukamy określonego
sunek 1). Jeżeli nie
dania, możemy skorzystać z funkcji wyszuwybierzemy żadnej
kiwania – jest ona przydatna szczególnie
z tych opcji, klikamy
wtedy, gdy nasza baza danych zacznie zaprzycisk Next >.
pełniać się przepisami.
W następnym oknie
Wpisujemy zatem nazwę przepisu w polu
Krecipes zlokalizuje wtedy
wyświetlona jest obecSearch: i naciskamy klawisz [Enter] – Kreciskompilowaną przez nas werna nazwa użytkownipes wyświetli przepis lub listę przepisów. Na
sję Qt (sposób opisano w Ramka Linuksa bez hasła
liście określona jest kategoria i nazwa przepice 1). Aby zainstalować pro– podajemy zatem hasu oraz przypisany podczas jego tworzenia
gram, wykonujemy polecenia
Rysunek 2: Podczas konfiguracji
sło. W przeciwnym
numer indeksu. Aby poukładać przepisy wemake i make install.
MySQL Krecipes wymaga podaprzypadku Krecipes
dług odpowiedniego kryterium, możemy
Jeżeli zdecydowaliśmy się na
nia nazwy użytkownika i hasła.
nie uruchomi się z pokliknąć nagłówek kolumny.
bazę MySQL, będziemy muwodu braku wystarczających uprawnień,
Menu rozwijane, znajdujące się po prawej
sieli uruchomić teraz serwer bazy danych.
nawet jeśli dokończymy proces wstępnej
stronie pola Search:, umożliwia ograniczenie
W wielu dystrybucjach można odnaleźć odkonfiguracji przy pomocy kreatora.
wyszukiwania do określonych kategorii. Kapowiednie narzędzie. Powinniśmy szukać naW Ramce 2 opisaliśmy sposób utworzenia
tegorie te tworzone są podczas wpisywania
zwy podobnej do Services lub Runlevel Manaużytkownika bazy danych MySQL.
przepisów do bazy danych. Jedna potrawa
gement. Musimy mieć możliwość uruchomieW ostatnim oknie dialogowym, które pojamoże być przypisana do kilku kategorii.
nia serwera MySQL lub takiego ustawienia,
wi się od razu, gdy zdecydujemy się na bazę
W kolejnych wersjach programu możemy
aby serwer MySQL uruchamiał się automaSQLite, kreator zapyta, czy
spodziewać się już bartycznie przy starcie systemu.
chcemy umieścić w bazie dadziej zaawansowanego
Przy pierwszym uruchomieniu narzędzia
nych przykładowe przepisy
wyszukiwania.
zarządzania przepisami poleceniem konsoli
kulinarne. Nie spodziewajPo odnalezieniu i wykrecipes & lub przez menu K, pojawi się kremy się zbyt wiele – obecnie
braniu odpowiedniego
ator, który pomoże nam przy wstępnym
dostępne są tylko cztery
przepisu z listy, możeprzygotowaniu programu do pracy. Użytprzykładowe przepisy. Zamy użyć jednego z wykownicy bazy MySQL będą mieli do wykomykamy okno dialogowe
dłużonych przycisków
nania o dwie czynności więcej niż użytkowi uruchamiamy Krecipes
znajdujących się pod linicy SQLite.
w typowym oknie Find/Edit
stą przepisów. Pierwszy
Rysunek 3: Okno wyszukiwaRecipes (Rysunek 3).
z nich powoduje otwoLotny start
nia/edycji przepisu.
rzenie przepisu, drugi –
Zaraz po wyświetleniu ekranu powitalnego,
jego edycję. Ostatni przycisk Delete usunie
kreator poprosi o wybranie właściwej bazy
W poszukiwaniu
na zawsze niemiłe wspomnienia związane
danych. Jeżeli jesteśmy zwolennikami Mywłaściwego przepisu
z wybranym przepisem.
SQL, możemy dodatkowo określić, czy
Każde okno programu ma po lewej stronie
Zanim zaczniemy usuwać przepisy z bazy
użytkownik ma wymagane uprawnienia
pasek nawigacyjny. Pozostałą część obszadanych, musimy je oczywiście najpierw
i czy ustaliliśmy administratora serwera baru okna zajmują przepisy, które możemy
stworzyć. Zadanie to powierzono funkcji
znajdującej się pod przyciskiem New (nowy
Ramka 1: Obsługa MySQL – kompilacja Qt
przepis). Niestety, jeżeli używamy Qt 3.3
Aby skompilować Qt, będziemy potrzebonych PNG i jpeg. Zamiast korzystania
(Rysunek 4), nieprawidłowa praca programu
wać źródeł Qt, które dostępne są na płyz biblioteki formatu GIF, możemy skorzypowoduje wyświetlanie komunikatu o błętach z dystrybucją lub na stronie producenstać z jednej z opcji Qt (-qt-gif), jednak
ta Qt, firmy Trolltech [4].
dzie. Aby usunąć błąd, zmieniamy wielkość
dla formatu MNG (Multiple-Image Network Graphics) biblioteka Qt wymaga
okna, przeciągając prawy dolny róg okna.
Po rozpakowaniu archiwum przechodzicd krecipes
./configure U
-with-qt-dir=U
/directory
my do katalogu z kodem źródłowym Qt.
Przy pomocy parametru -plugin-sql-mysql
konfigurujemy właściwości biblioteki –
w ten sposób biblioteka Qt będzie obsługiwać MySQL:
jeszcze dodatku plug-in.
Opcja -thread umożliwia wielowątkowe
działanie programów wykorzystujących bibliotekę Qt. Ostatni parametr to -no-exceptions, oznaczający wyłączenie obsługi błędów. Oczywiście możemy użyć większej ilości parametrów, w zależności od potrzeb.
cd qt-directory
./configure -system-zlib U
-qt-gif -system-libpng U
-system-libjpeg -plugin-imgfmt-U
mng -thread -no-exceptions U
-plugin-sql-mysql
make sub-src sub-tools
Opcja konfiguracyjna -system-zlib umożliwia wykorzystanie biblioteki zlib. Dotyczy
to także bibliotek dla formatów graficz-
Operacja ta może potrwać kilkanaście minut, ale dzięki temu nie musimy już instalować biblioteki Qt!
Po zakończeniu procesu konfiguracji dokonujemy kompilacji biblioteki Qt wraz z kilkoma niezbędnymi narzędziami dla Qt i KDE:
Nowe nabytki
Do wprowadzania nowych przepisów kulinarnych służą trzy zakładki. Pierwsza z nich
Recipe (przepis) określa nazwę przepisu oraz
jego autora, kategorie i ilość osób, dla których przepis jest przeznaczony. Kliknięcie
przycisku +, znajdujący się obok pól Authors i Categories, spowoduje wyświetlenie
okna dialogowego, w którym możemy wybrać z listy autora i kategorię.
Druga zakładka służy do wpisywania produktów i ilości. Lista typowych produktów
znacznie ułatwia to zadanie. Możemy też wy-
www.linux-magazine.pl
Lipiec 2004
93
LINUX USER
Krecipes
wyświetlona zostanie lista zakupów (Rysubrać
odpowiednią
nę liczby osób w przepisie i aunek 6). Aby wydrukować ją na potrzeby wijednostkę dla danego
tomatyczne przeliczenie ilości
zyty w sklepie, klikamy przycisk Print. Naproduktu lub stwowszystkich produktów.
stępnie klikamy OK, aby zamknąć okno.
rzyć zupełnie nową
Jeżeli wygląd okna przepisu
Na dole, po lewej stronie listy zakupów
jednostkę. Jeżeli wpi(patrz Rysunek 5) nam nie odznajduje się przycisk Diet Wizard (kreator
saliśmy już wszystkie
powiada i chcielibyśmy mieć
diety), który zaprowadzi nas w to samo
niezbędne informacje
produkty w innym miejscu, momiejsce, co funkcja
dotyczące składniżemy to zmienić
Rysunek 4: Wpisywanie przepiDiet Wizard znajków, klikamy przyw ustawieniach Setsów.
dująca się na pasku
cisk Add ingredient
tings | Page preferennawigacyjnym. Przy
(dodaj produkt).
ces.... W celu zmiany kolejności popomocy tej funkcji
Do poruszania się po liście produktów słuszczególnych elementów, np. katebędziemy
mogli
żą klawisze kursora, co umożliwia wprowagorii lub listy produktów, przeciąopracować szczegódzanie produktów w kolejności wymaganej
gamy je po prostu myszą (Rysunek
łowy plan diety (Ryprzez przepis. Aby usunąć niewłaściwy lub
5). Aby zachować dokonane zmiaRysunek 6: Automatyczne twosunek 7).
niepotrzebny produkt z przepisu, klikamy
ny, klikamy Save and Close.
rzenie listy zakupów.
przycisk z krzyżykiem.
Trzecia zakładka posiada duże pole tekPlanowanie zakupów
Walka z nadwagą
stowe przeznaczone dla opisu instrukcji kuPo podjęciu decyzji dotyczącej menu, pozoPrzede wszystkim musimy zdefiniować
charskich. Aby sprawdzić poprawność pistaje jeszcze problem zakupów poszczególokres trwania diety, dzienną liczbę posiłków
sowni, możemy nacisnąć
nych produktów. Zajmie się
oraz liczbę dań każdego posiłku. Jeżeli posiłprzycisk znajdujący się pod
tym funkcja Shopping List (liki będą składać się z dwóch lub więcej dań,
polem tekstowym.
sta zakupów), znajdująca się
do przemieszczania się między daniami poPod zakładkami znajduna pasku nawigacyjnym po lesłużą nam przyciski Previous Dish (poprzedje się kilka przycisków,
wej stronie okna. Jak pokazano
nie danie) i Next Dish (następne danie).
dzięki którym możemy zana Rysunku 6, z listy istniejąJeżeli zaznaczymy Enable Category Filtepisać przepis (symbol dyscych przepisów możemy wyring (włącz filtrowanie kategorii), program
kietki), zamknąć okno diabrać jeden lub więcej przepiKrecipes będzie wyświetlał wyłącznie zaznalogowe (kółko z krzyżykiem
sów i dodać je do listy zakupów
czone kategorie. Dzięki temu będziemy mow środku), wyświetlić prze(Shopping list) przy użyciu
gli uniknąć pizzy lub schabowego przygotopis (lupa) lub dodać go do
strzałki skierowanej w prawo.
wanego na śniadanie.
listy zakupów (ikona koszyKliknięcie strzałki skierowanej
Po prawej stronie, u dołu możemy szczeka z zakupami, patrz Rysuw lewo usuwa przepisy z listy,
gółowo określić poziom węglowodanów,
nek 4). Ponadto funkcja
a kliknięcie przycisku Clear
witamin, białek i tłuszczu. W ten sposób
Rysunek 5: Zmiana wyglądu
Scale recipe (zmiana ilości
usuwa wszystkie przepisy z liKrecipes będzie udostępniał wyłącznie
okna przepisu zgodnie z osoosób) (przycisk z niebieską
sty zakupów.
przepisy spełniające podane kryteria. Po
bistymi upodobaniami użytstrzałką) umożliwia zmiaPo kliknięciu przycisku OK
kliknięciu przycisku Create the diet (przykownika.
gotuj dietę), Krecipes opracowuje i wyświetla plan żywieniowy dla określonego
SŁOWNICZEK
wcześniej przedziału czasu.
CVS: Concurrent Versions System, czyli sysSQL (Structured Query Language, czyli
Czy po otworzeniu lodówki mieliście
strukturalny język zapytań). Dane przetem kontroli wersji, to sposób zarządzania
kiedyś
wrażenie, że nie wiecie, co zrobić
chowywane są w tabelach. Do zarządzawersjami plików. Kod źródłowy przechowyze
znajdującymi
się tam produktami?
nia bazami danych MySQL można użyć
wany jest na centralnym serwerze, gdzie
Funkcja Ingredient check (kontrola
klienta uruchamianego z wiersza poleprogramiści mogą wprowadzać poprawki
ceń, o którym powiemy w dalszej części
i ulepszenia. Przy pomocy CVS możemy poskładników), znajdująca się na pasku naniniejszego artykułu. Można też skorzybrać najnowsze pliki źródłowe i skompilowigacyjnym, pomoże nam w poszukiwastać z PhpMyAdmin, który oferuje grawać z nich samodzielnie program.
niach właściwych produktów. Z listy wyficzny interfejs użytkownika (GUI) przez
kdenonbeta: Programy z kategorii kdenonbieramy składniki, które posiadamy w doprzeglądarkę WWW. PhpMyAdmin wybeta znajdują się zwykle we wczesnym stamu, a następnie klikamy przycisk Find
maga jednak do prawidłowej pracy dziadium rozwoju i nie są oficjalnie częścią
matching recipe (odszukaj pasujący przełającego serwera Apache.
KDE. Tak więc na ich rozwój nie wpływają
pis). Mamy nadzieje, że na wyświetlonej
SQLite: Właściwie jest to biblioteka języka
plany wydania nowych wersji. Z drugiej
liście odnajdziecie interesujący przepis
C emulująca działanie serwera SQL (idealstrony jednak, programy tego typu nie są
i podążycie do kuchni z misją przygotone rozwiązanie dla małych programów). Jezwykle dostępne jako pakiety RPM czy
wania czegoś pysznego.
żeli skompilujemy Krecipes z obsługą SQLiDEB. Wsparcie dla poszczególnych wersji
językowych jest także ograniczone.
MySQL: to baza danych obsługująca formułowanie zapytań w języku baz danych
94
Lipiec 2004
te, program będzie używał SQLite jak serwera. Biblioteka SQLite odczytuje dane
i zapisuje je bezpośrednio na dysku.
www.linux-magazine.pl
Produkty
Jeżeli w części „Walka z nadwagą” zastanawialiście się, skąd Krecipes zna rzeczy-
Krecipes
Ramka 2: Użytkownik bazy danych MySQL
Aby nadać użytkownikowi odpowiednie
uprawnienia do zapisu i odczytu w bazie
danych MySQL, musimy uzyskać z wiersza
poleceń Linuksa uprawnienia administratora bazy danych (root) i otworzyć powłokę
MySQL. Uważajmy, aby nie pomylić administratora bazy danych root z administratorem systemu root!
Jeżeli pracujemy na koncie administratora
bazy danych po raz pierwszy, nie posiadamy jeszcze hasła. Nie oznacza to, że użytkownik nie istnieje, a tylko tyle, że konto nie
jest zabezpieczone. W takim przypadku nie
musimy podawać hasła:
mysql -user=root mysql
Aby przypisać uprawnienia do odczytu i zapisu dla bazy danych przepisów kulinarnych, wpisujemy po znaku zachęty poniższe
polecenie. Dzięki temu otrzymamy uprawnienia do wyboru, dodawania, aktualizacji
i usuwania uprawnień w bazie danych:
GRANT SELECT, INSERT, UPDATE, U
DELETE ON Krecipes.* TO U
'nazwa_użytkownika'@'nazwa_U
hosta' IDENTIFIED BY 'hasło';
Baza przepisów, którą program automatycznie zakłada, nosi nazwę Krecipes. Zastępujemy nazwa_użytkownika, nazwa_hosta
i hasło odpowiednimi danymi użytkownika,
hasłem i nazwą hosta. Jeżeli uruchomiliśmy
serwer MySQL na komputerze lokalnym, jako nazwę hosta możemy użyć localhost.
Ewentualnie można zastąpić parametr nazwa_hosta nazwą zewnętrznego serwera
danych (może to być np. serwer dedykowany sieci lokalnej).
Teraz należy przekazać asystentowi Krecipes informacje o posiadanych uprawnieniach (Rysunek 1). W kolejnym oknie dialogowym (Rysunek 2) wpisujemy dane użytkownika i hasło, które właśnie ustaliliśmy.
data (użyj danych Departamentu Rolnicwistą wartość odżywczą takich nietypotwa USA), należy jednak pamiętać, że funkwych produktów jak pancetta (wędlina
cja nie działa jeszcze w pełni poprawnie.
otrzymywana z boczku wieprzowego) czy
Na razie funkcja ta pobiera listę artykułów
szpinak wodny, sprawdźcie pozycję Data
spożywczych i ich wartości
na pasku nawigacyjnym.
odżywczych z bazy danych
Znajdziecie tam wiele inDepartamentu Rolnictwa
teresujących informacji,
Stanów Zjednoczonych [5],
które można edytować.
ale dodanie jej do listy KrePrzykładowo, funkcja
cipes nie jest możliwe. ProIngredients (składniki)
gramiści ciężko pracują nad
z Rysunku 8 zaprowadzi
poprawieniem tej funkcji
nas do listy produktów
Rysunek 7: Dla osób chcących
w następnych wersjach proznajdujących się w bazie
jeść zdrowo Krecipes udostępgramu, więc warto pilnie
danych. Tutaj możemy
nia pomocnika diety.
obserwować kolejne wydadopisać brakujące pozynia tej pozycji.
cje, czyli dowolne produkPozycja Properties (właty, które nie zostały jeszściwości) umożliwi nam
cze użyte w przepisie. Aby
przeglądanie wartości oddodać składnik, klikamy
żywczych wprowadzonych
na przycisku ze znakiem
do tej pory danych. Tutaj
plus (+), aby go usunąć,
możemy także dodawać
klikamy przycisk ze znaRysunek 8: Za pomocą funkcji
nowe i usuwać niepotrzebkiem minus (-). Przyciski
„Data” możemy dodać pozycję
ne pozycje (przyciskami
te działają w ten sam spodo bazy danych.
plus-minus, tak jak to już
sób także w innych miejopisano wcześniej).
scach programu.
Pozycja Units (jednostOczywiście, dla każdego
ki) zaprowadzi nas do liproduktu możemy tutaj
sty wszystkich dostępnych
określić właściwą jednostw bazie danych jednostek
kę, ilość białek, tłuszczu
wraz z tabelą zamiany
i innych wartości odżywdżuli na kalorie. Oczywiczych. Dużym ułatwieRysunek 9: Okno dialogowe
ście, możemy dodać kolejniem może być skorzystaustawień programu umożliwia
ne takie tabele. Dodawanie z funkcji Load USDA
konfigurowanie Krecipes.
LINUX USER
nie i usuwanie pozycji realizowane jest
w sposób opisany powyżej.
Pozycja Categories (kategorie) zajmuje
się kategoriami przepisów, a pozycja Authors (autorzy) to miejsce, w którym możemy wpisać nazwę właściciela lub pomysłodawcy przepisu.
Import
Jeżeli dysponujemy dużą ilością przepisów, z pewnością nie chcemy ich wszystkich ponownie wpisywać do programu.
Czy nie byłoby dobrze, gdyby wszystkie
przepisy wyszukane w Internecie były automatycznie dopisywane do bazy danych
bez ich przepisywania?
Właśnie do tego celu (przynajmniej
w większości przypadków) służy, obsługiwany przez Krecipes, język Recipeml („Recipe Markup Language”) [6] – język stworzony w oparciu o XML, przygotowany
specjalnie do prezentacji danych związanych z przepisami kulinarnymi. Krecipes
nie ma problemu z otwieraniem przepisów
zapisanych w tym formacie. Potrafi także
importować przepisy z takich programów
jak Master Cook czy Meal Master – służy
do tego funkcja Import z menu File.
Miejscem, w którym możemy dostosować parametry importowania przepisów,
jest okno Settings | Krecipes preferences
(patrz Rysunek 9). Tutaj możemy także
zmienić nazwę użytkownika i hasło do bazy danych MySQL. Pozycja Numbers
umożliwia zmianę przedstawiania wartości liczbowych w przepisach.
Mimo że program jest jeszcze we wczesnej fazie rozwoju, wszystkie opisane tutaj
możliwości są bardzo przejrzyste. Dzięki
temu Krecipes jest odpowiednim programem do domowego użytku, co dobrze wróży na przyszłość.
■
INFO
[1] Krecipes: http://krecipes.sf.net/
[2] MySQL: http://www.mysql.com/
[3] SQLite: http://www.sqlite.org/
[4] Pliki Qt do pobrania:
http://www.trolltech.com/
download/qt/x11.html
[5] Departament Rolnictwa Stanów
Zjednoczonych: http://www.usda.gov/
[6] Dodatkowe informacje na temat
Recipeml:
http://www.formatdata.com/recipeml/
www.linux-magazine.pl
Lipiec 2004
95

Podobne dokumenty