Maciej Aniserowicz's Blog, page 35
September 17, 2018
REWOLUCYJNY (dla mnie) sposób PLANOWANIA CZASU [devstyle vlog #188]
The post REWOLUCYJNY (dla mnie) sposób PLANOWANIA CZASU [devstyle vlog #188] appeared first on devstyle.pl.
September 16, 2018
Budowanie blockchain w 15 minut
Co to jest technologia blockchain? To pytanie pojawia się coraz częściej w środowisku programistów. Jestem przekonany, że w niedalekiej przyszłości każdy ze środowiska IT zetknie się z tą technologią. Warto więc znać przynajmniej jej podstawy teoretyczne i budowę.
W tym artykule chciałbym przedstawić prostą implementację blockchain w języku C#. Postaram się pokazać, że sama technologia nie jest skomplikowana. Można ją zaimplementować w bardzo prosty sposób w kilkanaście minut, używając kilkudziesięciu linii kodu.
Wprowadzenie
Zastosowanie tej technologii może być skomplikowane, ale sam blockchain nie jest tego powodem. Komplikacje pojawiają się na poziomie bazującego na nim protokołu. Mam tu na myśli różnego rodzaju algorytmy kryptograficzne, metody uzyskiwania konsensusu, sposoby gratyfikacji za utrzymanie sieci, metody tworzenia transakcji, budowę węzłów sieci i ich komunikację między sobą oraz wiele innych elementów składowych kompletnego systemu. Prostotę samej technologii postaram się przedstawić na prostym przykładzie, ponieważ preferuję naukę poprzez wykonywanie, w myśl teorii:
To, co usłyszysz, zapomnisz; to, co zobaczysz, zapamiętasz; to, co zrobisz, zrozumiesz
T. Harv Eker (“Bogaty albo biedny. Po prostu różni mentalnie“)
Teoria
Zanim przejdziemy do implementacji – krótki wstęp teoretyczny. :]
Blockchain
Blockchain, jak sama nazwa wskazuje, to łańcuch bloków, które połączone są między sobą za pomocą kryptografii. W każdym bloku zapisywane są różnego rodzaju dane. Mogą to być np. dane dotyczące transakcji finansowych (obecnie najbardziej popularne), ale ta technologia bardzo szybko się rozwija i mamy już projekty zapisujące inne informacje, choćby dane medyczne, osobowe czy własność intelektualną.
Hasz (hash)
Zanim przejdziemy do implementacji, warto zapoznać się jeszcze z pojęciem hasza. W prostych słowach jest to pewien podpis cyfrowy pakietu danych. Powstaje za pomocą odpowiedniej funkcji (skrótu/haszującej), w której zaimplementowany jest specjalny algorytm. Funkcja ta dla tego samego pakietu danych wejściowych zwraca taki sam wynik – hasz.
Konstrukcja blockchain
W najprostszej wersji minimalistycznej blockchain jest złożony z listy bloków, z których każdy składa się z:
hasza bloku poprzedniego,
listy transakcji,
hasza bloku aktualnego.

Blockchain – prosty diagram
Implementacja
Na początek przygotowałem swoją funkcję haszującą, która bazuje na algorytmie SHA256:
public static string GetSha256Hash(object obj)
{
var sha256 = new SHA256Managed();
var hashBuilder = new StringBuilder();
// zamiana obiektu na tablicę bajtów
byte[] bytes = ObjectToByteArray(obj);
// obliczanie hasza
byte[] hash = sha256.ComputeHash(bytes);
// konwersja tablicy bajtów na łańcuch znaków hexadecymalnych
foreach (byte x in hash)
hashBuilder.Append($"{x:x2}");
return hashBuilder.ToString();
}
Żeby zobrazować, czym jest hasz, utworzyłem dwa obiekty:
string[] test1 = { "a", "b", "c" };
string[] test2 = { "a", "b", "c" };
i wypisałem na konsolę ich hasze za pomocą przedstawionej wcześniej funkcji haszującej:
Console.WriteLine($"Hash 1: {Helper.GetSha256Hash(test1) }");
Console.WriteLine($"Hash 2: {Helper.GetSha256Hash(test2) }");
Dało to wynik:
Hash 1: 3b5777b0a5baf0ef260f46e3228f6cc033d7daecd1ba5240c1c96f40ea07d08d
Hash 2: 3b5777b0a5baf0ef260f46e3228f6cc033d7daecd1ba5240c1c96f40ea07d08d
Następnie zmieniłem wartość jednego z obiektów – dodałem do tablicy dodatkowy element:
string[] test1 = { "a", "b", "c" };
string[] test2 = { "a", "b", "c", "d" };
co dało wynik:
Hash 1: 3b5777b0a5baf0ef260f46e3228f6cc033d7daecd1ba5240c1c96f40ea07d08d
Hash 2: 5b0ec165e91dd27eaf5ae4c59d0ed41c38a4b496073eef0825e5972e4e4ff427
Jak widać, gdy dane mają stałą wartość, hasz jest zawsze taki sam. Jeśli natomiast dane się zmienią, to hasz również będzie inny. Wystarczy zmiana jednego bajtu, by hasz miał zupełnie inną wartość.
Pora przejść do sedna wpisu i zbudować w końcu blockchain. :) Będziemy do tego potrzebowali klasy transakcji:
[Serializable]
public class Transaction
{
public double Amount { get; set; }
public string From { get; set; }
public string To { get; set; }
}
Właściwości klasy transakcji nie mają większego znaczenia – może tam się znaleźć cokolwiek w zależności od tego, co w danym blockchainie będziemy zapisywać. W tym przykładzie zapisujemy transakcje transferu wartości – mamy nadawcę, odbiorcę i ilość, jak w najprostszym scenariuszu transferu środków finansowych. W innych przypadkach struktura klasy mogłaby wyglądać zupełnie inaczej.
Następnie przygotujmy klasę bloku:
[Serializable]
public class Block
{
public string Hash { get; set; }
public string PreviousHash { get; set; }
public List TransactionList { get; set; }
}
Na koniec utwórzmy klasę Blockchain:
public class Blockchain
{
public List BlockList { get; set; }
public Block CurrentBlock { get; set; }
}
Można powiedzieć, że to tylko klasa pomocnicza, bo nie jest ona konieczna.
Wykorzystanie utworzonych klas:
Blockchain blockchain1 = new Blockchain();
blockchain1.AddTransaction(5, "Jan", "Michał");
blockchain1.AddTransaction(2.1, "Grzegorz", "Kamil");
blockchain1.AddTransaction(1.23, "Paweł", "Jakub");
blockchain1.SaveBlock();
Console.WriteLine(blockchain1.CurrentBlock.PreviousHash);
blockchain1.SaveBlock();
Console.WriteLine(blockchain1.CurrentBlock.PreviousHash);
Tworzę obiekt blockchain, do którego dodaję transakcje (dodawane są one do aktualnego bloku). Następnie zapisuję transakcję, co wiąże się z dodaniem aktualnego bloku do łańcucha i utworzeniem nowego, pustego bloku. Wynikiem działania takiego programu będzie wypisanie dwóch haszów poszczególnych bloków w łańcuchu:
3021721be0112ccb3895ffa0372ba1e901db7bed68e89dd6c241cc76e4e8c847
9e9f9dbfab7c1b9efb0e1a645f805536ea81249d8926b714ee5805be737a6e5d
Jedną z głównych cech blockchainu, jaką możemy tutaj zaobserwować, jest jego niezmienialność. Wystarczy, że zmienię jakąkolwiek informację w którejkolwiek transakcji w którymś z bloków, a wszystkie hasze się zaktualizują. Przykład:
zmieniam:
blockchain1.AddTransaction(5, "Jan", "Michał");
na:
blockchain1.AddTransaction(4, "Jan", "Michał");
Wynik działania programu po tej zmianie będzie następujący:
ed71792dc315cecf92b4d6f0459220c94846fcbc224f726b7133c7579e92563f
f95020f748251092b8747681329eefc52a769b69d8581f8aa8efb9274fe45fd4
Modyfikacja jakiejkolwiek transakcji w łańcuchu powoduje zmianę haszów w całym łańcuchu od bloku, w którym modyfikacja transakcji nastąpiła. Jest to więc metoda na zachowanie niezmienności, ponieważ jakiekolwiek zmiany w łańcuchu spowodują niezgodność haszów.
Kompletny kod źródłowy jest dostępny na GitHubie:
https://github.com/plipowczan/MySimpleBlockchain.
Podsumowanie
Cała idea wykorzystania technologii blockchain polega na utrzymaniu niezmienności danych i ich bezpieczeństwie. Na podstawie powyższego przykładu implementacji jesteśmy w stanie zaobserwować, że da się to osiągnąć. Mechanizmy uzyskania niezmienności i bezpieczeństwa są zapewnione przez odpowiednie protokoły. Budowę prostego systemu opartego na takim protokole przedstawię w kolejnym wpisie.
Pytania? Sugestie? Zostaw komentarz!
The post Budowanie blockchain w 15 minut appeared first on devstyle.pl.
September 14, 2018
Produktywność: SHUTDOWN SEQUENCE [devstyle vlog #187]
The post Produktywność: SHUTDOWN SEQUENCE [devstyle vlog #187] appeared first on devstyle.pl.
September 13, 2018
PRODUKTYWNOŚĆ, czyli Kamienie, Kamyki i Piasek [devstyle vlog #186]
The post PRODUKTYWNOŚĆ, czyli Kamienie, Kamyki i Piasek [devstyle vlog #186] appeared first on devstyle.pl.
September 12, 2018
KRZYWE e-zwierciadło [devstyle vlog #185]
The post KRZYWE e-zwierciadło [devstyle vlog #185] appeared first on devstyle.pl.
Super promocja książki “Zawód: Programista” na Dzień Programisty!
13 września to wielkie Święto: Dzień Programisty! Wszystkiego najlepszego! A dodatkowo mija właśnie ROK od samodzielnego wydania przeze mnie książki “Zawód: Programista“.
Mogę śmiało powiedzieć, że ten kROK odmienił moje życie, dał dużo swobody i – co najważniejsze! – MEGA wielkie pokłady radości i satysfakcji.
Satysfakcja jest w tym wszystkim chyba najważniejsza. Bo jakże pięknie czuję się, dostając takie wiadomości!
September 11, 2018
Wednewsday #23 – programistyczne nowinki
W tym tygodniu nagłówki newsów okupuje Python. Od dłuższego czasu piął się w rankingach popularności ale po wejściu na pudło w TIOBE Index zrobił się szał. Renesans zaliczają także języki niskopoziomowe C, C++. Tym breaking news zapraszam na 23 wydanie programistycznych nowinek.
W tle zapraszam do posłuchania moich przemyśleń skierowanych do początkujących prelegentów i organizatorów konferencji.
Google Dataset Search – beta wersja wyszukiwarki zbiorów danych
Open .git global scan – Około 400k stron zawiera w swoim katalogu dostępny do odczytu folder .git. Jest to potencjalna luka.
This Week’s Awesome Stories From Around the Web (Through September 8) – 5 artykułów z różnych dziedzin wartych poczytania w tym tygodniu. Bardzo fajne zestawienie.
Jak dwóch naszych rodaków uparło się, by odblokować BIOS laptopa
Python-Nubia – Facebook udostępnił swój lekki framework do tworzenia interaktywnych narzędzi konsolowych w Pythonie.
When Bayes, Ockham, and Shannon come together to define machine learning – Statystyka + Teoria informacji + Filozofia = Machine Learning
Notes to myself on software engineering – lista wypunktowanych porad dla każdego programisty.
Introducing Azure DevOps – DevOps, DevOps everywhere! Microsoft wypuścił nowe usługi wspomagające zarządzanie cyklem życia produktu.
A List of Static Site Generators
MS Paint IDE – Po paru minutach nadal nie wiem jak to skomentować :)
Google Photos Library API – Google udostępnił API do usługi Photos. Możliwe jest wyszukiwanie obrazów czy katalogowanie. Spodziewajmy się nowych integracji i apek :)
Java’s new Z Garbage Collector (ZGC) is very exciting – dlaczego nowy śmieciarz dla Javy jest taki fajny. Opis funkcjonalności ZeroGarbageCollector.
Quantum Computing for Computer Scientists – tutorial programowania i rozwiązywania problemów przy użyciu obliczeń kwantowych (88 minuty video).
Zapraszam również do śledzenia audycji podcastowej, w której prezentuję najnowsze wiadomości, ciekawostki, wpadki oraz wydarzenia ze świata IT:
http://devsession.pl/podkast/
The post Wednewsday #23 – programistyczne nowinki appeared first on devstyle.pl.
WADY wstawania wcześnie RANO [devstyle vlog #184]
The post WADY wstawania wcześnie RANO [devstyle vlog #184] appeared first on devstyle.pl.
September 10, 2018
Białostocka Grupa Azure #05: A Little Party Never Killed Nobody
Dzyń, dzyń!!!!! Jak minął pierwszy tydzień szkoły? Studenty przygotowane na kampanię wrześniową? A może Wam się upiekło i łapiecie ostatnie promienie letniego słońca przed powrotem na uczelnie i pisanie inżynierki? Przyznawać się, kto jeszcze jej nie zaczął?
No już już, spokojnie. Więcej Was nie będę dręczyła. Mam lepszy pomysł. Co Wy na to, aby zabrać Was w niezwykłą podróż? Gotowi? A więc geronimo!!
Sponsorem tej wycieczki jest 5. spotkanie Microsoft Azure User Group w Białymstoku. Wybierając się na nie, spotkała mnie mała niespodzianka. Święcie przekonana, że jak do tej pory widzimy się w Hacklagu, w ostatniej chwili zauważyłam, że lokalizacja uległa zmianie. A więc, szybka poprawka w Google Maps i jazda do Wielkiego Gatsbiego.
A teraz quiz muzyczno-filmowy. Czy ktoś wie, z jakiego filmu pochodzi tytuł dzisiejszego posta?
Konkurs!
Każdy, kto poprawnie odpowie na to pytanie w komentarzu oraz napiszą krótką recenzję wydarzenia programistycznego na którym ostatnio był, dostanie najlepszą na świecie zaślepka do kamery firmy devstyle enterprise :D.
Nawet FBI nie może jej złamać, sprawdzone info. Ale wracając do tematu.
Uff, zdążyłam. Punkt 18 byłam gotowa do pochłaniania wiedzy przygotowanej przez naszych miłych programistycznych dżentelmenów. Tego wieczoru gwiazdami mieli być nasi dobrzy znajomi, których już nie raz mogliśmy spotkać na białostockiej scenie. Przewodniczący grupy Rafał Hryniewski przywitał wszystkich przybyłych oraz poinformował, że najbliższe spotkania będą się odbywały w tym lokalu. Dla mnie bomba. Po tym wstępie oddał głos dla pierwszego prelegenta.
Azure Search – Zaawansowana wyszukiwarka w kilku krokach.
Ladies and gentlemen. Prosto z lokalnego podwórka, znany i lubiany Kacper Świsłowski z firmy Elastic Cloud Solutions. Można go spotkać zarówno jako słuchacza oraz prelegenta na grupie Azure i .Net. Zdolny i obrotny chłopak. Na tym spotkaniu postawił sobie nie lada zadanie. Otóż chciał pokazać przybyłym jak w kilku krokach, łatwo i przyjemnie zbudować przeglądarkę za pomocą portalu Microsoft Azure, Postmana oraz biblioteki Azure Search.
Pomysł na prezentację powstał w pracy. Kacper implementując zlecone mu zadanie stwierdził, że temat jest na tyle ciekawy aby zrobić z tego prezentacjo-tutorial. Kto wie, może kiedyś i my będziemy musieli stworzyć wyszukiwarkę w swoim projekcie i będziemy mieli do tego gotową instrukcję? Dzięki Kacper.
Jeżeli chodzi o samo wystąpienie, to muszę przyznać, że każda z opcji przedstawionej na prezentacji miała swoje plusy i minusy. Jak mówi sam autor, nie ma idealnego rozwiązania. Każda z metod pasuje do różnych problemów. Osobiście najbardziej przypadła mi do gustu opcja wyszukiwania w obrazie informacji na temat uchwyconych na nim osób. Ciekawe czy nasza twarzoksiążka już z tego korzysta? Również możliwość odnajdywania podobnych słów poprzez określenie ilości znaków, które mogą być “litrówką” w szukanym przez nas haśle. Zbawienie dla dyslektyków.
Co tu dużo mówić. Dobra prezentacja, której akompaniamentu dotrzymywały płynące z głośników swingi, jak najbardziej przypadła mi do gustu. Z niecierpliwością będę czekała i śledziła kolejne poczynania Kacpra jako prelegenta. A tymczasem nadszedł czas na krótką przerwę, w czasie której sponsor wydarzenia – firma Elastic Cloud Solutions – zaprosiła nas do zapoznania się z szeroka gamą napojów w barze. Dwa razy nie trzeba było nikomu tego powtarzać. A więc trunki w dłoń i siadamy do kolejnego wystąpienia.
Meet Gremlin – your guide through graphs in Cosmos DB
Guess who’s back, back again. Czy ktoś jeszcze nie słyszał o Rafale Hryniewskim, który podobnie jak jego poprzednik pracuje w firmie Elastic Cloud Solutions? Panowie z tyłu? A więc praca domowa dla Was: napisać rozprawkę na temat “Dlaczego Rafał Hryniewski wielkim programistą jest.”, minimum 250 słów. Dziękuję za uwagę.
Ale wracając do prezentacji. Czy ktoś z Was, tak jak ja, jest entuzjastą SQL i grafów? Jeżeli tak, to te wystąpienie przypadnie Wam do gustu, ponieważ mamy tu do czynienia z mieszanką wybuchową. Rafał już nie raz pokazał, że jest klasą samą w sobie. Świetna interakcja z publicznością, ciekawe przykłady wykorzystania oraz zabawne dema pokazują jego umiejętności nie tylko w zakresie programistycznym ale również interpersonalnym. Dzięki niemu temat, który wydawał się na początku wzięty z kosmosu (hehe), po kilku minutach stał się dla mnie czymś naturalnym. Pojawiło się również sporo pytań na które Rafał chętnie odpowiadał.
Gdy prezentacja dobiegła końca, ogłoszono krótką przerwę na konkurs. W czasie losowania można było zgarnąć jedyny i niepowtarzalny uścisk ręki prezesa grupy Azure lub bilet na najlepszą konferencję w calutkim kosmosie (koniec sucharów, obiecuję), czyli PROGRAMISTOK!!! (pst.. 28-29 września jakby ktoś zapomniał).
I niestety, nadszedł czas na pożegnanie…
We don’t need no education
Miło było kolejny raz odwiedzić grupę Azurę, zwłaszcza w nowej lokalizacji. Mam nadzieję, iż pomimo powrotu na studia czy do szkół, nie zapomnicie o niej i będziecie ją odwiedzać. W imieniu organizatorów zapraszam Cię, drogi czytelniku, na skorzystanie ze świetnych prezentacji w luźnej atmosferze ze wspaniałymi ludźmi, którzy chcą się dzielić swoją wiedzą. Na pewno Wielki Gatsby pomieści jeszcze większą ilość gości, a prelegenci dadzą z siebie jeszcze więcej na wystąpieniach.
The post Białostocka Grupa Azure #05: A Little Party Never Killed Nobody appeared first on devstyle.pl.
Polub PONIEDZIAŁEK razem ZE MNĄ [devstyle vlog #183]
The post Polub PONIEDZIAŁEK razem ZE MNĄ [devstyle vlog #183] appeared first on devstyle.pl.
Maciej Aniserowicz's Blog
- Maciej Aniserowicz's profile
- 22 followers
