Mittwoch, 17. Dezember 2014

IE Post empty with NTLM

With NTLM login enabled sometimes data send with POST is missing. This is because IE has an internal timeout and tries to recheck NTLM.

With fiddler you can see the problem. One hacky solution is to catch this request and response with a fake answer. After this the IE will send the normal POST data.

To get the correct NTLM response use fiddle during a NTLM login. Switch the inspector to "Auth" and look for the "Type: 1" response and replace below with long string behind "WWW-Authenticate: NTLM". Place this at the top of your page and it will catch and respond to any IE NTLM request.


$headers = apache_request_headers();
$auth = $headers['Authorization'];
if ($auth && substr($auth,0,5) == 'NTLM ')
{
    $msg = base64_decode(substr($auth, 5));
    if ($msg[8] == "\x01") {
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate: NTLM ');
        exit;
    }
}

Note: This might be a security risk. Make sure to check the user Session and send him to your NTLM login is needed.

Like it? Share it! Flattr this

Montag, 15. Dezember 2014

Nachricht schicken über die linux bash

Wer ist online?

# who
user1    pts/0        2014-12-15 11:33 (12.12.45.34)
user2 pts/1        2014-12-15 11:57 (56.23.53.54)

Nachricht an Benutzer user2 schicken:

# write user2 pts/2
Hallo,
nur mal so!

Ctrl+D zum Abschicken.




Like it? Share it! Flattr this

Montag, 1. Dezember 2014

Menschen und Roboter

Robot und Frank

Gestern hab ich den Film "Robot und Frank" geguckt und er hat meine Erwartungen voll erfüllt. Ich mag Filme, die sich mit der zunehmenden Verbreitung von Robotern auseinandersetzen. Die kritisch hinterfragen wie sie in die Gesellschaft integriert werden und welche Vor- und Nachteile sich daraus ergeben.


Real Humans

Thematisch die gleiche Richtung schlägt die schwedische Serie Real Humans ein. Diese ist selbst auf schwedisch mit englischem Untertitle noch sehr sehenswert. Inzwischen gibt es jedoch auch Deutschen Ton.



Die zweite Staffel gibt es zwar, aber konnte ich bisher nicht finden.

Like it? Share it! Flattr this

Donnerstag, 6. November 2014

webid-solutions ing-diba Warteschleife schummeln

Ich liebe Web-Anwendungen, vor allem wenn sie sauber geschrieben sind. Vor allem weil das JavaScript schön Open Source ist und man als Anwender die frei Kontrolle über die UI hat.

So habe ich neulich ein Konto bei der ING-DiBa angelegt und die bequeme Legitimation per Video-Call genutzt. Leider hängt man dabei recht lange auf der Webseite www.webid-solutions.de/diba und wartet auf einen Ansprechpartner. Besonders nervig, dass man nur alle 30 Sekunden neu Versuchen kann und dann wartet man wieder.

Die Warte Zeit kann man aber gut nutzen um eben mal den Source Code auf zu machen und die callSkype() Funktion zu suchen. Dort ist schnell die lästige alert() Meldung, dass man doch 30 Sekunden warten soll ersetzt durch ein automatisches neu versuchen. Einfach F12 und die Funktion in die Console kopieren und schon ist das Warten vorbei:

function callSkype() {
    var xmlhttp;
    var theUrl = "https://webid-gateway.de//service/skypename/cn/000112/ai/160746000";
    var d = new Date();
    var t = d.getTime();

    clickcounter = clickcounter + 1;
    if (clickcounter == 2) {
        document.getElementById("callback_box").style.display                  = "block";
    }
    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.responseText !== "") {
                window.location = "skype:"+xmlhttp.responseText                       +"?call&video=true";
            } else {
                // nein ich möchte nicht warten
                // sondern es direkt nochmal probieren:
                callSkype();
            }
        }

    }
    xmlhttp.open("GET", theUrl, true);
    xmlhttp.send(null);
    lastClick = t;
}
callSkype();


Like it? Share it! Flattr this

Dienstag, 16. September 2014

Jetzt ohne Werbung!

Wie angekündigt ist die Google Werbung hier im Blog nun abgeschaltet.

Ich muss jedoch anmerken, dass in den letzten 5 Monaten niemand auf einen Flattr Button gedrückt hat! Wahrscheinlich fehlt dazu hier das passende Publikum. Ich lass vorerst trotzdem Flattr mal noch drin...

Like it? Share it! Flattr this

Mittwoch, 18. Juni 2014

Passwörter verschicken

Webanwendungen sollte nie Passwörter verschicken sondern nur einen Passwort-Rest Link. Trotzdem kommt es in der Praxis leider manchmal vor das man jemand ein Passwort schicken will und der Empfänger leider kein GPG oder S/MIME hat.
Hier kann man dann ein passwort-geschützes Archiv schicken oder aber wenn sonst wirklich nichts geht einen Dienst wie https://onetimesecret.com/ benutzen. Das am besten jedoch nur, wenn man die Open Source Version selbst installiert hat. Mit https natürlich! Onetimesecret zeigt den Content nur einmal an und dann nie wieder.

Like it? Share it! Flattr this

Montag, 16. Juni 2014

Bitbucket: Search file size to find big files

To find big files in your repository you can press F12 and search in your browser using the Bitbucket Api. Here is an example:
function getFolder(name){
 $.getJSON(name, function(response)
 { 
  $.each(response.directories, function(i, a)
  { 
   getFolder(name + '/' + a);
  } );
  $.each(response.files, function(i,a){ 
   if (a.size > 1024*1024 ) console.log(name, a);
  });
 });
}

getFolder('https://bitbucket.org/api/1.0/repositories/<user>/<rep-slug>/src/master/');


Like it? Share it! Flattr this

Dienstag, 20. Mai 2014

ImageMagick batch convert jpg to tiff windows

To convert all files in current directory create a .bat file containing:

for %%f in (.\*) do (
 convert %%f tiff/%%~nf.tiff
)

Where %%~nf is a special operator returning the file name without extension.

Like it? Share it! Flattr this

Mittwoch, 14. Mai 2014

Schneller lesen mit OpenSpritz

Mit OpenSpritz kann man Texte schneller lesen. Gibt's als Android App und Chrome Plugin. Alles OpenSource.
Im Chrome Text markieren und Rechtsklick "Start Readline" schon geht es los. Pause mit Space falls es zu schnell geht kann man auch langsamer oder eben auch schneller stellen.

Like it? Share it! Flattr this

Dienstag, 13. Mai 2014

ImgBurn Graph Data

Gerade durchforste ich meine Festplatte mit WinDirStat nach unnützen Dateien als ich ein Verzeichnis von ImgBurn finde in dem über die letzten zwei Jahre protokolliert wurde was ich wann gebrannt hab. Ich brenne nicht viel waren nur 5MB für 63 CDs, aber gruselig das hier einfach ein Log geschrieben wird ohne das man informiert wird. Wenn diese Liste der Sicherheitskopien in falsche Hände gelangt...

%HOMEPATH%\AppData\Roaming\ImgBurn\Graph Data Files

Abstellen lässt sich das unter

Tools > Settings... > Graph Data > Capture Graph Data

Like it? Share it! Flattr this

Dienstag, 6. Mai 2014

Evercookie -- never forget

Schlimm was es alles gibt. Evercookie ist sowas von dem man eigentlich nicht will dass es jemand weiß, damit es niemand verwendet. Man muss es aber doch ansprechen damit man sich davor schützen kann.

