Laden...
Avatar #avatar-3125.png
Benutzerbeschreibung
Mein Blog: https://blog.mariusschulz.com

Forenbeiträge von m0rius Ingesamt 1.002 Beiträge

13.02.2012 - 00:46 Uhr

Hallo uwe.grunwald,

hast du das Verzeichnis von Centron als ASP.NET-Anwendung konfigurieren lassen? Wenn nicht, dann reicht ein Einzeiler an technik@centron.de mit der Bitte, das tun zu lassen.

m0rius

13.02.2012 - 00:45 Uhr

Hallo Abt,

ReCAPTCHA bietet die Möglichkeit an, die Worte vorlesen zu lassen. Außerdem werden hier nicht zufällige Nummern und Ziffern aneinander gehängt, sondern echte englische Wörter verwendet, die sich beliebig oft neu generieren lassen, wenn sie schwer zu erkennen sind.

Deinem Einwand, dass ein Kontaktformular allein den gesetzlichen Anforderungen nicht entspricht, ist natürlich nichts hinzuzufügen, allerdings komme ich zu einem anderen Schluss als du. Anstelle einer reinen Grafik würde ich aus o.g. Gründen Googles ReCAPTCHA verwenden.

m0rius

12.02.2012 - 23:12 Uhr

Hallo MAjbO,

diese Frage ist unabhängig vom verwendeten Web-Framework oder von der verwendeten Technologie. ASP.NET MVC und die Razor View Engine rendern letzten Endes auch nur herkömmlichen HTML-Code. Enthält dieser die Kontakt-E-Mail-Adresse im Textformat, so ist es für Spambots ein leichtes, solche Adressen zu finden, zu parsen und anschließend vollzuspammen.

Um das zu vermeiden, hast du verschiedene Möglichkeiten:*Veröffentliche die E-Mail-Adresse als Grafik. Das macht es schwieriger für Spambots, die Adresse zu erkennen. Auf der anderen Seite ist das aber alles andere als barrierefrei, denn was macht jemand mit einer Sehbeeinträchtigung? *Du könntest über die Verwendung eines Kontaktformulars nachdenken, das einen Captcha-Code verwendet, z.B. Googles ReCAPTCHA.

m0rius

12.02.2012 - 08:44 Uhr

Hallo Ayke,
*fovy steht für "Field of View Y" und repräsentiert das Sichtfeld. Erwartet wird ein Wert im Bogenmaß, der den Winkel eines Kreisausschnitts angibt. Ein Vollwinkel entspricht 2 PI, d.h. Math.PI / 4 entspricht einem Kreisachtel. *aspect ist das Verhältnis von Breite zu Höhe. Ein Wert von 1 würde einem quadratischen Sichtfeld entsprechen, ein Wert > 1 einem Sichtfeld, das breiter ist als hoch. *zNear ist die Entfernung des Betrachters zur vorderen Clippingebene. Alles, was näher am Betrachter ist als die Clippingebene, wird nicht gerendert. *zFar ist die Entfernung des Betrachters zur hinteren Clippingebene. Alles, was weiter vom Betrachters entfernt ist als die hintere Clippingebene, wird nicht gerendert.

Oder etwas anschaulicher (und gröber) anhand deines eigenen Sichtfeldes:
*fovy — Dein Sichwinkel von links außen bis rechts außen. *aspect — Dein Sichtformat beim Geradeausgucken, also der Quotient aus allem, was du in der Breite siehst, und allem, was du in der Höhe siehst. *zNear — Alles, was für dich zu nah ist, um es zu sehen, z.B. eine Obstfliege auf deiner Nasenwurzel. *zFar — Alles, was für dich zu weit entfernt ist, um es zu sehen, z.B. Pluto.

m0rius

03.02.2012 - 07:21 Uhr

Hallo zusammen,

ich möchte euch an dieser Stelle auf eine englischsprachige Tutorial-Reihe verweisen, die Tuts+ Premium im Laufe des Februars veröffentlicht: 30 Days to Learn jQuery.
Dabei wird jeden Tag ein etwa 10-minütiges Video hochgeladen und so systematisch (oder, wie es auf der Website heißt, "from top to bottom, inside out") jQuery erklärt. Die ersten drei Tutorials, die ich bisher gesehen habe, sind sehr hochwertig und kompakt.

