Laden...
Avatar #avatar-3432.png
Levion myCSharp.de - Member
Softwareentwickler Dabei seit 17.03.2009
Benutzerbeschreibung

Forenbeiträge von Levion Ingesamt 114 Beiträge

16.08.2012 - 16:18 Uhr

Also ich würde mich selbst als ziemlichen Virtualisierungs-Skeptiker bezeichnen. Das umfasst nicht nur Desktops sondern auch Server. Darauf will ich aber gar nicht hinaus. Das würde jetzt auch den Umfang sprengen.

Ich habe aber bisher einfach noch keine VM-Umgebung gesehen, die der nativen Umgebung das Wasser reichen kann. Dabei beziehe ich mich allerdings schon auf den Power-User-Bereich. Ich glaube gewöhnliche Office- und Standard-Anwendungen können gut virtualisiert werden. Aber wenn ich daran denke, dass meine gesamte Entwicklungsumgebing inkl. allem Anhang virtualisieren soll, gruselt es mich. VMs fühlen sich für mich immer etwas zäh in der Bedienung und schleppend in der Rückmeldung an. Im wesentlichen rede ich hier von VMWare und VirtualBox. Ich betreibe die Dinger auf nem 4-Kerner mit 8 GB RAM (keine Rumpelkiste würde ich sagen).

Natürlich gibt es eine ganze Reihe Vorteile, die da angeführt werden. Wenn man aber ehrlich ist, sind das die gleichen Thesen mit denen in den 70ern Maineframes, später Remotedesktop und jetzt "die Cloud" verkauft wird.

Home Office: Wir Entwickler arbeiten i. d. R. einmal die Woche von zu Hause.

Wenn du zu Hause arbeiten willst, dann müsste die VM doch auf deinem Heimrechner liegen. Dort müsste immer Synchron zur Firmenversion sein. Kann man das sicherstellen?

Wenn du die VM aus dem Firmenrechner starten willst brauchst du ne wirklich dicke DSL-Leitung. Wenn das eine Hand voll Entwickler hast, die das machen wollen, brauchst du nen mächtigen Upstream.

Abends im Hotel (für Vor- und Nachbereitungen des Tages). Ist doch chic, wenn man die gesamte Firmeninfrastruktur zur Verfügung hat und nicht nur den sehr begrenzten Subset auf dem Notebook. Gute Sache für die Vertriebler + Consultants.

Kann man doch auch per VPN verfügbar machen oder RDP. Wenn du die VM auf dem NB haben willst, dann stellt sich die Frage der Konsistenz wieder.

Produktvorführungen beim Kunden, die für die Präsentation eine umfangreiche Infrastruktur erfordern - eine zSeries mitzuschleppen ist immer etwas unhandlich 😉

Ich versuche es möglichst zu vermeiden in Präsentationen externe Resourcen zu verwenden. Die Admins beim Kunden sind paranoid 😃

Urlaub: Ja, kommt auch vor, dass Spezial-Wissen nicht weit verbreitet und ein Kollege mal im Urlaub "ran" muss... Man sollten den Kollegen klar machen, was ein Fileserver ist. Das horten lokalen Wissens ist weder mit noch ohne VM eine gute Idee. Das Ergebnis wird sonst sein, dass du erstmal 7 VMs abgrasen kannst um ein wichtiges Besprechhungsprotokoll zu finden.

Team-Entwicklung "auswärts"... Es ist in der Tat schon einmal vorgekommen, dass bei einem immens wichtigen Auftrag und engem Zeitpan ein Team komplett auswärts entwickelt hat um effektiv und ungestört zu entwickeln.... Wenn die VM in einem VM-Server hängt, hätte ich keine Lust nur mit stabiler Internetverbindung zu arbeiten. Wenn die VM lokal ist, dann stellt sich das Problem der Konsistenz. Ich würde hier lieber auf ein gutes Source-Control-System setzen.

Wie gesagt: Ich bin da eher skeptisch 😃 No hard feelings.

Gruß

Levi

17.07.2012 - 17:56 Uhr

Der Hinweis mit dem ApiController für MVC 4 war super! Ich arbeite jetzt damit weiter. Leider muss ich hier mit etwas veralteter Literatur (MVC 3) arbeiten. Da steht von der Variante noch gar nichts drin.

Danke!

17.07.2012 - 11:25 Uhr

Ich bin neu in dem MVC-Thema und mir ist der Unterschied zwischen WebApi-Methode und der MVC-Methode bzgl. der ActionFilter nicht klar. Ich habe mit der WebApi-Methode angefangen, hatte hier aber kein Glück den Code ans Fliegen zu kriegen (obwohl ich vom richtigen ActionFilter geerbt habe). Leider kann man ja in der MVC-Variante das Response-Objekt nicht sauber ersetzen. Deshalb habe ich hier ein bisschen gebastelt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Web.Security;
using System.Web.Mvc;

namespace BusinessSelection.ActionFilters
{
    public class BasicAuthenticationAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string header = filterContext.HttpContext.Request.Headers["Authorization"];
            string[] credentials;

            // Wenn kein Header, dann raus hier
            if (String.IsNullOrEmpty(header)) {
                UnAuthorized(filterContext);
                return;
            }

            // Wenn kein Basic Mode, dann raus hier
            if(!header.StartsWith("Basic ", StringComparison.InvariantCultureIgnoreCase)){
                UnAuthorized(filterContext);
                return;
            }

