javascript:(function(){
/* Szukamy wszystkich komórek w pierwszej kolumnie tabeli */
const firstColumnCells = Array.from(document.querySelectorAll(
'td:first-child, .mat-column-select, .cdk-column-select'));
if (firstColumnCells.length === 0) {
alert("Nie widzę kolumny z polami wyboru. Upewnij się, że lista
faktur jest w pełni załadowana.");
return;
}
/* console.log(`Znaleziono ${firstColumnCells.length} wierszy.
Zaznaczam pierwsze 10.`); */
/* Bierzemy pierwsze 10 wierszy danych */
const toClick = firstColumnCells.slice(0, 50);
toClick.forEach((cell) => {
/* Szukamy czegokolwiek klikalnego wewnątrz komórki (checkbox,
span, div) */
const interactive = cell.querySelector('mat-checkbox, .mdc-checkbox,
span, div') || cell;
['mousedown', 'mouseup', 'click'].forEach(t => {
interactive.dispatchEvent(new MouseEvent(t, {
bubbles: true,
cancelable: true,
view: window
}));
});
});
})();
czwartek, 7 maja 2026
Zaznaczanie faktur w KSeF
wtorek, 14 października 2025
Jak szybko zainstalować programy po instalacji systemu (aktualizacja: 20.04.2026)
@echo off rem Chmury plików i kopie zapasowe winget install Box.BoxSync winget install Dropbox.Dropbox winget install Google.GoogleDrive winget install Mega.MEGASync winget install Microsoft.OneDrive winget install Synology.ActiveBackupForBusinessAgent rem Edytory i pakiety biurowe winget install JanFiala.PSPad.x64 winget install Microsoft.Office winget install MiKTeX.MiKTeX winget install Notepad++.Notepad++ winget install TeXstudio.TeXstudio winget install TheDocumentFoundation.LibreOffice rem Komunikatory winget install Discord.Discord winget install Microsoft.Teams winget install SlackTechnologies.Slack rem Multimedia winget install Adobe.CreativeCloud winget install ByteDance.CapCut winget install dotPDN.PaintDotNet winget install IrfanSkiljan.IrfanView winget install IrfanSkiljan.IrfanView.PlugIns winget install Spotify.Spotify winget install VideoLAN.VLC rem Narzędzia winget install 7zip.7zip winget install ACLAP.DownloadHelperCoApp winget install Adobe.Acrobat.Reader.64-bit winget install AutoHotkey.AutoHotkey winget install Certum.SmartSignSimplySignDesktop winget install Cyanfish.NAPS2 winget install DJI.DJIAssistant2 winget install Ghisler.TotalCommander winget install Google.EarthPro winget install Malwarebytes.Malwarebytes winget install Microsoft.PowerToys winget install Microsoft.WindowsADK winget install Mozilla.Thunderbird.ESR.pl winget install Oracle.VirtualBox winget install PDFsam.PDFsam winget install Rufus.Rufus winget install SoftSea.FreePDFCompressor winget install Valve.Steam winget install voidtools.Everything winget install WinMerge.WinMerge winget install Xmind.Xmind rem Narzędzia programistyczne winget install ArduinoSA.IDE.stable winget install Git.Git winget install GitHub.GitHubDesktop winget install Hashicorp.Vagrant winget install HeidiSQL.HeidiSQL winget install Microsoft.VisualStudioCode winget install OpenJS.NodeJS winget install Oracle.JDK.17 winget install Python.Python winget install RaspberryPiFoundation.RaspberryPiImager winget install SmartBear.SoapUI rem Narzędzia sieciowe winget install Famatech.AdvancedIPScanner winget install JimRadford.SuperPuTTY winget install Microsoft.Sysinternals.RDCMan winget install Ookla.Speedtest.Desktop winget install OpenVPNTechnologies.OpenVPN winget install PuTTY.PuTTY winget install Splashtop.SplashtopBusiness winget install Splashtop.SplashtopStreamer winget install Symless.Synergy winget install WinSCP.WinSCP rem Przeglądarki winget install Google.Chrome winget install Hibbiki.Chromium winget install Mozilla.Firefox.DeveloperEdition.pl winget install Mozilla.Firefox.ESR.pl winget install Opera.Opera rem Sterowniki winget install ACS.UnifiedPCSCDriver winget install Dell.CommandConfigure winget install Dell.CommandUpdate winget install Jabra.Direct winget install HARMAN.AdobeAIR winget install Intel.IntelDriverAndSupportAssistant winget install Samsung.SmartSwitch rem Testowanie i informacja o sprzęcie winget install CPUID.CPU-Z winget install CPUID.HWMonitor winget install CrystalDewWorld.CrystalDiskInfo winget install Futuremark.FuturemarkSystemInfo winget install Microsoft.Sysinternals.ProcessExplorer winget install Microsoft.Sysinternals.Suite winget install SanDisk.Dashboard winget install TechPowerUp.GPU-Z winget install Unigine.SuperpositionBenchmark winget install Unigine.ValleyBenchmarkAby później aktualizacować te programy można wykorzystać kolejny plik .bat, który można uruchamiać z autostartu:
@echo off goto list :menu echo 1. Lista echo 2. Aktualizuj wszystkie echo 3. Linia polecen echo 0. Wyjscie echo. echo Jesli chcesz wylaczyc jakis program z aktualizacji automatycznych echo wybierz opcje 3 i wykonaj: echo winget pin add [Id] echo. choice /c 0123 /m "Ktora akcje wybierasz" if %errorlevel% == 1 goto exit if %errorlevel% == 2 goto list if %errorlevel% == 3 goto all if %errorlevel% == 4 goto cmd :list cls winget.exe upgrade echo. goto menu :all cls winget.exe upgrade --all echo. goto menu :cmd cls call cmd /k echo Aby wrocic wpisz: exit [Enter] goto list :exit exit :end
winget pin add Microsoft.AppInstaller winget pin add Microsoft.WindowsTerminal
sobota, 15 lipca 2023
Panel do gry SimRail (aktualizacja: 20.02.2025)
Od kilku miesięcy gram w polski symulator kolejowy SimRail. Niedawno na forum gry trafiłem na post pokazujący panel sterowniczy zrobione przez jednego z użytkowników. Natchnął mnie on do zrobienia podobnego. Postanowiłem zastosować Arduino Due - ma ono dwie wady - cenę i wielkość, ale ma też kilka zalet:
- ma dużo wyprowadzeń, a przycisków do obsługi jest stosunkowo dużo
- może emulować klawiaturę bez wgrywania dodatkowych zewnętrznych plików
- oprogramowanie jest bardzo proste
- elektryczne połączenia również są bardzo proste
Powoli dodaję kolejne przyciski, więc przyjemność gry z nowym panelem wciąż wzrasta.
Sprzęt:
- Arduino Due
- nakładka na Arduino Mega DFRobot DFR0921
- skrzynka narzędziowa Patrol Tandem B 400
- różne przełączniki monostabilne
Kod programu:
#include <Keyboard.h>
int i = 0;
int j = 0;
int stanKlawisza[54] = {};
void setup() {
for (int i = 2; i < 55; i++) {
if (stanKlawisza[i] == NULL) {
stanKlawisza[i] = HIGH;
}
pinMode(i, INPUT_PULLUP);
}
Keyboard.begin();
pinMode(49, OUTPUT);
}
// https://www.arduino.cc/reference/en/language/functions/usb/keyboard/keyboardmodifiers/
void loop() {
i = 23; // otwarcie drzwi lewych
j = 31; // otwarcie drzwi prawych
if (digitalRead(i) == LOW || digitalRead(j) == LOW) {
Keyboard.press('g');
delay(250);
Keyboard.release('g');
digitalWrite(49, HIGH); // zaświecenie kontrolki
}
i = 47; // zamknięcie drzwi
if (digitalRead(i) == LOW) {
digitalWrite(49, LOW); // wygaszenie kontrolki
Keyboard.press(178);
delay(1000);
Keyboard.release(178);
Keyboard.press('o');
delay(50);
Keyboard.release('o');
Keyboard.press('k');
delay(50);
Keyboard.release('k');
stanKlawisza[i] = HIGH;
}
klawisz(2, '=');
klawisz(3, '1');
klawisz(9, 179); // Tab
//klawisz(9, 178); // BACKSPACE
klawisz(22, '-');
klawisz(37, '\\');
klawisz(28, 220); // NUM /
klawisz(52, 218); // UP ARROW
klawisz(29, 217); // DOWN ARROW
klawisz(36, 221); // NUM *
klawisz(44, 235); // NUM .
klawisz(51, 226); // NUM 2
klawisz(30, 230); // NUM 6
klawisz(43, 232); // NUM 8
klawisz(39, 'h');
klawisz(23, 'i');
klawisz(53, 'j');
//klawisz(47, 'o');
klawisz(31, 'p');
klawisz(46, 'z');
klawisz(27, 'A');
klawisz(35, 'C');
i = 45; // radio
if (digitalRead(i) == LOW && stanKlawisza[i] == LOW) {
// nadawanie
Keyboard.press('`');
delay(50);
} else if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
// poczatek nadawania
Keyboard.press(128);
delay(50);
Keyboard.press('M');
delay(50);
Keyboard.release('M');
delay(50);
Keyboard.release(128);
delay(50);
Keyboard.press('`');
delay(50);
stanKlawisza[i] = LOW;
} else if (digitalRead(i) == HIGH && stanKlawisza[i] == LOW) {
// koniec nadawania
Keyboard.release('`');
delay(50);
Keyboard.press(128);
delay(50);
Keyboard.press('M');
delay(50);
Keyboard.release('M');
delay(50);
Keyboard.release(128);
delay(50);
stanKlawisza[i] = HIGH;
}
/*
i = 45; // hamulec - nastawnik czy nastawnik - hamulec
if ((digitalRead(i) == LOW && stanKlawisza[i] == HIGH) || (digitalRead(i) == HIGH && stanKlawisza[i] == LOW)) {
klawisz(4, 227); // NUM 3
klawisz(5, 233); // NUM 9
klawisz(7, 222); // NUM -
klawisz(8, 223); // NUM +
stanKlawisza[i] = LOW;
}
else if ((digitalRead(i) == LOW && stanKlawisza[i] == LOW) || (stanKlawisza[i] == HIGH)) {
*/
klawisz(4, 222); // NUM -
klawisz(5, 223); // NUM +
klawisz(7, 227); // NUM 3
klawisz(8, 233); // NUM 9
/*
stanKlawisza[i] = HIGH;
}
*/
i = 38; // wesołe Pendolino
if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
Keyboard.press('h');
delay(750);
Keyboard.release('h');
delay(250);
Keyboard.press('j');
delay(600);
Keyboard.release('j');
delay(300);
Keyboard.press('h');
delay(250);
Keyboard.release('h');
stanKlawisza[i] = HIGH;
}
}
void klawisz(int i, int l) {
if (digitalRead(i) == LOW && stanKlawisza[i] == HIGH) {
Keyboard.press(l);
delay(50);
stanKlawisza[i] = LOW;
}
if (digitalRead(i) == HIGH && stanKlawisza[i] == LOW) {
Keyboard.release(l);
delay(50);
stanKlawisza[i] = HIGH;
}
}
poniedziałek, 7 listopada 2022
niedziela, 21 sierpnia 2022
poniedziałek, 30 maja 2022
Zmiana daty pliku pod Windows (PowerShell)
Często wykonuję zrzuty ekranów, ale że tych ekranów mam kilka to na zrzutach widać zdecydowanie więcej niż jest mi potrzebne. Po wycięciu odpowiedniego fragmentu zmienia się data pliku. Jak ustawić ją na pierwotną wartość?
W PowerShelu wykonuję następujące polecenie:
czyli np:
(Get-Item "c:\Zrzuty ekranu\Zrzut ekranu 2022-01-11 16.32.58.png").LastWriteTime=("2022-01-11 16:32:58")
Ponieważ program, którym robię zrzuty czas zapisywany w nazwach plików rozdziela kropkami, a nie dwukropkami, to dla łatwiejszego przygotowania w Excelu listy poleceń do wykonania powyższe polecenie można rozszerzyć o zmianę tych znaków.
(Get-Item "c:\Zrzuty ekranu\Zrzut ekranu 2022-01-11 16.32.58.png").LastWriteTime=("2022-01-11 16.32.58").replace(".",":")
No właśnie, w Excelu. Jak zrobić żeby PowerShell sam pobierał listę plików z danego katalogu i pobierał wartości do zmiany?
piątek, 27 maja 2022
Zestaw do odbioru sygnałów ADS-B (ADSBexchange.com, FlightRadar24.com)
- Raspberry Pi
- Zero 2 W, 3B lub 4B (min. 512 MB RAM, WiFi lub ETH)
- zasilacz
- obudowa
- przejściówka z USB micro do USB A (tylko w przypadku Zero 2 W)
- karta pamięci micro SD 8 GB (najlepiej typu przemysłowego)
- odbiornik SDR
- tani zielony odbiornik SDR działa, jednak lepsze efekty można uzyskać z odbiornikami przeznaczonymi na to pasmo:
- FlightAware Pro Stick Plus - najdroższy, ale i najlepszy
- FlightAware Pro Stick - sprawdzi się, ale w innych warunkach i może wymagać filtrów
- ADSBexchange.com Blue - również bardzo dobry
- AirNav RadarBox FlightStick - najtańszy (najlepiej kupować na Amazon.de) dedykowany do odbioru ADS-B, a jednocześnie wciąż bardzo dobry
- antena na pasmo 1090 MHz ze złączem SMA-M
| Orientacyjne koszty | |
| Raspberry Pi Zero 2 W | 80,00 zł |
| zasilacz | 40,00 zł |
| obudowa | 16,00 zł |
| przejściówka | 6,00 zł |
| karta pamięci | 65,00 zł |
| odbiornik SDR | 70,00 zł |
| antena | 50,00 zł |
| razem: | 327,00 zł |
Oprogramowanie:
Udostępnianie danych zarówno do adsbexchange.com jak i do flightradar24.com.
Przy wysyłaniu danych do FlightRadar24 otrzymuje się abonament Business kosztujący 499,99 USD, czyli obecnie ok. 2126 zł rocznie. Podobnie przy wysyłaniu do AirNav RadarBox otrzymuje się abonament Business kosztujący 399,50 USD, czyli obecnie ok. 1698 zł rocznie. Zatem wydając trochę ponad 300 zł zyskuje się usługi warte rocznie ok. 4 tysięcy zł.
Zrzuty z mapy odbiornika
niedziela, 15 listopada 2020
piątek, 21 sierpnia 2020
poniedziałek, 2 marca 2020
Oferta ze szkoły językowej
czwartek, 23 stycznia 2020
środa, 7 sierpnia 2019
niedziela, 26 maja 2019
Aplikacja mObywatel i głosowanie do Parlamentu Europejskiego
Zagłosowałem z użyciem z mObywatela. Byłem pierwszą osobą legitymującą się w ten sposób. Wątpliwość pani z komisji wzbudził brak imienia ojca. Ale przewodniczący, którego widziałem chyba pierwszy raz w życiu, stwierdził "pan to pan" i dzięki temu nie musiałem się przyznać, że plastikowy dowód miałem w kieszeni.Ten brak jest rzeczywiście ciekawy bo nawet na dowodzie osobistym w najnowszym wzorze, tego z warstwą elektroniczną, imiona rodziców są obecne na jego rewersie. Samo głosowanie z użyciem aplikacji było możliwe dzięki uchwale Państwowej Komisji Wyborczej.
Sama aplikacja ma ułatwiać obywatelom wylegitymowanie się w różnych sytuacjach życiowych, np na poczcie lub przy stłuczce. W tym drugim przypadku ujawnia się chyba największy jej minus. Dwóch użytkowników aplikacji może się wymienić danymi i je potwierdzić, ale tylko gdy używają telefonów z tym samym systemem operacyjnym. Czyli użytkownik iPhone'a nie potwierdzi danych użytkownika telefonu z Androidem i odwrotnie.
wtorek, 27 listopada 2018
Zmiana telefonu
niedziela, 28 października 2018
Kody promocyjne [aktualizacja: 23.10.2022]


