środa, 2 września 2015

syncfusion ebooks

Ten wpis będzie krótki, ponieważ postanowiłem podzielić się z wami radosną informacją o pewnym darmowych i całkiem interesującym źródle wiedzy. Tym źródłem jest firma www.syncfusion.com ,która za darmo, postanowiła wydawać e-booki edukacyjne na tematy technologiczne. Jak czytamy we wstępnie, firma zdaje sobie sprawę, jak ważne w świecie IT jest zawsze pozostawać na bieżąco z najnowszymi technologiami, starając się przy tym zawrzeć w swoich książkach esencję, czyli tzw. "samą śmietankę" danego tematu, więc postawiła ograniczenie, że każda książka może mieć max 100 stron.

W związku z powyższym, autor danego zagadnienia, ma 100 stron, na wprowadzenie, oraz pokazanie wszystkich najważniejszych, najczęściej używanych i najprzydatniejszych rzeczy, przy okazji zbytnio nie przynudzając, ani nie przepisując ponownie całej dokumentacji technicznej.

Jak na razie przeczytałem 2 książki z tej serii, jestem w trakcie czytania trzeciej i jak na razie mi się podoba (więcej niż typowy wpis na blogu, a mniej niż książki A.Troelsena ;-))

Link: https://www.syncfusion.com/resources/techportal/ebooks

sobota, 11 kwietnia 2015

Recenzja - "Adaptive Code via C# - Agile coding with design patterns and SOLID principles" -> Gary McLead Hall

Na tą książkę zwróciłem uwagę, dzięki pytaniu K.Cebuli na naszej grupie na portalu www.facebook.com. To był chyba grudzień 2014r. i akurat amazon.com miał promocję na tą książkę. Recenzje miała dobre, wydawcę również (Microsoft), a tytuł brzmiał zachęcająco. Kupiłem więc tą książkę w formie ebooka, załadowałem na mojego kindla i w wolnym czasie ją sobie "trawiłem".

Cóż mogę napisać o samej książce?
Pierwszy rozdział, to głównie Agile oraz szczegółowe omówienie metodologii SCRUM. Przy okazji wspomniane jest też jak ważną rolę odgrywają w "zwinnym podejściu" takie elementy jak zależności, interfejsy oraz testy jednostkowe. 

W tym rozdziale autor opisał też, dlaczego powinniśmy unikać pewnych elementów języka, takich jak m.in. extension method czy używanie słówka "new". 
Porównał to do używania korzystania z dżwigu (skyhook) oraz windy (lift). Obie mogą posłużyć do wejścia na dach budynku, jednak windy są dużo bezpieczniejsze i dużo lepiej sprawdzają się "długoterminowo".

Drugi rozdział, to szczegółowe omówienie zasad SOLID. Tutaj autorowi należą się dodatkowe podziękowania, z uwagi na bardzo dobre tłumaczenie tematu oraz wplecenie w te rozdziały wzorców projektowych. Autor wspomniał o GoF, o tym, że przez lata pewne wzorce stały się kanonem, a inne antywzorcami i... wszystko demonstruje na przykładach. Bardzo dobra robota.

Trzeci rozdział, to próba połączenia dwóch pierwszych rozdziałów na przykładzie niewielkiego zespołu oraz przykładowego zadania. Mamy tutaj rozmowy projektowe, szacowanie kosztów oraz... samo kodowanie ;-)

Napisałem po krótce, o czym jest ta książka, ale... teraz najważniejsze pytanie. Czy warto? Osobiście uważam że tak. Uważam, że ta książka jest bardzo dobra, zarówno pod względem technicznym, jak i samego sposobu jej napisania. Uważam również, że każdy szanujący się developer powinien ja przeczytać (a przynajmniej prawie cały 1 i cały drugi rozdział). Dodatkowo uważam, że książka GoF jest już na tyle stara i ciężko napisana (trudno się ją czyta), że... powinna odejść do lamusa i to właśnie "Adaptive Code via C# - Agile coding with design patterns and SOLID principles" powinna zająć jej miejsce.

czwartek, 2 kwietnia 2015

AML - Listy Sankcyjne

AML (Anti-Money Laundering), zwane potocznie przeciwdziałaniem praniu brudnych pieniędzy, ale... również i wspieraniu terroryzmu, są to działania, mające na celu wykrycie i odpowiednie zaraportowanie podejrzanych transakcji, a nast. ich zablokowanie, włącznie z zamrożeniem konta osob podejrzanych.

Wymogi stosowania AML w spółkach finansowych nakładają stosowne organy, takie jak np. KNF, Komisja Europejska czy Departament Skarbu USA.

Te podmioty, publikują m.in. listy os. podejrzanych. Na takich listach znajduja się znani dyktatorzy, organizacje terrorystyczne, ale ost., po aneksji Krymu również przedstawiciele Rosjiego parlamentu zaangażowani w wojnę na Ukrainie.

Te listy, zwane listami sankcyjnymi, publikowane są w różnych formatach, np. XML. W związku z powyższym, zrobiłem jednolity parser kilku list do postaci obiektowej, przy okazji udostępniając część kodów źródłowych na githubie, aby ułatwić innym walkę z terroryzmem.

Listy sankcyjne, które zostały ograne w aplikacji to:
  • Consolidated list of persons, groups and entities subject to EU financial sanctions
  • Specially Designated Nationals List (SDN)
  • Foreign Sanctions Evaders (FSE)
  • Palestinian Legislative Council (PLC) List 

Projekt postanowiłem umieścić na githubie, zarówno pod moim profilem (link), jak i pod egidą .Net Developers Poland. Jeżeli ktoś ma ochotę do rozwijania tego projektu, to zdecydowanie zapraszam.

Linki:

sobota, 14 marca 2015

Wroc# (wrażenia nt. konferencji)

O konferencji Wroc# dowiedziałem się na początku stycznia z dwóch mniej lub bardziej niezależnych źródeł. Najpierw, informację podał gutek na naszej grupie programistycznej na portalu facebook.com. Kilka dni później, podobne info na liście mailingowej lider wg.net Michał Grzegorzewski. W sumie to nie wiem, kto póścił info, ale stwierdziłem, ze może warto by się było tym eventem zainteresować. Zanim podjąłem odp. decyzję, to... już Michał podał info na grupie, że limit biletów, dla członków grupy już został wyczerpany.  W międzyczasie, przejrzałem listę gości... i zrobiło się grubo :D W tym momencie wiedziałem, że chce się tam znaleźć :)

Teoretycznie, pozostało czekać, i dostać bilet z "puli otwartej", jednak pomny doświadczeń, z takimi losowaniami z 2 ost. imprez, na których chciałem się pojawić, tj. devday.pl/ i 2014.confitura.pl/ w przypadku których bilety rozeszły się w mniej niż 5 min. postanowiłem... wypełnić formularz kontaktowy, który znalazłem na oficjalnej stronie konferencji. Wpisałem, tam kim jestem i... dlaczego chciałbym się znaleźć na tej konferencji i... miałem nosa. W odpowiedzi na moją wiadomość, dostałem darmowy bilet na konferencję, a... kilka dni później ruszyły oficjalne zapisy, podczas których wejściówki rozeszły się w... 3 min :)

W międzyczasie okazało się, że dzień wcześniej szykuje się "grube" spotkanie Wrocławskiej grupy .NET. Pomny, jak to wyglądało wcześniej w przypadku Krakowskiego DevDays, przyjechałem do Wrocławia dzień wcześniej. I się nie zawiodłem. Spotkanie odbyło się w knajpie na Włodkowica 21 link do www.meetup.com, na którym zjawiło się naprawdę sporo devów, odbyły się 3 prelekcje nt. CQRS, podczas którego, darmowe piwo zapewniało nam pgs-soft.com.