Ein normaler Cookie ermöglicht es Nutzer zu verfolgen. Der Nutzer hat jedoch die Möglichkeit Cookies zu löschen, zu deaktivieren oder in einen Privaten Modus zu wechseln. Evercookie zielt darauf den Tracking-Code überall wo nur möglich zu speichern um den Nutzer in jedem Fall zu verfolgen, egal wie sehr er sich dagegen wehrt. Aktuell wird man den Cookie nicht mal im Privaten Modus von Chrome los.

Like it? Share it! Flattr this

Montag, 5. Mai 2014

Nettes JavaScript Rätsel-Spiel

Links hat man eine 2D ASCII Welt in der man rumlaufen kann. Rechts ein JavaScript, dass die Welt generiert und steuert. Es gilt das Script an den erlaubten Stellen so zu ändern das man links zum Ausgang kommt: untrusted

Die 2D Welt basiert übrigens auf rot.js. Ein JavaScript Framework für 2D roguelike Spiele in ASCII Graphik. Mit Pathfinding, Lightning, Field of View (FOV) in einem Canvas. Schick!

Like it? Share it! Flattr this

Montag, 28. April 2014

Magine TV

Mit Magine TV kann man alle gängigen deutschen Sender auf mobilen Geräten (Android, iPhone, Tablett) anschauen. Derzeit kostenlos und bald auch mit Chromecast Support.

Like it? Share it! Flattr this

Mittwoch, 23. April 2014

Internet Explorer Virtual Test Mashines

Microsoft bietet kostenlos VMs mit Internet Explorer (ab IE6) für Windows, Mac und Linux als VMWare und VirtualBox.

Like it? Share it! Flattr this

Dienstag, 15. April 2014

Serienbewertung

Eine schicke Seite die graphische Auswertung von Serien anhand der Bewertungen aus der Internet Movie Database (IMDb) erstellt. Beispiele:






Like it? Share it! Flattr this

Chromecast Serien und Filme als Stream schauen - kinox movie4k kinokiste

Für 35€ kann man beliebige Filme und Serien auf dem großen Fernseher schauen und per Handy steuern. Dazu braucht man nur Googles Chromecast und die Web Video Caster App:

1. Chromecast in HDMI Port stecken und über USB Strom drauf geben
    (Netzteil oder USB Port am Fernseher)
2. Chromecast per App einrichten (oder mit Laptop)
3. Web Video Caster App auf dem Android Handy installieren (für iPhone gibt es CastNow Browser)
4. Streaming Portal wie kinox.to oder movie4k.to in Web Video Caster öffnen
5. Zum Video durchklicken und an die Chromecast schicken

Klappt nur mit HTML5 Videos, also nicht mit Flash, aber das ist keine große Einschränkung. Qualität ist natürlich wie sonst im Stream auch so la la, aber wer darauf Wert legt schaut aber sowieso keine Web Streams. Man kann auch mit dem normalen Browser auf dem Handy surfen und dann die Seite mit dem Video "Teilen" und an Web Video Caster schicken. Man braucht also nicht für jede blöde Seite eine eigen App sondern kann man einer App jede Seite streamen.

Vom Laptop aus kann man auch ganze Webseiten Tabs auf der Chromecast anzeigen also auch mit Flash Videos. Vom Handy geht das nicht, weil hierfür ein Video Stream erstellt werden muss der mehr Performance braucht. Das bringt mir jedoch nichts weil ich nicht den Laptop anmachen will um was auf dem Fernseher zu sehen.

Nun bin ich mit dem Setup sehr zufrieden. Für kleines Geld und kaum Stromverbrauch kann man bequem Filme und Serien schauen. Das ganze ist in ein paar Minuten startklar und übers Handy kann man neben Pause und Play auch spulen.
Perfekt!

Update Ich hatte etwas Empfangsprobleme, weil die Chromecast hinterm Fernseher hing. Mir hat hier ein Adapter für "um die Ecke" geholfen. Die gibt es in allerlei Formen:



Like it? Share it! Flattr this

Samstag, 12. April 2014

TinkerBots Roboter für Kinder

Ich hatte schon einiges mit Lego Mindstorm zu tun, aber sehr interessant finde ich auch ThinkerBots.

Zuerst mal ist der Einstig viel einfacher was die Zielgruppe erweitert. Man kann mit dem TinkerBots anfangen ohne Programmieren zu müssen. Mindstorm in der Grundschule ist schon grenzwertig. TinkerBots kann man dagegen bereits im Kindergarten einsetzen. Das funktioniert über einen Aufnahmemodus in dem man den Roboter einfach so bewegt wie er sich bewegen soll und er das dann wieder abspielt.

Für das System spricht auch das es ein offeneres Konzept ist. Der Controller ist Arduino kompatible und einiges (oder alles?) sollen Open Source werden, so dass man auch selbst Module herstellen kann. Nicht zu letzte ist das System über Steckverbindungen auch Lego kompatible.

Nachteilig ist, dass das System noch sehr neu ist. Es ist nur vorbestellbar über bei indiegogo und dort noch recht teuer. An Software zum Programmieren der Roboter war bisher noch gar nichts zu sehen. Es gibt zwar eine Android App, aber die scheint auch nur direkte eine Fernsteuerung der Motoren zu sein.


Like it? Share it! Flattr this

Freitag, 11. April 2014

Windows Programme im bulk installieren und updaten

http://ninite.com/

Like it? Share it! Flattr this

Mittwoch, 9. April 2014

Fiddler Https Web Debugging

Mit Fiddler kann man super einfach in http und https Verbindungen reinschauen. Man muss nichts einstellen oder einrichten, nur für https muss man nochmal kurz auf "Ja" klicken. Toll!

Like it? Share it! Flattr this

Montag, 7. April 2014

Dateien verschicken ohne Größenbeschränkung

Ein technisch innovativer Filetransfer: http://pipebytes.com/
Der Upload startet erst wenn der andere den Download beginnt. Die Datei wird nicht auf deren Server gespeichert und hat dadurch auch keine Größenbeschränkung. Die Daten laufen zwar über deren Server, werden dort aber wohl nur in kurzen Stücken zwischengespeichert.

Like it? Share it! Flattr this

Donnerstag, 3. April 2014

Bald Flattr anstelle von Werbung

Vor einigen Jahren habe ich Werbung für diesen Blog angeschaltet. Weil es unheimlich einfach war und ich lernen wollte wie es funktioniert und was dabei heraus kommt. Nun sind in 39 Monaten immerhin 64,80 Euro zusammen gekommen. Also ca. ein Eis im Monat. Dafür wurden sehr viele Leute mit Werbung genervt und haben am Ende vielleicht deswegen sogar etwas gekauft was sie gar nicht brauchen. Mir bringt das ganze also praktisch nichts und dir als Nutzer schadet es eventuell sogar.

Damit ist nun bald Schluss! Eigentlich wollte ich die Werbung direkt jetzt abschalten, aber dann musste ich feststellen, dass ich knapp unter der Auszahlungsgrenze von 70€ bin. Wenn ich die Werbung jetzt abschalte verrottet das Geld bei Google und das kann ja keiner wollen...

Darum mach ich erstmal Flattr parallel und in ein paar Monaten ist die Werbung dann auch weg. Bis dahin kannst du dir mit einem Adblocker helfen.

Like it? Share it! Flattr this

Dienstag, 1. April 2014

Magento how to remove duplicated sku

I messed up an import and got duplicated sku's. To fix it I search for duplicated products and remove all but the one with the newest update timestamp:

<?php
// find same sku, order by updated_at
$r2 = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('sku', $product['sku'])
    ->setOrder('updated_at', 'DESC')
    ->load();

