Paweł Talacha - witryna domowa

PHP; MySQL; (x)HTML; CSS; JavaScript; C++; Java

Aktualności

obrazek
Dziś wyjątkowa aktualizacja ViCMS. Po pierwsze - świąteczna. :) Po drugie - dodanych zostało kilka rzeczy usprawniających działanie systemu i poprawiających błędy. Jest też trochę nowości, a są to:

  • Zagnieżdżone kategorie aktualności - Pozwalają na lepsze grupowanie wpisów. Numerek w nawiasie obok nazwy mówi teraz o liczbie aktualności danej kategorii, a także wszystkich kategorii podrzędnych. Ponadto nazwa kategorii znajduje się teraz w stopce każdego wpisu, skąd informacja o dalszym ciągu tekstu (o ile taki istnieje) przeniesiona została na koniec treści pierwszej jego części. Będzie także umieszczana na końcu skrótów wiadomości w kanale informacyjnym.
  • Panele - Mogą zawierać dowolną treść, formatowaną identycznie jak sam wpis. Widoczne są na pasku bocznym. Mogą być wyświetlane poniżej menu witryny - na samym dole, powyżej - na samej górze, lub tylko na górze strony głównej witryny.

Działanie tych funkcji przedstawia poniższy film. Był on tworzony w trakcie pisania programu - widać na nim drobny błąd, który został później wyeliminowany. Film zawiera też paskudną reklamę. mruga


Ponadto:

  • Panele stron - Zasada działania jest identyczna, jak w przypadku paneli ogólnych, dotyczą jednak tylko konkretnej strony. Tworzone są przy dodawaniu lub edycji strony i mogą pełnić rolę dodatkowego dla niej menu.
  • Opcjonalny przycisk "+1" poniżej aktualności pozwalający na rekomendowanie treści wpisów w serwisie Google+.
  • Ulepszone funkcje odpowiedzialne za formatowanie i sprawdzanie poprawności zagnieżdżenia znaczników BBcode, dzięki czemu wykrywana jest większa ilość błędów, a jednocześnie zwiększona została elastyczność poprzez umożliwienie stosowania dowolnej kolejności zagnieżdżeń w ramach dopuszczalnej w danym momencie.
obrazek
  • Dokumenty generowane przez system są teraz zgodne z HTML5, który zastąpił poprzednio używany standard opisu - XHTML 1.0 Transitional. Dzięki temu możliwe było m.in. zrezygnowanie z negocjowania typu zawartości lub osadzania obiektów flash z użyciem SWFObject, aby zapewnić zgodność i poprawne wyświetlanie w przeglądarkach z grupy Internet Explorer. Poziom użycia nowych elementów języka znaczników HTML5 jest znikomy z powodu śladowej ich obsługi przez IE8. Starsze wersje oraz przeglądarki z włączonym widokiem zgodności będą na samej górze wyświetlały komunikat o możliwości niepoprawnej prezentacji strony.
  • Wymienione emotikony i zwiększona ich ilość.
  • Nowa, trzecia już skórka w paczce. Blue dostosowuje się do szerokości okna przeglądarki, nie ładuje także zbyt wielu elementów z plików graficznych. Założeniem było stworzenie "lekkiej" szaty graficznej, a więc zaokrąglone rogi nie działają w IE8 i starszych. :P

Co do błędów - niektóre z nich:

  • Album nie był zapisywany w bazie, jeżeli szerokość wskazanego przy jego edycji lub tworzeniu zdjęcia była mniejsza niż wymagana szerokość miniaturki.
  • Zapis długich treści (bliskich limitu długości) zawierających emotikony mógł powodować błąd - długość była sprawdzana przed, a nie po zamianie znaczników BBcode na HTML.
  • Nie dało się dodać administratora z pełnymi uprawnieniami (super administratora).
  • Grafika PNG na miniaturkach albumów i zdjęć w galerii traciła przezroczystość.
  • Część administracyjna "wystawała poza ekran" w rozdzielczości 1024x768.
  • Brakowało stronicowania na liście albumów w galerii oraz na liście zdjęć.




