Programowanie

Pierwsze prywatne dzieło na django

Aktualizacja: Niestety biznes nie do końca wypalił więc strona jest zdjęta, ale może kiedyś umieszczę kod

Dla salonu kosmetycznego mojej żony przygotowałem stronę opartą na frameworku django.

Użyłem kilka ciekawych technik i komponentów, które moim zdaniem warto znać i używać:

  1. Django – sam framework jest ciekawy no ale nie będę się rozpisywał na temat wszystkich funcjonalności. Zainteresowanych odsyłam do strony https://www.djangoproject.com/ oraz tutoriala https://docs.djangoproject.com/en/1.4/intro/tutorial01/
  2. South – świetny system do automatycznego generowania zmian w modelach i migracji tych zmian do bazy danych. Za pomocą prostych komend system automatycznie tworzy plik, który zawiera informacje na temat zmian bazy danych oraz informacją ze sposobem wycofania tych zmian. Samodzielnie także wersjonuje te zmiany z podziałem na poszczególne aplikacje
  3. Pipeline – rewelacyjne narzędzie, dzięki ktoremu można uzyskać niezłego kopa na wydajności. System zajmuje się między innymi zmniejszaniem oraz grupowaniem w jeden plik zestawów plików statycznych takich jak JS i CSS a także zadba o odświeżenie nowej wersji obrazków, które mają tę samą nazwę (dodaje hash do nazwy). Można także zastosować kompilację plików CoffeScript oraz Sass i Less.
  4. Media queries – Strona posiada 5 alternatywnych widoków w zależności od szerokości okna/urządzenia. Dzięki zastosowaniu natywnego media queries działą to sprawnie i szybko
  5. Geo Lokalizacja – Natywny system, który posiadają nowoczesne przeglądarki pozwalający na podanie współrzędnych położenia danego komputera. Dzięki połączeniu techniki z mapami google można wytyczyć trasę do pokonania między użytkownikiem a salonem
  6. Debug Toolbar – Wspomagacz dla developerów do django. Pojawia się w postaci dyskretnego bloczka do rozwinięcia, który zawiera wszystkie niezbędne informacje do debugowania aplikacji m.in. wykonanie zapytania, użyte sygnały, zmienne środowiskowe, zmienne żądania i odpowiedzi i wiele innych ciekawych danych
  7. Admin Tools – System, który rozbudowuje standardowego admina django o dodatkowe możliwości. Poprawia wygląd i interfejs oraz dodaje możliwość zarządzania panelami oraz tworzenia własnych paneli oraz menu
  8. UUslug – System slugowania dla tekstów oraz jako typ kolumny modelu z pełną obsługą utf-8
  9. TinyMCE – znany i popularny edytor wysiwyg. Oczywiście nie mogło zabraknąć aplikacji, która integruje go do django. Użyty jest w backendzie.


Istotne dla mnie było aby strona posiadała ładne i przyjazne adresy. Z django to nie problem bo i tak definiuje się adresy widoków samodzielnie. Ale zależało mi także aby wyeliminować z adresów rozpoznawanie stron z użyciem identyfikatora primary key itd. Zastosowałem więc technikę slugowania. Każda strona z kategorii ma swój własny slug który nie jest w konflikcie z innymi. Dzięki temu w łatwy i przyjemny sposób można prezentować adresy, np tak:

/kosmetyka/pielegnacja-twarzy

zamiast

/kosmetyka,4/pielegnacja-twarzy,16

Django posiada także wbudowany cache. Zastosowałem cache dla stron katalogowych dzięki czemu wyeliminowałem znaczną część zapytań.

Aktualizacja PunBB i polskie tłumaczenie

Jakiś czas temu wyszła nowa wersja PunBB oznaczona numerem 1.4.2. Konieczne było zaktualizowanie polskiego pliku językowego. Polski pakiet językowy do forum PunBB 1.4.2

Oprócz tego w dziale download umieściłem najnowsze wersje moich rozszerzeń do PunBB

Framework idealny? Controller

Zawsze irytowało mnie w ZF (i nie tylko w nim), że metody do uruchomienia są jak takie zwykłe pojemniki na kod. Dlaczego nie posiadają one żadnych argumentów. Wszystko się wyciąga z jakichś magicznie powstałych nagle obiektów, które znalazły się kontrolerze (np $this->_request) – skąd on się tu wziął? Inna sprawa to, że “parametry” wyciąga się z funkcji “getParam”. No dobrze, ale skąd ten param? Z adresu? Z posta? geta? cookies? sesji? Skąd to się wzięło. Jest oczywiście to brane z tablicy $_REQUEST o ile mnie pamięć nie myli a ona może być inaczej zbudowana na różnych maszynach i różnych konfiguracjach – np parametry z GET będą przez POST albo odwrotnie. To jest kolejna z rzeczy, która moim zdaniem ułatwia użytkownikowi źle napisać kod. Nie jest tajemnicą, że parametry przesyłane są do PHP za pomocą różnych metod… gdzie najpularniejsze to POST i GET. Parametr w GET i POST może istnieć i mieć taką samą nazwę a służyć do zupełnie innej rzeczy a dodatkowo można jeszcze sztucznie tworzyć parametry przekazywane z requestu. W ZF wygląda to tak:

public function editAction()
{
    $id = $this->_request->getParam('id'); // Ale skąd to Id?
    $title = $this->_request->getParam('title'); // To z geta, posta czy z adresu url?
    $this->view->title = $title;
    $this->view->id = $id;
}
Nowy tytuł to title ?> o id: id ?>

Nie wiadomo skąd się co bierze. Poza tym Zend zakłada, że ja jakiś szablon potrzebuje i musze mu zmienna przekazać, zeby coś odpowiedziec. Ani mi do tej funkcji nic nei “wchodzi” ani z niej nie wychodzi.

Moja idea również zainspirowana django wygląda tak:


// Adres routingu
'article/edit,(?\d+).html => Article.edit

