Przejdź do głównej zawartości

Pierwszy wpis (init commit)

Od jakiegoś czasu przymierzałem się do stworzenia własnego bloga dotyczącego szeroko rozumianego programowania, czego efektem jest niniejszy blog. Poruszane tematy będą dotyczyć programowania ze szczególnym uwzględnieniem języka C++, wzorców projektowych, życia z pingwinem, oraz okazjonalnie platformy Mac OS X/iOs z wykorzystaniem objective-c. Część wpisów będzie miała charakter czysto techniczny, część z nich będzie formą osobistych rozważań na tematy około informatyczne.

Kilka słów o mnie:

Jestem stosunkowo młodym developerem, w swojej zawodowej karierze miałem już jednak okazję zajmować się implementacją algorytmów do przetwarzania obrazów przemysłowych z wykorzystaniem platformy .Net, C, C++, CUDA, implementacją GUI'ca na systemy wbudowane (telefony nie będące smrtfonami) a obecnie rozpoczynam swoją przygodę z Mac OS X'em, iOs'em oraz objective-c. Coś wiem, coś słyszałem, coś implementowałem i na wiele tematów mam własne zdanie z którym można się zgadzać lub nie.

Komentarze

Popularne posty z tego bloga

Makra i preprocesor

Jako programista klasycznego C przyszło mi wielokrotnie ścierać się z makrami. Makro to zestaw instrukcji umieszczanych w kodzie są jednak interpretowane nie przez kompilator ale przez preprocesor. Preprocesor jest „pomocnikiem” kompilatora, zajmuje się on np. wstawianiem treści plików nagłówkowych do plików z kodem za pomocą instrukcji #include. Preprocesor należy rozumieć jako prymitywny edytor tekstu dokonujący „korekcji” plików z kodem źródłowym przed rozpoczęciem ich przetwarzania przez kompilator. Jakie są zalety wykorzystywania tych rozwiązań w kodzie? Tak naprawdę w języku C w czasach przed wprowadzeniem słowa kluczowego inline umożliwiały wstawianie kodu we wskazane miejsce. Należy bowiem pamiętać że każdorazowe wstawienie makroinstrukcji powoduje ingerencję w kod źródłowy (innymi słowy we wskazanym miejscu zostanie wstawiony stosowny fragment kodu). Łatwo obserwowalnym efektem częstego wykorzystywania makr w plikach z kodem jest rozrost pliku binarnego oraz jego szybsze d...

C++ metaprogramowanie z wykorzystaniem szablonów cz. 1

Ten wpis rozpoczyna cykl dotyczący metaprogramowania, ilość oraz częstotliwość publikacji kolejnych części pozostaje nieustalona. Poniżej zaprezentowane zostanie absolutny elementarz, czyli wyznaczanie dowolnego elementów wyrazu ciągu Fibonacciego w czasie kompilacji. #include <iostream> template<unsigned int N> struct Fib {   static const unsigned int el = Fib<N-1>::el + Fib<N-2>::el; }; template<> struct Fib<0> {   static const unsigned int el = 0; }; template<> struct Fib<1> {   static const unsigned int el = 1; }; int main(void) {   const unsigned int N = 5;   std::cout << "fib( " << N << " ) = " << Fib<N>::el << std::endl;   return 0; } Tych parę linijek zmusza do wyliczenia 5 elementu ciągu Fibonacciego kompilator, co oznacza że jedynymi instrukcjami jakie zostaną wykonane przez nasz progr...

C++11 Iterowanie

Zasadniczo iterowanie po elementach tablicy/vectora/listy itp. nie jest niczym nowym, interesującym ani pasjonującym, ot szara codzienność. Przyjrzyjmy się zatem jak robimy to najczęściej: class Image { public:   Image();   void rotate(float angle);   void display();   void* serialize(); }; class ShowImage { public:   void operator()(Image image)   {     image.display();   } }; //... std::vector<Image> imageCollection(10); for(int i=0; i<imageCollection.size(); ++i) {   imageCollection[i].display(); } for( std::vector<Image>::iterator                          currentImage = imageCollection.begin();                         currentImage < imageCollection.end();               ...