Michał Moroz

Abecadło smoczątka, dziennik niecodzienny

Kurs - podstawy SQL na bazie SQLite

SQLite Administrator w działaniu

W poprzednim wpisie udało nam się zaznaczyć, że zastosowania relacyjnych baz danych są tak szerokie, że nadają się do większości typowych zadań związanych z katalogowaniem. Dziś postaramy się dowiedzieć czegoś o SQL, języku będącym swoistym rodzajem interfejsu do naszej bazy. SQL na początku może wydawać się nieco skomplikowany, ale później okaże się, że dla możliwości oferowanych przez bazę jest on rozwiązaniem optymalnym.

Nigdy nie lubiłem uczyć się czegoś na sucho - jest to nużące i daje mało efektu. Dlatego skorzystamy z SQLite. Nie wymaga on dużej ilości konfiguracji, jak inne bazy danych, wystarczy jedynie ściągnąć odpowiedni program i uruchomić go. Z tych darmowych udało mi się znaleźć jeden, bardzo przyjemny w użytku. Nazywa się SQLite Administrator, jednak ma jeden mankament - na stronie projektu jest napisane, że działa on tylko na systemach Windows 2000, XP i 2003, dzięki czemu Windowsy 9x odpadają... Dla osób, które korzystają z nich istnieje alternatywa - SQLite Database Browser, który już znacznie mniej mi się podoba, głównie dzięki temu, że jego graficzny interfejs użytkownika nie uczy dobrych nawyków. Do korzystania z konsoli jednak się nada. A więc do boju! Zainstalujmy jeden z tych programów i przejdźmy wreszcie do konkretów.

Aby nie było niejednoznaczności, wszelkie opisy działań zamieszczone dalej dotyczyć będą sqliteadmin. Osoby korzystające z innych programów będą musiały wykazać się inicjatywą i same poszukać odpowiednich opcji.

Uruchamiamy program i wybieramy opcję `Utwórz bazę danych'. W oknie dialogowym wybieramy typ pliku - baza sqlite3, wpisujemy nazwę i tyle! Baza danych została utworzona.

Teraz wybieramy kartę `Zapytanie SQL'. Większość naszej pracy będzie się z tym wiązać, choć program ma także tryb graficzny dla każdej ważniejszej opcji. Jednak dla nauki składni znacznie bardziej przyda nam się konsola, do której zapytania będziemy wpisywać ręcznie. Gdy już zrozumiemy istotę języka, wtedy nic nie będzie stało na przeszkodzie, aby wykorzystać tryb graficzny.

Po wpisaniu zapytania wciskamy F8 (wyjątkiem są zapytania z rodziny SELECT, które wykonujemy za pomocą klawisza F9). Czasami, podczas tworzenia i zmieniania tabel przydatne okaże się odświeżenie okienka po lewej, możemy kliknąć na nim prawym przyciskiem i wybrać opcję Odśwież.

CREATE TABLE - utwórz tabelkę.

A oto nasze pierwsze polecenie w SQL, które za chwilę dogłębniej zanalizujemy. Na tym etapie wystarczy wiedzieć, że celem jest stworzenie relacji - tabeli, w której będziemy zapisywać nasze dane. :)

CREATE TABLE person(name TEXT);

Wydaje się proste, nieprawdaż? Pierwsze dwa słowa odpowiadają za stworzenie nowej, pustej relacji. Następnie podajemy nazwę tej tabeli, a w nawiasie zdefiniujmy pola, które będzie zawierać. Pole `name' jest typu tekstowego. O typach danych w SQLite już wkrótce.

Wszystko w porządku? Nie, przecież relacja `person' powinna zawierać więcej atrybutów, niż tylko `name'! A tak się cieszyliśmy sukcesem... Coż, usuńmy naszą relację i stwórzmy nową.

DROP TABLE person;

CREATE TABLE person(name TEXT, surname TEXT);