Korzystając z okazji - wszystkim odwiedzającym tę stronę chciałbym złożyć życzenia radosnych Świąt Bożego Narodzenia oraz uśmiechu i życzliwości na każdy dzień Nowego Roku. :)
Ocena: 0 plus minus
Opublikowane 23.12.2011 22:13 przez Varabi | kat.: ViCMS | Komentarze (0)
Wyszukiwarka pozwalająca na znalezienie interesującej treści w obrębie witryny to funkcja, którą ViCMS posiada prawie od początku swojego istnienia. Była ona wtedy wykonana na szybko, jako prowizoryczna - proteza ostatecznej wersji. Zasada działania była tak prosta, że już prostsza być nie mogła. mruga Przeszukiwała treść pod kątem wystąpienia danej frazy w sposób dosłowny (tak, jak została wprowadzona) - bez żadnej analizy. Jak powszechnie wiadomo, prowizorki są najtrwalsze - toteż działała w prawie niezmienny sposób po dziś dzień stając się najsłabszym elementem systemu.

Wyszukiwarka w takiej postaci nie spełniała swojej funkcji (była mało skuteczna) i nie mogłem już na nią patrzeć. :P Czas więc najwyższy było napisać ją bardziej porządnie. Nowy sposób przeszukiwania treści analizuje aktualności, strony i galerię pod kątem wystąpienia poszczególnych elementów frazy, sortując wyniki w grupach według trafności (procent zawartości frazy) i powtarzalności (taka prawie ilość wystąpień mruga). Ale gdyby ktoś jeszcze marudził - zawsze może zaznaczyć pole obok i zmusić silnik Google do wykonania brudnej roboty. cool

Pozostałe zmiany w wersji 2.0.12
  • Obrazki w treści stron i aktualności mogą być teraz również umieszczane po lewej lub po prawej stronie tekstu, który będzie je "opływał". Służą do tego odpowiednio znaczniki img2 i img3. Należy pamiętać, że sekcja taka musi być zamknięta za pomocą clear i /clear. W przeciwnym razie może zrobić się mały bałagan. Dlatego też funkcję zaznaczam jako "dla użytkowników zaawansowanych".
  • Skórki mogą posiadać teraz ikonkę w formacie PNG - plik icon.png. Oczywiście Internet Explorer starszy niż 9 ich nie obsługuje, więc załaduje sobie plik favicon.ico, o ile taki będzie znajdował się w folderze. Pozostałe przeglądarki, użyją tego pierwszego pliku. Zalety? Ładniej się prezentuje, kolor 32-bit, przezroczystość, w większej rozdzielczości (ponad 200x200) np. Opera używa jako miniaturki w SpeedDial, itp.
  • Drobne poprawki w skórkach i aktualizatorze.
obrazek









Jeżeli nic dziwnego się nie przytrafi i będę miał znowu napad na dłubanie w PHP to kolejna wersja będzie już prawdopodobnie z serii 2.1 z czymś bardzo fajnym. :)
Ocena: 0 plus minus
Opublikowane 22.10.2011 15:24 przez Varabi | kat.: ViCMS | Komentarze (0)
System zarządzania treścią, jak wskazuje nazwa, powinien przede wszystkim umożliwiać swobodne kształtowanie sposobu prezentacji tekstu. Brak kompletnego formatowania, w skład którego wchodzi kolorowanie tekstu, możliwość powiększania czy zmniejszania czcionki oraz wstawianie wykazów był wadą ViCMS. Był. :)

