Komputery, oprogramowanie, internet i okolice
Kategorie: Wszystkie | Aplikacje | Blog | Dev | Hacks | Linux | Subversion | Varia | gry | khoomei | książki | mjuzik
RSS
środa, 27 maja 2009

Ostatnimi czasy Paweł Wimmer (^wimmer) sporo czasu poświęca Twitterowi. Dla równowagi postanowiłem napisać co nieco o Blipie.

Blip.pl - a cóż to za zwierz?

Jeśli ktoś wie czym jest Twitter nie powinien mieć problemu ze zrozumieniem Blipa. Bo Blip to w zasadzie polska odpowiedź na mikrobloggingowy bum. "Polska odpowiedź", bo określenie "polski klon Twittera" byłoby dla Blipa krzywdzące i chyba nie do końca zgodne z prawdą. Można by się nawet pokusić o stwierdzenie, że Blip to rozwinięcie idei Twittera bo daje użytkownikom o wiele większe możliwości.

By formalności stało się zadość dodam, że Blip powstał w maju 2007 roku za sprawą Marcina Jagodzińskiego (^reuptake) i Zbigniewa Sobieckiego (^k). Niedługo potem został przejęty przez Gadu-Gadu S.A. We wrześniu 2007 zakończył etap beta i jest już ogólnie dostępny dla wszystkich.

Mikro... co? Czyli kilka słów wstępu

Mikroblogging - za tą pięknie i mądrze brzmiącą nazwą kryje się pomysł na komunikację ze światem za pomocą krótkich wiadomości opisujących to czym się aktualnie zajmujemy. Mówiąc krótkich mam na myśli 160 znaków (w przypadku Twittera 140). Skoro część "mikro" już mamy wytłumaczoną pora przejść do "blogging". Tu jednak według mnie pojawia się spory problem. Bo mikroblogowanie ma się tak do blogowania jak Java do Javascriptu (tudzież jak kamień węgielny do węgla kamiennego)(czyli tak jak ma się kot do kotary [za ^eriz]). Krótko mówiąc niewiele mają wspólnego. To zupełnie inny sposób pisania i czytania.

Blipa można próbować opisać jako miks komunikatora (i ustawiania statusów), SMSowania, chatu, IRCa, forumowych shoutboxów i pewnie jeszcze paru rzeczy. Całość bardziej przypomina potok myśli - wyrzucane z siebie pomysły, idee, spostrzeżenia, reakcje, zapytania. Niekoniecznie ze sobą powiązane i tworzące jakiś logiczny ciąg.

Ale po co? Odpowiedź w wersji dla społecznych i aspołecznych

Rozwinięcie BLIPa to Bardzo Lubię Informować Przyjaciół i właśnie utrzymywanie kontaktu ze znajomymi można uznać za główny i podstawowy sposób wykorzystania Blipa. Oni obserwują nas, my ich i cieszymy się szybką i łatwą komunikacją.

Drugą grupą osób wartych obserwowania mogą być celebryci. Przykładami znanych osób na Blipie mogą być tenisiści Mariusz Fyrstenberg (^tenisfryta) i Marcin Matkowski (^tenismatka), alpinista (między innymi) Paweł Urbański (^pawelurbanski), politycy (głównie europosłowie i kandydaci w eurowyborach) Urszula Gacek (^urszulagacek), Janusz Lewandowski (^jlewandowski), Bogusław Sonik (^boguslawsonik), Tadeusz Tomaszewski (^tadeusztomaszewski), Bartosz Rydliński (^sokratex), Łukasz Naczas (^naczas), czy dziennikarze jak np Krzysztof Urbanowicz (^kurbanowicz). Na pewno jeszcze conajmniej kilku można spotkać.

Trzecią grupę osób mogą stanowić mikrocelebryci czyli ludzie znani głównie ze swej działalności w internecie. Znajdą się tu głównie autorzy poczytnych blogów i serwisów, jak i ciekawych informacji publikowanych na Blipie. Wymieniać nikogo nie będę, dam tylko linka do TOP99 - listy najchętniej obserwowanych.

Można też traktować Blipa jako alternatywę dla kanałów RSS obserwując na przykład ^zyciewarszawy, ^przekroj, ^onet, ^wiadomosci, ^gazeta, ^antyradio, czy też profile wielu innych serwisów internetowych.

Jednak podejście użytkownikocentryczne ma jedną podstawową wadę. Oprócz interesujących nas ciekawych i wartościowych informacji natrafić możemy na wiele dość osobistych blipnięć. W końcu niekoniecznie musi nas obchodzić co kto jadł na śniadanie, dlaczego spóźnił się do pracy czy że kot wskoczył mu na kolana. Dlatego też proponuję zupełnie inny sposób czytania Blipa - podejście tagocentryczne. Tagi to tak jakby kanały tematyczne agregujące blipnięcia dotyczące określonego zagadnienia.

Znajdziemy tu praktycznie wszystko, od tagów lokalnych #katowice, #krakow, #warszawa, #gdansk, przez sportowe #f1, #boks, #snooker, #ekstraklasa, techniczne #programowanie, #linux, #windows, #python, związane z różnymi programami i serwisami #firefox, #miranda, #iPhone, #google, informacyjne #slucham, #ogladam, #czytam, #kawa, #dobranoc po mniej lub bardziej rozrywkowe jak #pokakota, #fail, #wstydliwe-wyznania czy wewnątrzblipowe #blipdnia, #ankieta, #blipiwo. A jeśli jakiegoś tagu nie ma, nic nie stoi na przeszkodzie by go utworzyć, po prostu zaczynając go używać.

Tylko proszę o jedno. Jeśli nie obserwujecie tagu, na który chcecie wysłać informację to chociaż zerknijcie przedtem na stronę by zobaczyć kilka ostatnich blipnięć na dany temat. Jeśli w ciągu ostatnich 5 minut 40 osób napisało już coś w stylu "#wyraz! #gmail nie działa - co za #fail" chyba można uznać, że wszyscy zainteresowani już o tym wiedzą i nie ma najmniejszej potrzeby pisać tego kolejny raz.

Obecność tagów pozwala na jeszcze jeden sposób wykorzystania Blipa. Użycie go jako swego rodzaju semantycznej wyszukiwarki (czy też bazy wiedzy) działającej w czasie rzeczywistym. Jest tu bardzo wielu specjalistów, którzy chętnie podzielą się swoją wiedzą i pomogą rozwiązać problem. Często po zadaniu pytania na Blipie otrzymamy trafniejszą i dokładniejszą odpowiedź niż ta do jakiej musielibyśmy dotrzeć przegrzebując wyniki zwrócone przez Google.

A jeśli komuś się baaaaardzo nudzi zawsze może po prostu czytać bliposferę, czyli potok wszystkich statusów.

Z czym to się je? Czyli jak blipować

Jeśli czytasz niniejszy tekst to najprawdopodobniej posiadasz wszystko co jest potrzebne do blipowania czyli przeglądarkę internetową. Dynamiczna, samoodświeżająca się, AJAXowa strona wręcz zachęca do blipowania. Muszę tu dodać, że czasem skrypt zliczający ilość pozostałych do wpisania znaków może powodować lekką zadyszkę przeglądarki (a przynajmniej ja tak miałem na windowsowym Firefoxie).

Drugim sposobem jest wykorzystanie komunikatora. Możemy wykorzystać zarówno Gadu-Gadu (jest tu nawet możliwość automatycznego ustawiania blipnięć jako status w komunikatorze) jak i Jabbera/XMPP. Dostępne tu mamy polecenia ułatwiające blipowanie. Jednak i tak natkniemy się na kilka ograniczeń - brak możliwości przesyłania i odbierania załączonych zdjęć i wiadomości głosowych, niemożność włączenia i wyłączenia tagów, czy trudności związane z cytowaniem konkretnych blipnięć.

Trzeci sposób to wykorzystanie telefonu komórkowego. Blip daje możliwość przesyłania SMSów, MMSów (zarówno zdjęć jak i filmów), oraz nagrywania wiadomości głosowych. Niestety w ostatnim okresie działa to niezbyt stabilnie i SMSy i MMSy potrafią dochodzić z nawet kilkunastogodzinnym opóźnieniem... Dlatego też lepszym i wygodniejszym rozwiązaniem może być wykorzystanie lżejszej, mobilnej wersji blipa dostosowanej dla urządzeń przenośnych.

