Programista 8/2015 (39)
Programista 8/2015 (39)
Poniżej prezentujemy fragmenty książki pt. „Zrozumieć programowanie”, która już wkrótce ukaże się nakładem wydawnictwa PWN.
Bufor cykliczny to przydatna struktura danych, nieobecna niestety w standardowej bibliotece języka C++. Na szczęście pakiet Boost C++ Libraries wypełnia tę lukę, oferując łatwą w obsłudze, sprawdzoną i zgodną ze standardem implementację bufora cyklicznego w ramach komponentu Boost.CircularBuffer. Niniejszy artykuł prezentuje możliwości tej biblioteki.
O byciu nowicjuszem…
Minęło już trochę czasu, od kiedy jeden z moich kolegów zadał mi pytanie: „Dlaczego wszędzie w kodzie używamy var self = this;?”. Pamiętam, że wtedy, jeszcze jako JavaScript-nowicjusz, dumnie odpowiedziałam: „Jak to dlaczego? Przecież kontekst się zmienia!”. Teraz wiem, że wtedy sama do końca nie rozumiałam, co to tak naprawdę znaczy. Oswojenie się z mechanizmami języka JavaScript, w szczególności z pojęciami zasięgu leksykalnego (ang. lexical scope) i kontekstu (ang. context), zajęło mi trochę czasu, a jeszcze więcej potrzebowałam, żeby wyrobić sobie własną opinię o tym, czy naprawdę var self = this; jest niezbędne.
Interfejs programistyczny uniwersalnej platformy Windows dostarcza narzędzia umożliwiające tworzenie adaptywnych aplikacji na platformy desktopowe, mobilne, a także dla urządzeń wbudowanych. Ponadto SDK Windows 10 dostarcza szereg zaawansowanych funkcjonalności, takich jak chociażby rozpoznawanie pisma odręcznego, syntezacja mowy, a nawet śledzenie ludzkiej twarzy na obrazach, składających się na sekwencję wideo. W tym artykule od podstaw zaimplementujemy aplikację, której celem będzie akwizycja obrazów z kamery internetowej. Obrazy te zostaną następnie poddane analizie w celu rozpoznania i śledzenia twarzy.
czyli maszyna abstrakcyjna języka C
Język C uważany jest za niskopoziomowy i „bliski sprzętowi”. Tymczasem model języka C opiera się na abstrakcyjnej maszynie, która z dużą swobodą realizuje program, często działając wbrew potocznym intuicjom na temat kodu. Abstrakcyjna maszyna C „materializuje się” w postaci efektów ubocznych programu, przypominając tym samym słynny paradoks kota Schrödingera, który tym bardziej jest w pudełku, im bardziej tam zaglądamy.
W niniejszym artykule postaram się opisać wybrane algorytmy rozpoznawania wysokości dźwięków w nagraniach. Opowiem, w jaki sposób prawidłowo obliczyć widmo dźwięku, jak znaleźć w nim odpowiednie wzorce i jak wyznaczyć na ich podstawie ton podstawowy, a także dlaczego nie da się tego zrobić automatycznie. Zadanie jest dużo trudniejsze niż z początku mogłoby się wydawać…
Przeglądając strony różnych projektów, bardzo często spotyka się argumentację przekonującą do używania danego frameworku, podobną do stwierdzenia: „Ten framework jest fajny, ponieważ pozwala na dependency injection (wstrzykiwanie zależności)”. Celem tego artykułu jest wytłumaczenie, że wspomniany koncept, pomimo groźnie brzmiącej nazwy, jest czymś naturalnym dla programowania obiektowego. Średniozaawansowany programista może natomiast zweryfikować swoją wiedzę na ten temat.
Jaki jest nadrzędny cel programisty? Można by powiedzieć: pisanie kodu bez błędów. Jest to oczywiście zadanie niemożliwe do zrealizowania, z pomocą przychodzi nam jednak metodyka TDD, która minimalizuje ryzyko wystąpienia błędu na produkcji. Artykuł ma na celu omówienie podstaw programowania tą techniką i przedstawienie wynikających z tego korzyści.
Ionic to framework do budowania cross-platformowych aplikacji mobilnych z wykorzystaniem HTML, CSS oraz JavaScript. W niniejszym artykule chciałbym pokazać, w jaki sposób zacząć swoją przygodę z aplikacjami mobilnymi z Ionic, a także, jak w 15 minut można stworzyć własną, prostą aplikację mobilną.
Format danych XML jest uniwersalnym językiem znaczników, z którym obecnie mamy styczność praktycznie codziennie. Jest przecież podstawą takich formatów jak .docx czy .odt, opierają się na nim również SOAP, XMLRPC czy też formaty przesyłania wiadomości RSS i Atom, XMPP/Jabber, jak również metadane (Adobe XMP) w obrazkach. W tym artykule omówimy kilka najpopularniejszych problemów bezpieczeństwa, które wiążą się z przetwarzaniem plików XML.
Jednym z pierwszych naprawdę trudnych pojęć, z jakim musi spotkać się każdy programista języka C lub C++, jest wskaźnik do funkcji. Definiowanie i posługiwanie się nim stanowi na początku duży problem i jest źródłem, zresztą słusznie, sporej niechęci. Wskaźnik jest konstrukcją niebezpieczną. Źle używany może powodować bardzo trudne do wykrycia błędy. Niemniej każdy programista C++ używa wskaźnika do funkcji o wiele częściej, niż ma tego świadomość, a dobry programista C musi ich użyć, aby napisać dobry program w tym języku. Na czym polega ukryta potęga wskaźnika do funkcji?
Postawione w tytule artykułu pytanie zastanawia zapewne niejednego użytkownika Internetu. Niestety okazuje się, że w Polsce odpowiedź na nie wciąż nie jest jednoznaczna i to mimo wyrażenia w tej kwestii stanowiska przez Trybunał Sprawiedliwości (Unii Europejskiej).
W sezonie letnim odbywa się relatywnie mało turniejów, co tworzy doskonałą okazję do opisania zadań z przeszłych CTFów, w tym tych, które sami tworzyliśmy. Zadanie z niniejszego artykułu pochodzi z organizowanej w Krakowie konferencji CONFidence 2015, o której wspominaliśmy już dwukrotnie na łamach Strefy CTF. Samo zadanie, nazwane Turbo CrackMe, warte było 100 punktów i należało do kategorii RE (Reverse Engineering); wszystkie pliki zadania można znaleźć pod adresem: http://gynvael.coldwind.pl/download.php?f=re100_gyn.zip