pervasive już nie supportuje postgresa

półtora roku temu (początek stycznia 2005) firma pervasive (znana jako producent komercyjnej bazy danych do zastosowań małych i średnich) ogłosiła, że będzie:

  • oferować komercyjne wsparcie do postgresa
  • oferować gotowy, “zabundlowany" pakiet – postgres (z ich łatkami) plus wsparcie
  • pomagać developerom w rozwijaniu kodu

tydzień temu, w otwartym liście do “postgresql community", prezes pervasiva stwierdził, że rezygnują z tego “projektu".

nie postgresa tylko wsparcia i całej otoczki.

podobno przyczynami jest to, że nie docenili ilości i jakości wsparcia jakie użytkownicy mają już teraz dostępne na internecie (listy mailingowe, kanały irc). jak dla mnie oznacza to to, że mieli za mało klientów na te usługi. może nawet wcale nie mieli?

john farr (prezes pervasiva) stwierdził, że oczywiście będą supportować aktualnych klientów, ale nowych umów zawierać już nie będą.

do tej informacji mam mieszane uczucia. z jednej strony – szkoda trochę, pervasive jest trochę znany więc udany mariaż dałby większe publicity postgresowi, z drugiej strony – nie kojarzę co takiego cudownego ludzie z pervasive'a zrobili dla postgresa. w/g farra dali kod do dtrace'a, ale on będzie użyteczny (o ile wiem) jedynie pod solarisem. a to nie jest zbyt popularny system.

z trzeciej strony – wolę by rozwijały się i zyskiwały klientów firmy stricte postgresowe – command prompt, sra, greenplum.

więc chyba ogólnie jestem raczej zadowolony z takiego obrotu zdarzeń.

pierwszy polak w wyścigach f1

w niedzielę robert kubica wystartuje w swoim pierwszym wyścigu f1. jest to jednocześnie pierwszy wyścig w którym bierze udział jakikolwiek polak.

polak wystartuje “w barwach" bmw-sauber. team ten nie jest najmocniejszy – 6 pozycja wśród 11 ekip, ale i tak jest to wielki sukces.

na razie występ nie oznacza, że robert będzie się dalej ścigał w f1 – występuje w zastępstwie kontuzjowanego jacquesa villeneuve’a. ale jeśli wypadnie dobrze, może wejść na 1 z dwóch miejsc dla nowych kierowców w teamie na przyszły rok.

tor na węgrzech (na którym odbędzie się ten wyścig) jest uważany za dosyć trudny, głównie przez nawiewany piasek – tor od niego staje się śliski.

jaki będzie efekt będzie można zobaczyć w czasie relacji w niedzielę – na tv4 od 13:40. bolid kubicy pojedzie z numerem 17.

co nowego w postgresie 8.2

