DNA seen through the eyes of a coder

Der Zugang zu so manchem komplexen Thema fällt oft leichter, wenn man sich vom Seitenrand aus über ein Thema annähern kann, von dem man schon etwas Ahnung hat.

Zum Beispiel unbedarft in die Genetik oder Molekularbiologie via „Softwareentwicklung“ springen. Beim Recherchieren zum Thema RNA-Impfstoffe und darüber, wie die internationale Community auf dem Gebiet forscht und zusammenarbeitet und was alles möglich wäre, wenn die schlauesten Köpfe der Menschheit dauerhaft die Mittel bekämen, gemeinsam an Lösungen zu arbeiten (zu langer Satz), bin ich auf die Seiten von Bert Hubert gestoßen:

DNA seen through the eyes of a coder

Ausgangspunkt war seine Analyse des Impfstoffs aus Source-Code-Sicht.

Dazu exemplarisch ein fast vierstündiges Video von George Hotz „we do corona virus science aka hacking nature.

Die langen Nächte vor dem Computer sind damit mehr als gesichert…

Update 30.12.2020:
https://github.com/geohot/corona

Episode 351: Visual Studio Code Experience

Es geht ja nichts über gute Integrierte Entwicklungsumgebungen. Wer von euch erinnert sich z.B. noch an:

Quelle https://commons.wikimedia.org/wiki/File:Turbopascal_6.png

Neben der ein oder anderen IDE von JetBrains (PyCharm, PHPStorm) werfe bzw. warf ich für kleinere Aufgaben gerne auch Atom, Sublime oder Brackets an, seit ein paar Wochen setze ich mich auch intensiver mit Visual Studio Code auseinander. Der Unterbau basiert auf Electron, d.h. ein speichersparsames kleines Editörchen ist es nicht gerade, aber es will ja nicht jeder Hipster sein und vim benutzen 🙂

Der eigentliche Nutzen für den konkreten Anwendungsfall (Python, PHP, Javascript, Ruby, etc. pp.) kommt wie immer mit den Extensions, z.B. fürs Syntax Highlighting, Linting, die Versionsverwaltung oder das Deployment.

Ich schau mir aktuell die folgenden Erweiterungen genauer an (Ich muss die Extensions noch auf den unterschiedlichen Rechnern abgleichen, im Moment ist es noch ein Test-Durcheinander):

  • Django Snippets (bibhasdn)
  • Django Template (bibhasdn)
  • Docker (Microsoft)
  • ESLint (Dirk Baeumer)
  • Git History (Don Jayamanne)
  • Git Lens (Eric Amodio)
  • Jinja (wholroyd)
  • Jupyter (Don Jayamanne)
  • MagicPython (MagickStack Inc)
  • PHP Debug (Felix Becker)
  • PHP Extension Pack (Felix Becker)
  • PHP IntelliSense (Felix Becker)
  • phpcs (Ioannis Kappas)
  • Python (Microsoft)
  • Python Extension Pack (Don Jayamanne)
  • YAML (Adam Voss)

Insgesamt macht das Arbeiten mit der IDE Spaß: Globale Suche, Befehlspalette, schneller Zugriff auf die Optionen der einzelnen Extensions, Debugger, verschiedene Arbeitsbereiche, Themes, alle bekannten Editor-Features, Aufgaben konfigurieren… ist eigentlich alles da, um verregnete Nachmittage zu überstehen.

Wer kein Geld für die sehr ausgereiften Tools von JetBrains ausgeben kann oder will, kommt mit VSC definitiv sehr weit.

Episode 102/2017: Wie kann ich mit git auf der Kommandozeile alle Änderungen an einer Datei nachvollziehen?

Eine oft gehörte und gestellte Frage, die Antwort darauf ist eigentlich ganz einfach:

git log -p <datei>

Siehe manpage:

COMMON DIFF OPTIONS
 -p, -u, --patch
 Generate patch (see section on generating patches).

Episode 68/2017: Durcheinander scp, ssh und uwsgi

Wieder was gelernt. Genauer gesagt, drei Dinge. Fangen wir an:

  1. Caching mit nginx ist eine tolle Sache. Auf einem Server wollten wir die Auswirkung von „Microcaching“, bei dem die Ressourcen beispielsweise nur 1 Sekunde lang vorgehalten werden, prüfen. Caching-Parameter gibt es z.B. als proxy_cache_*, scgi_cache_* oder fastcgi_cache_* Direktiven. Wir brauchten die uwsgi_cache-Direktiven für eine Django-App.
    Alles da, wunderbar.
    Aber: Ausgerechnet das tolle uwsgi-Modul hat keinen Defaultwert beim uwsgi_cache_key. Der Key setzt sich normalerweise aus verschiedenen Parametern wie dem Schema, dem Host und dem Request-URI zusammen, darüber wird ein MD5-Hash gebildet und die Dateien darüber identifiziert.
    Bei leerem Cache-Key wird genau eine Datei zwischengespeichert (die erste, die angefragt wurde) und jeder weitere Request führt zur gleichen Datei. Nicht gut.
  2. Kopieren mit scp. Du sitzt auf Rechner A, willst etwas von Rechner B auf Rechner C kopieren? Von A aus hast Du Zugriff auf B, aber wenn dann von B nach C kopiert wird, fehlen C die entsprechenden Credentials – was tun?
    „scp -3“ kopiert die Datei von B nach A und dann von A nach B. Schön unauffällig, aber sehr praktisch.
  3. Du hast eine ~/.ssh/config Datei mit verschiedenen nützlichen und spezifischen Host-Angaben, insbesondere gibst Du via IdentityFile Deinen Key an? Wenn Du sicherstellen willst, dass wirklich genau nur dieser Key benutzt wird und keine anderen beim Verbindungsaufbau probiert werden, setze „IdentitiesOnly yes“ mit dazu.
    Sagt die Doku: „Specifies that ssh(1) should only use the authentication identity and certificate files explicitly configured in the ssh_config files or passed on the ssh(1) command-line […]“.

Das wars.

Episode 3/2017: A terminal built on web technologies

Heute mal Hyper ausprobiert. Ein JS/HTML/CSS-Terminal.  Nett. Gibts als Electron-verpacktes Binary für alle drei Betriebssysteme.

Die Config-Datei liegt im Regelfall unter ~/.hyper.js, Änderungen werden sofort wirksam (Hot-Reload). Der Sourcecode von Hyper auf Github.

Plugins (Extensions) können in Javascript erstellt werden. Das ganze Terminal lässt sich via Browser-Dev-Tools inspizieren (und auch live verändern).

Tag 363/2016: Packaging

Der Tag war überwiegend Docker gewidmet, vor allem dem Packaging von Applikationen. Docker-Compose rauf und runter, Container anlegen und löschen, Dockerfiles schreiben und Varianten testen, mit Entryfiles spielen; überlegt, welche Schritte bei Installations- bzw. Setup-intensiven Anwendungen wohin zu verorten sind (ins Image, Volumes, Entryfile oder gar nachgelagerte exec-Script-Läufe). Verschiedene Images mit ähnlicher Zielrichtung ausprobiert, Größen verglichen.

Viele hilfreiche Blogs gefunden, manche Artikel allerdings auch schon wieder veraltet und so manche Dockerfiles nicht wirklich an den Best Practices von Docker orientiert. Und viele nehmen die Isolation der Container-Prozesse vom Host als gegeben und hinreichend hin, wenn sie von Security sprechen, ohne sich um weitergehende Möglichkeiten wie die capability-drops oder Absicherung durch Zertifikate zu kümmern.

Alles in allem: Viel gelernt.

Update Tag 15/2017: Link zu einem guten Docker-Cheat-Sheet.

Tag 357/2016: Tränen gelacht

