CSS Naked Day

World Wide Web (1) Komentarz »

Dzisiaj, 5 kwietnia obchodzimy CSS Goły Dzień w Polsce (na świecie obchodzimy go 9 kwietnia). Pomyślałem, że warto się przyłączyć i zobaczyć, jak będzie wyglądała strona bez dołączania arkuszy CSS. Jak widać, szablon Wordpressowy jest dobrze zrobiony, strona wygląda OK. Natomiast Portal geograficzny GeoZone.pl wręcz przeciwnie, mimo odłączenia pliku CSS, style i tak zostały częściowo zachowanie (dużo atrybutów “style”). Nie świadczy to dobrze o webmasterze (czyt. mnie), jednak na swoją obronę mogę powiedzieć, że projekt portalu geograficznego powstał trzy lata temu oraz, że na dysku powstaje powolutku nowe GeoZone zgodne z wzorcem projektowym MVC.

Kohana PHP 2.1 wydana

PHP - frameworki Brak Komentarzy »

Wydanie frameworka Kohana PHP w wersji 2.1 stało się faktem! Oto lista najważniejszych funkcji, podana w roadmapie dla wersji 2.1:

  • Image library
  • Cache library
  • ORM library
  • Kodoc library
  • Auth module
  • Forge module
  • Template_Controller, for simple auto-rendering templates
  • PostgreSQL driver for Database
  • MySQLi driver for Database

Nie jestem być może zbyt oryginalny, kopiując na żywca krótką listę funkcji prosto z oficjalnej strony Kohany; czuję się jednak zobligowany do poinformowania o tym wydarzeniu reszty świata ;)

Wielki Post czasem nawrócenia

Życie (5) Komentarze »

Dzisiaj, w Środę Popielcową, weszliśmy - my katolicy - w pierwszy dzień Wielkiego Postu. Wielki Post to okres szczególny. W czasie tych 40 dni mamy czas, aby skierować się czynami w stronę Boga. Czy jednak wykorzystamy ten czas tak, jak się należy?

Po co nam Wielki Post?

Wielki Post ma nas nastawić duchowo do godnego przeżycia najważniejszego z katolickich świąt - święta Wielkanocy. Jest to czas, gdy wspominamy zmartwychwstanie Jezusa Chrystusa. Jego zmartwychwstanie daje nam gwarancję, że również i my powstaniemy z martwych i będziemy się mogli cieszyć życiem wiecznym w idealnym świecie.

XSLT jako sposób prezentacji danych XML

XML - Extensible Markup Lang. (4) Komentarze »

XSLT, czyli Extensible Stylesheet Language Transformations, służy w skrócie do prezentacji danych zawartych w pliku XML w graficzny sposób. Idea szeroko pojętego rozdzielania treści od formy jest tutaj zachowana. XML przechowuje tylko surowe dane, podczas gdy XSLT pobiera stosowne informacje z XML’a i prezentuje je w sposób przystępny dla czytającego. XSLT stanowi alternatywę dla generowania stron po stronie serwera (np. za pomocą PHP), jako że całej transformacji dokonuje silnik przeglądarki.

I tutaj zaczynają się schody… Czy postawić na nowe technologie XML’owe i generowanie widoku przez przeglądarkę, czy lepiej jednak zajmować się generowaniem widoku po stronie serwera? A może połączyć obie technologie i generować widok z szablonów XSLT za pomocą PHP? Pytanie pozostawiam otwarte.

Kohana PHP framework - kiedy wersja 2.1?

PHP - frameworki (2) Komentarze »

Minęły dwa miesiące od daty wydania frameworka Kohana w wersji 2.0, a już z niecierpliwością wyczekuję wersji 2.1. Magiczna liczby 100% na roadmapie Kohany 2.1 jest coraz bliżej i stawiałbym, że 2.1 wyjdzie około 5-10 lutego. Czyżby developerzy Kohany chcieli nam osłodzić niezdaną sesję? ;)

Wydajność MySQL a PostgreSQL

Bazy danych (5) Komentarze »

Temat wydajności tych czy innych silników baz danych był już wielokrotnie poruszany na stronach i blogach. Testy, na które się dotychczas natknąłem nie były zbyt wartościowe. Raz MySQL wygrywał, raz PostgreSQL. W dodatku każda dyskusja na temat MySQL konta PostgreSQL wywoływała wiele niepotrzebnych emocji.

Natknąłem się jednak na ciekawy wpis na blogu działu IT serwisu grono.net. Cytat:


