dom za milion dolarów

milion dolarów tu, a milion dolarów tam, to zupełnie co innego.
najlepiej pokazali to panowie z forbes'a – publikując listę różnych domów/mieszkań które można kupić za (około) 1 milion dolarów. w różnych częściach stanów i na świecie.
nie ma cen z polski, ale można zobaczyć domki na kostaryce, w irlandii, francji, rpa, anglii, włochach, australii, argentynie, izraelu, japonii, kanadzie, na kilku wyspach tropikalnych oraz w kilku lokalizacjach w stanach.
muszę przyznać, że żaden z tych domów mnie nie powalił. te na wyspach są fajne, mają baseny, ale za milion dołków spodziewałbym się czegoś lepszego.

wirtualizacjia w standardowym jądrze linuksa?

podobno (to jeszcze nie jest chyba potwierdzone) w następnej wersji linuksa – 2.6.20 ma być włączona (do źródeł) wirtualizacja!
samo w sobie jest to dosyć szokujące. jeszcze bardziej szokujące jest to, że nie będzie to żaden ze znanych i uznanych systemów wirtualizacyjnych – nie xen, bochs, vmware.
będzie to kvm. no właśnie. co to jest kvm?
kvm jest dziełem małej, działającej poniekąd w ukryciu firmy izraelskiej, finansowanej przez dwa znane fundusze vc – sequoię i norwest'a.
ich produkt jest mały. działa jedynie w oparciu o wirtualizację sprzętową (to dosyć dziwne, bo jak kolesie od xena pokazali jakiś czas temu wirtualizacja sprzętowa jest wolniejsza od software'owej). nie potrafi wszystkiego tego co potrafi np. xen.
za to potrafi uruchamiać na maszynach wirtualnych standardowe, niemodyfikowane linuksy czy windowsy!.
podobno.
co z tego wyjdzie – zobaczymy. martwi mnie trochę fakt iż nie ma 2.7 gdzie tego typu pomysły byłyby całkiem na miejscu i miejscem do zabawy jest 2.6. używany przez wielu produkcyjnie.

jak dodać kolumnę do tabeli

teoretycznie dodanie kolumny do tabeli nie jest problemem. od daaaaaaaaaaaaaawna istnieje ALTER TABLE ADD COLUMN. czy jednak jest to zawsze bezproblemowe?
niestety nie.
otóż – dodanie pola do tabeli zakłada na nią (w całości) exclusive locka.
dla standardowego:

ALTER TABLE t ADD COLUMN c INT8;

to nie problem – taki ALTER trwa moment.
ale co jeśli robimy:

ALTER TABLE t ADD COLUMN c INT8 NOT NULL DEFAULT 123;

tu pojawia się problem.
po pierwsze – not null – wymusza sprawdzenie zawartości bazy.
po drugie – ważniejsze – wyspecyfikowanie "default" przy dodawaniu pola automatycznie wstawi wartość domyślną do wszystkich rekordów obecnie w tabeli.
zasadniczo – super. o to chodzi. ale jak sobie nałożymy na to fakt iż ALTER TABLE lockuje tabelę – oops. recepta na kłopoty.
w szczególności – mając tabelę typu kilka milionów rekordów, na której non stop ktoś pracuje (np. dosyć aktywny serwis www) – zrobienie na niej takiego ALTERa to realnie sprawę ujmując wyłączenie ta
beli i serwisu.
jak więc zrobić dodanie z wyspecyfikowaniem w sposób słuszny?
no cóż – trzeba robić to krokami:
po pierwsze:

ALTER TABLE t ADD COLUMN c INT8;

to się wykona błyskawicznie.
potem (ale jako oddzielne zapytanie!):

ALTER TABLE t ALTER COLUMN c SET DEFAULT 123;

to też pójdzie szybko bo niczego nam nie zaktualizuje. po prostu – nowo wstawiane rekordy będą miały defaulta.
teraz – trzeba zaktualizować starsze. najprościej:

UPDATE t SET c = 123 WHERE c IS NULL;

w szczególności – jak danych jest więcej niż mało (powiedzmy powyżej 100,000 rekordów), to warto rozbić to na kilka oddzielnych zapytań. np:

UPDATE t SET c = 123 WHERE c IS NULL AND id BETWEEN 1 AND 100000;
UPDATE t SET c = 123 WHERE c IS NULL AND id BETWEEN 100001 AND 200000;

itd.
oczywiście – nie można do tego celu użyć funkcji – cała idea tego rozbijania polega na tym by nie robić tego wszystkiego w jednej, olbrzymiej, transakcji!.
no i na koniec pozostaje:

ALTER TABLE t ALTER COLUMN c SET NOT NULL;

to chwilę potrwa – postgres musi sprawdzić dane, ale i tak jest to krótsze i mniej blokujęce niż robienie wszystkiego za jednym zamachem.
oczywiście w tej chwili ktoś może się odezwać i powiedzieć, że w bazie <xxx> to jest prostsze, nie trzeba nic rozbijać, bla bla bla. fakt. w postgresie też nie trzeba – to co pokazałem to jedynie hint jak obejść blokadę przy dodawaniu pól z wartościami domyślnymi przy sporych tabelkach. można to zrobić jednym zapytaniem. i też zadziała. po prostu czasem nie chcemy/nie możemy mieć locka na taki czas jaki jest potrzebny ALTERowi 🙂

fani maca nie mają poczucia humoru?

eh. "uwielbiam" mac'i.
i ich "subtelnych" i "obiektywnych" użytkowników. ale to, że mają poczucie humoru tak samo wysublimowane jak rosyjskie traktorzystki jest dla mnie pewnym novum.
david pogue, autor kolumny technicznej w new york times, nakręcił krótki filmik w którym nabijał sie z windows vista, która w ewidentny sposób ściągnęła pewne rozwiązania z maca.
wszystko byłoby ok, ale ubrał swoje nabija nie się z microsoftu w sarkazm, prezentując poglądy jakoby vista nie ściągała pomysłów z mac os x.
w/g mnie ironia i sarkazm były doskonale widoczne i oczywiste. ale nie dla mac-"fanboyz". david dostał maile z bluzgami za to, że promuje vistę. uwielbiam tych ludzi.

tsearch i synonimy

od daaaaawna w postgresie jest dostępny świetny silnik wyszukiwania pełnotekstowego – tsearch.
ma on spore możliwości, ale jest dosyć trudny przy pierwszym podejściu – trzeba poświęcić z pół godziny na to by załapać o co chodzi, skonfigurować i używać.
natomiast jak już się zrozumie co i jak – można prosto robić nowe, ciekawe rzeczy. przykładowo – dodać własne słowniki synonimów. dokładną metodę zrobienia takiego słownika i dodania go do systemu wyszukującego przedstawił w swoim blogu magnus hagander – ja to przeczytałem i polecam każdemu kto chce zobaczyć jak zrobić ciekawe rzeczy w postgresie.

kolejny “otwarty” stuff

wkurza mnie niepomiernie maniera robienia wszystkie open-. open beer, open bios, open graphic card itd.
ja rozumiem, że ideologia opensource się sprawdziła (przynajmniej tak głosi spora część ludzi), ale przenoszenie tego na sprzęt to przegięcie.
z tego powodu ignorowałem wszelkie informacje o open-telefonach. do czasu.
zobaczyłem to zdjęcie, i się zainteresowałem:

czemu? bo ten telefon mi się spodobał.
więc wszedłem na stronę projektu i poczytałem. przeczytałem press-release'a, przeczytałem z prezentacji. i wyciągnąłem kilka wniosków:

  1. jest nieźle
  2. nie ma zadęcia około-stallmanowego
  3. wydaje się, że kolesie wiedzą co robią, mają wykonawcę, pomysł i biznes-plan!

telefon ma nie mieć klawiatury – za to ekran dotykowy reagujący na palec lub pisak. fajne. pod spodem jakiś linuks (jeden ze slajdów sugeruje, że ma to być cos około debianowego, ale może to tylko przykład).
co z tego wyjdzie? zobaczymy za miesiąc-dwa. jeśli pokaże się w polsce – chyba postaram się wymienić swoje ulubione blackberry na ten telefon. bo jest fajny. i dobrze wygląda. nie dlatego, że jest open-*.