How to fix gpg2/pinentry

This guide regards Linux systems, in particular XUbuntu 14.04.4.

When I sign files, I use gnupg2 by running gpg2 -ab FILE from the shell. Then it used to ask me for the password to access my private key to sign the file with.

I haven’t done this since a while and now I run into a problem: The said command pops up a GUI window named pinentry right from the console. I have a long random password so I use a password safe to store it. So I use to copy&paste the password.

But the pinentry window did take keystrokes but not copy&paste! But it let crash my whole X-window-system!

At last I found out that I can uninstall the package named pinentry-gtk2. This step caused that the package system installed another packet (this is the first time I see this) named pinentry-curses. Curses is a library to make GUI-like windows and control on the shell.

Now gpg2 -ab FILE launches the curses-version of pinentry. Now the controls to insert the password appear in the console window without affecting anything. I can copy&paste the password and got my file signed.

This is what I love on Linux: If one thing is broken you can use another thing which works.

However: You don’t let pop up a GUI window out from the shell, aren’t you?! There is curses for that!

Advertisements
Veröffentlicht in Linux. Schlagwörter: , , , . Kommentare deaktiviert für How to fix gpg2/pinentry

Objektorientierung als Wissenstransfer

Ich mache mir recht viele Gedanken darüber, welche Struktur meine Anwendungen haben sollen. Weil in Quellcode soviel Arbeit steckt wird einmal geschriebener Code immer weiter gereicht, manchmal über 3 oder 4 Teams hinweg, die nichts voneinander wissen. Damit der Wissenstransfer trotzdem funktioniert muss der Quellcode verständlich sein. Im folgenden Beitrag soll das Konzept der Objektorientierung anhand eines Negativbeispiels erklärt werden. Ich versichere Ihnen, dass ich mir dieses Beispiel nicht ausgedacht habe.

Wenn darum geht Dinge aus der tatsächlichen Welt „in den Computer zu bringen“, d.h. ein Modell dieser Dinge zu bauen, dann sind für mich Programmiersprachen die von vornherein mit Blick auf das Konzept der Objektorientierung geschrieben wurden und eine statische Typisierung bieten die erste Wahl.

Nehmen wir zwei Arten von IDs. Die eine Art von IDs benennt ein Team, die andere einen Raum oder ein Gebäude. Beide lassen sich semantisch nicht unterscheiden, d.h. ich kann eine ID von jeder Art aufschreiben und beide können gleich sein. Technisch gesehen sind beide Arten von IDs übrigens Zeichenketten (Strings).

Einer der Fehler, den ich selbst gesehen habe: Beide Arten von IDs wurden in einer Anwendung als Zeichenketten herumgereicht. Weil sie technisch gesehen nichts weiter als Zeichenketten zu sein scheinen. Nun gab es in der Software eine Funktion, die ein Team anhand anderer Merkmale als der ID finden konnte. Was aber wenn kein Team gefunden wurde? Dann gab die Funktion „nichts“ (null) zurück.

Als dies in der Anwendung zu Fehlern führte (NullPointerException), wurde die Funktion so geändert, dass versucht wurde anhand der Suchkriterien den Raum zu finden in dem sich das Team aufhielt. In diesem Fall wurde dann statt der Team-ID die Raum-ID zurückgegeben. Das war möglich denn die Funktion gab ja nur eine Zeichenkette zurück.

Früher oder später wird diese Änderung natürlich zu Verwirrung und Fehlern führen. Wie gesagt ich kann anhand der ID nicht sehen, ob es sich um eine Team-ID oder Raum-ID handelt. Es wird viel Geld kosten um das wieder zu richten.

Wenn sich zwei Menschen über IDs unterhalten, dann wissen wir ja welche Art gemeint ist, entweder aus dem Kontext des Gespräches oder sie verständigen sich ausdrücklich darüber („Sprechen wir über eine Team- oder eine Raum-ID?“). Aber der Computer weiß das nicht! Noch schlimmer: Nicht eingeweihte Entwickler wissen es auch nicht!

Wir geben also unser Menschen-Wissen in den Computer ein indem wir für beide Arten von IDs je eine Klasse zu erstellen:
A. TeamID
B. EstateID (für Grundstücke, Räume, usw.)

Beide Klassen scheinen nichts gemeinsam zu haben, oder doch? Beide sind doch IDs nicht wahr? Welches Verhalten haben IDS gemeinsam?

IDs können normalerweise validiert werden. Daher haben sie eine Definition von Validität – sie können valide sein oder nicht. Ich würde jetzt ein Interface namens AnyID hinzufügen und diesem die Methode isValid(): boolean mitgeben. Jetzt haben IDs etwas gemeinsam: Sie sind validierbar. Und wissen jetzt nicht nur Sie und ich sondern auch alle anderen Entwickler Bescheid!

Die Validierbarkeit von Objekten ist überall dort lebenswichtig, wo Objete über Systemgrenzen weiter gereicht werden. Jedes System muss sicher stellen, dass sie eingegebenen Daten valide sind, damit der Versucht sie zu verarbeiten nicht mit einem undefinierten Zustand endet. (Eine leere ID? – Hilfe!!!)

Nun können AnyID weitere Gemeinsamkeiten hinzugefügt werden. Bitte nur solche, die auch wirklich allen IDs gemeinsam sind. Möglich ist es auch, isValid: boolean in ein neues Interface zu verschieben das allen validierbaren Objekten zu eigen gemacht werden kann. Wenn nun AnyID aber gar keine Methoden mehr hat, dann gibt es keine Gemeinsamkeiten zwischen beiden IDs! Und dann muss AnyID weg! Un dann weiß wieder jeder Entwickler Bescheid, dass IDs eben keine Gemeinsamkeiten haben.

Zum Lesen:
[1] Ralf Westphal: OOP as have you meant it, JavaSpektrum 3/2015
Dieser Artikel hat mich vor schlimmen Fehlern bezüglich der Objektorierung bewahrt und mich dazu gebracht mehr von Alan Kay zu lesen.

Alan Kay gilt als derjenige, den den Begriff „Objektorientierung“ geprägt hat. Hier sind seine Gedanken dazu – und was Objektorientierung seiner Meinung nach eben nicht ist:
[2] http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented
[3] http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en

Auf dieser Seite beschäftigt sich jemand sehr gründlich mit dem Lebenswerk und den Gedanken Alan Kays an sich:
[4] http://mythz.servicestack.net/blog/2013/02/27/the-deep-insights-of-alan-kay/

 

Veröffentlicht in InGerman, ObjectOrientation, Uncategorized. Schlagwörter: , . Kommentare deaktiviert für Objektorientierung als Wissenstransfer

Unexpected behavior of FasterXML Jackson

Today I discovered another *) unexpected behavior of FasterXML Jackson in Java.

I was wondering about why a Boolean field provided as part of a JSON serialization of a class was always null, no matter if it was true or false in the JSON.

{ "xyz": true}
{ "xyz": false}

but xyz remained to be null. The class was like

class Abc {
    Boolean xyz;    Boolean xyz() { return xyz; }
}

Finally I found out that the method which returns the field xyz must named getXyz() not otherwise! The related setter must be named setXyz(Boolean b)!

Or you could annotate the field:

class Abc {
    @JsonProperty
    Boolean xyz;

This Q&A on Stackoverflow tells how to name accessor methods right  – thanks to Sotirios Delimanolis.

*) The other unexpected behavior I stumble upon was that it did not only write all fields of the class to JSON – but called also all getter methods and put added their results also to the JSON making a mess of it.

For my understanding of serialization such a method should read the field names of the class and write them to JSON followed by the value of the field in the current object. It should NOT deal with any methods!

Veröffentlicht in Java, json, serialization. Kommentare deaktiviert für Unexpected behavior of FasterXML Jackson

Wolfgang von Heese

Recently I created some website for the Artist Wolfgang von Heese, living in Berlin. Now I need a link to main page to cause Google to display the site in the searchlist.

Veröffentlicht in Uncategorized. Kommentare deaktiviert für Wolfgang von Heese

Fedora 16: How to diable boot splash screen?

Fedora 16: How to diable boot splash screen?
attempt #1: removing all packages found by „plymouth“ with „gpk application / Package Manager for GNOME“ => fail boot splash screen still appears.
attempt #2: edit kernel command line options, remove „rhgb“:
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX=“rd.md=0 rd.dm=0 rd.lvm.lv=vg_sommer/lv_root  KEYTABLE=de quiet rd.lvm.lv=vg_sommer/lv_swap rhgb rd.luks.uuid=luks-***** SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8″
GRUB_CMDLINE_LINUX=“rd.md=0 rd.dm=0 rd.lvm.lv=vg_sommer/lv_root  KEYTABLE=de quiet rd.lvm.lv=vg_sommer/lv_swap rd.luks.uuid=luks-***** SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8″
$ grub2-mkconfig -o /boot/grub2/grub.cfg
=> This leads to success!

edit: replaced hdd id with *****

=-=-=-=-=
Powered by Blogilo

Veröffentlicht in Uncategorized. Kommentare deaktiviert für Fedora 16: How to diable boot splash screen?

Linux: XFCE desktop environment: No borders around the application windows and how to fix it

Problem: After log in a XFCE session the borders around the application windows were missing. There is also only one desktop available.


Reason: The xfwm4 window manager (= the application which provides the borders araound the windows and more) isn’t running. This usually happens after a session was not closed properly.

Solution
(1) Go to Applications menu > Run program or press Alt+F2.
(2) Type „xfwm4 –replace“ in the input field and press run. Do not toggle „Run in terminal“.
(3) Log out from current session making sure „Save session for future logins“ is toggled.

Everything with XFCE  should be fine even after reboot now.

=-=-=-=-=
Powered by Blogilo

=-=-=-=-=
Powered by Blogilo

Veröffentlicht in Linux, XFCE. Schlagwörter: , , . Kommentare deaktiviert für Linux: XFCE desktop environment: No borders around the application windows and how to fix it

A fool issue with Swing / Open JDK 1.6

A fool issue with Swing / Open JDK 1.6
current package (Fedora 16): java-1.6.0-openjdk-devel-1:1.6.0.0-65.1.11.1.fc16 (64-bit)

My application [1] uses a class which handles the data (storing + calculation) [2], a JTable the present it and a JTableModel to connect data and JTable: JTable -> JTableModel -> data class. When removing a data set the application tells the JTableModel which calls the data class to remove the data set and runs the fireTableRowsDeleted(…) method to tell the JTable to remove the corresponding row.

This works fine if there is no cell in the edit mode. Otherwise – if a cell is in the edit mode – an exception (java.lang.IndexOutOfBoundsException) thrown from JTableModel telling that the JTableModel tries to read an index at data class which does not exist. I.e.: data class has 3 items (0..2) the removing item 2 raises the exception „java.lang.IndexOutOfBoundsException: Index: 2, Size: 2“ while the data class has now two items and JTable has now 2 rows => JTable and data class removed the items as it should but JTable did not recognize the change. A similar issue appeared when adding rows. Adding / removing columns is not a problem in my application because my application because adding or removing columns is allowed only in a JTable which can not be edited but if your application permits it the same problem would occur.

The solution was to kick all cells out of edit mode by running the JTable.editingCanceled(ChangeEvent) method for the JTable object i.e. („table“ = JTable object): „table.editingCanceled(new ChangeEvent(table));“ before removing or adding items.

[1] http://sourceforge.net/projects/jdecisiontable
[2] http://sourceforge.net/projects/jdtlib/

Veröffentlicht in Uncategorized. Kommentare deaktiviert für A fool issue with Swing / Open JDK 1.6