Code and Ship

Code and Ship

By Code and ShipTechnology
Download on the App Store

Code and Ship episodes

  • Mythen in der Softwareentwicklung

    Heute sprechen wir über einige Mythen in der Softwareentwicklung. Dabei ergründen wir warum diese zumeist falsch sind.

    Gebt uns Feedback:

    • Twitter @codeandship
    • Jonathan @jowiemers
    • Ingmar @_truefalse
    • oder per Email an feedback (at) codeandship.rocks.

      Links für diese Folge
      • Was der Kunde wollte
      • Meme: Pferdezeichnung (schön angefangen, hastig beendet)
      • Spiderman gezeichnet in 10m, 1m, 10s
      • 56 min
      • Developer Tools (Teil 2)

        Die Fortsetzung der 9. Folge: wir sprechen über diverse weitere Tools die man als Entwickler so braucht, unter anderem IDEs, Shells und nette kleine Command-line Tools.

        Gebt uns Feedback:

        • Twitter @codeandship
        • Jonathan @jowiemers
        • Ingmar @_truefalse
        • oder per Email an feedback (at) codeandship.rocks.

          Links für diese Folge
          • Homebrew (homebrew-bundle für schnelles Einrichten bei Neuinstallation)
          • chocolatey
          • Visual Studio Code
          • gopls
          • JetrBrains Goland
          • JetBrains IntelliJ IDEA
          • Sublime Text
          • Atom
          • BBEdit
          • Coda von Panic
          • iTerm
          • Hyper
          • Windows Terminal
          • zsh / ohmyz.sh
          • thefuck
          • autojump
          • Autostart Ordner in macOS

            ~/Library/LaunchAgents
            /Library/LaunchAgents

            SSH Config für macOS

            Host *
            AddKeysToAgent yes
            UseKeychain yes
            IdentityFile ~/.ssh/id_rsa
            56 min
          • Developer Tools (Teil 1)

            Was ist eigentlich WSL und warum gibt es schon eine zweite Version? Diese und mehr Fragen klären wir in der neunten Episode!

            Gebt uns Feedback:

            • Twitter @codeandship
            • Jonathan @jowiemers
            • Ingmar @_truefalse
            • oder per Email an feedback (at) codeandship.rocks.

              WSL 2
              • Running Linux on Windows with WSL 2 and a Native Kernel
              • Developing on Windows with WSL2 (Subsystem for Linux), VS Code, Docker, and the Terminal
              • Installationsanweisungen für WSL 2
              • Linux im Windows Store
              • Docker for WSL2 Preview
              • VSCode Remote Development
              • VSCode Development Container
              • Video Tutorial: Remote Development mit VSCode
              • blog.jessfraz.com: Docker Containers on the Desktop
              • Windows Telemetrie abschalten
              • Eclipse Che - The Kubernetes-Native IDE for Developer Teams
              • 35 min
              • Go Libraries (alles außer HTTP Edition)

                In dieser Folge stellen wir einige Go Bibliotheken vor, die nichts mit Http-Kram zu tun haben. Ingmar hat sogar noch einen Bonus!

                Gebt uns Feedback:

                • Twitter @codeandship
                • Jonathan @jowiemers
                • Ingmar @_truefalse
                • oder per Email an feedback (at) codeandship.rocks.

                  News
                  • GopherCon Videos
                  • Go 1.13.0
                    • Package errors
                    • Top 3 Nicht-HTTP-Libraries

                      Ingmar
                      • bbolt
                      • ff
                      • testify
                      • Bonus
                        • protobuf
                        • Jonathan
                          • waveform
                          • ebiten
                          • bild
                          • 52 min
                          • Wer 'Rusted', der rostet

                            Dieses mal witmen wir uns mit Rust einer neuen Programmiersprache und nebenbei gibts noch das neuste aus der Go-Welt.

                            Gebt uns Feedback:

                            • Twitter @codeandship
                            • Jonathan @jowiemers
                            • Ingmar @_truefalse
                            • oder per Email an feedback (at) codeandship.rocks.

                              Links für diese Folge
                              • Rust-lang.org
                              • Rust Online-Playground
                              • The Rust Book
                              • crates.io
                              • VST Development
                              • Gopher Con
                                • EU
                                • Singapore
                                • Israel
                                • San Diego
                                • How I write Go HTTP services after seven years
                                • 36 min
                                • Der Deployment Typ

                                  Softwareentwicklung ist nicht nur Code schreiben, sondern meistens auch Teamarbeit. In dieser Folgen reden wir über die sozialen Aspekte von Softwareentwicklung.

                                  Software engineering is what happens to programming when you add time and other programmers.

                                  – Russ Cox, Go Entwickler

                                  Gebt uns Feedback:

                                  • Twitter @codeandship
                                  • Jonathan @jowiemers
                                  • Ingmar @_truefalse
                                  • oder per Email an feedback (at) codeandship.rocks.

                                    Links für diese Folge
                                    • wire: Compile-time Dependency Injection for Go
                                    • Gesetz von Conway
                                    • CRE 028 - Extreme Programming
                                    • GitLab - The Remote Manifesto
                                    • GOTO 2015 - Dave Thomas: Agile is Dead
                                    • Mastering Chaos - A Netflix Guide to Microservices
                                    • Keep a Changelog
                                    • How to Write a Git Commit Message
                                    • 35 min
                                    • Metriken und Monitoring

                                      Heute sprechen wir über Metriken, Logs, Traces sowie bekannte Tools und Patterns aus dem Monitoring Feld. Als Ergänzung zur Folge haben wir ein kleines Repository angelegt, um Anfängern den Einstieg in das Sammeln von Metriken mit unseren Lieblingstools zu vereinfachen.

                                      Gebt uns Feedback:

                                      • Twitter @codeandship
                                      • Jonathan @jowiemers
                                      • Ingmar @_truefalse
                                      • oder per Email an feedback (at) codeandship.rocks.

                                        Links für diese Folge
                                        • @adrianfcole auf Twitter
                                        • Jaeger: open source, end-to-end distributed tracing
                                        • Dave Cheney - Let’s talk about logging
                                        • graylog log management
                                          • alternate backend storage system
                                          • Prometheus
                                            • SDKs
                                            • Exporter
                                            • Alertmanager
                                            • Grafana
                                              • Playground
                                              • Dashboards Import/Export Script
                                              • Prometheus und Grafana zum Ausprobieren und Testen: codeandship/metrics-example
                                              • ELK Stack: Elasticsearch, Logstash, Kibana
                                              • Sensu
                                              • NetData: Get control of your Linux Servers
                                              • cAdvisor
                                              • 53 min
                                              • Testing in Go

                                                In dieser Folge sprechen wir über Testing in Go und einige unterstützende Libraries. Ingmar löscht Code um sein Testcoverage zu verbessern und Jonathan mag seltsame Ordnerstrukturen.

                                                Gebt uns Feedback:

                                                • Twitter @codeandship
                                                • Jonathan @jowiemers
                                                • Ingmar @_truefalse
                                                • oder per Email an feedback (at) codeandship.rocks.

                                                  Links für diese Folge
                                                  • Go Playground unterstütz jetzt Third-party Imports und mehrere Dateien.
                                                  • DockerCon Videos
                                                  • Martin Fowler - GivenWhenThen
                                                  • cweill/gotests
                                                  • Go Standard Library - net/http/httptest
                                                  • gomock
                                                  • Testify
                                                  • 39 min
                                                  • Builds und Deployments

                                                    In dieser Folge sprechen wir über Buildprozesse, Pipelines, Deployments und Development Server Setups. Jonathan denkt über schlechte Entwickler-Witze nach und Ingmar guckt paranoid auf den Upstream seiner Fritzbox.

                                                    Gebt uns Feedback auf Twitter:

                                                    • @codeandship
                                                    • Jonathan @jowiemers
                                                    • Ingmar @_truefalse
                                                    • oder per Email an feedback (at) codeandship.rocks.

                                                      Links für diese Folge
                                                      • heise.de: Docker Hub gehackt
                                                      • Homebrew - The missing package manager for macOS (or Linux)
                                                      • Makefiles
                                                      • Goreleaser
                                                      • github.com/mitranim/gow
                                                      • VSCode Go Plugin
                                                      • Goland
                                                      • Build Go inside Docker
                                                      • Golang Docker Image (auch als alpine Variante verfügbar)
                                                      • Docker Entrypoints
                                                      • jessfraz: Docker Containers on the Desktop (z.B. Spotify oder Skype als Container auf dem Desktop)
                                                      • Escaping Containers to Execute Commands on Play with Docker Servers
                                                      • Docker Security Scanning
                                                        • Scan Ergebnis sieht man nur im eingeloggten Zustand, auch für andere Images.
                                                        • Docker Image Inspection Tool dive
                                                        • Postgis im Dockerhub
                                                        • Docker Registry
                                                        • GitLab Community Edition
                                                          • Eingebaute Registry
                                                          • Docker Swarm
                                                          • Docker Compose
                                                          • Traefik (Docker Labels)
                                                          • NGINX
                                                          • Apache
                                                          • Portainer
                                                          • Grafana
                                                          • Prometheus
                                                          • Prometheus Client Libraries
                                                            • Go, Java, Scala, Python, Ruby
                                                            • Fritzbox Exporter
                                                            • Docker Logging Konfiguration
                                                            • Athens - Go Modules Proxy
                                                            • Offizieller Go Module Mirror, Index, und globale go.sum Datenbank
                                                            • DuckDuckGo GitHub Bang (Suchmaschine mit Integration der GitHub Suche)
                                                            • Magefiles
                                                            • Go binary filesizes
                                                            • Shrink Your Go Binaries
                                                            • 1 hr 11 min
                                                            • Go Libraries

                                                              Diesmal geht es um HTTP Libraries und Frameworks für Go. Jonathan fürchtet um seine Stellung als “Herr der Dinge”, denn bei Frameworks muss man sich manchmal in die Welt der Codegenerierung begeben. Hilfe, Kontrollverlust! Außerdem geht es darum, wie man gute Libraries erkennt und warum man eine spezielle lieber meiden sollte.

                                                              Am Ende sprechen wir noch über Libraries für die Entwicklung von CLI Tools.

                                                              HTTP Frameworks
                                                              Negroni (github.com/urfave/negroni)

                                                              Negroni is an idiomatic approach to web middleware in Go. It is tiny, non-intrusive, and encourages use of net/http Handlers.

                                                              Kein Framework!

                                                              Vorteil

                                                              • Nah an der Standard Library
                                                              • Nachteil

                                                                • Kein automatischen Binding/Rendering
                                                                  • Requests werden nicht automatisch in Structs gemarshalt
                                                                  • Responses werden nicht automatisch zu JSON umgewandelt.
                                                                  • Go Chi (github.com/go-chi/chi)

                                                                    chi is a lightweight, idiomatic and composable router for building Go HTTP services. It’s especially good at helping you write large REST API services that are kept maintainable as your project grows and changes.

                                                                    Positives

                                                                    • Nah an der Standard Library
                                                                    • Nachteil

                                                                      • Kein automatischen Binding/Rendering
                                                                        • Requests werden nicht automatisch in Structs gemarshalt
                                                                        • Responses werden nicht automatisch zu JSON umgewandelt.
                                                                        • Man muss leere Interface Methoden implementieren um ein Struct überhaupt rendern oder binden zu können
                                                                        • Gin-Gonic (gin-gonic.com)

                                                                          Gin is a web framework written in Go (Golang). It features a martini-like API with much better performance, up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.

                                                                          Vergleichbar mit Express für Node oder Ktor für Kotlin. Sehr gut um schnell REST APIs zu entwickeln. Größere APIs sind auch kein Problem.

                                                                          Positives

                                                                          • Einfache API
                                                                          • Aufgeräumte Doku
                                                                          • Erweiterbar trotz eigener Handler Implementierung (gin.WrapF)
                                                                          • Sehr einfaches Rendering (JSON, HTML)
                                                                          • Nachteil

                                                                            • Manche Middlewares sind nicht so optimal (CORS)
                                                                            • Goa (github.com/goadesign)

                                                                              goa is a framework for building micro-services and REST APIs in Go using a unique design-first approach.

                                                                              Erstellt mittels Code-Generation Boilerplate-Code, programmiert wird nur noch die Logik, der Rest wird generiert.

                                                                              Nennenswert

                                                                              • Unterstützt OAuth2
                                                                              • Revel (revel.github.io)

                                                                                A high productivity, full-stack web framework for the Go language.

                                                                                Bietet wesentlich mehr Möglichkeiten als die bisher genannten. Dennoch geht es vergleichsweise low-levelig zu (vgl. Spring, Rails, SailsJs usw.).

                                                                                Ist ein klassisches MVC mit template-engine, request validation usw.

                                                                                Vorteile

                                                                                • Hot Code Reloading
                                                                                • MVC mit Template-Engine
                                                                                • Request Validation
                                                                                • Nachteile

                                                                                  • Keine einfache, eingebaute Möglichkeit Datenbanken anzubinden
                                                                                    • Es werden gorm oder andere externe Libraries empfohlen
                                                                                    • Für Authentication werden ebenfalls externe Libraries empfohlen
                                                                                    • Buffalo (github.com/gobuffalo/buffalo)

                                                                                      Buffalo isn’t just a framework; it’s a holistic web development environment and project structure that lets developers get straight to the business of, well, building their business.

                                                                                      Features

                                                                                      • Templating
                                                                                      • Routing
                                                                                      • Task Runner (optional)
                                                                                      • Models/ORM (optional)
                                                                                      • Sessions, Cookies, WebSockets uvm.
                                                                                      • Pluspunkte

                                                                                        • Gute Doku
                                                                                        • Viele Tutorials und Beispiele
                                                                                        • Iris (github.com/kataras/iris)

                                                                                          Eine Nicht-Empfehlung

                                                                                          Features

                                                                                          • Sehr umfangreiche Funktionen
                                                                                          • Form-Validation
                                                                                          • Controller, ähnlich wie in anderen großen Web Frameworks
                                                                                          • Bedenklich

                                                                                            • Thread bei /r/golang
                                                                                            • Ziemlich merkwürdige Vergangenheit
                                                                                            • Git History wurde mehrfach gesquashed, so dass Contributors nicht mehr sichtbar sind
                                                                                            • Nutzt falsche oder gefakete Benchmarks, die wenig Aussagekraft haben (Autor von Iris ist Co-Autor des verklinkten Benchmarks)
                                                                                            • Maintainer Verhalten verstößt gegen den Golang Code of Conduct
                                                                                            • “Unbeatable free support for everyone”
                                                                                            • HTTP Libraries
                                                                                              Swag (github.com/swaggo/swag)

                                                                                              Swag converts Go annotations to Swagger Documentation 2.0.

                                                                                              Generiert eine swagger.json anhand von Kommentaren im Code.

                                                                                              Positives

                                                                                              • HTTP Framework/Library unabhängig
                                                                                              • Wenn man die API einmal geblickt hat ist es sehr einfach zu benutzten.
                                                                                              • Bietet auch Code-Generation features (haben wir nicht getestet)
                                                                                              • Nachteil

                                                                                                • Doku nur in der README und auf godoc.org
                                                                                                • Einige Features mehr oder weniger nicht dokumentiert
                                                                                                • go-swagger (github.com/go-swagger/go-swagger)

                                                                                                  This package contains a golang implementation of Swagger 2.0 (aka OpenAPI 2.0): it knows how to serialize and deserialize swagger specifications.

                                                                                                  Gorilla Webtoolkit (gorillatoolkit.org)

                                                                                                  Gorilla is a web toolkit for the Go programming language.

                                                                                                  Alles was man sonst noch so braucht, vor allem:

                                                                                                  • context: stores global request variables.
                                                                                                  • mux: is a powerful URL router and dispatcher.
                                                                                                  • schema: converts form values to a struct.
                                                                                                  • securecookie: encodes and decodes authenticated and optionally encrypted cookie values.
                                                                                                  • sessions: saves cookie and filesystem sessions and allows custom session backends.
                                                                                                  • websocket: implements the WebSocket protocol defined in RFC 6455.
                                                                                                  • HTTP Multiplexer Implementierung werden häufig mit mux abgekürzt oder einfach “Router” genannt.

                                                                                                    Weitere Projekte

                                                                                                    Ein weiteres HTTP Framework:

                                                                                                    High performance, minimalist Go web framework

                                                                                                    labstack/echo

                                                                                                    Eine weitere HTTP Multiplexer Implementierung:

                                                                                                    A high performance HTTP request router

                                                                                                    HttpRouter

                                                                                                    Noch ein mux:

                                                                                                    Goji is a minimalistic and flexible HTTP request multiplexer

                                                                                                    Datenbank Library für MySQL, PostgreSQL, Sqlite3:

                                                                                                    The fantastic ORM library for Golang, aims to be developer friendly

                                                                                                    gorm

                                                                                                    Dateien, zum Bespiel HTML Templates, in Go Binaries einbauen:

                                                                                                    Embed files into a Go executable

                                                                                                    statik

                                                                                                    … eine weitere Möglichkeit:

                                                                                                    The simple and easy way to embed static files into Go binaries.

                                                                                                    packr

                                                                                                    Gültige (!) Zertifikate zum lokalen Entwickeln:

                                                                                                    A simple zero-config tool to make locally trusted development certificates with any names you’d like.

                                                                                                    mkcert

                                                                                                    Libraries für CLI Software
                                                                                                    go cui (github.com/jroimartin/gocui)

                                                                                                    Minimalist Go package aimed at creating Console User Interfaces.

                                                                                                    termui (github.com/gizak/termui)

                                                                                                    termui is a cross-platform and fully-customizable terminal dashboard and widget library built on top of termbox-go.

                                                                                                    promptui (github.com/manifoldco/promptui)

                                                                                                    Interactive prompt for command-line applications.

                                                                                                    Weitere
                                                                                                    • Filewatcher für schnelles Entwickeln: gow
                                                                                                    • Frotschrittsbalken: uiprogress
                                                                                                    • Vielen Dank fürs Zuhören!

                                                                                                      Gebt uns Feedback auf Twitter:

                                                                                                      • @codeandship
                                                                                                      • Jonathan @jowiemers
                                                                                                      • Ingmar @_truefalse
                                                                                                      • oder per Email an feedback (at) codeandship.rocks.

                                                                                                        1 hr 10 min

                                                                                                      About Code and Ship

                                                                                                      From the publisher's feed

                                                                                                      Jonathan und Ingmar sprechen übers Programmieren und Ausliefern von Software Projekten. Außerdem tauschen die beiden Bremer sich über Tools, Framewoks und das Leben als Softwareentwickler aus.