Kim jest właściciel claimów #dajsiepoznac

Logowanie jest proste

Pisałem jak zalogować się przy pomocy fejsa, gógla, twitera (logowanie-przy-pomocy-facebook-twitter-czy-google-owin-katana-na-asp-mvc-5). Sprawa stosunkowo łatwa, gdy się już to raz zrobi i działa. Microsoft daje także kilka swoich klas, które “ułatwiają” zarządzanie takimi kontami. Ale gdy jest się ciekawym, ma się za dużo czasu, albo się nudzi, albo…. Wtedy, wtedy zaczynają się schody. Jasne użytkownik jest zalogowany, mam zapewnienie że Jarek to Jarek, mam inne rzeczy. Ale kto mówi, że ja to ja? Skąd mam wiedzieć id=019283091283091823 i id=019283091283091823 pochodzą z różnych systemów? Czy ktoś i gdzie się podpisuje: “To byłem, ja Jarząbek!”

Otóż każdy z claim jest podpisane, powinny być, u mnie są, wystarczy wziąć pierwszy który posiadamy, znaleźć ten który posiada właściciela, sparsować i voila, jest:

Sprawdzam!

Zaczynając od enuma (@3) mamy listę wspieranych loginów, ułatwienie (usztywnienie) żeby nie rzucać stringami w powietrzu. Następnie klasa odpowiedzialna za autentykację posiada metodę, która z zalogowanego użytkownika wyciąga claimy, a w nich szuka (@16) tego który posiada metkę. Metka następnie jest parsowana na wspierany typ providera (@17) i zwracana do klienta klasy.Works on my machine – not tested on production.

Po co?

Kiedy jest to przydatne? Otóż może się okazać, jest różne osoby dostaną ten sam id, ale z dwóch różnych providerów, nie chciałbym aby mogły się zalogować na to samo konto. Tyle

Miłego weekendu, u mnie pada.

Entity framework – obowiązkowa minimalna konfiguracja #dajsiepoznac

Lazy loading

Kiedy korzystamy z EF należy pamiętać o tym, aby zawsze wyłączyć leniwe ładowanie (lazy loading) w przeciwnym wypadku za każdym razem gdy będziemy sięgać po dane które leżą w innej tabeli niż ta, która została początkowo zaciągnięta z bazy danych EF zrobi to za nas. Brzmi fajnie, ale gdy pomyślicie że taka operacja może wykonać się w pętli, pomysł szybko przestaje być tak miły. N wykonań pętli N pojedynczych zapytań do bazy danych. Minusem wyłączenia lenia w EF jest to, że jeśli nie powiemy wcześniej EF że chcemy wykonać operację JOIN nie będziemy mieli dostępu do danych z innej tabeli.

Kod wygląda tak, pierwsze zapytanie bez, drugie z instrukcją JOIN

Linia (@22) wyłącza lazy loading. Linia (@12) wyciąga z bazy tylko osoby, jesli pole Properties będzie nullem. Linia (@13) wyciąga z bazy osoby oraz wykonuje operację JOIN, lista cech w osobie zostanie wypełniona pasującymi wartościami. Ostrzeżenie: ponieważ w przykładzie wywołanie jest jedno pod drugim, gdy postawi się breakpoint po obu (@14), referencja osoby zostanie zaktualizowana. Może się więc okazać, że w przypadku p1 oraz p2 pola properties będą już ustawione. Zalecam w przypadku samodzielnego sprawdzania przykładu, postawić breakpoint odpowiednio w liniach @12 oraz @13 i podejrzenie wartości property.

Logowanie

Często pojawia sie problem logowania zapytań które generuje EF, zawsze szukałem, paczek, rozwiązań czy gotowych bibliotek. Aż pewnego pięknego razu na SO znalazłem odpowiedź, która wygląda tak jak w linii 21. Najprościej jak się da, dopinam się do wewnętrznego logera oraz wypisuje na Debug.Trace informacje o zapytaniach, wyglądają one tak:

Widać tam wywołania dwóch zapytań (@12i @13) prosty oraz ten z JOIN, widoczny jest czas potrzeby na wykonywanie operacji jak i informacje o rozpoczęciu i zakończeniu połączenia. Wszystko co potrzeba aby sprawdzić czy zapytanie zostało wygenerowane w akceptowalny przez nas sposób – me gusta!

Good enough software moim zdaniem

Bogowie

Słuchając wystąpień wujka Boba czy innych wielkich mówiących o czystym kodzie, solidzie, testach, architekturze, devopsach i innych słowach kluczowych można popaść w depresję: “O żesz, mój kod nigdy taki nie będzie, lepiej nikomu go nie pokaże, sam zamknę się w piwnicy i do końca życia będę żywic się ziemniakami i robakami które będą do mnie przypełzać”.
Czy naprawdę tak jest? Czy kod który piszemy musi być jak kryształ?

Obrazek

Słuchając różnych podcastów, usłyszałem taka myśl: Gdy przychodzi do was klient i mówi, że potrzebuje zrobić dziurę w ścianie, żeby wkręcić haczyk, żeby na nim powiesić obrazek. Gdy zaczynają się tańce godowe sprzedawców którzy chcą sprzedać mu komplet wierteł, wiertarek, zaprawy murarskiej, farby, etc. Może pojawić się firmą z którą przegracie, bo zaoferują mu taśmę dwustronnie przylepną. Klient nie chce dziury w ścianie, chce obrazek na ścianie.
Podobnie z naszym wyścigiem zbrojeń, jasne że fajnie mieć super hiper wypasioną architekturę, testy które sprawdzają wszystko, continuos-wszystko i jeszcze więcej, tylko która z tych rzeczy jest tą taśmą dwustronną?

Continue reading

Tajne wpisy w app.config #dajsiepoznac

Jeśli nie chcesz mojej zguby…

Jeśli nie chcesz swojej zguby, nie wrzucaj do repozytorium sekretów swojej aplikacji. Można to osiągnąć w kilku prostych krokach, wystarczy że stworzysz w VS osobny plik z konfiguracją np. “secrets.config“, który może wyglądać tak:

Następnie zaciągniesz go w głównym web.configu w taki sposób:

W VS należy mieć go dodanego do projektu, właściwości ustawione powinny być na content i no-copy, tak samo jak w przypadku web.config. Od teraz zawartość secrets będzie wstrzykiwany do web.config podczas uruchomienia.
Jeszcze tylko w gicie warto dodać go do ignorowanych plików i można spokojnie wrzucać kod na serwer bez potrzeby pamiętania, aby zawsze odznaczyć secrets.config z listy plików.

Natomiast warto pamiętać, aby po każdej zmianie zrobić sobie backup. Tak aby nie stracić go przez przypadek.

ITAN – projekt rusza razem z #dajsiepoznac

Is There Any News

Jest to plan na internetową aplikacją do czytania kanałów RSS. Chodziło mi to po głowie już jakiś czas, kiedyś sprzedałem ten pomysł studentom, z którymi miałem okazję się współpracować. Sam pomysł wydaje się być prosty, dlatego ja zamierzam dołożyć do tego kilka dodatkowych rzeczy. Wymarzyłem sobie, że każdy użytkownik będzie mógł poza kanałami RSS obserwować także innych użytkowników. W ten sposób można poznać, jakie kanały czytają inni, które wpisy czytają dokładniej i czy  klikają po pełną treść. Podobnie marzy mi się, aby na takiej podstawie generować podsumowania dnia, miesiąca, tygodnia. Takie najgorętsze informacje. W ten sposób nie trzeba śledzić wszystkiego, a tylko te które inni czytają, udostępniają lub komentują. Jeśli wydaje Ci się to proste spójrz na dół strony, to tylko część rzeczy, które wymyśliłem do tej pory.

Jak zebrać pomysły

Jeśli macie ta przyjemność planowania czegoś, zbierania pomysłów, głębokiej rozkminy, co, gdzie, jak z kim to szczerze polecam mind mapping. Znowu product placement i znów android: ja aktualnie korzystam z SimpleMind dla androida. Wersja podstawowa ma wszystko, wersja płatna umożliwia synchronizacje w chmurze i eksport do obrazków i innego (30pln).

Dlaczego mind mapping? Dla mnie to co jest świetną sprawą to możliwość skakania po pomysłach i dopisywanie każdego kolejnego tam gdzie czuje że będzie pasować. Nie piszę ich jeden pod drugim, mogę rzucić gdzieś na ekranie, a potem powoli łączyć jeden z drugim, aż całość stanie się spójna. Lub zacząć od ogólnego planu i potem skupiać się i wymyślać do dalej, dodawać nowe zabawki.
Z mapowania korzystam także podczas robienia notatek ze spotkania, przygotowywania prezentacji, czy szkoleń i warsztatów. Takie surowe myśli mogę potem przejrzeć,poprawić i połączyć ze sobą.

Mind map ITAN

Poniżej moja wizja na to jak i co ma robić ITAN (ach, taka piękna nazwa robocza)

ITAM mapa myśli

Zadania

Co dalej? Zapewne przetłumaczę na małe zadania i przepiszę to wszystko na odpowiednie pojedyncze zadania na trello, aby móc śledzić na bieżąco swój postęp prac. Trello to świetna i darmowa (pewnie z ograniczeniami?) internetowa tablica kanbanowa. Tworzy się kolejne tablice/projekty na nich odpowiednie kolumny i zadania. Potem wystarczy tylko robić i przeciągać w trakcie postępowania prac na projektem. Tablica ITAN dostępna jest po tym adresem: https://trello.com/b/ONqNYIcH/itan W momencie pisania posta nie ma tam nic, poza zdefiniowanymi kolumnami.

Źródła

Githuba nie muszę raczej nikomu przedstawiać. Znowu idąc na skróty, źródła dostępne będą pod tym linkiem https://github.com/jstadnicki/isthereanynews

Tyle, powodzenia i do roboty.