I love Free Software

Z okazji walentynek chciałbym złożyć najserdeczniejsze życzenia wszystkim twórcom Wolnego Oprogramowania. Nie ma lepszego dnia, żeby okazać swoją miłość. Dzięki!

Baner na górze ninejszej notki pochodzi ze strony kampanii “I love Free Software” zorganizowanej przez Free Software Foundation Europe. Właścicielem praw autorskich do niego jest FSFE. Kopiowanie dozwolone: Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

Commenter

Commenter jest programem do zakomentowywania i odkomentowywania sekcji plików tekstowych, w zależności od ustawionych słów kluczowych (definicji). Lista definicji jest podawana przy uruchomieniu programu.

Commenter powstał na moje potrzeby jako narzędzie ułatwiające zarządzanie jednym repozytorium konfiguracji dzielonym między kilka komputerów1. Program działa podobnie do preprocesora analizującego dyrektywy #ifdef, z tą różnicą, że Commenter po przefiltrowaniu pliku pozostawia zarówno dyrektywy, jak i zakomentowany (lub odkomentowany) tekst.

Continue reading

Migracja bloga

W związku z powolnym procesem rezygnowania z usług Gitlaba, kod źródłowy tego bloga został przeniesiony. Teraz jest dostępny na serwerze git.mgoral.org.

Singleton w i3

Terminal jest jedną z tych aplikacji, które uruchamiam bardzo często, jednak chcę tak naprawdę mieć tylko jedną jego instancję, do której przeniosę się niezależnie od tego, gdzie się znajduję. Na podobnej zasadzie działają “wysuwane” konsole (inspirowane konsolą Quake’a), np. Guake czy tilda. Jak osiągnąć podobny efekt w i3?

Continue reading

Argument Dependent Lookup

Z racji tego, że czas na cokolwiek ostatnio mam jedynie wtedy gdy mój fork jest w trakcie wywoływania funkcji sleep, a wszystkie jego syscalle zdają się przechodzić przeze mnie, a nie przez kernel (dziwne, bo nie przypominam sobie, żebym w celach debugowych wywoływał na nim ptrace), muszę dość mocno ograniczyć zakres i objętość artykułów. Dlatego tym razem postaram się w paru żółnierskich słowach wytłumaczyć czym w C++ jest Argument Dependent Lookup. Nie chcę przy tym powiedzieć, że temat ADL jest prosty (nie jest) i łatwy do zrozumienia i zapamiętania (również nie jest), ale samą ideę można według mnie wytłumaczyć w dość prosty sposób.

Continue reading

Structured Bindings

Podczas ostatniego spotkania komitetu standaryzacyjnego w Oulu, do najnowszej wersji standardu zatwierdzono między innymi, tzw. structured bindings, czyli nowy sposób dekomponowania wartości:

auto [x, y, z] = f();

Powyższe jest równoważne następującemu wywołaniu std::tie:

T1 x; T2 y; T3 z;
std::tie(x,y,z) = f();
Continue reading

Generacja wersji

Wiele projektów open-source’owych wersjonuje się poprzez ustawienie na stałe w jakimś pliku (config.h, __version__.py, …) numerka, który jest podbijany przy okazji wydania nowej wersji. Nie podoba mi się takie podejście. Przede wszystkim zbędnie zaśmieca historię commitami mającymi niewiele wspólnego z faktycznymi zmianami w logice kodu. Poza tym nie dostarcza wystarczającej informacji o używanej wersji, która jest niezbędna np. przy zgłaszaniu błędów - jest to szczególnie uciążliwe gdy program wydawany jest stosunkowo rzadko.

Continue reading

Hugo

Jekyll był jedynie pierwszym krokiem w pięknym świecie generatorów stron statycznych. Kilka dni temu rozpocząłem proces zamiany go na, moim zdaniem, lepszy model: Hugo.

Continue reading

Opisuj merge!

Changelog jest ważny. Changelog jest liniowy. Historia gita nie jest liniowa, ale może być dzięki przełącznikow git log --first-parent. Dzięki niemu nie zobaczymy wszystkich malutkich commitów wrzucanych na merge’owanego brancha, a jedynie sam merge commit. Dlatego właśnie ważne jest, żeby opisywać w nim ogół wprowadzanych zmian, a nie zostawiać jedynie standardowe “Merge branch ‘feat’ into ‘master’“. Bardzo to ułatwia późniejsze generowanie changeloga. Przykładowo, mój najnowszy wynalazek pokaże i ładnie sformatuje opis wszystkich zmian wprowadzonych od czasu ostatniego taga: Continue reading

Sforkowałem proces

$ man 2 fork

FORK(2)               Linux Programmer's Manual                 FORK(2)

NAME

fork - create a child process

SYNOPSIS

#include <unistd.h>

pid_t fork(void);

DESCRIPTION

fork()  creates  a  new process by  duplicating  the  calling  process.
The new process, referred to as the child, is an exact duplicate of the
calling process, referred to as the parent (...)

RETURN VALUE

On success, the PID of the child process is returned in the parent, and
0 is returned in the child. (...)

NOTES

Under  Linux,  fork()  is implemented using copy-on-write pages, so the
only penalty  that  it incurs is the time and memory required to dupli-
cate  the parent's page tables,  and  to create a unique task structure
for the child.

Sforkowany proces zwrócił PID 201607, poniżej przedstawiam wydruk z ps:

Continue reading