Laden...
S
Schattenkanzler
myCSharp.de - Member
50
Themen
238
Beiträge
Letzte Aktivität
vor 14 Jahren
Dabei seit
27.04.2004
Alter
41
Beruf
Student
Herkunft
Berlin
Erstellt vor 14 Jahren

Hallo zusammen!

Ich habe mich ein wenig mit der Skype-API beschäftigt und auch erfolgreich ein erstes Programm entwickelt, das mit Skype zusammenarbeitet.
Eine Sache würde ich gerne noch machen, weiß aber leider nicht wie und konnte bisher auch keine Lösung finden:

Ich würde gerne eine eingehende Nachricht, wenn diese mit einem bestimmten Trigger beginnt, verändern, bevor diese angezeigt wird.

Als Beispiel:

Wenn User A an User B die Nachricht "#trigger#XYZ" schickt, dann möchte ich das umwandeln in z.B. "XYZ". Der Trigger soll also nicht mehr angezeigt werden. 

Ziel der Sache ist eine Funktion, die letztendlich nichts anderes tut, als Abkürzungen wie AFAIK, IMHO, etc. automatisch übersetzt, damit man unbekannte Abkürzungen nicht immer googlen muss 🙂

Bei ausgehenden Nachrichten ist das kein Problem, im entsprechenden Handler kann man den Message-Body abändern, bei eingehenden Nachrichten geht das aber nicht so ohne weiteres.

Kennt jemand einen Weg, das zu realisieren?

Ich würde mich über eine Antwort sehr freuen!

Vielen Dank im Voraus - SK

Erstellt vor 15 Jahren

Also ich habe mal eine Weile in einem kleinen Unternehmen als Praktikant gearbeitet, dessen Datenbank aus sehr (!) vielen Quellen aufgebaut wurde. Die haben bei einem Redesign GUIDs als PK verwendet, um das Zusammenführen komfortabel zu gestalten, lief auch gut, gab keine Probleme.
Allerdings kam es da auch nicht wirklich auf die Performance an (muss jedoch sagen, dass das System - trotz sehr umfangreicher DB - nicht langsam war).

Meistens ist das allerdings Overkill.

Greets - SK

Erstellt vor 15 Jahren

verwendetes Datenbanksystem: db4o 7.4

Hallo zusammen!

Ich habe ein Problem mit der db4o-Objektdatenbank und hoffe, dass mir hier weitergeholfen werden kann.

Ich arbeite gerade an einer Art Plugin-System, welches den Plugins auch einen Data-Manager bereitstellt. Über diesen können die Plugins dann eben Daten (selbst definierter Datentypen) aus der Datenbank des Plugin-Systems lesen bzw. in die Datenbank des Systems schreiben.

Dazu stelle ich generische Methoden Save<T> und Query<T> bereit, wobei für T nur Typen zugelassen sind, die von einem - ebenfalls vom Pluginsystem bereit gestellten - Interface erben.

Leider verhält sich das Ganze etwas merkwürdig. Ist keine Datenbank vorhanden und starte ich meinen Test (ein Plugin speichert eine Instanz eines eigenen Datentyps), wird die Instanz gespeichert, nachdem die Datenbank erzeugt wurde und kann auch wieder ausgelesen werden. Starte ich die Anwendung danach erneut, wird eine InvalidCastException geworfen:

System.InvalidCastException: Unable to cast object of type 'SamplePlugin.TestType' to type 'Db4objects.Db4o.Reflect.Generic.GenericObject'.

Beim Auslesen tritt dieselbe Exception auf (natürlich sind dann die Typen vertauscht).

Dieses Verhalten ist auch reproduzierbar, also wenn ich die Datenbank dann lösche und es nochmal versuche, klappt wieder nur der erste Versuch, der zweite schlägt fehl.

Ich habe dann mal mittels

_meinObjectContainer.Query<object>()

