Kurs Python dla średnio zaawansowanych za darmo

2019-06-26

Jak zwykle pierwsze dni premiery nowego kursu na Udemy to moje „happy hours” 🙂  Tylko teraz i tylko przez ograniczony czas kurs jest ZA DARMO, FREE, GRATIS. Zapisuj się i używaj. To takie moje DZIĘKUJĘ za to wszystko z czego sam korzystam szukając rozwiązań i pomocy w Internecie. Bawcie się dobrze!

Link do kursu

Obecnie Python to jeden z najprężniej rozwijających się języków programowania. Jest stosowany prawie wszędzie, począwszy od automatyzowania środowiska IT, budowania typowych aplikacji desktopowych, tworzenia gier, a kończąc na działalności naukowej, zwłaszcza w dziedzinie Data Science i sztucznej inteligencji. Język, który wypada znać i to najlepiej na odpowiednio dobrym poziomie.

W moim zamiarze ten kurs, to drugi etap nauki programowania w Pythonie. Jeśli ukończyłeś już mój kurs dla początkujących – to tak, ten kurs jest dla Ciebie. Jeśli Pythona znasz z innych źródeł i po prostu chcesz się nauczyć czegoś więcej, to jak sądzę też dobrze trafiłeś. Właściwie łatwiej mi powiedzieć dla kogo ten kurs nie jest. Jeśli nie znasz podstaw zacznij od kursu dla początkujących, a jeśli znasz Pythona bardzo dobrze, to może zainteresuj się zastosowaniami Pythona studiując kurs „Data Science, analiza danych w Python i PANDAS”

Tutaj nie omawiam już podstaw -te musisz znać. Pętle, zmienne, typy, listy, funkcje, wyjątki, sama instalacja Pythona – tego tu nie ma. To co jest? Znaczne poszerzenie tych wiadomości. Odkrycie drugiego dna. Klasy, funkcje, typy, konwersje typów, sztuczki i zastosowania tych sztuczek, wyjątki, iteratory, generatory, context manager. Cel jaki sobie stawiam, to poruszane tu zagadnienia omówić od A-Z, tak aby już do nich w przyszłości nie trzeba było wracać.

Zobaczysz różnego rodzaju funkcje i właściwości obiektów i elementów języka Python. Nie ograniczamy się tu jednak do powiedzenia „jest taka funkcja”. Przy każdej z nich zobaczysz praktyczny przykład jak i kiedy z tej funkcji można skorzystać.

Samo obejrzenie filmu raczej zbyt wiele nie nauczy. Dlatego właśnie po każdej lekcji masz quiz, a zaraz potem zadanie do samodzielnego rozwiązania. Praktyka czyni mistrzem, więc namawiam do rozwiązywania tych zadań. Zejdzie Ci na tym pewnie dużo czasu, ale uwierz mi – to nie będzie czas stracony. Gdyby zadanie było za trudne albo niezrozumiałe, to masz do dyspozycji propozycję rozwiązań. Czuj się, jakbyś był na normalnym klasowym kursie, tyle tylko że stworzonym dla Ciebie.

Kończąc ten kurs będziesz już – jakby nie patrzeć na poziomie zaawansowanym. Dasz radę samodzielnie stosować zaprezentowane tu techniki, jak również ze zrozumieniem czytać kod napisany przez innych. Będziesz gotowy do specjalizacja w kierunku, w jakim Ty u siebie Pythona chcesz zastosować.

Zachęcam do przejrzenia spisu treści kursu. Nie będę go tutaj po raz przytaczał, bo to około 180 jednostek. Zajrzyj do przykładowych darmowych lekcji, oceń czy ta forma kursu Ci się podoba. Jeśli tak – wejdź na wyższy poziom znajomości Pythona.

Python dla średnio zaawansowanych – programuj sprytnie! Zapraszam!

By Rafał Kraik in Aktualności

Python: przypisanie wartości w słowniku a metoda setdefault

2019-05-06

Popatrz – wynik obu skryptów jest taki sam:

country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'}
country_leader['FR'] = 'Macron'
print(country_leader)
country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'}
country_leader.setdefault('FR','Macron')
print(country_leader)

dlaczego? Bo ‚FR’ na oryginalnej liście nie było.  Zarówno przypisanie, jak i setdefault dodaje nowy kraj z jego leaderem.

Ale w następnym przykładzie jest inaczej. Tutaj zmieniamy Szydło na Morawiecki dla PL. Zapis dla PL już był i to polecenie dokonało zmian – Szydło zamienia się na Morawiecki:

country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'}
country_leader['PL'] = 'Morawiecki'
print(country_leader)

ale tutaj instruujemy Pythona, że należy dodać zapis PL jeśli go tam nie ma i zainicjować go ‚Morawiecki’

country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'}
country_leader.setdefault('PL', 'Morawiecki')
print(country_leader)

Sęk w tym, że PL było na oryginalnej liście, więc nie dodaliśmy PL i nie wpisaliśmy ‚Morawiecki’. Została Szydło.

Kiedy używać setdefault?

Korzystanie z setdefault jest best practice zamiast takiego kodu, który osobno sprawdza, czy PL jest na liście i jeśli nie, to dodaje taki zapis. setdefault pozwala to zrobić w jednym kroku!

country_leader = { 'DE' : 'Merkel' , 'PL' : 'Szydlo'}
if 'PL' not in country_leader:
    country_leader['PL'] = 'Morawiecki'
print(country_leader)
By Rafał Kraik in Python

SQL: SSIS: Pełny transaction log wywołany przez SSIS Server Maintenance Job

