Flattr wystartował.

Flattr wszedł wczoraj w fazę open beta, czyli dostępny jest dla każdego, bez zaproszeń. Myślę, że to dobry moment, żeby napisać o swoich odczuciach (chociaż używam aktywnie raptem parę tygodni).

Bezpieczeństwo.

W trakcie korzystania nie zauważyłem żadnego potwierdzania klikania linku. Jeśli jesteśmy zalogowani do Flattr w którejkolwiek zakładce i klikniemy na odpowiedni widget (ten bardziej skomplikowany, wyświetlający ilość flattrnięć), to automatycznie dostanie on punkt i oznaczy się jako flattred. Nie widziałem potwierdzania, nie ma możliwości prostego cofnięcia flattrnięcia (przycisk typu undo). Jest tylko możliwość zgłoszenia nadużycia, więc prosto można popełnić nadużycie. Z drugiej strony daną stronę możemy kliknąć tylko raz na miesiąc, więc oszukujący kokosów nie zbije i pewnie zostanie zbanowany. Pewnie pojawią się ataki XSS lub oparte na ramkach – wyświetlanie cudzego contentu pod swoim widgetem. Póki co szanse powodzenia mają znikome – ilość użytkowników i kont jest do ogarnięcia i skontrolowania.

Funkcjonalność.

Przydzielanie punktów tylko raz ma swoje wady. Nie mamy żadnej możliwości różnicowania przekazywanych kwot – każdy dostaje tyle samo. Chyba, że flattrniemy znalezisko w kolejnym miesiącu. Niezbyt to wygodne. Za to jest – jak przewidziałem – funkcjonalność analogiczna do Wykopu. Są tagi – określane przez autora rzeczy, jest wyszukiwanie po nich, są rankingi. Trochę jest spełniona funkcjonalność serwisu z bookmarkami – możemy przeglądać rzeczy, które nam się podobały. Podpiąć Flattr można do praktycznie każdego serwisu. W najgorszym wypadku trzeba będzie dodawać rzeczy samodzielnie do Flattr, a na stronie będzie tylko przycisk przenoszący klikającego dalej do serwisu i umożliwiający flattrnięcie. W przypadku Blox – można go zintegrować Flattr w pełni, czyli tak, że wystarczy, że odwiedzający kliknie na widgecie. Rzeczy można dodawać do katalogu ręcznie, albo pojawią się w nim po pierwszym flattrnięciu przez widget (z przypisanymi tagami).

Wady.

Największa wada, to mała ilość użytkowników i contentu. Póki co użytkowników jest ok. 30 tys. (ale jest szansa, że teraz, bez upierdliwego procesu zdobywania zaproszenia, ich ilość będzie szybko rosła – dla wielu brak zaproszeń był barierą). Druga wada, związana z pierwszą, to praktycznie zupełny brak treści po polsku. Jeśli ktoś nastawia się na odbiór i zna angielski (lub mniej zależy mu na tekstach, bardziej na oprogramowaniu, muzyce czy grafice), to nie ma to znaczenia. Jeśli ktoś pisze po polsku, to może – póki co – zapomnieć o flattrnięciach – polskich użytkowników jest garstka. Trzecia wada, to koszt. Niestety, narzucona jest miesięczna kwota minimalna (czemu, ach czemu?) i jest ona IMO spora jak na polskie warunki. 2 euro to obecnie 8 zł. Okolice psychologicznej bariery w postaci papiera. Jeśli się to nie zmieni, to sądzę, że popularność w Polsce Flattr będzie miał co najwyżej umiarkowaną.

Dla kogo?

Prawie dla każdego. Szczególnie dla anglojęzycznych (i twórców, i odbiorców). Aktualnie jest silny trend wiązania Flattr z wolnym oprogramowaniem i możliwości prostego wyrażenia wdzięczności twórcom. Widać, że działa – są pierwsze efekty w postaci uzyskiwania ok. 25 euro tygodniowo przez twórców wolnego oprogramowania. Być może jest to odpowiedź, jak zarobić na wolnej kulturze i wolnym oprogramowaniu. Trochę przeszkadza tu sztywny podział miesięcznej kwoty, ale za to narzut zarówno pracy, jak i finansowy przy flattnięciach jest – w porównaniu z obecnie dostępnymi metodami przekazywania wynagrodzenia – minimalny.

Przyszłość.

W Polsce nie wróżę w najbliższym czasie wielkiej popularności, przynajmniej nie ze strony twórców polskojęzycznych. Ci, którzy tworzą rzeczy niezależne od języka są w znacznie lepszej sytuacji. Twórcy Flattr przygotowali integrację z Facebookiem i Twitterem (nieoficjalnie Identi.ca wkrótce – API jest to samo co twitterowe i spore zapotrzebowanie jest zgłaszane na integrację z tym serwisem), więc jest szansa, że o serwisie będzie głośniej. Jeśli chodzi o twórców open source i wolnej kultury – myślę, że do końca roku będzie z serwisu korzystała spora część z nich. Konkurencji dla Wykopu raczej nie będzie, bo do Wykopu można dodać cokolwiek, do Flattr tylko to, na co zezwoli autor (umieszczając rzecz w katalogu lub dodając widget). Sam serwis raczej nie zniknie – model jest taki, że zawsze Flattr zarabia 10% wpłat użytkowników. Być może (mam nadzieję!) zmieni się to wraz ze wzrostem liczby użytkowników – przy dużej liczbie wystarczyłoby automatyczne jedno flattrnięcie w miesiącu od każdego użytkownika na rzecz Flattr i kwota będzie spora.

Integracja Blox i Flattr – krótkie HOWTO.

W końcu udało mi się zintegrować Flattr, czyli serwis do mikropłatności i Blox. Nie było to takie proste, na jakie wyglądało, więc pozwolę sobie zamieścić krótkie howto.

Pierwsza sprawa, to dodanie prostego javascriptu do Ustawienia -> Wpisy -> Dodaj pod każdym wpisem. Niestety, Blox ma buga i tagi typu {tytul} są rozwijane tylko przy pierwszym wystąpieniu. Przynajmniej w javascripcie. A akurat pola tytuł to ja już używam…

Podpatrzyłem obejście z widgetów Wykopu i Facebook, które wstawia Blox – skoro to javascript, to można się odwołać do tytułu przez encodeURIComponent(document.title); Bingo. No prawie, bo nadal nie działa. Nadal nic nie mówiący Error w widgecie Flattr.

Doładowałem konto na Flattr i postanowiłem dodać wpis ręcznie, z tymi samymi parametrami. Okazało się, że zmienna flattr_dsc jest obowiązkowa, a tymczasem wywaliłem ją, bo nie miałem pomysłu, co tam wstawić.

Ostatecznie działający kod wygląda następująco:

<script type="text/javascript">var flattr_uid = '10901'; // TWOJE Flattr IDvar flattr_tle = encodeURIComponent(document.title); // Tytuł stronyvar flattr_dsc = 'Blox blog entry ID: {id}'; // nie jestem pewien, czy musi być unikatowe, ale tak - będzievar flattr_cat = 'text';var flattr_lng = 'pl_PL'; // skoro Blox, to pewnie po polsku piszeszvar flattr_tag = '{tagi_b}'; // lista separowanych przecinkiem tagówvar flattr_url = '{link}'; // link do wpisu</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>

Gdyby ktoś wykorzystywał już zmienną {link} to najprawdopodobniej zamiast niej użyć encodeURIComponent(location.href); Oczywiście zadziała tylko w javascript.

Parametrów jest nieco więcej, opisane są w API Flattr, można choćby zmieniać wygląd przycisku na compact.

Nie jest zupełnie różowo – nie działa mi w jednym wpisie. Podejrzewam, że przez to, że był dodany ręcznie, z identycznymi parametrami. Nie widzę też wpisów dodanych w My latest things. Być może zmieni się to, gdy ktoś flattrnie wpis.

Tragiczny kod widgetu AdTaily.

Kiedyś, gdy AdTaily startowało (zamknięta beta), a ja miałem piękny i validujący się się XHTML 1.0 Strict na blogu, pierwszą rzeczą, na którą zwróciłem uwagę po zainstalowaniu widgetu, była była niezgodność z XHTML. Małe, a drażni, więc zgłosiłem błąd. Samemu nie udało mi się poprawić – primo, bardzo słabo znam JS, secundo, ok. 20 kB to jednak sporo do przeglądania.

O całej sprawie zapomniałem, aż do wczoraj, gdy niezależnie dwóm osobom (KosciaK i Tomasz Fiedoruk), o których wiedziałem, że powinny mieć umieszczony widget, napisałem, że wszystko fajnie, ale widgetu nie widzę. Winnym okazało się AdTaily, a raczej tragiczny kod ichniego widgetu, ale po kolei…

Pierwszy był KosciaK, u którego zwróciłem na fakt braku widgetu przy okazji wpisu o – ładnym skądinąd – nowym szablonie na blox. Ponieważ u mnie i na kilku innych blogach (bloxowych i nie), na tej samej przeglądarce, widget jest widoczny, myślałem, że chodzi o szablon właśnie, tym bardziej, że jakieś magie z jquery się tam dzieją.

Jakoś po stwierdzeniu, że na Operze widzę, na debianowej wersji Firefoksa, czyli Iceweasel w wersji 3.0.6 nie widzę, na Icecat (czyli w pełni wolnej wersji Firefoksa) 3.5.3 też nie widzę, a z kolei on u siebie widzi, po pobieżnym przyjrzeniu się problemowi, z braku czasu i pomysłów przeszliśmy nad tym do porządku.

Niewiele później zaczęło się na blipie narzekanie na sytuację z reklamami, co skłoniło mnie do stwierdzenia, że ciężko mieć reklamy, jak się nie ma widgetu. Tym razem chodziło o dwie strony, jedną bez fajerwerków w kodzie – jak twierdził autor – oraz, drugą, w której od biedy można by czegoś po stronie kodu szukać. Po stronie kodu strony niczego nie udało się znaleźć, więc podejrzenie padło na system operacyjny, jako jedyną część wspólną.

