Thursday, November 21, 2019

go lang, html/template and sort...

I have created a simple page that prints running local docker images with their metadata. Using simple go lang and html/template. Then things went complicated: I couldn't sort a slice.

Quick introduction to go lang

Go language is a language created (and released) by google. It is based on many existing "things" that got compiled to a target environment, where really many environments are available. Code is executed in some kind of a sandbox (similar to java runtime environment). You could also run the code without storing compiled binary using `go run whatever.go` or compile and run using `go build whatever.go && ./whatever`.
Pros: supports multiple environments, is "managed" (garbage collector), has good support, is simple, has built-in testing framework, is compiled into a binary, can be compiled on runtime
Cons: different from most languages, extensible only to some extend (at some point you need to get into low level sources), has "different" source management/versioning, testing package is pretty "raw",large binary footprint (simple "hello world" app would be probably 10MB large or 5MB after stripping)

Source code before

Note the error handling is omitted.
package main
import (
        "html/template"
        "net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
        data := []map[string]string{{"k": "2", "v": "a"}, {"k": "1", "v": "b"}}
        t, _ := template.ParseFiles("template.tmpl")
        t.Execute(w, data)
}
func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8081", nil)
}


<html><body>
{{range .}}
        {{.v}},
{{end}}

</body></html>
 
Output: a,b,

Quick solution

Source code after

Note the error handling is omitted.
package main
import (
        "html/template"
        "net/http"
)
func mySort(s []map[string]string) map[string]map[string]string{
        m := make(map[string]map[string]string, len(s))
        for i:=0; i
                m[s[i]["k"]] = s[i]
        }
        return m 
} 
func handler(w http.ResponseWriter, r *http.Request) {
        data := []map[string]string{{"k": "2", "v": "a"}, {"k": "1", "v": "b"}}
        t, _ := template.New("template.tmpl").Funcs(template.FuncMap{"mySort":mySort}).ParseFiles("template.tmpl")
        // Note that I cannot simply use ParseFiles as it calls New() inside 
        t.Execute(w, data)
}
func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8081", nil)
}
 
<html><body>
{{range .|mySort}}
        {{.v}},
{{end}}

</body></html> 
 
Output: b,a,

Final comments

Please let me know what you think about it. And leave a comment if you find it useful (just to let me know it is used by anyone and it has any value to the community).

Tuesday, July 9, 2019

Kubernetes dashboard pagination - number of rows per page without logging in

Recently I am working with kubernetes dashboard on both minicube and a cluster.
While kuberneted dashboard can be started as an image (and some configuration can be inserted), its settings are not available per user as they should. I mean - we are using kubernetes (k8s) dashboard without logging in so the settings are not even accessible.

But when you open list of pods, deployments or similar - you are forced to use 10 rows per page. When you apply any change (ex. edit item or scale a deployment) then pagination information is lost - so you start always from the first page.

Yesterday I spent quite a lot of time to get a workaround for the issue.
3 possible solutions I found:

  1. Press F12 in your web browser to access developer's console. Enter the following command:

    window.angular.element(document.querySelector(".ng-scope")).scope().$root.$$childHead.$ctrl.c.a.itemsPerPage=2;
    (You might be disallowed to paste into the window for the first time - as the developer console can be very dangerous)
  2. Use greasemonkey/tampermonkey/violentmonkey and add script like this bellow

    // ==UserScript==
    // @name         k8s dashboard pagination
    // @namespace    k8s
    // @version      0.1
    // @description  Set pagination to 40 elements per page
    // @author       adderek
    // @match        http://yourserver:yourport/*
    // @grant        none
    // ==/UserScript==

    (function() {
        'use strict';
        window.angular
            .element(document.querySelector(".ng-scope")).scope()
            .$root.$$childHead
            .$ctrl.c.a
            .itemsPerPage=40;
    })();
  3. Add a bookmarklet and click on it every time you wish to change number of rows per page

Saturday, June 1, 2019

Sobota, dzień dziecka

Dziś jest sobota, pierwszy dzień miesiąca czerwca, dzień dziecka.
Jak najlepiej spędzić ten dzień?
Z rana niepogoda. Mycie naczyń z tygodnia, przygotowanie śniadania, porządki. Niestety sam muszę to ogarnąć bo syna rozpieściłem i (jak ja teraz) siedzi na komórce zamiast się dołączyć. Młodszy ogląda bajki (też niedobrze) a żona na komórce obok niego siedzi i na niego spogląda.
Później ma być ciepło i ładnie - na pewno z chłopakami gdzieś pojedziemy.
Fajny plan chyba... Najbardziej mi się z tego podoba posprzątanie domu, ponieważ to się wszystkim przysłuży a wyjazd gdzieśtam to tylko chwila przyjemności.

Wednesday, March 20, 2019

Windows 10 is a pain

Once again Microsoft fucked up things.
My mom has several computers. And she is forced to use windows - as some apps she is forced to use for her work require windows.
Every couple of months windows 10 will force upgrade to new build. And it will remove much of the configuration - and some things stop working (scanners, printers, network drives, etc.).
In addition some features become broken (ex. avatars for local accounts) or replaced by new tools (so user nor admin can never find what they are looking for).
When combined with whole drive encryption requirement (for security) we have only one practical choice - bitlocker. And from time to time... upgrade would remove all the user data, corrupt disk drive or even decrypt crypted drive and corrupt it (so overwriting encrypted data with crap data) or leaving them decrypted but not accessible.
And it will force upgrade and restart.
Windows 10 is a closed source so in case of problems... best solution is to reinstall OS.

As a result :
- windows 10 is not secure (encryption issues)
- windows 10 is not stable (upgrade could come any time corrupting data or features)
- windows 10 is not reliable (at any time it can stop working)
- windows 10 cannot guarantee it would have uptime longer than 4h... In fact it says that if it wants an update then it won't have uptime longer than 4h
- windows 10 is difficult to maintain (need to configure many things after an update)
- windows 10 is difficult to use - the usability "improvements" make interface changing too often and users would encounter issues just too often (often without enough knowledge to solve them on their own)

Only solution seems to be... An external drive to keep the data, frequent backups onto local versioned cloud, own data encryption (Linux?) and hope that this awful system (windows) will die soon.

By the way... what happened most recently to a computer of my mother was: OS partition encrypted with bitlocker become corrupted (showing as RAW instead of NTFS) so I can neither recover the data nor recover (fresh install) OS. In fact what I will do is to make a backup of the corrupted partition and then to clean it, format it and make a fresh install of the OS.

Tuesday, February 5, 2019

Nowy telefon?

Mój stary telefon Samsung Galaxy Note 4 GT-n910c zdycha. Niestety nie jestem w stanie ustalić przyczyny - prawdopodobnie wymiany wymaga płyta główna. Pewnie jakieś zwarcie.
No i zerkam na rynek. I wielki zawód, ponieważ rynek jest zapchany urządzeniami z niskiej półki bądź drogim badziewiem z niepotrzebnymi funkcjami:

EKRAN

  • Zaokrąglony ekran "edge" - niepotrzebny
    • Funkcja (wywodząca się z samsungów), której się nie używa
    • Analizy wykazały, że jak ktoś kupuje telefon za kilka tysi to wyda troszkę więcej na takie niepotrzebne badziewie
    • W praktyce - zupełnie nieprzydatne i mocno problematyczne
    • Problem z naklejeniem szyby/folii ochronnej
  • Ekran 2.5D
    • Nieprzydatne
    • Ekran jest płąski ale z zaokrąglonymi brzegami
    • Możliwy problem z naklejeniem szyby/folii ochronnej
  • Bezramkowy wyświetlacz - niepotrzebny
    • Fajny chwyt marketingowy - sugeruje że telefon ma więcej miejsca gdzie widać obraz
    • Większe ryzyko uszkodzenia wyświetlacza przy upadku
    • Nie ma jak złapać telefonu
  • Wycięcie w ekranie (nodge czy jak to się tam zwie) - nieprzydatne
    • Kolejny chwyt marketingowy
    • Więcej miejsca na wyświetlacz... ale przy tym masa problemów i część wyświetlacza nieużywana
    • Zasłonięcie części ekranu...
    • Jeśli mamy opcję aby część ekranu olać i użyć wyświetlacza tylko na części powierzchni to jest OK
  • Rozdzielczość (standard to 1280 x 720)
    • Wyższa rozdzielczość potrzebna jeśli chcemy wykorzystać telefon jako okulary VR
    • 1280x720 w zupełności wystarczy jeśli chcemy używać tylko jako telefonu/smartfona
    • Mniejsza rozdzielczość to "szybsze działanie" (mniej pracy potrzeba do wyświeltenia obrazu)
  • Typ ekranu
    • LCD TFT TN
      • Najprostszy
      • Możliwa słaba jakość obrazu (najtańsze)
      • Jakość obrazu może by świetna (lepsze, droższe, nowe technologie)
      • Istnieje kilkadziesiąt odmian - generalnie nowsze są lepsze
      • Wyświetlanie obrazu zużywa dużo energii
      • Zazwyczaj minimalnie jaśniejszy obraz na brzegu lub w rogach
      • Telewizory TFT mają często jasność w kratkę
    • LCD IPS
      • Lepsze kolory niż TFT/TN
      • Nadal duże zużycie energii
      • Nadal nierówna jasność
    • E-INK
      • Słońce świecące na ekran nie stanowi problemu - w zasadzie nawet pomaga
      • Wolny - nie nadaje się np. do oglądania filmów
      • Może być zawsze włączony (nawet bez baterii)
      • Nierówna jasność ekranu
    • OLED
      • Może przez cały czas wyświetlać np. godzinę i nie zużywa przy tym dużo energii
      • zwykle ładne kolory i dość równomierna jasność ekranu
      • Zużywa więcej energii wyświetlając jasne kolory (np. biały) a mniej gdy jest ciemny (np. czarny)
    • AMOLED (TFT)
      • OLED na sterydach
      • Lepsze kolory niż w OLED
    • S-AMOLED
      • AMOLED na sterydach
      • Bardziej energooszczędny niż AMOLED

