Ab und an sitzt man schonmal in einem Netz das nur HTTP Verbindungen erlaubt, wo man also nur im Web surfen kann. Bei mir ist das heute der Fall.
Es gibt verschiedene Webseiten auf die man sich (per HTTP) verbindet und die sich dann für dich auf den SSH Server weiter verbinden. Natürlich kann diese Schnittstelle alle Daten die anfallen mitlesen. Deshalb sollte man sich genau überlegen ob man einen solchen Dienst nutzen möchte und welchem Anbieter man vertraut.
Es gibt beispielsweise:
serFish, bietet auch noch ein paar andere Weiterleitungsdienste wie zum Beispiel für Mailverkehr an.
Wer keinem Anbieter vertrauen schenken will kann sich auf seinem Server auch selbst eine Schnittstelle installieren.
WebShell verwendet server-seitig AJAX und Python und client-seitig JavaScript(+ CSS). Wer sicherheit ganz groß schreibt kann dann noch den ganzen Quellcode druchgehen da das Projekt Open Source ist.
Hier sieht man wie das ganze client-seitig auf dem IPhone aussieht. Man kanns ich schließlich mit jedem Browser (der JavaScript und CSS unterstützt) verbinden.
News, Infos, Texte, Anleitungen und Gedanken rund um die Welt der Pinguine. Linux, UNIX, C, Coding, Programming, Papers
Mittwoch, 21. Dezember 2011
Sonntag, 20. November 2011
Crunchbang root
Bei crunchbang Linux kann man mit Hilfe von su standardmäßig nicht root werden. Das liegt daran das kein root Passwort vergeben ist.
Nun könnte man vor jeden Befehl den mal mit root-Rechten ausführen möchte ein sudo schreiben. Was aber total nervt wenn man längere Konfigurationen durchführt.
Hier die Lösung:
Ihr könnt mit sudo su root werden.
Oder ihr könnt ein richtiges root Passwort mithilfe von
sudo passwd root <password> setzen.
Nun könnte man vor jeden Befehl den mal mit root-Rechten ausführen möchte ein sudo schreiben. Was aber total nervt wenn man längere Konfigurationen durchführt.
Hier die Lösung:
Ihr könnt mit sudo su root werden.
Oder ihr könnt ein richtiges root Passwort mithilfe von
sudo passwd root <password> setzen.
Mittwoch, 16. November 2011
Raspberry Pi
Seit Monaten warte ich schon auf das erscheinen eines kleinen MiniPCs mit dem Namen Raspberry Pi. Es ist ein sehr kleiner Rechner der nur 25$ kosten soll. Und im Dezember soll er endlich erscheinen!
Entwickelt wurde er vor allem für Kinder. Die sollen damit günstig die Möglichkeit haben spielend Erfahrungen mit Technik zu machen. Anschliessen lässt sich das kleine Gerät an einen Fernseh und er kann sogar über Batterien betrieben werden.
Als Betriebssystem kommt wahlweise Arch Linux, Debian oder Fedora zum Einsatz. Es freut mich natürlich noch mehr das meine Lieblingsdistributionen Arch und Debian dabei sind :)
Entwickelt wurde er vor allem für Kinder. Die sollen damit günstig die Möglichkeit haben spielend Erfahrungen mit Technik zu machen. Anschliessen lässt sich das kleine Gerät an einen Fernseh und er kann sogar über Batterien betrieben werden.
Als Betriebssystem kommt wahlweise Arch Linux, Debian oder Fedora zum Einsatz. Es freut mich natürlich noch mehr das meine Lieblingsdistributionen Arch und Debian dabei sind :)
Dienstag, 8. November 2011
Embarcadero
Wir stellen gerade einige Projekte vom alten Borland C++ Builder 6 auf Embarcadero C++ Builder XE um.
Borland entwickelte anfangs den C++ Builder, anschließend übernahm das CodeGear und nun Embarcadero. Die neue Entwicklungsumgebung unterstützt nun Unicode.
Es gibt zwar die Möglichkeit bestehende Projekte(Endung .bpr) zu konvertieren, bis jetzt habe ich aber die Erfahrung gemacht, dass es gerade bei kleineren Programmen einfach er ist das Projekt neu zu erstellen.
In den Projekteinstellungen kann festgelegt werden ob für C-Strings der Datentyp char oder wchar_t gilt. Allerdings muss beachtet werden dass alle VCL Komponenten für die Speicherung von Text die Klasse UnicodeString verwenden.
Das konvertieren eines Projektes ist mit dem lösen aller Warnings noch lange nicht fertig. Manche Fehler fallen erst spät auf, wie ich heute feststellte.
In einem Programm tat ich etwas ähnliches wies das:
Allerdings an einer heikleren Stelle. Natürlich kam keine Fehlermeldung oder Warnung, erst zur Lauftzeit (nach 2 Tagen in Produktion) wurde bekannt dass das Programm nicht korrekt funkionierte.
Bis ich auf die entsprechende Stelle stieß dauerte ein bisschen. Da form1 vom Typ TForm ist, also eine VCL Komponente, wird die Eigenschaft Caption als UnicodeString gespeichert. Die Methode sprintf() vom Typ AnsiString kann damit nicht umgeben, deshalb sollte man die Eigenschaft zuerst casten.
Warum ich AnsiString überhaupt benutze? Nun ja, in diesem Projekt werden oft Ansi C Funktionen aufgerufen die noch mit dem Datentyp char arbeiten. Und ansiStringObjekt.c_str() gibt mir einen char array zurück.
Bis jetzt ist das upgrade auf C++ Buider XE mit mehr Arbeit als nutzen verbunden. Aber das wird hoffentlich nur so lange der Fall sein, bis alle Projekte umgestellt sind.
Borland entwickelte anfangs den C++ Builder, anschließend übernahm das CodeGear und nun Embarcadero. Die neue Entwicklungsumgebung unterstützt nun Unicode.
Es gibt zwar die Möglichkeit bestehende Projekte(Endung .bpr) zu konvertieren, bis jetzt habe ich aber die Erfahrung gemacht, dass es gerade bei kleineren Programmen einfach er ist das Projekt neu zu erstellen.
In den Projekteinstellungen kann festgelegt werden ob für C-Strings der Datentyp char oder wchar_t gilt. Allerdings muss beachtet werden dass alle VCL Komponenten für die Speicherung von Text die Klasse UnicodeString verwenden.
Das konvertieren eines Projektes ist mit dem lösen aller Warnings noch lange nicht fertig. Manche Fehler fallen erst spät auf, wie ich heute feststellte.
In einem Programm tat ich etwas ähnliches wies das:
AnsiString s;s.printf("Caption: %s", form1->Caption );
Allerdings an einer heikleren Stelle. Natürlich kam keine Fehlermeldung oder Warnung, erst zur Lauftzeit (nach 2 Tagen in Produktion) wurde bekannt dass das Programm nicht korrekt funkionierte.
Bis ich auf die entsprechende Stelle stieß dauerte ein bisschen. Da form1 vom Typ TForm ist, also eine VCL Komponente, wird die Eigenschaft Caption als UnicodeString gespeichert. Die Methode sprintf() vom Typ AnsiString kann damit nicht umgeben, deshalb sollte man die Eigenschaft zuerst casten.
s.printf("Caption: %s", (AnsiString)form1->Caption );
Warum ich AnsiString überhaupt benutze? Nun ja, in diesem Projekt werden oft Ansi C Funktionen aufgerufen die noch mit dem Datentyp char arbeiten. Und ansiStringObjekt.c_str() gibt mir einen char array zurück.
Bis jetzt ist das upgrade auf C++ Buider XE mit mehr Arbeit als nutzen verbunden. Aber das wird hoffentlich nur so lange der Fall sein, bis alle Projekte umgestellt sind.
Montag, 7. November 2011
QDomDocument
Ich mache gerade meine ersten Schritte mit Qt. Stundenlang, so kommt es mir vor, habe ich jetzt versucht eine Anwenung zu programmieren welche aus einer XML Datei Daten ausliest.
Es scheiterte schon beim Include:
Es scheiterte schon beim Include:
#include <QDomDocument>
Es kam immer wieder die Meldung das diese Datei nicht vorhanden ist. Nach einigem herumgesuche fand ich dann heraus das in der Projektdatei (projektname.pro) welches Qt Creator für mich anlegt folgendes stehen muss:QT+=xml
Warum das gemacht werden muss ist mir nicht ganz klar. Wenn ich etwas herausfinde lass ich es euch wissen.
Donnerstag, 7. Juli 2011
C-Strings duplizieren
Wenn ich einen C-String umkopieren wollte von dem ich zur Entwicklungszeit noch nicht wusste wie groß er ist, habe ich das bisher immer anscheinend ziemlich umständlich gemacht. Hier ein kleines Beispiel Programm:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char origin[]={"Hallo"};
char *copy;
// Inhalt von origin nach copy kopieren
copy = (char*)malloc( strlen(origin)+1 );
strcpy( copy, origin );
// ...
free( copy );
return 0;
}
Durch meinen Ausbilder wurde ich jetzt auf die Funktion strdup() aufmerksam. Sier erleichtert die Arbeit ein wenig und scheint sogar schneller zu sein als meine Variante.
um den Geschwindigkeitsunterschied zu messen, habe mit der Windows Funktion GetTickCount() die Millisekunden seit dem Start des Systems erfragt. Dann habe ich das Programm, die Kopierfunktion in beiden Varianten 99999-mal ausführen lassen. Und am Ende wieder die Zeit gemessen. So konnte ich feststellen wie viel Zeit in Millisekunden vergangen war. 4 von 5 Durchläufen war die strdup() Funktion schneller.
In der optimierten Variante ersetzt man die Zeilen 10 und 11 einfach durch
copy=strdup( origin );
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char origin[]={"Hallo"};
char *copy;
// Inhalt von origin nach copy kopieren
copy = (char*)malloc( strlen(origin)+1 );
strcpy( copy, origin );
// ...
free( copy );
return 0;
}
Durch meinen Ausbilder wurde ich jetzt auf die Funktion strdup() aufmerksam. Sier erleichtert die Arbeit ein wenig und scheint sogar schneller zu sein als meine Variante.
um den Geschwindigkeitsunterschied zu messen, habe mit der Windows Funktion GetTickCount() die Millisekunden seit dem Start des Systems erfragt. Dann habe ich das Programm, die Kopierfunktion in beiden Varianten 99999-mal ausführen lassen. Und am Ende wieder die Zeit gemessen. So konnte ich feststellen wie viel Zeit in Millisekunden vergangen war. 4 von 5 Durchläufen war die strdup() Funktion schneller.
In der optimierten Variante ersetzt man die Zeilen 10 und 11 einfach durch
copy=strdup( origin );
Samstag, 7. Mai 2011
Abonnieren
Posts (Atom)