Laden...

Forenbeiträge von Mallett Ingesamt 171 Beiträge

12.03.2014 - 13:10 Uhr

Hallo Abt,

danke für den Hinweis, von dem Flag wusste ich schon, hab ich schon ausgeschlossen, also daran liegt es nicht.

Ich hab mittlerweile mal selbst per VPN auf die beiden VMs drauf geschaut und das Problem gestaltet sich jetzt etwas anders als in der E-Mail Beschreibung.

Der Explorer sortiert in beiden Fällen absolut identisch (WinXP / Win7), allerdings ist die Anzeige in der Software unter XP falsch. Da ich nicht auf dem Zielsystem debuggen kann, hab ich mal ein paar Logausgaben rein gebaut, bei denen ich sehe, dass die Methode StrCmpLogicalW die Dateien falsch sortiert.

Jetzt frage ich mich, wie kann das sein, auf einem System, bei der sowohl der Explorer als auch unsere Software dieselbe Methode zum Sortieren verwenden, dass dort der Explorer A zurückliefert und die Software B.

Deklariert ist das Ganze so:


[DllImport("shlwapi.dll", CharSet=CharSet.Unicode, ExactSpelling=true)]
static extern int StrCmpLogicalW(String x, String y);

Ich sehe nichts, was hier falsch sein könnte. Trotzdem liefert die Funktion in dem Comparer, in den sie eingebettet ist eine andere Sortierung als der Windows Explorer. -> jemand eine Idee warum ?

Dann bin ich mittlerweile auf CompareStringEx in der Kernel32.dll gestoßen, bei der man über entsprechende Flags das Sortierverhalten selbst festlegen kann. Habs eingebaut, funktioniert auch super auf meinem Win7 Rechner, die Methode gibt es aber leider unter WinXP noch nicht in der Kernel32.dll -> bringt mich auch nicht weiter.

Bin gerade am überlegen, ob es wirklich darauf hinaus läuft, dass ich mir den Algorithmus selbst nachbasteln muss. Wenns irgendwie geht würde ich das gerne vermeiden...

12.03.2014 - 11:38 Uhr

Ich will ja gerade sicherstellen, dass meine Sortierung immer der des OS entspricht. Warum würde ich mir da selbst einen Algorithmus stricken wollen, wenn ich den, den das OS verwendet einfach mit verwenden kann ?

12.03.2014 - 10:35 Uhr

Vielleicht nochmal zur Verdutlichung:

Ich habe zwei VMs, eine mit WinXP und eine mit Win7

unter Win7 erhalte ich folgende Sortierung im Explorer:

#.txt
_1.txt
1.txt
100.txt

unter WinXP erhalte ich folgende Sortierung im ExploreR:

1.txt
100.txt
#.txt
_1.txt

Ersteres entspricht der Sortierung, die ich erhalte, wenn ich StrCmpLogicalW aufrufe.

Ich benötige allerdings die Sortierung aus Windows XP

