Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: sokzzuka, dodany: 19.11.2010 10:06, tagi: php

Johannes Schlüter, który jest release managerem dla gałęzi 5.3 ogłosił dzisiaj dostępność RC1 wersji  5.2.15 i 5.3.4 PHP. Można je pobrać odpowiednio z http://downloads.php.net/ilia/php-5.2.15RC1.tar.bz2http://downloads.php.net/johannes/php-5.3.4RC1.tar.bz2 . Natomiast Windowsowe buildy dostępne są na http://windows.php.net/qa/ . Jak już było zapowiadane, 5.2.15 będzie ostatnią wersją z lini 5.2 .

Natomiast wszyscy zainteresowani tym co znajdzie się w nadchodzącej wersji 5.4 alpha znajdą te informacje na http://svn.php.net/viewvc/php/php-src/trunk/NEWS?view=markup .

Autor wpisu: sokzzuka, dodany: 16.11.2010 11:46, tagi: php

Galen Wright-Watson kilka dni temu ogłosił, że napisał łatkę, która włącza tzw. short open echo tag niezależnie od ustawień w php.ini. Co to oznacza w praktyce ? Oznacza to, że jakkolwiek nie powinniśmy pisać <? $foo = 'bar' ?> to <?=$foo ?> będzie jak najbardziej dozwolone i nie będzie można go wyłączyć.  Dzięki temu, programiści, którzy używają czystego PHP w widoku będą mieli mniej pisania ;) . Prawdopodobnie ten pomysł przejdzie,  bowiem sam Rasmus Lerdorf znany też jako BDFL PHP przychylnie odniósł się do tego pomysłu. Prawdopodobnie będziemy mogli już z tego skorzystać w nadchodzącym wydaniu 5.4.

Autor wpisu: Wojciech Sznapka, dodany: 16.11.2010 03:01, tagi: php

Last time I wrote about Weirdest PHP construction I’ve ever seen, now I found another unusual PHP solution

Autor wpisu: sokzzuka, dodany: 13.11.2010 19:38, tagi: php

Ekipa „internalsów” puściła chyba wodzy fantazji – Kenan Sulayman rozpoczął wątek o wprowadzeniu akceleracji GPU do PHP. Rzecz może wydawać się trochę zaskakująca, bo jak w generowaniu stron www może pomóc karta graficzna ? Otóż jest kilka zastosowań.

Oprócz oczywistych rzeczy takich jak funkcje przetwarzające obrazki, jest jeszcze druga grupa funkcji – funkcje operujące na tablicach. Weźmy sobie tak popularną funkcję jak in_array(), nie jestem pewien jak ona jest do końca zaimplementowana, ale sądzę, że po prostu jest iterowana cała tablica i każdy jej element jest porównywany z szukaną wartością. Wyobraźmy teraz sobie, że po zastosowaniu akceleracji GPU, zamiast iterować po całej tablicy, równolegle wykonane jest porównanie szukanej wartości z każdym z elementów tablicy. Teoretyczne przyspieszenie dla tablicy, która ma 512 elementów, na GPU, który ma 512 procesorów wyniosło by 512x.

Powiedzmy sobie szczerze, takie przyśpieszenie powoduje małe WOW wśród zgromadzonej publiki ;) . Pojawia się pytanie, czy jest to możliwe w praktyce do osiągnięcia?  Z pewnością w dużej mierze zależy to od sposobu implementacji.

Stass Vass podszedł do sprawy bardziej pragmatycznie. Stwierdził, że pierwszą rzeczą jaką należało by zrobić w kwestii przyspieszenia PHP to dołączenie APC do standartowej dystrybucji. Następnie zintegrowanie go bezpośrednio z Zend Engine’em a na koniec dołożenie kompilacji JIT (Just In Time), co podobno już było próbowane przy pomocy LVVM-a. Dopiero po tych wszystkich przyśpieszeniach ma sens jakakolwiek akceleracja przy pomocy GPU.

Widać więc, że przynajmniej niektórzy deweloperzy PHP mają jasną wizję na temat tego co trzeba zrobić by uczynić PHP szybszym. Pytanie czy uda im się przeforsować swoje koncepcje oraz zaimplementować je z powodzeniem.

Jak zwykle czekam na Wasze komentarze dotyczące tych jakże interesujących nowinek.

Autor wpisu: sokzzuka, dodany: 12.11.2010 09:24, tagi: php

Już od dłuższego czasu przymierzam się do spełnienia obietnicy z początku cyklu o Domain Driven Design jaką jest zademonstrowanie przykładowej aplikacji napisanej w metodyce DDD. W ciągu tych trzech miesięcy jakie minęły od pierwszego wpisu wielokrotnie podejmowałem próby napisania czegoś. Jednak nigdy nie było ani jakiegoś konkretnego tematu na taką aplikację ani za bardzo czasu na ruszenie z developmentem (magisterka, wakacje etc). Natomiast od kilku dni czuję, że nadszedł właściwy czas i temat.

Temat

Jaki więc będzie cel działania naszej aplikacji? Jej tematem jest system relacji meczowych. Cóż to w ogóle jest ? Aby odpowiedzieć na to pytanie trzeba najpierw wyjaśnić skąd wzięła się motywacja.

Motywacja

Jednym z projektów, którym ostatnio się zajmowałem był CMS dla pewnego klubu sportowego. Oprócz standardowych funkcji, klient zażyczył sobie, by mógł przeprowadzać relację na żywo w internecie. Ficzer miał powstać na wzór tych, które funkcjonują na interii czy onecie. W zasadzie prosta sprawa – mamy mecz pomiędzy drużynami, obie drużyny mają jakiś skład, a jak już grają, to na boisku odbywają się różnego rodzaju wydarzenia – padają gole, sędzia pokazuje kartki etc. Jak na prostą sprawę przystało, długo się nie zastanawiałem. Zaprojektowałem bazę danych z odpowiednimi relacjami. Stworzyłem jedną ładną klasę która wszystko obsługiwała (w zasadzie można było to napisać jako zestaw pojedynczych funkcji) i po robocie. Działało ładnie, szybko i sprawnie. Do czasu. Do czasu gdy okazało się, że potrzeba jeszcze kilka rzeczy – tabelę ligową, podsumowania spotkań, że istnieją gole samobójcze, a potem jeszcze kilku zmian.

W zasadzie przyznam się szczerze, że się skompromitowałem w pewnym sensie – gram na różnych szczeblach klubowej piłki już kilka lat i temat znam nie od dziś. Niestety informacje jakie do mnie spływały w ogóle nie zapowiadały takiego obrotu spraw. Tak jak mówiłem miała to być prosta sprawa i tak zostało to zaimplementowane. Moim najpoważniejszym błędem było to, że w porę nie zaświeciła mi się w głowie taka mała czerwona lampka, że coś jest tutaj nie tak.

Motywacją jest więc chęć zrobienia TEGO dobrze. Żeby zrobić coś dobrze, trzeba wiedzieć najpierw jednak co poszło nie tak ?

Co poszło nie tak ?

Jak pamiętamy z poprzednich wpisów, metodyka DDD zakłada, że osoba projektująca software ma dostęp do eksperta domeny. Niestety w tym przypadku tak nie było. Informacje na temat funkcjonalności nie trafiały do mnie bezpośrednio. Fakt ten pewnie przyczynił się do ich zniekształcenia w drodze przekazu. Sądzę jednak, że nie było to największym problemem. Mam wrażenie, że gdybym osobiście mógł rozmawiać z tym ekspertem domeny to w mógłbym ogarnąć całą jego wizje. Sądzę również, że rozmawiając z ekspertem osobiście, czerwona lampka o której mówiłem, zapaliła by się na samym początku i mógłbym to zaprojektować w lepszy sposób. Największym problemem braku żywego kontaktu z ekspertem domenowym jest to, że wszelkie informacje docierają do nas w postaci „strzępków”. Rozmawiając na żywo czy na telekonferencji z kimś, możemy na bieżąco zadawać pytania i weryfikować nasze wątpliwości.

Z powodu tej dezinformacji rozpocząłem projektowanie modułu meczowego od strony bazy danych. Ten sposób projektowania software’u ma jednak jedną podstawową wadę – utrudnia przeprowadzanie zmian. Wprowadzenie zmian w bazie danych jest trudniejsze z perspektywy utrzymania spójności danych. Mając już zrobione relacje w bazie danych wszelkie zmiany muszą je uwzględniać, nie można sobie tak ot zmienić nagle relacji w ustalonym schemacie. Poza tym zauważyłem (przynajmniej u mnie), że projektowanie od strony bazy skłania raczej do dodawania nowych pól w tabelach niż tworzeniu nowych. Przykładem niech będą zdarzenia meczowe (Event). Załóżmy, że na początku zaprojektowaliśmy zdarzenie meczowe jako tabele z polami (id, time, content, type) gdzie time to minuta meczu, content to opis akcji, a type to rodzaj zdarzenia (gol, kartka etc) potrzebny do wyświetlenia odpowiedniej ikonki przy zdarzeniu. Dla celów statystyk postanawiamy dodać pole player_id, będzie mówiło nam który zawodnik dostał kartkę czy strzelił gola, oczywiście dla zwykłych eventów to pole nie jest do niczego potrzebne. Kolejną rzeczą, która potrzebujemy do statystyk będzie pole player2_id, potrzebne ono będzie do tego by wiedzieć którzy zawodnicy uczestniczyli w zmianie. Tak jak wcześniej pole to pozostałym rodzajom eventów nie jest do niczego potrzebne. Tak się dzieje z każdym kolejnym przypadkiem. W przypadku projektowania obiektowego każdy rodzaj eventu będzie kolejną klasą.

Podsumowanie

Pewnie w tej chwili część osób czytających ten tekst myśli sobie „…no tak nie zrobił tego obiektowo teraz mu nie działa…”.  Jak na złość muszę powiedzieć, że to nieładne rozwiązanie  mimo wszystko działa. Problemem jest tylko rozwijanie tego kodu. Szczęście, że nie jest go dużo, ale sądzę, że gdyby to zaczęło się rozrastać to w końcu doszlibyśmy do stanu zwanego Big Ball Of Mudd ;) . Na szczęście, pisząc tą przykładową aplikację będę w razie czego przygotowany gdyby praca z tamtym kodem stała się już nie możliwa.

Wpis zrobił się już dość długi, więc go w tym momencie zakończę i zapraszam na kolejną część, która opublikuje za kilka dni. Na pewno będzie to już coś bardziej konkretnego ;)

Autor wpisu: sokzzuka, dodany: 12.11.2010 09:20, tagi: php

Oj gorąco ostatnio jest na liście php.internals. Co chwilę coś się ciekawego dzieje, ostatnio na tapecie mamy binarną notację dla liczb całkowitych. Jonah H. Harris zaproponował, by oprócz możliwości wpisywania liczb w systemie 8-mkowym, 10-tnym czy 16-tkowym można było wpisywać liczby całkowite w systemie binarnym. Powstało oczywiście odpowiednie RFC. Chyba wszystkim na liście dyskusyjnej ten pomysł się spodobał i wygląda na to, że łatka wprowadzająca tą funkcjonalność już niedługo wyląduje w „trunku”.

Jak by to miało wyglądać ? Dla porównania zapis liczby 2010 w trzech dotychczas obsługiwanych systemach zapisu i nowym binarnym:

  • 8: 03732
  • 10: 2010
  • 16: 0x7da
  • 2: 0b11111011010 lub jako flagi – 0b00001, 0b00010, 0b00100, 0b01000, 0b10000

Jak dla mnie ten nowy „ficzer” jest całkowicie zbędny, jednak domyślam się, że dla niektórych okaże się przydatny. Szkoda, że chłopaki nie pomyśleli o jakimś bardziej generycznym zaprojektowaniu tego. Mam na myśli coś w stylu rNxLICZBA. Gdzie N to podstawa systemu liczbowego a LICZBA to liczba zapisana w tym systemie. Wtedy dla binarnego zapisu było by coś w rodzaju r2x01010101 a dla 16-tkowego r16x7da.

Autor wpisu: Wojciech Sznapka, dodany: 11.11.2010 17:42, tagi: php

Let's say that PHP isn't the best if it goes with language organization. But thing I discovered yesterday scared me and surprised in the same moment.
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.