Co w nowej wersji?
  • Możliwość tworzenia wykazów zawierających elementy uporządkowane (ponumerowane) lub nieuporządkowane (wypunktowane - jak ten mruga) Wygląd można sobie doprecyzować w pliku skórki używając klas - odpowiednio list1 i list2. Numeracja w pierwszym przypadku może zaczynać się od konkretnej wartości, jeśli znacznik rozpoczynający będzie miał postać np. list1=6. Listy mogą być zagnieżdżone.
  • Kolorowanie tekstu. Na dzień dzisiejszy tylko przeglądarka Opera obsługuje input type color, więc w celu umożliwienia wybierania barwy użyty został komponent JSColor autorstwa Jana Odvárko (screen poniżej). Nie było sensu pisania czegoś od podstaw, skoro istnieje dobre i fajne rozwiązanie. Został więc włączony do systemu.

obrazek

  • Zmiana rozmiaru czcionki - za pomocą znacznika size=wartość. Nie ma do tego przycisku, bo raczej rzadko przychodzi potrzeba, żeby zmieniać określony w skórce rozmiar, ale opcja jest.
  • Odtwarzacz filmów z YouTube można już przełączać w tryb pełnoekranowy bezpośrednio ze stron. :P
  • Dla wygody na dole aktualności zostały dodane strzałki do nawigacji.

Oprócz tego poprawki błędów, które udało się zauważyć od ostatniej wersji:

  • Nie dało się dołączyć stron do menu (zepsułem chyba w przedostatniej wersji mruga)
  • Przy dodawaniu plików do stron i aktualności powrót z kategorii plików wyświetlał komunikat braku upoważnienia.
  • Jeżeli istniały jakieś strony, a wyłączona została ich obsługa w obrębie całej witryny, zostawały one w menu górnym.
  • Brak odstępu pomiędzy częściami aktualności (widoczną od razu i po kliknięciu na "czytaj dalej") w podglądzie.
  • Numerki w listingu kodu wyświetlały się brzydko przy większej liczbie linii niż 9.
  • Tytuł i podtytuł witryny nie znajdowały się pomiędzy znacznikami h1 w przypadku, gdy menu było powyżej (na samej górze) - np. dla skórki infrared.

Ocena: 0 plus minus
Opublikowane 18.09.2011 18:23 przez Varabi | kat.: ViCMS | Komentarze (0)
Od niepamiętnych czasów niektóre usługi Google nie działają w 100% poprawnie w przeglądarce Opera. Czasami faktycznie bywa to problem Opery, ale błędy są zwykle dość szybko poprawiane i od momentu zgłoszenia znikają wraz z pojawieniem się kolejnej wersji. Nawet jeśli Opera zachowuje się prawidłowo, a błąd jest po stronie serwisu WWW, jej twórcy próbują obejść problem stosując tzw. łatki. Czasem łatki są używane doraźnie, jeśli trzeba trochę poczekać na poprawkę w silniku. Po jej wprowadzeniu łatka jest usuwana.

Ale... Niestety mało kto wie (psiocząc na Operę), że często błędy powoduje umyślnie samo Google. Swego czasu nawet kwestię poruszył Paweł Wimmer wysyłając do Google Polska list otwarty w tej sprawie. Skąd pewność, że umyślnie?

Otóż Opera, chyba mniej więcej w tamtym okresie, wprowadziła ciekawą funkcję pozwalającą jej na udawanie innej przeglądarki. Wystarczy gdzieś na otwartej stronie kliknąć prawym przyciskiem myszy, z menu kontekstowego wybrać opcję „preferencje witryny”, następnie zakładkę „sieć” i tam, na dole ustawić udawanie. Po zatwierdzeniu i odświeżeniu strony zdarza się cud! mruga W znacznej większości przypadków serwisy działają poprawnie. I nagle okazuje się, że z Opera radzi sobie świetnie i nie ma problemów z wyświetlaniem żadnego elementu witryny.

obrazek

Praktyka blokowania Opery przez Google mimo upływu lat w ogóle się nie zmieniła. Metody stają coraz trudniejsze od obejścia. Wystarczy spojrzeć na najnowsze dziecko firmy – serwis społecznościowy Google+. Maskowanie w tym przypadku nie wystarczyło, aby górne menu działało poprawnie (tylko zaczęło się wyświetlać), ale jak się okazuje po dodaniu „AppleWebKit/535.1” do user agent (ciągu znaków identyfikującego przeglądarkę) – serwis nagle zaczyna działać zgodnie z oczekiwaniami. Wystarczą trzy kroki:

  1. W pasku adresu wpisujemy: opera:config#ISP|Id
  2. Wprowadzamy wartość: AppleWebKit/535.1
  3. Zapisujemy zmainy, restartujemy Operę

To dowodzi, że wina leży tylko i wyłącznie po stronie Google, który z sobie znanych tylko powodów blokuje użytkowników Opery. Można zastanawiać się, dlaczego firma posuwa się do stosowania chwytów poniżej pasa? Czyżby bała się uczciwej konkurencji? Może zdaje sobie sprawę, że Opera pod względem funkcjonalnym bije na głowę ich produkt - Google Chrome? mruga

Odpowiedzcie sobie sami. Przy okazji przypomnę, że najnowszą wersję Opery znaleźć można na stronie firmy. :)

Edit:
Już użytkownicy napisali skrypty, a nawet wtyczkę, która naprawia serwis Google+. cool
Ocena: 0 plus minus
Opublikowane 09.08.2011 16:32 przez Varabi | kat.: Soft | Komentarze (0)
Mamy wakacje, a więc tempo prac nad ViSUDem także jest iście wakacyjne. Średnio – kilka linijek na dobę – w końcu są ciekawsze rzeczy do roboty. :) Ale prace posuwają się niezmiennie do przodu i powoli z czeluści losowych znaków wyłaniają się bardziej uporządkowane fragmenty, których to zbiory zaczynają ze sobą wzajemnie współgrać tworząc kod. Jest już gotowych mnóstwo rzeczy – jeśli ktoś czytał wpisy na blipie, wie, co zostało zrobione. Nie o wszystkim tam jednak pisałem (na razie są one tajemnicą) i nie prezentowałem dotychczas większych fragmentów interfejsu. Dziś jednak zamierzam pokazać kilka rzeczy z silnika.

Przede wszystkim – questy. To one – obok obsługi przedmiotów i walki – stanowią istotę tekstowych gier przygodowych. Dzięki nim możliwe jest budowanie fabuły i tworzenie ciągu zależnych od siebie zadań, które gracz będzie musiał wykonać, aby odblokować kolejne fragmenty gry. W jaki sposób działać będą w ViSUD? Zapraszam do obejrzenia filmu (najlepiej bezpośrednio w serwisie YouTube, na pełnym ekranie w najwyższej rozdzielczości).


Należy pamiętać, że nadal jest to bardzo wstępna wersja i sporo rzeczy może jeszcze ulec zmianie. Na pewno do poprawki jest wzór liczący limit inwentarza, bo przy niskich poziomach jest zbyt mały i komicznie to wygląda. mruga Oczywiście „gra” zaprezentowana na filmie nie jest żadną grą – są to tylko fragmenty testowe.
Ocena: 0 plus minus
Opublikowane 26.07.2011 13:51 przez varabi | kat.: ViSUD | Komentarze (0)
Bardzo ciekawe rzeczy wydarzyły się w kwestii pakietu biurowego OpenOffice.org. Otóż firma Oracle ogłosiła, że przekazuje go Apache Software Foundation. Luke Kowalski, vice prezes, Oracle Corporate Architecture Group, określił akt ten jako manifestację zobowiązań wobec twórców i społeczności open source. Jego zdaniem, zapewni to popularnemu pakietowi dojrzałą opiekę, otwartą i stabilną infrastrukturę oraz dobre warunki dla dalszego rozwoju.

Do społeczności Apache należał będzie więc kod projektu, prawa autorskie oraz znak handlowy. Oracle zachowa dla siebie patenty związane z OpenOffice.org, uzyskane przy okazji przejęcia Sun Microsystems.

