Siłę twórczą masz…

How to : flash gallery + XML tutorial

Posted by: riser on: marzec 21, 2009

Czyli galeria flash + XML. Zadaniem tego małego tutoriala jest utworzenie prostej galerii zdjęć, bazującej na danych zawartych w dokumencie XML.

  1. Stworzenie projektu
    Na wstępie stwórzmy katalog w którym zawrzemy wszystkie pliki używane do stworzenia galerii.
    Teraz czas uruchomić program w, którym będziemy tworzyć galerię. W moim przypadku jest to Adobe Flash CS3.

    • Projekt
      Po uruchomieniu programu pora stworzyć nowy projekt. W tym celu z menu na górze wybieramy Plik -> Nowy. Otworzy nam się okno w którym wybieramy typ pliku. Wybieramy oczywiście Project Flash. Po kliknięciu OK wyskoczy nam okienko w którym podajemy lokalizację oraz nazwę naszego pliku. Nazwijmy go galeria.flp. Po poprawnym utworzeniu w okienku Projekt (Jeśli go nie widać wybieramy okno->projekt lub wciskamy Shift+F8) powinien widnieć napis galeria
    • Plik *.fla
      W analogiczny sposób tworzymy plik typu ActionScript 3. Po utworzeniu pliku klikamy plik->zapisz aby zapisać nasz plik. Zapisujemy go w katalogu stworzonym w punkcie 1 i nazywamy go galeria.fla.
      Pora teraz dodać plik *.fla do naszego projektu. W tym celu klikamy w panelu Projekt klikamy Prawym Przyciskiem Myszy (w skrócie PPM) na nazwie projektu (W moim przypadku galeria) i wybieramy Dodaj plik. Wskazujemy lokalizacje wyżej utworzonego pliku (galeria.fla) i klikamy OK.
    • Parametry sceny: Teraz opcjonalnie możemy zmienić rozmiar sceny oraz liczbę klatek na sekundę. Klikamy dwa razy na galeria.fla w Panelu Projekt. W panelu właściwości (Jeśli go nie widzimy okno->właściwości->właściwości lub klikamy ctrl + F3) znajdujemy napis Rozmiar: 550 x 450 pikseli i klikamy na guzik. W okienku, które się pojawi ustawiamy szerokość oraz wysokość naszej sceny. Ja ustawie 600 x 400px. ponieważ będę ładował 6 obrazków o wielkości 200×200 ułożonych w 3 kolumnach. W polu niżej Szybkość odtwarzania ustawie 24 kl/s.
    • Plik *.as
      Pora utworzyć serce naszej galerii. Plik tworzymy i dodajemy w analogiczny sposób jak poprzednie pliki. Pamiętajmy tylko by wybrać typ pliku Action Script i nazwać go *.as np. MojaGaleria.as
      We właściwościach pliku *.fla () musimy ustawić plik ActionScript (*.as) jako klasę dokumentu. W tym celu na panelu Właściwości w polu Klasa dokumentu: wpisujemy nazwę pliku *.as ale bez rozszerzenia. W moim przypadku będzie to MojaGaleria
    • Plik *.xml
      Plik xml będzie nam służył za bazę zawierającą informacje na temat obrazków w galerii. W nim będą dane na temat lokalizacji obrazków oraz pola dodatkowe np opis obrazka. Plik XML może mieć różną strukturę. Ja posłużę się najprostszą :). Plik zapisujemy w katalogu pod nazwą *.xml np. baza.xml. A oto przykładowa treść pliku.

      <galeria>
      <obraz lokalizacja="photo/photo_1.jpg" opis="obrazek 1"/>
      <obraz lokalizacja="photo/photo_2.jpg" opis="obrazek 2"/>
      <obraz lokalizacja="photo/photo_3.jpg" opis="obrazek 3"/>
      <obraz lokalizacja="photo/photo_4.jpg" opis="obrazek 4"/>
      <obraz lokalizacja="photo/photo_5.jpg" opis="obrazek 5"/>
      <obraz lokalizacja="photo/photo_6.jpg" opis="obrazek 6"/>
      </galeria>

      Jak widzimy nasz plik składa się z “wpisów” na temat obrazka. Zawierają się w nim dane takie jak lokalizacja obrazka oraz jego opis.
  2. Action Script
      Cały mechanizm naszej galeri będzie zawarty w pliku *.as

    • Szkielet pliku
      nasz plik musi zawierać spis bibliotek z których będzie korzystał

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;
      }

      Następnie tworzymy konstruktor. Konstruktor jest to główna funkcja klasy, która jest uruchamia podczas jej używania. (Jeśli już programowałeś to pomocne będzie stwierdzenie, że konstruktor jest jak funkcja main w C)

      public class MojaGaleria extends Sprite {
      public function MojaGaleria() {
      trace("Hallo!");
      }

      Należy pamiętać, że nazwa klasy musi być taka sama jak nazwa pliku *.as (Wielkość liter ma znaczenie). Nazwa funkcji konstruktora też musi być taka sama jak nazwa klasy (Wielkość liter ma znaczenie). Nasz plik powinien w tym momencie wyglądać następująco

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;
      public class MojaGaleria extends Sprite {
      public function MojaGaleria() {
      trace("Hallo!");
      }
      }

      Aby sprawdzić czy wszystko działa poprawnie klikamy plik->zapisz lub ctrl+s aby zapisać zmiany oraz sterowanie->testuj film lub ctrl+Enter aby uruchomić plik. Jeśli wszystko przebiegło poprawnie w Panelu Wyjście (Jak go nie widzimy klikamy okno->wyjście lub F2) powinniśmy zobaczyć napis Hallo!.
    • ładowanie pliku xml
      mając gotowy szkielet skryptu czas załadować treść naszego pliku XML do skryptu. Aby to uczynić skorzystamy z funkcji URLLoader , URLRequest oraz Event.COMPLETE
      Tip:

      Deklaracja zmienny globalnych w AS. Zmienne globalne deklarujemy przed funkcjami.
      public var nazwa:typ;

      Deklarując zmienne lokalne w AS MUSIMY od razu przypisać do niej wartość
      var nazwa:typ = wartosc;

      Tworzenie nowych obiektów
      new NazwaObiektu(parametry_konstruktora);

      Musimy zadeklarować zmienną globalną typu URLLoader. U mnie nazywa się ona loader. Globalną ponieważ będziemy się do niej odnosić z funkcji loading().
      public var loader:URLLoader;
      Następnie tworzymy zmienną typu URLRequest. U mnie nazywa się ona link. Jako parametr konstruktora podajemy w cudzysłowie lokalizację pliku XML.
      var link:URLRequest = new URLRequest("baza.xml");
      Do wcześniej utworzonej zmiennej globalnej przypisujemy nowy obiekt typu URLLoader.
      loader = new URLLoader();
      Do zmiennej loader dodajemy ‘punkt nasłuchiwania’. addEventListener(zdarzenie, funkcja) Spowoduje to wykonanie się funkcji funkcja po wykonaniu się zdarzenia zdarzenie. W naszym przykładzie spowoduje to uruchomienie funkcji loading po załadowaniu pliku wskazywanego przez zmienna loader.
      loader.addEventListener(Event.COMPLETE, loading);
      Pozostało nam wskazać co ma załadować nasz loader. W tym celu posłużymy się funkcją load, której argumentem jest zmienna typu URLRequest. Tak więc aby załadować plik XML wpiszemy
      loader.load(link)
      Pozostało nam więc tylko napisanie funkcji laoding, której zadaniem będzie parsowanie pliku XML. Tworzymy więc zmienną typu XML
      var XMLgaleria:XML = new XML();
      i przypisujemy tej zmiennej zawartość pliku XML po przeprowadzeniu parsowania.
      XMLgaleria = XML(loader.data);
      Następnie wyświetlamy treść pliku
      trace(XMLgaleria);
      Jeśli wszystko poszło poprawnie to podczas testowania filmu (ctrl+enter) w Panelu wyjście powinna wyświetlić się zawartość naszego pliku XML.
      A tak powinien wyglądać nasz kod na stan obecny.

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;

      public class MojaGaleria extends Sprite {
      public var loader:URLLoader;
      public function MojaGaleria() {
      trace("Hallo!");
      var link:URLRequest = new URLRequest("baza.xml");
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, loading);
      loader.load(link);
      }

      function loading(evt:Event):void {
      var XMLgaleria:XML = new XML();
      XMLgaleria = XML(loader.data);
      trace(XMLgaleria);
      }
      }
      }

    • ładowanie zdjęć
      Pora teraz wyświetlić nasze zdjęcia. W tym celu musimy stworzyć pętle, która będzie tworzyć zmienne typu obraz,a następnie wprowadzi lokalizacje zdjęć pobraną z pliku XML.
      Tip:

      Składnia pętli for each
      for each (var nazwa_zmiennej in nazwa_tablice) { }
      Dostęp do zawartości pól tablicy uzyskujemy przez zmienną.
      Dla składni XML, którą posługuje się w tym przykładzie dostęp do zmiennych jest bardzo prosty. Obdywa się poprzez napisanie nazwa_zmiennej.@lokalizacja

      Posłużymy się pętlą for each, która wykonuje się dla wszystkich elementów tablicy
      for each (var obraz in XMLgaleria.children()) {}
      Teraz zajmiemy się wnętrzem pętli. Musimy stworzyć załadować obrazki. Tworzymy więc zmienną typu URLRequest w której podamy lokalizacje obrazka oraz Loader
      var req:URLRequest = new URLRequest(obraz.@lokalizacja);
      var img:Loader = new Loader();

      Ładujemy obrazek do zmiennej
      img.load(req);
      Aby wyświetlić obiekt na scenie posługujemy się funkcją addChild
      addChild(img);
      Jeśli wszystko poszło dobrze i nie mamy żadnych błędów, powinniśmy zobaczyć ostatni obrazek. To dobrze, oznacza to, że załadowaliśmy wszystkie obrazki, jednak nakładają one się na siebie dlatego widzimy tylko ostatni. Nasz plik powinien wyglądać tak

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;

      public class MojaGaleria extends Sprite {
      public var loader:URLLoader;
      public function MojaGaleria() {
      trace("Hallo!");
      var link:URLRequest = new URLRequest("baza.xml");
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, loading);
      loader.load(link);
      }

      function loading(evt:Event):void {
      var XMLgaleria:XML = new XML();
      XMLgaleria = XML(loader.data);
      trace(XMLgaleria);

      for each (var obraz in XMLgaleria.children()) {
      var req:URLRequest = new URLRequest(obraz.@lokalizacja);
      var img:Loader = new Loader();
      img.load(req);
      addChild(img);
      }
      }
      }
      }

    • porządkowanie obrazków
      Do ustawiania obrazków posłużymy się tablicą w której będą się znajdować współrzędne lewego górnego rogu kolejnych obrazków. Tablice definiujemy przed pętlą. Ponieważ moje obrazki mają wymiary 200×200, a obrazki będą wyświetlane w 3 kolumnach to tablica będzie wyglądać tak
      var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];

      Teraz należy przyporządkować odpowiednie wartości z tablicy do współrzędnych obrazka. W tym celu tworzymy przed pętlą pomocniczy licznik.
      var i:int = 0;
      Następnie wewnątrz pętli przypisujemy wartości z tablicy oraz zwiększamy wartość licznika, by przemieszaczać się po tablicy.
      img.x = tablica[i][1];
      img.y = tablica[i][0];
      i+=1;
      Jeśli wszystko się udało powinniśmy zobaczyć obrazki w następującej kolejności: 1,2,5,6,4,3. A nasz powinien wyglądać tak

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;

      public class MojaGaleria extends Sprite {public var loader:URLLoader;
      public function MojaGaleria() {
      trace("Hallo!");
      var link:URLRequest = new URLRequest("baza.xml");
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, loading);
      loader.load(link);
      }

      function loading(evt:Event):void {
      var XMLgaleria:XML = new XML();
      XMLgaleria = XML(loader.data);
      trace(XMLgaleria);

      var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];
      var i:int = 0;
      for each (var obraz in XMLgaleria.children()) {
      var req:URLRequest = new URLRequest(obraz.@lokalizacja);
      var img:Loader = new Loader();
      img.load(req);
      img.x = tablica[i][1];
      img.y = tablica[i][0];
      addChild(img);
      i+=1;
      }
      }
      }
      }
    • pola podpisu
      Do naszej galeri możemy jeszcze dodać pola tekstowe w których będzie znajdować się opis obrazka. Posłużymy się zmienną typu TextField. Aby jej użyć należy dodać następującą bibliotekę
      import flash.text.TextField;
      Tworzenie obiektów typu TextFiels odbywa się analogicznie jak tworzenie każdej innej zmiennej.
      var txt:TextField = new TextField();
      Nastepnie do tego pola należy przypisać tekst opisujący obrazek, który pochodzi z pliku XML.
      txt.text = obraz.@opis;
      Teraz pozostało tylko wyświetlić i rozmieścić opisy na scenie. Robimy to w analagoczny sposób. Ja posłuże się gotową już tablicą zawierającą współrzędne rogów obrazków i dodam tylko odpowiedni offset.

      addChild(txt);
      txt.x = tablica[i][1]+75;
      txt.y = tablica[i][0]+150;
      Tak wygląda gotowy plik

      package {
      import flash.net.*;
      import flash.display.*;
      import flash.events.*;
      import flash.text.TextField;

      public class MojaGaleria extends Sprite {public var loader:URLLoader;
      public function MojaGaleria() {
      trace("Hallo!");
      var link:URLRequest = new URLRequest("baza.xml");
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, loading);
      loader.load(link);
      }

      function loading(evt:Event):void {
      var XMLgaleria:XML = new XML();
      XMLgaleria = XML(loader.data);
      trace(XMLgaleria);
      var tablica:Array = [[0,0],[0,200],[200,400],[200,200],[0,400],[200,0]];
      var i:int = 0;
      for each (var obraz in XMLgaleria.children()) {
      var req:URLRequest = new URLRequest(obraz.@lokalizacja);
      var img:Loader = new Loader();
      img.load(req);
      img.x = tablica[i][1];
      img.y = tablica[i][0];
      addChild(img);
      var txt:TextField = new TextField();
      txt.text = obraz.@opis;
      addChild(txt);
      txt.x = tablica[i][1]+75;
      txt.y = tablica[i][0]+150;
      i+=1;
      }
      }
      }
      }

A tu można pobrać plik z gotową galerią (Uwaga tylko pliki *.swf,*.xml oraz zdjęcia !)

Download
Mirror 1
Mirror 2
Mirror 3

sesja ….

Posted by: riser on: luty 16, 2009

Termin poprawki zaliczenia wyskoczył z dupy i to w ten sam dzień co poprawka egzaminu. Na forum kłótnia boruta i apokalipsa. Jednak za dużo tam szczekaczy, a za mało osób coś faktycznie robiących. No nic pozostawiłem tą anarchię samą sobie, może w ten sposób zrozumieją, że potrzebne nam zgranie. A co ja w tym wszystkim robię ? Próbuję to jakoś ogarnąć ale marnie to widzę. Materiał jest bardzo opornie opracowany i ciężko coś z niego zrozumieć. No ale dzięki zabawce jaką jest compiz bynajmniej nie gubię się w szeregu na otwieranych okien, a kiedy mam dość zmieniam pulpit na czysty :p

skutki sesji

skutki sesji

Intrygująca iranka :)

Posted by: riser on: luty 15, 2009

Intrygująca iranka, bo tak właśnie nazywa się najnowsza wersja Ubuntu 8.10 jest moim nowym miejscem pracy. Korzystając z chwili wolnogo czasu postanowiłem zrobić porządki. Słysząc opinie o nowym wine oraz możliwościach Virtualboxa postanowiłem, że nie mam zamiaru wracać na windowsa. (no chyba że programy do uczelni mnie do tego zmusza ;/). O instalacji samego systemu nie będę pisał, ponieważ jest szybka, banalna i bezproblemowa. Opisze natomiast co zmieniałem po instalacji i z czym miałem problemy.

