Porównanie DJI DLOG z i bez LUT-a
Nagranie z wykorzystaniem DJI MINI 4 Pro w trybie DLOG. Obróbka wideo w programie DaVinci Resolve.
Stary Cmentarz na Podgórzu oraz Dwie Wieże Ciśnień
Kilka ciekawych obiektów zlokalizowanych na Podgórzu – osiedlu Torunia.
Stary Cmentarz Parafialny, Golgota z 1911 roku. Kolejowa wieża ciśnień przekształcona na budynek mieszkalny. Wieża ciśnień przy stacji Kluczyki.
Filmiki z wczorajszego biegania
Toruński most im. Józefa Piłsudskiego nocą z lotu drona
Kolejne próby nagrywania dronem DJI MINI 4 PRO. Zdjęcia zarejestrowane chwilę po WOŚP – Światełku do nieba. Przedstawiają pięknie oświetlony most.
Wczorajszy WOŚP
Wielka Orkiestra Świątecznej Pomocy w Toruniu. W dniu 28 stycznia 2024 roku punktualnie o 20:00 przy kapitalnym nagłośnieniu odbył się niesamowity pokaz laserów.
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]);
Nieszawka nocą
Widok z drona nocą zimową porą. Film zarejestrowano w pobliżu skrzyżowania ulic Nieszawska i Zagrodowa. Temperatura powietrza -5 st. C
Wał w okolicy Krowiego Mostku
Film nagrany za pomocą drona Dji Mini 4 Pro.
Lokalizacja: Toruń, ul. Wiślana w okolicach „Krowiego mostku”.
Widok na ul. Nieszawską, węzeł kolejowy oraz na pola przy wale.
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 ('
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
);