Spotkanie fajne, podczas którego można się było poznać, porozmawiać, czegoś nauczyć, oraz wymienić poglądy nt. różnych technologii. Ja np. dostałem odp. na jedno z nurtujących mnie pyt. nt. simpledata., jak i była okazja do rozmów o własnych przemyślaniach nt. przyszłości różnych technologii.

Właściwa konferencja zaczęła się czwartek na Hali Stulecia we Wrocławiu. Na pocz. krótka rejestracja, tj. odchaczenie na liście gości po czym... dostajemy garść suwenirów. Już na samym początku konferencji, miłym zaskoczeniem był fakt, że... każdy dostał smycz z agendą oraz dyskietką 3,5 cala z własnym imieniem/nazwą jako identyfikatorem :D Zajebisty pomysł. Patrząc na tą dyskietkę, przypomniały mi się czasy dzieciństwa, kiedy jako 12-14 letni maluch żąglowałem takimi dyskietkami w naszym Atarii 500 :D
Oczywiście gadżetów było więcej, ale tamte wymienię na koniec mojego wpisu.

Więc mam już swój identyfikator, kurtka wylądowała w szatni, to wchodzę na salę. Akurat na sali przemawiał ktoś ważny z www.objectivity.pl/. Zrobiłem sobie kawę (stoły z napojami do wyboru do koloru stały przy jednym z boków sali) i usiadłem na jakimś randomowym krzesełku. Pierwsze co się rzucało, to piękny angielski os. przemawiającej. Od razu człowiek wiedział, że ma do czynienia z jakimś "native speakerem", w dodatku z top managmenu (kto był w Anglii, ten wie, że tzw. "Cambridge English" posługuje się tylko elita). Przemówienie było o tym, że... grupa devów chciała zorganizować konferencję, ściągnąć kogoś fajnego, na pocz. miało to być coś małego, ale... w trakcie jak to organizowali to im się ta konferencja ciągle rozrastała (i koszty również), ale postanowili przyjać to "na klatę". Miło z jego/ich strony ;)

Razem z gadżetami, dostaliśmy też do wypełnienia kartkę, z sesjami i uwagami, jako "feedback", więc dostusuje się z moją opinią, do wymienionej tam skali oceny prezentacji, tj.: zielonej, żółtej, czerwonej.

Christian Heilmann - "Innovating the outer web":
Całkiem ciekawy człowiek, związany ze środowiskiem "Open Source", który przez pewien czas pracował w fundacji Mozilli, cały czas walcząc z IE8 i... pewnego dnia stwierdził, że jeżeli naprawdę chce się wyeliminować z rynku IE8 to... należy się zatrudnić w Microsofcie i... wyelimować tą przeglądarkę z rynku "od środka" ;) Tak też zrobił i obecnie zmienia Microsoft, a dokładniej ich dział webowy od środka. Temat prezentacji, natomiast dot. stron... firmowych, rządowych, ale również tych będących często za firmowymi intranetami. To też jest web, a w wielu tych miejscach obowiązkową przeglądarką jest właśnie IE. I to od nas zależy, jaki ten "inny" web będzie i ile w nim będzie innowacji. Co ważne, Christian podał linka do strony QA w MS: (making-it-easier-for-enterprise-customers-to-upgrade-to-internet-explorer-11-and-windows-10.)
Wspominał też, o nowych przeglądarkach tworzonych przez MS i ich konfigurowaniu.
Ocena: Zielono mi, czyli mi się prezentacja podobała.