Der Hinweis auf Natural Sort hilft mir hier nicht weiter, da sich Natural Sort nur darauf bezieht, ob lexikographisch oder numerisch sortiert werden soll. Lösche ich aus meinem Verzeichnis alle Dateien mit führendem Sonderzeichen (#, _) raus, sortieren beide Betriebssysteme im Explorer gleich (nämlich "natürlich").

12.03.2014 - 10:31 Uhr

Doch, allerdings nichts, was auf die Problematik mit führenden Sonderzeichen eingeht...

12.03.2014 - 10:07 Uhr

Hallo herbivore,

ich hab gesucht, und nichts gefunden. Zwar gibt es oft den Hinweis auf natsort usw., in keinem Thread den ich finden konnte wird jedoch auf die Problematik mit Sonderzeichen eingegangen. Ohne Dateinamen mit Sonderzeichen am Anfang ist die Sortierung in beiden Fällen identisch.

Ist aber in Ordnung, ich frag dann woanders nach. Trotzdem danke.

12.03.2014 - 09:54 Uhr

Hallo zusammen,

ich nutze bisher einen Win API Aufruf von StrCmpLogicalW um Dateien und Verzeichnisse so zu sortieren, wie der Windows Explorer.

Jetzt habe ich festgestellt, dass der Windows Exlorer doch anders sortiert.

Mit StrCmpLogicalW erhalte ich folgende Sortierung:

1.txt
100.txt
#.txt
_1.txt

Der Explorer sortiert dagegen so:

#.txt
_1.txt
1.txt
100.txt

Es gibt also anscheinend einen Unterschied bei der Sortierung von Sonderzeichen. Nach etwas Recherche habe ich heraus gefunden, dass StrCmpLogicalW nur bis WindowsXP als Sortieralgorithmus genutzt wurde, ab Vista wurde der neue Algorithmus eingeführt.

Meine Frage jetzt, da ich Nichts dazu finde: Ist der neue Algorithmus auch irgendwo in der Win API hinterlegt, oder muss dieser selbst nachprogrammiert werden ?

Für einen Namen oder gar einen Methodennamen in der WIN API wäre ich sehr dankbar.

07.03.2014 - 12:48 Uhr

Was haltet ihr eigentlich von


if(false == xyz)
{
 //...
}

?

07.03.2014 - 12:42 Uhr

StyleCop ist für mich auch nur ein Manntageverbrennungsprogramm. Entwickler, die ein Gespür dafür haben, wie guter und lesbarer Code aussehen muss, brauchen keine Gängelung durch ein Tool, Programmierer, die dieses Gespür nicht haben, finden auch so Wege die Regeln eines Tools auszuhebeln.

Die Illusion, dass alle Entwickler qualitativ gleichwertigen Code produzieren, wenn ein Tool wie Stylecop eingesetzt wird, ist für mich eines der vielen BWL-Märchen, mit denen man über die Jahre so konfrontiert wird.

06.03.2014 - 12:54 Uhr

Ich könnte jedes mal kot**** wenn ich sowas sehe:


if (x==0)
{
   y = 17;
}

weil ich überflüssigen Noise eben zum kot*** finde, da es den Code aufbläht und somit unleserlich macht. Scheint also wohl Geschmackssache zu sein. O.g. Beispiel fällt für mich in dieselbe Kategorie wie


if(myBoolean == true)

... würg

06.03.2014 - 12:49 Uhr

In C# entspricht das einem char[] oder einem string, sollte beides funktionieren. Da beides Referenztypen sind, brauchst Du auch kein ref oder out.

Das data++ kannst du z.B. mit einer foreach Schleife abbilden.

06.03.2014 - 12:46 Uhr

Der einzige Workaround der mir hier einfällt wäre : Nicht den Designer verwenden oder eben die falschen Siganturen der Eventhandler manuell anpassen. Besser wird es wohl nicht.

06.03.2014 - 12:44 Uhr

Ein kurzes Googeln nach der Fehlermeldung deutet daraufhin, dass der Fehler mit der Umleitung der StandardOutput / StandardError zu tun hat. Ich habs mir aber nicht genauer angeschaut, da Du ja auch selbst Googeln kannst.

04.03.2014 - 12:53 Uhr

Ich habs grad mal bei mir ausprobiert (VS.NET 2010 Premium) - als auch nach mehreren Versuchen erhalte ich keine AccessViolation oder sonstige Exception.

Dass der Designer hier einen Handler


private void testUserControl1_TestEvent()
{

}

anstatt wie man erwarten würde


private void testUserControl1_TestEvent(TestClass<object> test)
{

}

ist allerdings wirklich merkwürdig.

Du könntest mal versuchen, statt den selbst definierten Delegates das generische Standarddelegate Eventhandler<T> zu verwenden.

28.02.2014 - 09:48 Uhr

Danke erstmal für die Info,

leider ist es nicht mein Code und ich kann nicht zu viel ändern, da die Version bereits seit einem Jahr an Kunden gegeben wird. Es geht letztendlich nur darum einen Hotfix für auftretende Memory Leaks zu erstellen, wodurch ich auf das Problem gestoßen bin.

Ich werde die Stelle dann vermutlich einfach entsprechend mit einem Kommentar versehen. Dachte nur ich frag mal, ob jemand eine Lösung weiß.

27.02.2014 - 13:37 Uhr

Hallo zusammen,

in meinem Code habe ich Directory.GetFiles an einigen Stellen (insgesamt 5) verwendet. Mit einem Memory Profiler sehe ich nun an den 5 Stellen, dass jeweils eine Instanz von "SafeFindHandle" als vom GC collected aber nicht disposed angemeckert wird.

Etwas Recherche hat mir die Erkenntnis gebracht, dass dies ein Handle aus den Win API Aufrufen FindFirstFile, FindNextFile ist, auf denen Directory.GetFiles wohl aufbaut.

Meine Frage wäre jetzt, wie kann ich dafür sorgen, dass dieses Handle disposed wird ? Directory.GetFiles ist eine statische Methode, ich wüsste jetzt nicht wie ich da an ein explizites "Dispose" ran kommen könnte.

Hat da jemand eine Idee ?

Danke...

26.02.2014 - 11:03 Uhr

Hallo Mallett,

diese Idee hatte ich auch schon, aber leider kann man kein Binding in Storyboards verwenden, außer auf sich selbst... Aber trotzdem Danke 😃.

Schöne Grüße
Quanue

Du kannst aber zwei verschiedene Storyboards definieren und jeweils eines von beiden abhängig von einem Binding Property als Action beim Eintreten eines Events ausführen.

Beispiel : How to bind to Animation To and FROM properties

25.02.2014 - 12:40 Uhr

Anstatt im LostFocus Trigger DarkBackgroundColor als Wert zu verwenden würde ich dann auf eine Property linken, die HasErrors noch mit auswertet ?

24.02.2014 - 12:27 Uhr

Du könntest in der Klassenbibliothek, die die Oracle-Assembly benötigt, die benutzten Objekte aus Letzterer auch zur Laufzeit laden (Activator.CreateInstance) - dann kannst Du den Verweis auch raus nehmen.
Dann würde ich auch gleich ein Interface dazwischen schalten, falls später mal ein anderes DBMS benötigt wird.

18.02.2014 - 17:17 Uhr

Es gibt Wege, ein Feld zu initialisieren, die frühestens im Konstruktor und nicht bei der Deklaration funktionieren. Ein Beispiel wäre die Initialisierung abhängig von einem anderen Wert, z.B.


public class Test
{
  private int x;
  private int y;

  public Test()
  {
     x = ReadXFromFile();
     y = 3*x;
  }
}

Daher hat es sich als guter Stil durchgesetzt, gleich alle Initialisierungen im Konstruktor durchzuführen, um keinen Mix Up im Code zu haben. Wenn man sich in einem Projekt konsequent daran hält, weiß man, dass alle Member an zentraler Stelle intialisiert werden, und schaut auch nur dort nach. Andernfalls müsste man erst suchen, wo die Initialisierung stattfindet.

Mir persönlich gefällt es auch von der Denkweise ganz gut so, denn der Konstruktor ist nunmal zum Initialisieren einer Objektinstanz gedacht und dazu gehört auch die Initialisierung des Zustands der Instanz.

18.02.2014 - 15:48 Uhr

Willst Du jetzt wissen wie man in C# ein Event wirft ?

19.12.2013 - 12:35 Uhr

Ich habe bisher FIAEs nach der Ausbildung mit 2000€ übernommen (Saarland).

18.12.2013 - 21:01 Uhr

Falls ich Dich richtig verstanden habe (bin nicht ganz sicher) - ist es das was Du suchst ?


 public abstract class MyAbstractBaseClass : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            //Implementierung
            return null;
        }
    }

    public abstract class MyAbstractBaseClass<T> : MyAbstractBaseClass, IEnumerable<T>
    {
        IEnumerator IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }

        public new abstract IEnumerator<T> GetEnumerator();        
    }