Aufruf an die Webentwickler unter euch: Seht es als guten Neujahrsvorsatz an und lernt jQuery! Auch, wenn ihr jQuery bereits kennt, werdet ihr dabei bestimmt noch dazulernen können.

m0rius

22.01.2012 - 02:19 Uhr

Hallo Fresh0razoR,

ich fand Phil Haacks Blogpost Structuring Unit Tests sehr hilfreich, was die Organisation von Unit Tests angeht.

m0rius

21.01.2012 - 00:57 Uhr

Hallo Fresh0razoR,

ich kann weismats Empfehlung The Art of Unit Testing nur unterschreiben — ein sehr, sehr gutes Buch zum Thema Unit Testing!

m0rius

19.01.2012 - 01:23 Uhr

Hallo Thomas_A,

zusätzlich musst du natürlich bedenken, dass für die Berechnung nicht 100% des Arbeitsspeichers zur Verfügung stehen wird, denn zumindest das Betriebssystem sowie deine Software belegen ja ebenfalls Teile des Arbeitsspeichers.

m0rius

16.01.2012 - 00:40 Uhr

Hallo zusammen,

der Vollständigkeit halber sei an dieser Stelle noch GitHub erwähnt.

m0rius

12.01.2012 - 00:37 Uhr

Hallo Thomas A,

herzlich Willkommen auf myCSharp!

Beschäftige dich mal mit der BigInteger-Struktur, die dem .NET-Framework in der Version 4.0 hinzugefügt wurde. Die Größe der Ganzzahlen, mit denen du damit rechnen kannst, ist dabei nur durch den vorhandenen Arbeitsspeicher begrenzt.

m0rius

01.01.2012 - 09:44 Uhr

Hallo zusammen,

ich wünsche euch allen ein frohes, neues Jahr! Denkt an die guten Vorsätze — auch außerhalb der Entwicklerwelt 😉.

m0rius

01.01.2012 - 09:43 Uhr

Hallo zusammen,

ich fand die 404-Seiten von GitHub und der Kampagnenseite von Herman Cain recht gut ...

m0rius

30.12.2011 - 03:20 Uhr

Hallo macFish,

schön zu sehen, dass du dich mit FluentNHibernate beschäftigst.

Deine Klasse CustomerMap leitet ja von ClassMap<Customer> ab. Damit legst du fest, dass das T in ClassMap<T> vom Typ Customer ist. Das verwendet der Compiler dann für die Lambda-Ausdrücke.

m0rius

29.12.2011 - 09:51 Uhr

Hallo macFish,

genau, in die Repository-Klasse kommen datenbankspezifische Lese-, Speicher- und Lösch-Funktionen.
In die Service-Klassen kommen weitere Abfragemethoden, die Anwendungslogik erhalten und auf den Repository-Methoden aufbauen. (Das heißt aber nicht, dass hier alles landet, was nicht ins Repository gehört!

m0rius

29.12.2011 - 06:11 Uhr

Hallo macFish,

bevor du anfängst, DataSets und DataTables zu verwenden und manuell zu mappen, würde ich mich an deiner Stelle vorher mit (Fluent)NHibernate beschäftigen — so aufwändig ist das Mapping damit nämlich nicht.
Wenn du das Entity Framework verwenden willst, wäre der Code First Ansatz für dich vermutlich eine gute Wahl.

Domain-Objekte sind die Model-Klassen im Model-Projekt (oder Structure, wie es bei dir heißt).

Hast du dir den Thread durchgelesen, den ich gepostet habe? Vermutlich nicht, denn darin wird ersichtlich, was ich mit Repositories und Services meine.

Was ist eine Repositories ? Hab das schon mal gehört aber völlig vergessen was das zu bedeuten hat und google will nicht.

Sorry, aber darauf antworten will ich wiederum nicht. Siehe [Hinweis] Wie poste ich richtig? (Punkt 1.1).

m0rius

29.12.2011 - 02:49 Uhr

Hallo macFish,

herzlich Willkommen auf myCSharp.de!

O/R-Mapping ist von der Datenbanktechnologie abhängig und gehört daher in die Datenzugriffsschicht. Höhere Schichten verwenden die Domain-Objekte, wie bei dir SimpleStock, ohne zu wissen, wie diese mit Werten befüllt werden. Ob das über O/R-Mapping, manuelles Mapping oder über einen anderen Mechanismus passiert, ist dabei egal — Stichwort Separation of concerns.

Dein Projekt Structure – oder geläufiger: Model – sollte lediglich die Domain-Objekte enthalten. Funktionen wie Save(), die ein SimpleStock-Objekt persistieren, gehören in ein Repository in die Datenzugriffsschicht. Auf diese Repositories kann dann im Business-Layer (in deinem Falle: Logic) über Service-Klassen zugegriffen werden. Worin die Vorteile in dieser Vorgehensweise liegen, erkläre ich in Business und Persistence Methoden wie implementieren? (Aufteilung Business/Service/DAO/NHibernate).

m0rius

28.12.2011 - 11:21 Uhr

Hallo Powerslave,

nein, der Datenzugriff liegt lediglich im DataAccess-Layer — dafür existiert dieser ja gekapselt. In meinen Projekten habe ich Repositories und Services, die folgendermaßen strukturiert sind:
*Repositories unterstützen üblicherweise nur die Methoden Retrieve(), RetrieveAll(), Save() und Delete(). *Services hingegen besitzen die genannten 4 Methoden, die die Aufrufe einfach nur an die Repositories durchreichen, sowie weitere Methoden, die Anwendungslogik enthalten, wie zum Beispiel RetrieveRandom() (oder wie in deinem Fall GetEmployeesStartingWith("A")).

Ein EmployeeService könnte dann z.B. so aussehen:

public class EmployeeService : IEmployeeService
{
    private readonly IEmployeeRepository _employeeRepository;

    // Hier injizierst du ein Repository für deine spezifische Datenbanktechnologie
    public EmployeeService(IEmployeeRepository employeeRepository)
    {
        _employeeRepository = employeeRepository;
    }

    // Diese Methode wird lediglich durchgereicht ...
    public IQueryable<Employee> RetrieveAll()
    {
        return _employeeRepository.RetrieveAll();
    }

    // Diese Methode wird lediglich durchgereicht ...
    public Employee Retrieve(int employeeID)
    {
        return _employeeRepository.Retrieve(employeeID);
    }

    // Diese Methode wird lediglich durchgereicht ...
    public void Save(Employee employee)
    {
        return _employeeRepository.Save(employee);
    }

    // Diese Methode wird lediglich durchgereicht ...
    public void Delete(Employee employee)
    {
        return _employeeRepository.Delete(employee);
    }

    // Diese Methode enthält Logik, die unabhängig von der Datenbanktechnologie ist.
    // Sie benötigt lediglich eine funktionierende RetrieveAll()-Methode.
    public IQueryable<Employee> RetrieveAllStartingWith(string value)
    {
        return RetrieveAll()
            .Where(employee => employee.StartsWith(value))
            .AsQueryable();
    }
}

Der Vorteil bei dieser Architektur liegt unter anderem darin, dass die Logik von RetrieveAllStartingWith(string value) unabhängig von der Datenquelle ist. Wechselt du also die Technologie, die du zum Persistieren deiner Daten verwendest , musst du lediglich ein neues Repository mit den 4 genannten Repository-Methoden implementieren. Der EmployeeService funktioniert danach immer noch einwandfrei, da sich an der Logik von RetrieveAllStartingWith(string value) ja nichts geändert hat.

m0rius

28.12.2011 - 02:09 Uhr

Hallo Powerslave,

für mich gehören Methoden wie _employeeService.GetEmployeesStartingWith("A") ausschließlich in den Service-Layer. Wenn du den Methodenaufruf lediglich an den DataAccess-Layer durchreichst, musst du beim Auswechseln der Datenbanktechnologie all diese Methoden neu implementieren, was unnötig ist.
Stattdessen implementiere ich im DataAccess-Layer lediglich grundlegende Methoden, so zum Beispiel _employeeDao.GetAllEmployees() oder _employeeDao.GetEmployee(int employeeID), und lasse die Logik im Service-Layer — da, wo sie hingehört.

m0rius

16.12.2011 - 04:59 Uhr

Hallo Abt,

AutoMapper hilft beim Mappen der Eigenschaften natürlich ungemein, aber ein gewisser Mehraufwand bleibt, das ist richtig.

m0rius

15.12.2011 - 21:43 Uhr

Hallo Abt,

ja, das ViewModel enthält üblicherweise zusätzliche Werte, die für die Anzeige benötigt werden, darin stimme ich natürlich mit dir überein. Dafür sind ViewModels ja schließlich gedacht.
Auf der anderen Seite ist das ViewModel aber eben nicht nur ein Wrapper um die Domain-Models (oder Entities). Ich will hier gar nicht zu sehr ins Detail gehen, sondern auf eine gute Antwort von Darin Dimitrov auf StackOverflow verweisen.

m0rius

13.12.2011 - 10:27 Uhr

Hallo hfb11,

ich habe nicht den Eindruck, dass du dir genau durchgelesen hast, was schon einige Mitglieder vor mir geschrieben haben. Du sollst den Timer **häufiger **aufrufen, d.h. mehrfach pro Sekunde, nicht seltener. Die Ungenauigkeit der Timer-Klasse spielt dafür sehr wohl eine Rolle.

m0rius

13.12.2011 - 08:26 Uhr

Hallo hfb11,

poste doch mal den relevanten Quellcode, in dem du das Label aktualisierst. Rein durch deine Beschreibung ist es schwer, dir zu helfen.

m0rius

11.12.2011 - 09:15 Uhr

Hallo Abt,

WebSockets kommen dem schon recht nahe. Klassiche HTTP-Requests via AJAX ist in SignalR ja nur als Fallback-Lösung gedacht, wenn WebSockets nicht unterstützt werden.

Guck dir mal das Video in diesem Blogpost an: KsigDo Task Pad – Real-Time UI View Model syncing across users with ASP.NET, SignalR, Knockout MVVM and EF

m0rius

11.12.2011 - 01:56 Uhr

Hallo dN!3L,

jetzt ist der aktualisierte Quellcode auch auf GitHub verfügbar. Ich hatte deine Änderungen zwar direkt am 15. Oktober umgesetzt, aber noch nicht aktualisiert.

m0rius

11.12.2011 - 01:50 Uhr

Hallo seeba,

freut mich, dass dir das weiterhilft. Dann verweise ich dich an dieser Stelle auch noch auf learn.knockoutjs.com, wenn du dir Knockout aneignen möchtest. Sehr schöne interaktive Tutorials vom Projektautor ...

m0rius

10.12.2011 - 21:53 Uhr

Hallo seeba,

je nachdem, was genau du umsetzen möchtest, könnte SignalR zur Echtzeit-Unterstützung hilfreich sein; siehe dazu den Blogpost Use SignalR with Knockout for real-time UX updates in ASP.NET MVC 3.

m0rius

30.11.2011 - 02:11 Uhr

Hallo aime2code,

damit landet diese aber im "Posteingang", nicht in "Gesendet".

m0rius

29.11.2011 - 09:33 Uhr

... und anschließend anstelle der Close()-Methode die Hide()-Methode aufrufen.

m0rius

08.11.2011 - 23:43 Uhr

Hallo zusammen,

was zurzeit eventuell auch interessant ist: Vom 12. – 14. November bietet Pluralsight 3 Stunden kostenloses Training für WPF bzw. Prism an. Mehr Details unter FREE WPF and Silverlight Online Prism Training from PluralSight on Nov 12-Nov 14.

m0rius

05.11.2011 - 04:54 Uhr

Hallo qde,

über die IGrouping.Key-Eigenschaft gelangst du an die Id, nach der du gruppierst:

var list = groupedlist.Where(q => q.Key == 10);

m0rius

02.11.2011 - 22:50 Uhr

Hallo Fabian,

ich kann coffeebean nur unterstützen. Ich besitze den Samsung Syncmaster 2443BW mittlerweile seit mehr als einem Jahr und kaufe mir demnächst einen weiteren. Klare Kaufempfehlung auch von mir!

m0rius

27.10.2011 - 05:14 Uhr

Hallo Spike 1302,

sehr gute 3D-Tutorials für den Einstieg in die Materie findest du unter Riemer's XNA Tutorials. In den vier Einzelteilen der Artikelserie erstellst du unter anderem einen voll funktionsfähigen Flugsimulator sowie ein detailliertes Terrain.

m0rius

15.10.2011 - 00:37 Uhr

Hallo zusammen,

ich habe nun sämtliche Verbesserungen (bis auf die Random-Erweiterungsmethode; die kommt noch) eingearbeitet und hochgeladen. Soweit vielen Dank dafür!

Habt ihr ansonsten zusätzliche Anregungen oder Vorschläge für weitere Erweiterungsmethoden?

m0rius

13.10.2011 - 22:31 Uhr

Hallo dN!3L,

super, dann habe ich dich richtig verstanden. Ich melde mich hier wieder, wenn ich die Änderungen vorgenommen und gepusht habe.

Hallo gfoidl,

du hast Recht, vielen Dank für den Hinweis. Wird geändert!

m0rius

12.10.2011 - 23:40 Uhr

Hallo dN!3L,

meine Implementierung der CountsMax-Methode sieht nun folgendermaßen aus:

public static bool CountsMax<TSource>(this IEnumerable<TSource> source, int expectedMaxItemCount)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }

    if (expectedMaxItemCount < 0)
    {
        throw new ArgumentException("The expected item count must not be negative.", "expectedMaxItemCount");
    }

    int itemCount = 0;
    foreach (TSource item in source)
    {
        itemCount++;

        if (itemCount > expectedMaxItemCount)
        {
            return false;
        }
    }

    return true;
}

Ist das eine Implementierung, wie du sie vorgesehen hast? Analog würden die Methoden CountsMin und CountsExactly aussehen.

m0rius

03.09.2011 - 21:59 Uhr

Hallo dN!3L,

vielen Dank für die Anmerkung — ich mache mich mal ans Überarbeiten und poste hier anschließend eine der Implementierungen.

Mittlerweile ist ExtraLINQ auch als NuGet-Package zu haben: install-package ExtraLINQ oder install-package extralinq (siehe NuGet » Packages » ExtraLINQ).

m0rius

02.09.2011 - 21:15 Uhr

Zur Zeit sind folgende Erweiterungsmethoden enthalten:

02.09.2011 - 21:14 Uhr

Hallo,

an dieser Stelle möchte ich euch mein neuestes Projekt vorstellen:

[SIZE]ExtraLINQ[/SIZE]

[B]ExtraLINQ[/B] ist eine Klassenbibliothek, die zusätzliche Erweiterungsmethoden für LINQ to Objects bereitstellt.

Den Quellcode findet ihr unter Github » ExtraLINQ.

m0rius

09.08.2011 - 14:06 Uhr

Hallo herbivore,

nur einmal zur Klärung der Fachbegriffe: Was genau ist für dich ein Nettoschuldner? Ist das jemand, der für sich nicht auf ein Nullsummenspiel von Auslagen / ausstehendem Geld kommt? Ich kann den Begriff nur so auslegen, da sonst deine Aussage mit mindestens n/2 Transaktionen falsch wäre (A schuldet B einen Betrag x, B schuldet C x und C schuldet A x liefe auf 0 Transaktionen hinaus).

