To jest strona archiwalna. Prowadziłem ją od kwietnia 2009 roku do końca lutego 2016 roku. Zapraszam na nową stronę!

Artykuły

Debugowanie z Paulem Butcherem

Usuwanie błędów z pewnością jest najmniej przyjemną czynnością w całym procesie tworzenia oprogramowania. Nie ulega jednak wątpliwości, że doświadczenie zdobyte przy niwelowaniu błędów, wszystko jedno czy banalnych czy skomplikowanych jest o wiele cenniejsze od tego, czego uczymy się z większości książek dotyczących pr...

GCC: Optymalizacja rekurencji ogonowej

Rekurencję nazywamy ogonową kiedy wywołanie rekurencyjne jest ostatnią rzeczą, którą zajmuje się funkcja. Z tego właśnie powodu da się ją bardzo łatwo optymalizować. Również najpopularniejszy kompilator języka C++, czyli g++ dostarcza nam w opcjach optymalizacyjnych przekształcanie rekurencji ogonowej na mniej zasoboże...

Zwalczanie wycieków i błędów pamięci (C++11)

Nowoczesne narzędzia dostarczone w bibliotece standardowej języka C++11 ułatwiają i czynią bardziej efektywną walkę z wyciekami i błędami pamięci. Z pozoru niegroźne problemy mogą całkowicie położyć naszą aplikację. Nauczmy się jak je rozpoznawać i unikać.

C++11: Funkcje usunięte (= delete)

Dzisiaj postanowiłem napisać krótko o usuwaniu z klas funkcji, które są domyślnie definiowane (i deklarowane) przez kompilator. Powodem tego jest fakt iż w czasie prac nad biblioteką Tamandua, brak usunięcia domyślnie definiowanego konstruktora kopiującego spowodował bardzo trudny do znalezienia błąd. Ponieważ jego zlo...

C++11: Referencje do r-wartości i semantyka przenoszenia danych

Standard C++11 wprowadził dla nas dwa nowe udogodnienia, które mogą uczynić nasz kod jeszcze szybszym. Są to referencje do r-wartości (r-value references) i semantyka przenoszenia danych (move semantics). Te dwa rozwiązania, dobrze wykorzystane, umożliwiają tworzenie szybszego i bardziej efektywnego kodu. W tym artykul...

C++11: Formatowanie czasu

Standard C++11 wprowadził do biblioteki standardowej zestaw narzędzi do mierzenia czasu i wykonywania na nim pewnego zestawu operacji. Narzędzia to są zdefiniowane w pliku nagłówkowym <chrono>. Do lamusa odeszły więc rozwiązania znane z biblioteki <ctime>. Standard C++11 wprowadza również nowe manipulatory ...

C++11: Wskaźniki unikalne i współdzielone (unique_ptr, shared_ptr)

Nowe standardy języka C++ dodają nie tylko całkiem nowe możliwości, ale także udostępniają nam udogodnienia, dzięki którym możemy wyeliminować na zawsze niektóre problemy, które były poważnym utrapieniem dla programistów. Jednym z takich problemów są wycieki pamięci przy jej dynamicznym alokowaniu. Wielu z nas często z...

C++11: Nowa składnia pętli for

Standard C++11 wprowadza kolejne udogodnienia, które pozwolą nam na szybsze tworzenie kodu. Jednym z takich ulepszeń jest nowa składnia pętli for. Oczywiście jest to alternatywa - nadal możemy korzystać z dobrze nam znanej, starej składni. Nowa składnia pozwala na szybkie iterowanie po elementach kontenerów z bibliotek...

C++: Funkcje wirtualne i czysto wirtualne, klasy abstrakcyjne

Jednym z bardzo użytecznych udogodnień dostępnych chyba we wszystkich językach obiektowych jest możliwość definiowania klas abstrakcyjnych, a w niektórych z nich także interfejsów. W języku C++ sprawa klas abstrakcyjnych i interfejsów wygląda nieco inaczej niż w większości języków. Omówimy tutaj klasy abstrakcyjne, ora...

C++ i Linux: Odczytywanie informacji o pliku

Jakie informacje o pliku interesują przeciętnego użytkownika komputera? Nazwa, typ, coraz rzadziej rozmiar, jeszcze rzadziej czas ostatniej modyfikacji. Każdy, kto zetknął się z systemem Linux, wie lepiej od użytkownika konkurencyjnych systemów, że na dysku jest zgromadzonych znacznie więcej informacji o każdym pliku. ...
Zobacz wszystkie artykuły

Notatki

Porozmawiajmy przez TOR

Blisko rok temu stworzyłem swój własny komunikator o nazwie pochodzącej od zwierzątka na rysunku poniżej. Tamandua była (jest) komunikatorem działającym w modelu klient-serwer, czyli nie odróżniała się w tej kwestii od popularnych programów tego typu. Podczas jego tworzenia inspirowałem się zasadą d...

Moje artykuły po francusku

W maju francuski serwis programistyczny developpez.com opublikował tłumaczenia 4 artykułów mojego autorstwa: Fighting off memory leaks and errors (C++11) - Combattre les fuites de mémoire et les erreurs C++11 Introduction to programming modular applications in C++ - Introduction à la program...

10 lat Git'a

Git, czyli najpopularniejszy system kontroli wersji obchodzi w tym tygodniu 10 urodziny. Z tej okazji Jennifer Cloer z Linux.com przeprowadziła wywiad z Linusem Torvaldsem, twórcą Linuxa i Git'a, wywiad na temat tego narzędzia. Zachęcam do jego przeczytania tutaj.

Przenoszenie bazy danych aplikacji Django

Aby przenieść dane z dowolnej bazy aplikacji Django najprościej jest skorzystać z dedykowanego mechanizmu oferowanego przez wszechmogący plik manage.py. Postępujemy wegług schematu: python manage.py dumpdata > database.json Otwieramy do edycji plik settings.py lub inny plik, w którym prze...

Programowanie aspektowe

Wiele razy przy okazji pisania kodu, w którym zamieszczałem instrukcje służące do tworzenia dziennika (czyli popularnych logów) zastanawiałem się czy zostawiać je w wersji produkcyjnej. Co prawda odpowiednie makra dbały o ich usuwanie z kodu wynikowego wersji produkcyjnej, ale sam kod źródłowy przes...

Renderowanie grafiki z plików HTML

Od pewnego czasu przymierzam się do napisania gry. Jaka to gra, napiszę innym razem, kiedy prace będą już bardziej zaawansowane. W tym momencie intensywnie przygotowuję jej projekt, a także przyswajam obsługę narzędzi, z których zamierzam korzystać. Trochę się tego zebrało. Muszę dość dobrze opanowa...

Zbrodnia przeciwko kodowi

Pierwszą styczność z programowaniem miałem już w podstawówce. Wybrałem wtedy język Pascal, ponieważ słyszałem, że jest niezbyt trudny i tym samym bardzo dobry na początek. Mój zapał nie trwał długo, bo szybko zniechęciłem się widząc, że nie napiszę pierwszej gry tak szybko jak tego chciałem. Na pocz...

Napisz swoją własną powłokę systemową w C++!

Dzisiaj opublikowałem na angielskiej wersji mojej strony drugą część artykułu o programowaniu aplikacji modularnych w C++. Zachęcam do przeczytania zarówno wstępu jak i pierwszej części, w której opisuję m.in jak napisać program przypominający powłokę systemową. Zamierzam wkrótce przetłumaczyć obydw...

Dalszy rozwój projektu Tamandua

Jakiś czas temu informowałem, że pracuję nad własnym komunikatorem internetowym. Projekt nazywa się Tamandua. W obecnej chwili z programu da się korzystać, aczkolwiek nie jest on jeszcze wolny od błędów. Mniej więcej 3 tygodnie temu zacząłem pisać wersję 1.x.x biblioteki (numeracja poprzedniej wersj...

Wykrywanie plików językowych w Django (Python)

W ostatnim czasie robię pewien projekt z wykorzystaniem frameworka Django dla języka Python. Podczas tłumaczenia aplikacji natknąłem się na pewne problemy z wykrywaniem plików zawierających tłumaczenia. Poniżej przedstawiam listę kroków, które należy wykonać, aby tłumaczenie działało prawidłowo. Ja ...

Zobacz wszystkie notatki