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.

Zabbix-agent na OpenWrt.

Jakiś czas temu uruchomiłem parę sztuk OpenWrt na routerach Linksysach WRT54GL. Wybór dystrybucji na router podyktowany był głównie tym, że OpenWrt ma spore zaplecze w postaci pakietów z różnymi aplikacjami przygotowanych do bezpośredniego uruchomienia, wśród nich także pakiety Zabbix (nie wiem po co serwer, ale klient się przydaje), czyli niezłego IMO systemu monitoringu.

Niestety, dla przynajmniej w przypadku Kamikadze 8.09.1 po zainstalowaniu zabbix-agent nie działa. Konfig wygląda OK, skrypt uruchamiający jest trywialny, ale po

/etc/init.d/zabbix-agent start

nie pojawił się żaden proces Zabbiksa. Nie tak szybki debug (trick ze zmianą położenia logów był całkiem skteczną przeszkodą – wyglądało jakby ich nie było, a o strace na OpenWrt można zapomnieć) ujawnił, że plik konfiguracyjny ma prawa 600 i właściciela root, a tymczasem proces zabbix-agent jest uruchamiany z użytkownika zabbix. Rozwiązanie to oczywiście:

chmod +r /etc/zabbix/zabbix_agentd.conf

Po tym działa jak trzeba.

Cpulimit, czyli cichy laptop.

Czasem jest tak, że do wykonania jest jakieś zadanie, na czasie wykonania którego nie zależy nam szczególnie, ale wykonujemy je na sprzęcie, który przy większym obciążeniu zaczyna np. hałasować. Dobrym przykładem jest kompresja/dekompresja dużych archiwów lub konwersja filmów na laptopie. Mój laptop praktycznie nigdy nie korzysta z wiatraka. Włącza się on dopiero, gdy procesor osiągnie 75 st. C, ale za to jak się włączy… tragedia, że szkoda słów.

Zwykły nice nie wystarczy (to dobre do zapewnienia dobrej responsywności innych zadań), ale to jest Linux, więc na pewno coś jest, co może pomóc. I rzeczywiście istnieje program, który pozwoli procentowo przydzielić zasoby CPU, a  nazywa się on cpulimit.

Zasada działania jest prosta – uruchomiony program śledzi wskazany proces i okresowo zatrzymać jego działanie (wysyłając SIGSTOP), a następnie, po bardzo krótkiej chwili wznawia je (wysyłając SIGCONT). Dodatkowo oblicza, na ile zatrzymać działanie tak, aby średni czas działania był zgodny z podanym przez użytkownika procentowym udziałem przydzielonego czasu procesora. Żadnych cudów, ale efekt bardzo fajny – po -l 60 (limitowanie do 60%) mam pewność, że wiatrak się nie załączy – temperatura nie zbliża się w okolice krytycznych 75 st. C.

Żeby nie było za dobrze, są też wady. Oczywista to wydłużenie czasu wykonania operacji. Mniej oczywista, to trochę „śmieci” na ekranie (przy uruchomieniu jeden raz pojawia się informacja o zatrzymaniu działania procesu). Kolejna wada, to działanie tylko dla pierwszego procesu pasującego do nazwy (ale to już polecam przeczytanie uwag w man cpulimit).

Ponieważ miałem problem z opcjami -e oraz -P (pewnie zaraz zgłoszenie błędu pójdzie), za to -p działa bez problemu, to, jeśli ktoś koniecznie chce odwoływać się do nazwy, polecam użycie:

cpulimit -p `pidof PROCES` -l 60 -v

Z podobnych zagadnień, jeśli ktoś chciałby przypisać proces do danego CPU, to powinien zainteresować się programem taskset.

UPDATE: Jak Paweł słusznie zauważył w komentarzu (dzięki za info), już było na ten temat pisane. Dodaję linka.

Linki:

  1. Strona domowa programu cpulimit.
  2. Ciekawie wyglądający opis tworzenia demona na bazie programu cpulimit (nie testowałem w praktyce).
  3. Nieco więcej o taskset.
  4. Wpis Grzglo na ten sam temat – parę informacji więcej (zwł. o demonie) oraz dyskusja.
  5. Opis Control Groups w Linuksie – inny, wspierany przez kernel, bardziej uniwersalny, wydaje się, że lepszy (ale i nieco trudniejszy w użyciu) sposób na to samo.