"W chwili obecnej całość działa już na PostgreSQLu, działa ładnie i szybko. Load maszyny z PostgreSQLem jest około 3-krotnie niższy niż load maszyny z MySQL’ em (przy tym samym obciążeniu).”

Podano mało informacji na temat zawartości, jednak z profilu serwisu można się domyślać, że najczęstsze operacje to SELECT, a potem INSERT. Ilość danych to 60GB w 150 mln rekordach.

Całość na IT blogu grono.net.

XML Schema

XML - Extensible Markup Lang. (2) Komentarze »

Jakiś czas temu w ramach zajęć z Metod Reprezentacji Informacji na studiach musiałem się zaznajomić z szeroko chwalonym przez wykładowców standardem XML. O ile samo tworzenie własnego pliku XML wielką filozofią nie jest, ponieważ to użytkownik tworzy sobie strukturę i znaczniki, o tyle XML Schema nie jest już dowolna. Stworzenie jej za pierwszym razem zajmuje trochę czasu, ponieważ trzeba zaznajomić się z wszystkimi dostępnymi elementami oraz wypróbać to w praktyce.

Czym w ogóle jest enigmatyczna XML Schema? XML Schema jest zbiorem zasad, jakimi należy się kierować przy wypełnianiu tworzonego przez nas pliku XML.

Przykład 1. Plik XML.


<?xml version="1.0" encoding="UTF-8"?>
<pracownicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="pracownicy.xsd">
<pracownik>
<imie>Alojzy</imie>
<nazwisko>Filipski</nazwisko>
<rocznik>1967</rocznik>
</pracownik>
<pracownik>
<imie>Dawid</imie>
<nazwisko>Raskolnikow</nazwisko>
<rocznik>1982</rocznik>
</pracownik>
</pracownicy>

Atrybuty xmlns:xsi oraz xsi:noNamespaceSchemaLocation informują, że w pliku pracownicy.xsd znajduje się zbiór zasad dla tego pliku XML i jest on w formacie XML Schema.

Przykład 2. Plik XML Schema.


<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="pracownicy">
<xs:complexType>
<xs:sequence>
<xs:element ref="pracownik" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pracownik">
<xs:complexType>
<xs:sequence>
<xs:element name="imie" type="xs:string"/>
<xs:element name="nazwisko" type="xs:string"/>
<xs:element name="rocznik" type="xs:short"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Powyższy zapis należy interpretować w następujący sposób:

  • Element “pracownicy” jest rodzicem dla sekwencji elementów “pracownik”,
  • Wewnątrz elementu pracownik znajdują się elementy “imie”, “nazwisko”, “rocznik” oraz występują tylko jeden raz w ramach elementu “pracownik”,
  • W elementach “imie” oraz “nazwisko” mogą znajdować się dowolne ciągi znaków,
  • W elemencie “rocznik” może znajdować się krótka liczba całkowita.

Nazewnictwo

Wszystko rozjaśni zapis jeden przykład:
<element atrybut="wartość atrybutu">wartość elementu</element>

W HTML-u przyjęła się nazwa “znacznik”. “Znacznik” oznacza tak naprawdę “element”.

XML Schema - opis elementów

xs:simpleType

Określa, że wartość jest… tylko jedną wartością. Łatwiej powiedzieć więc, czym xs:simpleType nie jest - mianowicie w xs:simpleType nie może istnieć zagnieżdżanie kolejnych elementów np.:
<przyklad> <a>a</a> <b>b</b> </przyklad>
xs:SimpleType to jedynie coś takiego:
<przyklad>a b c</przyklad>

Na xs:SimpleType można nakładać ograniczenia poprzez xs:restriction.

xs:restriction


<xs:restriction base="xs:typ"> ... </xs:restriction>
Określa ograniczenia dla elementów.


<xs:minLength value="8"/>
<xs:maxLength value="20"/>

Minimalne oraz maksymalne długości.


<xs:enumeration value="mężczyzna"/>
<xs:enumeration value="kobieta"/>

Wartość może przybrać tylko jedną z wartości.


<xs:minInclusive value="1600"/>
<xs:maxInclusive value="2010"/>

Wartość liczbowa musi być większa od 1600 i mniejsza od 2010.


<xs:pattern value="\d{2}-\d{2}-\d{5}-\d{1}"/>

Wartość może być tylko i wyłącznie postaci XX-XX-XXXXX-X, gdzie X to cyfry 0-9. Czytaj: wyrażenia regularne.

Przykład. xs:simpleType


<xs:element name="kod_pocztowy">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="6"/>
<xs:maxLength value="6"/>
<xs:pattern value="\d{2}-\d{3}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

