GUI w skryptach – wstęp

GUI w skryptach?

zasadniczo jestem przeciwny takiemu pomysłowi. celem skryptów jest automatyzacja, a ich największą zaletą jest przetwarzanie potokowe – wyjście jednego skryptu staje się wejściem dla innego. dodanie GUI łamie te zasady – przede wszystkim zakłada interakcję, podczas gdy punktem wyjścia dla skryptu jest podanie parametrów ‘up front’ dające automatyzację danego zadania. 

GUI jest oczywiście niezbędny dla 1szej/2giej linii, ale również pojedyncze zadania łatwiej przeważnie wyklikać. można też wyobrazić sobie rozwiązanie ‘hybrydowe’ [takie modne słowo w dzisiejszych czasach… od paznokci poprzez samochody aż po architekturę IT] – skrypt przyjmuje parametr [np. nazwę pliq wejściowego], a kiedy go nie ma, pokazuje jakiś file-picker czy coś… nie jest to koszerne, ale koniec-końców decyduje zamawiający.

w ostatnim czasie musiałem wrócić do poważnego skryptowania [yyyeeeeey! (= ] właśnie z myślą o narzędziach dla 1szej linii. w zwizq z tym musiałem zmierzyć się z pisaniem pełnego GUI w PowerShell. w związq z tym kilka wniosków i spostrzeżeń.

GUI w PS – możliwości

w oprogramowaniu GUI jestem n00bem. ostatnie aplikacje okienkowe pisałem w Javie na studiach. do tego jeszcze moja ogólna niechęć do takiego pisania… a więc wpis cenny dla tych, którzy są na tej samej drodze. 

są trzy podstawowe metody uzyskania interfejsu dla skryptów:

  • natywne metody PS – jest ich oczywiście niezmiernie mało i są bardzo ograniczone. tak na prawdę ogranicza się do albo sczytywania z linii poleceń [nie bardzo GUI, ale jest interakcja) albo out-GridView – który jest genialną metodą do zrobienia szybkiego ‘pickera’ wartości. dodałbym też tutaj funkcję
    [System.Windows.MessageBox]::Show(MessageBody,Title,ButtonType,Image)
    która natywna dla PS nie jest, ale dobrze uzupełnia możliwości.
  • wykorzystanie obiektu DCOM wscript.shell  który daje możliwość wyświetlenia prostego okienka podobnie do .NET. osobiście mierzi mnie łączenie tak odległych technik jak PS i WScript – IMHO to błąd i zamieszczam wyłącznie żeby napisać: “nie korzystać! to jest legacy crap
  • no i oczywiście pełnoprawne GUI – albo poprzez biblioteki Forms lub WPF. 

dokładniejszy opis w przyszłości, co kiedy jak i z jakim efektem, a póki co

narzędzie dla skryptów na poważnie

zwykłe ISE przestaje wystarczać – nie tyle z powodu samego GUI, co ogólnie tego, że ostatnio piszę więcej. zacisnąłem zęby i po raz kolejny przesiedziałem nad odpaleniem VSCode. VSC niestety jest makabrycznym narzędziem, jednak jego potencjał i choćby możliwości integracyjne są na tyle ważne, że cóż.. płaczę, ale walczę. kiedy to było tylko hobby, odpuszczałem zniechęcony, ale kiedy trzeba bardziej na poważnie, musiałem się złamać

  • VSC jest uniwersalnym narzędziem developerskim. dwa kluczowe słowa: uniwersalne i developerskie – w zasadzie wskazują jego wady. uniwersalne – wszystkiego jest za dużo, 8o% opcji jest zbędne przy pisaniu w PS. po instalacji dostajemy coś, czego do pisania w PS nie da się używać – a więc czeka nas czytanie serii artykułów i wpisów na forum, które pluginy zainstalować, jak skonfigurować, które z tysięcy opcji jak ustawić żeby uzyskać jakiś sensowny efekt.
    to co kiedyś było potęgą produktów MS – integralność i trzymanie się pojedynczych standardów – załamało się wraz z “powszechną linuxyzacją”. dziś wszystko trzeba wybrać z pośród dziesiątek lub setek różnych dodatków i zaczynają się problemy że ‘ten dodatek jest szybszy a tamten ma taką opcję, a inny gryzie się z tamtym ale ma tą funkcję..’ .. i tak zaczyna się żmudna żonglerka dobrania sobie zestawu pluginów tak, aby mieć maksymalnie dużo wymaganych funkcji, równocześnie nie przeciążyć środowiska zbytecznymi śmieciami …
  • …które doprowadzą do niestabilności. podstawowe zastrzeżenie jakie mam do VSC to niestabilność, a zwłaszcza inteliSens, który regularnie przestaje działać w trakcie pisania. skrót “alt-ctrl-p, reload” już mi wszedł w krew /: [muszę poszukać pluginu, który mi doda tą operację pod jednym guzikiem q:]. o ile ISE zawieszało się w bardzo szczególnych przypadkach [np. korzystając z commadletów Exchange] o tyle VSC wywala się jak archetypiczny open source. poprawki wydawane typowo agile – czyli update za updatem i trzymanie kciuków, czy dziś będzie się wywalać się bardziej….  welcome to open source .. and agile.    

czemu warto pocierpieć? przy pewnej wielkości czy skomplikowaniu skryptu, nie mówiąc o projekcie w którym tych skryptów jest wiele, ale nawet kiedy po porostu trzeba przy nich popracować więcej – ISE to za mało. lepsze wyświetlanie składni, czy masy skrótów klawiszowych, znacznie przyspieszają pracę. integracja z repo, projekty… jest wiele dodatków, bez których byłoby więcej ręcznej pracy – czyli to co jest wadą, przy zainwestowaniu czasu, staje się podstawową przewagą.

jeśli więc czeka cię przesiadka – zarezerwuj sobie przynajmniej tydzień nieskończonej cierpliwości. będzie za to nagroda w postaci dużych możliwości i jeszcze większego potencjału. jeśli jednak nie korzystasz z repo, piszesz hobbystycznie lub okazjonalnie – ISE to wszystko co potrzebne i szkoda czasu i stresu. 

pisanie GUI

niestety VSC nie pomaga zbytnio w pisaniu GUI. może są dodatki, których jeszcze nie znalazłem, ale ogólnie – oprogramowanie GUI w edytorze nie-wizualnym to porażka. kilka elementów i robią się setki linii kodu ciężkie do ogarnięcia. ustawianie guzików zmieniając ich położenie wartościami X/Y na czuja – makabra. interfejs najlepiej się rysuje w interfejsie, dla tego najsensowniej jest mieć coś wizualnego. chciałoby się powiedzieć Visual Studio… huh, ale VS do pisania skryptów PS, to jak instalacja Exchange on prem w pełnej redundancji do wysyłania kilq emali. 

w skrócie – cały czas jestem w trakcie poszukiwania jakiegoś lekkiego designera interfejsu. te, które testowałem online były … jak to aplikacje online – siermiężne i ograniczone. 

forms vs UWP vs WPF

już sam wybór tego w czym ten interfejs ma być napisany nie jest łatwy. formsy wygrywają ilością dostępnych przykładów, UWP [chyba] umiera, WPF niby jest trendem, nowsze, nowocześniejsze i bardziej uniwersalne… ale czy przyszłościowe? no właśnie – nawet po przeczytaniu kilq artów, jeśli nie siedzi się w temacie, sam dobór biblioteki nie jest trywialny. jeśli się uczyć, chciałoby się nauczyć czegoś, co choć przez kilka lat się przyda. a to w obecnym tempie zmian niełatwe zadanie. 

osobiście póki co zdecydowałem się na formsy – stare, dobre, oklepane, dużo przykładów, a póki Microsoft nie zrezygnuje z Windows na rzecz jakiejś hybrydowej dystrybucji [chciałoby się powiedzieć Lindows, ale to już było] , zgromadzona wiedza powinna żyć przez jakiś czas.

zmiana logiki

ciekawym aspektem jest zmiana paradygmatu całej logiki działania. skrypty, poniekąd z samej definicji skryptu – przetwarzane są sekwencyjnie linia po linii. tak też logika pisania jest ‘liniowa’. GUI to z kolei ‘rozproszona logika’ pozaczepiania pod elementy interfejsu. całość nie jest już jak opowiadanie:

begin { początkiem }
process { rozwinięciem }
end { i końcem }

w zamian staje się fragmentarycznym kodem, sterowanym akcjami z kliknięć czy innych list. dla skrypciarza z krwi i kości to jest inny świat. dziwny i nie do końca logiczny. 

GUI + skrypt

na tym etapie nie mam jeszcze wyrobionych ‘best practice’ więc poszuqję. jednym z pomysłów było zadziałanie tak, jak to przez pewien czas projektował Microsoft [i co mi się bardzo podobało] – interfejs służył do zebrania informacji, wizualizacji elementów, ale ostateczna akcja to był po prostu skrypt uruchomiony z parametrami, których wartości były zebrane z interfejsu.

takie podejście jest świetne jednak w momencie kiedy pisze się duże, rozbudowane narzędzie, aplikację pozwalającą na wykonanie wielu zadań. jednak drobny tool, którego celem jest właśnie ograniczenie wyborów i dostosowanie do konkretnego zadania w konkretnym środowisq powoduje, że rozdzielenie na dwa niezależne skrypty [jeden to GUI do zebrania parametrów, drugi do wykonania akcji] tworzy dużą nadmiarowość. ponadto takie podejście choć ‘ładne’ i logiczne, utrudnia uruchomienie osobom, które tych skryptów się już i tak boją. to te niuanse – łatwiej komuś nieqmatemu przesłać jeden plik do uruchomienia, niż kilka, z opisem jak zrobić bibliotekę, czy jak przygotować środowisko. w regularnej aplikacji załatwia to instalator, przy skrypcie to już nie takie proste. 

z kolei zaletami oddzielenia GUI od logiki jest łatwiejsze panowanie nad samym wykonaniem, no i dla osób, które GUI nie potrzebują – od razu jest narzędzie. większa uniwersalność. mam nadzieję pokazać przykłady za jakiś czas.

praktyka pokaże który sposób wygra, choć widzę coraz więcej zalet rozbicia tego monolitycznego podejścia na rzecz bardziej uniwersalnej metody…

kompromis

skoro skrypty nie są do pisania GUI, przesiadka jest trudna, to czemu po prostu nie zacząć pisać np. w C#? 

proste: mimo-wszystko łatwiej nauczyć się oprogramowania samych Formsów, niż całego języka. na drugi dzień byłem w stanie narysować prosty interfejs, podpiąć logikę i zbudować jakiś działający skrypt. a to dla tego, że cała faktyczna logika, aktywna część działania była tym, co znam, w postaci commandletów. nauczenie się napisania tego w C# i poznanie całej specyfiki samego języka, zajęła by znacznie więcej czasu. choć podobny do PS – jest czyś zupełnie innym. no i podstawowa rzecz – nie zamierzam być developerem [może kiedyś, hobbystycznie] a tego rodzaju zadania są ‘szybkim wsparciem’, a nie moim codziennym zajęciem. póki co nauka C# byłaby stratą czasu. 

jak mawiają: ‘życie składa się z kompromisów’. kompromisem jest tutaj wyważenie efektu i czasu. pozostają zalety skryptu: kod nie jest kompilowany, łatwo go przeczytać a w razie potrzeby zmodyfikować ‘gdziekolwiek’, bo bez konieczności rekompilacji, commandlety dają obszerne biblioteki o olbrzymich możliwościach, a równocześnie można dopiąć kawałek GUI – i to wszystko w bardzo krótkim czasie.

może Frankenstein, ale żywy i myślący. 

eN. 

 

MFA – dodatek czy konieczność?

zgodnie z zapowiedzią kolejny fragment arcyciekawego wywiadu z d0m3lem. to ważny temat, więc warto o nim porozmawiać…

Czy MFA jest ważne?

<MG> W kontekście architektury zabezpieczeń, chciałbym rozszerzyć to pytanie. W ogóle jakie są największe teraz wyzwania, z którymi mierzycie się w całej tej działce Identity? Czy to jest brak wiedzy? Czy jednak te ograniczenia technologiczne, czy ten dług technologiczny?

<d0m3l> Ludzie nie chcą korzystać z MFA.

<MG> Czyli jednak interface białkowy to jest największe wyzwanie?

[…]

<d0m3l> Tak, generalnie kwestia jest taka: Spytaliśmy naszych kolegów z Google’a, jaką mają adopcję MFA? Okazuje się, że w momencie, kiedy jesteś goniony przez atakujących, przez hackerów to jest tak, jak bycie gonionym przez stado wilków. Jak Cię gonią wilki to nie chodzi o to, żeby prześcignąć wilki. To chodzi o to, żeby prześcignąć najwolniejszego w tłumie. Więc w momencie, kiedy masz włączony SMS jako jedyne MFA na Twoim koncie, na Twojej usłudze, gdziekolwiek, to Cię broni przed 1oo% zautomatyzowanych ataków. Czyli jak jest scriptkidi albo narzędzia tych atakujących hackerskich grup narodowych takich jak Iran, Somalia, Nigeria, jest parę takich bardzo fajnych organizacji, które próbują się dostać do Twojej poczty. Jeżeli masz SMS jako jedyne MFA na swoim koncie, jakikolwiek skrypt, oprogramowanie jakie mają, żeby Cię zbruteforce’ować, zespray’ować jest zablokowane. Jeżeli targetują Ciebie, jako osobę koszt zhackowania Ciebie rośnie z 70 centów do 70 dolarów i udaje im się to w 40% przypadków.

<nExoR> To jeszcze tylko jedna rzecz apropos tego MFA i statystyk, chciałem zaznaczyć, że strasznie kłamiecie. Bo nie potraficie zliczać MFA wymuszonego Conditional Accessem, gdzie na przykład w firmach administratorzy to np. 2% w stosunku do użytkowników. Administratorzy mają wymuszone MFA, cała reszta, czyli 98% ma Conditional Accessem. Co mówi Microsoft? 98% ludzi nie ma włączonego MFA.

<d0m3l> W tej chwili z mogę Ci powiedzieć dokładnie ile jest ludzi, którzy mają MFA. To jest 33% użytkowników w Office 365 podało jakiś sposób weryfikacji, że można ich w jakiś sposób wymusić.

<nExoR> Czyli to jest nie na podstawie włączonej opcji, że musisz mieć MFA, tylko to jest na podstawie danych, które zostały podane do kont?

<d0m3l> Tak.

<nExoR> To jak jesteśmy przy tym od razu. Czy będzie jakaś usługa, jakiś sposób zabezpieczenia, bo jest taka dziura w MFA przy onboardingu. Bo jak założysz konto, włączysz MFA, masz provisioning użytkowników to nadal do kogo pierwszego trafią Credentiale, ten sobie MFA ustawia. No i teraz wiadomo, że jest jakiś duży procent użytkowników, którzy, no wiadomo są takie cienie, ktoś nigdy nie przyszedł do pracy albo nie używa konta i one sobie wiszą. Jak zhackujesz takie konto to od razu sobie ustawiasz MFA, i jest jakby podwójnie uwierzytelniony w tej domenie i przez to jeszcze bardziej zhackowany. Czy tutaj można się spodziewać jakiegoś wyjścia naprzeciw? […]

<d0m3l> Generalnie są 2 sposoby. Sposób proceduralny i sposób technologiczny. Sposób proceduralny, pomijanie MFA ze względu na lokalizację, jedno z najgorszych zaleceń, jakie Microsoft kiedykolwiek wydał. MFA  powinno być też wymuszone w Corpnecie. MFA musisz zrobić zawsze. Jeden prompt per użytkownik, per urządzenie, per zmiana hasła, koniec kropka. To, że spiąłeś się VPNem nie powinno Cię wykluczać z wymagania MFA. To jest Zero Trust. To jest proceduralnie. Drugi to jest taki, że jest funkcjonalność w Conditional Accessie, która mówi, że żeby się zenrollować do MFA musisz spełniać wymagania. Jest takie coś, co nazywa się User Actions jako warunek w Conditional Accessie, gdzie możesz powiedzieć: “Żeby zenrollować się do MFA musisz być na urządzeniu, które uważam za zaufane” albo “Musisz być w konkretnym zakresie adresów IP”.

<nExoR> Zakresy IP to w ogóle są trochę od czapy te polityki z zakresami IP, bo połowa firm używa Proxy, Application Proxy czy innych mechanizmów przekierowujących ruch i wychodzenie ze stałego IP, zwłaszcza w świecie mobilnym, to jest w ogóle jakieś nieporozumienie.

<d0m3l> Kwestia jest taka, że nie ma wystarczającej ilości technologii na świecie, żeby naprawić gówniane procesy. Nie ma. Jeżeli Twój proces jest niewystarczający to możesz się bawić w hocki-klocki. Takie podatności o jakich Ty mówisz, że hacker albo zły aktor dostanie się i uwierzytelni zamiast użytkownika zdarzają się 2 w miesiącu na całą skalę Office 365. Na 320 milionów użytkowników. 2 w miesiącu. Oba z nich są łapane przez zwykłych użytkowników, którzy zostają wykopani z konta w momencie, kiedy ktoś zamiast nich dokona poświadczenia. Więc takie reaktywne wyłapywanie działa bardzo dobrze pod warunkiem, że nie masz wykluczeń MFA. Okazuje się, że najbardziej popularną polityką Conditional Access jaka istnieje jest: MFA dla wszystkich, poza zaufaną lokalizacją, czyli jeżeli jesteś na Cornplecie albo na Wi-Fi, żadnego MFA. Czyli Pani Józia, która siedzi w biurze i nigdy nie dostaje się do maila poza biurem, nigdy tego MFA nie zobaczy.

<nExoR> Tak, no wtedy go nigdy nie skonfiguruje, czyli jest niebezpieczne. No właśnie, czyli to taki drugi scenariusz.

<d0m3l> Dlatego jeżeli zły aktor dostanie hasło i spróbuje zrobić zarejestrowanie tego MFA, możesz to Conditional Accessem ograniczyć. Mówisz, że ktoś, kto ma hasło Pani Józi, żeby zarejestrować jej MFA musi być na urządzeniu, które jest dopięte do naszej domeny, musi być Hybrid Joined. I tyle.

[…]

<d0m3l> MFA musi być włączone zawsze. Ten link, który pokazałem, M365 Golden Config. Użytkownik przychodzi pierwszego dnia w pracy. Tego pierwszego dnia w pracy użytkownik musi potwierdzić, że ma dostęp do jakiegoś MFA. Problemem zaczyna się robić wdrożenie gdzie masz 23.ooo użytkowników, którzy jeszcze nie podali danych. MFA ma 1o% Faliure Rate przy rejestracji. 1o% użytkowników będzie Ci krzyczało, że nie umieją zeskanować kodu QR na ekranie.

[…]

<MG> Czy MFA jest, zadam takie pytanie znowu z wyższego poziomu, czy MFA jest idealnym zabezpieczeniem? Jak nie, to czego mu brakuje?

[…]

<d0m3l> Powiem tak: Grzesiek pytał o te statystyki Googlowe. Statystyki są prosto z konferencji, która nazywa się “Stripe”. Google mówił, że jedyne idioto-odporne, bo MFA da się zfishować. Fishing, czyli ktoś wysyła Ci maila, klikasz link i podajesz Twój login, hasło i MFA. MFA da się zrobić fish. Bez problemu, potem mam dostęp do Twojej poczty forever and ever, dopóki nie zmienisz swojego hasła. Jedyny sposób, który takiemu atakowi zapobiegnie to używanie metod poświadczeń, które są oparte o sprzęt. Czyli: Hello for Businnes – niefishowalny, Tokeny FIDO – niefishowalne. Dlatego, w momencie kiedy masz hasło i coś po haśle dopóty, dopóki to będzie aktywnym MFA, dopóty będziesz miał możliwość, że ktoś je zhackuje. Do wtedy, gdy będziesz klikał w te linki fishingowe. Nie da się zrobić, żeby mniej niż 20% Twoich użytkowników klikało w linki fishingowe. Możesz robić banery, ostrzeżenia itd.., 2o% ludzi kliknie w link, który się im pojawi w skrzynce odbiorczej. SANS Institute zrobił badania. 2o% to jest podłoga. W Microsofcie 35% ludzi jest fishowalnych, wewnętrznie u nas w firmie, bo jesteśmy przyklejeni do maila 24/7. 35% ostatnia kampania wewnętrzna fishingowa, testowa.

<MG> Czyli trzeba ogólnie całkowicie ominąć możliwość tego fisha, czyli tak, jak mówiłeś, Tokeny FIDO na przykład.

<A> Ale pamiętaj, że jeszcze masz drugą możliwość, czyli na przykład “o, tu jest taka fakturka”; “Ty, słuchaj, nie chce mi się w niczym otworzyć, zobacz co to”.

<d0m3l>     No. „Każdy burdel da się ogarnąć, tylko proszę dane do faktury”, nie? Ale to już jest chyba trochę taki Social Engeneering, prawda?

End Of Quote

oryginał rozmowy tutaj.

o ważności MFA jestem świadom i zawsze jest to pierwsza rzecz jaką sprawdzam – czy jest włączone. muszę przyznać, że zezwolenie na brak MFA kiedy się jest w biurze wydawało mi się zawsze dobrym pomysłem. teraz nie jestem już taki pewien (; pozostawiam do oceny czytelnikom.

eN.

czy Microsoft słucha użytkowników?

pasjonaci IT

nie tak dawno zapraszałem na spotkanie z Danielem Stefaniakiem, IAM Product Manager w Microsoft, pracującym w samym sercu tego, gdzie powstają usługi M365 – w Redmond. pełne nagranie z tego spotkania można obejrzeć na YT na kanale “Pasjonaci IT” . ilość wiedzy jaka posypała się podczas tych 1,5h okazała się olbrzymia. ponieważ nie każdy lubi słuchać, niektórzy nadal lubią czytać – zamieszczę kilka ważnych informacji jakie padły podczas tej rozmowy. dziś na smaka wrzucę fragment dotyczący User Voice – czy to tylko taki ‘anti-stress button’ żeby ludzi mogli wylać swoje frustracje, czy faktycznie Microsoft przygląda się tym wpisom, analizuje i zmienia swoje plany?

poniżej fragment transkryptu, który może być nieco zmodyfikowany dla wygody czytania.

UserVoice

  • <nExoR>   […] to ciekawe, co powiedziałeś. Wiem, że uservoice funkcjonuje całkiem fajnie od jakiegoś czasu, natomiast jak to realnie wygląda procentowo? No bo uservoice – uservoice’em, natomiast musi być jakaś road mapa odgórna. czy jesteś w stanie określić na ile procentowo jest to uservoice, na ile odgórne ustalenia? np. uservoice to jest 15% całego rozwoju, a 85% to jest roadmapa, czy może jest odwrotnie, że właśnie 15% to jest jakaś odgórna wizja, a 85% to jest to, co ludzie chcą? Jak byś to mniej więcej określił?
  • <d0m3l>  W mojej działce, w Azure Active Directory [IAM], uservoice to jest około 15 – 2o% . Tak naprawdę chodzi o to, że w tej chwili Azure AD to jest system, który wiezie ze sobą 32o milionów użytkowników codziennie, więc to nie jest taki stateczek, który da się zawrócić z dnia na dzień. Więc w tej chwili korzystamy z uservoice’ów, albo z pracy z największymi klientami z Fortune 5oo, którzy na nas krzyczą: “Dlaczego to, kurka, tak nie działa? Bo próbuję zrobić XYZ, ale Wy mi nie dajecie takiej możliwości”. więc szturchamy na prawo i lewo, żeby ten stateczek popłynął tam, gdzie klienci będą chcieli na niego wsiąść, bo na pewno nie stoi w miejscu. Więc z uservoice te rzeczy, które mają powyżej 1oo głosów, czy tam 15o, muszą być wciśnięte w road mapę na najbliższe 12 miesięcy. Nasza Pani Vice President powiedziała, że tak ma być, koniec kropka: “Właściciele funkcjonalności wymyślcie, jak zaadresować uservoice’a”.
  • <MG>        1oo – 15o głosów to nie jest taki duży próg…
  • <domel>     W Azure AD to jest bardzo wysoki próg.
  • <nExoR>   Naprawdę? Tak mało jest uservoice’ów?
  • <domel>     Tak. Największy uservoice ma 13oo głosów.
  • <nExoR>   I na co jest?
  • <domel>     Rozdzielenie albo połączenie Microsoft Account i kont Azure AD. Bo, jak pamiętacie LifeID rozdzieliło się od Office 365 w jednym momencie i teraz się okazuje, że  jak masz LifeID i konto w Office 365 na ten sam adres e-mail to masz ten głupi label pod tytułem “konto organizacyjne vs. konto prywatne“, więc ludzie na to bluzgają strasznie. Drugi w tej chwili to jest chyba cel w Service Password Reset bez dostępu do kontrolera domeny, więc to są dwa takie największe. Teamsy mają dziesiątki tysięcy uservoice’ów [bo to frontend’owa aplikacja]

End of Quote

swoją drogą sprawdziłem i są jeszcze dwa requesty:

  • nested groups: ~18oo głosów
  • tokeny B2C zawierające członkostwo użytkownika: ~15oo głosów

i to faktycznie max. a Top Ideas dla Teams ma ponad 55k. to pokazuje, różnicę backend vs frontend q:

w świetnym dziele filozoficznym, post-humanistycznym “Po piśmie“, Jacek Dukaj pokazuje jak zmieniała się ludzkość na przestrzeni dziejów – z kultury mówionej, teraz przez literacką… a w przyszłości w przekaz natychmiastowy. ludzie już dziś wolą obejrzeć niż przeczytać, podcasty i filmy zastępują książki, video zastępuje instrukcje i poradniki…

jestem dinozaurem – ja wolę czytać. albo może to technologia jeszcze nie dorosła po prostu – bo jak wyszukać jakiś interesujący fragment? jak wyszukać interesującą frazę w 1,5h materiale? albo jak ‘przelecieć wzrokiem’ video? czasem mniej ciekawe fragmenty artu można po prostu szybko ominąć, przy video trudniej. dla tego  w najbliższych dniach dodam jeszcze trochę fajnych informacji z naszej rozmowy – bo czasem tygodnie, a nawet miesiące surfowania, nie dadzą takich wyniqw.

d0m3lu – dzięki [twoje konto cały czas jeszcze jest na w-files q: ]

eN.

M365 jako platforma – inna perspektywa

kolejne spojrzenie na ‘platformę’ – w dwóch kontekstach. po pierwsze – bezpieczeństwo, po drugie – konsekwencje ‘on-premowego myślenia’. w sumie to odwrotnie, bo zaniechania z w prawidłowej konfiguracji bezpieczeństwa wynikają głównie z faktu, że M365 nie jest prawidłowo rozumiane. bo cały czas poqtuje ‘stare myślenie’. taka oto anegdota [prawdziwa], która powinna dobrze zobrazować, co mam na myśli…

dzień dobry, my po Teamsy….

niedawno, po wybuchu pandemii, duża firma postanowiła zwiększyć możliwości pracy z domu [#WFH]. więc firma chce wdrożyć Microsoft Teams. *tylko* Teams…

[parafrazując] “no bo przecież takie Teamsy, to zainstaluje się i już – ludzie mogą sobie korzystać. mamy jakieś licencje i to w ramach EA nawet O365 E3 i to całkiem sporo. nie chcemy od razu dla wszystkich tylko małymi kroczkami – odpalimy dla np. 5o osób jako PoC a potem dla reszty organizacji. a jakieś dodatki typu skrzynki czy OneDrive to może potem. na razie chcemy szybko [i tanio], żeby skorzystać z możliwości tej wspaniałej pracy grupowej, jaką daje Teams”…

khmmm… no i to takie “onpremowe myślenie”. zupełnie wszystko do góry nogami. jeśli nie wiecie o czym mówię – to znaczy, że jeszcze musicie się w M365 wgryźć… jakie błędy zostały popełnione w tym rozumowaniu? zadajmy klientowi kilka pytań i co się okaże:

  • jest już AD. oczywiście powinno być SSO, a w przyszłości bardziej wykorzystać usługę. czyli trzeba zacząć od zaprojektowania tożsamości hybrydowej, synchronizacji, określić zasady synchronizacji – nawet jeśli początkowo synchronizowałoby się tylko kilka osób, to trzeba zrobić pełny projekt. firma niemała, AD niemałe, a wiadomo – jak się zajrzy do szafy [AD] to zaczną trupy wypadać [cała historia i nakładające się modele zarządzania]. trzeba jakieś serwery dla ADConnect postawić, redundancja, ustalić metodę uwierzytelnienia – w końcu to ma być produkcja, jak się źle poustala, to potem będzie ciężko to zmieniać… to tak w ramach rozgrzewki…
  • jest Exchange on-premise. ale Teams korzysta ze skrzynek pocztowych. nie dość, że trochę ciężko przewidzieć co by się stało jak by to tak po prostu rozdzielnie potraktować [znaczy duplicate-mailbox by się stało], ale klient wspomniał, że będzie raczej chciał usługę mocniej utylizować w przyszłości. a to oznacza hybrydę Exchange – i znów projekt i DNSy i mailflow i reguły na FW itd….
  • jest oczywiście i SfB on-premise… czyli musi być współdzielony SIP domain, hybryda SfB … i znów – trzeba to zaprojektować, wdrożyć ….
  • przetwarzane są informacje wrażliwe a firma podlega licznym normom i wymaganiom bezpieczeństwa – a więc trzeba skonfigurować polityki bezpieczeństwa dla wszystkich komponentów, ustalić co użytkownicy mogą a czego nie mogą … o tym więcej za chwilę, ale już widać – że to nie zadanie na 5 minut tylko ciężki projekt.

w dużym skrócie – nie ma pojęcia ‘tylko Teamsy’… no ok, da się ‘tylko Teamsy’. można wdrożyć na szybko tenant M365, zostać przy domenie *.onmicrosoft.com i sobie z Teamsów korzystać od razu. ale nie ma mowy o integracji, nie ma mowy o tym, żeby to post factum łączyć ze środowiskiem on-premise [technicznie się da, ale czas i koszty…], funkcjonalność będzie ograniczona, no i tak czy inaczej – trzeba to przecież zabezpieczyć… ma być zgodność z normami i bezpieczeństwo – a gdzie licencje EMS? a to będzie kosztowało …. w sumie to bez różnicy bo kwota już i tak przekroczyła jakiekolwiek wyobrażenia wstępne – coś co miało być szybkim wdrożeniem dla 5o osób okazuje się olbrzymim projektem – być może na długie miesiące. o kwotach nawet nie wspominam.

to tylko skrzynki Exchange

o bezpieczeństwie myślą niby wszyscy, niektórzy próbują, ale niewiele osób ma pojęcie co to w ogóle znaczy ‘bezpieczeństwo M365’. może inna anegdota, tym razem mniejsza firma, ale schemat [czy raczej końcowy efekt], który obserwuję bez względu na wielkość firmy:

“mamy pocztę w takim to serwisie, i kupiliśmy licencje o365 i będziemy migrować”

“a bezpieczeństwo? macie jakiś projekt/pomysł jak to zabezpieczyć?”

“ale to tylko skrzyneczki”

czy aby na pewno? najbardziej oczywistym elementem, który pewnie każdy wskaże – jest tożsamość. w rozwiązaniach Chmury publicznej bezpieczeństwo sqpia się głównie na tożsamości [i danych]. w nazwie ‘Chmura Publiczna’ dość kluczowe jest słowo ‘Publiczna’. każdy – skądkolwiek na świecie, może próbować się logować, atakować konta itd. ale to dopiero początek… o czym [z przerażeniem zauważam] się zapomina. przecież wystarczy pojedyncza licencja, choćby trial, choćby wygasła dawno temu – ale jeśli była, to uruchamiane zostały w ramach M365 usługi, które objęte są/były licencją! to że licencje wygasły – nie wyłącza usług w ramach tenanta – co najwyżej z usługi nie da się w pełni korzystać, ale ona działa. to, że firma chce ‘tylko skrzyneczki’, nie oznacza, że cała reszta nie istnieje. to nie jest onprem – w którym stawiamy sobie Exchange, a reszty nie ma, bo jeszcze nie zdecydowaliśmy czy instalować serwer SharePoint – te usługi są, działają, mają jakieś ustawienia wyjściowe, są dostępne – czyt. można próbować się do nich dostać. i nie mówię tylko o próbach włamania. zauważyłem, że powszechną praktyką jest przypisywanie użytkownikom pełnych licencji, bez wyłączania planów serwisowych – nawet jeśli firma jeszcze nie planowała z nich korzystać. a to oznacza, że użytkownicy mogą korzystać z pozostałych usług i zrobić sobie krzywdę. czy też firmie. np. przypadkiem udostępniając plik z danymi wrażliwymi, lub w ramach zabawy i nauki ustawić jakiś konektor, który automatycznie gdzieś tam wysyła maile czy kopiuje pliki…

a tych usług jest dużo: OneDrive, SharePoint, Teams, same grupy M365, co za tym idzie wieloraka możliwość współdzielenie plików na zewnątrz, możliwość dodawania dowolnych konektorów – i w Outlook i w Teams i w … można by tak wymieniać a szczegółów jest dużo.

a całe środowisko M365 projektowane jest przez DevOpsów tak, aby zaspakajać ich potrzeby. czyli wszycy-wszytko-wszytkim-zawsze-wszędzie-proszęBardzo. zupełnie jak na tych teaserach reklamowych Microsoft Teams – gdzie wszyscy są kreatywni, wszyscy piękni, młodzi i ambitni i świetnie adaptują te nowe super technologie. taaa… i rozgrzeszenie i życie wieczne za darmo, przy wyqpieniu Software Assurance.

życie zazwyczaj wygląda nieco odmiennie. dla tego…

ZABEZPIECZ SWOJE M365 KOMPLEKSOWO i AUDYTUJ

nie ma że ‘tylko skrzyneczki’ czy ‘tylko Teams’. trzeba wdrożyć minimum bezpieczeństwa dla *całego tenanta* – czyli wszystkich usług, bez względu no to czy dziś chcemy z nich korzystać. tym bardziej, że jest bardzo wiele elementów, związanych bezpośrednio z AAD i o365, które są dla wszystkich – a [prawie] nikt i tak tego nie konfiguruje zostawiając ustawienia wyjściowe, które są [za]bardzo liberalne. do tego trzeba pamiętać, że Chmura to nie jest ‘produkt w wersji X’ – to jest dynamicznie rozwijające się środowisko. dla tego nie wystarczy ‘zabezpieczyć’ – trzeba robić przeglądy, sprawdzać jakie nowe aplikacje się pojawiły, jakie dodatki – bo za chwilę pojawi się kolejna nowa aplikacja, która wymaga znów przyjrzenia się jej możliwościom i bezpieczeństwu, ocenić czy użytkownicy będą z niej korzystać i w jaki sposób i zaplanować co z nią zrobić i jak skonfigurować – bo wbrew dość powszechnej opinii – SaaS wcale nie oznacza, że tam się nic nie konfiguruje, czy że wszystko jest od razu bezpieczne.

jeśli myślisz poważnie o bezpieczeństwie a twoja firma musi być zgodna z normami – pomyśl od razu o licencjach EMS, M365sec, albo przynajmniej Business Premium dla mniejszych.

a po wiedzę – cóż, trzeba zgłosić się do odpowiednich konsultantów (:

eN.

wygaszanie tokenów – zmora bezpieczeństwa i CAEP

Obsługa tokenu w czasie rzeczywistym

wpis dotyczy nowego mechanizmu bezpieczeństwa – Continues Access Evaluation Protocol. bardzo fajnie, że Microsoft w końcu adresuje bardziej życiowe sytuacje dotyczące sesji użytkownika – konkretnie obsługę wymuszenia wygaśnięcia tokenu uwierzytelnienia. obserwując jednak z poziomu wyższego, działania aplikacji, mam obawy, że to nie adresuje najważniejszych bolączek. przekonamy się wkrótce.

ale…. o czym ja mówię?

przykład podany w linkowanym arcie dotyczy wymuszenia wygaśnięcia tokenu bezpieczeństwa np. w przypadq zmiany typu sieci (biurowa/otwarta) w trakcie trwania sesji. w tej chwili token jest przyznawany na 1h i sobie jest póki nie wygaśnie.

ale obserwuję większy problem. 1h nie brzmi jak problem – ale już 2 dni? z praktyki i obserwacji tak właśnie to wygląda – użytkownicy, którzy zostali zablokowani lub wyłączeni często mają dostęp do danych nawet przez kilka dni. na to ile de facto to będzie czasu, wpływa wiele czynników:

  • czy środowisko jest cloud-only czy hybryda
  • jeśli hybryda to w jakim trybie – PHS, PTA czy ADFS? każdy z mechanizmów zmienia przebieg procesu uwierzytelniania i znacząco zmienia wiele aspektów związanych z bezpieczeństwem tożsamości.
  • pośrednio konfiguracja Conditional Access
  • wykorzystanie Cloud App Security – który podobnie do CAEP ma na celu kontrolę sesji a nie warunków dostępu
  • system operacyjny na końcówce – iOS, Android, Windows… na każdym apki zachowują się nieco inaczej
  • inne ustawienia typu konfiguracja serwera MFA w AAD ile czasu może być cache’owany.

w efekcie miałem okazję obserwować sytuacje, w których użytkownik jeszcze przez kilka dni (sic!) miał dostęp do swojego maila. tak – mógł odbierać i wiadomości. póty, póki nie zabił aplikacji na urządzeniu – dopiero wtedy pojawiło się żądanie uwierzytelnienia.

jest nadzieja, że ta oddolna zmiana opisuje tylko część konsekwencji ale w rezultacie zaadresuje ten problem – zwłaszcza, że pierwszymi klientami, które dostaną update jest Outlook i Teams.

procedury w przypadkach krytycznych

jest (teoretyczna) możliwość zabicia wszystkich sesji użytkownika i zmuszenia go do odświeżenia tokenu. jest również możliwość wyczyszczenia danych na końcówkach.

wipe-out

wyczyszczenie danych na końcówce jest możliwe jedynie jeśli zarządzane są aplikacje lub stacja – scenariusze BYOD z managed apps oraz klasyczny MDM z tzw. ‘enrollmentem’ urządzeń. odpowiednik ‘dodania do domeny’ pod kontrolę InTune (lub innego MDM) do zarządzania końcówką. wtedy zależnie od scenariusza (managed apps/MDM) możemy z portalu Azure wymusić wyczyszczenie danych firmowych (managed apps) lub całego urządzenia (MDM).

warunkiem jest oczywiście, że urządzenie zarejestruje się do sieci, co w przypadq świadomej kradzieży w celu pozyskania danych nie jest oczywiście dużym pocieszeniem. warto również pamiętać, że to już podlega licencjom InTune.

reset sesji

ciekawszym i bardziej powszechnym scenariuszem jest reset sesji użytkownika. po co? uwierzytelnienie jest ‘bramą’ którą jak się przekroczy, mamy określony czas przebywania (sesję). do tego należy dodać różne mechanizmy cache – obecne zwłaszcza w aplikacjach mobilnych, ze względu na … mobilność. czyli częste utraty sieci i zmiany punktów dostępowych. pomimo, że token uwierzytelniania żyje 1h, to sesja utrzymywana jest, aż do zerwania albo jakiegoś timeoutu w aplikacji. dla Outlook obserwowałem długie czasy, sięgające nawet 2 dni [dodam, że taki scenariusz miałem ok roq temu – to o tyle istotne, że przy obecnej szybkości zmian, nie do końca wiadomo co jest aktualne. nie robiłem testów ostatnio].

(teoretyczny) reset sesji można wykonać na 3 sposoby. czy też może w 3ech krokach? bo nie jest dla mnie oczywiste w których częściach te kroki się pokrywają a w których wymagają wykonania oddzielnie [zapraszam do komentarzy i wrzucenia linqw – jeśli ktoś posiada materiały wyjaśniające te ‘detale’, a jakże istotne ze względu na bezpieczeństwo].

  • z interfejsu AAD, w części ‘Authentication Methods’ – opcja ‘Revoke MFA sessions’
  • z PowerShell Revoke-AzureADUserAllRefreshToken, który zgodnie z opisem ‘unieważnia wszystkie tokeny wydane dla aplikacji użytkownika’
  • z portalu M365 Admin Center – wyszukując użytkownika, w zakładce… OneDrive. tam dostępna jest opcja, która obecnie opisana jest ‘Sign-out of all Office 365 sessions’

historycznie opcja ‘sign-out user sessions’ działała tylko dla OD właśnie. czy dziś, zostając w tym samym miejscu w interfejsie, zrywa faktycznie sesje? podam taki przykład świeży, z przed miesiąca:

wraz z końcem miesiąca, zakończyło pracę sporo osób pracujących w projekcie i z dostępami administracyjnymi. ok. 3 dni później zgłasza się do mnie jedna z osób z pytaniem, czemu osoba, która już nie powinna być w organizacji ‘świeci się w Teams na zielono’ – czyli jest jako aktywna. konto zablokowane, wszelkie resety porobione. nie pomaga. mija kolejny dzień – nadal ‘active’. zakładam ticket w MS Support, jakaś tam analiza logów, że user zablokowany, że na pewno nie może się dostać – generalnie nic, czego bym nie wiedział. odpowiedzi na to, czemu sesja jest widoczna jako ‘active’ i jak taką sesję zabić – brak. w tej sytuacji nie było zagrożenia, bo faktycznie wszystko było poblokowane i potwierdzały to logi dostępowe, ale ogólnie… brak narzędzi pozwalających na jakąkolwiek kontrolę sesji użytkowników to spory problem chmury. pozostawia sporo niejasności, co w kontekście bezpieczeństwa nie jest pożądane.

liczę na to, że implementacja CAEP znacząco poprawi element kontroli sesji….

eN.

zarządzanie użytkownikami w hybrydzie

ponieważ to pytanie wraca do mnie niemal przy każdym projekcie i ponieważ obserwuję problem w zrozumieniu tych mechanizmów, zamieszczam krótkie podsumowanie najważniejszych informacji, które powinny pomóc w przygotowaniu doqmentacji ‘zarządzania użytkownikiem’ oraz administracji w środowisq hybrydowym.

‘Hybryda’

wedle moich obserwacji najważniejsze, a zarazem wymykające się intuicji jest to, że ‘hybryda’ tak na prawdę w większości wdrożeń powinna być nazywa ‘hybrydy’ – w liczbie mnogiej. w standardowym scenariuszu mamy bowiem:

  • hybryda tożsamości – połączenie pomiędzy AD i AzureAD. obiekty wraz z atrybutami synchronizowane są z onprem do Chmury, zapewniając (przy odpowiedniej konfiguracji) pojedynczą tożsamość i SSO (lub same-password w mniej wykwintnej implementacji)
  • hybryda Exchange – połączenie pomiędzy Ex a EXO. to co zaburza intuicję jest fakt, że wiele atrybutów Exchange jest przechowywanych w AD i synchronizowanych w ten sam sposób. jednak włączenie/wyłączenie hybrydy Exchange to w dużej mierze właśnie zdefiniowane czy ten zestaw atrybutów ma być synchronizowany czy też nie.
  • hybryda SfB – czyli połączenie pomiędzy onpremowym Lync/SfB a SOL/Teams. i tutaj podobnie jak w przypadq Exchange – mylącym jest fakt, że w takim środowisq informacje na temat konta SfB są zapisywane w AD i tak synchronizowane.

każdą z nich można mieć lub nie mieć … no ok, hybryda tożsamości musi być w każdym scenariuszu – ale Ex czy SfB to już kwestia wymagań klienta.

teoretycznie ‘hybryda’ powinna dawać jedno, centralne miejsce zarządzania i unifikację… de facto sprawa jest bardziej zagmatwana, ale poniżej przedstawione zasady powinny pomóc

Zarządzanie użytkownikami

zarządzanie użytkownikami w środowisq tożsamości hybrydowej odbywa się w zasadzie w pełni z onprem. w tym przypadq jest zatem najmniej zmian w kwestii procedur zarządzania.

wyjątkiem są:

  • zarządzanie licencjami, ale wtedy na pomoc przychodzi Group-Based Licensing .
  • wymuszenie zmiany hasła
  • do różnic można dorzucić jeszcze rozwiązywanie problemów i audyt – oczywiście zdarzenia logowania i te ‘ruchome elementy’ dzieją się w ramach AAD więc tutaj też trzeba sięgnąć do chmury…. a w zasadzie do obu środowisk na raz (a w ogóle to najlepiej jakiś SIEM zintegrowany).

należy dodać do tego pewne bardziej skomplikowane sytuacje, ponieważ wybór strony gdzie należy wykonać akcję może się różnić zależnie od metody uwierzytelnienia (PH, PTA, ADFS) lub wdrożenia SSPR – ale to są wszystko kwestie z zakresu obsługi hasła czy blokady konta.

Zarządzanie Exchange

ten element jest najbardziej kłopotliwy i hybryda Ex generalnie ma swoje specyficzne ograniczenia… największą pomocą jest tutaj traktowanie oddzielnie skrzynki i użytkownika. w ogólności są dwie perspektywy: administracja serwisem i użytkownikiem. pierwsze jest proste do wyjaśnienia:

  • Ex i EXO są rozdzielne – polityki bezpieczeństwa, mail flow, ustawienia globalne – robi się oddzielnie po obu stronach i nie są to elementy podlegające synchronizacji.
  • sprawa jest dość skomplikowana w przypadq polityki maili (recipient policies) bo … przenikają się częściowo. nie mogę teraz znaleźć linka.. ale w uproszczeniu najlepiej też zarządzać z onprem – ponieważ tam jest konto użytkownika i synchronizowany atrybut ‘proxyAddresses’

przy zarządzaniu pojedynczym użytkownikiem:

  • operacje związane z kontem użytkownika wykonuje się z onprem (aliasy mailowe, zmiany nazw/opisów/informacji)
  • operacje związane ze skrzynką – po tej stronie gdzie jest skrzynka [bo może być przecież albo tu albo tam] (limity skrzynki, statystyki, uprawnienia). w skrócie to, co robi ‘set-mailbox*‘ wykonuje się tam, gdzie ten mailbox leży.

jest kilka ‘dzwinostek’ typu uprawnienie ‘send as’ które wynika z faktu, że jest de facto zapisywane w AD i niesynchronizowane. zarządzanie, czy wspomniane przetwarzanie polis recipient policies, które w specyficznych przypadkach może wydawać się niespójne… są też różnice zależnie czy która wersja jest w OnPrem (zwłaszcza, jeśli to Ex 2o1o).

napisanie spójnych procedur zarządzania dla Exchange Hybrid jest wyzwaniem.

Zarządzanie SfB

do czasu Teamsów sprawę dało się jeszcze ogarnąć. szczęśliwie dla SfB w zasadzie nie ma specjalnie zarządzania

  • konto w hybrydzie trzeba włączyć/wyłączyć, co robi się oczywiście po stronie onprem,
  • wszelkie zarządzanie danymi o userze to de facto zapis do AD – więc też onprem

są oczywiście elementy integracji VoIP, polisy czy inne elementy usługi – i to jest rozdzielnie dla każdej strony.

  • przypisanie polis – to tam, gdzie jest konto SfB, oddzielne są polisy więc zależnie od strony hostującej, tam się te polisy definiuje i przypisuje.

hybryda SfB jest imho najtrudniejsza do zestawienia ale najmniej potem przy niej administracji i ‘ruchomych elementów’ a najtrudniejsze części to równocześnie te najrzadziej wykorzystywane czyli część integracji z VoIP, cloud PBX itp.

procedury administracyjne nie wymagają zatem specjalnych zmian.

na zakończenie

o ile hybryda tożsamości to ‘must have’ dla każdego środowiska opartego o AD, o tyle przejście do cloud-only i rezygnacja z hybrydy jest posunięciem często możliwym a w takim przypadq – sugerowanym. środowiska hybrydowe tylko pozornie są ‘zunifikowane’ – po obu stronach barykady (firewalla) są produkty w innych wersjach i choć mają symulować ‘jedną organizację’ to jest to proteza, która wprowadza sporo niejasności i komplikacji w konfiguracji i zarządzaniu. konieczność wykorzystania PowerShell do części zadań powoduje, że niektóre zadania normalnie wykonywane przez helpdesk, nagle są eskalowane do 2giej linii. przykładem mogą być procedury provisioningu użytkownika w hybrydzie Ex1o z EXO – gdzie nie ma wsparcia zakładania konta ze skrzynką online z interfejsu, a skrzynkę współdzieloną da się tylko zrobić hackując z poziomu atrybutów AD bo nawet PowerShell w tej wersji nie ma opcji ‘-Shared’ która pojawiła się w Ex13.

przejście dla tych usług na cloud-only znacznie ułatwia administrację.

eN.

OneLiner vs Script, stopki i gorączka

OneLiner nie jest skryptem

pasqdny dzień. migrena, potem gorączka, a jak mam gorączkę to muszę coś napisać. czasem głupoty, ale dziś może coś sensownego. i pisząc skrypt wstrzyqjący stopki dla OWA i mobile w EXO dla paru tysięcy userów, pomyślałem o tym czemu z OneLinera zrobiło się ponad 4oo linii kodu w dwóch skryptach. nie wszyscy to rozumieją, a jeśli ktoś skrypty pisać musi, lub lubi, to powinien to bardzo dobrze (z)rozumieć. dla tego wpis, poświęcony klepaczom kodu, którzy chcą robić to lepiej.

pisanie skryptów to praca dość niewdzięczna i mało opłacalna. kiedyś sądziłem, że jak powymiatam w pisaniu PS to będę mógł na tym sensownie zarobić. fakty są takie, że za skrypty rzadko ktoś chce płacić. “bo przecież to jedno polecenie”, albo że tego się nie da używać. no i w sumie… muszę się zgodzić. skrypty na zlecenie zdarzają się, ale rzadko.

w zasadzie robię już trochę inne rzeczy, ale czasem wspieram 2gą i 3cią linię. PowerShell to moje hobby, ale w pracy oczywiście czasem się przydaje. skrypty rzadko bo:

  • 1sza linia wsparcia boi się literek. jak coś nie ma GUI, to jest nie-do-użycia. nie ma znaczenia czy jest dokumentacja, i czy to w ogóle robi coś skomplikowanego, ale klawiatura dla pierwszej linii służy do logowania. też pewnie już niedługo, bo będą się logować biometrią a w dużej mierze zostaną zastąpieni chatbotami. a więc pisanie automatyzacji w postaci skryptu dla nich – nie ma sensu.
  • 2ga linia wsparcia owszem, uruchomi skrypt. ale jeśli coś się wysypie, pokaże się jakiś błąd… koniec. skrypt do śmieci, strach, nie chcemy. oczywiście tutaj jest już sporo wyjątqw, osób które po prostu *potrzebują* automatyzacji, więc się uczą. a czasem nawet lubią.
  • 3cia linia wsparcia… jest nieliczna i dość samowystarczalna. ale zazwyczaj wolą zassać jakiś skrypt z netu a potem szukać 1oo łorkeraundów jak go użyć do swoich potrzeb, niż coś napisać. ludzie wiedzą jak ‘coś osiągnąć’ – ale napisanie skryptu to inna para kaloszy.

to oczywiście subiektywna ocena, na podstawie doświadczeń własnych. wniosek jednak nasuwa się prosty – chcesz zarobić na kodowaniu, to weź się za coś, co ma interfejs, bo linia poleceń nadal straszy. jest dla nerdów, geeków i popraprańców. ewentualnie – ostatnia deska ratunq.

OneLiner nie jest skryptem. jest… łanlajnerem. nie będę wchodził w filozoficzno-semantyczne dywagacje i definicje – dla mnie nie jest to skrypt. zastosowanie onelinera jest wtedy, kiedy robi się coś bieżącego, trzeba zrobić raz i na szybko, i samemu kontroluje się przebieg. zazwyczaj to tylko jeden w wielu kroqw w długiej pracy. skrypt dla odmiany – to coś co pisze się, żeby było. żeby zostało i żeby można było tego użyć wiele razy i wielu warunkach… a co najważniejsze – żeby użyć tego mogli inni.

taka jest moja definicja.

to samo inaczej

dostałem skrypt mailem – nawet nie oneliner, miał ponad 1oo linii kodu. i prośba “weź tu tylko braqje takiego dyngsa i już. easypeasy… aaa i to ma być uruchamiane przez adminów potem”. oj. czyli celem nie jest to, co robi skrypt, tylko automatyzacja powtarzalnego zadania, przez osoby z 2giej linii. to zmienia wszystko.

zajrzałem do środka – jak na robotę admina, spoko. co prawda z ‘dyngsem’ by sobie nie poradził i zrobił zapętloną enumerację – czyli wydłużył przebieg do kwadratu, co przy tysiącach elementów i przebiegu w okolicy 3-4h, nagle zrobiłoby się 3-4 dni (; … ale widać, że ogólnie ogarnia. a jak zatem powinien wyglądać skrypt ‘dla kogoś’, dla 2giej linii? kilka wskazówek:

  • włącz cmdletbinding – proste, a daje dodatkowe możliwości np. tryb verbose i pełną obsługę parametrów.
  • zrób dobre opisy! wykorzystaj to, co daje PS i dobrze udoqmentuj skrypt. przyda się zarówno innym jak i Tobie
  • nie nadawaj nazw zmiennych typu ‘$a’ czy ‘$tmp’ – każdy normalny edytor ma intellisense, więc nie bój się wpisać ‘$tymczasowyImportDanych’ – przecież edytor to sam dokończy, a kod staje się czytelniejszy
  • jeśli niezbędny jest import danych – musisz założyć, że ktoś zamiast pliq tekstowego spróbuje załadować obrazek, że csv będzie miał złe kolumny albo że ktoś w ogóle go ominie. weryfikacja danych jest jednym z najpracochłonniejszych elementów – a ludzie są leniwi. dobra weryfikacja danych wejściowych to mniej błędów
  • OBSŁUGA BŁĘDÓW. to jedna z najtrudniejszych rzeczy – nie tylko przy skryptach. ale w przypadq skryptów, istnieje przesąd, że obsługa błędów jest niepotrzebna albo że w ogóle jej nie ma. jeśli oddajesz skrypt komuś, to niemal każda operacja powinna być otoczona try/catch lub weryfikacją zmiennej wyjściowej działania. inaczej skrypt będzie się sypał i nikt nie będzie widział czemu, albo nawet, że się sypie. to powoduje, że kod puchnie niebotycznie bo zamiast jednej, prostej linijki nagle robi się dziesięć, ale bez tego będzie scenariusz: nie zadziałało, nie wiem, boję się, kasuję.

oczywiście takich przykazań można by mnożyć i wypisywać przez pół nocy, ale wybrałem te, których zazwyczaj nie znajduję nawet w skryptach zassanych z technet/codeplex/github czy innych repo – teoretycznie stworzonych do konsumpcji przez innych. tak jak zasadą House MD dla wsparcia jest ‘użytkownik zawsze kłamie’, tak dla skypciarzy (a w zasadzie i w ogóle ogólnie) jest ‘ludzie są leniwi’. robią minimum. chcesz napisać skrypt dobrze – napisz tak, jak byś sam chciał go użyć, pierwszy raz go widząc, nie bądź leniwy.

przykładowy szkielet skryptu, który może posłużyć jako szablon:

<#
.SYNOPSIS
    skrypt ogólnie robi to i tamto
.DESCRIPTION
    tutaj już pełna instrukcja co i jak, w jaki sposób przygotować dane. jakie są warunki działania, kiedy sie może 
    wywalić, i wszystko inne, co w skrócie nazywa się 'dokumnetacją'
.EXAMPLE 
    .\set-ExampleSctipt.ps1
    dodaj informacje jak skrypt odpalić 
.EXAMPLE 
    .\set-ExampleSctipt.ps1 -dataFile abc.txt -param2 3
    nie szczędź przykładów i opisów! jeśli sam zaczynasz korzystać z czegoś, czego nie znasz, to pomaga
.INPUTS
    plik txt - płaski plik zawierające dane oddzielone enterem. to pedanteria, ale warto dodać 
.OUTPUTS
    ten skrypt nie ma outputu - ale warto to napisać
.NOTES
    nExoR ::))o-
    ver.20190716
    20190716 warto trzymać sobie wersję. nawet jeśli trzymasz repo na GitHubie - warto mieć loga z inormacją o zmianach
    20190715 w końcu ktoś dostaje nową wersję - chciałby wiedzieć co się zmieniło. nie robisz tego tylko dla siebie. 
    20180101 ...ty po roku też nie będziesz pamiętał
#>

[cmdletbinding()]
param (
    [parameter(Mandatory=$false,position=0)]
        [string]$dataFile,
    #zrób opis po co jest parametr - tutaj będzie to import danych
    [parameter(Mandatory=$false,position=1)]
        [string]$param2,
    #tutaj co prawda głupie param - ale nie bój się nadawać nazw parametrów, które przedstawiają ich znaczenie
    [parameter(Mandatory=$false,position=2)]
        [string]$logFile="_set_example-$(Get-Date -Format yyMMddHHmm).log"
    #dobre logowanie jest super ważne! jak potem sprawdzisz co zadziałało a co nie? 
)

#logowanie warto zrobić do pliq i opcjonalnie - na ekran. dla tego zawsze korzystam 
#z funkcji która mi to forqje na oba wyjścia
function write-log {
    param(
        [string]$text
    )
    if($text -match '\[WRN\]') {
        write-host -ForegroundColor Magenta $text
    } elseif ($text -match '\[ERR\]') {
        write-host -ForegroundColor Red $text
    } else {
        write-verbose $text
    }
    $text|out-file $LogFile -Append
}

$someData= Import-Csv $dataFile -Delimiter $delimiter -Encoding Default
#weryfikacja poprawności csv dla pliku danych - czy na pewno to taki plik, jaki sie oczeqje?
$expectedHeader=@("kolumna 1","innakolumna")
$csvHeader=$someData|get-Member -MemberType NoteProperty|select-object -ExpandProperty Name 
$missingColumn=@()
foreach($headElement in $expectedHeader) {
    if($csvHeader -notcontains $headElement) {
        Write-log "[ERR] brakuje kolumny $headElement w pliku $dataFile"
        $missingColumn+=$headElement
    }
}
if($missingColumn) {
    write-log -text "[ERR] nieprawidłowy format pliku wsadowego"
    exit -3
}

$data=import-csv -delimiter ';' $dataFile

$data

$VerbosePreference = "continue"
write-log -text "done."

nie ma tu żadnego try/catch… ale jest przykład jak obsłużyć dane wejściowe i nie oszczędzać na opisach i nazwach parametrów.

jedni biegają albo chodzą na imprezy, ja sobie skrobię skrypty (; a jeśli chcesz programować zawodowo – to raczej sięgnij po VS i zacznij ogarniać jakieś .NETy, pytongi czy inne duże frameworki.

gorączka spadła, czas usnąć. miłego kodowania!

eN.

PS. contains nie jest tym, czym się wydaje.

autopilot

Auto czy nie auto?

sceny z Total Recall z 199o zna chyba każdy (… kto nie jest millenialsem)

ostatnio miałem okazję przetestować osobiście ‘gdzie jesteśmy’ w kwestii autopilotów… no może nie tak globalnie, ale mimo wszystko to było pierwsze moje spotkanie z SAMO-chodem nie tylko z nazwy.

klasyfikacja

zabawne, ale język polski dawno już był w przyszłości. zarówno ‘Auto’ jak ‘samochód’ sugeruje pełną automatyzację, rodem z Total Recall. Angielskie ‘car’ (wóz/wagon) lepiej oddaje obecną rzeczywistość. zautomatyzowany pojazd nazwany został ‘autonomicznym wozem’ (autonomous cars). najpierw warto zatem spojrzeć na klasyfikację automatyzacji, bo owszem, takowa istnieje i bardzo fajnie pokazuje gdzie jesteśmy i gdzie zmierzamy (mniej-więcej, resztę można doczytać na wiki). organizacją, która to standaryzuje jest SAE (Society of Automotive Engineers).

Poziom 0: wyświetlane ostrzeżenia

Poziom 1: automatyczne ale nie autonomiczne sterowanie pojazdem – sporadyczne wsparcie sterowania w krytycznych sytuacjach. czyli automaty wspierają jazdę ale to kierowca cały czas kieruje pojazdem i kontroluje poprawność.

Poziom 2: autonomiczne sterowanie pojazdem (przyspieszenie/hamulce/sterowanie). mimo to kierowca musi trzymać ręce na kierownicy aby być w stanie korygować pomyłki i ogólnie weryfikować jazdę.

Poziom 3: autonomiczne sterownie, jednak pojazd może wymagać ręcznej interwencji w specyficznych warunkach. kierowca musi być gotowy na przejęcie kontroli.

Poziom 4: ogólnie to już autonomiczne auto ale pojazd nadal ma kierownicę… ponieważ dotyczy to określonych obszarów. np. będzie działać w mieście i na autostradzie ale nie na drogach 3-ciej klasy.

Poziom 5: pojazd w pełni autonomiczny.

jak widać przykład z filmu to ‘prawie 5’ bo z jakiś względu (IMHO brak fantazji scenarzystów) założyli, że drążek sterowniczy i ręczne sterowanie być musi. a gdzie jesteśmy dziś?

dziś

bardzo wiele pojazdów [staram się unikać kontrowersyjnej nazwy ‘samochód’ bo ani nie chodzi, ani nie robi tego sam ] implementuje dziś poziomy 0-2. w zasadzie każdy wyższy model ma funkcję ‘pilot assist’ lub podobne, w jakiś sposób wspierający kierowcę. daleko im jednak do autonomiczności … i to bardzo daleko, ale o tym za chwilę.

zacznę od tyłu, czyli od pojazdów w pełni autonomicznych, bo jest ich bardzo niewiele. jeśli liczyć te produkcyjne… to nie ma w ogóle. najbliżej sukcesu wydaje się być Alphabet.. czy jak kto woli Google, z projektem Waymo rozwijanym od 2o12. kolejna seria testów ulicznych ma się rozpocząć w tym roq w Arizonie – bo oprócz technologii potrzebne są jeszcze odpowiednie normy prawne, na jakich zasadach takie pojazdy w ogóle mogą się poruszać. w związkq z tym testy mogą być prowadzone tylko w niewielu regionach świata. myślę, że finalnym testem powinny być ulice Delhi (;

Waymo próbuje osiągnąć najwyższy, piąty level, ale należy traktować to jako R’n’D i nie spodziewałbym się takich pojazdów prędko na drogach. najprawdopodobniej nawet jeśli pojawią się produkcyjnie/komercyjnie to będą się poruszać w bardzo ograniczonych strefach.

4ty poziom na razie na ulicę również nie dotarł, najbliżej jest Toyota Lexus “Chauffeur”, która wygląda trochę jak wóz transmisyjny… ilość czujników i kamer jest porażająca. nie wiem czy ktoś będzie chciał jeździć takim potworem.

do poziomu 3ciego dobiło póki co Audi A8, który zresztą jeszcze nie ma akceptacji w wielu krajach.

test level 2

ja miałem okazję przez kilka tygodni potestować Volvo XC90. producent zapowiada, że mają mieć autonomiczny samochód do 2o21… ale szczerze wątpię żeby to osiągnęli. zgodnie z opisem producenta:

Pilot Assist helps provide more relaxed driving in heavy, slow-moving traffic at speeds up to 30 mph (50 km/h) on highways and major roads

bez włączenia żadnej funkcji, standardowe wsparcie ustawione jest na level 1. wykrywa zbliżanie się do linii i lekko koryguje jazdę jeśli samochód zaczyna zjeżdżać z drogi, oraz pokazuje ostrzeżenia przy zbliżaniu się do innych pojazdów – zarówno z przodu jak z boków. po włączeniu pilota, zaczynamy zbliżać się do ‘samochodu’. pojazd sam utrzymuje prędkość – wyhamowuje jeśli z przodu znajduje się inny pojazd, przyspiesza, kiedy ma wolne miejsce. prędkość maksymalną ustala się bardzo prosto, z kierownicy. sama funkcja pilota jest ogólnie łatwo dostępna i prosta w obsłudze.

jeśli zdejmiemy ręce z kierownicy, to zaczną pojawiać się ostrzeżenia – kierowca musi obligatoryjnie nadzorować jazdę. i tutaj zacznę od pierwszego strzału w kolano, który wręcz nazwę po imieniu: idiotyzm. scenariusz (przetestowałem!): co się dzieje jak kierowca uparcie NIE trzyma rąk na kierownicy? to może być scenariusz, kiedy np. kierowca uśnie, zasłabnie lub inny podobny, spodziewałem się zatem, że auto zacznie gwałtownie zwalniać i zjedzie na pobocze.. albo coś przybliżonego. tymczasem… po ok 3o sec wyłącza się funkcja ‘pilot assist’ i przechodzi na ręczne sterownie, zachowując prędkość. polecam zatem nie przysypiać. a przysnąć łatwo, kiedy samochód w zasadzie sam jedzie, i nawet nie trzeba się specjalnie skupiać na drodze. brawo Volvo! najbezpieczniejszy samochód świata.

to dopiero początek zawodu, jaki przeżyłem z ‘semi-autonomiczną’ jazdą. żeby nie przeciągać, po prostu wypunktuję bolączki:

  • pojazd wymaga namalowanych pasów i nimi się kieruje. nie potrafi sobie poradzić w miejscach gdzie pasy znikają (np. przebudowa trasy ale też skrzyżowania oraz tymczasowe pasy – totalnie się gubi)
  • nie nadaje się do jazdy w korq – co było potwornym zawodem, bo to właśnie jazda w korq jest upierdliwa a prędkości są małe. po zatrzymaniu pojazdu na kilka seqnd funkcja pilota jest wstrzymywana, ale po kilq kolejnych – wyłączana. z dwojga złego lepiej, żeby wyłączyła się od razu, bo nigdy nie byłem pewien czy jeszcze działa czy już nie. w efekcie cały czas sqpiałem się na kontrolowaniu wskaźnika zamiast na drodze, żeby wiedzieć na jakie zachowanie pojazdu liczyć. bryndza.
  • pomimo całkiem niezłej nawigacji, połączonej z netem, oraz czujników bocznych wskazujących czy można zmieniać pas, pojazd nigdy autonomicznie takiej operacji nie zrobi. przy zmianie pasa ‘asystent’ wyłącza się na chwilę, i po wykryciu ‘nowych’ pasów włącza ponownie.
  • nie nadaje się do jazdy po mieście – ze względu na korki, skrzyżowania, brak automatycznej zmiany pasa itd.
  • początkowo słabo wykrywał prawą linię. po deszczu nagle zaczął działać lepiej – podejrzewam więc był kłopot z czujnikiem/kamerą. system w żaden sposób tego nie wykrył/nie poinformował, co również uważam za zagrożenie.

do czego zatem można go użyć? w zasadzie tylko do wsparcia jazdy na drogach szybkiego ruchu. trzeba przyznać, że to całkiem wygodne i nawet będąc bardzo zmęczonym, pełna kontrola prędkości oraz sterowania ułatwia przejazd długich tras. chociaż i tu nie polecam usypiać, choćby z rękoma na kierownicy:

  • przy stosunkowo niskich prędkościach (1oo-12o kmph) i na prawdę niewielkich krzywiznach zakrętów na autostradzie, zdarzało się, że pojazd wypadał na pas obok – jakby ‘bał się’ trochę mocniej skręcić. mogło to być spowodowane problemami z czujnikiem o czym wspominałem wcześniej.
  • podczas zakrętów strasznie jechał blisko prawej strony… bałem się, że walniemy w pojazd na pasie obok. nie miałem nerwa żeby przetrzymać więc korygowałem jazdę. znów być może kwestia czujnika.
  • kiedy ktoś z pasa obok wjeżdżał przede mnie, czasem miałem wrażenie, że nie zdąży zwolnić. reaguje stanowczo za późno!

dodatkowo jest funkcja ‘park assistant’, która pozwala w pełni autonomicznie zaparkować pojazd. ale muszą być spełnione warunki:

  • tylko ‘na kopertę’
  • tylko z prawej strony

podsumowując

po wstępnej ekscytacji ‘WOA! SAM KIERUJE!’, i dłuższych testach, jestem jednak mocno zawiedziony tym, jak daleko jeszcze jest do autonomii pojazdów na drodze. mówimy to o wypasionym wozie za 3ooKPLN, więc w standardowych modelach ze średniej półki, nawet nie wspominając o tych z niskiej, nie prędko będzie można się cieszyć dobrymi systemami.

po ostatnich wypadkach Tesli spodziewałem się, że tam autonomia jest dużo wyższa. zwłaszcza, że wedle raportu koleś zginął czytając gazetę i nie patrząc na drogą. jak jednak doczytałem, ‘autopilot’ Tesli nie jest dużo bardziej rozwinięty. w tym miesiącu ma pojawić się update, dla posiadaczy hardware w wersji 3, z dodatkowymi funkcjami autonomii.

#przejechałbymsię

eN.

Microsoft Teams – złe strony medalu

Problemy w MS Teams

ponieważ podzieliłem się ogólną oceną Teams, jak na członka Loży Szyderców przystało, czas podzielić się spostrzeżeniami, których raczej nie znajdzie się oficjalnych materiałach.

najciekawszy artyqł dotyczący słabości Teams znalazłem na Petri. poza opisywanymi komplikacjami związanymi z faktem, że nie do końca wiadomo gdzie tak na prawdę dane Teams, największym wynikającym z tego problemem jest fakt, że nie bardzo wiadomo jak tworzyć kopię zapasową danych, a zarazem bardzo łatwo je usunąć, nieomal przez przypadek.

usunięcie grupy o365

usunięcie jest stałe i nie ma tzw. ‘soft delete’ pozwalające na szybkie przywrócenie. jak może dojść do usunięcia całego projektu? otóż Teams oparte jest [m.in.] na mechanizmie Office 365 Groups. o365G są współdzielone z innymi aplikacjami – np. Planner. czyli jedna grupa jest podstawą dla wielu innych aplikacji. o obu tych rozwiązaniach – o365 Groups oraz Planner napiszę pewnie więcej w przyszłości ale teraz ciekawy, acz straszny scenariusz:

tworząc nowy zespół w Teams automatycznie tworzone jest wiele innych elementów: grupa o365, site SharePoint, plan w Planner i kilka innych elementów. Teams spina to w całość. plan można podpiąć w Teams jako zakładka albo wejść bezpośrednio przez aplikację Planner. no i załóżmy, że zrealizowaliśmy już zadanie w Plannerze i chcemy je usunąć wraz z taskami. robi się to klikając w trzykropek -> Edit Plan -> delete Plan… i tu zaczyna się ciekawie.

pomimo opisu ‘Delete Plan’ osoba, która się nie wczyta w treść ostrzeżenia dokona potwornej rzezi, usuwając grupę o365, a wraz z nią wszystko – Teams, doqmenty, portal SP i tak dalej… a ponieważ nie ma soft-delete ani kopii zapasowej… robi się bardzo smutno.

można powiedzieć, że o grupy o365 należy dbać jak o własne oko.

wiele planów

o ile z poziomu aplikacji Planner można założyć tylko jeden plan per grupa, o tyle z Teams można założyć kilka planówi – jako zakładki – czyli do jednej grupy będzie dowiązane wiele planów…. z tą drobną niedogodnością, że nie są one dostępne z poziomu Plannera. nie działają linki przekierowujące, a jeśli usunie się zakładkę, to pozostanie osierocony plan.

czyli – jeden zespół, jedno zadanie do zaplanowania…

synchronizacja grup

jakoś to jest dziwnie skonstruowane – jeśli założy się zespół, to grupa o365 widoczna jest natychmiast w panelu office365. ale jeśli założy się, lub zmodyfiqje grupę z poziomu panelu o365, to zmiana synchronizowana jest… do 24h [SIC!].

jest to ponoć w trakcie przeróbek i zachowanie powinno zmienić się w najbliższych miesiącach.

Skype

kolejnym problemem, a może w tym przypadku – ‘utrudnieniem’ – jest inkorporowanie usługi Skype for Business, nie korzystając ze standardowych bibliotek. to bardzo dziwny wynalazek, krytykowany również przez sam team odpowiedzialny za SfB w MS. wszystkie konwersacje prowadzone w ramach Teams nie są widoczne nigdzie w SfB ani zachowywane w mailbox, również Presence jest oddzielnym bytem. całe rozwiązanie działa rozłącznie z ‘lokalnym’ SfB i powoduje to sporo niejasności.

dostępność

Teams wymaga licencji. szczęśliwie dostępny jest w większości licencji, więc wewnętrznie dla firmy może to nie być problem, niemniej np. w projekcie w którym uczestniczę, ze względu na dużą ilość użytkowników, migracja następuje krokowo, a licencje przypisywane są użytkownikom w kolejnych falach migracji. w takim scenariuszu, duża część użytkowników nie jest w stanie współuczestniczyć w projekcie.

większym i powszechniejszym problem jest brak wsparcia dla kont z poza organizacji – ten feature jest zapowiedziany, z tego plotek wiem, że ma się pojawić w ciągu 2-3 miesięcy. zobaczymy.

inne problemy i niedogodności

to oczywiście tylko główne przykłady. według mnie ważnym problemem jest również brak możliwości tworzenia skrótów do pliqw w ramach Teams. powoduje to, że przesunięcie pliq zamiast być jedną z podstawowych operacji staje się krytyczną, i zostawia uszkodzone linki lub duplikaty.

innym problem jest brak możliwości linkowania doqmentów z OneDrive. to z kolei zaburza podstawową ideę pracy na pojedynczej instancji pliq. czyli jeśli zaczęliśmy pracę nad plikiem w OD, to trzeba go dodać do Teams i na wszelki wypadek skasować, żeby nie utrzymywać dwóch kopii.

ale i tak jest super

podobnych niedogodności zalazłem jeszcze kilka, właśnie w ramach obsługi pliqw i uprawnień. niemniej jeśli się wie co omijać – nie są to jakieś straszne problemy. biorąc pod uwagę szybkość rozwoju aplikacji o365 można spodziewać się, ze niniejszy wpis będzie stawał się nieaktualny i wkrótce będzie można o nim zapomnieć.

eN.

Microsoft Teams

razem

Microsoft Teams to najmłodsze dziecko Office365 – GA ledwie 4 miesiące temu. zgodnie z nazwą, jest to narzędzie ułatwiające pracę grupową. od lutego uczestniczę w projekcie wdrożenia Office365, w którym postanowiliśmy wykorzystać to narzędzie i sprawdzić co to jest w ogóle warte… i muszę przyznać, że Teams są REWELACYJNE.

jeszcze w lutym Kamil opowiadał o Teams ogólnie, na WGUiSW i trochę się podśmiewaliśmy, że kolejne niepotrzebne narzędzie – wystarczy już szmatławego Yammera, kulejącego SharePoint, przestarzałej poczty, i niedorobionego Skype for Business – po co kolejny tool, który nie daje w zasadzie nic nowego?

może stwierdzenie ‘nie potrafię sobie wyobrazić pracy bez MS Teams’ jest na tą chwilę przesadą, ale potrafię sobie wyobrazić projekty, gdzie staje się jedynym wykorzystywanym narzędziem komunikacji. ma olbrzymi potencjał i należy się z nim koniecznie zaznajomić. ma oczywiście wady – jak każda wczesna [i późna zresztą też (; ] wersja aplikacji, ale nie zamierzam się na początq sqpiać na złych stronach. zatem…

…czym MS Teams są, a czym nie są

w zasadzie, żeby zacząć od początq, powinienem opisać ‘Office365 groups’… ale nie skleja mi się to, zacznę zatem w typowy dla mnie sposób – gdzieś od środka.

jedną z największych bolączek we wszystkich projektach/firmach jest Poczta Elektroniczna aka e-Mail, wykorzystywana do wszystkiego. gdyby nie limity na wielkości załączniqw, to programy do obróbki video musiałyby obsługiwać serwery poczty jako storage. efekt jest taki, że każdy plik, nad którym się pracuje, kopiowany jest do wielu osób. te wprowadzają poprawki, odsyłają, tworząc kolejne wersje i kopie pliqw. wyszukiwanie aktualnej wersji, komentarzy do treści czy zmian, to masakra.

rozwiązaniem na te bolączki, już dawno temu, miał stać się SharePoint. miał to być prosty, intuicyjny CMS z bibliotekami pozwalający na współdzielenie różnego typu obiektów [pliki, kalendarze, kontakty, wiki etc] i co ważne – automatycznym wersjonowaniem. opis niemal ‘jak ulał’ pasuje do MS Teams… jaka jest zatem różnica? SharePoint owszem, daje wszystkie te możliwości techniczne, ale z pominięciem pierwszej części – ‘prosty i intuicyjny’. samo korzystanie z SP jest co najmniej nieprzyjemne, no i ten cholerny klient do synchronizacji bibliotek… niby jest NGSC a do dnia dzisiejszego sprawia problemy i nie wspiera bibliotek z ewidencjonowaniem. ile to już lat? 16! [SIC!] Microsoft strzelił sobie w kolano, nie potrafiąc przez tyle lat zrobić prostego narzędzia ułatwiającego korzystanie z bibliotek SP.

…aż pojawiły się MS Teams. to jest prosty, intuicyjny front-end, łączący w jednym miejscu wiele aplikacji Office 365 [i nie tylko] – SharePoint, o365 groups, Planner, SfB, Office WebApps i więcej. efektem jest przestrzeń do pracy grupowej, funkcjonująca w intuicyjny, ‘naturalny’ sposób. pojawiło się już tyle wideo prezentujących Teams, że nie jestem pewien czy jest sens pisać kolejną ‘instrukcję obsługi’ ale kilka słów od siebie dodam.

  • kolejne dwa problemy przy projektach – rzadko kiedy wszyscy wiedzą kto zajmuje się czym – zawsze są dziury, choćby z tego powodu, że pojawia się nowe, nietypowe zadanie i ‘kto to ma zrobić’. efektów jest wiele – od problemów ze znalezieniem właściciela akcji, po masy spamu projektowego, gdzie maile wysyła się do kilqnastu czy nawet kilqdziesięciu osób, tak na wszelki wypadek żeby dotarło. czasem okazuje się, że w nagłówq i tak zabrakło tej kluczowej postaci, a pozostali są wqrzeni, że dzień-w-dzień przychodzi masa informacji, która ich nie dotyczy. prosty mechanizm kanałów tematycznych, które może założyć każdy z członków, pozwala na wprowadzenie porządq. jednocześnie informacja pozostaje dostępna dla wszystkich, dzięki czemu może być łatwiej dostrzeżona, przekierowana i obsłużona

  • podczas dysqji pojawia się potrzeba dodania pliq [lub odwrotnie – pojawia się plik wymagający dysqsji] – wystarczy go dodać… i zacząć razem pracować. w trakcie edycji pliq [korzystając wersji Office Web], cały czas widać kontekstowy dialog. niby drobiazg – ale w końcu nie muszę przegrzebywać się przez stosy wątqw dotyczących tego samego pliq, w różnych wersjach! w jednym miejscu mam plik, oraz całą dysqsję, która go dotyczy.

  • w ramach kanału są różne potrzeby – planowanie/logistyka, materiały video, Knowlege Base… – i wszystkie te materiały można po prostu podczepić jako kolejna zakładka dla kanału. kolejne ‘niby nic’ – ale dzięki temu nie muszę trzymać oddzielnie bookmarków do różnych materiałów, w różnych aplikacjach. w prosty sposób możemy udostępniać je wszystkim, i do tego kontekstowo – co nie jest bez znaczenia. przykład z życia – w ramach jednego z wątqw projektowych, który mnie nie dotyczy, utworzony jest mały site SP, na którym coś tam sobie wymieniają z zewnętrznymi vendorami. generalnie mnie to nie interesuje, ale musiałem coś szybko zweryfikować. wyszukanie ‘jakiegoś’ URLa w mailach sprzed kilq miesięcy, wysłanych przez ‘jakąś’ osobę, to mówiąc delikatnie ‘strata czasu’. kończyło się zazwyczaj kolejnym mailem z pytaniem ‘czy ktoś widział, czy ktoś zna’. teraz po prostu wchodzę na kanał danej grupy, a strona jest podczepiona jako zakładka. poniżej przykład, gdzie na kanale ogólnym wisi mała aplikacja zrobiona na SP do zgłaszania i obsługi problemów w ramach projektu

  • proste mechanizmy, dzięki którym projekt nie jest tysiącem puzzli, porozrzucanych po rożnych aplikacjach, a każdy z członków widzi inne elementy układanki. w końcu jest zorganizowany w ramach jednej przestrzeni [workspace], i każda nowa osoba dołączająca do projektu w naturalny sposób ma dostęp do całości, w zorganizowany sposób, zamiast musieć odtwarzać całość.

podsumowując

dawno nie byłem tak hmmm… podekscytowany żadnym gadżetem czy apką [Polacy raczej się nie ‘get excited about’, ale o dziwo tym razem, to słowo pasuje]. a zatem to pierwszy i na pewno nie ostatni wpis w tym temacie. aplikacja ma potencjał, ale bez wiedzy o jej wadach i problemach można zrobić srogą krzywdę całemu projektowi, niemal przez przypadek.

na koniec jeszcze jedna drobna dygresja dotycząca oczywistej oczywistości – że choćby nie wiem jakie narzędzia i jak intuicyjne dostarczyć, trzeba chęci nauczenia się pracy nimi/z nimi. niejednokrotnie zdarzyło mi się pracować w projekcie, gdzie SP był podstawą pracy grupowej, współdzielenia doqmentów, w projekcie oczywiście wykwalifikowani i wielokrotnie certyfikowani inżynierowie… a tam w bibliotece pliki typu:

  • Projekt XYZ_v1.o.docx
  • Projekt XYZ_v1.2.docx
  • Projekt XYZ_v2.o.docx

…przyzwyczajenia prawdziwą naturą człowieka…

eN.