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ł.

wybuchowe laptopy

(wstęp: piszę tego posta, jak i większość innych, z della latitude d610. i mam nadzieję, że on mi nie wybuchnie).

dell ma ostatnio drobne problemy z bateriami w laptopach.

najpierw zapalił sie laptop na konferencji w japonii:

dell banger1.jpgdell banger2.jpg

potem podobny los spotkał innego lapa, tym razem w stanach:

burneddell.jpg

i teraz – kolejna maszynka, tym razem w singapurze:

470_dell1.jpg 470_dell3.jpg470_dell4.jpg470_dell5.jpg470_dell6.jpg470_dell7.jpg

zaczynam się poważnie obawiać swojego della. do domu chyba go nie będę zabierał.

choć trzeba sprawiedliwie dodać, że nie tylko dell ma takie problemy. gdzieś czytałem (nie pamiętam gdzie) o laptopie apple'a który spalił się wraz z dywanem na którym leżał. właściciele ocenili straty na $15000.

czy wasze leptopy też wydają się groźne?

standard iso dotyczący bezpieczeństwa komputerowego

dowiedziałem się właśnie, że iso opublikowało standard (iso27001) tyczący się bezpieczeństwa systemów informatycznych.

jest to o tyle istotne, że biorąc pod uwagę ostatnie wydarzenia na świecie (zgubione laptopy z danymi ludzi, wycieki danych) mogę sobie bezproblemowo wyobrazić jak duże firmy zaczną wdrażać ten standard i dodatkowo będą go wymagać od podwykonawców.

dokładny standard można przeczytać poprzez zakup ($107 lub 90 funtów) – nawet jeśli nie zamierzamy (nie chcemy, nie stać nas, nie widzimy potrzeby) faktycznie uzyskać certyfikatu zgodności – zawsze wiedza tam zawarta, “best practices" i międzynarodowe standardy zachowania będą bardzo przydatne.

jak wymyślić coś nowego, fajnego?

proste – zebrać kilka sprytnych osób, i pogadać.

ibm stwierdził, że tego mu trzeba. zebrał więc 100000 (sto tysięcy) swoich pracowników i dal im szansę pogadania nt. nowych projektów!

oczywiście zebranie takiej ilości ludzi i pozwolenie im na gadanie w świecie rzeczywistym byłoby bardzo trudne. zamiast tego przeprowadzono całe spotkanie (innovation jam) online.

po około tygodniu rozmów, forum zostało zamknięte. teraz przez miesiąc wydzielony team przejrzy logi rozmów i wylosuje najlepsze pomysły. a potem jam się powtórzy, z tym, że wtedy będą oceniać te najlepsze pomysły.

co z tego wyjdzie? nikt nie wie. nawet ludzie z ibm'a. mogą wyjść rzeczy wielkie, użyteczne. może się też zdarzyć, że nic z tego nie wyjdzie, ale to akurat jest mało prawdopodobne.

pozostaje sie uzbroić w cierpliwość i pod koniec sierpnia szukać newsów o tym co ibm będzie robił 🙂

ftth we francji. a kiedy u nas?

ftth (fiber-to-the-home, czyli światłowód do domu) jest dosyć drażliwym tematem w stanach. wnikać nie będę, ale mają tam związany z tym niezły przekręt.

natomiast we francji właśnie rusza pilotowy program dla mieszkańców wybranych miast. za 70 euro miesięcznie dostajesz światłowód a w nim:

  • telefon
  • tv (pewnikiem coś jakby kablówka)
  • internet

jaki internet? *szybki* 2.5 gigabita download, 1.2 gigabita upload!

rany. płyta cd ściągnięta w 3 sekundy (900 mega danych.). 70 euro to daje, przy dzisiejszym kursie jakieś  275 pln miesięcznie. niby sporo. ale ja teraz płacę za chello 12mbit/1mbit 299pln! eh.

interesujące dodatki do kont gmailowych

może nie wszyscy wiecie, że mając konto pocztowe na gmailu ma się praktycznie nieograniczoną ilość kont.

po pierwsze – gmail pozwala w dowolnym miejscu nazwy konta wstawić kropkę. tak więc mając emaila hubertlubaczewski@gmail.com (akurat takiego nie mam) można też używać hubert.lubaczewski@gmail.com.

dodatkowo – jeśli w nazwie konta wstawimy znak + to wszystko co za nim będzie zostanie zignorowane. czyli do rzeczonego konta można by dorobić hubert.lubaczewski+newsy@gmail.com. i działać będzie.

po co to? proste. mając te możliwości można zrobić dowolnie dużo aliasów do różnych celów. np. do podawania na formularzach webowych. dzięki czemu od razu się dowiemy kto sprzedał email – np. jeśli rejestruję się zawsze podając +domena_na_ktorej_sie_rejestruje – np.: hubert.lubaczewski+onet.pl@gmail.com, i potem dostanę na ten konkretny adres/alias spam – od razu widzę, że to onet mnie “zdradził".

tak samo z newsami, forami itd, itp.

oczywiście nie chodzi o samą ochronę przez spamem – można w ten sposób sobie prosto segregować pocztę. przykładem może być prosty filtr który jeśli zobaczy maila wysłanego na hubert.lubaczewski+bb@gmail.com wyśle mi automatycznie kopię na blackberry'ego (taka komórka z obsługą maili).

lista możliwych zastosowań jest spora. trzeba tylko pomyśleć i zastanowić sie do czego by się samemu użyło automatycznego segregowania poczty.