<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>blog.bstankowski.pl - freelance, web-dev &amp;amp; Mac blog</title><link>http://blog.bstankowski.pl/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Tue, 03 Feb 2015 16:23:16 +0100</lastBuildDate><generator>JoggerPL</generator><item><title>QuickTip: kolejka animacji z jQuery.each() i setTimeout()</title><link>http://blog.bstankowski.pl/2009/12/06/quicktip-kolejka-animacji-z-jquery-each-i-settimeout/</link><description>&lt;p&gt;Jakiś czas temu chciałem korzystając z funkcji &lt;code&gt;each()&lt;/code&gt; w jQuery wyświetlić serię załadowanych AJAXem elementów jeden po drugim, z opóźnieniem po każdym kolejnym. Trafiłem na kilka różnych sposobów, ale żaden mnie nie zadowalał. O wiele za bardzo komplikowały prostą sprawę.&lt;/p&gt;
&lt;p&gt;Dzisiaj przyszło mi do głowy rozwiązanie tak proste, że trudno uwierzyć, że nie wpadłem na nie od razu.&lt;/p&gt;
&lt;p&gt;Na przykładzie: pokazywanie elementów listy jeden po drugim, z przerwą 300ms po każdym. Wydaje się, że wystarczy &lt;code&gt;setTimeout()&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;$('li').each(function(){
        var $li = $(this);

        setTimeout(function() {
                $li.fadeIn(500);
        }, 300);
});
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ale to nie aż tak proste, bo w ten sposób wszystkie elementy pokażą się razem, z opóźnieniem 300ms od momentu wywołania akcji (np. klik na przycisk), a my chcemy uzyskać takie opóźnienie po animacji każdego kolejnego elementu.&lt;/p&gt;
&lt;p&gt;Z pomocą przychodzi parametr &lt;code&gt;index&lt;/code&gt; w funkcji &lt;code&gt;each()&lt;/code&gt; i odrobina logiki. :) Skoro nie chcę opóźnienia przed pokazaniem pierwszego elementu, a 300ms przerwy po każdym kolejnym tzn.,&amp;nbsp;że potrzebuję przerwy 0, 300, 600, 900ms, itd. licząc od momentu wywołania akcji. Najprościej zrobić to mnożąc index, czyli numer elementu (0-based) przez wartość opóźnienia.&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;$('li').each(function(index){
        var $li = $(this);
        
        setTimeout(function() {
                $li.fadeIn(500);
        }, index * delay);
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Takie proste. ;) Zobacz &lt;a href=&quot;http://bstankowski.pl/dev/eachAnimate/&quot;&gt;demo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;ins datetime=&quot;2009-12-06&quot;&gt;UPDATE:&lt;/ins&gt; A jednak nie do końca.&lt;/p&gt;
&lt;p&gt;Jak &lt;a href=&quot;http://riddle.pl/&quot;&gt;Riddle&lt;/a&gt; słusznie &lt;a href=&quot;http://blog.bstankowski.pl/2009/12/06/quicktip-kolejka-animacji-z-jquery-each-i-settimeout/#comm1473938&quot;&gt;zauważył w komentarzach&lt;/a&gt;, odpalanie wielu timerów jednocześnie może spowolnić przeglądarkę. W moim przykładzie nie robi to różnicy, bo elementów jest tylko kilka. Przetestowałem swoje demo dla 100 elementów listy - skok zużycia procesora to maksymalnie 15% w momencie startu, a przeglądarki w ogóle nie odczuwają różnicy (Firefox 3.5, Safari 4, Opera 10 /Mac). Być może przy jeszcze większej liczbie, bądź na słabszym sprzęcie dałoby się odczuć jakieś problemy.&lt;/p&gt;
&lt;p&gt;Tak czy inaczej, z pewnością lepiej i bezpieczniej unikać odpalania wielu setTimeout() jednocześnie.&lt;/p&gt;
</description><pubDate>Sun, 06 Dec 2009 15:40:43 +0100</pubDate><guid>http://blog.bstankowski.pl/2009/12/06/quicktip-kolejka-animacji-z-jquery-each-i-settimeout/</guid><category>JavaScript</category><category>QuickTip</category><category>Techblog</category><category>javascript jquery</category></item><item><title>Zmiana wartości inputa kursorami - plugin jQuery</title><link>http://blog.bstankowski.pl/2009/10/20/zmiana-wartosci-inputa-kursorami-plugin-jquery/</link><description>&lt;p&gt;Plugin powstał na wzór możliwości aplikacji (np. Photoshopa), które pozwalają sterować wartością liczbową pola za pomocą strzałek góra/dól lub za pomocą strzałek i klawisza Shift. Standardowo kursory ↑ i ↓ zmieniają wartość o 1, a z wciśniętym Shiftem o 10. To bardzo wygodne rozwiązanie przydaje się szczególnie, kiedy chcemy na bieżąco obserwować wpływ zmiany wartości pola na działanie aplikacji, prezentację wykresów itp.&lt;/p&gt;
&lt;h3&gt;Opcje i sposoby użycia&lt;/h3&gt;
&lt;p&gt;Parametry i dopuszczalne wartości:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;min&lt;/code&gt; i &lt;code&gt;max&lt;/code&gt; - minimalna i maksymalna wartość pola. Dopuszczalne wartości to:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;'false'&lt;/code&gt; - domyślna, bez ograniczeń wartości&lt;/li&gt;
&lt;li&gt;liczba - określenie wartości minimalnej i/lub maksymalnej&lt;/li&gt;
&lt;li&gt;&lt;code&gt;'default'&lt;/code&gt; - przybiera wartość atrybutu &lt;code&gt;value&lt;/code&gt; pola&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;step&lt;/code&gt; - o ile zmieni się wartość w polu po wciśnięciu kursora&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shiftStep&lt;/code&gt; - o ile zmieni się wartość w polu po wciśnięciu kursora z Shiftem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Podstawowa konfiguracja pozwala na zmianę wartości kursorami góra/dół o 1, a przytrzymując wciśnięty Shift o 10, bez ograniczeń wartości:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
$('#input-1').jInputValue()
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ustalanie wartości minimalnej i maksymalnej, jaką może osiągnąć pole:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;$('#input-2').jInputValue({
        min: 0,
        max: 15         
})&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ustalenie wartości minimalnej pola na równą wartości atrybutu &lt;code&gt;value&lt;/code&gt;. Analogicznie stosuje się dla wartości maksymalnej.&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;$('#input-3').jInputValue({
        min: 'default'
})&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ustalenie wartości kroku standardowego i z wciśniętym klawiszem Shift:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;$('#input-4').jInputValue({
        step: 3,
        shiftStep: 15
})&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Skrypt zabezpiecza pole przed wpisywaniem wartości innych niż liczbowe.&lt;/p&gt;
&lt;p&gt;W przypadku wklejenia tekstu pole przyjmie wartość:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;minimalną - jeśli jest zadeklarowana&lt;/li&gt;
&lt;li&gt;maksymalną - jeśli jest zadeklarowana&lt;/li&gt;
&lt;li&gt;0 - jeżeli nie ma &lt;code&gt;min&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt; ani atrybutu &lt;code&gt;value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;defaultValue&lt;/code&gt; - czyli wartość atrybutu &lt;code&gt;value&lt;/code&gt;, jeżeli istnieje&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pierwsze dwa przypadki mają też miejsce w sytuacji ręcznego wpisania lub wklejenia liczby przekraczającej dopuszczalną granicę.&lt;/p&gt;
&lt;h3&gt;Uwagi&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Plugin pozwala używać wartości &lt;code&gt;min&lt;/code&gt; i &lt;code&gt;max&lt;/code&gt; dla wartości pola, ale na chwilę obecną nie ma żadnego sprawdzania ich poprawności. To oznacza, że ustalenie wartości &lt;code&gt;min&lt;/code&gt; większej niż &lt;code&gt;max&lt;/code&gt;, zablokuje pole sprawiając, że w ogóle nie będzie dało się z niego korzystać. Nie pokażą się przy tym żadne komunikaty o błędzie. Dlatego koniecznie zwracaj uwagę na stosowane wartości parametrów.&lt;/li&gt;
&lt;li&gt;Wciśnięcie strzałki oczywiście przemieszcza kursor na początek lub koniec pola, a z wciśniętym Shiftem zaznacza jego zawartość. Nie wygląda to zbyt dobrze, ale te zachowania różnią się trochę między przeglądarkami i nie ingerowałem (przynajmniej na razie) w to zachowanie kursora.&lt;/li&gt;
&lt;li&gt;Opera skrótu Shift + kursor używa do przemieszczania focusa pomiędzy linkami i polami formularzy. Aby temu zapobiec potrzeba &lt;code&gt;e.preventDefault();&lt;/code&gt;, co blokuje standardową akcję przeglądarki. Wyjście z pola Tabem oczywiście działa.&lt;/li&gt;
&lt;li&gt;Wiem, że wykrywanie przeglądarki nie jest najbardziej elegancką metodą, ale różnice w zachowaniu Safari, IE, Firefoxa i Opery powodują, że aby szybko zmienić wartości przytrzymując klawisz (nie wciskając dla każdej zmiany o 1, a trzymając wciśnięty), Safari i IE potrzebują zdarzenia &lt;code&gt;keydown&lt;/code&gt;, a pozostałe &lt;code&gt;keypress&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Demo i download&lt;/h3&gt;
&lt;p&gt;Zobacz &lt;a href=&quot;http://bstankowski.pl/dev/plugins/jinputvalue/&quot;&gt;proste demo&lt;/a&gt; i &lt;a href=&quot;http://bstankowski.pl/dev/plugins/jinputvalue/visualize/&quot;&gt;przykład użycia&lt;/a&gt; w połączeniu z &lt;a href=&quot;http://www.filamentgroup.com/lab/jquery_visualize_plugin_accessible_charts_graphs_from_tables_html5_canvas/&quot;&gt;jQuery Visualize Plugin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pobierz &lt;a href=&quot;http://bstankowski.pl/dev/plugins/jinputvalue/js/jquery.jinputvalue.js&quot;&gt;plugin&lt;/a&gt; lub wersję &lt;a href=&quot;http://bstankowski.pl/dev/plugins/jinputvalue/js/jquery.jinputvalue.min.js&quot;&gt;minified&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Tue, 20 Oct 2009 13:09:13 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/10/20/zmiana-wartosci-inputa-kursorami-plugin-jquery/</guid><category>JavaScript</category><category>Komponenty</category><category>Techblog</category><category>jquery</category><category>plugin</category></item><item><title>Blokowanie Flasha, Safari i YouTube w HD z HTML5</title><link>http://blog.bstankowski.pl/2009/10/15/blokowanie-flasha-safari-i-youtube-w-hd-z-html5/</link><description>&lt;p&gt;Od jakiegoś czasu korzystam z pluginu &lt;a href=&quot;http://rentzsch.github.com/clicktoflash/&quot;&gt;ClickToFlash&lt;/a&gt; do przeglądarki Safari. Nigdy wcześniej nie stosowałem żadnych metod blokowania Flasha na stronach, ale liczba reklam i bannerów flashowych otaczających tekst, który chcę przeczytać, przekracza momentami wszelkie granice. A pomijając moje wrażenia i odczucia na ten temat, po prostu pożera zasoby.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;intro-img&quot; height=&quot;&quot; width=&quot;676&quot; alt=&quot;ClickToFlash&quot; src=&quot;http://bstankowski.pl/i/blog/clicktoflash/flash-placeholder.gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;ClickToFlash załatwia sprawę w bardzo prosty sposób, zastępując zawartość flashową placeholderem, nawet jeśli to cała strona wykonana w 100% we Flashu. Nie ma pobierania zbędnych danych, nie ma denerwujących reklam i bannerów. Od razu lepiej. A jeśli ClickToFlash zablokuje interesującą cię zawartość, wystarczy jedno kliknięcie i Flash się załaduje. Działa to na tyle szybko, że nie sprawia najmniejszego kłopotu podczas przeglądania stron.&lt;/p&gt;
&lt;p&gt;Nie ma problemu z automatycznym ładowaniem elementów z &lt;a href=&quot;http://www.mikeindustries.com/blog/sifr/&quot;&gt;sIFR&lt;/a&gt;, wystarczy wybrać taką opcję. Żeby nie blokować Flasha na ulubionych stronach, wystarczy dodać je do Whitelist.&lt;/p&gt;
&lt;p&gt;Do Firefoxa jest działający podobnie &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/433&quot;&gt;Flashblock&lt;/a&gt;, ale ClickToFlash daje jeszcze jedną możliwość.&lt;/p&gt;
&lt;h3&gt;YouTube z HTML5&lt;/h3&gt;
&lt;p&gt;Opcja &lt;em&gt;Load H.264 videos from YouTube&lt;/em&gt; powoduje, że plugin omija Flasha i odtwarza wideo korzystając z obsługiwanego przez przeglądarkę odtwarzania &lt;a href=&quot;http://pl.wikipedia.org/wiki/H.264/MPEG-4_AVC&quot;&gt;H.264&lt;/a&gt; (z tego formatu korzysta na YouTube np. iPhone), co dodatkowo znacznie poprawia ich jakość (screeny poniżej, wersja HD we Flashu i z wykorzystaniem ClickToFlash). Plugin nie odtwarza po prostu tego samego pliku w QuickTime, ale konstruuje własny URL do np. pliku .mp4 dużo lepszej jakości. Safari korzysta wtedy z QuickTime Playera, którego kontrolki ukrywają się podczas odtwarzania filmu.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;entry-img&quot; height=&quot;399&quot; width=&quot;676&quot; title=&quot;Wideo HD na YouTube - wersja Flash&quot; alt=&quot;Wideo HD na YouTube - wersja Flash&quot; src=&quot;http://bstankowski.pl/i/blog/clicktoflash/up-flash.jpg&quot;&gt; &lt;img class=&quot;entry-img&quot; height=&quot;393&quot; width=&quot;676&quot; title=&quot;Wideo HD na YouTube - wersja H.264 dzięki ClickToFlash&quot; alt=&quot;Wideo HD na YouTube - wersja H.264 dzięki ClickToFlash&quot; src=&quot;http://bstankowski.pl/i/blog/clicktoflash/up-h264.jpg&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ponadto, sam fakt blokowania zbędnego Flasha, jak i odtwarzanie za pomocą elementu &lt;a href=&quot;http://html5doctor.com/the-video-element/&quot;&gt;&lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt; HTML5&lt;/a&gt;, pozwala zaoszczędzić trochę wysiłku procesorowi i wydłuża pracę baterii w laptopie.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;entry-img&quot; height=&quot;145&quot; width=&quot;676&quot; title=&quot;HTML5 video tag&quot; alt=&quot;HTML5 video tag&quot; src=&quot;http://bstankowski.pl/i/blog/clicktoflash/video.gif&quot;&gt;&lt;/p&gt;
&lt;p&gt;Ekipa stojąca za ClickToFlash stara się (&lt;a href=&quot;http://rentzsch.github.com/clicktoflash/killers.html&quot;&gt;i prosi o wsparcie&lt;/a&gt;) wprowadzić tą metodę w innych serwisach, korzystających z Flasha do odtwarzania wideo.&lt;/p&gt;
</description><pubDate>Thu, 15 Oct 2009 13:00:15 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/10/15/blokowanie-flasha-safari-i-youtube-w-hd-z-html5/</guid><category>Flash</category><category>HTML5</category><category>safari</category><category>youtube</category></item><item><title>Kilka słów o referencjach w JavaScript</title><link>http://blog.bstankowski.pl/2009/09/22/kilka-slow-o-referencjach-w-javascript/</link><description>&lt;p&gt;Najkrócej mówiąc, referencja w językach programowania, to wskaźnik do miejsca, w którym znajduje się dany obiekt. Wszystkie obiekty znajdują się w pamięci i możemy mieć do nich dostęp poprzez referencję zapisaną w zmiennej, przy czym do każdego z nich może istnieć dowolna liczba referencji, zapisanych w różnych zmiennych.&lt;/p&gt;
&lt;p&gt;Ważne jest, aby zapamiętać, że każda zmiana wykonana na obiekcie zostanie odzwierciedlona w referencji do niego - referencja nie jest kopią obiektu, ale wskaźnikiem do niego. To tak, jakbyś odwoływał się do tego samego obiektu, tylko za pomocą innej nazwy.&lt;/p&gt;
&lt;p&gt;Najprościej wytłumaczyć to na przykładzie (przykłady polecam wykonywać w &lt;a href=&quot;http://getfirebug.com/console.html&quot;&gt;konsoli Firebuga&lt;/a&gt;).&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
// tworzymy obiekt i referencję do niego
var obiekt = {},
referencja = obiekt;
                
//wlasność obiektu przyjmuje jakąś wartość
obiekt.wlasnosc = 'wartosc wlasnosci';

console.log('obiekt: ' + obiekt.wlasnosc)

// zwróci wartość własności obiektu, do którego odnosi się referencja
console.log('referencja: ' + referencja.wlasnosc)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ale uważaj, bo to też niektórych myli:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;obiekt.wlasnosc = 'nowa wartosc';&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;to nie to samo co:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;obiekt = { wlasnosc: 'nowa wartosc' }&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Druga konstrukcja stworzy całkiem nowy obiekt! Zobacz:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var obiekt = { wlasnosc: 'wartosc poczatkowa wlasnosci obiektu' },
  ref = obiekt;
                
console.log('obiekt: ' + obiekt.wlasnosc)
console.log('referencja: ' + ref.wlasnosc)

obiekt = { wlasnosc: 'nowa wartosc' }

// obiekt.wlasnosc zawiera teraz 'nowa wartosc'
console.log('obiekt: ' + obiekt.wlasnosc)

// a ref.wlasnosc nadal zawiera referencję do starego obiektu,
console.log('referencja: ' + ref.wlasnosc)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Referencja nie tylko pozwala dostać się do obiektu, ale też go modyfikować:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var obiekt = {},
  referencja = obiekt;

referencja.nowawlasnosc = 'nowa wartosc'

console.log('obiekt: ' + obiekt.nowawlasnosc)
console.log('referencja: ' + referencja.nowawlasnosc)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Jak widać, dodaliśmy nową własność do obiektu, posługując się referencją.&lt;/p&gt;
&lt;p&gt;Pytanie, czy możemy używać wskaźników do zwykłych zmiennych, nie tylko do obiektów? Nie. W przeciwieństwie do np. C++, JavaScript pozwala tylko na tworzenie referencji do obiektów. Nie możemy skorzystać ze wskaźnika do innej zmiennej:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var zmienna = 'wartosc zmiennej', 
        referencjaDoZmiennej = zmienna;         

console.log('zmienna: ' + zmienna)
console.log('referencja: ' + referencjaDoZmiennej)

zmienna = 'ref'
console.log('Po zmianie wartosci zmiennej: ')
console.log('zmienna: ' + zmienna)
console.log('referencja: ' + referencjaDoZmiennej)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Bo wtedy, to po prostu przypisanie jej wartości.&lt;/p&gt;
&lt;p&gt;Tworząc referencję do innej referencji, w efekcie uzyskujemy drugi wskaźnik do tego samego obiektu:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var obiekt = { wlasnosc: 'wartosc poczatkowa wlasnosci obiektu' },
        ref = obiekt,
        ref2 = ref;
                
console.log('obiekt: ' + obiekt.wlasnosc)
console.log('referencja: ' + ref.wlasnosc)
console.log('referencja: ' + ref2.wlasnosc)

obiekt.wlasnosc = 'nowa wartosc';

console.log('obiekt: ' + obiekt.wlasnosc)
console.log('referencja: ' + ref.wlasnosc)
console.log('referencja: ' + ref2.wlasnosc)

ref2.wlasnosc = 'wartosc z 2. referencji';

console.log('obiekt: ' + obiekt.wlasnosc)
console.log('referencja: ' + ref.wlasnosc)
console.log('referencja: ' + ref2.wlasnosc)
&lt;/code&gt;
&lt;/pre&gt;
&lt;h3&gt;Łączenie łańcuchów&lt;/h3&gt;
&lt;p&gt;String to oczywiście też obiekt i możemy mieć do niego referencje. Ale w przypadku łańcuchów znaków trzeba uważać i pamiętać, że każda zmiana jego wartości, na przykład przez &lt;a href=&quot;http://pl.wikipedia.org/wiki/Konkatenacja&quot;&gt;konkatenację&lt;/a&gt;, skutkuje utworzeniem nowego obiektu. W takiej sytuacji referencja będzie wskazywała na łańcuch &lt;em&gt;przed&lt;/em&gt; zmianą.&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;javascript&quot;&gt;
var string = 'Referencje', 
ref = string;
                
console.log('string: ' + string)
console.log('referencja: ' + ref)

string += ' w JavaScript'

console.log('string: ' + string)
console.log('referencja: ' + ref)
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Pamiętaj, że te same zasady dotyczą też funkcji i tablic, to w końcu też obiekty.&lt;/p&gt;
&lt;p&gt;Warto zauważyć, że obiekty zawsze są przekazywane przez referencję i nie ma np. metody, która pozwalałaby skopiować cały obiekt.&lt;/p&gt;
</description><pubDate>Tue, 22 Sep 2009 16:26:28 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/22/kilka-slow-o-referencjach-w-javascript/</guid><category>JavaScript</category><category>Techblog</category></item><item><title>Gesty multi-touch w aplikacjach na OS X</title><link>http://blog.bstankowski.pl/2009/09/16/gesty-multi-touch-w-aplikacjach-na-os-x/</link><description>&lt;p&gt;Od ponad 3 miesięcy jestem szczęśliwym posiadaczem MacBooka Pro. Przejście z PC/Win na OS X odbyło się całkowicie bezboleśnie, ale myślę, że gdyby moim pierwszym makiem był np. iMac, nie byłoby to to samo. Notebooki Apple mają przewagę dzięki trackpadowi. Jest duży i bardzo wygodny, a multi-touch sprawia, że korzystanie z laptopa nabiera zupełnie nowego charakteru.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/multitouch.jpg&quot; alt=&quot;gesty multi-touch w Mac OS X&quot; height=&quot;200&quot; width=&quot;676&quot; class=&quot;intro-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Gesty multi-touch dostępne na trackpadach MacBooków to fantastyczna sprawa. Na tyle, że do tej pory nie kupiłem do laptopa myszki (a myślałem, że zrobię to od razu) i jestem przekonany, że bez niego nie wykorzystywałbym niektórych możliwości OS X tak intensywnie, a praca nie byłaby aż tak przyjemna.&lt;/p&gt;
&lt;p&gt;Czym są Multi-touch gestures wie raczej każdy zainteresowany tematem: pozwalają na wykonywanie na powierzchni gładzika gestów palcami, ale nie tylko jednym, a nawet czterema. Początek rozwoju tych gestów mieliśmy na ekranie iPhone'a: przewijanie palcem, powiększanie, pomniejszanie i obrót zdjęć dwoma palcami.&lt;/p&gt;
&lt;p&gt;W OS X jest kilka podstawowych gestów, bardzo fajnie zobrazowanych w preferencjach systemowych. Najważniejsze to:&lt;/p&gt;
&lt;h3&gt;2 palce:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;przewijanie w poziomie i pionie wszelkich suwaków, stron, obrazów itp.&lt;/li&gt;
&lt;li&gt;obrót obrazów&lt;/li&gt;
&lt;li&gt;powiększanie i pomniejszanie obrazków&lt;/li&gt;
&lt;li&gt;zoom in/out ekranu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3 palce:&lt;/h3&gt;
&lt;p&gt;Przesunięcie trzema palcami w lewo/prawo powoduje przewinięcie wstecz/dalej (w Finderze, przeglądarkach i innych aplikacjach, np. w Tweetie).&lt;/p&gt;
&lt;h3&gt;4 palce:&lt;/h3&gt;
&lt;p&gt;Przesunięcie czterema palcami:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;w górę - ukrywa okna (Exposé)&lt;/li&gt;
&lt;li&gt;w dół - pokazuje oka&lt;/li&gt;
&lt;li&gt;w lewo lub prawo: otwiera przełączanie aplikacji (tak jak cmd+tab)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Poza standardowym działaniem gestów, w niektórych aplikacjach mają one różne zastosowania. Te, które udało mi się zaobserwować, opisuję poniżej.&lt;/p&gt;
&lt;h4&gt;Firefox, Safari, Mail&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2 palce pinch (&quot;uszczypnięcie&quot;) - powiększanie&lt;/li&gt;
&lt;li&gt;2 palce expand (rozszerzenie palców) - pomniejszanie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Działają tak jak opcje Zoom In/Zoom Out w menu przeglądarek, zmiana rozmiaru tekstu w mailu.&lt;/p&gt;
&lt;h4&gt;Mail.app&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;3 palce do góry lub w lewo - poprzedni mail&lt;/li&gt;
&lt;li&gt;3 palce w dół lub w prawo - następny mail&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Firefox:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;3 palce do góry - początek strony&lt;/li&gt;
&lt;li&gt;3 palce w dół - koniec strony&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Open Office&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;3 do góry - poprzednia strona&lt;/li&gt;
&lt;li&gt;3 w dół - następna strona&lt;/li&gt;
&lt;li&gt;2 palce pinch/expand - sterowanie powiększeniem (suwak w prawym dolnym rogu okna)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;iCal&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;3 w prawo - następny miesiąc/tydzień/dzień (w zależności od aktualnego widoku)&lt;/li&gt;
&lt;li&gt;3 w lewo - jak wyżej, ale poprzedni&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;QuickTime&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2 palce expand - włącz fullscreen&lt;/li&gt;
&lt;li&gt;2 palce pinch - wyłącz fullscreen&lt;/li&gt;
&lt;li&gt;3 w prawo - koniec filmu&lt;/li&gt;
&lt;li&gt;3 w lewo - początek filmu&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Quick Look&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2 palce expand - włącz fullscreen&lt;/li&gt;
&lt;li&gt;2 palce pinch - wyłącz fullscreen&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Adobe Photoshop&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;poruszanie dwoma palcami zastępuje przesuwanie obszaru roboczego „rączką” (z wciśniętą spacją).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Preview.app&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2 palce - pinch/expand zmienia rozmiar zdjęcia lub miniaturek (jeśli wykonane nad paskiem bocznym)&lt;/li&gt;
&lt;li&gt;2 palce - obrót zdjęcia&lt;/li&gt;
&lt;li&gt;3 palce w lewo lub w górę - poprzednie zdjęcie&lt;/li&gt;
&lt;li&gt;3 palce w prawo lub w dół - następne zdjęcie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Znasz inne aplikacje, w których multi-touch się przydaje? Podziel się w komentarzu!&lt;/p&gt;
</description><pubDate>Wed, 16 Sep 2009 10:28:21 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/16/gesty-multi-touch-w-aplikacjach-na-os-x/</guid><category>Mac</category><category>os x</category><category>software</category><category>multi touch</category></item><item><title>Graficzny klient Subversion na Mac</title><link>http://blog.bstankowski.pl/2009/09/12/graficzny-klient-subversion-na-mac/</link><description>&lt;p&gt;&lt;a href=&quot;http://blog.bstankowski.pl/2009/09/07/stawiamy-repozytorium-subversion-w-os-x-leopard/&quot;&gt;Poprzednim razem&lt;/a&gt; postawiliśmy swoje pierwsze repozytorium Subversion na Maku. Poszło dobrze i da się pracować, ale wszystkie polecenia musimy wykonywać w konsoli, co jest mało wygodne. Na Windows używałem świetnego klienta &lt;a href=&quot;http://tortoisesvn.net/&quot;&gt;TortoiseSVN&lt;/a&gt;, w którym jednym kliknięciem można załatwić większość czynności w SVN. Dzisiaj zrobimy coś podobnego w OS X.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/svn/subversion.gif&quot; width=&quot;676&quot; height=&quot;120&quot; alt=&quot;Subversion w Mac OS X&quot; title=&quot;Subversion&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Najwygodniej jest używać SVN z poziomu katalogu, w którym pracujemy. Idealna sytuacja to taka, w której menu kontekstowe (pod prawym klawiszem) daje nam opcje dotyczące obsługi repozytorium Subversion, takie jak Commit czy Update. Nie ma nawet potrzeby otwierania żadnego okna klienta, jeśli nie chcemy tego robić.&lt;/p&gt;
&lt;h3&gt;Opcje SVN w menu kontekstowym&lt;/h3&gt;
&lt;p&gt;Potrzebna będzie nam najnowsza wersja &lt;a href=&quot;http://scplugin.tigris.org/servlets/ProjectDocumentList&quot;&gt;SCPlugin&lt;/a&gt;. Instalacja wygląda standardowo. Po jej zakończeniu wyloguj się z systemu i zaloguj ponownie.&lt;/p&gt;
&lt;p&gt;Teraz sprawdź menu pod prawym klawiszem. Opcja „więcej” powinna teraz zawierać dodatkowe pozycje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Subversion Commit&lt;/li&gt;
&lt;li&gt;Subversion Update&lt;/li&gt;
&lt;li&gt;Subversion (i submenu z opcjami innych poleceń)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeżeli ikony w repozytorium nie zmieniły się, spróbuj wybrać opcję Refresh Icons.&lt;/p&gt;
&lt;p&gt;To w zasadzie wystarczy do pracy. Spełnia najważniejszy wymóg: możemy łatwo wydawać polecenia SVN bez komend w konsoli.&lt;/p&gt;
&lt;h3&gt;Klient SVN&lt;/h3&gt;
&lt;p&gt;SCPlugin wystarczy, ale może przydać się coś więcej, do zarządzania repozytoriami. Oczywiście, najlepiej byłoby korzystać z oprogramowania z prawdziwego zdarzenia, jak polecane na każdym kroku &lt;a href=&quot;http://versionsapp.com&quot;&gt;Versions&lt;/a&gt;, czy jeszcze lepszy &lt;a href=&quot;http://www.zennaware.com/cornerstone/&quot;&gt;Cornerstone&lt;/a&gt;, ale zakładając, że budżet mamy ograniczony i nie potrzebne nam drogie aplikacje z licencją na 10 osób, na początek zadowolimy się czymś mniejszym i darmowym.&lt;/p&gt;
&lt;p&gt;Pierwszy klient, jaki wpadł mi w ręce, to &lt;a href=&quot;http://www.apple.com/downloads/macosx/development_tools/svnx.html&quot;&gt;svnX&lt;/a&gt; i na nim się teraz skupimy.&lt;/p&gt;
&lt;p&gt;Po uruchomieniu svnX nie wymaga poważnej konfiguracji. W preferencjach możesz ustawić katalog binarek Subversion, ale to pole powinno wypełnić się automatycznie.&lt;/p&gt;
&lt;p&gt;Aby dodać nowe repozytorium, w oknie Repositories kliknij w +, nadaj mu nazwę, podaj adres i ewentualnie potrzebne dane do logowania. Dwukrotne kliknięcie pozycji na liście dodanych repozytoriów otworzy okno dostępu do wybranego. Tam możesz zobaczyć wszystkie pliki, informacje o kolejnych rewizjach i komentarze.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/svn/svnx.jpg&quot; width=&quot;536&quot; height=&quot;305&quot; alt=&quot;svnX na Mac OS X&quot; title=&quot;svnX&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Darmowy hosting dla Subversion&lt;/h3&gt;
&lt;p&gt;Jako bonus, przetestujmy serwis udostępniający darmowy (nie tylko) hosting dla repozytoriów &lt;a href=&quot;http://www.projectlocker.com/&quot;&gt;ProjectLocker&lt;/a&gt;. Darmowe konto pozwala na dostęp 5 użytkownikom do przestrzeni 500MB, bez limitu obsługiwanych projektów.&lt;/p&gt;
&lt;p&gt;Po rejestracji logujemy się na &lt;a href=&quot;https://portal.projectlocker.com/&quot;&gt;portal.projectlocker.com&lt;/a&gt; i tworzymy nowy projekt (Subversion lub Git). Niech będzie na przykład &lt;strong&gt;blogdemo&lt;/strong&gt;. Dostęp do repo przez przeglądarkę jest pod adresem https://free1.projectlocker.com/uzytkownik/nazwa_projektu/svn Dodajemy repozytorium do svnX.&lt;/p&gt;
&lt;p&gt;W katalogu, w którym będziemy pracować, wykonujemy checkout (menu kontekstowe/Więcej/Subversion/checkout), wpisujemy potrzebne dane i mamy gotowe miejsce na pliki. &lt;img src=&quot;http://bstankowski.pl/i/blog/svn/checkout.jpg&quot; width=&quot;450&quot; height=&quot;478&quot; alt=&quot;Subversion checkout w Mac OS X&quot; title=&quot;SVN checkout&quot; class=&quot;entry-img&quot;&gt; Jeśli chcesz umieścić w nim już zaczęty projekt, skopiuj pliki do właśnie utworzonego katalogu i dodaj je do repozytorium (add). Teraz można już normalnie na nich pracować, a potem wysłać commitem do repozytorium na serwerze ProjectLocker. Wszystkie zmiany możemy zobaczyć wchodząc do repozytorium w svnX.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/svn/add.jpg&quot; width=&quot;450&quot; height=&quot;478&quot; alt=&quot;Subversion ADD w Mac OS X&quot; title=&quot;SVN add&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
</description><pubDate>Sat, 12 Sep 2009 13:16:53 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/12/graficzny-klient-subversion-na-mac/</guid><category>Mac</category><category>software</category><category>subversion</category><category>Techblog</category><category>os x</category></item><item><title>Wprowadzenie do Adobe AIR</title><link>http://blog.bstankowski.pl/2009/09/09/wprowadzenie-do-adobe-air/</link><description>&lt;p&gt;Na ostatnim roku studiów informatycznych przyszedł czas na napisanie pracy inżynierskiej; tematem mojej jest stworzenie &lt;abbr title=&quot;Rich Internet Applications&quot;&gt;RIA&lt;/abbr&gt; w środowisku Adobe AIR. Żeby trochę nadrobić braki w tej tematyce w polskim internecie i jednocześnie zmotywować siebie samego do pisania, będę opisywał tutaj niektóre etapy i ciekawostki z pracy z AIR. Ten post będzie teoretycznym wprowadzeniem do środowiska, dotyczącym charakterystyki pracy, dostępnych technologii i narzędzi.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/air.jpg&quot; alt=&quot;Adobe AIR&quot; height=&quot;200&quot; class=&quot;intro-img&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Czym właściwie jest Adobe AIR&lt;/h3&gt;
&lt;p&gt;Adobe Integrated Runtime to międzyplatformowe środowisko uruchomieniowe, które pozwala twórcom aplikacji WWW wykorzystać znane technologie internetowe, takie jak HTML, CSS, JavaScript, Flash i Flex, do tworzenia i wdrażania tzw. &lt;a href=&quot;http://pl.wikipedia.org/wiki/Rich_Internet_Application&quot;&gt;Rich Internet Applications&lt;/a&gt;. AIR stanowi swego rodzaju platformę między aplikacjami internetowymi uruchamianymi w przeglądarce, a możliwościami oprogramowania instalowanego na komputerze.&lt;/p&gt;
&lt;p&gt;Oznacza to tyle, że Adobe AIR pozwala za pomocą technologii czysto internetowych (wykorzystywanych do budowania stron www) tworzyć aplikacje, których możliwości, dzięki instalacji w systemie operacyjnym, zostają rozszerzone o dobrodziejstwa dostępu do systemu plików, schowka i integracji z pulpitem. Pozwala nam to, na przykład korzystać z technik, które są standardem w aplikacjach desktopowych, takich jak drag and drop między systemem i aplikacjami natywnymi, a aplikacjami AIR.&lt;/p&gt;
&lt;p&gt;Dodatkowym atutem jest fakt, że aplikacje AIR (w zasadzie, tak jak aplikacje internetowe) są niezależne od platformy (ale wymagają zainstalowanego środowiska AIR).&lt;/p&gt;
&lt;h3&gt;Technologie w AIR&lt;/h3&gt;
&lt;p&gt;Technologie, z jakich możemy korzystać w tym środowisku, są nam w większości doskonale znane:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML / XHTML&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript, AJAX i biblioteki JS&lt;/li&gt;
&lt;li&gt;DOM&lt;/li&gt;
&lt;li&gt;Flash, Flex, ActionScript 3&lt;/li&gt;
&lt;li&gt;PDF&lt;/li&gt;
&lt;li&gt;AIR API&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przyjrzyjmy się nieco bliżej.&lt;/p&gt;
&lt;h4&gt;HTML/CSS/JS&lt;/h4&gt;
&lt;p&gt;HTML i CSS są podstawą konstrukcji okna aplikacji AIR, tak samo, jak strony internetowej (o ile nie jest to Flash). I tu koniecznie trzeba zaznaczyć: AIR do renderingu HTMLa używa silnika &lt;a href=&quot;http://webkit.org/&quot;&gt;WebKit&lt;/a&gt;, znanego choćby z przeglądarki Safari. To oznacza, że pracujemy tylko i wyłącznie na jednym, w dodatku bardzo zaawansowanym silniku przeglądarki. Koniec problemów z uzyskaniem poprawnego wyglądu w różnych przeglądarkach, koniec kłopotów z IE.&lt;/p&gt;
&lt;p&gt;Do tego dostajemy narzędzie potężniejsze, niż zwykły silnik przeglądarki. WebKit znany jest ze swoich licznych, niestandardowych możliwości i eksperymentalnych atrybutów CSS.&lt;/p&gt;
&lt;h4&gt;JavaScript i AJAX&lt;/h4&gt;
&lt;p&gt;AIR zapewnia pełną obsługę JavaScript 1.5 i tutaj znowu znika konieczność używania przestarzałych lub niepoprawnych konstrukcji dla IE. W AIR możemy też korzystać z ulubionych bibliotek i frameworków JS, takich jak &lt;a href=&quot;http://jquery.com/&quot;&gt;jQuery&lt;/a&gt;, czy &lt;a href=&quot;http://developer.yahoo.com/yui/&quot;&gt;YUI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;AIR obsługuje synchroniczne i asynchroniczne wywołania XMLHttpRequest, a ponadto, w przeciwieństwie do przeglądarek, bez problemu i stosowania dodatkowych sztuczek, pozwala na wczytywanie danych AJAXem pomiędzy domenami (cross-domain).&lt;/p&gt;
&lt;h4&gt;Flash, Flex, ActionScript&lt;/h4&gt;
&lt;p&gt;Adobe Flash Player i WebKit są dodane do środowiska i zintegrowane na bardzo niskim poziomie. Ta integracja dotyczy też mechanizmów skryptowych, co pozwala na łączenie skryptów w różnych językach, np. JavaScript może wywoływać funkcje ActionScriptu i Flash Playera, a ActionScript wywoływać funkcje JS i manipulować modelem DOM dokumentu HTML.&lt;/p&gt;
&lt;p&gt;Flash nie będzie tematem moich wpisów – to zupełnie nie moja działka, więc zainteresowanych muszę odesłać do zagranicznych źródeł.&lt;/p&gt;
&lt;h4&gt;PDF&lt;/h4&gt;
&lt;p&gt;Znany nam wszystkim standard dokumentów. Jeśli Adobe Reader jest zainstalowany w systemie, aplikacje AIR mogą wykorzystywać wszystkie jego funkcje, dostępne z poziomu przeglądarki internetowej.&lt;/p&gt;
&lt;h4&gt;AIR API&lt;/h4&gt;
&lt;p&gt;Oprócz standardowych technologii internetowych, AIR udostępnia pokaźny zestaw wywołań API, dostępnych z poziomu JavaScriptu i ActionScriptu. Niektóre z dostępnych funkcji to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API plikowego wejścia-wyjścia&lt;/li&gt;
&lt;li&gt;pełne natywne interfejsy API do obsługi menu i okien (z pełną kontrolą wyglądu okien aplikacji)&lt;/li&gt;
&lt;li&gt;wykrywanie stanu połączenia z usługami, za pomocą wywołań API online/offline&lt;/li&gt;
&lt;li&gt;aktualizacje aplikacji&lt;/li&gt;
&lt;li&gt;API obsługi wbudowanej bazy SQLite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przeróżne wywołania API będą omawiane w kolejnych postach, podczas realizacji konkretnych przykładów.&lt;/p&gt;
&lt;h4&gt;SQLite&lt;/h4&gt;
&lt;p&gt;Środowisko AIR posiada wbudowaną bazę danych &lt;a href=&quot;http://www.sqlite.org/&quot;&gt;SQLite&lt;/a&gt;, która jest jednym z czterech sposobów magazynowania danych. Można w niej bez problemów operować na tabelach w identyczny sposób jak np. w bazie na serwerze www. SQLite to kompaktowa baza danych o otwartym kodzie źródłowym, rozprowadzana na wolnej licencji, która nie wymaga konfiguracji. Wszystkie dane są przechowywane w jednym pliku.&lt;/p&gt;
&lt;h3&gt;Instalacja&lt;/h3&gt;
&lt;p&gt;Do uruchamiania aplikacji AIR wystarczy &lt;a href=&quot;http://get.adobe.com/air/&quot;&gt;instalacja środowiska&lt;/a&gt;. My jednak do tworzenia aplikacji potrzebujemy czegoś więcej. W następnej kolejności pobierz &lt;a href=&quot;http://www.adobe.com/products/air/tools/sdk/&quot;&gt;AIR SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Instalacja SDK w zasadzie nie jest wymagana, zależy na czym chcesz pracować. SDK jest konieczne tylko, jeśli chcesz korzystać z narzędzi konsolowych:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;ADT&lt;/em&gt; – uruchamianie i testowanie aplikacji AIR bez instalowania&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ADT&lt;/em&gt; – służy do pakowania i podpisywania aplikacji w celu przygotowania do dystrybucji.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lepszym wyjściem będzie skorzystanie z IDE posiadających wsparcie dla środowiska AIR, np. darmowej &lt;a href=&quot;http://www.aptana.com/studio/download&quot;&gt;Aptany&lt;/a&gt; z pluginem AIR lub &lt;a href=&quot;http://www.adobe.com/products/air/tools/ajax/&quot;&gt;dodatku do Dreamweavera&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Jeśli jednak chcesz zainstalować SDK, polecam darmowy &lt;a href=&quot;http://www.myacrobatpdf.com/8829/adobe-air-for-javascript-developers-pocket-guide.html&quot;&gt;Adobe AIR for JavaScript Developers Pocket Guide&lt;/a&gt; do ściągnięcia. Tam znajdują się dokładne instrukcje dot. instalacji i obsługi ADL i ADT. W razie problemów, dajcie mi znać, mogę opisać instalację krok po kroku, jeśli będzie taka potrzeba.&lt;/p&gt;
&lt;p&gt;Ja będę pracował na Aptanie i to samo doradzam, jeżeli masz ochotę śledzić następne wpisy na ten temat i wykonywać przykłady.&lt;/p&gt;
&lt;h3&gt;Wstęp do tworzenia aplikacji&lt;/h3&gt;
&lt;p&gt;Teraz wprowadzenie do kilku podstawowych spraw podczas tworzenia aplikacji w AIR i rozwiązań, z których będziemy korzystać.&lt;/p&gt;
&lt;h4&gt;application.xml&lt;/h4&gt;
&lt;p&gt;Podstawą aplikacji jest plik XML zawierający jej konfigurację, określający takie informacje jak nazwa aplikacji i jej głównego pliku, wersja i autor, właściwości okna: np. rozmiar, możliwość maksymalizacji, ikony itp. Przykładowy plik application.xml może wyglądać tak:&lt;/p&gt;
&lt;pre&gt;
&lt;code class=&quot;xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;application xmlns=&quot;http://ns.adobe.com/air/application/1.5&quot;&amp;gt;
        &amp;lt;id&amp;gt;com.adobe.example.helloAIR&amp;lt;/id&amp;gt;
        &amp;lt;filename&amp;gt;helloAIR&amp;lt;/filename&amp;gt;
        &amp;lt;name&amp;gt;helloAIR&amp;lt;/name&amp;gt;
        &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
        &amp;lt;description&amp;gt;Pierwsza aplikacja AIR&amp;lt;/description&amp;gt;
        &amp;lt;initialWindow&amp;gt;
                &amp;lt;content&amp;gt;helloAIR.html&amp;lt;/content&amp;gt;
                &amp;lt;title&amp;gt;Pierwsza aplikacja AIR&amp;lt;/title&amp;gt;
                &amp;lt;systemChrome&amp;gt;standard&amp;lt;/systemChrome&amp;gt;
                &amp;lt;transparent&amp;gt;false&amp;lt;/transparent&amp;gt;
                &amp;lt;visible&amp;gt;true&amp;lt;/visible&amp;gt;
                &amp;lt;minimizable&amp;gt;true&amp;lt;/minimizable&amp;gt;
                &amp;lt;maximizable&amp;gt;true&amp;lt;/maximizable&amp;gt;
                &amp;lt;resizable&amp;gt;true&amp;lt;/resizable&amp;gt;
        &amp;lt;/initialWindow&amp;gt;
        &amp;lt;icon&amp;gt;
                &amp;lt;image16x16&amp;gt;icons/AIRApp_16.png&amp;lt;/image16x16&amp;gt;
                &amp;lt;image32x32&amp;gt;icons/AIRApp_32.png&amp;lt;/image32x32&amp;gt;
        &amp;lt;/icon&amp;gt;
&amp;lt;/application&amp;gt;&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Podczas tworzenia nowego projektu w Aptanie, kreator przeprowadzi cię przez proces tej konfiguracji.&lt;/p&gt;
&lt;h4&gt;Wywołania AIR API&lt;/h4&gt;
&lt;p&gt;Podstawą działania na oknie aplikacji z poziomu JavaScriptu jest obiekt &lt;code&gt;window&lt;/code&gt;. JS ma swoje własne obiekty &lt;code&gt;document&lt;/code&gt; i &lt;code&gt;window&lt;/code&gt;, ale może wchodzić w interakcje ze środowiskiem AIR za pomocą właściwości okna: &lt;code&gt;runtime&lt;/code&gt;, &lt;code&gt;nativeWindow&lt;/code&gt; i &lt;code&gt;htmlLoader&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;runtime&lt;/code&gt; – daje dostęp do AIR API, pozwala tworzyć nowe obiekty AIR&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nativeWindow&lt;/code&gt; – dostęp do bieżącej instancji klasy NativeWindow, kontrolującej okno aplikacji&lt;/li&gt;
&lt;li&gt;&lt;code&gt;htmlLoader&lt;/code&gt; – dostęp do bieżącej instancji klasy HTMLLoader, sterującej wczytywaniem i wyświetlaniem treści. Jedno okno może zawierać więcej niż jeden obiekt htmlLoader.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Większość wywołań API AIR i Flash Playera znajduje się w pakietach, podobnie jak biblioteki JS wykorzystują przestrzenie nazw i pakiety, co pomaga utrzymać porządek i uniknąć konfliktów nazw. Każde wywołanie API wymaga podania pełnej ścieżki i nazwy pakietu co, jak zobaczymy, może być bardzo kłopotliwe i czasochłonne.&lt;/p&gt;
&lt;p&gt;Np. &lt;code&gt;trace&lt;/code&gt; (działające podobnie do &lt;code&gt;console.log()&lt;/code&gt; w &lt;a href=&quot;http://getfirebug.com/&quot;&gt;Firebugu&lt;/a&gt;), nie znajduje się w żadnym pakiecie, ale, ponieważ wszystkie polecenia są dostępne przez właściwość &lt;code&gt;window.runtime&lt;/code&gt;, muszą zostać poprzedzone tym ciągiem.&lt;/p&gt;
&lt;p&gt;Dlatego, polecenie trace wydłuża się do &lt;code&gt;window.runtime.trace('treść')&lt;/code&gt;, a np. stworzenie w JS nowej instancji klasy &lt;code&gt;File()&lt;/code&gt;, do pracy z systemem plików, to już:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var plik = new window.runtime.flash.filesystem.File();&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Wyobrażasz sobie z pewnością, że korzystanie z tak długich komend będzie bardzo męczące, a kod zrobi się nieczytelny. Dlatego, aby ułatwić nam pracę, ludzie z Adobe stworzyli plik AIRAliases.js, który dołączany jest standardowo do nowo utworzonego projektu w Aptanie.&lt;/p&gt;
&lt;p&gt;AIRAliases.js zawiera aliasy do najczęściej używanych poleceń, skracając je przy tym znacznie. I tak, wracając do poprzedniego przykładu, tworzenie nowej instancji File() skraca nam się do:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var plik = new air.File();&lt;/code&gt;
&lt;/pre&gt;
&lt;h3&gt;Debugowanie aplikacji&lt;/h3&gt;
&lt;p&gt;Przyzwyczajonych do pracy z Firebugiem (i nie tylko tych) z pewnością ucieszy fakt, że w AIR mamy podobne narzędzie, zwane AIR Introspector. Pozwala on, między innymi przeglądać i edytować drzewo DOM dokumentu, wyszukiwać tekst w kodzie źródłowym, przeglądać obiekty XMLHttpRequest i ich właściwości, a do tego raportuje błędy i wyświetla komunikaty z polecenia &lt;code&gt;air.trace()&lt;/code&gt;. Aby skorzystać z Introspectora, dołącz plik &lt;code&gt;AIRIntrospector.js&lt;/code&gt; do swojego dokumentu.&lt;/p&gt;
&lt;p&gt;Teorii na razie wystarczy. Następnym razem napiszemy pierwszą działającą aplikację. Więcej informacji o instalacji środowiska AIR i nie tylko, na stronach &lt;a href=&quot;http://help.adobe.com/pl_PL/AIR/1.5/devappsflash/WS53995f63097985ed-2166da0011d5b98f54d-8000.html&quot;&gt;help.adobe.com&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Wed, 09 Sep 2009 14:17:36 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/09/wprowadzenie-do-adobe-air/</guid><category>AIR</category><category>CSS</category><category>HTML/XHTML</category><category>JavaScript</category><category>software</category><category>Techblog</category><category>adobe air javascript css xhtml</category></item><item><title>Stawiamy repozytorium Subversion w OS X Leopard</title><link>http://blog.bstankowski.pl/2009/09/07/stawiamy-repozytorium-subversion-w-os-x-leopard/</link><description>&lt;p&gt;W ramach dalszego przystosowywania OS X do moich potrzeb i uzupełniania narzędzi, nadszedł czas na &lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;. W skrócie, SVN to &lt;a href=&quot;http://gajdaw.pl/varia/subversion-system-kontroli-wersji-tutorial/p1.html&quot;&gt;system kontroli wersji&lt;/a&gt;. Pozwala wielu osobom pracować na tych samych plikach, bez obawy o nadpisanie wyników czyjejś edycji. Umożliwia śledzenie zmian a w razie konfliktu pomoże naprawić problem i np. powrócić do stanu wcześniejszego.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/svn/subversion.gif&quot; alt=&quot;Subversion&quot; height=&quot;120&quot; class=&quot;intro-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;W Leopardzie Subversion jest już zainstalowane, ale i tak trzeba się trochę natrudzić, aby postawić swoje repozytorium w systemie. Poniższe kroki trzeba wykonać w Terminalu. Jeśli bardzo nie lubisz pracy w konsoli nie ma się czego bać, wystarczy, że skopiujesz te polecenia i ewentualnie zmienisz odpowiednie nazwy i ścieżki na własne.&lt;/p&gt;
&lt;h3&gt;Przygotowanie miejsca na repozytoria&lt;/h3&gt;
&lt;p&gt;Na początek tworzymy katalog, w którym znajdą się repozytoria naszych aplikacji.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo mkdir /usr/local/svn&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Zmieniamy właściciela tego katalogu tak, aby mieć do niego dostęp z poziomu przeglądarki internetowej:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo chown -R www:www /usr/local/svn&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Następny krok jest opcjonalny, ale zakładam, że chcesz zabezpieczyć swoje repozytorium hasłem. Jeśli nie, pomiń tą komendę. Do naszego przykładu wystarczy prosta autentykacja, ale musisz pamiętać, że hasło zostanie tylko słabo zaszyfrowane, a przesył danych nie będzie zabezpieczony wcale.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo htpasswd -cm /etc/apache2/svn-auth-file uzytkownik&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Oczywiście zastąp „uzytkownik” swoją nazwą użytkownika. Będziesz musiał podać hasło administratora, a następnie 2 razy hasło użytkownika. Aby dodać kolejnych userów, powtórz to polecenie pomijając przełącznik -c (tworzenie pliku).&lt;/p&gt;
&lt;p&gt;Przejdźmy do konfiguracji Apache'a.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;cd /etc/apache2/other
sudo pico svn.conf&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Zamiast Pico możesz oczywiście użyć dowolnego edytora tekstu. Do utworzonego pliku pliku wklej:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so

&amp;lt;Location /svn&amp;gt;
    DAV svn
    
    SVNParentPath /usr/local/svn
    
    AuthType Basic
    AuthName &quot;Subversion repository&quot;
    AuthUserFile /etc/apache2/svn-auth-file
    Require valid-user
&amp;lt;/Location&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Gdzie za &lt;code&gt;/usr/local/svn&lt;/code&gt; wstaw swoją ścieżkę do repozytorium a zamiast &lt;code&gt;/etc/apache2/svn-auth-file&lt;/code&gt;, ścieżkę do pliku z hasłami, jeżeli podałeś inną niż w przykładzie. Jeżeli wcześniej pominąłeś tworzenie hasła, teraz możesz opuścić 4 linijki od &lt;code&gt;AuthType&lt;/code&gt; do &lt;code&gt;Require valid-user&lt;/code&gt;. Zapisz plik i wyjdź z pico (^O i ^X).&lt;/p&gt;
&lt;p&gt;Restart Apache'a:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo apachectl graceful&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Pierwszą część mamy za sobą. Teraz przygotujemy zestaw katalogów, które znajdą się w każdym repozytorium. Standardowo są to 3 katalogi: trunk, tags i branches.&lt;/p&gt;
&lt;p&gt;Wybierz sobie lokalizację, w której chcesz zapisać ten szablon. Ja pracuję z serwerem &lt;a href=&quot;http://www.mamp.info/en/index.html&quot;&gt;MAMP&lt;/a&gt;, dlatego większość projektów trzymam w katalogu htdocs i tam też utworzę swój szablon svn-default (oczywiście nazwij go jak chcesz).&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;mkdir /Applications/MAMP/htdocs/svn-default
mkdir /Applications/MAMP/htdocs/svn-default/trunk
mkdir /Applications/MAMP/htdocs/svn-default/branches
mkdir /Applications/MAMP/htdocs/svn-default/tags&lt;/code&gt;
&lt;/pre&gt;
&lt;h3&gt;Pierwsze repozytorium&lt;/h3&gt;
&lt;p&gt;Dodajmy repozytorium dla pierwszej aplikacji w obszarze svn, jaki utworzyliśmy na początku (w &lt;code&gt;/usr/local/svn&lt;/code&gt;). Zastąp „aplikacja” swoją nazwą aplikacji.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo svnadmin create /usr/local/svn/aplikacja&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Teraz sprawdź, czy wszystko działa wchodząc w przeglądarce na adres http://localhost/svn/aplikacja, gdzie &lt;code&gt;aplikacja&lt;/code&gt; to nazwa, której użyłeś w kroku wcześniejszym. Jeśli zabezpieczyłeś swoje repozytorium, podaj login i hasło. Widzisz nagłówek &lt;em&gt;Revision 0: /&lt;/em&gt;? To znaczy, że wszystko gra. Jeśli nie... musisz sprawdzić wszystkie poprzednie kroki, może gdzieś wkradła się literówka albo podałeś złą ścieżkę.&lt;/p&gt;
&lt;p&gt;Musimy jeszcze nadać prawo do zmiany plików:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;sudo chown -R www:www /usr/local/svn&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Następnie umieścimy podstawowy układ katalogów w naszym repozytorium.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn import -m &quot;svn-default import&quot; /Applications/MAMP/htdocs/svn-default http://localhost/svn/aplikacja&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Po podaniu hasła powinieneś zobaczyć coś takiego:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;Adding         /Applications/MAMP/htdocs/svn-default/trunk
Adding         /Applications/MAMP/htdocs/svn-default/branches
Adding         /Applications/MAMP/htdocs/svn-default/tags
Commited revision 1.&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Treść znajdująca się po przełączniku -m to komentarz do rewizji, możesz tam wpisać co chcesz. Najlepiej opisać krótko co w danej rewizji się zmieniło. Teraz w przeglądarce zobaczysz &lt;em&gt;Revision 1:/&lt;/em&gt; i linki do 3 utworzonych katalogów.&lt;/p&gt;
&lt;p&gt;Kolejny krok to dodanie działającej wersji aplikacji, nad którą pracujemy, do katalogu trunk w repozytorium. W moim przypadku znajduje się ona w htdocs i tam też chcę kontynuować pracę. Wykonujemy &lt;code&gt;svn import&lt;/code&gt; do katalogu trunk:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn import -m &quot;import aplikacji&quot; /Applications/MAMP/htdocs/aplikacja http://localhost/svn/aplikacja/trunk&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Teraz listing plików dodawanych do repozytorium zakończy się &lt;code&gt;Committed revision 2&lt;/code&gt; a zobaczyć je możesz w przeglądarce, po wejściu w trunk. Ostatnia sprawa to pierwszy checkout, jaki musimy wykonać na plikach. Ja chcę kontynuować pracę w tej samej lokalizacji co przed podłączeniem SVN, więc ten stary katalog trzeba najpierw usunąć. Dla bezpieczeństwa przed pierwszą próbą warto zrobić sobie kopię, ale nic nie powinno tutaj pójść nie tak. Katalog usuń w Finderze lub w Terminalu:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;rm -r /Applications/MAMP/htdocs/aplikacja&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Teraz przejdź do katalogu nadrzędnego, w którym znajdzie się aplikacja, (w tym przypadku to htdocs) i zrobimy checkout:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;cd /Applications/MAMP/htdocs/&lt;/code&gt;
&lt;/pre&gt;
&lt;pre&gt;
&lt;code&gt;svn checkout http://localhost/svn/aplikacja/trunk aplikacja&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;aplikacja&lt;/code&gt; to nazwa katalogu, który zostanie utworzony. Wszystko powinno pojawić się na miejscu. Dobra robota, teraz możesz zacząć pracować nad swoją aplikacją z Subversion.&lt;/p&gt;
&lt;h3&gt;Podstawowe polecenia SVN&lt;/h3&gt;
&lt;p&gt;Poniższe polecenia musisz wykonywać w Terminalu znajdując się w katalogu z aplikacją. Przed wpisaniem któregokolwiek z nich, najpierw wykonaj:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;cd /ścieżka/do/katalogu&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;W naszym przykładzie będzie to:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;cd /Applications/MAMP/htdocs/aplikacja&lt;/code&gt;
&lt;/pre&gt;
&lt;h4&gt;Update&lt;/h4&gt;
&lt;p&gt;Przed rozpoczęciem pracy dobrze jest upewnić się, że mamy najnowszą wersję plików, które będziemy edytować. Robienie update'ów przed jakimikolwiek zmianami powinno wejść ci w nawyk. Będąc w katalogu aplikacji użyj:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn update&lt;/code&gt;
&lt;/pre&gt;
&lt;h4&gt;Commit&lt;/h4&gt;
&lt;p&gt;To druga najczęściej wykonywana czynność, czyli zapis dokonanych zmian w repozytorium. Commita dobrze robić zawsze na koniec pracy albo po dokonaniu poważniejszych zmian, kiedy chcesz się upewnić, że nie zepsujesz za chwilę tego, co właśnie udało się zrobić. :)&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn commit -m &quot;komentarz do rewizji, opis zmian&quot;&lt;/code&gt;
&lt;/pre&gt;
&lt;h4&gt;Dodawanie plików&lt;/h4&gt;
&lt;p&gt;Pliki i katalogi wklejone do katalogu aplikacji w Finderze nie są jeszcze poprawnie dodane do repozytorium SVN. Musisz dodać je poleceniem:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn add nazwa_pliku_lub_katalogu&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Przy większej liczbie plików możesz powtórzyć to samo dla wszystkich, ale prościej wszystkie za jednym zamachem:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn -–force add .&lt;/code&gt;
&lt;/pre&gt;
&lt;h4&gt;Usuwanie plików&lt;/h4&gt;
&lt;p&gt;Podobnie jak przy dodawaniu, musisz zrobić to z poziomu Subversion. To polecenie oznaczy pliki jako usunięte z repo i skasuje je także z systemu plików.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn delete nazwa_pliku_lub_katalogu&lt;/code&gt;
&lt;/pre&gt;
&lt;h4&gt;Zmiany w plikach&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;svn status&lt;/code&gt; pokaże ci jakie pliki zostały zmienione od ostatniego update'u.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;svn diff&lt;/code&gt; pokaże co dokładnie zostało zmienione.&lt;/p&gt;
&lt;p&gt;Zanim wykonasz commit, możesz cofnąć zmiany w pliku za pomocą &lt;code&gt;svn revert nazwa_pliku&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Tags i Branches&lt;/h4&gt;
&lt;p&gt;Oprócz trunk, w którym pracujemy nad aplikacją, w repozytorium są jeszcze 2 katalogi: tags i branches.&lt;/p&gt;
&lt;p&gt;Jeśli chcesz „odłożyć na bok” aplikację w obecnym stanie, aby udostępnić ją użytkownikom do ściągnięcia, lub po prostu mieć łatwo dostępną kopię wersji, do której ewentualnie chciałbyś kiedyś powrócić, dobrym rozwiązaniem będzie będzie &lt;strong&gt;tag&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn copy http://localhost/svn/aplikacja/trunk 
        http://localhost/svn/aplikacja/tags/aplikacja-v1.0-stable 
        -m &quot;Wersja 1.0 stable aplikacji.&quot;&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Branch&lt;/strong&gt; możesz traktować jako inną, równolegle rozwijaną wersję swojej aplikacji.&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;svn copy http://localhost/svn/aplikacja/trunk 
        http://localhost/svn/aplikacja/branches/aplikacja-branch1 
        -m &quot;Branch 1&quot;&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Na dzisiaj to tyle. Po więcej informacji o SVN polecam darmową książkę &lt;a href=&quot;http://svnbook.red-bean.com/&quot;&gt;Version Control with Subversion&lt;/a&gt;. Następnym razem skonfigurujemy darmowego klienta Subversion i zainstalujemy dodatek, który pozwoli obsługiwać SVN z poziomu menu kontekstowego w Finderze.&lt;/p&gt;
</description><pubDate>Mon, 07 Sep 2009 10:05:06 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/07/stawiamy-repozytorium-subversion-w-os-x-leopard/</guid><category>Mac</category><category>subversion</category><category>Techblog</category><category>subversion svn mac osx</category></item><item><title>Jak freelancer w Polsce szuka zleceń</title><link>http://blog.bstankowski.pl/2009/09/04/jak-freelancer-w-polsce-szuka-zlecen/</link><description>&lt;p&gt;Freelancer nie ma łatwo. To znaczy, freelancer ma się super, ale czasami niełatwo. Największym problemem na początku jest zdobywanie klientów. Trzeba przecież ciągłych zleceń, żeby się utrzymać, ale jak je zdobyć? Sposobów jest kilka, ale nie ma się co oszukiwać, w Polsce rynek wolnych strzelców wypada przy &lt;a href=&quot;http://freelanceswitch.com/finding/the-monster-list-of-freelancing-job-sites/&quot;&gt;amerykańskim&lt;/a&gt; bardzo mizernie.&lt;/p&gt;
&lt;p&gt;Niestety, u nas dalej nie pisze i nie mówi się otwarcie ani o zarobkach ani nawet o sposobach pozyskiwania klientów. Wielu o to pyta, ale nikt nie chce się podzielić swoimi doświadczeniami. Szczerze w to wątpię, ale może kiedyś doczekamy się polskiego &lt;a href=&quot;http://freelanceswitch.com/&quot;&gt;FreelanceSwitch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dzisiaj postaram się opisać kilka możliwości. Oczywiście skupiam się na swojej branży, więc nie biorę pod uwagę opcji dla zawodów zupełnie nie związanych z Internetem.&lt;/p&gt;
&lt;h3&gt;Serwisy ze zleceniami dla freelancerów&lt;/h3&gt;
&lt;h4&gt;Zlecenia.przez.net&lt;/h4&gt;
&lt;p&gt;Na temat tego serwisu spotyka się właściwie tylko negatywne opinie, przeważnie wśród osób z doświadczeniem, wyrobioną marką i, co najważniejsze, ceniących siebie i swoją pracę.&lt;/p&gt;
&lt;p&gt;Negatywne nastawienie w tym przypadku niestety jest jak najbardziej uzasadnione, bo zdecydowana większość zleceń i ofert w serwisie jest grubo poniżej średnich stawek i przypomina szukanie frajera, który zrobi co trzeba za grosze. Problem w tym, że zleceniodawcy wiedzą co robią oczekując bardzo niskich cen za pracę, bo chętnych do takich projektów nie brakuje i jeżeli szukasz „webmastera”, który zrobi dla ciebie stronę za 300zł, dobrze trafiłeś. Na zlecenia.przez.net można przebierać w takich ofertach. Oczywiście wykonanie zawsze profesjonalne.&lt;/p&gt;
&lt;h4&gt;mrowisko.biz&lt;/h4&gt;
&lt;p&gt;Całkiem przyjemny portal e-zleceń, który mimo dobrego wrażenia jakie robi w pierwszym momencie, okazuje się być totalnie pusty, praktycznie zero ofert (w tej chwili 7).&lt;/p&gt;
&lt;h4&gt;webhandel.pl/zlecenia&lt;/h4&gt;
&lt;p&gt;To nie serwis dedykowany freelancerom tylko sklep z szablonami WWW, ale jest tam trochę zleceń i na pewno warto czasami zajrzeć, może trafi się coś&amp;nbsp;fajnego.&lt;/p&gt;
&lt;h4&gt;freelancer.pl&lt;/h4&gt;
&lt;p&gt;Użytkowników 11488. Zleceń: 15. A szkoda, bo serwis wygląda całkiem porządnie i mogłoby z tego wyjść coś więcej. Zastanawia mnie, dlaczego te serwisy są tak puste.&lt;/p&gt;
&lt;h4&gt;freelancers.pl&lt;/h4&gt;
&lt;p&gt;Tutaj totalna rozsypka, wygląda na to, że twórcy dawno zapomnieli o projekcie.&lt;/p&gt;
&lt;h4&gt;koduj.pl&lt;/h4&gt;
&lt;p&gt;Tej strony nie znam, a nawet coś się na niej dzieje. Pojawiają się zlecenia, choć trudno powiedzieć, na jakim poziomie. Będę obserwował.&lt;/p&gt;
&lt;p&gt;Jest jeszcze kilka innych, ale nie ma sensu ich tu wymieniać, bo to albo serwisy martwe albo niewarte uwagi. Czy naprawdę nie mamy w Internecie porządnego miejsca dla freelancerów?&lt;/p&gt;
&lt;h3&gt;Reklama w „serwisach dla profesjonalistów”&lt;/h3&gt;
&lt;p&gt;Serwisy typu &lt;a href=&quot;http://goldenline.pl&quot;&gt;GoldenLine&lt;/a&gt; i &lt;a href=&quot;http://profeo.pl/&quot;&gt;Profeo&lt;/a&gt; z pewnością nam sprzyjają i ułatwiają dotarcie do większej liczby potencjalnych klientów, pracodawców i współpracowników. Nie brakuje tam właścicieli firm i agencji, którzy rozglądają się za talentami. Częstą praktyką jest sprawdzanie kandydatów w sieci, a profil w takim serwisie i posty na jego forum, są dobrym sposobem na pokazanie siebie. Poza tym, często profil w jednym z nich znajdzie się w pierwszej piątce wyników wyszukiwania twojego imienia i nazwiska, co może się bardzo przydać tym nie posiadającym dobrze wypozycjonowanej strony domowej.&lt;/p&gt;
&lt;p&gt;Jaka jest skuteczność? Nie wiem, jak do tej pory w moim przypadku bardzo mała – dostaję głównie oferty pracy &lt;em&gt;nie dla mnie&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Współpraca z freelancerami&lt;/h3&gt;
&lt;p&gt;Tą formę bardzo lubię. Na działanie jako wolny strzelec zdecydowałem się z wielu powodów, a współpracując z innymi, którzy zrobili to samo, mam szansę poznać i pracować z ludźmi o podobnym nastawieniu do swojej pracy i życia. To pozytywnie wpływa na jakość realizowanych projektów i atmosferę, w jakiej powstają. Nie zdarzyło mi się jeszcze trafić na wrogie nastawienie. Freelancerzy to raczej dość pozytywna i zadowolona grupa ludzi.&lt;/p&gt;
&lt;p&gt;Inna sprawa, że mimo wielu zalet takiej umowy na wyminę obowiązkami lub wykonywanie zleceń razem, nie wszyscy są chętni do dzielenia się projektami i wolą działać w pojedynkę. Jak kto woli, ale uważam, że wszystkie strony zainteresowane mogą na tym tylko zyskać. Na przykład: grafik zajmuje się tym co potrafi najlepiej, projektuje layout nie martwiąc się sprawami technicznymi, koder składa wszystko w całość, a klient dostaje swój projekt nie tylko szybciej, ale i wyższej jakości.&lt;/p&gt;
&lt;p&gt;Warto napisać maila do dobrego grafika, który może szukać kodera (i odwrotnie). Od samej próby nawiązania kontaktu nic nie tracisz, a możesz wiele zyskać.&lt;/p&gt;
&lt;h3&gt;Współpraca z firmami&lt;/h3&gt;
&lt;p&gt;Z drugiej strony dobrym pomysłem jest nawiązanie współpracy z agencjami interaktywnymi i firmami zajmującymi się Internetem. &lt;a href=&quot;http://interaktywnie.com/biznes/newsy/inne/freelancerzy-beda-miec-swoj-kodeks-3429&quot;&gt;Podobno&lt;/a&gt; (patrz wykresy) wiele firm często korzysta z usług freelancerów. Podobno, bo wydaje mi się, że większość szuka tylko pracowników na stałe, do pracy w siedzibie firmy (a może tylko na takie trafiam), nie chcą współpracowca zdalnie i przekazywać swoich projektów ludziom z zewnątrz.&lt;/p&gt;
&lt;p&gt;Zostawiając pracę na etacie na rzecz freelance'u, warto pozostać w dobrych stosunkach z byłym pracodawcą, można przecież nadal współpracować, tylko na innych warunkach. Ale i tutaj też różnie bywa. Czasami kończy się na zwykłym gadaniu i obiecankach. Tak przynajmniej wnioskuję z doświadczenia własnego i 50% ankietowanych. :)&lt;/p&gt;
&lt;h4&gt;PewnaGrupa.pl&lt;/h4&gt;
&lt;p&gt;Na temat niedawno powstałej organizacji pośredniczącej między freelancerami i ich klientami są dość różne opinie. Niektórzy twierdzą, że to tylko sposób na wyciągnięcie kasy za przekierowanie maili między klientem i wykonawcą, ale wg mnie pomysł jest dobry i może bardzo pomóc.&lt;/p&gt;
&lt;p&gt;Jak jest naprawdę jeszcze nie wiem, wysłałem swoje zgłoszenie i zobaczymy co dalej.&lt;/p&gt;
&lt;h4&gt;Reklama na forach i grupach dyskusyjnych&lt;/h4&gt;
&lt;p&gt;Mamy całe mnóstwo grup dyskusyjnych i forów internetowych a na nich, w działach z ogłoszeniami o pracy, niezliczone ilości postów w stylu „[wykonam] xxx”, pisanych przez wszystkich, od dorabiających na boku dzieciaków po pełnoetatowych freelancerów. Może to jest jakiś sposób, ale wg mnie taki post, w gąszczu setek podobnych wiadomości nie ma wielkiej siły przebicia ani nie poprawia w żaden sposób wizerunku jego autora w oczach potencjalnych klientów.&lt;/p&gt;
&lt;p&gt;Co innego, jeśli wiedza i umiejętności są poparte licznymi wypowiedziami i pomocą na forum. Na pewno dobrym sposobem jest czynny udział w dyskusjach na forach i w serwisach związanych z branżą. Nie bez powodu „socializing” jest jedną z rad pojawiających się w każdym artykule/poradniku tego typu.&lt;/p&gt;
&lt;h3&gt;Kontakt ze strony domowej/portfolio&lt;/h3&gt;
&lt;p&gt;W tym przypadku nie mam wielkiego szczęścia. Większość zapytań jakie trafiają do mnie z formularzy kontaktowych na moich stronach, kończy się na pierwszym mailu, bo ludzie pytają tylko o ofertę, a cokolwiek bym nie powiedział, zawsze jest za drogo. ;) Niestety, często to też szukanie najtańszej oferty lub tylko prośby o wycenę dla porównania konkurencji. Czasami myślę, że dobrze byłoby zamieścić dokładny cennik. Problem w tym, że takowego na sztywno nie ustaliłem i w tej chwili nie mam zamiaru.&lt;/p&gt;
&lt;h3&gt;Klient z polecenia&lt;/h3&gt;
&lt;p&gt;To zdecydowanie najlepsza grupa klientów. Taka osoba kontaktuje się z freelancerem, bo ktoś jej go polecił (znajomy, rodzina, klient). Plusem jest to, że takiego klienta najczęściej nie trzeba wcale przekonywać do swoich usług, bo najprawdopodobniej jest już zdecydowany, zna efekty naszej pracy albo ktoś zaufany zapewnił go o jakości naszych usług. Pomijamy etap przekonywania klienta do siebie i od razu możemy przejść do zlecenia.&lt;/p&gt;
&lt;p&gt;Wiadomo, im więcej zadowolonych klientów, tym więcej &lt;em&gt;referralsów&lt;/em&gt;. Dobrze wspomnieć klientowi po zakończeniu projektu, że jesteśmy dostępni i chętni na kolejne zlecenia. Krótkie „polecam się na przyszłość” z pewnością nie zaszkodzi.&lt;/p&gt;
&lt;p&gt;A Wy? Jak zdobywacie zlecenia? Jakieś dobre rady dla początkujących?&lt;/p&gt;
</description><pubDate>Fri, 04 Sep 2009 18:34:56 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/04/jak-freelancer-w-polsce-szuka-zlecen/</guid><category>freelance</category><category>webdeveloper</category><category>internet</category><category>praca</category></item><item><title>Aplikacje dla początkującego Mac-usera</title><link>http://blog.bstankowski.pl/2009/09/03/aplikacje-dla-poczatkujacego-mac-usera/</link><description>&lt;p&gt;Pierwsze dni po zakupie i uruchomieniu OS X, nowego i nieznanego mi systemu operacyjnego, mijały mi głównie na poszukiwaniach narzędzi do pracy. Trudno w jednej chwili zostawić wszystkie aplikacje, do których przyzwyczaiłem się przez ostatnie lata i przerzucić się do zupełnie nowego środowiska, gdzie w zasadzie w ogóle nie wiem, co do czego służy.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/macapps.jpg&quot; width=&quot;676&quot; height=&quot;200&quot; alt=&quot;aplikacje na Mac OS X&quot; title=&quot;Exposé&quot; class=&quot;intro-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Trochę szperania w sieci, przeglądania roundupów, dziesiątki przetestowanych aplikacji i chyba mogę powiedzieć, że mam (prawie) wszystko czego potrzebuję. Udało mi się znaleźć alternatywy dla większości programów, z których korzystałem na Windowsie, z czego duża część daje o wiele większą przyjemność pracy.&lt;/p&gt;
&lt;p&gt;Poniżej opis większości moich narzędzi, może chociaż trochę ułatwi komuś początek pracy na Maku.&lt;/p&gt;
&lt;h3&gt;Aplikacje&lt;/h3&gt;
&lt;h4&gt;&lt;a href=&quot;http://panic.com/coda&quot;&gt;Coda&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/coda.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dla front-endowca Coda to prawdopodobnie najlepszy wybór (zaraz obok Textmate, którego nie mam więc nie porównuję).&lt;/p&gt;
&lt;p&gt;Standardowa edycja kodu z podpowiadaniem składni, tryb graficzny dla CSS (nie przepadam), klient FTP, dostęp do terminala a nawet możliwość podpięcia ulubionych książek (i nie tylko) do edytora tak, aby zawsze mieć podpowiedzi pod ręką.&lt;/p&gt;
&lt;p&gt;Więcej: Subversion (source control) i (co dla mnie najważniejsze) Clips, czyli nic innego jak (bardzo uproszczone co prawda) snippety w Textmate, templates w NetBeans czy też QuickText w Notepad++.&lt;/p&gt;
&lt;p&gt;Jest coś w tej aplikacji co sprawia, że lubię ją bardziej z każdym dniem.&lt;/p&gt;
&lt;p&gt;Niestety bardzo brakuje mi kilku możliwości, jakie posiadają poważniejsze środowiska jak NetBeans czy Aptana Studio. Niektóre z nich nadrabiają pluginy, ale to jeszcze nie to.&lt;/p&gt;
&lt;p class=&quot;prize&quot;&gt;Cena: $99&lt;/p&gt;
&lt;p&gt;Drogo. Pewnie nie skusiłbym się na nią w takiej cenie, ale miałem szczęście załapać się na Panic Sale i kupiłem za połowę ceny.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.aptana.com/&quot;&gt;Aptana Studio&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/aptana.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jeśli Coda to dla ciebie za mało, może Aptana Studio bardziej przypadnie ci do gustu.&lt;/p&gt;
&lt;p&gt;Wsparcie dla PHP, Ruby on Rails, Pythona, Javy, AJAXa i bibliotek JavaScriptowych. Osobiście korzystam tylko podczas pisania aplikacji Adobe AIR, ale jest też plugin dla iPhone'owych developerów.&lt;/p&gt;
&lt;p&gt;Co ważne, Aptana to całkowicie darmowa i między-platformowa aplikacja.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://cyberduck.ch/&quot;&gt;Cyberduck&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/cyberduck.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Open source'owy klient FTP, SFTP, WebDAV, Mosso Cloud Files i Amazon S3. Niezwykle prosty i schludny interfejs, integracja z edytorami tekstu (np. TextMate i CSSEdit), integracja z Growl, wsparcie AppleScript i wiele więcej.&lt;/p&gt;
&lt;p&gt;Pozwala na korzystanie z Quicklook (tak samo jak w Finderze) i synchronizację z iDisk. Obsługa ponad 20 języków (w tym polski).&lt;/p&gt;
&lt;p&gt;No i kaczka w docku wygląda super.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.macupdate.com/info.php/id/19378&quot;&gt;Transmission&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/transmission.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Darmowy, super-szybki i super-lekki klient BitTorrent. Tak prosty jak to tylko możliwe. Ściągasz i zaczynasz używać.&lt;/p&gt;
&lt;p&gt;Integracja z Growl + sygnalizacja w docku.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.mamp.info/en/index.html&quot;&gt;MAMP&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/mamp.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;MAMP to skrót od “Macintosh, Apache, MySQL and PHP&quot; i jest to... (niespodzianka!) serwer Apache, PHP + MySQL dla Mac. Prostszy w obsłudze już chyba być nie może.&lt;/p&gt;
&lt;p&gt;Co ważne, MAMP nie wpływa w żaden sposób na istniejące instalacje Apache'a na twoim maku, więc nie ma obaw jeśli chcesz tylko spróbować.&lt;/p&gt;
&lt;p&gt;Darmowy w podstawowej wersji.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.mindnode.com/&quot;&gt;Mind Node&lt;/a&gt; lub &lt;a href=&quot;http://freemind.sourceforge.net/wiki/index.php/Main_Page&quot;&gt;FreeMind&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/mindnode.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mapy myśli to niesamowicie przydatna rzecz. Przekonasz się jak tylko zaczniesz ich używać. Polecam obie aplikacje, przy czym pierwsza jest tylko dla Mac, druga to aplikacja w Javie, więc niezależna od OS.&lt;/p&gt;
&lt;p&gt;Ceny:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Free Mind: 0&lt;/li&gt;
&lt;li&gt;Mind Node: darmowa wersja lub Pro za 14.95 USD&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a href=&quot;http://api.jquery.com/&quot;&gt;jQuery API browser&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/jquery.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;jQuery API browser to nie do końca program specjalnie dla Maka, ale dokumentacja jQuery w postaci aplikacji Adobe AIR. Dla tych, którzy zbyt często zaglądają na &lt;a href=&quot;http://docs.jquery.com&quot;&gt;docs.jquery.com&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://cortland.pl/Photoshop-CS4_idc=5_27_1010.html&quot;&gt;Adobe Photoshop&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/photoshop.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Szczerze: nie znoszę Gimpa. Photoshop is a must.&lt;/p&gt;
&lt;p&gt;Cena: &lt;a href=&quot;http://cortland.pl/Photoshop-CS4_idc=5_27_1010.html&quot;&gt;różnie&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://burn-osx.sourceforge.net/Pages/English/home.html&quot;&gt;Burn&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/burn.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Nagrywanie CD/DVD. Po prostu.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.robinwood.com/Catalog/Technical/OtherTuts/MacColorPicker/MacColorPicker.html&quot;&gt;Hex Color Picker&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/hexcolor.jpg&quot; width=&quot;328&quot; height=&quot;246&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;W pracy front-endowca, który składa strony porządne narzędzie do pobierania kolorów to po prostu konieczność. Na PC używałem fantastycznego i bardzo prostego &lt;a href=&quot;http://www.faststone.org/FSCaptureDetail.htm&quot;&gt;FastStone Capture&lt;/a&gt;, który nie tylko daje mi taką możliwość, ale też wszystkie opcje robienia zrzutów ekranu, jakich mi potrzeba.&lt;/p&gt;
&lt;p&gt;Niestety na maku większość aplikacji, których próbowałem do tych dwóch celów to nieporozumienie. W standardowym OS X-owym „Colors&quot; brakuje wartości szesnastkowych, dobrze więc doinstalować sobie mały dodatek, Hex Color Picker. To jeśli chodzi o kolory.&lt;/p&gt;
&lt;p&gt;A wracając do screenshotów...&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.apple.com/downloads/dashboard/business/screenshotplus.html&quot;&gt;Screenshot Plus&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/screenshotplus.jpg&quot; width=&quot;261&quot; height=&quot;200&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;To widget do Dashboardu. Nie jest idealny, ale używam w tej chwili z braku lepszej alternatywy.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://skitch.com/&quot;&gt;Skitch&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/skitch.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Kolejna darmowa aplikacja do szybkiego robienia i obróbki screenshotów i publikacji ich online, na koncie skitch.com lub innym serwisie (np. Flickr).&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://derailer.org/paparazzi/&quot;&gt;Paparazzi!&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/paparazzi.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Paparazzi! z kolei, to najlepsze rozwiązanie z jakim miałem do tej pory przyjemność się spotkać, do robienia zrzutów całych stron internetowych. Wystarczy podać mu adres strony i poczekać, aż zrobi swoje. Można też ustawić opóźnienie po jakim ma się zrobić zrzut ekranu, co jest przydatne, jeśli chcemy, aby program przeczekał np. flashową animację po wejściu na stronę.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.virtualbox.org/&quot;&gt;VirtualBox&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/virtualbox.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Darmowy program do wirtualizacji (uruchamiania maszyn wirtualnych, np. z innym systemem operacyjnym). Konieczność do testowania stron w IE/Win.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.parallels.com/eu/products/desktop/&quot;&gt;Parallels Desktop&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/parallels.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jak VirtualBox, ale bardziej... „makowy&quot; i lepiej integruje się ze sprzętem, umożliwiając np. bezproblemowe uruchamianie gier pod Windows, czego w VirtualBox nie udało mi się zrobić z powodu niepełnej obsługi grafiki.&lt;/p&gt;
&lt;p&gt;Cena: 256 PLN&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.getmiro.com/index.php&quot;&gt;Miro&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/miro.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Darmowy odtwarzacz wideo w HD. Potrafi odtworzyć niemal każdy format video. Połączenie z tysiącami darmowych widowisk wideo w HD, serwisami udostępniającymi filmy itp. Miro automatycznie zapisuje oglądane filmy na dysku, więc możesz zabrać ze sobą klip z YouTube'a i pokazać go znajomym podczas grillowania w ogródku, bez Internetu.&lt;/p&gt;
&lt;p&gt;Nie będę się rozpisywał, dokładny opis na stronie producenta.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://pym.uce.pl/pymplayer.html&quot;&gt;PYM Player&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/pym.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Program do oglądania filmów (divx, rmvb, mkv) z napisami przy wykorzystaniu mplayera. Super wygodny, praktycznie nie wymaga konfiguracji, sam ściąga napisy z Napiprojekt a dodatkowo posiada kilka fajnych opcji, jak filtry poprawiające jakość obrazu.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://pl.openoffice.org/product.download.html&quot;&gt;Open Office&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/openoffice.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Międzyplatformowa, open source'owa i darmowa alternatywa dla Microsoft Office. Wszyscy znamy?&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.atebits.com/tweetie-mac/&quot;&gt;Tweetie&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/tweetie.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Pomiędzy &lt;a href=&quot;http://mashable.com/2009/06/27/twitter-desktop-apps&quot;&gt;wszystkimi klientami Twittera&lt;/a&gt;, Tweetie to mój ulubiony, zarówno na Maku jak i na iPhone. Prosty i elegancki interfejs, opcje dokładnie takie jakich potrzebuję i żadnych więcej.&lt;/p&gt;
&lt;p&gt;Cena: $19.95, ale spokojnie można używać darmowej wersji z reklamami (raz na jakiś czas, nie przeszkadzają, a wręcz są bardzo miłe dla oka)&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://wakaba.c3.cx/s/apps/unarchiver.html&quot;&gt;Unarchiver&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/unarchiver.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Rozpakuje pliki Zip, Tar-GZip, Tar-BZip2, Rar, 7-zip, LhA, StuffIt i inne.&lt;/p&gt;
&lt;p&gt;Co prawda miałem kilka razy problem z rozpakowaniem Rar i Stuffit, ale pomógł mi wtedy &lt;a href=&quot;http://www.apple.com/downloads/macosx/system_disk_utilities/stuffitexpander.html&quot;&gt;Stuffit Expander&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://macntfs-3g.blogspot.com/2009/04/ntfs-3g-200944.html&quot;&gt;NTFS 3G for Mac OSX&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/ntfs3g.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Przejście z PC/Win na OS X jest o wiele prostsze, kiedy możesz dostać się przez sieć do swoich partycji NTFS na starym komputerze, którego już niedługo nie będziesz chciał używać.&lt;/p&gt;
&lt;p&gt;NTFS3G for Mac dodaje obsługę takich partycji w OS X. Instaluje się jako panel w preferencjach systemowych.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.billingsapp.com/&quot;&gt;Billings 3&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/billings.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Najlepsza aplikacja do mierzenia czasu spędzonego nad projektami, fakturowania, pilnowania rachunków i spraw formalnych, którymi musi zajmować się freelancer podczas pracy.&lt;/p&gt;
&lt;p&gt;Cena: $39.99&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://growl.info/&quot;&gt;Growl&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/growl.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Dzięki integracji z aplikacjami, Growl w bardzo przyjemny sposób powiadomi cię o zakończonych transferach w Cyberduck czy też Coda, o aktualizacjach Firefoksa, rozpakowanym pliku w Stuffit Expanderze i tym podobnych wydarzeniach. Polubisz go na pewno.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.freemacsoft.net/AppCleaner/&quot;&gt;AppCleaner&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/appcleaner.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Mimo iż usuwanie aplikacji w OS X jest niezwykle proste, nie zawsze jest tak skuteczne, jak by się wydawało. AppCleaner posprząta wszystkie śmieci po programie, którego już nie chcesz używać.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://lightheadsw.com/caffeine/&quot;&gt;Caffeine&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/caffeine.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;„Don't let your Mac fall asleep”, czyli nie pozwól swojemu Makowi wygaszać ekranu (i zasnąć) po dłuższej bezczynności, ale kiedy sobie tego nie życzysz, czyli np. kiedy czytasz artykuł lub oglądasz video na YouTube. Przydatne.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.pascal.com/software/freeruler/&quot;&gt;Free Ruler&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/ruler.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Linijka. Do mierzenia.&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://support.apple.com/kb/HT2531&quot;&gt;Spotlight&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/spotlight.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;To nie aplikacja do zainstalowania w systemie tylko wbudowana funkcjonalność OS X.&lt;/p&gt;
&lt;p&gt;A wymieniam ją tutaj bo to genialne narzędzie, tak wygodne, że jeśli jesteś przyzwyczajony do używania głównie klawiatury, praktycznie znika potrzeba posiadania jakichkolwiek ikon w docku czy na pulpicie.&lt;/p&gt;
&lt;p&gt;Spotlight to wyszukiwarka, ale za nic w świecie nie mylcie jej z wyszukiwarką w Windows, bo Spotlight przeszuka cały twój system, pliki, dokumenty i pocztę szybciej niż zdążysz kliknąć „szukaj” w Windows.&lt;/p&gt;
&lt;p&gt;Zacznij korzystać natychmiast. Nie przestaniesz.&lt;/p&gt;
&lt;p&gt;A do tego sprytna bestia liczyć potrafi. ;)&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.kadu.net/&quot;&gt;Kadu&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/kadu.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Klient GG na Mac. Szczerze mówiąc nie jestem z niego zbyt zadowolony, bo często się wiesza i sprawia problemy przy konferencjach. Czego wy używacie?&lt;/p&gt;
&lt;h4&gt;&lt;a href=&quot;http://www.fontexplorerx.com/&quot;&gt;FontExplorerX&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;http://bstankowski.pl/i/blog/macapps/fontexplorer.jpg&quot; width=&quot;676&quot; height=&quot;150&quot; alt=&quot; na Mac OS X&quot; title=&quot;&quot; class=&quot;entry-img&quot;&gt;&lt;/p&gt;
&lt;p&gt;Darmowa wersja programu do zarządzania fontami zainstalowanymi w systemie w zupełności wystarczy większości użytkowników.&lt;/p&gt;
&lt;h3&gt;Przydatne strony, porady, artykuły&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://coda-clips.com/&quot;&gt;Coda Clips&lt;/a&gt; - Bardzo przydatny zestaw Clipsów do Cody z bardzo wygodnym one-click-install.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.panic.com/coda/developer/&quot;&gt;panic.com/coda/developer/&lt;/a&gt; - Materiały dla użytkowników Cody. Pluginy, zestawy kolorystyczne itp.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mac.appstorm.net/&quot;&gt;mac.appstorm.net&lt;/a&gt; - bardzo dużo bardzo przydatnych informacji, recenzji programów, makowych tipsów i tricków.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2009/06/04/30-must-have-tweaks-for-your-mac/&quot;&gt;30 Must-Have Tweaks For Your Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2009/04/26/five-reasons-why-designers-are-switching-to-mac/&quot;&gt;Five Reasons Why Developers are Switching to Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2009/05/22/mac-hacks-17-applescripts-to-make-your-life-easier/&quot;&gt;Mac Hacks: 17 AppleScripts To Make Your Life Easier&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Więcej aplikacji, roundups&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.opensourcemac.org/&quot;&gt;Open Source Mac&lt;/a&gt; - Kolekcja darmowych, open-source'owych aplikacji dla OS X&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://desizntech.info/2009/06/40-mac-freewares-and-open-source-softwares-for-web-designers/&quot;&gt;40 Mac Freewares and Open Source Software for Web Designers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://theappleblog.com/2009/06/02/10-clipboard-managers-for-os-x/&quot;&gt;10 Clipboard Managers for OS X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.leemunroe.com/15-mac-apps-web-designers-should-have-in-their-dock/&quot;&gt;15 mac apps web designers should have in their dock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.noupe.com/tools/readers-pick-30-incredibly-useful-mac-apps-for-web-design.html&quot;&gt;Readers Pick: 30+ Incredibly Useful Mac Apps for Web Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mac.appstorm.net/roundups/internet-roundup/10-mac-ftp-apps-for-every-budget/&quot;&gt;10 Mac FTP Apps for Every Budget&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.noupe.com/tools/15-incredible-mac-apps-for-freelance-web-designers.html&quot;&gt;15+ Incredibly Useful Mac Apps For Freelance Web Designers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://net.tutsplus.com/articles/web-roundups/30-amazing-mac-apps-for-developers/&quot;&gt;30+ Amazing Mac Apps for Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mac.appstorm.net/roundups/utilities-roundups/35-absolutely-essential-mac-apps/&quot;&gt;35 Absolutely Essential Mac Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com/2009/07/05/25-open-source-mac-apps-that-will-boost-your-productivity/&quot;&gt;25 Free Mac Apps That Will Boost Your Productivity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://theappleblog.com/2009/05/06/four-useful-quicklook-plugins/&quot;&gt;Four Useful Quicklook Plugins&lt;/a&gt; - pluginy do Quicklook (Nie wiedziałem nawet, że jest coś takiego :) A są i jest ich jeszcze więcej na &lt;a href=&quot;http://www.qlplugins.com/&quot;&gt;qlplugins.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://speckyboy.com/2009/08/05/30-mac-dashboard-widgets-for-web-designers-and-developers/&quot;&gt;30 MAC Dashboard Widgets for Web Designers and Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Thu, 03 Sep 2009 17:23:59 +0200</pubDate><guid>http://blog.bstankowski.pl/2009/09/03/aplikacje-dla-poczatkujacego-mac-usera/</guid><category>Mac</category><category>software</category><category>os x</category></item></channel></rss>