Matt Elis - "Litle changes to make your app a lot faster"
Prezentacja mocno techniczna i całkiem przyjemna. Matt pokazał, różne konstrukcje języka oraz sposób ich działania "od środka". Pomijając proste rzeczy, typu "unikać" jawnych i niejawnych mapować na "object" (lepiej używać generyków lub przekazując int do "string.Format" ręcznie wykonać metodę "toString()" (kompilator domyślnie najpierw zrzutuje nam int -> object -> string), a iterując na listach i kolekcjach o ile potrafimy przewidzieć ich długość (np. stosując foreach) to warto jawnie zadeklarować ich wielkość w kontruktorze (fajny, miły bajer), to... uderzył też w nowości języka C# 3.0, czyli... IEnumerable i LINQ. Buuu. Ja lubię linq i IEnumerable. W sumie domyślałem się, że to może działać wolniej niż typowa pętla for, a teraz już wiem dlaczego :) Jak coś ma być szybkie, to omijamy linq, IEnumerable i... klepiemy własne pętle for, niczym w C++ :/
Ocena: Prezentacja godna obejrzenia przez każdego programistę, czyli Zielono

Mark Seemann - "Type-Driven Development"
Sesja o F#, typach, i sposobie rozwiązywania problemów. Mark zrobił krótki wstęp o językach programowania, później przedstawił problem biznesowy, oraz pokazał swój sposób rozwiązania tego problemu w F#. Nie znam się na F#, ale sposób mówienia był lekko "senny", a kody które pokazywał Mark z tylnych krzeseł słabo widoczne (siedziałem w ost. rzędzie). Mark próbował "kalibrować" wielkość kodu, ale nie do końca mu to wychodziło i w konsekwencji moim głównym moim zadaniem podczas tej prelekcji było "jak by tu nie zasnąć". Zapewne problem przedstawiony przez Marka był fajny, dodatkowo na plus, że w swojej prezentacji poruszył realne zagadnienia i realne rozwiązania, jednak... sposób mówienia, oraz sposób prezentowania tej prezentacji nie do końca przypadł mi do gustu.
Ocena: żółto, (nie czerwono, bo jednak realne problemy, nie zielono, bo gdyby krzesełka były wygodniejsze, to bym tam usnął)

Lunch: Obiadek, obiadek. Aby być fair, to trzeba przyznać, że po każdej prezentacji była krótka przerwa na kawę i przekąski, które były smaczne i których było pod dostatkiem (cały czas przynoszone były nowe). Do tego, po sesji Marka była sesja obiadowa, a przed panelem dyskusyjnym piwo/wino/drinki (ale o tym później).
Ocena: zieleń ;)

Dan North - "O, Programmer"
Dan w swojej prezentacji opisywał zmieniające się role i wymagania, jakie stały przed programistami na przestrzeni lat, oraz jak to wygląda obecnie. Na początku kilka fajnych, śmiesznych obrazków (np. Pair programming, ludzi wspólnie oglądających "karty perforowane" itp. ;)). Później przeszedł do czasów współczesnych. Mi ta sesja bardzo przypominała materiał zamieszczony w 2 książkach nt. etyki pracy programistów, tj. pragmatyczny programista oraz mistrz czystego kodu-kodeks postepowania profesjonalnych programistow, za to, dla kilku chłopaków, którzy siedzieli obok mnie, to było "WOW".
Ocena: zielono (sesja, jak najbardziej na plus)

Maurice De Beijer - "What is new in ASP.NET vNext?"
Sesja bardzo ważna i moim zdaniem bardzo przydatna. Maurice pokazał w całkiem fajny i przyjemny sposób, nowości związane z nowym asp.net i nie będę ukrywał, wygląda to obiecująco. Wprawdzie jest jeszcze do dopracowania kwestia wydajności tego "mikrokompilowania", ale i tak chłopaki z MS wykonali kawał dobrej roboty, na którą wielu czekało. Tutaj jest jeszcze jedna uwaga, do prowadzącego: mógłby popracować nad swoim angielskim, oraz swoim akcentem, ponieważ z os. występujących na scenie, najtrudniej było go zrozumieć (z os. "z po za sceny" brylował jeden z uczestników, próbujący zadawać pytania, ale za cholere nie potrafiliśmy go zrozumieć, ani ja, ani chłopaki, którzy siedzieli obok. Widocznie organizatorzy też nie umieli go zrozumieć, bo zaraz po tamtej sesji, przenieśli "zadawanie pytań" na twittera ;)).
Ocena: zieleń (fajna i potrzebna prezentacja, tylko niech prelegent popracuje jeszcze nad akcentem ;)).

Chris Klug - "Decomposing AngularJS"
Temat brzmiał mocno pro-technicznie w Angularze. Uważam, takie sesje za potrzebe, ponieważ AngularJS robi się coraz popularniejszy, jednak z uwagi na mój brak komercyjnego doświadczenia z tą biblioteką (rok temu robiłem sobie tutoriale, z których już nic nie pamiętam), to tą sesję postanowiłem sobie odpuścić, bo wiedziałem, że i tak za dużo z niej nie zrozumię. Pochodziłem sobie po sali, pograłem na automatach, które przyniesiono do przedsionka (był m.in. "Tekken2", choć z tamtych czasów osobiście bardziej lubiłem serię "Virtual Fighter" ;)). Później wróciłem na końcówkę sesji i wygladało to "pro", czyli... mój nos mnie nie zawiódł. Pewnie i tak nie wiele bym z tej prezentacji zrozumiał, ale jak ktoś na codzień siedzi w Angularze to pewnie był zachwycony.
Ocena: brak oceny -> niech się wypowie ktoś, kto na co dzień siedzi w AngularJS.

Tutaj miała byc ost. sesja, z twórcą biblioteki Simple.Data, czyli Markiem Rendle, na którą mocno ostrzyłem sobie zęby, jednak Mark zachorował i w ost. chwili organizatorzy zamiast jego sesji zorganizowali panel dyskusyjny z prelegentami. Zanim to jednak nast. , na salę wyjechały kegi z "firmowymi browarami" serwowane w szklance z logo konferencji, które... organizatorzy postanowili podarować uczestnikom w ramach prezentu. I mając browara w dłoni zasiadłem do słuchania panelu dyskusyjnego. Atmosfera była fajna, jednak z uwagi na kwestie osobiste, nie wytrzymałem do końca i zwinąłem się z konferencji. Sam panel obejrzę sobie w przyszłości na youtube, a najbardziej żałuję, że jednak nie dane mi było być na afterparty. Cóż, takie życie :/

Ogólnie, jeżeli chodzi o prezentacje, to było bardzo dobrze i nawet nieco bardziej technicznie niż na DevDay. Tylko jedna "żółta kartka" i żadnej "czerwonej" to bardzo dobry wynik. W dodatku było mocno techczninie, zarówno na konferencji, jak i przed nią, więc uważam, że z całą pewnością czegoś się tutaj nauczyłem i coś z tej konferencji wyniosłem (nie licząc gadżetów ;)).

A skoro mowa o gadżetach, to, pomijając smaczne jedzenie (czy wspomninałem już o mnóstwie przekąsek dostęnych między prezentacjami?? ;)), to dostaliśmy:
- dyskietka 3.5 cala jako identyfikator (+ agenda i smycz)
- drewnianą łamigłówkę w firmowym woreczku o taką, jak ta :)
- koszulkę z logo konferencji
- szklankę do piwa/ lampkę do wina z logo konferencji (czy wspominałem wam już, że razem z moim bratem od ok 12 lat kolekcjonujemy szklanki i kufle do piwa z całego świata i obecnie samych kufli do piwa mamy ok 70 rodzajow, a szklanek to już będzie spokojnie ponad 220? :))
- ładnie wyglądający notes thinkme.pl/notesy.html - i tutaj ciekawostka. Akurat z tego gadżetu na pocz. cieszyłem się "najmniej", jednak jakie to życie potrafi być przewrotne. Jadąc dzisiaj do Warszawy PolskimBusem okazało się, że... przedmną stoi matka z 15 dziewczyną i... kierowca nie chciał jej wpuścić do autokaru mimo wykupionego biletu, tłumacząc się, że do 16 roku życia potrzebuje mieć pisemną zgodę rodziców (dziewczyna miała jechać sama, bez matki). I ja wtedy wyjmuję z plecaka notes #wrocsharp, oraz konferencyjny długopis, wspólnie wyrywamy kartkę z notatnika, mama skrobie zgodnę na kartce i dziewczyna może kontynuować podróż. Niby nic, ale jednak zawsze ten jeden dobry uczynek do przodu :)