1. Wifi
W dobie wszechobecnej fali elektromagnetycznej wifi jest rzeczą powszechną. Co jednak zrobić, kiedy system po instalcji nie chce korzystać z tego dobrodziejstwa techniki. Po pierwsze trzeba sobie załatwić dostęp do internetu, a potem szukać rozwiązania.
Sterowniki miałem dobre. Sieci bezprzewodowe mi wykrywało ale nie chciało się podłączyć. Na początku szukałem przyczyny w sterownikach (jak się potem okazało był to zły trop). Przeszukując wzdłuż i wszerz napotkałem opis mojego problemu.
“Dioda od wifi włącza się i wyłącza podczas ładowania systemu”. Ta niby niepozorna wiadomość, była kluczem do rozwiązania. Wystarczyło tylko włączyć kartę (tak by dioda się świeciła) i wsio wifi działa :) A oto polecenie:

echo 1 | sudo tee  /sys/devices/platform/asus-laptop/wlan

2. Zabawa z compizem
Compiz jest standardowo wbudowany w Ubu. Wystarczy mieć odpowiednie sterowniki do karty graficznej i można korzystać z jego dobrodziejstw, a naprawdę warto. Nawet jeśli nie jesteście fanem fajerwerków oraz wodotrysków jest w nim parę opcji, które ułatwia pracę.

  • Wirtualne pulpity – niby jeden zawsze wystarczy ale dobrze mieć podręką drugi czysty pulpit. Jest to bardzo wygodne, gdyż możemy podzielić okna między pulpity. Np na jednym mieć programy do pracy, a na drugim przeglądarkę i odtwarzacz muzyki. Mniej okienek się pałęta co polepsza komfort pracy. Jeśli ktoś chce posiadać większą liczbę pulpitów niech skorzysta obowiązkowo z opcji Expo (win+e). Jak zobaczycie to zrozumiecie :P
  • Pokaż pulpit – odrazu po instalacji brakowało mi odpowiednika skrótu win+d z windowsa. Tak mi tego brakowało, że zacząłem przeszukiwać skróty w Ubu i odkryłem, że ten sam efekt jest przeniesiony na kombinację ctrl+alt+d (Swoją drogą niewiedzieć czemu nie da się mu przypisać skrótu win+d ;/) No dobra ale co do tego ma compiz, bo przecież o nim mowa? Ano to, że można ustawić w nim, że chowanie okien polega na przesunięciu ich w róg ekranu. Użytkownicy systemów z rodziny Mac więdzą oco chodzi.
  • Przełaczanie między aplikacjami – i tu compiz daje wiele możliwości. Może być standardowo jak w windowsie alt+tab. Mamy także do dyspozycji przęłączanie rodem z Visty win+tab. Dodatkowo można włączyć pierścieniowe przełączanie między oknami. Jednak mi najbardziej do gustu przydło scale. Po wciśnięciu ustalonej kombinacji okienka są przeskalowywane do miniaturek ułożonych jedna obok drugiej, a wciskając dodatkowo kursory (albo klikając myszą) przełączamy się między oknami

