Archiwum kategorii: dział it

Zmiana portu SSH w Ubuntu na OVH

Zmiana portu SSH w Ubuntu zainstalowanym na serwerze VPS OVH może nie być taka oczywista.

Podmianę portu należy wykonać w pliku /lib/systemd/system/ssh.socket w sekcji „Socket” dla wartości „ListenStream”.

[Unit]
()

[Socket]
ListenStream=22
()

[Install]
(…)

Po zapisaniu pliku wykonać komendy restarujace demona oraz soket:

# systemctl daemon-reload
# systemctl restart ssh.socket

ST-LINK V2 + STM32F103C8T6 + CLion

Z reguły zaczynając przygodę z Arduino pierwszą metodą debugowania jaką się wybiera jest wrzucanie do terminala stanów za pomocą funkcji „Serial.print”.
Bardziej efektywne jest użycie debugera.
Poniżej przykład jak to osiągnąć w systemie MacOS z wykorzystaniem PlatformIO oraz JetBrains CLion na urządzeniu STM32 F103C8T6 podłączonym za pośrednictwem ST-LINK V2.

Czytaj dalej ST-LINK V2 + STM32F103C8T6 + CLion

Timer w React Component

Wywoływanie rekurencyjne funkcji w React-cie z wykorzystaniem „setTimeout” i odwoływanie się w nich do stanów jest dość problematyczne. Taka funkcja „widzi zamrożony stan” pomimo tego, że może go zmieniać.

Poniżej sposób na timer (wykonywanie akcji z opóźnieniem) z możliwością dostępu do stanów w komponencie Reacta.

const [timerCounter, setTimerCounter] = useState(0);

useEffect(() => {
    const id = setTimeout(
        () => setTimerCounter(timerCounter + 1),
        1000
    );
    console.log("TIK", timerCounter);
    return () => clearTimeout(id);
}, [timerCounter]);

Przykład heartbeat-a odpytującego API

const [doReloadTime, setDoReloadTime] = useState(1000);
const [fetchState, setFetchState] = 
    useState<string>("waiting");

// aktualizacja danych
const onData = useCallback((data: any) => {
    // ...
}, []);

// pobieranie danych z API
const reloadData = useCallback(() => {

    setFetchState("waiting");

    fetch(...)
        .then(res => {
            onData(res);
            setFetchState("done");
            setDoReloadTime(1000);

        })
        .catch(err => {
            onData(null);
            setFetchState("error");
            setDoReloadTime(5000);
        });
}, [onData]);

// heartbeat
useEffect(() => {
    if (!reloadData || doReloadTime <= 0)
        return;

    setTimeout(() => {
        reloadData();
    }, doReloadTime);

    setDoReloadTime(0);
}, [doReloadTime, reloadData]);

Alternatywa dla STRING_SPLIT w MSSQL

Poniżej przykład podzielenia tekstu i wprowadzenie go do tabeli. Ciąg znaków odseparowany od siebie np. przecinkiem. Dane w tabeli można dalej przetwarzać w SQL.

Poniższy przykład również pomaga obejść błąd
’STRING_SPLIT’ is not a recognized built-in function name.

Przykładowo mamy ciąg znaków odseparowany przecinkiem:
declare @str2arr as varchar(200);
set @str2arr = '5, 10, 12';

Aby podzielić ciąg znaków (String) i wprowadzić dane do tymczasowej tabeli należy wykonać:
declare @Str2ArrTable as table(p int);

insert into @Str2ArrTable
select trim(split.a.value('.', 'VARCHAR(100)'))
from (select Cast ('' + Replace(@str2arr, ',', '') + '' as XML) as Data) as A
cross apply data.nodes ('/M') AS Split(a);

Dane znajdują się w tabeli. Aby je podejrzeć:
select * from @Str2ArrTable;

Dane z tabeli można wykorzystań np. w innym zapytaniu SQL jako warunek:
select * from Dokumenty where typDok in (
select p from @Str2ArrTable
);

Archiwum PKCS12 na potrzeby Let’s Encrypt SSL

Przechowywanie certyfikatu Let’s Encrypt w archiwum PKCS #12 na potrzeby np. Java Boot Spring HTTPS.

Generowanie pliku P12 za pomocą komendy „openssl”:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name twoja-domena.pl -CAfile chain.pem -caname root

Konfiguracja Boot Spring w pliku „application.properties”:
server.port=443
server.ssl.key-store=/sciezka/do/pliku/keystore.p12
server.ssl.key-store-password=twoje_haslo_dp_pliku_p12
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=twoja-domena.pl