18.12.2013 - 20:12 Uhr

Also, nicht, dass es falsch rüber kommt. Ich halte MSSQL durchaus für eine gute Datenbank und würde auch für die durchschnittliche Anwendung oder für Privatnutzer aus Gründen der Einfachheit dazu raten.

Speziell bei großen Datenmengen, um die es hier zu gehen scheint, oder bei kommerziellen Projekten, bei denen es verstärkt um Performance geht, würde ich heute überwiegend auf Oracle setzen. Quelle sind hier (teils schmerzliche) Erfahrungswerte.

Das hat auch nichts mit Maximallösung zu tun, die Lizenzkosten einer SQL Server Enterprise oder Business Edition dürften sicher auch um die 10.000 € liegen. Für die allermeisten Standardanwendungen sind aber ohnehin die Express-Versionen von Microsoft oder Oracle ausreichend.

Zu MySQL und dergleichen kann ich nichts sagen, würde ich mir aber für eine Anwendung, für die ich später Support leisten und vor einem Kunden meinen Kopf hin halten muss, erst recht nicht antun.

18.12.2013 - 19:47 Uhr

Sowohl SQL Server als auch Oracle sind nur in den kostenlosen Express-Versionen limitiert.
Die Limitierungen der Oracle XE (kostenlos) Version findest Du hier:

Oracle XE Licensing Limitations

18.12.2013 - 19:13 Uhr

Aus der Liste, die oben gepostet wurde, würde ich bei großen Datenmengen unbedingt zu Oracle raten. Der SQL Server ist zwar einfacher/intuitiver in der Handhabung, hat aber gerade wenn die Tabellen sehr groß werden, häufiger mal Performanceprobleme (Stichwort Indexierung).

@Abt: Oracle als "keine echte Datenbank" zu bezeichnen ist wirklich daneben...

18.12.2013 - 15:51 Uhr

Ich glaube der Hinweis, der hier entscheidender ist, ist der von Abt, mit einem Int-Schlüssel + AutoIncrement zu arbeiten. Dann kannst Du Dir die Procedure komplett sparen.

17.12.2013 - 12:55 Uhr

Du überschreibst ja auch das Kommando des SQLAdapters wieder wenn Du ihm später ein neues zuweist.


SqlDataAdapter sda = new SqlDataAdapter("select Ereignisse from Verlauf WHERE Datum = @Datum", cn);

und anschließend


sda.SelectCommand = cmd; 

=> Effekt: dein erstes Command wurde überschrieben.

Stattdessen:





SqlDataAdapter sda = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("select Ereignisse from Verlauf WHERE Datum = @Datum");
cmd.Parameters.AddWithValue("Datum", Kalender.DateSelected);
cmd.Connection = new SqlConnection(global::WindowsFormsApplication1.Properties.Settings.Default.TestConnectionString);
sda.SelectCommand = cmd;
DataTable dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;


11.04.2013 - 16:48 Uhr

Google mal nach File.Copy, LogonUser, Impersonate, da wirst Du schnell fündig.

11.04.2013 - 15:54 Uhr

Hi,

folgende Sachlage: Das Projekt besteht aus mehreren Views (Usercontrols) zwischen denen über ein Nav-Menü hin und her geschaltet werden kann. Jedes View zeigt bestimmte Daten an und erlaubt auch eine Änderung dieser Daten durch Benutzereingaben. Die Datenquelle ist dabei eine Server-Applikation, die auf einem anderen Rechner läuft.

D.h. Jede Aktion des Benutzers im Client resultiert in einem Befehl, der über das Netzwerk an die Serverapplikation geschickt wird, und von dieser ggf. eine Antwort zurück erhält.

Die ganze Kommunikation läuft über einen TcpClient / TcpListener, über den serialisierte NetPackage-Objekte gesendet werden. Das ist über eine Netzwerk-Komponente gekapselt. Ich kann das Ganze also in etwa so ansteuern:


NetApp clientApp = new NetApp(ip, port, appID);
clientApp.AsyncReceiveEvent += new NetCommunicationHandler(OnNetPackageReceived);

int clientID = clientApp.Connect(timeout);

if(clientID > 0)
{
  int commandID = 0; //0=GetInitialState
  List<NetCommandParam> parameters = new List<CommandParams>();
  parameters.Add(new NetCommandParam("mode", 0)); //complete state

  //Beispiel zum Senden eines Befehls
  NetPackage np = new NetPackage(commandID, parameters);
  clientApp.AsyncSend(-1, np);
}
else
 throw new ApplicationException("Connection to server failed...");

Da ich das Ganze nach dem MVVM Muster umsetzen will, hab ich mich nun gefragt, wo diese Netzwerk-Comm Schicht eigentlich hin gehört. Letztendlich ist es ja nicht so, dass jedes Model auf seiner eigenen Datenquelle (z.B. xml-Datei) arbeitet, sondern jede Model-Klasse kriegt seine Daten ja aus dieser einen Netzwerkverbindung.

Von meinem Verständnis her sehe ich die NetApp Instanz als "Entity" welche als Ressource von allen Model-Klassen der Anwendung genutzt werden soll. Wie würdet ihr das modellieren, und was wäre dann noch MVVM-konform ? Umsetzen als Singleton und dann von allen Models darauf zugreifen ? Wäre dass dann nicht schon MVVMX ? Als statischen Member irgendwo anlegen worauf jedes Model zugreifen kann ? Klingt nach "globaler Variable" für mich ... bääh

Danke für jeden Vorschlag.

05.04.2013 - 13:43 Uhr

Hallo,

ich glaube Du verwechselst Da was. Mit using referenzierst Du keine Ordner, sondern namespaces.

05.04.2013 - 10:13 Uhr

Hallo Astrix,

ich bin jetzt auch noch relativ neu bei WPF, aber ich vermute mal, dass das TemplateBinding sich immer auf das unmittelbare Element bezieht, in dem es verwendet wird.

In Deinem Fall würde sich das TemplateBinding dann auf ein (nicht vorhandenes) Template für einen ContentPresenter beziehen. Aber da wird sich sicher noch jemand hier finden, der das sicherer erklären kann.

04.04.2013 - 12:33 Uhr

Wenn Du die Möglichkeit hast, die Gerätesoftware zu manipulieren, sende einfach in regelmäßigen Zeitabständen vom Gerät aus ein definiertes Signal zu deiner Windows-Anwendung. Wenn das Signal ausbleibt kannst Du auf Seite Deiner Applikation schließen, dass das Gerät weg ist.

Ich hab sowas vor einiger Zeit auch mal gemacht, nachdem ich ewig nach einer API-internen Lösung gesucht habe und nicht fündig geworden bin.

04.04.2013 - 12:27 Uhr

Ich finde hier keinen Bezug zu meiner Frage. Die Form-Instanz existiert ja nach der Beendigung des Moduls nicht mehr. Vielleicht habe ich micht nicht verständlich genug ausgedrückt.

Warum sorgst Du nicht einfach dafür, dass die Form-Instanz weiter existiert ? Es zwingt Dich doch keiner, die Form zu zerstören, halte Dir die Instanz doch in einem Member.

Ich glaube auch, dass es hier an Grundlagen hapert...

03.04.2013 - 16:32 Uhr

Wäre das nicht eher was, was man als Plugin realisieren könnte (falls ich richtig verstanden habe, was Du haben willst - bin nicht sicher) ?

Du willst doch zur Designzeit angeben können, woher Deine Applikation bestimmte Infos nehmen soll, wobei es sich bei der Quelle um irgendein Klassenobjekt handeln soll, welches aber von Anwendung zu Anwendung austauschbar ist, ja ?

Kannst Du dann nicht die Werte, wie CurrentUserLevel usw. (die sind ja meinem Verständis nach immer dieselben) in einem Interface definieren und dann eine jeweilige anwendungsspezifische Implementierung des Interface beim Design vorgeben ?

