co by poczytać?

lubię czytać książki. podoba mi się ta aktywność. nie znoszę książek z mojej branży (ogólnie pojęta informatyka). wolę sensacje, kryminały, science fiction. coś z fabułą.

zdarza się, że usłyszę o jakiejś książce przypadkiem, ot ktoś zdanie rzuci w jakimś podcaście (tak ostatnio miałem z “pierścieniem" baxtera i książkami petera hamiltona). i no zasadniczo leżę. kupić? nie kupić? kupić. kilkanaście/kilkadziesiąt złotych to nie fortuna. w najgorszym razie nie przeczytam.

no i trafiłem niedawno na informacje o biblionetce. jak serwis znasz – omiń ciąg dalszy.

biblionetka jest serwisem gdzie możesz znaleźć recenzje książek pisane przez “zwykłych ludzi" ™.

każda wpisana książka ma swoje oceny, opis, no i recenzje. poza tym jest jeszcze forum, oraz część która zapowiada się fajnie, choć nie miałem jeszcze okazji przetestować: automatyczny “polecacz".

w bazie biblionetki jest już ponad 60 tysięcy książek. został zapisany ponad milion ocen.

książki mozna przeglądać działami, tytułami, autorami, najlepsze czy najgorsze. plus oczywiście wyszukiwarka (via google) 🙂

jeśli chcesz sprawdzić czy książka o której słyszałeś jest interesująca, bądź chcesz polecić jakąś komuś – w pełni polecam korzystanie z biblionetki.

nowa wersja slony’ego!

jak nie wiesz co to slony, to polecam zajrzenie na strone projektu i poczytanie. w skrócie – silnik replikacyjny do postgresa, działający jako replikacja asynchroniczna master-multi_slave.

silnik co trzeba dodać działający stabilnie, wygodnie i szybko.

ostatnio pojawiła się nowa wersja. a właściwie zapowiedź nowej wersji – prerelease wersji 1.2.

w niej – sporo ulepszeń. tym razem nie są to ulepszenia które pomagają zestawić replikację (jak większośc wersji 1.1.x), ale modyfikacje tego jak sam core slony'ego działa. efekt ma być murowany – szybciej, skuteczniej, mniej zasobożernie, bardziej monitorowalnie :):

  • najważniejsze – spore zmiany w zarządzaniu pamięcią. slony teraz wykrywa kiedy ma do czynienia z dużymi rekordami i replikuje je w inny sposób dzięki czemu nie zżera tyle pamięci co poprzednie wersje
  • szybko zapychana tabela sl_log_1 została wreszcie “dopalona". slony będzie co jakiś czas przełączał się między sl_log_1 i sl_log_2, i jak upewni się, że nic z tej nieaktualnej nie jest już używane, to będzie ją czyścił poprzez TRUNCATE – dzięki czemu rozmiar tych tabel zostanie mocno ograniczony
  • poprawki tyczące się wykonywania poleceń modyfikujących bazę danych poprzez mechanizmy slony'ego – teraz kolejne polecenia będą wykonywane oddzielnie dzięki czemu zniknie problem z odwoływaniem się do dopiero-co utworzonych tabel i/lub pól.
  • poprawki tyczące się uruchamiania slony'ego jako serwisu w windowsach (nie używam więc nie jestem w stanie zweryfikować)
  • sporo poprawek tyczących się stabilności działania slonyego. teraz ma już być zbędne uruchamianie slonego przez watchdoga.

pełna lista zmian dostępna jest w tej chwili via cvsweb.

chcesz być sławny? opisany w książce?

odbywa się właśnie aukcja (kończy się w środę, 12 lipca o 18:15) zwycięzca której zostanie uhonorowany w specyficzny sposób – jego imię stanie się imieniem głównego bad-guya w nowej książce andrzeja pilipiuka o niejakim wędrowyczu 🙂

to byłoby dosyć interesujące gdyby nie to, że już teraz kwota licytacji przekroczyła 1000 pln, a na tyle mnie chwilowo nie stać 🙂 ale pomysł świetny.

postgresql summit – nowości

10 lat temu, na małym webserwerze w kanadzie został wystawiony w internecie – po raz pierwszy – projekt postgresql.

aby uczcić tę rocznicę, a także by dać developerom możliwość spotkania się osobiście (i pewnie uroślinnienia :), została przygotowana mała, 2 dniowa, konferencja – postgresql summit.

są na niej przedstawiciele z praktycznie wszystkich liczących się firm około postgresowych: afilias, enterprisedb, greenplum, command prompt, sra, sun, pervasive i inni.

pierwszego dnia (wczoraj) było kilka interesujących wystąpień.

jednym z najważniejszych technologicznie (w/g mnie) był pokaz przygotowany przez korry'ego douglasa (autora niezłej książki o postgresie, aktualnie pracującego w enterprise db). korry pokazywał przygotowany przez enterprisedb mechanizm pozwalający na np. debugowanie funkcji plpgsql'owych.

całość podobno ma około 10 linii kodu, dzięki czemu wpływ tego kodu w momencie gdy nie korzystamy z niego jest minimalny.

a dodatkowo całość nie została zrobiona jako debugger, tylko zestaw hook'ów w backendzie postgresql'a. dzięki czemu w oparciu o ten sam mechanizm będzie można budować profilery, optymalizatory czy tracery.

wstępne szacunki mówią, że kod zostanie włączony do źródeł postgresa przed wydaniem 8.2, więc jest spora szansa, że w 8.2 będzie już debugger z prawdziwego zdarzenia (z breakpointami, wykonywaniem krokowym, inspekcją zmiennych itd.).

interesujące jest to, że kod został przygotowany w taki sposób by dało się do niego (jako interfejs) dopiąć cokolwiek – w sensie, nie jest to monolityczne rozwiązanie, interfejsy będzie można mieć różne. np. phpmyadmin, czy dowolny inny program tego typu.

pozostaje czekać kiedy 8.2 się ukaże 🙂

polak zwycięzcą european code jam

tomek czajka wygrał pierwszą edycję organizowanego przez google konkursu european code jam.

przypomnieć trzeba, że w 2003 wygrał już w topcoder open, a i wcześniej brał udział i wygrywał w wielu konkursach.

wielkie gratulacje!

google checkout – reality check

od kilku miesięcy było głośno o nowym produkcie google'a – wtedy jeszcze oficjalnie nieistniejącym.

wymyslona nazwa – gbuy okazała się chwytliwa, ale nieprawdziwa. oficjalna nazwa gotowego serwisu, jest zdecydowanie mniej chwytliwa, ale jednocześnie bardziej oddaje biznesmodel tego produktu: google checkout.

projekt ten ma pełnić rolę uniwersalnej metody płatności dla każdego, wszędzie.

do tej pory – jeśli kupowałem w amazonie, a potem w barnes & noble, a potem np. w buy.com – wszędzie musiałem podawać kupę informacji – numer karty, date ważności, nazwisko właściciela, dane dostawy itp, itd.

google checkout rozwiązuje ten problem. dane podaje się raz (system umożliwia przechowywanie dowolnej ilości danych nt. różnych kart kredytowych czy adresów dostaw), a potem – o ile sklep w którym kupujemy obsługuje płatności google checkout, klikamy w ikonkę, podajemy nazwę i hasło swojego konta google (standardowe konto gmail) – i już. wszystkie dane przekazane w sposób bezpieczny.

w dodatku – aby chronić nas google (z tego co zrozumiałem z filmu pokazującego możliwości) nie przekazuje danych nt. kart do sprzedawcy, tylko w pełni pośredniczy między sprzedawcą, a systemem weryfikacji płatności. czysto, szybko i bezpiecznie.

cały pomysł uważam za fenomenalny. czy się przyjmie? to zależy od tego ile sklepów będzie się integrowało z google checkout. jak na razie wygląda to nieźle:

  • masz kartę w citi? zarejestruj ją w google checkout a dostaniesz dodatkowe $5 na drobne wydatki
  • kup w 24 sklepach – dostaniesz rabat $10 lub $20
  • duże nazwy na liście już obsługujących google checkout: starbucks, buy.com, levi's, cd universe i inni
  • co najmniej 80 sklepów już obsługuje – zakres towarów:
    • prenumeraty pism
    • płyty cd, dvd z muzyką, filmami i grami
    • komórki
    • komputery i akcesoria (np. sprzęt sieciowy)
    • kawa, herbata
    • ciuchy
    • buty
    • biżuteria
    • aparaty fotograficzne i akcesoria
    • zegarki
    • sprzęt sportowy
    • i inne

jak widać – system google'a ma już sporo partnerów. czy się przyjmie – ciężko powiedzieć, ale potęga google'a może pomóc – zwłaszcza jak weźmie się pod uwagę inny serwis google'a – wyszukiwarke produktów i cen – froogle.

kiedy pierwszy sklep obsługujący google checkout w polsce? i kto? merlin? a może allegro użyje tego by zyskać kilka dodatkowych punktów przeciwko ebay.pl i paypalowi?

czy wiemy co jemy?

natrafiłem ostatnio na usenecie post informujący o tym jak sprawdzić jakie jajka się kupiło.

niby nic – jajko to jajko. ale w sumie – co jakiś czas się zjada takie coś, o pochodzeniu czego niewiele osób wie coś więcej, poza tym, że “wychodzi jakoś z kury".

myślę, że warto przeczytać – choćby po to by mieć świadomy wybór. są jajka od kur z klatek, są i takie z kur które mają rajskie życie, z bieganiem itd. i nie mówię, że kupowanie jajek od kur chowanych w złych warunkach jest sensu stricte złe. chodzi mi o to, aby mieć świadomy wybór. kupuję takie jajka i wiem jak żyją kury z których te jajka są (a przynajmniej co deklaruje producent, ale biorąc pod uwagę, że większość jajek w handlu ma stempelek “3-PL-xxxx", to znaczy, że raczej nie kłamią).

chcesz przeczytać? kliknij tu.

jeśli natomiast przeczytałeś i stwierdziłeś (jak moja pani), że trzeba to rozpropagować – tu jest link do pdf'a którego możesz wydrukować i rozdawać czy robić cokolwiek innego ci do głowy przyjdzie – pdf skopiowany ze strony jajka.org.

myślisz, że twój system komputerowy jest skomplikowany i nieprzyjazny?

na pewno nie 🙂

jest miły i sympatyczny.

w 2004 roku general services administration w stanach wdrożyła nowy system komputerowy bazujący na rozwiązaniu sap'a. odbyły się szkolenia dla użytkowników (podobno były one robione “na sucho" – bez dostępu do działającej kopii systemu!). nie pomogło.

system był tak skomplikowany, że doprowadzał ludzi do łez (dosłownie). zapisanie edytowanego dokumentu wymagało wykonania 15 (piętnastu!) kroków. czysta rozkosz dla wielbicieli “usability" 🙂

klasyka książek informatycznych

chciałes kiedyś przeczytać którąś z klasycznych pozycji informatycznych, ale brakowało czasu na szukanie, albo kasy na drogie wydania?

teraz możesz ściągnąć z sieci. ta strona zawiera linki do sporej kolekcji klasycznych pozycji, jak choćby:

  • “The Anatomy of a Large-Scale Hypertextual Web Search Engine" założycieli google'a: sergeja brina i larry'ego page'a
  • “A Relational Model of Data for Large Shared Data Banks" – twórcy obecnie używanego modelu baz danych – edgara codd'a
  • “Computer Programming as an Art" – legendy, donalda knutha
  • “A Method for Obtaining Digital Signatures and Public-Key Cryptosystems" – ludzi których praca jest bazą większości obecnie używanych kryptosystemów – rivest, shamir i adleman (rsa)

i wiele innych 🙂

słowo które pozostaje słowem nawet jak mu się kasuje literki

na diggu pojawiła się informacja, że w języku angielskim jest 9 literowe słowo z którego można odejmować literki i nadal pozostaje prawidłowym słowem.
w toku dyskusji komentującej ktoś wylistował sporo takich słów.

stwierdziłem, że zobaczę jak to w polskim.

wziąłem najnowszą listę słów w polskim (zakładając, że używasz *ubuntu lub debiana, paczka nazywa się wpolish, dla innych dystrybucji/systemów pewnie też jest). (nie gwarantuje poprawności słów z tego słownika. po prostu taki miałem pod ręką)
napisałem mały/prosty programik (kod poniżej) i odpaliłem.

pomieliło, pomieliło, zeżarło 400 mega ramu, i dostałem wyniki.

najdłuższe słowa jakie znalazłem to:

  • odkupicielskiej : o => ok => oku => okup => okupi => okupie => okupcie => okupicie => odkupicie => odkupiciel => odkupicieli => odkupicielki => odkupicielski => odkupicielskie => odkupicielskiej
  • odkupicielskimi : o => ok => oku => okup => okupi => okupie => okupcie => okupicie => odkupicie => odkupiciel => odkupicieli => odkupicielki => odkupicielski => odkupicielskim => odkupicielskimi
  • popodgryzaniach : r => rc => rac => rach => ranch => ranach => pranach => praniach => poraniach => pograniach => pogrzaniach => pogryzaniach => poogryzaniach => poodgryzaniach => popodgryzaniach
  • popodgryzaniami : a => pa => pan => pana => panam => panami => pranami => praniami => poraniami => pograniami => pogrzaniami => pogryzaniami => poogryzaniami => poodgryzaniami => popodgryzaniami
  • prasowalniczymi : s => si => soi => sowi => asowi => rasowi => prasowi => prasowni => prasowani => prasowalni => prasowalnic => prasowalnicy => prasowalniczy => prasowalniczym => prasowalniczymi

czyli 5 słów 15 literowych. 🙂 polski daje lepsze (dłuższe) słowa niż angielski 🙂 YEAH!

kod:

#!/usr/bin/perl
use strict;
use Text::Iconv;
use Fatal qw( open );
 
my $converter = Text::Iconv->new("iso-8859-2", "utf-8");
my @words = ();
my %paths = ();
 
open my $fh, "<", "/usr/share/dict/polish";
while (my $l = $converter->convert(lc <$fh>)) {
$l =~ s/^\s*//;
$l =~ s/\s*$//;
next if $l eq '';
my $len = length $l;
$words[$len]->{$l} = 1;
}
close $fh;
 
my @possible_words = sort keys %{ $words[1] };
for my $word (@possible_words) {
$paths{$word} = [ $word ];
}
 
while (1) {
printf "Możliwe (%ux%u): %s\n", scalar @possible_words, length $possible_words[0], join(", ", @possible_words);
 
my %found = ();
my $new_len = 1 + length $possible_words[0];
 
for my $word (@possible_words) {
my @to_check = get_check_words($word);
 
my @existing = grep { $words[$new_len]->{$_} } @to_check;
 
for my $found_word (@existing) {
$paths{$found_word} = [ @{ $paths{$word} }, $found_word ];
$found{$found_word} = 1;
}
}
 
last if 0 == scalar keys %found;
for my $word (sort keys %found) {
print "  - $word : " . join(" => ", @{ $paths{$word} } ) . "\n";
}
@possible_words = sort keys %found;
}
 
exit;
 
sub get_check_words {
my $word = shift;
my @reply = ();
for my $i (0..length $word) {
for my $char ("a".."z", qw( ą ć ę ł ń ó ś ź ż ) ) {
my $temp = $word;
substr($temp, $i, 0) = $char;
push @reply, $temp;
}
}
return @reply;
}