nowa, interesująca, usługa sieciowa
co można wymyślić jeśli chodzi o zakupy w sieci? sklep. pasaż handlowy. system ogłoszeniowy. system aukcyjny. porównywarkę cen.
a może coś jeszcze?
wired napisał o nowym typie usług – porównywarka cen działająca via feed rss'owy.
zasada jest prosta – informuję serwis co mnie interesuje, a on śledzi zmiany cen tego produktu w znanych mu sklepach. i jak coś się zmieni – daje ci znać rss'em.
proste i efektywne. są już przynajmniej 3 serwisy zajmujące się tego typu usługami:
na razie – żaden z nich nie informuje o cenach w polsce. ale zakładam, że niedługo pojawi się jakiś polski klon oferujący zbliżoną funkcjonalność.
piosenki podkładem dla seksu
tak aby zakończyć dzień jakąś lżejszą informacją 🙂
onet podał, że yahoo przeprowadziło badanie nt. tego które piosenki internauci uważają za najlepszy podkład muzyczny dla seksu.
lista nie budzi zaskoczeń – no, może dziwi niska pozycja je t'aime, no ale w sumie … 🙂
lista:
- Marvin Gaye – Sexual Healing
- U2 – With Or Without You
- Barry White – My First My Last My Everything
- Serge Gainsbourg & Jane Birkin – Je T'aime
- Chris Isaac – Wicked Game
- Al Green – Let’s Stay Together
- Phyllis Nelson – Move Closer
- INXS – I Need You Tonight
- Madonna – Justify My Love
- Kylie Minogue – Slow
może kiedyś je wszystkie wystawię w mp3 – choć nie wiem co na to eo – hostują mnie, a dodatkowy ruch i zainteresowanie ze strony riaa mogłoby być niemile widziane 🙂
outsourcing na świecie
w najnowszym numerze forbes'a jest artykuł o tym jak to polska staje się centrum outsourcingowym. niby mamy tanią siłę roboczą, i olbrzymie ilości firm się do nas przenoszą byśmy wykonywali ich pracę. idea jest fajna. a jaka jest rzeczywistość?
businessweek opublikował listę 10 największych miast – największych jęśli chodzi o outsourcing. i co? i nie ma nas na żadnej z tych pozycji. za to są takie potęgi jak bukareszt w rumunii i praga w czechach. eh. i komu tu wierzyć?
niesamowity stół
dzięki koledze z pracy zobaczyłem niesamowity stół. co prawda jest on przeznaczony do instalacji na łodziach, jest drogi i nie stać mnie na niego. a na stronie producenta jest informacja:
“Please understand that this is an extremely special piece of furniture, of exceptional quality and design – it is not for everyone by a very very long way and can only be afforded by the lucky few of us with exceptional wealth.“
to i tak strasznie mi się podoba. kiedyś go sobie kupię 🙂
currval i problemy z selectami
jak może wiecie w postgresie jest funkcja currval() zwracająca ostatnio nadane id z podanej sekwencji.
rozpatrzmy prosty przypadek:
# create table test (id serial primary key, pole int4); CREATE TABLE # insert into test (pole) select * from generate_series(1, 10000); INSERT 0 10000 # select count(*) from test; count ------- 10000 (1 row) # select currval('test_id_seq'); currval --------- 10000 (1 row)
wszystko wygląda ok. więc sprawdźmy jeszcze jeden insert mały:
# insert into test(pole) values (12313); INSERT 0 1 # select currval('test_id_seq'); currval --------- 10001 (1 row)
nadal wszystko ok. i teraz:
# select * from test where id = currval('test_id_seq'); id | pole -------+------- 10001 | 12313 (1 row) Time: 93.358 ms
działa, ale coś wolno, sprawdźmy:
# explain analyze select * from test where id = currval('test_id_seq'); QUERY PLAN -------------------------------------------------------------------------------------------------- Seq Scan on test (cost=0.00..200.02 rows=1 width=8) (actual time=64.375..64.379 rows=1 loops=1) Filter: (id = currval('test_id_seq'::regclass)) Total runtime: 64.431 ms (3 rows)
seq scan? sprawdźmy więc ręcznie podaną wartość:
# explain analyze select * from test where id = 10001; QUERY PLAN ---------------------------------------------------------------------------------------------------------------- Index Scan using test_pkey on test (cost=0.00..8.02 rows=1 width=8) (actual time=0.029..0.033 rows=1 loops=1) Index Cond: (id = 10001) Total runtime: 0.086 ms (3 rows)
hmm .. tu jest dobrze. skąd seq scan? aby nie przynudzać z każdym zapytaniem, powiem tyle, że nie jest to kwestia błędnych typów czy czegoś tak oczywistego. problemem jest zmienność funkcji.
dokładniej: funkcja currval() jest zadeklarowana jako “volatile" – co oznacza, że jej wynik ma prawo zmienić się w czasie pojedynczego skanu tabeli. tak jak np. random(). to oznacza, że nie można użyć jej jako dostarczyciela wartości i potem tą wartością przeszukać indeksy.
cóż więc można zrobić – no cóż. trzeba powiedzieć postgresowi, że interesuje nas tylko pierwsza zwrócona wartość currvala – idealnie do tego nadają się podzapytania:
# explain analyze select * from test where id = (select currval('test_id_seq')); QUERY PLAN ---------------------------------------------------------------------------------------------------------------- Index Scan using test_pkey on test (cost=0.01..8.03 rows=1 width=8) (actual time=0.047..0.050 rows=1 loops=1) Index Cond: (id = $0) InitPlan -> Result (cost=0.00..0.01 rows=1 width=0) (actual time=0.010..0.012 rows=1 loops=1) Total runtime: 0.187 ms (5 rows)
jak widać jest już zdecydowanie lepiej.
tapeta na dziś
ile jest wart postgres
dziś jest dzień postgresql'owy, więc kolejna informacja o nim.
jest taki program: sloccount. służy do liczenia ilości linii kodu, oraz estymowaniu kosztów stworzenia programu.
odpaliłem go na źródłach postgresa 8.2. oto wynik:
Totals grouped by language (dominant language first): ansic: 479298 (94.01%) yacc: 14698 (2.88%) sh: 7805 (1.53%) lex: 5349 (1.05%) perl: 2608 (0.51%) asm: 65 (0.01%) python: 12 (0.00%) <br/> Total Physical Source Lines of Code (SLOC) = 509,835 Development Effort Estimate, Person-Years (Person-Months) = 139.26 (1,671.14) (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05)) Schedule Estimate, Years (Months) = 3.50 (41.95) (Basic COCOMO model, Months = 2.5 * (person-months**0.38)) Estimated Average Number of Developers (Effort/Schedule) = 39.84 Total Estimated Cost to Develop = $ 18,812,337 (average salary = $56,286/year, overhead = 2.40). SLOCCount, Copyright (C) 2001-2004 David A. Wheeler SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL. SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to redistribute it under certain conditions as specified by the GNU GPL license; see the documentation for details. Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."
pl/scheme
(hurra, (dzięki (projektowi (pl/scheme))) (wreszcie) (będziemy (się (mogli))) (w postgresie) (cieszyć (z kodu (składającego się (z samych (nawiasów)))))) 🙂
funkcje ułatwiające migracje z oracle’a
przeczytałem właśnie o interesującym module – orafce. moduł ten zawiera ponad 100 funkcji których celem jest emulowanie funkcji bazodanowych z oracle'a i plvision (taki pakiet do oracle'a).
funkcje w orafce są kompatybilne na poziomie api z wersjami z oracle'a co powoduje, że ich użycie mocno uprości ewentualną migrację między tymi platformami.
wśród funkcji zawartych w pakiecie są m.in.:
- kilka funkcji podstawowych – typu next_day, last_day
- funkcje kalendarza biznesowego – bazujące na pakiecie plvdate z plvision
- spory zestaw funkcji do pracy na stringach
- obsługa komunikacji między procesowej
zwrócić należy uwagę na fakt iż nie ma w tym pakiecie niczego czego nie dałoby się uzyskać w postgresie inaczej – jednakże sensem istnienia tego pakietu nie jest dodawanie funkcjonalności, a ułatwianie migracji.