Po godzinach, raz jeszcze
Dziś na GG ujżałem taki tekst:
XXX: pierogi zamrożone mam wrzucić do garnka i ugotować? czy najpierw rozmrozić?
XXX: pomóż plis
XXX: bo głodny jestem
Dziś na GG ujżałem taki tekst:
XXX: pierogi zamrożone mam wrzucić do garnka i ugotować? czy najpierw rozmrozić?
XXX: pomóż plis
XXX: bo głodny jestem
Firma w której mam zaszczyt pracować, maYday IT ogłosiła konkurs plastyczny na projekt strony internetowej. Nagrodą w konkursie, poza niezłą sumką (2000zł) jest też możliwość dalszej współpracy przy następnych projektach. Więcej na stronie:
Taka uwaga: Wszyscy którzy nie ukończyli 18 lat, nie zajmują się tym poważnie, i nie mają sensownego portfolio radzę sobie odpuścić, bo zmarnują tylko czas swój i ludzi którzy będą prace oceniać.
Parę tekstów które dziś przeczytałem:
Rafio: wiesz skad vista wzieła colors mixer?
XXX: pewnie z instalki.pl?
YYY: Rafi też klepie obiektywnie
YYY: A Ty umiesz klepać obiektywnie?
Pozwolę sobie ocenzurować nicki autorów ;)
Dziś w engine zaszła istotna zmiana. Obsługa logowań i wylogowań użytkowników została odebrana akcji action_login, i przekazana specjalnie do tego celu stworzonej klasie, „class_login”. Dzięki temu mogę używać formularzy logowania w pozostałych akcjach, np. formularzach błędów, stronie z informacją o zamknieciu forum lub wymogu logowania.
Witajcie!
Dziś ponownie o uniBoard. Tym razem napiszę o parserze wiadomości, którego używam w uniBoard. Ale na początek…
Jestem pewien że każdy z was używa w swoich postach bbtagów. Są to tagi, które przy wyświetleniu wiadomości zostają zamienione (przeparsowane) na kod html, np:
[b]The quick brown fox jumps over the lazy dog[/b]
Zostanie wyświetlone jako:
<b>The quick brown fox jumps over the lazy dog</b>
Tym właśnie zajmują się parsery. Obrabiają surowy tekst, zamieniając określone ciągi znaków na określony html.
Parsery można podzielić na dwie główne grupy: te które zastąpują określonymi formułkami inne, oraz te, które analizują strukturę tekstu. Te pierwsze są proste w konstrukcji i działaniu. Podstawowy parser tego typu można upchać w jednej funkcji:
function parse( $text){
//break lines
$text = nl2br( $text);
//parse
$text = preg_replace("#\[b\](.*?)\[/b\]#si",'\\1', $text);
$text = preg_replace("#\[i\](.*?)\[/i\]#si",'\\1', $text);
$text = preg_replace("#\[u\](.*?)\[/u\]#si",'\\1', $text);
$text = preg_replace("#\[url\](.*?)\[/url\]#si",'\\1', $text);
//return ready text
return $text;
}
Rozwiązanie to jest proste, ale ma parę wad. Pierwszą jest brak świadomości lokalizacji tekstu, co znaczy że parser nie ma pojęcia, gdzie aktualnie w tekstcie się znajduje. Drugą jest zerowy wpływ na samą zawartość tegoż. Parser nie analizuje tagów, tylko odrazu zamienia je na ich HTML. W przypadku prostych narzędzi formatowania tekstu, nie jest to problemem, jednak gdy trzeba np. przeparsować link, który zawiera inne tagi, parser ten uczyni go niedziałającym (co dzieje się swoją drogą w Callisto):
[url]http://link.pl/][/url]
Zostanie wielokrotnie przeparsowane:
<a href="http<img src="HTML EMOTKI" />/link.pl/">...
Tutaj swą siłę pokazuje inny typ parserów, który zamiast bezmózgiego przelecenia przez tekst, będzie analizował jego strukturę. Taki parser napisałem specjalnie dla uniBoard. Jego kod jest zbyt rozbudowany, aby tutaj go umieścić, dlatego ograniczę się do zasady działania, dla przykładowego postu:
[b]The quick brown fox jumps over the lazy dog[/b]
Oto, jak tekstem zajmie się uniBoard:
1. Rozpoznanie pierwszego tagu („[b]„)
2. Dodanie „<br/>” od poprzedniej pozycji kursora do pozycji tagu.
3. Przesunięcie kursora do tagu.
4. Rozpoznanie tagu (czy jest to tag samodzielny, czy wymagający zamknięcia).
5. Dodanie tagu do stosu.
6. Przesunięcie kursora za tag.
7. Rozpoznanie tagu „[/b]„.
8. Kontrola poprzedniego tagu.
9. Kontrola blokady parsowania.
10. Odczytanie tekstu między tagami.
11. Umieszczenie tekstu w html tagu („<b>{content}</b>”).
12. Zastąpienie znaków od początku pierwszego tagu do końca drugiego gotowym html.
13. Przesunięcie wskaznika do następnego tagu.
14. „Złamanie linii” od ostatniego tagu, do końca tekstu.
Ten parser sprawdza każdy tag indywidualnie. Dzięki temu można uniknąć wieloktrotnego parsowania tego samego tekstu, oraz dokładniej budować sam kod. Przykładem tego mogą być tagi img, które analizują rozmiar obrazka, i w razie potrzeby doklejają js, obsługujący powiększenie grafiki po kliknięciu na nią.
Możecie go zobaczyć w tym temacie.
Od 25 godzin mamy już rok 2009. Postanowiłem to uczcić, zmieniając styl mojego bloga.
Miejmy nadzieję że ten rok przyniesie nam stable uniBoard’a ;)
Dziś kolejny wpis o znanym bądź nie Rafale Ruli.
Tym razem wykop poświęcony całokształtowi karriery:
Dawno nic nie pisałem. Było to spowodowane głównie pracą i studiami. Dlatego w tym wpisie poruszę wiele różnych tematów, nawet zapomnianą już kwestię następcy Pegasusa.
uniBoard powoli nabiera kształtu. Nowy styl jest poprostu świetny, i zgodzą się z tym wszyscy, którzy już go widzieli. Dodatkowo używa on jQuery, a nie jak poprzednik, topornego i ciężkiego Mootools.
Pojawiła się możliwość komercyjnego rozwijania skryptu, i chciałbym z niej skorzystać. Nie dlatego, ponieważ chce napychać swoje konto pieniążkami, a dlatego ponieważ dzięki temu systemowi Unisolutions będzie mogło się rozwijać.
Tak, po długiej przerwie poświęciłem chwilkę i wydałem Callisto 1.1.5!
Ściągnąć ją można z tąd:
http://unisolutions.pl/index.php?act=topic&topic=297