Beim Lesen von Javascript: 2016 in Review von Craig Buckler auf SitePoint bin ich auf diesen Post gestoßen: How it feels to learn Javascript in 2016.

Meine Güte, was hab ich Tränen gelacht.

Es beginnt schon mit

No JavaScript frameworks were created during the writing of this article.

Ok, ein alter Witz, aber immer wieder gut.

Look, it’s easy. Code everything in Typescript. All modules that use Fetch compile them to target ES6, transpile them with Babel on a stage-3 preset, and load them with SystemJS. If you don’t have Fetch, polyfill it, or use Bluebird, Request or Axios, and handle all your promises with await.

Einfach nur gut. Unbedingt lesen.

Tag 333/2016: JS-Kongress in München, Tag 2

Immer noch der JS-Kongress, zweiter und letzter Tag, daher fast das gleiche Foto. Diesmal mit anderen Musikern (analoge Gitarrenmusik). Der Gebärdensprachdolmetscher war der Hammer: Nicht nur, dass er die Musik der Musiker 1a übersetzte – bei der Flut an Fachbegriffen während der Vorträge musste er generell Schwerstarbeit leisten, was er mit Bravour  ([braˈvuːɐ̯]) gemeistert hat.

Heute nochmal Javascript & Robotik + Internet of Things, aber auch Performance Profiling für V8 und die GPU via WebGL für bestimmte Arten von Berechnungen nutzen.

Bei aller Faszination über die Möglichkeiten, die javascriptfähige Microcontroller bzw. -Boards bieten, kam mir doch der Aspekt des Internet of Shit etwas zu kurz: Enthusiasmus und Fun in allen Ehren, aber die Entwicklungen der letzten Monate machen klar, dass Sicherheitsfragen nicht ausgeblendet, sondern elementarer Bestandteil der IoT-Vorträge werden sollten. Der Vortrag vom Vortag Writing Secure Javascript von Guy Podjarny befasste sich ja mit JS im Allgemeinen; er lenkte das Augenmerk darauf, dass der eigene Code im Verhältnis zu den integrierten Bibliotheken meistens eher gering ist und die Sicherheitsanalyse deshalb die Abhängigkeiten auch miteinschließen muss. Sein Projekt snyk bietet dazu Lösungsansätze.

Fazit der letzten beide Tage: Tolle Organisation, viele anregende Vorträge. Hier oder da hätte man zwar noch etwas rausarbeiten können, warum im spezifischen Einsatzzweck nun ausgerechnet Javascript die Sprache der Wahl ist, statt nur die weite Verbreitung zu zitieren, aber hey.

Tag 332/2016: JS-Kongress in München

JavaScript für Microcontroller, 360 & VR-Video, Maschinenlernen mit neuronalen Netzwerken, Security, Spieleentwicklung, Memory-Leaks unter Javascript, Katzen-Tracken mit JS auf dem Raspi, … der erste Tag war ordentlich vollgepackt und Dank der perfekten Organisation ein voller Erfolg. Besonders gut fand ich die Impulse vom Security-Vortrag und die Memory-Leak-Suche, die Hinweise haben einfach Praxisbezug. Beim Spielen mit Arduino-Boards oder Raspi ist mir JS relativ egal, finde es sogar fast ein bisschen „gewollt“, zumindest auf dem Raspi – dort ist Python einfach die Sprache der Wahl.

Die Pausen zwischen den Vorträgen wurden musikalisch von 9-Volt gefüllt, die ihre Musik auf übergroßen CDs verkaufen. „Schallplatten“ nennt man das wohl. Nice!

Tag 281/2016: Lua

Lua kommt dieses Wochenende auf die Todo-Liste. Es wird Zeit, ein paar Sachen direkt in vorgelagerte Proxies auszulagern, statt die (langsamen) Anwendungen dahinter mit Anfragen zu belästigen.

Weblinks von Wikipedia: