Category: Uncategorized
wygrał podróż w kosmos. i przegrał.
w 2005 roku oracle ogłosiło konkurs w którym główną nagrodą był darmowy przelot na orbitę okołoziemską organizowany przez ‘space adventures ltd.' – tę samą firmę która organizowała przeloty na międzynarodową stację kosmiczną za 20 milionów dolarów.
konkurs z wiedzy o javie wygrał niejaki brian emmett. ucieszył się, bo od dawna fascynował się kosmosem.
ale, okazało się, że nie ma tak łatwo.
wygrana została wyceniona na $138,000. a od przychodu należy zapłacić podatek. w tym przypadku – $25,000.
po jakimś czasie, poświęconym na szukanie metody obejścia problemu musiał pogodzić się z rzeczywistością. i oddać wygraną gdyż, jak powiedział, nie stać go na zapłacenie tego podatku!
oić. to musiało boleć.
musze przyznać, że postawa oracle'a mnie zdziwiła. jest dosyć powszechną praktyką, że przy loteriach z wartościowymi nagrodami, do nagrody dołącza się czek na taką kwotę by zwycięzca miał jak zapłacić podatek. co prawda od tego czeku też trzeba zapłacić podatek, ale to już mały problem (wystarczy czek na odpowiednio większą kwotę).
najnowszy (jeszcze nie zakończony) konkurs z kosmiczną nagrodą ma microsoft. ma się zacząć jakoś tak na dniach i jest częścią promocji visty. zwycięzca poleci dopiero w 2009 roku (o ile się ziszczą plany firmy rocketplane). i na dodatek do wygranej (wycenionej na $253,500) zwycięzca dostanie czek na $50,000 co powinno wystarczyć na opłacenie urzędu skarbowego.
eksperci ze świata
linkedin rozpoczął (pewnie jakiś czas temu, ale dopiero teraz się dowiedziałem) testy nowego serwisu. “eksperci". bazując poniekąd na swojej bazie użytkowników, oraz na serwisie “answers" wytypowali ekspertów z różnych dziedzin.
dzięki nowemu serwisowi można poprosić o konsultację na dowolny temat. linkedin “dostarczy" eksperta i już można z nim rozmawiać/rozwijać się/rozwiewać problemy.
nie jest to usługa darmowa – w końcu taki ekspert to raczej osoba zajęta. godzina rozmowy kosztuje $500. pierwsza. za następne płacimy tylko po $250.
oczywiście linkedin nie zachowuje całej kasy – dzieli się nią z ekspertem który odpowiadał.
muszę przyznać, że jest to interesujący pomysł – jak by nie patrzeć – mają w bazie 9 milionów osób. wraz z olbrzymią ilością zawodowych informacji o każdej z nich.
oczywiście – jeśli chcesz wiedzieć coś prostego – serwis będzie za drogi. ale jeśli np. chcesz z kimś pogadać o np. twoim biznesplanie czy strategii – może się to okazać jedną z najlepszych możliwych inwestycji.
tapeta na dzis
mysql rządzi? indeksy pokrywające
przeczytałem właśnie o pewnej funkcjonalności mysql'a o której wcześniej nie wiedziałem. w dodatku – której postgresql nie ma!
chodzi o indeksy pokrywające.
co to jest?
ogólna idea polega na tym, że silnik bazodanowy może wykorzystać do zwracania wartości wartości pobrane z indeksu a nie z tabeli.
kumacie coś z tego? pewnie nie. ja też nie. więc przykład.
mamy tabelkę:
# create table zakupy (id serial primary key, user_id int4, kwota int4);
piszę po postgresowemu, ale chodzi o pokazanie idei.
teraz.
często potrzebujemy zrobić zestawienie nt. łącznej sumy kwot zakupów użytkownika. czyli wynik zapytania:
select sum(kwota) from zakupy where user_id = <costam>
aby to przyspieszyć robimy indeks na pole user_id:
create index x on zakupy (user_id).
i jest lepiej.
system działa tak, że wyszukuje które rekordy w tabeli powinien wziąść pod uwagę (przy pomocy indeksu), potem je znajduje w tabeli, odczytuje, sumuje i zwraca.
proste.
ale wbrew pozorom mało wydajne.
w mysql'u jest coś takiego jak rzeczone indeksy pokrywające.
oznacza to, że jeśli zrobimy indeks:
create index x on zakupy (user_id, kwota).
to mysql użyje tego indeksu w dwóch celach:
- do znalezienia odpowiednich rekordów
- do pobrania kwot do zsumowania
na czym polega rewolucja? nie trzeba sięgać do tabeli by znaleźć dane!
szybkie. wydajne. zajebiste. tyle, że zżera trochę więcej miejsca na dysku. ale to jest tani zasób.
covering indices nie są domeną mysql'a. mają je też inne bazy. szybki searchmash pokazał, że na pewno są one obecne też w mssql'u (więc pewnie w sybase też). zgaduję, że oracle i db2 też je mają.
a czemu postgres nie? no cóż. temat był kilkukrotnie poruszany na liście pgsql-hackers, ale okazało się, że ze względu na mvcc sprawa jest mocno skomplikowana. i (na razie) nie ma. muszę przyznać, że jest to pierwsza rzecz jakiej (jako postgresowiec) zazdroszczę mysql'owi.
tani samochód od toyoty
toyota zapowiedziała prace nad ultra-tanim samochodem.
jako bezpośrednią przyczyne podano renault/dacia logan. samochód ten jest bardzo tani (jak na nowy) – kosztuje od 5,000€ (w polsce od 27,000pln).
co chce zrobić toyota? przebić tę ofertę. użyją ultra-tanich materiałów i technologii. jak trzeba, to stworzą coś zupełnie nowego. nie podano ceny nowego samochodu, ale ma być to "przynajmniej taniej niż logan".
pomysł jest mocno interesujący – toyota jest znana z jakości. może się okazać, że znajdą dużą ilość chętnych na takie autko. a stać ich na badania nad nowymi materiałami i technologiami – jeśli nie wydarzy się nic niesamowitego – w tym roku toyota prześcignie general motors i zostanie największym wytwórcą samochodów na świecie.
rocznica technologii stealth
dowiedziałem się właśnie przypadkiem (przeglądając archiwum skunk-works), że 16 sierpnia zeszłego roku była okrągła, 50 rocznica początku prac nad tym co z biegiem czasu stało się technologią stealth.
na początku chodziło po prostu o zmniejszenie radarowego echa odbitego od samolotu. rozpoczęto wtedy prace nad "project rainbow". prace zakończone porażką. ale była to pierwsza znana chwila gdy ktoś celowo i (w miarę) systematycznie pracował nad ukryciem samolotu przed radarami.
fajne. w sumie – pewnie sama ta informacja przez długi czas była tajna 🙂
lampy
eh. i kolejny produkt którego nie mam jak kupić 🙁
trafiłem na stronę firmy eurofase. wbrew nazwie nie ma nic wspólnego z europą.
firma zajmuje sie produkcją wszystkiego co świeci. żyrandole, kinkiety, lampy ogrodowe. i to co robią jest zdecydowanie mniej "masowe" – w rozumieniu wyglądu, a i pewnie ceny.
przykłady które mnie zafascynowały – seria żyrandoli opartych na motywach roślinnych:
tapeta na dzis
perl best practices critic
jakiś czas temu damian conway napisał "perl best practices" ("perl. najlepsze rozwiązania"). zawarł w niej szereg sugestii jak pisać.
książkę ogólnie polecam, choć nie zgadzam się ze wszystkim co napisał. ale to już inna bajka.
w oparciu o to co napisał, powstał program: perlcritic (można go zainstalować przez "install Perl::Critic" w shellu cpanowym).
program ten analizuje twój program perlowy i wypisuje błędy (błędy czytaj konstrukcje inne niż zalecane przez damiana). wraz z odnośnikami do numerów stron w książce!
warto zobaczyć jak to wygląda. przykładowo. dla jednego z moich (działających!) programów wynik perlcritica wygląda tak:
=> perlcritic archiveMails.pl
Code before strictures are enabled at line 9, column 1. See page 429 of PBP. (Severity: 5)
Integer with leading zeros at line 75, column 55. See page 58 of PBP. (Severity: 5)
Don't modify $_ in list functions at line 94, column 37. See page 114 of PBP. (Severity: 5)
nie najgorzej. nie? zobaczmy co się dzieje jak każę mu wyświetlać wszystkie błędy, a nie tylko krytyczne:
ojć. całości nie pokażę. za dużo, ale to mogę pokazać:
=> perlcritic -1 archiveMails.pl | wc -l
69
to mało mówi. więc zróbmy prostą statystykę:
=> perlcritic -1 archiveMails.pl | perl -pe 's/at line \d+, column \d+/at line X, column Y/' | sort | uniq -c | sort -nr
14 Mixed-case variable name(s) at line X, column Y. See page 44 of PBP. (Severity: 1)
10 Regular expression without "/x" flag at line X, column Y. See page 236 of PBP. (Severity: 3)
9 Regular expression without "/m" flag at line X, column Y. See page 237 of PBP. (Severity: 2)
6 Builtin function called with parens at line X, column Y. See page 13 of PBP. (Severity: 1)
4 Postfix control "unless" used at line X, column Y. See pages 96,97 of PBP. (Severity: 2)
3 Useless interpolation of literal string at line X, column Y. See page 51 of PBP. (Severity: 1)
3 Subroutine does not end with "return" at line X, column Y. See page 197 of PBP. (Severity: 4)
2 "unless" block used at line X, column Y. See page 97 of PBP. (Severity: 2)
2 Mixed-case subroutine name at line X, column Y. See page 44 of PBP. (Severity: 1)
2 File handle for "print" is not braced at line X, column Y. See page 217 of PBP. (Severity: 1)
1 RCS keywords $Revision$, $Source$, $Date$ not found at line X, column Y. See page 441 of PBP. (Severity: 2)
1 RCS keywords $Revision$, $HeadURL$, $Date$ not found at line X, column Y. See page 441 of PBP. (Severity: 2)
1 RCS keywords $Id$ not found at line X, column Y. See page 441 of PBP. (Severity: 2)
1 Postfix control "if" used at line X, column Y. See pages 93,94 of PBP. (Severity: 2)
1 Package variable declared or used at line X, column Y. See pages 73,75 of PBP. (Severity: 3)
1 No "VERSION" variable found at line X, column Y. See page 404 of PBP. (Severity: 2)
1 Integer with leading zeros at line X, column Y. See page 58 of PBP. (Severity: 5)
1 Forbid $b before $a in sort blocks at line X, column Y. See page 152 of PBP. (Severity: 1)
1 Double-sigil dereference at line X, column Y. See page 228 of PBP. (Severity: 2)
1 Don't modify $_ in list functions at line X, column Y. See page 114 of PBP. (Severity: 5)
1 Code is not tidy at line X, column Y. See page 33 of PBP. (Severity: 1)
1 Code before warnings are enabled at line X, column Y. See page 431 of PBP. (Severity: 4)
1 Code before strictures are enabled at line X, column Y. See page 429 of PBP. (Severity: 5)
1 Capture variable used outside conditional at line X, column Y. See page 253 of PBP. (Severity: 3)
łał. a przypominam – ten kod działa i robi co trzeba.
tak czy inaczej – warto spojrzeć. to co perlcritic pokazuje, to czasem całkowicie nieistotne szczegóły (jak np. mixed case variable name), ale czasem jest to coś co warto poprawić. sam po przeczytaniu best practices sporo zmieniłem w swoim stylu kodowania.