okładka Programisty 39W poprzednim poście wspominałem, że fragmenty mojej książki przedpremierowo będzie można przeczytać m.in. w nadchodzącym numerze magazynu Programista - numer ten powinien pojawić się dzisiaj w Empikach i powoli docierać do prenumeratorów.

Szczerze powiem, że wybór fragmentów do udostępnienia w formie krótkich artykułów jest niełatwy - w końcu chciałoby się, żeby czytelnik Programisty niezainteresowany książką (ale zainteresowany tematyką) też coś z tego miał. Z drugiej strony, książka była pisana z myślą o tym, że jest książką - a więc pełno w niej różnych odnośników do innych rozdziałów, czy założeń że czytając Rozdział N czytelnik wie już o $ZAGADNIENIE, które było omówione w Rozdziale N-M. Ostatecznie jednak coś tam udało się wybrać i do Programisty trafiło następujące pięć fragmentów:

1. Rozdział 9. Synchronizacja (wstęp) - kilka stron o tym dlaczego synchronizacja jest potrzebna (co zostało zilustrowane przykładem) oraz wyjaśnienie czemu prosta, „manualna” synchronizacja może nie zadziałać.
2. Rozdział 9.3. Muteksy i sekcje krytyczne - podrozdział o muteksach, jak zresztą tytuł wskazuje; wspominam również o obiektach wewnętrznie synchronizowanych (i wadach/zaletach tego rozwiązania).
3. Rozdział 5.9. Typy stałoprzecinkowe - krótki podrozdział o typach stałoprzecinkowych, wraz z przykładową, częściową implementacją; na końcu jest kilka ćwiczeń z książki, które dotyczą tego fragmentu.
4. Rozdział 1.2. Przekierowania - fragment pierwszego rozdziału książki, o tym jak korzystać z konsoli i przekierowań; większość podrozdziału to ramki „Jak rozwiązywane są przekierowania [VERBOSE]” oraz „Dwa przekierowania do jednego pliku [BEYOND]” (o ramkach [VERBOSE] i [BEYOND] wspominałem już w poprzednim poście).
5. Rozdział 14.4. Pamięć współdzielona - ostatni podrozdział rozdziału o komunikacji międzyprocesowej, traktujący o pamięci współdzielonej; wspominam tam również o tym jak sprawdzić jakie sekcje pamięci współdzielonej istnieją w systemie i jakich uprawnień wymaga dostęp do nich.

Jak można zauważyć na miniaturcę powyżej, okładka jest również „szyta na miarę” - chciałbym bardzo podziękować Sebastianowi Rosikowi za jej przygotowanie - dzięki! (dodam, że okładka „Zrozumieć Programowanie” jest również jego autorstwa. Podziękowania również się należą redakcji Programisty za objęcie patronatu i pomysł z customową okładką :)

Oprócz powyższych fragmentów do Programisty trafił również, w ramach Strefy CTF, krótki write-up mojego autorstwa o przygotowanym przeze mnie na potrzeby CONFidence CTF 2015 zadaniu RE 100 - Turbo CrackMe.



Samo zadanie można ściągnąć klikając tutaj; jego celem jest odnalezienie hasła, które sprawi, że smok (patrz screenshot) znowu stanie się zielony. Jako ciekawostkę dodam, że całe zadanie jest w trybie tekstowym (łącznie z logo DS ;>) i może wymagać emulatora pewnego starego systemu do poprawnego działania.

Oczywiście w Programiście jest jeszcze sporo innego ciekawego materiału - pozwolę sobie zacytować całkiem dobry opis numeru podesłany mi przez redakcję:

