slowni.pl

W nawiązaniu do dwóch poprzednich postów, dodaję trzeci.

Słowni.pl, to projekt oparty o aplikacje z OpenPolitics pozwalający zbierać deklarację kandydatów w wyborach a następnie analizować i rozliczać je gdy dana osoba te wybory wygra.

Aplikacja jest jeszcze świeża, ale testuję w niej możliwość zakładania kont, budowania reputacji oraz moderacji.

Chciałbym dopracować ją w ciągu najbliższych kilku miesięcy i uruchomić kiedy Państwowa Komisja Wyborcza udostępni listę kandydatów.

Ważnym elementem systemu będzie odsiewanie deklaracji nieweryfikowalnych oraz skupienie się na wiarygodności deklaracji i NPOV. Na razie myślę o tym, by do każdej deklaracji trzeba było dołączyć dwa źródła oraz opis testu weryfikowalności, który jest ograniczony w czasie. Dzięki temu nie znajdą się w serwisie deklaracje typu “Będzie lepiej”, tylko takie, które mogą być po wyborach zweryfikowane.

Nie wiem jeszcze czy reputacja to dobry pomysł, ale nie kosztuje więc dodałem. Każdy użytkownik ma określoną reputację startową i zależnie od swoich akcji (na razie może tylko dodać deklarację lub zaktualizowac ją, ale w przyszłości będzie mógł np. zgłosić błędne dane) może ona rosnąć.

Na razie korzystam też z modułu rejestracji, ale rozważam przejście na OpenID jako jedyny sposób tworzenia konta, aby uniknąć kolekcjonowania danych i haseł.

Zapraszam do zabawy i testowania. Testowa projekt wygląda tak.

Jeśli ktoś chce, może też zaitalować u siebie. Instaluje się to bardzo podobnie do reszty aplikacji z pakietu openpolitics. 🙂

openpolitics i gov20.pl

W nawiązaniu do rozważań z poprzedniego wpisu, ruszam dziś z projektem o kodowej nazwie OpenPolitics.

OpenPolitics to zestaw aplikacji napisanych w django które pozwalają agregować dane rządowe i udostępniać je w formie dostępnej dla użytkownika oraz dla komputerów.

To pierwsze jest mniej ważne, ale to drugie stanowi fundament projektu. Chciałbym umożliwić ludziom pisanie aplikacji, które będą korzystały z publicznie dostępnych danych rządowych, które dziś są trudno dostępne i nieosiągalne dla programów komputerowych. Paradoksalnie brak możliwości pobrania danych powstrzymuje wielu moich znajomych od pisania aplikacji wspierających budowę społeczeństwa obywatelskiego i sprawia, że idą pisać aplikacje, do których dane są dostępne. Ot, na przykład kolejnego klienta tweetera, gry albo mashup do grafiki.

Jeśli podoba nam się jak wiele aplikacji powstaje i jak szybko aktywizują one ludzi w dziedzinach takich jak rozszerzenia Firefoksa, aplikacje do iPhone czy Androida, systemy analizy danych Facebooka czy Tweetera, to musimy zrozumieć, że podstawa tego ekosystemu jest dostęp do danych i API, które pozwala operować na nich.

Mój projekt ma na celu zbudowanie interfejsu między światem zakorzenionym w pięknym, XXwiecznym modelu demokracji, a cyberspołeczeństwem. Myślę o nim jako o takim odpowiedniku OCRu pozwalającego skorzystać z wartościowych danych zapisanych w przedpotopowych systemach.

W największym skrócie projekt ma pozwolić na pisanie wszelkiego rodzaju aplikacji operujących na danych takich jak:

  • Kto jest dziś premierem Polski?
  • Jaki jest adres email do marszałka sejmu?
  • Ilu jest senatorów PiS?
  • Kiedy odbyło się ostatnie posiedzenie sejmu?
  • Co zmieniło się miedzy dwiema wersjami projektu ustawy?
  • Jak głosował wybrany przeze mnie poseł przez ostatnie pół roku?
  • Kto prowadził ostatnie obrady sejmu?
  • Ilu doradców ma Prezydent Polski i jakie są ich emaile?