CZUJNIKI

  • Czytnik linii papilarnch - jest dla mnie bardzo potrzebny
    • Stanowi niski poziom zabezpieczenia
    • W połączeniu z czujnikiem odległości (np. smart-band) już jest bezpieczniej (niestety gotowca na to nie ma)
    • Wystarczająco zabezpiecza telefon przed dzieckiem
  • Przyciski dotykowe - masakra
    • Lubię przyciski, które można przyciskać świadomie trzymając cały czas palec na nich
    • Przycisk powinien dawać wyczuwalną odpowiedź na przyciśnięcie
    • Często stosowane dla obniżenia kosztów
  • Przyciski fizyczne - dla mnie mus
    • Droższe rozwiązanie (różnica nieznaczna ale dla producenta znacząca jeśli produkcja idzi w miliony egzemplarzy)

OBUDOWA

  • OGS czyli cały telefon ze szkła
    • Inaczej mówiąc - nie jest ważne jak telefon upadnie bo i tak się stłucze
    • Odciski widoczne w każdym miejscu
    • Utrudniona naprawa
    • Częściej wodoszczelne

ŁĄCZNOŚĆ

  • 2G, 3G, 4G, 5G, ...
    • Bez dużej różnicy... teraz to już jest bez znaczenia
    • Za jakiś czas 5G będzie standardem
    • Fajnie jak telefon obsługuje wiele standardów
  • WiFi
    • Bez większego znaczenia - zazwyczaj wystarczy nawet stary standard "b" do oglądania filmów np. na youtube
    • Standard AC jest szybszy... ale to zbyteczne
    • Jeśli chcemy używać telefonu do VR to warto mieć szybki procesor i WiFI ac z MIMO
  • Bluetooth
    • Minimum 4.1
      • BT4 to BLE (energooszczędny bluetooth) i zwykły
      • W 4.1 BLE obsługuje ulepszenia dla oszczędzania energii
  • Lokalizacja
    • GPS - bardzo użyteczny
    • A-GPS... w zasadzie każdy telefon z GPS to obecnie A-GPS
    • GLONASS i BEIDOU - lepszy zasięg ale to drobna różnica
  • IR blaster
    • Przydatna funkcja aby wyłączyć TV i inne nieprzydatne urządzenia, które ktoś w domu może wykorzystywać zasypiając przed nimi i nie wyłączając ich
    • Często brak sterowników

PROCESOR

  • Kyrin
    • Stosowany w huawei'ach
    • Zamknięte wszystko, zablokowany bootloader... odradzam
  • MediaTek (MT*, MTK*)
    • Raczej mało wydajne, prądożerne procesory
    • Zamknięte oprogramowanie - ale popularny sprzęt i czasem coś jest nawet troszkę otwarte
  • MediaTek Helio
    • To nadal mediatek
  • Qualcomm snapdragon
    • Chyba najbardziej otwarte oprogramowanie
    • Wydajne
    • Wysoki standard (w porównaniu z konkurencją)
    • Polecam
  • Intel
    • Spoko ale też nie wszystko otwarte i prądożerne procesory
I kolejna kategoryzacja
  • ARM.... to tak na prawdę architektura bardziej niż procesor - jest wykorzystana w większości komórek więc jeśli to podano za model/markę procesora to coś jest nie tak
Szukam teraz na rynku telefonu:
- z czytnikiem linii papilarnych
- z fizycznymi przyciskami
- z WiFi (przynajmniej standard n) i Bluetooth 4.1 lub nowszym
- rozdzielczość 1920x1080 mile widziana ale nie niezbędna
- procesor qualcomma
- dostęp do źródeł sterowników
- bootloader nie może być zablokowany
- musi mieć jakikolwiek aparat - coś powyżej 10 Mpix mile widziane
- aparat z "f" o wartości 2.0 lub mniejszej (to ciut skomplikowane ale w skrócie i olbrzymim uproszczeniu taki powinien dawać radę przy kiepskim oświetleniu)
- NFC mile widziane ale nie niezbędne

Tuesday, December 11, 2018

Woda wapienna na biologię...

TL;DR:

Jeśli dziecko twierdzi, że potrzebuje do zadania domowego z biologii wodę wapienną - prawdopodobnie jest inne zadanie (zawaliło dziecko) albo nauczyciel zawalił.

Wstęp

Mój syn niedawno powiedział mi, że mają do wykonania zadanie domowe z biologii. I potrzebna jest woda wapienna.
Ja nigdy nic takiego nie miałem w szkole.
Książka to "Puls życia" 5, podręcznik do biologii dla klasy piątej szkoły podstawowej, wydawnictwo "nowa era". Zadanie na stronie 52.

O wodzie wapiennej... i innych

Woda wapienna to nasycony roztwór wodny wapnia. Albo dokładniej nasycony roztwór wodny wodorotlenku wapnia.

Wapń (Ca od łacińskiej nazwy calcium) to pierwiastek.
Wapno (CaO od łacińskich calcium oxygenium) to tlenek wapnia.
Wapno palone to właśnie CaO.
Wapno gaszone to Ca(OH)2

Wodę wapienną otrzymamy z jednego z poniższych:

  • Wapń (Ca)
  • Wapno (CaO)
Niestety, te reakcje są dość niebezpieczne. Tak samo jak sama woda wapienna.
Wapno, wapń, woda wapienna - są żrące, niebezpieczne, drażniące, parzące.
Wody wapiennej raczej nie uzyskamy z wapna gaszonego.

O zadaniu domowym i dostępności produktów

Należy przeprowadzić reakcję i sprawdzić czy wydziela się dwutlenek węgla.
Do sprawdzenia należy użyć wody wapiennej.
Przygotowanie wody wapiennej jest niebezpieczne - wydziela się w tym procesie dużo ciepła i można się poparzyć.
Woda wapienna jest silnie żrąca i niebezpieczna. Dziecko nie powinno mieć do niej dostępu.

Wyjaśnienie

Po wizycie w kilku aptekach, nieudanych próbach i czytaniu... okazało się, że było inne zadanie domo9we

Wednesday, June 20, 2018

LOKMAT watch

Hello,

This will be a quick review of LOKMAT watch with bluetooth.
I will divide it into several parts:
- Design
- Hardware quality
- Software
- Firmware

Design
The watch looks nice on the first glance. A simple watch with bluetooth connectivity and "reversed LCD" (digits are light while background is dark).
It is not so simple to set it up - but there is an instruction (English only) attached.

Hardware
Pretty good - except the glass. I have broken mine quite easily.
Back plate is "stainless steel" according to the label. Once removed - it is very difficult to mount it back.
There are 4 buttons. One to turn on night light and turn on Bluetooth. One to show statistics (steps, etc.). Other are too complex to use.
The watch feels pretty large and heavy. I had larger and heavier watches... but this one just doesn't feel well on the hand.
Strap is some kind of rubber. It has two loops to keep the strap close - a good thing.
Inside there is a sticker saying that quality check has passed.
Bluetooth is 4.0 low energy. It is loosing connectivity often so you need to turn on the Bluetooth once in a while to connect it back. Bluetooth is loosing connectivity once disconnected for a while (it is good as it won't drain the battery but bad also as you won't re-connect automatically).
Button 1 (top left) will enable dimmed light and will enable/disable Bluetooth when pressed for some longer time.
Manufacturer promised 6 months of usage when Bluetooth is on. And waterproof case up to 50 meters of depth.

Software
Weakest part of the watch. Poor translation, not much functionality. And it looses all the statistics after watch restart.
It has nice backgrounds - if you like looking at pictures then it is nice. But if you prefer functionality over the look..... well... buy another one.
Application drains battery a bit. But only a bit.
After connected - it will set up the clock and date. Very nice thing.

Firmware
All the icons are "on" by default. If you expect to be informed about important events such as incoming SMS or a call... it is a bad choice.
You won't be able to use the watch for anything else than pre-defined features as the software is closed source and the communication protocols are "custom".

Summary
I liked the watch (until the glass broke). For the price ($15) I would expect a bit more - but the price is not that bad either.
I would imagine that the watch could be really nice if they would:
- release the firmware source
- release API documentation for the communication protocol
- improve the case back plate and glass