Spieleaufbewahrung

Inzwischen ist meine Brettspiele-Sammlung hier vor Ort auf ein gar nicht mal so kleines Maß gewachsen (lies: ein Billy-Fach reicht nicht mehr aus). Nun bin ja als Perfektionist bekannt, und das hat sich auch auf meine Spiele-Sammlung ausgeweitet: Früher (sic!) war das mit der Organisation des Spiel-Materials einfach: In der Box war ein Plastik-Einsatz, in dem jedes Teil seinen mehr oder weniger festen Platz hatte. Heute sieht das anders aus: Üblicherweise ist die Box randvoll mit Material, was in Plastiktüten geliefert wird. Meistens liegen gleich noch ein paar leere Tüten bei, damit man ein bisschen sortieren kann. Gut, vielleicht liegt das nicht nur daran, dass Plastikeinsätze teurer sind, sondern auch daran, dass ich inzwischen komplexere Spiele mit mehr Material bevorzuge…

Als Perfektionist gefällt mir diese Art der Aufbewahrung aber gar nicht: Alles fliegt nach dem Auspacken mehr oder weniger lose auf dem Tisch rum, und beim Zusammenpacken landet alles wahllos in einer Tüte die viel zu klein dafür ist. Zumindest, wenn nicht ich zusammenpacke 🙂 Dafür muss eine Lösung her! Hier schon mal ein kleiner Vorgriff, wie es jetzt aussieht:

Weiterlesen

Netze in Eagle in Schaltplan und Board verbinden

Zwei kleine Tipps zum Platinenentwurf mit EAGLE, die zwar irgendwie das gleiche Thema haben, eigentlich aber nichts miteinander zu haben 🙂

Signale im Schaltplan kreuzungsfrei verbinden

Stellen wir uns vor, wir haben die unglaubliche Schaltung aus vier Widerständen, die auf genau diese Weise verbunden werden müssen:

Mal abgesehen davon, dass man das Problem hier natürlich leicht durch Umpositionieren der  Widerstände lösen könnte, ist das doch ein häufiges Problem: Leitungen kreuzen sich nun mal. Das dabei ein Hakenkreuz entsteht ist nur eines der Probleme… Weiterlesen

Einfache Sättigungsarithmetik in VHDL

Für ein Projekt an der Uni habe ich mit zwei Kommilitonen ein Malprogram („FPGArt“) auf einem FPGA implementiert. Dabei wird eine Maus per PS/2-Schnittstelle angebunden und das Bild schließlich per VGA ausgegeben. Zu dem Projekt selber später vielleicht mehr, hier jetzt nur ein kleines VHDL-Snippet das man vielleicht man gebrauchen kann.

In dem Projekt wird regelmäßig die relative Bewegung der Maus abgefragt und zu dem alten Wert addiert. Natürlich hat das Bild eine begrenze Größe und der Mauszeiger muss in diesen Grenzen von 800×600 gehalten werden. Es wird also eine sog. Sättigungsarithmetik benötigt: Sollte das Ergebnis der Addition größer als 800 (bzw. 600) sein, oder kleiner als 0 wird es auf den Grenzwert gesetzt. Das ganze ist gar nicht so einfach in Hardware zu implementieren (zumindest ist uns nichts intelligentes eingefallen…).

In jedem Fall muss es ein Zwischenergebnis geben das ausreichend groß ist, um Überläufe überhaupt zu erkennen. Die Maus kann pro Intervall Maximal um 256 bewegt werden, entsprechend muss als ein Wert von 800+256 = 1056 gespeichert werden können. Mit 11 bit kommt man auf 2048, das reicht. Hiermit kann man auch Unterläufe erkennen: 0-256 = -256 was dann 1792 entspricht. Dieser Bereich überlappt auch nicht mit den 1056 nach oben. Es ist also immer einwandfrei erkennbar, dass ein Über/Unterlauf stattgefunden hat.

Weiterlesen

HTTPS mit Umwegen

So, dieser Blog ist jetzt auch vollständig per HTTPS erreichbar, dank eines kleinen „Schubses“ von Google.

Aber der Reihe nach: Vor einiger Zeit hatte ich ein wenig am Blog umgebaut (es gibt auch seitdem ein neues Theme, falls das noch niemanden aufgefallen sein sollte…) und dabei ein paar Links kaputt gemacht. (Ok, alle Links). Freundlicherweise bekam ich kurz darauf eine Mail von Google, auf meiner Website wäre die Anzahl der 404s ein bisschen angestiegen. Der Fehler war schnell gefunden, und die meisten Links waren wieder heile. Ein paar waren immer noch kaputt, was an dem Theme-Wechsel lag, aber auch die hatte ich recht schnell repariert. Und dann sah es so in der Search Console aus:2016-08-09-21_32_12-search-console-dashboard-http___niklas-rother-de_Irgendwie brach der Traffic von Google „etwas“ ein. Auch Piwik zeigte das gleiche Problem: (Zeigt auch schön, wie viel Traffic von Google kommt…)2016-09-22-23_04_19-niklas-rother-computer-mehr-woche-19-25-september-2016-webanalytik-berDer erste Knick nach unten waren die komplett kaputten Links, dann kam der Zeitraum wo einige Links kaputt waren. Der komplette Absturz passierte, als ich alle Links repariert hatte, und die Reparatur in der Search Console von Google auch bestätigt hatte. Jetzt war ich verwirrt. Alle Links waren in Ordnung und Google wirft mich aus dem Index?! Erst dachte ich, das wäre vielleicht nur ein temporäres Problem weil Google die Seite neu indexieren müsste, aber es wurde nicht besser. Laut Google war auch alles in Ordnung.

Was war passiert? Wie bei allen gemeinen Fehlern eine Kombination von mehreren Ursachen. Erstes Problem: Google unterscheidet streng nach URL, man muss in der Search Console mindestens vier Varianten der URL hinzufügen, wenn man alle „typischen“ Kombinationen haben will: HTTP/HTTPS sowie mit und ohne „www“. Heute habe ich dann gemerkt, das ich sehr wohl noch Traffic von Google bekommen habe, aber auf die HTTPS-Seite! Scheinbar hat Google durch das neu-indexieren spitz gekriegt, dass ich hier mehr oder weniger aus Spaß mal ein Let’s Encrypt Zertifikat installiert hatte (automatisch, über netcup), und hat die Besucher auf die sichere Variante geschickt. An sich natürlich lobenswert. Dort sind also schon mal die Besucher geblieben. Glück gehabt, doch nicht aus dem Index geflogen *phew*.

Weiterlesen

Cubemaps aus Portal-Leveln erstellen (und anderen Source-Spielen)

Ein ganz kurzes Intro: Für das Rendering von reflektierenden Oberflächen braucht man eine Cubemap, was im Wesentlichen 6 Bilder in alle sechs Richtungen sind. Davon gibt es haufenweise welche im Netz, aber man kann auch selber welche aus seinem Lieblingsspiel extrahieren, wenn man unbedingt will. In unserem Fall für ein Uni-Projekt, da schreibe ich hoffentlich auch noch mal was zu.

Ich habe das in Portal getestet, grundsätzlich sollte das aber in allen Source-Spielen funktionieren. Ich gehe mal davon aus, das man grundsätzlich mit der Konsole umgehen kann. Die Grundidee ist, sich per Konsole in alle sechs Richtungen zu drehen, und dann immer einen Screenshot zu machen. Zunächst muss das Spiel in der passenden Auflösung gestartet werden, dazu in Steam unter Eigenschaften diese Startoptionen angeben:


-windowed -width 1024 -height 1024

Weiterlesen

Ubuntu 16.04: MySQL startet nicht mehr – Die Lösung

MySQL scheint irgendwie gerne nach einem Update des Systems Probleme zu machen, wie schon damals bei Debian Squeeze. Ich habe das Update heute installiert, und dabei schon ein paar Fehler in Richtung MySQL bekommen, mir dabei aber erst mal nichts gedacht.

Nach dem Upgrade lief dann aber der MySQL-Server nicht mehr, und lies sich auch nicht mehr starten. Ein aptide uprade meinte auch, MySQL wäre nicht richtig konfiguriert, aber lösen konnte es das Problem auch nicht.



Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Weiterlesen

Kurztipp: In Pidgin eigenen Namen ändern

Eine Sache hat mich beim chatten mit Pidgin über XMPP schon immer gestört: Für meine eigenen Nachrichten wurde ein furchtbar langer Name angezeigt. Die anderen Chat-Partner kann man ja relativ einfach in der Buddy-Liste umbenennen, aber für mich selbst habe ich keine Option gefunden.

2016-01-25 15_05_50-TimHeute hat es mich dann noch mal genervt, und ich habe die Einstellung gefunden: Sie ist unter Konten/…/Konto bearbeiten/Lokaler Alias:

2016-01-31 11_11_15-Konto bearbeitenDamit sieht es dann so schön aus, wie in der unteren Hälfte des ersten Bildes. Muss man auch erst mal finden 😉 Ich frage mich noch, was „Benachrichtigung über neue Mails“ sein soll, das klingt bei einem Chat-Programm komisch…

Weiterlesen

Garmin Communicator Plugin und die AddOn-Signierung in Firefox

Mit Firefox 43 hat Mozilla ernst gemacht: Unsignierte AddOn werden deaktiviert, und lassen sich auch nicht mehr aktivieren. Ich dachte immer, das das kein Problem für mich sein sollte, ich konnte mich nicht daran erinnern, jemals ein unsigniertes AddOn installiert zu haben. Heute wies mich dann aber eine freundliche gelbe Leiste auf das Gegenteil hin: Um Wegpunkte von geocaching.com direkt an mein Garmin GPS-Gerät zu versenden braucht man ein AddOn von Garmin, und das ist leider unsigniert. Garmin selbst redet auf der Download-Seite nur Quatsch:

Als Hilfe hat Garmin eine sichere Verknüpfung erstellt, um den Internet Explorer-Webbrowser auf Ihrem Computer zu öffnen und Sie sicher zur gewünschten Seite bei Garmin.com weiterzuleiten.

Weiterlesen

Kurztipp: UPDATE mit ORDER BY in SQL

Heute stand ein kleines Datenbank-Problem an, das eine „kreative“ Lösung erforderte. Die Sortierung von ein paar Elementen basierte auf der Datenbank-ID, aber ein neues Element musste unbedingt in die Mitte. Da es als letztes eingefügt wurde, hatte es aber natürlich die höchste ID (man stelle sich eine typische MySQL-Datenbank mit AUTO_INCREMENT-Feld als Primary Key vor). Zeit für eine „richtige“ Lösung war nicht, also mussten ein paar IDs in der Datenbank verschoben werden: Jeder Kurs rückt eine ID weiter, dann kann später der letzte auf das leere Feld aufrücken. Gesagt, getan:

update courses set id=id+1 where and id>=3041 and id<=3052

Weiterlesen