To tylko kilka pytań, na które odpowiedzi dziś można znaleźć, ale gdybyśmy chcieli napisać aplikację która korzysta z tych danych, przetwarza je, lub prezentuje w wybranej przez siebie formie, musielibyśmy… no coż… mozolnie regexpować się przez strony rządowe. OpenPolitics to właśnie robi za nas i udostępnia w miarę przejrzyste API do pobierania takich danych.

Całość jest otwarta, można postawić sobie swoje instancje, udoskonalać, pomóc mi w rozwoju i dopasować do swoich potrzeb.

Wraz z wydaniem wersji 0.1 OpenPolitics udostępniłem instalację tej wersji aplikacji pod adresem http://www.gov20.pl oraz http://api.gov20.pl do testowania i zabawy nowymi możliwościami 🙂

Odpowiedzi na trochę pytań umieściłem w FAQ,

Coś jeszcze? Jutro, na TEDx Warsaw będę miał przyjemność mówić trochę więcej o styku technologii i polityki. Temat mojego wystąpienia “Government Hackability”, zaczynam o 17:11, transmisja będzie chyba na żywo 🙂

Miłego hackowania, a jeśli chcielibyście pomóc, to zebrałem listę JuniorJobs.

Otwieranie polityki metodą DYI

Jestem w takim wieku, że mam jeszcze marzenia. Marzy mi się dużo i szybko.

Jedną z dziedzin w której marzeń mam szczególnie dużo jest bardzo zaniedbany styk infromatyki i polityki. Od blisko dziesięciu lat biorę udział, lub obserwuję rozwój, ogromnej liczby projektów które stawiają sobie fantastyczne cele.

Wikipedia ze swoją misją kolekcjonowania wiedzy świata, Ubuntu ze swoim pragnieniem stworzenia Linuksa dla ludzi, czy wreszcie najbliższa mi, Mozilla ze swoimi ideałami Otwartego Internetu. Wszyscy którzy pracują w tych i setkach innych projektów wyrobili sobie pewne nawyki, pewne know-how. Budujemy potężne warstwy narzędzie pozwalające nam realizować nasze cele w spcyficznych warunkach Internetu.

Z drugiej strony obserwuję, jak chyba każdy, politykę, tę która coraz bardziej oddala się od “rzeczywistości” w której żyję. Politykę mówiącą językiem moich rodziców, rozwiązującą problemy które coraz mniej mnie obchodzą, w sposób, który wydaje mi się co najmniej nieefektywny.

W tym samym czasie niezwykle szybko rozwija się całe społeczeństwo, które ten świat, w którym obraca się nasza polityka, po prostu ignoruje. Wyzwania, problemy, przeszkody i metody działań jakie podejmujemy by rozwijac Wikipedię, by komunikować się efektywnie przez Facebooka, by wspólnie tworzyć dokumenty w Etherpadzie czy tworzyć filmy amatorskie to świat który rozwija się i zmienia tak szybko, że zaskakuje mnie jedynie jak bardzo z tej perspektywy przestrzeń dyskusji publicznej o polityce zaczyna wyglądać jakoś tak niepoważnie.

I teraz w tej właśnie rzeczywistości, gdy przestrzeń Internetu rozrasta się i staje się ważną częścią życia ludzi, polityka zaczyna niezdarnie próbować podejść do tego, dziwnego dla nich tworu. Jakiś polityk zacznie blogować by napisać coś na nim dwa razy na próbę i się zrazić, inny założy tweetera, na którym opisze swoje śniadanie. Powstają liczne komisje do spraw Internetu i Jego Przejawów, a czasem nawet państwo przerazi się anarchią jaka tam panuje i postanowi ochronić obywateli poprzez ustawę czegoś zakazującą, kompletnie nie rozumiejąc, że Internet nauczył się sam rozwiązywać swoje problemy i młodzi ludzie, wychowani w poczuciu fal WiFi latających wokół nich od dziecka postrzegają takie ruchy jakby obserwowali słonia w składzie porcelany, niezdarnego, głupiutkiego i zbyt powolnego by reagować i dopasować się.

Z drugiej zaś strony mamy coś co można by nazwać “Web Approach”. Swiat gdzie możliwości technologiczne pojawiające się co pół roku są tak przełomowe, że wszelkie rozwiązania wcześniejsze tracą sens. Swiat gdzie wszystko sie da i jest tylko kwestią czasu i zdolności włożonych w oprogramowanie danego rozwiązania. Gdzie projekty tworzą się samoczynnie by reagować na pojawiające się wyzwania.

To świat w którym transparentność jest wbudowana w DNA ekosystemu, w którym zmienność jest jedyną mierzalną stałą, w którym prawo jest generowane lokalnie – per serwis – i dopasowywane w reakcji na zmiany w ciągu dni, albo tygodni.

Dynamika tego świata, jego fundamentalna odmienność wymaga przemiany pokoleniowej. Polityka nie jest na to gotowa i nakłada znane sobie mapy mentalne na zjawiska diametralnie odmienne od wszystkiego co znali wcześniej.

Efektem jest to co możemy obserwować w dziedzinach “konsultacji” z Internautami, oraz w dziedzinie aplikacji pisanych przez państwo.  Spotkanie z Premierem było uroczym przykładem rozmowy w dwóch językach, propozycje Kancelarii Premiera, aby wybrać “przedstawicieli Internautów” jest kolejnym, różne wypowiedzi polityków w stylu “te dane ujawniliśmy tylko w polskim Internecie” to perełki.
Ostatnio na jakiejś konwencji któryś z ministrów chwalił się wnioskiem, że państwo musi się zelektronizować i korzystać z maili… Nie muszę chyba tłumaczyć jak absurdalne jest to w świetle poważnych dyskusji toczonych od dłuższego czasu o tym, że email przestaje być ważny.

Wszystko to jest w najlepszym razie przestarzałe, w najgorszym zaś jest egzemplifikacją opisanej powyżej przepaści technologiczno-społecznej.

Z drugiej strony Państwo jest i pozostanie ważne. I może, a właściwie powinno być, potężnym narzędziem jaki obywatele posiadają. Technologia może zaś dać nam potężną broń, umożliwić kontrolowanie rządzących, a z drugiej strony zdynamizować procesy poprzez zbudowanie platformy dialogu i współpracy w miejscu, w którym obywatele już są – w Internecie, przy użyciu mechanizmów które już znają.

To nie jest kwesita “czy” tylko “kiedy”. Firmy takie jak Dell czy Google nie mają problemu z uzyskaniem feedbacku od całego świata i nie potrzebują w tym celu spotykać się z XX-wiecznym archaizmem – “przedstawicielami Internautów”. Swiat polityki czeka w najbliższych latach bolesna i długa nauka nowej rzeczywistości, w której wyborcy żyją.

A w międzyczasie my nadal będziemy rozwiązywać sami swoje problemy… oddolnie, organicznie, ewolucyjnie…  problemy takie jak… jak napisać rozszerzenie do Firefoksa które powie mi kto jest dziś premierem Polski, albo skąd wziąć listę emaili do posłów PO?

Na te i inne pytania odpowie następny wpis 🙂

Blokowanie zalewu robotów MSNu

Mniej więcej pod koniec grudnia, odezwał się do mnie dostawca hostingu dla aviary.pl – Dreamhost.

Napisali do mnie, że niestety muszą mnie prosić o zdjęcie serwisu bugs.aviary.pl ze względu na ogromne obciążenie łącza jakie ten serwis generuje.

To oczywiście dość mocny cios w postawowy mechanizm jakiego używa Aviary.pl do swojej pracy i na dodatek cios w punkt, na którym nie znam się aż tak dobrze (nie znam kodu Bugzilli aby ocenić co wpływa na jej wydajność). Pan z DH poinformował, że wygląda na to, że nasza bugs.aviary.pl zużywa ogromne zasoby procesora i rejestruje bardzo wysoką liczbę odwiedzin z robota MSN.

To natchnęło mnie by założyć system statystyczny i zacząć obserwować. Z DH dogadaliśmy się, że zamykamy bugzillę do czasu gdy zrozumiemy przyczynę tak dużego obciążenia.

W okresie świąt i nowego roku trudno było znaleźć czas na pracę nad tym, ale gdy w końcu się zebrałem, logi okazały się bezlitosne. Nasza Bugzilla dziennie obsługuje nasz zespół (trochę ponad 20 osób) plus odwiedzających, co powinno, na moje oko, dawać koło 60-80 osób dziennie, koło 150 wizyt, koło 600 stron.

Zamiast tego, w październiku rejestrowaliśmy średnio 6500 pobrań stron dziennie, w listopadzie 7000 a w grudniu dochodziło do 8000. To znacząca różnica zwłaszcza, że te żądania w znacznej części dotyczyły złożonych kwerend wyszukiwawczych i załączników. Takie kwerendy generują największe obciążenie serwera i są najwolniejsze.

Następnym wnioskiem było to, że około 84% tego ruchu generowane jest przez hosty w domenie 65.55 oraz 66.249 zaś najpopularniejszą przeglądarką jest msnbot/2.0b która pobrała w listopadzie 157000 stron, czyli około 13000 stron dziennie! Na dalszych miejscach było Googlebot z 2500 i Yahoo Slurp! z 166 zapytaniami dziennie.

Pierwszą reakcją było oczywiście założenie robots.txt, które powinno załatwić sprawę oraz lektura google w poszukiwaniu podobnych przypadków. Lekcja pierwsza mówiła, że są dobre i złe roboty. Dobre to takie, które sprawdzają robots.txt i jak ten mówi “nie” to nie przeszukują oraz złe, takie, które ignorują robots.txt.

Oczywiście po chwili okazało się, że msnbot/2.0b, który przychodzi do mnie z domen takich jak msnbot-65-55-104-75.search.msn.com czy msnbot-65-55-104-59.search.msn.com jest złym robotem, który ignoruje plik dla niego przygotowany (mimo, że czyta go, oj czyta, tak mniej więcej co 30 sekund przez 24h na dobę!).

Ciekawą reakcją (obserwowaną także przez innych adminow) jest to, że po włączeniu robots.txt, msnbot zaczyna oszukiwać. Mianowicie odpytuje robots.txt jako msnbot, znajduje informację, że go nie chcemy a następnie zaczyna indeksować strony podając się za Internet Explorera 6.

Przykład takiego zachowania:

65.55.51.69 - - [03/Feb/2010:14:05:41 -0800] "GET /robots.txt HTTP/1.1" 200 319 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)"
65.55.110.210 - - [03/Feb/2010:14:06:12 -0800] "GET /attachment.cgi?id=453&action=diff&context=patch&collapsed=&headers=1&format=raw HTTP/1.1" 200 841 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;  SLCC1;  .NET CLR 1.1.4322;  .NET CLR 2.0.40607)" 
msnbot-65-55-232-33.search.msn.com - - [03/Feb/2010:14:06:30 -0800] "GET /attachment.cgi?id=132&action=edit HTTP/1.1" 200 477 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2;  SV1;  .NET CLR 1.1.4322;  .NET CLR 2.0.50727;  .NET CLR 3.0.04506.648)" 
msnbot-65-55-232-33.search.msn.com - - [03/Feb/2010:14:06:44 -0800] "GET /attachment.cgi?bugid=189&action=viewall HTTP/1.1" 200 477 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  SLCC1;  .NET CLR 1.1.4322;  .NET CLR 2.0.50727;  .NET CLR 3.0.30729;  .NET CLR 3.5.30729;  InfoPath.2)" 
65.55.110.210 - - [03/Feb/2010:14:06:47 -0800] "GET /attachment.cgi?id=784&action=diff&context=patch&collapsed=&headers=1&format=raw HTTP/1.1" 200 2160 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2;  SLCC1;  .NET CLR 1.1.4325;  .NET CLR 2.0.50727;  .NET CLR 3.0.04506.648)" 
msnbot-65-55-232-33.search.msn.com - - [03/Feb/2010:14:06:50 -0800] "GET /attachment.cgi?bugid=189&action=viewall HTTP/1.1" 200 477 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  SLCC1;  .NET CLR 1.1.4322;  .NET CLR 2.0.50727;  .NET CLR 3.0.30729;  .NET CLR 3.5.30729;  InfoPath.2)"
msnbot-65-55-104-75.search.msn.com - - [03/Feb/2010:14:07:16 -0800] "GET /attachment.cgi?bugid=1098&action=viewall HTTP/1.1" 200 477 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;  SLCC1;  .NET CLR 1.1.4322)" 

Uważny czytelnik zwróci uwagę, że bot posługuje się różnymi UA stringami, różnymi adresami IP (tak na prawde to jest ich znacznie więcej, rotują się jednak raz na kilka godzin więc trudno było to ładnie ująć w wycinku logu) i identyfikują MSN albo przez host, albo przez UA, albo w ogóle! (wiersz drugi) W takiej sytuacji domyślenie się koincydencji (oraz odwiedzin z domeny 65.55.*.* na polskim serwisie polskiego zespołu lokalizacyjnego) wymaga logicznego rozumowania i jest trudne do zapisania w sposób algorytmiczny.

Uważam takie zachowanie za skandaliczne, choć później okazało się, że nie oni jedni.

Google zachowuje się w miare sensownie i utrzymuje stałe IP crawlera, co pozwala go wyciąć po nim. Yahoo podobnie. Natomiast przedwczoraj zaatakował crawler WP, który również zignorował robots.txt i przez 3 godziny indeksował każdą kombinację kwerend wyszukania i załączniki jakie mamy w naszej Bugzilli.

Mimo to, że takich problemów mam więcej, najważniejsze są implikacje takich zachowań:

1) Jakie obciążenie generuje dla serwisów dynamicznych taki robot. Proszę zrozumieć skalę! Ten robot atakuje falami, co godzinę, przez 24 godziny na dobę, przez wszystkie dni w miesiącu, za każdym razem generując falę zapytań na poziomie 100 zapytań w minutę! I to nie są zapytania o pliki statyczne, CSS, JS czy PNG. To wyłącznie zapytania o strony! Jakie koszty to generuje, jakie obciążenie… to absurd

2) Robot, który wedle logów zaczął działac mniej więcej po uruchomieniu wyszukiwarki bing, ignoruje kontrakt społeczny między autorami stron i wyszukiwarkami i indeksuje wszystko pomimo, że pobiera też robots.txt który mu tego zabrania.

3) Jaki ma to wpływ na statystyki IE? W moim, bardzo starym mechanizmie statystyk (webalizer chyba – to dostarcza DH) ma ogromny. Aktualnie wedle niego bugs.aviary.pl odwiedza 80% użytkowników z IE6.

Na koniec dodam tylko, że obecnie stosuję niniejszy .htaccess do blokowania tego ile się da.

Mozilla, wolność i h.264

Uwaga: poniższy tekst, to moja prywatna opinia, jako członka projektu Mozilla.

W tym tygodniu nastąpił ważny moment w historii rozwoju WWW. Youtube i Vimeo ogłosiły plany odejścia od technologii Flash na rzecz standardu HTML5.

Kawałek historii