alle Objekte aus der Datenbank geholt und dort das hier gefunden:

1. Db4objects.Db4o.Reflect.Generic.GenericObject, String representation: (G) SamplePlugin.TestType, SamplePlugin
2. System.Guid

Im Debug-Modus habe ich mir das 1. Objekt mal näher betrachtet, es handelt sich definitiv um die gespeicherte Instanz.

Ich gehe davon aus, dass das Problem daher kommt, dass sich der zu speichernde/lesende Datentyp und die ausführenden Methoden in zwei verschiedenen Assemblies befinden und beim Laden der Plugin-Assembly irgendetwas passiert, was das Casting-Problem auslöst. Nur was?

Weiß jemand, wie ich meine Einstellungen/Methoden ändern, bzw. was ich tun muss, um die Plugins erfolgreich Lesen und Schreiben zu lassen?

Ich würde mich sehr über eine Antwort freuen und hoffe, dass mein Problem deutlich geworden ist!

MFG und Danke im Voraus - SK

Erstellt vor 15 Jahren

Hey Regenwurm,

ich weiß nicht, ob ich dich richtig verstehe, aber wenn ja, dann versuch doch mal Folgendes:

Erstelle eine Klasse "ListBoxItem" (oder wie auch immer du sie nennen willst). Gib ihr all die Properties, die du von deinen Items erwartest (z.B. "Text" oder so) und überschreib die ToString()-Methode, damit die string-Repräsentation der Items deinen Vorstellungen entspricht.

Du kannst dann Instanzen der Klasse einfach direkt zur Liste hinzufügen.

Hier ein bisschen Code (quick'n'dirty):


public class ListBoxItem
{
    public string Text { get; set; }

    public ListBoxItem(string text) { this.Text = text; }
    public ListBoxItem() : this("ListBoxItem") { }

    public override string ToString()
    {
        return "Cool LBI: " + Text;
    }
}

und in einer Form mit ListBox:


private void Form1_Load(object sender, EventArgs e)
{
     for (int i = 0; i < 10; i++)
     {
         ListBoxItem lbi = new ListBoxItem("ITEM " + i.ToString());
         this.listBox1.Items.Add(lbi);
     }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
     this.Text = this.listBox1.SelectedItem.ToString();
}

Hilft dir das weiter?

Falls du wirklich unbedingt ein neues Control bauen willst, dann würde ich spontan so herangehen:

Die Property "Items" würde ich auf eine (eigene) Collection-Klasse zeigen lassen. Also so was:

class MyCollection : List { ... }

class MyListBox : ListBox
{
    public MyCollection Items { get; set; }
}

Damit wärst du dann in der Lage so Sachen zu machen wie

MyListBox box = new MyListBox();
box.Items.IrgendeineMethode()

Irgendeine Alarmglocke klingelt da grad bei mir...kann es aber nicht greifen.

Greets - SK

Erstellt vor 15 Jahren

@tom-essen: Ja, das Programm kenn ich, aber leider fehlt da der Quellcode, der ist es, der mich hauptsächlich interessiert...

Bastele gerade selbst an einem GoL und habe ein paar Probleme mit Flackern usw., also wäre die ein oder andere Anregung in Quellcode-Form natürlich sehr schick 😃

Hmm...also wenn jemand das Archiv noch haben sollte - immer her damit 😉

Greets und Danke - SK

Erstellt vor 15 Jahren

Hi zusammen!

Ich bin vor einer ganzen Weile mal über diesen Beitrag gestolpert und fand das GoL von vbtricks ziemlich super, wenn ich mich recht erinnere...leider kann man die Seite nicht mehr aufrufen - hat irgendwer noch das Programm bzw. den Quelltext?

Würde mich sehr freuen, wenn mir jemand helfen könnte!

Greets - SK

Erstellt vor 16 Jahren

Wow, toller Artikel! 👍 Bin ich jetzt gerade erst drauf gestoßen (leider nach einer Menge Arbeit...na ja, besser spät als nie).

Eine Ergänzung und eine Frage hab ich aber, hoffe, das sprengt den Rahmen nicht...

Ergänzung: Maximieren

Wenn man in borderoverride.zip (von egrath) doppelt auf die Titelleiste klickt, passiert - anders als normalerweise - nichts. Könnte mir vorstellen, dass das den ein oder anderen stört und möchte da mal meinen Senf dazu abgeben...

Das Verhalten kann man ganz leicht realiseren, indem man der Methode WndProc(ref Message) den folgenden case-Block hinzufügt:

case WM_NCLBUTTONDBLCLK:
    this.WindowState = this.WindowState.Equals(FormWindowState.Maximized) ? FormWindowState.Normal : FormWindowState.Maximized;
    break;

Die neue Konstante muss man natürlich noch angeben:

private const int WM_NCLBUTTONDBLCLK = 0x00A3;

So, nun zu meiner Frage.

Wenn die Form maximiert ist, kann man sie immer noch verschieben. Das widerspricht IMHO dem Verhalten einer "normalen" Windows-Form. Muss man dieses Verhalten einfach nachbauen (nach dem Motto "wenn maximiert, dann nicht bewegbar") oder gibt es da einen nativeren bzw. eleganteren Weg über die API?

Würde mich wirklich interessieren, da ich momentan (nebenbei) eine Form alá Office 2007 bastele und dazu diese Techniken benutzen möchte.

Greets - SK

Erstellt vor 16 Jahren

Hi svenson! Danke erstmal für deine Antwort.

Wenn ich dich richtig verstanden habe, dann kann ich zunächst mal alle Algorithmen unter dem folgenden Interface abhaken:

public interface ICryptoAlgorithm
{
    byte[] Encrypt(byte[] data, byte[] password);
    byte[] Decryp(byte[] data, byte[] password);
}

Muss nur eben bei Scherzen wie IVs diese berechnen (z.B. wie du gesagt hast über Hashing-Algorithmen).

Jetzt wüsst ich nur noch gerne, ob man das bei allen (im Sinne von "die meisten") kryptographischen Verfahren so machen kann, oder ob ich noch irgendwo einen Haken übersehe?

Was deine Vorschläge zur Architektur angeht:

Ich hatte mir ein System wie das folgende vorgestellt:

Der Benutzer kann eine "Joblist" anlegen, also eine Liste von Aufgaben, die nacheinander bzw. in mehreren Threads parallel ablaufen. Ein Job kann z.B. sein: Datei ver-/entschlüsseln, Text ver-/entschlüsseln und das gleiche noch mal für Hashes.
Ein Job/Task (wie man es nennen will) besitzt dann Informationen über die auszuführende Aktion und den dazu zu verwendenden Algorithmus. Daher brauche ich halt dieses gemeinsame Interface. Wie genau die einzelnen Algorithmen arbeiten, ist dann natürlich in den konkreten Implementierungen geregelt, also beispielsweise das Auffüllen der Daten, falls notwendig.
Dateien/Daten ein- und auslesen übernimmt das Hauptprogramm. Jetzt verstehe ich auch, was du mit der 10GB-Datei meinst...da müsste man dann eben einen Teil auslesen, verschlüsseln, zwischenspeichern, etc.

Ok, hab ich noch was übersehen? Würde sonst eben schon mal anfangen...

Ja, danke erstmal!

Greets - SK

Erstellt vor 16 Jahren

Hallo zusammen!

Ich habe zwei Fragen, die mich seit einer Weile beschäftigen und die ich hier gerne stellen möchte.

Zunächst kurz der Hintergrund, aus dem diese Fragen gewachsen sind: für einen Kurs in der Uni schreibe ich ein kleines Tool, welches verschiedene kryptographische Verfahren bereitstellen soll. Am liebsten würde ich das mit einem Plugin-System machen (daher die zweite Frage). Also der Gedanke war: Das Programm an sich kann letztendlich nicht viel mehr als Ein- und Ausgabe, während die Plugins sich um die Ver- und Entschlüsselung von Daten kümmern.

So, nun zu meiner ersten Frage. Die bezieht sich auf die Rijndael-Verschlüsselung. In allen Beispielen, die ich gefunden habe (bisher) muss man dem Algorithmus einen Schlüssel und einen Vektor übergeben. Soweit alles klar, nur frage ich mich: In allen Programmen, die ich zu dem Thema bisher kennengelernt habe, gibt man - unabhängig vom verwendeten Algorithmus - immer nur ein Passwort für die Verschlüsselung an, mehr nicht.
Ich würde das auch gerne so machen (ein PW weitergeben ist schließlich weitaus komfortabler, als auch noch einen IV mitzugeben...), frage mich nur, wie man - obwohl man eben nur diese eine Eingabe (das Passwort) hat - dennoch einen sicheren IV berechnet?

Oder kürzer: Errechnet man einen IV aus dem angegebenen Passwort oder wie wird das im Allgemeinen gemacht? Würde ungern einen Standard-IV hart codieren, klingt zu sehr nach Sicherheitslücke...

Die zweite Frage ergibt sich eigentlich schon aus der ersten. Wie bereits erwähnt, würde ich gerne über Plugins die kryptographischen Verfahren realisieren. Als ich mir einen kleinen Überblick über die verschiedenen Verfahren verschafft habe, wurde mir klar, dass es verschiedene Eingaben gibt, also man nicht einfach ein Interface machen kann wie:


public interface ICryptoAlgorithm
{
    byte[] Encrypt(byte[] data, byte[] password);
    byte[] Decryp(byte[] data, byte[] password);
}

Will sagen: Der eine Algorithmus braucht vielleicht nur ein Passwort, der andere ein Passwort und einen Vektor, wieder andere (Caesar z.B.) eigentlich nur eine Zahl, etc. pp.

Deshalb bin ich schon eine Weile am Grübeln, wie ich am besten ein möglichst allgemeines gemeinsames Interface realisieren kann und würde gern mal eure Meinung dazu hören. Vielleicht hatte ja schonmal jemand ein ähnliches Problem und kann mir unter die Arme greifen?

Also nochmal zusammenfassend:

  1. Wie realisiere ich AES/Rijndael sicher, obwohl "nur" ein Passwort angegeben werden muss/kann?

und

  1. Habt ihr eine Idee für ein möglichst allgemeines Interface bzw. eine Vorgehensweise/Architektur (bin nicht zwingend an Interfaces gebunden), mit dem/der möglichst viele kryptographische Verfahren abgedeckt sind?

Soweit meine Fragen. Ich hoffe, sie sind soweit verständlich (falls nicht, gebe ich natürlich gerne Auskunft) und ihr könnt mir helfen.

Greets und schonmal danke - SK

P.S: Natürlich bin ich auch für jeden Link-Tipp zum Thema Kryptographie mit .NET und anderen Themen, die zur Fragestellung passen dankbar! 🙂

Erstellt vor 16 Jahren

Hallo zusammen!

Ich bin jetzt schon eine Weile auf der Suche nach leicht verständlichen Quellen zum Thema automatisches Layout von Graphen.
So was hier würde ich gerne haben/machen: Beispiel (es muss nicht genau das sein, aber das Prinzip sollte klar sein, oder?).

Leider bin ich bisher immer nur auf closed-source u.ä. gestoßen, was mir nicht sehr viel bringt, da der Layout-Algorithmus in meine eigene Anwendung mit rein soll...

Hat jemand von euch eine gute Quelle für solche Informationen?

Würde mich sehr über Hilfe freuen!

Greets - SK

P.S: Wenn jemand einen eigenen Algorithmus hat, immer gerne 🙂