23. Juli 2014

by

In: Allgemein, OpenSUSE, Tech

3 comments

For more than 10 years, PHP core developers repeatedly raised the topic of providing a formal language specification for PHP. Now a team of facebook employees has written such a specification. The spec document is currently only available as a preview chapter a preview chapter . PHP veteran Sara Golemon announced on the “PHP internals” list that the full document will be ready for O’Reilly’s OSCON 2014. Sara Golemon published the standard book on “Extending and Embedding PHP” some years ago and now works for Facebook’s own PHP implementation HHVM. The PHP spec defines PHP version 5.6 in about 200 pages and contains all the odd and obscure quirks of the language core. Facebook’s own HHVM aims to be as close to the spec as possible. Currently, PHP developers discuss how amending the spec can become a mandatory part of the language development process. Though some are sceptic that all developers will embrace the change in the process, everybody on the list was happy to have the new document.

Software Architect Stas Malyshev:

Thank you Sara and Facebook team for doing something we’ve been talking
about for more than a decade and before that nobody actually attempting
to do. I think it is a great development and I hope to see the first
version soon.

http://dl.hhvm.com/resources/PHPSpec-SneakPeak.pdf

23. Juli 2014

by

In: Tech

No comments

Seit über 10 Jahren bringen immer wieder einige der PHP-Sprachentwickler den Plan an, eine formale Spezifikation für den Sprachkern bereitzustellen. Ein Team bei Facebook hat das nun getan. Die Spezifikation, die bisher nur als Vorschau vorliegt, wurde von Sara Golemon auf der Entwickler-Liste angekündigt und soll auf der OSCON 2014 vorgestellt werden. Sara Golemon veröffentlichte schon vor einigen Jahren ein Standardwerk über die Entwicklung von PHP-Erweiterungsmodulen und arbeitet mittlerweile an Facebooks eigener PHP-Version HHVM.

Das rund 200 Seiten starke Dokument orientiert sich an der PHP-Version 5.6 und enthält auch obskure Verhaltensweisen des PHP-Sprachkerns in seltenen Randfällen. Die Facebook-eigene PHP-Version HHVM soll sich möglichst eng an diese Vorgaben halten.

Die PHP-Community berät derzeit, wie sie die Fortschreibung der Spezifikation in den Entwicklungsprozess einbinden kann. Die Ankündigung wurde mit viel Begeisterung aufgenommen.

Software-Architekt Stas Malyshev:

Thank you Sara and Facebook team for doing something we’ve been talking
about for more than a decade and before that nobody actually attempting
to do. I think it is a great development and I hope to see the first
version soon.

http://dl.hhvm.com/resources/PHPSpec-SneakPeak.pdf

17. Juli 2014

by

In: Tech

No comments

Semantic Versioning

Semantic program versions are a great help in administration life: When done right, they help you identify if only bugs have been resolved (2.11.z) or features added (2.y.0) or the program has undergone big changes with chances that an upgrade needs a lot of admin intervention (x.0.0). For developers and early testers, additional suffixes identify alpha (early testing), beta (testing) and Release Candidate (pre-release polishing) versions which are not intended for production use.

The Problem

Sorting program versions is not exactly trivial. You cannot sort them as strings, otherwise you would put 2.2.2 after 2.12.1. You cannot sort them as numbers either, because they contain multiple dots and possibly alpha characters.

Solutions:

a) Fixed-Length Score string

A traditional method expands the version string to a fixed-format score integer or string which can be safely compared and sorted by basic sorting algorithms. This is based on the assumption that there are not more than a fixed number of values per field, i.e. not more than 99 patch versions before the next minor, not more than 99 minor versions before the next major. This is safe for most mainstream projects but corner cases may exist. It also doesn’t play well with development releases.

This solution would first split the version string into its components, then merge them to a string and then run an alphabetic sort on it:

my @versions;
foreach my $version_string (@version_strings) {
  my ($major, $minor, $patch) = split /\./, $version_string;
  push(@versions, sprintf(%02d%02d%02d, $major, $minor, $patch));
}
my @sorted_versions = sort {$a cmp $b} @versions;

This is a simplified example. You need to get back to the original string format, either by a function for reverse conversion or by storing both together in an array of hashref. I also left out handling for alpha, beta, RC versions.

b) Using a sort callback

The sort() routine allows you to specify a callback which decides for any two values $a and $b if they are equal or which is greater. This works by any criteria you can imagine and is also usable for objects and hashes.

This is what we do: We split the version string into a hashref of its components (and a key for the original format, for convenience) and then we define a callback.

sub release_to_version_hash {
  my $release = shift;
  my ($package, $major, $minor, $patch, $dev) = $release =~ /\/(\w+)-(\d+)\.(\d+)\.(\d+)(\w*)/;
  return { 
    major => $major,
    minor => $minor,
    patch => $patch,
    dev => $dev,
    pkg => $package,
    url => $release,
    string => sprintf("%d.%d.%d%s", $major, $minor, $patch, $dev)
  };
}

We use a regular expression to retrieve the version fields.
Note: This code is taken from an open source project of mine.
The release strings have this format:

http://pear.horde.org/get/Horde_ActiveSync-2.16.11.tgz

http://pear.horde.org/get/Horde_ActiveSync-2.4.0RC2.tgz

http://pear.horde.org/get/Horde_ActiveSync-2.3.1.tgz

If your source string is just a version, your regular expression would look like this:

/(\d+)\.(\d+)\.(\d+)(\w*)/

Now let’s get down to business. The actual sorting routine is not very exciting. It gets an Array Reference of Hash References, the hashes being in the format produced above. It returns an array reference (note the [] brackets). The sort routine gets the list (ref) of releases, dereferenced to an array and invokes the compare_versions routine many times, comparing any two values $a and $b inside the releases list which is the “bigger” one.

sub sort_releases {
  my $releases = shift;
  return [sort compare_versions @$releases];
}

Now let’s look at that callback.

## A compare function callback for version hashes, suitable for sort
## returns -1, 0 or 1
sub compare_versions {
  return
    $a->{major} <=> $b->{major} or
    $a->{minor} <=> $b->{minor} or
    $a->{patch} <=> $b->{patch} or
    ## handle development releases
    ( !$a->{dev} && $b->{dev} ? 1 : 0 ) or
    ( !$b->{dev} && $a->{dev} ? -1 : 0 ) or
    lc($a->{dev}) cmp lc($b->{dev})
}

Now what happens here? This routine returns -1, 0 or 1 depending on which versions is “bigger”. In practice, you should never get 0 because you should never have two identic version strings. After the major versions are compared as a number via the spaceship operator (<=>), perl evaluates the result.
If version $a (major) is smaller (-1) or bigger (1) than version $b (major), then this evaluates to a true (non-zero) value. This fulfills the “or” condition, so perl immediately stops evaluating and returns the value. If the major versions are equal, the first expression evaluates to false (0) and the next part of the comparison is evaluated. This is sufficient for sorting major, minor, patch version in that order.

If we also want to handle development releases, we also need the last three lines.
The last line sorts development releases alphabetically, sorting all alphas of the same major.minor.patch before all betas. Normally, perl would sort all empty strings before all non-empty strings, which is bad. It would sort a production version 2.0.0 before the alpha releases.

To fix this, we use the upper two lines:
If a string is empty, it evaluates to false.
So if the first string is false (empty, production) and
the second string is true (any characters, development), the first version is the preferable version. In this case the expression evaluates to 1 and returns. Otherwise it evaluates to false (0) and the next or clause is evaluated. This one checks for the opposite case where version b is the better version and returns -1. If both versions contain a dev string, we skip to alphabetic comparison.

This results in a list where the best version is the last hash entry. Getting the best version is as easy as

$version = pop @versions;
## or
$version = $versions[-1];

Bonus: A versatile filter for all sorts of tasks

This filter is best applied before sorting but it also works afterwards. It can filter out all development releases or return only releases within a specific major version etc:

sub filter_releases {
  my $releases = shift;
  my $filter = shift || 
    { stable => 1, 
      rc => 0, 
      beta => 0, 
      alpha => 0, 
      major => 0, 
      minor => 0, 
      patch => 0, 
      pkg => '' };
  my @legit;
  foreach my $pkg (@$releases) {
    ## filters
    next if ($filter->{pkg} && $pkg->{pkg} ne $filter->{pkg});
    next if ($pkg->{dev} =~ /RC/ && $filter->{'rc'} == 0);
    next if ($pkg->{dev} =~ /alpha/ && $filter->{'rc'} == 0);
    next if ($pkg->{dev} =~ /beta/ && $filter->{'rc'} == 0);
    next if ($filter->{major} && $filter->{major} != $pkg->{major});
    next if ($filter->{minor} && $filter->{minor} != $pkg->{minor});
    next if ($filter->{patch} && $filter->{minor} != $pkg->{patch});
    push @legit, $pkg;
  }
  return \@legit;
}

31. Januar 2014

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Zugegeben, das mit dem Internet-Update steht so nicht da, aber der Rest stimmt. Die Welt – eine Tageszeitung der Axel Springer AG – hat mal wieder bestätigt: Internet ist für uns alle Neuland und der Durchschnittsbürger ist BILD-Leser. Konkret geht es um folgenden Artikel:
Google schleust trojanisches Pferd in Windows 8 ein

Jeder, der weiß, was der Unterschied zwischen dem Internet und einem Browser ist, der weiß auch, dass die Überschrift kompletter Bullshit ist. Gucken wir uns doch mal die Definition für “Trojanisches Pferd” an:

Als Trojanisches Pferd, im EDV-Jargon auch kurz Trojaner genannt, bezeichnet man ein Computerprogramm, das als nützliche Anwendung getarnt ist, im Hintergrund aber ohne Wissen des Anwenders eine andere Funktion erfüllt.
Wikipedia

Liest man sich nun den Artikel aufmerksam durch, stellt man fest, dass damit der ChromeOS-Mode gemeint ist, den Google in der neuen Chrome-Version integriert hat. Genauer geht es darum, dass Chrome mittlerweile als Windows 8-App gestartet werden kann und das UI von Chrome OS mitliefert. Sieht dann so aus:

Google

Fährt man wie bei Windows 8-Apps üblich an einen der Ränder, so kommt man zurück zum Modern UI-Launcher. Alles in allem lässt sich also sagen: Google hat Chrome der Windows 8 Designrichtlinie angepasst. So eine Frechheit!!1 Ein Trojanisches Pferd haben sie in den Windows 8-Kernel eingeschleust, der direkt bei der Installation von Windows 8 im Hintergrund ausgeführt wird!!!!

Die Autoren J. Kupillas und L. Winckler sollten sich schämen, so einen Unsinn zu verbreiten. Als optimistischer Mensch ging ich dann davon aus, dass wenigstens in den Kommentaren ein Shitstorm gegen die nicht vorhandene Kompetenz der Autoren eingeletet wurde. Ja, weit gefehlt.

menschheit_in_einem_bild

Ich bin dann mal weg.

The post Revision #44 – Google baut Trojaner für Windows 8 und das Internet bekommt ein Update appeared first on HeadRevision.

10. Januar 2014

by

In: horde

No comments

A simple Horde Hook to store the last chosen login value in a user preference.
You can use this for example to determine in which language automatic messages by cron job or daemon should be sent.

// // APPLICATION AUTHENTICATED HOOK: See above for format.
public function appauthenticated()
{
global $language;
global $prefs;
if ($language) {
$prefs->setValue('language', $language);

}

// // Code to run when an application is first authenticated
}

If you want, you can modify it so it won’t overrule manual settings in the prefs UI:


if ($language && empty($prefs->getValue('language')) {
$prefs->setValue('language', $language);

}

9. Januar 2014

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Immer wieder gibt es das Problem, dass man auf seinen Rechner aus der Ferne zugreifen möchte, wenn dieser nicht gebootet ist. Dann gibt es entweder die Möglichkeit über Umwege den Rechner mit einem WOL-Request zu starten oder ihn.. naja.. nicht auszuschalten. Was aber, wenn der Rechner dauerhaft dem physikalischen Zugriff entzogen ist und man das System neu aufsetzen möchte? Ohne entsprechendes Recovery-System oder einen Depp-Vom-Dienst-Der-Knöpfe-Drücken-Darf-Service wird man dann nicht weit kommen. Klar, Fernwartungssoftware gibt es zu genüge und auch bei virtualisierten Systemen ist das alles kein Problem, doch gibt es immer noch genug Systeme, die allein aus Performance-Gründen auf dem Host laufen müssen und bei denen eine Einbuße der Rechenleistung durch Aufnahme und Übertragung des Bildschirminhaltes eher suboptimal wäre.

Warum also keine hardwarebasierte Fernwartung? Intel bietet mittlerweile eine KVM-Remote-Technik an, welche theoretisch genau das macht, was ich mir vorstelle, nur gibt es dort zwei Schwachpunkte:

  1. Es braucht wieder eine Person, die ein Passwort angibt. Eine vorkonfigurierte Fernwartung ist also nicht möglich.*
  2. Die CPU sowie das Mainboard müssen diese Technologie unterstützen. Und damit sind sie raus.

Das Konzept

Ähnlich einem KVM-Switch werden Tastatur, Maus, Netzwerk und Video gesplittet und einmal an einen Minicomputer übertragen, welcher später die Fernwartung übernimmt, sowie an die eigentlichen Geräte weitergeleitet. Der Nutzer kann also problemlos weiter auf seinen Monitor starren, sein Internet benutzen und mit Maus und Tastatur Eingaben tätigen. Der Minicomputer nimmt wenn nötig das Bildschirmsignal auf und leitet es über einen per Internet erreichbaren “Proxy”-Server an den Client weiter, andersrum nimmt dieser Maus- und Tastatur-Eingaben von dem entfernten Rechner entgegen und leitet sie weiter an den Endrechner. Somit ist es einem möglich den Rechner vom BIOS an zu steuern und das ganz ohne, dass das System zusätzliche Rechenaufgaben erledigen muss.

Die theoretische Umsetzung

Voraussetzungen:

  • USB-Switch, der es ermöglicht zwei Peripheriegeräte (Maus und Tastatur) von zwei Hosts an einen weiterzuleiten
  • (Ethernet-Switch, der sowohl dem Host als auch dem Minicomputer einen Netzwerk-Port bereitstellt)
  • HDMI-Splitter, der ein HDMI-Signal auf zwei Ausgänge aufteilt
  • HDMI-Capture-Modul, das das HDMI-Signal interpretieren und als Stream wiedergeben kann
  • Minicomputer, der mit dem Rechner, dem Switch und dem Server kommuniziert
  • Proxy-Server, der von beiden Seiten erreichbar ist (erspart Port forwarding)
  • Client-, Proxy- und Server-Software

Steckt man all das elegant zusammen, so bekommt man ein fertiges Produkt, das man als fertigen Service anbieten kann. Die Switches, der Splitter, das Aufnahmegerät und der Minicomputer sind alle in einem kompakten Gerät enthalten, welches der Anwender letzten Endes nur noch zwischen PC und Ein-/Ausgabegeräte stecken muss. Sobald der Minicomputer eine Netzwerkverbindung bezogen hat, kann er sich anhand seiner Seriennummer beim zentralen Server melden und wird dann einem Useraccount fest zugewiesen, welcher nur noch den Client auf einem entfernten Rechner installieren muss. Damit nicht jeder, der das Passwort hat einfach so auf den Bildschirm gucken kann, gibt es natürlich viele Möglichkeiten. Eine wäre, eine Two-Factor Authentication, bei der der Nutzer die Fernwartung erst per Code bestätigen muss oder eine einfache Leuchtdiode, welche anfängt zu blinken, sobald gestreamt wird.

Die Vorteile, die sich mir bei diesem Konzept erschließen sind denke ich mal klar ersichtlich: Wer diese Hardware hat, kann sie garantiert auch nutzen. Wenn also Omi oder Mutti ständig ein Problem mit dem Rechner hat, kann man ihr schnell eine solche Box dazwischen schalten (welche denke ich für 30-40 Euro bei Massenproduktion verkauft werden kann) und muss sich nie wieder Sorgen um den PC machen. Ebenso kann man seine eigenen Systeme fernwarten, selbst wenn der VPN mal wieder ausfällt, weil die FritzBox vergessen hat dem dynamischen DNS-Server ihre neue IP mitzuteilen.

Nachteil: Kostet.

 

*vielleicht lässt sich das aber konfigurieren, wovon ich jedoch nicht ausgehe, da das eine Sicherheitslücke für Unternehmen darstellen würde.

The post Revision #43 – Hardwarebasierte Fernwartung appeared first on HeadRevision.

5. Januar 2014

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Dass es HTC, dem Smartphonehersteller, nicht gerade gut geht, ist keine weltbewegende Neuheit. Samsung verdrängt nahezu alle Konkurrenten komplett und wer keinen Rückenwind bekommt (wie z.B. LG und Motorola von Google oder Nokia von Microsoft), der hat ein echt schweres Leben. Aus diesem Grund wird es nicht mehr all zu lange dauern, bis HTC nicht mehr unter uns weilen wird. Das wäre enorm schade, da ich deren Smartphones eigentlich immer sehr bevorzugt habe, auch, wenn das HTC One ein Reinfall war.

Was macht HTC so besonders? Nun, HTC ist neben Apple die einzige Marke, die Wert auf das Äußere legt. Während Samsung, LG und co. möglichst praktische und billige Gehäuse aus Plastik bauen, priorisiert HTC hochwertigere Materialien und bessere Verarbeitung. Außerdem setzt HTC auf Innovation und überlegt sich, welche Features den Nutzern gefallen könnten. Dadurch bekommen Smartphones dann beispielsweise eine Infrarot-Fernbedienung und HTC Sense spendiert. Doch auch die inneren Werte sind HTC nicht egal. Bei den Premium-Smartphones ist stets die aktuellste Hardware verbaut.

Aber all das kostet Geld. Um das auszugleichen fährt HTC jedoch eine falsche Strategie. Während sie versuchen mit ihren High-Class-Geräten eine Konkurrenz zu Apple zu bieten, bauen sie nebenher Smartphones wie das Wildfire, welche billig in der Produktion sind und an die nicht so anspruchsvolle Kundschaft rausgehen um die High-Class-Entwicklung zu finanzieren. Ein gewaltiger Fehler.

Viele tasten sich langsam an die Smartphone-Welt heran. Oft hört man “zum Einstieg ist mir ein gutes Smartphone nicht wichtig, deswegen habe ich mir das XYZ vom Noname-Hersteller Soundso gekauft”. Viele kaufen auch als erstes Smartphone ein billiges HTC-Phone, da es.. naja.. billig ist. Die meisten Anwender sind mit diesem Billigphone aber nicht ansatzweise zufrieden, da es langsam ist, nicht genug Speicher hat, eine alte Android-Version installiert hat, der Akku nicht lange hält, etc. pp. Die Liste ist endlos weiterzuführen. In diesem Moment steht immer jemand neben einem, der ein iPhone oder ein Samsung Galaxy Sx hat, der dann sagt “ja, ich hab das Problem nicht. Meins funktioniert”. Ist ja auch ganz logisch. Er hat das Doppelte wenn nicht sogar das Dreifache dafür bezahlt. Doch das geht im Gespräch unter. Das Fazit, das diese Person dann zieht, ist: “HTC ist scheiße. Das nächste Handy wird ein Samsung.” Das Problem hierbei ist, dass der normale Anwender nicht zwischen Modell und Hersteller differenziert. Achte mal darauf, wenn du bei Gesprächen zuhörst. Wenn jemand fragt, was man für ein Handy hat, kommt als Antwort entweder “ein iPhone”, “ein Galaxy Sx” (hier wird interessanterweise differenziert), “ein Samsung”, “ein HTC” oder “ein Huawei”.

Der nächste Punkt, den HTC – aber auch Samsung – falsch machen: Es gibt unendlich viele Versionen mit unendlich vielen Features. Guckt man sich mal die Modelle an, die es allein zum HTC One gibt, dann sind das: HTC One, HTC One Vanilla, HTC One Mini, HTC One Max, HTC One SV, HTC One XL, HTC One S, HTC One V, HTC One X.. hab ich irgendeins vergessen? Kommt schon HTC. Ist das euer Ernst? Wer blickt da noch durch? Wenn du nicht gerade in einem entsprechenden Fachgeschäft arbeitest oder es nicht dein Hobby ist, alle Smartphones zu kennen, bin ich mir sicher, dass niemand, aber auch gar niemand in der Lage ist, die Smartphones einzuordnen.

Ein weiteres Problem ist HTC Sense. Die Features sind ja alle schön und gut, aber warum muss dadurch das gesamte OS verunstaltet werden, und vor allem: warum muss das ruckeln? Wenn ihr schon unbedingt ein angepasstes OS liefern müsst um ein größeres Featureset zu haben, dann macht es möglichst unabhängig vom Core-System oder bietet wenigstens die Möglichkeit das Standard-System wiederherzustellen. Das hilft erstens bei der Usability, da jeder, der schon einmal ein Android-Smartphone in der Hand hatte mit HTC klarkommen würde, andererseits auch bei der Performance sowie beim Update-Support. Ich kann mir vorstellen, dass es nicht gerade Spaß macht jedes Update komplett durchzupatchen und zu testen, damit es bei jedem Smartphone funktioniert.

Und das ist der nächste und letzte Punkt: Quality Assurance. Das, was fast nirgends gut läuft. Auch bei mir nicht. Trotzdem ist es essenziell. Was bei Apple dank Steve Jobs immer wunderbar funktioniert hat und jetzt (siehe iOS 7) sehr nachgelassen hat, ist die Qualitätssicherung. Alles, was nicht idiotensicher war und nicht zu 99% fehlerfrei und innovativ war (egal ob die Innovation jetzt geklaut wurde oder nicht), wurde eingestampft oder angepasst, bis das Endresultat nahezu perfekt war. Das funktioniert bei Samsung was die Software angeht sehr gut. Samsungs TouchWiz bietet wesentlich weniger Fehler als beispielsweise HTC Sense.

Die wichtigsten Punkte noch einmal zusammengefasst: Wenn HTC erfolg haben möchte, müssen sie die billigen Smartphones einstellen und sich ausschließlich auf Premium-Hardware konzentrieren, die Auswahl der Telefone filtern und nur vollendete Systeme anbieten, das Betriebssystem nicht zu arg entfremden und zu guter Letzt die Hard- und Software intensiv testen.

Was ist deine Meinung zu diesen Punkten? Worauf legst du bei Smartphones wert? Und was glaubst du, wie HTC in Zukunft aussehen wird?

The post Revision #42 – Warum HTC pleite geht appeared first on HeadRevision.

22. November 2013

by

In: OpenSUSE, Tech

Kommentare deaktiviert

Under some condition, mysql is not able to restart after an upgrade from SLES11 SP2 to SLES11 SP3. The output messages are a bit misleading


131122 14:41:28 InnoDB: The InnoDB memory heap is disabled
131122 14:41:28 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131122 14:41:28 InnoDB: Compressed tables use zlib 1.2.7
131122 14:41:28 InnoDB: Using Linux native AIO
131122 14:41:28 InnoDB: Initializing buffer pool, size = 128.0M
131122 14:41:28 InnoDB: Completed initialization of buffer pool
131122 14:41:28 InnoDB: highest supported file format is Barracuda.
131122 14:41:28 InnoDB: Waiting for the background threads to start
131122 14:41:29 InnoDB: 5.5.33 started; log sequence number 4796605421
/usr/sbin/mysqld: Out of memory (Needed 64 bytes)
131122 14:41:29 [ERROR] Plugin 'INNODB_CMP' registration as a INFORMATION SCHEMA failed.
131122 14:41:29 InnoDB: Unable to allocate memory of size 8120.
131122 14:41:29 InnoDB: Assertion failure in thread 140387876259584 in file mem0mem.c line 361
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
13:41:29 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed,
something is definitely wrong and this may fail.

key_buffer_size=16777216

In the end it turned out to be a permission problem with /var/run/mysql
To fix this:

chown -R mysql /var/run/mysql
rcmysql restart

This did it for me. I had this problem on several but not all instances of mysql on SLES11SP2 upgrading to SLES11SP3. My wild guess is that it is based upon if this was a fresh SP2 install or upgraded from an earlier service pack.

17. November 2013

by

In: Karim Geiger's Head Revision, Visionen

Kommentare deaktiviert

Am 29.02.2012 21:35, schrieb Karim Geiger:
Hi *,

ich hab mich heute über die vielen unterschiedlichen Karten im
Geldbeutel aufgeregt, die ja doch einiges an Platz wegnehmen und immer
mehr werden: Kreditkarte, EC-Karte, BahnCard, Busfahrkarte, ADAC-Karte,
Versicherung, etc...

Warum gibt es nicht eine universelle Karte, auf der die ganzen Daten
(elektronisch) gespeichert werden - vielleicht sogar mit Minidisplay
oder soetwas.

Wenn es einen Hardware-Switcher o.ä. an der Karte gibt, der immer nur
eine gespeicherte Karte an das System raus gibt, fällt das kollektive
Sammeln von Kartendaten doch auch weg, oder? So kann man dann zwischen
Kreditkarte 1 und Kreditkarte 2 beispielsweise wechseln.

Diese Mail ging am 29.02.2012 an eine firmeninterne Mailingliste. Die Antworten darauf waren entweder “braucht doch keiner”, “läuft in Zukunft alles über das Telefon” oder “ist zu unsicher”.

Aufgrund des großen Anklangs und dem vergleichbar hohen Aufwand habe ich die Idee natürlich sofort wieder verworfen, bis mir vor kurzem jemand den Link zu Coin geschickt hat. Das in 2014 startende Projekt ist eine exakte 1 zu 1-Kopie meiner Idee: Eine Verknüpfung von beliebig vielen Karten, welche per Hardwarebutton und Minidisplay gewechselt werden können. Zugegeben, das Feature, dass die Karte via Bluetooth meckert, wenn sie vom Smartphone entfernt wird, ist neu, aber die Grundidee ist exakt die selbe.

Theoretisch könnte ich also mittlerweile auf der faulen Haut liegen und meine Millionen zählen, die ich dank der Umsetzung der Idee gemacht hätte. Wär ja nicht das erste mal, dass Ideen von mir, die erst für sinnlos oder unnütz gehalten werden, umgesetzt werden. Ärgerlich. Mal gucken, welche Idee als nächstes umgesetzt wird. Auf meiner Liste stehen noch ein paar.

The post Revision #41 – Coin appeared first on HeadRevision.

2. November 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Urlaub ist etwas schönes. Und jeder verbringt ihn gerne anders. Die einen fahren ans Meer, die anderen fliegen auf eine schöne Insel, wieder andere gehen feiern und manche machen einfach nichts. Ich gehöre zu den Personen, die sich im Urlaub die Freiheit nehmen einfach nichts zu tun.

Ich nehme diesen Blog gerne als eine Art Q&A für mich her. Wenn mir oft Fragen gestellt werden, die eine lange Antwort oder Diskussion nach sich ziehen, schreibe ich hier darüber und muss dann nichts anderes tun als:

X: Findest du Android oder iOS cooler?
K: http://www.headrevision.de/revision-26-android-und-ios/

Find ich super. Erspart mir Arbeit. Aber um zurück zum Thema zu kommen: Ich hatte gerade zwei Wochen Urlaub. Nichts tun bis zum Umfallen und danach nicht das leidige Ich-Hab-Heute-Nichts-Geschafft-Gefühl haben. In diesen zwei Wochen bin ich zu meinen Eltern in die schöne Pfalz gefahren, um dort etwas Ruhe vor dem Alltag zu haben. Nach kürzester Zeit hat sich rumgesprochen, dass ich zu Besuch bin, und plötzlich hat das Handy fast jeden Tag eine neue Nachricht von alten Bekannten durch energisches Bimmeln gemeldet. Das sah dann etwa so aus:

X: Hii! Na, wie gehts? Lang nichts mehr gehört. Komisch, dass wir uns so wenig unterhalten. Haha XDD
K: Moin :) Mir gehts super, und selbst? Ja, sehr komisch.
X: Auch! Hab gehört du bist wieder in der Pfalz! Lass mal treffen!
K: Nein, ich hab Urlaub.
X: Ja eben! Da unternimmt man was mit Freunden!
[...]

Ich aber nicht. Ich weiß nicht, ob das irgendwie total abnormal ist oder ich einfach ein sozial gestörter Mensch bin, aber für mich sind soziale Interaktionen nicht immer etwas schönes. Das ist etwas schwer zu beschreiben und ich bin mir zu 99% sicher, dass du jetzt ein absolut falsches Bild von mir hast. Für dich sieht das jetzt aus, als wär ich ein Kellerkind, das nie geliebt wurde und nicht weiß, wie viel Spaß man doch mit Freunden haben kann. Stimmts, oder hab ich recht? ;)

Ich weiß, dass man mit euch allen sehr viel Spaß haben kann und ich schätze das auch, nur möchte ich im Urlaub einfach meinen Urlaub. Und dazu gehört für mich eben nicht irgendwo hin fahren um dort dann “die Sau rauszulassen” oder “einfach mal abzuschalten und zu feiern”, denn dabei kann zumindest ich nicht abschalten. Wenn ich abschalten möchte, bewege ich mich in meinen 4 Wänden und entspanne mich. Wenn ich also in meinem Urlaub nichts mit dir zu tun haben möchte, ist das (meistens) nicht, weil du scheiße bist, sondern weil ich im Urlaub bin.

Ich habe mir eine Theorie zurecht gelegt, die in meinen Augen ganz gut erklärt, warum mich manche bei diesem Thema partout nicht verstehen können und warum es für sie dann immer gleich heißt “oh, dem gehts grad nicht gut”. (Mir gehts hervorragend, wenn ich nicht immer irgendwo irgendwas irgendwie machen muss!) Natürlich ist das nur eine Theorie und nicht jeder Mensch ist gleich, aber damit kann ich ein wenig besser verstehen, wieso ihr so reagiert, wie ihr reagiert:

Ich glaube, dass sich viele Menschen in Situationen, die sie negativ belasten, wie folgt verhalten: Sie realisieren, dass ihnen etwas fehlt bzw. es ihnen nicht gut geht und suchen die Ursache. Das passiert natürlich daheim, wenn man Zeit hat nachzudenken und in sich zu gehen. Dann bemitleiden sich die Personen selbst (ist ja normal, alles andere wäre Selbstmord), und versuchen, etwas dagegen zu tun. Die einfachste Lösung, die vielen Einfällt ist (leider): Saufen. Dann sind die Gefühle erstmal weg. Da das aber nicht jedermanns Sache ist, fängt man an sich abzulenken und die schlechten Empfindungen mit positiven zu überspielen. [Kleine Randnotiz: Ich habe das in der Schule mal aufgeschnappt. Ein Wissenschaftler hat wohl mal herausgefunden, dass wir nur eine gewisse Spanne an Gefühlen behalten können. Erzeugen wir also Glücksgefühle, fallen die schlechten also irgendwann hinten "von der Bank" und uns geht es wieder gut. Wenn jemand einen Link zu weiterführenden Infos hat, bin ich sehr dankbar.] Das Überspielen der Emotionen geht natürlich optimal, wenn man sich mit Freunden trifft und etwas unternimmt oder feiern geht. Insofern folgert man daraus: Wer daheim sitzt, dem geht es nicht gut. Wie kann ich ihm helfen? Ah! Wenns mir nicht gut geht, treff ich mich mit Freunden. Bin ich also mal ein guter Freund und nehm ihn mit. Ob er will oder nicht. Tut ihm gut.

Ja! Nett von dir! Aber mir gehts bereits super! Ich muss nicht unbedingt aktiv sein, damits mir gut geht!

Noch ein Wort an all die, denen ich diesen Link persönlich geschickt habe: Ich weiß zu schätzen, dass du dich um mich sorgst und gerne etwas mit mir unternehmen möchtest und ich kann dich auch gut leiden, aber ich möchte gerade einfach nicht, weil ich nicht das Bedürfnis habe, mich mit jemandem zu treffen.

Mich würde außerdem interessieren, wie du, werter Leser, zu dem Thema stehst. Welche Seite kannst du nachvollziehen und wie verhältst du dich?

The post Revision #40 – Lass uns mal was machen appeared first on HeadRevision.

30. Oktober 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Es ist 4 Uhr und ich sitze seit knapp 3 Stunden daran, ein Video auf meine Website zu stellen. Ist ja eigentlich nicht schwer. Hochladen, entsprechenden Player finden und einbinden, fertig. Theoretisch. Das Tolle ist, dass ich natürlich alle Browser unterstützen möchte, eine Allergie gegen Flash habe und Wert auf Qualität lege. Mit diesen drei meiner Meinung nach absolut nachvollziehbaren und nicht zu viel verlangten Punkten ist es aber nahezu unmöglich eine Lösung zu finden.

Wir leben im 21. Jahrhundert, dem Zeitalter der Medien. Da möchte man doch meinen, dass es schon die ein oder andere Person vor mir gab, die versucht hat ein FullHD-Video auf einer ganz normalen Website einzubinden. Auch möchte man meinen, dass es kein all zu großes Hexenwerk ist, diese einfache Aufgabe zu erledigen. Leider leben wir aber auch im Zeitalter der Patentkriege und des Wettstreits. So haben es die großen Browserhersteller noch immer nicht geschafft etwas derartiges auf die Beine zu stellen.

In dieser Tabelle ist schön übersichtlich aufgezeigt, welcher Browser was nicht kann. Die einzigen zwei Videoformate, die von allen Browsern (Internet Explorer ist kein Browser) unterstützt werden, sind das neue WebM von Google und das freie Ogg. So weit so gut. Ein Standard. Ich werd verrückt, ist ja wunderbar! Gleich mal das 1080p-Video in die beiden Formate konvertieren und gucken, welches die bessere Qualität hat.

Gesagt, getan. Alle Videos miteinander verglichen und – heilige Scheiße. Dass die sich überhaupt trauen mit so etwas an die Öffentlichkeit zu gehen.. das ist doch peinlich. Weder das ganz neue und gehypte ach so tolle WebM noch Ogg haben auch nur annähernd ein klares Bild. Die Datei ist zwar schön klein, aber man kann sogar die Pixel zählen. Für mein altes Sony Ericsson CyberShot-Handy mit einem 1,9 Zoll-Bildschirm sieht das bestimmt wunderschön aus, aber an einem Computerbildschirm mit einer höheren Auflösung als 1024×768 Pixeln ist so ein Video ein Graus. Von HD keine Spur. Du glaubst mir nicht? Sieh selbst (ein Klick vergrößert):

Gut, WebM und Ogg sind also raus. Bleibt noch MP4. Laut Tabelle wird das ja von allen bis auf Opera unterstützt. Wait, what? Oh. Kleingedrucktes: Chromium kanns nicht und bei Firefox steht etwas von “Partial”. Etwas herunter gescrollt sieht man, was das Partial bedeutet: Windows kanns, OS X nicht und von Linux ist keine Spur. Aber Hauptsache Firefox OS steht mit auf der Liste.

Ich stehe nun also vor folgendem Problem: Einen Tod muss ich sterben. Doch welchen?

  1. Ich supporte nicht alle Browser. – Inakzeptabel. Ich denke da muss man nicht groß drüber reden.
  2. Ich mache Abstriche in der Qualität. – Klar. Retina gibts ja noch nicht und FullHD wird auch überbewertet. Das ist also auch inakzeptabel.
  3. Ich nutze Flash. Flash kann – warum auch immer – mit allen Formaten umgehen. Und jeder Browser kann Flash. Abgesehen von den mobilen Browsern. Da muss wieder eine HTML5-Version her. Ist das nicht super?

Also, meine Damen und Herren: IST ES DENN SO SCHWER EINEN EINHEITLICHEN CODEC ZU HABEN, DER MIT ALLEN BROWSERN AUF ALLEN SYSTEMEN IN ANGEMESSENER QUALITÄT FUNKTIONIERT? Krass.