Od czasu, kiedy w ręce firmy Oracle trafił OpenOffice.org, nie zrobiono właściwie nic w celu jego rozwoju. Część programistów w obawie przed zamknięciem projektu i innymi dziwnymi decyzjami kierownictwa zbuntowała się, zakładając The Document Foundation, w ramach której rozwijany jest LibreOffice, bazujący na OpenOffice.org.

TDF wyraża nadzieję na współpracę z Apache Software Foundation i połączenie wysiłków obu społeczności, co będzie możliwe dzięki zmianie licencji projektu.

Pozostaje więc czekać na rozwój wydarzeń i trzymać kciuki, żeby się wszyscy dogadali i zaczęli dynamicznie rozwijać soft współpracując, zamiast każdy z osobna bawić się w swojej piaskownicy swoimi zabawkami. Takie rozwiązanie powinno przynieść korzyść nie tylko dla użytkowników, ale również dla podmiotów zewnętrznych zaangażowanych w rozwój projektu. Swoją drogą – ciekawe w jaki sposób zareagują wydawcy różnych dystrybucji systemów linuxowych, jeśli do fuzji nie dojdzie? Czekamy więc.

Tymczasem lada dzień, zgodnie z harmonogramem, The Document Foundation powinno wypuścić LibreOffice 3.4.
Ocena: 0 plus minus
Opublikowane 02.06.2011 09:05 przez Varabi | kat.: Soft | Komentarze (0)
Przeglądając sieć zauważyłem, że trochę osób ma problem z komunikacją applet – kontroler Java Spring (model MVC). Trudno znaleźć opis zagadnienia. Postanowiłem więc napisać kilka słów.

Założenie jest takie, aby kontroler odebrał dane, przetworzył i przekazał do widoku lub ewentualnie odpowiedział wysyłając komunikat do appletu. Oczywiście najlepiej byłoby przesyłać całe obiekty (serializacja), aby móc np. potem korzystając z JPA (mapowanie obiektowo-relacyjne) zapisać dane wygodnie do bazy. Dlatego też użyjemy strumieni obiektowych (ObjectOutputStream oraz ObjectInputStream).

Zanim jednak przejdę do rzeczy – kilka słów na temat sposobu osadzania appletu.
Po pierwsze – nabywamy ładnych nawyków, więc używamy znacznika object, nie applet.
Po drugie – jeżeli nasz applet był tworzony z wykorzystaniem AbsoluteLayout, należy też dołączyć odpowiednią bibliotekę. Umieszczamy więc w pliku widoku kod:

  1. <object type="application/x-java-applet" width="800" height="600">
  2.      <param name="classid" value="java:pakiet.Klasa.class" />
  3.      <param name="archive" value="naszApplet.jar, AbsoluteLayout.jar" />
  4. </object>

W ten sposób nasz applet będzie wyświetlany na wybranej stronie. A co z komunikacją?

applet → kontroler

Aby wysyłać dane do kontrolera, w metodzie appletu, która ma to robić, umieszczamy kod:

  1. URL url = new URL("http://adresSeriwsu/odebranieDanych.html");
  2. URLConnection uc = url.openConnection();
  3. uc.setDoInput(true);
  4. uc.setDoOutput(true);
  5. uc.setUseCaches(false);
  6. uc.setDefaultUseCaches(false);
  7. uc.setRequestProperty ("Content-Type", "application/octet-stream");
  8. OutputStream out = uc.getOutputStream();
  9. ObjectOutputStream oos = new ObjectOutputStream(out);
  10. oos.writeObject("chrząszcz brzmi w trzcinie ;)");
  11. oos.flush();
  12. oos.close();

