Archiwalia dla 04.2007

O grze w dwa ognie raz jeszcze

Drodzy autorzy serwisów społecznościowych, zamiast kolejny raz kopiować Twittera, który skopiował już Dodgeballa, zainwestujcie w Blip.

Dlaczego? Ano dlatego, że musicie się pogodzić z faktem, że podnoszenie progu wyjścia z serwisu wcale nie działa na korzyść waszych użytkowników. Dlaczego muszę mieć konta w pięćdziesięciu social sites tylko po to, żeby wiedzieć, gdzie poszli na piwo moi znajomi?

Przykro mi, ale nie jestem amanda99 i większość moich znajomych to nie weekendowi klikacze, tylko ludzie z krwi i kości, z którymi pracuję, chodzę do pubów i mają absolutnie różne preferencje odnośnie wyboru waszych usług.

Blip (Twitter, Dodgeball) jest niezależny od was i dalece większą przysługę oddacie nam, jeśli zintegrujecie interfejs do tego właśnie serwisu, zamiast powielić całą jego funkcjonalność. Do tego nieudolnie, bo sterowiec, który zaserwowało nam Grono przypomina bardziej akcje zniczowe w statusach niż usługę powiadamiania.

Do rzeczy więc — jeśli każdy z was ma budżet pozwalający na implementację 20% funkcjonalności Blipa, to w piątkę jesteście w stanie sfinansować pełny serwis. Dajesz 20%, dostajesz pozostałych 80%, której części nie rozumiesz?

Nie ma szans działać? Przykładem niech będzie Google, które — podobnie jak wszystkie portale — zbudowało własny komunikator, ale — w przeciwieństwie do nich — zastosowało otwarty protokół XMPP. A teraz wyskakiwać z kasy i zgłaszać się do autorów ;)

Grono.net - Konkurs

Chyba wszyscy słyszeli już o nowej usłudze Grona, Blimpie, który to jest słabą podróbką serwisu Blip.pl. Ci, którzy nie słyszeli, z pewnością nie czytają blogów, bo agencja reklamowa ograniczyła się do zaspamowania blogów komentarzami reklamowymi. Mi też się oberwało, co nie zdziwiło mnie specjalnie — bądźmy szczerzy, Grono w moich oczach stracić już nie może. Marcin dostał nawet przeprosiny z tej okazji, ja obejdę się smakiem.

Wracając jednak do tematu, chciałem urządzić mini-konkurs. Zapraszam do zgadywania, jaki kolejny serwis padnie ofiarą Grona? Zadanie jest trudne, bo ich Zakon Chaosu (podobno 20 programistów tam mają, Marcin zachwalał, że paru nawet na studia już poszło) zaimplementował już wszystko, co stanęło mu na drodze.

Mój typ — serwis aukcyjny jeBay.

Podbij cenę do:
PLN

Zapraszam do zabawy. Preferowana forma nadsyłania zgłoszeń — komentarz lub TrackBack ;).

Talku-Talku-Bay

Tym razem nie będę jeździł po Gadu-Gadu, ale tak mi się jakoś sposób tłumaczenia skojarzył.

Panowie z Brandlaya od lat nie przestają nas zaskakiwać wspaniałymi pomysłami. Zawdzięczamy im na przykład bezużyteczny klon MySpace o wdzięcznej nazwie Grono.net. O tym właśnie serwisie chciałem wspomnieć. Mam tam nawet konto — głównie dlatego, że kiedy ostatnio próbowałem je usunąć, Grono było właśnie w stadium agonalnym i każde kliknięcie guzika usuń konto kończyło się zrzutem stosu, na zmianę Pythona i Javy.

grapeo.co.uk

Problem z Gronem jest taki, że o ile — co chyba niepodważalne — cały świat, z Chuckiem Norrisem na czele, chciałby założyć sobie tam konto, to nazwa jest mocno niemediala poza granicami naszego rezerwatu kultury słowiańskiej. Weźmy więc grono i słownik polsko-angielski. Co nam wyjdzie? Grape. Cholera, zajęte. Dodajmy o na końcu!

Tak zapewne narodziło się Grapeo. Cóż, dobrze, że nie inspirowali się Flickrem, bo powstałby koszmarek na miarę grapekr. Insipiracji za to wyraźnie dostarczył im inny hit Sieci — eBay. Wystarczy spojrzeć na logo, by mieć pewność, że nie wywodzi się od pewnej wyszukiwarki z dwoma kółeczkami w nazwie.