Dann bräuchtest Du im Designer nur zwei String-Variablen

AppDataAssemblyPath
AppDataImplementationType

Mit diesen Angaben kann Deine Anwendung dann zur Laufzeit eine Instanz von dem Typ mittels Activator erzeugen, und dieser Typ gibt dann eben konstante Werte zurück.

Wobei sich mir da ehrlich gesagt die Frage stellt, warum man das nicht gleich über eine Konfigurationsdatei macht, in der man dann für jede Anwendung eben die Werte entsprechend vorgibt.

03.04.2013 - 16:23 Uhr

Dann lege doch nur eine Instanz von dem Form an und halte es Dir als Member, statt immer ein neues Form anzulegen.

02.04.2013 - 14:29 Uhr

Was willst Du denn jetzt wissen ? Eine Alternative, die Du mit WPF4 benutzen kannst ?

26.03.2013 - 01:39 Uhr

Also ich bin nicht sicher ob ich richtig verstehe, was Dein Problem ist. Die Methode so wie Du sie umgesetzt hast, hat schonmal einen Mangel. Wenn die SectionID nicht als Parameter übergeben wird, wird der Wert 0 gesetzt, und es werden zu dem gefundenen Mitarbeiter immer die Infos zu Section 0 mit ausgegeben.

Ich schätze mal, da würde es mehr Sinn machen, die Section ganz aus der Ausgabe weg zu lassen, wenn sie nicht angegeben wurde.


if(sectionID != 0)
Ausgabe += "Nr. " + employee.EmployeeID + ", " + employee.Name + ", Kürzel: " + employee.EmployeeToken + ", Abteilung: " + sec.SectionName + "\nAdresse:\n" + employee.Street + " " + employee.Housenumber + "\n" + employee.Postcode + " " + employee.Country;
else
Ausgabe += "Nr. " + employee.EmployeeID + ", " + employee.Name + ", Kürzel: " + employee.EmployeeToken + ", Abteilung: " + "\nAdresse:\n" + employee.Street + " " + employee.Housenumber + "\n" + employee.Postcode + " " + employee.Country;

Wenn ich richtig erahne, was Du da machen willst, würde ich das Ganze aber von vornherein ganz anders aufbauen:

employeelist scheint eine Liste zu sein, in der alle Mitarbeiter stecken, egal aus welcher Abteilung sie kommen. Warum hältst Du nicht in jeder Section eine eigene List<Employee> in der nur die Mitarbeiter der jeweiligen Abteilung stehen ?

Dann kannst Du, wenn Abteilung und Mitarbeiter ID bekannt sind, erst die Abteilung suchen

Section sec = sectionManagement.getSection(sectionId);

und dann in dieser Abteilung nach dem Mitarbeiter suchen


Employee emp = sec.getEmployee(employeeID);

Wenn die Abteilung nicht bekannt ist, musst Du dann eben alle Sections nacheinander durchsuchen.



Employee emp = null;
foreach(Section sec in SectionList)
{
emp = sec.getEmployee(employeeID);
if(emp != null)
break;
}

26.03.2013 - 01:20 Uhr

year = ((System.Data.DataRow)cmbYear.SelectedItem)[<Spaltenname>].ToString();

26.03.2013 - 01:16 Uhr

Selbst wenn Du den Server auf dem lokalen Rechner ansprechen willst, wenn bei den Verbindungsoptionen TCP/IP ausgewählt ist (meines Wissens nach ist das der Default) müssen die Punkte, die BerndFfm angesprochen hat, erfüllt sein.

Firewall aus und TCP/IP und am Besten auch NamedPipes in der Konfigurationskonsole aktivieren, tuts in den meisten Fällen. Ansonsten könnte es noch sein, dass Du SQL-Authentifizierung deaktiviert hast.

26.03.2013 - 01:00 Uhr

Schonmal versucht, ToString() an dein SqlCommand zu hängen ? 😃

25.03.2013 - 21:29 Uhr

Hallo m.grauber,