W najnowszym wydaniu magazynu Programista jako pierwsi prezentujemy fragmenty książki Gynvaela Coldwinda: “Zrozumieć programowanie” [ciach - o tym i tak jest cały ten post //gyn].

Równie “internalsową” propozycją na ten miesiąc jest artykuł “Kod Schrödingera” w którym Maciej Czekaj opowiada o możliwych efektach ubocznych programowania w języku C. Paradoksalnie, prosty i teoretycznie dosyć niskopoziomowy język w praktyce opiera się na abstrakcyjnej maszynie, która nie zawsze realizuje program w sposób intuicyjny z punktu widzenia programistów wysokopoziomowych.

Wejdziemy również na grunt mocno naukowy. Juliusz Stasiewicz, specjalista z dziedziny metod numerycznych i cyfrowego przetwarzania sygnałów wystosował swego rodzaju odpowiedź na czerwcowy artykuł Wojciecha Sury zatytułowany “Symfonia kodu”. Artykuł Wojciecha opisywał prosty algorytm rozpoznawania dźwięków na nagraniu opracowany przez programistę-amatora muzyki. Na łamach najnowszego wydania “Programisty” prezentujemy artykuł “Symfonia problemów”, który wyjaśnia jak profesjonalnie rozpoznawać dźwięk oraz jakie problemy są z tym związane. Lekkie rozgrzanie umysłu zapewni odrobina obecnej tam matematyki.

Oprócz tego nie zabraknie również tematu rzeka, czyli rozważań na temat bezpieczeństwa przetwarzania XML autorstwa Michała Bentkowskiego, felietonu Grzegorza Kokota, artykułu z cyklu prawniczego, czy Strefy CTF. A to wciąż nie wszystko co mamy dla Was w najnowszym wydaniu Programisty, które dostępne jest w prenumeracie i w Empikach.

I póki co tyle. Książka przechodzi właśnie ostatnią korektę językową (już bez mojego udziału - co oznacza, że czas nabijać znowu rangę w CS:GO ;>), a niedługo potem leci do druku. Wkrótce powinien zacząć się preorder - bardzo prawdopodobna data: 1 października. W okolicach początku preorderu udostępnimy z wydawcą również fragmenty książki (inne niż te, które trafiły do Programisty) - prawdopodobnie będzie to dłuższy fragment (lub fragmenty) książki + przedmowa/wstęp + oficjalny spis treści (btw, ostatecznie po składzie wyszło trochę ponad 620 stron). Niezależnie od tego prawdopodobnie osobno zostaną opublikowane również krótkie, 2-4 stronicowe „artykuły” - w obu wypadkach dam o tym znać na blogu.

Comments:

2015-09-21 10:11:02 = Radom
{
Czekam na twardą okładkę :]

Pozdrawiam
}
2015-09-21 10:14:18 = Gynvael Coldwind
{
@Radom
Jak pisałem w poprzednim poście, ostatecznie stanęło na jednym rodzaju okładki - tj. zintegrowanej ;)
Jest to coś pomiędzy miękką a twardą, tj. jest zdecydowanie grubsza niż miękka, ale bardziej elastyczna niż twarda. Jest też delikatnie większa niż blok kartek (podobnie jak jest w przypadku twardych).
Mam kilka tego typu książek na półkach i wg. mnie powinno wyjść fajnie. Jestem dobrej myśli ;)

}
2015-09-21 10:47:22 = Piter _OS
{
Książka już skończona. Ranked w CS:GO leci, a czy planowany powrót do podcastów na koniec września jest osiagalny czy trzeba będzie poczekać dłużej ? I są już jakieś plany o czym będą początkowe nowe podcasty ?
}
2015-09-21 11:39:17 = Gynvael Coldwind
{
@Piter _OS
Podcasty nadal są w planach na koniec września (przy czym odcinek o książce wrzucę jednak po pierwszym technicznym) :)

Co do pierwszego tematu - przeglądałem ile "łapek w górę" mają które komentarze pod poprzednim odcinkiem (https://www.youtube.com/watch?v=6eNb42Wc_uw) i póki co wydaje się wygrywać:
"Podcast o tym jak zmienić pomysł w projekt obiektowy [...] najlepiej na przykładzie, np. kółko i krzyżyk [...]"

Co prawda kółko i krzyżyk to bardzo mały projekt i w samej logice aplikacji trudno jest sensownie (tj. nie sztucznie) wydzielić jakieś dodatkowe klasy, ale można to zrobić z otoczką (I/O). Jeszcze myślę jak do tego podejść, ale to prawdopodobnie będzie pierwszy techniczny podcast.


}
2015-09-21 12:04:08 = hkr
{
any chance the book will be translated to english?
}
2015-09-21 12:05:49 = Gynvael Coldwind
{
@hkr
Absolutely! Though it is still in the future - I plan to have it translated and published in 2016.
}
2015-09-21 14:39:40 = Piter _OS
{
Co do podcastów myślałeś może o czymś o systemach operacyjnych ? Wspominałeś że będzie o tym nieco w książce. Ale taka większa zabawa może z jądrem linuksa ??

Jeszcze jedna sprawa czy myślałeś może o tym żeby zacząć streaming na stronie Livecoding.com ? Czy raczej filmiki tylko na YT ?
}
2015-09-21 15:05:30 = Gynvael Coldwind
{
@Piter _OS
Trochę o tym myślałem. Jest kilka tematów w okolicach jądra, które mógłbym omówić.
Natomiast ostatecznie nie znam jakoś cudownie jądra linux (tyle co przy bochspwn + kilku innych projektach było potrzebne), więc bym musiał trochę nad tym posiedzieć jeszcze.
Muszę też pomyśleć nad konkretnymi tematami - jeśli jakieś masz, to pomysły mile widziane ;)

Co do streamingu - tak, jak najbardziej jakieś streamingi zrobię. Jeszcze myślę w jakiej formie, ale prawdopodobnie będzie to coś na zasadzie 'a prostą grę w 3 godziny robię tak' ;)
Póki co mam dwa pomysły, ale będę je sobie spisywał jeszcze.
}
2015-09-21 17:34:41 = mgrzeg
{
Z przyjemnością przeczytałem fragment opublikowany w "Programiście" i oczywiście mam apetyt na więcej :) Jedna uwaga 'na gorąco': w rozdziale o pamięci współdzielonej (14.4) piszesz o obiektach sekcji i w odniesieniu do Windows piszesz wyłącznie o obiektach sekcji opartych o plik stronicowania, słowem nie wspominając o sekcjach opartych o 'normalne' pliki (zamiast INVALID_HANDLE_VALUE w pierwszym parametrze - uchwyt do pliku), które są jednak dosyć często używane i których nie znajdziemy w systemie używając acesschk z podanymi w tekście parametrami (w takiej sytuacji lepiej użyć np. Process Hacker i przejrzeć listę uchwytów typu section). Użycie MMF przy przetwarzaniu plików może znacząco poprawić wydajność takiego rozwiązania, więc chyba warto o tym wspomnieć w książce :) Nie wiem również, czy nie lepiej byłoby użyć słowa 'usługa' zamiast 'serwis' (vide przypis 12 na str. 16). Ale to już czepianie się, więc nie zwracaj na to uwagi! :)

m.g.
}
2015-09-21 21:27:21 = Gynvael Coldwind
{
@mgrzeg
Dzięki za pozytywną opinię :)

Co do plików podmapowanych w pamięci - zgoda, nie piszę o tym ani w udostępnionym fragmencie, ani w rozdziale o plikach (do którego by bardziej pasował opis tego). Szczerze, to nawet mi do głowy nie przyszło, żeby o tym napisać (no OK, chyba mam wspomniane gdzieś, że to jest możliwe, ale tyle) z uwagi na... hmm, chyba osobiste preferencje (w zasadzie nie widzę potrzeby korzystania z tego mechanizmu).
Tj. w rozdziale o plikach przedstawiam dwa podejścia - wczytanie całego pliku od razu do pamięci (bez mapowania) oraz wczytywanie bajt po bajcie (lub struktura po strukturze), co jest trochę wolniejsze, ale ze względu na buforowanie/read-ahead nie przerażająco wolne (no i ma pewne inne zalety). Hmm, podmapowane pliki w sumie są gdzieś pomiędzy oby dwoma podejściami jeśli chodzi o szybkość I guess.
No nic, wrzucę na listę "rzeczy o których trzeba wspomnieć w kolejnym wydaniu jeśli takie będzie kiedyś" - dzięki :)

Co do usługa/serwis - ah, zgoda - na szybko przetłumaczone słowo z angielskiego - my bad ;)



}
2015-09-22 12:39:08 = Nism0
{
Jeśli chodzi o podcasty, to zamierzasz na razie skupić się na randomowych odcinkach, czy raczej na kontynuacji lub rozpoczęciu nowej serii ?

Swoją drogą, jest szansa wznowienia serii asm i gamedev ?
}
2015-09-22 12:48:53 = Gynvael Coldwind
{
@Nism0
Póki co randomowych. Natomiast ostatecznie bym chciał decydować wspólnie z widzami - ale żeby tak się stało muszę zrobić pewną stronkę, która się pojawi w okolicach premiery książki.

Ad asm i gamedev - asm jak najbardziej, gamedev być może ;)
}
2015-09-25 22:38:57 = olelek
{
Dzięki za crackme!
Fajna zabawa, ale coś się pochrzaniło u mnie z czcionkami i zamiast smoka mam same znaczki:
http://imgur.com/R1J2W2y

Podziwiam Cię, że z taką znajomością różnych języków chce Ci się jeszcze coś tam pisać w Pascalu :)
Z tym crackme nasunęło mi się jedno skojarzenie - w DOS program był bogiem i mógł robić co chciał, nie to co teraz. Po kilku Twoich wpisach z RE zacząłem pisać prosty programik w C z wstawkami asm do odczytu informacji o CPU. Okazało się, że nie można odczytać jego temperatury, ponieważ do odczytu (RDMSR) rejestrów sprzętowych (IA32_THERM_STATUS) wymagane są uprawnienia OS (Kernel mode).
Tak więc kiedyś było łatwiej ;)
}
2015-10-02 09:35:42 = Kili
{
Musiałeś wrzucić program 16-bitowy? :P
Zmuszać mnie do ogrzebania DOSa.... i do tego musiałeś napisać ten program w Pascalu? Litości nie masz :P

Fragmenty niczego sobie. ;)
Zamierzasz coś więcej o ASM (no może nie tylko na IA-32) w tutorialach dodać?
}
2015-10-03 09:43:49 = Gynvael Coldwind
{
@Kili
Litość? Co to? ;D

Możliwe, że w podcastach wrócę do tematu asma ;)
}

Add a comment:

Nick:
URL (optional):
Math captcha: 8 ∗ 6 + 5 =