<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Dziudek's jogger</title><link>http://blog.dziudek.pl/</link><description>Wpisy z dziennika internetowego Jogger, wspomaganego przez Jabbera</description><lastBuildDate>Sun, 05 Feb 2012 22:06:32 +0100</lastBuildDate><generator>JoggerPL</generator><item><title>Animacje w MooTools 1.3</title><link>http://blog.dziudek.pl/2010/10/17/animacje-w-mootools-1-3/</link><description>&lt;p&gt;Płynne animacje elementów to zagadnienie, które bardzo zbliżyło strony WWW oparte o (X)HTML i CSS do stron wykonanych we Flashu. Właściwie patrząc na to co oferuje CSS3 można śmiało stwierdzić, że istnieje coraz mniej efektów stworzonych we Flashu, których nie da się przerobić na efekty wykonane z użyciem JavaScript.&lt;/p&gt;
&lt;p&gt;Zawsze doceniałem MooTools za duże możliwości przy tworzeniu animacji. Ponieważ od czasu MooTools 1.1 wiele się zmieniło, chciałbym odświeżyć temat w wydaniu MooTools 1.3.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Spis treści&lt;/b&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#ch1&quot;&gt;Klasy związane z animacją&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch2&quot;&gt;Budowa klasy Fx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch3&quot;&gt;Sposoby łączenia animacji&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch4&quot;&gt;Klasy Fx.Tween i Fx.Morph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch5&quot;&gt;Określanie przebiegu animacji&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch6&quot;&gt;Przykłady&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ch7&quot;&gt;Podsumowanie&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;ch1&quot;&gt;Klasy związane z animacją&lt;/h3&gt;
&lt;p&gt;Podstawę tworzenia animacji stanowi klasa &lt;strong&gt;Fx&lt;/strong&gt;, klasy &lt;strong&gt;Fx.Tween&lt;/strong&gt; oraz &lt;strong&gt;Fx.Morph&lt;/strong&gt; to jej pochodne - tak samo zresztą jak wszystkie inne klasy z prefiksem &lt;strong&gt;Fx&lt;/strong&gt;. Zatem podstawą do zrozumienia sposobu tworzenia animacji w MooTools jest poznanie zasad działania klasy &lt;strong&gt;Fx&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Przy czym klasy tej samodzielnie nie będziemy raczej używać - możemy przyjąć, że stanowi ona swoisty procesor do przeliczania wartości w czasie. Dopiero klasy takie jak wspomniane wcześniej &lt;strong&gt;Fx.Tween&lt;/strong&gt; i &lt;strong&gt;Fx.Morph&lt;/strong&gt; robią z tych obliczeń użytek w postaci animacji elementów.&lt;/p&gt;
&lt;h3 id=&quot;ch2&quot;&gt;Budowa klasy Fx&lt;/h3&gt;
&lt;p&gt;Klasa &lt;strong&gt;Fx&lt;/strong&gt; implementuje interfejsy &lt;strong&gt;Chain&lt;/strong&gt;, &lt;strong&gt;Events&lt;/strong&gt; oraz &lt;strong&gt;Options&lt;/strong&gt;. Konstruktor klasy &lt;strong&gt;Fx&lt;/strong&gt; (i wszystkie pochodne klasy &lt;strong&gt;Fx&lt;/strong&gt;) pobiera jako argument obiekt z opcjami w którym możemy określić następujące parametry:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;fps&lt;/strong&gt; - określa ilość klatę na sekundę dla animacji - domyślnie &lt;strong&gt;50&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unit&lt;/strong&gt; - określa jednostkę dla której wykonywane są obliczenia - przykładowo '%' lub 'px'. Użyteczne głównie wtedy kiedy nie zmieniają nam się wartości dla których wykonujemy animację a zmienia się jednostka. Domyślna wartość tego parametru to &lt;strong&gt;false&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;link&lt;/strong&gt; - określa nam w jaki sposób są wywoływane kolejne animacje odnoszące się do danej instancji klasy Fx. Obszerniej opiszę ten parametr w dalszej części wpisu;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;duration&lt;/strong&gt; - określa nam czas trwania animacji w milisekundach - domyślna wartość to &lt;strong&gt;500&lt;/strong&gt;. Warto wspomnieć, że możemy też podać ten parametr słownie: &lt;strong&gt;short&lt;/strong&gt; (250ms), &lt;strong&gt;normal&lt;/strong&gt; (500ms), &lt;strong&gt;long&lt;/strong&gt; (1000ms)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;transition&lt;/strong&gt; - określa nam sposób przeliczania animacji co wpływa na jej dynamikę w poszczególnych częściach animacji. Dokładniejszy opis tej opcji znajduje się w dalszej części tego wpisu;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Przykładowy obiekt definiujący animację 30fps o długości 150ms:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;{
        fps: 30,
        duration: 150
}&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;W klasie &lt;strong&gt;Fx&lt;/strong&gt; mamy do wykorzystania następujące rodzaje zdarzeń:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;start&lt;/strong&gt; - zdarzenie to występuje w momencie rozpoczęcia animacji,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cancel&lt;/strong&gt; - zdarzenie występujące w wypadku zaniechania animacji,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;complete&lt;/strong&gt; - zdarzenie występujące po zakończeniu animacji,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chainComplete&lt;/strong&gt; - zdarzenie to występuje wtedy, kiedy zakończone zostaną wszystkie animacje wywołane dla obiektu klasy &lt;strong&gt;Fx&lt;/strong&gt;, która ma określoną opcję &lt;strong&gt;link&lt;/strong&gt; jako &lt;em&gt;'chain'&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Obsługę zdarzeń klasy &lt;strong&gt;Fx&lt;/strong&gt; możemy definiować poprzez metodę &lt;strong&gt;addEvent&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;obiektKlasyFX.addEvent('start', function() {
        console.log('Animacja rozpoczęta!');
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;albo (dzięki implementowaniu przez klasę &lt;strong&gt;Fx&lt;/strong&gt; interfejsów &lt;strong&gt;Events&lt;/strong&gt; i &lt;strong&gt;Options&lt;/strong&gt;) w obiekcie opcji - w tym wypadku pamiętamy o dodaniu przedrostka &quot;on&quot; do nazwy zdarzenia:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;{
        fps: 30,
        duration: 150,
        onStart: function() {
                console.log('Animacja rozpoczęta!');
        }
}&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Animacją sterujemy z użyciem pięciu metod:&lt;/p&gt;
&lt;h4&gt;start&lt;/h4&gt;
&lt;p&gt;Metoda ta rozpoczyna animację (i wywołuje zdarzenie &lt;strong&gt;onStart&lt;/strong&gt;). Pobiera dwa argumenty: wartość początkową i końcową, przy czym możemy też określić tylko jeden argument i wtedy jest on traktowany jako wartość końcowa. Wartość początkową stanowi wtedy z reguły wartość bieżąca modyfikowanej właściwości elementu - takie użycie jest często wręcz niezbędne do uzyskania płynnej animacji (zdarza się, szczególnie po anulowaniu animacji, że wartość początkowa różni się od bieżącej wartości modyfikowanej właściwości elementu i mamy do czynienia ze skokową animacją wartości na początku). Przykładowe wywołania metody &lt;strong&gt;start&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;obiektKlasyFx.start(0, 10);
obiektKlasyFx.start(10);&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Drugi zapis jest też wygodny z tego względu, że unikamy pobierania bieżącej wartości danej właściwości elementu - klasa &lt;strong&gt;Fx&lt;/strong&gt; robi to za nas.&lt;/p&gt;
&lt;h4&gt;set&lt;/h4&gt;
&lt;p&gt;Metoda &lt;strong&gt;set&lt;/strong&gt; służy do ustawiania konkretnej wartości parametru, bez wykonywania animacji. Stosujemy ją głównie do zdefiniowania początkowych wartości przed rozpoczęciem animacji:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;obiektKlasyFx.set(10);&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h4&gt;cancel&lt;/h4&gt;
&lt;p&gt;Metoda &lt;strong&gt;cancel&lt;/strong&gt; powoduje zaniechanie dalszego wykonywania animacji i wywołanie zdarzenia &lt;strong&gt;onCancel&lt;/strong&gt;. Nie pobiera żadnych argumentów:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;obiektKlasyFx.cancel();&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;W wypadku jej stosowania najczęściej korzysta się też z metody &lt;strong&gt;start&lt;/strong&gt; wraz z jednym argumentem celem uniknięcia skokowej animacji.&lt;/p&gt;
&lt;h4&gt;pause i resume&lt;/h4&gt;
&lt;p&gt;Metodę tą wykorzystujemy do chwilowego zatrzymania animacji. Którą możemy wznowić metoda &lt;strong&gt;resume&lt;/strong&gt;. Obie metody nie pobierają żadnych dodatkowych argumentów:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;obiektKlasyFx.pause();
obiektKlasyFx.resume();&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h3 id=&quot;ch3&quot;&gt;Sposoby łączenia animacji&lt;/h3&gt;
&lt;p&gt;Wszystkie metody zwracają obiekt klasy &lt;strong&gt;Fx&lt;/strong&gt; zatem możemy stosować tzw. &lt;em&gt;chaining&lt;/em&gt;. To właśnie z nim związana jest opcja &lt;strong&gt;link&lt;/strong&gt; oraz zdarzenie &lt;strong&gt;onChainComplete&lt;/strong&gt;. Opcja &lt;strong&gt;link&lt;/strong&gt; przyjmuje trzy wartości:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ignore&lt;/strong&gt; - w tym wypadku jeżeli zażądamy wykonania przez obiekt klasy &lt;strong&gt;Fx&lt;/strong&gt; animacji w czasie trwania innej animacji to nasze żądanie nie zostanie zrealizowane;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cancel&lt;/strong&gt; - z kolei w tym wypadku nasze nowe żądanie animacji od obiektu klasy &lt;strong&gt;Fx&lt;/strong&gt; zostanie zrealizowane - poprzednia animacja zostanie anulowana;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;chain&lt;/strong&gt; - w tym wypadku jest tworzony swego rodzaju stos animacji - każde kolejne żądania animacją są odkładane na ten stos i wykonywane wtedy kiedy poprzednie animacje zostały już wykonane. Gdy wszystkie animacje ze stosu się wykonają - wywoływane jest zdarzenie &lt;strong&gt;onChainComplete&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ch4&quot;&gt;Klasy Fx.Tween i Fx.Morph&lt;/h3&gt;
&lt;p&gt;Wiemy już co oferuje nam klasa &lt;strong&gt;Fx&lt;/strong&gt; - możemy zatem przejść do klas &lt;strong&gt;Fx.Tween&lt;/strong&gt; oraz &lt;strong&gt;Fx.Morph&lt;/strong&gt;, które robią prawdziwy użytek z klasy &lt;strong&gt;Fx&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Zacznijmy od podstawowej różnicy pomiędzy tymi klasami - &lt;strong&gt;Fx.Tween&lt;/strong&gt; to klasa służąca do animacji pojedynczej właściwości elementu, natomiast klasa &lt;strong&gt;Fx.Morph&lt;/strong&gt; potrafi modyfikować jednocześnie kilka właściwości elementu.&lt;/p&gt;
&lt;p&gt;Składnia konstruktorów tych klas jest identyczna - poza obiektem opcji pobierany jest uchwyt do modyfikowanego elementu:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var efekt = new Fx.Tween(element, {/* tutaj dodatkowe opcje */});
var efekty = new Fx.Morph(element, {/* tutaj dodatkowe opcje */});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Możemy też zamiast uchwytu do elementu podać po prostu jego identyfikator jako obiekt typu &lt;strong&gt;String&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var efekt = new Fx.Tween('idElementu', {/* tutaj dodatkowe opcje */});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Istotna różnica pojawia się pomiędzy tymi klasami w wypadku użycia metod &lt;strong&gt;set&lt;/strong&gt; i &lt;strong&gt;start&lt;/strong&gt; (metody &lt;strong&gt;cancel&lt;/strong&gt;, &lt;strong&gt;pause&lt;/strong&gt; oraz &lt;strong&gt;resume&lt;/strong&gt; wywołujemy tak samo jak w klasie &lt;strong&gt;Fx&lt;/strong&gt;). Zacznijmy od metody &lt;strong&gt;set&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;efekt.set('background', '#000');
efekty.set({
        'background': '#fff',
        'height': 100 
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Jak widać poza wartością musimy też określić właściwość elementu, którą modyfikujemy - w wypadku klasy &lt;strong&gt;Fx.Tween&lt;/strong&gt; stosujemy po prostu dwa argumenty, a w wypadku klasy &lt;strong&gt;Fx.Morph&lt;/strong&gt; wykorzystujemy obiekt w którym pary &lt;em&gt;klucz-wartość&lt;/em&gt; są postaci &lt;em&gt;właściwość-wartość&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Metoda &lt;strong&gt;start&lt;/strong&gt; w klasie &lt;strong&gt;Fx.Tween&lt;/strong&gt; wygląda analogicznie:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;efekt.start(&quot;background&quot;, '#000', '#fff');&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Oczywiście tutaj też istnieje możliwość podania tylko docelowej wartości właściwości:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;efekt.start(&quot;background&quot;, '#fff');&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;W wypadku klasy &lt;strong&gt;Fx.Morph&lt;/strong&gt; składnia się ciut bardziej komplikuje - przy określaniu docelowej wartości wciąż wszystko wygląda prosto i w sumie tak samo jak w wypadku metody &lt;strong&gt;set&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;efekty.start({
        'background': '#fff',
        'height': 100 
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Natomiast jeżeli chcemy określić także wartość początkową, wtedy musimy zdefiniować wartość jako dwuelementową tablicę, której pierwszy element to wartość początkowa, a drugi to wartość końcowa:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;efekty.start({
        'background': '#fff',
        'height': [50, 100] 
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Dodatkowo jeżeli w klasie &lt;strong&gt;Fx.Tween&lt;/strong&gt; chcemy uniknąć wpisywania przy każdym wywołaniu metody nazwy modyfikowanej właściwości, możemy zdefiniować opcję &lt;strong&gt;property&lt;/strong&gt; - wtedy każda operacja będzie dotyczyła tak zdefiniowanej właściwości obiektu.&lt;/p&gt;
&lt;h3 id=&quot;ch5&quot;&gt;Określanie przebiegu animacji&lt;/h3&gt;
&lt;p&gt;Przebieg animacji określami w opcji &lt;strong&gt;transition&lt;/strong&gt;. Dostępne rodzaje animacji mamy opisane po prawej na &lt;a href=&quot;http://mootools.net/docs/core/Fx/Fx.Transitions&quot;&gt;tej stronie&lt;/a&gt; Każdy z tych rodzajów animacji udostępnia (poza typem &lt;strong&gt;linear&lt;/strong&gt;) trzy odmiany:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;easeIn&lt;/li&gt;
&lt;li&gt;easeOut&lt;/li&gt;
&lt;li&gt;easeInOut&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jako wartość opcji &lt;strong&gt;transition&lt;/strong&gt; możemy podać obiekt, na przykład:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;Fx.Transitions.Sine.easeOut&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;lub skorzystać z uproszczonej składni:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;'sine:out'&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;W wypadku animacji typu &lt;strong&gt;easeInOut&lt;/strong&gt; zapisujemy:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;'sine:in:out'&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Dla celów poznawczych polecam jak zawsze niezawodne &lt;a href=&quot;http://demos111.mootools.net/Fx.Transitions&quot;&gt;demo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Możemy też tworzyć własne animacje z użyciem klasy &lt;strong&gt;Fx.Transition&lt;/strong&gt; - zarówno definiując własne funkcje przebiegu animacji jak też modyfikując parametry już istniejących funkcji - &lt;strong&gt;Pow&lt;/strong&gt;, &lt;strong&gt;Back&lt;/strong&gt; oraz &lt;strong&gt;Elastic&lt;/strong&gt; pobierają opcjonalnie drugi argument:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var przebiegAnimacji = new Fx.Transition(Fx.Transitions.Back, 1.8);&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h3 id=&quot;ch6&quot;&gt;Przykłady&lt;/h3&gt;
&lt;p&gt;Teoria za nami - pora na przykłady praktyczne wykorzystujące prezentowane we wpisie informacje.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Przykład 1.&lt;/strong&gt; Wykorzystanie różnych prędkości animacji:&lt;/h4&gt;
&lt;div class=&quot;playground&quot;&gt;
&lt;div id=&quot;elm1&quot; style=&quot;background:#ccc; width:100px; height:100px;&quot;&gt;&lt;/div&gt;
&lt;select id=&quot;select1&quot;&gt;
&lt;option value=&quot;short&quot;&gt;short (250ms)&lt;/option&gt;
&lt;option value=&quot;normal&quot;&gt;normal (500ms)&lt;/option&gt;
&lt;option value=&quot;long&quot;&gt;long (1000ms)&lt;/option&gt;
&lt;/select&gt; &lt;button id=&quot;example1-start&quot;&gt;Start&lt;/button&gt; &lt;button id=&quot;example1-reset&quot;&gt;Reset&lt;/button&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var effect1 = new Fx.Tween('elm1');
$('example1-start').addEvent('click', function(){
        effect1.options.duration = $('select1').get('value');
        effect1.start('margin-left', 0, 300);
});
$('example1-reset').addEvent('click', function(){
        effect1.set('margin-left',0);
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;Warto zwrócić uwagę na fragment modyfikujący czas trwania animacji - jak widać nie musimy definiować wartości opcji wyłącznie w konstruktorze.&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;Przykład 2.&lt;/strong&gt; Modyfikacja kilku właściwości elementu z użyciem klasy &lt;strong&gt;Fx.Morph&lt;/strong&gt;:&lt;/h4&gt;
&lt;div class=&quot;playground&quot;&gt;
&lt;div id=&quot;elm2&quot; style=&quot;background:#ccc; border:1px solid #999; width:100px; height:100px;&quot;&gt;&lt;/div&gt;
&lt;button id=&quot;example2-start&quot;&gt;Start&lt;/button&gt; &lt;button id=&quot;example2-back&quot;&gt;Reset&lt;/button&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var effect2 = new Fx.Morph('elm2');
$('example2-start').addEvent('click', function(){
        effect2.start({
                'width': 300,
                'height': 150,
                'border': '3px solid #a00',
                'background-color' : '#f00'
        });
});
$('example2-back').addEvent('click', function(){
        effect2.start({
                'width': 100,
                'height': 100,
                'border': '1px solid #999',
                'background-color' : '#ccc'
        });
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h4&gt;&lt;strong&gt;Przykład 3.&lt;/strong&gt; Zastosowanie różnych sposobów łączenia animacji:&lt;/h4&gt;
&lt;div class=&quot;playground&quot;&gt;
&lt;div id=&quot;elm3&quot; style=&quot;background:#ccc; border:1px solid #999; width:100px; height:100px;&quot;&gt;&lt;/div&gt;
&lt;select id=&quot;select3&quot;&gt;
&lt;option value=&quot;ignore&quot;&gt;ignore&lt;/option&gt;
&lt;option value=&quot;chain&quot;&gt;chain&lt;/option&gt;
&lt;option value=&quot;cancel&quot;&gt;cancel&lt;/option&gt;
&lt;/select&gt; &lt;button id=&quot;example3-start&quot;&gt;Start&lt;/button&gt; &lt;button id=&quot;example3-reset&quot;&gt;Reset&lt;/button&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var effect3 = new Fx.Tween('elm3', {duration: 'long'});
$('example3-start').addEvent('click', function(){
        effect3.options.link = $('select3').get('value');
        effect3.start('margin-left', 300).start('background-color', '#0c0').start('border', '10px solid #000');
});
$('example3-reset').addEvent('click', function(){
        effect3.set('margin-left', 0);
        effect3.set('background-color', '#ccc');
        effect3.set('border', '1px solid #999');
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h4&gt;&lt;strong&gt;Przykład 4.&lt;/strong&gt; Występowanie zdarzeń w trakcie animacji:&lt;/h4&gt;
&lt;div class=&quot;playground&quot;&gt;
&lt;div id=&quot;elm4&quot; style=&quot;background:#ccc; border:1px solid #999; width:80px; height:80px; font-size:10px; padding:10px;&quot;&gt;&lt;/div&gt;
&lt;button id=&quot;example4-start&quot;&gt;Start&lt;/button&gt; &lt;button id=&quot;example4-pause&quot;&gt;Pause&lt;/button&gt; &lt;button id=&quot;example4-resume&quot;&gt;Resume&lt;/button&gt; &lt;button id=&quot;example4-cancel&quot;&gt;Cancel&lt;/button&gt; &lt;button id=&quot;example4-reset&quot;&gt;Reset&lt;/button&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var effect4 = new Fx.Tween('elm4', {
        duration: 2000,
        link: 'chain',
        onStart: function() {
                $('elm4').appendText('onStart ');
        },
        onCancel: function() {
                $('elm4').appendText('onCancel ');
        },
        onComplete: function() {
                $('elm4').appendText('onComplete ');
        },
        onChainComplete: function() {
                $('elm4').appendText('onChainComplete ');
        }
});
$('example4-start').addEvent('click', function(){
        effect4.start('margin-left', 300).start('background-color', '#0c0').start('border', '10px solid #000');
});
$('example4-pause').addEvent('click', function(){
        effect4.pause();
});
$('example4-resume').addEvent('click', function(){
        effect4.resume();
});
$('example4-cancel').addEvent('click', function(){  
        effect4.cancel();
});
$('example4-reset').addEvent('click', function(){
        effect4.set('margin-left', 0);
        effect4.set('background-color', '#ccc');
        effect4.set('border', '1px solid #999');
        $('elm4').empty();
});&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;h3 id=&quot;ch7&quot;&gt;Podsumowanie&lt;/h3&gt;
&lt;p&gt;Poznaliśmy podstawowy sposób tworzenia animacji w MooTools 1.3. W kolejnym wpisie skupię się na metodach animacji przypisanych do klasy &lt;strong&gt;Element&lt;/strong&gt;, które umożliwiają nam naprawdę szybkie (wymagające minimum kodu) definiowanie animacji - szczególnie użyteczne przy tworzeniu prostych i standardowych efektów.&lt;/p&gt;
&lt;!-- CODE --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://blog.dziudek.pl/files/mootools.js&quot;&gt;
&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;
        window.addEvent('load', function() {
                // Example 1
                var effect1 = new Fx.Tween('elm1');
                $('example1-start').addEvent('click', function(){
                        effect1.options.duration = $('select1').get('value');
                        effect1.start('margin-left', 0, 300);
                });
                $('example1-reset').addEvent('click', function(){
                        effect1.set('margin-left',0);
                });
                // Example 2
                var effect2 = new Fx.Morph('elm2');
                $('example2-start').addEvent('click', function(){
                        effect2.start({
                                'width': 300,
                                'height': 150,
                                'border': '3px solid #a00',
                                'background-color' : '#f00'
                        });
                });
                $('example2-back').addEvent('click', function(){
                        effect2.start({
                                'width': 100,
                                'height': 100,
                                'border': '1px solid #999',
                                'background-color' : '#ccc'
                        });
                });
                // Example 3
                var effect3 = new Fx.Tween('elm3', {duration: 'long'});
                $('example3-start').addEvent('click', function(){
                        effect3.options.link = $('select3').get('value');
                        effect3.start('margin-left', 300).start('background-color', '#0c0').start('border', '10px solid #000');
                });
                $('example3-reset').addEvent('click', function(){
                        effect3.set('margin-left', 0);
                        effect3.set('background-color', '#ccc');
                        effect3.set('border', '1px solid #999');
                });
                // Example 4
                var effect4 = new Fx.Tween('elm4', {
                        duration: 2000,
                        link: 'chain',
                        onStart: function() {
                                $('elm4').appendText('onStart ');
                        },
                        onCancel: function() {
                                $('elm4').appendText('onCancel ');
                        },
                        onComplete: function() {
                                $('elm4').appendText('onComplete ');
                        },
                        onChainComplete: function() {
                                $('elm4').appendText('onChainComplete ');
                        }
                });
                $('example4-start').addEvent('click', function(){
                        effect4.start('margin-left', 300).start('background-color', '#0c0').start('border', '10px solid #000');
                });
                $('example4-pause').addEvent('click', function(){
                        effect4.pause();
                });
                $('example4-resume').addEvent('click', function(){
                        effect4.resume();
                });
                $('example4-cancel').addEvent('click', function(){  
                        effect4.cancel();
                });
                $('example4-reset').addEvent('click', function(){
                        effect4.set('margin-left', 0);
                        effect4.set('background-color', '#ccc');
                        effect4.set('border', '1px solid #999');
                        $('elm4').empty();
                });
        });
&lt;/script&gt;</description><pubDate>Sun, 17 Oct 2010 14:54:52 +0200</pubDate><guid>http://blog.dziudek.pl/2010/10/17/animacje-w-mootools-1-3/</guid><category>JavaScript</category><category>mootools</category><category>Techblog</category><category>Webmastering</category><category>mootools 1.3 javascript</category></item><item><title>Internet Explorer to fenomen</title><link>http://blog.dziudek.pl/2010/10/11/internet-explorer-to-fenomen/</link><description>&lt;p&gt;Zawsze gdy odpalam stronę pod IE z zapartym tchem czekam na rezultaty tego co mi zdoła wyrenderować ta przeglądarka. Z reguły korekty są kosmetyczne, ale czasem natrafiam na problemy, które ciężko w ogóle zrozumieć, a co dopiero wyjaśnić i poprawić.&lt;/p&gt;
&lt;p&gt;IE niezwykłe jest już pod tym względem, że to jedyna przeglądarka, dla której muszę testować stronę na dwóch (a w niedalekiej przyszłości z okazji wydania IE9 prawdopodobnie na trzech) różnych wersjach. W wypadku Firefoksa, Chrome czy Safari nie pamiętam kiedy ostatni raz miałem zainstalowane dwie lub więcej wersji tej samej przeglądarki. A żeby było ciekawiej, na kilka tysięcy różnych zgłoszeń problemów dosłownie kilka było związanych z tym, że coś się źle wyświetla na jakiejś starszej wersji Firefoksa (w wypadku Chrome, Safari i Opery w ogóle takich zgłoszeń nie było). Jak widać z reguły wystarcza najnowsza wersja danej przeglądarki.&lt;/p&gt;
&lt;p&gt;W wypadku IE sprawa lubi się skomplikować. Ostatnio dostałem informację, że formularz nie rozwija się poprawnie w IE7 i IE8 po naciśnięciu przycisku. Cóż - byłem pewien, że testowałem tą funkcjonalność, ale dla pewności otwieram stronę w IE8, potem w IE7, dla pewności robię to samo odpalając 64-bitową wersję przeglądarki i znowu test dla IE7, IE8... nic... wszystko działa. Idę do komputera z Win XP (już widziałem parę różnic w działaniu IE7 na XP i Win7) gdzie zainstalowane jest IE7 - dalej to samo - działa. Odpalam IETester - IE7 działa, IE8... mam! Rzeczywiście dzieje się tak jak opisano.&lt;/p&gt;
&lt;p&gt;I tu zaczyna się problem - jak to trakować ? Na 7 przypadków tylko w jednym coś nie działa i na dodatek nie jest to normalna przeglądarka tylko swego rodzaju emulator. Muszę przyznać, że nigdy na innych przeglądarkach takich akcji nie widziałem i to nawet na różnych systemach. W tym wypadku nawet nie wiadomo gdzie szukać przyczyny błędu.&lt;/p&gt;
&lt;p&gt;To niezwykłe, że ten sam (podobno) silnik renderujący działa inaczej w zależności od systemu. O problemach z renderowaniem wersji 64-bitowej nie wspomnę. Ostatnio nawet dla pewności odinstalowałem betę IE9, bo też już zauważyłem pewne różnice w wypadku trybu IE7 i IE8.&lt;/p&gt;
&lt;p&gt;I żeby nie było - nie jestem pasjonatem tzw. pixel perfect w layoutach pod różnymi przeglądarkami, ale wypada zareagować gdy przykładowo kolumny z niewiadomych przyczyn wpadają pod siebie ;)&lt;/p&gt;
&lt;p&gt;Tak szczerze - naprawdę MS korona by z głowy nie spadła gdyby oparli IE na WebKit (o grubych milionach zbędnie wydanych na programistów tworzących silnik renderujący od podstaw nie wspominając), zamiast odkrywać Amerykę na nowo i doprowadzając webmasterów do szału. Zwłaszcza, że jak tak patrzę co nieraz wyrzuca IE9 to mam wrażenie, że MS chyba nie zrozumiał tego iż kilku lat technologicznego zastoju nie da się szybko i bezboleśnie nadrobić.&lt;/p&gt;
</description><pubDate>Mon, 11 Oct 2010 13:10:07 +0200</pubDate><guid>http://blog.dziudek.pl/2010/10/11/internet-explorer-to-fenomen/</guid><category>Ogólne</category><category>Przemyślenia</category></item><item><title>Empik - czyli jak tego nie powinno się robić</title><link>http://blog.dziudek.pl/2010/10/10/empik-czyli-jak-sie-tego-nie-powinno-robic/</link><description>&lt;p&gt;Empik przeprowadzał &quot;chwilową&quot; modernizację swojego serwisu przez jakieś 40 godzin. Wolę sobie nie wyobrażać ile potencjalnych klientów musiało zrezygnować z zakupów. Natomiast całe to hasło &quot;teraz książki się e-czyta&quot; po małej analizie brzmi raczej jak żart niż poważna prorocza teza.&lt;/p&gt;
&lt;p&gt;Tak - ceny są jak to mówią &quot;z kosmosu&quot;. Nie trzeba daleko szukać by zauważyć, że ceny wielu e-wydań są w podobnych cenach co tradycyjnie wydane tytuły, a czasem nawet (o zgrozo) droższe. Ja rozumiem, że wydawca chce zarobić, ale w tym wypadku to chyba chciwość przejęła zupełną kontrolę nad logiką. Nie muszę chyba mówić, że typowy obywatel naszego kraju widząc, że za podobną cenę ma do wyboru książkę papierową oraz e-wydanie z jakimiś ograniczeniami (DRMów na zwykłe książki póki co nie ma :&amp;gt;) i perspektywą wydania kolejnych kilkuset złotych na jakiś czytnik - no chyba sami wiecie co wybierze ;)&lt;/p&gt;
&lt;p&gt;Póki co z e-wydań tworzy się produkt dla pasjonatów nowinek (oczywiście nowinek jak na nasze polskie warunki), a tak raczej być nie powinno.&lt;/p&gt;
&lt;p&gt;Powiem szczerze - liczyłem na jakieś bardziej ludzkie ceny. Na przykładzie serwisu eGazety widać, że można takie oferować. Przykładowo Newsweek kosztuje 2.5 zamiast 10 złotych za wydanie, Forbes 5 zamiast 10 złotych. W wypadku dzienników jest już ciut gorzej - Dziennik Łódzki wychodzi około 1.1 złotego zamiast 1.65 (uśredniając ceny wydań w tygodniu), ale to wciąż około 1/3 ceny różnicy. Robi różnicę ? No i w wypadku gazet forma &quot;elektronicznej dostawy&quot; jest niesamowicie przydatna, bo nie trzeba biegać do kiosku codziennie. A książek nie kupuje się codziennie więc aspekt wygody jest tutaj troszkę nadużywany moim zdaniem.&lt;/p&gt;
&lt;p&gt;Mnie do zakupu e-wydania są w stanie skłonić dwie rzeczy: konkurencyjna cena (+wygoda jak w wypadku e-gazet) lub totalna niedostępność wydania papierowego (względnie perspektywa czekania kilku-kilkunastu dni na dostawę z zagranicy). Bez tego elektroniczne publikacje nie mają zbyt wielkich atutów w starciu ze swoimi tradycyjnymi odpowiednikami.&lt;/p&gt;
</description><pubDate>Sun, 10 Oct 2010 13:01:24 +0200</pubDate><guid>http://blog.dziudek.pl/2010/10/10/empik-czyli-jak-sie-tego-nie-powinno-robic/</guid><category>Przemyślenia</category></item><item><title>RubyCocoa - czyli aplikacje dla MacOS X w Ruby</title><link>http://blog.dziudek.pl/2010/10/05/rubycocoa-czyli-aplikacje-dla-macos-x-w-ruby/</link><description>&lt;p&gt;Moje pierwsze starcie z programowaniem aplikacji dla MacOS było dość bolesne - XCode i Interface Builder to nie jest IDE moich marzeń, ale i tak najgorsza z tego wszystkiego wydawała się konieczność zapoznania się z językiem Objective-C. Różne języki poznałem w swoim życiu, ale muszę przyznać, że składnia Obj-C mnie zwyczajnie odrzuca. I właściwie to pogrążyło moje nadzieje na tworzenie programów dla MacOS.&lt;/p&gt;
&lt;p&gt;Nie ukrywam, że byłem wniebowzięty gdy wyczytałem o istnieniu wsparcia Cocoa dla innych języków programowania - wybór padł od razu na Ruby - język, którego składnię bardzo polubiłem. I tak trafiłem na projekt &lt;a href=&quot;http://rubycocoa.sourceforge.net/HomePage&quot;&gt;RubyCocoa&lt;/a&gt;, który wspiera tworzenie aplikacji z użyciem Ruby.&lt;/p&gt;
&lt;p&gt;Najfajniejsze w tym wszystkim jest to, że w jednym projekcie możemy mieszać klasy napisane w Obj-C i Ruby. Zatem nie musimy się martwić o to, że będziemy musieli zrezygnować (lub przepisywać na Ruby) z ciekawych klas napisanych w Obj-C. Ja przykładowo testowo stworzyłem projekt wykorzystujący &lt;a href=&quot;http://mattgemmell.com/2007/10/03/maattachedwindow-nswindow-subclass&quot;&gt;MAAttachedWindow&lt;/a&gt;, który po małej korekcie kodu (zmiana jednej flagi) działa wyśmienicie z kodem napisanym w Ruby (bez zmian występował mały problem przy rysowaniu okienka).&lt;/p&gt;
&lt;p&gt;Dodatkowo życie uprzyjemniają &lt;a href=&quot;http://www.mywikibiz.com/RubyCocoa#How_to_call_Objective-C_methods_from_Ruby&quot;&gt;trzy możliwości wywoływania metod&lt;/a&gt;, które sprawiają, że przerobienie fragmentów kodu w Obj-C na Ruby jest banalnie proste. Przy okazji wtedy najlepiej widać ile oszczędzamy sobie pisania wykorzystując Ruby.&lt;/p&gt;
&lt;p&gt;Bardzo przydatne są &lt;strong&gt;:ib_outlet&lt;/strong&gt; oraz &lt;strong&gt;:ib_action&lt;/strong&gt;, które pozwalają z poziomu kodu Ruby definiować akcje i outlety dla Interface Buildera.&lt;/p&gt;
&lt;p&gt;Osobiście zamierzam przejść z RubyCocoa na &lt;a href=&quot;http://www.macruby.org/&quot;&gt;MacRuby&lt;/a&gt;, który jest bardziej przyszłościowy (bo wspierany przez Apple) i ma jeszcze łatwiejszą składnię.&lt;/p&gt;
&lt;p&gt;Najważniejsze jest jednak to, że przy tworzeniu aplikacji z użyciem Cocoa nie jesteśmy skazani na Obj-C, który dla wielu osób byłby po prostu kolejnym językiem do nauczenia :)&lt;/p&gt;
</description><pubDate>Tue, 05 Oct 2010 18:52:45 +0200</pubDate><guid>http://blog.dziudek.pl/2010/10/05/rubycocoa-czyli-aplikacje-dla-macos-x-w-ruby/</guid><category>MacOS</category><category>Ruby</category><category>Techblog</category></item><item><title>Tablety wygonią notebooki/netbooki z naszych domów ?</title><link>http://blog.dziudek.pl/2010/09/23/tablety-wygonia-notebooki-netbooki-z-naszych-domow/</link><description>&lt;p&gt;Gdy pokazywałem swojemu wujkowi iPada w pewnym momencie padły słowa &quot;mając coś takiego laptop jest w sumie niepotrzebny&quot;. Dla mnie oczywiście jest to wizja niemożliwa do zrealizowania, bo nie wyobrażam sobie pracy zawodowej na tablecie. Ale zwykły użytkownik komputera przecież nie pracuje na komputerze tylko służy mu on głównie do rozrywki.&lt;/p&gt;
&lt;p&gt;Gdybym przeanalizował do czego osoby z mojej rodziny wykorzystują komputery w domu to okaże się, że tak naprawdę wiele z tych zajęć nieodłącznie związanych jest z Internetem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;przeglądanie internetu (pochłaniające zresztą lwią część czasu spędzanego przy komputerze),&lt;/li&gt;
&lt;li&gt;przeglądanie e-maili (w Internecie zresztą),&lt;/li&gt;
&lt;li&gt;słuchanie muzyki,&lt;/li&gt;
&lt;li&gt;oglądanie filmów (głównie w Internecie),&lt;/li&gt;
&lt;li&gt;komunikatory,&lt;/li&gt;
&lt;li&gt;granie w gry (przy czym masa z nich to gry w internecie),&lt;/li&gt;
&lt;li&gt;sporadyczne wykorzystanie Worda i Power Pointa (jak siostrze w szkole każą),&lt;/li&gt;
&lt;li&gt;składowanie zdjęć.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I nagle okazuje się, że właściwie wszystko to można by robić na tablecie - w wypadku Worda i Power Pointa mogłaby się przydać zwykła klawiatura, ale taką można banalnie podłączyć przez bluetooth.&lt;/p&gt;
&lt;p&gt;Gdyby iPada wyposażyć w kamerkę, slot na karty pamięci, port USB i dodać obsługę Flasha to nagle okazałoby się, że ogromna część użytkowników komputerów nic więcej do szczęścia nie potrzebuje.&lt;/p&gt;
&lt;p&gt;A trzeba jeszcze zwrócić uwagę na jeden fakt: taki system iOS obsługuje się banalnie prosto a dodatkowo coś w nim popsuć jest wręcz niemożliwe. Choć to akurat zła wiadomość dla tych, którzy zajmują się odpłatną pomocą w takich przypadkach ;)&lt;/p&gt;
&lt;p&gt;Jestem wręcz gotów zaryzykować stwierdzenie, że Microsoft musi jak najszybciej przygotować godnego konkurenta iOS w wersji na iPada, jeżeli nie chce w ciągu kilku lat zniknąć ze świadomości tych użytkowników komputerów, którzy nie wykorzystują ich do pracy. Powiedzmy sobie otwarcie - Windows 7 na tablecie to ponury żart.&lt;/p&gt;
&lt;p&gt;Zwłaszcza, że zakup takiego iPada, gwarantuje nam, że przez przynajmniej jakieś 2 lata produkowane oprogramowanie będzie dostosowane do jego wydajności (czyli to co nam gwarantuje zakup konsoli do gier), bo nikt nie zaryzykuje straty kilku milionów potencjalnych klientów.&lt;/p&gt;
&lt;p&gt;Tak naprawdę ostatnią blokadą przed popularyzacją tabletów w Polsce może być i cena - dopóki tablety nie znajdą się w podobnym przedziale cenowym jak tanie laptopy, dla większości osób wybór: nowy sensowny laptop czy tablet będzie raczej jasny.&lt;/p&gt;
</description><pubDate>Thu, 23 Sep 2010 18:36:35 +0200</pubDate><guid>http://blog.dziudek.pl/2010/09/23/tablety-wygonia-notebooki-netbooki-z-naszych-domow/</guid><category>hardware</category><category>iPad</category><category>Przemyślenia</category></item><item><title>Coś dla tych co czują się młodo....</title><link>http://blog.dziudek.pl/2010/09/18/cos-dla-tych-co-czuja-sie-mlodo/</link><description>&lt;p&gt;... a muszą wyjść na miasto sami z 15 lat młodszym bratem ;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://dziudek.dreamhosters.com/stuff/t-shirt-1.jpg&quot; title=&quot;Kliknij aby powiększyć&quot;&gt;&lt;img src=&quot;http://dziudek.dreamhosters.com/stuff/t-shirt-1.jpg&quot; alt=&quot;t-shirt-1&quot; width=&quot;600&quot; height=&quot;480&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Powstałe na bazie &lt;a href=&quot;http://emptees.com/posts/73551-free-mock-up-kit-vol2&quot;&gt;świetnego PSD&lt;/a&gt;. Gdyby ktoś chciał więcej tego typu materiałów to polecam ten &lt;a href=&quot;http://speckyboy.com/2010/06/07/complete-collection-of-blank-t-shirt-mockup-templates/&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Sat, 18 Sep 2010 12:57:59 +0200</pubDate><guid>http://blog.dziudek.pl/2010/09/18/cos-dla-tych-co-czuja-sie-mlodo/</guid><category>Offtopic</category><category>t-shirt</category></item><item><title>iPad i jego wady</title><link>http://blog.dziudek.pl/2010/09/16/ipad-i-jego-wady/</link><description>&lt;p&gt;Wczoraj pisałem o tym &lt;a href=&quot;http://blog.dziudek.pl/2010/09/15/jak-ipad-zmienil-moje-przyzwyczajenia/&quot;&gt;jak iPad zmienił moje przyzwyczajenia&lt;/a&gt;, pora wspomnieć o mniej pozytywnych aspektach tego urządzenia. Po dłuższym okresie używania pewne rzeczy bardziej rzucają się w oczy. Nie będę w tym miejscu wspominał o wadach takich jak brak wielozadaniowości czy folderów znanych z iOS4, bo te funkcjonalności zostaną wprowadzone w listopadzie. Skupię się na tym co raczej szybko się nie zmieni.&lt;/p&gt;
&lt;p&gt;Poniżej 5 kwestii, które sprawiają, że iPad nie jest ideałem.&lt;/p&gt;
&lt;h3&gt;Brak flasha czasem boli&lt;/h3&gt;
&lt;p&gt;O ile w wypadku iPhone brak flasha nie był raczej uciążliwy poza przypadkami, kiedy twórcy strony okazywali totalny brak wyobraźni robiąc we flashu np. tylko menu (kto próbował przez iPhone zrobić rezerwację biletów w Cinema City ten zna mój ból), tak w wypadku iPada brak flasha jest bardziej odczuwalny. Oczywiście też jestem zwolennikiem koncepcji wyparcia flasha przez otwarte standardy sieciowe, ale problem polega na tym, że to nie nastąpi raczej w ciągu dwóch-trzech lat, zwłaszcza, że Adobe chce podobno wprowadzić &lt;a href=&quot;http://www.bytearray.org/?p=1836&quot;&gt;natywną obsługę 3D do flasha&lt;/a&gt; (kto kiedykolwiek się bawił Papervision lub innymi bibliotekami 3D we flashu wie, że obecnie 3D wydajnościowo leży i to właśnie ma się zmienić), co może dać tej technologii drugi oddech na kolejny okres. Mnie osobiście najbardziej boli brak możliwości odtworzenia filmików do niektórych artykułów - nie każdy używa do ich przechowywania YouTube czy Vimeo, które mają odtwarzacze wspierające urządzenia z systemem iOS.&lt;/p&gt;
&lt;h3&gt;Wyłączony input[type=file]&lt;/h3&gt;
&lt;p&gt;To kolejna wielka bolączka Safari w iOS. Chcesz wysłać fotografie z iPada na Facebooka z poziomu strony ? A może szybki upload screenshota ekranu na Blipa ? Przykro mi - bez paru kombinacji się nie obejdzie. O ile w wypadku Facebooka można wysyłać zdjęcia mailem lub poprzez programy typu iFiles, to już w wypadku Blipa ciągle muszę trzymać klienta tego serwisu z iPhone - tylko po to by móc w razie potrzeby wysyłać zdjęcia. Nie mam potrzeby robienia z iPada kolejnego dysku zewnętrznego, ale jednak możliwość uploadowania zdjęć by się przydała i chyba nie leży poza zdolnościami programistycznymi developerów iOS a szczególnie Safari.&lt;/p&gt;
&lt;h3&gt;iPhone wciąż atrakcyjniejszy dla developerów ?&lt;/h3&gt;
&lt;p&gt;To akurat bardzo subiektywna opinia, ale nie mogę się oprzeć wrażeniu, że aplikacji na iPada jest wciąż mało. W wypadku iPhone mogłem spędzić kilka wieczorów przeglądając AppStore i wciąż znajdując interesujące mnie aplikacje i gry. W wypadku iPada jest jakby biedniej i w sumie wciąż trochę brakuje tak genialnych aplikacji jak Flipboard czy Reeder.&lt;/p&gt;
&lt;h3&gt;Wymacany ekran&lt;/h3&gt;
&lt;p&gt;To jedna z większych bolączek urządzeń posiadających dotykowy ekran - po całym dniu nie wygląda on zbyt uroczo, a po fabrycznym połysku ekranu zostaje tylko wspomnienie z dnia rozpakowania urządzenia. I tu trzeba się zastanowić czy iPad służy nam głównie do oglądania jak sobie ładnie leży na stoliku czy też do pracy. W obu rolach sprawuje się znakomicie, jednak w pierwszym wypadku grozi nam wpadnięcie w szewską pasję wycierania ekranu, w drugim - szybko można zauważyć, że jeżeli nie macało się ekranu zaraz po jedzeniu kurczaka czy innych frytek to odcisków na podświetlonym ekranie praktycznie nie widać.&lt;/p&gt;
&lt;h3&gt;Ładowanie z baterii z laptopa&lt;/h3&gt;
&lt;p&gt;To dość zagadkowa kwestia - ponoć w większości laptopów zasilanie w portach USB nie pozwala na ładowanie iPada i pojawia się komunikat o tym, że bateria nie jest ładowana. Jak napisałem jest to zagadkowe z tego względu, że zauważyłem wzrost poziomu naładowania baterii po podłączeniu iPada do dłuższej synchronizacji. Zatem pewnie da się go naładować, ale potrwałoby to wieki (czyli na moje: z 12 godzin). Jest to trochę uciążliwe, bo z reguły dokonywałem synchronizacji urządzenia właśnie podczas ładowania go z laptopa, a teraz robię to od święta co trochę drażni, bo proces wydłuża się znacząco gdy trzeba sporo danych zaktualizować.&lt;/p&gt;
&lt;p&gt;A skoro już mowa o synchronizacji to do szału mnie doprowadza domyślne synchronizowanie aplikacji z iPada i iPhone: innymi słowy to co się da przenieść z iPada ląduje też na iPhone i na odwrót. Po synchronizacji mam zapewnione kilka chwil usuwania zbędnych aplikacji z obu urządzeń. Nie wiem kto na to wpadł, a ja do tej pory nie doszedłem jak to wyłączyć w iTunes, a drażni mnie to niemiłosiernie (zwłaszcza gdy ostatnio synchronizacja trwała dobrą godzinę bo kopiował mi się z iPhone NAVIGON od Ery, który oczywiście na iPadzie raz, że jest nieporzebny a dwa, że i tak by nie zadziałał).&lt;/p&gt;
&lt;h3&gt;Brak aparatu/kamerki&lt;/h3&gt;
&lt;p&gt;O ile brak kamerki takiej jak w iPhone 4 mi nie doskwiera - video w Skype używam naprawdę od święta a FaceTime nie miałem okazji przetestować, tak brak aparatu z tyłu urządzenia trochę boli. Trzeba zaraz brać telefon i robić nim zdjęcie, wrzucać np. na dropboxa i dopiero można na iPadzie ze zdjęcia skorzystać - przydałoby się skrócić ten proces ;)&lt;/p&gt;
&lt;h3&gt;Podsumowanie&lt;/h3&gt;
&lt;p&gt;Wiem, że mógłbym w tym spisie wspomnieć o jeszcze jednej ważnej kwestii - według wielu osób ekran LCD się nie nadaje do czytania ebooków. Z pewnością jest w tym sporo racji, ja jednak już przywykłem do czytania ogromnej ilości tekstów z monitora i dopóki nie przetestuję Kindle lub innego czytnika ebooków wykonanego w technologii e-Ink dopóty nie będę się w tej kwestii wypowiadał, bo osobiście nie odczuwam dyskomfortu nawet przy dłuższym czytaniu z iPada, a punktu odniesienia czy może być dużo lepiej nie mam.&lt;/p&gt;
</description><pubDate>Thu, 16 Sep 2010 19:06:50 +0200</pubDate><guid>http://blog.dziudek.pl/2010/09/16/ipad-i-jego-wady/</guid><category>hardware</category><category>iPad</category><category>Przemyślenia</category></item><item><title>Jak iPad zmienił moje przyzwyczajenia</title><link>http://blog.dziudek.pl/2010/09/15/jak-ipad-zmienil-moje-przyzwyczajenia/</link><description>&lt;p&gt;Już prawie półtora miesiąca korzystam z iPada i zauważyłem, że znacząco zmienił on moje niektóre przyzwyczajenia związane z wykorzystaniem Internetu. Oczywiście cała zasługa w cechach jakie posiada iPad. Poniżej 5 najważniejszych zmian jakie wniósł on do mojego obcowania z Internetem.&lt;/p&gt;
&lt;h3&gt;Zawsze może być lepiej&lt;/h3&gt;
&lt;p&gt;Kiedyś uważałem, że laptop to szczyt mobilności - w końcu można go zabrać ze sobą, usadowić się w dowolnym pokoju i korzystać. Teraz już wiem, że dopiero iPad zapewnił mi prawdziwą swobodę w korzystaniu z Internetu. W wielkim skrócie teksty &quot;&lt;i&gt;Chodź to Ci coś pokażę w Internecie&lt;/i&gt;&quot; zmieniły się na &quot;&lt;i&gt;Zobacz&lt;/i&gt;&quot; - to robi gigantyczną różnicę.&lt;/p&gt;
&lt;h3&gt;Szybciej już prawie się nie da&lt;/h3&gt;
&lt;p&gt;Wstaję rano i chcę przed śniadaniem sprawdzić pocztę, zrobić przegląd Facebooka i Blipa. Odpalenie laptopa zajmuje 2-3 minuty i co dla mnie najgorsze - trzeba wyjść z ciepłego łóżeczka ;) Na iPadzie uzyskanie dostępu do Internetu to czas potrzebny na wykonanie dwóch przyciśnięć - przycisku Home i ikonki Safari. Efekt? Laptopa odpalam dopiero 2-3h po wstaniu z łóżka.&lt;/p&gt;
&lt;h3&gt;ePrasówka&lt;/h3&gt;
&lt;p&gt;Kiedyś zarzuciłem w ogóle czytanie prasy - nie było czasu i ochoty chodzić do kiosku. Po tym jak odkryłem &lt;a href=&quot;http://www.egazety.pl/&quot;&gt;eGazety&lt;/a&gt; na nowo zaprzyjaźniłem się z prasą - tym razem w wydaniu elektronicznym. Kilkanaście sekund i mam od samego rana (z reguły już od 4-5 rano) dostęp do najświeższego wydania subskrybowanych gazet, a przy tym wychodzi mnie to dużo taniej (kilkanaście procent tańsze wydania). Same gazety przegląda się bardzo wygodnie (skalowanie strony jednym gestem to coś niesamowicie przydatnego) i przyjemnie.&lt;/p&gt;
&lt;h3&gt;iPhone już nie jest taki fajny&lt;/h3&gt;
&lt;p&gt;Telefon zaczął mi w końcu wytrzymywać 3-4 dni na baterii - to najbardziej widoczny efekt tego, że używam go znacznie rzadziej. Oczywiście w terenie jest niezastąpiony, ale w domu iPad nie ma konkurencji - podobna mobilność a wszystko jest większe, wyraźniejsze i po prostu wygodniejsze.&lt;/p&gt;
&lt;h3&gt;Znowu czytam RSSy&lt;/h3&gt;
&lt;p&gt;W pewnym momencie darowałem sobie czytanie RSSów gdyż zwyczajnie mi się to znudziło i zaczęło nużyć - i tak na Facebooku pojawiała się spora część interesujących mnie wpisów ze stron, które lubię. Ale po tym ja zobaczyłem aplikację &lt;a href=&quot;http://reederapp.com/&quot;&gt;Reeder&lt;/a&gt; - na nowo pokochałem RSSy :) Interfejs tej aplikacji jest według mnie po prostu idealny, a codzienny przegląd subskrypcji na nowo stał się przyjemnością.&lt;/p&gt;
&lt;p&gt;Podsumowując: pomimo obecnych wad iPada naprawdę pozwala on zaoszczędzić dużo czasu i wprowadza on korzystanie z Internetu na zupełnie inny poziom - poziom niesamowitej wygody użytkowania.&lt;/p&gt;
</description><pubDate>Wed, 15 Sep 2010 18:43:01 +0200</pubDate><guid>http://blog.dziudek.pl/2010/09/15/jak-ipad-zmienil-moje-przyzwyczajenia/</guid><category>hardware</category><category>iPad</category><category>Przemyślenia</category></item><item><title>Blog Day 2010</title><link>http://blog.dziudek.pl/2010/08/31/blog-day-2010/</link><description>&lt;p&gt;Zdążyłem wstać przed północą, więc się załapię z wpisem z okazji &lt;a href=&quot;http://www.blogday.org/&quot;&gt;dzisiejszego święta&lt;/a&gt; ;) Zgodnie z tradycją: lista pięciu blogów, które chciałbym Wam polecić. Kolejność przypadkowa ;)&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://wtfjs.com/&quot;&gt;1. wtfjs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Myślę, że każdy kto przejrzy stronę główną i miał styczność z JavaScript zrozumie główną ideę - zbieranie w jednym miejscu różnych ciekawych zjawisk mających miejsce w kodzie skryptów :)&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://3dsmaxrendering.blogspot.com/&quot;&gt;2. 3DS Max Rendering&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pozycja dla tych co lubią sobie porenderować. Ja osobiście zauważyłem, że dużo bardziej niż modelować lubię bawić się ustawieniami rendererów celem osiągnięcia różnych ciekawych efektów stąd takie specyficzne pozycje mam w czytniku RSSów :) Swoją drogą dla osób lubiących tego typu tematy polecam książkę &lt;a href=&quot;http://helion.pl/ksiazki/cyfrowe_oswietlenie_i_rendering_wydanie_ii_jeremy_birn,cyfos2.htm&quot;&gt;Cyfrowe oświetlenie i rendering&lt;/a&gt; - bardzo ciekawa pozycja i do tego ładnie wydana.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://szymon.tumblr.com/&quot;&gt;3. inspire me now&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tą pozycję polecam wszystkim, którzy szukają swojej codziennej porcji inspiracji - dosyć dużo wpisów się pojawia, więc można przetrwać nudne wykłady jak się przypadkiem na nie chodzi ;)&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://www.cytadela.net.pl/&quot;&gt;4. Cytadela&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Coś dla miłośników fizyki, a szczególnie astronomii. Dużo ciekawego materiału na niekoniecznie proste tematy przedstawionego w przystępnej formie.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;http://jakzyc.wordpress.com/&quot;&gt;5. Jak żyć&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Na koniec motyw humorystyczny - odkryłem tego bloga przypadkiem. Niektóre teksty są naprawdę mocne i życiowe ;)&lt;/p&gt;
&lt;h3&gt;Na koniec&lt;/h3&gt;
&lt;p&gt;Dawno tutaj nie pisałem, ale niebawem powrócę - ostatnio troszkę się skupiłem na swoim blogu o &lt;a href=&quot;http://joomla.jogger.pl&quot;&gt;Joomla!&lt;/a&gt;, naszykowałem też &lt;a href=&quot;http://webnook.pl/stuff/entry.jpg&quot;&gt;nowy layout&lt;/a&gt;, który w wolnej chwili umieszczę na swoich blogach, a potem zajmę się pisaniem :) Główna tematyka pewnie trochę się zmieni - tak bardzo pokochałem swojego iPad-a, że na pewno poświęcę mu trochę wpisów, a dodatkowo prawdopodobnie będzie sporo o Google Maps API i ogólnie o różnych API popularnych serwisów bo jest to ściśle związane z tematem mojej pracy inżynierskiej i na pewno pojawi się sporo ciekawych kwestii którymi będę się chciał z Wami podzielić ;)&lt;/p&gt;
</description><pubDate>Tue, 31 Aug 2010 22:05:57 +0200</pubDate><guid>http://blog.dziudek.pl/2010/08/31/blog-day-2010/</guid><category>Ogólne</category><category>blogday2010 blogi</category></item><item><title>Joomla! [PRACA]</title><link>http://blog.dziudek.pl/2010/03/26/joomla-praca/</link><description>&lt;p&gt;Gdyby ktoś był zainteresowany składaniem szablonów dla Joomla! za naprawdę godziwe pieniądze to zapraszam do zapoznania się z &lt;a href=&quot;http://www.scigani.pl/praca-it/3277/praca-xhtml-css-php-sql-webmaster-dla-gavickpro&quot;&gt;tą ofertą&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Fri, 26 Mar 2010 09:41:10 +0100</pubDate><guid>http://blog.dziudek.pl/2010/03/26/joomla-praca/</guid><category>Ogólne</category></item><item><title>joomla.jogger.pl</title><link>http://blog.dziudek.pl/2010/02/15/joomla-jogger-pl/</link><description>&lt;p&gt;Jeżeli komuś tematyka związana z CMS-em Joomla! jest bliska to zapraszam na swój nowy blog pod adresem:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joomla.jogger.pl/&quot;&gt;joomla.jogger.pl/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Zapewne wpisy będą się na nim częściej pojawiać niż tutaj ;)&lt;/p&gt;
</description><pubDate>Mon, 15 Feb 2010 00:20:13 +0100</pubDate><guid>http://blog.dziudek.pl/2010/02/15/joomla-jogger-pl/</guid><category>Ogólne</category></item><item><title>HTC vs. iPhone</title><link>http://blog.dziudek.pl/2009/12/28/htc-vs-iphone/</link><description>&lt;p&gt;Przeszło miesiąc temu wyposażyłem się w iPhone 3GS. Wcześniej przez półtora roku korzystałem z HTC Touch Diamond i korzystając z tej okazji przygotowałem swego rodzaju porównanie tych telefonów. Oba telefony w momencie zakupu znajdowały się w podobnym przedziale cenowym jeżeli chodzi o cenę aparatu bez abonamentu &lt;sup&gt;[1]&lt;/sup&gt; - w wypadku iPhone uzbroiłem się w abonament gdyż bez mobilnego dostępu do Internetu ten telefon nie ma racji bytu (jak zresztą chyba wszystkie nowsze telefony).&lt;/p&gt;
&lt;p&gt;Muszę przyznać, że dość długo rozważałem ten zakup czytając w sieci różne za i przeciw by w końcu dość impulsywnie skusić się. Mam wrażenie, że masa negatywnych opinii o iPhone pochodzi od ludzi, którzy tego telefonu w ręku nie mieli, a co dopiero mówić o dłuższym używaniu. Swoją drogą gdybym dorwał HTC w swoje ręce przed zakupem to nie wiem czy pisałbym o nim jako swoim poprzednim telefonie teraz.&lt;/p&gt;
&lt;h3&gt;Pierwsze wrażenie&lt;/h3&gt;
&lt;p&gt;Jak już człowiek coś kupi to liczy, że to co nabył będzie sprawować się bezproblemowo od samego początku. W wypadku iPhone wszystko przebiegło sprawnie (choć ten wymóg posiadania iTunes na komputerze może niektórych trochę drażnić) i po kilkunastu minutach telefon był gotów do boju (miałem przez parę minut stracha, że nieszczęśliwie trafiłem z chipsetem w laptopie &lt;sup&gt;[2]&lt;/sup&gt;). Jeśli chodzi o HTC to dwie &quot;przygody&quot; są warte odnotowania - po pierwsze kalibracja ekranu - do dziś coś mnie trafia jak mam ją przeprowadzić (na szczęście to rzadka &quot;przyjemność&quot;) - generalnie opiera się to na macaniu ekranu w nadziei, że kiedyś się uda. Druga sprawa - telefon się włączył, wszystko ładnie, pięknie - zaczynamy podróżować palcem po ekranie i w tym momencie po prostu czuć, że to nie to… coś jest nie tak - telefon zwyczajnie MULI. I rzeczywiście - firmware 1.37 (o ile dobrze pamiętam) był IMHO z lekka niedorobiony, interfejs Touch Flo 3D po prostu się wlókł - do płynności z filmów pokazowych brakowało mu dużo… za dużo… Oczywiście problem udało się jakoś rozwiązać - ściągnąłem jakiś magiczny software, zwiększyłem to i owo, odhaczyłem tamto i owamto - zaczęło działać znośnie choć ciągle to nie było to czego bym chciał, ale lepszych rozwiązań wtedy nie udało się znaleźć. Dopiero wraz z firmware 2.* telefon zaczął działać &quot;jako tako&quot;.&lt;/p&gt;
&lt;p&gt;Co do designu obu telefonów i urządzeń pobocznych nie będę się rozwodził - oba telefony prezentują wysoki poziom projektu i wykonania - chyba tylko ktoś o wyszukanym guście mógłby powiedzieć, że są brzydkie.&lt;/p&gt;
&lt;h3&gt;Drugie wrażenie - czyli początki użytkowania&lt;/h3&gt;
&lt;p&gt;Jest parę operacji, które wykonuję bardzo często w telefonie i jestem wniebowzięty jeżeli przebiega to tak sprawnie, że nie muszę prawie zwracać na to uwagi. W iPhone po kliknięciu przycisku zasilania włącza się blokada klawiszy, kliknięcie największego przycisku powoduje aktywowanie ekranu, włączenie alarmu wibracyjnego to kwestia przestawienia jednego przełącznika na obudowie telefonu, odłożenie telefonu od ucha powoduje aktywowanie się ekranu, który się wyłącza w momencie przyłożenia aparatu do ucha. W HTC żadne z tych udogodnień standardowo nie istniało. Oczywiście - zapewne większość z tych zachcianek można spełnić poprzez zmianę czegoś tam w ustawieniach lub instalację kolejnej dziwnej malutkiej aplikacji, która zrobi to za nas. Tylko pytam się - dlaczego nie było tak oczywistych funkcjonalności w standardzie ? Potem jako nowicjusz włóczy się człowiek po forach szukając rozwiązań w sprawach o których powinni pomyśleć producenci aparatu i oprogramowania!&lt;/p&gt;
&lt;p&gt;I jeszcze jedna wielka wada mojego HTC - nie dociekłem czy to kwestia jakichś ustawień czy po prostu on tak ma, ale w czasie rozmowy (tak - takie telefony do tego też czasem służą ;) dźwięk rozmówcy był zdecydowanie za cichy - do tego stopnia, że właściwie w bardziej tłocznym i gwarnym miejscu po prostu często nie dało się porozmawiać, bo nie było nic słychać.&lt;/p&gt;
&lt;p&gt;I jeden plus dla HTC - coś czego mi trochę brakuje na co dzień w iPhone - podświetlane kółeczko sygnalizujące nieodebrane połączenia/wiadomości - świetny pomysł, bo lubię wyjść w teren bez telefonu - dzięki niemu przy powrocie od razu widziałem czy ktoś czegoś ode mnie nie chciał bez ruszania telefonu.&lt;/p&gt;
&lt;h3&gt;System operacyjny - WM 6.1 vs. iPhone OS&lt;/h3&gt;
&lt;p&gt;No w tej kwestii to iPhone miażdży zupełnie HTC. WM 6.1 to totalna pomyłka dla telefonu z dotykowym wyświetlaczem - obsługiwanie systemu palcem poza Touch Flo 3D jest po prostu uciążliwe. Jakoś tą sztukę opanowałem po pewnym czasie - natomiast nie wyobrażam sobie używać rysika do podstawowych spraw typu pisanie SMS-ów czy obsługa systemu - nie po to kupowałem telefon z dotykowym wyświetlaczem by posuwać po nim rysikiem - w takiej sytuacji już lepiej sprawić sobie coś z klawiaturą QWERTY - zwyczajnie mniej upierdliwe i nie zgubi się ciągle wyciąganego i wkładanego rysika (na plus HTC dodam, że pomyśleli o zapasowym w zestawie). Rysik od zawsze akceptowałem tylko do odręcznych notatek ;) Kolejna sprawa to tragiczny wygląd samego systemu - wychodząc poza Touch Flo 3D ma się wrażenia cofnięcia o 3 epoki do ery Windows 98 - bo tak mniej więcej wygląda interfejs. W iPhone OS wszystko wygląda porządnie, wszelkie przyciski są wystarczająco duże by w nie trafić, a sam interfejs w większości aplikacji jest spójny i intuicyjny. Jeżeli chodzi o szybkość działania to co tu kryć - WM 6.1 chodził według mnie dość topornie - nawet odpalenie Opery chwilę trwało - w porównaniu do Safari z iPhone OS to tak jakby porównywać Firefoksa do Google Chrome - kto używa obu ten wie o czym mówię.&lt;/p&gt;
&lt;p&gt;Właściwie jest jedna wada iPhone OS, która niektórych może martwić - brak możliwości działania aplikacji z AppStore w tle (bo np. muzyki w tle da się posłuchać). Zamiast tego istnieje PUSH, który okresowo wykonuje magiczne operacje typu: sprawdzenie ile maili nam doszło na skrzynce pocztowej. Oficjalnie chodzi o kwestię użycia baterii, nieoficjalnie nie wnikałem jaki jest powód takiego ograniczenia. Tak naprawdę ta wada jest zauważalna tylko wtedy kiedy użytkownik ma ogromną potrzebę bycia online nawet gdy telefon leży sobie spokojnie w kieszeni (inaczej mówiąc musisz mieć wiecznie odpalony komunikator IM w tle - szczerze mówiąc innych zastosowań dla aplikacji na telefon działających w tle za bardzo nie widzę) - ja takiej potrzeby nigdy nie miałem i raczej mieć nie będę, zwłaszcza że na telefonie z racji gabarytów i tak wiele nie zdziałasz w sprawach zawodowych (to samo zrobisz via SMS, a jeszcze szybciej i lepiej poprzez rozmowę telefoniczną), a ukochana/ukochany z reguły są w stanie przeżyć chwile naszej nieobecności albo już mają wykupiony pakiet darmowych SMS-ów / rozmów na nasz numer. A dla tych, którzy naprawdę mają takie potrzeby pozostaje zapewne rozwiązanie a'la HTC - &quot;Jailbreak + jakaśMagicznaAplikacja&quot;, bo pewnie się jakoś da odpalić kilka aplikacji naraz. Ale tak między nami - trochę geekowato jak już nawet w kolejce po ogórki w osiedlowym spożywczaku masz potrzebę pogadania poprzez XMPP z kimś ;)&lt;/p&gt;
&lt;h3&gt;Trochę o hardware&lt;/h3&gt;
&lt;p&gt;Czułość wyświetlacza w iPhone jest nieporównywalnie lepsza od tej z HTC - jak dla mnie dwa światy, co widzę szczególnie teraz użytkując oba telefony naraz - w HTC muszę dość mocno naciskać ekran bo gesty z którymi się oswoiłem w iPhone nie powodują żadnej reakcji wyświetlacza HTC.&lt;/p&gt;
&lt;p&gt;Rozmiary wyświetlacza - te 0.7 cala w wymiarach wyświetlaczy robi ogromną różnicę. Można by narzekać, że rozdzielczość wyświetlacza w iPhone jest za mała, ale według mnie 640x480 w HTC to jest gruba przesada - w iPhone wcale nie odczułem bym potrzebował większej rozdzielczości - jest tak akurat :) Jest to doskonały przykład tego jak większe cyferki w specyfikacji wcale nie znaczą, że coś jest lepsze. Tak swoją drogą kiedyś odpaliłem jakąś grę w rozdzielczości jaką oferuje maksymalnie HTC - bez rysika nie podchodź! - a co do rysika to już się wypowiadałem ;)&lt;/p&gt;
&lt;p&gt;Multitouch - no cóż, kto bawił się jakąś ciekawszą aplikacją na iPhone (np. Google Earth) ten wie, że to cudo ;)&lt;/p&gt;
&lt;p&gt;Aparat fotograficzny - tu w zasadzie nie wiem czy w ogóle jest sens oceniać - jak dla mnie aparat w telefonie to coś co po prostu ma być po to by można było sfotografować &quot;na szybko&quot; coś istotnego. Oba telefony mają podobnej jakości osprzęt i nigdy nie miałem wysokich wymagań w tej kwestii. Tym którzy lecą na 10MPix w telefonie gratuluję znajomości praw fizyki ;) Jeżeli zaś chodzi o lampę - w swoim SE ją mam i kiedyś nawet robiłem z jej użyciem zdjęcia w nocy - szczerze mówiąc szału nie było i dużo więcej na zdjęciach widać nie było - mam wrażenie, że z tymi lampami podobnie jak z tymi megapikselami - fajnie wygląda to w specyfikacji telefonu, bo praktyczność takiego rozwiązania znajduje się dużo poniżej oczekiwań.&lt;/p&gt;
&lt;p&gt;Bateria - HTC wytrzymywał mi około 3 dni na standardowej baterii jak prawie nic z nim nie robiłem. Przy przeciętnym użytkowaniu bateria potrafiła paść po jednym dniu (i z tego co czytałem w sieci to raczej normalne). Pewnie da się znowu jakimiś szamańskimi metodami to zmienić, ale ja na takie zabawy zwyczajnie nie miałem czasu i oszczędzanie baterii skończyło się u mnie na wyłączeniu 3G w telefonie. iPhone natomiast wytrzymuje mi średnio 2 dni przy 6 godzinach użytkowania przy WŁĄCZONYM 3G (sam pomysł umieszczenia tego typu informacji w łatwo dostępnym miejscu jest świetny) - w HTC o takich osiągach mogłem co najwyżej pomarzyć (może większa bateria dałaby radę).&lt;/p&gt;
&lt;p&gt;Kamera do rozmów wideo - to jest kolejny gadżet z HTC, którego NIGDY nie użyłem i który fajnie wygląda tylko w specyfikacji telefonu. BTW czy ktoś w ogóle prowadził wideo-rozmowy w celach innych niż testowe ? Mam wrażenie, że ten wynalazek to coś pokroju WAP - niby super-ekstra-nowoczesne ale tak naprawdę do niczego nieprzydatne - krótko mówiąc : bezużyteczny bajer. Tak naprawdę nawet te MMS-y których brak obsługi niektórzy mocno wytykali w starszych iPhone - wydawały mi się przez wiele lat zbędne. Dopiero jakoś od okresu wakacji mi się przydały w wypadku jednej osoby, ale jeżeli w takim tempie to idzie to na pewno do czasu kiedy wideo-rozmowy będą mi potrzebne iPhone się w dodatkową kamerkę uzbroi :)&lt;/p&gt;
&lt;h3&gt;Inne aplikacje&lt;/h3&gt;
&lt;p&gt;App Store to miejsce, które po prostu wciąga - ogromna ilość aplikacji z czego duża część darmowa. Popularność iPhone sprawiła, że możemy liczyć na dostępność pozycji od naprawdę znanych i cenionych firm takich jak Electronic Arts czy Autodesk. Można narzekać, że co fajniejsze aplikacje/gry są płatne ale spójrzmy prawdzie w oczy - stać Cię na utrzymanie telefonu wynoszące w sumie kilka tysięcy PLN, a szkoda Ci wydać 3 euro na pełną wersję gry ? No wtedy coś tu nie gra na mój gust. Osobiście jeszcze nie udało mi się znaleźć czegoś co byłoby mi potrzebne i nie znajdowało się w App Store ;)&lt;/p&gt;
&lt;p&gt;Fajnie gdy można zainstalować aplikacje z innych źródeł, ale z drugiej strony - pobierając/kupując w App Store mamy prawie 100% pewność, że pobrane oprogramowanie jest wolne od złośliwego kodu i zostało przetestowane na naszej platformie - czyli krótko mówiąc - zadziała.&lt;/p&gt;
&lt;p&gt;A co do ciekawych gier/aplikacji - to temat na osobny wpis, który się kiedyś na pewno pojawi ;)&lt;/p&gt;
&lt;h3&gt;Programowanie&lt;/h3&gt;
&lt;p&gt;Pisanie aplikacji to jeden z nielicznych obszarów gdzie mój poczciwy HTC ma wciąż dużą przewagę nad iPhone - Visual Studio , SDK i można pisać pod Windows Mobile (np. w moim ulubionym C#).&lt;/p&gt;
&lt;p&gt;Z iPhone OS jest trochę gorzej - po pierwsze musisz mieć maca. Po drugie musisz znać dość nietypowy język jakim jest Objective-C - poza środowiskiem MacOS raczej niespotykany (są też jakieś rozwiązania by pisać dla iPhone w innych językach, ale nie zgłębiałem tego tematu jeszcze). I wreszcie po trzecie - aby móc przetestować swoją aplikację musisz wydać $99 na certyfikat, który umożliwi odpalenie aplikacji na telefonie - bez tego pozostaje testowanie w emulatorze. Oczywiście można emulować MacOS, a certyfikat zapewne ominie się przez Jailbreak, ale na mój gust przy takiej kombinacji dochodzi punkt czwarty - kupno koszulki &quot;jestem hardkorem&quot; (zwłaszcza gdy chcesz sobie wmówić, że emulowany MacOS wcale nie muli ;)&lt;/p&gt;
&lt;p&gt;Samo środowisko programistyczne z SDK jest porządne - XCode wraz z Interface Builder-em i emulatorem iPhone tworzą całkiem zgrabne trio (choć i tak bardziej lubię Visual Studio). Dla prawdziwych zapaleńców widziałem nawet jakiś Shader Builder&lt;sup&gt;[3]&lt;/sup&gt; do OpenGL.&lt;/p&gt;
&lt;p&gt;A swoją drogą co do OpenGL pod iPhone to wątek jest dość ciekawy i intrygujący (przynajmniej dla mnie), przy czym tworzenie aplikacji w OpenGL ES jest &quot;odrobinkę&quot; bardziej uciążliwe niż ma to miejsce w przypadku tradycyjnych platform - pierwsza rzecz, która rzuca się w oczy to brak instrukcji &lt;b&gt;glBegin&lt;/b&gt; i &lt;b&gt;glEnd&lt;/b&gt; - w ramach optymalizacji trzeba korzystać z tablic wierzchołków. Druga rzecz, która już mi się rzuciła w oczy - &lt;b&gt;glRotate&lt;/b&gt;, &lt;b&gt;glScale&lt;/b&gt;, &lt;b&gt;glTranslate&lt;/b&gt; może i istnieją w specyfikacji OpenGL ES, ale natychmiastowe pady emulatora dały mi do zrozumienia, że chyba jednak zamiast tych instrukcji należy stosować ręcznie macierze transformacji - także chyba będzie trzeba w końcu je sobie wydrukować i powiesić nad łóżkiem. Zresztą z tego co wyczytałem standardowe instrukcje transformacji są dość nieefektywne w iPhone… no dobra… koniec wywodu może pokuszę się kiedyś o wpis na temat OGL w iPhone jak zgłębię temat i Objective-C ;)&lt;/p&gt;
&lt;h3&gt;Pozostałe&lt;/h3&gt;
&lt;p&gt;Wpis się trochę rozrósł a i tak pewne kwestie prawdopodobnie pominąłem - gdyby kogoś interesowało coś konkretnego to proszę śmiało pytać :)&lt;/p&gt;
&lt;h3&gt;Podsumowanie&lt;/h3&gt;
&lt;p&gt;Nie ukrywam, że HTC Touch Diamond rozczarowuje przy iPhone - mam wrażenie, że jest nieprzemyślanym i niedopracowanym produktem - kiepski (zwłaszcza przy iPhone) ekran, system operacyjny niedostosowany do telefonów z dotykowym wyświetlaczem, wolne działanie standardowej konfiguracji czy brak wielu udogodnień zwiększających wygodę użytkowania to podstawowe bolączki tego telefonu. Posiada udogodnienia z których 99% użytkowników nigdy nie skorzysta (patrz np. kamerka do wideo-rozmów). Z kolei iPhone ma wszystko to czego potrzeba normalnemu użytkownikowi telefonu, a nawet trochę więcej - jest to telefon który w pełni zasługuje na miano multimedialnego. HTC jest dobry dla osób, które lubią dużo grzebać przy swoim telefonie (choć iPhone po Jailbreak prawdopodobnie pod względem możliwości modyfikacji mu nie ustępuje) i mają czas na to by przeszukiwać fora w poszukiwaniu odpowiedzi na swoje potrzeby. Przeciętnemu użytkownikowi iPhone sprawi zdecydowanie mniej problemów i więcej przyjemności z użytkowania.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;[1] niestety jest to przedział &quot;Chyba Cię #%#$^!&amp;amp;%&amp;amp;*%, że można wydać tyle na telefon ?!&quot;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;[2] &lt;a href=&quot;http://tech.wp.pl/kat,1009781,title,Windows-7-nie-widzi-iPhonea,wid,11662966,wiadomosc.html?ticaid=195ab&quot;&gt;http://tech.wp.pl/kat,1009781,title,Windows-7-nie-widzi-iPhonea,wid,11662966,wiadomosc.html?ticaid=195ab&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;[3] &lt;a href=&quot;http://developer.apple.com/graphicsimaging/opengl/shader_image.html&quot;&gt;http://developer.apple.com/graphicsimaging/opengl/shader_image.html&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</description><pubDate>Mon, 28 Dec 2009 14:54:14 +0100</pubDate><guid>http://blog.dziudek.pl/2009/12/28/htc-vs-iphone/</guid><category>iPhone</category></item><item><title>iPhone ciągle łączy się z siecią ?</title><link>http://blog.dziudek.pl/2009/12/27/iphone-ciagle-laczy-sie-z-siecia/</link><description>&lt;p&gt;Tytuł wpisu może być odrobinę mylący, bo tak naprawdę opisywany problem nie tyczy się tylko iPhone, ale po prostu poszukując odpowiedzi na tego typu pytanie nie znalazłem satysfakcjonującej mnie odpowiedzi (Wujku Google - indeksuj) a z tego co widziałem sporo osób miało/ma/będzie mieć podobny problem.&lt;/p&gt;
&lt;p&gt;Otóż jakiś czas temu zauważyłem, że bateria w iPhone po prostu znika w oczach, mimo że telefon nie był prawie używany - naładowałem telefon przed snem, wstaję rano (dodam, że sypiam względnie mało ;) a bateria wskazuje &lt;strong&gt;~75%&lt;/strong&gt; przy paru minutach używania - coś jest nie tak. Po południu zauważyłem a właściwie usłyszałem w radio zakłócenia typowe dla telefonu, który pobiera jakieś dane/łączy się z siecią. Nie byłoby w tym nic nadzwyczajnego gdyby nie to, że trwało to non-stop. Zacząłem szukać w sieci - odpowiedzi kręciły się w obrębie motywów typu &lt;em&gt;&quot;przeprowadź restore systemu&quot;&lt;/em&gt;, &lt;em&gt;&quot;Jailbreak-&amp;gt;jakaśMagicznaAplikacja&quot;&lt;/em&gt;, &lt;em&gt;&quot;Wejdź na stronkę X to wyłączysz Edge/3G itd.&quot;&lt;/em&gt;. Wszystko fajnie ale nie miałem jakoś zamiaru rozstawać się z dostępem do sieci, który mam wliczony w abonament a włączanie i wyłączanie Internetu przez jakieś cudo po Jailbreak-u też mi się nie uśmiechało zwłaszcza, że po prostu ewidentnie coś się łączyło w tle z siecią (widać to było w iBOA w spisie transmisji danych). Restore systemu też nie pomógł.&lt;/p&gt;
&lt;p&gt;Co pomogło ? Otóż przeniosłem telefon po naładowaniu (padł po 16h przy ~30 minutach używania) dosłownie 3 metry w stronę okna na stoliczek. Wstaję rano - voila ! Bateria wskazywała &lt;strong&gt;97%&lt;/strong&gt; po całej nocy czuwania. Co ciekawe przeniosłem z tego stolika drugi telefon (HTC) na biurko (z obawy, że wstając rano do budzika z iPhone zabiję się o drukarkę i szkło z potłuczonego drukarką stolika) - słyszałem przed snem w radio, że też coś się łączy z siecią - telefon padł po 11h prawie nieużywany w tym czasie.&lt;/p&gt;
&lt;p&gt;Wniosek ? Prawdopodobnie sygnał z nadajnika był przez jakiś czas słabszy (po 3 dniach problem zniknął) i telefony namiętnie łączyły się z siecią jak to mówią - do oporu, co skutkowało dużym zużyciem baterii i nie wiedzieć czego w wypadku iPhone także transferu (dosłownie kilkanaście kB danych, ale gdy ktoś jest rozliczany za każde połączenie z transmisją danych to robi się z tego niebagatelna sumka). Ogólnie warto sprawdzić czy przypadkiem nasz najbliższy nadajnik nie ma gorszego dnia, zamiast kombinować z różnymi dziwnymi rozwiązaniami ;)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;em&gt;P.S.: Podziękowania dla mojego jeszcze nie wypartego przez streaming radia z Internetu radiobudzika za pomoc w detekcji problemu ;)&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
</description><pubDate>Sun, 27 Dec 2009 09:45:06 +0100</pubDate><guid>http://blog.dziudek.pl/2009/12/27/iphone-ciagle-laczy-sie-z-siecia/</guid><category>iPhone</category></item><item><title>DOMContentLoaded</title><link>http://blog.dziudek.pl/2009/11/08/domcontentloaded/</link><description>&lt;p&gt;Dzisiejszy wpis dedykuję wszystkim wielbicielom zdarzenia &lt;b&gt;DOMContentLoaded&lt;/b&gt;. Niestety jak wszystko co dobre, wymaga ono ostrożności w stosowaniu.&lt;/p&gt;
&lt;p&gt;Dla zobrazowania sytuacji dwa przykłady.&lt;/p&gt;
&lt;p&gt;W MooTools 1.1.1 (niektórzy muszą wciąż na nim bazować - i nie jest to wcale małe grono) implementacja zdarzenia &lt;b&gt;domready&lt;/b&gt; sprawia, że w IE powstają czasami dziwne błędy wynikające z tego, że zdarzenie to występuje PRZED wczytaniem kompletnego drzewa dokumentu. Efektem jest z reguły na wpół załadowana strona. Żeby było jeszcze ciekawiej to problem ten występuje tylko w niektórych przypadkach - niestety nie udało mi się jeszcze wykryć kiedy dokładnie to się dzieje ze względu na złożoność stron, które posiadały ten problem. Jedno jest pewne - w MooTools 1.1.1 stosowanie zdarzenia &lt;b&gt;domready&lt;/b&gt; właściwie odpada na stronach gdzie użytkownik może swobodnie dodawać nowe moduły z treścią - w konkretnej konfiguracji nasz skrypt może pięknie działać w IE ale wystarczy, że użytkownik włączy dodatkowe moduły i wtedy mogą wystąpić poważne problemy - lepiej nie ryzykować zwłaszcza, że widok strony, która wczytała się do połowy wcale nie powoduje przywołania na myśl tego, że przyczyną może być źle działający skrypt.&lt;/p&gt;
&lt;p&gt;Drugi problem tyczy się także stron gdzie mogą się pojawić później dodatkowe elementy. Jako przykład przytoczę tu skryptowe wyrównywanie kolumn - pierwsza myśl przy tworzeniu takowego skryptu jest jasna - niech to wyrównywanie wykona się najszybciej jak to tylko jest możliwe. I wszystko zapewne będzie działać pięknie do momentu w którym na stronie nie pojawi się po jakimś czasie dodatkowy skrypt, który będzie modyfikował wysokość elementów w treści kolumny i oczywiście złośliwie korzystał ze zdarzenia &lt;b&gt;onLoad&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Reasumując ten krótki wpis - decyzja o korzystaniu ze zdarzenia &lt;b&gt;DOMContentLoaded&lt;/b&gt; powinna wynikać nie tylko z zalet tego rozwiązania, ale także z przeanalizowania przyszłych losów tworzonej strony - jeżeli wiemy, że strona jest tak zbudowana iż umożliwia użytkownikowi spore zmiany w zakresie układu witryny i dodawanie dodatkowych rozwiązań bez naszego udziału to rada jest krótka - lepiej zapomnieć o stosowaniu tego zdarzenia.&lt;/p&gt;
</description><pubDate>Sun, 08 Nov 2009 19:53:06 +0100</pubDate><guid>http://blog.dziudek.pl/2009/11/08/domcontentloaded/</guid><category>JavaScript</category><category>mootools</category><category>Techblog</category><category>Webmastering</category><category>mootools</category><category>javascript</category></item><item><title>piąty semestr</title><link>http://blog.dziudek.pl/2009/10/10/piaty-semestr/</link><description>&lt;p&gt;Dwa tygodnie uczelni minęły mi w ekspresowym tempie. Przeprowadziłem już małe rozpoznanie przedmiotów (sztuk 7 + wf + język obcy). Po małych rotacjach z fakultetami, (których pół roku temu w ogóle miało nie być, a potem w magiczny sposób się pojawiły) wybrałem cybernetykę zamiast zaawansowanych systemów baz danych - nie będę ukrywał z czysto praktycznych względów: po pierwsze - mam o 30h w semestrze mniej, po drugie - cybernetyka rysuje się na dość łatwe do zdobycia 4 punkty ECTS, po trzecie - nie strawiłbym kolejnego semestru tłumaczenia mi SQL, a od administracji SQL Server mam piękną książkę, która w razie potrzeby wyjaśni mi to co trzeba 100 razy lepiej niż prowadzący laborki, którzy musieli się nagle przerzucić z Oracle na platformę Microsoftu.&lt;/p&gt;
&lt;p&gt;Poza cybernetyką mam też potworka zwanego Historią sztuki i estetyki. Pierwszy wykład był o wszystkim tylko nie o tym na co wskazuje nazwa przedmiotu. Może to się zmieni, ale ogólnie ów przedmiot wygląda na (delikatnie mówiąc) zapychacz wymyślony przez jakiegoś nawiedzonego humanistę - szczerze mówiąc bardziej obcuję ze sztuką przeglądając swoje RSSy niż na wspomnianym wykładzie...&lt;/p&gt;
&lt;p&gt;Z typowo &quot;graficznych&quot; przedmiotów (wszak specjalizacja pt. Grafika Komputerowa i Multimedia zobowiązuje :P) mam przedmiot Podstawy kompozycji (z oceną jeszcze się wstrzymam) oraz modelowanie i animacja - niestety patrząc na przebieg zajęć mam obawy czy bym to ogarnął nie mając za sobą dłuższej praktyki w 3d std MAX (w moim rankingu zajęć na które chodzę bo wypada, zajmuje on niechlubne drugie miejsce). No i to tyle przedmiotów, które trzeba po prostu przetrwać (choć w wypadku modelowania i animacji, pewnie przetrwanie będzie wymagało paru nocek spędzonych z wizualizacją i animacją na zaliczenie).&lt;/p&gt;
&lt;p&gt;Z przedmiotów, które zapowiadają się konkretnie mam Inżynierię Oprogramowania - na labolatorium przypadła mi z kolegą zacna rola architekta systemu - krótko mówiąc murzyn grupy do pisania raportów i patrzenia czy system równo puchnie. Ale ogólnie sam przedmiot zapowiada się względnie ciekawie.&lt;/p&gt;
&lt;p&gt;Programowanie komunikacji człowiek-komputer to przedmiot na którym mają mnie nauczyć XML-a i wszystkich języków z jego otoczki. Laborki to raczej banał. Chyba, że zadania z XSLT będą wymagały jakiejś magicznej wiedzy matematycznej.&lt;/p&gt;
&lt;p&gt;No i na deser - programowanie aplikacji graficznych. Jedyny przedmiot w tym sem z którego wykład mnie nie usypia, a trzeba dodać, że zaczyna się on o 8:30. Laboratorium z tego przedmiotu jest względnie wymagające - na początek czeka nas pisanie parsera formatu *.3ds (byłoby łatwiej gdyby miał on oficjalną dokumentację, a nie masę opracowań bazujących na domysłach autorów :P), potem wizualizacja wybranego zjawiska fizycznego, a na koniec własny shader. Wszystko w OpenGL, którego nie spisałem na straty po tym jak widzę, że WebGL coraz wyraźniej pojawia się na horyzoncie.&lt;/p&gt;
&lt;p&gt;Sumarycznie wychodzą mi 24 godziny zajęć w tygodniu (w drugiej połowie semestru 22h), czyli nie jest źle ;)&lt;/p&gt;
</description><pubDate>Sat, 10 Oct 2009 10:54:14 +0200</pubDate><guid>http://blog.dziudek.pl/2009/10/10/piaty-semestr/</guid><category>Ogólne</category><category>Studia</category></item><item><title>Jestem oazą spokoju...</title><link>http://blog.dziudek.pl/2009/09/20/jestem-oaza-spokoju/</link><description>&lt;p&gt;&lt;a href=&quot;http://drlex.jogger.pl/2005/05/16/jestem-oaza-spokoju/&quot;&gt;To&lt;/a&gt; mój ulubiony tekst związany z pracą. Istnieją dwie sytuacje, które mi o nim przypominają - testowanie strony na IE i kontakt z niektórymi użytkownikami naszych produktów. Skupię się na tym drugim, bo przez ponad 2 lata zaobserwowałem sporo ciekawych zjawisk. Fakt, że po dwóch latach mało co już człowieka dziwi i wyprowadza z równowagi.&lt;/p&gt;
&lt;p&gt;Mógłbym podzielić użytkowników na bardzo wiele grup, ale skupmy się na moich &quot;ulubionych&quot;. Istnieje wysokie prawdopodobieństwo, że jeżeli ktoś udziela wsparcia dla produktów używanych przez szersze grono osób to trafi na podobnych osobników.&lt;/p&gt;
&lt;h3&gt;Cudowne &quot;uzdrowienia&quot;&lt;/h3&gt;
&lt;p&gt;Pierwsza grupa użytkowników to te osoby, które poza zaśmiecaniem mi skrzynki mailowej i ewentualnie archiwum komunikatorów mało mnie irytuje. Typowy przypadek wygląda następująco:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dostaję e-mail z opisem problemu, który pojawił się nagle,&lt;/li&gt;
&lt;li&gt;Po upływie czasu z przedziału 5 minut - 2 godziny dostaję maila, że problem udało się rozwiązać bez mojego udziału&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Podejrzewam, że większość tych przypadków stanowią ludzie, którzy reagują na widok białej strony z napisem &quot;Fatal Error&quot; lub &quot;Warning&quot; dość spontanicznym wysyłaniem maili do kogo popadnie.&lt;/p&gt;
&lt;p&gt;Ktoś kogo osobiście bardzo cenię w dziedzinie tworzenia stron WWW powiedział mi kiedyś, że warto po otrzymaniu jakiegoś pytania odczekać trochę czasu - mnóstwo problemów rozwiązuje się wtedy samych - i to naprawdę działa.&lt;/p&gt;
&lt;h3&gt;Wybiórcza ślepota&lt;/h3&gt;
&lt;p&gt;Tytułowa przypadłość dotyka sporą grupę użytkowników - możesz napisać na czerwono w bloku z czerwonym obramowaniem, że archiwum z plikami należy wypakować przed instalacją a i tak znajdzie się całe grono osób, które tego nie zrobią, a spory odsetek z nich napisze o razu do Ciebie maila, że im coś nie działa. To schorzenie odnosi się też poza tekstem pisanym na czerwono do pola wyszukiwarki na forum, ale o tym za chwilę.&lt;/p&gt;
&lt;h3&gt;Powielacze&lt;/h3&gt;
&lt;p&gt;Mając forum z odpowiedziami na różne problemy, można liczyć, że wątki będą rzadko powielane, a raz rozwiązane problemy posłużą jako wskazówka dla innych. Nic bardziej mylnego - niektórzy chyba uważają, że jak im osobiście nie odpowiesz to nie jest to rozwiązanie ich problemu (który był rozwiązany już 10-20 razy w przeszłości na forum).&lt;/p&gt;
&lt;h3&gt;Wtórni analfabeci&lt;/h3&gt;
&lt;p&gt;Do każdego produktu dołączamy zawsze plik PDF z opisem konfiguracji, użytkowania itd. Pomyślcie co można poczuć gdy widzi się maila z pytaniem na które odpowiedź znajduje się na pierwszych stronach instrukcji ? Nie dysponuję dokładnymi analizami, ale śmiem przypuszczać, że jakieś 60-80% użytkowników w ogóle nie czyta instrukcji, a w razie jakichkolwiek problemów od razu pisze maila. Ponieważ staram się krzewić ideę czytania instrukcji, najczęściej odpisuję krótkie &quot;Please read manual&quot;, które jest wskazówką do rozwiązania 90% problemów. Oczywiście zdarza się trafić głową w mur - parę razy miałem do czynienia z osobnikami, którzy mieli do mnie wielki żal o to, że każę im sprawdzić w instrukcji zamiast odpowiedzieć na pytanie - dalsza dyskusja to z reguły prawdziwy test cierpliwości.&lt;/p&gt;
&lt;h3&gt;Przeróbki&lt;/h3&gt;
&lt;p&gt;Jeżeli niektórych oburzają stawki typu 50PLN za skrypt, to co powiecie na ludzi myślących, że od ręki i za darmo naniosę im w skrypcie zmiany, które można by sklasyfikować jako przeróbka roweru na samochód ? Zaręczam - jest ich wielu.&lt;/p&gt;
&lt;h3&gt;Samo przestało działać&lt;/h3&gt;
&lt;p&gt;Są też na tym świecie ludzie wierzący w to, że uwierzę w magiczne samouszkodzenie się skryptu. Życie na szczęście nauczyło mnie, że w oprogramowaniu nic nie psuje się samo z siebie i albo coś musiało się zmienić w konfiguracji serwera, albo w samym skrypcie. Potem zamiast od razu znaleźć przyczynę problemu trzeba robić przesłuchanie by w końcu dowiedzieć się, że jednak parę godzin temu coś było zmieniane, jakby nie można było tego od razu powiedzieć.&lt;/p&gt;
&lt;h3&gt;Czepialscy&lt;/h3&gt;
&lt;p&gt;Niektórzy osobnicy sprawiają wrażenie, że wstali rano tylko po to by Ci dogadać i doczepić się czegokolwiek. Miałem już osobnika, który się prawie awanturował o to, że w komentarzu w kodzie CSS jest literówka - na pewno miała ona ogromny wpływ na wygląd strony. Na szczęście z reguły idzie łatwo wyczuć czy ktoś ma rzeczywiście problem czy szuka zaczepki. Ciekawą podgrupą czepialskich są ludzie, którzy myślą, że pisząc na forum o 2 w nocy dostaną w ciągu godziny odpowiedź. Oczywiście ja od dwóch lat w ogóle nie sypiam i tylko czekam w gotowości z otwartym laptopem aż ktoś napisze coś na forum (dodajmy do tego fakt, że ów osobnik może pisać z USA jak również z Chin czy innej Indonezji).&lt;/p&gt;
&lt;h3&gt;Totalnie bezczelni&lt;/h3&gt;
&lt;p&gt;Ostatnia grupa, którą chcę opisać to osobnicy, którzy dopadli w swoje łapki nasze płatne produkty w sposób nielegalny. I pół biedy jak je po prostu mają - choć to też drażni, ale nie jesteśmy tak naiwni by wierzyć, że całkowicie wytępimy piractwo naszych produktów. Tak naprawdę totalna irytacja (i tu nawet po dwóch latach użerania się z różnymi dziwnymi ludźmi nie nauczyłem się patrzeć na to z dystansem) zaczyna się wtedy gdy taki osobnik zaczyna pisać na ogólnodostępnym forum z pytaniami odnośnie swojego nielegalnego produktu (tu już ciśnienie rośnie) i zaczyna się przeobrażać w osobnika z grupy czepialskich - tak w tym momencie każdego normalnego człowieka coś trafia. Osobiście mam troszkę inną nazwę na takie osoby, ale wolałbym się tu jednak powstrzymać od wulgaryzmów. Stopień bezczelności jest mniej więcej taki jakby złodziej samochodów zadzwonił do okradzionego z pretensjami, że tapicerka nie jest w jego ulubionym kolorze.&lt;/p&gt;
&lt;h3&gt;Zła wiadomość&lt;/h3&gt;
&lt;p&gt;Wspomnianych wyżej zachowań raczej nie da się raczej całkowicie wytępić dlatego jeżeli już je obserwujemy to czym prędzej należy nauczyć się podchodzić do nich z dystansem. Osobiście gdybym spotkał się pierwszy raz z tym z czym spotykam się obecnie codziennie to pewnie bym zrezygnował z takiego zajęcia po tygodniu. Miałem to szczęście, że poszczególne zachowania pojawiały się w pewnej przestrzeni czasu w miarę popularyzacji naszych produktów i co za tym idzie - powoli oswoiłem się z tym jacy ludzie potrafią być i co potrafią wymyślić. A wierzcie mi lub nie - ludzie potrafią dać czasem w kość mając złudzenie anonimowości w sieci.&lt;/p&gt;
</description><pubDate>Sun, 20 Sep 2009 16:13:18 +0200</pubDate><guid>http://blog.dziudek.pl/2009/09/20/jestem-oaza-spokoju/</guid><category>joomla</category><category>Ogólne</category><category>Webmastering</category></item><item><title>Przeglądarki...</title><link>http://blog.dziudek.pl/2009/09/12/przegladarki/</link><description>&lt;p&gt;Zaokrąglone rogi będą motywem przewodnim tego wpisu, bo idealnie wiążą się z tematem, który chciałbym poruszyć. Sądzę, że przewija się on w głowie niejednej osoby, która miała okazję składać strony WWW.&lt;/p&gt;
&lt;p&gt;Otóż zawsze gdy dostaję do poskładania layout skacze mi ciśnienie gdy widzę w nim zaokrąglone rogi. Nie... Nie dlatego, że ten motyw na stronach WWW już wystarczająco mi się opatrzył. Po prostu zaokrąglone rogi to esencja pewnego problemu. Osoba dająca nam layout do poskładania oczywiście chce by był on jak to mówią - &quot;pixel perfect&quot; pod każdą przeglądarką (czyli pod tymi najpopularniejszymi). To oznacza pewne niedogodności. Weźmy na warsztat wspomniane zaokrąglone rogi - wszystkie normalne przeglądarki dorobiły się już ich obsługi za pomocą CSS. Problem polega na tym, że istnieje znana chyba wszystkim grupa &quot;nienormalnych&quot; przeglądarek, które tego udogodnienia za pomocą CSS nie obsługują. Pech chciał, że w skali globalnej te &quot;nienormalne&quot; przeglądarki mają około połowy udziałów w skali globalnej (mniejsza o to czy jest to 40% czy 60% - takiej grupy użytkowników nie można pominąć).&lt;/p&gt;
&lt;p&gt;I teraz specjalnie dla grupy osób używającej misiów do przeglądania stron WWW, osoba składająca stronę musi celem uzyskania zaokrąglonych rogów zamiast jednej linijki w kodzie CSS, tworzyć różne dziwne struktury - tym dziwniejsze im bardziej elastyczny ma być blok z zaokrąglonymi rogami). Te struktury to z reguły masa div-ów, które zawierają się w sobie nawzajem. I nie wiem jak Wy, ale mi bardzo często w czasie tworzenia takiej zacnej struktury div-ów po głowie chodzi jedno pytanie:&lt;/p&gt;
&lt;h3&gt;Po jaką cholerę ?&lt;/h3&gt;
&lt;p&gt;Oczywiście musicie zdać sobie sprawę z tego, że raczej nie uda się Wam tego wytłumaczyć waszemu grafikowi/klientowi.&lt;/p&gt;
&lt;p&gt;Warto jednak zastanowić się kto tak naprawdę używa IE ? Czy używa go ktoś kto ma jakieś pojęcie o tworzeniu stron WWW (nie wliczamy tu webmasterów, którzy na IE testują) ? Mogę się założyć, że przeciętny Kazio, będący typowym użytkownikiem IE, biorący pole input domyślnej wyszukiwarki za pasek adresu ma głęboko w poważaniu czy na stronie którą właśnie składamy będą zaokrąglone rogi czy nie. On po prostu jeżeli już w przyszłości na naszą stronę trafi, to nie będzie prowadził rozważań w stylu &quot;czy kolor linków został odpowiednio dobrany ?&quot; (no chyba, że grafik naprawdę schrzanił w tej kwestii dobór kolorów - ale tu działa taka magiczna zasada &quot;na sędziego meczu&quot; - możesz świetnie sędziować mecz piłkarski i nikt na Ciebie nie zwróci uwagi, ale spróbuj podyktować niesłuszny rzut karny i potem przez trzy tygodnie będziesz &quot;gwiazdą&quot; numer jeden w krajowej/lokalnej sieci). Przeciętny Kazio wejdzie na stronę, znajdzie co potrzebuje i sobie pójdzie.&lt;/p&gt;
&lt;p&gt;Czy warto zatem dla takich osób męczyć się, dokładać dodatkowe dziwne struktury w kodzie strony i tym samym zwiększać czas jej ładowania (no bo zaokrąglone rogi wymagają nie tylko więcej kodu (X)HTML, CSS, ale też dodatkowych grafik) ? Moja odpowiedź - nie. I moim małym marzeniem jest by ludzie, którzy potrzebują stron WWW w końcu zrozumieli, że w sieci podstawą jest informacja podana w czytelny sposób (o łatwości jej znalezienia w strukturze strony nie wspomnę), a detale typu zaokrąglone rogi nie są na tyle istotne (no może poza jakimiś ekstremalnymi przypadkami) by poświęcać na nie dodatkowy transfer danych i zapytania do serwera po dodatkowe grafiki.&lt;/p&gt;
&lt;p&gt;Po prostu ludzie, którzy patrzą bardziej szczegółowo na jakość wykonania stron nie używają IE (na pewno trafią się jakieś dziwne jednostkowe przypadki, ale z rachunku prawdopodobieństwa wynika, że szansa iż taki osobnik trafi na naszą stronę jest bardzo mała) - oni używają normalnych przeglądarek, które wspierają nowoczesne rozwiązania i takim osobom można serwować dopieszczone wizualnie strony z przejrzystym kodem.&lt;/p&gt;
&lt;p&gt;Ktoś powie, że to pójście na łatwiznę, ale może jest to po prostu pójście po rozum do głowy ? Po co mamy z uporem maniaka pokazywać użytkownikom IE, że w nim też można uzyskać ładne wizualnie strony, skoro i tak 99.999% z nich nie zwróci na to w ogóle uwagi?&lt;/p&gt;
</description><pubDate>Sat, 12 Sep 2009 20:26:24 +0200</pubDate><guid>http://blog.dziudek.pl/2009/09/12/przegladarki/</guid><category>Webmastering</category></item><item><title>joomla.org nas chyba nie lubi</title><link>http://blog.dziudek.pl/2009/09/08/joomla-org-nas-chyba-nie-lubi/</link><description>&lt;p&gt;Niedawno szef dostał maila z serwisu extensions.joomla.org w którym mamy umieszczone nasze moduły. W skrócie: napisano w nim, że niedawno ktoś oddał 30 głosów w bardzo krótkim czasie na nasze produkty. Wszystkie głosy pochodziły z różnych kont i tego samego adresu IP. Zagrożono, że jeżeli sytuacja się powtórzy to nasze produkty zostaną usunięte z katalogu.&lt;/p&gt;
&lt;p&gt;Nie ukrywajmy - od razu można było wyczuć, że ktoś nam podkłada &quot;świnię&quot;. Bo jak można w tak naiwny i bezczelny sposób &quot;promować&quot; swoje produkty poprzez głosowania licząc, że nikt z administracji tego nie zauważy ?&lt;/p&gt;
&lt;p&gt;Oczywiście wysłaliśmy mail z wieloma pytaniami i wyjaśnieniami. W odpowiedzi dostaliśmy e-mail napisany na &quot;odwal się&quot; z informacją, że nasze produkty zostały zbanowane (najpierw ostrzegają, że jeżeli sytuacja się powtórzy to nas zbanują, a potem banują od razu - ciekawe...). Dodatkowo napisano by &quot;przypomnieć się&quot; ze zdjęciem bana w danym dniu. Albo ich system banowania jest w jakiejś dziwniej fazie beta albo istnieją jakieś inne magiczne powody dla których ban nie zostanie zdjęty automatycznie - stawiam na wiarę w to, że po prostu zapomnimy się upomnieć o zdjęcie bana. Po tym mailu z panem, który nas tak pięknie &quot;obsłużył&quot; skończyliśmy dyskusję bo było widać, że nie potrafi dopuścić do siebie myśli, że mamy wystarczająco dużo inteligencji by takich akcji nie przeprowadzać na ich stronie.&lt;/p&gt;
&lt;p&gt;Posłaliśmy maila z prośbą o wyjaśnienie tej sprawy do innego administratora i liczymy, że obiektywnie spojrzy na tą sprawę - osobnik, który się nią zajmował chyba o czymś takim jak obiektywność zapomniał (choć jak dla mnie nie tylko o obiektywności zapomniał).&lt;/p&gt;
&lt;p&gt;Jeżeli nasze produkty będą dalej banowane w katalogu to wniosek jest taki, że prawdopodobnie wystarczy założyć kilka/kilkanaście kont, głosować na produkty konkurencji z jednego IP i liczyć na to, że moderatorzy podobnie jak w naszym wypadku orzekną winę autorów danych produktów, usuwając je z katalogu. Słowa &quot;liczyć na to&quot; są tu jak najbardziej na miejscu, bo od dłuższego czasu mam dziwne wrażenie, że niektórzy mają na stronach joomla.org łatwiej niż inni.&lt;/p&gt;
&lt;p&gt;Względnie niedawno powstała strona resources.joomla.org docelowo mająca gromadzić wszelkie witryny związane z Joomla!. Dziwnym trafem nie zaakceptowano naszego zgłoszenia jako klubu oferującego szablony dla Joomla!. Zresztą nie ma w nim też takiego klubu jak Joomlart - powiedzmy sobie szczerze - to ogromny brak, bo to chyba największy gracz na tym rynku (&lt;strong&gt;ciekawostka:&lt;/strong&gt; Joomla! domyślnie po instalacji ma do wyboru jeden z ich darmowych szablonów - JA Purity). A co ciekawe w katalogu można znaleźć takie kluby oferujące szablony jak &lt;b&gt;www.pixelthemestudio.ca&lt;/b&gt; które żeby było śmieszniej - na stronie głównej korzystają ze zmodyfikowanego na własne potrzeby... naszego szablonu... Nie ukrywam, że w takiej sytuacji nie wiem czy się śmiać, czy płakać widząc taki &quot;katalog&quot;.&lt;/p&gt;
&lt;p&gt;Być może wadą naszych modułów i komponentów dla Joomla! która sprawiła, że wypadły z katalogu na extensions.joomla.org jest to, że są one bezpłatne i stanowią dla sporej grupy osób dobrą alternatywę w stosunku do płatnych modułów i komponentów innych firm. Oczywiście pozostanie to tylko w sferze naszych firmowych domysłów. Parę miesięcy temu zawiedliśmy się na obiektywności Smashing Magazine, teraz serwisy związane z joomla.org zaczynają zachowywać się podobnie.&lt;/p&gt;
&lt;p&gt;A ucierpią na tym tylko użytkownicy Joomla! - będą mieli wybór ograniczony do pewnej grupy produktów, które włodarze serwisów pochodnych joomla.org uznają za godne prezentowania w ich katalogach.&lt;/p&gt;
</description><pubDate>Tue, 08 Sep 2009 15:56:24 +0200</pubDate><guid>http://blog.dziudek.pl/2009/09/08/joomla-org-nas-chyba-nie-lubi/</guid><category>joomla</category><category>Ogólne</category></item><item><title>Jeszcze raz... :P</title><link>http://blog.dziudek.pl/2009/09/07/jeszcze-raz-p/</link><description>&lt;p&gt;Mógłbym Wam podać 50 rzeczy/wydarzeń/osób, które sprawiły, że rozstałem się ze swoim Joggerem na dłuższy okres czasu, ale po pierwsze - kto by to czytał ? Po drugie - czas, który poświęciłbym na pisanie tej zacnej listy, można spożytkować na inny wpis ;)&lt;/p&gt;
&lt;p&gt;Jedyne dwa istotne fakty:&lt;/p&gt;
&lt;p&gt;* Pewne jest, że wystąpi zjawisko pisania na tematy odbiegające (często dość mocno) od informatyki - bo prowadzenie dwóch blogów (technicznego i tego 'luźnego') odpadło z listy moich koncepcji.&lt;/p&gt;
&lt;p&gt;* Blip zaspokajał moje potrzeby przez dość długi czas, ale w pewnym momencie człowiek dochodzi do wniosku, że 160 znaków to za mało a same blipnięcia są dość... ulotne ;)&lt;/p&gt;
</description><pubDate>Mon, 07 Sep 2009 15:46:03 +0200</pubDate><guid>http://blog.dziudek.pl/2009/09/07/jeszcze-raz-p/</guid><category>Jogger</category><category>Ogólne</category></item><item><title>Żyję...</title><link>http://blog.dziudek.pl/2009/05/17/zyje/</link><description>&lt;p&gt;... i mam się w miarę dobrze. Gdyby ktoś się pytał czemu tak cicho: użeram się z dwoma dość czasochłonnymi projektami - &lt;a href=&quot;http://static3.blip.pl/user_generated/update_pictures/299761.jpg?1242482358&quot;&gt;to będzie moja koparka w OpenGL&lt;/a&gt;, a &lt;a href=&quot;http://static3.blip.pl/user_generated/update_pictures/301562.jpg?1242589110&quot;&gt;to będzie konsolowa wersja szachów japońskich&lt;/a&gt;, które jeszcze potem mają mieć GUI i parę innych drobiazgów. Także póki co się nie nudzę zwłaszcza, że w pracy też nie ma przebacz i trzeba robić to i owo ;)&lt;/p&gt;
&lt;p&gt;Ale parę ciekawych projektów MooToolso-pochodnych zalega w notatkach i czeka na realizację i upublicznienie ;) Pewnie po sesji ;)&lt;/p&gt;
</description><pubDate>Sun, 17 May 2009 21:54:07 +0200</pubDate><guid>http://blog.dziudek.pl/2009/05/17/zyje/</guid><category>Ogólne</category></item></channel></rss>