Czwarty sposób to wykorzystanie jednego z dedykowanych klientów Blipa. A jest ich wiele do wyboru, oto wybrane (kolejność przypadkowa):

  • deskBlip - napisany w Adobe AIR, multiplatformowy
  • ABlip - klient dla MacOSX
  • BlipFox - rozszerzenie dla Firefoxa
  • BlipFace - klient dla Windows napisany w WPF
  • AirBlip - jeszcze jeden klient napisany w Adobe AIR
  • PocketBlip - klient dla Windows Mobile
  • QuickBlip - aplikacja na iPoda i iToucha
  • Blipper - klient w Javie, chyba już nie rozwijany
  • gBlip - linuksowy klient pisany w Pythonie na GTK+, obecnie nie rozwijany
  • ViBlip - plugin dla edytora Vim

Więcej aplikacji i bibliotek dla różnych języków programowania można znaleźć na Blip Wiki.

Trzeba tu zaznaczyć, że są to programy pisane przez osoby trzecie, najczęściej w wolnych chwilach i nie zawsze obsługują wszystkie najnowsze możliwości Blipa.

A samo blipowanie jest niezmiernie proste. Po prostu piszemy czym aktualnie się zajmujemy. Gdy chcemy komuś wysłać wiadomość piszemy ">user treść wiadomości". Gdy chcemy komuś wysłać wiadomość prywatną (której nikt niepowołany nie zobaczy) używamy ">>user treść wiadomości" (podwójne >>). Gdy chcemy o kimś wspomnieć piszemy w treści blipnięcia "^user". A gdy chcemy otagować wiadomość stosujemy "#tag". Ot, cała filozofia.

Co by tu jeszcze? Czyli narzędzia okołoblipowe

Jeśli komuś jeszcze mało to zawsze może skorzystać z jednego z wielu narzędzi i serwisów okołoblipowych, wśród nich znajdziemy:

  • Sekretarka - osobista blipowa sekretarka pilnująca by nie przeoczyć wiadomości skierowanych do nas
  • TOP99 - notowania popularności
  • Blipcast - to dzięki temu serwisowi na Blipie pojawiły się tagi, ułatwia przeglądanie archiwum tagów
  • BlipTags - chmura tagów
  • BBot - alternatywny jabberowy bot dla Blipa
  • Favourites! - sposób na zapamiętanie blipnięć
  • Twitter2Blip - synchronizacja Blip <-> Twitter
  • Marmolada! - po prostu webdwazerowa marmolada

A co z prywatnością?

No cóż... z prywatnością różnie bywa...

Musimy pamiętać, że wszystkie nasze statusy są widoczne na naszym bliplogu dla wszystkich. Mówiąc wszystkich mam na myśli wszystkich - zalogowanych i niezalogowanych, ludzi i crawlery Google'a. Mówiąc wszystkie mam na myśli wszystkie - każdy może przejrzeć całą naszą historię. Czy tego chcemy czy nie Blip jest całkiem skutecznie indeksowany w Google każdy może natrafić na nasze blipnięcia w wynikach wyszukiwania. Każdy też zobaczy kogo obserwujemy.

Musimy pamiętać, że nasz kokpit jest dostępny dla każdego zalogowanego użytkownika. A na kokpicie można zobaczyć nie tylko nasze statusy i kogo obserwujemy ale również kto nas obserwuje, jakie tagi obserwujemy i co chyba najważniejsze można przeczytać wszystkie wiadomości skierowane przesyłane przez nas i do nas. Teoretycznie podglądacz naszego kokpitu zostawia ślad swojej obecności w ramce "odwiedzający" ale wystarczy, że w ustawieniach włączy anonimowość a jedynie będziemy wiedzieć, że ktoś był, nie wiedząc kto.

Trzecim problemem mogą się stać aplikacje okołoblipowe, które bez naszej zgody mogą pobierać i publikować nasze blipnięcia na swoich stronach.

Krótko mówiąc to co piszemy jest bardzo łatwo dostępne praktycznie dla każdego. Jedynie wiadomości prywatnych nikt poza nami i adresatem nie jest w stanie przeczytać (chyba, że nastąpi jakiś błąd i będzie je widzieć połowa blipa...). Jeśli komuś to nie odpowiada niech nie korzysta. Ważne jednak by mieć pełną świadomość zagrożeń.

