Laden...
Avatar #avatar-3136.png
m.knigge myCSharp.de - Member
Programmierer Hannover Dabei seit 13.06.2010 175 Beiträge
Benutzerbeschreibung

Forenbeiträge von m.knigge Ingesamt 175 Beiträge

16.02.2015 - 08:37 Uhr

Moin!

Nein, konnte ich ehrlich gesagt nicht. Ich hatte vor etwas mit Heimautomatisierung zu spielen und dafür den Server in C# zu schreiben - daher hatte ich schon mal "den Markt" durstöbert und geschaut ob es da was passendes gibt....

Da ich aber für mein projekt was halbwegs fertiges gefunden hatte, bin ich nicht mehr dazu gekommen selber was zu coden...

Ich pers. würde aber, wenn ich nun was in C# für den Himbeerkuchen programmieren würde, vermutlich dazu tendieren mal die C#-Lösung zu probieren - einfach in der Hoffnung (oder eher der Erwartung), dass dann alles mehr "aus einem Guss" ist....

Bye,
MK

05.02.2015 - 21:12 Uhr

Entschuldigung , selbst ein "embbeded" Windows wird kaum auf die schmalheit eines Linux kommen.
Kann mir keiner Erzählen, dass das Microsoft je geschafft hätte, siehe Windows Core Server

Also ich bin ja nicht wirklich Microsofts größer Fan, aber sooo kann man das nicht stehen lassen:

  • Windows CE 5.0 benötigte 350 KB RAM (sagt Wikipedia)
  • Windows Embedded POSReady 2009 benötigte nur 64 MB RAM (sagt auch Wikipedia)

Und dass ein Core Server nicht so schmal ist wie ein richtiges embedded (ergo wie ein Windows for Devices) sollte ja wohl irgendwie klar sein ...

Bye,
Michael

04.02.2015 - 09:00 Uhr

Bisher konnte ich, kommend aus der .Net Welt nie so richtig in die PI-Programmierung reinfuchsen.

Wieso nicht? Auf dem Raspberry läuft Mono.... Selbst die GPIO-Pins kannst Du direkt aus C# ansprechen: https://github.com/raspberry-sharp/raspberry-sharp-io

Bye,
Michael

11.12.2014 - 09:39 Uhr

Hi,

guck mal hier bei dem Herrn Andreas Flohr. Dort steht zumindest er wäre der Leiter der neu gegründeten .Net User Group Hannover.

Kannst ihn ja mal kontaktieren und dann mal hier schreiben ob das noch aktuell ist (und ggf. von einem Treffen berichten).

Bye,
Michael

16.07.2014 - 09:54 Uhr

Eventuell ist HiDrive von Strato für meine Zwecke geeignet. Auf den ersten Blick sieht es aber so aus, dass ich die Synchronisation eventuell manuell oder nur einmal täglich, jedoch nicht alle x-Sekunden (nach Feststellung einer Änderung) auslösen kann. Hat hier jemand Erfahrungen mit gemacht?

Grundsätzlich ist HiDrive eher eine Festplatte als ein Online-Storyge-Service ala Dropbox. Man kann die "Festplatte" mit diversen Mitteln ansprechen, z. B. via SMB (also als Windows-Laufwerk), WebDAV, SCP oder (mein pers. Favorit) RSYNC. Und eine eigene API gibt es auch.

Wenn Du Synchronisierung wie bei Dropbox haben möchtest, dann musst Du das bei HiDrive per Hand machen - z. B. mit Microsofts SyncToy - mit dem Tool muss die Synchronisierung allerdings per Hand angestoßen werden.

Automatische Synchronisierung dann vielleicht mit FreeFileSync, DSynchronize, big5Sync oder DirSyncPro.

Bye,
Michael

06.03.2014 - 10:50 Uhr

Moin!

Also was nun "besser" ist.... Ich denke, da spielt so einiges zusammen.....

Vor einigen Jahren habe ich mal ein Buch über Code-Konventionen gelesen und darin hat der Autor auch beschrieben, wie eigentlich das Gehirn und der menschliche Sehapparat zusammenarbeiten. Der Autor schrieb, dass das Auge eigentlich nur horizontale und vertikale Balken/Blöcke sieht und das Gehirn daraus dann erst aufwendig ein "Bild" zusammenbasteln muss.

Aus diesem Grund kann man das Gehirn gut unterstützen, in dem man den Code bereits hirngerecht formatiert.

Daher ist


if (bla) {
   machdies();
   machdas();
}

für das Gehirn anstrengener zu interpretieren als beispielsweise ein


if (bla)
{
   machdies();
   machdas();
}

Hier ist der inhalt des if's viel deutlicher von Leerraum umgeben - der "Block" ist für das Gehirn eindeutiger zu identifizieren.

Wenn ich C# entwickle dann schreibe ich Code auch so - das habe ich schon zu C Zeiten so getan. Beruflich entwickle ich allerdings in Java und da haben wir im Team eine andere Konvention (nämlich die obere). Ich habe inzwichen mit beidem kein Problem. Viel wichtiger ist in diesem Zusammenhang, dass wir im Team uns alle an die gleichen Konventionen halten, damit man sich auch schnell in "fremdem" Code zurecht findet.

Code, der nicht zu den eigenen Konventionen passt kommt bei uns auch nicht durchs Code-Review. Also Code, wie ihn als Negativbeispiel unconnected gepostet hat, also


if (bla) i++;
// oder
if (bla)

i++;

Würde bei uns nicht einmal ansatzweise durch das Review kommen. ich würde sogar sagen, der Code würe bei uns durch StyleCop schon angemeckert werden und dann spätestens auf dem Integrationsserver Alarm auslösen.

Bleibt das Thema, was macht man bei if's mit nur einem Statement. Nach obiger "Lehre" müsste man dann auch die geschwungenen Klammern schreiben. Bei uns im Java-Umfeld sind die Klammern Pflicht. Bei C# verlangt StyleCop die Klammern glaube ich auch (da bin ich mir jetzt aber nicht sooo sicher - kann man ja auch ggf. ausschalten).

Ich pers. finde die Klammern aber an dieser Stelle überflüssig - wenn ich pures C programmiere dann lasse ich die Klammern auch weg - mache dann aber über und unter das if eine Leerzeile, damit das if nicht in der "Code-Suppe" untergeht. Beispiel:


machdies();
holedas();
if (jaja)
  trallalla();
machjenes();

Das geht so gar nicht! Ich schreibe dann:


machdies();
holedas();

if (jaja)
  trallalla();

machjenes();

Dadurch ist der if definitiv hervorgehoben (als "Block" erkennbar durch die Leerzeile über- und unterhalb) und geht beim Lesen m. E. nicht "verloren".

Was wenn man nun eine Anweisung dem if hinzufügen will? Dann ist der "Aufwand" natürlich größer, weil man dann erst einem "umständlich" (puh) die Klammern nachträglich setzten muss. Ich kenne tatsächlich Leute im Bekanntenkreis, die so denken und aus diesem Grund (und zwar nur aus diesem!) auch bei ifs mit nur einer Anweisung immer die geschweiften Klammern setzen.

Andere argumentieren, es ist mit den Klammern konsequenter....