Podsumowujac:
Z tego miejsca, bardzo chciałbym podziękować całemu zespołowi http://www.objectivity.pl/ za zorganizowanie tej konferencji oraz zaproszenie mnie na nią.
Uważam, że była to bardzo udana konferencja, na której występowali ciekawi prelegenci z interesującymi tematami. Organizacja eventu była na najwyższym poziomie, a geekowe akcenty znaleźć można było niemal na każdym rogu. W dodatku, konferecnję poprzedził fajny before.

I to wszystko za darmo. Czego chcieć więcej? Dla mnie bomba! Żyć nie umierać i (oby) do zobaczenia w przyszłości :)

sobota, 7 marca 2015

Simple.Data - rok później

Ponad rok temu, tj. w grudniu 2013 roku miałem okazję poznać nową bibliotekę, Simple.Data. Nawet zrobiłem nt. post na bloku w styczniu 2014 roku link. Teraz, po ponad roku komercyjnego używania tej biblioteki, mam na jej temat pewne przemyślenia, którymi chciałbym się podzielić.

Czym jest Simple.Data? Jest to jeden, z coraz popularniejszych "microORM", który łączy ze sobą zalety ORM, przy okazji nie narzucając zbyt dużo konfiguracji oraz "dodatkowych bajerów", które oferują tradycyjne ORM takie jak EF lub nHibernate.

Reklamowane zalety:
- szybkość aplikacji (szybszy dostęp do aplikacji)
- brak dodatkowej konfiguracji (biblioteka sama rozpoznaje nazwy tabel)
- mniejsza ilość kodu
- nowa, fajna składnia, wykorzystująca dynamic (np. db.highscores.FindAllByScore(2); )
- identyczna obsługa, dla wielu typów baz danych (włączając w to zarówno SQL jak i NoSQL)

Potencjalne wady:
- brak intellisense
- ewentualne problemy występuja dopiero w runtime