// if there is a duplicate
if (count($r2) > 1 )
{
    echo "<br>" . $product['sku'] . ", " . count($r2) . "<br>";
    $i = 0;
    foreach ($r2 as $key => $p)
    {
        if ($i == 0)
        {
            // keep first
            echo $p->getCreatedAt() . ", " . $p->getUpdatedAt() . " keep<br>";
        }
        else
        {
            // remove others
            echo $p->getCreatedAt() . ", " . $p->getUpdatedAt() ." delete<br>";
            $p->delete();
        }
        $i++;
    }
}


Like it? Share it! Flattr this

Montag, 24. März 2014

Samsung Drucker CLP-315 Bildeinheit wechseln / Reset Hack

Übrigens: Diesen Toner kaufen ich für meinen CLP-315:

Das Problem

Das Smart Panel meines CLP-315 meint "Bildeinheit wechseln", die Status LED ist und bleibt rot. Es lässt sich nichts mehr drucken. Das Problem ist, dass der liebe Samsung Drucker mitzählt wie viel gedruckt wurde und dann den Dienst einstellt. Vom Smart Panel über "Druckereinstellungen" kann man die einzelnen Counter einsehen. Ab 24000 Seiten möchte er nun eine neue Bild Trommel / Imageing Unit. Es geht gar nichts mehr!

Lösungen aus dem Internet

  1. Neue Bildeinheit kaufen ~100€
  2. Reset Chip bzw. zurücksetzen lassen 10-20€
  3. Selbst hacken 0-3€

Brian's Reset Hack

Schnell finden sich verschieden komplizierte Hacks mit EPROM ausbauen und flashen. Am schönsten ist jedoch der Reset Hack von romburg.de mit Video, bei dem man nur kurz ein Kabel anhalten muss. Der Ausgang des Speichers (EPROM) wird beim Booten mit dem Minuspol verbunden. Dadurch fließen die kleinen Elektronen nicht zum Prozessor sondern direkt nach Hause. Beim Prozessor kommt dann nichts an, was dort als 0 notiert wird. Schreibt nun der Prozessor später (Kabel wieder ab) diese Werte zurück hat man einen schönen Reset.

Geht nicht ohne Bildeinheit

Doch leider klappt das so nicht, wenn die Bildeinheit nicht geht. Warum auch immer. In meinem Fall leuchten trotz Kabels von EPROM SDA zum Ground (Minus) nach dem booten alle LEDS bis auf das Ausrufezeichen. Das Smart Panel findet der Drucker nicht:


Ich dachte erst es liegt an meinem etwas anderen Board, am Timing wann man den Pin wieder frei gibt oder an den Tonern. Doch nachdem ich in der Richtung lange gesucht hab, war am Ende die Lösung ganz einfach.

Die Lösung

Schuld ist die Bildeinheit beziehungsweise dessen "Schutzfunktion". Zieht man das Ding raus sieht man rechts einen kleinen Kasten mit zwei Kontakten:


Mit einem Schraubenzieher bekommt man diesen leicht raus und findet zur Überraschung nur zwei Widerstände. Mit Widerstandsrechner sieht man 100k Ohm (unten) und 56 Ohm (oben):


Diese Sicherung nennt sich resitor fuse. Schiebt man eine neue Bildeinheit rein sind beide Widestände ganz und das ganze leite gut. Das wird erkannt und dann wird da ordentlich Saft drauf gegeben und der kleine Widerstand brennt durch. Damit bleibt ein hoher Widerstand. Sinn der Sache ist, das man weiß bei kleinem Widerstand ist das Teil neu und man muss die Zähler zurück setzen. Toll genau das wollen wir ja eigentlich!

Ich hab nun aus einem Kosmos Kasten den kleinsten Widerstand gegriffen (470 Ohm) und den in das Kästchen geklemmt (Ging auch ohne Löten). Nun alles wieder zusammen bauen und den Drucker anschalten. Booten lassen. Das Gerät wieder ausschalten und den Widerstand direkt wieder ausbauen. Meiner ist netterweise nicht mal durchgebrannt. Nun nochmal alles zusammen und siehe da:

