2019-12-21
Odpowiadając krótko – wtedy kiedy chcesz mieć pewność że jakieś instrukcje wykonają się NA PEWNO i ZAWSZE. Nawet w bardzo dziwnych i nietypowych sytuacjach.
Zazwyczaj np. uważamy, że kod w funkcji po słowie return się nie wykona:
def DoSomething(a,b):
c=a+b
return c
c=3+3
return c
DoSomething(1,1)
i rzeczywiście tak jest:
Out[66]: 2
Ale kiedy popatrzysz na taki zwariowany kod:
def TestTryCatchFinally(a,b):
try:
print('starting TRY')
c = a / b
print('ending TRY')
return c
except:
print('starting EXCEPT')
c = b / a
print('ending EXCEPT')
return -1
finally:
print('starting FINALLY')
c = 9
return c
print('ending FINALLY')
i wywołasz go tak:
TestTryCatchFinally(1,2)
starting TRY
ending TRY
starting FINALLY
Out[68]: 9
To zobacz, że kod z bloku finally się wykonał, pomimo tego, że wykonywał się kod w try!
TestTryCatchFinally(1,0)
starting TRY
starting EXCEPT
ending EXCEPT
starting FINALLY
Out[69]: 9
Tutaj finally wykonał sie mimo błedu w try
TestTryCatchFinally(0,0)
starting TRY
starting EXCEPT
starting FINALLY
Out[70]: 9
A tutaj mimo błedu w try i except.
Finally jest „nie do zabicia”… dlatego stosujemy go np. do zamknięcia plików, usunięcia roboczych danych itp.
2019-12-17
Programista bez debuggera, to jak mechanik bez klucza… to trzeba mieć!
Ostatnio bardzo popularnym narzędziem do tworzenia skryptów w Pythonie jest Jupyter Notebook. Niestety domyślnie menu nie ma polecenia debug… o ile w pojedynczych komórkach po prostu wykonujesz mało skomplikowane polecenia, to ewentualne dodanie polecenia print powinno pomóc i rozwiązać problem. Co jednak zrobić jeżeli masz nieco bardziej złożoną pętlę i coś w niej nie działa?
W charakterze kłopotliwego kodu wystąpi u nas taka pętla:
i = 1
while i < 10:
print(i)
i += 3
if i % 2 == 0:
i -= 2
print('done i={}'.format(i))
W sumie - nic skomplikowanego, ale zmienna sterująca i jest raz zwiększana, raz zmiejszana... idzie się pogubić, zwłaszcza po drinku.
W celu debuggowania w trybie "znakowym" wykonaj takie czynności:
import pdb
- a następnie w miejscu, gdzie chcesz aby zatrzymał się program dodaj linijkę:
pdb.set_trace()
Czyli nasza kłopotliwa pętelka może teraz wyglądać tak:
import pdb
i = 1
while i < 10:
print(i)
i += 3
if i % 2 == 0:
pdb.set_trace()
i -= 2
print('done i={}'.format(i))
Po uruchomieniu w/w kodu, kiedy wykonanie dotrze do linijki
pdb.set_trace()
program zatrzyma się prezentując proste pole do wprowadzenia instrukcji:

jeśli wpiszesz "i" i naciśniesz enter, to debugger wyświetli w odpowiedzi aktualną wartość i. W okienku możesz też podawać bardziej skomplikowane wyrażenia, np sprawdzać ile wynosi i % 2 lub czy i %2 == True itp.
Kiedy chcesz aby zostało wykonane kolejne polecenie wystarczy nacisnąć n i enter. A kiedy masz już dosyć przetwarzania linijka po linijce naciśnij c i enter
Można też wpisać help, na co debugger odpowie listą dostępnych poleceń, lub wpisać help <nazwa_komendy> i wtedy zobaczysz opis polecenia:

Nasza sesja debuggowania mogłaby więc koniec końców wyglądać tak:

2019-11-30
Ciekawe, czy tylko ja jestem rozczarowany narzędziem do szukania plików w Windows….
Kiedy przeszukuję pliki tekstowe i chcę znaleźć pliki zawierające określony tekst, wystarczy w powershellu skorzystać z polecenia select-string:
Select-String -Path *.sql -Pattern „@ENV”
Krótkie, wygodne, a przede wszystkim SKUTECZNE – jak unixowy grep
2019-11-22
Jak się uczyć to najlepiej przez praktykę, dlatego właśnie w kursie MS Excel Tips and Tricks oprócz video mamy też mnóstwo zadań. Zadania zebrane w całość można pobrać i na własne potrzeby wykorzystywać ile się chce. Dostęp do materiałów video i potrzebnych plików ćwiczeniowych jest możliwy dopiero po zapisaniu się na kurs, ale już sam wgląd w zadania może pomóc się zorientować o czym opowiadamy na kursie.
Zbiór zadań do kursu „MS Excel Tips & Tricks”
MS Excel Tips and Tricks – zbiór zadań
A w tym podręczniku seria zadań na temat: codziennych czynności wykonywanych w Excel i Office, triki dotyczące bezpieczeństwa, formatowania danych, specyficznych typów danych, kontroli drukowania arkuszy, wskazówki dotyczące synchronizacji i porównywania arkuszy, korzystania z dodatków Excela, wstawiania i formatowania wykresów i wprowadzenie do makr.
Kurs
Tutaj dostępne są ćwiczenia. Jeżeli chcesz zobaczyć wykłady do tych lekcji oraz sprawdzić rozwiązania, zapraszam na kurs dostępny na platformie Udemy:

