Task Coach

Ikonka Task CoachW jednym z poprzednich wpisów mówiłem o organizacji czasu. Wspomniałem także, że używam programu Task Coach, który jest mi w tym pomocny. Zatem dzisiaj parę słów właśnie o tym darmowym narzędziu.

Interfejs użytkownika

Program posiada bardzo prosty i przejrzysty interfejs użytkownika. Okno główne składa się właściwie tylko z kilku części: menu głównego, paska narzędziowego oraz panelu z zakładkami. Oto zrzut ekranu:

Główne okno Task Coach

To właśnie ten prosty i miły dla oka interfejs mnie urzekł. Zacząłem korzystać z tego programu i do dzisiaj bardzo dobrze mi służy. Ale do rzeczy, czyli…

co można nim robić?

Jak widać na powyższym obrazku Task Coach doskonale radzi sobie z zapisywaniem zadań w postaci hierarchicznej. Innymi słowy możemy rozbić “duże” zadania na kilka mniejszych, które z koleji można rozbić na jeszcze mniejsze itd. Warto dodać, że na powyższym zrzucie ekranu Task Coach wyświetla zakładkę Task tree, czyli właśnie drzewko zadań. Prócz tego mamy jeszcze:

  • Task list - płaski widok drzewa działań, w którym każde działanie jako swoją nazwę przyjmuje pełną “ścieżkę” w drzewie zadań. Dobre jeśli chcemy posortować nasze zadania w sposób płaski, czyli nie uwzględniający struktury drzewiastej. Ja go jednak rzadko używam.
  • Categories - lista kategorii zadań. Przy okazji warto dodać, że każde z zadań możemy przypisać do wcześniej zdefiniowanej kategorii. Niestety, funkcjonalność kategoryzacji jest w powijakach i prócz samego przypisania kategorii nie możemy nic z tym faktem zrobić (nawet nie da się wyświetlić przypisanej kategorii na liście czy drzewie). Imho widok bezużyteczny.
  • Effort - lista naszych wysiłków. :) Nazwałem to dość nietypowo by zwrócić uwagę na funkcjonalność programu związaną z tym widokiem.

Wysiłki

Program ma (moim skromnym zdaniem) rewelacyjną funkcję liczenia czasu i kosztów naszej pracy. Wystarczy zaznaczyć zadanie, które zaczynamy wykonywać i kliknąć na przycisk “Start tracking effort”, aby program rozpoczął rejestrację naszego wysiłku. W ten sposób możemy mierzyć czas, jaki dane zadanie nam zajmuje. Możemy także śledzić koszt takiego zadania. Wystarczy przypisać stawkę godzinową i mamy kwotę należną za zadanie.
Osobiście używam tej funkcji do uczenia się szacowania swojej pracy. Innymi słowy przed przystąpieniem do zadania przewiduję ile mi ono zajmie czasu (niestety, nie ma pól odpowiedzialnych za szacowanie pracochłonności, więc wpisuję to w opis zadania [Description]). Po wykonanej i podliczonej przez Task Coacha pracy wiem jak moje szacunki mają się do rzeczywistości. Jest to szczególnie przydatne w pracy programisty, gdzie powtarzalność niektórych zadań jest dość duża. Można wówczas dokładniej oszacować ile dane zadanie zajmie nam czasu.

Obsługa

Program jest właściwie głównie sterowany z paska narzędziowego. Najciekawsze i najczęściej używane przyciski są na jego końcu:

Task Coach pasek

  1. New task… - tworzy nowe “duże” zadanie (jest na najwyższym poziomie w drzewie)
  2. New subtask… - tworzy podzadanie w aktualnie zaznaczonym zadaniu
  3. Edit selected task - otwiera okienko dialogowe do edycji zadania
  4. Mark completed - oznacza dane zadanie jako zrobione - życzę wszystkim częstego klikania w ten przycisk :D
  5. Delete task - usuwa zaznaczone zadania
  6. Start tracking effort - rozpoczyna liczenie czasu poświęcanego na zaznaczone zadanie
  7. Stop tracking effort - kończy liczenie czasu

Program jest bardzo intuicyjny w obsłudze. A tak wygląda dodawanie nowego zadania:

task-coach-addtask.png

