Wednesday, November 27, 2019

Konto firmowe listopad 2019

Prowadzę własną jednoosobową działalność gospodarczą w Polsce i mamy końcówkę roku 2019. Nasz rząd próbuje zrobić co tylko może aby ubić małe i średnie przedsiębiorstwa :( Jednym z przykładów jest wymuszenie kont firmowych. A dokładniej to wymusza je na firmach współpracujących (przelew kwoty >15k zł jest problematyczny; przelew pieniędzy na rachunek niefirmowy ma uniemożliwiać możliwość odliczenia tej kwoty od podatku wysyłającemu płatność).
Wobec powyższego zmusza się mnie (pośrednio) do założenia konta firmowego. A te zazwyczaj są płatne... W moim przypadku na koncie nie dzieje się wiele. Więc założę teraz konto "proxy" na które pieniądze będą wlatywać by zaraz przeskoczyć na konto właściwe.
Zastanawiam się nad kilkoma bankami... obecnie w czołówce są 3 "większe" banki: alior, nest i ing. Alior odpada - słyszałem zbyt wielu negatywnych opinii o obsłudze klienta i nie ma możliwości kontaktu online. ING wypada dobrze - możliwośc np. czatu online jest super. Nest szału nie robi ale być może będzie wystarczający dla moich potrzeb. Obecnie się zastanawiam gdzie....

Update.
Otworzyłem konto w nest banku.
Zalety:
  • darmowe
  • proste
  • bez udziwnień
  • na stronie brak nachalnych reklam
  • to nie jest produkt marketingowy
Wady:
  • prawdopodobnie poziom bezpieczeństwa oraz jakość systemów informatycznych może być niższa niż "wielkich banków"
  • brak nowoczesnej obsługi klienta on-line (czat, video, audio)
Rozpatrywałem też alior bank:
Zalety:
  • zdaje się, że ofarta nie jest zła
Wady:
  • kiepska obsługa klienta
  • brak nowoczesnej obsługi klienta on-line (czat, video, audio)
  • produkt marketingowy
oraz w ing:
Zalety:
  • duży i chyba dość dopracowany produkt
  • obsługa klienta online (czat, audio i video... chociaż dwa ostatnie mogą być często niedostępne)
Wady:
  • produkt marketingowy
  • reklamy produktów na stronie
  • firma stosuje dość agresywny marketing swoich usług/produktów
No i patrząc na jeszcze 3 banki:
  • PKO BP
    • Wady:
      • reklamy na stronie
      • produkt komercyjny
      • wysokie koszty (bardzo wysokie)
      • trochę za duży kontakt z rządem
  • M-Bank
    • Zalety:
      • dość dobra oferta
    • Wady:
      • częste zmiany regulaminu
      • problemy z ich systemem
  • BZWBK / Santander 
    • Wady:
      • produkt komercyjny
      • nachalne reklamy
      • reklamy
      • marketing
      • bardzo częste zmiany regulaminu
      • mnogość dokumentów
      • skomplikowane dokumenty prawnicze
      • spam wysyłany przez bank
      • wysokie ceny
Jeszcze jakieś opcje?
Na razie mam nest bank. Jako jeden z banków. Ten z kontem firmowym.
Z całą pewnością unikać będę:
  • banków z nachalnym marketingiem
  • banków ze stronami kipiącymi reklamami
  • banków z nieintuicyjnym interfejsem web/app
  • banków z wysokimi (bez usprawiedliwienia) cenami

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