Update 4. November 2013: Ich fange noch an an Wunder zu glauben. Oder der Cisco CEO liest meinen Blog, kann natürlich auch sein. Auf jeden Fall hat Cisco gerade bekannt gegeben, dass sie den H264 Codec unter Open Source Lizenz stellen werden. Das löst von heute auf morgen all meine Probleme, da nun der Mozilla Firefox vollen Support anbieten wird und auch Opera das Format (da Open Source) integrieren wird. GEIL!

The post Revision #39 – Von MPEG-4/H.264, WebM/VP8 und OggTheora appeared first on HeadRevision.

18. Oktober 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Der heutige Podcast behandelt das neue Social Network Google+, das sich immer mehr den Weg in die Köpfe der User bahnt. Wo Google+ aktuell steht und wie es in der Zukunft aussehen wird, erfahrt ihr im Headrevision Podcast.

Direktlink zu HearthisDirektlink zur MP3 - Alle FolgenPodcast FeedHeadRevision auf iTunes

The post Podcast #03 – Google+ appeared first on HeadRevision.

18. Oktober 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Wer die Unix-Befehle du, ls und df gerade zum ersten mal hört, kann hier aufhören zu lesen. Alle anderen: Willkommen zu unseren heutigen Diskussionsrunde. Ich möchte heute ein in meinen Augen sehr interessantes Thema ansprechen. Dazu haben wir folgende Testumgebung. Zum selber machen:

dd if=/dev/zero of=mountme.img bs=1024 count=0 seek=$[1024*1024]
mkfs.ext3 mountme.img
mkdir mount && sudo mount mountme.img mount/
dd if=/dev/zero of=mount/image.img bs=1024 count=0 seek=$[1024*100]

Was passiert in den vier Zeilen? Erst erstellen wir ein Image von einem Gigabyte Namens mountme.img und formatieren es mit ext3. Danach erstellen wir den Ordner “mount” und binden es dort ein. Wir haben nun eine zweite Partition, auf die wir zugreifen können (mehr dazu später). Dort wird mit der letzten Zeile ein weiteres Image Namens image.img mit einer Größe von 100MB erstellt.

Das interessante daran ist nun der seek-Teil im dd-Befehl. Er sorgt dafür, dass die 10MB nicht mit Nullen vollgeschrieben werden, sondern dass der Platz nur allokiert wird. Das bedeutet, dass das Dateisystem einen Start- und einen Endpunkt angibt und sagt: “So, und der Teil zwischen Start und Ende ist für das Image reserviert, aber noch nicht beschrieben.” Das Image hat auf der Platte somit keine 100MB belegt, sondern nur reserviert.

Untersuchen wir das Phänomen doch einmal. Wie wärs mit einem ls?

$ ls -lh mount
total 0
-rw-rw-r– 1 geiger geiger 100M Okt 18 15:31 image.img

Interessant. Neben der Datei wird wie erwartet 100M ausgegeben, da das Image ja 100M reserviert hat, die nun für nichts anderes mehr benutzt werden können. Guckt man sich aber den total-Count an, der in der ersten Zeile der Ausgabe steht, sieht man die tatsächliche Bytegröße: 0. Etwas verwirrend, oder? Sollte da nicht 100M stehen?

Warum dem nicht so ist, wird deutlich, wenn wir mal den Befehl du (disk usage) auf den Ordner mount abfeuern. Wir sehen:

$ du -ah mount
0 mount/image.img
4,0K mount

Die Image-Datei hat also tatsächlich nicht einen Byte auf der Platte beschrieben. Diese Ausgabe ist auf den ersten Blick auch wieder etwas seltsam, jedoch nachvollziehbar, da das Programm ja disk usage heißt. Wenn es also nur den tatsächlichen Verbrauch ausgibt, sei ihm verziehen. Hängen wir ein –apparent-size an, wird die reservierte Größe wie erwartet angezeigt:

$ du -ah –apparent-size mount
100M mount/image.img
101M mount

Und jetzt kommts: df, was für “disk free” steht und den freien bzw. belegten Speicherplatz eines Dateisystems ausgibt, wirft folgende Ausgabe:

$ df -h mount
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 1008M 34M 924M 4% /home/geiger/foo/mount

Wir sehen 34M, die belegt sind. Diese kommen durch die Dateisysteminformationen von ext3. Warum werden aber die 100M nicht mitberechnet? In meinen Augen ist das ein Fehlverhalten von df, da damit ja der tatsächlich freie Speicherplatz angezeigt werden soll und nicht der Platz, der auf dem Datenträger wirklich belegt ist. So läuft man relativ schnell ins Messer, wenn man viele Images auf der Platte hat und diese allmählich vollläuft.
Update: Die 100M werden nicht angezeigt, weil sie noch zur Verfügung stehen. Mein Problem ist somit also geklärt. Es ist auf den ersten Blick etwas verwirrend, aber doch korrekt. Die einzige Sache, die meiner Meinung nach nicht ganz optimal gelöst ist, ist die total-Anzeige bei ls. Aber auch diese hat ihre Daseinsberechtigung, allein schon aus performancetechnischer Sicht.

The post Revision #38 – du vs. ls vs. df appeared first on HeadRevision.

13. Oktober 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Deutschland hat beschlossen: Ab jetzt gibt es auf den Zigarettenschachteln sogenannte Schockbilder. Diese zeigen Auswirkungen der Zigaretten, die in der Packung enthalten sind und sollen dazu dienen die Käufer abzuschrecken. Wie die Schachteln in Zukunft aussehen könnten, zeigt das Bild rechts. Du ahnst es sicher schon: Ich bin nicht erfreut darüber. Ich selber bin kein Raucher, trotzdem bin ich gegen solche Bilder.

Solche Bilder sind auf den ersten Blick erst einmal sehr grausam und ich wünsche niemandem ein solches Erlebnis. Trotzdem sind sie eher kontraproduktiv als dass sie dem Konsum entgegenwirken. Man sieht mal wieder, dass die Politik nur gehandelt hat, damit das Volk erst einmal Ruhe gibt, denn mir kann keiner erzählen dass niemandem die Punkte, die ich gleich ansprechen werde, aufgefallen sind.