poniższa lista na pewno nie jest kompletna. na pewno będą tony bugfixów, ale tu postaram się tylko wyliczyć to co moim subiektywnym zdaniem najistotniejsze. za podstawę służy nowiutka, prosto z cvs'u, kopia pliku TODO informującego co jest do zrobienia, a co już jest gotowe.

  • połączenie do postgresa będzie mogło wylistować wszystkie “prepared statements". jest to szczególnie istotne/pomocne w przypadku korzystania z mechanizmów do buforowania (poolowania) połączeń
  • ponownie włączona zostaje obsługa opcji full_page_writes w konfiguracji – kod obsługujący został poprawiony, błędy usunięte. opcja ta ma służyć  do przyspieszenia obsługi wal'a.
  • możliwość  przeglądania i kasowania logów serwera zdalnie poprzez wykonywanie odpowiednich zapytań sql
  • sporo poprawek tyczących obsługi typów danych inet i cidr
  • dodana została funkcja sleep() pozwalająca symulować działanie długich zapytań do testów  bazy pod kątem wielozadaniowości
  • funkcje definiowane przez użytkownika, zdefiniowane jako zwracające typy domenowe (CREATE DOMAIN) będą miały (wreszcie!) obsługę constraint'ów domen.
  • limit/offset oraz  fetch/move będą teraz używały int8 – dzięki czemu będzie można wygodniej obsługiwać naprawdę duże recordsety
  • truncate dorobi się opcji cascade (no i restrict) dzięki czemu będzie kasować też tablice zależne. groźne, ale przydatne.
  • prepare będzie się automatycznie domyślał typów parametrów poprzez analizę zapytania
  • możliwośc dodawania komentarzy do wszystkich typów obiektów (w tym ról, tablespace'ów i baz)
  • operatory pracujące na zmiennych typu rekordowego, np. (a,b) < (1,2) będą działać zgodnie ze specyfikacją sql'a.
  • dodany widok systemowy pokazujący zawartośc free-space-map.

wydaje się być interesujące. nie widzę tu przełomów (choć dodanie prawidłowo działających operatorów rekordowych jest na pewno istotne) na miarę toast'a czy srf'ów, ale jest to zdecydowanie kawał dobrej roboty.

zderzenie z asteroidą w 2036?

wyczytałem dziś, że będziemy mieli interesujące zdarzenie (niekoniecznie zderzenie) za te 30 lat.

dokładniej – w 2029 ma przejść koło ziemi asteroida apophosis. przejdzie blisko – szacuje się, że w “szczytowym" momencie będzie bliżej powierzchni ziemi niż satelity telekomunikacyjne! czyli naprawdę blisko.

przy tym przejściu naukowcy będą obserwować i liczyć czy przy następnym przejściu w 2036 roku asteroida uderzy w ziemię.

jak na razie prawdopodobieństwo trafienia w ziemię szacuje się na 1 do 38000. czyli biorąc pod uwagę wartości astronomiczne – to prawdopodobieństwo jest naprawdę duże.

w przypadku uderzenia zostanie wyzwolona siła taka jak przy wybuchu 100 bomb jądrowych (nie podali jakiego typu – hiroshima czy może tych późniejszych, ale tak czy inaczej spora siła). zniszczone zostałoby zachodnie wybrzeże ameryki (plus efekty dodatkowe typu tsunami).

trzeba przyznać, że nie brzmi to dobrze. oczywiście takie uderzenie nie będzie oznaczało końca ludzkości. ale na pewno mocno by się odbiło na życiu każdego z nas.

indie – kraj możliwości i braku skrupułów

indie. drugie co do liczebności państwo na ziemi. ponad 1 miliard ludzi, z czego olbrzymia część żyje w ubóstwie.

w rzeczonym kraju jest wielu żebraków. w sumie – praca jak każda inna. trzeba wstać rano, pójść do biura/na ulicę no i pracować.

okazuje się, że na żebrakach można zarabiać. i nie chodzi tu nawet o mafie zmuszającą do oddawania wyżebranych pieniędzy.

dużym echem odbiła się w indiach sprawa pewnego reportażu z użyciem ukrytej kamery. okazuje się, że niektórzy lekarze dorabiają do pensji wykonując amputacje. nie w szpitalu i nie konieczne.

lekarz przychodzi do żebraka i namawia go (stroną aktywną jest lekarz!) aby ten poddał się zabiegowi amputacji. bo jako kaleka będzie miał większe szanse na godziwy zarobek.

proponują różne metody na wywołanie “konieczności" wykonania amputacji – przy czym najpopularniejsze jest założenie ucisku blokującego dopływ krwi do kończyny, przez co wdaje się gangrena. no i nogę/rękę trzeba amputować.

zabieg kosztuje około $200.

sprawą zainteresowało się ichniejsze stowarzyszenie lekarzy i policja.

interesujące jest to, że z tego co czytałem o sprawie było wiadomo od jakiegoś czasu. tyle, że teraz pojawił się reportaż.

kiedy pojawi się reportaż nt. wypożyczania małych/ chorych dzieci? albo “demontowania" (dla niedomyślnych: po uprzednim zabiciu) dorosłych i dzieci “na części"?

indie są wielkim rynkiem. zgarnęły olbrzymią ilośc pieniędzy w seriach kontraktór na outsourcing (z których to kontraktów teraz firmy amerykańskie uciekają). zgarniają co roczkie miliardy dolarów za badania nowych leków – human trials. i co i rusz pojawa się kolejny “news" tego typu. może jednak u nas nie jest tak źle?

myspace dla dzieci, myspace porno, myspace …

social networking. strasznie modne ostatnio określenie. serwisy implementujące idee social networkingu stają się bardzo cenne. flickr, myspace, youtube.

myspace stał się pewnym symbolem. gdy teraz ktoś zrobi kolejny site typu grono/orkut to nie mówi się, że jest to nowy orkut, tylko nowy myspace.

na kanwie tego pomysły powstał site dla dorosłych, o którym pisałem niedawno.

dziś dowiedziałem się o kolejnym serwisie typu myspace. tym razem grupa docelowa jest jeszcze starsza. ludzie ponad 50 lat.

tak jak na myspace są informacje o muzyce, sportach itd. na eons są informacje o hobby odpowiednich dla “staruszków", interaktywne gry pobudzające umysł a także osobiste kalkulatory długości życia.

jednym z najbardziej interesujących (i zarazem kontrowersyjnych) pomysłów tego serwisu są automatyczne informacje. na myspace można się dowiedzieć, że ktoś ze znajomych ma urodziny. notyfikacje na eonsach też informują o znajomych. tyle, że nie o urodzinach a o zgonach.

można ustawiać sobie “alerty" gdy np. umrze ktoś kto w swojej historii (cv/biografia) wpisze określoną firmę czy szkołę.

pomysł jest interesujący. biznes kręcący się wokół śmierci jest dosyć spory i obejmuje wiele rzeczy – od trumien, urn aż po pełne planowanie pogrzebów wraz z np. zamówieniem dostawy lodów dla wszystkich uczestników.

czy to sie przyjmie? ciężko powiedzieć. z jednej strony pomysł jest interesujący, z drugiej – ludzie którzy teraz mają > 50 lat, raczej nie korzystają z komputerów/sieci…

nowa aplikacja z microsoftu

microsoft dał informacje o nowej aplikacji jaką tworzą. slashdot ma podsumowanie z kilkoma różnymi linkami (w tym do filmów demonstracyjnych).

aplikacja służy do automatyczniego łączenia dużej ilości zdjęć w mapy trójwymiarowe.

po wgraniu zdjęć program je łączy dobierając automatycznie współczynniki skali, obrotu 3d, przesunięcia i prezentuje środowisko 3d zbodowane przy użyciu tych zdjęć.

całość wygląda bardzo interesująco. polecam obejrzenie filmików aby zorientować sie co i jak.

istotne jest to, że w/g zapowiedzi przynajmniej pierwsze wersje będą darmowe!

w prezentacji kilka razy pada sformułowanie nt. dodania wszystkich zdjęć świata. czyżby microsoft chciał konkurować z googlem nie maszynką do wyszukiwania, tylko rozbudowaną przeglądarką zdjęć?

postgresql 8.2 feature freeze!

dowiedziałem się właśnie, że postgres 8.2 wszedł właśnie w fazę feature freeze.

konsekwencje:

  • można się spodziewać relatywnie niedługo 8.2 stable.
  • nowe super feature'y na serwerach produkcyjnych 🙂

co dokładnie będzie nowego – postaram się jeszcze dziś napisać.

z czego składa się bolid f1?

interesowało was kiedyś jak jest zbudowany bolid f1? pojazd który jest szybszy od praktycznie wszystkiego innego jeżdżącego po ziemi?

paul veroude, duński artysta, przy wspólpracy teamu f1 hondy przygotował interesującą pracę. 3200 części bolidu f1, zostało rozłożonych i zawieszonych na cienkich drucikach tak jakby bolid “wybuchł". każdą część można obejrzeć z każdej storny, zobaczyć co i jak się z czym łączy. fajne.

obiektowy perl – jak?

na wstępie – ja wiem, że perl nie jest prawdziwie obiektowy. nie ma enkapsulacji. jeśli szukasz tutaj okazji do zwady to jej nie znajdziesz. wiem, że java, smalltalk, python, ruby i pewnie z 3 tony innych języków mają lepszą obiektowość.

nie musisz tego dalej czytać. to niebezpieczne. zawiera kawalki kodu perlowego, które (co dowiedli angielscy naukowcy) są niebezpieczne i powinny być traktowane tak jak niebezpieczne odpady z elektrowni jądrowych.

papa.

ok. teraz, odstraszywszy cieniasów można przejść do sedna.

programowanie obiektowe w perlu jakie jest każdy koń widzi. jest kilka metod, prostych, skomplikowanych, fajnych i totalnie niefajnych.

najprostszą metodą na zrobienie obiektowej klasy jest coś takiego:

package costam;<br />
use strict;<br />
sub new {<br />
my $class = shift;<br />
my $self  = {};<br />
bless $self, $class;<br />
return $self;<br />
}

i potem w każdej funkcji (która teraz jest metodą) piszemy na początku:

my $self = shift;

i już. dane obiektu trzymamy w $self, traktując go jako referencję na hasza. proste, miłe i skuteczne.

część mądrych ludzi stwierdziła, że jest to niebezpieczne bo z zewnątrz każdy może zobaczyć jakie zmienne (wartości w haszu) ma obiekt zadeklarowane. stąd pojawiła się idea obiektów inside-out, które są bezpieczne (poniekąd), modne i ogóle fajne. i których ni chu-chu nie lubię i polubić chyba nie zdołam.

trzymam się za to obiektów bazujących na haszach.

pisanie za każdym razem my $self = shift; jest upierdliwe.

brak akcesorów do zmiennych bywa niemiły.

konieczność pisania za każdym razem praktycznie tego samego sub new {} jest wkurzająca.

czy nie da się z tym nic zrobić?

da! na każdy problem jest lekarstwo (w przypadku perla jest to wiele lekarstw, gdzie każdy ma ulubione inne).

moim ulubionym lekarstwem jest spiffy. miły moduł, którego użycie wygląda tak:

use Spiffy qw( -Base );

i to wszystko.

co daje?

no cóż. zacznijmy od przepisanie pierwszego przykładu (klasa co nic nie robi i ma tylko konstruktor). wersja spiffy:

package costam;<br />
use strict;<br />
use Spiffy qw( -Base );

i to wszystko. konstruktor jest tworzony automatycznie. co jeszcze?

otóż pojawia się kilka fajnych rzeczy:

  1. upierdliwe my $self = shift; znika – nie trzeba go pisać. spiffy dodaje to automatycznie do kodu w czasie kompilacji. niby pierdoła, ale jak ma się moduł z np. 40 metodami, to to już jest 40 linijek zbędnego kodu mniej!
  2. możliwość definiowania pól (z automatycznym tworzeniem akcesorów):
    field ‘logfile' => undef;
    zdefiniuje metodę $self->logfile która w zależności czy zostanie wykonana bez czy z parametrami to odpowiednio zwróci albo ustawi wartość pola ‘logfile' (podawanie wartości domyślnej => jest opcjonalne)
  3. pola stałe:
    const ‘debuglevel' => 3;
    zasadniczo generuje metodę debuglevel która zwraca wartość 3
  4. stub'y – metody które istnieją, ale próba wywołania skończy się błędem. służą do wymuszania przedefiniowania określonych metod w klasach dziedziczących:
    stub ‘save';
    musi zostać przedefiniowany, inaczej każde wywołanie $object->save zakończy się błędem (informującym o przyczynie, a nie czymś w stylu “undefined subroutine").
  5. uproszczone wołanie metod z klas dziedziczonych. bez spiffy'ego trzeba było robić coś w stylu $self->SUPER::metoda(@_); teraz wystarcza proste:
    super;
  6. syntactic sugar – w modułach które używają spiffy'ego nie trzeba podawać już tego “1;" na końcu.
  7. wszystkie zdefiniowane pola są honorowane przy wywołaniu konstruktora. tak więc można:
    package cos;
    use strict;
    use Spiffy qw( -Base );
    field ‘x' => 0;
    field ‘y' => 0;
    package main;
    my $object = cos->new( x=> 10 );
    i zadziała to w pełni logicznie 🙂

oczywiście nie ma róży bez kolców.

ponieważ dodanie kilku z powyższych punktów wymusza używania czarnej magii (filtry kodu), spiffy nie jest do końca zgodny ze wszystkim co chodzi po ziemi.

pojawiły się nawet opinie, że jakieś moduły są psute używaniem spiffy'ego – czego osobiście przez kilka lat spiffy'owania nie zauważyłem, ale nie twierdzę, że problem nie istnieje.

istotnym problemem jest coś takiego.

bez spiffy'ego można napisać klasę dziedziczącą z kilku klas tak:

use base qw( klasa::a klasa::b );

ale jeśli używamy spiffy'ego to sprawa się komplikuje i trzeba to rozbić:

use base qw( klasa::a );<br />
use base qw( klasa::b );

nie jest to w/g mnie wielkie utrudnienie – zwłaszcza biorąc pod uwagę ile rzeczy spiffy mi zaoszczędza.

na koniec drobna informacja o innych rzeczach jakie spiffy daje – z tym, że są to rzeczy z których zdecydowanie rzadziej korzystam:

  • prywatne metody. metoda zapisana poprzez:
    my sub jakas_metoda {
    staje się metodą prywatną i może zostać wywołana jedynie przez inne metody tego obiektu
  • dopisanie XXX pozwala na proste debugowanie kodu – poprzez wypisywanie ładnie sformatowanych (yaml) sturktur danych. przykład użycia z manuala:
    XXX my @stuff = grep { /keen/ } $self->find($a, $b);

tak to wygląda. dzięki temu jak to działa można napisać np. coś takiego:

package modulik;<br />
use strict;<br />
use Spiffy qw( -Base );<br />
field 'x' => 0;<br />
field 'y' => 0;<br />
const 'wsp_x' => 1.33;<br />
sub suma {<br />
return ( $self->x + $self->y ) * $self->wsp_x;<br />
}<br />
package main;<br />
use strict;<br />
my $object = modulik->new(x => 10, y => 12);<br />
print $object->suma, "\n";

nie jest to może najbardziej zaawansowany kod jaki można sobie wyobrazić. ale spróbujcie go zapisać bez spiffy'ego.

aha. no i spiffy, wewnętrzenie trzyma wszyskie pola (field) jako klucze w $self – czyli tak jak perl przykazał.