Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Kamil Adryjanek, dodany: 06.10.2016 00:15, tagi: php

W tym roku nareszcie udało mi się wygospodarować trochę czasu na przełomie września i października, dzięki czemu mogłem wziąć udział w największej konferencji branżowej dla programistów PHP: PHPCon, która w tym roku odbyła się w hotelu: „Hotel Ossa Congress & Spa” w niewielkiej miejscowości o tej samej nazwie, między Rawą Mazowiecką, a Białą Rawską (podobnie zresztą jak przed rokiem). O ile w konferencji: 4developers4developers od kilku dobrych lat uczestniczę regularnie, tak to był mój pierwszy PHPCon, stąd pomysł podzielenia się ogólnymi wrażeniami.

Organizacyjnie cała konferencja wypadła bardzo dobrze z drobnymi zgrzytami, które miały miejsce jeszcze przed samą konferencja i na samym starcie:

  • dość dziwna sytuacja z miejscami noclegowymi w hotelu (podobno nie był to odosobniony przypadek) – organizatorzy najpierw przyjeli zamówienie na wejściówki i hotel, by na tydzień przed konferencją poinformować, że niestety ale brakuje im miejsc i trzeba szybko zarezerwować nocleg w innym pobliskim hotelu. W tej sytuacji bardziej jednak doszukiwałbym się winy po stronie hotelu;
  • po dotarciu na miejsce w piątek rano byłem lekko zdezorientowany – nie znalazłem żadnych informacji na temat samej konferencji i jako, że to był mój 1 PHPCon trochę ciężko było mi się odnaleźć. Po rejestracji, która była dostępna od 15 dalej było już tylko lepiej;

Na duży plus warto wspomnieć o:

  • świetnym hotelu, który zaskoczył bardzo pozytywnie: ładne pokoje, bardzo dobre jedzenie (bez ograniczeń) i co najważniejsze prelekcje / warsztaty w tym samym miejscu (nie dotyczy to oczywiście osób z wcześniej wspomnianym problemem noclegowym). Nie wiem ilu dokładnie uczestników brało udział w tegorocznym PHPConie ale organizacja śniadań / obiadów / kolacji była bardzo dobrze przemyślana – czego nie można powiedzieć np: o obiadach w czasie 4developers;
  • miło zaskoczyła mnie również maskotka PHP w pakiecie startowym podczas rejestracji – mój dwuletni syn był zachwycony

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

Autor wpisu: cichy, dodany: 16.09.2016 00:06, tagi: php, standardy

Zdaję sobie sprawę, że tytuł który jednocześnie jest parafrazą opisu konia z pierwszej polskiej encyklopedii może nie mówić wszystkiego. Wyjaśniając, kiedy mówimy o kodzie PHP (czy tez innym języku programowania) zazwyczaj automatycznie myślimy o jego składni, dostępnych narzędziach rozwiązaniach oraz łatwości rozwiązania problemu, który przed nami stoi, oczywiście nie ma w tym nic złego jeżeli piszemy szybkie narzędzie dla siebie wówczas sam pomysł na rozwiązanie problemu powinien wystarczyć.

Wydawałoby się że nie ma sensu prowadzić na ten temat dyskusji. Problem zaczyna się jednak gdy przystępujemy do pracy nad większym projektem, lub gdy przystępujemy do pracy grupowej, wtedy nie tylko działanie kodu się liczy. Aby nasza praca była skuteczna i łatwo przyswajalna przez innych członków grupy (czy też odbiorców) musimy zadbać o pewne standardy kodowania, które de facto na efekt końcowy działania programu nie mają żadnego wpływu (lub mają marginalny). Sam długo broniłem się przed standardami „globalnymi” prawdopodobnie, jedynym powodem odwlekania tego było po prostu lenistwo, bo skoro działa to po co to zmieniać. Od niedawna zacząłem jednak próbować ulepszyć swój sposób pracy, więc chcąc nie chcąc trafiłem na opis „Rekomendowanych Standardów” PSR-1 i PSR-2 i właśnie o nich chciałbym dzisiaj napisać.

