Bash: testowanie składni skryptu bez uruchamiania

2018-12-21

Podczas uruchamiania skryptu wyświetlił się komunikat o błędzie składni. Prosta sprawa – wystarczy znaleźć literówkę lub brakujący nawias. I tak rzeczywiście było.

Problem jednak pojawił się inny. Normalnie skrypt jest uruchamiany automatycznie i zawiera czynności, których nie można uruchomić ot tak sobie. Nie ma więc możliwości sprawdzenia, czy skrypt po poprawce jest już rzeczywiście dobry.

I tu z pomocą przychodzi opcja -n dla bash

bash -n script_file
  • Jeśli w skrypcie znajduje się błąd, to polecenie wyświetla komunikat o znalezionym błędzie
  • Jeśli skrypt nie ma błędów składniowych, nic nie jest wyświetlane

Oczywiście polecenie nie sprawdza, czy nie masz literówek w nazwach zewnętrznych programów, np. nie wykryje polecenia whoo jako błędnego. To pewnie literówka, ale opcja -n sprawdza tylko składnię. Ale to i tak całkiem nieźle, jeżeli chodzi o sprawdzenie jednej drobnej poprawki 🙂

Co ciekawe jest nawet strona, która pozwala sprawdzić skrypt online: Czytaj dalej »

By Rafał Kraik in Linuxy

Powershell: echo nie działa!

2018-12-19

Popatrz na taki skrypt:

function doSomething()
{
 param($times)

 $i = 0
 while ($i -lt $times)
 {
   echo "$i"
   $i++
 }
}

doSomething 3

Jeśli go uruchomisz, to wszystko działa jak należy. Funkcja jest wywoływana, polecenie echo wyświetla wyniki. Ale wystarczy drobna zmiana: Czytaj dalej »

By Rafał Kraik in Power Shell

Helpdesk: Pulpit zdalny: The connection cannot proceed because authentication is not enabled…

2018-12-13

Ustawienia RDP znacznie się zmieniły od czasów starusieńkiego Windows XP, gdzie zazwyczaj wystarczyło włączyć RDP i już! Teraz podczas połączenia sprawdzanych może być wiele komponentów, a cel jest jeden – zwiększone bezpieczeństwo. Sprawdzane jest bezpieczeństwo nawiązanego połącznia, testuje się czy komputer źródłowy i docelowy są tymi maszynami za które się podają i oczywiście sprawdza się, czy użytkownik, który sie łączy ma do tego uprawnienia.

W sieci domowej można czasami nieco odpuścić kwestie aż tak dokładnej weryfikacji wszystkich ustawień.

Jeżeli wiec przy nawiązywaniu połączenia widzisz komunikat:

Remote Desktop Connection
The connection cannot proceed because authentication is not enabled and the remote computer requires that authentication be enabled to connect.

to obejściem problemu może być wpisanie w rejestrze:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
klucza “SecurityLayer” na 0

Oczywiście takie rzeczy tylko w bezpiecznej, przytulnej, domowej sieci 😉

By Rafał Kraik in Helpdesk

SQL: Sprawdzanie czy tabela jest wykorzystywana w widokach, funkcjach lub procedurach

2018-11-25

Od czasu do czasu administrator lub programista musi nieco posprzątać w swojej bazie danych. Sprzątanie może polegać na usunięciu tabel, które nie są już potrzebne, w których kiedyś ktoś planował przechowywać jakieś dane, ale się rozmyślił i zostają osierocone, nieużywane tabele. Wykonanie polecenia DROP jest proste, szybkie i przyjemne, ale przed usuwaniem warto sprawdzić, czy tabela nie jest wykorzystywana w widokach, procedurach i funkcjach.

Jeżeli inne obiekty były tworzone z wykorzystaniem opcji with SCHEMA_BINDING, to zadanie jest proste, bo sama próba usunięcia obiektu, do którego odwołują się inne obiekty skończy się błędem. Gorzej jeśli ta opcja nie była wykorzystywana, ale i tak masz na to rozwiązanie.

Oto przykład jaki rozważymy: Czytaj dalej »

By Rafał Kraik in SQL

Python: zmiana wartości w DataFrame dla wierszy spełniających określony warunek

2018-11-25

DataFrame może zawierać dużo wierszy. Czasami chcesz zmienić wartość w określonej kolumnie, ale tylko pod warunkiem, że dane w wierszu spełniają jakiś określony warunek.Zacznijmy od  instrukcji tworzącej prosty data frame:

import pandas as pd
import numpy as np
 
df = pd.DataFrame(columns=['values','values2'])
 
for i in range(10):
 df.loc[i] = [i,i*10]
 
df

Teraz kolej na sztuczkę. Trzeba znaleźć miejsca, gdzie w kolumnie values mamy spełniony jakiś warunek, powiedzmy values > 5

filter = df['values'] > 5
filter

filter to seria wartości True/False, gdzie True oznacza komórki spełniające warunek, a False – nie spełniające. Jak chcesz dostać z data frame, tylko te wiersze, które spełniają warunek piszesz tak:

df[filter]

a jak chcesz tylko te zmienić (tutaj np. wpisać wartość NaN), to piszesz tak:

df['values'][filter] = np.NaN
df

 

By Rafał Kraik in Python

Python: Pandas: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

2018-11-25

Popatrzmy na takie polecenie:

import pandas as pd

df = pd.DataFrame({'Name':['Jack','Sue',pd.np.nan,'Bob','Alice','John'],
'A': [1, 2.1, pd.np.nan, 4.7, 5.6, 6.8],
'B': [.25, pd.np.nan, pd.np.nan, 4, 12.2, 14.4],
'City':['Seattle','SF','LA','OC',pd.np.nan,pd.np.nan]})

df[['A','B']].fillna('?', inplace=True)

wynik to niestety ostrzeżenie:

SettingWithCopyWarning:

A value is trying to be set on a copy of a slice from a DataFrame

 See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

downcast=downcast, **kwargs) Czytaj dalej »

By Rafał Kraik in Python

Linux Fedora Workstation: Uruchomienie systemu w trybie znakowym

2018-11-25

Na systemie jest zainstalowany Linux Fedora Workstation w trybie graficznym. Z jakiegoś powodu uruchamianie grafiki zawodzi, ale śmiało można zostać przy systemie z wyłącznie interfejsem tekstowym. Jak zmienić domyślny sposób uruchamiania systemu, kiedy nie można się zalogować do interfejsu graficznego?

Podczas uruchamiania powinieneś zobaczyć menu:

 

naciśnij e. Powinieneś zobaczyć okienko jak poniżej. Musisz dopisać „3” w tym samym miejscu co zaznaczyłem na ilustracji poniżej. Linux może pracować na różnych run-level i właśnie run level 3 oznacza uruchomienie systemu w trybie znakowym z obsługą sieci i usługami sieciowymi (tylko grafika nie jest dostępna): Czytaj dalej »

By Rafał Kraik in Linuxy