Czasami coś nie działa i przyczyna tego za diabła nie chce dać się znaleźć. Poniżej kilka pomocnych rad w debugowaniu w środowisku chmury i kontenerów, czyli “u mnie działa, a na cudzym komputerze nie”
Co jest nie tak z C++
Czasami mam wrażenie, że podczas rozwoju C++ coś poszło nie tak i język z wersji na wersję stał się nieczytelnym potworkiem, któremu coraz bliżej do Perla z czytelnością. Pomijając wskaźniki i zarządzanie pamięcią, spójrzmy na taki przykład: lista (wskaźników) funkcji, które mają być wywołane po podaniu określonych parametrów programu, z dodatkową listą pomocniczych parametrów i tekstem pomocy. Docelowo ma pozwolić na takie wywołanie aplikacji w następujący sposób:
./aplikacja --moje-id 1234 --email ja@domena.pl zamow pizze
Jak trzymać hasła w pamięci i dlaczego cstringi są czasem lepsze od std::stringów?
“Poznaj sekret cstringów. Std::stringi ich za to nienawidzą”! A na serio, nie zgapiając od pomponików, będzie trochę na temat trzymania wrażliwych danych w pamięci RAM i o zapobieganiu ich zapisowi na dysk.
No masters, no slaves, blockchain inside – pisanie zdecentralizowanych aplikacji
Blockchain idealnie wpisuje się w ostatni trend politycznej poprawności w świecie IT. Nie ma nodów master ani slave, wszyscy są równi niezależnie od płci miejsca w sieci. Framework Dinemic jest biblioteką, która pomaga tworzyć zdecentralizowane aplikacje w C++ oparte o technologię, która jest pochodną Blockchain, X509 oraz kilku innych technologi. Służy głównie do tworzenia programów, które mają działać na wielu maszynach równocześnie zapewniając przy tym wysoką wydajność i odporność na awarie.
Chociaż dinemic jest de facto ORM’em dla C++, to spróbujmy na początek inaczej. Wyobraź sobie repozytorium Git’a. Takie, w którym to nie developerzy robią commity, a poszczególne obiekty klas, a każdy commit jest informacją na temat zmiany stanu takiego obiektu (i bazy danych pod nim), podpisaną przez niego cyfrowo. Dodatkowo pomyśl, że nie mamy jednego centralnego serwera Git’a, ale każdy komputer w sieci jest za razem repozytorium lokalnym i remote’m dla innych repozytoriów. Jeszcze tylko dodać, że nieautoryzowane zmiany są odrzucane przez inne repa i mamy obraz framework’a dinemic. To tak w skrócie. Po nieco obszerniejszy opis zapraszam dalej.
Continue reading “No masters, no slaves, blockchain inside – pisanie zdecentralizowanych aplikacji”
Szukanie dziury w całym – cProfiler dla Pythona
Czasami wszystko działa, ale chciałoby się lepiej. W poprzednim poście pokazywałem jak poukładać pamięć w aplikacji w C, żeby skorzystać z dobrodziejstw cache procesora. Tym razem trochę o optymalizacji dla Pythona i szukaniu najwolniejszych punktów w programie.
Continue reading “Szukanie dziury w całym – cProfiler dla Pythona”
Jak zrobić to samo nieco szybciej – organizacja danych w pamięci
Krótko na temat tego, czy ten sam algorytm może działać szybciej. Tak! Proste testy, które udało mi się zrobić pokazują wzrost prędkości o ok. 30% przy odpowiednim czarowaniu z danymi, bez ingerencji w sam algorytm.
Continue reading “Jak zrobić to samo nieco szybciej – organizacja danych w pamięci”
Popen GPG vs. Libsodium
Ten wpis ma na celu pokazać różnice w wydajności programu zbudowanego w oparciu o wywoływanie zewnętrznego polecenia a wykonaniem podobnych zadań za pośrednictwem dedykowanej biblioteki. Przedstawione porównanie nie powinno być jednak brane pod uwagę jako wyznacznik wydajności GPG, a jedynie jako ciekawostka, gdyż wykorzystane algorytmy i sposób ich obsługi różnią się pomiędzy GPG a libsodium.
Libsodium – kryptografia w łatwiejszym wydaniu
Już kilka razy potrzebowałem użyć kryptografii do jakiegoś zadania. Zwykle przychodził z “pomocą” potworek o nazwie openssl, za pomocą którego można było wyczarować cuda. Problemem była jedynie składnia, którą trudno zapamiętać, bo “potworek” jest szyty na miarę profesjonalnych zastosowań.
Continue reading “Libsodium – kryptografia w łatwiejszym wydaniu”