<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Marioosh&#039;s web diary</title>
	<atom:link href="http://marioosh.5dots.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://marioosh.5dots.pl</link>
	<description>or something like this</description>
	<lastBuildDate>Fri, 05 Mar 2010 09:17:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rails Template</title>
		<link>http://marioosh.5dots.pl/2010/03/rails-template/</link>
		<comments>http://marioosh.5dots.pl/2010/03/rails-template/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 09:17:43 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[WebDeveloping]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[rails templates]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=395</guid>
		<description><![CDATA[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&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Idąc za ciosem postanowiłem wydłubać własny szablonik do startu z aplikacjami. Jest on dostępny na <a href="http://github.com/marioosh/rails_template">githubie</a> i można śmiało z niego korzystać.<br />
Co robi szablonik?</p>
<p>- inicjuje repozytorium Git, dodaje niektóre miejsca i pliki do ignore&#8217;a po czym zatwierdza resztę.</p>
<p>- instaluje platformę testową RSpec, RSpec-Rails, Cucumber, Factory_Girl i Webrat.</p>
<p>- instaluje authologic i declarative_authorization,</p>
<p>- tworzy model do dodawania artykułów oraz cruda do niego.</p>
<p>- tworzy model użytkownika, ról  i sesji</p>
<p>- tworzy widoki dla artykułów, panel logowania i edycja profilu.</p>
<p>- tworzy dwie początkowe role: user i admin.</p>
<p>- nadaje uprawnienia:</p>
<p style="padding-left: 30px;">- gość może czytać artykuły, założyć konto i się zalogować,</p>
<p style="padding-left: 30px;">- użytkownik może się wylogować, dodać artykuł, edytować lub usunąć własny artykuł, edytować swój profil,</p>
<p style="padding-left: 30px;">- admin może wszystko.</p>
<p style="padding-left: 30px;">
<p>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.</p>
<p>Zapraszam do testowania i wyrażania swoich uwag.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2010/03/rails-template/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatyczny start czyli Rails Templates</title>
		<link>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/</link>
		<comments>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 10:01:16 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[WebDeveloping]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[rails templates]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=379</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <code>-m ścieżka_do_szablonu.rb</code>. Rails od razu po wykonaniu inicjacji projektu od razu uruchomi podany plik.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails my_app <span style="color: #660033;">-m</span> ~<span style="color: #000000; font-weight: bold;">/</span>szablon_startowy.rb</pre></div></div>

<p>tak samo jak URI, możemy uzywać URL:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rails my_app <span style="color: #660033;">-m</span> http:<span style="color: #000000; font-weight: bold;">//</span>marioosh.5dots.pl<span style="color: #000000; font-weight: bold;">/</span>szablon.txt</pre></div></div>

<p>(powyższy plik nie istnieje więc nie testujcie <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )<br />
ostatnim sposobem jest inicjacja szablonu przed odpowiednie zadanie <code>rake</code> z ustawienie zmiennej <code>LOCATION</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake rails:template <span style="color: #007800;">LOCATION</span>=~<span style="color: #000000; font-weight: bold;">/</span>szablon_startowy.rb</pre></div></div>

</p>
<p><span id="more-379"></span></p>
<p>
Jakie operacje możemy wykonywać w przygotowanym języku DSL? Może zacznemy od przykładu.<br />
Zacznijmy od wykonania kilku operacji opisanych w poprzednim artykule, mówiącym o wprowadzeniu aplikacji rails pod kontrolę Git.<br />
Przygotujmy nasz plik szablonu, ja go utworzłem w katalogu domowym i zapisałem go jako <code>5dots_template.rb</code><br />
Kroki które powinniśmy  wykonać:<br />
- inicjalizacja Git,<br />
- utworzenie pliku .gitignore w folderach <code>tmp</code> i <code>log</code><br />
- dodaniu kilku wpisów w głównym <code>.gitignore</code>.<br />
Plik powinien wyglądać tak:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># 5dots_szablon.rb</span>
git <span style="color:#ff3333; font-weight:bold;">:init</span>
git <span style="color:#ff3333; font-weight:bold;">:add</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;.&quot;</span>
<span style="color:#008000; font-style:italic;"># teraz dodajemy pliki .gitignore do folderów tmp i log.</span>
run <span style="color:#996600;">&quot;touch tmp/.gitignore log/.gitignore&quot;</span>
<span style="color:#008000; font-style:italic;">#oraz tworzymy plik .gitignore w głównym folderze z zawartością:</span>
file <span style="color:#996600;">'.gitignore'</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;-</span>GITIGNORE_FILE
.<span style="color:#9900CC;">DS_Store</span>
log<span style="color:#006600; font-weight:bold;">/*</span>.<span style="color:#9900CC;">log</span>
tmp<span style="color:#006600; font-weight:bold;">/**/*</span>
config<span style="color:#006600; font-weight:bold;">/</span>database.<span style="color:#9900CC;">yml</span>
db<span style="color:#006600; font-weight:bold;">/*</span>.<span style="color:#9900CC;">sqlite3</span>
doc<span style="color:#006600; font-weight:bold;">/</span>app
doc<span style="color:#006600; font-weight:bold;">/</span>api
GITIGNORE_FILE
&nbsp;
<span style="color:#008000; font-style:italic;"># teraz pozostaje tylko zatwierdzenie zmian do repozytorium:</span>
git <span style="color:#ff3333; font-weight:bold;">:commit</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;-a -m 'Initial commit'&quot;</span></pre></div></div>

</p>
<p>
W powyższym przykładnie poznaliśmy kilka komend języka DSL dla szablonów, wyjaśniam po kolei:<br />
- <code>git</code> odpowiada za komendy systemu kontroli wersji git,<br />
- <code>run</code> uruchamia polecenia konsolowe.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">run <span style="color:#996600;">&quot;rm -rf *&quot;</span></pre></div></div>

<p>(komenda ta robi porządki w folderze <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
- <code> file </code> &#8211; odpowiada za tworzenie plików i operacje na nich.
</p>
<p> Mając podstawy za sobą możemy przejść do szczegółowego opisania wszystkich poleceń, w końcu te trzy powyższe, może i zrobią dużo, to i tak nie wszystko.
</p>
<h3>Polecenie rake</h3>
<p>Za wykonywanie zadań rake jest odpowiedzialna komenda o tej samej nazwie ,dodatkowo możemy uruchomić skrypt jako superużytkownik, wtedy musimy podać parametr <code> :sudo => true</code>. Dodatkowo możemy podać parametry, których możemy używać podczas ręcznego użycia komendy <code>rake</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rake <span style="color:#996600;">&quot;gem:install&quot;</span>
<span style="color:#008000; font-style:italic;"># lub jako superuser</span>
rake <span style="color:#996600;">&quot;gem:install&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:sudo</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
<span style="color:#008000; font-style:italic;"># jeszcze jeden przykład:</span>
rake <span style="color:#996600;">&quot;gem:install&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:env</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'production'</span></pre></div></div>

</p>
<h3> Operacje na gemach</h3>
<p>
Komenda <code>gem</code> odpowiada za dodawanie gemów. Komenda dodaje odpowiedni wpis do pliku <code> config/envoirnment.rb</code>. Parametry, które mają być również dopisane (takie jak <code> :version, :lib, :source</code>) podajemy na końcu.<br />
Komenda nie istaluje gema, do tego celu musimy użyć odpowiedniego zadania rake (zgadnijcie którego <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
Kilka przykładów:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">'thoughtbot-factory_girl'</span>, <span style="color:#ff3333; font-weight:bold;">:lib</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'factory_girl'</span>, <span style="color:#ff3333; font-weight:bold;">:source</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'http://gems.github.com'</span>
gem <span style="color:#996600;">&quot;hpricot&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:version</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'0.6'</span>, <span style="color:#ff3333; font-weight:bold;">:source</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;http://code.whytheluckystiff.net&quot;</span>
gem <span style="color:#996600;">&quot;RedCloth&quot;</span></pre></div></div>

</p>
<h3>Instalowanie wtyczek (inaczej zwanymi pluginami) <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h3>
<p>
Aby zainstalować pluginy używamy z komendy <code>plugin</code>(mam wrażenie, że się domyślaliście &#8211; ot taki prosty ten język, wszystko jest domyślnie proste)<br />
Pluginy możemy instalować z svn, z gita lub z gita jako submoduły:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># instalowanie ze starego dobrego subversion:</span>
plugin <span style="color:#996600;">'svnowy_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:svn</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'svn://repozytorium/scieżka_do_plugina/trunk'</span>
<span style="color:#008000; font-style:italic;"># albo z nowego, jeszcze lepszego gita:</span>
plugin <span style="color:#996600;">'git_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:git</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'git://github.com/scieżka_do_plugina.git'</span>
<span style="color:#008000; font-style:italic;"># lub nawet jako submoduł gitowy (o tym będzie w następnym artykule)</span>
plugin <span style="color:#996600;">'git_plugin'</span>, <span style="color:#ff3333; font-weight:bold;">:git</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'git://github.com/scieżka_do_plugina.git'</span>, <span style="color:#ff3333; font-weight:bold;">:submodule</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span></pre></div></div>

</p>
<h3>Inicjalizery- czyli automatory, wewnątrz automatora <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p>
Jeżeli korzystamy z inicjalizerów, czyli skryptów, które są uruchamiane podczas startu aplikacji używamy komendy <code>initialize</code>. Właśnie ona, tworzy plik w folderze <code>cofnig/initializers</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">initialize <span style="color:#996600;">&quot;nowy_object.rb&quot;</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>NOWY_OBJECT_CONTENT
<span style="color:#9966CC; font-weight:bold;">class</span> <span style="color:#CC00FF; font-weight:bold;">Object</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> nowa_metoda
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Fajna ta nowa metoda, dobrze, że mogę z niej korzystać, zanim railsy się odpalą! &quot;</span>;
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
NOWY_OBJECT_CONTENT</pre></div></div>

<p>Dokładnie na tej samej zasadzie działają komendy <code>lib</code> i <code>vendor</code>, które tworzą pliki w folderach (odpowiednio) <code>/lib</code> i <code>/vendor</code>.
</p>
<h3>Pliki</h3>
<p>
Tworzenie nowych plików tworzymy na podobnej zasadzie jak poprzednia metoda, główną różnicą jest, że plik zostanie utworzony, wg folderu RAILS_ROOT a nie wewnątrz <code>initailizers</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">file <span style="color:#996600;">&quot;app/components/Klasa.rb&quot;</span>, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>KLASA
<span style="color:#9966CC; font-weight:bold;">class</span> Klasa
<span style="color:#9966CC; font-weight:bold;">end</span>
KLASA</pre></div></div>

<p>Komenda powyższa utworzy foldery <code>app/components</code> i umieści w nim plik <code>Klasa.rb</code>.
</p>
<h3>Zadania Rake</h3>
<p>
Komenda <code>rakefile</code> tworzy plik w folderze <code>/lib/tasks</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">rakefile <span style="color:#996600;">&quot;clear_all.rake&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    namespace <span style="color:#ff3333; font-weight:bold;">:clear</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#9966CC; font-weight:bold;">do</span>
            <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;Usuwamy wszystko!!!!! &quot;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Teraz to zadanie możemy uruchomić po wydaniu komendy: <code>rake clear:all</code>.
</p>
<h3>Generatory</h3>
<p>
Generatory możemy uruchomić komendą <code>generate</code> i podając listę argumentów. Możemy uzywać wszystkie generatory, które są standardowo w railsach, lub które uprzednio zainstalowaliśmy w formie pluginów lub gemów.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">generate<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:scaffold</span>, <span style="color:#996600;">&quot;person&quot;</span>, <span style="color:#996600;">&quot;name:string&quot;</span>, <span style="color:#996600;">&quot;email:string&quot;</span>, <span style="color:#996600;">&quot;password:string&quot;</span>
generate<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;rspec&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

</p>
<h3>Uruchamianie skryptów powłoki</h3>
<p>
Jak już wspomniałem można tego dokonać za pomocą komendy <code>run</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">run <span style="color:#996600;">&quot;rm -rf *&quot;</span></pre></div></div>

</p>
<h3>Dodawanie rutingów <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </h3>
<p>Jeżeli potrzebujemy dodatkowych wpisów w pliku <code>/config/routes.rb</code> wykonujemy je uruchamiając komendę <code>route</code></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">route <span style="color:#996600;">&quot;map.root :controller =&gt; :person&quot;</span></pre></div></div>

</p>
<h3>Zmiana folderu</h3>
<p>
Czasami wygodne jest przejście do innego folderu i w nim wykonanie kilku operacji, możemy to zrobić za pomocą komendy <code>inside</code>. Jako parametr podajemy folder docelowy i potem block.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">inside <span style="color:#996600;">&quot;config&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    run <span style="color:#996600;">&quot;cp database.yml database.orig.yml&quot;</span>
<span style="color:#008000; font-style:italic;"># linkowanie ustawień z innego projektu, bo oba mają działać na tej samej bazie</span>
    run <span style="color:#996600;">&quot;ln -s /projekty/super_rails_app/config/database.yml database.yml&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

</p>
<h3>Działanie zależne od odpowiedzi</h3>
<p>
Podczas wykonywania skryptu, możemy wprowadzić małą intekerakcję, np. zadać pytanie i zależnie od odpowiedzi wykonać dalej skrypt.<br />
Na przykład możemy zapytać o nazwę pliku. W tym celu wykonujemy komendę <code>ask</code>.<br />
W poniższym przykładzie pytamy sie o nazwę pliku dla pliku konfiguracji <code>.yml</code>. Skrypt również sprawdza, czy rozszerzenie zostało podane czy nie. jeżeli nie, to dodaje je do nazwy pliku.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">file_name = ask<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Podaj nazwę pliku konfiguracyjnego&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
file_name <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#996600;">&quot;.yml&quot;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> file_name.<span style="color:#9900CC;">index</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
file <span style="color:#996600;">&quot;/config/&quot;</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> filename, <span style="color:#006600; font-weight:bold;">&lt;&lt;</span>FILE_CONTENT
global_settings:
    color: <span style="color:#008000; font-style:italic;">#e343f3</span>
    font<span style="color:#006600; font-weight:bold;">-</span>size: 14px
FILE_CONTENT</pre></div></div>

</p>
<p>
Istnieją również uproszczone wersje powyższej metody, jedna oczekuje na odpowiedź &#8220;yes&#8221; druga na &#8220;no&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">&quot;RedCloth&quot;</span> <span style="color:#9966CC; font-weight:bold;">if</span> yes?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Zainstalować gem Red Cloth?&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">if</span> no?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Zainstalować gem Blue Cloth?&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span> 
    gem ask<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;Podaj nazwę gemu z edytorem, którym ma być użyty zamiast BlueCloth:&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">else</span>
    gem <span style="color:#996600;">&quot;BlueCloth&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#008000; font-style:italic;"># po wpisaniu 'no' zostanie uruchomione zapytanie o nazwe gem'a, w każdej innej sytuacji zostanie dodany BlueCloth</span></pre></div></div>

</p>
<h3>GIT &#8211; kochaj albo rzuć <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </h3>
<p>
Komenda <code>git</code> wykonduje komendy systemu kontroli wersji Git &#8211; jak nie trudno się domyśleć.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">git <span style="color:#ff3333; font-weight:bold;">:init</span>
git <span style="color:#ff3333; font-weight:bold;">:add</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;.&quot;</span>
git <span style="color:#ff3333; font-weight:bold;">:commit</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;-a -m 'Initial commit'&quot;</span>
git <span style="color:#ff3333; font-weight:bold;">:submodule</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;init&quot;</span></pre></div></div>

</p>
<h3>Rezume <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  </h3>
<p>Lista komend do wykorzystania:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">&nbsp;
gem<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
plugin<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
initializer<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
lib<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
vendor<span style="color:#006600; font-weight:bold;">&#40;</span>nazwa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
rakefile<span style="color:#006600; font-weight:bold;">&#40;</span>nawa_pliku, data=<span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#006600; font-weight:bold;">&amp;</span>block<span style="color:#006600; font-weight:bold;">&#41;</span>
generate<span style="color:#006600; font-weight:bold;">&#40;</span>co_generować, argumenty<span style="color:#006600; font-weight:bold;">&#41;</span>
run<span style="color:#006600; font-weight:bold;">&#40;</span>komenda<span style="color:#006600; font-weight:bold;">&#41;</span>
rake<span style="color:#006600; font-weight:bold;">&#40;</span>komenda, options=<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
route<span style="color:#006600; font-weight:bold;">&#40;</span>routing_code<span style="color:#006600; font-weight:bold;">&#41;</span>
inside<span style="color:#006600; font-weight:bold;">&#40;</span>folder<span style="color:#006600; font-weight:bold;">&#41;</span>
ask<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
yes?<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
no?<span style="color:#006600; font-weight:bold;">&#40;</span>pytanie<span style="color:#006600; font-weight:bold;">&#41;</span>
git<span style="color:#006600; font-weight:bold;">&#40;</span>parametry<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Teraz znająć już wszystkie komendy, możemy tworzyć własne szablone jako startowe ustawienia aplikacji. Jeżeli stworzymy coś nowego i fajnego warto się tym podzielić. Moża dodać je do projektu: <a href="http://github.com/jeremymcanally/rails-templates">Rails Templates</a>, który takie szablony zbiera. Możemy również skorzystać z instniejących tam szablonów.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/automatyczny-start-czyli-rails-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objęcie kontrolą wersji Git nowej aplikacji Rails</title>
		<link>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/</link>
		<comments>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 11:22:05 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=372</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Za każdym razem, gdy rozpoczynam pracę z projektem, muszę skonfigurować Git, aby repozytorium nie zawierało zbędnych plików.<br />
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.</p>
<p><code lang="bash"><br />
$ rails my_app<br />
$ cd my_app<br />
$ git init<br />
$ git status<br />
...<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
</code><span id="more-372"></span></p>
<p>Wydanie komendy <code>git statu</code>s pokazało nam całą strukturę aplikacji, która nie jest objęta kontrolą wersji. Zanim dodamy, powinniśmy wyłączyć kilka plików. Po pierwsze w repozytorium nie potrzebujemy plików dzienników („logów”), które znajdują się w folderze log. Aby je wyłączyć musimy stworzyć plik <code>.gitignore</code> i dodać linijkę <code>log/*.log</code>.<br />
<code lang="bash"><br />
$ echo „log/*.log” >>.gitignore </code>
<p>
Ponowne sprawdznie statusu pozwoli nam zauważyć zmianę, która zaszła w repozytorium.</p>
<p><code lang="bash"><br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Folder log zniknął z listy plików do dodania. Problem polega na tym, że klonująć potem repozytorium, otrzymamy jest bez tego folderu. Gdy uruchomimy aplikację, będą problemy z jej działaniem, ponieważ w tym folderze logi muszą być zapisywane.<br />
Naszym zadaniem zatem jest ustawienie repozytorium tak, aby sam folder znajdował się w nim, a ignorowana powinna być jedynie jego zawartość. Cała powyższa sytuacja dzieję się tak dlatego, że system Git nie śledzi pustych folderów. Wyjściem z tej sytuacji jest trick, polegającym na dodaniu pliku <code>.gitignore</code> w folderze <code>log</code>. Folder nie będzie pusty, a jednocześnie dodany plik, nie będzie miał wpływu na nasz projekt.</p>
<p><code lang="bash"><br />
$ touch log/.gitignore<br />
$ git status<br />
…<br />
# Untracked files:<br />
#   (use "git add <file>..." to include in what will be committed)<br />
#<br />
#       .gitignore<br />
#       README<br />
#       Rakefile<br />
#       app/<br />
#       config/<br />
#       db/<br />
#       doc/<br />
#       log/<br />
#       public/<br />
#       script/<br />
#       test/<br />
nothing added to commit but untracked files present (use "git add" to track)</code>
<p>
Na powyższym listingu widać, że osiągnęliśmy zamierzony efekt. Podobny problem występuje w folderze tmp, którego zawartość również powinna być ignorowana, nie ignorując samgo folderu. Nauczeni powyższym doświadczeniem dodajemy plik .gitignore w tym katalogu, a w <code>.gitignore</code> znajdującym się w głównym folderze aplikacji dopisujemy <code>tmp/**/*</code>. Co oznacza ignorowanie wszystkich plików nawet w podfolderach.<br />
Warto również zignorować dwa foldery z dokumentacją, które niepotrzebnie zajmują miejsce w repozytorium. Po dopisaniu dwóch linijek w głównym pliku <code>.gitignore</code>, powinien on zawierać taką treść:<br />
<code lang="bash"><br />
log/*.log<br />
tmp/**/*<br />
doc/api<br />
doc/app</code><br />
Teraz możemy dodać wszystkie pliki i wykonać początkowe zatwierdzenie.<br />
<code lang="bash"><br />
$ git add .<br />
$ git commit -a -m „rozpoczęcie pracy”<br />
</code></p>
<p>
W praktyce warto przenieść zewnętrzną bibliotekę rails, wewnątrz aplikacji, co pomoże w późniejszym uruchamianiu projektu na serwerze produkcyjnym. Aby to zrobić musimy wykonać komendę rake rails:freeze:gems co spowoduje przeniesienie całego frameworka, do folderu <code>vendor/rails</code>. Aplikacja przeszukuje ten folder w pierwszej kolejności i dopiero gdy go nie znajdzie, to szuka po zainstalowanych w systemie gemach.<br />
Po wykonaniu powyższej komendy wystarczy zatwierdzić kolejną zmianę.<br />
<code lang="bash"><br />
$ git add vendor<br />
$ git commit -a -m „Dodanie frameworku do fodleru vendors”</code><br />
Teraz nie pozostaje nic innego niż rozpoczęcie pracy nad projektem.
</p>
<p>W sumie nie stoi nic na przeszkodzie, aby powyższy zaimplikować w Rails Template, ale o tym jak to się robi, napiszę już niedługo.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/objecie-kontrola-wersji-git-nowej-aplikacji-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nowe trendy programowania</title>
		<link>http://marioosh.5dots.pl/2009/12/nowe-trendy-programowania/</link>
		<comments>http://marioosh.5dots.pl/2009/12/nowe-trendy-programowania/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 08:27:10 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[WebDeveloping]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=367</guid>
		<description><![CDATA[Patrząc na rynek pracy, a obecnie mam taką sytuację zawodową, że patrzeć muszę, zauważyłem pewną nową tendencję. Otóż jeszcze kilka lat temu, programistów szukało sie po języku programowania, w którym potrafi pracować. Szukało się programistów Java (ew. J2EE), PHP, C++ i innych. Po kilku latach, pojęcie języka programowania stało się zbyt ogólne, więc ogłoszenia stały [...]]]></description>
			<content:encoded><![CDATA[<p>Patrząc na rynek pracy, a obecnie mam taką sytuację zawodową, że patrzeć muszę, zauważyłem pewną nową tendencję. Otóż jeszcze kilka lat temu, programistów szukało sie po języku programowania, w którym potrafi pracować. Szukało się programistów Java (ew. J2EE), PHP, C++ i innych. Po kilku latach, pojęcie języka programowania stało się zbyt ogólne, więc ogłoszenia stały się bardziej specjalistyczne, uzywano nazw frameworków czy technologii bezpośrednio z tym językiem związane, np. widziałem takie warunki: Struts, JSF, Hibernate, JPA, J2ME (to javowe), albo takie: CakePHP, Zend, Symphony, Smarty (to php-owe).</p>
<p>W sumie nic dziwnego, języki rozwijają się, dołączone do nich biblioteki rosną w postępie logarytmicznym. Poza tym znajomość języka to raz, a znajomość konkretnego frameworka to dwa. Dając ogłoszenie o programisty JSF jakoby normalny staje się fakt, że potrafi on Javę samą w sobie.</p>
<p>Można by było przypuszczać, że obecny trend zmierza do jeszcze większej specjalizacji. Jednak tak nie jest. Znajomość frameworka czy narzędzia nadal pojawia się w ogłoszeniach. Jednak oprócz nich pojawiają się wymagania dotyczących technologii nie związanych bezpośrednio z językiem, np. AJAX. Przecież możemy wykorzystywać go zarówno w aplikacjach javowych, php-owych, rails-owych czy też innych. Poniżej przedstawiam listę nowych wymagań stwianych w ofertach pracy. Wg mnie technologie te staną się w ciągu kilku najbliższych lat bardzo ważne, więc zapoznanie się znimi już dziś może nam ułatwić poszukiwania pracy.</p>
<p>1. Widgety, Gadgety</p>
<p>Wiele stron i mechanizmów umożliwia wykorzsytywanie tych mini aplikacji. Widgety to jakby aplikacje wewnątrz innych aplikacji, które potrafią żyć własnym cyklem nie ingerując w mechanikę strony. Za to dodają witrynie wiele nowych finkcjonalności, których napisanie zajęłoby nam sporo czasu.</p>
<p>2. Integracja z serwisami społecznościowymi</p>
<p>Serwisy społecznościowe rosną jak grzyby po deszczu. Jedne bardziej popularne drugie mniej. Jedne oferują więcej usług i możliwości inne odwrotnie. W każdym razie już coraz mniej witryn można spotkać, które nie mają chociaż jednej malutkiej integracji z takim portalem społecznościowy. Wiele takich integracji z resztą polega na dodaniu do strony widgetu wspomnianego w punkcie pierwszym. Przeglądając witrynę spójrzmy, czy nie ma tam linka do takich serwisów jak Twitter, Blip, Flakier, Wykop, Dig-it, delicious czy też innych.</p>
<p>3. SEO</p>
<p>SEO jest ważnym elementem pozycjonowania strony więc wiedza na ten temat jest coraz bardziej wymagana.</p>
<p>4. Aplikacje mobilne IPhone &amp; Android</p>
<p>iPhone zrewolucjonizował rynek telefonów, uczynił rewolucję, która podłączyła wielu użytkowników do internetu. Przeglądamy strony jadąc tramwajem, słuchamy radia internetowego, czy też gramy w gry online. Oferty pracy dla programistów iPhone&#8217;a czy Androida pojawiają się coraz częściej. Moim zdaniem Android będzie się rozwijał szybciej bo nie jest blokowany jak to ma się z telefonem od Apple.Dostęp do tej technologi jest łatwiejszy, więc rynek będzie szedł w tą stronę.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/nowe-trendy-programowania/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Palarnia</title>
		<link>http://marioosh.5dots.pl/2009/12/palarnia/</link>
		<comments>http://marioosh.5dots.pl/2009/12/palarnia/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 07:57:37 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[palenie]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=361</guid>
		<description><![CDATA[Myślę, że taki fresk na suficie palarni daje wiele do myślenia 

]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">Myślę, że taki fresk na suficie palarni daje wiele do myślenia <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<a href="http://marioosh.5dots.pl/wp-content/uploads/File.jpeg"><img class="aligncenter size-medium wp-image-362" title="Palarnia" src="http://marioosh.5dots.pl/wp-content/uploads/File-222x300.jpg" alt="Palarnia" width="222" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/12/palarnia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql i Snow Leopard</title>
		<link>http://marioosh.5dots.pl/2009/11/mysql-i-snow-leopard/</link>
		<comments>http://marioosh.5dots.pl/2009/11/mysql-i-snow-leopard/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 08:42:14 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Ogólne]]></category>
		<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[MacOS X]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Snow Leopard]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=359</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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:<br />
<code lang="bash"><br />
cd  /Library/StartupItems/MySQLCOM<br />
sudo ./MySQLCOM start<br />
Could not find MySQL startup script!</code></p>
<p><code lang="bash"> </code><br />
aha! Poszedłem więc do <code>/usr/local</code> i zrobiłem link symboliczny<br />
<code lang="bash">sudo ln -s mysql* mysql</code><br />
Po ponownej próbie uruchomienia bazy danych otrzymałem komunikat:<br />
<code lang="bash">Starting MySQL database server</code><br />
Czyli wszystko ok.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/11/mysql-i-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kopiowanie z/na konsolę</title>
		<link>http://marioosh.5dots.pl/2009/11/kopiowanie-zna-konsole/</link>
		<comments>http://marioosh.5dots.pl/2009/11/kopiowanie-zna-konsole/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 07:44:20 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[MacOS X]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=357</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <code lang="bash">pbcopy</code> i <code lang="bash">pbpaste</code> odpowiedzialne są za wklejanie do i z pamięci podręcznej. Przekierowując output podczas np. listowania folderu na <code>pbcopy</code> mamy dostęp do tego listingu używając zwykłej fukncji &#8216;Wklej&#8217; dowolnego okienkowego programu. </p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/11/kopiowanie-zna-konsole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java, TMPDIR i MacOS X</title>
		<link>http://marioosh.5dots.pl/2009/10/java-tmpdir-i-macos-x/</link>
		<comments>http://marioosh.5dots.pl/2009/10/java-tmpdir-i-macos-x/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 09:48:44 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java.io.tmpdir]]></category>
		<category><![CDATA[jBoss]]></category>
		<category><![CDATA[MacOS X]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=354</guid>
		<description><![CDATA[Prawie cały dzień spędziłem na bezefektywnej próbie uruchomienia starego jBossa wygrzebanego z backup&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Prawie cały dzień spędziłem na bezefektywnej próbie uruchomienia starego jBossa wygrzebanego z backup&#8217;u na moim Macu. Po dłuższych analizach znalazłem przycznę. Otóż, podczas startu, serwer ustawiał zmienną <code lang="bash">java.io.tmpdir</code>. W systemie MacOS X w takim momenie zostaje utworzony nowy folder w <code>/private/var/folders</code>.Problemem jest to, że w nazwie tego folderu występują znaki plus <code>+</code>, które przez niektóre mechanizmy (np. Xerces) są traktowane jako spacje. Obejściem tego problemu jest ustawienie parametru <code>java.io.tmpdir</code> w <code>JAVA_OPTS</code>. <code lang="bash">JAVA_OPTS="-Djava.io.tmpdir=/tmp/"</code>. Zmienna ta w przypadku serwera jBoss jest ustawiana w pliku run.conf, więc należy go edytować i dopisać co podałem.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/10/java-tmpdir-i-macos-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Praca ze zdalnym repozytorium w GIT</title>
		<link>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/</link>
		<comments>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 22:03:19 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=346</guid>
		<description><![CDATA[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.


Inicjalizacja repozytorium

Przypuśćmy, [...]]]></description>
			<content:encoded><![CDATA[<p>Jak obiecałem w <a href="http://marioosh.5dots.pl/2009/06/gitowy-system-kontroli-wersji/">jednym z poprzednich artykułów</a> opiszę jak wygląda praca z projektem za pośrednictwem zdalnego repozytorium.
<p>
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.
</p>
<p><span id="more-346"></span></p>
<h3>Inicjalizacja repozytorium</h3>
<p>
Przypuśćmy, że posiadamy serwer w domenie <code>projekty.pl</code> i tam chcemy założyć nasze centralne repozytorium. W tym celu logujemy się na naszym serwerze:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ssh</span> projekty.pl 
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>repos
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> gittutor.git
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor.git
git <span style="color: #660033;">--bare</span> init
<span style="color: #7a0874; font-weight: bold;">exit</span></pre></div></div>

<p>To wszystko. Wszystkie powyższe komendy za pewne są jasne, tylko jedna może nasuwać pewne niepewności:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> git <span style="color: #660033;">--bare</span> init</pre></div></div>

<p>Co daje nam atrybut &#8211;bare? Otóż w naszym zdalnym repozytorium nie potrzebujemy kopii plików projektu tylko samą informację o repozytorium. To właśnie robi atrybut &#8211;bare &#8211; tworzy strukturę plików repozytorium, do którego możemy się połączyć tylko zdalnie bez plików projketu wewnątrz.
</p>
<p>
Po wylogowaniu się z naszego serwera wracam do naszego projektu na lokalnym komputerze.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>projekty<span style="color: #000000; font-weight: bold;">/</span>gittutor</pre></div></div>

<p>który jest już pod kontrolą wersji. Wydajemy komendę:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git remote add centrala <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git</pre></div></div>

<pre>git remote add</pre>
<p> dodaje nowe zdalne repozytorium,</p>
<pre> centrala</pre>
<p> nasza nazwa tego zdalnego repozytorium,</p>
<pre> ssh://projekty.pl/repos/gittutor.git</pre>
<p> url do tego zdalnego repozytorium.</p>
<p>Sprawdźmy, czy dodano nasze zdalne repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git remote show centrala
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: <span style="color: #7a0874; font-weight: bold;">&#40;</span>unknown<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

</p>
<h3>Wysyłanie plików na zdalny serwer</h3>
<p>
Do synchronizacji lokalnego repozytorium ze zdalnym wykonujemy za pomocą komend <code>git push</code> oraz <code>git pull</code>. Spóbujmy wysłać pliki do naszego zdalnego repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git push centrala master</pre></div></div>

<p>Jako pierwszy argument podajemy nazwę zdalnego repozytorium, jako drugi lokalny branch, który ma być wysłany.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Counting objects: <span style="color: #000000;">32</span>, done.
Delta compression using up to <span style="color: #000000;">2</span> threads.
Compressing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">22</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">22</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
Writing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">2.72</span> KiB, done.
Total <span style="color: #000000;">32</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
To <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      master -<span style="color: #000000; font-weight: bold;">&gt;</span> master</pre></div></div>

<p>W ten sposób umieściliśmy nasz projekt w zdalnym repozytorium.
</p>
<h3>Klonowanie repozytorium</h3>
<p>
Teraz gdy nasze pliki znajdują się w zdalnym repozytorium możemy je w prosty sposób sklonować (np. dla nowego członka zespołu pracującego nad projektem).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git clone <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
&nbsp;
Initialized empty Git repository <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>projekty<span style="color: #000000; font-weight: bold;">/</span>gittutor2<span style="color: #000000; font-weight: bold;">/</span>gittutor<span style="color: #000000; font-weight: bold;">/</span>.git<span style="color: #000000; font-weight: bold;">/</span>
remote: Counting objects: <span style="color: #000000;">32</span>, done.
remote: Compressing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">22</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">22</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
remote: Total <span style="color: #000000;">32</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
Receiving objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">32</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">32</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
Resolving deltas: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">4</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor
git remote show
&nbsp;
origin</pre></div></div>

<p>&#8220;origin&#8221; jest domyślną nazwa nadawaną dla zdalnego repozytorium. Zauważmy, że po klonowaniu w naszym projekcie jest ustawione zdalne repozytorium (to z którego klonowaliśmy pliki)  &#8211; nie musimy tego robić ręcznie. </p>
<p/>
<h3>Praca ze zdalnym repozytorium</h3>
<p>
Sprawdźmy jeszcze jeden ciekawy scenariusz &#8211; jeden z programistów zakłada własny projekt od zera i synchronizuje go z naszym zdalnym repozytorium.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> gittutor3
<span style="color: #7a0874; font-weight: bold;">cd</span> gittutor3
git init
git remote add origin <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;plik2&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> nowy_plik.txt
git add nowy_plik.txt
git commit <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;Dodano nowy plik&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#91;</span>master <span style="color: #7a0874; font-weight: bold;">&#40;</span>root-commit<span style="color: #7a0874; font-weight: bold;">&#41;</span> 577763f<span style="color: #7a0874; font-weight: bold;">&#93;</span> Dodano nowy plik
 <span style="color: #000000;">1</span> files changed, <span style="color: #000000;">1</span> insertions<span style="color: #7a0874; font-weight: bold;">&#40;</span>+<span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">0</span> deletions<span style="color: #7a0874; font-weight: bold;">&#40;</span>-<span style="color: #7a0874; font-weight: bold;">&#41;</span>
 create mode <span style="color: #000000;">100644</span> nowy_plik.txt</pre></div></div>

<p>Co zrobiłem? Utworzyłem nowy katalog, dodałem go do kontroli wersji (&#8217;init&#8217;) ustawiłem zdalne (dobrze nam znane <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) repozytorium. Następnie dodałem plik i skommitowałem go do lokalnego repozytorium.<br />
Teraz musimy wysłać naszego brancha na serwer. Po nazwie lokalnego musimy podać nazwę pod jaką nasz branch będzie widniał w zdalnym repozytorium (po dwukropku)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&gt;</span> git push origin master:fajny_projekt
&nbsp;
Counting objects: <span style="color: #000000;">3</span>, done.
Writing objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, <span style="color: #000000;">223</span> bytes, done.
Total <span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
To <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      master -<span style="color: #000000; font-weight: bold;">&gt;</span> fajny_projekt</pre></div></div>

</p>
<p>Teraz przełączmy się do folderu z którego rozpoczęliśmy pracę</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>gittutor 
<span style="color: #000000; font-weight: bold;">&gt;</span> git remote show centrala
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: master
  Remote branches:
    fajny_projekt new <span style="color: #7a0874; font-weight: bold;">&#40;</span>next fetch will store <span style="color: #000000; font-weight: bold;">in</span> remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    master        tracked
  Local ref configured <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #ff0000;">'git push'</span>:
    master pushes to master <span style="color: #7a0874; font-weight: bold;">&#40;</span>up to <span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>Widać, że zdalny branch jest widoczny &#8211; jednak w jaki sposób się na niego &#8216;przełączyć&#8217;? Najpierw musimy zaktualizować nasz mirror zdalnego repozytorium:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git fetch centrala
Unpacking objects: <span style="color: #000000;">100</span><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">3</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, done.
remote: Counting objects: <span style="color: #000000;">3</span>, done.
remote: Total <span style="color: #000000;">3</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>, reused <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>delta <span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
From <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor
 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>new branch<span style="color: #7a0874; font-weight: bold;">&#93;</span>      fajny_projekt -<span style="color: #000000; font-weight: bold;">&gt;</span> centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
&nbsp;
git remote show centrala
&nbsp;
<span style="color: #000000; font-weight: bold;">*</span> remote centrala
  URL: <span style="color: #c20cb9; font-weight: bold;">ssh</span>:<span style="color: #000000; font-weight: bold;">//</span>projekty.pl<span style="color: #000000; font-weight: bold;">/</span>repos<span style="color: #000000; font-weight: bold;">/</span>gittutor.git
  HEAD branch: master
  Remote branches:
    fajny_projekt tracked
    master        tracked
  Local ref configured <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #ff0000;">'git push'</span>:
    master pushes to master <span style="color: #7a0874; font-weight: bold;">&#40;</span>up to <span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>aktualnie skopiowaliśmy zdalny fajny projekt do lokalnego repozytorium.<br />
Można go zobaczyć na liście branchy</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-a</span>
<span style="color: #000000; font-weight: bold;">*</span> master
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>master</pre></div></div>

<p>Jeżeli teraz chcemy dokonać zmian na tym zdalnym repozytorium musimy utworzyć lokalnego brancha, który będzie śledził (tracking) ten zdalny.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git checkout <span style="color: #660033;">--track</span> <span style="color: #660033;">-b</span> fajny_projekt centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
Branch fajny_projekt <span style="color: #000000; font-weight: bold;">set</span> up to track remote branch fajny_projekt from centrala.
Switched to a new branch <span style="color: #ff0000;">'fajny_projekt'</span></pre></div></div>

<p>Utworzono lokalny branch pod nazwą &#8216;fajny_projekt&#8217; ze zdalnego &#8216;centrala/fajny_projekt&#8217; i od razu zaznaczono go jako aktywny sprawdźmy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #000000; font-weight: bold;">&gt;</span> git branch <span style="color: #660033;">-a</span> 
<span style="color: #000000; font-weight: bold;">*</span> fajny_projekt
  master
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>fajny_projekt
  remotes<span style="color: #000000; font-weight: bold;">/</span>centrala<span style="color: #000000; font-weight: bold;">/</span>master
&nbsp;
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #c20cb9; font-weight: bold;">ls</span>
nowy_plik.txt</pre></div></div>

</p>
<p>Mam nadzieję, że wszystko jest zrozumiałe, jest późno &#8211; a o tej godzinie to czasami sam nie do końca wiem co piszę <img src='http://marioosh.5dots.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . W razie nieścisłości proszę o słówko w komentarzach.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/08/praca-ze-zdolnym-repozytorium-w-git/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Spring jest GIT</title>
		<link>http://marioosh.5dots.pl/2009/08/spring-jest-git/</link>
		<comments>http://marioosh.5dots.pl/2009/08/spring-jest-git/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:23:57 +0000</pubDate>
		<dc:creator>Marioosh</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://marioosh.5dots.pl/?p=343</guid>
		<description><![CDATA[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). 
Jakie są powody takiej zmiany?  Jak mówi Ben Hale zrezygnowano z scentralizowanego systemu kontroli wersji dla taniego tworzenia prywatnych gałęzi w repozytorium, [...]]]></description>
			<content:encoded><![CDATA[<p>Zgodnie z zapowiedziami projekt DM Server prowadzony przez <a href="http://www.springsource.com">SpringSource</a>został zmigrowany z Subversion na GIT. Jest to już drugi projekt tej grupy, który przeniósł się na ten system kontroli wersji (pierwszy to <a href="http://grails.org/">Grails</a>). <span id="more-343"></span><br />
Jakie są powody takiej zmiany?  Jak mówi <a href="http://blog.springsource.com/author/benh/">Ben Hale</a> zrezygnowano z scentralizowanego systemu kontroli wersji dla taniego tworzenia prywatnych gałęzi w repozytorium, które jest w GIT. Jak zauważono od czasu migracji, nikt z członków grupy pracujących nad projektem nie tęskni za svn&#8217;em &#8211; więc migracja okazała się słuszną decyzją.</p>
]]></content:encoded>
			<wfw:commentRss>http://marioosh.5dots.pl/2009/08/spring-jest-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