public function edit($request, $id)
{
    // id mam jako argument funkcji z adresu
    $title = $request->getPost('title'); // Aha no to ktoś postem puścił
    return new Response('Nowy tytuł to ' . $title . ' o id: '. $id);
}

Tutaj parametrem wejściowym jest request oraz parametry adresu. Poza tym sam decyduje o tym co odpowiem. Czy skorzystam z szablonu czy chcę po prostu napisac sobie “Hello” i tyle.

Framework idealny? Routing

Pierwszy z cyklu już bardziej konkretnych przemyśleń i wizji dotyczących poszczególnych komponentów “idealnego frameworka”. Tym razem chciałbym omówić moją wizję routingu gdyż jakby od niego wszystko się zaczyna.

Routing w praktyce

Routing – to dzięki temu rozwiązaniu gdy użytkownik wywołuje konkretne żądanie (adres i typ) router przekazuje polecenie do odpowiedniej części systemu. To on rozpoznaje i wykonuje pracę listonosza – dostaje konkretny adres i przekazuje tam dany list. We wczesnych rozwiązaniach routing istniał w bardzo uproszczonej formie. Requesty w postaci:

?action=kontakt

oznaczał tylko tyle, że jest gdzieś wielki “switch” albo zestaw “else if” w których w zależności od wartości parametru “action” wykonywany był konkretny blok kodu. Oczywiście później zostało to usprawnione o bardziej zamknięte funkcje, dodano inne parametry akcji. W zasadzie można by nazwać takie rozwiązanie bardzo prostym routingiem.

We współczesnych rozwiązaniach możemy spotkać routing w bardziej zaawansowanej formie, gdyż wiele frameworków stara się implementować wzorzec MVC – chociaż osobiście nie znam żadnego, który by w pełni ten wzorzec implementował. MVC narzuca istnienie komponentów takich jak Model, Widok i Kontroler. Za kontroler przyjęta została klasa PHP która posiada różnorakie metody (akcje). W związku z tym aby nieco ułatwić dostęp do wykonywania poszczególnych akcji utworzono podstawowy wzór:

/controller/action

gdzie controller jest nazwą klasy kontrolera a action nazwą metody, która się w tej klasie ma uruchomić. Rozwiązanie proste i przyjemne. Podobne rozwiązanie funkcjonuje np w Zend Framework albo w Ruby on Rails. To rozwiązanie jest dobre do momentu gdy chcemy jednak zrobić coś bardziej skomplikowanego, np gdy:

  • Specjalista SEO stwierdził, że adres ma jednak wyglądać w postaci /nazwa_uzytkownika albo /kontroler,akcja.html
  • Trzeba podzielić funkcjonalności na bardziej logiczne części (np moduły)
  • Konkretne adresy maja funkcjonować w ramach konkretnej domeny (subdomeny) w wielomodułowym lub wieloaplikacyjnym systemie

Jak sobie poradził z tym np Zend Framework? Ano jak to ZF, czyli “Zbuduj sobie sam”. Efekt jest taki, że robiąc bardzo prosty adres, potrzebuję kilku linijek (przykład dla pliku INI)

routes.forum_topic_add.route = "nowy-temat"
routes.forum_topic_add.type = "Zend_Controller_Router_Route"
routes.forum_topic_add.defaults.controller = topic
routes.forum_topic_add.defaults.action = new

Whaaaat? Chciałem tylko podać adres i wskazać go na konkretną akcję do wykonania. O co tu chodzi? Poza tym to jest przecież jeszcze prosty adres. Nie ma tu żadnych wyrażeń regularnych. Gdybym chciał tak zrobić musiałbym dostawić jeszcze kilka dodatkowych linijek na każdy parametr. Dodatkowo, żeby nie było za prosto musiałbym zmieć router Zend_Controller_Router_Route na Zend_Controller_Router_Route_Regex – bo tamten już wyrażeń nie rozumie. Jeszcze, żeby było ciekawie poszczególne adresy można łączyć w łańcuchy a te łańcuchy w kolejne łańcuchy już z routerami i innym typie – np Static (tak jest jeszcze jeden typ). Tylko po co? Czy naprawdę programista musi mieć aż tak dokładną kontrolę nad tym?

Wydaje mi się, że programista powinien po prostu pomyśleć sobie adres i wskazać którą metodę/funkcję ma on uruchomić. Wyobrażam to sobie tak:

nowy-temat = topic.new

I co tu potrzeba więcej? Adres taki i taki, ma kierować na taką i taką funkcję. Po co mi takie dokładne pisanie gdzie jaki kontroler a jaka akcja a jaki to typ routingu. Tym powinien już się przejmować framework a nie programista.

No dobra dobra, ale przecież to jest taki prosty przykład. A co z parametrami? W zendzie można użyć kontrolera Route albo Static. Np tak:

routes.archive.route = "archive/:year/*"
routes.archive.defaults.controller = archive
routes.archive.defaults.action = show
routes.archive.defaults.year = 2000
routes.archive.reqs.year = "\d+"

Powyższe rozwiązanie mówi tyle, że: jest wzór archive/:year. Ma ono odpalić kontroler archive i metodę show. A parametr :year ma być liczbą a gdy a domyślnie ma przyjąć wartość 2000. W celach optymalizacji używa domyślnego routera, który uznaje za parametry wyrażenia po znaku “:” i separuje je po slashu. Tylko, że jest dodatkowa walidacja na to aby parametr year był liczbą. Moim zdaniem zupełnie niepotrzebna komplikacja. Przykład poniżej jest nieco inne podejście:

routes.archive.type = "Zend_Controller_Router_Route_Regex"
routes.archive.route = "archive/(\d+)"
routes.archive.defaults.controller = "archive"
routes.archive.defaults.action = "show"
routes.archive.map.1 = "year"