Słów kilka na koniec

Sam blipować zacząłem dosyć wcześnie, gdy jeszcze potrzebne były zaproszenia. Po prostu chciałem zobaczyć o co w tym wszystkim chodzi. Ot, na zasadzie "z tydzień dwa się tu rozejrzę a potem skasuje konto, bo kto poważny by mikroblogował". Na początku za wiele się nie udzielałem. Przełomem dla mnie było wprowadzenie tagów. Wreszcie mogłem obserwować to co rzeczywiście mnie interesuje i gdy zajdzie potrzeba włączyć się w dyskusję. Niejako przy okazji poznając wielu ludzi, na których inaczej nie miałbym okazji trafić.

Jak teraz na to patrzę to moja obecność na Blipie silnie wpłynęła na funkcjonowania tego bloga. O wiele mniej jest krótkich notek na zasadzie "Hej! znalazłem coś fajnego!". Po prostu szybciej jest rzucić linkiem na Blipie niż pisać niewiele wnoszący paragraf tekstu na blogu.

A na koniec, jeśli ktoś chciałby poczytać co też na Blipie wypisuje, zapraszam na ^kosciak

wtorek, 19 maja 2009
O Google App Engine napomknąłem już w ostatnim wpisie poświęconym wężom w samolocie. Jeśli ktoś miał wątpliwości co mają węże (pytony!) do samolotu to po zobaczeniu logo GAE wątpliwości już mieć nie powinien.



Google App Engine to platforma pozwalająca nam uruchomić własne aplikacje wykorzystując infrastrukturę firmy Google opartą na, jakże modnej obecnie, technologii cloud-computing.