Wystarczy, że dokonasz rezerwacji za pomocą linku polecającego. Gdy wrócisz z wyjazdu, otrzymasz 50 zł nagrody.

Możesz użyć linka polecającego lub kodu: 10291153

Jeśli za pomocą tego linka utworzysz konto Dropbox i zainstalujesz aplikację Dropbox na swoim komputerze otrzymasz 500 MB premiowego miejsca.
Dzięki kodowi stanisaw.sze1 dostaniesz 20 zł do wykorzystania na pierwszy przejazd taksówkami FREE NOW d. MyTaxi.

Wykorzystaj kod rpd636622027eec37c, a dostaniesz 10% rabatu na pierwszą przesyłkę.

Wykorzystaj kod GDH2UZ2U, a po dokonaniu pierwszej płatności przez Google Pay otrzymasz 40 zł na zakup gier i innych aplikacji.

Zakładasz lub prowadzisz działalność gospodarczą? Potrzebujesz usług księgowych - skorzystaj z iFirma - zarejestruj się i w ciągu 5 dni wprowadź jeden z poniższych z kodów:
4WPICYGKG
J6HRQ0PV0
8V53MMXMB
0NNZPJHXA
AUE0HK7X8
TENMN3EFN
M2I0J0MFA
004R2LEPD
LFSEX19JA
EF3AMR2HG