Wzór routingu już jest zapisany bezpośrednio w adresie ale z kolei teraz trzeba w osobnym miejscu ponazywać poszczególne parametry. Znowu jakimś nowym cudacznym sposobem, który wymaga uruchomienia jakiegoś specjalnie napisanego parsera, gdzie jedne robi tak, a inny tak. Moim zdaniem idealny framework powinien oferować kompleksowe. jednolite rozwiązanie problemu. Programiści Zend Framework chyba sami nie znają za bardzo możliwości języka w którym piszą, bo jak inaczej wytłumaczyć fakt nie skorzystania z podstawowej umiejętności wyrażeń regularnych jaką jest named subpattern. Widziałem multum przykładów z różnymi konfiguracjami routingu ale nigdy nie widziałem tego prostego zastosowania. Ze strony PHP

preg_match('/(?\w+): (?\d+)/', $str, $matches);

dzięki temu funkcja do wyrażeń regularnych automatycznie podstawia nam klucze sparsowanych parametrów jednocześnie dbając o poprawną walidację związaną z podanym typem wyrażenia. Sam nie jestem orłem jeśli chodzi o wyrażenia regularne ale to jest na tyle proste, że każdy to zrozumie. Dzięki temu można budować dowolnie skomplikowane adresy do routera. i bardzo proste i bardzo skomplikowane zachowując całkowitą spójność w sposobie ich tworzenia.


forum/(?\w+),(?<id>\d+).html = forum.show
forum/(?<title>\w+),(?<id>\d+),new-topic.html = forum.new_topic
user/(?<name>\w+)/profile.html = user.profile
kontakt.html = article.contact
show_teaser = entry.show_teaser
program,(?<channel>\d+),(?<date>\d{2,4}-\d{2}-\d{2}).html = tv.schedule
</pre>
<p>itd itd. Wystarczy tylko wskazywać te konkretne adresy na konkretne akcje. Dla mnie takie rozwiązanie jest o wiele bardziej sensowne, spójne i czytelne niż to które proponuje Zend Framework. To rozwiązanie i pomysł zaczerpnięte jest z Django – frameworka w jezyku Python.</p>
<p>No dobrze, ale ktoś powie: “W ten sposób wszystkie adresy z założenia przeszukuje się wyrażeniami regularnymi a w ZF można wskazać co jest proste a co nie, dzięki temu działa to szybciej.” Ja odpowiem tak: Co zadziała szybciej? Utworzenie 70 instancji klas typu routera i przetworzenie w nich adresu + sparsowanie parametrów i walidacji (każdy router jeszcze robi to inaczej) czy przeszukanie 70 wyrażeń regularnych? Poza tym funkcje do wyrażeń regularnych są dosyć dobrze zoptymalizowane i nie robią niepotrzebnej roboty z parsowaniem wyrażeń jeśli ich tam faktycznie nie ma.</p>
<p>Sposób realizacji routingu ma także odwzorowanie w nieco innym podejściu do wywoływania akcji ale to już w kolejnym poście traktującym o Akcji.</p>
    </div>
    
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-876" class="clear-block post-876 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-projekty tag-punbb count-5 odd thumb-left author-admin">

  <div class="post-details">
        <a class="post-thumb " id="thumb-876" href="http://quadric.goblix.pl/projekty/punbb-adsense-manager/" title="PunBB AdSense Manager">
      <img width="78" height="78" src="http://quadric.goblix.pl/wp-content/uploads/2012/01/punbb.gif" class="attachment-90x90 size-90x90 wp-post-image" alt="" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/projekty/punbb-adsense-manager/" rel="bookmark" title="Permanent Link: PunBB AdSense Manager">PunBB AdSense Manager</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/projekty/" rel="tag" title="Projekty (23 topics)">Projekty</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Rozszerzenie do PunBB, dzięki któremu można zarządzać reklamami na forum. Pozwala na dodanie reklamy w nagłówku oraz reklamy za pierwszym postem.</p>
<p><a href="http://quadric.goblix.pl/download/?did=98">http://quadric.goblix.pl/download/?did=98</a></p>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/punbb/" rel="tag" title="PunBB (5 topics)">PunBB</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-872" class="clear-block post-872 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-projekty tag-punbb count-6 even alt thumb-left author-admin">

  <div class="post-details">
        <a class="post-thumb " id="thumb-872" href="http://quadric.goblix.pl/projekty/punbb-quadric-seo-optimizer/" title="PunBB SEO Optimizer">
      <img width="78" height="78" src="http://quadric.goblix.pl/wp-content/uploads/2012/01/punbb.gif" class="attachment-90x90 size-90x90 wp-post-image" alt="" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/projekty/punbb-quadric-seo-optimizer/" rel="bookmark" title="Permanent Link: PunBB SEO Optimizer">PunBB SEO Optimizer</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/projekty/" rel="tag" title="Projekty (23 topics)">Projekty</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Rozszerzenie, do PunBB 1.4 które dba o to aby właściwie przekierowywać schematy adresów między sobą na te, które powinny być docelowo. Dodatkowo wprowadza tytuł forum do treści linka tematu, dzięki czemu adres jest bardziej szczegółowy</p>
<p><a href="http://quadric.goblix.pl/download/?did=93">http://quadric.goblix.pl/download/?did=93</a></p>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/punbb/" rel="tag" title="PunBB (5 topics)">PunBB</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-828" class="clear-block post-828 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-projekty tag-punbb count-7 odd thumb-left author-admin">

  <div class="post-details">
        <a class="post-thumb " id="thumb-828" href="http://quadric.goblix.pl/projekty/punbb-google-analytics-integration/" title="PunBB Google Analytics Integration">
      <img width="78" height="78" src="http://quadric.goblix.pl/wp-content/uploads/2012/01/punbb.gif" class="attachment-90x90 size-90x90 wp-post-image" alt="" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/projekty/punbb-google-analytics-integration/" rel="bookmark" title="Permanent Link: PunBB Google Analytics Integration">PunBB Google Analytics Integration</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/projekty/" rel="tag" title="Projekty (23 topics)">Projekty</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Jakoś mnie wzięło ostatnio na robienie rozszerzeń do forum PunBB.</p>
