Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Jacek Skirzyński, dodany: 31.10.2013 21:49, tagi: php

Uważam, że PHP jest językiem bardzo „elastycznym”. Można napisać skrypt księgi gości (kto od takich rzeczy nie zaczynał? ;) ) po przerobieniu tutoriala z internetu, można też napisać skomplikowaną i rozbudowaną aplikację internetową. W wszystko w jednym, tym samym języku.

Z jednej strony jest to zaleta – pozwala stosunkowo szybko osiągnąć działający efekt oraz pozwala się uczyć w obrębie jednego języka i rozwijać swoje umiejętności. Z drugiej strony jest to wada, bo pozwala pisać kod niechlujny, może nawet do tego zachęca/przyzwyczaja – skoro pierwsze efekty można było osiągnąć „metodą Copy’ego Paste’a”, to dlaczego kolejne mają wymagać więcej pracy?. W efekcie można spotkać dziwaczny kod, pełen funkcji zadeklarowanych tam gdzie akurat były potrzebne, zmiennych globalnych nagminnie używanych w metodach/funkcjach, kodu HTML, CSS, JS, PHP przemieszanego w obrębie jednego pliku etc. Obiektowość również się zdarza, ale budowa obiektów i ich wykorzystanie nie napawają optymizmem.

Myślę jednak, że nie należy winić języka. Jeżeli ktoś ma „głód wiedzy”, to taki kod będzie tworzył na początku, a później będzie się uczył, uczył i uczył jak programować coraz lepiej. Za cenną pomoc w tej nauce uważam dwie inicjatywy: PHP Framework Interop Group i PHP: The Right Way.

PHP Framework Interop Group

Jest to grupa ustalająca propozycje standardów dla kodu pisanego w języku PHP. Wypowiedzieć się w dyskusji może każdy chętny, jednak głosować mogą tylko przedstawiciele projektów (np. Zend Framework, Symfony2, Drupal, Doctrine, eZ Publish). Do tej pory grupa uzgodniła i zatwierdziła 4 standardy:

  • PSR-0, Autoloading Standard – opisuje wymogi, jakie musi spełniać autoloader, żeby mógł obsługiwać różne biblioteki;
  • PSR-1, Basic Coding Standard – opisuje ogólne wymogi kodu (kodowanie plików, tagi PHP, klasy, metody, właściwości, stałe);
  • PSR-2, Coding Style Guide – opisuje szczegółowe zalecenia formatowania kodu;
  • PSR-3, Logger Interface – opisuje interfejs dla loggerów, którego użycie umożliwi obsługę logów w różnych aplikacjach i bibliotekach z wykorzystaniem tego samego mechanizmu obsługi logów.

Nikt nie wymaga stosowania PSR-*, jednak uważam to za dobrą praktykę. Dodatkowo pisanie kodu przestrzegającego tych standardów może ułatwić jego późniejsze wykorzystanie jako bibliotek czy wykorzystanie w swoim projekcie zewnętrznych bibliotek.

Strona FIG znajduje się tutaj, jednak zawiera tylko zatwierdzone standardy. Natomiast propozycje kolejnych można znaleść na GitHubie grupy – tutaj.

PHP: The Right Way

Ten projekt jest zbiorem dobrych rad, kierunków rozwoju, narzędzi/technik którymi warto się zainteresować chcąc profesjonalnie programować w PHP. Dodatkowo zakres tematyczny jest bardzo szeroki – od pierwszych kroków, przez zarządzanie zależnościami (Composer, PEAR), po serwery, testowanie i cache. Dodatkowo strona jest przetłumaczona na język polski i dostępna tutaj.

Autor wpisu: singles, dodany: 27.10.2013 21:44, tagi: php

W dniach 25-27 października odbyła się kolejna już edycja ogólnopolskiej konferencji PHPCon, znanej w kuluarach także jako „!DrupalCon” ;). Relacja tę piszę 27 października w drodze powrotnej do Poznania, tak więc wszelakie przemyślenia, które przeczytacie poniżej spisane są mocno na świeżo.

Miejsce i organizacja

Co rok, kiedy przychodzi temat PHPCona, tli się we mnie mała iskierka nadziei, że zorganizowana zostanie ona w miejscu z dość przystępnym dojazdem. Z roku na rok ta iskierka jest coraz mniejsza, bo i tym razem konferencja odbyła się, lekko mówiąc, w „mniej popularnej lokalizacji konferencyjnej” – mianowicie w Szczyrku.

PHPcon - Hotel Orle Gniazdo

PHPcon – Hotel Orle Gniazdo

Ogromny hotel, cały weekend, piękne krajobrazy. Tak, rozumiem już, że to się raczej nie zmieni i taka jest idea. Nie dziwię się równocześnie organizatorom, że nie myślą o zmianie podejścia, kiedy z roku na rok wszystkie miejsca są wyprzedane. Wydaje mi się, że duży wpływ na to ma także cena, ponieważ ok. 400zł za konferencję, jedzenie i nocleg to jest naprawdę super cena.

Tak więc kiedy standardowo ponarzekałem już na lokalizację, przejdźmy do dalszej części.

Hotel?. Ogromny. Ale mówiąc bardzo delikatnie – czasy swojej świetności ma za sobą. Zwłaszcza, jeśli otrzymało się zakwaterowanie w nieodnowionej części, )a byłem tym „szczęściarzem”. Widoki były naprawdę super, a równocześnie zastanawiam się, czy poranna niedzielna pobudka na trąbce należy do standardowych atrakcji tego hotelu.

Tak czy siak, „łoscypki” kupione :)

Jedzenie

Do hotelu przynależała naprawdę duża restauracja, która raczej nie miała problemu z pomieszczeniem wszystkich uczestników konferencji.

A samo jedzenie? Nie mam zastrzeżeń – nie było żadnych wykwintnych dań, ale to nie była wada. Zupa pieczarkowa, pierś kurczaka, na śniadanie pełen komplet (kiełbasa, jajecznica, wędliny, sery, warzywa, owoce). W sobotę wieczorem menu grillowe – karkówka, szaszłyki, pieczone ziemniaki, smalec – jak dla mnie pyszne.

A ciasto podczas sobotniego obiadu to zasługuje na osobną nagrodę :)

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

Autor wpisu: Łukasz Socha, dodany: 26.10.2013 21:21, tagi: css

Osobiście nie przepadam za wszelkiej maści edytorami wizualnymi (WYSIWYG). Uważam, że więcej z nimi problemów niż korzyści. No ale wiadomo, klienta zdanie web developera za bardzo nie interesuje i chce po prostu dodawać treść tak samo łatwo jak w Wordzie. Co w takiej sytuacji zrobić?

W ostatnim czasie pozytywnie zaskoczył mnie TinyMCE 4. Można go praktycznie w dowolny sposób dostosować – od wyboru funkcji na pasku narzędzi po stworzenie styli dostosowanych do potrzeb klienta. Dodatkowo możemy wewnątrz edytora dostosować CSS tak, by treść wyglądała praktycznie tak jak na docelowej podstronie. Inną bardzo przydatną rzeczą jest możliwość usunięcia wszelkich „śmieci” z tekstu wklejanego prosto z edytora tekstu.

Przykład użycia edytora wraz z formatowaniem wklejanego tekstu:

tinymce.init({
    selector: "textarea",
    content_css: "tinymce_content.css",
    plugins: [
                    "advlist autolink autosave link image lists charmap print preview hr anchor pagebreak spellchecker",
                    "searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking",
                    "table contextmenu directionality emoticons template textcolor paste fullpage textcolor"
                ],
    toolbar1: "newdocument fullpage | bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | styleselect",
    toolbar2: "cut copy paste | searchreplace | bullist numlist | outdent indent blockquote | undo redo | link unlink anchor image media code | inserttime preview | forecolor backcolor",
    toolbar3: "table | hr removeformat | subscript superscript | charmap emoticons | print fullscreen | ltr rtl | spellchecker | visualchars visualblocks nonbreaking template pagebreak restoredraft",
    menubar: false,
    toolbar_items_size: 'small',
    style_formats: [
        {title: 'Wyróżnienie', block: 'h4', classes: 'header1'},
        {title: 'Nagłówek', block: 'h5', classes: 'header3'},
        {title: 'Tekst standard', block: 'p', classes: 'akapit'},
    ],

    theme_advanced_buttons3_add: "pastetext,pasteword,selectall",
                paste_auto_cleanup_on_paste: true,
    paste_preprocess: function(pl, o) {
                    //example: keep bold,italic,underline and paragraphs
                    o.content = strip_tags(o.content, '<b><u><i><p><ul><ol><li><h1><h3>');

                    // remove all tags => plain text
                    //o.content = strip_tags( o.content,'' );
                },
    language: "pl",
});
// Author: Kevin van Zonne
function strip_tags(str, allowed_tags) {

    var key = '', allowed = false;
    var matches = [];
    var allowed_array = [];
    var allowed_tag = '';
    var i = 0;
    var k = '';
    var html = '';
    var replacer = function(search, replace, str) {
        return str.split(search).join(replace);
    };
    // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
    }
    str += '';

    // Match tags
    matches = str.match(/(<\/?[\S][^>]*>)/gi);
    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
             // IE7 Hack
             continue;
        }

         // Save HTML tag
         html = matches[key].toString();
         // Is tag not in allowed list? Remove from str!
         allowed = false;

         // Go through all allowed tags
         for (k in allowed_array) {            // Init
             allowed_tag = allowed_array[k];
             i = -1;

             if (i != 0) {
                 i = html.toLowerCase().indexOf('<' + allowed_tag + '>');
             }
             if (i != 0) {
                 i = html.toLowerCase().indexOf('<' + allowed_tag + ' ');
             }
             if (i != 0) {
                 i = html.toLowerCase().indexOf('</' + allowed_tag);
             }

             // Determine
             if (i == 0) {
                  allowed = true;
                            break;
             }
         }
         if (!allowed) {
             str = replacer(html, "", str); // Custom replace. No regexing
         }
    }
    return str;
}

Za pomocą strip_tags() wycinam wszystkie znaczniki poza akapitem, listą i podstawową edycją tekstu. Dodatkowo w style_formats definiuję tylko style, które są potrzebne i mam znacząco ograniczoną możliwość rozsypania strony przez klienta :)

Autor wpisu: Wojciech Sznapka, dodany: 24.10.2013 15:54, tagi: php, symfony

It’s extremely important to have same state of the System Under Test. In most of the cases it will be possible by having same contents in a database for every test. I’ve decribed how to achieve it in Fully isolated tests in Symfony2 blog post about two years ago (btw. it’s most popular post on […]

Autor wpisu: zleek, dodany: 23.10.2013 09:42, tagi: php

W dniu wczorajszym została wydana najnowsza wersja PhpStorm oznaczona numerem 7. Wśród nowości w wersji 7 znaleźć można m.in.: wsparcie dla PHP w wersji 5.5 zmodyfikowane kolorowanie składni nowe opcje związane z refaktoringiem: przesuwanie statycznych zmiennych, wydzielenie interfejsu wbudowane narzędzia: Vagrant, konsola SSH, zdalne narzędzia, lokalny terminal wsparcie dla Zend Framework 2 Tool zmiany i […]

Autor wpisu: singles, dodany: 21.10.2013 00:03, tagi: javascript

Jest niedziela, 20 października 2013, godzina 22:18. Kilkanaście godzin temu wróciłem z Gdańska, gdzie odbyła się druga edycja meet.js summit. Trochę się bałem pisać o tej konferencji, ponieważ i tak mam już opinię hejtera wszystkich możliwych konferencji. A w tym wypadku na minus jedna sprawa. Tylko albo aż. Jaka? Zapraszam do krótkiego spojrzenia na summit.js#2.0.0 moimi oczami.

Miejsce i organizacja

Gdańsk, centrum Amber Expo. Dotarcie z Dworca Głównego w 15 minut – kilka przystanków tramwajem i krótki spacer (bardzo blisko nowego stadionu). Miejsce bardzo nowoczesne – polecam zapoznać się z galerią. Duża sala, dwa ekrany, brak problemów technicznych, bezproblemowo działające WiFi, naprawdę bardzo pozytywnie – zastanawiam się, czy to nie była najlepsza miejscówka na konferencję, w jakiej miałem okazję być – jeśli nie jest najlepsza, to na pewno w pierwszej trójce.

After party

Kilkanaście minut pieszo od Głównego, Red Light Pub. Miejsce fajne, gdzie podawali specjalne okazjonalne drinki – takie jak HTML5 (5 shotów), CSS3 (3 shoty) czy też beer.js. Ale znaleźć to miejsce! Google podaje inny adres, mordoksiążka inny. Logiczne byłoby szukanie pubu o czerwonej kolorystyce/oświetleniu. Słuszny strzał. Problem w tym, że w okolicy było kilka pubów o takim oświetleniu, a ten konkretny nie posiadał żadnego szyldu (albo po prostu nie zauważyliśmy). I patrząc na liczbę grup poruszających się grup zapatrzonych w swoje mapy na smartphonach, nie byliśmy raczej jedyni. Do organizatorów – plakat meet.js na drzwiach bardzo by pomógł :)

Nie wiem czy w Waszych miastach też tak jest, ale od jakiegoś roku zauważam coraz większy wysyp burgerowni w Poznaniu. Tak więc jak wyglądała niespodzianka na afterze? Na ogródku stanął mobilny bar z miejscowymi burgerami. Niestety, z racji czasu oczekiwania (50 minut – rzuciły się ino programisty) i godziny odjazdu pociągu niedane nam było spróbować, ale na oko wyglądały naprawdę dobrze.

Catering

Standard – była kawa, herbata, woda, ciastka, ciasta, owoce. Co było niestandardowe, to fakt, że obiad odbywał się „na stadionie” :) Tzn. musieliśmy zrobić mały spacer na pobliski stadion do znajdującego się tam dużego pubu, gdzie to podano obiad. Wybór dość skromny (mimo wszystko, konferencja była darmowa, i tak fajnie że było cokolwiek:), ale smacznie. A spacer? Hmm, trochę pobudził.

„Pobudził?!” rzekniecie. Tak, pobudził. Dochodzimy do sedna..

Prezentacje

Należę do tej grupy osób, które od prezentacji oczekują dobrze przyprawionego „mięsa” zakończonego deserem. A w tym przypadku, kontynuując analogię, dostaliśmy niedoprawione wegetariańskie danie, z małymi kawałkami mięsa (pewnie się kucharzowi zagubiły) i niezłym deserem na końcu. I nie jest to tylko moje zdanie, ale także kilku osób z którymi dyskutowałem.

Za dużo ogółu, za mało konkretów. Może 30% prezentacji przypadło . Niektórzy mogą stwierdzić, że skoro poświęca się kilka godzin w tygodniu na czytanie RSSów i tego co się dzieje w branży, to ciężko zostać zaskoczonym. Jest w tym trochę racji, ale od ręki mogę podać kilka prezentacji z LXJS czy JSConf z których oglądałem video i były naprawdę dobre.