Ein Argument gibt es ggf. noch für die if's ohne Klammerung - es passt halt mehr Code auf den Schirm:


if (jaja) {
  trallalla();
}

if (noe) {
  schwupps();
}

if (vielleicht) {
  kannstmichmal();
}

braucht halt mehr Platz (wenn man auf die Leerzeilen - so wie ich - nicht verzichten will) als


if (jaja)
  trallalla();

if (noe)
  schwupps();

if (vielleicht)
  kannstmichmal();

Sprich, es passt etwas mehr Code ins Editor-Fenster.

Ich denke, es ist fast egal was Du machst.... 😉 Aber selbst wenn Du nur privat entwickelst würde ich Dir auf jeden Fall anraten StyleCop zu verwenden! Damit kannst Du Dir selbst Deine Code-Konventionen aufdrücken/prüfen und so beknackter Code wie ihn beispielsweise unconnected gepostet hat kommt gar nicht erst ins Programm. StyleCop kann man in Grenzen an eigene Konventionen anpassen und auch prima in den Build-Prozess vom Visual Studio einbauen.

Bye,
Michael

P.S.: Grundsätzlich ist es aber eine gute Idee, sich über Code-Konventionen Gedanken zu machen. Denn Code wird viel öfter gelesen als geschrieben - daher muss der Code auf jeden Fall immer verständlich sein/bleiben und nicht nur in den 5 Minuten in denen man den Code runterhackt! 😉

16.12.2013 - 10:10 Uhr

Hallo,

ich glaube Du hast die Grundlagen von TCP/IP nicht so wirklich verstanden und daher kommen auch Deine Verständnisprobleme..... Ich versuche es mal in wenigen Worten....

Also grundsätzlich kannst Du Dir eine TCP-Verbindung vorstellen wie ein Telefonat. Wenn Du jemanden anrufst und zu ihm sprichst (--> TCP-Verbindung zum Server aufbauen und Daten senden), dann kann der Angerufene (--> Server) ja auch mit Dir sprechen - er braucht Dich nicht auf einer anderen Leitung anrufen... Im Fachjagon nennt man das eine "Voll-Duplex-Verbindung". Beide Teilnehmer können reden und hören (--> senden und empfangen) und zwar gleichzeitig über die gleiche Verbindung.

Was nun den Port betrifft - Wenn Du zum Server eine Verbindung aufbauen willst, dann musst Du doch zunächst erst einmal einen Socket erstellen. Ein Socket ist ein Kommunikationsendpunkt und in TCP/IP-Netzwerken nichts weiter als die Kombination (Tupel) von IP-Adresse und Portnummer. Wenn Du beim Erstellen des Sockets keine Portnummer angibst (was man beim Server allerdings auf jeden Fall machen sollte, denn der soll ja eben auf einer fest definierten Portnummer Verbindungen entgegen nehmen), dann sucht das System selbst eine nicht verwendete Portnummer für Dich raus.

Oder mal ganz platt ausgedrückt: Sobald Du einen Socket erstellt und Dich mit dem Server verbunden hast, ja genau dann hast Du auch lokal einen Port aufgemacht. In den TCP-Paketen die zwischen Server und Client gesendet werden sind die Portnummern (die vom Server und Client) festgehalten - aus diesem Grund weiss der Server auch ganz genau, an welchen Port bei Dir er die Daten senden muss. Der Komfort bei der ganzen Sache ist jedoch, dass den Server das aber alles gar nicht interessiert, weil das TCP/IP das alles erledigt. Der Server (damit meine ich die Software, nicht das Stück Hardware!) kennt im Grunde nur die Verbindung zum Client - aber welche IP und/oder Portnummer am Ende steht weiss er nicht (oder genauer: braucht er nicht zu wissen - er kann es aber durchaus ermitteln/rausfinden wenn er das will).

Ist vielleicht jetzt etwas klarer geworden....

Bye,
Michael

20.11.2013 - 10:28 Uhr

Keiner eine Idee?

Klar viele 😉 Aber bei den meisten kommst Du mit C# nicht weiter 😉

Du könntest eine DLL in besagte Prozesse einschleusen und dann die Funktionen zum Erstellen von Sockets und Senden auf dergleichen auf eigene Funktionen umbiegen. Dann bekommst Du den Verbindungsaufbau mit und kannst Die gesendeten Daten mitlesen. Ist in purem C gar nicht soooo schwierig - könnte nur sein dass eine Anti-Viren Software anschlägt weil das nicht die ganz feine Art ist. Mal ganz abgesehen von dem faden Beigeschmack, dass Du jeweils eine DLL für 32 und eine für 64 Bit Prozesse brauchst....

Dann könntest Du ähnlich wie auch Anti-Viren Software das macht mit einem Treiber den Netzwerktraffic (oder Zumindest Verbindungsauf- und -abbau) mitlesen. Das ist zwar - wie Du so schön sagst - "Holzhammer", aber Du kannst ja den Hammer nur auf ausgewählte Prozesse schlagen lassen 😉 Aber auch hier der fade Beigeschmack bzgl. 32 und 64 Bit.

Und was mir so als einfache Lösung einfällt : Starte doch periodisch "netstat" und analysiere die Ausgabe - da hast Du alle Verbindungen. Und wenn Du anstatt "netstat" mal das TCPView von Microsoft nimmst (resp. die Consolenvariante "tcpvcon"), dann hast Du auch den Prozessnamen in der Ausgabe und kannst schon anhand des Namens separieren.....

Bye,
MK

26.10.2013 - 08:31 Uhr

Es gibt kein "Dokan-Verhalten", weil Dokan nix mit ZIPs anfangen kann - es sei denn man implementiert es.

Aber ja, Du hast Recht - meine Erinnerung hat mich getrübt. Die Einräge im ZIP werden in der Tat physikalisch entfernt - das geht dann natürlich auf Kosten der Performance, denn die "neue" ZIP-Datei wird (logisch) komplett neu geschrieben....

Im Fall von Dokan könnte man sich natürlich ein "logisch gelöscht" Verhalten überlegen (z. B. in dem man den gelöschten Dateien im ZIP-Directory einen speziellen Namen gibt) - und erst wenn n Dateien (oder n Bytes) als gelöscht makriert sind einen neuen ZIP-Container erstellen (sozusagen, die ZIP-Datei "reorganisieren"). Hier sind dem kreativen Coder keine Grenzen gesetzt 😉

Bye,
MK

25.10.2013 - 19:14 Uhr

Wird das Programm beim nächsten WindowsStart mitgeladen muss nur noch der Container gemountet und die gemounteten Dateien syncronisiert werden.

Mir fehlt momentan noch etwas das Verständnis dafür, warum der Container gemounted werden muss. Wenn es nur darum geht Daten innerhalb eines Containers zu synchronisieren - dafür ist doch kein Mount (--> Laufwerk) erforderlich. Das kann man auch innerhalb eines ZIP-Archives machen ohne dafür extra ein Laufwerk zur Verfügung zu haben....

Eine andere Möglichkeit wäre das ich einen verschlüsselten .zip Container erstelle und den dann mit Dokan mounte? Geht das? Nur so eine Idee...

Klar. Ich habe ehrlich gesagt das Gefühl, dass Du dich nicht die Bohne mit Dokan auseinandergesetzt hast....