Lepiej? Oho, wpadł mi do głowy pomysł. Nasza relacja może jeszcze zawierać wiek danej osoby. Kasowanie i pisanie od nowa raczej nie ma sensu, za dużo literek... Skorzystajmy jednak z dobrodziejstw języka SQL i zmodyfikujmy tabelkę.

ALTER TABLE person ADD age INT NOT NULL DEFAULT 0;

Teraz nasza tabela powiększyła się o nowe pole. I o ile ALTER TABLE person ADD age INT wydaje się zrozumiałe, to już NOT NULL oraz DEFAULT 0 jest czymś nowym. Te dwa dodatki określają, że nowe pole nie może być puste (NOT NULL), a domyślną wartością będzie 0, nawet, jeśli zapomnimy wpisać tam jakiejkolwiek wartości.

OK. Teraz możemy zacząć dodawać nowe krotki do naszej relacji.

INSERT, SELECT, UPDATE, DELETE

Na początku dodamy nową osobę.

INSERT INTO person VALUES('John', 'Doe', 26);

Kolejność wpisywania wartości zależy w tym przypadku od kolejności pól w tabeli. Ale nie ma się co martwić, możemy wybrać tylko te pola, które chcemy i w takiej kolejności, w jakiej nam się podoba.

INSERT INTO person(age, surname, name) VALUES(33, 'Doe', 'Alex');
INSERT INTO person(name) VALUES('Adam');

Spójrzmy na drugi przypadek. Nie wypełniliśmy wszystkich pól. Jaki to da nam efekt? Sprawdźmy:

SELECT * FROM person;