Prezentacje w dużym skrócie – oceniam tylko merytorykę (a trudno mi, bo większość prelegentów znam i lubię):

  • Create your perfect architecture with modular JavaScript patterns – pub/sub lekarstwem na wszystko. Moim zdaniem daleko temu do „perfect” – a jeśli już, to w konkretnych zastosowaniach.
  • Abusing Firefox OS and HTML5 games for fun and profit – w sumie pogubiłem się o czym to było – o Firefox OS? O pisaniu gier pod fOS? Nie wiem. Aczkolwiek kwestia moz-opaque ciekawa.
  • Pushing the web to the limits – pierwsze danie „mięsne”. Z tym, sporo ludzi zna już jego smak. Tłumacząc tytuł na nasze – o nowych API. O WebCL nie wiedziałem, tak więc dzięki Dariusz – nutka nieznanych smaków się pojawiła :)
  • Interactive web with Fabric.js – byliście na Falsy Values? Pamiętacie prezentację na temat Fabric.js? No to tutaj mieliśmy forka z małymi zmianami. Dokładnie tego spodziewałem się po tytule i niestety nie pomyliłem się. A szkoda, bo oczekiwałem sporo więcej. Autoreklama nr 1.
  • Serious JavaScript – how to use techniques known from large Java and .NET projects in JS world – używajcie build toola, statycznej analizy kodu, serwerów CI etc. i będziecie fajni.
  • Native performance in interactive JS applications using CSS3 hardware acceleration – jak dla mnie autoreklama tworzonego produktu ukryta pod warstwą kilku (w większości dość dobrze znanych) technik.
  • Survival Guide – Web applications for mobile safari and iOS’s webUIView – konkrety, konkrety i jeszcze raz konkrety. Trochę rozszerzona wersja prezentacji z regularnego spotkania meet.js w Poznaniu, ale nadal konkretna. Pod względem merytorycznym najlepsza prezentacja całej konferencji.
  • Going real-time under 20 minutes – forma? Fajnie, śmiesznie, nawet rosyjska administracja rządowa się pojawiła:) Ale poza tym? Dowiedzeliśmy się, że jest coś takiego jak websockety i że GTA5 to jest fajna gra.
  • Future of JavaScript: ECMAScript Harmony – druga konkretna prezentacja z całego dnia. Nie pokrywa wszystkiego, ale nadal spójna i z tego co pamiętam, płynnie poprowadzona.
  • The Angular Way – jeśli celem prezentacji było pokazanie, że Angular lubi TDD (a raczej odwrotnie), i że nie nadaje się do stron skupionych na treści (jak praktycznie każdy client side framework) to się udało. Nie było to nawet „Getting Started with Angular”, ale mocno pobieżne wprowadzenie i częściowa powtórka z Serious Javascript (Karma, Jasmine, Yeoman, Grunt etc.)
  • ** One day in the life of a front-end programmer ** – to się uśmialiśmy. Zaczęło się śmiesznie, ale potem Damian zmienił ton na troszkę poważniejszy, gdzie przesłaniem prezentacji było praktycznie „wcale nie jesteś taki awsum jak Ci się wydaje” (co pokrywa się z moim często powtarzanym „zawsze jest coś nowego do nauki”). Fajna prezentacja, idealna na rozluźnienie i zakończenie.

Ogólnie, jestem mocno zawiedziony poziomem prezentacji, a raczej ilością wyniesionej z nich wiedzy czy inspiracji. Jest to praktycznie jedyny duży minus konferencji, ale niestety, minus w najważniejszej kategorii.

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

Autor wpisu: bastard13, dodany: 19.10.2013 01:06, tagi: oop

zacznijmy od podstaw

Zasada podstawienia Liskov brzmi:
Funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów.
Sprowadza się to do tego, że w każdym miejscu gdzie wykorzystujemy klasę bazową (rozszerzaną) lub interfejs możemy wykorzystać każdą klasę potomną i nie wpłynie to na zmianę zachowania czy też wynik działania, nie wpłynie negatywnie na działania aplikacji.Czytaj więcej »
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.