Mar 5 2010

Rails Template

Idąc za ciosem postanowiłem wydłubać własny szablonik do startu z aplikacjami. Jest on dostępny na githubie i można śmiało z niego korzystać.
Co robi szablonik?

- inicjuje repozytorium Git, dodaje niektóre miejsca i pliki do ignore’a po czym zatwierdza resztę.

- instaluje platformę testową RSpec, RSpec-Rails, Cucumber, Factory_Girl i Webrat.

- instaluje authologic i declarative_authorization,

- tworzy model do dodawania artykułów oraz cruda do niego.

- tworzy model użytkownika, ról  i sesji

- tworzy widoki dla artykułów, panel logowania i edycja profilu.

- tworzy dwie początkowe role: user i admin.

- nadaje uprawnienia:

- gość może czytać artykuły, założyć konto i się zalogować,

- użytkownik może się wylogować, dodać artykuł, edytować lub usunąć własny artykuł, edytować swój profil,

- admin może wszystko.

Planuję jeszcze nad kilkoma dodatkami, ale nie wiem jeszcze dokładnie co i jak. Muszę to przemyśleć. Jak na razie szablon tworzy to, co w prawie każdej aplikacji istnieje. Modele można rozbudować wg własnych potrzeb ale mamy już dobry punkt początkowy.

Zapraszam do testowania i wyrażania swoich uwag.


Dec 12 2009

Automatyczny start czyli Rails Templates

Jeżeli tworzymy kilka aplikacji w ruby on rails, to przeważnie początkowe etapy są do siebie bardzo podobne. Np. inicjalizacja kontroli wersji (np. w sposób jaki jest opisany w poprzednim artykule), instalacja ulubionych pluginów, usuwanie zbędnych plików, Czy też inne operacje. Na szczeście do pomocy przychodzą nam Templates, które zostały wprowadzone w rails 2.3. Teplate to nic innego niż plik ruby, w którym wpisujemy komendy w przygotowanym do tego języku domenowym (DSL). Po przygotowaniu takiego szablonu inicjujemy projekt rails z parametrem -m ścieżka_do_szablonu.rb. Rails od razu po wykonaniu inicjacji projektu od razu uruchomi podany plik.

rails my_app -m ~/szablon_startowy.rb

tak samo jak URI, możemy uzywać URL:

rails my_app -m http://marioosh.5dots.pl/szablon.txt

(powyższy plik nie istnieje więc nie testujcie ;) )
ostatnim sposobem jest inicjacja szablonu przed odpowiednie zadanie rake z ustawienie zmiennej LOCATION:

rake rails:template LOCATION=~/szablon_startowy.rb

› Continue reading


Dec 11 2009

Objęcie kontrolą wersji Git nowej aplikacji Rails

Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.
Cała operacja jest wykonywana w kilku krokach, gdzie pierwszym z nich będzie stworzenie nowej aplikacji rails na naszym komputerze. Następnie musimy zaiinicjować kontrolę wersji.


$ rails my_app
$ cd my_app
$ git init
$ git status
...
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# README
# Rakefile
# app/
# config/
# db/
# doc/
# log/
# public/
# script/
# test/
› Continue reading


Nov 4 2009

Mysql i Snow Leopard

Po aktualizacji systemu do MacOS X 10.6 (Snow Leopard) zauważyłem, że nie startuje moja baza danych Mysql. Sprawdziłem ręcznie co jest nie tak:

cd /Library/StartupItems/MySQLCOM
sudo ./MySQLCOM start
Could not find MySQL startup script!


aha! Poszedłem więc do /usr/local i zrobiłem link symboliczny
sudo ln -s mysql* mysql
Po ponownej próbie uruchomienia bazy danych otrzymałem komunikat:
Starting MySQL database server
Czyli wszystko ok.


Nov 4 2009

Kopiowanie z/na konsolę

Podczas pracy w terminalu, czasem zdaża mi się, że wynik, który otrzymuję muszę sprawnie przenieść do jakiegoś programu okienkowego. W przypadku dłuższych listingów przekierowywuję output na plik tekstowy i z niego potem odczytuję w drugim programie. Pracując na MacOS X znalazałem ułatwienie mojej pracy. Programy pbcopy i pbpaste odpowiedzialne są za wklejanie do i z pamięci podręcznej. Przekierowując output podczas np. listowania folderu na pbcopy mamy dostęp do tego listingu używając zwykłej fukncji ‘Wklej’ dowolnego okienkowego programu.


Oct 27 2009

Java, TMPDIR i MacOS X

Prawie cały dzień spędziłem na bezefektywnej próbie uruchomienia starego jBossa wygrzebanego z backup’u na moim Macu. Po dłuższych analizach znalazłem przycznę. Otóż, podczas startu, serwer ustawiał zmienną java.io.tmpdir. W systemie MacOS X w takim momenie zostaje utworzony nowy folder w /private/var/folders.Problemem jest to, że w nazwie tego folderu występują znaki plus +, które przez niektóre mechanizmy (np. Xerces) są traktowane jako spacje. Obejściem tego problemu jest ustawienie parametru java.io.tmpdir w JAVA_OPTS. JAVA_OPTS="-Djava.io.tmpdir=/tmp/". Zmienna ta w przypadku serwera jBoss jest ustawiana w pliku run.conf, więc należy go edytować i dopisać co podałem.


Aug 20 2009

Praca ze zdalnym repozytorium w GIT

Jak obiecałem w jednym z poprzednich artykułów opiszę jak wygląda praca z projektem za pośrednictwem zdalnego repozytorium.

Większość projektów nie jest prowadzona samodzielnie, jest w niego zaangażowane kilku (-nastu, -dziesięciu) innych programistów. Każdy z nich może lokalnie prowadzić własną ścieżkę, ale z doświadczenia wiem, że przydaje się jedno wspólne repozytorium. Punkt centralny dla naszej pracy.

› Continue reading


Aug 19 2009

Spring jest GIT

Zgodnie z zapowiedziami projekt DM Server prowadzony przez SpringSourcezostał zmigrowany z Subversion na GIT. Jest to już drugi projekt tej grupy, który przeniósł się na ten system kontroli wersji (pierwszy to Grails). › Continue reading


Aug 17 2009

GIT Stash

Na codzień pracuję z IntelliJ IDEA. W tym IDE bardzo podoba mi się funkcja “szufladkowania zmian” podczas pracy z kontrolą wersji. Na codzień korzystam z Subversion i zdarza mi się z tej funkcji skorzystać. Na czym ona polega? Otóż, zdaża się, że pracujemy nad sporym kawałkiem kodu i już dość dużo zmian poczyniliśmy, gdy nagle dostrzeżemy błąd w aplikacji, który chcielibyśmy zmienić, zanim skommitujemy resztę zmian. Powyższa funkcja IntelliJ IDEA pozwala nam na odłożenie dotychczasowej pracy (czyli zmian od ostatniego commita) do szufladki – po czym, możemy poprawić błąd, scommitować zmiany i następnie z szufladki “wyjąć” kod, który napisaliśmy aby kontynuować pracę.

Wielce mnie ucieszyło, gdy zobaczyłem podczas pracy z GIT, że ma on taką funkcję wbudowaną out-of-the-box. Nazywa się ona ‘Stash’.
Wykonuje ona operację dokładnie tak jak opisałem powyżej, czyli…
1. Pracując z dłuższym kawałkiem kodu, mamy już sporo zmian, gdy dostrzegamy błąd aplikacji, który natychmiastowo powinniśmy poprawić.
2. Wykonujemy komendę

 > git stash save "nazwa stasha"

Wykonanie tej operacji zachowa nasze dotychczasowe zmiany gdzieś na boku, a master tree przywróci do stanu HEAD.
3. Możemy poprawić nasz błąd i wykonać commit

 > git commit -a -m "bugfix #2382

4. Przywracamy stan poprzedni, aby kontynuować pracę:

 > git pop

co jednocześnie usunie naszą “szufladkę”, jeżeli nie chcemy usuwać aby móc do tego stanu jeszcze wrócić wykonujemy komendę :

 > git apply

5. Kontynuujemy pracę.

Git Stash ma więcej możliwości, bo takich wirtualnych szufladek możemy tworzyć dowolną ilość i przywracać stan z każdej z nich. Możemy zatem poprogramować w stylu “co by było gdyby…” i wybrać najbardziej odpowiednią wersję napisanego kodu (dotyczy to zwłaszcza młodych programistów, którzy niejednokrotnie nie są pewni podejmowanych decyzji w programowaniu).

Młody czy stary programista – polecam GIT i funkcję stash.

Więcej o tej komendzie znajdziecie tutaj.


Jul 27 2009

Hate Driven Development

Znam kilka metodologii powstawania programów, jak na przykład na bazie testów (Test Driven Development). Jednak przy ostatnim projekcie, poznałem nowy: Hate Driven Development – jak tylko siadam przed komputerem w pracy to przechodzą mi dreszcze po plecach. Tak nienawidzę obecnego projektu, że aż dostaję niezłego kopa w produktywności. Chcę jak najszybciej go skończyć i o nim zapomnieć :) … Chyba wcisnę tą definicję na wikipedię :)