Komfortabler Dateimanager mit vielen Funktionen

SQX für Linux

By Sven on 15.02.2006 - 19:42 in Squeez & TxQuickView with 1 Kommentar

Wie es scheint, rückt die Fertigstellung von SQX für Linux allmählich näher. In den letzten Tagen habe ich die Konsolenanwendung überarbeitet und auch gleich fit für Linux gemacht.

SQC - Parameter

Prinzipiell funktioniert erst einmal alles, wie man es bisher von der Windows-Version gewohnt ist. Die Linux-Version beschränkt sich vorerst auf die SQX-Unterstützung, eine mögliche Erweiterung mit anderen Formaten ist denkbar. Ausgeschlossen davon sind ACE (kein freier Entpack-Quellcode), CAB (keine MS-Bibliotheken für Linux) und 7z. SFXe sind unter Linux ja weniger üblich, daher kann ich native Linux-SFXe wohl erst einmal zurückstellen.

SQC - Komprimieren

Spätestens nach dem geplanten Release von SpeedCommander 11.1 im März wird dann auch eine öffentliche Betaversion verfügbar sein. Bis dahin muss ich noch ein paar kleinere Sachen abklopfen, der Großteil der Portierung ist aber wohl getan.

Hello Linux

By Sven on 30.01.2006 - 07:50 in Squeez & TxQuickView with 8 Kommentare

Eines der Dinge, welche ich mir für dieses Jahr vorgenommen habe, ist die Portierung von SQX auf Linux. Am Freitag habe ich nun meine ersten Programmierversuche unter Linux gemacht, das erste Programm hat so ausgesehen:

Hello Linux

KDevelop hat mich als Entwicklungsumgebung angenehm überrascht, obwohl ich natürlich schon ein paar Details aus dem VC6 vermisse. Dank dem QMake-Manager muss man sich auch nicht mit Make-Dateien herumquälen. Was ich allerdings noch nicht geschafft habe, ist das Erstellen von zwei unterschiedlichen Debug- und Release-Konfigurationen (welche man dann je nach Bedarf aktivieren kann) und die Ausgabe der Zwischendateien in separate Verzeichnisse.

Der erste Schritt war dann die Anpassung der Funktionen für den Dateizugriff. Rainer hatte schon alle Dateifunktionen über eine systemübergreifende Zwischenschicht implementiert, so dass eigentlich nur die Win32-Funktionen durch die entsprechenden Linux-Pendants zu ersetzen waren. In der Praxis war das aber etwas komplizierter, da ich mich ohne Vorkenntnisse der glibc durch die einzelnen Funktionen hangeln musste. Hier habe ich dann doch eine Art MSDN für Linux vermisst, da man sich die entsprechenden Informationen über verschiedene Quellen zusammensuchen muss. Eine gute Hilfe ist auch das Buch Linux/Unix-Systemprogrammierung von Helmut Herold.

An einigen Stellen traten noch Unterschiede zwischen dem MSC- und GNUC-Compiler hervor. Der GNUC-Compiler möchte hexadezimale int64-Konstanten mit einem ULL abgeschlossen haben (z.B. 0x428a2f98d728ae22ULL) , während dem MSC-Compiler dieses gar nicht passt. Insgesamt gesehen kamen derartige Anpassungen aber recht selten vor.

Am Ende lief alles durch und ich habe auch schon das erste Archiv entpackt bzw. erstellt. Der nächste Schritt ist dann die Portierung der Konsolenanwendung. Ich hätte nicht erwartet, dass sich erste Ergebnisse schon so schnell einstellen.

Unable to open shim database

By Sven on 27.01.2006 - 09:11 in Software with 11 Kommentare

In meiner Ereignisanzeige gibt es eine Menge solcher Fehlermeldungen:

Die Beschreibung der Ereigniskennung ( 0 ) in ( .NET Runtime ) wurde nicht gefunden. Der lokale Computer verfügt nicht über die zum Anzeigen der Meldungen von einem Remotecomputer erforderlichen Registrierungsinformationen oder DLL-Meldungsdateien. Möglicherweise müssen Sie das Flag /AUXSOURCE= zum Ermitteln der Beschreibung verwenden. Weitere Informationen stehen in Hilfe und Support. Ereignisinformationen: Unable to open shim database version registry key – v2.0.50727.00000.

Aaron Stebner gab mir den entscheidenden Tip. Er schrieb, dass der Schlüssel „v2.0.50727.00000“ unter [HKLM\Software\Microsoft\.NETFramework\Policy\AppPatch] von der CLR für Kompatibilitätsgründe genutzt wird. Vermutlich werden die Rechte beim Lesen falsch angegeben, so dass für Anwender ohne Adminrechte diese Fehlermeldung in die Ereignisanzeige geschrieben wird.

Ein einfacher Workaround besteht darin, die Berechtigung für diesen Schlüssel auch für normale Anwender auf Vollzugriff zu setzen. Die CLR kann den Schlüssel jetzt öffnen und muss nun keine Fehlermeldung mehr in das Ereignislog schreiben.

KGB-Archiver

By Sven on 26.01.2006 - 09:11 in Software with 28 Kommentare

Nach Angaben seines Entwicklers ist der KGB-Archiver der neue Stern am Packerhimmel, er soll 7z und UHARC weit hinter sich lassen:

KGB-Archiver

Ich habe nun mit großen Erwartungen verschiedene Dateisets aus der Praxis komprimiert, die Ergebnisse waren eher ernüchternd. Der KGB-Archiver hat zwar hohe Hardwareanforderungen (Prozesssor mit mindestens 1.5 GHz und 256 MB RAM), meinen P4 mit 3 GHz und 1 GB RAM sollte das aber weniger stören. Beim Packen lässt sich der KGB-Archiver seeeeeeeehr viel Zeit, für den Alltag ist das überhaupt nicht geeignet. Für das Entpacken wird die gleiche Zeit wie beim Komprimieren benötigt.

Für den Test habe ich beim KGB-Archiver „Normal Compression (18 MB)“ gewählt, bei SQX2 die gewohnten Einstellungen (Ultra, 4 MB, solid, Kompressoren und Transformatoren auf Automatisch).

Hier die Ergebnisse:

Dateien des ACT Sound (WAV) Compression Test – 2 Dateien

  • SQX – 5.785.395 Bytes
  • KGB – 7.311.156 Bytes

Dateien des ACT WORMS2 Compression Test – 159 Dateien

  • SQX – 8.033.137 Bytes
  • KGB – 8.067.964 Bytes

Dateien OpenOffice 1.1.2 Installation – 2064 Dateien

  • SQX – 44.253.531 Bytes
  • KGB – 46.965.501 Bytes

Die anderen Dateisets habe ich mir geschenkt, der KGB-Archiver hätte dafür wohl einen halben Tag benötigt. 😉

Unkaputtbar

By Sven on 05.01.2006 - 14:51 in Fuhrpark with 12 Kommentare

Am 24.10.1990 habe ich mir bei VOBIS in Berlin an der Kurfürstenstraße meinen ersten Rechner gekauft. Für einen 286er mit 16 MHz Taktfrequenz bezahlte man damals 2295 DM. Der Rechner hatte 1 MB Speicher und eine 30 MB RLL-Festplatte von Kalok. Die Grafikkarte war eine Monocrom-Hercules, dazu gab es noch einen Epson LX 400 (9-Nadeldrucker), den ich heute immer noch zum Etikettendruck einsetze. Einen Tag vor Ablauf der Garantie ging damals die Festplatte kaputt, als Ersatz gab es eine 40 MB Maxtor.

Nach vielen Aufrüstungen habe ich dann irgendwann mal wieder den Originalzustand hergestellt, lediglich die Hercules-Grafikkarte blieb draußen. Stattdessen steckt nun meine zweite VGA-Grafikkarte SpeedStar 24x drin.

Heute habe ich den Rechner mal wieder angeklemmt. Die CMOS-Daten mussten zwar neu eingegeben werden, danach lief Windows 3.1 aber ohne Probleme hoch. Das Y2k-Problem schien 1990 noch nicht zu existieren, ich konnte problemlos das aktuelle Datum eingeben und es blieb auch nach diversen Neustarts erhalten.

Highscreen 286-16

Die angezeigten 66 Mhz stammen noch aus der Zeit meines 486 DX2-66, nach dem Rückbau hatte ich es mir verkniffen, die kleinen DIP-Schalter wieder in die originale Position zu bringen.

An invalid argument was encountered

By Sven on 04.01.2006 - 09:28 in Windows Vista with 10 Kommentare

Nach der einstündigen Installation von Vista 5270 habe ich auch einmal probehalber den SpeedCommander 11 gestartet. Beim Wechseln zwischen den verschiedenen Laufwerkstypen (Lokal, Netzwerkumgebung, AddIns, FTP) kam immer die Meldung

—————————
SpeedCommander
—————————
An invalid argument was encountered.
—————————
OK
—————————

Auch beim Beenden wurde diese Meldung mehrmals angezeigt. Da ich nicht erst noch einen Compiler installieren wollte, habe ich die ganze Sache einmal mit der altbewährten MessageBox-Methode debuggt. Hierbei wird die mögliche Fehlerursache mit jeweils zwei MessageBox-Aufrufen geklammert, so dass man das Problem Schritt für Schritt eingrenzt.

Die mögliche Ursache habe ich nun gefunden, die Meldung wird von Windows nach Aufruf der Funktion DestroyWindow angezeigt. Erklären kann ich sie mir aber nicht, da das zu entfernende Fenster gültig ist. Da kann man wohl nur darauf hoffen, dass sich dieses Problem bis zur finalen Version löst.

Ansonsten bin ich von Vista überhaupt nicht angetan. Viele Einstellungen sind nun völlig anders erreichbar, ich musste ewig suchen, um bestimmte Sachen zu finden. Die deutsche Tastatureinstellung wird übrigens erst nach dem Einloggen aktiv, das erschwert die Verwendung von Sonderzeichen für das Kennwort extrem.

Wer sich die x64-Version installieren möchte, der sollte darauf achten, genügend Festplattenplatz frei zu haben. Unterhalb von 13 GB für die Systempartition tut sich nichts, bei der x32-Version liegt die Grenze bei 8.5 GB.

Kleiner Jahresausblick

By Sven on 02.01.2006 - 13:16 in Alltägliches with 3 Kommentare

Nach einem geruhsamen Jahresausklang geht es nun wieder mit frischen Kräften an die Arbeit. Ein großes Upgrade wird es aber in diesem Jahr nicht geben. Zwischen zwei Hauptversionen liegen in der Regel immer 18 bis 20 Monate, so dass es nach den beiden Upgrades für SpeedCommander und Squeez im letzten Jahr in 2006 nur kleine Updates mit Fehlerbehebungen und ein paar neuen Funktionen geben wird.

Viel Zeit wird wohl auch in die weitere Einarbeitung in den von Rainer übernommenen Quellcode fließen. Im internen Aufbau von SpeedCommander wird es einige Überarbeitungen und Optimierungen geben. Früher wurde fast jede zweite Hauptversion neu programmiert, seit dem SC9 steht SpeedCommander nun auf einem festen Fundament. Trotzdem ist es notwendig, einzelne Programmteile etwas aufzufrischen und an den heutigen Stand anzupassen. Das wird sich alles aber in hoffentlich recht entspannter Umgebung abspielen, das letzte Jahr war durch die ganzen Umstände doch recht stressig.

Interessant wird sicher auch die Einführung von Vista. Im Moment geht der allgemeine Hype aber an mir vorbei, ich bin mir noch nicht einmal sicher, ob ich im Alltag überhaupt mit Vista arbeiten möchte. Die vielleicht einzige für einen Dateimanager wirklich wichtige Erweiterung mit WinFS wurde verschoben. Die letzte Beta von WinFS hat mich auch nicht richtig überzeugt, lange Ladezeiten beim Start und häufiges Festplattenleuchten machen keinen Spaß. Dazu kommt noch der Fakt, dass wesentliche Teile von WinFS in .NET geschrieben sind, was sich auch nicht gerade performancefördernd auswirkt.

Aber lassen wir uns einfach überraschen, das Jahr ist ja noch recht lang.

Kleines Dankeschön

By Sven on 21.12.2005 - 11:14 in Visual Studio 2005 with 7 Kommentare

Da freut man sich doch:

AwardThank you for being a great contributor to Microsoft Visual Studio 2005.

You have been nominated to receive the Award for Customer Excellence. This award recognizes your extraordinary contribution to the Visual Studio 2005 product and will be shipped to you without charge.

Trotzdem werde ich dem VC6 weiterhin treu bleiben und VS2005 nur für die 64bit-Entwicklung und für das verzeichnisübergreifende Suchen und Ersetzen von Text verwenden. 🙂

Visual Studio 2005 in deutsch und Vista 5270

By Sven on 21.12.2005 - 09:02 in Visual Studio 2005 with 2 Kommentare

Pünktlich zum Weihnachtsfest gibt es auf der MSDN-Seite nun auch die deutsche Version von Visual Studio 2005. Leider wird (noch?) kein komplettes DVD-Image wie bei der englischen Version angeboten, stattdessen gibt es zwei CDs und die deutsche MSDN als zusätzliche DVD. Möglicherweise lassen sich die einzelnen ISOs aber per Handarbeit zusammenbringen.

Dazu wurde auch noch die Dezember CTP von Vista als 32- und 64bit-Version freigegeben.

Sichere Stringfunktionen

By Sven on 19.12.2005 - 11:48 in Windows SDK with Keine Kommentare

Seit SpeedCommander 10.1 verwende ich selbst nur noch sichere Stringfunktionen. Im Gegensatz zu den herkömmlichen Funktionen lstrcpy und lstrcpyn muss hier immer die Größe des Zielpuffers angegeben werden. Somit wird vermieden, dass über den Puffer hinaus geschrieben wird. Außerdem wird sichergestellt, dass der Zielpuffer in jedem Fall mit einem NULL-Zeichen abgeschlossen wird.

Nach der von Secunia entdeckten Schwachstelle in den Packfunktionen habe ich nun auch den von Rainer übernommenen Quellcode komplett auf die sicheren Stringfunktionen umgestellt, damit so etwas nicht noch einmal passiert. Bei der 64bit-Version der CxCab60u.dll gab es jedoch ein kleines Problem:

1>Linking...
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCchCopyA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCatWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCchCatA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCchCopyA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCatWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCchCatA already defined in strsafe.lib(strsafe.obj)
1>   Creating library .\objs\x64\Unicode Release\CxCab60u.lib and object .\objs\x64\Unicode Release\CxCab60u.exp
1>..\..\lib\x64\CxCab60u.dll : fatal error LNK1169: one or more multiply defined symbols found

Die Bibliotheken für die CAB-Funktionen aus dem Platform SDK (fci.lib und fdi.lib) enthalten bereits einige Funktionen aus der strsafe.lib. Um den Linker doch noch zu einer Zusammenarbeit zu überreden, muss man als zusätzliche Linkeroption „/FORCE:MULTIPLE“ angeben. Damit wird der Linker angewiesen, die zweite Definition zu ignorieren:

1>Linking...
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCchCopyA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCatWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCchCatA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCchCopyA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCatWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCchCatA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>   Creating library .\objs\x64\Unicode Release\CxCab60u.lib and object .\objs\x64\Unicode Release\CxCab60u.exp
1>..\..\lib\x64\CxCab60u.dll : warning LNK4088: image being generated due to /FORCE option; image may not run
1>Embedding manifest...
1>CxCab - 0 error(s), 11 warning(s)
Top