Freitag, 26. Oktober 2012

Git und Proxy unter Windows.

Um Git (msysgit) unter Windows durch einen Proxy durchzubohren, erstellt man im Git Unterordner bin eine Textdatei mit dem Inhalt:
@echo off
set CONNECT=connect.exe
set PROXY=PROXYADDRESS:PROXYPORT


"%CONNECT%" -H %PROXY% %*
und ersetzt dort PROXYADDRESS und PROXYPORT gegen den zu durchbohrenden Proxy und speichert die Datei als bat ab, beispielsweise proxy.bat.
Dann führt man in der Git Bash Shell im Git Hauptordner folgenden Befehl aus:
git config --global core.gitproxy proxy.bat
Das wars.

Mit
git ls-remote git:://ADDRESS/REPO.git
kann man dann testen ob die Verbindung durchgeht, wobei natürlich ADDRESS und REPO durch das gewünschte Repository ersetzt werden müssen.

Sonntag, 21. August 2011

OpenCV VideoCapture and openGL glMapBuffer.

Currently I'm writting a small prove-of-concept-program, which reads avi-files using the cv::VideoCapture class of openCV and displays the frames using openGL.
(To archieve the openGL-powered frame display I walked through the excellent openGL tutorial from Joe's Blog.)
After I got this working, I changed the texture transfer to the use of pixel buffer objects.
Had I read the documentation carefully, I wouldn't had done one stupid mistake.
When you map your videomemory to your system's memory using glMapBuffer, you have to unbind it before you can use it, otherwise you get an "Invalid Operation"-error.
First attempt then was to copy the image data using memcpy, which worked just fine but required an additional copy.
Well, you can create a cv::Mat object with an already-allocated region of memory. So I used the mapped bufferpointer as the datapointer for the object.
But nothing happend and the image stayed black.

So what is going on here?
After finding out, that the memory location of the frame changed, after I read one frame with the cv::VideoCapture object, I thought that somehow the buffer memory does not match the requirements of the frame, e.g. size. But that was not the case.
Then I dug into the openCV sourcecode (second time this weekend) and found the the reason.
Inside the cv::VideoCapture class uses the old cvCapture functions, which allocate memory themself. So when you grab an image, your provided image gets this new memory and the provided memory is deallocated.
Even though this memory is only allocated at the beginning, there is no way that you can provide own memory, which should be used by the cv::VideoCapture module.
Bad news.

Funny thing is that the cvCapture code is class based and even uses cv::Mat inside.
Maybe someday the developers will rewrite the code and enable transparent memory usage.

Mittwoch, 17. August 2011

sudo port -f uninstall --follow-dependents installed

... deinstalliert alle mit MacPorts installierten Packages inklusive aller Abhängigkeiten.
Praktisch.

Dienstag, 16. August 2011

MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "WinMain" in Funktion "__tmainCRTStartup".

...bekommt man diesen Fehler in Visual Studio, so weist, dies auf einen fehlerhaften Einstiegspunkt hin. Dies liegt meistens daran, dass man eine Consolen-App in einem Window-Projekt schreibt. Diese unterscheiden sich durch ihre Main-Funktion und damit eben in ihrem Einstiegspunkt.
Bei einer Consolen-App üblicherweise main und bei einer Window-App WinMain.
Um den Fehler zu beheben entweder ein neues, passendes Projekt anlegen (NOOOOT) oder in den Projekteinstellungen auf Linker gehen, dort den Unterpunkt Erweitert anwählen und den Einstiegspunkt auf mainCRTStartup setzen.
Dann klappt's auch mit dem Linken.

Montag, 1. März 2010

Visual Studio Debugger mit DLLs und Labview.

Den Visual Studio Debugger auch beim Debuggen von DLLs zu verwenden, die von einem Labview VI gerufen werden sollen, ist wünschenswert.
Geht auch ganz einfach: Die DLL im Debug-Modus kompilieren und im Call Library Node im VI eintragen. Dann den Debugger über Debuggen > An den Prozess anhängen... an den Labview Prozess anhängen (es erscheint ein Fenster mit allen laufenden Prozessen). Nun in Labview das VI ausführen und sobald das VI in die DLL springt, greift der Visual Studio Debugger ein und man kann, sofern denn Haltepunkte etc. gesetzt sind, loslegen. Danach muss die Prozessüberwachung aber manuell getrennt werden.
Angeblich soll es auch über das "normale" Debugging funktionieren, leider habe ich es bisher nicht hingekriegt, dass Labview nicht nur das VI öffnet sonderen es auch startet.
(Getestet mit Visual Studio Professional Edition 2008, die man als Student kostenlos über Microsofts Dreamspark bekommt.)

DbgPrintf: Printf mit Labview und DLLs.

DbgPrintf – öffnet ein Textfenster und schreibt die angegebene Nachricht dort hinhein, alle weiteren Nachrichten mit DbgPrinft erscheinen ebenfalls dort. DbgPrintf(NULL) schließt dieses Fenster wieder. Die Funktion verhält sich ansonsten wie printf in C.
(Using External Code in Labview, S. 81, 370109b.pdf)

Dienstag, 1. Dezember 2009

Der coole Weg auf die RAC-Server.

Im folgenden werde ich beschreiben, wie man sich mit Mac OS X sehr komfortabel über VPN und SSH auf die Rechenzentrums-Server des RheinAhrCampus einloggt. Prinzipiell lässt sich die Vorgehensweise sicher auch auf andere Server übertragen.

Teil 1 – Wie komme ich in den RAC?
Das Rechenzentrum des RACs stellt den Cisco-VPN-Client zur Verfügung. Das Programm hat mich von Anfang an so genervt, dass ich mich lieber nicht von extern eingeloggt hab, als es zu verwenden. Glücklicherweise bin ich dann auf Shimo gestoßen.

Shimo ist ein kleines Programm, das sich in der Menü-Leiste einnistet und ein hübsches, unscheinbares und komfortables Frontend für bspw. den Cisco-Client bietet. Laut dem Macher werden alle bekannten VPN-Arten unterstützt (was mir aber relativ egal ist ;)). Seit einiger Zeit ist es nicht mehr Freeware, sondern Shareware. Regulär kostet es um die 15 Euro, es gibt aber wohl Studierendenrabat. Was es dann kostet kann ich noch nicht sagen, da ich die Toolchain erst seit vorgestern wieder laufen habe und bisher noch mit dem Bezahlhinweis lebe.

So genug Vorgeplänkel, was muss man machen?
Also zunächst muss man natürlich den Cicso-VPN-Client installieren, den kriegt man auf der RZ-Seite. Wenn er schon installiert ist und ihr kürzlich Snow Leopard installiert hat, kann es notwendig sein, ihn nochmals neu zuinstallieren, das war zumindest bei mir so.

Wenn das getan ist, wird Shimo installiert, das geht straight forward. Shimo befindet sich nun im Programme-Ordner, also einfach starten. Jetzt habt ihr in der Menü-Leiste einen Torbogen, das ist Shimo. Draufklicken und auf Einstellungen. Da kann man allerhand einstellen, der wichtigste Reiter ist aber der für Profile. Jetzt auf das PLUS links unten klicken und im Bereich "Importieren aus:" "Cisco Profil" auswählen. Es poppt ein Dateiauswahl Fenster auf und ihr navigiert in den Ordner, in dem ihr die Dateien des Zip-Files vom RAC entpackt habt. Dort sind drei Profil-Dateien drin, eine für DSL-Teiltunnel, eine für DSL-Volltunnel und eine für das Studnetz. Wofür die jetzt genau da sind steht in der VPN-Broschüre, die auch im RZ-Bereich zu finden ist. Alle drei Dateien importiert ihr in Shimo.

Das war es im Prinzip schon, ihr könnt aber noch direkt über Bearbeiten euren Benutzernamen und das Kennwort eintragen, das im Schlüsselbund gespeichert wird. Einstellungen zu machen und wieder auf das Tor klicken und jetzt eine der Verbindungen anklicken, ich wähle hier Teiltunnel (Volltunnel würde wohl den gesamten Netz-Verkehr über den RAC umleiten und war bei mir furchtbar langsam), Teiltunnel reicht aber für das, was ich hier beschreibe, vollkommen aus. Nochmals auf das Tor klicken und "Verbinden", jetzt tut sich was im Tor und dann sollte (wenn ihr denn Growl installiert habt) eine Mitteilung erscheinen, dass eine Verbindung aufgebaut wurde.

Das war der erste Teil. Jetzt habt ihr schonmal eine saubere, unaufdringliche Verbindung zum RAC. Über das Terminal könnt ihr euch jetzt mit "ssh benutzername@fserver1" auf dem fserver einloggen und würdet direkt in eurem Profil landen (nach Eingabe des Passworts natürlich).
So das ist aber noch nicht so schick, denn wir haben ja einen Mac um es einfach und komfortabel zu haben.

Teil 2 – Geht es auch ohne Terminal?
Ich bin ja faul und Terminal Tipperei brauch ich auch nicht, wenn ich mal schnell eine Datei kopieren will. Da kommt jetzt MacFUSE und Macfusion ins Spiel. MacFUSE ist ein geniales Stück Software, das sehr viele Arten von Medien in das Dateisystem von OS X einbinden kann. Was wir hier brauchen ist eine Einbindung von ssh, aber man könnte auch ein Youtube-Filesystem einbinden (oO). Das Ding ist aber Kommandozeilen-basierend, sodass es noch nicht das ist, was ich will. Dafür gibt es aber Macfusion, welches ein grafisches Frontend für MacFUSE bietet. So der Reihe nach.

Zuerst installiert ihr MacFUSE, einfach das machen was von euch verlangt wird, nichts anderes. Dann installiert ihr direkt hinterher Macfusion.
Macfusion findet ihr in den Programmen, einfach starten. Es öffnet sich ein ziemlich bescheidenes Fenster. Auch hier ist es wieder ganz einfach: auf das PLUS unten links klicken und auf "SSHFS" klicken.
Im oberen Textfeld dürft ihr euch einen Namen für euren Ordner ausdenken, den ihr einbinden wollt. Also zum Beispiel "RAC/profile". (Wichtig: der Name hier hat nichts mit dem tatsächlichen Ordner zu tun, den ihr einbinden wollt. Es ist wirklich nur eine Bezeichnung für die Verbindung.) Als Host tragt ihr "fserver1.rheinahrcampus.de" ein, User Name ist eurer RAC-Profilname, Password dementsprechend euer Passwort. Path lasst ihr leer, wenn ihr euren Profil-Ordner mounten (einbinden) wollt. Um andere Ordner einzubinden könnt ihr beim Path etwas eintragen, der Root-Ordner vom fserver1 bekommt ihr mit "/", den Lehre-Server mit "/samba/lehre/".
Im Reiter "Macfusion" könnt ihr noch bei "Volume Name" angeben wie der Ordner im OS X Dateisystem heißen soll, das ist also der Name unter dem der Ordner im Finder erscheint. Es besteht dort auch die Möglichkeit auszuwählen, dass der Ordner beim Start von OS X eingebunden werden soll, das solltet ihr nicht tun, denn die Verbindung ist nur möglich wenn eine VPN-Verbindung besteht und die besteht beim Start noch nicht.

So das wars schon, "Ok" und euer Ordner steht in der Liste von Macfusion. Jetzt auf "Mount" klicken und der Ordner sollte sich nach kurzer Zeit grün verfärben. Auf dem Desktop seht ihr jetzt den Ordner und könnt ihn öffnen. Im Finder erscheint er irgendwie seit einem Versions-Update bei mir nicht mehr in der linken Leiste, man findet ihn aber, wenn man dort auf "euerName's Computer" klickt. So damit habt ihr jetzt vollen Zugriff auf eure Dateien und das nativ in OS X. Schick oder?

Teil 3 – Schluss
Eigentlich könnte es jetzt hier enden, aber zwei Punkte muss ich noch erläutern.
Wenn ihr mit eurer Arbeit auf dem Server fertig seid, "unmounted" zunächst den Ordner, das geht im Finder oder auf dem Desktop wie bei CDs oder USB-Sticks, auswerfen klicken oder auf den Papierkorb ziehen. Danach erst im Shimo-Tor auf "trennen" klicken. Wenn ihr das mit dem "unmounten" vergesst, kann es zu nervigen Verzögerungen kommen, bis OS X merkt, dass die Verbindung nicht mehr besteht.

Der letzte Punkt betrifft User von Snow Leopard. Macfusion funktioniert damit nach der Installation nicht. Also Starten und Ordner-Einrichten geht zwar, aber ihr könnt den Ordner dann nicht mounten, da gibt es einen Fehler.
Um den zu beheben, geht in den Programme-Ordner, Rechtsklick auf Macfusion und auf "Paketinhalt zeigen" klicken. Wer das noch nicht kannte: Programme die mit .app enden sind Pakete, die Ordner enthalten und in denen eine Reihe von Dateien stecken. In denen findet OS X dann die auszuführende Datei. Aber generell sollte man da nicht drin rumspielen, wenn man nicht weiß was man tut. Ihr klickt euch jetzt dort durch bis ihr hier "/Macfusion.app/Contents/PlugIns/sshfs.mfplugin/Contents/Resources/" gelandet seid. In diesem Ordner befindet sich eine Datei "sshnodelay.so", die löscht ihr. Dann macht ihr den Ordner wieder zu und startet Macfusion und siehe da: es funktioniert. Die gelöschte Datei dient wohl nur dazu, mit manchen alten Servern klar zu kommen, die RAC-Server sind aber neu und man braucht sie nicht.

So jetzt solltet ihr eine voll funktionierende Toolchain haben, mit der ihr komfortabel auf die RAC-Server zugreifen könnt. Es ist sogar deutlich angenehmer als unter Windows, wie ich finde. Das bisschen Arbeit lohnt sich also sehr.
Sowohl Shimo als auch Macfusion können mit OS X gestartet werden, Shimo kann auch bei seinem eigenen Start direkt eine VPN-Verbindung aufbauen. Bei Macfusion muss man da, wie gesagt, ein bisschen aufpassen. Wenn man will kann man also ohne ein Programm von Hand zu starten auf die Server zugreifen.
Und jetzt viel Spaß!

Links: