strona główna

Archive for the 'Wordpress' Category

mod_rewrite na home, Gengo 0.5

Friday, April 7th, 2006

Dwie dobre wiadomości i jedna zła, niekoniecznie w tej kolejności:

  1. wczoraj pojawiło się nowa wersja Gengo – wtyczki do Wordpressa pozwalającej na wygodne pisanie tekstów w więcej niż jednym języku. W wersji 0.5 autor, Jamie Talbot, poprawił zdaje się wszystkie błędy które znalazłem podczas prób używania 0.4 na moim blogu, więc może będę już mógł z niej skorzystać,
  2. niestety, podczas prób instalacji 0.5 na moim Business Server w home.pl chyba trafiłem na błąd w tutejszym serwerze WWW; szczegóły dalej,
  3. podczas szukania informacji na temat tego serwera dowiedziałem się, że home w końcu udostępnił mod_rewrite. Sprawdzone, działa, nareszcie będzie można korzystać z ładnych i czytelnych adresów.

Teraz o problemie z serwerem, na przykładzie pliku phpinfo.php:

<?php
if ($HTTP_GET_VARS['test'])
{
phpinfo();
}
else
{
header("Location: /phpinfo.php/en/?test=1");
}
?>

Sens działania jest prosty: otwieram w przeglądarce adres http://elksoft.pl/phpinfo.php, skrypt powinien przekierować na samego siebie z dodatkowymi parametrami i wtedy wyświetlić informacje o środowisku (funkcja phpinfo()). Tak robi, a interesujący fragment tego co wyświetla to:

QUERY_STRING test=1
REQUEST_METHOD GET
REQUEST_URI /phpinfo.php
SCRIPT_NAME /phpinfo.php
SCRIPT_FILENAME /phpinfo.php
SCRIPT_URL /phpinfo.php
SCRIPT_URI http://elksoft.pl/phpinfo.php

I to jest to miejsce, w którym coś tu oszukuje. Według specyfikacji po przekierowaniu lokalnym (bez podania protokołu i adresu maszyny) serwer musi utworzyć stronę identyczną z tą, jaką otrzymałbym wpisując w przeglądarce adres http://elksoft.pl/phpinfo.php/en/?test=1. A tego nie robi, bo wpisując ten adres w przeglądarce otrzymuję:

QUERY_STRING test=1
REQUEST_METHOD GET
REQUEST_URI /phpinfo.php/en/?test=1
SCRIPT_NAME /phpinfo.php
SCRIPT_FILENAME /phpinfo.php
SCRIPT_URL /phpinfo.php/en/
SCRIPT_URI http://elksoft.pl/phpinfo.php/en/

Niestety Gengo polega na zawartości REQUEST_URI i, niestety, głupieje przy takim zachowaniu serwera. Pozostaje poszukać, może uda się to niedużym nakładem pracy obejść.

Dodane: przekombinowałem, da się to sprawdzić w sposób bardziej czytelny i dający więcej informacji.  Dwa skrypty, /a.php tylko przekierowuje na /b.php?test=1, który z kolei wypisuje wyżej opisaną tabelkę.  Wynik otwarcia strony http://elksoft.pl/a.php:

QUERY_STRING test=1
REQUEST_METHOD GET
REQUEST_URI /a.php
SCRIPT_NAME /b.php
SCRIPT_FILENAME /b.php
SCRIPT_URL /a.php
SCRIPT_URI http://elksoft.pl/a.php

Czyli na przemian, część zmiennych jest ustawiana poprawnie (QUERY_STRING, SCRIPT_NAME, SCRIPT_FILENAME), a część pozostaje z pierwszego wykonania (REQUEST_URI, SCRIPT_URL, SCRIPT_URI).
Sprawy trochę komplikuje fakt, że stara, oficjalna specyfikacja CGI nie definiuje zachowania Location aż tak dokładnie, a nowa wyszła tylko jako draft.  Apache, jak się okazuje, idzie na łatwiznę i przy każdym przekierowaniu, niezależnie od tego, czy lokalnym czy z nazwą protokołu i serwera, odsyła do klienta 302 z nowym adresem, co działa bardzo dobrze, chociaż na pewno wolniej.
Jako obejście najprościej będzie wymusić przekierowania na "pełne" adresy, ze wskazaniem nazwy serwera.

Wordpress i Jabber: wyciągam wtyczkę

Sunday, February 12th, 2006

Zatrzymuję prace nad wtyczką wysyłającą powiadomienia na Jabbera.  Powód jest bardzo trywialny: przestała mi być potrzebna.
Coraz bardziej przekonuję się o tym, że powiadomienia na jakikolwiek system IM to niezbyt szczęśliwy pomysł. Blogi po prostu nie służą, przynajmniej mi, do komunikacji natychmiastowej; o nowych wpisach i komentarzach chcę się dowiadywać wtedy, kiedy akurat poświęcam czas na czytanie i pisanie, a nie kiedy pracuję nad innymi sprawami. Za pośrednictwem Jabbera, Skype i MSN chcę dostawać tylko wiadomości wymagające naprawdę szybkiej reakcji, blog byłby tylko i wyłącznie kolejnym rozpraszaczem. A nie chcę tworzyć i później utrzymywać oprogramowania, z którego nie korzystam.

Przepraszam zainteresowanych za narobienie nadziei, dziękuję za wszystkie podpowiedzi.

Wordpress i Jabber — lekkie korekty

Friday, January 20th, 2006

Wnioski na temat rozwoju jabberowej wtyczki do WP po przejrzeniu dokumentacji i istniejącego kodu:

Skorzystam z Subscribe to comments (dzięki za podpowiedź, Łukasz). Ideałem byłoby, jeśli da się sensownie (i wygodnie) połączyć funkcjonalność, dodanie obsługi XMPP do StC bez psucia tego, co tam jest teraz.

Class.jabber.php trzeba będzie solidnie przerzeźbić, a właściwie napisać na jej podstawie coś co nadaje się do wykorzystania w aplikacji WWW. Dziwiłem się dlaczego wysyłanie wiadomości zajmuje tyle czasu, dopóki nie zajrzałem w kod:

7 lines matching "sleep" in buffer class.jabber.php.
108:        var $iq_sleep_timer;
146:                $this->iq_sleep_timer           = 1;
189:                        sleep(2);
215:                        sleep($this->delay_disconnect);
706:                        usleep(250000);
785:                        sleep($this->iq_sleep_timer);
892:                        sleep($this->iq_sleep_timer);

Kod do przebudowy i porozbijania na nieblokujące fragmenty. To co jest nadaje się do testów funkcjonalności, ale docelowo wysłanie wiadomości nie powinno zajmować kilku sekund jeśli serwer Jabbera działa poprawnie.

Fun with XMPP, part 1

Friday, January 13th, 2006

No, to mogę zacząć narzekać na XMPP: protokół zdefiniowany przez bazowe RFC nie pozwala na wysyłanie pojedynczej wiadomości do więcej niż jednego adresata. Odpowiednie rozszerzenie protokołu jest opisane w JEP-0033, które od ponad półtora roku ma status Draft i jest, z tego co widzę, ogólnie ignorowane przez serwery (no dobra, sprawdziłem jabberd i ejabberd, dalej nie szukałem). Co oznacza, że kod powiadamiający o wpisach i komentarzach zużyje znacznie więcej czasu procesora i wygeneruje bez sensu znacznie większy ruch w sieci niż powinien, co będzie szczególnie widoczne w przypadku bardziej popularnych blogów. Suuper.

Nic to, zobaczymy co się da zrobić z tym co jest.

Wordpress i Jabber

Friday, January 13th, 2006

Zacząłem przeglądać dokumentację Wordpressa pod kątem rozsyłania powiadomień o nowych wpisach i komentarzach przez Jabbera/XMPP. Wygląda to całkiem sensownie, po dołączeniu class.jabber.php ma nawet szansę zadziałać. Projekt wpJabber uważam za oficjalnie rozpoczęty :)

Założenia:

  1. powiadomienia muszą być wygodne przede wszystkim dla czytelników, w szczególności nie powinny wymagać zakładania konta,
  2. instalacja powinna być prosta; powinno wystarczyć włączenie odpowiedniego dodatku i jednolinijkowe wstawki do szablonów.

Wydaje mi się, że z punktu widzenia czytelnika powinno wyglądać to tak: na stronie głównej bloga dostępne jest miejsce na wpisanie JID i przycisk "Powiadom mnie o nowych wpisach", a na stronach poszczególnych wpisów miejsce na JID i przycisk "Powiadom mnie o nowych komentarzach". Przydałby się też checkbox "Zapamiętaj mnie", który spowoduje wpisanie JID w ciasteczko tak, żeby wpJabber był w stanie rozpoznać wpisy, do których już włączyłem powiadomienia i nie ma sensu ponownie wyświetlać tego formularza, a w pozostałych automatycznie wpisywać mój JID w formularz.

Podobnie jak w przypadku list e-mailowych, po włączeniu powiadomień wpJabber wyśle na komunikator prośbę o potwierdzenie – odesłanie na jego adres wiadomości z tekstem "Tak", "Yes", "Da", "Oui" czy czymś podobnym. Chyba wystarczy dla każdego adresu pytać tylko raz, żeby nie utrudniać specjalnie ludziom życia. Po otrzymaniu potwierdzenia wpJabber doda sobie delikwenta do rostera i od tego momentu będzie pozwalać na Single-Click Subscribe (do opatentowania).
To tyle, w razie uwag lub pomysłów prosiłbym o komentarze.