Kuba Kodzi

yay w moim odczuciu działa najlepiej, kiedy jego output jest pokolorowany. Od którejś wersji to nie jest domyślne zachowanie, ale można je włączyć z powrotem.

W tym celu wyedytuj plik /etc/pacman.conf tak, aby w sekcji Misc options była odkomentowana linijka

Color

Diagnostyka:

# locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME=en_GB.UTF-8
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY=en_GB.UTF-8
LC_MESSAGES=en_GB.UTF-8
LC_PAPER=en_GB.UTF-8
LC_NAME="en_GB.UTF-8"
LC_ADDRESS=en_GB.UTF-8
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT=en_GB.UTF-8
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=
# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX

Rozwiązanie

Upewnij się, że pakiet glibc-locale jest zainstalowany.

Nie jestem fanem używania więcej niż jednego monitora do pracy przy komputerze. Uważam, że to nie przyspiesza pracy bardziej niż sensowne skonfigurowanie swojego systemu operacyjnego i ogarnięcie skrótów klawiaturowych, a wręcz może spowolnić pracę, z uwagi na ciągły context switching.

Jestem za to fanem Presenter Console – funkcji w LibreOffice Impress, która pozwala na jednym monitorze odpalić prezentację na pełnym ekranie, a na drugim wyświetlić podgląd aktualnego slajdu oraz następnego slajdu, wraz z notatkami. Jest to niezmiernie pomocne przy prowadzeniu różnego rodzaju szkoleń – gdy wiem, jaki slajd będzie następny, mogę nawiązać do niego jeszcze zanim się pokaże, co uspójnia moją narrację.

Gdy prowadzę szkolenia offline, wszystko działa sprawnie – projektor działa jako drugi ekran, a na ekranie laptopa mam Presenter Console. Chciałem jednak mieć podgląd na następne slajdy także w sytuacji, gdy prowadzę warsztaty zdalnie, np. przez Zoom. Domyślna konfiguracja LibreOffice sprawia, że Presenter Console włącza się tylko wtedy, gdy do komputera jest podłączony więcej niż jeden ekran. Na szczęście można to zmienić.

Wyszukiwanie online może podsunąć rozwiązania polegające na implementowaniu „wirtualnego ekranu”, ale to wydawało mi się wysoce niepraktyczne. Po dłuższych poszukiwaniach okazało się, że można kazać LO włączyć Presenter Console niezależnie od ilości ekranu. W tym wątku wspomniana jest opcja StartAlways pod kluczem org.openoffice.Office.PresenterScreen ukryta w menu Tools > Options > LibreOffice > Advanced. Wystarczy wyszukać po StartAlways. Ustawienie jej na true sprawia, że przy uruchomieniu pokazu slajdów otwierają się dwa nowe okna – jedno pełnoekranowe z aktualnym slajdem, drugie, także pełnoekranowe, z Presenter Console.

Przy prowadzeniu prezentacji udostępniam uczestnikom okno z aktualnym slajdem, a sam wyświetlam sobie tylko okno z Presenter Console.

Napotkałem problem, gdzie odpalanie mu4e w moim emacsie rzucało błąd:

(void-function make-closure)

Problem rozwiązywał się, gdy instalowałem nowszą, niestabilną wersję mu4e (1.5). Nie chciałem jednak korzystać z 1.5, z uwagi na to, jak ta wersja obsługuje załączniki. Moja pamięć mięśniowa się buntowała. Chciałem zostać przy 1.4

Po dłuższym dociekaniu znalazłem przyczynę problemu – instalowałem mu4e z AUR i przy kompilacji nie były czyszczone pliki skompilowane (.elc).

Przeszedłem do katalogu /usr/share/emacs/site-lisp/mu4e i odpaliłem:

find -name '*.elc' | xargs -L 1 sudo rm

Zrestartowałem Emacsa. Problem zniknął 👍

#emacs #hotfix

  1. Wildcardowy certyfikat dla domeny: certbot certonly --agree-tos --email kontakt@sealcode.org --manual -d '*.dep.sealco.de'

  2. Konfiguracja nginx:

server {                                                                                                                                                                                                           
 listen 80;                                                                                                                                                                                                        
 listen [::]:80;                                                                                                                                                                                                   
 server_name *.dep.sealco.de;                                                                                                                                                                                      
 return 301 https://$host$request_uri;                                                                                                                                                                             
}                                                                                                                                                                                                                  
                                                                                                                                                                                                                   
log_format jenkins $proxy_host $upstream_addr;                                                                                                                                                                     
                                                                                                                                                                                                                   
server {                                                                                                                                                                                                           
 listen 443 ssl;                                                                                                                                                                                                   
 server_name ~^(?<hostport>[0-9]+)\.dep\.sealco\.de$;                                                                                                                                                              
 ssl_certificate /etc/letsencrypt/live/dep.sealco.de/fullchain.pem;                                                                                                                                                
 ssl_certificate_key /etc/letsencrypt/live/dep.sealco.de/privkey.pem;                                                                                                                                              
 include /etc/letsencrypt/options-ssl-nginx.conf;                                                                                                                                                                  
 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;                                                                                                                                                                    
                                                                                                                                                                                                                   
 access_log /var/log/nginx/jenkins.access.log jenkins;                                                                                                                                                             
 location / {                                                                                                                                                                                                      
   proxy_pass http://127.0.0.1:$hostport$request_uri;                                                                                                                                                              
   access_log /var/log/nginx/jenkins.access.log jenkins;                                                                                                                                                           
           proxy_http_version 1.1;                                                                                                                                                                                 
        proxy_set_header X-Forwarded-Host $host;                                                                                                                                                                   
        proxy_set_header X-Forwarded-Server $host;                                                                                                                                                                 
        proxy_set_header X-Real-IP $remote_addr;                                                                                                                                                                   
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                                                                                                                                               
        proxy_set_header X-Forwarded-Proto $scheme;                                                                                                                                                                
        proxy_set_header Host $http_host;                                                                                                                                                                          
        proxy_set_header Upgrade $http_upgrade;                                                                                                                                                                    
        proxy_set_header Connection 'upgrade';                                                                                                                                                                     
        proxy_pass_request_headers on;                                                                                                                                                                             
 }                                                                                                                                                                                                                 
}    

  1. Zainstaluj pakiet mu z AUR
  2. Dodaj do ~/.emacs.d/init.el:
(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e/")
(require 'mu4e)

RSS jest generowany Huginnem.

Odwiedź stronę http://wyszukiwarka.gunb.gov.pl/ i zadaj swoje parametry wyszukiwania (nb wyszukiwanie po id obszaru jest chyba zbugowane, mi bardziej niezawodnie działa wyszukiwanie po nazwie miejscowości).

Wykonaj wyszukiwanie i skopiuj jego URL. Przekopiuj też id sesji z ciasteczka.

Następnie w Huginnie utwórz nowego Website Agent i skonfiguruj go następująco:

{
  "expected_update_period_in_days": "30",
  "url": "URL_DO_WYNIKOW_WYSZUKIWANIA",
  "type": "html",
  "mode": "on_change",
  "extract": {
    "url": {
      "css": ".table-responsive td a",
      "value": "concat(\"http://wyszukiwarka.gunb.gov.pl\", @href)"
    },
    "title": {
      "css": ".table-responsive td:nth-child(4)",
      "value": "normalize-space(.)"
    },
    "description": {
      "css": ".table-responsive tbody tr",
      "value": "normalize-space(.)"
    }
  },
  "headers": {
    "User-Agent": "curl/7.64.0",
    "Accept": "*/*",
    "Cookie": "PHPSESSID=ID_SESJI_Z_COOKIESA"
  }
}

Nie wiem czy headery User-Agent i Accept są tutaj potrzebne, ale działa, więc nic nie grzebałem dalej. Pozostaje sprawdzić, jak długo sesja pozostaje aktywna i czy nie trzeba będzie jej odświeżać i czy serwis nie pyta ponownie o captchę. Jeżeli tak będzie, to trzeba będzie dostosować częstotliwość uruchamiania agenta (aktualnie próbuję z odpalaniem go raz dziennie)

Lista decyzji jest tutaj: https://uodo.gov.pl/pl/p/decyzje

Kod w JS do wyciągnięcia wszystkich dat decyzji UODO:

copy(
  Array.from(
    document.querySelectorAll(".d-none.d-sm-inline-flex.float-sm-right")
  )
    .map((e) =>
      e.textContent
        .trim()
        .replace(/[\n ]+/g, " ")
        .replace(/^[0-9]+ /g, "")
    )
    .reverse()
    .join("\n")
);

Potem wklejam do pliku txt i w bashu generuję plik csv:

cat uodo.txt | sed 's/ r.//g' | awk '{print "," $2 " " $1}' | uniq -c  > uodo.csv

Dzisiaj napotkałem potrzebę podmiany treści html-a za pomocą nginx-a służącego za reverse proxy. Dowiedziałem się o istnieniu modułu sub_filter:

http://nginx.org/en/docs/http/ngx_http_sub_module.html

jednak nie działał on w połączeniu z proxy_pass.

Dodanie:

proxy_set_header Accept-Encoding ""; 

rozwiązało problem, co tłumaczy ten komentarz na SO

#hotfix #nginx

Dzisiaj po aktualizacji systemu (Manjaro) napotkałem dziwne glitche w widoku Overview:

https://video.kuba-orlik.name/videos/watch/58a8ac64-d03e-47f2-bb5b-094e4eeb6298

Wyłączanie wtyczek do Chrome i zmiana motywów nie pomogła.

Okazało się, że problemem był motyw do GDM wgrany przez Manjaro.

Usunięcie pakietu manjaro-gdm-branding rozwiązało problem

#hotfix #linux #manjaro #gnome