Okazuje się, że trzecia krotka posiada wartości ('Adam', NULL, 0). NULL jest pustą wartością, dodawaną do rekordu w momencie, kiedy brakuje pewnych danych podczas wpisywania. Jednak w przypadku pola `age' zdołaliśmy temu przeciwdziałać poprzez ustawienie atrybutu NOT NULL oraz zmiany wartości domyślnej na 0.

No dobrze, Adam NULL to raczej nie jest zbyt fortunny rekord. Zmodyfikujmy go.

UPDATE person SET surname = 'Lake', age = 5 WHERE rowid = 3;

Mamy tu kilka nowych rzeczy naraz. Po pierwsze UPDATE, które zmienia nam konkretne wartości w polach surname i age. Po drugie WHERE, dzięki któremu możemy wybrać tylko tą krotkę, która nas interesuje i pozostawić pozostałe w spokoju (tu wypada zaznaczyć, że UPDATE wywołane bez WHERE zmieni nam wszystkie wpisy w tabeli, co nie jest zbyt praktyczne). Po trzecie, rowid, który jest licznikiem generowanym automatycznie przez SQLite podczas tworzenia bazy danych. Taki numeryczny identyfikator jest bardzo przydatny, gdyż jest przyporządkowany tylko do jednej istniejącej krotki (a Johnów Doe mogą być setki). Najlepiej zilustruje to poniższy przykład.

SELECT name,surname,rowid FROM person;

Podobna metoda, jak podczas wpisywania danych, pozwala nam na wybieranie tylko tych pól, które nas interesują. Okazuje się, że przy każdym kolejnym wpisie licznik zwiększa się nam o jeden.

Tak naprawdę to Adam nie istniał. Tylko go sobie wymyśliłem. Usuńmy go.

DELETE FROM person WHERE rowid = 3;

Za to istnieje Ian Grisham, który ma 40 lat, a jego dane już uda Ci się samodzielnie wpisać.

Bardziej zaawansowane wybieranie danych.

WHERE już jest nam znane. Z powodzeniem możemy je zastosować również z poleceniem SELECT.

SELECT * FROM person WHERE surname = 'Doe';

Podczas przeszukiwania tekstu możemy skorzystać także z możliwości, jakie oferuje nam słowo kluczowe LIKE. Możemy wybrać tekst, w którym zawiera się dany ciąg znaków.

SELECT * FROM person WHERE surname LIKE 'Do%';

To zapytanie pozwoli nam znaleźć wszystkie ciągi znaków zaczynające się od Do. Przykładami są: Do, Doe, Dodododod, Do blah blah blah.

SELECT DISTINCT surname FROM person;

Dzięki DISTINCT mamy tylko niepowtarzające się dane. Dzięki temu, niezależnie od tego, ilu było Johnów Doe, otrzymamy tylko jeden wynik z tym imieniem i nazwiskiem.

SELECT COUNT(*) FROM person;

To zapytanie zwróci nam ilość wpisów w relacji.

SELECT * FROM person ORDER BY age;

Jeśli chcemy posortować wyniki według danego pola, w tym przypadku wieku, używamy ORDER BY.

SELECT * FROM person ORDER BY age LIMIT 1;

To zapytanie ograniczy nam liczbę wyników do jednego, dzięki czemu będziemy mogli wybrać najmłodszą osobę z naszej tabeli.

SELECT * FROM person ORDER BY age DESC LIMIT 1;

DESC i ASC (descending, ascending), dają nam możliwość sortowania wyniku od największego do najmniejszego lub od najmniejszego do największego. ASC jest zachowaniem domyślnym, dlatego nie musiałem go pisać w poprzednim przykładzie, choć użycie go tam jest całkowicie poprawne.

SELECT * FROM person LIMIT 1 OFFSET 2;

Zwraca jedną krotkę zaczynając po drugiej, tak więc realnie zwraca krotkę trzecią. Domyślnym zachowaniem jest OFFSET 0, którego nie musimy pisać przy zapytaniu.

SELECT surname, COUNT(*) FROM person GROUP BY surname;

Dzięki temu zapytaniu możemy sprawdzić, ile osób ma dane nazwisko...

SELECT surname,AVG(age) AS t1 FROM person GROUP BY surname ORDER BY t1;

... oraz wyliczyć średnią wieku dla danego nazwiska. Tutaj ciekawym dodatkiem jest przypisanie nowej nazwy t1 funkcji AVG(age), która odpowiada za zliczanie średniej poszczególnych wyników. Dzięki temu zamiast wpisywać nazwę funkcji po raz drugi (jako argument ORDER BY), możemy skorzystać z przypisanej nazwy. Jest to bardzo przydatna rzecz przy bardziej skomplikowanych zapytaniach, bo nie dość, że krócej się zapisuje, to potem nie będziemy musieli poprawiać kilka razy tego samego fragmentu zapytania powielonego w różnych miejscach.

Zakończenie.

Uff, udało nam się dobrnąć aż tutaj. Powyższy tekst to tak naprawdę podstawy SQLa w pigułce. Większość bardziej skomplikowanych zapytań będzie zbudowana na podstawie tych prostych form i będziemy w stanie sobie z nimi poradzić w ten, czy w inny sposób.

Powyższe przykłady z pewnymi zmianami można zastosować w każdym systemie zarządzania bazami danych. Niestety, za każdym razem będzie trzeba odkrywać na nowo te zmiany.

Do zobaczenia następnym razem. Zachowajcie tą bazę danych, przyda się nam jeszcze. :)

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

Hello Database

Informacje płyną w coraz szybszym tempie. Przypomina to nieco skutki globalnego ocieplenia - w pewnym momencie informacje zatopią większość ludzi. Mimo to, usilnie próbujemy powoli i nieustannie strukturalizować otaczające nas informacje. Bez szufladek, do których moglibyśmy wrzucać nowe dane, nie moglibyśmy przetrwać. Doprowadzanie danej informacji do stanu użyteczności zabierałoby tak wiele czasu, że musielibyśmy skrajnie obcinać docierające do nas sygnały.

Wiadomo, ze słów `chaos' i `porządek', cieplej zareagujemy na to drugie. Jest bardziej przewidywalne, a skoro tak, to nie ma się czego bać, bo i tak nie znajdziemy tam niczego nieznanego. Między innymi dlatego staramy się prócz strukturalizacji własnych systemów pojęciowych układać wszystko to, co się dookoła nas znajduje. Tu mała uwaga - tak zwany bałagan też jest swoistym porządkiem. Osoba, która tworzy bałagan za wygodniejsze uznaje zapamiętywanie, w którym miejscu odłożyła dany przedmiot, niż odkładanie go na jedno, to samo miejsce. Z tej strony uporządkowanie zaczyna być bardziej widoczne. ;)

Ta sama idea przyświeca komputerom - dane, jakie na nich przechowujemy są w jakiś sposób poukładane. Pliki leżą w katalogach, katalogi w innych katalogach, komputer na biurku, pani Basia na posadzce... W każdym razie idea plików jest wygodna, póki nagle nie każą nam zmienić zmienić numeru identyfikacji klienta (ang. Client Identification Number) na numer o jeden wyższy ze względu na pomyłkę działu sprzedaży (ang. Sales Management) w ostatnich dziewięćdziesięciu tysiącach plików (ang. Last 90 000 Files). Może pan Zbigniew z komputerowego by coś poradził, ale jest na chorobowym po czterech miesiącach zapalenia płuc. Oczywiście, praca musi być wykonana na wczoraj.

Dla uproszczenia zarządzania większymi ilościami powtarzalnych danych i zapobieżenia błędom podobnym do powyższego, skorzystać można z relacyjnej bazy danych. Przykładowo, wspomnianemu numerowi identyfikacji klienta można w bazie danych nadać atrybut autoinkrementacji, dzięki czemu maszyna sama zatroszczy się o dodawanie unikatowego numeru każdemu nowemu klientowi.

Dlaczego relacyjna?

Ponieważ pojęcie `bazy danych' jest tak ogólne, jak ogólne są informacje. Wszędzie tam, gdzie segregujemy dane w jakiś sposób, możliwe będzie użycie terminu `baza danych', począwszy na głowie, przechodząc przez różnego rodzaju kartoteki, kończąc wreszcie na dowolnym komputerowym systemie plików.

