Mapowanie klawiszy w macOS bez Karabiner Elements – HOWTO

Karabiner Elements to popularne narzędzie do mapowania klawiszy na macOS. Narzędzie jest wygodne, ale ma parę problemów. Trzeba instalować oddzielny program, były ostrzeżenia o legacy system extension, które opisywałem przy okazji opisu upgrade. Nie testowałem, ale podobno nie działa po upgrade do Big Sur.

Większość znanych mi ludzi wykorzystuje Karabiner Elements do prostego celu: zamiany prawego option z prawym command. Wszystko po to, żeby wygodnie, czyli tak samo jak na PC, wpisywać polskie znaki diakrytyczne. Robiłem tak i ja, a program był w ogóle zupełnym must have na macOS.

Mapowanie klawiszy w macOS bez Karabiner Elements - obrazek
Źródło: wygenerowane za pomocą https://thumbnail.ai/

Ponieważ znalazłem dziś kolejną osobę, która nie wiedziała, że się da, a wykorzystywała właśnie w tak prosty sposób, podzielę się sposobem, który sprzedał mi znajomy z pracy (dzięki J!). Rozwiązanie nie wymaga dodatkowych programów, wystarczy wbudowane oprogramowanie systemowe.

hidutil property --set '{"UserKeyMapping":
[{"HIDKeyboardModifierMappingSrc":0x7000000e7,
  "HIDKeyboardModifierMappingDst":0x7000000e6}]}'

Powyższe polecenie spowoduje, że klawisze zostaną przemapowane tymczasowo, do restartu systemu. Aby osiągnąć ten efekt na stałe, tworzymy plik ~/Library/LaunchAgents/mapkeys.plist o zawartości:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.nanoant.KeyRemapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000e7,"HIDKeyboardModifierMappingDst":0x7000000e6}]}</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Oczywiście rozwiązanie można stosować także do bardziej skomplikowanego mapowania klawiatury. Jednak jak wspominałem na początku, większości użytkowników powinien wystarczyć ww. gotowiec. Po takim zabiegu, skoro mamy działającą aleternatywę, można odinstalować Karabiner Elements zupełnie.

UPDATE: Przydatne linki
Generator mapowania
Gotowa do użycia wersja online

Linux i powiadomienia via Telegram – HOWTO

Czemu zdecydowałem się na wysyłanie powiadomień via Telegram? Kiedyś wysyłałem SMSy z powiadomieniami, nawet zrobiłem skrypt do wygodnej wysyłki SMSów z CLI. Czasy trochę się zmieniły, telefony zostały zastąpione smartfonami. Po co płacić za SMSy, kiedy można wysłać powiadomienie inaczej, w dodatku za darmo? Wybrałem powiadomienia wysyłane przez Telegram.

logo Telegram
Źródło: https://www.freepnglogos.com/images/telegram-logo-944.html

Oczywiście istnieją inne metody. Zawsze można było wysyłać maile, które są co prawda darmowe, ale z założenia miewają opóźnienia. No i niekoniecznie chcemy dostawać powiadomienie na telefonie o każdym mailu. Gdy rozpoznawałem temat obiecująco wyglądały natywne powiadomienia push na telefon, ale ich uruchomienie nie jest proste. I nie do końca są darmowe, jak widać.

Znajomi zachwalali Telegram i jego możliwości, jeśli chodzi o tworzenie botów. Nawet kiedyś podchodziłem do uruchomienia bota Telegram, ale wydało mi się to wtedy skomplikowane. I samo stworzenie bota, i sama interakcja. Czyli wysłanie komendy, by coś wykonał i odesłał wynik. Dodatkowo nie ma czegoś takiego jak prywatny bot, a uwierzytelnianie czy też sprawdzanie nadawcy trzeba robić samodzielnie. Przynajmniej tak wyczytałem w necie. Może jestem przewrażliwiony, ale za bardzo to wszystko pachniało mi RCE. No i w końcu stawianie bota, gdy zależy tylko na prostych powiadomieniach, to overkill.

Wczoraj odświeżyłem temat i… okazało się, że wysłanie powiadomienia przez Telegram jest proste. I w sumie nie potrzeba żadnych bibliotek, by wysłać powiadomienie – wystarczy tak naprawdę curl.

Przygotowanie wysyłki powiadomień przez Telegram

Aby wysyłać wiadomości, potrzebne są nam dwie rzeczy: TOKEN oraz CHATID.

  1. Korzystając z bota BotFather w Telegramie stwórz swojego bota[1] (/newbot)
  2. Zapisz otrzymany TOKEN (np. 1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12)
  3. Znajdź swojego bota, wpis /start
  4. Przejdź na https://api.telegram.org/bot<yourtoken>/getUpdates
    W naszym przypadku na https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/getUpdates
  5. Znajdź ciąg „id” dla „from” (np. „id”:723456789). Wartość jest szukanym CHATID.

Wysyłka powiadomień przez Telegram

Najprostszym wariantem wysłania powiadomienia jest wywołanie curl w postaci

curl "https://api.telegram.org/botTOKEN/sendMessage?chat_id=CHATID&parse_mode=Markdown&text=WIADOMOŚĆ"

Czyli na przykład, dla powyższych danych uzyskanych podczas konfiguracji

curl "https://api.telegram.org/bot1234567890:AABBccddeeff-ABCDEFGHIJabcdefghi12/sendMessage?chat_id=723456789&parse_mode=Markdown&text=to jest test śćżń ĄŁĘĆ https://zakr.es/"

Po wydaniu tego polecenia powinniśmy otrzymać na w kliencie Telegram telefonie wiadomość. Dodatkowo z klikalnym linkiem.

Nieco bardziej eleganckie, użyteczne i tylko odrobinę bardziej skomplikowane jest wysyłanie przy pomocy Pythona i biblioteki requests. Zostało ono opisane opisane we wpisie How to create a telegram bot and send messages with Python, który był bezpośrednią inspiracją tego wpisu. Znajdziecie tam również dokładną, ilustrowaną instrukcję konfiguracji bota. A o samych botach Telegram może będzie innym razem.

[1] Owszem, miało być bez bota. Ale się nie da – bot musi być. Nie musi obsługiwać żadnych komend ani wdawać się w interakcje, ale ten twór jest tak naprawdę telegramowym botem.

Kluby

Zainspirowany aktywnościami na czytanych blogach, zapisałem się ostatnio do klubów. Kluby są dwa: 512 KB oraz 250 KB. Pierwszy dotyczy rozmiaru strony nieskompresowanej, drugi – moim zdaniem istotniejszy – skompresowanej. Znaczy wykonana została optymalizacja WordPress.

Niby nic nowego, bo o optymalizacji strony i poprawnym działaniu na urządzeniach moblilnych pisałem już dawno. Jednak z WordPressa o rozmiarze nieskompresowanym mniejszym niż 512 KB jestem zadowolony. Tym bardziej, że chodzi o wersję z dodatkowymi statystykami Matomo. Okazuje się, że nie potrzeba żadnej magii, by osiągnąć taki wynik. Nawet motyw jest jeden z domyślnych.

Tak, to tylko główna. Poszczególne wpisy są nieco większe. Tak, nie mam obrazków we wpisach. Z obrazkami na głównej byłoby więcej. Z drugiej strony mógłbym zmniejszyć liczbę wpisów. Ale nie o to chodzi, przynajmniej mi. Nie musi być jak najmniej, ważne, by zwrócić uwagę na rozmiar przy zachowaniu wyglądu i funkcjonalności. Czyli żeby nie było bloatu.

Jeśli komuś naprawdę zależy na minimalizacji, to jedynym sensownym kierunkiem wydaje mi się strona statyczna. Statycznych generatorów stron/blogów jest wiele. Podzielone językami i licencjami, czyli dla każdego coś miłego. Do tego lekki motyw i wyniki są nieporównywalnie lepsze. Co można zobaczyć na przykładzie Wattmeter (geneza). Niestety, funkcjonalność jakby nie ta. Przede wszystkim brakuje sensownej możliwości spięcia komentarzy.

Swoją drogą fajnie widać, jak na przestrzeni lat zmieniają się narzędzia do badania optymalizacji strony. Kiedyś korzystałem z surowo wyglądającego webpagetest.org, teraz rządzi znacznie ładniejszy GTmetrix.

Puchną także same strony. Strona główna starego bloga (Jogger.pl) to 27 requestów, 227 KB skompresowane, 674 KB nieskompresowane. Jednak od obu tych wartości należałoby odjąć odpowiednio 152 KB oraz 461 KB związane z reklamami i widgetem wyszukiwarki Google. Czyli zostałoby 75 KB oraz 213 KB, przed jakąkolwiek optymalizacją. Ten blog ma 11 requestów i odpowiednio 102 KB i 334 KB, ale już po optymalizacji. Czyli jakąś połowę więcej.

Optymalizacja WordPress

Do odchudzania strony głównej, czyli optymalizacji WordPressa korzystałem z wtyczki Asset CleanUp. Więcej o polecanych/używanych wtyczkach WordPress pisałem pisałem tu, więc aktualizuję.

Gdyby ktoś chciał powalczyć samodzielnie to poniżej instrukcja, albo raczej krótkie wskazówki na temat tego, co ustawiłem w tej wtyczce. Nie jest to komplet zmian optymalizacyjnych, część rzeczy mogę robić w innych wtyczkach lub samym serwerze WWW. Czyli klasyczne YMMV, a każda zmiana wymaga testów.

  • Optimize CSS – wszystkie opcje włączone. Defer, minimize, cache.
  • Optimize JavaScript – nie dotykany.
  • HTML Source CleanUp – usunięte kilka tagów. Nie podaję które, bo mocno zależy od konfiguracji.
  • Google Fonts – włączone Remove Google Fonts. Widać różnicę w wyglądzie, ale na testach wyszło mi, że jest tylko odrobinę gorzej. Różnica w rozmiarze – znaczna.
  • CSS & JS Manager – ze strony głównej (i tylko z niej!) usunąłem ładowanie plugina Subscribe to Comments Reloaded. Jest potrzebny tylko na stronach wpisów. Podobny los spotkał tam jquery-core oraz jquery-migrate.