Kto może skorzystać z ćwiczeń?
- na własną rękę i na własny użytek każdy
- jeśli podręcznik ma być wykorzystany na kursie Excela, w ośrodkach szkoleniowych, w firmowych wewnętrznych akademiach, w szkołach, uczelniach, ma być w części lub w całości wykorzystany jako element innej publikacji, ma podlegać replikacji w jakiejkolwiek formie – prosimy o kontakt w celu ustalenia warunków licencji
Niech moc będzie z Tobą!
2019-11-21
Podobno można się nauczyć pływania z książki. Podobno nawet komuś się to udało… Moim zdaniem, kiedy chodzi o naukę rzeczy praktycznych, trzeba to robić praktycznie. Dlatego właśnie jeśli chcesz poznać Linuxa, a dokładniej rzecz biorąc podstawowe komendy BASH-a, to możesz skorzystać z darmowego zbioru zadań, który można za darmo pobrać klikając w poniższy link
Zbiór zadań do kursu „Linux – linia komend dla początkujących”
Darmowy zbiór zadań „Linux – linia komend dla początkujących”
A w tym podręczniku seria zadań na temat: operacji na plikach i katalogach, edytorze vim, uprawnień do plików i katalogów, kont użytkowników, grup, poleceń użytkowych (who, whoami, users, uname, last, lastb, alias, expr, bc, date, cal, head, tail, less, more, cmp, diff), skryptowania i komunikacji (echo, read, write, mesg, wall, zarządzania plikami i dyskami (du, ds, tar, zip, unzip, gzip), skryptowania (grep, find, cut, wc, sort, uniq, tr, tree), zarządzania procesami (ps, pstree, top, kill).
Kurs
Tutaj dostępne są ćwiczenia. Jeżeli chcesz zobaczyć wykłady do tych lekcji oraz sprawdzić rozwiązania, zapraszam na kurs dostępny na platformie Udemy:

Kto może skorzystać z ćwiczeń?
- na własną rękę i na własny użytek każdy
- jeśli podręcznik ma być wykorzystany na kursie Linuxa, w ośrodkach szkoleniowych, w firmowych wewnętrznych akademiach, w szkołach, uczelniach, ma być w części lub w całości wykorzystany jako element innej publikacji, ma podlegać replikacji w jakiejkolwiek formie – prosimy o kontakt w celu ustalenia warunków licencji
Niech moc będzie z Tobą!
2019-11-06
Zacznijmy od tego, że aktualizacje to generalnie dobra rzecz. Niezaktualizowany system jest po prostu niebezpieczny, bo hakerzy czekają na „łosiów” ze starym system, na którym nie trzeba się specjalnie natrudzić żeby się włamać.
Trzeba jednak też przyznać, że są sytuacje kiedy aktualizacje chcesz wyłączyć, bo prostu transfer po sieci, miejsce na dysku, albo stabilność pracy są dla ciebie ważniejsze niż bezpieczny system. Tak było w przypadku mojego testowego systemu Windows zainstalowanego pod Hyper-V i który co kilka dni/tygodni wraca do swojego pierwotnego stanu. Nie ma potrzeby o aktualizować po każdym przywróceniu….
Niestety Microsoft bardzo dba o to żeby aktualizacje się wykonywały, dlatego kiedy chcesz je SKUTECZNIE wyłączyć, najlepiej zrobić to na WSZYSTKIE możliwe sposoby:
- Zmień nazwę pliku wykorzystywanego do aktualizacji C:\Windows\System32\wuaueng.dll
Oryginalnie do tego pliku nie masz uprawnień, więc musisz (1) przejąć plik na własność (2) nadać sobie uprawnienie pełna kontrola (3) zmienić nazwę pliku (4) zrestartować Windows
- W services.msc wyłączyć (disable) usługę Windows Update
Wyłączyć aktualizacje w rejestrze:
W kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsoSvc wartość Start zmienić na 4
W kluczu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc wartość Start zmienić na 4
- Wyłączyć zadanie z harmonogramu zadań odpowiedzialne za sprawdzanie aktulizacji. Znajdziesz je w Task Scheduler Library -> Microsoft -> Windows -> Windows Update.
- W przypadku wersji PRO wyłączyć aktualizacje w GPO. W tym celu należy uruchomić gpedit.msc i w ścieżce Computer Configuration\Administrative Templates\Windows Components\ Windows Update \ Specify Intranet Microsoft update service location zmienić adresy na tak bezsensowne jak można
- Zmienić ustawienia połączenia sieciowego na taryfowe (metered connection)
Jeśli potrzeba więcej ilustracji to można zerknąć tu:
How To Turn Off Windows 10 Updates Permanently.
2019-11-04
Na serwer FTP trzeba wysłać plik. Czemu by nie skorzystać z powershella?
$ftp = "ftp://server_name//dir_name/subdir/"
$user = "username"
$pass = "password"
$destinationFileName = 'filename.csv'
$sourceFileName = 'c:\temp\filename.csv'
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)
$uri = New-Object System.Uri($ftp+$destinationFileName)
$webclient.UploadFile($uri, $sourceFileName)
Wszystko pięknie, ale plik miał domyślne uprawnienia, które należało zwiększyć. W takim przypadku niestety trzeba wrócić do interfejsu znakowego program ftp.exe dostępnego w Windows. Parametr s pozwala na wywołanie ftp razem z plikiem komend, który zawiera w sobie instrukcje jakie mają być wykonane przez ftp. Jeśli chcieć opisać to w powershell, to należałoby
- zbudować plik komend
- uruchomić ftp wskazując parametrem s na ten plik
W samym pliku z komendami następująca instrukcja określa jakie uprawnienia mają mieć nowotworzone pliki:
$ftpServer = 'server_name'
$remoteDir='/dir_name/subdir'
$user = "user_name"
$pass = "password"
$fileName = 'filename.csv'
#create a command file
$commandFile = 'c:/temp/commandfile.txt'
"open $ftpServer" | Out-File $commandFile -Force
"$user" | Out-File $commandFile -Append
"$pass" | Out-File $commandFile -Append
"cd $remoteDir" | Out-File $commandFile -Append
"quote SITE UMASK 113" | Out-File $commandFile -Append
"put $fileName" | Out-File $commandFile -Append
"disconnect" | Out-File $commandFile -Append
"quit" | Out-File $commandFile -Append
# run ftp pointing to command file
&ftp.exe -s:$commandFile
Zobacz też tu:
Powershell: Upload pliku przez FTP