wenn Du im Designer im Eigenschaftenfenster des Objekts die Eigenschaft suchst, die das Ziel Deines Bindings ist (also das, was bei Dir ... ist), dann gibt es daneben ein kleines Quadrat. Wenn Du da drauf klickst, geht ein neues Fenster auf, in dem Du MeineForm und davon das DependencyProperty auswählen kannst. Der XAML-Code für das Binding wird dann automatisch erzeugt.

Viel Erfolg...

24.03.2013 - 19:56 Uhr

Accenture kenne ich vom Hörensagen, eine Bekannte arbeitet da. Das soll der letzte Ausbeuterladen sein. Heute München, übermorgen Köln und wenn Du kein Bock drauf hast - verp*** dich.

Unabhängig davon hast Du schon Recht, die meisten Firmen in Deutschland gehen hauptsächlich nach Papier. Das liegt aber auch bei den großen Firmen (hatte viel mit Siemens zu tun) daran, dass die garnicht selbst ihre Leute suchen, sondern Personalvermittler dran setzen. Die haben meist null technischen Hintergrund und denen bleibt nichts weiter übrig als Profilpunkte abzuhaken.

Gerade in diesen Großkonzernen ist es aber dann meist so, dass in einer Abteilung 1-2 "Brains" sitzen, die alles leiten und lenken, und der Rest wird mitgeschleift. Bei großen Projekten kauft man sich dann externe Hilfe ein.

24.03.2013 - 00:33 Uhr

Klingt so als wäre das Listview, das was Du suchst.

23.03.2013 - 09:50 Uhr

Also mit Zertifikaten / Abschlüssen ist das so eine Sache. Wir sind in unserem Betrieb mittlerweile völlig davon abgerückt, nach Studien- / Berufsabschlüssen oder Zertifikaten zu filtern, viel wichtiger sind die Referenzen und früheren Projekte.

Wir haben einfach die Erfahrung gemacht, dass insbesondere Universitätsabsolventen sich in der Praxis oft sehr schwer tun und nicht eigenständig zu Problemlösungen fähig sind. Das gilt natürlich nicht pauschal aber eine Tendenz ist erkennbar.

Wenn ich Bewerbungen bekomme, ist mir mittlerweile ein ungelernter, der mir selbst entwickelte Anwendungen zeigen kann lieber, als ein Uni-Absolvent, der keinerlei Erfahrung mitbringt.

Bei uns ist alles vertreten von Diplom, FH, Bachelors, Fachinformatiker und Quereinsteiger ohne Abschluss im Informatik-Bereich - die Qualifikation sagt jetzt über die Leistung und Befähigung überhaupt nichts aus.

21.03.2013 - 15:45 Uhr

Hier dürftest Du schon ziemlich konkrete Tipps zur Implementierng finden:
Binärbaum

21.03.2013 - 10:23 Uhr

Du brauchst doch nur eine Klasse Node, die zwei weitere Nodes hat. Dann die üblichen Funktionen zum Anhängen von Knoten (mit Sortierung beim Binärbaum). Dann vielleicht noch ein paar rekursive Methoden zum Abfragen der Tiefe eines Knotens, oder der Anzahl der Blätter vom aktuellen Knoten aus gesehn, was Du halt so brauchst.

20.03.2013 - 12:44 Uhr

Bist Du ganz sicher, dass "doConnect finished" ausgegeben wird, oder siehst Du in der Konsole eine Augabe von einem vorherigen Durchlauf ?

Wenn "doConnect finished" kommt, ist der Thread beendet und Join muss zurück kommen.

Ich vermute, dass Dein Thread irgendwo in einem Receive hängt. Wahrscheinlich läuft beim Reconnect etwas schief, so dass der Timeout nicht gesetzt wird. Wenn in der Zeile


udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 500);