Blisko rok temu, Mozilla ogłosiła wprowadzenie tagu <video/> i rozpoczęła promowanie go, jako alternatywy dla zamkniętych wtyczek.

Wiele osób wtedy krytykowało tę decyzję. Zwracano uwagę, że nikt inny tego nie wprowadza, że HTML5 to jeszcze nie jest standard, że Ogg/Theora, kodek, którego używamy, nie jest wystarczająco szybki oraz, że jest za późno, nikt nie zrezygnuje z zamkniętych wtyczek dla otwartego standardu. Ta krytyka nie była bezpodstawna. Wszystkie powyższe punkty były prawdziwe.

To, że dziś rozmawiamy o tym z tak odmiennego punktu widzenia pokazuje tylko jak szybko następują dziś zmiany w świecie standardów w porównaniu do, np. czasu jaki zajęło wprowadzanie standardu CSS2. To ogromny sukces całej społeczności skupionej wokół WWW i wierzę, że Mozilla miała w tym decydującą rolę.

Wracając do tematu, dziś mamy trzy ważne silniki obsługujące <video/> – Presto (Opera), Webkit (Safari, Chrome) i Gecko (Firefox, Camino, Seamonkey, Flock). Mamy rosnącą liczbę stron, które korzystają z tego standardu i rosnącą liczbę użytkowników, którzy korzystają z przeglądarki która je obsługuje. (W Polsce około 50% użytkowników Internetu).

Niestety, Chrome i Safari zdecydowały się wspierać wideo obsługując jedynie kodek o nazwie h.264, który jest zamknięty i trzeba za niego zapłacić. Mozilla uważa, że taki krok jest szkodliwy dla rozwoju Internetu i stoi w sprzeczności z Manifestem Mozilli i w efekcie nowe platformy Vimeo i Youtube nie mogą być wykorzystywane przez Firefoksa.

Wierzymy, że znajdziemy porozumienie, ale na razie sytuacja jest trudna. W tym poście postaram się wytłumaczyć, dlaczego Mozilla uznaje H.264 za zły kodek dla Internetu.

Continue reading Mozilla, wolność i h.264

Firefox 3.6 już dzisiaj, o 19:30 czasu polskiego

Taaak… Pół roku po wydaniu Firefoksa 3.5, już dzisiaj, o 19:30 czasu polskiego Mozilla wyda następną wersję swojego flagowego produktu – Firefoksa.

Czas w Internecie przyspiesza. Kiedyś rok między wydaniami był OK, teraz pół roku to już stanowczo za długo oczekiwania, zatem wszyscy w projekcie mamy poczucie, że na finalne 3.6 czekalismy długo.

Z drugiej strony. Cierpliwość użytkowników spada. Kiedyś byli gotowi czekać na swoje BBSy czy pierwsze strony po kilka minut na modemach 36kbps. Dziś narzekamy na kilkumegabitowe łącza. Podobnie z przeglądarkami. Choć każda, absolutnie każda wersja każdej przeglądarki na rynku jest szybsza z wersji na wersję, po kilku miesiącach staje się już “za wolna”.

Firefox 3.6 nie jest wyjątkiem, szybszy o 20% od Firefoksa 3.5 sprawia, że Firefox 2.0, w 2006 roku demon prędkości, wygląda dziś na okrutnie powolnego (mimo, że przecież moc obliczeniowa domowych komputerów wzrosła kilkakrotnie!).  Dziś wszystkie przeglądarki walczą o ułamki sekund, choć zbliżamy się do granicy możliwości sprzętu.

Poza prędkością, Firefox 3.6 to także Personas, mnóstwo fajnych rzeczy dla autorów stron, mechanizm pilnujący aktualności wtyczek i inne.

Marek Stępień i całe Aviary.pl pracowało oczywiście nad przygotowaniem polskiej lokalizacji, która mam nadzieję jak zawsze stanowić będzie mocny punkt programu 🙂

p.s. Tak. O 19:30. Mike Beltzner jest bardzo, bardzo skrupulatny. Punkt 19:30 w Polsce. Ani minuty, sekundy, godziny wcześniej. Wszystko co pojawi się wcześniej może się zmienić. Chcesz wcześniej? Możesz pobrać nocną kompilację – ale gwarancję jakości i wsparcie dajemy na finalne wydanie Firefoksa 3.6, które pojawi się o 19:30 o czym Aviary.pl i Mozilla nie zapomną zakomunikować.

Wywiad w “Dużym Formacie”

Trochę spóźniony wpis, bowiem wywiad ukazał się ponad tydzień temu (o czym pisał Paweł i Hubert), ale mam nadzieję, że jeszcze ktoś się znajdzie komu ten wpis się przyda 🙂

W poprzedniej Gazecie Wyborczej, w dodatku o nazwie “Duży Format”, poświęconemu sprawom społecznym, wywiadom itp. pojawił się wywiad Wojciecha Staszewskiego ze mną. Jest on o tyle ciekawy, że kierowany do innego czytelnika, niż większośc wywiadów których udzielam. Tym razem mówimy nie o detalach implementacji, ostatnich wynikach sunspidera czy acid3. Rozmawiamy o historii, o tym jak to się zaczeło i co w tym jest wyjątkowego.

Wydaje mi się, że wywiad się udał (serdeczne dzięki dla dziennikarza), Wojciech musiał mocno skrócić i zredagować go, gdyż rozmowa na podstawie której powstał trwała ponad 3 godziny, ale wierzę, że udało się uchwycić sens i treść o czym świadczą też pozytywne oceny znajomych i nieznajomych oraz całkiem miły ranking “gwiazdek” pod artykułem.

Dodam jeszcze, że kiedy pierwszy raz spotkałem Wojciecha, było to na kolacji z okazji 5 lat Firefoksa, był on absolutnie nieświadomy sytuacji na rynku przeglądarek, nie wiedział, że istnieją inne niż Internet Explorer i myślę, że z pewnym zdumieniem odkrył istnienie Firefoksa oraz to, że w Polsce ma on ponad 50%. Taki rozmówca pomógł mi dopasować formę wypowiedzi do tych, którzy nie spędzają życia w Internecie i dla których to co się w nim dzieje jest tylko jednym z aspektów rzeczywistości, pewnie gdzieś obok polityki, spraw socjalnych, technologii, medycyny itp.

Zapraszam do lektury i chętnie przyjmę feedback 🙂

Krótko i na temat

Wraz ze wzrosem popularności Mozilli, a zwłaszcza Firefoksa, pojawia się coraz więcej informacji i artykułów na jego temat.

Natomiast ze względu na zmiany w modelu działania mediów internetowych, tytuły i artykuły stają się coraz bardziej prowokujące i “skandalizowane”.

W konsekwencji dwóch powyższych, w ostatnich tygodniach przeczytałem, że:

  • Mozilla promuje Binga
  • Mozillę wykupi Microsoft
  • Mozilla nie umie zdobywać rynku więc poparła tzw. “browser ballot”
  • Dodatki do Firefoksa będą płatne, na czym stracą użytkownicy
  • Firefox będzie częściowo płatny
  • Firefox jest powolny i zużywa dużo pamięci

Ponieważ natłok tych informacji jest ogromny oraz rozproszony, postanowiłem zacząć gęściej korzystać ze swojego twittera (@zbraniecki) do reagowania na tego typu przejawy kreatywności.

Po prawej stronie na dole tego bloga znajdziecie też ostatnie wpisy. Postaram się nie zaśmiecać feedów, ale szybko prostować.

Nota bene, nie jestem w stanie zrozumieć jak to możliwe, że *nikt* z tych dziennikarzy, pisząc o tym, nie skontaktował się z nami. W ostatnim czasie *każda* informacja związanej z Mozillą którą znalazłem w polskich serwisach newsowych zawierała błąd, przekłamanie, pomyłkę lub nadinterpretację. Nie mogę się doczekać gdy Ci sami dziennikarze zaczną narzekać, że czytelnictwo spada i głowić się będą co może być tego przyczyną.

