May 2009

Uwaga! Informacje na tej stronie mają ponad 3 lata. Nadal je udostępniam, ale prawdopodobnie nie odzwierciedlają one mojej aktualnej wiedzy ani przekonań.

20:27
Sat
30
May 2009

Windows 7 RC - moja recenzja

Zainstalowałem na swoim laptopie dostępną za darmo, testową wersję Windows 7 RC. Laptop jest raczej złomowy i nie spełnia nawet wymagań (procesor Turion 64, 1.8 GHz, 1 GB RAM, a wersja 64-bitowa wymaga 2 GB RAM). Mimo tego nowy Windows działa całkiem nieźle. Ale po kolei... Poniżej moja mała recenzja Windows 7, z perspektywy stałego użytkownika Windows XP, który nie lubi i nie używa Visty.

Instalacja trwała ok. pół godziny. Pierwsze wrażenie: system jest ładny, podoba mi się jego styl graficzny. Pamięć RAM zajęta po uruchomieniu systemu, bez żadnych uruchomionych programów: 500 MB. To już mi się mniej podoba.

Nowy sposób, w jaki najczęściej używane programy można dodawać do paska zadań i do menu Start, podoba mi się bardzo. Nareszcie można przestawiać przyciski programów na pasku zadań!!! - coś czego od zawsze brakowało w Windowsie i o czym zawsze marzyłem :)

Read full entry > | Comments (0) | Tags: windows | Author: Adam Sawicki | Share

22:15
Thu
28
May 2009

Microsoft Visual Studio 10 Beta - moja recenzja

Można za darmo ściągnąć i zainstalować wersję Beta nowego Microsoft Visual Studio 10. Dałem się skusić i zainstalowałem go na laptopie. Oto moja mała racenzja:

GUI przepisali z użyciem WPF. Jest przez to ładniejsze, ale straszliwie zamula. Jak wcześniej Visual chodził bardzo szybko (w porównaniu z czymkolwiek napisanym w Javie :) tak teraz nawet zwykłe zaznaczanie myszką kodu czy wpisywanie znaków ma widoczne, nieprzyjemne opóźnienie.

Zakładki z otwartymi plikami można teraz dokować jak zwykłe panele, jako osobne okna albo też tworząc nowe obszary z zakładkami. To daje nowe możliwości wykorzystania wielu monitorów do pokazywania równocześnie kilku plików z kodem.

Spośród innych nowości, rozwijane są jak zwykle przede wszystkim technologie służące do tworzenia systemów informatycznych, aplikacji bazodanowych itp. klimatów :) Razem z nowym Visualem dostajemy .NET Framework 4.0. Tym nie mniej Microsoft postarał się tym razem także o udogodnienia dla programistów aplikacji natywnych pisanych w C++, a nawet... uaktualnił bibliotekę MFC.

Wygląda na to, że kompilator C++ wspiera teraz elementy nowego standardu, w tym static_assert (asercja sprawdzana w czasie kompilacji), auto (zamiast typu - kompilator sam dedukuje typ, dzięki czemu nie trzeba wpisywać długaśnych wyrażeń jak std::multimap::const_iterator), wyrażenia lambda i referencje do r-wartości &&.

Read full entry > | Comments (0) | Tags: visual studio c++ | Author: Adam Sawicki | Share

23:45
Mon
25
May 2009

Humor komputerowy

Jest dużo stron z humorem i każda ma swój klimat - np. Joe Monster.org, funiaste.net czy Perełki.net.

Z takich typowo komputerowych najlepsze są chyba bash.org.pl (który zbiera cytaty z IRC) i przede wszystkim Roflcompter.pl (dowcipy informatyczne i matematyczne). Dawno się tak nie uśmiałem, jak czytając ten ostatni :) Humor komputerowy zbieramy też na Warsztacie w dziale Humor. Z innych perełek to gorąco polecam Choinki matematyczne. Ponieważ oryginalny link od pewnego czasu nie działa, pozwoliłem sobie zrobić MIRROR. W ogóle to najśmieszniejsze moim zdaniem obrazki (głównie humor komputerowy) zbieram w katalogu regedit.gamedev.pl/pub/Humor.

Żeby ta notka nie była bez ani jednego dowcipu, przytoczę dwa - niestety mające dużo wspólnego z całkiem poważną rzeczywistością.

Gdyby murarze budowali domy tak, jak programiści piszą programy, to jeden dzięcioł zniszczyłby całą cywilizację.

Dlaczego tak jest? Trafnej odpowiedzi udziela inny dowcip w temacie informatyczno-budowlanym:

Jak do kierownika budowy przyjdzie klient i, w momencie kiedy jest już położony dach, powie, że on by chciał jeszcze jedno piętro pod tym dachem, to kierownik popuka się w czoło. W analogicznej sytuacji kierownik zespołu programistycznego zapyta:
- A na kiedy?

Comments (0) | Tags: humor software engineering web | Author: Adam Sawicki | Share

12:23
Sat
23
May 2009

Manager zasobów #2 - Wczytywanie w tle

Sam manager zasobów napisałem wg podobnych założeń, jakie miałem w TFQ7. Jest jeden globalny manager zasobów g_ResMngr przechowujący kolekcję wszystkich zasobów. Zasób jest obiektem klasy pochodnej od Resource implementującej odpowiednie metody wirtualne. Zasób może mieć nazwę i można wyszukiwać zasoby wg nazwy, ale może też mieć nazwę pustą. Zasoby można swobodnie tworzyć i usuwać. Obiekt klasy Resource istnieje przez cały czas życia zasobu, a wewnątrz pamięta stan - niezaładowany, w tracie ładowania, załadowany itd.

class Resource
{
public:
  enum STATE {
    STATE_UNLOADED, STATE_LOADING, STATE_LOADED, STATE_LOADED_ERROR,
  };
  Resource(const string &Name);
  virtual ~Resource();
  STATE GetState() { return m_State; }
  bool IsLoaded() { return m_State == STATE_LOADED; }

  void Load(); // Żąda załadowania już teraz
  void BeginLoading(); // Rozpoczyna ładowanie w tle
  void Unload(); // Odładowuje
  //...

protected:
  virtual void OnLoad() = 0;
  virtual void GetLoadType(bool *OutUseBkg, BkgJob::TYPE *OutBkgJobType) = 0;
  virtual void OnLoadBkg() { } // Wykonywana na osobnym wątku
  virtual void OnLoadAfterBkg() { }
  virtual void OnUnload() = 0;

private:
  string m_Name;
  STATE m_State;
  //...
};

class ResourceManager
{
public:
  //...
  Resource * Find(const tstring &Name);
  Resource * MustFind(const tstring &Name);
  template <typename T> T * FindEx(const tstring &Name) { /*...*/ }
  template <typename T> T * MustFindEx(const tstring &Name) { /*...*/ }
};

extern ResourceManager * g_ResMngr;

Read full entry > | Comments (2) | Tags: algorithms c++ engine | Author: Adam Sawicki | Share

23:37
Thu
21
May 2009

Manager zasobów #1 - BkgJobManager

Tajemniczy "Ciekawski" prosił, żebym opisał mój asynchroniczy manager zasobów. Zanim go opiszę, muszę napisać słowo o tym, na czym się on opiera - o module do wykonywania zadań w tle.

Ogólnie chodzi o to, aby osobny wątek pracujący w tle wykonał jakieś określone zadanie. Problem w tym, że tworzenie za każdym razem nowego wątku jest powolne. Poza tym przydałoby się, żeby takie zadania były wykonywane po kolei, a nie wszystkie na raz. Dlatego napisałem globalny BkgJobManager, który ma na stałe utworzone wątki, a zadania do wykonania dodaje się do jego kolejki jako obiekty specjalnej klasy BkgJob.

class BkgJobManager {
public:
  BkgJobManager();
  ~BkgJobManager();
  void Init();
  void Frame();
  void AddJob(BkgJob *Job);
  //...
};
extern BkgJobManager *g_BkgJobManager;

Żeby zdefiniować swoje zadanie, trzeba odziedziczyć po klasie BkgJob i zaimplementować metody: OnWork (wywoływaną na osobnym wątku) i opcjonalnie OnWorkDone (wywoływaną po zakończeniu, już na głównym wątku, w ramach wywołania BkgJobManager::Frame).

class BkgJob {
  //...
protected:
  BkgJob(TYPE Type, MODE Mode);
  virtual void OnWork() = 0;
  virtual void OnWorkDone() { }
};

Dodatkowo, klasa pochodna określa typ zadania jako obliczeniowe (mocno angażujące procesor) lub wejścia-wyjścia (wczytujące coś z dysku). To mój oryginalny pomysł oparty na przemyśleniu, że najoptymalniej będzie, jeśli na raz będzie się mogło wykonywać tylko tyle zadań obliczniowych, ile jest rdzeni w procesorze (więcej obniżyłoby wydajność przez częste przełączanie się procesora między wątkami) i tylko jedno zadanie wejścia-wyjścia (więcej obniżyłoby wydajność przez przeskakiwanie głowicy dysku między wieloma czytanymi na raz plikami).

enum TYPE { TYPE_COMPUTATION, TYPE_IO, TYPE_COUNT };

BkgJobManager przechowuje kolejkę zadań do wykonania. Żeby to napisać porządnie, to pewnie powinna być jakaś struktura "lockless", ale ja póki co załatwiłem synchronizację zwykłym muteksem.

Ponadto zadanie ma swój priorytet. Na zadanie można też poczekać, np. wywołując na wątku głównym BkgJob::Join. To wywołanie zwróci sterowanie dopiero, kiedy dane zadanie się zakończy. Jeśli to zadanie czeka gdzieśtam w kolejce, to jego priorytet zostaje podbity, żeby trafiło na przód kolejki.

Ciekawym rozwiązaniem jest, że na wątku głównym należy wołać w każdej klatce (lub inaczej, ale możliwie często) BkgJobManager::Frame. Daje to okazję managerowi, aby "zebrać" wykonane w tle i zakończone zadania, wywołać im BkgJob::OnWorkDone i zwolnić je z pamięci.

Trzeba też pomyśleć, jak z wykonywanej na innym wątku funkcji BkgJob::OnWork przekazywać informację o niepowodzeniu. Ponieważ w swoim kodzie używam wyjątków, łapię wyjątek zgłoszony w BkgJob::OnWork i zachowuję jego obiekt, żeby na wątku głównym móc go potem odczytać.

Podsumowując: Oryginalnie wątek służy do tego, żeby natychmiast rozpocząć wykonywanie jakiejś pracy w tle albo żeby działać cały czas w pętli czekając na jakieś komunikaty. Mechanizm taki jak tutaj przedstawiłem pozwala zmienić koncepcję na taką, w której użytkownik może tworzyć zadania i dodawać je do kolejki, a one będą po kolei wykonywane w tle. Podobny kod - JobSwarm - umieścił na swoim blogu John Ratcliff. Mój można pobrać stąd: BackgroundJob.hpp, BackgroundJob.cpp.

Tego mojego modułu mogę teraz używać do różnych rzeczy, ale podstawowym (i póki co jedynym :) zastosowaniem jest wczytywanie w tle zasobów Direct3D. O samym managerze zasobów napiszę następnym razem...

Comments (0) | Tags: algorithms c++ engine | Author: Adam Sawicki | Share

21:16
Tue
19
May 2009

Mój niezbędnik - Najlepsze programy

Zebrałem tu listę programów, których używam i które polecam do poszczególnych zastosowań. Każdy z nas ma swoje ulubione programy, ale to który jest lepszy to zwykle nie jest kwestia gustu, tylko obiektywny fakt. Dlatego aby wiedzieć o dobrych programach, warto się takimi informacjami jak te tutaj wymieniać. W komentarzach piszcie, jakie są wasze ulubione programy.

Założenia wstępne: Używam Windows XP. Staram się używać programów darmowych, a nie piracić (wszędzie, gdzie nie wspominam o kosztach, mowa jest o programie Freeware lub Open Source). Komputera używam do wielu różnych rzeczy, ale przede wszystkim do programowania.

Ogólne

Manager plików: Total Commander. Jest bezdyskusyjnie bezkonkurencyjny. Niestety jest Shareware. Niezarejestrowana wersja w pełni działa, ale legalnie można jej używać tylko przez 30 dni.

Kompresja: 7-Zip. Pakuje formaty 7z, zip, gzip, bzip2, a jeszcze więcej rozpakowuje (w tym rar). Rozpakowywać różne archiwa potrafi też wprawdzie Total Commander, ale 7-Zip ma fajny interfejs (bardzo podobny do WinRAR) i do obliczeń wykorzystuje obydwa rdzenie procesora. Trzeba w tym miejscu dodać, że nie ma darmowych programów zdolnych pakować format rar - to potrafi tylko płatny WinRAR.

Antywirus: Mamy już na szczęście takie czasy, że są darmowe i niezłe programy antywirusowe. Mnie najbardziej podoba się Avira AntiVir. Niezły jest też avast!, ale wymaga darmowej rejestracji e-mailowej raz do roku i mniej mi się podoba jego interfejs. Cały czas zastanawiam się też nad zakupem komercyjnego pakietu bezpieczeństwa (firewall + antywirus i inne) - to wydatek rzędu 150-200 zł. Poza tym w szukaniu szkodników w systemie pomóc może HijackThis (pokazuje podejrzane dodatki zainstalowane w systemie), SpyBot Search & Destroy (skanuje system jak antywirus, ale pod kątem spyware, adware i podejrzanych ciasteczek) oraz ShellExView (listuje i zarządza zainstalowanymi rozszerzeniami powłoki systemowej).

Emulacja napędu CD/DVD z plików z obrazem płyt (np. ISO): Daemon Tools.

Launchy - używam go zamiast Menu Start i Pulpitu. Pisałem o nim tutaj.

Samurize - wykresy pokazujące statystyki działania komputera. Pisałem o nich tutaj.

Nagrywanie płyt: Nero Express dołączany do nagrywarek. Potrafi wszystko co potrzebne.

WinDirStat - bardzo oryginalny program, który analizuje wybrany dysk lub katalog, a potem pokazuje graficznie i w kolorach, które podkatalogi i które typy plików zajmują jak dużo miejsca.

Console2 - zamiennik systemowej konsoli. Pozwala zmieniać czcionkę i ogólnie jest sympatyczny. Obsługuje zakładki. Można do niego podłączać inne "powłoki", np. Windows PowerShell czy Python (command line).

TweakUI - pozwala konfigurować masę ustawień systemowych, np. łatwo wyłączyć wszelkie autostarty z płyt CD i pamięci Flash (co moim zdaniem jest obecnie podstawą bezpieczeństwa komputera, bo wirusy często przenoszą się przez Pendrive).

Platformy: DirectX Redistributable, .NET Framework (pobiera się go przez Windows Update), Java Runtime Environment, Adobe Flash Player.

Read full entry > | Comments (0) | Tags: windows software | Author: Adam Sawicki | Share

19:50
Sun
17
May 2009

Za dużo blooma ;)

Pokażę taki jeden mały screen, żeby udowodnić, że w domu wcale się nie nudzę. Dla tych którzy wiedzą o co chodzi: możnaby go zatytułować "za dużo blooma" :D

A tak na serio, to co teraz piszę to nie żaden silnik, tylko takie luźne eksperymenty. Luźne, ale jednak wymagają pewnej spójnej platformy. Póki co ta platforma zawiera: CommonLib, mój stary framework do Direct3D9 z TFQ7 (stary ale jary, po latach nadal nie wymyśliłem nic lepszego), konsolę zrobioną z użyciem tej zwykłej systemowej w sposób asynchroniczny, klasę kamery, zupełnie nowy manager zasobów (który potrafi wczytywać np. tekstury i shadery w tle, w osobnym wątku - zawsze o takim marzyłem, dopiero teraz miałem odwagę go napisać), podłączoną bibliotekę AntTweakBar i kilku innych drobiazgów. Słowem - minimalizm, żeby skupić się na tym o co chodzi.

A chodzi o zabawę z różnymi technikami graficznymi. Na pierwszy ogień poszły efekty postprocessingu (przede wszystkim oczywiście Bloom :D). Po napisaniu tych prostych zrobiłem sobie Deferred Shading. Teraz mając w przestrzeni obrazu dostęp do danych takich jak głębokość i normalna będę mógł policzyć dużo więcej fajnych rzeczy :) Jak skończę tą zabawę, to nieomieszkam się pochwalić (zapewne w formie filmiku YouTube), a potem przyjdzie czas na eksperymenty z generowaniem siatek i tekstur.

Ponieważ nie mam ostatnio natchnienia do pisania często notek na moim blogu, napiszcie w komentarzach, o czym chcielibyście przeczytać. Może ciekawie byłoby opisywać obszerniej i z fragmentami kodu konkretne tematy, tak jak to robi na swoim blogu SceNtriC (który przecież zajął 3 miejsce w konkursie na najlepszy blog IT)?

Comments (0) | Tags: rendering productions gallery | Author: Adam Sawicki | Share

19:42
Sun
10
May 2009

Czytelny kod: Nazwy zmiennych

W matematyce zawsze wkurzało mnie, że używa się oznaczeń jednoliterowych z ewentualnymi indeksami i trzeba pamiętać, co który symbol znaczy. W programowaniu nie jesteśmy tak ograniczeni i warto to wykorzystywać, aby poprzez dobre nazywanie zmiennych dbać o czytelność kodu.

Na przykład jeśli trzeba napisać dwie pętle, jedna w drugiej, to ja nigdy nie nazywam zmiennych sterujących i, j. Jeśli jest tylko jedna pętla, to nie ma problemu z nazwaniem zmiennej i, a jeśli pętle przechodzą po pikselach bitmapy, to naturalne jest ich nazwanie x, y. W każdym innym przypadku wolę bardziej opisywe nazwy, bo wtedy trudniej o pomyłkę. Np.:

for (uint obj_i = 0; obj_i < ObjCount; obj_i++)
{
  const OBJECT &obj = *Objects[obj_i];
  for (uint vert_i = 0; vert_i < obj.GetVertexCount(); vert_i++)
  {
    const VERTEX &vert = obj.GetVertex[vert_i];
    vert.Pos = CalcPos();
    vert.TexCoord = CalcTexCoord();
  }
}

Zauważcie też, w jaki sposób do zmiennych pośrednich przypisałem referencje do obiektów, żeby nie odnosić się za każdym razem przez ich pełne kwalifikowanie. Gdybym tego nie zrobił, to te najbardziej wewnętrzne instrukcje musiałyby wyglądać tak:

Objects[obj_i]->GetVertex[vert_i].Pos = CalcPos();
Objects[obj_i]->GetVertex[vert_i].TexCoord = CalcTexCoord();

Jeszcze jedna zaleta jest taka, że w przypadku gdybym zmienił sposób odwołania do obiektów czy wierzchołków (np. nazwa metody GetVertex), w kodzie mojej funkcji wystarczy zmienić tylko jedno miejsce.

Read full entry > | Comments (1) | Tags: c++ | Author: Adam Sawicki | Share

23:48
Tue
05
May 2009

Windows 7 RC publicznie i za darmo

Jak podaje serwis www.windows7.pl i inne źródła w Sieci, Microsoft udostępnił za darmo do pobrania testową wersję Windows 7 oznaczoną jako RC (Release Candidate). Można go ściągnąć stąd: Windows 7 Release Candidate. System działa do 1 marca 2010. Dostępna jest wersja 32- i 64-bitowa.

Postanowiłem zapoznać się z Windows 7, bo mam nadzieję, że to będzie dobry system, który zastąpi powszechnie dziś używany Windows XP z pominięciem nieudanej Visty. Na razie ściągam ten ważący 3.05 GB plik ISO. Kiedy będę już miał jakieś wnioski z instalacji i używania systemu, na pewno o nich napiszę. Póki co warto zwrócić uwagę na ciekawostkę, że pobieranie odbywa się przez osadzony w przglądarce aplet napisany w... Javie :)

Comments (0) | Tags: windows | Author: Adam Sawicki | Share

20:34
Sun
03
May 2009

Długi weekend i Jatno

Na długi weekend pojechałem z przyjaciółmi do wsi o nazwie Jatno. Nie zna jej żadna mapa z wyjątkiem zumi.pl, wszystkie pokazują tam środek lasu :) Było super, a do mojej Galerii dodałem właśnie kilka zdjęć z tej wycieczki. Szczególnie podoba mi się to:

Ciekawe jest, że ogień ogniska wygląda zupełnie inaczej z różnym czasem naświetlania. Gdyby to był render, to powstałoby pytanie, który z tych dwóch efektów jest bardziej realistyczny ;)

Comments (0) | Tags: life gallery | Author: Adam Sawicki | Share

STAT NO AD [Stat] [Admin] [STAT NO AD] [pub] [Mirror] Copyright © 2004-2017 Adam Sawicki
Copyright © 2004-2017 Adam Sawicki