Warum sind diese erschreckenden Bilder also kontraproduktiv? Nun, ganz einfach. Da jeder erwachsene an diesen Bildern in Zukunft mindestens einmal pro Woche vorbeiläuft – sei es an einem Plakat oder im Supermarkt – prägen sich die Bilder im Unterbewusst sein ein. Erst findet man sie abschreckend, bald nimmt man sie wahr und denkt sich vielleicht noch ein “mh. unschön.” und irgendwann ist es wie mit den “Rauchen kann tödlich sein”-Texten. Niemand weiß mehr, dass sie existieren. Sie werden komplett ausgeblendet. Die Menschen werden abgehärtet, die Kinder haben in der Schule, wenn sie zum ersten mal die Auswirkungen des Rauchens gezeigt bekommen, nicht mehr diesen Oh-Gott-Ist-Das-Schrecklich-Moment, sondern denken sich einfach “jo, hab ich im Supermarkt schon gesehen”.

Und mit dieser perfekten Überleitung (bin selbst überrascht) geht es weiter zum nächsten Punkt, der mich fast zur Weißglut bringt. Diese Bilder sind auf den Zigarettenschachteln. In jedem Supermarkt. An jeder Tankstelle. An jedem Automaten. Jedes Kind egal welchen Alters kann diese Bilder sehen. Der Staat achtet penibelst darauf, dass grausame Bilder nicht an Jugendliche geraten. Im Internet sollen solche Seiten zensiert werden oder erst ab 22 Uhr zugänglich sein, Computerspiele werden nur nach Vorlage des Personalausweises herausgegeben oder gleich zensiert und Filme mit einem solchen Inhalt werden aus dem Free-TV verbannt oder erst nachts gezeigt. Und dann sieht man an jeder Straßenecke Zigarettenschachteln mit Bildern von wuchernden Tumore an Menschen, entfernte und verschmutzte Lungen, abgestorbene Organe, verfaulte Münder, und, und, und.. Das kann doch nicht deren ernst sein.

Wenn ich mich an meine Kindheit zurückerinnere habe ich nicht dann schlecht geträumt, wenn ich meinem Kumpel zugeschaut habe, wie er ein paar Menschen in GTA erschossen hat oder wie jemand in einem Film ein Alien erdolcht hat, sondern wenn ich die oben erwähnten Bilder zu Gesicht bekommen habe. Bilder, die real sind. Bilder von Menschen wie du und ich, die grausam sterben müssen oder übel zugerichtet wurden. Was ist also besser? Schockbilder auf Zigaretten, die nach drei Monaten ihre Wirkung vollständig verloren haben oder ein komplettes Verbot der Glimmstängel?

Thailand Tobacco

The post Revision #37 – Schockbilder auf Zigarettenschachteln appeared first on HeadRevision.

6. Oktober 2013

by

In: Karim Geiger's Head Revision

Kommentare deaktiviert

Nein, tu ich nicht.

Aus aktuellem Anlass* – und weil ich diesen Satz mittlerweile schon 3-4 mal gehört habe – möchte ich meine Meinung dazu äußern. Doch worum geht es konkret? Wirkt man in diversen Projekten mit, so nimmt man wohl oder übel Stellung zu einem gewissen Thema. Um keine Namen zu nennen (ich möchte ja niemanden repräsentieren), nehmen wir einfach folgendes Beispiel: Ich arbeite in der Redaktion XboxNewsOnline**. Diese verbreiten ausschließlich News über Microsofts Xbox. Wenn ich nun aber mit meiner Playstation 3 in der Hand herumrenne und schreie “Hey! Die PS3 ist besser!”, kommt mindestens ein Mitarbeiter von XboxNewsOnline an und meint “Ey Karim. Kannste doch nicht machen. Du repräsentierst damit XboxNewsOnline!”

An dieser Aussage ist laut aktuellem Beispiel erstmal nichts falsch. Wenn ich mit der PS3 in der Hand im Firmensitz von XboxNewsOnline herumrenne oder mir ein T-Shirt von ihnen anziehe, dann ja. Dann repräsentiere ich damit XboxNewsOnline und sollte deswegen nicht mit einer Playstation 3 rumlaufen. Wenn ich nun aber in der Einkaufsstraße in München ohne Firmenlogo o.ä. mit der Konsole wild um mich her fuchtle und von mir aus auch meinen Namen dabei rausposaune, dann bin ich verdammt noch mal nicht Repräsentant von XboxNewsOnline, sondern einfach Karim Geiger, der die Playstation besser findet als die Xbox***.

Ich achte immer sehr genau darauf, welche Informationen wo an die Öffentlichkeit/das Internet gelangen. Insofern achte ich auch darauf, dass Aussagen, die irgendwie das Geschehen des Projekts, in dem ich mitwirke, beeinträchtigen könnten, nicht in direktem Zusammenhang dazu stehen. Wer jedoch denkt, dass ich einer dieser Groupies bin, die ihre Meinung komplett auf eine Richtung schlagen, nur weil sie von Samsung LG ein Smartphone geschenkt bekommen haben oder weil sie jetzt in einer Firma arbeiten, die Projekt XY anbietet, der sollte noch einmal überdenken, wofür er selbst wirklich steht und nicht, wofür andere stehen. Ich lasse mir nicht vorschreiben, welche Meinung ich zu vertreten habe und versuche immer – egal in welcher Position ich mich befinde – objektiv zu bleiben. Dass mir das nicht immer gelingt steht außer Frage, ich bin schließlich auch nur ein Mensch, trotzdem versuche ich mein Bestes zu geben um nicht Partei zu ergreifen.

Wenn du zu dem Thema eine andere Meinung hast oder meiner Meinung zustimmst (also so oder so), würde ich mich über eine Reaktion freuen.


* Nein, es geht nicht um die Firma, in der ich arbeite.

** Name frei erfunden.

*** Stimmt nicht. Ich mag die Xbox lieber.

The post Revision #36 – Du repräsentierst damit XYZ! appeared first on HeadRevision.