Co Google App Engine nam oferuje:
  • darmowy hosting dla 10 aplikacji (na razie bez możliwości skasowania aplikacji!)
  • hosting na hardwarze "wielkiego G"co powinno nam dać niesamowitą wydajność i skalowalność aplikacji
  • wsparcie dla Pythona
  • od niedawna wsparcie dla Javy, czy może raczej Java Virtual Machine, bo podobno można próbować uruchamiać aplikacje w dowolnym języku działającym na JVM
  • wydajną bazę danych
  • memcache - system zapisu danych w pamięci (w zasadzie jest to gigantyczny słownik)
  • własny prosty framework webapp lub częściowe wsparcie dla Django 0.96 (z którego na pewno wykorzystamy system template'ów)
  • możliwość wykonywania zapytań HTTP, wysyłania maili, czy obróbki obrazów
  • łatwa integracja z kontami Google i usługami Google
  • dostęp do cron (harmonogram zadań)
  • możliwość podpięcia aplikacji pod własną domenę (via Google Apps)
  • SDK pozwalające na lokalne uruchomienie środowiska imitującego działanie GAE
  • dość dobrą dokumentację, a jeśli czegoś nie ma w dokumentacji to zawsze można zerknąć do kodu źródłowego
  • sporo frajdy podczas poznawania tej platformy

BigTable


BigTable to rozproszona baza danych wykorzystywana przez aplikacje Google. Jeśli BigTable jest rozwiązaniem wystarczająco wydajnym i skalowalnym dla Bloggera, Google Readera czy Google Maps to do naszych zastosowań też powinno wystarczyć.
Jest jednak jeden mały problem. Nawet kilka problemów, wynikających z tego pierwszego:
  • BigTable NIE JEST relacyjną bazą danych.
  • projektując schemat bazy danych w Google App Engine możemy więc (a czasem nawet musimy) zapomnieć większość rzeczy jakie wiemy o relacyjnych bazach danych i SQLu
  • brak JOINów
  • problemy z wydajnym modelowaniem relacji wiele-do-wielu
  • ograniczenie do 1000 obiektów zwracanych przez pojedyncze zapytanie
  • podczas pojedynczego dostępu do bazy można dodać/skasować nie więcej niż 500 obiektów na raz
  • filtrowanie, sortowanie tylko po obiektach, które mają ustawioną wartość danego atrybutu - nie można wykonać query.filter('foo = ', None) 
  • ograniczenia w filtrowaniu wyników posiadających atrybut mniejszy, większy niż dana wartość
  • brak UNIQUE - musimy zadbać o to sami stosując key_name
  • trzeba zadbać o stworzenie prawidłowych indeksów (serwer testowy trochę nam w tym pomoże)
  • często wymagana jest stosunkowo silna denormalizacja danych
  • hierarchiczność danych - dla każdego obiektu w bazie możemy określić przodka
  • transakcje jedynie w obrębie "entity groups" - posiadających wspólnego przodka

Słów kilka o ograniczeniach

Żeby nie było tak różowo GAE nie jest pozbawiony wad:
  • wspomniane już wyżej ograniczenia bazy danych
  • ograniczenia w możliwości wykorzystania istniejących bibliotek (muszą być napisane w czystym Pythonie) i frameworków webowych
  • spore ograniczenia dostępnych klas dla Javy
  • brak możliwości zapisu do plików, tworzenia wątków
  • ograniczenia ilości i wielkości plików (statycznych i wykonywalnych)
  • z światem zewnętrznym możemy się łączyć wyłącznie za pomocą żadań HTTP
  • ograniczenia wielkości odpowiedzi URLFetch
  • czasem memcache zwraca nam przestarzałe dane (podejrzewam, że jest to spowodowane rozproszeniem memcache)
  • webapp framework nie ma wbudowanego wsparcia dla sesji, ciasteczek, paginacji - o to wszystko musimy zatroszczyć się sami
  • stosunkowe częste "zimne starty" aplikacji - nigdy nie wiemy, który z serwerów będzie wykonywał kolejne rządanie
  • na wygenerowanie i przesłanie klientowi odpowiedzi mamy maksymalnie 30 sekund
  • spore limity wykorzystania czasu procesora dla pojedynczego żądania
  • limity ilości wywołań bazy danych oraz dostępu do memcache
  • po 25 maja wprowadzone zostaną nowe limity. O ile 1GB dziennego transferu nie powinno być dotkliwe, tak ograniczenie czasu procesora może stać się problemem (o ile chcemy się zmieścić w darmowych limitach)

Optymalizuj albo giń


Wszystkie te ograniczenia wymuszają na programiście myślenie o optymalizacji na bardzo wczesnym etapie projektowanie swojej aplikacji. Nie ma mowy o rozrzutności, nieprzemyślanym schemacie bazy danych, niestosowaniu cache. Chyba, że chcemy szybko wykorzystać limity lub doprowadzić do zawieszenia naszej aplikacji przez Googla z powodu generowania zbytniego obciążenia dla procesorów przy każdym żądaniu.


Podsumowanie


Czy warto inwestować swój czas w Google App Engine? Zależy do czego chcemy GAE wykorzystywać. Google twierdzi, że aplikacja powinna być w stanie obsłużyć 5 milionów odsłon miesięcznie mieszcząc się w nowych, niższych, darmowych limitach. Na pewno jest to świetne rozwiązanie do tworzenie prototypów aplikacji. Powinno się sprawdzić dla niewielkich serwisów. W przypadku tworzenia kolejnej "killer app" może już być ciężko. Ale zawsze można wykupić dodatkowe zasoby.  Na razie sam intensywnie poznaje GAE i mam nadzieję, że już za niedługo będę mógł się pochwalić efektami.
13:52, kosciak1 , Dev
Link Komentarze (3) »
czwartek, 07 maja 2009
Dawno, dawno temu, po przeczytaniu wszystkich zaległych postów na forach i grupach dyskusyjnych, przejrzeniu ostatnich odcinków webcomicsów i obejrzeniu wszystkich śmiesznych zdjęć z kotami i kilku filmików na YouTubie zacząłem się nudzić. A gdy człowiek się nudzi do głowy zaczynają przychodzić różne głupie pomysły. A ten był wyjątkowo głupi...
Postanowiłem nauczyć się jakiegoś języka programowania. Wcześniejsze doświadczenia z programowaniem sprowadzały się do zabaw z BASICiem na Atari ST, bawieniem się w modowanie pierwszej części Quake'a, czy przerabianiem S-Langowych skryptów dla slrn'a i JED'a. Nie za wiele. W dodatku nie znając choćby podstaw teoretycznych i nie zawsze do końca wiedząc co tak na prawdę robię. Tym razem chciałem zabrać się za to na poważnie.

Java

Po krótkich poszukiwaniach wybór padł na Javę. Powodów było wiele:
  • nowoczesny a zarazem dojrzały język (zaczynałem jakiś czas po wydaniu 1.5.x)
  • wspierany przez dużą firmę, pilnującą kierunku rozwoju (można dyskutować czy to na pewno zaleta)
  • dynamicznie się rozwijający (przynajmniej wtedy można było tak sądzić)
  • gwarantujący (przynajmniej w teorii) dużą przenośność i niezależność od sprzętu
  • oferujący niezawodność i bezpieczeństwo
  • o szerokim spektrum zastosowań
  • obiektowy
  • o ładnej, czytelnej składni
  • bogata biblioteka standardowa
  • masa bibliotek, frameworków, w większości open-sourcowych
  • dostęp do darmowych narzędzi
  • bardzo dobra dokumentacja
  • duża ilość książek, kursów, tutoriali
  • aktywna społeczność
Po niedługim czasie potrzebnym na poznanie składni oraz zrozumienie i przyswojenie sobie idei OOP byłem w stanie zabrać się za pisanie pierwszych programów. Potem przyszedł czas na poznanie wzorców programowania i liźnięcia JEE.
Cały czas jednak coś mnie uwierało... Nawet nie chodzi o to, że coś mam do Javy...  Czy tego chcemy, czy nie, użycie Javy narzuca nam obiektowość. W przypadku rozbudowanych systemów wprost nie wyobrażam sobie innego podejścia. Ale w wielu codziennych sytuacjach stosowanie obiektowości jest jak próba skoszenia trawy w ogródku za pomocą kombajnu zbożowego... W pewnym momencie zabierając się za pisanie nawet prostego programu i chcąc by był napisany poprawnie zaczynałem zaczynałem myśleć nad wzorcami, rozdzieleniem kolejnych warstw abstrakcji by uzyskać dużą rozszerzalność kodu, decouplingu, wstrzykiwaniem zależności, frameworkach i innych mądrych rzeczach... Zamiast rzeczywiście rozwiązywać problemy zajmowałem się pisaniem kodu, który jedynie miał pełnić rolę szkieletu.

Magiczny świat Pythona

I wtedy natrafiłem na Google App Engine. GAE wyglądało obiecująco, lecz jedynym wspieranym językiem był Python. Nie mając wielkiego wyboru przez jeden weekend przysiadłem do książek i zabrałem się za naukę. Ku mojemu zdziwieniu po tych kilku dniach nauki składni i podstawowych informacji o wbudowanej bibliotece mogłem spokojnie zabrać się za pisanie kodu. Kodu, który działał. Po prostu działał!
Co tu dużo mówić - Python mnie oczarował
  • niesamowita lekkość (no cóż... w porównaniu z Javą większość języków cechuje się lekkością)
  • wolność co do sposobu pisania kodu, nie jesteśmy zamknięci w świecie OOP
  • spora elastyczność list i słowników
  • bardzo łatwa praca ze stringami (choć trochę zamieszania powoduje Unicode)
  • przekazywanie klas i metod jako parametry funkcji
  • brak potrzeby castowania, pilnowania typów
  • zapisuję plik z kodem i uruchamiam, nie myślę o kompilacjach, jarach, maszynach wirtualnych
  • bardzo bogata bilbioteka
  • na Linuksie bardzo wiele programów jest napisana w Pythonie - w łatwy sposób będę mógł pisać i modyfikować pluginy do nich
  • czy już wspomniałem o poczuciu wolności?
  • a brak klamerek i stosowanie wcięć nie jest aż tak straszne jak sądziłem
Jednak nie myślcie, że "teraz nadszedł czas ...



... napierdalania". Co to, to nie! Po prostu obiektowość mogę zastosować dopiero wtedy gdy jest mi rzeczywiście potrzebna. Nie muszę wciskać jej na siłę do programu o stopniu skomplikowania zbliżonym do "Hello World!".
Z Pythonem mogę zająć się pisaniem kodu, który rozwiązuje problem. Nieźle się przy tym bawiąc.
Spis Treści
Kanały RSS
Add to Google
Add to Netvibes