<p>Tym razem: <a href="http://quadric.goblix.pl/projekty/punbb-google-analytics-integration/attachment/punbb-quadric_google_analytics-1-0-0/" rel="attachment wp-att-827">PunBB Google Analytics Integration 1.0.0</a></p>
<p>Rozszerzenie pasuje do wersji 1.4 forum PunBB</p>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/punbb/" rel="tag" title="PunBB (5 topics)">PunBB</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-819" class="clear-block post-819 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-projekty tag-punbb count-8 even alt thumb-left author-admin">

  <div class="post-details">
        <a class="post-thumb " id="thumb-819" href="http://quadric.goblix.pl/projekty/paczka-jezykowa-do-punbb-1-4/" title="Paczka językowa do PunBB 1.4">
      <img width="78" height="78" src="http://quadric.goblix.pl/wp-content/uploads/2012/01/punbb.gif" class="attachment-90x90 size-90x90 wp-post-image" alt="" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/projekty/paczka-jezykowa-do-punbb-1-4/" rel="bookmark" title="Permanent Link: Paczka językowa do PunBB 1.4">Paczka językowa do PunBB 1.4</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/projekty/" rel="tag" title="Projekty (23 topics)">Projekty</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Jeśli ktoś interesuje się forum PunBB <a href="http://punbb.informer.com/">http://punbb.informer.com/</a> to przygotowałem właśnie do najnowszej wersji polską paczkę językową.</p>
<p><a href="http://quadric.goblix.pl/projekty/paczka-jezykowa-do-punbb-1-4/attachment/punbb-1-4-1-lang_pack-pl-1-0-0/" rel="attachment wp-att-818">punbb-1.4.1-lang_pack-pl-1.0.0</a></p>
<p>Dyskusja i aktualizacje na forum PunBB: <a href="http://punbb.informer.com/forums/post/142372">http://punbb.informer.com/forums/post/142372</a></p>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/punbb/" rel="tag" title="PunBB (5 topics)">PunBB</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-813" class="clear-block post-813 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-programowanie tag-php tag-xampp count-9 odd thumb-left author-admin">

  <div class="post-details">
        <a class="post-thumb " id="thumb-813" href="http://quadric.goblix.pl/programowanie/xampp-windows-i-najnowszy-php/" title="XAMPP, Windows i najnowszy PHP">
      <img width="90" height="90" src="http://quadric.goblix.pl/wp-content/uploads/2011/05/xampp-logo_1-90x90.png" class="attachment-90x90 size-90x90 wp-post-image" alt="" srcset="http://quadric.goblix.pl/wp-content/uploads/2011/05/xampp-logo_1-90x90.png 90w, http://quadric.goblix.pl/wp-content/uploads/2011/05/xampp-logo_1-148x150.png 148w, http://quadric.goblix.pl/wp-content/uploads/2011/05/xampp-logo_1.png 231w" sizes="(max-width: 90px) 100vw, 90px" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/programowanie/xampp-windows-i-najnowszy-php/" rel="bookmark" title="Permanent Link: XAMPP, Windows i najnowszy PHP">XAMPP, Windows i najnowszy PHP</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/programowanie/" rel="tag" title="Programowanie (21 topics)">Programowanie</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Wiele osób korzysta z pakietu XAMPP jako serwer developerski na platformie Windows. Z mojego doświadczenia mogę powiedzieć, że sprawdza się on bardzo dobrze. Przez wszystkie wersje pakietu nie miałem problemów aż do wersji 1.7.4. Niestety mimo wielu prób, szukania informacji na forum, stosowania najprzeróżniejszych rozwiązań nie udało mi się doprowadzić tego pakietu do stanu używalności. Głównym problemem jest to, że najnowsza wersja została skompilowana pod platformę VC9 (która jest przystosowana do serwera IIS), a większość pakietów jest dostępna w wersji VC6. Poza tym w wersji VC9 na serwerze Apache nie działa to ze sobą zbyt dobrze.</p>
