Widzę, że jesteś pierwszy raz na moim blogu. Witaj :). Może nawet będziesz miał ochotę subskrybować blog poprzez RSS. Trzymaj się ciepło!
Jest kryzys. Może jeszcze tak mocno nie dotknął branży IT jak sektora bankowego. Ale już idzie wielkimi krokami. Zwiastują już to pierwsze jaskółki jak ta powyższa :).
Na co dzień korzystam z aplikacji Things do zarządzania listami zadań i projektów do wykonania w myśl zasady Getting Things Done. Ta mała aplikacja na Maka pomaga mi zorganizować dzień i wieść bezstresowe życie ;). Jej uzupełnieniem jest Things For iPhone, dzięki której wszystkie moje zadania i notatki mam zawsze pod ręką w komórce.
Problem pojawia się natomiast wtedy, kiedy korzystam z więcej niż jednego Maka. Wówczas chciałbym mieć synchronizowane wszystkie dane aplikacji Things pomiędzy różnymi komputerami.
Na ratunek przychodzi nam serwis Dropbox, który służy do łatwej synchronizacji danych pomiędzy komputerami.
Wiem, że na to czekałeś od dawna. Wiem, że nie mogłeś skoncentrować się rano, kiedy to przecierałeś oczy, a do twoich żył dopiero napływały pierwsze łyki kawy (czytaj americano z mlekiem z syropem orzechowym). Przecież nie mogłeś upaść tak nisko, żeby otworzyć plotek.pl, kozaczek.pl - mówiłeś do siebie.
Dla nas geeków odwiedzanie codziennie tych samych serwisów, żeby tylko sprawdzić co nowego na stronie, jest bolesną stratą czasu. Dlatego ochoczo używamy przeróżnych czytników kanałów. Z tego powodu bardzo mnie zasumuciło, kiedy to o2 zdecydowało się na likwidację kanału RSS z Pudelka :).
Trzeba było temu zaradzić. Napisałem skrypt, który chodzi po Pudelku, agreguje notki i tworzy kanał RSS. Panie i Panowie, oto Pudelek Nieoficjalnie:
Technikalia:
Skrypt zarówno agreguje notki znajdujące się na głównej stronie Pudelka, a także fotonotki, które znajdują się po prawej stronie. Skrypt odpalany jest raz na godzinę, więc miejcie to na uwadze.
Kod źródłowy skryptu na licencji MIT umieściłem na http://github.com/wiktor/pudelek/tree/master. Możecie bawić się nim do woli :). Jeśli zrobicie na jego podstawie coś fajnego to dajcie mi znać.
Niby rzecz z pozoru błaha. Ale czy przywiązujesz uwagę do tego, jak wygląda znak zachęty w linii poleceń? Nie? Ja także nigdy się nad tym nie zastanawiałem. Do czasu. Sam nie wiem czemu, ale z uporem godnym maniaka zacząłem przyglądać się bliżej znakowi zachęty. Taki prefekcjonizm :).
Zakres moich poszukiwać ograniczyłem tylko do Basha. Żeby zmienić wygląd znaku zachęty, wystarczy ustawić zmienną środowiskową PS1 i zresetować terminal. Zazwyczaj ustawienie zmiennej odbywa się w pliku konfiguracyjnym Basha (w moim przypadku ~/.bash_login).
Jakie informacje mogą się pojawić w znaku zachęty? Aktualna godzina i data w różnych formatach, nazwa komputera, login użytkownika, bieżący katalog roboczy. Ponieważ już prawie nikt nie używa monitorów czarnobiałych, to warto także pokolorować znak zachęty.
Co tam dobrego można znaleźć? Na pierwszym miejscu login użytkownika oraz nazwa komputera, na którym obecnie znajduje się. Jest to o tyle istotne, gdyż często pracuję zdalnie na innych komputerach i wolałbym ich nie pomylić przez przypadek. Następnie kolorem niebieskim oznaczony jest bieżący katalog. Tutaj miałem dylemat. Czy pokazywać całą ścieżkę do np. ~/Library/Widgets, czy tylko nazwę bieżącego katalog? Zdecydowałem się pokazywać całą bieżącą ścieżkę.
PS. Nowy rok, nowe postanowienia i nowy layout na blogu :). Smacznego.
Porządkując swoje rzeczy po przeprowadzce znalazłem swój notatnik z Java Developer Day 2008, która odbyła się w październiku w Krakowie. Najmocniejszymi jej punktami były prezentacje Teda Newarda i Neala Forda oraz afterparty :).
Ted Neward powiedział, że nie ma sensu dzielić metodyk zarządzania na kaskadowe czy na lekkie vel zwinne. Czemu? I tak wszyscy stosują metodologię WHISKY - Why the Hell Isn’t Somebody Koding Yet? No cóż…
Drugi równie dobry tekst opowiedział Ted Neward o tym, jak koduje Bóg:
person = Person.new( but we don't know the constructor arguments )
so... we are using factory method instead
jak stworzyć prostą aplikację typu CRUD w Ruby on Rails, która będzie korzystać z bazy danych MySQL,
jak wdrożyć tą aplikację na serwerze Tomcat przy użyciu narzędzia Warbler.
Wymagania. Zakładam, że masz już zainstalowaną bazę danych MySQL 5.0.x. Potrzebny będzie także serwer Tomcat, który można stąd pobrać (w chwili pisania korzystałem z najnowszej wersji 6.0.18). Jeśli nie masz jeszcze zainstalowanego Ruby on Rails to wykonaj następujące polecenie:
# Na wszelki wypadek Ruby on Rails przyda się :)
$ jruby -S gem install rails warbler jruby-openssl --no-ri--no-rdoc
Stworzenie prostej aplikacji
Czas napisać prostą aplikację. Jej funkcjonalność ograniczy się do dodawania, edytowania i usuwania wiadomości (dużo powiedziane, bo wiadomość będzie się składać tylko z łańcucha znaków :)). Zaczynamy.
# Stworzenie szkieletu aplikacji
$ jruby -S rails rails_app
$ cd rails_app/# Stworzenie modelu wiadomości oraz operacji CRUD dla niego
$ jruby -S script/generate scaffold message content:string
# i pozostaje konfiguracja dostępu do bazy danych - tego Rails jeszcze nie potrafią same zrobić :)
$ vim config/database.yml
Moją konfigurację można zobaczyć poniżej. Nie należy zapomnieć stworzyć bazy danych w MySQLu (wystarczy tylko railsapp_development).
Aplikacja już napisana, baza danych skonfigurowana. Zostało jeszcze utworzenie odpowiednich tabelek w bazie danych i można już bawić się aplikacją.
# Jeśli nie było żadnego błędu po drodze to poniższa operacja powinna wykonać poprawnie
$ jruby -S rake db:migrate
(in/Users/wiktor/jruby/rails_app)
== 20081028224846 CreateMessages: migrating ===================================
-- create_table(:messages)
-> 0.0049s
== 20081028224846 CreateMessages: migrated (0.0058s) ==========================
Aplikację można już uruchomić poleceniem jruby -S script/server. Po wejściu na stronę http://localhost:3000 można zobaczyć środowisko uruchomienia aplikacji, a pod adresem http://localhost:3000/messages znajduje się przed chwilą stworzona, bardzo wyrafinowana aplikacja.
Wdrożenie Ruby on Rails na Tomcata
Żeby przygotować aplikacje Ruby on Rails do wdrożenia ją na Tomcata, należy użyć biblioteki Warbler. Została ona już zainstalowana poleceniem jruby -S gem install ... na samym początku artykułu.
Przez dłuższy czas obserwowałem rozwój Warblera. Kiedy projekt stawiał pierwsze kroki, przygotowanie aplikacji Ruby on Rails wiązało się ze starannym przygotowaniem pliku konfiguracyjnego, zadbaniem o odpowiednie sterowniki JDBC do bazy danych. Nie było to miłe zajęcie. Z tego powodu warto docenić, że obecnie przygotowanie aplikacji do wdrożenia na Tomcacie jest banalnie proste.
# Stworzenie pliku config/warble.rb.
$ jruby -S warble config
# Teraz należy w pliku config/warble.rb zamienić linijkę# z # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'# na config.webxml.rails.env = 'development'# Przygotowanie aplikacji w postaci WAR.
$ jruby -S warble war
jar cf rails_app.war -C tmp/war .
# Gotowe?
$ ls-l rails_app.war
-rw-r--r--1 wiktor wiktor 9800493 Oct 2923:28 rails_app.war
# Mając już Tomcata uruchomionego możemy wdrożyć aplikację.
$ cp rails_app.war ../apache-tomcat-6.0.18/webapps/
Parę słów wyjaśnienia. Standardowo Warbler uruchamia aplikację w trybie produkcji. Jednym ze skutków jest to, że aplikacja będzie korzystać z bazy railsapp_production, a nie z railsapp_development, której do tej pory używaliśmy. Zmiana podyktowana była jedynie moją leniwością.
Warto też zauważyć, że cała aplikacja rails_app.war waży niecałe 10 MB. Co się tam znajduje? Otóż cała dystrybucja JRubiego, a także wszystkie zależności Ruby on Rails. Takie życie :). Zachęcam także do przestudiowania pliku config/warble.rb, poprzez który można konfigurować zachowanie aplikacji na serwerze Javowym.
W ostatnie wakacje z dobrze skonfigurowanego Windowsa XP przerzuciłem się na Maka. Nigdy za bardzo nie narzekałem na Windowsa. U mnie działał, co nie było chyba częstym zjawiskiem. Od jakiegoś czasu wzbiera się we mnie frustracja, kiedy patrzę wstecz na moje poprzednie życie ;). Ponieważ obecnie jestem w trakcie pisania magisterki to posiadam nieskończone pokłady wolnego czasu. Najwyższy czas z siebie wszystko wyrzucić.
Rzut oka na wygląd mojego Windowsa, żeby się przekonać, że Maki już mi wcześniej chodziły po głowie. Nie będę wspominał o ilości pracy, którą trzeba poświęcić, żeby z Windows XP zrobić sensowne środowisko programistyczne, co widać na obrazku wyżej.
Środowisko programistyczne
Kiedy programista siada do czystej kopii Windowsa, nieważne czy XP czy Vista, to pierwszym odruchem jest (a przynajmniej powinno być) zainstalowanie Cygwina. Czynność wręcz obowiązkowa i nikt nie mnie przekona, że ponieważ mamy cudowne IDE to już nic nam nie potrzeba. Naprawdę samo IDE wystarcza? Naprawdę, naprawdę?
W takim razie prosty test: Jak policzyć liczbę linijek kodu w projekcie? (najlepiej na konsolce oczywiście) Pamiętam, że podczas pisania Zespołowego Projektu Programistycznego (można patrzeć na to, jak na licencjat) na UW ciągle z kolegami sprawdzaliśmy, ile już linijek kodu mamy. No bo 20 tysięcy to był dopiero porządny wynik :).
Wracając do Cygwina. Mimo że sprawuje się on znakomicie to jednak estetyką nie powalał.
Jest po prostu brzydki i zawsze będzie tylko imitacją konsolki unikowej. Tym samym przechodzę do kolejnej rzeczy, z jaką chce się rozprawić.
Natywne aplikacje
Aż nie wiem, od czego zacząć. OK, pokopię leżącego, czyli Vista. Nie będę się przecież czepiał, że okienka z edycją zmiennej środowiskowej nadal nie można rozciągnąć, co doprowadza do szału. O masowej adopcji WPF także nie będę wspominał. Przytoczę tylko kawałek postu pt. Where are the native Vista apps?, gdzie Eric Burke pisze:
Vista supports hardware-accelerated graphics. WPF seems to support really cool things like vector-based UIs. [...]
How can Microsoft expect third parties to develop Vista-specific apps if the bundled utilities (chodzi o Paint i Notepad) don’t even take advantage of Vista features? This is incredibly hard to understand.
Good luck, Microsoft. I’m typing this on my new MacBook Pro, and it looks like I have plenty of native Cocoa apps from which to choose.
Wcześniej brak w pełni natywnych aplikacji mi nie przeszkadzał. Ale odkąd przesiadłem się na Maka dostrzegłem ich urok. Spójność wyglądu systemu operacyjnego i aplikacji jest bardzo miła dla oka oraz nie rozprasza. Dopiero teraz zrozumiałem istotę i potrzebę stworzenia biblioteki SWT, na którym oparty jest Eclipse. Aplikacje oparte na SWT będą lepiej prezentować się niż konkurencyjne napisane w Swingu. Sam pisałem aplikacje Swingowe (np. Symulator Sieci Petriego). Dlatego wiem, ile energii i pracy trzeba włożyć, żeby aplikacja napisana w oparciu o Swinga ładnie wyglądała. A tak poważnie to czy aplikacje desktopowe przeznaczone dla zwykłego użytkownika powstają w Javie, w Swingu? Poważnie?
Przyjazny system dla programisty
W Cupertino udało się stworzyć system, który nie ssie. Globalny, systemowy słownik dostępny w każdej aplikacji (tak, tak, jest to bardzo ważne), ujednolicony system notyfikacji poprzez aplikację Growl, czy innowacyjne pomysły na interakcje z użytkownikiem jak Quicksilver to tylko kilka przykładów małych rzeczy, które cieszą na Maku. Przy okazji to jeśli ktoś jest zainteresowany, czym jest Quicksilver to skromnie polecam swoją prezentację o Quicksilverze.
Powszechne w Polsce skojarzenie dotyczące Maków jest tragiczne :), ale mimo to trzeba robić coming out i łamać te stereotypy :). Więc czas na głupiutkie argumenty. Zacznijmy od konferencji i dużych firm. Nie ważne, czy spojrzy się na zdjęcia z RailsConf czy z JavaOne, to zawsze Maki tam przeważają. W Google’u 6 tysięcy na 20 tysięcy pracowników wybiera Maka. Jeszcze nie przekonany?
Motto konferencji: Miłośnicy Java dla miłośników Java aka Ciekawie o Javie.
Podczas 1-dniowej sobotniej konferencji zaprezentowanych zostanie wiele różnych technologii javowych i szkieletów aplikacyjnych. Z 4 panelami, każdy z 3-4 prezentacjami pragniemy, aby konferencja była ciekawa technologicznie oraz odzwierciedlała nasze własne, lokalne doświadczenia z Javą. JAVArsovia 2008 to idealne miejsce, aby spotkać się z innymi praktykami technologii, nawiązać kontakty, porozmawiać o bieżących problemach (technologicznych) i poznać nowe narzędzia, które usprawnią Twoje projekty. Sądzimy, że udział w konferencji JAVArsovia 2008 pozwoli każdemu popróbować się z nowościami technologicznymi lub zgłębić już poznane.
Wstęp wolny! Dobra zabawa gwarantowana!
Rejestracja na konferencję jest bezpłatna acz obowiązkowa i trwa do 29 maja! Na zakończenie konferencji zaplanowane jest spotkanie podsumowujące JAVArsovię na Polach Mokotowskich. Liczba miejsc ograniczona, więc czym wcześniej się zarejestrujesz, tym większa szansa na udział w niej.
Poprzednia edycja JAVArsovia 2007 była prawdziwym hitem czerwca 2007 w Polsce i teraz na pewno również nim będzie. Mamy nadzieję zorganizować największą i najbardziej huczną konferencję Java w Polsce w 2008. Bądź jej częścią! Miłośnicy Java już czekają na Ciebie…
Zapraszam w imieniu Kapituły JAVArsovii 2008 i grupy Warszawa JUG!
Mój poprzedni słownikowy widget dla iGoogle odniósł duży sukces. Dostawałem maile od ludzi, którzy zaadaptowali słownik dla iGoogle do Opery, Firefoksa, a nawet do Dashboarda (poprzez WebClip). Ponieważ sam jestem użytkownikiem Maka, postanowiłem napisać widget dedykowany dla Dashboard. Moim zdaniem wygląda on o niebo lepiej niż swój poprzednik dla iGoogle.
Moje wrażenia programistyczne są bardzo miłe. Wykorzystywałem do tego środowisko Dashcode, które miało swoją premierę wraz z Leopardem. Nie jest ono zbyt rozbudowane, ale bardzo dobrze się sprawdza dla małych widgetów. Trzeba dodać, że ma bogatą bibliotekę komponentów, które znacząco ułatwiają pracę. Słownik tak samo jak swój poprzednik bazuje na dict.pl.
[05-10-2006] ulepszone komunikaty błędów oraz w słowniku nie ma szukanego tłumaczenia,
dzięki Pawłowi Wrzeszczowi udało mi się wyeliminować mały błąd pod MacOSem 10.4,
owiecc zasugerował, żeby nowe wyszukiwanie było przewinięte, tj. po wpisaniu hasła owca i przewinięciu wyników na dół, a następnie po wpisaniu hasła krowa wyniki nie powinny także być przewinięte na dół,
kiedy nastąpi błąd spowodowany brakiem dostępu do Internetu lub dict.pl nie będzie chwilowo działał, pojawi się odpowiednia wiadomość.