Python: skrótowe zapisy operacji matematycznych

2020-10-04

Powiem coś w tajemnicy. Programiści to straszne lenie! Opłaca im się główkować tylko po to, żeby nacisnąć mniej klawiszy! Może nie do końca jest to prawda, ale przynajmniej plotka brzmi wiarygodnie? Prawdziwym celem skrócenia pewnych zapisów jest często uproszczenie czytelności kodu, zobacz:

Zamiast pisać

n = n +1

(czyli zwiększ o 1), można napisać

n += 1

zamiast pisać

n = n * 3

(czyli powiększ o 3), można napisać

n *= 3

Pewnie sam się domyślasz, jak zapisać

n = n – 2

albo

n = n / 3

By Rafał Kraik in Python

Python: Znaczenie parametru origin w funkcji imshow()

2020-10-04

Funkcja imshow ma parametr origin, który określa kierunek rysowania. Interpretacja danych zapisanych w macierzy może być naniesiona na wykres na różne sposoby. Przecież macierz (pomijając jej kształt) to po prostu jakiś ciąg liczb. Ten ciąg liczb można odwzorowywać na wykrsie tak, że początkowe wartości będą narysowane po lewej na dole, albo u góry. Za to właśnie odpowiada ten parametr.  Czytaj dalej »

By Rafał Kraik in Python

PowerShell: ScheduledJob się nie wykonuje. Brak błędów

2020-09-20

Dziwna sprawa. W PowerShellu utworzony ScheduledTask nie uruchamia się. PowerShell go widzi, ale nie wiadomo, co powoduje, że zaplanowane zadania nie startują. Oto kod tworzący taki przykładowy job:

Dokładniejsza analiza logu harmonogramu zadań wskazała, że przyczyną jest brak uprawnień. Dziwne, bo polecenia uruchamiał lokalny administrator. Niestety konto tego administratora pochodziło z Azure AD. Ponieważ na komputerze jest jeszcze zdefiniowane inne konto administratora, to najprostszym rozwiązaniem było wskazanie, że zadanie ma się uruchamiać z wykorzystaniem tego innego konta. Na to inne konto można wskazać parametrem credential:

I teraz program działa jak ta lala. Jeśli zechcesz je usunąć wykonaj”

By Rafał Kraik in Power Shell

SSRS: Interaktywne sortowanie kolumny

2020-09-01

W raporcie tworzonym w SSRS można zezwolić użytkownikowi na wykonywanie dowolnego sortowania wg wybranej kolumny. Kolumna ta nie musi pochodzić bezpośrednio z bazy danych – może powstawać jakkolwiek w data set. W tym celu wystarczy tylko odpowiednio zmienić właściwości kolumny:

By Rafał Kraik in SSRS

Windows: Włączanie historii harmonogramu zadań

2020-08-20

Task Scheduler lub po polsku Harmonogram Zadań służy do planowania i wykonywania powtarzalnych zadań na systemie. Narzędzie samo w sobie jest bardzo użyteczne… o ile działa… A jak nie działa? Do sprawdzenia wyników, warto by zajrzeć do historii wywołań takiego zadania. Historię można znaleźć przechodząc do określonego zadania w Harmonogramie. Problem w tym, że często ta historia jest wyłączona:

Włączenie historii jest proste, ale trzeba bardzo uważnie klikać myszką. Obawiam się, że projektanci aplikacji mogli by nieco poprawić usability tego programu. Należy kliknąć prawym przyciskiem myszy na „Task Scheduler” i wybrać polecenie „Enable All Tasks History”. Zazwyczaj kiedy tam klikasz, tej pozycji nie ma w menu! Skandal! Żeby polecenie było widoczne kliknij najpierw lewym przyciskiem myszy na Task Scheduler. W centralnej części okna pojawi się wtedy podsumowanie statusu zadań (okno startowe programu). Dopiero kolejne kliknięcie spowoduje, że w menu pojawi się poszukiwana opcja.

Po jej wybraniu właściwie od razu będzie można przeglądać historię uruchamianych zadań.

R: nazywanie kolumn macierzy z prefixem

2020-08-13

R pozwala nazywać wiersze i kolumny macierzy. Dość często do nazywania wierszy i kolumn stosowane są pewne stałe, jak np. nazwy miesięcy, nazwy dni tygodnia, albo po prostu numery kolumn/wierszy. A co jeśli chcesz żeby macierz została nazwana czymś w rodzaju:

x_<numer>

Popatrz na kolejny przykład. Najpierw tworzymy macierz m z 12 kolumnami i 1o wierszami

Kiedy chcesz nazwać kolumny numerami poprzedzonymi prefiksem x_, wystarczy skonstruować wektor, który z takich danych się składa. Do łatwego zbudowania takiego wektora można wykorzystać paste(), które jako argumenty przyjmuje wartości do połączenia:

wynik będzie taki:

By Rafał Kraik in R

SQL: CLR bad przy zaladowaniu CLR

2020-08-06

Oj oj. Nowe funkcjonalnosci sa tak bardzo zachwalane przez MS. Uzyj tego uzyj tamtego. Problem tylko w tym, ze te nowosci czesto sie ze soba gryza albo z czasem sa modyfikowane lub wycofywane (!)

CLR na SQL ma rzeczywiscie szerokie mozliwosci, bo pozwla na korzystanie ze wszelkich funkcji .NET z poziomu SQL. Konfiguracja CLR juz od samego poczatku skladala sie z kilku krokow, a od wersji 2017 zostala jeszcze zmieniona. Tutaj nie znajdziesz pelnego opisu jak konfigurowac CLR, ale wylacznie opis jednego bledu I rozwiazania.

SQL 2016. Baza ma ustawiony parameter TRUSTWORTHY, a jej wlascicielem jest konto XXXX (login domenowy). Do bazy zostal zaladowany CLR z PERMISSION SET UNSAFE. Podczas korzystania z funkcji pojawia sie blad:
Msg 10314, Level 16, State 11, Line 113
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65538. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error:
System.IO.FileLoadException: Could not load file or assembly ‚xxxxxxxxx, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
System.IO.FileLoadException:
   at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
   at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
   at System.Reflection.Assembly.Load(String assemblyString)

Najwazniejsza czesc to An error relating to security occurred. Co ciekawe ten sam assembly zaladowany do innej bazy, ktrej wlascicielem jest sa – dziala! Chwila refleksji I czytania dokumentacji pozwolila ustalic, ze to wlasciciel bazy danych musi miec odpowiednie uprawnienie:

U mnie dziala, ale warto pamietac, ze w nowszych systemach assembly nalezy podpisywac, a do certyfikatu tworzyc stowarzyszony login, ale to zdecydowanie cos na dluzszy artykul…

By Rafał Kraik in SQL