Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Archive for the ‘Frameworki’ Category

Google Trends – czy rzeczywiście im więcej tym lepiej?

with one comment

Tym razem bardzo krótki wpis w formie pytania, na które może ktoś będzie mógł udzielić wartościowej odpowiedzi.

Przeglądając Google Trends dla co popularniejszych frameworków PHP zacząłem się zastanawiać na co mogą wskazywać większe ilości zapytań o dany framework do Google.

I pojawiło się pytanie: kiedy ja najczęściej wpisuję nazwę frameworka/biblioteki w Google? Najczęściej kiedy napotykam na problem a sam framework nie ułatwia zadania w rozwiązaniu problemu lub robi to w nie do końca oczywisty sposób.

Czy tym samym ilość zapytań ze słowem kluczowym wskazującym na interesujący nas framework/bibliotekę nie powinna nas informować, że im mniej zapytań tym lepiej, ponieważ wybrane rozwiązanie jest najmniej problematyczne?

Written by filipgorczynski

2015.11.12 at 21:13:37

Napisane w Frameworki, Luźne

Tagged with , , ,

Wymuszenie zatrzymania wbudowanego serwera Django na konkretnym porcie

with one comment

Djanglo LogoKorzystając z wbudowanego serwera Django oraz debuggera pdb doprowadziłem do sytuacji, w której w żadnej konsoli ten serwer nie był uruchomiony – próba jego ponownego odpalenia skutkowała komunikatem:

Performing system checks...

System check identified no issues (0 silenced).
September 29, 2015 - 07:47:36
Django version 1.8, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Error: That port is already in use.

Próba otwierania strony w przeglądarce nic nie dawała, reagowało to tak, jak by zatrzymywało się grzecznie na pdb – przy czym żadnych informacji nigdzie o tym nie było.

Przydało się polecenie:

fuser -n tcp -k 8000

Written by filipgorczynski

2015.10.01 at 07:36:28

Komunikaty (flash messages) w Symfony2

leave a comment »

Symfony logoPrzykładowy sposób wykorzystania komunikatów w Symfony.
W kontrolerze:
$success = 'Komunikat informujący o powodzeniu wykonanej operacji.';
$this->get('session')->getFlashBag()->add('success', $success);
$error = 'Komunikat informujący o niepowodzeniu wykonanej operacji.';
$this->get('session')->getFlashBag()->add('error', $error);
$warning = 'Komunikat informujący o ostrzeżeniu podczas wykonywanej operacji.';
$this->get('session')->getFlashBag()->add('warning', $warning);
$notice = 'Komunikat informujący o wykonanej operacji.';
$this->get('session')->getFlashBag()->add('notice', $notice);

W szablonie (Twig)