Du musst nur das Interface DokanOperations implementieren und das war es dann. In dem Interface gibt es dann Methoden wie z. B. CreateFile, OpenDirectory, CreateDirectory, CloseFile, ReadFile, WriteFile usw usw usw.

Ist also eigentlich relativ trivial, wenn man dahinter dann einen ZIP-Container hat.

Ich pers. würde aber eher zu einem SQLite basierten Backend raten (oder was anderes), da (so meine ich) beim Löschen innerhalb eines ZIP-Archives die bisherige Datei im ZIP-Container eben nicht gelöscht wird - der Eintrag wird im ZIP-Directory einfach entfernt (oder als "gelöscht" markiert - weiss ich gerade nicht). Ähnlich verhält es sich beim Ändern von Dateien. Ich meine, der "alte" Stand bleibt im ZIP-Container bestehen und der "neue" Stand der Datei wird hinten angehängt. Sprich, eine Log-Architektur. Das wird dann auf Dauer etwas voluminös....

Bye,
Knick

24.10.2013 - 11:29 Uhr

Moin!

Danke für deine Antwort.
Wenn ich das richtiog verstanden habe, kann ich mit Dokan "nur" Laufwerke/Verzeichnisse similieren.

ja, sozusagen.... ich war der Meinung das ist das was Du sucht - denn Du hast ja in Deinem Ursprungspost geschrieben:

Das Ver- und Entschlüssen soll wie in Truecrypt in einem Virtuellen Laufwerk passieren

also demnach in einem virtuellen (--> simulierten) Laufwerk.

Gibt es den noch etwas anderes mit dem ich auch verschlüsseln kann?
Mit TC kann ich über die Konsole keine Container erstellen 😦

Also Du später geschrieben hattest

Aber dann muss auf jedem PC der das Programm ausführt TC installiert sein?

Hatte ich das so interpretiert, also ob Truecrypt (oder gar eine andere Software) nicht als Voraussetzung in Frage kommt....

Ich muss gestehen dass ich so langsam auch nicht mehr verstehe was Du eigentlich willst...

Willst Du ein emuliertes/simuliertes Laufwerk? Dann nimm Dokan. Dass Du dabei auch ein Dateisystem emulieren musst ist dann halt der saure Apfel in den Du beissen musst.... Ein netter/simpler Einstieg ist ggf. ein auf SQLite basiertes Dateisystem. Es gibt natürlich auch Alternativen zu Dokan, aber ich denke dann muss Du schon auf C / C++ runter und hast keine C# Bindings (kannst ja mal einen Blick in den Source von WinCDEmu werfen um mal zu sehen was da für Klimmzüge gemacht werden müssen...

Willst Du nur einen Container der verschlüsselte Dateien enthält? Dann pack doch die verschlüsselten Dateien in eine ZIP-Datei und gut ist.... Damit kann jedes Windows umgehen....

Bye,
MK

24.10.2013 - 09:07 Uhr

Moin!

Soooooo einfach ist das nicht.... Wirf doch mal einen Blick auf Dokan - dafür gibt es sogar .Net Bindings.

Ein Beispiel für eine Benutzung von Dokan findest Du z. B. FUSE(file system in userspace) for Microsoft-SQL using C#

Bye, Michael

09.10.2013 - 16:58 Uhr

Hi,

ich habe noch nie so richtig mit VB6 programmiert - aber wenn ich mich richtig erinnere, dann werden diese binären Dateien vom Resource Compiler erstellt - sprich, es gibt "leserlichen" Code dazu und nur dieser gehört ins SCM.... Dann kannst Du prima mergen und VB merkt nach dem Merge dass es die Resourcen neu bauen muss....

Bye,
MK

09.10.2013 - 15:31 Uhr

Hallo,

auch ich habe so meine Verständnisschwierigkeiten, warum ein Subversion nicht mit VB6 Sourcen klarkommen soll - dem Subversion ist es nämlich fürchterlich Schnuppe, was man ihm für Dateien an den Kopf wirft. Ob das nun C#, VB, Assembler, Java, COBOL oder sonstwas ist, es behandelt alles gleich.

Wie dem auch sei.... Du hast Dir eigentlich die zwei richtigen Kandidaten rausgesucht (zumindest wenn man kein Geld in die Hand nehmen will/kann/darf).

Subversion ermöglicht eigentlich einen recht zügigen Einstieg und ist meist einfach zu bedienen. Es gibt mit TortoiseSVN eine gute Explorer-Integration und verschiedene Add-Ins für Visual Studio (kostenlos ist dann AnkhSvn). Subversion verfolgt den Ansatz, dass es immer einen zentralen Server gibt (also geben muss) den man für Checkouts, Merges und/oder Commits erreichen können muss.

Git ist zur Zeit "der König" der dezentralisierten SCMs (wie gesagt - zumindest bei den kostenlosen Angeboten). Die Lernkurve ist verhältnismäßig hoch, zumindest im Vergleich zu Subversion o. ä., da es halt vom klassischen Client-Server abrückt und daher erst einmal ein Umdenken notwendig ist. Die Kommandozeile ist da auch nicht jedermanns Sache 😉 Aber auch für Git gibt es inzwischen für Windows nette Tools wie z. B. SourceTree oder auch TortoiseGit. Und natürlich gibt es auch eine Integration für Visual Studio, z. B. den Git Source Control Provider oder eine Integration in den Team Foundation Server (die Visual Studio Tools for Git).

Man muss sich halt entscheiden was man will: Will mann auch ohne Verbindung zum Server seine Änderungen am Code committen können (z. B. im Urlaub oder während einer Bahnfahrt)? Dann ist ein dezentralisiertes System wie Git unverzichtbar......

bye,
Michael

07.10.2013 - 08:33 Uhr

Hallo,

zus. zu den bereits erwähnten "Vorteilen" bei VS2010 zu bleiben (anstatt zu 2012 Express zu wechseln) ist: Du kannst Dein "echtes" Visual Studio mit AddIn's erweitern, was Du mit den Express Editions nicht kannst.....

Sprich, Du kannst kein Addin für ein Source Code Management System (z. B. Subversion oder Git) installieren oder kein AddIn das VS um ansatzweise leistungsfähige Refactoring-Möglichkeiten erweitert (kostenlos z. B. Code Rush Xpress oder als kostenpflichtiges Produkt das sehr leistungsfähige ReSharper). Oder auf so nette Kleinigkeiten wie VSCommands, den Visual Studio Spell Checker, die PowerCommands oder den RegEx Tester....

Will sagen: Du hast A) keinen Nachteil durch die 2010er Version und Du hast die Möglichkeit Dein VS 2010 durch weitere Add-Ins zu erweitern und die Entwicklungsumgebung dadurch noch leistungsfähiger zu machen.....

Bye,
Michael

P.S.: Eine Übersicht von Add-Ins findest Du in der Visual Studio Gallery

02.10.2013 - 16:44 Uhr

Hallo Schildkroete,

irgendwie werde ich nicht fündig. Wie kann man heraus finden, ob der Prozess einen geladenen Zustand erreicht hat.

Wie definierst Du "Zustand geladen"? Ich definiere es so: Das Betriebssystem hat den Andressraum angelegt, den Code geladen und angefangen den Code auszuführen.