<p>Do tej pory używałem wersji 1.7.3, która działa bez najmniejszych problemów, ale ma już swoje lata a potrzebny był mi nowszy PHP (w tej wersji jest to 5.3.1)</p>
<p>Jak więc posiadać dobrze działający pakiet XAMPP z najnowszą wersją PHP?</p>
<ol>
<li>Ściągnij i zainstaluj wersję <strong>1.7.3</strong>, która działa bez najmniejszych problemów <a href="http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.3/">http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.3/</a> chyba, że już posiadasz ten pakiet.</li>
<li>Ściągnij paczkę PHP dla Windows (obecnie najnowsza wersja 5.3.6 jest dostępna tylko w wersji <strong>VC9</strong> a nam potrzebna <strong>VC6</strong>, więc ściągnij stąd <a href="http://windows.php.net/downloads/releases/archives/">http://windows.php.net/downloads/releases/archives/</a> pakiet o nazwie <strong>php-5.3.5-Win32-VC6-x86.zip</strong></li>
<li>Wypakuj pakiet <strong>php-5.3.5-Win32-VC6-x86.zip</strong> gdzieś na dysk</li>
<li>Przekopiuj zawartość wypakowanego katalogu do <strong>C:\xampp\php</strong></li>
<li>Podmień stary plik <strong>php.ini</strong> na nowy <strong>php.ini-development</strong> lub <strong>php.ini-production</strong></li>
<li>Ciesz się XAMPP’em z najnowszym PHP</li>
</ol>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/php/" rel="tag" title="PHP (5 topics)">PHP</a> <a href="http://quadric.goblix.pl/tag/xampp/" rel="tag" title="XAMPP (1 topic)">XAMPP</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->




<!-- post -->
<div id="post-808" class="clear-block post-808 post type-post status-publish format-standard has-post-thumbnail hentry category-php category-programowanie tag-framework tag-php tag-prime count-10 even alt thumb-left author-admin last">

  <div class="post-details">
        <a class="post-thumb " id="thumb-808" href="http://quadric.goblix.pl/programowanie/php-5-3-3-i-konstruktor/" title="PHP 5.3.3 i konstruktor">
      <img width="90" height="90" src="http://quadric.goblix.pl/wp-content/uploads/2011/05/img_68644c77ea5d1f6ae-90x90.jpg" class="attachment-90x90 size-90x90 wp-post-image" alt="" />    </a>
   
        <h2 class="title">
      <a href="http://quadric.goblix.pl/programowanie/php-5-3-3-i-konstruktor/" rel="bookmark" title="Permanent Link: PHP 5.3.3 i konstruktor">PHP 5.3.3 i konstruktor</a>
    </h2>
    
                         
        <div class="post-std clear-block">
            <div class="post-date"><span class="ext">6 years ago</span></div>
            <div class="post-info">

                <span class="a">by <a href="http://quadric.goblix.pl/author/admin/" title="Posts by Quadric ">Quadric</a></span>
        
                in <a href="http://quadric.goblix.pl/category/programowanie/php/" rel="tag" title="PHP (24 topics)">PHP</a>, <a href="http://quadric.goblix.pl/category/programowanie/" rel="tag" title="Programowanie (21 topics)">Programowanie</a>        
        
      </div>
    </div>
    
        <div class="post-content clear-block">
      <p>Podczas pracy nad frameworkiem napotkałem na bardzo dziwny błąd (jak mi się wtedy wydawało). Miałem klasę “Index” i metodę “index”. Podczas tworzenia instancji klasy ciągle mi się uruchamiała automatycznie ta metoda. Doszedłem chyba po 2 godzinach do tego, że to nie błąd tylko feature. Już tak dużo czasu minęło, że zapomniałem, że PHP traktuje metody o takiej samej nazwie jak klasa jako jej konstruktor. Trochę mnie to załamało, bo moje MVC jest oparte o takie założenie, a twórcy PHP zostawili taką możliwość jako wsteczną kompatybilność.</p>
<p>Na szczęście doczytałem, że od wersji PHP 5.3.3 zmieniło się zachowanie szukania konstruktorów i teraz tego typu metoda traktowana jest jako zwykła metoda a nie jako konstruktor. Uff!</p>
    </div>
    
        <div class="post-extra">
       <div class="post-tags"> <a href="http://quadric.goblix.pl/tag/framework/" rel="tag" title="Framework (7 topics)">Framework</a> <a href="http://quadric.goblix.pl/tag/php/" rel="tag" title="PHP (5 topics)">PHP</a> <a href="http://quadric.goblix.pl/tag/prime/" rel="tag" title="Prime (5 topics)">Prime</a> </div>
    </div>
    
  </div>

  </div>
<!-- /post -->

            </div>

            <!-- page navigation -->
<div class="page-navi pagination single  fadeThis clear-block">
<a class="next" href="http://quadric.goblix.pl/category/programowanie/page/2/" title="Show More">Show More</a>
</div>
<!-- /page navigation -->
            
            
          </div>
        </div>
        <!-- /primary content -->

        

<!-- 1st sidebar -->
<div id="sidebar">
    <ul class="blocks count-4">
    <li class="block"><div class="block-content block-search clear-block" id="instance-atom-search-2">
<!-- search form -->
<div class="search-form" role="search">
  <form method="get" class="search-form clear-block" action="http://quadric.goblix.pl/">
    <input type="submit" class="submit" title="Search Website" value="" />
    <fieldset>
      <input type="text" name="s" data-default="Search Website" class="text alignleft clearField suggestTerms" value="" />
      <input type="hidden" value="submit" />
    </fieldset>
 </form>
</div>
<!-- /search form --></div></li><li class="block"><div class="block-content block-Advman_Widget clear-block" id="instance-advman-4"><div class="title"><h3>Reklama</h3><div class="bl"></div><div class="br"></div></div><div class="i"></div><script type="text/javascript"><!--
google_ad_client = "ca-pub-5440183811212122";
/* Quad - reklama BOX */
google_ad_slot = "6384812694";
google_ad_width = 250;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div></li><li class="block"><div class="block-content block-tabs clear-block" id="instance-atom-tabs-2">    <div class="tabs widgets" id="tabs-atom-tabs-2" data-fx="fade" >
      <ul class="navi clear-block">
                  <li class="nav-recent-comments active" id="nav-atom-recent-comments-2"><a href="#tab-atom-recent-comments-2" title="Recent Comments"><span>Recent Comments</span></a></li>                  <li class="nav-tag-cloud" id="nav-atom-tag-cloud-2"><a href="#tab-atom-tag-cloud-2" title="Tags"><span>Tags</span></a></li>                  <li class="nav-calendar" id="nav-atom-calendar-2"><a href="#tab-atom-calendar-2" title="Calendar"><span>Calendar</span></a></li>              </ul>
      <div class="sections">
                  <div class="section " id="tab-atom-recent-comments-2"><div class="block"><div class="block-content block-recent-comments clear-block" id="instance-atom-recent-comments-2"><ul class="menu fadeThis full recent-comments"><li><a class="clear-block" href="http://quadric.goblix.pl/programowanie/tworzenie-vhosta-w-apache/comment-page-1/#comment-7654" title="on Tworzenie VHost’a w Apache">
  <img alt='jtomaszewski' src='http://2.gravatar.com/avatar/260d6bc4f6b1548e3c4fed0f538b753a?s=48&d=mm&r=g' srcset='http://2.gravatar.com/avatar/260d6bc4f6b1548e3c4fed0f538b753a?s=96&d=mm&r=g 2x' class='avatar avatar-48 photo' height='48' width='48' />
  <span class="base">
  <span class="tt">jtomaszewski</span>
  <span class="c1">Ja musiałem vhosts ustawić troszeczkę inaczej, mianowicie:
<code>NameVirtualHost *:80


    ServerName localhost
    ServerAlias dev
    </code> […]</span>
  <span class="c2">5 years ago</span>
</span>
</a></li><li><a class="clear-block" href="http://quadric.goblix.pl/autor/comment-page-1/#comment-1426" title="on Autor">
  <img alt='Quadric' src='http://1.gravatar.com/avatar/a9a22249b03f36821cad7d27385a3659?s=48&d=mm&r=g' srcset='http://1.gravatar.com/avatar/a9a22249b03f36821cad7d27385a3659?s=96&d=mm&r=g 2x' class='avatar avatar-48 photo' height='48' width='48' />
  <span class="base">
  <span class="tt">Quadric</span>
  <span class="c1">Witam, niestety w chwili obecnej jestem mocno zajęty innymi projektami, ale mogę Panu polecić to co zrobiłem dla wersji  […]</span>
  <span class="c2">5 years ago</span>
</span>
</a></li><li><a class="clear-block" href="http://quadric.goblix.pl/autor/comment-page-1/#comment-1425" title="on Autor">
  <img alt='Artur' src='http://2.gravatar.com/avatar/e0a14faa4fa11b6826453a3a4d5c8872?s=48&d=mm&r=g' srcset='http://2.gravatar.com/avatar/e0a14faa4fa11b6826453a3a4d5c8872?s=96&d=mm&r=g 2x' class='avatar avatar-48 photo' height='48' width='48' />
  <span class="base">
  <span class="tt">Artur</span>
  <span class="c1">Witam,
poszukuję informatyka, który napisze dla mnie skrypt do reklam (docelowo adsense+własne) po pierwszym poście a następnie co 4 post.  […]</span>
  <span class="c2">5 years ago</span>
</span>
</a></li><li><a class="clear-block" href="http://quadric.goblix.pl/programowanie/tworzenie-vhosta-w-apache/comment-page-1/#comment-1420" title="on Tworzenie VHost’a w Apache">
  <img alt='Sten' src='http://0.gravatar.com/avatar/9e6ec18520fda195eac25c185579e7c1?s=48&d=mm&r=g' srcset='http://0.gravatar.com/avatar/9e6ec18520fda195eac25c185579e7c1?s=96&d=mm&r=g 2x' class='avatar avatar-48 photo' height='48' width='48' />
  <span class="base">
  <span class="tt">Sten</span>
  <span class="c1">Świetnie stary. Bardzo mi to pomogło. Dobra robota. Możesz być z siebie dumny!</span>
  <span class="c2">5 years ago</span>
</span>
</a></li><li><a class="clear-block" href="http://quadric.goblix.pl/projekty/aktualizacja-punbb-i-polskie-tlumaczenie/comment-page-1/#comment-1408" title="on Aktualizacja PunBB i polskie tłumaczenie">
  <img alt='Cobra' src='http://0.gravatar.com/avatar/3dcc50e46e90e84661ccca2ee2ee0481?s=48&d=mm&r=g' srcset='http://0.gravatar.com/avatar/3dcc50e46e90e84661ccca2ee2ee0481?s=96&d=mm&r=g 2x' class='avatar avatar-48 photo' height='48' width='48' />
  <span class="base">
  <span class="tt">Cobra</span>
  <span class="c1">Dzięki, przydało się - wersja ze strony oficjalnej rozkraczała forum 😉</span>
  <span class="c2">5 years ago</span>
</span>
</a></li></ul><div class="fadeThis clear-block">
<a class="more" href="#" title="Show next 5 entries" data-instance="2" data-cmd="get_recent_comments" data-offset="5">Show More</a>
</div></div></div></div>                  <div class="section hidden" id="tab-atom-tag-cloud-2"><div class="block"><div class="block-content block-tag-cloud clear-block" id="instance-atom-tag-cloud-2"><div class="box tagcloud"><a href="http://quadric.goblix.pl/tag/ajax/" class="tag-ajax" title="1" style="font-size:10.0pt;color:#cacaca;">Ajax</a>
<a href="http://quadric.goblix.pl/tag/apache/" class="tag-apache" title="3" style="font-size:15.1pt;color:#8a8a8a;"><strong>Apache</strong></a>
<a href="http://quadric.goblix.pl/tag/c/" class="tag-c" title="1" style="font-size:10.0pt;color:#cacaca;">C</a>
<a href="http://quadric.goblix.pl/tag/code-igniter/" class="tag-code-igniter" title="1" style="font-size:10.0pt;color:#cacaca;">Code Igniter</a>
<a href="http://quadric.goblix.pl/tag/emotors/" class="tag-emotors" title="1" style="font-size:10.0pt;color:#cacaca;">Emotors</a>
<a href="http://quadric.goblix.pl/tag/framework/" class="tag-framework" title="7" style="font-size:20.3pt;color:#484848;"><strong>Framework</strong></a>
<a href="http://quadric.goblix.pl/tag/grad/" class="tag-grad" title="9" style="font-size:22.0pt;color:#333333;"><strong>GRAD</strong></a>
<a href="http://quadric.goblix.pl/tag/gry/" class="tag-gry" title="1" style="font-size:10.0pt;color:#cacaca;">Gry</a>
<a href="http://quadric.goblix.pl/tag/hack/" class="tag-hack" title="2" style="font-size:13.1pt;color:#a4a4a4;">Hack</a>
<a href="http://quadric.goblix.pl/tag/html/" class="tag-html" title="2" style="font-size:13.1pt;color:#a4a4a4;">HTML</a>
<a href="http://quadric.goblix.pl/tag/ie/" class="tag-ie" title="2" style="font-size:13.1pt;color:#a4a4a4;">IE</a>
<a href="http://quadric.goblix.pl/tag/internet/" class="tag-internet" title="2" style="font-size:13.1pt;color:#a4a4a4;">Internet</a>
<a href="http://quadric.goblix.pl/tag/jquery/" class="tag-jquery" title="2" style="font-size:13.1pt;color:#a4a4a4;">jQuery</a>
<a href="http://quadric.goblix.pl/tag/kohana/" class="tag-kohana" title="1" style="font-size:10.0pt;color:#cacaca;">Kohana</a>
<a href="http://quadric.goblix.pl/tag/luna/" class="tag-luna" title="1" style="font-size:10.0pt;color:#cacaca;">Luna</a>
<a href="http://quadric.goblix.pl/tag/model/" class="tag-model" title="1" style="font-size:10.0pt;color:#cacaca;">Model</a>
<a href="http://quadric.goblix.pl/tag/monitor/" class="tag-monitor" title="1" style="font-size:10.0pt;color:#cacaca;">Monitor</a>
<a href="http://quadric.goblix.pl/tag/pdo/" class="tag-pdo" title="1" style="font-size:10.0pt;color:#cacaca;">PDO</a>
<a href="http://quadric.goblix.pl/tag/php/" class="tag-php" title="5" style="font-size:18.2pt;color:#626262;"><strong>PHP</strong></a>
<a href="http://quadric.goblix.pl/tag/prado/" class="tag-prado" title="1" style="font-size:10.0pt;color:#cacaca;">Prado</a>
<a href="http://quadric.goblix.pl/tag/prime/" class="tag-prime" title="5" style="font-size:18.2pt;color:#626262;"><strong>Prime</strong></a>
<a href="http://quadric.goblix.pl/tag/programowanie/" class="tag-programowanie" title="4" style="font-size:16.9pt;color:#737373;"><strong>Programowanie</strong></a>
<a href="http://quadric.goblix.pl/tag/punbb/" class="tag-punbb" title="5" style="font-size:18.2pt;color:#626262;"><strong>PunBB</strong></a>
<a href="http://quadric.goblix.pl/tag/request/" class="tag-request" title="1" style="font-size:10.0pt;color:#cacaca;">Request</a>
<a href="http://quadric.goblix.pl/tag/router/" class="tag-router" title="5" style="font-size:18.2pt;color:#626262;"><strong>Router</strong></a>
<a href="http://quadric.goblix.pl/tag/rozrywka/" class="tag-rozrywka" title="1" style="font-size:10.0pt;color:#cacaca;">Rozrywka</a>
<a href="http://quadric.goblix.pl/tag/serwer/" class="tag-serwer" title="2" style="font-size:13.1pt;color:#a4a4a4;">Serwer</a>
<a href="http://quadric.goblix.pl/tag/symfony/" class="tag-symfony" title="1" style="font-size:10.0pt;color:#cacaca;">Symfony</a>
<a href="http://quadric.goblix.pl/tag/technologia/" class="tag-technologia" title="3" style="font-size:15.1pt;color:#8a8a8a;"><strong>technologia</strong></a>
<a href="http://quadric.goblix.pl/tag/vhost/" class="tag-vhost" title="2" style="font-size:13.1pt;color:#a4a4a4;">Vhost</a>
<a href="http://quadric.goblix.pl/tag/wzorce-projektowe/" class="tag-wzorce-projektowe" title="5" style="font-size:18.2pt;color:#626262;"><strong>Wzorce projektowe</strong></a>
<a href="http://quadric.goblix.pl/tag/xampp/" class="tag-xampp" title="1" style="font-size:10.0pt;color:#cacaca;">XAMPP</a>
<a href="http://quadric.goblix.pl/tag/xbox-360/" class="tag-xbox-360" title="1" style="font-size:10.0pt;color:#cacaca;">Xbox 360</a>
<a href="http://quadric.goblix.pl/tag/zend/" class="tag-zend" title="2" style="font-size:13.1pt;color:#a4a4a4;">Zend</a></div>
</div></div></div>                  <div class="section hidden" id="tab-atom-calendar-2"><div class="block"><div class="block-content block-calendar clear-block" id="instance-atom-calendar-2">    <div class="calendar-block">
      <div class="top clear-block">
		<a class="prev control" rel="9-2012" href="http://quadric.goblix.pl/2012/09/" title="View posts for September 2012">« Sep</a><h4>May 2018</h4></div><table class="calendar" summary="Calendar"><thead><tr>
		<th scope="col" title="Monday">Mon</th>
		<th scope="col" title="Tuesday">Tue</th>
		<th scope="col" title="Wednesday">Wed</th>
		<th scope="col" title="Thursday">Thu</th>
		<th scope="col" title="Friday">Fri</th>
		<th scope="col" title="Saturday">Sat</th>
		<th scope="col" title="Sunday">Sun</th></tr></thead> <tbody><tr><td colspan="1" class="pad"> </td><td><span>1</span></td><td><span>2</span></td><td><span>3</span></td><td><span>4</span></td><td><span>5</span></td><td><span>6</span></td>
	</tr>
	<tr>
		<td><span>7</span></td><td><span>8</span></td><td><span>9</span></td><td><span>10</span></td><td><span>11</span></td><td><span>12</span></td><td><span>13</span></td>
	</tr>
	<tr>
		<td><span>14</span></td><td><span>15</span></td><td><span>16</span></td><td><span>17</span></td><td><span>18</span></td><td><span>19</span></td><td class="today"><span>20</span></td>
	</tr>
	<tr>
		<td><span>21</span></td><td><span>22</span></td><td><span>23</span></td><td><span>24</span></td><td><span>25</span></td><td><span>26</span></td><td><span>27</span></td>
	</tr>
	<tr>
		<td><span>28</span></td><td><span>29</span></td><td><span>30</span></td><td><span>31</span></td>
		<td class="pad" colspan="3"> </td>
	</tr>
	</tbody>
	</table>    </div>

        <script>
      /* <![CDATA[ */
      jQuery(document).ready(function($){
        $('#instance-atom-calendar-2').delegate('a.control', 'click', function(){
          var reqdate = $(this).attr('rel').split(/-/g);
          $.ajax({
            type: 'GET',
            url: $(this).attr('href'),
            context: this,
            data: { id: 'instance-atom-calendar-2',
                    initial: 0,
                    reqmonth: reqdate[0],
                    reqyear: reqdate[1],
                    atom: 'get_calendar' },
            dataType: 'json',
            beforeSend: function() { $(this).addClass('loading'); },
            complete: function() { $(this).removeClass('loading'); },
            success: function(response){
              if(response.output != '') $('#instance-atom-calendar-2 .calendar-block').html(response.output);
            }
          });
          return false;

        });
      });
      /* ]]> */
    </script>
    
    </div></div></div>              </div>
    </div>
    </div></li><li class="block"><div class="block-content block-links clear-block" id="instance-atom-links-2"><div class="title"><h3>Blogroll</h3><div class="bl"></div><div class="br"></div></div><div class="i"></div><ul class="menu fadeThis blogroll"><li><a href="http://www.goblix.pl" rel="me"><span class="base">Goblix Services Host<span class="c1">goblixite yourself</span></span></a></li><li><a href="http://www.yourheaven.pl" target="_blank" rel="spouse sweetheart"><span class="base">Instytut urody Your Heaven<span class="c1">Salon kosmetyczny - Gdynia Wielki Kack</span></span></a></li><li><a href="http://rct.goblix.pl" target="_blank" rel="me"><span class="base">Radiocontrol Tuning<span class="c1">Hobbystyczne forum modeli składanych i pojazdów zdalnie sterowanych z gazetek</span></span></a></li><li><a href="http://vipserv.org/p.php?goblix" rel="contact"><span class="base">Rewelacyjny hosting!<span class="c1">Rewelacyjny hosting zawierający wszystko czego programista. Tanio, dostęp do mysql, postgres, svn, poczty, crontab, kopie bezpieczeńtwa, prosta obsługa</span></span></a></li><li><a href="http://www.gajcom.cba.pl" target="_blank" rel="acquaintance met"><span class="base">Serwis komputerowy G@JCOM<span class="c1">Serwis komputerowy</span></span></a></li><li><a href="http://www.you-ebook.pl" target="_blank"><span class="base">You-ebook - wydawnictwo internetowe<span class="c1">Wydawnictwo internetowe pdf</span></span></a></li></ul></div></li>  </ul>
  </div>
<!-- /1st sidebar -->



      </div>
    </div>
  </div>
  <!-- /main content -->


         </div>
       </div>
       <!-- /main -->

       
       
       <!-- footer -->
       <div class="shadow-left page-content">
         <div class="shadow-right">

           <div id="footer">

             
             <div id="copyright">
               <span id="site-generator">Powered by <a class="wp" href="http://wordpress.org/">WordPress</a> and Mystique theme by <a class="digitalnature" href="http://digitalnature.eu/">digitalnature</a></span> <br /> [rss]  [top]               		<!-- Advertising Manager v3.5.3 (0.317 seconds.) -->
<script type='text/javascript' src='http://quadric.goblix.pl/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.9b'></script>
<script type='text/javascript' src='http://quadric.goblix.pl/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushPhp.js?ver=3.0.9b'></script>
<script type='text/javascript' src='http://quadric.goblix.pl/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushXml.js?ver=3.0.9b'></script>
<script type='text/javascript'>
	(function(){
		var corecss = document.createElement('link');
		var themecss = document.createElement('link');
		var corecssurl = "http://quadric.goblix.pl/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.9b";
		if ( corecss.setAttribute ) {
				corecss.setAttribute( "rel", "stylesheet" );
				corecss.setAttribute( "type", "text/css" );
				corecss.setAttribute( "href", corecssurl );
		} else {
				corecss.rel = "stylesheet";
				corecss.href = corecssurl;
		}
		document.getElementsByTagName("head")[0].insertBefore( corecss, document.getElementById("syntaxhighlighteranchor") );
		var themecssurl = "http://quadric.goblix.pl/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?ver=3.0.9b";
		if ( themecss.setAttribute ) {
				themecss.setAttribute( "rel", "stylesheet" );
				themecss.setAttribute( "type", "text/css" );
				themecss.setAttribute( "href", themecssurl );
		} else {
				themecss.rel = "stylesheet";
				themecss.href = themecssurl;
		}
		//document.getElementById("syntaxhighlighteranchor").appendChild(themecss);
		document.getElementsByTagName("head")[0].insertBefore( themecss, document.getElementById("syntaxhighlighteranchor") );
	})();
	SyntaxHighlighter.config.strings.expandSource = '+ expand source';
	SyntaxHighlighter.config.strings.help = '?';
	SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n';
	SyntaxHighlighter.config.strings.noBrush = 'Can\'t find brush for: ';
	SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush wasn\'t configured for html-script option: ';
	SyntaxHighlighter.defaults['pad-line-numbers'] = false;
	SyntaxHighlighter.all();
</script>
<script type='text/javascript'>
/* <![CDATA[ */
var atom_config = {"id":"mystique","blog_url":"http:\/\/quadric.goblix.pl\/","theme_url":"http:\/\/quadric.goblix.pl\/wp-content\/themes\/mystique","context":"archive","preview_mode":"","search_query":"","options":"effects|lightbox|generate_thumbs"};
/* ]]> */
</script>
<script type='text/javascript' src='http://quadric.goblix.pl/wp-content/themes/mystique/js/jquery.atom.min.js?ver=3.3.2'></script>
<script type='text/javascript' src='http://quadric.goblix.pl/wp-includes/js/wp-embed.min.js?ver=4.7.10'></script>
             </div>
           </div>

         </div>
       </div>
       <!-- /footer -->

       <a class="go-top" href="#page">Go to Top</a>

     </div>
    <!-- /page-ext -->


    <!-- 86 queries in 0.32 seconds (39.92M) -->

  </div>
  <!-- page -->

  
</body>
</html>