            // Benutzername und Passwort aus dem Base64 holen
            credentials = ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(header.Substring(6))).Split(':');
            if(Membership.ValidateUser(credentials[0], credentials[1])){
                base.OnActionExecuting(filterContext);
            }else{
                UnAuthorized(filterContext);
                return;
            }
            
        }

        /// <summary>
        /// Bricht die Anfrage ab, wenn der Benutzer nicht autorisiert ist
        /// </summary>
        /// <param name="filterContext">Context</param>
        private void UnAuthorized(ActionExecutingContext filterContext) {        
            filterContext.Result = new HttpUnauthorizedResult();

            filterContext.HttpContext.Response.StatusCode = 401;
            filterContext.HttpContext.Response.StatusDescription = "Authentication required";
            filterContext.HttpContext.Response.End();
        }
    }
}

Die Lösung funktioniert. Aber den Attribute am Response zu ändern kommt mir nicht so sauber vor, wie das gesamte Objekt zu ersetzen (das geht leider nicht, weil es readonly ist).

Gruß

16.07.2012 - 21:50 Uhr

Hi,

ich habe folgendes Problem. In meiner MVC-Anwendung gibt es einen Teil für die Weboberfläche und einen anderen Teil bestehend aus einigen RESTful Webservices. Für die Webservices nutze ich (erstmal) die Basic Authentication und habe mir dafür einen entsprechenden ActionFilter geschrieben. Das Problem ist, wenn ein Benutzer sich falsch einloggt, dann wird er (auch bei den Services) auf die Login-Seite umgeleitet.

Wie bringe ich meine Anwendung dazu, dass die Umleitung nicht bei RESTful Webservices gemacht wird sondern ein entsprechende HTTP-Status zurückgegeben wird?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Web.Security;
using System.Web.Mvc;

namespace BusinessSelection.ActionFilters
{
    public class BasicAuthenticationAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string header = filterContext.HttpContext.Request.Headers["Authorization"];
            string[] credentials;

            // Wenn kein Header, dann raus hier
            if (String.IsNullOrEmpty(header)) {
                filterContext.Result = new HttpUnauthorizedResult();
                return;
            }

            // Wenn kein Basic Mode, dann raus hier
            if(!header.StartsWith("Basic ", StringComparison.InvariantCultureIgnoreCase)){
                filterContext.Result = new HttpUnauthorizedResult();
                return;
            }

            // Benutzername und Passwort aus dem Base64 holen
            credentials = ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(header.Substring(6))).Split(':');
            if(Membership.ValidateUser(credentials[0], credentials[1])){
                base.OnActionExecuting(filterContext);
            }else{
                filterContext.Result = new HttpUnauthorizedResult();
                return;
            }
            
        }
    }
}

Gruß

08.03.2012 - 11:13 Uhr

Hi,

ich bin Student und habe ein Kleingwerbe angemeldet, weil ich Apps programmiere und vetreibe. Was wäre, wenn jetzt ein Softwarehaus an mich herantreten würde und quasi als Dienstleistung bei der Entwicklung einer bestimmten Softwareerweiterung unterstützt werden möchte.

Im ersten Moment hätte ich gesagt, dass ich ein entsprechendes Angebot schreibe und nach Beauftragung und Erledigung der Dienstleistung meine Stunden in Rechnung stelle. Dabei darf ich keine Umsatzsteuer ausweisen, da ich kleingewerbtreibend ohne Vorsteuerabzugsberechtigung bin (§ Keks 1/2).

  1. Ist das eine kluge Idee? Wird dies nicht üblicherweise eher durch einen befristeten Arbeitsvertrag auf Stundenbasis gemacht?

  2. Ich mache mir Sorgen bzgl. meiner Versicherung. Wenn ich tatsächlich unbeabsichtigt ein Problem verursache, dass dem Unternehmen schaden kann, muss ich dafür dich als Selbstständiger vollständig haften (ich habe keine Berufshaftpflicht). Würde ich mich anstellen lassen wäre das Schlimmste eine Lohnpfändung, oder?

Ich weiß, dass ich hier keine Rechtsberatung erwarten kann.
Aber vielleicht habt ihr ja schon ein paar Erfahrungen damit gemacht.

Gruß

10.02.2012 - 07:46 Uhr

Ich kann es Dir via Post zu schicken?

Super, danke Dir 👍

09.02.2012 - 10:12 Uhr

Hallo zusammen,

meine Wand ist nackt. Cool wäre die Klassenhierarchie des .NET-Frameworks (4.0) als Poster (eingerahmt versteht sich). Der Nutzen geht gegen Null, aber der Coolness-Faktor falls mal Programmiererfreunde zu besuchen kommen (z.B. BSG-Marathon) hoch.

Ich weiß, dass man bei MS das Poster als PDF bekommt. Allerdings kann ich keinen der gängigen Posterdruck-Dienste (Posterjack o.ä.) dazu bringen einigermaßen farbecht und skaliert zu drucken (ausgehend von der Onlinevorschau).

Hat jemand von euch sowas schon "gebrauch"?

Grüße euch!

09.02.2012 - 10:05 Uhr


>

Ich habe jetzt ein paar Wochen damit gearbeitet und kann es jedem mit OO-Background weiterempfehlen. Vor allem wenn man sich schon mit Entwurfsmustern auseinandergesetzt hat.