Wartości elementu “kod_pocztowy” muszą być typu string o długości równej 6. Wartość musi być postaci XX-XXX, gdzie X to cyfry.

xs:complexType

ComplexType to przeciwieństwo xs:SimpleType. Wewnątrz mogą się znajdować kolejne elementy.

xs:sequence

Określa jaka sekwencja elementów musi się znaleźć wewnątrz pewnego elementu. Określa również, jakie atrybuty posiada element.


<xs:sequence>
<xs:element name="a" type="xs:string"/>
<xs:element name="b" type="xs:string"/>
</xs:sequence>

Przykład. xs:complexType


<xs:element name="zagadnienie">
<xs:complexType>
<xs:sequence>
<xs:element ref="nazwa"/>
<xs:element ref="bibliografia" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="typ" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="pojęcie"/>
<xs:enumeration value="wzór chemiczny"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>

Dla uproszczenia zapisu, zamiast opisywać każdy element w tym miejscu zastosowałem referencję - atrybut “ref”. Oznacza to, że znacznik zostanie scharakteryzowany w dalszej części pliku XML Schema, np. w taki sposób:


<xs:element name="nazwa" type="xs:string"/>
<xs:element name="bibliografia" ... >

minOccurs, maxOccurs - ilość wystąpień danego elementu. Liczby albo unbounded.

xs:attribute - określa jakie atrybuty może posiadać element. Use: required oznacza, że dany atrybut musi zawsze występować przy elemencie; use: optional, gdy może, ale nie musi.

Fragment. XML spełniający kryteria dla xs:complexType.


<zagadnienie typ="pojęcie">
<nazwa>...</nazwa>
<bibliografia>...</bibliografia>
</zagadnienie>
<zagadnienie typ="wzór chemiczny">
<nazwa>...</nazwa>
<bibliografia>...</bibliografia>
</zagadnienie>

XML Schema w praktyce

Z doświadczenia wiem, że najłatwiejszą formą nauki XML-podobnych języków (HTML, XML Schema, XSLT) jest analiza gotowego dokumentu XML. Zamieszczam więc cały plik XML wraz z XML Schemą, który stanowił zaliczenie projektu z Metod Reprezentacji Informacji.

Licencja użycia: użycie plików XML jest dozwolone wyłącznie w celach edukacyjnych. Oznacza to, że publikowanie plików XML bez mojej wiedzy i zgody jest zabronione.

Przydatne zasoby:

* warto sobie wygenerować, jeśli mamy kłopot z prawidłowym napisaniem pliku XML Schema. Taka Schema nie jest jednak idealna, tzn. jest trochę chaotyczna i nagminnie używa enumeration. Niemniej jednak, plik XML jest poprawny według tak wygenerowanej XML Schema.

Kohana PHP framework

PHP - frameworki (1) Komentarz »

Kohana PHP framework

Kohana to mały framework MVC, wspomagający tworzenie stron internetowych. Wersja 1.0 była forkiem słynącego z prostoty i szybkości (ale i rzadkimi aktualizacjami) CodeIgnitera. Wersja 2.0, wydana około miesiąca temu stanowi już całkowicie osobny projekt. Na aktualizacje nie ma co narzekać - społeczność Kohany na bieżąco zajmuje się poprawianiem błędów i implementacją nowych funkcji.

Kohana PHP posiada praktycznie wszystkie funkcje z poprzednika oraz jest poszerzona o dużo własnych. Kohana jest napisana całkowicie w PHP 5 i z nastawieniem na kodowanie UTF-8.

Nie ma róży bez kolców, na chwilę obecną Kohana jest praktycznie nieudokumentowana. Może to stanowić nie lada problem dla osób, które jeszcze nigdy nie korzystały z żadnego frameworka. Przy tworzeniu aplikacji można jednak wspomagać się dokumentacją CodeIgnitera - filozofia tworzenia aplikacji bowiem jest dokładnie taka sama. Można również zadać pytanie na oficjalnym forum Kohany.

 

W chwili obecnej piszę całkowicie od nowa mój portal edukacyjny o geografii w oparciu o Kohanę. Zmusiła mnie do tego ogromna trudność ingerencji w serwis - wszystko porozrzucane w wielu plikach, a logika pomieszana z wyglądem. Portal ma już 3 lata i dorzucanie kolejnych kilobajtów kodu ma ostatecznie takie skutki ;)

nwkr'owy devblog - blog web developera. PHP, SQL, okazjonalnie C++.
Aktualności RSS Komentarze RSS Zaloguj się