Warto zwrócić uwagę na pole Priority. Używam go do szeregowania zadań pod względem ważności. Potem dokonuję sortowania na widoku drzewa i wiem co powinienem aktualnie robić. W powyższym edytorze zadania możemy także ustalić datę zakończenia zadania (planowaną) czy dokonać edycji naszych wysiłków. Nie będę się jednak rozpisywał tak bardzo szczegółowo. Po prostu zachęcam do zainstalowania i używania Task Coacha.

Wady

Niestety, nie ma róży bez kolców. :) Program jest w kilku miejscach niedopracowany. Przykładowo dość dziwnie zachowuje się sortowanie zadań na drzewie (można do tego przywyknąć). Gorszą rzeczą jest fakt, że Task Coach czasami potrafi się “wysypać”. Wówczas możemy stracić wszelkie wprowadzone zmiany. Dlatego też bardzo ważną rzeczą jest częste zapisywanie naszych zadań na dysku (druga ikonka na pasku narzędziowym). Jak już wspominałem obsługa kategorii jest bezużyteczna, gdyż nie można ich wyświetlić na liście czy drzewie (a szkoda) - polecam zamiast tego stworzyć sobie kilka plików z zadaniami (np. praca, dom). Więcej wad nie dostrzegłem, bądź są tak mało istotne że nie warto o nich wspominać.

Podsumowanie

Task Coach nie jest programem idealnym, ale jest bardzo użyteczny. Jego prostota jest jego największą zaletą. Dodać możemy do tego jego niski koszt (darmo) i już powinien znaleźć się w naszej prywatnej biblioteczce używanego oprogramowania. Nieco niepokojący jest fakt, że przez ponad rok nie wyszła nowa wersja aplikacji. Żywię nadzieję, że autor nie porzucił mimo wszystko swojego projektu. :)
UPDATE: Nowsza wersja 0.63.0 nie posiada większości przypadłości wersji 0.61.0. Zalecam upgrade! :)

Projekt: H-RayTracer

H-RTByć może ktoś przeglądając mojego bloga zauważył w odsyłaczach link do strony domowej projektu H-RayTracer. Chciałbym w dzisiejszym wpisie przedstawić H-RT, gdyż jestem jego autorem. Wszystko zaczęło się w zeszłym roku, gdy musiałem sobie wybrać temat pracy magisterskiej. Jako promotora swojej pracy wybrałem dra Dariusza Sawickiego, który jest entuzjastą grafiki komputerowej (pozdrawiam!). Odkąd pamiętam grafika zawsze była mi bliska i już jakiś czas temu podjąłem decyzję, że chciałbym napisać magisterkę na ten temat. I tak oto zdobyłem temat pracy. Nie wdając się zbytnio w szczegóły praca polega na przeanalizowaniu pod kątem użyteczności i wydajności kilku modeli lokalnego odbicia światła (w tym jeden szczególny oparty na fizyce). Ponieważ do moich badań potrzebuję narzędzi powstał niejako produkt poboczny (nie związany bezpośrednio z samą pracą) czyli właśnie H-RayTracer.

H-RayTracer jest narzędziem do generowania grafiki 3D algorytmem ray tracingu. Póki co jest we wczesnej fazie rozwojowej, ale z dnia na dzień staje się coraz bardziej funkcjonalny. Jedyna jak dotąd wydana oficjalnie wersja (0.1) potrafi używać tylko bardzo prostego algorytmu śledzenia promieni (opisanego przez Whitteda ponad 20 lat temu). Obecnie pracuję nad ray tracingiem stochastycznym, który bierze pod uwagę także odbicia światła od obiektów, a nie tylko światło pochodzące bezpośrednio ze źródeł.
Program jest napisany w języku C++ w pełni obiektowo. Wydaje mi się, że jest na tyle elastyczny, że można będzie w nim zawrzeć większość algorytmów renderingu opartych na śledzeniu promieni. Kwestia jedynie ich poznania i zaimplementowania, co nie jest zazwyczaj proste, ale jest za to bardzo ciekawe. Zdecydowałem się także na pełną otwartość kodu mojego rozwiązania - H-RayTracer jest oprogramowaniem open source.
Tyle informacji na temat H-RayTracer w dniu dzisiejszym. Jednakże od czasu do czasu będę zamieszczał na blogu wpis tyczący się H-RT.

Do obejrzenia:
przykładowy rendering z wersji 0.1

Jak organizuję sobie pracę

Organizuj się!Nie wiem czy ktoś z Was miewa takie problemy, ale mnie notorycznie męczyła pewna przypadłość - nie mogłem zabrać się do tego, co mam do zrobienia (lub co gorsza muszę zrobić). Choroba zwana odkładaniem na później trawiła mnie wewnętrznie i nie byłem z tego powodu szczęśliwy. To się ostatnio zmieniło. Co prawda nie znam super-lekarstwa na tę chorobę, ale postaram się podzielić z Wami wiedzą jak z tym bakcylem walczyć. Zacznę od przedstawienia mojego sposobu na zorganizowanie się.

Zapisz!

Zapisz!Żeby rozpocząć i zakończyć z sukcesem zadanie należy najpierw o nim pamiętać. Moja zasada numer 1: zapisz to co masz do zrobienia. Ma to dwie zasadnicze zalety. Po pierwsze nie zapomnę tego co mam zrobić. A po drugie - być może bardziej istotne - słowo pisane bardziej motywuje do działania. Jeśli coś sam napisałem na kartce lub w komputerze to znaczy, że zależy mi na ukończeniu tego zadania. Jest to więc pewnego rodzaju dokument, który sporządzam dla siebie. A wiadomo - dokument to dokument - nie można go puścić ot tak w niepamięć. Można powiedzieć, że słowo pisane jest mocniejsze dla ludzi niż słowo mówione.

Podziel!

Podziel!Drugim krokiem jest odpowiednie postawienie sobie problemu. Jeśli zapiszę sobie na kartce, że mam napisać pracę magisterską to będzie to jedynie bardzo przygnębiający wpis, gdyż nie niesie dla mnie żadnych wskazówek jak to zrobić. Tak duże cele, jak wspomniana praca magisterska, należy dzielić na znacznie mniejsze czynności. Często nie wystarczą do tego pod-zadania, ale potrzebna jest głębsza struktura drzewiasta. Dla naszej magisterki można byłoby napisać takie oto zadania:

  • Napisać pracę magisterską

    • wyszukać potrzebą literaturę
    • przeczytać podstawowe zagadnienia
    • stworzyć konspekt pracy
      • część teoretyczna
      • część praktyczno-badawcza
    • przyswoić odpowiednią wiedzę potrzebną do wykonania pracy
      • tutaj zagadnienia do nauki
    • przygotować badania potrzebne do części praktycznej
    • przeprowadzić odpowiednie badania
    • zanalizować wyniki badań
    • przygotować część teoretyczną pracy
      • rozdział 1
      • rozdział 2
    • przygotować część praktyczno-badawczą pracy
      • rozdział 5
      • rozdział 6
    • sporządzić wnioski
    • przeprowadzić korektę pracy
    • sformatować całą pracę
    • wydrukować i oprawić

Co więcej, wiele z powyższych podpunktów możnaby jeszcze rozwinąć o konkretne dla danej pracy magisterskiej podzadania (np. dotyczące badań). Tak czy inaczej moja zasada nr 2 to: podziel zadanie na podzadania. Zapewniam wszystkich, że czas poświęcony na zaplanowanie pracy nad zadaniem zwróci się z nawiązką.

Aktualizuj!

Aktualizuj!Należy także dodać zasadę nr 3, mówiącą że sporządzoną listę zadań można i należy w czasie pracy aktualizować. Wiadomo, że niektóre jej punkty mogą powstać dopiero po dokonaniu pewnych podzadań. Z drugiej strony, czasami zdarza się, że jakiś podpunkt “wyleci”, gdyż okazał się niepotrzebny. Nie należy traktować zatem listy jako czegoś stałego. Tak jak wszystko w otaczającym nas świecie, także i nasze plany ulegają zmianom.

Tak oto przedstawia się mój sposób na organizację mojego czasu. W ten sposób nie odkładam rzeczy na później, gdyż mam dość dokładny plan tego, co mam zrobić. Jeśli tylko zakończę dane podzadanie zaznaczam to na liście - w ten sposób widzę, że poruszam się ciągle do przodu. Z drugiej strony podzadania są stosunkowo małe więc nie przeraża mnie rozpoczęcie nad nimi pracy. Do tego jeszcze pomaga mi w bieżącej pracy darmowy program, o którym napiszę następnym razem. Zdradzę tylko, że nazywa się Task Coach.

Polecam poczytać wpisy na blogu BeSmart.pl, zwłaszcza o strategii małych kroczków.

Mini recenzja książki o renderingu

Okładka "Physically Based Rendering"Obiecałem sobie już dawno, że napiszę o pewnej książce, którą mam przyjemność posiadać. Mowa jest o anglojęzycznej pozycji pt. “Physically Based Rendering: From Theory to Implementation”. Autorami są Matt Pharr oraz Greg Humphreys. Jest to najlepsza książka o renderingu, jaką miałem okazję trzymać w rękach. Piszę w rękach (a nie ręce), gdyż książka ma ponad 1000 stron (kredowy papier), a całość jest umieszczona w twardej oprawie. Nie jest to zatem zbyt “poręczna” pozycja. Na tym jednak jej wady się kończą. :)

O czym dokładnie jest książka?

Autorzy opisują wszelkie aspekty teoretyczne oraz praktyczne renderingu opartego na zasadach fizycznych. Książkę można uznać za nowoczesny podręcznik grafiki komputerowej. Jest napisana w bardzo przemyślany sposób, gdyż nawet osoba nie orientująca się w temacie, aczkolwiek posiadająca pewną wiedzę matematyczną, będzie mogła zrozumieć większość materiału. Materiału jest tak dużo, że ciężko jest go przedstawić ciągłym tekstem, więc posłużę się bardzo skrótową listą zagadnień. Oto ona:

  • przekształcenia geometryczne (wektory, macierze, układy współrzędnych)
  • reprezentacja brył w przestrzeni wraz z metodami ich obróbki (np. jak wyliczyć przecięcie kuli z linią)
  • metody przyspieszania obliczeń, reprezentacja przestrzenna geometrii
  • podstawowe zagadnienia związane z kolorem oraz radiometrią
  • model kamery
  • teoria próbkowania i rekonstrukcji obrazu z próbek (np. filtry)
  • reprezentacja obrazu (dane o pikselach, zakres tonalny, HDR)
  • lokalne modele odbicia światła (B*DF) oraz definicja materiałów
  • tekstury oraz sposoby ich przetwarzania (mapowanie, filtrowanie, generacja)
  • interakcja światła z otoczeniem (emisja, pochłanianie)
  • źródła światła (światła punktowe, powierzchniowe i wiele innych)
  • całkowanie numeryczne wielkości radiometrycznych metodą Monte-Carlo w grafice (2 dość rozbudowane rozdziały)
  • metody renderingu opartego na LTE (light transport equation) czyli ray tracing, path tracing, dwukierunkowy path tracing

Książkę zatem można traktować jako kompendium wiedzy z zakresu ogólnie rozumianego raytracingu. Podejście fizyczne zapewnia ogromny realizm tworzonych obrazów za pomocą algorytmów opisanych w książce. Lektura tego wydawnictwa skłoniła mnie do próby napisania własnego silnika renderującego opartego na raytracingu (o czym niebawem). Mogę tylko napisać, że książka zawiera wszystko co jest potrzebne do tego niełatwego zadania. Warto wspomnieć, że autorzy obrali świetną formę książki, gdyż w czasie opisywania zagadnień równolegle tworzą w języku C++ pełnowartościowy raytracer. Do tego wszystkiego otrzymujemy płytę CD, która zawiera pełny kod renderera PBRT (tworzonego w książce) wraz z materiałami dodatkowymi (np. grafiki). Możemy zatem sami “pomajstrować na żywo” z kodem raytracera, np. rozszerzając go o dodatkowe możliwości. Warto wspomnieć także, że kod jest wieloplatformowy.

Na koniec

Chciałbym wszystkim, którym tematyka grafiki komputerowej nie jest obca, gorąco polecić opisywaną książkę. Gdyby nie to, że jest dostępna jedynie w języku angielskim byłaby doskonałym podręcznikiem akademickim na przedmiot “Grafika komputerowa” na naszych uczelniach. Żywię nadzieję, że kiedyś jedno z polskich wydawnictw pokusi się o tłumaczenie tej pozycji, aby zastąpić już wysłużonego Foleya (choć być może lepszym zamiennikiem byłaby książką Petera Shirleya o podstawach grafiki). Mam również nadzieję, że będzie troszkę tańsza niż oryginał (około 250 PLN) albo chociaż wydana w ten sam rewelacyjny sposób.

PS. Książkę można nabyć na amazon.com, ale taniej można ją kupić na amazon.co.uk - stan na 14 marca 2007.

Polepsz komfort kodowania

Tak naprawdę ten wpis miał mieć całkiem inny tytuł, ale koniec końców zdecydowałem się na tę nieco tajemniczą sentencję. Zatem, o co chodzi? O kolory. A konkretnie o kolory edytora, w którym piszemy kod źródłowy. Okazuje się, że ustawienia kolorystyczne edytora mają niebagatelny wpływ na to, jak się nam pracuje (zmęczenie, efektywność, etc).

Monitor to prawie żarówka

Zapewne wielu z Was siedzi przed monitorem po kilka godzin dziennie. Gapimy się w tą szklaną taflę nieustannie, a nasze oczy muszą się do tego dostosować. Jak wiadomo, monitor to nic innego jak źródło światła. Można go spokojnie przyrównać do dobrze wszystkim znanej żarówki elektrycznej bądź świetlówki kompaktowej. Próbowaliście kiedyś patrzeć na świetlówkę przez kilka godzin? Nikomu tego nie polecam, niemniej wpatrywanie się w monitor komputerowy można porównać z gapieniem się w takie sztuczne źródło światła. Oczywiście energia emitowana przez monitor jest rozłożona na całej jego powierzchni, a nie jak w przypadku żarówki niemal punktowo. Fakt jednak pozostaje taki, że nasze oczy odbierają to niezbyt korzystnie.

Słabe światło otoczenia

Po pierwsze należy ustalić w jakich warunkach pracujemy. W znakomitej większości przypadków jest to za słabo oświetlone pomieszczenie biurowe. W takich warunkach nasz monitor wydaje się wyspą światła na tle bladego pomieszczenia. Jeśli zatem możemy to zapalmy porządne światło, aby nieco zmniejszyć kontrast między ekranem monitora a resztą pomieszczenia. Zapewniam, że nasze oczy będą mniej zmęczone. Jeśli jednak z jakiś powodów nie możemy lub nie chcemy doświetlić pomieszczenia gdzie pracujemy mam inne rozwiązanie.

Kolory edytora

Można pójść w odwrotnym kierunku - zmniejszyć światło wydobywające się z ekranu monitora. Ponieważ bardzo dużo czasu spędzam pracując w Visual Studio 2005 zmieniłem schemat kolorystyczny w tym narzędziu. Oto jak wygląda ekran edytora kodu w moim VS (w pomniejszeniu):

VS Colors small

Jak widać tło jest prawie całkiem czarne, a litery są jasne i kolorowe. Z moich obserwacji wynika, że przy tak skonfigurowanym edytorze kodu można dłużej pracować. Moje oczy i mózg mniej się męczą. Można oczywiście pójść jeszcze dalej i zmienić całkowicie schemat kolorystyczny całego systemu operacyjnego. Należy jednak pamiętać, że zbyt ciemne i monotonne barwy mogą nas doprowadzić do senności.

Odpowiednia czcionka

Na koniec jeszcze tylko wspomnę o jednej rzeczy. O czcionce edytora. W moim przypadku jest to darmowy font o nazwie Inconsolata, którego używam z dwóch powodów. Po pierwsze system zawsze używa antialiasingu przy tej czcionce. Po drugie, według mnie świetnie wygląda. :) Polecam rozmiar 14 - wtedy czcionka wygląda fantastycznie. Pewnie wielu z Was myśli, że ustawiając rozmiar na “aż 14″ marnuję cenną przestrzeń edytora. Według mnie lepiej mieć większy rozmiar tekstu i mniej się męczyć podczas jego czytania, niż mieć czcionkę 10 punktową i 50 linijek kodu do ogarnięcia. Do takiego wniosku doszedłem dopiero niedawno. Znowu zauważyłem, że pracuje mi się z tak duża czcionką znacznie lepiej. Być może się starzeję… ;) Tak to wygląda w pełnym rozmiarze (wycinek):

VS Colors big

Uwaga: na zrzutach ekranu widać kod C++ z rozszerzonym podświetlaniem składni. Korzystam z dodatku Visual Assist X, o którym pewnie niebawem napiszę.

Do pobrania:
moje ustawienia kolorów VS 2005
inna, bardziej kolorowa wersja ustawień (imho lepsiejsza).