Kolejno - tworzymy połączenie z odpowiednim adresem, przygotowujemy wejście i wyjście oraz upewniamy się, że nie będzie użyta wersja połączenia z pamięci podręcznej. Następnie definiujemy typ zawartości i ustawiamy strumienie. Do celów przykładu przesyłany jest obiekt String czyli ciąg znaków. Metoda kontrolera odbierająca informacje może wyglądać następująco:

  1. @RequestMapping(value = "/odbieranieDanych", method = RequestMethod.POST)
  2. public void savindProcess(HttpServletRequest req, HttpServletResponse res) throws Exception {
  3.      ServletInputStream in = req.getInputStream();
  4.      ObjectInputStream ois = new ObjectInputStream(in);
  5.      String data = (String) ois.readObject();
  6.      System.out.println("oderano: "+data);
  7. }

I w ten oto sposób "chrząszcz brzmi w trzcinie mruga" będzie widoczny z poziomu kontrolera.

kontroler → applet

Załóżmy, że chcemy, aby powyższa metoda zwracała jakieś informacje do appletu. Uzupełniamy ją więc o poniższy kod.

  1. ServletOutputStream out = res.getOutputStream();
  2. ObjectOutputStream oos = new ObjectOutputStream(out);
  3. oos.writeObject("wysyłamy coś do appletu");
  4. oos.flush();
  5. oos.close();

Tu również przesłany jest ciąg znaków. Applet odbierze dane w następujący sposób:

  1. InputStream in = uc.getInputStream();
  2. ObjectInputStream ois = new ObjectInputStream(in);
  3. String data;
  4. try {
  5.      data = (String) ois.readObject();
  6.      System.out.println("applet dostał: "+data);
  7. } catch (ClassNotFoundException ex) {
  8. }

I tak mamy zapewnioną komunikację pomiędzy appletem, a kontrolerem Java Spring. Łatwo zauważyć, że jest ona dość podobna do komunikacji ze zwyczajnymi servletami. Po wykonaniu takiej operacji można spokojnie przetworzyć dane i przekazać do widoku lub zapisać do bazy. cool
Ocena: +1 plus minus
Opublikowane 18.05.2011 13:41 przez Varabi | kat.: Java | Komentarze (0)
Dawno, dawno temu, w odległej galaktyce... W każdym razie dawno temu strasznie chciałem napisać przygodową grę tekstową. Zaczęło się od fascynacji grami paragrafowymi („Dreszcz” Jacka Ciesielskiego zamieszczony w jednym z numerów Fantastyki był chyba pierwszy), potem gry na komputerze, m.in. świetny polski Single User-Dungeon - Otchłań - nadal rozwijany! Na fali oczarowania postanowiłem zrealizować swoje własne pomysły. I tak zacząłem pisać w Pascalu. Powstał system walki, kilka lokacji, potworków i NPC, z którym można było pogadać albo go zabić. mruga Zabrakło mi wtedy cierpliwości w pisaniu i umiejętności (było to z 10 lat temu - ale ten czas leci!).

obrazek
Kilka screenów moich ówczesnych wypocin

Niestety, jak zauważyłem, tak często bywa w projektach tego typu. Gry próbują tworzyć ludzie, którzy mają świetne pomysły - ale, proces wytwarzania jest długi i żmudny. Dodatkowo złe rozplanowanie i obmyślenie mechanizmów często prowadzi do niepowodzenia i zarzucenia projektu.

Od jakieś czasu chodziło mi po głowie napisanie narzędzia wspomagającego tworzenie tekstowych gier RPG. Projektowałem i obmyślałem, jak całość ma działać. Wyszedł całkiem zaawansowany system. Jednym z jego modułów będzie edytor gier. Kolejnym – środowisko uruchomieniowe dla nich – silnik. Implementacją tych dwóch modułów będę się teraz głównie zajmował w wolnym czasie. Ewentualne informacje o postępach prac będą zamieszczane na blipie.
Ocena: 0 plus minus
Opublikowane 28.04.2011 16:10 przez Varabi | kat.: ViSUD | Komentarze (0)