3. Conky

Od kiedy pierwszy raz spotkałem się z tym skrypcikiem to zawsze towarzyszy on na moim pulpicie. Lubię mieć szybki podgląd do ogólnych statystyk systemu. A oto moja konfiguracja:

# UBUNTU-CONKY
# A comprehensive conky script, configured for use on
# Ubuntu / Debian Gnome, without the need for any external scripts.
#
# Based on conky-jc and the default .conkyrc.
# INCLUDES:
# – tail of /var/log/messages
# – netstat connections to your computer
#
# — Pengo (conky@pengo.us)
## Create own window instead of using desktop (required in nautilus)
own_window no
own_window_hints undecorated,below,skip_taskbar
background no

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# fiddle with window
use_spacer yes
use_xft yes

# Update interval in seconds
update_interval 3.0

# Minimum size of text area
minimum_size 120 5

# Draw shades?
draw_shades no

# Text stuff
draw_outline no # amplifies text if yes
draw_borders no

uppercase no # set to yes if you want all text to be in uppercase

# Stippled borders?
stippled_borders 0

# border margins
border_margin 4

# border width
border_width 0

# Default colors and also border colors, grey90 == #e5e5e5
default_color white
default_shade_color black
default_outline_color white

own_window_colour brown
own_window_transparent yes

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
gap_x 10
gap_y 10

