preload
Aug 15

Man meint ja, wenn es etwas gibt, was Computer besonders gut können, dann ist es Rechnen. Im Allgemeinen trifft das ja auch zu und auch in diesem speziellen Fall war das Problem letztendlich vor dem Monitor, aber vielleicht hilft der Hinweis hier, dass 2 oder 3 Menschen weniger mit diesem Effekt zu kämpfen haben.

Generell ist unsere bevorzugte Datenbank-Plattform ja Oracle und damit kommen wir auch ganz gut klar. In manchen Fällen müssen wir uns aber auch z.B. mit dem Microsoft SQL-Server® befassen. Und dabei bin ich vor kurzem auf eine Eigenheit des SQL-Servers gestoßen, die mir bislang so nicht bewusst war. Bei Oracle liefert ein Statement der Art

select 8 / 5 from Table

das Ergebnis 1,6. Das gleiche Ergebnis erhält man auch, wenn man zwei Number-Spalten miteinander dividiert, die eben diese Zahlen beinhalten.
Der SQL-Server hingegen ist der festen Meinung, dass das richtige Ergebnis erst einmal nur 1 ist. Der simple Grund dafür: Bei reinen Integerwerten gibt der SQL-Server auch einen reinen Integerwert zurück (den er leider nicht einmal rundet, sondern nur abschneidet). Mein Matheleher hätte mich wohl hochkant aus dem Kurs geworfen mit solchen Rechenkünsten. Aber wie schon erwähnt, steht es auch so in der Dokumentation zum SQL-Server (http://msdn.microsoft.com/de-de/library/ms175009.aspx) und somit kann ich niemandem einen Vorwurf machen, außer mir selbst.
Falls man dem SQL-Server doch zu einer richtigen Berechnung überreden möchte (mit dessen Ergebnis auch mein Mathelehrer einverstanden wäre), muss man mindestens einen der Operanden als Float-Wert darstellen.

select 8 / 5.0 from Table

Bzw. eben mit einem entsprechenden Type-Casting bei den Spalten.

Tja, man lernt eben nie aus und kann auch in der Mathematik immer wieder neue Überraschungen erleben.

Tagged with:
Aug 10

Immer öfter besteht die Anforderung, Webseiten auch auf mobilen Endgeräten verwendbar zu halten – sei es über Anpassungen auf der eigentlichen Webseite oder über eine spezielle mobile Version. Die Datenstruktur sollte sich dabei gar nicht ändern, der Code idealerweise nur wenig. Dazu ist bei der Erzeugung der Ausgabe zwischen dem Ziel zu unterscheiden: Bspw. ein Rechner, irgendein mobiles Endgerät, ein Android-Phone, ein Windows-Phone, usw… Diese Aufgabe lässt sich bequem und sehr einfach mit php-mobile-detect bewerkstelligen…

Weiterlesen

Aug 08

Auf der Manual-Seite zu array_diff lautet die Beschreibung „Ermittelt die Unterschiede zwischen Arrays“ und „Vergleicht array1 mit array2 und gibt die Unterschiede zurück.“ Dieser Beschreibung nach könnte man davon ausgehen, dass der folgende Code-Abschnitt die Elemente von A liefert, die nicht in B vorkommen und die von B, die nicht in A vorkommen; eben „die Unterschiede“.

<?php
  
  $aElementA = array(1, 2, 3, 4);
  $aElementB = array(2, 4, 6, 9);
  
  $aResult = array_diff($aElementA, $aElementB);
  
  var_dump($aResult);
  
?>

Das evtl. erwartete Ergebnis, nämlich array(1, 3, 6, 9) wird nicht geliefert. Stattdessen lautet das Ergebnis array(1, 3)

Ein paar Zeilen weiter unten auf der Manual-Seite wird der erste Parameter beschrieben als „Das Array, das verglichen werden soll“ und der zweite Parameter als „Das Array, mit dem verglichen werden soll“.

Eine etwas besser verständliche Beschreibung für array_diff könnte lauten Liefert A ohne B, denn genau das ist das Ergebnis des Aufrufs: Elemente aus Menge A, die nicht in Menge B vorkommen.