Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Śpiechu, dodany: 08.01.2012 16:59, tagi: php

Jakiś taki naukowy ten tytuł wyszedł. Ale inaczej się chyba nie da. Potrzebowałem pretekstu żeby się trochę pobawić w manipulowanie bitami. Padło na Unicode z racji fajnego sposobu, w jaki wymyślono sam zapis znaków. Jeśli jest jeszcze ktoś kto nie wie co to jest Unicode to zapraszam do źródła.

Wszystko zostało tak przemyślane, że im bardziej pokręcony język, tym więcej miejsca potrzeba na jego zapisanie. Wszystkie liczby i litery bez ogonków damy radę zapisać w postaci 1 bajta. Chodziło o kompatybilność z formatem ASCII. Znaczki języka polskiego znajdują się w dziale Latin Extended-A. Zapis znaków polskich zajmie 2 bajty w formacie UTF-8.

Mając numer znaku z tabeli Unicode najłatwiej wyświetlić go za pomocą wbudowanej w PHP funkcji html_entity_decode():

echo html_entity_decode('&#' . 0xA7 . ';', ENT_NOQUOTES, 'UTF-8');

Wywołanie powyższego wiersza spowoduje wyświetlenie znaku o kodzie 0xA7 — paragrafu §. W jaki więc sposób wykonuje się czary-mary i znak Unicode staje się znakiem UTF-8? Weźmy na warsztat znak ę opisany w tablicy jako latin small letter e with ogonek. Ma numer 0119 (heksadecymalnie!), czyli można zapisać tak: 0x11916 = 28110 = 1000110012 Z powyższego widać, że liczbę dziesiętną 281 możemy zapisać w postaci 9 bitów. Dokumentacja funkcji utf8_encode() zawiera tabelkę ile bitów znaku zmieścimy w ilu bajtach UTF-8. Wygląda na to, że w jednobajtowym zapisie zmieścimy znaki o numerach od 0 do 12710 (7 bitów). Za to dysponując 2 bajtami zapiszemy liczby aż do 204710, czyli w zupełności nam wystarczy.

Znak ę w UTF-8 zapisujemy w 2 bajtach, czyli do liczby 110000002 musimy dodać przesuniętą o 6 bitów w prawo liczbę 281 (ponieważ pójdą do drugiego bajtu znaku). Z drugiego wyrzucamy wszystko poza 6 ostatnimi bitami, a następnie dodajemy do liczby 100000002.

$uniChar = 0x119;
$byte1 = $uniChar >> 6 | 0xC0;
$byte2 = $uniChar & 0x3F | 0x80

Wyszło na to, że ę w zapisie UTF-8 to będzie 11000100 10011001. Po ubraniu tego wszystkiego w funkcję:

function hexToUTF8HexArray($hexNum)
{
   // konwertujemy na liczbe w razie czego
   if (is_string($hexNum)) $hexNum = hexdec($hexNum);
 
   $hexArray = array();
   if ($hexNum < 0x80) {
      $hexArray[0] = '0x' . dechex($hexNum);
      return $hexArray;
   } elseif ($hexNum < 0x800) {
      $hexArray[0] = '0x' . dechex($hexNum >> 6 | 0xC0);
      $hexArray[1] = '0x' . dechex($hexNum & 0x3F | 0x80);
      return $hexArray;
   } else {
      throw new Exception('Not supported');
   }
}

Wywołując hexToUTF8HexArray(0x119) da nam tablicę z wartościami 0xc4 i 0x99. No dobra, a co jak chcę odwrócić proces? Teraz będzie przyjemniej:

function utf8ToUnicode(array $utf8Array)
{
   // konwertujemy na liczby
   $utf8ArrayChecked = array();
   foreach ($utf8Array as $utf8) {
      if (is_string($utf8)) $utf8 = hexdec($utf8);
      $utf8ArrayChecked[] = $utf8;
   }
 
   $bytesCount = count($utf8ArrayChecked);
   switch ($bytesCount) {
      case 1:
         return $utf8ArrayChecked[0];
      case 2:
         // wyrzucamy naglowki
         $b1 = $utf8ArrayChecked[0] & 0x1F;
         $b2 = $utf8ArrayChecked[1] & 0x3F;
 
         // tutaj cala magia
         $number = $b1 << 6 | $b2;
         return '0x' . dechex($number);
      default:
         throw new Exception('Not supported'); 
   }
}

Wywołując utf8ToUnicode(array(0xc4, 0x99)) otrzymamy 0x119, czyli gra jak trzeba.

Na koniec ciekawostka: mając jakiś znak możemy łatwo wydobyć jego wartość UTF-8.

function charToUTF8HexArray($char)
{
   $i = 0;
   $hexArray = array();
   while (isset($char[$i])) {
      $hexArray[] = '0x' . dechex(ord($char[$i++]));
   }
   return $hexArray;
}

charToUTF8HexArray('ę') da nam tablicę 0xc4, 0x99.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: zleek, dodany: 07.01.2012 23:32, tagi: php, zend_framework

W jednym z poprzednich wpisów przedstawiałem instrukcję instalacji PHPUnit oraz Xdebug w naszym środowisku. Dzisiaj przedstawię sposób konfiguracji Zend Framework, aby możliwe było testowanie aplikacji. Po stworzeniu nowej aplikacji Zend Framework z wykorzystaniem Zend_Tool otrzymamy standardową strukturę poszczególnych elementów aplikacji, wśród których można między innymi znaleźć folder “tests”, który zawierał będzie elementy takie, jak na [...]

Autor wpisu: Load, dodany: 07.01.2012 21:39, tagi: php, framework, zend_framework

Wstęp

Dowiemy się co to takiego jest ten „Zend Framework”, gdzie można poczytać na jego temat, dla kogo jest kierowany i w czym może nam pomóc, wspomnę również o lekturach dla początkujących w które można lecz nie trzeba się zaopatrzyć.

Czym jest Zend Framework?

Zend jak każdy framework jest aplikacją, a w zasadzie tylko jej szkicem daje nam wiele możliwości i znacznie upraszcza pracę z kodem, choć na początku ogrom informacji w jaki musimy się zaopatrzyć może wskazywać na coś zupełnie innego. Zf daje nam wiele klas które możemy wykorzystać w naszych projektach od prostych operacji na bazie poprzez tworzenie i wyświetlanie plików pdf, aż do bibliotek obsługujących za nas całą robotę związaną z formularzami.

www.framework.zend.com

Główna strona projektu - Zend Framework możemy z niej pobrać aktualne wydanie fw (1.11.11) jak i wersję testowe (2.0.0beta1). Strona zapewnia nam obszerną dokumentację w kilku językach, niestety język polski był dostępny tylko do czasu i tylko w części, jego kopię można znaleźć na www.zend-framework.pl/manual. Tak jak pisałem jest częściowo przetłumaczona, dla osób nie znających j. angielskiego jest to jakieś wyjście. Tłumaczenie trwa jednak nadchodzący ZF2 różniący się dość sporo do swojego poprzednika zniechęca tłumaczy – szkoda ich pracy.

ZF dla każdego?

Nie, stanowczo nie! Jeśli nie znasz OOP lub podstaw php czas zacząć naukę – nie znając mechanizmów działania programowania obiektowego ciężko zabierać się za pracę z urządzeniem wyciskającym z niego ósme soki. W sieci znajduje się bardzo dużo kursów dla początkujących i średnio zaawansowanych – wystarczy poszukać. ;-) Jednak jak masz podstawy to możesz wystartować z tym potworem już po kilku godzinach, a Twój projekt będzie czymś więcej niż „Hello word”.

Zend przede wszystkim pokazuje nam jak powinien wyglądać przepływ informacji i dostarcza ogromną ilość gotowych modułów odwalających za nas brudną robotę, idealnym przykładem jest Zend_Form, za pomocą tej klasy możemy stworzyć formularz, dodać do niego odpowiednie ograniczenia i od tej pory wyświetlanie formularzu odbywa się poprzez wpisanie jednej linii kodu, gdy zostanie on wysłany zf sam sprawdzi wszystkie pola wedle kryterium podanego wcześniej i w razie potrzeby wygeneruje odpowiedni błąd. Tworzenie takiego formularza ogranicza się tak na prawdę do stworzenia klasy, a w jej ciele użycie kilku funkcji – ciężko to opisać bez przykładów a nie chcę mieszać już na starcie. ;-)

Książki o Zf

Na rynku w języku polskim jest niewiele papirusów które tak na prawdę mogą się nam przydać, jedynym wartym polecenia i w miarę aktualnym jest „Zend Framework od podstaw” Włodzimierza Gajdy ~530 stron tylko o Zend’zie za 89zł, Helion często daje rabaty wystarczy codziennie sprawdzać tutaj.

Podsumowanie

Suche informacje, bez kodu by nie wprowadzać zamieszania, warto przeczytać by mieć jakiś pogląd na sytuację i nie podbijać słońca z pióropuszem na głowie.

Autor wpisu: vonski, dodany: 07.01.2012 12:23, tagi: design

T

he term ‘minimalism’ is a trend from early 19th century and gradually became an important movement in response to the over decorated design of the previous period. Minimalist architecture became popular in the late 1980s in London and New York,[3] where architects and fashion designers worked together in the boutiques to achieve simplicity, using white elements, cold lighting, large space with minimum objects and furniture. Minimalist architecture simplifies living space to reveal the essential quality of buildings and conveys simplicity in attitudes toward life. It is highly inspired from the Japanese traditional design and the concept of Zen philosophy.

 

Influences from Japanese tradition

The idea of simplicity appears in many cultures, especially the Japanese traditional culture of Zen Philosophy. Japanese manipulate the Zen culture into aesthetic and design elements for their buildings.[11] This idea of architecture has influenced Western Society, especially in America since the mid 18th century.

The Japanese aesthetic of Wabi-sabi values the quality of simple and plain objects. 

For example, the sand garden in Ryoanji temple demonstrates the concepts of simplicity and the essentiality from the considered setting of a few stones and a huge empty space.[14] The Japanese aesthetic principle of Ma refers to empty or open space. That removes all the unnecessary internal walls and opensup the space between interior and the exterior. Frank Lloyd Wright was influenced by the design element of Japanese sliding door that allows to bring the exterior to the interior. The emptiness of spatial arrangement is another idea that reduces everything down to the most essential quality.[16] The Japanese aesthetic of Wabi-sabi values the quality of simple and plain objects. It appreciates the absence of unnecessary features to view life in quietness and reveals the most innate character of chosen materials.

surf The Japanese minimalist architect, Tadao Ando conveys the Japanese traditional spirit and his own perception of nature in his works. His design concepts are materials, pure geometry and nature. He normally uses concrete or natural wood and basic structural form to achieve austerity and rays of light in space. He also sets up dialogue between the site and nature to create relationship and order with the buildings. Ando’s works and the translation of Japanese aesthetic principles are highly influential on Japanese architecture. For example, the Japanese flora art, also known as Ikebana.

 

Autor wpisu: zleek, dodany: 01.01.2012 20:51, tagi: php, zend_framework

Tworząc formularze z użyciem Zend_Form mamy możliwość grupowania pól w różne obszary – fieldset. Jak zapewne wiecie, dla każdego obszaru mamy możliwość ustawienia etykiety. W kodzie html wygląda to następująco: Aby uzyskać efekt grupowania w formularzu, jego kod będzie wyglądał następująco: W linii 14 powyższego kodu dla instancji obiektu Zend_Form wywołujemy metodę “addDisplayGroup”, która nam [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.