Ze względów historycznych, których opisanie zajęłoby dużo miejsca, pojęcie `bazy danych' zostało ograniczone do wąskiej grupy oprogramowania zwanego relacyjnymi bazami danych. Są to dość rozbudowane systemy przechowywania danych, i aby obrazowo przedstawić zasadę ich działania, zaczniemy od środka, czyli od samych danych.

W naszej bazie dane składowane są w tablicowych strukturach - relacjach 1, w jednym lub wielu plikach, zależnie od implementacji . Pomiędzy strukturami mogą występować związki mówiące o tym, że pewien rodzaj danych z jednej tabeli odnosi się do danych z drugiej tabeli. Dla przykładu pierwszym rodzajem danych był klient, a drugim produkt. Produkt był kupowany przez klienta, a więc związek jest tu jak najbardziej wskazany.

Łatwo się domyślić, że sterowanie danymi zapisanymi w tabelach i dodatkowo powiązanymi różnymi związkami nie będzie zbyt proste. To prawda - całością procesu zajmują się systemy zarządzania relacyjną bazą danych, czyli RDBMS, które są rozbudowanymi programami zajmującymi się odczytem i zapisem danych na żądanie użytkowników. Dla obsługi tych żądań został wymyślony język strukturalny język zapytań, w skrócie SQL, dzięki któremu korzystanie z możliwości oferowanych przez bazę danych staje się w miarę proste.

Zazwyczaj RDBMS jest interfejsem dla różnego rodzaju aplikacji klienckich, które wykorzystują dane w sposób adekwatny do zastosowań (prezentacja danych użytkownikowi końcowemu, drukowanie partii towaru na danym produkcie, czy też przekazywanie danych w formie raportu gdzieś dalej). Dużą zaletą dla takiego systemu może być to, że RDBMS może znajdować się na jednym komputerze w sieci, a aplikacje klienckie na innych, w tym wypadku żądania i dane będą przekazywane poprzez sieć, a na dodatek mamy pewność, że dane nie będą rozbieżne na różnych stanowiskach (że nie sprzedamy dwa razy tego samego produktu).

Sytuacja, gdzie klient, serwer przetwarzający dane i składowanie danych są od siebie odrębne, została nazwana architektura trójwarstwową. Spotyka się ją w większości baz danych, np. MySQL, PostgreSQL, Oracle, czy Microsoft SQL Server.

Co można z tym zrobić?

Zastosowania relacyjnej bazy danych są różne. I różniste.

  • Najczęściej przychodzącym do głowy wykorzystaniem może być strona internetowa, forum, wiki, blog, czy portal. Języki skryptowe, takie jak PHP, Perl, czy Python mają łatwy do użycia zestaw funkcji odpowiadających za współpracę z RDBMS. W tym wypadku wykorzystanie bazy do przechowywania artykułów, postów, czy innego rodzaju danych samo nasuwa się na myśl.
  • Większym i bardziej ambitnym przedsięwzięciem jest stworzenie systemu bazodanowego dla dowolnej firmy. W bazie możemy składować informacje o klientach, transakcjach, wpływach i wydatkach i tak dalej. Dane te wykorzystamy dla pracowników firmy, którzy będą mogli kontrolować bieżące operacje czy opracowywać zestawienia kosztów. Nic nie stoi na przeszkodzie, aby RDBMS kontrolowało także dane odpowiadające za stronę, czy też sklep internetowy firmy.
  • Ryzyko rośnie, gdy w grę wchodzą coraz większe sumy. Ale i banki korzystają z baz danych - problem w tym, że jeśli ktoś się pomyli przy projektowaniu, to ktoś inny straci, być może miliony...
  • Teraz coś z zupełnie innej beczki: SQLite jest miniaturowym systemem zarządzania bazą danych. Nie nadaje się do zastosowań, gdzie wielu użytkowników w jednej chwili potrzebuje dostępu do bazy danych, ani nie jest przystosowany do komunikacji poprzez sieć. Za to całość kodu odpowiedzialnego za przetwarzanie danych znajduje się w bibliotece, która ma blisko 250kB, przez co SQLite znakomicie nadaje się do samodzielnych aplikacji, takich jak komunikatory internetowe, czy odtwarzacze mp3. Dane przechowywane są w jednym pliku, który można łatwo wysłać mailem, czy przekopiować w inne miejsce.

Gdzie w takim razie stosować bazę danych? Wszędzie tam, gdzie użycie innych rodzajów katalogowania staje się powolne i uciążliwe.

  1. Często wspomniana tablicowość ma niewiele wspólnego z rzeczywistym zapisem na dysku, gdyż oprogramowanie sterujące wykorzystuje różne sztuczki, aby zmaksymalizować szybkość przeszukiwania. ^
Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

O własnej teorii Sztucznej Inteligencji

Pomysł ten pojawił się już pewien czas temu w mojej głowie. Zawierać będzie pewne uproszczenia, chociażby ze względu na stan dzisiejszej wiedzy o strukturze umysłu, a dodatkowym ograniczeniem jest też moja wiedza, która z wiedzą wszystkich badaczy, choć niewielką, również nie może się równać. Inspiracje są dwie - najpierw kilka z trudem przeczytanych stron wstępu do Summy Technologiae Lema, a ostatnio nowy wynalazek konstruktorów mikroelementów (teraz już nanoelementów), cząsteczka poddająca się kontrolowanej polaryzacji o wielkości 1,5 nanometra.

Wracając do pierwszej inspiracji, mogę śmiało stwierdzić, że daje wiele do myślenia. Dokładnego cytatu tu nie przytoczę, ale rzecz sprowadzała się do faktu, że Natura stworzyła nas rozumnymi (oczywiście drogą doboru naturalnego), ponieważ dawało nam to największe przystosowanie do życia w środowisku. Można więc przykładowo dojść do wniosku, że możliwość podejmowania świadomych decyzji zależała np. od powtarzających się co pewien czas zlodowaceń. Ze względu na brak innych atrybutów, które dawałyby nam przewagę nad mniejszymi zwerzętami (chociażby szybkość, siła, czy też możliwość widzenia nocą), wszystko musieliśmy wypracować z pomocą naszego umysłu. Najprawdopodobniej, obok nas znajdowało się wiele innych, mniej, lub bardziej rozwiniętych małpoludów, którzy nie przetrwali panujących warunków, co skończyło się podziałem na małpy i ludzi.

Przyjmując to za aksjomat, możemy zaobserwować dwie rzeczy - aby rozwinąć świadomość, potrzeba możliwości jej zaistnienia, oraz przyczyny, dla której powstanie.

Teraz mała dygresja - skoro tak, to gdy dojdziemy do poziomu, gdzie każdy będzie miał jedzenie i zabawki (w dowolnym pojmowaniu tego słowa) na wyciągnięcie ręki, okaże się, że świadomość przestanie nam być potrzebna, i może wreszcie staniemy się łagodnym bydłem.

Zastanówmy się teraz nad podstawową, fizyczną budową mózgu. Jakby nie patrzeć, jest to bardzo pojemna pamięć, która posiada możliwość łączenia różnych relacji ze sobą. Pamięć ta ma możliwość przyjmowania sygnałów oraz, korzystając z relacji, kojarzenia faktów z nimi powiązanych, a następnie zwracania odpowiednich sygnałów, tym razem odpowiadających za reakcję.

Pamięć jest podzielona na kilka sektorów - pierwszy zawiera elementarne odruchy i jest najniższym jej typem. Drugi, najmniej poznany, to podświadomość, a trzeci to świadomość. I tutaj można przyrównać do niej (generalizując, oczywiście) system operacyjny, gdzie nie musisz wiedzieć nic o poszczególnych elementach składających się na komputer, by go użytkować.

Jedną z rzeczy, którą posiadamy, to automatyczne usuwanie bądź degradowanie niepotrzebnych wiadomości - wnioskuję, że bez tego, w wieku kilkudziesięciu lat potrzebowalibyśmy bardzo długiego czasu, aby przekopać się przez wszystkie informacje związane z czymś, by dotrzeć do jednej informacji, której potrzebujemy.

Nieznana jest nam natomiast szybkość i pojemność mózgu. Niewiadomo, czy gdyby spiąć odpowiednio wszyskie komputery na świecie w jedną, odpowiednią sieć, mogłyby one konkurować z pojedynczym mózgiem. Wiadome są nam natomiast pewne testy wydajnościowe - np. możliwość odtwarzania całych filmów we wspomnieniach w mgnieniu oka, czy też pamiętanie muzyki, obrazowy język programowania, którym posugłujemy się tylko w wyobraźni, nie mogąć znaleźć odpowiedniego sposobu komunikacji z innymi, by móc prekazać tak wielkie dane.

Pomyślmy sobie teraz o przykładowym obiekcie sztucznej inteligencji. Możemy postawić sobie pewną dość logiczną tezę: aby jego umysł działał poprawnie, poszczególne jego elementy powinny być jak najbliżej siebie. Aby brzmiało to ładnie, można założyć, że bez odpowiedniego współczynnika gęstości pamięci: cośtamBajt/cm3, nie możemy marzyć o stworzeniu działającej SI. Dlatego właśnie, odkrycie tak małego elementu konstrukcyjnego, jak wyżej wspommniany uważam za duże osiągnięcie idące w tym kierunku.

Oczywiście, im więcej sygnałów dochodzących do niego, tym szybciej się nasz obiekt nauczy je rozpoznawać. Zauważmy, że dziecko uczy się używać samego mózgu i narządów zmysłu w ciągu kilku lat, więc po maszynie nie można wymagać, że od razu uzna wszystko za naturalne.

Jak to dziecko poznaje właściwą metodę np. widzenia? Korzystając z innych zmysłów, które są prostsze, a pozwolą mu dotknąć obiekt. Jest to dość skomplikowane (bo trzeba przyjąć fakt, iż wszelkie wytwarzanie się relacji w mózgu poza zmianami, które odczuwamy wywołuje rekursywne zmiany w wielu innych sektorach pamięci, które są o wiele subtelniejsze, a skutkują przypominaniem sobie czegoś zupełnie niezwiązanego z tematem, gdy zastanawiamy się nad nim), ale ogólnie sprowadza się do wylosowania pewnej grupy możliwości, testowania po kolei metodą prób i błędów wyników, póki nie dadzą wszystkie jednolitego odczytu. Można przypuszczać, że gdyby nie pozwolić mu się ruszać i obracać głowy podczas rozwoju, miałoby kłopoty z poprawnym rozpoznawaniem sygnałów płynących ze zmysłów.

A uczucia? Jeśli przyjąć je za wywoływane sygnałami wychodzącymi wstrzykiwane neuroprzekaźniki do organizmu, i to jesteśmy w stanie zasymulować naszej maszynie, wprowadzając systemy wykonawcze, które będą mogły np. polepszyć działanie całego układu, kiedy dostarczany jest odpowiedni sygnał. Oczywiście, obiekt nie może mieć bezpośredniego dostępu do tego. Z pewnym czasem nauczy się, że wykonując odpowiednie czynności czuje się lepiej. Więc zacznie je robić znowu. Niezwykle proste, ale przecież budowanie układów przystosowujących się polega tylko na określeniu pewnych prostych założeń.

Wniosek - gdy poznamy dogłębnie budowę naszego umysłu, wtedy prawdopodobnie stworzenie odpowiednika człowieka nie będzie zbyt trudne. Inna sprawa, czy poznanie własnego umysłu mieści się w jego zasięgu?

A pytaniem dnia jest - czy robot będzie mógł osiągnąć telepatię?

Odpowiedź jest taka sama - gdy dowiemy się, czym jest telepatia, to będziemy mogli chociaż spróbować ją naśladować.

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

Rozwój bittorrenta

Był sobie protokół. Miał kilka zalet. Decentralizacja zasobów - większa stabilność i bezpieczeństwo była pierwszą z nich. Drugą odciążanie łącz serwerów, dając użytkownikom większą, możliwą łączną przepustowość, niż ta, którą zapewniałyby one same. Trzecie zapewniało możliwość pobierania plików wszystkim, nawet jeśli nie posiadali oni zewnętrznego IP. Protokół doskonały. Co z tego, jeśli nie używany powszechnie?

Dlaczego mówię, że nie jest powszechny? Bo miast być integrowanym z innymi aplikacjami porobiło się sporo klientów, którzy to różnią się umiejscowieniem przycisków. OK, mój układ znaczków mojszy od Twojego, ale tak naprawdę ludzi interesuje tylko ustawienie prędkości, portu i folderu, do którego można pobierać. Ile osób skorzysta z zaawansowanych ustawien cache'owania, czy opcji dla DHT? Ma działać.

Dobrze, mamy klienty z dużą możliwością konfiguracji... Teraz trzeba o oprogramowanie serwerowe, zwane trackerem. I znów, jest ich pewna grupa, jedne używane poprzez serwer z obsługą skryptów, napisane przykładowo w PHP, drugie znów samodzielne - napisane np. w C/C++, czy Pythonie.

Czemu poprzednie punkty nie uważam za właściwe? Bo używanie kompatybilnych-tylko-ze-sobą rozwiązań nie jest wygodne dla administratorów. Zamiast tworzyć nowe oprogramowanie, należałoby zająć się wprowadzaniem natywnej obsługi protokołu w istniejącym.

Poczyniono kroki, prowadzące w tym kierunku. Opera ma wbudowane proste pobieranie torrentów (jest tylko kilka opcji, jednak one wystarczają). We wczesnej wersji rozwojowej mamy także moduł do serwera Apache2, mod_bt.

Propozycją dalszego wspierania protokołu w innych miejscach mógłby być bt-rsync, dzięki któremu możnaby mirrorować inne serwery, oszczędnie korzystając z ich zasobów. Na dodatek małe pliki, np. repozytoria pakietów dystrybucyjnych byłyby później dostępne poprzez http, a duże - także przez bittorrent, gdzie zasada mirrorów przełożyłaby się na ilość seedów. W dalekiej przyszłości protokół ftp całkowicie możnaby zastąpić protokołem bt.

Przykłady można mnożyć - tam, gdzie przesyłane są duże ilości informacji i może zajść podejrzenie co do łącza jako wąskiego gardła, z powodzeniem można zastosować bittorrent. Usenet, openBlueFrog ze zdecentralizowanymi, zaszyfrowanymi bazami danych sięgającymi milionów użytkowników - wiele problemów można rozwiązać w ten sposób.

Czas na poważnie zastanowić się nad przyszłością tego protokołu i zmienić nastawienie ludzi, którzy uważają, że nadaje się on tylko do ściągania warezów.

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

Gdzie jest moja...

Oddałbym wiele za możliwość zaindeksowania swojego pokoju w Google. Niestety, pamięć czasami zwodzi, co prowadzi do wielkiego zdziwienia po odkręceniu klapki laptopa i spostrzeżeniu, że tego żółtego ustrojstwa tutaj nie ma! W tym przypadku odpaliłbym wiadomą wyszukiwarkę i wpisał odpowiednie zapytanie, a odpowiedź pojawiłaby się po chwili.

Zdaję sobie sprawę z konsekwencji. Mogłoby doprowadzić to do rozleniwienia umysłu i degeneracji postępującej, ale zgodnie z zasadą: Skoro można coś zrobić szybciej, to czemu nie? częściej używałbym swojego głowostwora, bo przecież dojście do klawiatury, odpalenie przeglądarki i wpisanie tych dziwnych literek zajmuje swój czas. Korzystając z pamięci podczaszkowej (swoistego rodzaju pamięci podręcznej) uzyskałbym jedną z odpowiedzi: O tutaj/Nie wiem/Wypchaj się, śpię teraz w trybie natychmiastowym.

Marzenia... Google nie wie wszystkiego. Zobaczcie sami.

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

RSS

Prawdę mówiąc to nigdy nie używałem. Czemu? Bo nie wiedziałem, że korzystanie z tego za pomocą samego Firefoxa jest tak wygodne. A wykorzystywanie zewnętrznych programów zawsze stwarzało jakieś problemy. Przykładem jest Thunderbird, którego samo odpalenie zajmuje trochę czasu a przeglądanie rss nie przypadło mi do gustu.

Teraz dziwię się sobie. Byle rss-zakładka w katalogu znajdującym się na pasku szybkiego dostępu jest tak komfortowa i tak szybka, że używanie jej staje się przyjemnością. Może jeszcze jedna lub dwie rzeczy nie do końca mi pasują - przydałoby się menu, gdzie mógłbym od razu wybrać wszystie informacje i otworzyć w panelach. W sumie tylko jedna.

Ameryki nie odkryłem. Ale wiem, że wielu ludzi podobnie jak ja nie jest przekonanych do dobrodziejstwa tego wynalazku. A jednak - myliłem się i teraz skwapliwie nadrobię zaległości.

Co następne - może del.icio.us?

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane

Nie miała baba kłopotu, kupiła sobie komputer

A dokładniej laptopa. IBM Thinkpad 560x z niewielkimi odstępstwami od normy. I wszystko byłoby w porządku, tylko, że nie mam już chęci walczyć z ustawianiem lanu. Konfiguracja z dwiema kartami sieciowymi pod Linuksem to dla mnie niezrozumiała sprawa. ;]

Mam wybór. Kupię switcha albo wygooglam rozwiązanie.

Apdejt: Prawie wszystko już działa. Niestety, kabel od karty sieciowej PCMCIA wydaje się być złamanym. Kiedy nie styka, całkowicie jestem rozłączany i muszę wyjmować całą kartę. Ważne, że chociaż sieć działa.

Zobacz komentarze Trackback dodajdo.com Zobacz pełne metadane
Na górę
Reklamy Google