Wenn Du das ebenso definierst, dann müsste doch eigentlich die verbrauchte CPU-Zeit im User-Space den Zustand verraten - ist diese > 0, dann ist der Prozess geladen und ist losgelaufen (was nicht zwangsläufig bedeutet, dass die Applikation korrekt gestartet ist - u. U. konnte eine benötigte DLL nicht geladen werden oder eine DLL wirft in der DllMain Funktion einen Fehler, oder oder oder)....

Also wie dem auch sei, Process.UserProcessorTime könnte Dir helfen....

Bye,
Michael

25.09.2013 - 21:47 Uhr

Hallo mathis1112,

na, wie wäre es wenn Du oben auf Download klickst und dann den Installer (den EINZIGEN für Windows) runterlädst? Im Installationsverzeichnis gibt es dann das Unterverzeichnis "program\initial\bin" und dort die ausführbare Datei aqbanking-cli.exe.

Selber rumgespielt habe ich damit aber noch nicht....

bye,
Michael

25.09.2013 - 16:47 Uhr

Hi,

also wenn Deine Bank HBCI unterstützt (das sollte sie eigentlich) und Du nix dagegen hast aus Deiner C# Anwendung ein Kolsolprogramm zu starten (und die Ausgabe zu verarbeiten), dann schau Dir doch mal

AqBanking an. Das CLI (Command Line Interface) kann Umsätze abholen - das kommt Deiner Anforderung ja schon ganz nahe 😉

Ansonsten gäbe es da noch eine Java Library (HBCI4Java), die jemand angefangen hat nach C# zu portieren (HBCI4Net - aber da ist noch nix released worden, das Projekt ist wahrscheinlich tot....

Bye,
Michael

29.08.2013 - 09:58 Uhr

Hi,

noch 3 Links/Tips dazu....

  1. Du könntest ja als Start Dir die Web Spider Library mal ansehen.

  2. Eine auch im Internet oft vorgeschlagene Lösung ist, mit einem WebControl die Seite aufzumachen und dann die Methode ShowSaveAsDialog aufzurufen (und dann eben per Programm "fernzubedienen"). Mir ist das Verhalten dieser Methode nicht bekannt - aber ggf. ist es ja möglich den "SaveAs" Dialog hidden zu gestalten (oder per Hook abzufangen) damit ihn keiner sieht....

  3. Ich bin mir nicht sicher.... Das Tool wget kann auf jeden Fall eine Website "komplett" downloaden. Ich weiss jetzt aber nicht, ob er dann auch die Links entsprechend anpasst. Will damit sagen, ggf. findest Du ja irgendwo ein Kommandozeilenutility dass tut was Du willst - dann wäre es ggf. eine Alternative dieses zu verwenden....

Bye,
Michael

26.08.2013 - 10:03 Uhr

Wird dieser hier noch weiterentwickelt?

>

Na logisch..... Vor allem seit dem das Ding offiziell bei sqlite.org gehostet und gewartet wird....

Bye,
Knick

17.04.2013 - 16:16 Uhr

Hi,
ja, so groß ist sie nicht, dass ist korrekt. Aber SQLite unterstützt meines Wissens nach keine Stored Procedures. Daher muss z.T. einiges etwas aufwändig "zusammengesucht" werden, was bei MSSQL eine StoredProcedure mit entsprechender Performance machen würde.

Naja, wenn die DB im Cache ist, dann sind auch die SQLs entsprechend schnell. Und da SQLite eine embedded DB ist, sprich sie läuft im gleichen Adressraum wie Deine Anwendung, sind die von Dir abgesetzten SQLs im Grunde "Stored Procedures" (ok, nicht 100%ig, aber ich glaube es kommt rüber was ich meine).

Das mit den Netzlaufwerken KANN zu Problemen führen, muss es aber nicht - steht auch so in deinem ersten Link.

Richtig - ist halt eine Sache des Timings. Wenn zwei "kritische" Zugriffe mehrere Sekunden auseinander liegen, dann ist das halt kein Problem. Liegen diese aber im ≤ msek-Bereich beieinander, dann u. U. schon....

Für größere Umgebungen wird es später ohnehin die größeren Datenbanken geben, wo das dann kein Problem mehr dastellt.

Ich kann und will Dir/Euch ja nicht vorschreiben wie ihr beRemote zu entwerfen habt, aber ich kann es mir trotzdem nicht verkneifen 😉 mal darauf hinzuweisen, dass Du/Ihr Euch damit u. U. mehr Probleme einhandelt als eigentlich notwendig....

Du sprichst von "größeren Umgebungen"... Aus meiner beruflichen Erfahrung kann ich Dir nur sagen, dass eine Applikation (bzw. der Benutzer, der per ODBC oder was auch immer auf die DB zugreift) i. d. R. **nicht **die Berechtigungen bekommt Tabellen zu erstellen, zu löschen, zu modifizieren usw.... D. h., Du (bzw. der Anwender) ist immer auf einen DBA (DB Admin) angewiesen, der die Änderungen am DB-Schema vornimmt. Soll heissen, sobald beRemote mit SQL-Server Anbindung irgendwo in Produktion gehen soll, ist der Aufwand auf Kundenseite "enorm", da erst einmal ein DBA involviert ist.

Gleiches Spiel bei einem Upgrade/Update, wenn sich in einer neuen Version von beRemote das DB-Schema geändert hat - nix mit mal eben neues beRemote deployen... neeee, erst einmal den DBA konsultieren und dann DB-Change mit Deployment koordinieren...

Ganz ehrlich.... Ich untertselle mal, aus DB-Sicht ist das was Du/Ihr da macht "Pillepalle" (nicht abwertend gemeint - ich meine damit die Komplexität der DB und der durchgeführten Zugriffe) und ich pers. würde daher eher dazu tendieren, einen "beRemote Server" zu entwickeln, der die Zugriffe auf die gemeinsame DB durchführt. Und dann würde ich mir auch mal überlegen, ob nicht eine NOSQL-DB die bessere Alternative ist. So aus dem Bauch könnte ich mir vorstellen, dass das dann ein beRemote Server relativ einfach zu implementieren ist...

Als Idee: Kommunikation via HTTP und als Datenformat JSON (z. B. mit Json.NET). Und als DB dann im Hintergrund eine NoSQL DB wie MongoDB, Redis, DBreeze, DensoDB oder sowas - letztere kann man angeblich auch von Haus aus als Windows Dienst installieren und dann per REST befragen - beRemote Server geschenkt 😉. Vielleicht auch was leichtgewichtiges (aber hochperformantes) wie RaptorDB oder RaptorDB V2...

Und damit man nicht Zweigleisig fährt nimmt man die gleichen Klassen/Methoden auch für eine Einzelplatzversion, nur dass man dann die Kommunikation via HTTP rauslässt.... Dann spart man sich auch solch blöde Unterscheidungen zur Laufzeit "DB=SQLite" (ohne Stored Procedures) oder "DB=SQL-Server" (mit Stored Procedures - also zwei DBs mit unterschiedlichen Strategien um an die benötigten Daten zu gelangen)....

Stelle ich mir relativ spannend, aber nicht zu komplex vor...

Bye,
Michael

17.04.2013 - 12:47 Uhr

Für die Zukunft ist ohnehin zusätzlich zu der SQLite-Datebank noch die Möglichkeit der Nutzung einer MSSQL bzw. MySQL-Datenbank angedacht. Dies wird auch einige Performanceverbesserungen mit sich bringen.

Na, dass Du Dich da mal nicht täuschst 😉 Ich vermute/unterstelle mal, soooo riesig wird die DB von beRemote nicht sein - die passt doch wahrschenlick locker komplett in den Cache vom SQLite. Dann hast Du keinen ("zeitintensiven") Traffic mehr übers Netz..... SQLite ist eh schon ziemlich flott unterwegs, es sei denn man arbeitet ohne Transaktionen (dann ist es - architekturbedingt - grottenlahm) oder nutzt keine Indices. Allerdings sind dann auch auch DB-Server lahm 😉

Ja, er hat auch Recht. Das bestreite ich nicht. Ich habe aber auch geschrieben, dass die DB durchaus in Netzlaufwerken liegen kann/darf

Ui ui ui ui.... neee neee, das lass mal schön sein - schon gar nicht bei Zugriffen von unterschiedlichen Rechnern - da schwächelt jede embedded Datenbank...

Can multiple applications or multiple instances of the same application access a single database file at the same time?

How To Corrupt An SQLite Database File --> Chapter 2.1

Bye,
Michael

15.04.2013 - 09:41 Uhr

Suche doch mal in google nach "C# create Process" und huuuuiiiiii, der erste Treffer ist es....

12.04.2013 - 14:02 Uhr

Klar ist das i. O. .....

Bye,
Michael

P.S.: Freue mich aufs erste Release....

11.04.2013 - 11:48 Uhr

Meine Frage zielte nun darauf, dass ich eine Bibliothek benötige mit der ich diesen Typ nicht nur erkennen kann. Mein Programm soll die Datei ja in das unterstütze Fax Group 4 encoding konvertieren.

Und was stört Dich dann am von mir vorgeschlagenen Kommandozeilentool "tiffcp"? Bequemer gehts es ja nun wirklich nicht:

tiffcp -c g4 eingabe.tif ausgabe.tif

und fertig. Evtl. noch mit der Option "-r" spielen (z. B. "-r -1"). Aber das sollte es dann schon gewesen sein.

bye,
Michael

02.04.2013 - 11:55 Uhr

Hi,

"4" bedeutet Kompression nach CCITT Gruppe 4 (Fax G4 Standard). Die sollte eigentlich jeder TIFF-Dekompressor, der etwas auf sich hält, unterstützen. Es ist aber durchaus gut möglich, dass das .NET Framework nicht kann.

Ob die TIFFs korrupt sind oder nicht würde ich aber trotzdem vorher mal prüfen - einfach mal im GIMP, IrfanView, XnView oder sowas aufmachen...

Ansonsten 2 Tips: Du kannst auch eine 3rd Party TIFF-Library benutzen, wie z. B. LibTiff.Net - die kann auf jeden Fall G4-Kompression bzw Dekompression.

Und wenn Du sonst nix mit C# machst - wenn es auch native Code sein darf, dann nimm doch die LibTIFF - die hat ein kleines Tool namens "tiffcp" dabei, mit denen Du TIFFs konvertieren kannst - z. B. halt auch von einem Kompressionsverfahren in ein anderes....

Hope it helps,
Michael

27.12.2012 - 10:24 Uhr

Gutes beispiel wie es nicht sein sollte.

Das Geschäftsmodell von MySQL wollte ich jetzt nicht beleuchten 😉

MySql hat eine Dual Lizenz, für Open Source Benutzung ist die Kostenlos, für alles andere hat man Geld zu bezahlen.
Das müsste in deinem Fall allerdings der Kunde tun, denn er kann nicht erwarten das du das machst.

Das ist so nicht korrekt. Wir hatten mal eine kommerzielle Lizenz von MySQL (genauer, dem MySQL Connector) und haben diese an unsere Kunden weiterlizenziert. Und uns wurde seinerzeit von MySQL auch genau das bestätigt, was hier von Mike Wiesner ebenfall geäussert wurde:

According to him, MySQL AB, the company behind MySQL, argues that its okay to use MySQL, including the MySQL-JDBC-Driver, in a non-GPL application, as long as the application doesn’t use anything specific to MySQL...

Das deckt sich sinngemäß mit meinen Äusserungen: Dynamisch laden, nix spezifisches - also "nur" eine allgemeine API benutzen, damit kein "abgeleitetes Werk" entsteht....

Aber bei GPL und Co immer an den Geist denken in dem die SW darunter gestellt wurde.

😉 Der Geist stand bei meinen Aussagen nicht zur Debatte sondern nur was nach meinem Verständnis (und mit diesem stehe ich nicht alleine da) laut GPL zulässig ist.

Abschliessend sei noch bemerkt, dass es in der GPL einen speziellen Zusatz zum Thema dynamisches Linken gibt.

Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

Dieser Zusatz ist optional - fehlt dieser in der zum Produkt gehördenden GPL Lizenz, sollten meine Aussagen nach meinem Verständnis korrekt sein... Einem Einsatz in einem Closed Source Produkt (wie in einem meiner vorherigen Postings beschrieben) sollte daher nix im Wege stehen.

Und um nun nicht ganz off-topic zu werden und am Ende des Postings noch haarscharf die Kurve zum Thema VNC-Library zu kriegen: In der GPL vom VncSharp fehlt dieser Passus übrigens auch. 😁

Bye,
Michael

27.12.2012 - 09:37 Uhr

Ja... das mit dem Englisch... naja, man versteht was wir meinen - hoffe ich 😉

Schon... macht halt nur einen etwas schlechten Eindruck - wo hingegen doch die Screenshots einen sehr professionellen Eindruck hinterlassen....

Das Login ist erforderlich, da es auch zur Verschlüsselung von hinterlegten Credentials genutzt wird.

Hmmm.... nunja.... Ihr werden schon wissen was ihr tut 😉

Ich hatte da einen ganz bestimmten Anwendungsfall für die Software....

Zum Hintergrund: Ich bin ein leidenschaftiler Anwender von Launchy, einen "Schnellstarter". Dieser bietet ein Plugin für PuTTY was mich jeden Tag entzückt. Auf meinem Systtem aktiviere ich Launchy durch einen Hotkey, tippe dann "ssh" gefolgt von dem Hostnamen (der dem PuTTY bekannt sein muss), drücke einmal beherzt auf ENTER und schwupps öffnet sich PuTTY mit der Connection zum angegebenen Host. Was mich daran so entzückt ist, dass man A) ohne die Maus auskommt und B) schnell "am Ziel" ist.

Ich hatte mit ähnliches für beRemote erhofft. Hotkey drücken, beRemote starten (mit Kommandozeilenparameter für die Angabe des Hosts + Protokoll) und schwupps ist man auf dem Rechner. Wenn da noch so ein blödes Login dazwischen funkt ist das mehr als lästig. Zumal ich pers. eh "unnötige Logins" hasse wie die Pest...

Bye,
Michael

26.12.2012 - 14:31 Uhr

Hi,

Du hörst einfach nach dem Lesen des ersten Absatzes auf. Der zweite Absatz bezieht sich explizit auf dynamische Libraries / DLLs. Schreibt man also ein Plugin als DLL / Shared Library, dann ist der erste Absatz komplett zu ignorieren und nur der zweite Absatz hat Beachtung zu finden. Und dort gibt es zwei Bedingungen die erfüllt sein müssen, damit die Virulenz GPL zieht (they make function calls to each other and share data structures). Ich finde das ebenfalls sehr eindeutig.

Man sollte/muss nur folgendes beachten: Die Applikation muss auch ohne das Plugin lauffähig sein. Sprich, wenn man die DLL vom Plugin löscht darf die Applikation davon nicht beeinträchtigt werden (abgeshen davon, dass die Funktionalität, die das Plugin bereitstellt eben nicht mehr zur Verfügung steht). Das Plugin muss also wirklich dynamisch geladen werden. Denn ansonsten bilden Applikation und Plugin eben doch eine Einheit ("... form a single program").

Weiterhin ist man gut damit beraten, das Plugin nicht direkt mit der Applikation auszuliefern sondern als separaten Download anzubieten (oder zur Laufzeit der Applikation "on demand" herunterzuladen und zu installieren). Wenn man es doch mit der Applikation ausliefert, dann müssen natürlich auch Lizenzbestimmungen bzgl. der Distribution von GPL-Software beachtet werden (der Source muss ebenfalls ausgeliefert werden). Siehe FAQ

Bye,
Michael

P.S.: Als gutes Beispiel fällt mir gerade der MySQL ODBC-Treiber ein. Man nehme eine kommerzielle Closed Source Software, die mit beliebigen via ODBC erreichbaren Datenbanken arbeiten kann. Selbstverständlich darf diese Software mit dem GPL MySQL ODBC-Treiber verwendet werden - der Hersteller der Applikation darf diesen nur nicht mit der Applikation ausliefern.... Der Kunde muss sich den Treiber selber auf der MySQL Seiter herunterladen und diesen installieren....

25.12.2012 - 18:05 Uhr

Fröhliche Weihnachten herbivore,

ich denke,
>
ist da eindeutig und widerlegt deine Überlegungen.

na na na.... nun mal ganz langsam.... Dort steht doch geschrieben

and they make function calls to each other and share data structures

jetzt nehmen wir mal mein Beispiel mit dem Grafikprogramm, dass mit einem Plug-In um ein zus. Grafikformat erweitert wird. Das Grafikprogramm ruft die z. B. Methode "SaveImage" aus dem Plugin auf und übergibt einen Stream mit Bitdaten und einen Dateinamen. Da gibt es kein "call each other" und auch kein "share data structures". In diesem Fall kann man m. E. eindeutig GPL Code verwenden!

Wenn die Entwickler vom beRemote es hinbekommen, dass das VNC Plugin beispielsweise über eine Methode aktiviert wird und diese dann keine weiteren Aufrufe zum beRemorte Kern tätigt, dann kann m. E. ebenfalls eine GPL-Library verwendet werden. Beispielsweise durch eine Methode "DoWork", der IP-Adresse, Portnummer und ein Window-Handle übergeben wird (in das übergebene Window wird dann halt "gezeichnet"). Ich würde mich jetzt so weit aus dem Fenster lehnen und behaupten, ein Window Handle ist keine "data structure" (zumindest nicht innerhalb von beRemote - innerhalb des Windows Kernel schon - das ist klar). Also ich denke auch in diesem Fall kann man eine GPL-Library verwenden (gut... das VNC-Plugin muss dann halt auch GPL sein)....

Bye,
Michael

24.12.2012 - 19:38 Uhr

Hi,

also ich habe die Problematik bzgl. Plug-Ins und der GPL eigentlich immer wie folgt verstanden:

  1. Wenn ein Produkt im Grund ohne das Plugin nicht funktionieren kann, dann muss das Produkt ebenfalls unter der GPL lizenziert werden. Als Beispiel: Du kannst keinen Closed Source VNC-Client veröffentlichen und dabei eine GPL VNC-Library verwenden. Völlig egal wie man den Kern und den VNC-Kram von der Architektur her trennt.

  2. Wird das Produkt durch das Plugin "nur" um eine Funktionalität erweitert UND das Produkt nutzt "direkt" nix aus dem Plugin, dann braucht das "Mutterprojekt" nicht unter der GPL veröffentlicht werden. Als Beispiel könnte beispielsweise der IE herhalten - den kann auch Hinz und Kunz um PlugIns erweitern, die dann durchaus auch GPL Code nutzen. Oder beispielsweise ein Programm zur Bildbearbeitung, das man durch PlugIns um zus. Grafikformate erweitern kann. Das Plugin bietet Methoden zum Laden und Speichern von Images und verwendet dazu eine GPL-Library. Das Bildbearbeitungsprogramm nutzt die GPL-Library aber nicht direkt sondern spricht nur die API-Methoden "LoadImage" und "SaveImage" an, die das PlugIn bereitstellt. Hier ist es für mein Verständnis absolut ok, eine GPL-Lib im Plugin zu verwenden.

Hier wäre es aber evtl. noch einmal angebracht, GPLv2 und GPLv3 zu vergleichen. Ich meine die GPLv3 ist wesentlich restriktiver, so dass mein (durchaus angestaubtes) Wissen hier nicht so ganz korrekt ist...

Bye,
Michael

P.S.: Vielleicht noch ein Hinweis - siehe Wann muss eigenentwickelte Software unter der GPL lizenziert werden?

Es gibt Stimmen, die die Auffassung vertreten, dass durch die Verlinkung stets ein abgeleitetes Werk entsteht. Dies dürfte zumindest für dynamisch verlinkte Bibliotheken zweifelhaft sein; allerdings existieren dazu keine Urteile von Gerichten, die als Anhaltspunkt dienen könnten.

24.12.2012 - 10:57 Uhr

Hi,

warum ist die GPL denn überhaupt ein Problem? Du hast doch geschrieben, dass sämtliche Protokolle über ein Plugin realisiert werden. Dann brauchst Du doch nur das Plugin als GPL zu veröffentlichen.....

Bye,
Michael

23.12.2012 - 15:38 Uhr

Hallo,

eine LGPL o. ä. lizenzierte Library ist mir auch nicht bekannt. Aber es kann ja nicht schaden, die Autoren bzgl. einer Lizenzänderung von GPL auf LGPL mal anzuschreiben. Wäre nicht das erste mal, dass ein Autor nachträglich die Lizenz geändert hat. Fragen kostet nix....

Ansonsten.... Auf Deinem Posting hast Du ja so nett geschrieben "... weil ich Spaß daran habe und mich mit den Remotetechniken und den verschiedenen Protokollen auseinandersetzen....". Wenn ich mir die Protokollspezifikation so ansehe, dann scheint mir das Protokoll relativ simpel zu sein.... Ich glaube das ist "halbwegs flott" implementiert 😉 Allerdings muss ich sagen, dass ich meist etwas zu optimistisch schätze 😃

Bye,
Michael

P.S.: Und bevor Du fragst ob ich nicht Lust hätte am beRemote mitzuarbeiten... Ich selber habe zur Zeit privat vier Projekte am Start - und komme selber kaum dazu 😦 Wobei ich gestehen muss, dass gerade diese Bitschubserei beim RFB-Protokoll so richtig mein Ding wäre....

23.12.2012 - 12:16 Uhr

Hallo,

also ich bin ja auch sehr gespannt auf das Projekt.... Die Screen-Shots machen auch schon einen guten Eindruck. Ich hoffe nur, dass es auch einen Weg geben wird, beRemote ohne Login zu benutzen - ein zus. Logon an beRemote das wäre für mich ein klares K.O. für den Einsatz des Produktes 😦

Und.... Ihr solltet Euch mal jemanden suchen, der etwas besser Englisch kann. Die Texte auf der Homepage sind... nunja... öhm... das geht besser 😉

Schöne Weihnachten!

Bye,
Michael

07.12.2012 - 21:52 Uhr

Hi,

aber lesen kannst Du vom COM-Port, oder? Wenn ja, dann stimmen auf jeden Fall die Einstellungen (Baudrate, XON/XOFF bzw RTS/CTS oder wie das ganze Zeuchs noch hieß... mann ist das lange her)....

Das Handbuch ist (finde ich) auf etwas inkonsequent. Einerseits wird gesagt, ein "CR" (also ein 0x0D) dient der Beendigung einer Message, auf den abgedrucken Beispielen (Lampe an - beep - lampe aus) fehlt es aber kosequent...

Ich würde trotzdem mal versuchen ein CR an die Sequenz anzuhängen...

Bye,
MK

07.12.2012 - 15:47 Uhr

Hi,

Ich habe das Gerät nicht selber, aber ein Blick ins Handbuch zeigt doch schon, dass man vor der Escape Sequenz noch eine kleine Einleitung schicken muss (siehe Kapitel 6.1, Messages From Host To Sender), zumindest unter gewissen Voraussetzungen (Zitat: "If you have enabled the the Scanner Address Stamping or the Scanner Delimiter, you must specify them in every Message").

Weiterhin ist ggf. nicht ganz unwichtig: "The scanner can only receive messages if two-way mode is enabled".

Bye,
Michael

P.S.: Und wie schon herbivore angemerkt hat: Die Leerzeichen haben in Escape-Sequenzen nichts verloren 😉

02.12.2012 - 11:28 Uhr

Moin!

Ich denke was Du suchst ist nur direkt mit der Win API möglich, guckst Du mal hier: Print Spooler API.

Bei der spezifischen Anforderung würde ich mir aber überlegen, mal lieber 20-50 Euro in einen kleinen Print-Server zu invenstieren.... Guckst Du z. B. bei Pollin

Bye,
Michael

28.11.2012 - 21:49 Uhr

Hi!

Das Hauptproblem ist ja, dass wenn ich schon die exe die die DLL's lädt manipulieren kann (was ich in diesem Fall gemacht habe) bringt es mir ja nichts da irgend einen Schutz einzubauen da man diesen in 10 Minuten wieder rausgepatcht hat.

Die Information, ob die EXE/DLL digital signiert ist, entnimmt das Betriebssystem bzw. das .NET Framework dem Header der EXE-Datei. Man nehme sich also den Hex-Editor seiner Wahl, suche im Header der EXE/DLL diese Stelle und "nullt" diese einfach aus (das ist grob gesagt das Vorgehen, das meiner Ansicht nach funktionieren sollte - hab es aber selber noch nict probiert). Das dauert nicht einmal 10 Minuten 😁

In diesem Fall hilft nur Obfuscation und/oder dazu noch native code der EXE/DLL verschlüsselt und erst zur Laufzeit entschlüsselt. Dann dauert das Patchen definitv länger als 10 Minuten 8) Wobei "nur" Obfuscation auch nur bedingt was bringt, da es auch "de-obfucators" gibt - z. B. de4dot

Die Frage ist halt wirklich, ob das alles lohnt, da gerade das Obfuskieren ja auch deutlich Aufwand (ich meine damit die Konfiguration was obfuskiert werden darf und was nicht) bedeuten kann - man denke an Reflection....

Aber diese Diskussion hatten wir schon mehrfach....

Bye,
Michael

28.11.2012 - 13:00 Uhr

Hallo!

Hallo,
Nachdem ich nun ein wenig an meiner kompilierten exe rumgespielt habe sieht das

Was genau meinst Du mit "etwas herumgespielt"? Hast Du im PE-Header rumgefummelt?

Ich möchte sichergehen, dass nur die von mir erstellte und signierte Assembly benutzt werden kann und keine manipulierte.

Was genau ist denn Deine Motivation dahinter? Ein Kopierschutz bzw. das Erkennen von "gecrackten" EXE / DLL Dateien? Wenn ja: Das ist m. E. mit 100% managed Code nicht machbar...

Bye,
Michael

08.10.2012 - 14:07 Uhr

Hi,

also mir fallen spontan drei Dinge auf:

        public static void insert(MySqlConnection conn)  
        {  
            var cmd = new MySqlCommand();  
            cmd.Connection = conn;  
            cmd.CommandText = "INSERT INTO datatest(Time) VALUES(@Time)";  
            cmd.Prepare();  
  
            cmd.Parameters.AddWithValue("@Time", DateTime.Now);  
            cmd.ExecuteNonQuery();  
        }  
  1. wie schon andere bemerkt haben, solltest du das MySqlCommand Objekt ausserhalb Deiner Schleife anlegen.

  2. Auch das Prepare kostet Zeit - also das Statement am besten ausserhalb der Schleife nicht nur instanziieren sondern auch gleich "preparen".

  3. Du verwendest offensichtlich keine Transaktion. Das bedeutet, dass das DBMS für jedes Statement intern eine eigene Transaktion startet. Starte also eine Transaktion und lasse alle Deine INSERTS in einer Transaktion laufen. Abschliessend noch ein COMMIT auf die Transaktion und der ganze Schwindel sollte um einiges schneller laufen....

Bye,
Michael

17.09.2012 - 12:10 Uhr

Hallo scarpall,

ich habe mir ein tool geschrieben um meinen Wlan adapter zu aktivieren und deaktivieren.
Doch leider musste ich es mit batch dateien bestücken um die befehle auszuführen.

Mit diesen Infos ist es etwas schwer möglich Dir zu helfen....

Was genau meinst Du wenn Du sagst, Du musst "Dein Tool mit Batch-Dateien bestücken"? Meinst Du Du musst Dein Programm aus einer Batch-Datei aufrufen? Wenn ja, warum denn? Oder muss um Dein Programm noch was "drum herum" laufen? Wenn ja, was denn?

Bye,
Michael

12.09.2012 - 21:01 Uhr

Cooooool! Werde ich gleich mal herunterladen und installieren.....

Danke für den Hinweis!

Bye,
Michael

11.09.2012 - 20:46 Uhr

So eine "Input Box" ist mir auch schon mal durch den Kopf gegangen. Ich mussste aber frustriert feststellen, dass wenn ich in C# eine Umgebungsvariable setze, dass diese dann in der gerade laufenden Bat Datei nicht verfügbar ist, deswegen habe ich mich auf den Errorlevel beschränkt

Diese Einschränkung hast Du unter unixoiden Betriebssystemen auch. Aus genau diesem Grund wird bei dialog der vom Benutzer eingegebene String auch auf stderr ausgegeben.... Den muss man halt (mit den Möglichkeiten der verwendeten Skript-Sprache) in eine eigene Variable "catchen"....

Bye,
Michael

11.09.2012 - 16:09 Uhr

Deswegen habe ich advMenu entwickelt. advMenu ist ein erweitertes Konsolen Menü, welches nicht mehr mit den Buchstaben (J/N) bedient wird, sondern welches richtige Menüpunkte anbietet, von denen einer mit den Pfeiltasten selektiert und mit Enter bestätigt wird.

HA! Es gibt sie noch! Die Console-Hacker 😁 unter Windows.... Ich wusste ich bin nicht allein 🙂

Als kleine Anregung: Unter Linux gibt es das Paket "dialog", das auf der Console die Erstellung/Verwendung von "komfortablen" Oberflächen aus Shell-Skripten bietet. Guckst Du hier:

Dialog Home Page

Was Du da hast entspricht ja mehr oder weniger der Menu Box von dialog. Kannst ja bei Interesse mal im Manual von dialog gucken wie der Autor das mit der Übergabe von Parametern geregelt hat (---> Anspielung auf die Verwendung von "§" bei Deiner Lösung)....

Bye,
Michael

05.09.2012 - 21:20 Uhr

Wenn Du verstanden hättest bzw. verstehen würdest, was eine Exe ist, dann würdest Du auch gar nicht die Frage stellen, ob man diese so einfach per Edit manipulieren kann.

Ach.... wenn ich den Autor richtig verstehe geht es ihm "nur" darum die EXE dahingehend zu verändern, dass diese nicht mehr ausführbar ist. Dann soll/kann er doch einfach die ersten zwei Bytes ("MZ") durch "XX" ersetzen und schon meckert Windows, es handelt sich um keine korrekte EXE-Datei....

Für den Ursprungsposter:
Also jetzt mal aus dem Ärmel geschüttelt ohne es zu testen:

using (BinaryWriter b = new BinaryWriter(File.Open("file.bin", FileMode.Open)))
{
   b.Write('X');
}

Damit ist die EXE nicht mehr ausführbar. Dass das natürlich keinem Security Audit standhält ist klar 😉

Bye,
Michael

18.08.2012 - 21:06 Uhr

Die Express Edition für Web reicht dir möglicherweise als Übergang. Man kann zwar keine WindowsForms Projekte erstellen aber früher erstellte öffnet es problemlos.

Krass! Danke für den Tip! Das werde ich mal machen!

Bye,
Knick

17.08.2012 - 10:24 Uhr

Wie der dann berechnet, was für eine Hardware man für z.B. maximal sechs gleichzeitige Builds braucht, ist dessen Sache. Ich wüsste nicht, wie man das berechnet.

Yepp... DAS frage ich mich auch. Klar... es gibt da so Analyse-Tools - das von Dell beispielsweise nennt sich DPACK. Aber diese Tools sind halt auch kein allwissendes Orakel...

Deine Erfahrungen bzgl. remote Desktop.... Ja, ich war auch seinerzeit extrem entzückt wie "gut" das inzwischen funktioniert. Wobei es da natürlich auch auf die Anbindung und die Technologie ankommt. Zur Zeit arbeiten wir hier mit dem stinknormalen Remote Desktop. VNC hatten wir auch mal im Einsatz - aber das ist im Vergleich zu RDP (was die Performance betrifft) echt nix 😦

Wenn wir Entwickler unseren Kollegen mal etwas vorführen müssen, dann machen wir das für gewöhnlich in einem Besprechnungsraum und loggen uns via RDP auf dem entspr. Entwickler-PC ein. Das Arbeiten ist mit dem Arbeiten direkt am PC nahezu identisch. Da merkt man eigentlich keine Verzögerungen.

Von zu Hause erbeite ich ebenfalls per RDP über eine 16.000 DSL - das ist auch akzeptabel. Nur mein Router ist blöd - ab und zu hab ich Verzögerungen beim Tippen von teilweise ca. 2 Sekunden. Ein Reboot des Routers und schwupps ist es wieder performant...

Also alles in allem bin ich skeptisch, aber dennoch auch optimistisch und vor allem wahnsinnig gespannt, was aus diesem Projekt hier wird....

Bye,
MK

17.08.2012 - 00:51 Uhr

Abgesehen von SSD ist doch nichts wirklich Performance relevant. Zumindest für 99% der Entwickler

Nunja, eine SSD ist ja ganz chic, aber trotzdem dauert ein Build so seine Zeit. Das Projekt an dem ich gerade arbeite dauert so ca. 15 Minuten komplett neu zu bauen (was ich leider öfters am Tag machen muss)....

Klar läuft der Compile durch 'ne SSD eine ganze Ecke schneller, aber wenn der Rechner (aufgrund einer schwachen CPU - vielleicht nur zwei Kerne) beim Build so lahm wird dass man nebenbei nix mehr machen kann, dann ist das nicht akzeptabel. Oder mal ein Beispiel aus der Praxis: Als unsere Infrastruktur letztes Jahr Kaspersky als Anti-Virus Lösung eingeführt hat haben sich die Build-Zeiten um ca. 40% verlängert... (will damit sagen: eine SSD ist halt nicht die Lösung für jedes Problem)

Und seien wir mal ehrlich.... kann ein Rechner bzgl. der Build-Zeiten jemals "zu schnell" sein? 😉

Bye,
Knick

16.08.2012 - 23:39 Uhr

Da hat der HP Vertreter bei euch ganze Arbeit geleistet ( kenne ich von uns).

Bei uns isses zur Zeit Dell 😉

Das was dann "im Keller" pro Arbeitsplatz aufgestellt werden muss ist um ein vielfaches Teurer als was man i.a. für einen PC ausgibt.

Was aber nicht zwingend bedeutet, dass die zentralisierte Lösung damit teurer ist... Alleine die Kosten für einen PC zu rechnen reicht ja nicht... Und ohne es gemessen probiert zu haben: ich denke, so 7-10 "Daddeluser" mit Word, Excel und Outlook (bei denen die CPU fast den ganzen Tag kurz vor dem Tod vor Langeweilse steht) steckt so ein kleiner 12Kerner ja wohl locker in die Tasche. Und ein 12Kerner ist heutzutage ja wirklich finanzierbar....

Ich befürchte ja eher, dass wir Entwickler die Anforderungen für den Server in die Höhe schnellen lassen.... Wir haben da an die Performance schon ziemlich spezielle Anforderungen 😉

Hatte doch schon einen Grund warum man schon einmal von dieser Zentralen Idee weg gekommen ist.

Ja ja, und der Host ist tot.... 😉

Spass beiseite... Ich denke, man ist JETZT erst technisch dort angelangt, wo dieser zentralisierte Ansatz in der Praxis auch ansatzweise für den Benutzer akzeptabel ist. Ich habe beispielsweise vor etwa 7 Jahren mal zu Hause mit einem RDP Thin Client experimentiert (von Igel). Mann war das sch##### 😉 Sowas von lahm....

Bye,
MK

16.08.2012 - 22:11 Uhr

Und für mich "Visual Studio 2012 Express for Desktop"... Aber das kommt wohl erst im Hebst 😦 schnief