Archive for Marzec, 2010

Dlaczego używam eclipse w wersji 3.3

Środowisko eclipse wykorzystuję do programowania w języku php – Zend Framework. Od ponad pół roku jest to niezmiennie leciwa już wersja 3.3. Dlaczego nie zmieniłem jej na nowszą np. 3.5? Skłoniły mnie do tego zaledwie dwie jakże istotne dla mnie kwestie. Zastrzegam jednak, że być może to co tutaj zaprezentuję wynika z mojej niewiedzy związanej z eclipse, liczę więc na ewentualny „odzew”. :)

Rozważmy następujące kody dwóch przykładowych klas:

class SampleClass
{
	public function __construct()
	{

	}

	/**
	 * Przykladowa funkcja
	 *
	 * @param String $str Obiekt string
	 * @param array $arr Obiekt array
	 * @param String|array $obj Obiekt mieszany
	 *
	 * @return array
	 */
	public function myFunction($str, $arr, $obj)
	{
		return array('str' => $str, 'arr' => $arr, 'obj' => $obj);
	}
}

class MyClass
{
	/**
	 * Przykladowa klasa
	 *
	 * @var SampleClass
	 */
	private $_sampleClass;

	public function __construct()
	{
		$this->_sampleClass = new SampleClass();
		$this->_sampleClass->myFunction('str', array('arr' => 'dd'), 'str2');
	}
}

W zasadzie nic nadzwyczajnego. W jednej klasie przykładowa metoda, w drugiej natomiast utworzenie instancji klasy oraz wywołanie metody „myFunction”. Wszystko opatrzone w odpowiednie komentarze.

Dwa powody dla których nie zrezygnuję ze starego poczciwego eclipse 3.3:

Powód I:

Podczas korzystania z utworzonej wcześniej instancji klasy wywołanie metody sprowadza się do wpisania strzałki tuż po nazwie obiektu. Taka operacja skutkuję piękną chmurką prezentującą listę metod czy też zmiennych danej klasy.

Eclipse w wersji 3.5 „wypluwa” owe podpowiedzi niezwykle wolno Od momentu pojawienia się strzałki do chwili „wyplucia” listy metod i zmiennych mija katastrofalnie dużo czasu!!!! Osobiście piszę bardzo szybko na klawiaturze przez co jakiekolwiek opóźnienie w pojawieniu się podpowiedzi jest niezwykle irytujące. Żadnych efektów poprawiających powyższy stan rzeczy nie przynosi ustawienie opóźnienia autoaktywacji na 1 czy też 0 milisekund w opcjach znajdujących się: Window->Preferences->PHP->Editor-CodeAssist.

Całkowicie inaczej wygląda to w Eclipse 3.3. Tam niemal każde „strzałkowe” odwołanie powoduję natychmiastową podpowiedz.

Powód II:

Poniżej przedstawiam szereg screenów ukazujących proces wywołania metody „myFunction” z klasy „SampleClass” w eclipse 3.3 oraz 3.5.

Eclipse 3.5:

wywolanie_metody_3_5

Eclipse 3.3:

wywolanie_metody_3_3

uzupelnienie_arg_3_5

uzupelnienie_arg_3_3

Faktem jest, że język php nie jest językiem silnie typowanym, więc teoretycznie każda przekazywana wartość do metody „myFunction” może być dowolnego typu. O ile w obu omawianych przeze mnie wersjach eclipse, chmurki zawierające opis metody i parametrów wyglądają identycznie o tyle już sam proces uzupełniania wartościami argumentów funkcji jest nieco inny. Eclipse 3.3 także na tym etapie sugeruję jakiego typu powinny być wartości parametrów przekazywane do metody. Niestety zabrakło tego w nowszym wydaniu i od dawna nic się w tej kwestii nie zmienia.

Być może eclipse 3.5 gdzieś w swoim gąszczu ustawień konfiguracyjnych zawiera opcję, które pozwalają zrównać tą wersję w wygodzie użytkowania do eclipse 3.3 niestety jak dotąd nie było mi dane ich odnaleźć. Ubolewam nad tym faktem ponieważ niektóre najnowsze wersję wykorzystywanych przeze mnie eclipsowych pluginów odmawiają już współpracy z wersją 3.3.

Szybkość oraz wygoda jaką ze sobą niosą powyższe opcję sprawia, że wciąż kurczowo trzymam się eclipse 3.3.

Błąd podczas uruchamiania Eclipse "JVM terminated. Exit code=13"

Ściągnąłem Eclipse w wersji 3.3 następnie rozpakowałem archiwum do folderu o nazwie „eclipse 3.3″. Podczas pierwszego uruchomienia otrzymałem dość interesujące „powitanie” – widoczne na screen-ie poniżej.

JVM terminated. Exit code=13

Okazuję się, że problem stanowiła tutaj nazwa folderu w którym umieściłem eclipse – jej zmiana przyniosła porządany efekt. Trywialne, ale dłuższą chwilę zajęło mi dotarcie do rozwiązania. :)

Generowanie pliku csv na podstawie tabeli w bazie danych

Format CSV jest prostym sposobem przechowywania danych w pliku tekstowym. Polega na zapisie kolejnych wartości wierszy pobranych z arkusza kalkulacyjnego bądź z bazy danych odzielając je określonym separatorem (najczęściej jest to przecinek bądź średnik). Wygenerowany plik CSV często zawiera w pierwszym wierszu nazwy kolumn. MySql dzięki funkcji „Concat_Ws” pomaga w trywialny sposób zwrócić dane sformatowane dane do postaci pliku csv.

Utworzyłem tabelę „person” której strukturę wraz z przykładowymi danymi prezentuję poniżej:

Tabela do wygenerowania pliku csv

Oczekiwana postać pliku to – linia pierwsza reprezentująca nazwy kolumn, kolejne linie zawierające pobrane dane jako separator zostanie użytyh przecinek.

Zapytanie formatujące dane:

SELECT CONCAT_WS(',', name, surname, age) AS 'Imię, Nazwisko, Wiek' FROM person

Funkcja „Concat_Ws” jako jeden z argumentów przyjmuje separator którym oddzieli zwracane wyniki. Nazwa kolumny w zapytaniu jest odpowiednikiem pierwszego wiersza
z pliku csv.

Wynik zapytania:

Wynik zapytania

Wewnątrz skryptu tworzącego csv wystarczy już tylko przeiterować po otrzymanych wynikach zapisując je do oczekiwanego pliku. :)