Dank euch!

17.01.2012 - 16:00 Uhr

Hi,

ich spiele gerade ein bisschen mit Windows 8 (Developer Preview) und Metroy Style C#-Apps. Meine ersten Examples laufen auch soweit. Jetzt würde ich aber gerne bestehende XAML-Controls einbinden. Das scheint aber nicht zu gehen. In der Toolbox fehlt der Eintrag "Choose items".

Meine Frage:
Kann man fertig kompilierte XAML-Controls einbinden?
Hat schon jemand Erfahrungen mit der neuen Oberfläche gesammelt?

Gruß

15.01.2012 - 11:31 Uhr

Der String, der da behandelt wird, ist eine SMS (Blackberry) und die sollen grundsätzlich in UTF-7 kodiert sein. Wenn ich UTF-8 oder Default benutze, bekomme ich nur einen Leerstring.

Alles außer '+' wird ja auch sauber dekodiert. Ich habe jetzt als Workaround eingebaut, dass ein alleinstehendes '+' im String durch '+-' ersetzt wird. Damit scheint das Problem behoben.

Gruß

13.01.2012 - 19:39 Uhr

Danke trashkid, danke herbivore,

ich bekomme natürlich auch 43 und 45 nur sehe ich das nicht, wenn ich nur den Index 0 ausgebe m(


// Gibt mir 43 aus!
MessageBox.Show((Encoding.UTF7.GetBytes("+")[0]).ToString());

// ... und 45 :)
MessageBox.Show((Encoding.UTF7.GetBytes("+")[1]).ToString());

In der freien Wildbahn ist es so, dass ich den UTF-7 String über eine API bekomme. Dabei scheint die Kodierung an der Stelle buggy zu sein. Alle anderen Zeichen werden einfwandfrei kodiert.

Gruß

13.01.2012 - 12:54 Uhr

Hallo,

ich habe hier ein sehr merkwürdiges Verhalten beim Encoding/Decoding von UTF-7-Strings. Ich bekomme einen UTF-7 String per Netzwerkstream und gebe diesen in C# aus. Das funktioniert auch wunderbar, bis auf das '+'.

Laut Tabelle hat das + die Ordnungszahl 43.
(bei 42 hätte ich Verschwörung! gerufen und wär' unter den Tisch gehoppst)

In einer kleinen Testanwendungen kann ich das Verhalten reproduzieren. Die 43 wird einfach als nicht darstellbares Zeichen umgesetzt. Wenn ich das (darstellbare) + umwandle bekomme ich 43.
?(


        private void button1_Click(object sender, EventArgs e)
        {
            List<byte> digits = new List<byte>();

            // In der Tabelle ist die 43 Blank
            for (int i = 33; i <= 255; i++)
            {
                if (i % 10 == 0) digits.AddRange(Encoding.UTF7.GetBytes("\r\n"));
                digits.AddRange(Encoding.UTF7.GetBytes(i.ToString() + ":"));
                digits.Add((byte)i);
                digits.AddRange(Encoding.UTF7.GetBytes("\t"));
            }

            MessageBox.Show(Encoding.UTF7.GetString(digits.ToArray()));
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Gibt mir 43 aus!
            MessageBox.Show((Encoding.UTF7.GetBytes("+")[0]).ToString());
        }

12.01.2012 - 10:27 Uhr

Hallo,

ich habe hier eine Frage die ich mal an euch weitergeben möchte.

Projekt
Es geht um ein Projekt, bei dem eine Anzahl bestimmter Internetseiten indiziert werden soll um mit Schlagworten darin suchen zu können.

**Warum nicht Google benutzen? **
Das Ziel soll sein sich innerhalb eines bestimmten Fachbereichs zu bewegen und qualitativ bessere Treffer zu bekommen, als z.B. durch eine globale Google-Suche. Im Prinzip soll somit eine Wissensdatenbank aufgebaut werden.

Hier mal ein Beispiel wie sowas aussehen könnte:
http://www.arztbibliothek.de/

Welche Möglichkeiten?
Was mir bisher eingefallen ist, ist das CES (custom search engine) von google, die sowas evtl. leisten kann. Eine "händische" Indizierung durch selber geschriebene Software sprengt sicherlich den Rahmen, es sei denn es gibt Komponenten/ein Framework, was entsprechendes leisten kann.

Habt ihr Ideen zu diesem Thema oder vielleicht selber sowas schonmal gemacht?

Grüße

21.12.2011 - 18:34 Uhr

Hallo,

ich arbeite mich gerade (weit abseits von C#) in Javascript ein. Ich versuche eine etwas umfangreichere App für das BlackBerry-Playbook zu entwickeln. Ich setze dabei das WebWorks-Framework ein d.h. HTML5 + JavaScript (JQuery Mobile), da ich später möglichst einfach auf Android evtl. auch auf iOS portieren möchte.

Da sich ja jetzt auch bei Microsoft ein Strategiewechsel zu HTML5 + JavaScript abzeichnet, frag' ich hier mal in die Runde.

Hat sich jemand schon umfangreicher mit JavaScript beschäftigt? Also nicht nur JQuery aufgenommen und einen Kalendar oder eine MessageBox gezaubert.

Wie entwickelt ihr mit JavaScript? Gibt es gute Literatur? (vielleicht was für Umsteiger)

Mein Problem ist einfach, dass JavaScript doch sehr befremdlich ist. Es ist mühsam gewohnte objektorientierte Denkweises (aus C# oder Java) darauf abbilden kann.

Gruß

19.08.2011 - 10:38 Uhr

Ich kann diesen ganzen Cloud-Hype wirklich nur bedingt nachvollziehen. Natürlich gibt es Anwendungsbereiche die tatsächlich davon proftieren, wenn die Daten zentral und jederzeit zugänglich im Internet gehostet werden. Das die Anwendungen selbst tatsächlich auch dort laufen ist gerade was Wartung und Pflege angeht ein großer Vorteil.

Auf der anderen Seite gibt es aber einen ganzen Haufen von Anwendungen die nicht in der Cloud funktionieren. Gerade was mobile Anwendungen angeht fragen die Anwender lieber lokale Anwendungen nach als auf eine Cloud-Lösung zu setzen, die von Verfügbarkeit und Geschwindigkeit des Netzwerkes abhängen. Aus eigener Erfahrung kann ich sagen, dass das einfach frustrierend ist, weil der Netzausbau im mobilen Bereich bei weitem nicht soweit ist. Vielleicht wird es auch nie dazu kommen. Schließlich schafft man ja nichtmal im verkabelten Bereich annährend 100% Breitbandanbindung zu schaffen.

Was Desktopanwendungen angeht muss man auch einfach mal auf die Performance schauen. Ich arbeite lieber mit meinem lokalen Office als mit den Cloudlösungen die ich bisher gesehen habe. Trotzdem find ich es toll wenn ich mein Officedokument dank Windows Live auch von sonst wo einsehen und weiterbearbeiten kann. Das ist aber nicht meine bevorzugte Variante.

Den Instant-Messenger wiederrum habe ich gerne als Cloudanwendung dabei, weil der auch auf allen Rechnern die ich nutze gleich konfiguriert sein soll und der Umfang überschaubar ist.

Alles keine neuen Argumente aber mein persönliches Fazit zur Cloud ist, dass das irgendwo (so wie SOA, o.ä.) seinen Platz und seine Berechtigung finden wird. Eine Revolution ist es aber nicht.

29.07.2011 - 12:52 Uhr

Warum denn eigentlich nicht ...

... selber machen. Soweit ich mich erinnere war der Code des CW-Servers recht übersichtlich. Ich denke, dass man in relativ schnell eine C#-Portierung schaffen kann. Zudem hat der ExRevel (ursprünglicher Programmierer) auf Modularität Wert gelegt. Mich reizt es auf jeden Fall als Freizeitprojekt (auch wenn ich da ständig zuviele von habe 😉 ).

Gruß

28.07.2011 - 16:49 Uhr

Juchu! Ja das tät mich auch interessieren 😃

28.07.2011 - 09:18 Uhr

Ich bin Fachinformatiker für AE und habe (nach meiner Ausbildung) 5 Jahre in meiner Ausbildungsfirma gearbeitet. Jetzt werde ich ab September studieren (Wirtschaftsinformatik). Meine Motivation für die Entscheidung war im wesentlichen, dass ich das Gefühl hatte, mich anders nicht mehr weiterentwickeln zu können. Ich habe immer neben meiner Arbeit auch eigene Projekte verfolgt und mir auch andere Sprachen und Technologien angeeignet, das reicht mir aber nicht. Zum Thema Studium oder nicht hat mein Fachbereichsleiter der FH einen interessanten Satz gesagt.

"Die Frage ob Studium oder nicht, ist die Frage, ob man Maurer oder Architekt sein will."

Das beantwortet sicher nicht die Frage ob eine engagierte Fachinformatiker kompetenter ist als ein mittelmäßiger Informatik Bachlor und ist sicher auch ziemlich provokant, es steckt aber vielleicht ein quentchen Wahrheit drin ... ich werd's sehen 😉

Gruß

Levi

28.07.2011 - 08:52 Uhr

Hi, das ganze erinnert mich an Codewars. Allerdings funktioniert Codewars über Sockets mit einem entsprechenden Protokoll. Das Projekt ist richtig Klasse. Man programmiert Bots die man mit bestimmten Fähigkeiten ausstattet und aufeinander loslassen kann. Die Map konnte dabei verschiedene Hindernisse wie Mauern und Wasser enthalten. Im Gegensatz zu Ant! oder deinem Projekt funktioniert CodeWars mit allen Programmiersprachen die Sockets beherrschen. Wer hat da nicht mal Lust den hochnäsigen PHP-Bot in den Boden zu stampfen 😄

Leider wird das Projekt nicht mehr richtig weitergeführt 😦

Gruß

Levi

12.07.2011 - 17:22 Uhr

Wenn dies so ist, kennt ihr vielleicht Software die nach dem Prinzip Arbeitet die wir suchen?

Für meine Zwecke habe ich kürzlich 7zip entdeckt. Vorher habe ich ntbackup genutzt, dass wegen Probleme beim Erstellen der Schattenkopien rausgeflogen ist. Vielleicht reicht das für deine Zwecke auch. Als Grundlage habe ich diesen Blogeintrag genutzt.

In deinem Fall würde das allerdings bedeuten, dass du (wahrscheinlich) das Vollbackup auf den Clientmaschinen und am Server bereithalten musst. Ansonsten würde der Abgleich was gesichert werden muss viel zu lange dauern. Die inkrementellen "Päckchen" müsstest du dann aber relativ problemlos übertragen können.

Vielleicht einfach mal reinschauen. Ich war überrascht was 7zip so drauf hat.

12.07.2011 - 17:04 Uhr

Ich würde das JavaScript so schreiben, dass kein Fehler auftritt ...

Hm, dem schließ ich mich an 😁

Wenn du nicht weißt wo der Fehler steckt würde ich dir FireBug für Firefox empfehlen. Damit lässt sich das JavaScript debuggen.

12.07.2011 - 11:41 Uhr

Mein finaler Code sieht jetzt so aus. Das angehängte emf lässt sich aber weiterhin nicht sauber konvertieren. Offenbar hat das Bitmap in der Breiter immer genau einen Pixel zuviel (131 statt 130) und das sorgt dann wohl für die Darstellungsprobleme. Ich habe jetzt ein etwas größere Bild exportiert und dies lässt sich auch einfwandfrei konvertieren. Da ich letztendlich sowieso auf ein festes Format gehen muss, ist dies meine Lösung.


Image image = Image.FromFile(sourceFile, true);
Bitmap bitmap = new Bitmap(640, 480);
Graphics graphic = null;
MemoryStream stream = new MemoryStream();

bitmap.SetResolution(image.HorizontalResolution, image.VerticalResolution);
graphic = Graphics.FromImage(bitmap);
            
graphic.Clear(Color.White);
graphic.DrawImage(image, 0, 0);            
bitmap.Save(stream, ImageFormat.Bmp);

Totzdem Danke an euch 😃

11.07.2011 - 14:01 Uhr

Ich möchte eine EMF-Grafik in ein Bitmap umwandeln und komme damit nicht weiter. Prinzipiell funktioniert mein Code, das Ergebnis sieht aber sehr dürftig aus.

Hier mein Code:


Image image = Image.FromFile(@"d:\test.emf", true);
Bitmap bitmap = new Bitmap(image);
Graphics graphic = Graphics.FromImage(bitmap);
            
graphic.Clear(Color.White);
graphic.DrawImage(image, 0, 0, image.Width, image.Height);
            
bitmap.Save(@"d:\test.bmp", ImageFormat.Bmp);

Ich habe meine Ergebnisse angehängt:
**
test.emf**
Dies ist die Ausgangsdatei
**
test.bmp**
Das Ergebnis, das mein Code erzeugt.

**test1.bmp **
Das Ergebnis, dass ich bekomme, wenn ich einen C++-Konverter benutze. Bis auf das Detail, dass eine vertikale Line von rechts nach links "rutscht" ist dies das Ergebnis, dass ich erwarten würde und auch der Ausgangsdatei entspräche.

Kann mir jemand von euch weiterhelfen?

05.07.2011 - 12:43 Uhr

Du könntest deine Winform.exe minimized starten. Das geht mit der Eigenschaft "WindowStyle" an ProcessStartInfo.

Ungetestet:


ProcessStartInfo startInfo = new ProcessStartInfo("WinForm.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
         
Process.Start(startInfo)

Um später die Anwendung in den Vordergrund zu holen, kannst du die API-Funktion "FindWindow" nutzen. Damit bekommst du das handle des Fensters der Winform.exe. Mit dem handle kannst du dann "setForeGroundWindow" aufrufen.

siehe pinvoke:
FindWindow
SetForegroundWindow

Gruß

28.06.2011 - 09:20 Uhr

Hallo Freunde 🙂

kennt ihr eine Möglichkeit die Texthöhe einer Textbox zu ermitteln? Ich meine damit, wenn man z.B. ein Feld mit den Einstellungen "Tahoma, 8" erstellt wie hoch die Box mindestens sein muss, damit der Text gefasst werden kann.

In WinForm gibt es dafür GetTextExtentPoint32A. Ein WPF-Equivalent habe ich aber bisher noch nicht gefunden. 🤔

Gruß

Levi

09.06.2011 - 10:53 Uhr

Hi,

gibt es hier eigentlich Powerbuilder / Powerbuilder .NET-Entwickler?

Tschö mit ö

26.05.2011 - 10:34 Uhr

Hi,

gibt es irgendwelche gesammelten Werke, Wikis oder was auch immer zu Standards bei der Anwendungsbedienung? Man kuckt ja immer gerne ab aber das kann ja auch in die Hose gehen.

Was ich meine z.B.

  • Tabreiter lassen sich immer per Strg+W oder Alt+F4 schließen
  • Buttons die einen Dialog anfordern enden immer mit ...
  • Das Verlassen des Programms per Datei->Beenden wird nicht mehr genutzt (?) etc.

Tschö mit ö

18.05.2011 - 12:44 Uhr

Hm, das würde mich auch interessieren.

Grüße

10.05.2011 - 10:54 Uhr

verwendetes Datenbanksystem: MS SQL Server 2008 R2

Hi,

wir haben hier eine ziemlich mächtige Datenbank von ein paar Gigabyte und würden gerne ein SQL-Script darauf testen. In Sybase SQL Anywhere gab es mal eine Feature das nannte sich "dbwrite". Damit konnte man quasi eine Differenzdatei anlegen und alle Änderungen dort reinschreiben. Anschließend konnte man die Datei löschen und alles ist wieder beim Alten.

In MSS kenne ich nur "Sichern" und "Wiederherstellen". Für unseren Zweck ist das aber ungeeignet weil das wiederherstellen mal locker 45 Minuten dauern kann.

Gibt es eine andere Möglichkeit?

Gruß

Levi

05.05.2011 - 12:06 Uhr

verwendetes Datenbanksystem: SQL Server 2008 R2

Hi, ich habe hier einen ganzen Haufen von SQL-Server-Backups, auf die ich ein bestimmtes Auswertungs-SQL laufen lassen möchte (keine Angst, keine Sony-Kundendaten 😉). Die Ergebnisse sollen in einer Ergebnisdatenbank abgelegt werden. Die Backups sind nicht in einen Server eingespielt und sollen auch nicht alle gleichzeitig laufen.

Als im Prinzip "Datamining". Kennt jemand ein Tool, Technologie, Stichwort mit dem man sowas bewerkstelligen kann? Ich hatte mir mal sowas für SQL-Anywhere-Datenbanken gebaut. Die Auswertung soll dann immer malwieder laufen. Performance spielt daher keine große Rolle.

Gruß

Levion

04.05.2011 - 10:52 Uhr

Also ich bin der Meinung, dass du dein holeDaten() wohl manuell in einen eigenen Thread pusten musst. Soweit ich das erkenne laufen in WPF alle Methode immernoch im GUI-Thread. Wäre ja auch doof wenn nicht, da man ansonsten für jeden Zugriff auf die GUI diesen Handstand machen müsste.

Das kann man auch schön erkennen, wenn man z.B. einen Button mit einem langen Prozess auf die GUI legt, bleibt der Button eingedrückt bis die Aktion abgeschlossen ist.

Oder gibt es ab WPF eine hübschere Variante?

Gruß

Levi

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;

namespace WpfApplication1
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            new Thread(new ThreadStart(myProcess)).Start();
        }

        private void myProcess()
        {
             for (int i = 0; i < 1000000; i++)
             {
                setStatusText(i.ToString());
             }
        }

        private void setStatusText(string text)
        {
            if (!textBox1.Dispatcher.CheckAccess())
            {
                textBox1.Dispatcher.Invoke(new Action(delegate()
                {
                    textBox1.Text = text;
                }));

                return;
            }

            textBox1.Text = text;
        }
    }
}

13.04.2011 - 17:56 Uhr

Also an HierarchicalDataTemplate trau ich mich auch nicht so recht dran, aber vielleicht kann ich weiterhelfen. Es müsste gehen, wenn du dein Template für die Kommissions zu einem <DataTemplate> machst und dein Grid dort aufnimmst. Ich habe das mal nachgebaut und bei mir sieht das ganz gut aus.

<Window x:Class="TreeTest01.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <!-- <DataTemplate x:Key="ProduktTemplate">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Name}" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto" FontSize="16" FontWeight="Bold" />
                </StackPanel>
            </DataTemplate>

            <HierarchicalDataTemplate x:Key="KommissionsTemplate" ItemsSource="{Binding Product}" ItemTemplate="{StaticResource ResourceKey=ProduktTemplate}">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Bezeichnung}" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto" FontSize="16" FontWeight="Bold"  />
                    <DataGrid ItemsSource="{Binding Product}">
                    </DataGrid>
                </StackPanel>
                
                
            </HierarchicalDataTemplate> -->

            <DataTemplate x:Key="KommissionsTemplate">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Bezeichnung}" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto" FontSize="16" FontWeight="Bold"  />
                    <DataGrid ItemsSource="{Binding Product}">
                    </DataGrid>
                </StackPanel>
            </DataTemplate>

            <HierarchicalDataTemplate x:Key="KundenTemplate" ItemsSource="{Binding Kommission}" ItemTemplate="{StaticResource ResourceKey=KommissionsTemplate}">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Kunde}" VerticalAlignment="Top" HorizontalAlignment="Stretch" Height="auto" Width="auto" FontSize="16" FontWeight="Bold" />
                </StackPanel>
            </HierarchicalDataTemplate>  

        </Grid.Resources>
        
        <TreeView HorizontalAlignment="Stretch" Margin="12,12,12,12" Name="treeView1" VerticalAlignment="Stretch" ItemTemplate="{StaticResource ResourceKey=KundenTemplate}">
        </TreeView>
    </Grid>