Tyle teorii, a teraz trochę praktyki:
- jak pokazuje prosty przykład (https://bitbucket.org/zchpit/sqlitesamples) Biblioteka Simple.Data jest ok 10 razy szybsza od EF (2500 ms vs 304 ms) jednak nadal ok 10 razy wolniejsza od klasycznego Data Reader (304 ms vs 17 ms).
- zaleta, w postaci automatycznego mapowania nazw tabel na nazwy obiektów nie zawsze się sprawdza, ponieważ często w istniejących bazach danych spotykałem się z polskimi nazwami tabel, a nazwy wszystkich zmiennych, klas, metod itp. w aplikacji wolę mieć po ang. więc... w pracy z istniejącymi rozwiązaniami i tak trzeba było wykonywać mapowanie
- inna składnia, która nie jest LINQ (fajny bajer, ale jednak wolał bym mieć również do dyspozycji również klasycznego LINQ)
- problem z aktualizacją modelu po zmianie na bazie danych, przez kogoś innego (np. administrator bazy danych)
- fajne, dla małych 1-2 os. aplikacji typu CRUD, które operują na małych bazach danych (np. 5-8 tabel)
- można zastosować dla baz, co do których mamy wątpliwości, czy zostaną obsłużone przez nHibernate lub EF.

Podsumowując, kiedy stosować, a kiedy nie stosować?


Nie stosować gdy:
- tworzymy duże rozwiązanie, przy którym będą niezależnie od siebie pracować programiści oraz BI. Brak możliwości automatycznego "update" modeli po stronie kodu, mocno utrudnia taką współpracę (choć oczywiście można się dogadać, co do używania procedur składowanych o niezmiennych parametrach).
- gdy najważniejszym parametrem jest szybkość działania aplikacji (nawet kosztem dłuższego czasu wytwarzania). W takich przypadkach lepszym rozwiązaniem będzie klasyczny Data Reader
- gdy pracujemy na istniejącej bazie danych, która w dodatku posiada polskie nazwy tabel, proc. składowanych itp. -> nieaktualne (patrz komentarz na końcu)
- gdy pracujemy na istniejącej, dużej bazie danych i spodziewamy się mnóstwa złączeń itp. W takich przypadkach jednak osobiście wolę wygenerować sobie Model automatycznie, mieć Intelii Sense oraz używać klasycznego LINQ a nie co chwila googlować jak to połączyć w nowej składni.

Kiedy stosować microORM
- gdy dostajemy do zrobienia od zera nową, stosunkowo małą aplikację typu CRUD, która ma pobrać dane z jednego źródła, przetworzyć je i zapisać gdzieś indziej np. z bazy X pobieramy naszych gości naszej super konferencji, z publicznego API pobieramy listę sankcyjną ludzi publicznie objętych zakazem wjazdu do UE, matchujemy obie listy, a wynik tego machowania zapisujemy do osobnej bazy danych.


Edit: od napisania tego posta, minął niecały tydź., ale miałem okazję bywać w kilku miejscach, więc mały update
a) O kwestie związane z aktualną bazą danych, na której mamy polskie nazwy tabel, a zmienne w aplikacji (viewModel), czyli "gdy chcemy mieć po ang. to czy musimy robić ręczne mapowanie?" zapytałem Maćka Aniserowicza (link do bloga) podczas spotkania Wrocławskiej grupy .NET i Maciek mi odpowiedział mega banalną odpowiedź (kurde, jak na to nie wpadłem, to sam nie wiem), tj.: pobierać dane z bazy za pomocą widoków, a w widokach nadawać zwracanym kolumnom ALIASY
b) Pod tym postem znalazłem komentarz Maćka Jędrzejewskiego, z ciekawości wszedłem na jego bloga i... znalazłem tam fajny "auto.mapper" o nazwie Slapper, za pomocą którego można automatycznie mapować typy "dynamic" zwracane przez Simple.Data na klasy naszego ViewModel -> link do posta na blogu Maćka

 Linki:
- Test wydajności mojego autorstwa
- Podst. solucję, którą wykorzystałem w moim teście pobrałem z bloga Tigran Gasparian
- Kody źródłowe Simple.Data na Github
- Porównanie kilku innych microSQL
- Link do bloga Maćka Jedrzejewskiego (automatyczne mapowanie obiektów do ViewModelu)

niedziela, 1 lutego 2015

Weekend z kryptografią (PGP, CryptoCat, encrypted mail storage)

Po zmianie systemów operacyjnych na komputerze prywatnym oraz na smartfonie przyszedł czas na ochronę prywatności w przypadku wysyłania/obierania wiadomości. W ten weekend pod ostrzał poszła komunikacja za pomocą maili oraz próba zabezpieczenia komunikatora, z którego korzystam najczęściej (chat na facebooku).

Najpierw mail. O ile samemu nie posiadamy możliwości postawienia własnego serwera pocztowego, to warto zajrzeć na tą listę hostingów i wybrać coś dla siebie, wg. własnych potrzeb. Celowo nie będę doradzał konkretnego hostingu, ponieważ każdy z nas jest inny i ma nieco inne potrzeby.

Kolejnym etapem, po założeniu skrzynki mailowej, jest zgranie klienta pocztowego thunderbird oraz dogranie do niego rozszerzenia enigmail. Gdy mamy już skrzynkę pocztową, na której maile będą trzymane w sposób zaszyfrowany, klienta mailowego (maili nie czytamy w przeglądarce), oraz zgrany odpowiednie rozszerzenie do obsługi podpisywania/szyfrowania, to pozostało nam jeszcze tylko wygenerować swoją parę kluczy PGP (jak to zrobić opisane jest tutaj) i skonfigurować nasz klucz z klientem enigmail.
Ja dodatkowo, dla wygody zainstalowałem sobie jeszcze KGpg, ale spokojnie można wszystko zrobić z terminala.

