Zmiany na blogu
[updating…]
Random /tech/ notes from my bunker...
Technika w czystej postaci, wpisy nie tylko o hackowaniu, programowaniu i elektronice...
[updating…]
ups! Test::Benchmark http://gist.github.com/malcom/5759223
W poprzedniej notce, namawiałem do eksperymentów, które mogłyby uprościć proces i implementację przedstawionego tam sposobu limitowania operacji. Wspomniałem o możliwości dodania adekwatnego mechanizmu, który byłby w stanie monitorować dane operacje i wyznaczać wartość określającą ilość wykonywanych operacji (np. na sekundę), czyli mierzenie przepustowości. Obecnie nie planuję implementacji takiego mechanizmu monitorowania, ale temat wydaje się ciekawy, wiec notka ta będzie jedynie krótkim (może nieco dłuższym) komentarzem do tego tematu. Troche o tym myślałem, ale aktualnie nie mam czasu, a nawet nie jest mi takowy potrzebny, wiec skupiłem się tylko na teoretycznych dywagacjach.
Czytaj dalejSpędziłem ostatnio trochę czasu nad tematem limitowania operacji wykonywanych w określonym przedziale czasu. Sama idea zapoczątkowana została potrzebą szybkiej implementacji ograniczenia szybkości łącza, czyli typowe limitowanie transferu na potrzeby aplikacji, aby jeden program nie zajmował wszystkich dostępnych zasobów sieciowych. Nie będzie to typowe zagadnienie klasyfikowania, kolejkowania operacji lub kształtowania ruchu. Będzie to przedstawienie bardzo prostej metody, dosyć często wykorzystywanej w różnych aplikacjach. Idea Działanie jest bardzo proste, poniekąd podobne do typowych metod kontrolowania ruchu sieci, bazujący na odrzucaniu lub opóźnianiu pakietów.
Czytaj dalejW ostatniej notce, o możliwościach zmiany kolejności uporządkowania bajtów i bibliotece ByteOrder, wspomniałem, że w wolnej chwili postaram pobawić się SSE i spróbować, w prosty i w miarę wydajny sposób, zaimplementować operację bswap znaną z 32/64-bitowych rejestrów na rejestrach 128-bitowych, a nawet 256-bitowych. Poniekąd udało mi się to zrobić ;) SSE2 Druga wersja strumieniowych rozszerzeń SMID dodała 144 nowych instrukcji do SSE. Kilka z nowych instrukcji całkowitoliczbowych, potrafiących zmieniać kolejność 16- i 32-bitowych elementów w 128-bitowym wektorze oraz instrukcji logicznych, będących w rzeczywistości rozszerzeniami instrukcji MMX dla wektorów XMM, mogą nam posłużyć do implementacji funkcji bswap128.
Czytaj dalejArchitektury współczesnych mikroprocesorów powszechnie używają dwóch różnych metod i konwencji przechowywania danych w pamięci, zwane “kolejnością bajtów” (byte order). Niektóre komputery umieszczają najbardziej znaczący bajt w słowie jako pierwszy (big-endian), a inne jako ostatni (little-endian). Przez większość czasu, kolejność bajtów może być ignorowana, programista nie musi się martwić o to, jaki format jest używany, ale w niektórych sytuacjach staje się to ważne. Kiedy implementujemy binarny format pliku, bibliotekę sieciową lub protokół, lub po prostu przesyłamy dane binarne miedzy innymi komputerami, musimy wziąć pod uwagę kwestie związane z uporządkowaniem bajtów.
Czytaj dalejHardlinki, inaczej łącza stałe lub dowiązania twarde są alternatywnymi nazwami dla pliku, referencjami wskazującymi istniejący wcześniej obiekt. Niestety nie istnieją żadne metody pozwalające określić, które nazwa lub referencją jest oryginalna, a która dodana później. Wszystkie nazwy/referencje wskazują ten sam blok danych. Dosyć dawno temu starałem się znaleźć prosty sposób na wykrywanie łączy stałych oraz ich enumeracje, aby szybko sprawdzić, czy dany plik nie jest dowiązaniem do już przetworzonych wcześniej danych. Potrzeby można byłoby zawrzeć w dwóch prostych funkcjach.
Czytaj dalejJakiś czas temu pracowałem nad kilkoma agentami/serwisami w bashu - prostymi (choć może nie tak bardzo) skryptami shellowymi, przetwarzającymi sukcesywnie dane oraz wykonywujące pewne określone operacje w miarę napływania do nich zadań. Chcąc usprawnić i przyspieszyć processing, eksperymentowałem i szukałem bardzo prostego sposobu na zrównoleglenie kilku procesów, dokonywujących podobne zadania… Bash sam w sobie nie posiada wielowątkowości, ale za to ma inne narzędzia i metody, które mogą nam w jakiś sposób pomoc i ułatwić tworzenie wielowątkowych oraz wieloprocesorowych skryptów lub aplikacji.
Czytaj dalejTrochę dawno to już było, ale do tej pory nie miałem okazji poruszenia publicznie tego tematu. Tak się składa, że ponad 1,5 roku temu, w czerwcu 2011 roku, na Wojskowej Akademii Technicznej po ciężkiej 3 tygodniowej pracy redagowania i twórczego tworzenia obroniłem tytuł magistra. Gdybym nie był na studiach cywilnych byłbym teraz oficerem - podporucznik magister inżynier ;) Temat mojej pracy brzmiał: “Konstrukcja i integracja mechanizmu monitorów statystycznych na potrzeby symulacji w języku C++”.
Czytaj dalejKolejna notatka z serii MPU, opisująca kilka ciekawych konstrukcji zawartych w mistycznym MetaPrograming-Unit. Tym razem o klasach cech opisujących typy kontenerów zawartych w STL. Każdy programista C++ zaznajomiony jest z klasami cech (traits) i ich wielkim potencjałem. Dla tych wszystkich, którzy nie do końca łapią temat, dwa zdania wprowadzające. Klasy cech w C++ są specyficznym typem klas szablonów dostarczających w czasie kompilacji informacji o innych typach bądź strukturach danych. Wykorzystywane są głownie w programowaniu generycznym, przez inne obiekty lub algorytmy do określenia polityki działania lub szczegółów implementacji i realizacji.
Czytaj dalej