Mac i problemy z locale w terminalu – HOWTO

Jak pisałem, częściowo siedzę na macu. Zrozumiałem ludzi, którzy narzekali na obsługę systemu klawiaturą w macach. Wiele skomplikowanych combo na trzy palce. Ale to mogła by być kwestia przyzwyczajenia, zwłaszcza w trybie graficznym. Jeśli jednak ktoś korzysta głównie z terminala, to „fun” jest na zupełnie innym poziomie. Otóż funkcję klawisza Ctrl w macOS „normalnie” (czyli w GUI) spełnia lewy klawisz command, umieszczony tam, gdzie normalnie jest alt. Jeśli jednak przejdziemy do terminala, to w aplikacjach uruchomionych w konsoli żeby zrobić ctrl-c należy wcisnąć… control-c. Tak, jest też osobny klawisz control, którego należy używać w terminalu.

Jeśli jednak korzystamy z VirtualBox i uruchomimy tam Linuksa, to żeby utworzyć nową zakładkę w przeglądarce należy użyć… control-t. W GUI. W tej samej przeglądarce pod macOS używamy command-t. IMO totalna porażka UXowa i coś do czego nie sposób się przyzwyczaić, jeśli ktoś używa systemów na przemian. Można najwyżej nieustannie pamiętać, ale u mnie kończy się to masą missclicków. Zobaczę jeszcze co będzie po podłączeniu zewnętrznej, pecetowej klawiatury, choć to raczej z ciekawości – w końcu to nie stacjonarka. Ew. poszukam jakiegoś software’owego rozwiązania, choć staram się unikać przemapowywania klawiszy jak mogę – ciężko się później korzysta z instrukcji w necie.

Z pozytywów – doceniam działające kopiowanie i wklejanie w terminalu przy pomocy command-c i command-v. Pod Linuksem są na to osobne skróty, choć do tego akurat używałem myszy i zaznacz (i automatycznie skopiuj) i środkowego przycisku do wklejania. Domyślnie działa też – analogicznie jak pod Linuksem – wklejanie zaznaczonego w terminalu tekstu przy pomocy środkowego klawisza myszy. Niestety, jest ograniczone do konsoli, aby skopiować jakieś polecenie z przeglądarki trzeba już używać skrótów klawiszowych.

Wracając do tematu z topica. Po zmianie systemu na macOS i logowaniu przy pomocy ssh na serwery witał mnie komunikat w stylu:

-bash: warning: setlocale: LC_ALL: cannot change locale (pl_PL.UTF-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (pl_PL.UTF-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (pl_PL.UTF-8)

Sprawa jasna, problem ustawieniami locales, tyle, że nigdy mi się nie zdarzał, w systemie (macOS) niby są ustawione. Na chwilę odpuściłem temat, bo mało estetyczny komunikat przy logowaniu to nie dramat, ale szybko okazało się, że potrafi to wpływać – rzecz jasna ujemnie – na działanie poleceń i skryptów. Gdy tylko siadłem do szukania rozwiązania okazało się, że problem jest popularny, wręcz powszechny.

Pierwsze rozwiązanie, które znalazłem, wyglądało elegancko i nawet tłumaczyłoby, czemu nie działa skoro locales są ustawione. Niestety, po włączeniu i otwarciu nowych zakładek w terminalu, a nawet restarcie terminala okazało się, że… nie działa. Teraz widzę, że rozwiązanie jest stare, z 2012, wtedy mi umknęło.

Dopiero tu znalazłem faktyczne rozwiązanie problemu z locale w terminalu pod macOS. Jest proste i sprowadza się do dodania dwóch linii w pliku ~/.bash_profile:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

Powinno działać także z wersją polską, ale nie testowałem – w moim przypadku powyższa wersja jest OK, przynajmniej po pobieżnym sprawdzeniu nie zauważyłem problemów. Ustawienie z pierwszego rozwiązania również zostawiłem.

Wicd nie startuje w Debianie – problem z Pythonem.

Ostatnio wicd mi się w Debianie znarowiło – nie wstawał klient GTK. Wersja curses działała OK, więc nie wykazałem się należną czujnością i  zignorowałem problem. Zorientowałem się dość późno, bo korzystam z hibernacji głównie, a efektem był brak sieci WiFi po restarcie (no dobrze, skrót myślowy, nie tyle brak sieci, bo wpa_supplicant z ręki daje radę, co niestartowanie wicd). W każdym razie uruchomienie wicd dawało:

 Traceback (most recent call last):
File "/usr/share/wicd/daemon/wicd-daemon.py", line 47, in
import dbus
File "/usr/lib/python2.7/dist-packages/dbus/__init__.py", line 100, in
from dbus._dbus import Bus, SystemBus, SessionBus, StarterBus
File "/usr/lib/python2.7/dist-packages/dbus/_dbus.py", line 46, in
from dbus.bus import BusConnection
File "/usr/lib/python2.7/dist-packages/dbus/bus.py", line 46, in
from dbus.connection import Connection
File "/usr/lib/python2.7/dist-packages/dbus/connection.py", line 42, in
from dbus.proxies import ProxyObject
File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 35, in
from dbus._expat_introspect_parser import process_introspection_data
File "/usr/lib/python2.7/dist-packages/dbus/_expat_introspect_parser.py", line 26, in
from xml.parsers.expat import ExpatError, ParserCreate
File "/usr/lib/python2.7/xml/parsers/expat.py", line 4, in
from pyexpat import *
ImportError: /usr/lib/python2.7/lib-dynload/pyexpat.so: undefined symbol: XML_SetHashSalt

W ramach zmyłki – w pakiecie wicd błąd nie jest zgłoszony (i słusznie), za to zgłoszony jest błąd 665346 w Pythonie. I faktycznie, upgrade libexpat1 do 2.1~beta3 (wersja z unstable) pomaga. HTH

Pomysł MI na minimalną prędkość Internetu.

Pomysł

Niedawno Ministerstwo Infrastruktury wpadło na pomysł kolejnej regulacji. W skrócie, tym razem sprowadza się to do: jeśli komuś Internet działa, ale z prędkością niższą niż 90% maksymalnej określonej w ofercie, przez 12h lub dłużej w skali miesiąca, to ten ktoś nie płaci rachunku za Internet za dany miesiąc. Interesujące, prawda? Pomysł jest tak skandalicznie zły, że nie mogę go zmilczeć. No to po kolei (bardziej ze strony ISP, bo jest mi jednak bliższa, choć i klientem jestem):

Problem istnieje

Nie ma co ukrywać, że biznes w dostarczaniu Internetu klientom indywidualnym opiera się na kupnie większej ilości pasma i skorzystania z tego, że nie wszyscy korzystają jednocześnie (czyli tzw. overbooking lub overselling). Jednak żaden normalny ISP nie oferuje z premedytacją prędkości takich, których w normalnych warunkach nie jest w stanie zapewnić. Chyba, że na danym obszarze nie ma konkurencji… Co innego operatorzy komórkowi (kto osiąga reklamowane 7,2Mbps)? U nich nawet rozmowy telefoniczne są overbookowane. Wystarczy spróbować zadzwonić w Sylwestra, by się o tym przekonać…

Jasne, trzeba klientów chronić przed nieuczciwymi praktykami typu: na łączu 10 Mbps jest 30 klientów po 10 Mbps. Czy też nawet 3 klientów z abonamentem 10 Mbps. Ale 30 z abonamentem 1 Mbps? Co miałoby źle działać (i jak często)? Ale czy na pewno w ten sposób? Zgadzam się, że klient powinien być zwolniony z „lojalki”, powinien posiadać możliwość rozwiązania umowy lub otrzymać rekompensatę, jeśli problem z prędkością występuje, ale nie na takich zasadach, jak proponowane.

Źródła niskiej prędkości

Dostęp do Internetu składa się z następujących składników:

  • Infrastruktura po stronie klienta. Komputer, router, modem, połączenia między sprzętami (potencjalnie źle skonfigurowane wifi, poniszczone kable).
  • Infrastruktura po stronie dostawcy: kable, światłowody, radia, switche, routery, modemy (potencjalnie poniszczone kable, zakłócone radia, błędy konfiguracji).
  • Infrastruktura po stronie pośredników – zasadniczo podobna jak u dostawcy – w końcu dostawca jest dla nich klientem. Osobno, bo ISP nie ma wpływu na jej funkcjonowanie (poza wyborem operator X lub Y).
  • Infrastruktura po stronie dostawcy treści – routery, switche, serwery, aplikacje. Dodatkowo możliwość nakładania limitów różnej maści (choćby ograniczanie prędkości per połączenie czy per IP; wiele różnych błędów możliwych).

Problem jest z jednoznacznym pomiarem (samym pomiarem! bo co to tak naprawdę jest prędkość Internetu?), problem jest też z jednoznacznym określeniem źródła problemu (często jest to właśnie sprzęt w domu klienta). Wszystkie elementy każdej powyższej infrastruktury (klient, ISP, operatorzy pośredni, dostawca contentu) mają realny i znaczący wpływ na ostateczny wynik. Dlaczego każe się ISP dostarczającemu usługę klientowi indywidualnemu odpowiadać za infrastrukturę w domu klienta, u dostawców pośredniczących i u dostawcy treści? I czemu karze się go za błędy nie leżące po jego stronie? Bo do tego się ten projekt sprowadza.

Wartości

Sama wartość 90% prędkości jest wartością wysoką. Skrajnie wysoką. Rozumiałbym 1% czy też nawet w porywach 10%, ale nie 90%… Podobnie 12h – jest to wyśrubowane wymaganie. 1,6% czasu. Nawet przy łączach operatorskich i całkowitej awarii (zupełny brak działania łącza, chociaż często znacznie niewystarczająca prędkość jest traktowana jako awaria) przez taki okres czasu, niekoniecznie jest upust 100%. Przy wprowadzeniu zapisów proponowanym kształcie może okazać się, że państwo będzie narzucało operatorom świadczenie usługi z parametrami wyższymi, niż sami mają szansę ją zakupić. Jasne, ISP może (i większość to robi) korzystać z więcej niż jednego operatora, by niwelować skutki awarii. Tylko, że to kosztuje. I w sumie Kowalski- jeśli mu bardzo zależy – może sobie kupić redundantne łącze, którego będzie używał w czasie awarii (no dobrze, kto ma 2 niezależne łącza w domu? ja nie, jeśli nie licząc drogiego i wolnego dostępu przez komórkę…).

Pamiętać też trzeba o tym, ilu ludzi potrzebnych jest do obsługi łącz operatorskich, żeby zmieścić się w SLA i przywrócić usługę w pojedyncze godziny. Mówimy o pracy 24/7, dyżurach itd. stosunkowo dużej ilości ludzi w przeliczeniu na ilość łącz/urządzeń. Ilu „techników” byłoby potrzebnych, żeby dotrzeć do Kowalskiego do domu w przypadku (realnego) problemu w ciągu pojedynczych godzin? Jak wpłynęłoby to na cenę usługi? Ktoś w ministerstwie ma pojęcie, ile kosztuje megabit na warunkach operatorskich?

Niezależnie od proponowanej wartości (czy będzie to 1, czy 10, czy 90%) pozostają kwestie problemu technicznego wykonania rzetelnego pomiaru (zwł. określenia do czego mierzyć) oraz kwestie prawne, do których dojdę.

Technologia

Wygląda, że Ministerstwo Infrastruktury wykazało się też sporą nieznajomością technologii, którą się nadzoruje. Proponuję przedstawicielom wybrać się na prezentację dowolnego profesjonalnego (operatorskiego) sprzętu radiowego posłuchać, jak to działa i co dzieje się z pasmem (i w jakim zakresie) przy pogorszeniu się warunków transmisji. Proponuję też poczytać trochę o mechanizmach QoS, przyjąć do wiadomości istnienie ruchu klasy „best effort” itd. Oraz zapoznać się u operatorów, jakie procentowe wartości pasma ustawiane są jako gwarantowane (i czemu nie jest to 90%), dla jakich klas itd.

W tej chwili proponuje się stawianie całego funkcjonowania sieci (i paru pokrewnych nauk związanych z prognozowaniem i modelowaniem) na głowie. Danie klientowi indywidualnemu gwarancji pasma, na dodatek rzędu 90% kłóci się ze wszelkimi szkołami, skazuje na niebyt technologię radiową i powoduje, że mechanizmy QoS przestają mieć sens, bo i tak trzeba (a na pewno jest taniej) projektować sieć na 100% możliwego ruchu (powiedzcie to telefonistom, pękną ze śmiechu). Operator zamiast z punktu A do punktu B mieć dwa niezależne łącza wysycone po 70% (i w przypadku całkowitej awarii jednego z nich świadczenia usługi z zaniżoną prędkością), będzie miał jedno. Przecież i tak nikt nie zapłaci za czas awarii, więc po co płacić za drugie łącze? Szybsze w jednym przebiegu będzie tańsze.

Kwestie prawne

Moim zdaniem, Ministerstwo Infrastruktury ma chrapkę na totalną kontrolę rynku i chce jej funkcjonowania poza istniejącymi przepisami prawa, bez oglądania się nawet na możliwości techniczne. Pod hasłem ochrony odbiorców z jednej strony chce kontroli nad ISP, ale pod innymi hasłami chce kontroli nad użytkownikami (retencja danych, cenzurowanie stron). Oczywiście nie za swoje pieniądze. A przecież w opisywanym problemie z prędkością wystarczyłoby skorzystać z istniejących ogólnych przepisów i możliwości prawnych typu niezgodność towaru z umową, klauzule niedozwolone itp. Skąd zatem nieobecne w aktualnym prawie „nie podoba mi się, to nie płacę”, wyłączenie sądów i skazywanie ISP na (nie)łaskę użytkowników? Nie lepiej skupić się na egzekwowaniu istniejących zapisów prawnych i kontroli stanu faktycznego? Pewnie nie, bo wymagałoby to pracy urzędników…

PS. UKE chce w maju debaty na ten temat. Patrz Message-ID: fed39d94-4325-403b-a6c7-81aa770f4b6f@u3g2000vbe.googlegroups.com W URL jest (i będzie), że pomysł jest UKE, nie MI, co nie jest prawdą – nie we wszystkich miejscach poprawiłem od razu i… zostało.