Mamy takie coś i.... wuala ;) Nasze maila są zdecydowanie bardziej bezpieczne niż były wcześniej. Teraz tylko pozostaje nam przekonać jak najwięcej naszych znajomych aby również domyślnie szyfrowali swoje maile za pomocą PGP (oraz zweryfikować ich klucze publiczne z fingerprintem jakimś innym kanałem, np. przez tel.) i "jesteśmy w domu" :D Jeśli NSAGCHQ, albo jacyś inni, domorośli hakerzy chcą czytać nasze maile, to niech się przynajmniej nieco wysilą ;)


Kolejny, popularnym kanałem rozmowy, po za mailami, jest chat. W moim przypadku, jest to chat na portalu facebook, który domyślnie nie jest szyfrowany, ale w sposób stosunkowo prosty, sami możemy mu to szyfrowanie zapewnić. Służy do tego darmowe rozszerzenie do przeglądarki o nazwie crypto.cat. Stosunkowo łatwo się to integruje z listą kontaktów na fb, więc jak obie strony używają cryptocata, to na fb wiadomość jest zaszyfrowana.

Na razie crypto.cat posiada pewną wadę, czyli brak przycisku "scroll down" po liście znajomych (można to zrobić tylko za pomocą myszy, która nie zawsze działa), ale jak opisuje to Ryan Hellyer ta niedogodność powinna zostać poprawiona w najbliższej przyszłości.

edit: przydatny link, dla użytkowników firefoxa -> link

sobota, 17 stycznia 2015

CyanogenMod

Ost. czasy zainteresowałem się nieco bardziej szeroko rozumianym "bezpieczeństwem w internecie". Mówiąc "szeroko rozumianym", mam również na myśli ochronę prywatności, włączając w to również ochronę przed programem PRISM. O ile w dzisiejszych czasach całkowite "zniknięcie" jest niemożliwe, o tyle zawsze można próbować chronić swoją prywatność. Szczególnie, gdy po ost. atakach terrorystycznych na gazetę Charlie Hebdo słyszy się głosy polityków chcących wprowadzić pełną inwigilację (oraz cenzurę) internetu uk-spy-agencies-need-more-powers-says-cameron.

W tym miejscu, należy wspomnieć słynny cytat Benjamina Franklina:
"Ci którzy rezygnują z Wolności w imię bezpieczeństwa, nie zasługują na żadne z nich."
Ale w takim razie jak się bronić?
Z całą pewnością, trzeba mieć świadomość, jakie dane zbierają na nasz temat amerykańskie korporacje. Jednym z najbardziej krytycznych urządzeń, jest tel. komórkowy, z zainstalowanym modułem gps oraz podłączeniem do internetu. Taki tel. posiada głośnik, mikrofon, kamerę, lokalizator gps. Dosłownie wszystko, czego potrzeba, aby śledzić oraz inwigilować daną osobę.

Na pierwszy ogień idzie wiec wymiana systemu operacyjnego. Domyślny system jaki miałem, czyli Android niestety, nie pozwalał mi na pełną kontrolę, np. nie pozwalał mi na usunięcie aplikacji do portalu facebook.com. Nie dało się odinstalować facebooka, to odinstalowałem cały system ;)

Czy instalacja jest trudna? Nie. Uważam, że jest stosunkowo prosta.

Na wiki cyanogenmod'a znaleźć odpowiedni, dla siebie model tel., a nast. wejść w link pod zakładką "Installation", np. Install_CM_for_anzu.

Proces instalowania jest opisany bardzo dobrze. O ile czasami trzeba doinstalować pewne dodatkowe biblioteki (np. adb) lub uruchomić niektóre skrypty jako root (np. sudo fastboot zamiast fastboot) o tyle jedny większy problem miałem dopiero przy punkcie 8, w którym syst. operacyjny na laptopie (Ubuntu) nie wykrywał podłączonego urządzenia, ale wtedy znalazłem inny przydatny link, dzięki któremu udało mi się sprawnie dokończyć proces instalacji.