</Window>

13.04.2011 - 16:26 Uhr

Hm, da hab ich schonmal was gemacht. Das schaut in etwa so aus (ich habs auch ergooglet 😉 ).


using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Forms;

[...]

		void button1_Click(object sender, RoutedEventArgs e)
		{
			WriteFile(@"D:\Temp\test01.jpg");
		}
		
		
		private void WriteFile(string path){
			byte[] data = null;
			
			data = GetJpgImage(Clock,1,100); // Clock müsste alles sein können, was UIElement implementiert
			
			FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
			
			foreach (byte digit in data ){
				stream.WriteByte(digit);
			}
			stream.Close();
		}
		
		
		public static byte[] GetJpgImage(UIElement source, double scale, int quality)
		{
		    double actualHeight = source.RenderSize.Height;
		    double actualWidth = source.RenderSize.Width;
		
		    double renderHeight = actualHeight * scale;
		    double renderWidth = actualWidth * scale;
		
		    RenderTargetBitmap renderTarget = new RenderTargetBitmap((int) renderWidth, (int) renderHeight, 96, 96, PixelFormats.Pbgra32);
		    VisualBrush sourceBrush = new VisualBrush(source);
		
		    DrawingVisual drawingVisual = new DrawingVisual();
		    DrawingContext drawingContext = drawingVisual.RenderOpen();
		
		    using (drawingContext)
		    {
		        drawingContext.PushTransform(new ScaleTransform(scale, scale));
		        drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));
		    }
		    renderTarget.Render(drawingVisual);
		
		    JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
		    jpgEncoder.QualityLevel = quality;
		    jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
		
		    Byte[] _imageArray;
		
		    using (MemoryStream outputStream = new MemoryStream())
		    {
		        jpgEncoder.Save(outputStream);
		        _imageArray = outputStream.ToArray();
		    }
		
		    return _imageArray;
		}