Grünes Licht, alles gut!
Drucken klappt wieder und der Zähler ist zurück gesetzt.

Brian's Reset Hack die 2.

Nun wollte ich aber doch noch wissen ob es nur an der Bildeinheit lag, dass der Reset Hack nicht ging oder doch an meinem etwas anderen Board. Ich hatte inzwischen den Draht zum Resetten oben Rechts an die Schraube geklemmt (Ground). Das andere Ende kommt dann an den ERPOM links oben.

Auf dem Chip steht übrigens ST 24C64WP. ST meint STMicroelectronics und leider konnte ich dazu kein Datenblatt finden. Es gibt jedoch eine Reihe M24C64-* Chips dort die alle ähnlich sind.
Also die beiden Stellen mit dem Kabel verbunden, Drucker einschalten und wenn die Status LED grün wird loslassen. Doch es ging immer noch nicht! Teilweise mischen sich hier wohl die Toner ein, wenn diese einen eigenen Chip haben der mitzählt. Darum alle Toner-Kontakte abkleben, wie hier den ersten einfach Tesa drauf:


Nochmal Reset Kabel dran, Drucker anschalten, Draht ab und siehe da: Es springt nichts auf rot um, das Booten dauert über eine Minute und dann ist alles grün. Druckt man jetzt die Testseite sind die Werte gespeichert. Schaltet man den Drucker so wieder aus ist nichts passiert.

Interessanter Weise hatte ich die Toner auch in früheren Versuchen schon abgeklebt doch ohne das zurücksetzen der Bildeinheit hatte dies nichts gebracht. Erst wenn Toner und Bildeinheit nicht mehr stören klappt der Reset.

So lassen sich Toner und Bildeinheit so lange benutzen wie man es selbst möchte und nicht wie der Hersteller es vorschreibt.


Like it? Share it! Flattr this

Donnerstag, 20. März 2014

Smart Chicken Coop with Open Source Controller

Picture from LachieB1
I like chickens and one day I might build chicken coop. To be prepared I collect some useful links to open source chicken projects.



Like it? Share it! Flattr this

Montag, 17. März 2014

Putty reagiert nicht mehr Strg + S

Wenn man in Putty versehenlich Strg + S drückt reagiert es nicht mehr.

Zurück kommt man mit Strg + Q.

Fügt man in .bashrc zwei Zeilen ein ist das Problem behoben:
stty ixany
stty ixoff -ixon


Like it? Share it! Flattr this

Telnet Putty: Escape character is '^]'

Wenn man in Putty zum Testen eine Telnet Verbindung aufgemacht kommt gerne mal Escape character is '^]' zurück.

Dort raus kommt man mit Strg + (neben Enter) und dann quit.

Like it? Share it! Flattr this

Mittwoch, 12. März 2014

Magento Export Customers

If you need to export customer data for Excel this script does the job. If you upload and execute it. A file.csv with you customers will be created. The UTF-8 CSV file can be imported in Excel. Don't forget to delete both files afterwords. Also note that personal records should not be mailed without encryption.

<?php
require_once("app/Mage.php");
Mage::app();
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
$collection = Mage::getModel('customer/customer')
    ->getCollection()
    ->addAttributeToSelect('*');

$fp = fopen('file.csv', 'w');
foreach($collection as $customer) {
 $customerAddressId = $customer->getDefaultBilling();
    if ($customerAddressId){
        $address = Mage::getModel('customer/address')->load($customerAddressId);

        $fields = array(
            $address->getData('company'),
            $customer->getData('prefix'),
            $customer->getFirstname(),
            $customer->getLastname(),
            $address->getData('street'),
            $address->getData('postcode'),
            $address->getData('city'),
            $address->getCountry(),
            $customer->getData('email')
        );
        fputcsv($fp, $fields);
        var_dump($fields); echo "<br>";
    }
}
?>

I converted the code to html using hilite.me looks nice, what do you think?

Like it? Share it! Flattr this