eine Exception geworfen wird, hast Du beispielsweise eine Endlosschleife. Dann steht this.IsConnected auf true, der udpClient wird im Catch geschlossen und beim nächsten Durchlauf kommt er in den else Fall. Dort fliegt eine Exception beim Receive, woraufhin this.IsConnected wieder auf false gesetzt wird usw. Das ist jetzt nur mal auf den ersten Blick ins Blaue getippt, kann auch an anderer Stelle "falsch abbiegen".

Ich würde in jedem Fall mal in die Catches und an den Stellen wo der udpClient geschlossen wird noch jeweils eine Konsolenausgabe einbauen, dann dürftest Du dem Problem vielleicht schon näher kommen.

25.12.2012 - 10:23 Uhr

Aus meiner Erfahrung kann ich sagen, dass UML ein sehr gutes Hilfsmittel sein kann, wenn man es richtig einsetzt und es auch ernst nimmt. Beispielsweise ist es deutlich einfacher, potentielle Probleme bei der Umsetzung von großen Projekten zu identifizieren, wenn man sich wirklich die Arbeit macht, und während der Konzeptionsphase neue Erkenntnisse in ein UML Modell einpflegt. Man erspart sich so nie alle Detail-Probleme, die bei der Realisierung auftreten, aber man geht im besten Fall bereits mit einer sehr konkreten Vorstellung an die Umsetzung heran und vermeidet so konzeptionelle Fehler von vorneherein.

Ich hab mir zur Anfangszeit meines Studiums nie richtig den Sinn von UML vorstellen können, da hat mir eine Vorlesung an der Fernuni Hagen "Software Engineering II" (ich weiß nicht, ob es die heute noch unter diesem Namen gibt) wirklich die Augen geöffnet. Dort wird im Skript über ein paar hundert Seiten eine systematische Vorgehensweise von der ersten Problembeschreibung eines Kunden bis zum vollständigen UML-Modell hin zu der direkt daraus abgeleiteten Implementierung beschrieben.
Gut, da ist wohl ein sehr idealisierter Fall beschrieben, aber ich konnte Einiges aus dieser Vorgehensweise bereits in zwei Großprojekten (> 2 Jahre) adaptieren und kann die Lektüre nur empfehlen.

Zum Thema Offshore - bisher haben alle Auftraggeber für die ich gearbeitet habe, damit ausnahmslos schlechte Erfahrungen gemacht. Ich denke, das liegt nicht daran, dass Inder oder Chinesen "dümmer" oder "weniger ernsthaft" sind, sondern eher an der Kommunikationshürde, die dabei zu Tage tritt. Es ist schon schwierig, wenn Personen im selben Raum ihre Sichten auf eine Problemstellung austauschen wollen, und am Ende alle mit demselben Kenntnisstand heraus gehen sollen ("vom Selben reden"). Wenn die Personen aus verschiedenen kulturellen Kreisen stammen und sich nur über elektronische Hilfsmittel austauschen können, wird es natürlich nicht einfacher. Da hilft auch kein noch so ausgefeiltes UML-Modell, denn dieses kann nie vollständig den Kommunikationsbedarf ersetzen.

23.12.2012 - 00:36 Uhr

Hab ich verstanden, mich htte nur interessiert, wie so eine Situation aussehen könnte, in der es einen Vorteil htte. Die von Dir genannten meinte ich entkräftigt zu haben.

21.12.2012 - 17:47 Uhr

Hallo Schildkröte,

wenn Du eine Möglichkeit zur automatisierten Protokollierung des Codes während der Ausführung suchst, wirst Du um die Installation eines Tools nur dann herum kommen, wenn Du - wie Du sagst - in mühsamer Arbeit - alle relevanten Codestellen selbst in eine Textdatei schreibst.

Ansonsten bieten sich evtl. einige Profiling Tools an. Diese ermöglichen die Überwachung eines ausgeführten Programms und liefern Informationen wie Callstack, Statistiken welche Methoden wie oft aufgerufen wurden usw. - Solche Tools gibts in verschiedenster Ausprägung, und in verschiedenster Preiskategorie.

Mit Blackbox- / oder Whitebox Test hat all das aber, wie schon gesagt wurde, nichts zu tun.