Kupując bilet przez KOLEO podaj kod: STANI566G. Po zakończeniu podróży dostaniesz 5 zł.

Dzięki kodowi RS6A4GI dostaniesz 3 zł do wykorzystania na przejazdy elektrycznymi hulajnogami Lime. Więcej kodów na hulajnogi jest dostępne na stronie NaHulajce.pl.

Użyj tego adresu lub przy składaniu zamówienia wpisz kod promocyjny StaSze816, a uzyskasz rabat.

Użyj tego adresu lub przy składaniu zamówienia wpisz kod promocyjny sjs791, a uzyskasz promocyjne punkty w NTFY.
wtorek, 23 października 2018
sobota, 30 czerwca 2018
wtorek, 12 czerwca 2018
Pojemna chmura
wtorek, 5 czerwca 2018
Świnki w Mountain View
Jakie dźwięki wydają świnki w Mountain View?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
chrome, chrome, chrome...
piątek, 15 grudnia 2017
Rozmowa ze sztuczną inteligencją [2017-12-20]

Chciałem dziś przekierować paczkę kurierską na inny adres. Na początku skorzystałem z linka na stronie przewoźnika. Okazało się, że niestety nie da się bo prawdopodobnie nadawca nie przekazał mojego e-maila i numeru telefonu. Zadzwoniłem zatem na infolinię.
- Po sygnale podaj numer przesyłki. Beeep - słyszę w słuchawce.
- 1 7 5 8 8 5... - wystukuję jedenastocyfrowy numer przesyłki na klawiaturze telefonu, ale w jego połowie odzywa się automat:
- Nie udało się rozpoznać numeru, po sygnale spróbuj jeszcze raz.
- Nie powiedział tonowo, tylko żeby podać, może trzeba mówić? - myślę szybko
- Beeep - znów odzywa się automat.
- Jeden siedem pięć osiem osiem pięć... - dyktuję cały numer przesyłki
- Rozpoznany numer to jeden siedem pięć osiem osiem pięć... - automat prawidłowo powtarza wszystkie cyfry - Czy numer został prawidłowo rozpoznany?
- Tak! - szybko odpowiadam na pytanie automatu.
- Czy numer został prawidłowo rozpoznany? - ponownie słyszę pytanie, i znów odpowiadam:
- Tak!
- Nie udało się rozpoznać numeru. Zzzz - nastąpiło rozłączenie.
PS. Swoją drogą to ta paczka to nie jest taka zwykła paczka - posiada zdolność bilokacji!

PPS. Już wiem jak należy odpowiadać żeby automat zrozumiał - "Dobrze", "Źle". Śmieszne jest, że pierwszą cześć menu IVR przechodzi się tonowo, drugą głosowo, a trzecią tak lub tak: "Proszę powiedzieć X lub wybrać tonowo X". Natomiast bardzo denerwujące jest, że jak się znajdzie opcję porozmawiania z konsultantem to najpierw leci tekst typu "przepraszamy za oczekiwanie, wszyscy konsultanci są zajęci", a potem następuje rozłączenie i ewentualnie można spróbować jeszcze raz zadzwonić.
%20sjs%202023-07-15%2017.14.12%20crop.jpg)












_sjs_2022-06-27_15.56.11_ADSB.jpg)