[...]

13.04.2011 - 16:20 Uhr

Sowas ähnliches haben wir auch im Einsatz. Ich habe mir zum registrieren der Komponente mal eine Batch geschrieben.


set dnf=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
set sdk=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin

;win7 64
set sdk=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

%dnf%\regasm Fnord.dll /regfile:Fnord.reg
"%sdk%\gacutil" /i "Fnord.dll"

Nachdem das durchgelaufen ist, müsstest du eine Fnord.reg haben. Die wird dann als Admin ausgeführt. Wenn du auf ein x64-System arbeitest musst du darauf achten, dass die Einträge nach Wow6432Nord verschoben werden müssen.

Vielleicht kommst du damit weiter.

11.04.2011 - 14:37 Uhr

Ich sehe das ein wenig anders. Virtualisierung an sich stellt keinen Mehrwert dar und erst recht bessert sich dadurch nicht die Performance.
Dann hast du den Sinn von Virtualisierung für ein Unternehmen nicht verstanden.

Ich finde der Sinn lässt sich an vielen Stellen in Frage stellen. Oft wird gesagt.

  • Flexibilität weil ich auf Systemen umziehen kann
  • Ressourcenverwaltung lässt sich dynamischer anpassen
  • Sicherung ist einfacher

In der Praxis habe ich aber beobachtet, dass die Admins dazu neigen für jeden popeligen Dienst eine eigene VM aufzusetzen. Anschließend verstopft man sich durch unausgereiftes Ressourcenmanagement das Wirtsystem, blockiert die Bandbreite weil alle VMs mit Updates versorgt werden müssen und und und ...

