Rozpoczęcie pracy z GIT z GitHub’em w tle
Wczoraj założyłem sobie płatne konto na GitHub'ie, aby mój projekt edukacyjny (pisany w Symfony 1.4) posiadał kontrolę wersji - po za tym przyda mi się to w pracy zawodowej. Wcześniej używałem SVN lub CVS, i w zasadzie zupełnie przez przypadek zacząłem używać GIT'a. Skusił mnie głównie GitHub, który zajmuje się hostingiem repozytoriów - koniec z utrzymywaniem własnego serwera. Trafiłem tam przy okazji czytania na temat Warszawa JUG (http://github.com/warszawajug). Przyjrzałem się dokładniej GitHub'owi i bardzo mi się on spodobał.
Dziedziczenie w Doctrine 1.2 po mojemu ;)
Ostatnio programując na co dzień w Javie i używając Springa, Hibernate, Struts i Velocity nie natrafiłem na żaden interesujący problem dlatego nie pojawił się na blogu żaden wpis, który tego dotyczy.
Ale za to jest coś ciekawego w Doctrine
W wersji 1.2 nie ma rozsądnej formy dziedziczenia, to co proponują autorzy nie podoba mi się. postanowiłem użyć takiego przypadku:

sf_guard_user to klasa standardowego pluginu, która odpowiada użytkownikowi. Dodatkowo stworzyłem tabelę ae_experts z jednym kluczem obcym odwołującym się do użytkownika. Czyli każdy ekspert jest również użytkownikiem. Tak sobie pokrętnie wytłumaczyłem obiektowo relacyjną bazę danych.
Efekt, który chciałem osiągnąć to przy każdym pobraniu eksperta jest również pobierany użytkownik. Skoro ekspert to user, to warto wyświetlać domyślnie imię i nazwisko. Aby to osiągnąć w klasie Expert (Expert.class.php) dodałem taki kod:
/**
* Expert
*
* This class has been auto-generated by the Doctrine ORM Framework
*
* @package ask-expert
* @subpackage model
* @author Beriko Software, Grzegorz Bernaś
* @version SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
*/
class Expert extends BaseExpert
{
public function preDqlSelect($event)
{
$params = $event->getParams();
$query = $event->getQuery();
$alias = $params['alias'] . '.sfGuardUser';
if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' '.$params['alias'].' '))) && !$query->contains($alias))
{
$query->innerJoin($alias);
}
}
public function __toString() {
return $this->getSfGuardUser()->getFirstName().' '.$this->getSfGuardUser()->getLastName();
}
}
Ale to nie wszystko, kod nie będzie działać jeżeli nie włączymy DQL'a (Doctrine Query Language). Aby to zrobić w pliku ProjectConfiguration.class.php do klasy ProjectConfiguration dodaj taki kod:
class ProjectConfiguration extends sfProjectConfiguration
{
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
}
}
Dzięki temu nie mam dwóch zapytań tylko jedno
Nie wiem jaki to będzie miało wpływ na wydajność i pracę w przyszłości kiedy mój projekt edukacyjny urośnie, ale czas pokaże.
Tworzenie tabel z kodowaniem utf-8 w symfony 1.4 i doctrine 1.2
W ramach odświeżenia swojej wiedzy, wróciłem do zabawy z frameworkiem Symfony. Realizując mały i prosty "projekt edukacyjny" natrafiłem na pewien problem. Mianowicie kodowanie tabel w MySQL oraz kodowanie połączenie z bazą danych. Osobiście preferuję używania wszędzie UTF-8 dlatego domyślne kodowanie latin1 nie do końca mnie zadowalało. Dzięki dziadkowi google znalazłem na sieci bardzo przydatne rozwiązanie.
Jeżeli chcesz używać kodowania UTF-8, powinieneś dodać do swojej definicji schematu (schema.yml) następujacy kod:
User:
options:
type: MyISAM
collate: utf8_unicode_ci
charset: utf8
columns:
username: string(255)
password: string(255)
Jak widać elegancko ustawiamy collate: utf8_unicode_ci oraz charset: utf8. Powyższe opcje sprawiają, że tylko jedna konkretna tabela będzie kodowana w UTF-8, jeżeli chcemy aby wszystkie table miały takie kodowanie oraz aby kodowanie połączenia było ustawione na UTF-8 musimy do pliku ProjectConfiguration.class.php dodać następującą metodę:
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setCollate('utf8_unicode_ci');
$manager->setCharset('utf8');
}
Następnie trzeba przebudować cały mode (aby w bazie danych zmieniło się kodowanie tabel) oraz na nowo wgrać dane inicjalne już z odpowiednimi znaczkami.
symfony doctrine:build --all --and-load --env=dev --no-confirmation
Miejmy na uwadze, że tak komenda usunie wszystkie dotychczasowe tabele i stworzy je na nowo z kodowaniem UTF-8.
Jak zaoszczędzić na obsłudze informatycznej w firmie
Niniejszy artykuł jest przeznaczony dla właścicieli firm oraz dyrektorów administracyjnych. W prosty i krótki sposób będę starał się wyjaśnić różnice między oprogramowaniem własnościowym a wolnym oprogramowaniem oraz, co najważniejsze, sposób, w jaki wykorzystać tę różnicę na swoją korzyść. Na początek, aby mówić wspólnym językiem, należy wyjaśnić kilka podstawowych pojęć, które są obce dla osób nie związanych z informatyką.
System operacyjny (ang. skrót OS Operating System) - oprogramowanie zarządzające sprzętem komputerowym, tworzące środowisko do uruchamiania i kontroli zadań użytkownika oraz innych programów. System operacyjny to Microsoft Windows XP Proffesional, Max OS X 10.6, Ubuntu 10.10. UWAGA! Linux (GNU/Linux) to nie system operacyjny.
Linux - rodzina uniksopodobnych (inną rodziną jest np. Microsoft Windows) systemów operacyjnych opartych o jądro Linux. Linux jest jednym z przykładów wolnego i otwartego oprogramowania (FLOSS): jego kod źródłowy może być dowolnie wykorzystywany, modyfikowany i rozpowszechniany. Często jest określany mianem pingwinka (związane jest to z logiem Linux - pingwin).
Kod źródłowy (ang. source code) - ciąg instrukcji i deklaracji zapisany w zrozumiałym dla człowieka języku programowania opisujący operacje, jakie powinien wykonać komputer przy pomocy skończonej liczby ściśle zdefiniowanych rozkazów. Jest wynikiem pracy programistów.
Wolne Oprogramowanie (ang. free software) - warunki określenia danego programu jako Wolnego Oprogramowania zawiera definicja Wolnego Oprogramowania. Składa się ona z czterech punktów, numerowanych od zera do trzech. Definiuje ona Wolne Oprogramowanie poprzez udzielanie odbiorcom następujących wolności:
- wolność uruchamiania programu, w dowolnym celu (wolność 0)
- wolność analizowania, jak program działa i dostosowywania go do swoich potrzeb (wolność 1)
- wolność rozpowszechniania kopii, byście mogli pomóc sąsiadom (wolność 2)
- wolność udoskonalania programu i publicznego rozpowszechniania własnych ulepszeń, dzięki czemu może z nich skorzystać cała społeczność (wolność 3).
Jako warunek konieczny wolności 1 i 3 jest wymieniony dostęp do kodu źródłowego.