Po chwili do niedziałających przeglądarek dołączył Konqueror na moim systemie, oraz Iceweasel na systemie kumpla. Z kolei oficjalne buildy Mozilli wyświetlały wszystko jak należy. Także u mnie. Sytuacja bardzo ciekawa, więc postanowiłem zagadkę rozwiązać, tym bardziej, że to może jakiś błąd w Debianie (któraś z bibliotek czy coś takiego).

Po chwili zabawy z diffowaniem plików i kopiowaniem po kawałku oficjalnego builda do katalogu z Icecat okazało się, że „winnym” jest extra user agent. Cudzysłów jak najbardziej uzasadniony, bo tak naprawdę winny jest widget AdTaily. Fragment kodu:

parseFloat(b.substring(a+this.versionSearchString.length+1))},dataBrowser:
[{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},
{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},
{string:navigator.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},
{prop:window.opera,identity:"Opera"},
{string:navigator.vendor,subString:"iCab",identity:"iCab"},
{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},
{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},
{string:navigator.vendor,subString:"Camino",identity:"Camino"},
{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},
{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},
{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},
{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],
dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},
{string:navigator.platform,subString:"Mac",identity:"Mac"},
{string:navigator.platform,subString:"Linux",identity:"Linux"}]};

Jak widać, ktoś w AdTaily postanowił wymyślić koło od nowa i napisał własne rozpoznawanie przeglądarki i systemu operacyjnego. Na dodatek niezupełnie działające, bo nie obsługuje – z szybko przychodzących mi do głowy – Iceweasel i Icecat, zapewne także Swiftfox, Arora (nie wiem, jak się przedstawiają). W statystykach pewnie wychodzi, że nikt Konquerora nie używa, bo jeszcze nie widziałem by Konqueror się „KDE” przedstawiał (a z racji tematyki mam trochę wejść od użytkowników Konquerora). Po zmianie ciągu Icecat na Firefox we wspomnianym user agent extra version oczywiście widget wyświetla się tam, gdzie wcześniej się nie wyświetlał.

Zagadką dla mnie pozostanie, czemu pisana jest własna obsługa rozpoznawania przeglądarki (widget o 1kB większy, a i tak nie rozpoznaje wielu przeglądarek), czemu dzieje się to po stronie widgetu (a nie wysyłany jest cały user agent na serwer, jeśli to do celów statystycznych, a nie wyświetlania). O paru skrótach typu „Apple = Safari” nie wypowiadam się, bo zwyczajnie nie znam.

Ewidentnym błędem – jeśli chodzi o wyświetlanie – jest brak fallbacku do jakiegoś sensownego defaultu w przypadku nierozpoznania (a przecież engine przedstawiał się normalnie), nie tylko jest to sprzeczne z działaniem w każdej przeglądarce szerzej o kampanii Anybrowser, ale przekłada się na brak widzialności widgetu na niektórych stronach (ale nie zawsze! u mnie na blogu był widoczny bez problemu) u wszystkich użytkowników Debiana, korzystających z dostępnych domyślnie w dystrybucji przeglądarek. Oraz u wszystkich korzystających z podrasowanych/nietypowych przeglądarek.

Czemu tak było? Czy były inne skutki braku rozpoznania (np. nie zliczanie kliknięć w statystykach kampanii od nie rozpoznanych przeglądarek, gdy widget był widoczny)? Nie mam pojęcia, nie znam na tyle JS, by to wyjaśnić. To JS, więc kod jest dostępny, znających się zachęcam do obejrzenia.

Jakie jest rozwiązanie? Szybkie i brzydkie – dodanie brakujących przeglądarek w widgecie (znowu spuchnie, nadal nie wszystko będzie obsługiwane). Ładne – przepisanie widgetu, który nie tylko ma ww. problem, ale także nie jest widoczny z sieci Orange (mało ludzi zgłaszało to jako bug, więc nie spodziewałbym się w najbliższym czasie poprawienia tego), jest napisany w taki sposób, że jego wywołanie rozwala XHTML 1.0 Strict. Oczywiście rozwiązanie ładne będzie wymagało nakładów finansowych, ale biorąc pod uwagę, że nie jest to pierwsza około JSowa wpadka w ostatnim czasie, może warto nawiązać współpracę z kimś, kto takie rzeczy umie? Przeprojektowanie serwisu teraz będzie łatwiejsze niż później, podobnie zmiany w kodzie widgetu…

Temat (braku) bonusów za wynagrodzenia już poruszyłem na flakerze. Trochę inna tematyka, ale polecam lekturę wpisu No more free bugs. Z mojej strony to ostatni zgłoszony (za free) błąd. Co prawda dla mnie to (i szukanie błędów, co robić pewnie będę nadal, i ogólnie reklamy) zabawa, ale czemu mam odbierać chleb zawodowcom (przynajmniej tym od błędów i kodowania; reklamodawcy niech nie liczą na względy)?