2019-05-03

Jeśli na serwerze z zainstalowaną usługą SSIS I bazą danych SSISDB znajdziesz job „SSIS Server Maintenance Job” w statusie failed, a w error logu dodatkowo odnajdziesz informacje o pełnym logu transakcyjnym tej bazy, to masz przed sobą nieco pracochłonny process, jednak sprawa jest do opanowania!

Skoro log transakcyjny się zapełnia to transakcje są za duże. Trzeba je więc zmiejszyć… Oto jak:

Zajrzyjmy najpierw do joba. Ma on 2 job steps:

Każdy job step to po prostu wywołanie procedury:

EXEC [internal].[cleanup_server_retention_window]

Procedury rozpoczynają się od pobrania parametrów:

SELECT @retention_window_length = CONVERT(int,property_value)
FROM [catalog].[catalog_properties]
WHERE property_name = ‚RETENTION_WINDOW’

Oczywiście prarametry te wpływają na to ile danych będzie kasowanych. No więc, chyba mamy rozwiązanie!

Wystarczy odczytać aktualną wartość parametru np. „RETENTION_WINDOW”, zamapiętać ją (bo na koniec chcemy wrócić do oryginalnej wartości), zmienić na większą (lub mniejszą w zależności od tego jaki parameter zmieniasz – ale zawsze chodzi nam o kasowanie mniejszej ilości danych). Po zmianie uruchomić procedure – nawet niekoniecznie z joba, można po prostu uruchoamiać wybraną procedure I możliwości są dwie:

-jeśli się udało – zmieniamy wartość parametru na bliższą wartości oryginalnej

-jeśli się nie udalo – zmieniamy wartość parametru na dalszą od wartości oryginalnej

 

 

By Rafał Kraik in SQL

Windows Server: Cluster: Disk problem: Clear-ClusterDiskReservation

2019-04-27

Podczas przełączenia clustra windows 2016 stało się coś dziwnego. Wskutek z grubsze nieznanej przyczyny wypadł jeden z dysków. Sytuację udało się naprawić, cluster był już sprawny, ale jeden ze starych dysków clustra przestał być widoczny…

  • diskpart widziamontowania pod literę dysku pojawiał się błąd:
DISKPART> assign letter k
There is no volume specified.
Please select a volume and try again.
  • podobnie działo się przy korzystaniu z narzędzi graficznych – dysk był raportowany jako RAW i nie można było usyskać dostępu do jego danych
  • podczas dodawania dysku do available storage pojawiał się komunikat mówiący, że nie ma dysków dostępnych do dodania

Czytaj dalej »

SQL: Uzyskiwanie nazwy instancji SQL w job SQL Agent

2019-04-25

Największą trudnością w automatyzowaniu administracji jest takie napisanie skryptu, które pozwoli uruchamiać dany skrypt w dowolnym środowisku bez modyfikacji.

Tym razem napisałem skrypt w powershellu, który można uruchamiać w jobie SQL Agent. Jedno z zadań tego skryptu było podłączenie się do BIEŻĄCEJ instancji SQL i wykonanie update na tabeli. Po cichu założyłem sobie, że kiedy agent uruchamia job typu powershell i wykonuje polecenie:

Invoke-SQLCmd $query

to połączenie zostanie wykonane do BIEŻĄCEJ instancji. Niestety. Połaczenie było wykonywane do DOMYŚLNEJ instancji. Kiedy więc mój skrypt uruchomił się na instancji nazwanej – dochodziło do błędu Login Failed…

Jest na to rada. Można korzystać z dostępnych zmiennych. W skrypcie powershell dodałem na początku:

$serverInstance = "$(ESCAPE_DQUOTE(SRVR))"

a potem wykonując update na bazie danych:

Invoke-SQLCmd $query -ServerInstance $serverinstance

I znowu wszystko się udało 🙂

SQL: Error 14274: Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server

2019-04-24

A to ci dopiero!

Mój skrypt powinien utworzyć job-y jeden po drugim. Szczerze mówiąc, poszczególne joby zostały wyklikane w interfejsie graficznym, a potem zeskryptowane i połączone w jeden duży skrypt. Poczas uruchamiania tego dużego skrptu pojawiał się błąd:

Msg 14274, Level 16, State 1, Procedure msdb.dbo.sp_add_job, Line 132

Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server.

Kluczowe w tym błędzie są następujące objawy:

  • Tworzenie joba za pomocą osobnego skryptu udaje się bez problemu
  • Tworzenie joba w ramach jednego skryptu kończy się błędem

To jednoznacznie wskazuje, że błąd jest związany z wartością zmiennych, które zmieniają swoją wartość podczas tworzenia pierwszego joba. Szczęśliwie tych zmiennych nie ma za wiele. Dodanie następującej linijki tuż przed procedurą sp_add_job rozwiązało problem:

SET @jobId = NULL

 

By Rafał Kraik in SQL

Powershell – uzyskiwanie nazwy dnia tygodnia

2019-03-29

Chcesz wydobyć z daty nazwę dnia tygodnia? No problem!

Zobacz następujące propozycje:

PS C:\> get-date -format "dddd"
piątek
PS C:\> get-date | select -expand dayofweek
Friday
PS C:\> (get-date).DayOfWeek
Friday
PS C:\> (get-date).ToString("dddd")
piątek

Teraz wynik takiego polecenia wystarczy zapisać do zmiennej i gotowe, np.:

$dayOfWeek =  (get-date).ToString("dddd")
By Rafał Kraik in Power Shell