# stuff after ‘TEXT’ will be formatted on screen

override_utf8_locale no
xftfont Terminus:size=8
xftalpha 0.8

TEXT

${color slate grey}Kernel: ${color }$kernel
${color slate grey}UpTime: ${color }$uptime

${color slate grey}CPU:${color }${offset 10}$freq[Mhz] ${acpitemp}[C]
${color slate grey}CPU1:${color }${offset 10}${cpu cpu1}[%] ${offset 15}
${cpugraph cpu1 20,170 000000 ffffff}
${color slate grey}CPU2:${color }${offset 10}${cpu cpu2}[%] ${offset 15}
${cpugraph cpu2 20,170 000000 ffffff}

${color slate grey}MEM: ${color } $memperc% $mem/$memmax
${membar 3,100}
${color slate grey}SWAP: ${color }$swapperc% $swap/$swapmax
${swapbar 3,100}

${color slate grey}ROOT: ${color }${fs_free /}/${fs_size /}
${fs_bar 3,100 /}
${color slate grey}HOME: ${color }${fs_free /home}/${fs_size /home}
${fs_bar 3,100 /home}

${color slate grey}NET:
${color}Up: ${color }${upspeed eth0} k/s ${offset 30}${color}Down: ${color }${downspeed eth0}k/s${color}
${upspeedgraph eth0 20,80 000000 ffffff} ${offset 10}${downspeedgraph eth0 20,80 000000 ffffff}
${color slate grey}WIFI:
${color}Up: ${color }${upspeed eth1} k/s ${offset 30}${color}Down: ${color }${downspeed eth1}k/s${color}
${upspeedgraph eth1 20,80 000000 ffffff} ${offset 10}${downspeedgraph eth1 20,80 000000 ffffff}