{# twig template #}
{% for type, flashMessages in app.session.flashbag.all() %}
{% for flashMessage in flashMessages %}
      <div class="{{ type }}">{{ flashMessage }}</div>
   {% endfor %}
{% endfor %}

Written by filipgorczynski

2014.09.17 at 20:45:46

Drupal 6 – Instalacja

2 komentarze

W związku z tym, że od pewnego czasu próbuję nauczyć się Drupala na poziomie „początkujący” postaram się opisywać różne rozwiązania potencjalnych problemów, konfiguracje oraz opisy modułów. Wpis ten (mam nadzieję, że kolejne się także pojawią) dotyczy aktualnie stabilnej wersji 6.25 ze względu na ogromną ilość materiałów i  modułów dostępnych w sieci. Proszę o wyrozumiałość, gdyż sam jestem na etapie nauki i do kompletnego opanowania tego CMSa dużo mi jeszcze brakuje. Powstające wpisy nie są kompletnym opisem możliwości Drupala ani rozwiązań użytych przy budowie stron – mają być dla mnie jedynie materiałem do przypominania róznych zagadnień.

Pierwszym krokiem, jaki należy wykonać jest sprawdzenie wymagań jakie stawia nam Drupal. Dokładne informacje znajdują się na stronie http://drupal.org/requirements. W skrócie są to:

Miejsce na dysku 15 MB – zalecałbym więcej (moduły, skórki, dodatkowe pliki),
Serwer WWW:  Apache 1.3, Apache 2.x lub Microsoft IIS,
Serwer baz danych: MySQL 4.1 lub nowszy,
PHP 4.4.0 lub nowszy (5.2 zalecany) – warto także włączyć np.: APC

Jeśli spełniamy wymagania kroku pierwszego, to…

Drugi krok to pobranie aktualnej wersji Drupala ze strony projektu http://drupal.org/project/drupal. Adres ten używany jest także do określania lokalizacji modułów Drupala. Sam Drupal jak i jego moduły traktowane są w tym wypadku tak samo. Moduły dostępne są więc pod adresem http://drupal.org/project/NAZWA_MODUŁU. Pobrane archiwum instalacyjne Drupala należy rozpakować w katalogu głównym serwera lub odpowiednio do katalogu – w moim przypadku jest to katalog drupal_install (ścieżka c:/htdocs/drupal_install).

Tworzymy bazę danych (dowolny klient MySQL, np. phpMyAdmin), która zostanie wykorzystana przez Drupala – także nazwałem ją drupal_install. Jako metodę porównywania napisów utf8_general_ci.

Instalacja CMS rozpoczyna się od przejścia pod adres http://localhost/drupal_install, co zaowocuje pojawieniem się pierwszego ekranu, w którym będzie można wybrać język instalacji. Tutaj wybrałem język angielski jako domyślny. Wybranie innego języka do instalacji przedstawię w innym wpisie.

Drupal 6 - Instalacja: Ekran powitalny

Wybieramy więc opcję „Install Drupal in English”. Pojawia się kolejny ekran z nieprzyjemnym czerwonym komunikatem informującym o braku pliku z ustawieniami oraz przedstawia sposób jego utworzenia.

Drupal 6 - Instalacja: Plik z konfiguracją

Postępując zgodnie z zaleceniami przechodzimy do katalogu ./sites/default gdzie znajdziemy plik default.settings.php, który zaleca się skopiować pod nową nazwą settings.php oraz nadajemy mu prawa do zapisu przez serwer www (w Windowsie nie jest to wymagane). Następnie odświeżamy stronę lub klikamy w link na dole strony „try again” co przeniesie nas do ekranu konfiguracji bazy danych.

Drupal 6 - Instalacja: Konfiguracja bazy danych

Wypełniamy wymagane pola – w domyślnej instalacji MySQL wypełnić musimy tylko nazwę bazy danych (Database name) oraz nazwę użytkownika (Database username). Jeśli MySQL został wcześniej skonfigurowany, podajemy także odpowiednie hasło, ewentualnie port (jeśli inny niż domyślny 3306) oraz prefiks w tabeli, jeśli chcemy w jakiś sposób wyróżnić aktualną instalację Drupala lub jeśli wymaga tego środowisko. Jeśli wprowadzone informacje nie pozwolą połączyć się z bazą danych zostaniemy poproszeni o ich weryfikację.

W przedostatnim kroku określamy podstawową konfigurację strony – jej nazwę, główny adres e-mail oraz co najważniejsze nazwę i hasło głównego administratora. Jest to osoba o praktycznie nieograniczonej potędze w środowisku Drupala – użytkownik o ID = 1. Ze względów bezpieczeństwa warto określić dla niego skomplikowane hasło.
Jedną z bardzo przydatnych opcji – zalecanych do włączenia – jest Clean URLs. Pozwala ona wykorzystać możliwości mod_rewrite w serwerze Apache – co ostatecznie przekłada się na ładne adresy URL, np.: serwer.com/to-jest-nowa-strona zamiast serwer.com zamiast serwer.com/?q=node/1.

Drupal 6 - Instalacja: Konfiguracja strony

Dobrze jest także pozostawić zaznaczoną opcję Check for updates automatically ponieważ dzięki temu Drupal co jakiś czas będzie informował nas o pojawiających się aktualizacjach – zarówno w samym jądrze Drupala jak i w zainstalowanych modułach. Kliknięcie przycisku Save and continue spowoduje wyświetlenie paska postępu informującego o  tworzeniu struktury bazy danych oraz przebiegu instalacji.

Drupal 6 - Instalacja: Podsumowanie instalacji

Gdy pasek postępu osiągnie magiczne 100% otrzymamy podsumowanie instalacji oraz możliwość odwiedzenia strony świeżo zainstalowanej wersji Drupala. Automatycznie zostaniemy także zalogowani na konto administratora (które utworzyliśmy w kroku Configure site).

Drupal 6 - Instalacja: Koniec instalacji

Dobrym pomysłem jest także usunięcie kilku plików z katalogu głównego Drupala, m. in.: INSTALL.mysql.txt, INSTALL.pgsql.txt, install.php.

Powyższy proces instalacji opisany jest także (po angielsku) w pliku INSTALL.txt .

Written by filipgorczynski

2012.06.27 at 20:21:48

Drupal 6 i najnowsza wersja jQuery

leave a comment »

Od kilku już projektów w Drupalu spotykałem się z problemem przy wykorzystaniu najaktualniejszej wersji jQuery. Drupal w wersji 6 wykorzystuje jQuery w wersji 1.2.6. Instalacja modułu jquery_update trochę poprawia tą sytuację jednak nadal pozostajemy z wersją 1.3.2. W chwili pisania tego tekstu najnowszą wersją jQuery jest 1.7.1, więc jak widać sporo rzeczy mogło ulec zmianie. Korzystając z najnowszej wersji jQuery mamy w dodatku pewność, że znalezione błędy zostały poprawione (i ewentualnie, powstały nowe), kod został przepisany by działać szybciej, zwiększył się asortyment funkcji.

/*! jQuery v1.7.1 jquery.com | jquery.org/license */
// źródło najaktualniejszej wersji jQuery

$$ = jQuery.noConflict();

console.log('o1. ', $.fn.jquery);
// o1. 1.2.6
// LUB
// o1. 1.3.2

(function($) {
// W tej przestrzeni znajdzie się nasz kod
console.log('o2. ', $.fn.jquery);
   // o2. 1.7.1
})($$);

Co się tutaj dzieje?

Poprzez funkcję jQuery.noConflict() obiektu jQuery utworzymy referencję $$, która będzie przechowywała nowy obiekt biblioteki jQuery (1.7.1 w tym wypadku). Zmienna $$ będzie dostępna w zasięgu globalnym (window), a my będziemy posiadać zmienne $$ (wersja  1.7.1) oraz $ (wersja 1.2.6/1.3.2).

Tworzymy następnie kolejny zasięg poprzez wywołanie kolejnej funkcji anonimowej, do której przekazujemy wcześniej utworzony obiekt jQuery 1.7.1. Drugie wywołanie funkcji anonimowej moglibyśmy pominąć i odwoływać się w naszym kodzie do jQuery wykorzystując zmienną $$, ale osobiście uważam to za mało wygodne.

Written by filipgorczynski

2012.02.20 at 20:47:31

Tworzenie nowego projektu w Yii

leave a comment »

Ostatnio coraz więcej frameworków zostaje wyposażonych w skrypty pozwalające jeszcze bardziej przyspieszyć tworzenie aplikacji poprzez generowanie jak największej ilości kodu. W przypadku frameworka Yii możliwości jest sporo, od generowania struktury katalogów i plików samej aplikacji, po generowanie modułów, modeli, całej struktury CRUD w kontrolerach a w nowszych wersjach także kodu pozwalającego synchronizowanie struktury baz danych.
Nazewnictwo dla katalogów jest następujące:
WebRoot – katalog główny serwera HTTP – jego zawartość prezentuje się po wpisaniu http://localhost/ w pasku adresu przeglądarki. Dla mnie będzie to x:\htdocs\.
YiiDir – katalog w którym został zainstalowany framework Yii. W moim przypadku jest to x:\htdocs\yii.
AppDir – katalog aplikacji – tworzonego projektu. Na tutejsze potrzeby nazwijmy go demo. W tym przypadku, będzie to x:\htdocs\demo.
Oto co musimy zrobić, aby stworzyć nowy projekt z wykorzystaniem frameworka Yii.
Na początku oczywiście musimy posiadać zainstalowany framework – pobieramy go najlepiej na stronie projektu Yii framework. Wszystkie pliki wypakowujemy w katalogu YiiDir.
Następnym krokiem jest uruchomienie okna poleceń – cmd.exe i wpisanie następujących poleceń oraz słówka Yes w odpowiednim momencie.

> cd x:\htdocs
> yii\framework\yiic webapp demo
Create a Web application under 'x:\htdocs\demo'? [Yes|No]   Yes
  unchanged css/bg.gif
  unchanged css/form.css
  unchanged css/ie.css
  unchanged css/main.css
  unchanged css/print.css
  unchanged css/screen.css
   generate index-test.php
   generate index.php
  unchanged protected/.htaccess
  unchanged protected/components/Controller.php
  unchanged protected/components/UserIdentity.php
  unchanged protected/config/console.php
  unchanged protected/config/main.php
  unchanged protected/config/test.php
  unchanged protected/controllers/SiteController.php
  unchanged protected/data/schema.mysql.sql
  unchanged protected/data/schema.sqlite.sql
  unchanged protected/data/testdrive.db
  unchanged protected/models/ContactForm.php
  unchanged protected/models/LoginForm.php
  unchanged protected/tests/bootstrap.php
  unchanged protected/tests/functional/SiteTest.php
  unchanged protected/tests/phpunit.xml
  unchanged protected/tests/WebTestCase.php
  unchanged protected/views/layouts/column1.php
  unchanged protected/views/layouts/column2.php
  unchanged protected/views/layouts/main.php
  unchanged protected/views/site/contact.php
  unchanged protected/views/site/error.php
  unchanged protected/views/site/index.php
  unchanged protected/views/site/login.php
  unchanged protected/views/site/pages/about.php
  unchanged protected/yiic
  unchanged protected/yiic.bat
  unchanged protected/yiic.php
  unchanged themes/classic/views/.htaccess

Your application has been created successfully under x:\htdocs\demo.
>

Tak, to już. Posiadamy działającą aplikację. Wystarczy wejść na stronę http://localhost/demo by zobaczyć działającą stronę kontakt z formularzem, logowanie oraz wyświetlanie stron, proste menu, breadcrumb.

Written by filipgorczynski

2011.04.17 at 20:37:50

Ubuntu + Apache2 + symfony framework + wirtualne hosty

with one comment

Postanowiłem spróbować swoich sił z frameworkiem symfony i jadąc po kolei wg zaleceń z kursu Jobeet natrafiłem na problem w konfiguracji serwera Apache2. Wymiataczem Ubuntu też nie jestem, a Jobeet zapomniał chyba wspomnieć o modyfikacji /etc/hosts – w moim przypadku tylko dzięki temu zadziałało. Zawartości moich plików:

Zawartość pliku /etc/hosts

127.0.0.1	localhost
127.0.0.1	www.jobeet.local
127.0.1.1	laptop

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Zawartość pliku httpd.conf

ServerName www.jobeet.local

Zawartość pliku /etc/apache2/sites-available/default

<VirtualHost www.jobeet.local:80>
	ServerAdmin filip.gorczynski@gmail.com
	DocumentRoot /var/www/sfproject/web
	DirectoryIndex index.php
	<Directory "/var/www/sfproject/web">
		AllowOverride All
		Allow from All
	</Directory>
	Alias /sf /var/www/sfproject/data/web/sf
	<Directory "/var/www/sfproject/data/web/sf">
		AllowOverride All
		Allow from All
	</Directory>
</VirtualHost>

<VirtualHost *:80>
	ServerAdmin filip.gorczynski@gmail.com

	DocumentRoot /var/www
	<Directory />
		Options FollowSymLinks
		AllowOverride All
	</Directory>
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
		Allow from 127.0.0.0/255.0.0.0 ::1/128
	</Directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<Directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</Directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Po tych zmianach i

sudo /etc/init.d/apache2 restart

wszystko śmiga jak należy. Wpisując w przeglądarkę http://www.jobeet.local odwołuje mi się bez problemu do projektu symfony. Wpisanie localhost działa jak poprzednio – czyli póki co wyświetla słodko brzmiące „It works!”.
Jeśli chodzi o strukturę moich katalogów, to ściągniętą paczkę symfony rozpakowałem do /var/www/sfproject/.

Written by filipgorczynski

2010.07.29 at 09:36:11

%d blogerów lubi to: