Posts

  • Ich habe meine Indiekit Installation auf meinen uberspace account umgezogen. Wenn alles geklappt hat, erscheint diese Notiz auf meinem Blog und auf Mastodon.

  • Monstera

    Diesen Sommer mussten meine Hauspflanzen alle leiden. Ich weiss nicht genau was es war, aber giessen war irgendwie ans Ende der Prioritätenliste gerutscht. Ziemlich viele Pflanzen haben das auch nicht überlebt (Sorry Mango…) aber die Monstera war zu stur um aufzugeben.

    Meine bisherigen Plantportraits sind eigentlich alles Zimmerpflanzen und die Monstera ist eine der ältesten die ich habe. Trotzdem habe ich es bisher nicht geschafft ein gutes Foto davon zu machen.

    Auch dieser Versuch ist weit weg von Zufriedenstellend, aber es ist ein guter Versuch. In meinem Kopf entstand kurz der Titel: Mostera – a new hope; der wurde aber wegen “zu viel Epos” verworfen.

    So bleibt “Monstera” – und ich werde mich hoffentlich besser um sie kümmern und dann vielleicht auch noch mal ein gutes Foto davon machen können.

  • Sonnentau im Store Mosse Nationalpark

    Rundblättriger Sonnentau

    Sonnentau in der Natur habe ich das letzte mal irgendwo in Norwegen als kleines Kind gesehen. In Aachen im hohen Venn bin ich ihm nie begegnet, leider. Obwohl ich recht sicher bin, dass er da auch vorkommt.

    Im Store Mosse Nationalpark in Schweden war er aber kaum zu übersehen. Er wuchs so dicht auf den Pfaden, dass es manchmal schwer war nicht darauf zu treten.

    Jetzt wo der Himmel besonders grau und karg in Berlin ist, gehe ich gern durch meine Fotos von besserem Wetter…

  • Semantic Linefeeds

    Start each sentence on a new line. Make lines short, and break lines at natural places, such as after commas and semicolons, rather than randomly. Since most people change documents by rewriting phrases and adding, deleting and rearranging sentences, these precautions simplify any editing you have to do later.

    — Brian W. Kernighan, 1974

    Semantic Linefeeds

    Natürlich es wäre nicht das Internet, wenn es nicht auch eine Website dediziert zu diesem Thema gibt: sembr.org

    Vielen dank an jan-erik für diesen Link.

  • Reverse Engineering a Neural Network's Clever Solution to Binary Addition

    Reverse Engineering a Neural Network’s Clever Solution to Binary Addition

    There’s a ton of attention lately on massive neural networks with billions of parameters, and rightly so. By combining huge parameter counts with powerful architectures like transformers and diffusion, neural networks are capable of accomplishing astounding feats.

    However, even small networks can be surprisingly effective - especially when they’re specifically designed for a specialized use-case. As part of some previous work I did, I was training small (<1000 parameter) networks to generate sequence-to-sequence mappings and perform other simple logic tasks. I wanted the models to be as small and simple as possible with the goal of building little interactive visualizations of their internal states.

    Ich liebe diese Artikel und sie sind viel zu selten. Ein überschaubares, aber interessantes Problem mit neuronalen Netzen gelernt. Statt so viel wie möglich compute auf das Problem zu werfen auf’s Wesentliche reduziert und echte Erkenntnisse geliefert.

    Die Rolle der Aktivierungsfunktion in dem Fall finde ich besonders Interessant, weil es mehr als nur eine nicht-lineare Funktion ist.

  • From the Shade House to Your House

    From the Shade House to Your House - by Richard DeGrandpre

    There are many reasons why few houseplants grow on to become healthy adults. If you look for reasons online, you’ll find answers like “overwatering” or “inadequate light” or “not enough humidity.” But there is another reason, and one you probably never think about: the grower.

    Obwohl sehr interessant, läuft es bei mir am Ende doch immer darauf hinaus das ich vergesse zu Gießen und dann immer nur halbe Pflanzen rumstehen habe die so vor sich hin vegetieren.

    Nur das mit der Topfgrösse - das war mir echt nicht bewusst. Klar, kalt und nass finden vor allem tropische Pflanzen nicht geil.

  • Ein Test ob indiekit jetzt auch syndication kann. Sollte das mal detaillierter aufschreiben wenn es klappt.

  • Twitter Intentionally Ends Third-Party App Developer Access to Its APIs

    www.macstories.net

    Good riddance, then. Wenn ich Tweetbot nicht mehr benutzen kann, werde ich Twitter nicht mehr benutzen. Auf mastodon ist es sowieso viel beschaulicher.

  • New Year - New CLI

    Manche müssen ja am Jahresende Autos oder Wohnungen putzen; ich dachte, ich mache das Gleiche mal mit meinem Terminal.

    Erstmal homebrew aufräumen und mit aufräumen meine ich: Alles deinstallieren und nur die packages installieren die ich im Moment brauche. Vor allem aber habe ich meine dotfiles von Grund auf neu geschrieben. Damit ich das mal irgendwo Dokumentiere und weil ich selbst gern solche Posts lese, eine kleine Übersicht:

    colorscheme

    Nachdem ich jahrelang hukls Smyck verwendet habe, bin ich jetzt bei gruvbox gelandet.

    Screenshot von diesem Artikel in vim mit dem gruvbox colorscheme

    Vim

    Python

    Die größte Veränderung war definitiv in vim. Als ich ein python Projekt via ssh entwickeln musste, war klar: Ich brauche eine Lösung für autocomplete in vim. YouCompleteMe war das Tool der Wahl als ich meine Masterarbeit geschrieben habe, aber glücklich bin ich damit nicht geworden. Ein Kollege zeigte mir dann die LSP integration in neovim - das sah viel besser aus. Damit ich nicht das wenige neu lernen muss, was ich über vim weiss, war ich froh um vim-lsp, denn damit konnte ich das gleiche einfach direkt in vim integrieren.

    Damit ich ordentlich in python programmieren kann, benutze ich jetzt eine Sammlung an plugins:

    Damit komme ich schon recht weit. Autocomplete funktioniert, ich kann zwischen Definitionen hin- und herspringen und mir Aufrufe von Funktionen und Klassen zeigen lassen. Ein “Problem” mit Plugins ist: Man muss sich immer die neuen Shortcuts merken damit man damit schnell arbeiten kann. Hier also eine kleine Liste derer die ich verwende:

    "
    " LSP 
    " 
    nnoremap <leader>dd :LspDefinition<cr>
    nnoremap <leader>df :LspReferences<cr>
    nnoremap <leader>dr :LspRename<cr>
    nnoremap <leader>dp :LspPeekDefinition<cr>
    nnoremap <leader>da :LspCodeAction<cr>
    nnoremap <leader>dh :LspHover<cr>
    

    Eine Sache die noch fehlt (und die ich in PyCharm sehr viel verwendet habe) ist eine Liste an Funktionen, Klassen und Methoden in einer Datei. Es gibt :LspDocumentSymbol aber das zeigt alles an, inklusive Variablen. Da leidet die Lesbarkeit doch sehr darunter.

    Alte Klassiker

    Plugins die ich schon früher benutzt, aber wieder neu-entdeckt habe:

    Tmux

    Tmux ist und bleibt der Sessionmanager der Wahl. Ich werde mit screen einfach nicht warm. In jedem Terminal, das ichbenutze, istt als default command eingestellt

    tmux attach -t base || tmux new -s base
    

    Damit stelle ich sicher, dass ich immer in die alte tmux session zurückkomme oder eine neue erstellt wird. Das ist eigentlich das wichtigste. Dann benutze ich als theme noch egel/tmux-gruvbox damit es einheitlich ist.

    # Smart pane switching with awareness of Vim splits.
    # See: https://github.com/christoomey/vim-tmux-navigator
    is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
        | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
    bind-key -n C-h if-shell "$is_vim" "send-keys C-h"  "select-pane -L"
    bind-key -n C-j if-shell "$is_vim" "send-keys C-j"  "select-pane -D"
    bind-key -n C-k if-shell "$is_vim" "send-keys C-k"  "select-pane -U"
    bind-key -n C-l if-shell "$is_vim" "send-keys C-l"  "select-pane -R"
    bind-key -T copy-mode-vi C-h select-pane -L
    bind-key -T copy-mode-vi C-j select-pane -D
    bind-key -T copy-mode-vi C-k select-pane -U
    bind-key -T copy-mode-vi C-l select-pane -R
    

    Sorgt dafür, dass ich zwischen vim und tmux wechseln kann.

    ZSH

    Bei der shell bleibe ich bei zsh, aber habe mal wieder oh-my-zsh ausprobiert und teste das jetzt mal ein bisschen. Eigentlich mag ich es nicht, dass da so viel magic passiert von der ich noch gar nichts weiss, auf der anderen Seite war meine alten konfiguration einfach nicht komfortabel genug.

    Ein custom plugin habe ich mir direkt hinzugefügt: localhistory

    alias useHistory="grep -v \"^ls$\|^ll$\|^l$\|^dir$\|^cd \|^h$\|^gh$\|^gh \|^bg$\|^fg$\|^qsm$\|^quser$\|^qstat \|^note \|^mutt\|^std \" | wc -l"
    
    function myLocalHistory()
    {
        if [[ `ls -ld "$PWD" | awk '{print $3}'` == "$USER" ]] ; then
            HISTORYLINE=`history | tail -1 | sed 's:^ *[0-9]* *::g'`
            if [[ "$(echo $HISTORYLINE | useHistory | tr -d '[:space:]')" == "1" ]] ; then
                ((((date +%F.%H-%M-%S.;uname -n) | tr -d '\n' ; echo " $HISTORYLINE") >>.history) 2>/dev/null &)
            fi
        fi
    }
    
    autoload -U add-zsh-hook
    add-zsh-hook precmd myLocalHistory
    
    function h()
    {
         tail .history 2>/dev/null
    }
    
    function gh()
    {
         cat .history | tr -d '\0' | cut -d ' ' -f2- | grep -a "$1"  2>/dev/null
    }
    

    Die Funktion hab ich an der Uni für bash gesehen und mir schon damals für zsh umgeschrieben. Damit lege ich in jedem Ordner eine .history Datei an die alle commands enthält, die in diesem ausgeführt wurden. Quasi eine indirekte Dokumentation. Gerade bei Experimenten, die man erst viel später wieder anschaut eine wichtige Hilfe. Die .history Dateien werden dann in der globalen .gitignore einfach ignoriert.

    Starship Prompt

    Damit auch der prompt hip(ster) wird, probiere ich starship aus. Ist mir oft zu viel Emoji aber die Zwei-zeiligkeit und Plugins sind schon nett.

    Fazit

    Es war mal wieder dran, der Neujahrsputz. Ich habe jetzt wieder eine funktionierende Umgebung auf quasi allen Unix-shells auf denen ich so arbeite. Vim wird mir langsam vertrauter (keine Sorge, ich benutze immer noch die Pfeiltasten…). Es ist wirklich cool, dass ich jetzt auf jedem Server die gleiche IDE laufen habe. Das macht entwickeln wirklich flexibel.