Złota zasada łebdwazero brzmi jednak inaczej: jeśli masz zamiar skierować swój serwis do społeczności z różnych krajów, pod żadnym pozorem nie umożliwiaj im komunikacji. Tych, którzy dopiero usłyszeli o takiej zasadzie uspokajam, że Grapeo stosuje ją wzorowo.

I tak mamy na przykład przycisk Friends [1 mln], który zdaje się sugerować, że w sieci społecznej znaduje się milion użytkowników. Rozdygotany użytkownik, spoconą reką, popycha swój kursor w kierunku odnośnika, zastanawiając się w głębi duszy, jak ogarnie tak dużą liczbe nowych znajomych. Na szczęście, dział użyteczności czuwa i jakkolwiek byśmy nie sformułowali zapytania do wyszukiwarki, zawsze zwraca wszystkie 45 kont.

Wego: Wtyczki

Wczoraj pisałem o dodaniu do Wego CMS wtyczek dla systemów płatności online. Cypherq poprosił o szczegóły dotyczące implementacji. Noszę się z zamiarem przygotowania kilkuetapowego howto, kiedy tylko pojawi się darmowa wersja Wego (tak, to bardzo możliwe, po szczegóły odsyłam do nbw). Póki co, o samym sposobie ładowania wtyczek.

Moduły — wtyczki z automatyczną rejestracją

Wego ma dwa rodzaje pluginów. Pierwszy rodzaj — wtyczki z automatyczną rejestracją — używany jest przez moduły. Moduł to zamknięta część systemu, widoczna jako osobna pozycja w panelu. Przykładem niech będą Artykuły lub Kosz.

Automatyczna rejestracja oznacza tyle, że plik z wtyczką zawiera klasę o nazwie takiej samej, jak plik i nie musi właściwie robić nic więcej:

<?

/* $Id: foo.module.php 1 2007-04-27 12:00:00Z patrys $ */

require_once(THE_ROOT . '/class/genericModule.class.php');

/**
 * Foo module
 */

class fooModule extends genericModule
{
	public function __construct(& $modSys)
	{
		parent::__construct($modSys);
		$this->module = 'foo';
	}

	/**
	 * Check if module is usable (dependencies, etc.)
	 */
	protected function __public_init($data)
	{
		return array('success' => true);
	}

	/**
	 * Get module info
	 */
	public function getInfo()
	{
		return array
		(
			'title' => _('Foo'),
			'author' => 'patrys [ patrys at icenter pl ]‘,
			‘version’ => ‘1.0′,
			‘description’ => _(’Hello world example’),
			‘modified’ => filemtime(__FILE__)
		);
	}
}

?>

Do tego dochodzi klasa dla panelu administracyjnego (dla oszczędzenia pamięci, ładowana tylko w przypadku, gdy jest to aktywny moduł w panelu):

<?

/* $Id: foo.panel.module.php 1 2007-04-27 12:00:00Z patrys $ */

class fooPanelModule extends fooModule
{
	protected function __internal_list()
	{
		return 'Hello world!';
	}
}

?>

Jest tu kilka magicznych metod — wszystkie __public_* dostępne są automatycznie z poziomu inych modułów i z poziomu szablonów Smarty; __internal_* za to służą za obsługę ekranów panelu administracyjnego, wymagana jest przynajmniej obsługa metody list, która jest domyślnym widokiem.

Inne wtyczki — ręczna rejestracja

W przypadku wtyczek pól dodatkowych i systemów płatności okazało się, że automatyczna rejestracja nie jest najlepszym wyjściem — jedna klasa może realizować kilka funkcji, a sztuczne po niej dziedziczenie wprowadza tylko chaos w plikach. Zdecydowaliśmy się, że moduły te same muszą zgłosić obsługiwane przez siebie funkcje:

<?

/* $Id: platnosciPayment.class.php 7234 2007-04-25 10:55:39Z patrys $ */

class platnosciPaymentType extends genericPaymentType
{
	public static $paymentList = array
	(
		'platnosci_test' => array
		(
			'code' => 't',
			'name' => 'Platnosci.pl (płatność testowa)',
		),
		'platnosci_mtransfer' => array
		(
			'code' => 'm',
			'name' => 'Platnosci.pl - mBank mTransfer',
		),
		// [...]
		‘platnosci_credit’ => array
		(
			‘code’ => ‘c’,
			‘name’ => ‘Platnosci.pl - Karta kredytowa’,
		),
	);

	public function getConfigData()
	{
		// [...]
	}

	public function process()
	{
		// [...]
	}
}

$parent = paymentSystem::getInstance();
foreach (platnosciPaymentType::$paymentList as $key => $val)
	$parent->register($key, ‘platnosciPaymentType’, $val['name']);
$parent->registerSettings(’platnosci’, ‘platnosciPaymentType’, _(’Platnosci.pl’));

?>

Dzięki temu możliwa jest obsługa wszystkich sposobów zapłaty za pomocą jednej klasy (konstruktor klasy genericPaymentType otrzymuje i zapisuje wybraną formę zapłaty).

Ładowanie wtyczek

Tutaj poszliśmy na łatwiznę:

public function loadPlugins()
{
	$modDir = dir(THE_ROOT . '/payment/');

	while (($file = $modDir->read()) !== false)
	{
		$fullPath = THE_ROOT . '/payment/' . $file;

		if (!is_dir($fullPath))
		{
			include($fullPath);
		}
	}
}

Ładowanie wtyczek z automatyczną rejestracją wymaga nieco więcej zachodu (po załadowaniu pliku, trzeba jeszcze sprawdzić, czy istnieje klasa o odpowiedniej nazwie i czy dziedziczy po odpowiedniej klasie bazowej), ale samodzielna implementacja nie powinna zająć więcej niż 5 minut.

Na koniec

Po notce o zmianie firmy pojawiły się niejasne spekulacje, jakobyśmy mieli zastąpić nbw butelką wody mineralnej. Spieszę z dowodem, że młodzieniec ów żyje i ma się dobrze (a jeśli już mielibyśmy kogoś zamienić na butelkę wody, to byłby to prędzej sit0).

The Crew
Ekipa, od lewej:
patrys, sit0, nbw, emes
jarv

Wego 0.99

Wego CMS

Nieuchronnie zbliża się publicznie dostępna wersja Wego CMS (system wdrażany klientom jest od 1,5 roku). Kolejne etapy dodawania funkcjonalności, refaktoryzacji kodu, upraszczania silnika (najwięcej nadmiarowego kodu zniknęło po ukazaniu się stabilnego PHP 5) doprowadziły nas do miejsca, z którego premierę widać gołym okiem.

W ostatnich dniach do stabilnego drzewa dołączyła obsługa wpinanych systemów obsługi płatności. Znaczy to dokładnie tyle, że integracja tego typu usług sprowadza się do napisania (kilkudziesięciu linii kodu) wtyczki. Z tej okazji napisałem też dwa pierwsze moduły płatności:

Platnosci.pl
Platnosci.pl

PayPal
PayPal

Całkiem prawdopodobne, że w najbliższych dniach pojawi się więcej możliwości — AllPay, Przelewy24, (jeśli prowadzisz serwis tego typu albo chciałbyś płacić w Sieci za pomocą innego systemu, zostaw namiary na API w komentarzach).

Transmission

Jeśli jeszcze nie wiecie, Transmission jest klientem BitTorrenta. Ja nie wiedziałem. Do dzisiaj.

Transmission

GnomeFiles powiadomiło mnie o nowej wersji i postanowiłem spaczkować ją dla potomnych (czytaj: dla użytkowników PLD). Napisałem speca, zbudowałem, uruchomiłem… odinstalowałem oryginalnego klienta BitTorrent.

Tak, jest bardzo przyjemny w użyciu.

It’s unlimited!

Część z was już pewnie wie, inni się domyślają, a reszta tkwi w błogiej nieświadomości. Od początku marca pracujemy razem w nowej firmie — brytyjskim ITS Ltd., a dokładniej w jej nowopowstałym (na nasze potrzeby) wrocławskim oddziale. Kto pracuje?


Krzysztof sit0 Sitarski — pan burdel-to-moja-specjalność


Michał emes Sałaban — unoszący się w przestworzach developer PLD


Tomasz jarv Dobrowolski — maestro Photoshopa


Tomasz nbw Staniak — mister znajdę-wam-jakieś-zajęcie, ale nie przyjdę na zdjęcie


Patryk Patrys Zawadzki — niżej podpisany, programista

Zajmujemy się głównie budowaniem aplikacji webowych w oparciu o framework Django (tak, praca dla programistów Pythona to nie bajka). Idzie nam całkiem nieźle; mamy ładne nowe biuro, zespół zna się od dawna, choć w niektórych miejscach przydałby się drobny refactoring.

Słowo się rzekło, oto i zdjęcie… (NSFW)

Niedawno obiecałem, że w związku z projektem ustawy o zakazie pornografii, zamieszczę tutaj swoje zdjęcie. Mam nadzieję, że nikt się nie obrazi.

My southparkish character

No dobra, mogłem napisać, że zamykam bloga. ^_^