${color slate grey}Processes: ${color }$processes
${color slate grey}Running: ${color }$running_processes

${color slate grey}Highest CPU:
${color #ddaa00} ${top name 1}${top_mem cpu 1}
${color lightgrey} ${top name 2}${top cpu 2}
${color lightgrey} ${top name 3}${top cpu 3}
${color lightgrey} ${top name 4}${top cpu 4}

${color slate grey}Highest MEM:
${color #ddaa00} ${top_mem name 1}${offset 10}${top_mem mem 1}
${color lightgrey} ${top_mem name 2}${offset 10}${top_mem mem 2}
${color lightgrey} ${top_mem name 3}${offset 10}${top_mem mem 3}
${color lightgrey} ${top_mem name 4}${offset 10}${top_mem mem 4}

4. Dodatki
W tej chwili z dodatkowych programów potrzebowałem

  • Ubuntu Tweak – proste narzędzie wspomagające pracę administratora. Dzięki niemu mamy szybki i łatwy dostęp do różnych opcji konfiguracyjnych.
  • Gnapi - linuxowy odpowiednik Napi Project napisany w C/C++

5. Efekt końcowy
A na koniec dla osłody zamieszczam wygląd mojego obecnego miejsca pracy.

space desktop

space desktop

Hello word

Posted by: riser on: luty 1, 2009

Witaj dziwny świecie pełen przyjaciół i wsparcia oraz bandy debili z którymi przyszło nam się spotykać. Właśnie nadszedł magiczny czas niczym oczekiwanie na prezenty pod choinką z młodych lat. Czy byliśmy grzeczni i dostaniemy prezent, czy może czeka na nas rózga? To wszystko się niedługo okaże. Sesja niczym zima zaskoczyła wszystkich studentów, którzy jak drogowcy są nieprzygotowani. Cała czasoprzestrzeń została zaburzona i pochłania resztki wolnego czasu jak czarna dziura światło. Jednak wspólnymi siłami można zdziałać cuda, “Bez przyjaciół jestem nikim, z nimi mogę wszystko”. To bardzo trafne stwierdzenie. Cieszy mnie to, że spotkałem tyle wspaniałych osób ale nawet najpiękniejsza róża ma kolce. Czemu niektórzy ludzie nie potrafią dorosnąć. Zachowują się tak jakby ich rozwój przebiegał w przeciwnym kierunku. Przykro mi się robi, kiedy widzę takie zachowanie jak grzesznik przestrzega innych grzeszników przed konsekwencjami, a sam nie stosuje się do tego co mówi. To mnie tylko utwierdza, że wszyscy jesteśmy dwulicowi. Szkoda słów na takich ludzi i świat jaki tworzą. Niedoceniając nakładu czasu oraz pracy wkładanego w rozwiązywanie różnych problemów, które dostrzegamy dopiero wtedy kiedy nam przeszkadzają. Czasem można by było oderwać się od codziennej sztywnej rutyny i zmienić swoją rolę w filmie. Spojrzeć na coś z innej strony i docenić osoby o których pracy/istnieniu wcześniej wiedzieliśmy mało albo nic. Może wtedy niektórym otworzy się umysł, trzeba tylko uważać by resztki człowieczeństwa nie zostały wywiane…

Nudy (…)

Posted by: riser on: grudzień 14, 2008

Ja