Virtualisierung kann an einigen stellen Sinn ergeben. Aber für einen Datenbankserver würde ich trotzdem immer ein dediziertes System bevorzugen.

08.04.2011 - 09:31 Uhr

Wir haben den Server momentan auf 6GB Arbeitsspeicher und bedienen damit ca. 50 Anwender. Das scheint aber zu knapp zu sein.

Unserer Anwendung stellt im wesentlich Datenerfassung und Datenauswertung bereit (Windows-Desktop-Client). Dazu kommen von Zeit zu Zeit größere Generierungsläufe, die schonmal ein paar Stunden dauern können.

Ohne jetzt zu sehr ins Detail gehen zu müssen, was würdet ihr an Arbeitsspeicher empfehlen? Welche Konzepte zur Optimierung kann man noch verfolgen?

Grüße

07.04.2011 - 11:02 Uhr

verwendetes Datenbanksystem: SQL Server 2008 R2

Hi,

ich würde gerne mal wissen, was ihr für Erfahrungen mit der Virtualisierung von Datenbankservern gemacht habt. Wir kämpfen nämlich ständig mit der Performance und unsere Kunden benutzten überwiegend VmWare um ihre Datenbankserver zu hosten. Ich habe den Verdacht, dass man damit die Performance ziemlich reinreißt.

Gruß

Levi

29.03.2011 - 15:18 Uhr

verwendetes Datenbanksystem: Windows 2008 R2 64bit

Hi,

kann ich mir irgendwie ausgeben lassen, welche Transaktion momentan welche Zeilen "lockt"? Ich habe ein Deadlock-Problem und komme nicht so wirklich weiter.

Gruß

dat Levi

08.03.2011 - 12:53 Uhr

Hi,

ist es möglich eine C++ Dll die ich in meinem .NET-Assembly nutze als Resource in das Assembly aufzunehmen? So wie ich z.B. ein Bild o.ä. aufnehme?

Gruß

Levi

28.02.2011 - 12:32 Uhr

Nur leider reden wir von einem reisen System mit hunderten von Stellen an denen auf Daten zugegriffen wird.

Hört sich nach einer vermurksten Architektur an, wo der DAL einfach mal bequemlichkeitshalber weggelassen wurde....

Du sprichts mir aus der Seele 😃

28.02.2011 - 10:29 Uhr

Ja, da ist was dran. Aber das Problem ist, dass ich nicht nur die Darstellung ändern möchte. Wenn man nämlich die Sicht auf die Daten verändert ohne dabei die Rundung zu berücksichtigen, dann kann es zu solchen Fällen kommen.

z.B.

Pos. 1: Betrag in DB: 0,245 Cent, sichtbar: 0,25 Cent
Pos. 2: Betrag in DB: 0,245 Cent, sichtbar: 0,25 Cent

Gesamt: Betrag in DB: 0,490 Cent, sichtbar: 0,49 Cent ( 0,25 + 0,25 sind aber 0,50 Cent! Kunde verwirrt 😉 )

Der sauberste Weg wäre natürlich überall in der Anwendung zu runden wo geschrieben und gelesen wird. Bzw. eine vernünftiges Zugriffsmodell zu erstellen, damit man hier so eine Art "Schicht" hat und die Konvertierungslogik dort programmieren kann. Das hätte sicherlich auch Vorteile wenn man z.B. an andere Währungen denkt usw.

Nur leider reden wir von einem reisen System mit hunderten von Stellen an denen auf Daten zugegriffen wird. Der Aufwand wäre jenseits von Gur und Böse 😦

Gruß

Levion

28.02.2011 - 09:34 Uhr

verwendetes Datenbanksystem: <SQL Server 2008 R2>

Hallo, unsere Anwendung hat einen riesen Haufen Tabellen in denen Dezimalwerte (Beträge) gespeichert sind. Jetzt möchte unser Kunde gerne die Anzahl der Dezimalstellen auf die gerundet/die angeziegt werden konfigurieren können.

Gibt es eine Lösung das zentral zu programmieren? Ich hatte mir schon überlegt, einen eigenen Datentyp dafür zu benutzen. Aber der kann ja eigentlich nur als Vorgabe für neue Spalten benutzt werden. Änderungen wirken sich ja nicht auf bestehende Daten aus.

Gruß

Levion

22.02.2011 - 14:14 Uhr

Machst du die Initialisierung des WCF-Service in deiner Main-Methode? Wenn ja, was passiert, wenn du stattdessen den OnStart-Event verwendest?

Gruß

Levion

22.02.2011 - 11:41 Uhr

Hm, bringt WCF Sessions mit um nicht mit jeder Methode Benutzername und Passwort übergeben zu müssen?

21.02.2011 - 23:03 Uhr

Hallo,

ich hätte da mal eine grundsätzliche Frage zu einer kleinen WCF + Silverlight-Anwendung die ich mir zusammengebastelt habe. Bei meiner Anwendung handelt es sich um eine einfache Shoutbox. Es werden Methoden zum Abrufen und Posten aufgerufen.

Wie kann ich am Besten sicherstellen, dass nur meine Silverlightanwendung den WCF-Service anspricht und nicht jede X-beliebige Anwendung in freier Wildbahn.

Gruß

Levion

14.02.2011 - 14:47 Uhr

Die Datenbanken liegen leider auf verschiedenen Servern und Netzwerken. Aber der Bulk-Insert-Tipp war gut. Hier meine Lösung mit bcp.


bcp <datenbank>.dbo.<tabelle> format nul -U sa -P pwd -N -f tabelle.fmt
bcp <datenbank>.dbo.<tabelle> out test.dat -f tabelle.fmt -U sa -P pwd
bcp <datenbank>.dbo.<tabelle> in test.dat -f tabelle.fmt -U sa -P pwd

Und SCHNELL ist das ganze auch noch 😄

Ich danke euch.

14.02.2011 - 11:35 Uhr

Hallo Ihr,

ich versuche gerade eine Tabelle von Datenbank A nach Datenbank B zu schaufeln. Ich hab mir per Tool (Powerbuilder) schonmal aus Datenbank A die Tabelle exportiert (INSERT-Statements). Wenn ich aber anschließend die Datei per sqlcmd in Datenbank B wieder einlese bekomme ich folgenden Fehler:

Meldung '701', Ebene '17', Status '123', Server '<meinServer>', Zeile 20350
'Es ist nicht genügend Systemarbeitsspeicher im Ressourcenpool 'default' vorhand
en, um diese Abfrage auszuführen.'

Gibt es einen anderen Weg die Daten (speicherschonender) einzulesen?

Grüße

12.01.2011 - 12:29 Uhr

Hi,

ich hab mal ne grunsätzliche Frage aus reinem Interesse. Mich würde mal interessieren wie intern eigentlich Timerklassen z.B. in C# funktionieren. Gibt es einen Bezug zur Systemuhr/zum Betriebsystem? Wird intern einfach ein Thread genutzt der permanent die Systemzeit abruft?

MfG

Levi

07.12.2010 - 09:24 Uhr

Anm.d.R. Der Autor dieses Beitrags entwickelt WPF seit ende 2008 und hat womöglich einfach nur gut reden 😄

Hehe, das wird's wohl sein. "Aller Anfang ist eben schwer" pling und 1 Euro ins Phrasenschweinchen 😉

06.12.2010 - 13:46 Uhr

Ich selber habe zu dem Zweck diese Dialoge in mein DialogService gewrappt, sdass ich in meiner WPF Applikation nicht entscheiden muss ob es Win32 oder Forms ist

Aha, das find ich ne gute Idee. Lässt sich dann später auch relativ einfach switchen wenn MS da nochwas nachliefert.

Wenn man so überlegt wie viel Custom Controls man in WPF noch braucht für die alltäglichen Sachen...

Also ich finde es weiterhin ziemlich mühsam unter WPF zu entwickeln. Ich entwickele beruflich weiterhin in Win32 und versuche WPF quasi nebenher in Angriff zu nehmen.

Gruß

Levion