Zmiana rozmiaru zdjęcia z uwzględnieniem zawartości

Poniższy tekst jest tłumaczeniem artykułu “Content aware image resizing“, zamieszczonego na stronie hacks.mozilla.org na licencji Creative Commons Attribution 3.0 United States License. Autorem tekstu jest Christopher Blizzard. Spis wszystkich tłumaczeń artykułów z hacks.mozilla.org dostępny jest na stronach wiki.aviary.pl.

Obejrzyj demo w Firefox 3.5.

200px-nasa-cairZmiana rozmiaru obrazka z uwzględnieniem zawartości jest metodą skalowania obrazka bez zniekształcania zawartości, innymi słowy: nielinearne rozszeranie obrazków. Algorytm ten został po raz pierwszy opisany przez Shai Avidan i Ariela Shamira i opublikowany w 2007 (“Seam Carving for Content-Aware Image Resizing.”)

Od tego czasu powstało kilka świetnych implementacji tego algorytmu dostępnych na licencjach wolnego oprogramowania takich jak wtyczka do Gimpa czy CAIR – aplikacja napisana w C++.

Teraz, dzięki Canvas i językowi JavaScript możliwe jest wykonanie tego w przeglądarce bez użycia wtyczki.

Od wersji 1.5, Firefox oferuje możliwość manipulacji bitmapą z poziomu API Canvas. Wersja 3.5 nie tylko wprowadza jeszcze szybszy silnik JavaScript, ale też dodaje nową metodę dla Canvas – createImageData – umożliwiając tworzenie nowych rozwiązań.

Na potrzeby tego dema został zaimplementowany fragment algorytmu do zmiany rozmiaru obrazka z uwzględnieniem zawartości. Szerokość zdjęcia może byc zmieniana dynamicznie bez zmiany jego wysokości. Ta implementacja korzysta z wykrawania szwów (seam carving) do zmiany rozmiary obrazka, śledząc mało widoczne pionowe linie.
200px-cair-stepsJest to cztero-krokowy algorytm zagnieżdzony. Jedna iteracja zmienia rozmiar obrazka o jeden piksel. Na początek obrazek jest pobierany do kontekstu Canvas, a następnie rozpoczyna się iteracja:

  1. Zdjęcie jest przeliczane do skali szarości
  2. Obliczane są krawędzie na zdjęciu (Użyty jest algorytm o nazwie Sobel convolution) oraz jego matryca energetyczna
  3. Wykrywane są szwy o najmniejszej energii (pionowe linie o grubości 1 piksela nieprzerwanie idące od góry do dołu matrycy energetycznej)
  4. Nastepnie piksel z wykrytego szwu jest usuwany z oryginalnego zdjęcia i wynik jest wklejany jako źródło dla kroku 1

Każdy z poprzednich kroków przechowuje w rozmiarze źródła zdjęcia całą matrycę danych. Choć te matryce nie są pełnymi zdjęciami, tylko artefaktami po algorytmie, przechowywanie ich jest znacznie wygodniejsze niż użycie prostych tablic (JS Array) i dlatego własnie wykorzystana jest tu metoda kontekstu Canvas o nazwie createImageData. Jedną z zalet zastosowania takiego procesu jest to, że można pokazywać pośrednie kroki które zostały wykonane w trakcie obliczania efektu końcowego.

To demo pokazuje w jaki sposób można wykonać bardziej inteligentne zmienianie rozmiar obrazka niż proste spłaszczanie pikseli w CSS. Mając możliwości manipulowania obrazek oraz moc obliczeniową dostępną z poziomu przeglądarki otwiera nowy zakres możliwości do tworzenia aplikacji WWW prezentujących dane wizualne użytkownikom. A to demo to przecież korzysta tylko z ułamka tych możliwości…