PSR co ?

PSR to skrót od PHP Standard Recommendation jest to inicjatywa, której celem jest wyznaczenie standardów w dość chaotycznym świecie skryptów PHP. Oczywiście nietrudno wyobrazić sobie korzyści płynące z podążania za standardami, które są lub będą implementowane przez duże rzesze programistów, jak jednak wspomniałem we wstępie w moim przypadku decyzja o próbie standaryzowania swojego kodu, przyszła z trudem i o wiele później niż powinna, tak więc z tego miejsca zachęcam wszystkich do dalszej lektury postu i być może szybszej decyzji o zmianie stylu pisania własnych skryptów.

Wróćmy jednak do rzeczy, na stronie http://www.php-fig.org/ możemy znaleźć zakładkę Recomendations gdzie znajdziemy listę wszystkich „Rekomendacji” oraz ich stan, nas interesują w praktyce tylko te ze stanem Accepted , czyli rekomendacje zatwierdzone przez osoby mające głos. No tak mogłoby się wydawać, że wszystko pięknie ładnie, ale kim w ogóle są osoby głosujące, i tutaj robi się ciekawie. Okazuje się, że nie jest to wymysł jednego czy dwóch programistów, w głosowanie zaangażowani są programiści z przeróżnych projektów znanych większości z nas (Symfony, Joomla, Drupal itp.) pełną listę osób które mają prawo głosu można znaleźć tutaj ponadto każdy kto jest zapisany, na listę mailingową i/lub pojawia się na kanale IRC pomimo braku możliwości udziału w głosowaniu, nadal na równi z innymi może toczyć dyskusje na temat proponowanych zmian.

Jak widać struktura całego przedsięwzięcia została dobrze przemyślana i całość od jakiegoś czasu idzie w moim zdaniem bardzo dobrym kierunku. Na chwilę obecną w sekcji accepted rekomendacji, możemy znaleźć 7 pozycji. W tym poście chciałbym skupić się na omówieniu standardów PSR-1 i PSR-2

PSR-1

Standard PSR-1 został w skrócie opisany jako „Basic Coding Standard” czyli w wolnym tłumaczeniu, podstawowy standard programowania. W dużym skrócie zawiera on wytyczne dotyczące takich aspektów jak:

  • używany system kodowania (UTF-8 bez BOM)
  • używane tagi PHP w dokumentach (dozwolone są tylko tagi <?php i <?=)
  • nazewnictwo klas, przestrzeni nazw oraz stałych

Najciekawszy element tego standardu to nazwane w dokumentacji „Side Effects” czyli krótko mówiąc zasada mająca na celu uniknięcia sytuacji który jeden dołączony plik jednocześnie deklaruje np. klasę i wykonuje jakieś działanie. Na początku trzeba sobie to dokładnie ułożyć w głowie o co w tym chodzi, postaram się to opisać najjaśniej jak tylko potrafię

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

Autor wpisu: nospor, dodany: 29.08.2016 14:47, tagi: php

Kilka prostych hooks, które przydadzą się dla osób pracujących z git/gitlab oraz bugzilla i redmine. Dzięki nim można zautomatyzować trochę nasze procesy commit oraz push. A co najważniejsze: wszystkie te hooks możemy napisać w php.

Autor wpisu: Michał Janicki, dodany: 17.08.2016 15:37, tagi: php

Piąty i ostatni odcinek serii postów poświęconych Ruckusing Migration zostanie poświęcony tworzeniu własnych zadań. Przez zadania rozumiem polecenia jakie możemy wpisywać w CLI i dzięki temu wykonać jakieś niestandardowe działania (np. db:migrate, db:generate etc).

Jak zawsze zachęcam do zapoznania się z poprzednimi postami poświęconymi tej bibliotece. Część pierwszą można znaleźć tutaj, część drugą tutaj, trzecią tutaj a czwartą tutaj.

Informacje podstawowe

Zadania znajdują się w katalogu Task (np. vendor/ruckusing/ruckusing-migrations/lib/Task). Domyślnie w tym katalogu znajdują się jeszcze dwa inne katalogi Db i Hello. W katalogu Db znajdują się zadania, które korzystając z tej biblioteki będziesz używał na codzień czyli db:migrate, db:generate etc. Z kolei w katalogu Hello znajduje się zadanie o nazwie World. Jak nie trudno się domyśleć jest to swego rodzaju przykład. Można to zadanie uruchomić z poziomu CLI wpisując hello:world.

Lokalizacje „customowych” zadań można rzecz jasna zmienić. Wystarczy w pliku konfiguracyjnym dodają klucz „tasks_dir” a jako wartość adres katalogu.

Tworzenie własnych zadań

Pliki z klasami zadań należy umieścić w jakimś katalogu „przestrzeni nazw”, o którym wspomniałem w poprzednim akapicie. Nie ma możliwości stworzenia „luźnego” zadania bez wrzucania go jakąkolwiek przestrzeń nazw ponieważ podczas próby uruchomienia takiego zadania zgłoszony zostanie wyjątek o nieprawidłowym formacie lub braku zadania.

Plik zadania musi mieć taką samą nazwę jak samo zadanie, a klasa musi mieć nazwę wg następującego schematu Task_{przestrzeń_nazw}_{nazwa_zadania}. Jeśli spróbujecie uruchomić taką pustą klasę zadania dostaniemy info że nasza klasa nie interfejsu Ruckusing_Task_Interface. Po dodaniu tego interfejsu do klasy i próbie uruchomienia dostaniemy informację, że wystąpił Fatal Error. Pojawił się on dlatego, że interfejs, który zaimplementowaliśmy wymaga aby nasza klasa posiadała definicję dwóch funkcji setMigrationsDirectory i setAdapter. Nie ma sensu jednak pisać ich od podstaw tylko sprawić aby klasa naszego zadania rozszerzyła klasę Ruckusing_Task_Base. Ta klasa posiada już definicję tych dwóch brakujących funkcji. Tak więc po dopisaniu odpowiedniego kodu i uruchomieniu zadania powiliśmy przestać otrzymywać informacje o błędach. Nic bardziej mylnego

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

Autor wpisu: JoShiMa, dodany: 15.08.2016 00:30, tagi: framework

Chyba nikomu kto sięga po framework w celu stworzenia aplikacji webowej nie trzeba tłumaczyć czym jest uwierzytelnienie zwane potocznie logowaniem i po co się je stosuje w aplikacjach webowych. Prawdę mówiąc jest to pierwsza rzecz za jaką się zabieram kiedy mam już zaprojektowaną przynajmniej zgrubnie aplikację. W Yii1 sprawa jest prosta, istnieje klasa tożsamości z […]

Autor wpisu: JoShiMa, dodany: 14.08.2016 18:19, tagi: framework

Ostatnio moim ulubionym i jedynym frameworkiem, którego używam był Yii 1. Ktoś niedawno w komentarzach zapytał dlaczego nowy projekt nie powstał w Yii 2. No własnie. Dlaczego? Po pierwsze macierzyństwo spowodowało, że na jakiś czas zwolniłam znacznie, jeśli chodzi o programowanie. Po drugie pracowałam w projektach w których nikt nie zawracał sobie głowy nowymi rozwiązaniami […]

Autor wpisu: batman, dodany: 10.08.2016 09:00, tagi: php

Pracowałem ostatnio nad projektem, który korzystał z kiepsko napisanej biblioteki, będącej głównym elementem aplikacji. Problem jaki napotkałem polegał na konieczności podmiany ustawionej na sztywno wartości jednej z właściwości zadeklarowanej jako prywatna. Niestety dziedziczenie i podmiana obiektu nie wchodziła w grę (kiepsko zaprojektowana aplikacja). Na szybkiego napisałem więc prostą klasę, dzięki której możliwa była zmiana tej wartości. Wiem, koła nie odkryłem, ale ten kawałek kodu zaoszczędził mi sporo czasu. Może i komuś z was również się przyda. [[ This is a content summary only. Visit my website for full links, other content, and more! ]]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.