Pokazywanie postów oznaczonych etykietą teleinformatyka. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą teleinformatyka. Pokaż wszystkie posty

czwartek, 7 maja 2026

Zaznaczanie faktur w KSeF

Z pomocą AI napisałem poniższy skrypt, który można dodać jako zakładkę w Firefoxie (możliwe, że działa też w innych przeglądarkach, ale nie sprawdzałem). Skrypt zaznacza 10 checkboxów, ale jeśli na stronie jest ich więcej to po kolejnym kliknięciu zaznacza kolejne 10, a potem kolejne 10 itd. Jeśli faktur na liście jest tylko 10 to działa jako przełącznik: zaznaczone - niezaznaczone.
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
            }));
        });
    });
})();

wtorek, 14 października 2025

Jak szybko zainstalować programy po instalacji systemu (aktualizacja: 20.04.2026)

W niektórych przypadkach na początku trzeba zainstalować Instalator aplikacji.

Zamiast mozolnie ściągać instalki i je uruchamiać wystarczyć stworzyć plik .bat z poniższą zawartością. Przed jego uruchomieniem usuń niepotrzebne linijki.
@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.ValleyBenchmark
Aby 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
Warto zablokować aktualizację dwóch programów - bo i tak nie idzie (samego wingeta i terminalu) wykonując poniższe polecenia:
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:

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, 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:

(Get-Item "[sciezka z nazwą pliku]").LastWriteTime=("[data w formacie RRRR-MM-DD GG:MM:SS]")

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)

Sprzęt:
  1. Raspberry Pi
    1. Zero 2 W, 3B lub 4B (min. 512 MB RAM, WiFi lub ETH)
    2. zasilacz
    3. obudowa
    4. przejściówka z USB micro do USB A (tylko w przypadku Zero 2 W)
  2. karta pamięci micro SD 8 GB (najlepiej typu przemysłowego)
  3. odbiornik SDR
    1. tani zielony odbiornik SDR działa, jednak lepsze efekty można uzyskać z odbiornikami przeznaczonymi na to pasmo:
    2. FlightAware Pro Stick Plus - najdroższy, ale i najlepszy
    3. FlightAware Pro Stick - sprawdzi się, ale w innych warunkach i może wymagać filtrów
    4. ADSBexchange.com Blue - również bardzo dobry
    5. AirNav RadarBox FlightStick - najtańszy (najlepiej kupować na Amazon.de) dedykowany do odbioru ADS-B, a jednocześnie wciąż bardzo dobry
  4. antena na pasmo 1090 MHz ze złączem SMA-M 

Orientacyjne koszty
Raspberry Pi Zero 2 W80,00 zł
zasilacz40,00 zł
obudowa16,00 zł
przejściówka6,00 zł
karta pamięci65,00 zł
odbiornik SDR70,00 zł
antena50,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

poniedziałek, 2 marca 2020

Oferta ze szkoły językowej

Jakiś czas do mojej firmy zadzwoniła pani z jakiejś szkoły językowej. Bardzo chciała sprzedać nam swoje kursy, "z dowolnego języka". Powiedziałem zatem, że chcemy nauczyć się COBOLa. Obiecała odezwać się z ofertą. Niestety więcej już się nie zadzwoniła.

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

W starym telefonie wyłączyłem blokadę ekranu żebym nie musiał go wciąż odblokowywać przy przenoszeniu się na nowy. Efekt był taki, że zaczęły wyskakiwać komunikaty "Włącz blokadę ekranu jeśli chcesz dalej płacić telefonem!". No to odinstalowałem Google Pay. Teraz wyskakuje komunikat "Włącz blokadę ekranu jeśli chcesz dalej płacić telefonem!", który w tle ma przycisk "Zainstaluj Google Pay".

niedziela, 28 października 2018

Kody promocyjne [aktualizacja: 23.10.2022]

https://pixabay.com/pl/money-pieni%C4%85dze-kasa-2298511/

Booking.com

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


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


Dropbox.com
Jeśli za pomocą tego linka utworzysz konto Dropbox i zainstalujesz aplikację Dropbox na swoim komputerze otrzymasz 500 MB premiowego miejsca.


FREE NOW MyTaxi

Dzięki kodowi stanisaw.sze1 dostaniesz 20 zł do wykorzystania na pierwszy przejazd taksówkami FREE NOW d. MyTaxi.


Furgonetka

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

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

iFirma
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


Koleo

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


Lime
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.


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

ntfy
Użyj tego adresu lub przy składaniu zamówienia wpisz kod promocyjny sjs791, a uzyskasz promocyjne punkty w NTFY.

wtorek, 12 czerwca 2018

Pojemna chmura

Aktywowałem sobie konto w chmurze Asusa. Po zalogowaniu wyświetlił mi się komunikat: "Twoje 2GB konto nie zostało jeszcze potwierdzone. Kliknij link w mailu. Kliknąłem po czym wszedłem sobie w szczegóły konta. Okazało, że konto nazywa się WebStorage_3G_Free i ma pojemność 5,5 GB. Nie ma to jak konsekwencja, z drugiej strony dobrze, że te wielkości nie są zastosowane odwrotnie.

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ć.