m0rius

03.08.2011 - 17:21 Uhr

Hallo zero_x,

genau davon habe ich zur Zeit eines:

m0rius

24.07.2011 - 13:01 Uhr

Hallo squadwuschel,

zur Zeit unterstützt MVC stark typisierte Action Links noch nicht out of the box.
Da mir allerdings genau die Funktionalität fehlt, habe ich auf der entsprechenden UserVoice-Seite, die Scott Hanselman letzte Woche angelegt hat, einen Feature Request Introduce strongly-typed HtmlHelper / UrlHelper methods erstellt — es wäre schön, wenn jeder, der Interesse daran hat, 3 Stimmen dafür abgeben würde!

m0rius

14.07.2011 - 14:20 Uhr

Hallo winSharp93,

ich sehe gerade, dass ich Segoe WP genau aus dem Grund nicht verwendet habe, sondern nur Segoe UI. Die Light-Version wird allerdings erst ab Windows 7 mitgeliefert ...

m0rius

14.07.2011 - 13:19 Uhr

Hallo talla,

doch, das ist die Schriftart aus dem Metro Design (Segoe WP Light bzw. Segoe UI Light).

m0rius

13.07.2011 - 17:30 Uhr

... und für die Kultur de-DE.

(Dies sind nur zwei Beispieldarstellungen; selbstverständlich können alle installierten Kulturen verwendet werden.)

13.07.2011 - 17:29 Uhr

Darstellung für die Kultur en-US ...

13.07.2011 - 17:28 Uhr

Hallo zusammen,

an dieser Stelle möchte ich Euch ein kleines WPF-Projekt, meinen derzeitigen Bildschirmschoner, vorstellen:

[i]Metro Clock Screensaver[/i] ist ein Bildschirmschoner, der die aktuelle Uhrzeit sowie das aktuelle Datum im Metro-Design anzeigt.

[U]Datums- und Zeitformat[/U]
Die Sprache, die das Datums- und Zeitformat bestimmt, ist frei wählbar. [COLOR](Standard ist die aktuell eingestellte Sprache des Betriebssystems.)
[/color]
Die Sprache kann Windows-nativ über den Einstellungsdialog der integrierten Bildschirmschoner-Verwaltung oder über das Kontextmenü bei geöffnetem Bildschirmschoner gewählt werden.

[U]Installation[/U]
Die angehängte ZIP-Datei enthält den Bildschirmschoner als Bildschirmschoner-Anwendung mit der Dateiendung [TT].scr[/TT]. Es gibt mehrere Möglichkeiten, den Bildschirmschoner zu installieren:
[list]
[*]Bildschirmschoner-Datei öffnen und "Installieren" wählen
[*][tt]Metro Clock.scr[/tt] manuell in das Verzeichnis [tt]%systemroot%\system32[/tt] kopieren
[/list]
Danach kann der Bildschirmschoner über den herkömmlichen Windows-Dialog ausgewählt, konfiguriert, getestet und als Standard festgelegt werden.

m0rius

09.07.2011 - 14:28 Uhr

Hallo #coder,#,

Welche Gründe sprechen dafür und dagegen, einen Umstieg auf MVC zu wagen?

Matt Hidinger hat dazu den schönen Blogpost Why I love ASP.NET MVC verfasst.
Für einen direkten Pro-Contra-Vergleich einfach mal nach Webforms vs. MVC googlen!

m0rius

04.07.2011 - 23:18 Uhr

Hallo Wirtschaftsinformatiker,

das war wohl eher ein sprachliches Missverständnis —ConcurrentBag<T> implementiert IList<T> nicht und ist deshalb in dem Sinne keine Liste.
ConcurrentBag<T> ist allerdings eine Collection, denn es werden ICollection<T>, IEnumerable<T> und IEnumerable implementiert.

m0rius

04.07.2011 - 22:56 Uhr

Hallo Curse4Life,

siehe [Tipp] Casten aber richtig: Begriffe wie Cast / is / as. Kurz:*Der harte Cast per (TModel)this löst eine InvalidCastException aus, wenn der Cast fehlschlägt. *this as TModel versucht, this in den Datentyp TModel zu casten. Gelingt das nicht, ist das Resultat null; es wird keine Exception ausgelöst.

m0rius

22.06.2011 - 12:57 Uhr

Hallo,

Windows wird, da bin ich mir sicher, aus Marketing-Gründen so heißen bleiben.

"Windows Tiles" o.ä. halte ich für unwahrscheinlich — kein Microsoft-Produkt, das mir einfällt, wurde nach dem Schema benannt ... "Internet Explorer Tabs" oder "Office Ribbons" wären ja ähnlich weitergedacht.

m0rius