Vim ist so einiges, aber sicher nicht einsteigerfreundlich. Dennoch bin ich immer wieder fasziniert, wie sich erfahrene Anwender durch ihren Code navigieren und in der kleinen Kommandozeile Aktionen auslösen, für die die meisten erstmal ein anderes Programm starten müssen. Zudem ist alles frei konfigurierbar und vor allem freie Software. Mal sehen, wie ich meinen auf… Von Sublime zu Vim? Ein Um- und Einstiegsversuch weiterlesen
PHP: Output-Buffer ist schachtelbar
Bei der Entwicklung des WordPress-Caching-Plugins Staticly kam die Frage auf, wie man die Output-Buffer ob_start und Co. nutzen könne, während Plugins und andere Code-Teile selbst davon Gebrauch machen. Und tatsächlich macht es PHP dem Nutzer recht einfach, wie das Manual bestätigt: Output buffers are stackable, that is, you may call ob_start() while another ob_start() is… PHP: Output-Buffer ist schachtelbar weiterlesen
Javascript: Klick außerhalb eines Bereiches
Folgendes Beispiel überwacht ein Dokument auf einen beliebigen Klick, außer wenn dieser in einem bestimmten Element (.container) liegt: $(document).on ‚click‘, (ev) -> if $(‚.container‘).has(ev.target).length == 0 # … Dies ist beispielsweise hilfreich um ein Popup oder Dropdown-Menü schließen möchte, wenn der Nutzer „irgendwo“ außer auf das Widget selbst klickt.
RSpec und PostgreSQL: Insufficient Privilege
Bei einem rake spec erhielt ich den folgenden Fehler: PG::InsufficientPrivilege: ERROR: permission denied to create database […] Es mag eine falsche Einstellung sein (ein einfaches rspec verursacht das Problem nicht), aber offensichtlich benötigt der Datenbanknutzer in meiner Konfiguration das Recht, neue Datenbanken zu erstellen. Auf meiner lokalen Maschine, wo die Tests laufen, kann ich das… RSpec und PostgreSQL: Insufficient Privilege weiterlesen
SublimeSpecCreator: Command-Palette nutzen
Gerade bei unregelmäßig genutzten Funktionen vergisst man gern das zugewiesene Tastenkürzel. Hier hilft Sublimes sogenannte Command Palette. Eine Spezifikation für eine Methode kann man nun auch auf folgende Weise generieren: Zu testende Methode markieren Strg+Shift+P createspec (oder Teile davon) tippen, bis Befehl erscheint Enter
SublimeSpecCreator: Specs per Knopfdruck
class User < ActiveRecord::Base def logged_in? # ... end end + Super+Alt+S = require 'spec_helper' describe User do describe '#logged_in?' do | end end SebastianG86/SublimeSpecCreator
WordPress cachen – einfach und effizient
Immer wieder habe ich mich über Caching-Lösungen für WordPress geärgert. Das ging soweit, dass der Platzhirsch W3 Total Cache meine Seiten deutlich langsamer machte. Unzählige Strategien und Einstellungsmöglichkeiten machen dieses Plugin-Ungetüm unnütz kompliziert. Dabei sind die Anforderungen an kleinere Blogs mit wenigen Artikel und Kommentaren recht übersichtlich: Seite nach der Generierung als fertiges HTML in… WordPress cachen – einfach und effizient weiterlesen
Git-Tags löschen
In Git etwas verschwinden zu lassen ist oft gar nicht so einfach. Tags sind jedoch eine Ausnahme. Selbst wenn sie schon auf dem Remote-Server liegen, kann man sie einfach entfernen: git tag -d release1 git push origin :refs/tags/release1 Sehr angenehm, wenn man mal wieder etwas voreilig war.
Fuzzy-Search-Filter für die Bash
Ich hatte kürzlich von meiner nicht hunderprozentig zufriedenstellenden Suche nach einer Fuzzy-Search für die Bash geschrieben. Das Problem ist nicht das Herausfiltern an sich, sondern die Gewichtung der Ergebnisse. Als Maß für die Güte eignet sich die Levenshtein-Distanz. Diese zählt die Notwendigen Ersetzungen, Einfügungen und Löschungen, die nötig sind, um String a in String b… Fuzzy-Search-Filter für die Bash weiterlesen
Nginx: Proxy-Pass unterschlägt Query-Parameter
Folgende Einstellung verursachte, dass beim Zielserver keine Query-Parameter ankamen: location ~ ^/(assets|pages)/ { proxy_pass http://127.0.0.1:3030/$uri; } http://localhost/assets/x/y?p=1 => http://localhost:3030/assets/x/y Einfach das /$uri weglassen, dann wird der komplette Pfad mit Query-Parametern übergeben: location ~ ^/(assets|pages)/ { proxy_pass http://127.0.0.1:3030; } http://localhost/assets/x/y?p=1 => http://localhost:3030/assets/x/y?p=1