ppedv Team Blog: Breadcrumb-Ansicht in SharePoint 2013

Um in SharePoint 2013 die vielen Menschen liebgewonnene Breadcrumb-Ansicht oder anders ausgedrückt Brotkrümel-Ansicht anzuzeigen, wird im folgenden Artikel die Vorgehensweise beschreiben.

Es empfiehlt sich den SharePoint Designer 2013, nachfolgend SDP 2013 genannt, hierfür zu benutzen.

Hinweis: Damit die Nachfolgenden Schritte funktionieren, ist es zuvor notwendig, die nachfolgenden als Screenshot aufgeführten Features, einzuschalten. Darüber hinaus muss auch eine entsprechende Website-Struktur erstellt worden sein (Untersites) und die Navigationseinstellungen bearbeitet worden sein (Unterwebsites anzeigen aktivieren)

1. Homepage aufrufen (Website der obersten Ebene), Features aktivieren

Einstellungen -> Websiteeinstellungen -> Websitesammlungsverwaltung -> Websitesammlungsfeatures -> SharePoint Server-Veröffentlichungsinfrastruktur

clip_image002

Einstellungen -> Websiteeinstellungen -> Websiteaktionen -> Websitefeatures verwalten -> SharePoint Server-Veröffentlichung

clip_image004

Hinweis: Das SharePoint Server-Veröffentlichung Feature muss auf jeder Unterwebsite aktiviert werden. Des Weiteren ist die Navigationsvererbung einzuschalten.

2. Nachdem die Verbindung im SPD 2013 hergestellt worden ist, wird im Navigationsbereich links unter Websiteobjekte der Punkt Gestaltungsvorlagen aufgerufen.

3. Standardmäßig wird die seattle.html Masterpage verwendet. Hier gilt es die seattle.html aufzurufen, nicht die seattle.master.

Nun sucht man im Code am besten mittels Tastenkombination Strg + F nach „ms-breadcrumb-box

clip_image006

4. Hier wird die Eigenschaft unter „Visible“ statt false auf „true“ gesetzt.

5. Danach wird in der Code-Ansicht nach der passenden Stelle gesucht, an der die folgenden zwei Code-Zeilen eingefügt werden:

<!--MS:<asp:sitemappath runat="server" sitemapproviders="SPSiteMapProvider,SPXmlContentMapProvider" rendercurrentnodeaslink="false" hideinteriorrootnodes="true">-->

<!--ME:</asp:sitemappath>-->

In meinem Beispiel habe ich die Breadcrumb-Ansicht unterhalb des Titels der jeweiligen Webseite eingefügt. Der Bildausschnitt zeigt, an welcher Stelle es vorgenommen werden muss.

clip_image009

Jetzt wird die Masterpage gespeichert und die Website aktualisiert. Das fertige Ergebnis sieht dann folgendermaßen aus:

clip_image012

Unterhalb des Titels wird als Pfad angezeigt, welche Unterwebsites geöffnet wurden.

codefest.at [MS]: Spannendes aus der Windows Phone Welt

Große Windows Phone Fans wissen wahrscheinlich schon, dass es seit einigen Monaten in Wien ein Windows Phone Developer After-Work gibt. Nach den erfolgreichen ersten beiden Veranstaltungen, kommt nun das nächste Event, das die Mopius und Tieto organisieren.

Diesmal wird das Mobile Developer After Work noch größer und spannender abgehalten. Diesmal warten soviele spannende Vorträge auf euch, dass ihr 3 Tracks zum Besuchen als Auswahl habt. Im ersten Track sind viele spannende Themen für Windows Phone beleuchtet. Im zweiten Track könnt ihr euch Nokia X ein bisschen näher anschauen. Der dritte Track ist ein Porting Camp, bei dem ihr bestehende Android Apps auf die Nokia X Platform portieren könnt.

Da sich diesmal die Teilnehmeranzahl stark erhöht hat, wird das Developer After-Work bei uns im Microsoft Office abgehalten. Dieses Event ist auch eine tolle Gelegenheit, sich mit anderen Mobile Developern auszutauschen und die neuesten Entwicklungen zu diskutieren.

Wenn ihr in der mobile app Entwicklung tätig seid und noch nie bei einem Windows Phone Developer After-Work dabei wart, ist das eine super Gelegenheit, die Community kennenzulernen. Einige Restplätze gibt es noch: schnell anmelden, lohnt sich!

Code-Inside Blog: Source Code veröffentlichen – aber bitte mit Lizenz

image.png

Seit es den Blog gibt wird auch meist der gesamte Demo Source Code mit veröffentlicht. Das Ganze hatte ich am Anfang noch als .zip verteilt, später lag es mal auf Google Code und nun liegen alle Samples und sonstige Sachen auf GitHub.

Beim letzten User Group Treffen in Zürich mit dem Titel “Open Source: Get Involved!” mit Adam Ralph wurde mir schlagartig bewusst, dass ich zwar meine Blogposts unter Creative Common gestellt hatte, aber dabei ganz die GitHub Repos vergessen hatte.

Dies hatte ich jetzt nachgeholt und wer Source Code veröffentlicht sollte sich 5 Minuten Zeit nehmen und mal auf der Seite ChooseALicense.com eine passende Lizenz zum jeweiligen Source Code packen – ansonsten ist das ganze rechtlich gesehen ein Minenfeld Winking smile

codefest.at [MS]: Entwickeln für Windows Phone 8.1

Gestern wurden die letzten Puzzlestücke freigegeben, um endlich Windows Phone 8.1 Apps bauen und veröffentlichen zu können.

Wir haben für euch diese hilfreiche Liste erstellt, damit ihr als Developer mit Windows Phone 8.1 richtig durchstarten könnt.

Tool

Um Windows Phone 8.1 Apps zu bauen, benötigt ihr Visual Studio 2013 Update 2 RC. Diese Visual Studio Update enthält unter anderem Untestützung für Windows Phone Silverlight Apps (8.0 und 8.1), Universal Apps (Windows Runtime, XAML) und Universal Apps mit HTML und JavaScript.

Device

Wenn ihr eure Windows Phone 8.1 Apps testen wollt, benötigt ihr klarerweise ein Windows Phone 8.1. Als Entwickler habt ihr nun die Möglichkeit, die Developer Preview für Windows 8.1 zu installieren. Ihr braucht dazu ein Developer Account oder eine Registrierung im Windows App Studio, installiert danach die App Preview for Developersauf euer Gerät, um beim Preview Programm mitzumachen und bekommt das Update dann normal über das Phone Update auf euer Gerät.

Store

Natürlich wollt ihr eure fertigen Apps auch gleich in den Store veröffentlichen. Seit gestern kann man im Windows Store auch Windows Phone Apps basierend auf der Windows Runtime im appx Format einreichen. Außerdem könnt ihr eure Windows Store und Windows Phone Apps miteinander verlinken.

HowTo

Nachdem ihr mit allem Nötigen gewappnet seid, könnt ihr gleich loslegen, die coolen Features von Windows Phone 8.1 in Apps einzubauen. Im Developer Center gibt es bereits eine neue Sektion , die ihr als Startpunkt verwenden könnt, um zu lernen, wie ihr neue Windows Phone Apps basierend auf der Windows Runtime schreibt.

Klaus Aschenbrenner: A ever-increasing Clustered Key value doesn’t scale!

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan, where you are getting week by week via email all the essential knowledge you need to know about performance tuning on SQL Server.)

You know all the best practices how to choose a Clustered Key value? A good Clustered Key value should have the following 3 properties:

  • Narrow
  • Static
  • Ever Increasing

Let’s have a more detailed look on all 3 properties, and why an ever increasing value doesn’t really scale in SQL Server.

Narrow

A Clustered Key value should be as small as possible. Why? Because it takes space, and the Clustered Key Value also serves a logical pointer in the leaf level in every Non-Clustered Index. If you have a very wide Clustered Key value, you also deal with larger Non-Clustered Indexes. If you have defined a Non-Unique Non-Clustered Index (which is normally the case), the Clustered Key value is also part of the navigation structure of your Non-Clustered Index. Therefore the overhead in your index gets very large. And our goal is to minimize overhead on our index pages. Overhead that we have to pay in the physical storage, and also in the Buffer Pool, where SQL Server caches the read index pages from storage.

Normally you choose a technical key value (like INT/BIGINT data type) instead of a natural key value. I have already seen over the years Clustered Key value lengths of 100 bytes and more (combinations of LastName, FirstName, SocialSecurityNumber, etc.). Believe me – you are just waisting memory! You don’t have to do that. Choose a technical key, and you are fine.

Static

Because the Clustered Key value is replicated in every Non-Clustered Index, your Clustered Key value should never ever change! Otherwise SQL Server has to maintain transparently in your UPDATE Execution Plan EVERY Non-Clustered Index that you have defined on your table. You are again just introducing additional computing overhead that you don’t need. Use your CPU cycles for more other important stuff. As you know, natural key values can change (like a LastName column, when you get married).

A technical key value (like an INT IDENTITY) can’t change (by default). Therefore the logical pointer (in the form of the Clustered Key value) in all your Non-Clustered Indexes remains stable - without any need to change them – forever!

Ever Increasing

And the 3rd final important property of a “good” Clustered Key value is that the chosen column should give you ever-increasing values. Why? Because you are always adding additional records at the end of your Clustered Index, and therefore you are avoiding expensive Page Splits (regarding CPU cycles, and Transaction Log overhead) and Index Fragmentation. In 99% of all cases you will be fine with an ever-increasing value like an INT IDENTITY column, but there are some scenarios, where this approach can lead to serious scalability problems. Imagine you have a workload, where a lot of different users are inserting permanently into the same table with an ever-increasing Clustered Key value. Just think a second about about Logging/Auditing tables.

Let’s have a more detailed look on what happens internally in SQL Server, when you reading and writing pages in memory. When SQL Server accesses certain memory structures (like pages that are stored in the Buffer Pool), these memory accesses must be synchronized among multiple threads. You can’t write concurrently to the same page in memory. When a thread writes to a page, some other thread can’t read the page at the same time. In traditional concurrent programming you solve that problem with Mutexes - like a Critical Section. Certain code paths are just mutually exclusive. A Latch in SQL Server is almost the same as a Critical Section. And latches are used to synchronize threads/queries among each other. Every time when you read a page, the worker thread has to acquire a Shared Latch (SH), every time when you write a page, the worker thread has to acquire an Exclusive Latch (EX). And both latches are incompatible to each other.

When you now perform an INSERT statement, the worker thread exclusively latches the page where the INSERT statement occurs. In the mean time no one else can read and write from/to this page. With an ever-increasing Clustered Key value this approach doesn’t really scale, because you are just inserting your records at the end of your Clustered Index. Therefore your parallel threads/queries are contending about an Exclusive Latch on the same last page in your Clustered Index. As a side-effect SQL Server executes your INSERT statement serially – one INSERT after the next one. You have hit the famous Last Page Insert Latch Contention. Let’s have a look at the following picture.

Last Page Insert Latch Contention

With the best practice of an ever-increasing Clustered Key value you have a single hotspot at the end of your Clustered Key. The smaller your records are, the more contention you are introducing here. How can you solve that problem? Easy: spread your INSERT statements across the whole B-Tree structure of the Clustered Index. There are various approaches how you can achieve that:

  • Use a random Clustered Key value (like a UNIQUEIDENTIFIER). But be aware of the side-effects: larger logical pointer in EVERY Non-Clustered Index, Page Splits…)
  • Implement Hash Partitioning, if you are using the Enterprise Edition of SQL Server.
  • Eliminate latching through the use of In-Memory OLTP, that is part of SQL Server 2014.
  • Use a so-called Reverse Index. Unfortunately SQL Server doesn’t provide you that kind of index out-of-the box, like Oracle. But you can implement it at your own

Summary

At 99% you will be fine with a narrow, static, and ever-increasing Clustered Key value like an INT IDENTITY data type. But in some rare scenarios where you need a huge amount of parallel INSERT statements (like Logging/Auditing tables), you can hit the Last Page Insert Latch Contention with that approach. If you hit that specific problem, you have to leave your comfort zone, and you have to make sure that you spread the INSERT statements across your whole B-Tree structure. You are mainly fighting against a limitation of how multi-threaded access happens in a traditional B-Tree structure.

I hope that I have given you with that blog posting a good insight, why ever-increasing Clustered Key values can hurt the scalability of your tables.

If you are more interested in how to choose the right Clustered Key Value, I’m also offering a 1-hour long training video through the SQLpassion Online Academy.

Thanks for reading!

-Klaus

ppedv Team Blog: TSQL - Der bessere Replace

Ab und zu sieht man den Wald vor lauter Bäumen nicht. Dieses Mal stand ich vor der Aufgabe aus einer Spalte bestimmte Werte zu ersetzen. Die Liste der zu ersetzenden Werte war doch etwas länger. Mit einem simplen Replace komme ich nicht besonders weit, da sich ja nur ein Wert ersetzen lässt.  Grübel grübel.. Doch es ist ganz simpel.

Das Prinzip:

Wir weisen einer Variablen einen per Replace bereinigten Wert zu.  Anschliessend wird auf das Ergebnis wiederum ein weiterer Replace angewendet (mit einem anderen zu ersetzenden Wert) und dann wiederum der Variable zugewiesen. Das machen wir solange bis wir alle zu ersetzenden Werte durch haben.  Das geht pfeilschnell.

Das ganze packen wir noch in eine Funktion und schon haben wir einen besseren Replace:

CREATE FUNCTION  dbo.BetterReplace (@str NVARCHAR(4000))
RETURNS nVARCHAR(4000) AS
BEGIN
    SET @str = REPLACE (@str,'>',' ')
    SET @str = REPLACE (@str,';',' ')
    SET @str = REPLACE (@str,'&',' ')
    SET @str = REPLACE (@str,':',' ')
    SET @str = REPLACE (@str,'<',' ')
    SET @str = REPLACE (@str,'/',' ')
    SET @str = REPLACE (@str,'\',' ')
    SET @str = REPLACE (@str,',',' ')
    SET @str = REPLACE (@str,'*',' ')
    SET @str = REPLACE (@str,'^',' ')
    SET @str = REPLACE (@str,'ü','ue')
    SET @str = REPLACE (@str,'ä','ae')
    SET @str = REPLACE (@str,'ö','oe')
    SET @str = REPLACE (@str,'"',' ')

  RETURN @str    
END

Zum Beispiel:

declare @str as varchar(100)
set @str='<Tel>+49\8677-98890'

select dbo.BetterReplace (@str)

Ergebnis:

Tel +49 8677-98890

Einfach und wirkungsvoll!

Sven Hubert: DevOps und Continuous Delivery: sich gemeinsam kontinuierlich verbessern

Softwareentwicklung ist Teamarbeit. Die sich immer mehr verbreitenden agilen Vorgehensmodelle sind das beste Beispiel dafür. Dabei wird beispielsweise ein Sprint bzw. eine Iteration gemeinsam geplant, sich täglich über den Fortschritt ausgetauscht und abschließend gemeinsam reflektiert. Am Ende des Sprints steht ein Softwareprodukt zur Verfügung, welches neue Features und Verbesserungen enthält und von den Kunden genutzt werden kann. Soweit die Theorie. Häufig ist die automatische Auslieferung neuer Softwareversionen mit dem Kopieren der Ergebnisse eines zentralen Server Builds auf ein Netzlaufwerk oder einen Webserver für Entwicklungsabteilungen beendet. Bis dahin ist diese Vorgehensweise als Continuous Integration in vielen Entwicklungsteams implementiert. Danach sind oft diverse manuelle Schritte notwendig, um anschließend die Qualitätssicherung durchführen zu können, welche die Codeänderungen mit manuellen und automatischen Tests auf unterschiedlichen Systemen und Umgebungen verifiziert.

Continuous Delivery erweitert Continuous Integration um diese bisher zu wenig beachteten Aktivitäten. Neben diesen vorwiegend technischen Aspekten wird die notwendige Kommunikation zwischen Entwicklungsabteilungen und IT-Administration bzw. Konfigurationsmanagement allzu oft vernachlässigt oder findet überhaupt nicht statt. Hierfür hat sich in den letzten Jahren unter dem Codenamen DevOps die gegenseitige Annäherung von Entwicklung und Betrieb etabliert, wodurch Continuous Delivery tatsächlich erst realisierbar wird.

Der Artikel im OBJEKTspektrum Online Themenspecial DevOps und Continuous Delivery arbeitet die wesentlichen Bestandteile von Continuous Delivery heraus, die damit einhergehende, notwendige Kooperation zwischen Entwicklung und Betrieb und gibt einen Überblick über die zur Realisierung notwendigen Schritte. Der Fokus liegt hierbei auf der konzeptionellen Ebene, technische Beispiele erfolgen unter Verwendung des Microsoft Team Foundation Servers.

Lesen Sie den kompletten Artikel hier.

DevOps und Continuous Delivery: sich gemeinsam kontinuierlich verbessern is a post from: AIT Blog

codefest.at [MS]: AppFlash 3/14

Wir haben wieder die neusten und interessantesten Apps für euch zusammengestellt. Es freut uns, euch heute viele Apps Made-in-Austria vorstellen zu dürfen, nämlich PULS 4, iTranslate, Music Maven und Poki.

windows-8-logo_thumb52

PULS 4 logo

PULS 4

Die brandneue PULS 4 Windows App bringt jetzt kostenlos, jederzeit und überall deine Lieblingssendung auf deinen Windows PC oder Tablet. Du hast deine Lieblingssendung von PULS 4 verpasst? Kein Problem! Ab jetzt kannst du deine gewünschte Sendung unabhängig vom aktuellen TV-Programm ansehen. Außerdem können aktuelle TV-Sendungen per Live-Stream mitverfolgt werden. Fußball-Fans aufgepasst: mit dem mobilen Live-Stream bleibst du immer am Ball und verpasst kein Tor der UEFA Champions League mehr.

 

iTranslate 

iTranslate ist ein wirklich gutes Übersetzungs-Tool, das dir dabei hilft, Sprachbarrieren zu überwinden. Durch iTranslate kannst du jede unterstützte Sprache in Sekundenschnelle übersetzen. iTranslate übersetzt Wörter, Phrasen und Texte in über 80 Sprachen. Ein witziges Feature ist, dass man auch zwischen unterschiedlichen Dialekten switchen kann und sich so z.B. die unterschiedliche spanische Aussprache von Spaniern und von Mexikanern anhören kann. iTranslate ist übrigens auch für Windows Phone verfügbar.

 

 

iTranslate

music maven logo 2

Music Maven

Music Maven ist ein eine lustige Musikrätsel-App, die von unserem Ex-DPE Intern Christian Vorhemus erstellt wurde. Bei Music Maven hörst du 130 bekannte Sounds und Musikstücke, deren Titel es zu erraten gilt.  Je mehr Level gelöst und freigeschaltet werden, desto mehr Punkte sammelt man, die gegen Hinweise eingetauscht werden können.

 

FIFA 14

Das Kult-Fußballspiel FIFA 14, das im letzten AppFlash bereits für Windows Phone vorgestellt wurde, ist inzwischen auch für Windows verfügbar.

FIFA 14
 
windows-phone-logo_thumb52
contre jour
QR-Intersport_thumb2

Contre Jour

Contre Jour ist definitiv ein einzigartiges und wahrscheinlich auch das originellste Windows Phone Spiel. Es ist im Windows Phone Store für 2,99 € erhältlich. Es stellt eine Mischung aus Spiel und interaktiver Kunst dar. Mit deinem Finger kannst du die Landschaft verwandeln, in der sich ein kleines geheimnisvolles Wesen bewegt. Tippe, ziehe und streiche auf diverse Vorrichtungen, um die niedliche Kreatur in Sicherheit zu bringen. Das besondere an Contre Jour ist die verzaubernde und originelle Musik, die dich während des Spielens begleitet und ganz konkret auf den Spielverlauf abgestimmt ist. Dank der intuitiven Steuerung kannst du die Welt um dich herum verändern – probier’s selbst mal aus und verlier dich in der Welt von Contre Jour. Ich selbst bin schon süchtig danach…


 

 
 

Poki

Poki ist eine der wenigen richtig tollen Apps, die nur für Windows Phone verfügbar sind. Bei dieser App handelt es sich um einen Pocket Client für Windows Phone mit einem einzigartigen Leseerlebnis. Der aus OÖ stammende Entwickler Tobias Klika konnte mit seiner App Premiere Poki bereits international Erfolge feiern. Seine App ist bereits in 164 Ländern verfügbar und wurde sogar beim heurigen Mobile World Congress in Barcelona präsentiert. Poki verfügt über einen Offline-Modus mit detaillierter Speicherübersicht, sodass du stets Artikel lesen kannst, auch wenn du keinen Internet-Zugang hast. Die Leseansicht lässt sich frei gestalten. Die Artikel können auch vorgelesen werden und die Lese- und Hörposition wird automatisch gespeichert. Artikel können nach Titel, URL oder Tags durchsucht werden. Poki ist ein Client für den Dienst Pocket. Immer wenn du auf einen interessanten Artikel, ein Video oder eine Website triffst, musst du dir nicht mehr umständlich einen Link senden, sondern legst ihn einfach bequem in Poket ab. Die App kostet 1,99 €, ist aber definitiv die Investition wert!

 

 

poki logo
QR - poki 








tap the frog logo
QR - tap the frog

Tap The Frog

Endlich gibt es dieses Spiel nun auch für Windows Phone! Das Spiel macht absolut süchtig und man kann gar nicht mehr die Finger vom Smartphone Screen lassen. Tap The Frog besteht aus einer Reihe von Mini-Games – in der Free-Version sind drei Spiele enthalten, in der kostenpflichtigen Version sind es elf. Mein absoluter Favorit ist das Spiel “Knall den Frosch”, das leider nur in der kostenpflichtigen Version verfügbar ist, der Mega-Spielspaß ist aber auf jeden Fall den kleinen Preis von 0,99 € wert. Die Versuchung bei diesem Min-Game ist einfach zu groß und man will sich stets selbst bzw. den Highscore von Freunden schlagen. Bei diesem Klassiker geht es darum, so viele Frösche wie möglich platzen zu lassen. Bei den drei Mini-Games, die in der Gratis-Version enthalten sind, hüpft man mit dem süßen Frosch auf Seerosen und versucht nicht ins Wasser zu fallen, man färbt Frösche um, sodass sie die gleiche Farbe haben oder man lässt den Frosch fliegen und bringt dabei Seifenblasen zum Platzen.

Hoffentlich waren wieder ein paar interessante Tipps für euch dabei. Viel Spaß beim Ausprobieren!

ppedv Team Blog: Open Source: Plötzlich spielt es eine Rolle

Vor rund zwei Jahren habe ich hier im Blog eine Diskussion losgetreten. Völlig frustriert von der miesen Qualität diverser Bibliotheken und fehlender Dokumentation habe ich Dampf abgelassen. Die Aussage: “Es ist mir scheißegal, ob Open Source oder nicht.”

Im Bezug auf die aktuellen Geschehnisse um OPENSSL und den #heartbleed Bug muss ich meine Meinung revidieren. Es ist plötzlich wichtig #OPENSOURCEFREE auf das Produkt-Paket gedruckt zu bekommen. Um es klar zu sagen, dies war kein Einzelfall:

  • Heartbleed, unentdeckt für ca 2 Jahre, schlimmster Sicherheitsunfall in der Geschichte des Internets
  • GnuTLS blieb 10 Jahre unentdeckt
  • Eine fehlende Codezeile im Random Number Bug über 2 Jahre
  • TCP-32764 Backdoor, dessen Urheber bis heute unklar ist

Damit gilt das oft zitierte Statement als widerlegt. In der Wissenschaft reicht ein Negativbeweis. Die Diskussion über Open Source als Sicherheitsrisiko, speziell im Unternehmenseinsatz, ist über 10 Jahre alt, wird aber von den Verfechtern negiert.

"Weil aber Open Source die Offenlegung des Quellcodes bedeutet, können Anwendungen von allen Nutzern ständig weiterentwickelt werden. Auch Fehler lassen sich so meist schneller beheben."

"Der Vorteil von Open Source: Schadsoftware, Bugs oder Sicherheitslücken können in der Regel schneller entdeckt werden. Es reicht allein der Verdacht, und Tausende von EntwicklerInnen nehmen den betreffenden Code ganz genau unter die Lupe", sagt Grote. Die größere Gefahr bestehe vielmehr in den unfreien Komponenten, etwa proprietären Modemtreibern oder Firmware, die meist von den Herstellern kommen und deren Sicherheit niemand überprüfen kann."

Nun stehen zwei Konzepte gegenüber: Open Source und Closed Source. Warum ich glaube, dass Closed Source die bessere Wahl sein kann:

Kosten

Es wird argumentiert, dass bei Open Source die Lizenzkosten wegfallen. Das Beispiel der Stadt München hat bewiesen, dass man mit mehr finanziellem Aufwand ein qualitativ weniger hochwertiges Ergebnis erreichen kann - bei höherem zeitlichem Aufwand. Open Source kann nur seriös eingesetzt werden, wenn das Know-how und die Ressourcen vorhanden sind, den Code zu pflegen. Niemals kann man sich darauf verlassen, dass jemand für immer und gratis seine Bibliothek weiter pflegt oder das jemand ganz automatisch mit Freude und völlig unentgeltlich diesen Job übernimmt. Persönlich schmerzlich erfahren mit dotnetopenauth.

Sicherheit

Ganz generell gesprochen gibt es keinen schlüssigen Zusammenhang zwischen Sicherheit und Open Source. Ein Vier-Augen-Prinzip erhöht die Sicherheit in jedem Softwareprojekt, allerdings ist es auch ein Leichtes, in ein Open Source-Projekt Programmierer einzuschleusen, die andere Ziele verfolgen. Dabei hat sich gezeigt, dass die Entdeckung von Sicherheitslücken über Parsing Tools  und nicht per Code-Analyse erfolgte.

Verantwortung

Der letzte Punkt ist mir erst in den letzten Tagen so richtig klar geworden. Niemand übernimmt die Verantwortung. Gerade in einem Land wie Deutschland, in dem sich jeder gegen jedwede Risken versichert, in dem unglaublicher Aufwand getrieben wird den kleinsten Parksünder dingfest zu machen, kann es sich eigentlich niemand leisten, nicht zu wissen, wer eigentlich Schuld trägt.

Das ist sowohl rechtlich in Fragen der Gewährleistung als auch gesellschaftlich ein unhaltbarer Zustand.

Stellen Sie sich mal vor eine Airline würde Metallteile verbauen, die sie auf der Straße findet.  Dann hätten wir nicht nur eine MH370, sondern jeden Tag zehn. Verantwortungslos.

Fazit

Open Source wurde immer durch Gebrauch des englischen Begriffs "free" mit gratis verwechselt. Nachdem dieser Irrtum erwiesen ist und die erheblichen Risiken nicht mehr zu leugnen sind, müsste man folgerichtig ein EU-Verbot fordern. Oder zumindest abschreckende Warnaufdrucke, ähnlich der Zigarettenschachteln. Die werden auch nicht weniger schädlich, wenn man das billige Kraut raucht.

PS: Auch Microsoft hatte seine Sicherheitsgaus - bis vor etwa 10 Jahren (SQLSlammer), danach nicht mehr.

Jürgen Gutsch: LINQify the SimpleObjectStore

in den letzten Wochen habe ich weiter am SimpleObjectStore geschraubt. Mir ging es in der Zeit vor allem Darum die API zu vereinfachen und direkter Nutzbar zu machen. So habe ich mir ausnahmsweise mal das Entity Framework zum Vorbild genommen und analog zum DbSet das IObjectStore<T> LINQifiziert ;)

Wie das?

Eigentlich recht einfach. Der SimpleObjectStore basiert auf eine im Arbeitsspeicher gehaltene Liste. Diese ist die Grundlage für alle Operationen die mit dem ObjectStore möglich sind. Ich habe also Das Interface IObjectStore<T> um das Interface IEnumerable<t> erweitert. Der Enumerator ist der aus der zugrundeliegenden Liste. Dadurch ist der ObjectStore etwas einfacher nutzbar.

Mehrere Objekte selektieren:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var actual = store.Where(x => x.Length > 50);
}

Hinzufügen eines einzelnen Objektes (AddOrUpdateRange() um mehrere Objekte hinzuzufügen):

using (var context = ObjectStore.GetInstance<InsertEntity>())
{
    context.AddOrUpdate(new MyEntity
    {
        Id = 11,
        Length = 11,
        Name = "Name11",
        Price = 11
    });
}<span style="font-size:10pt;">
 

Einzelnes Objekt selektieren:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var actual = store.First(x => x.Id == 3);
}

Existierende Objekte abfragen:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var result = store.Any(x => x.Name.StartsWith("Name"));
}

Spezielle Objekte löschen:

using (var context = ObjectStore.GetInstance<MyEntity>())
{
    context.Remove(x => x.Id <= 5);
}

Alle Objekte löschen:

using (var context = ObjectStore.GetInstance<MyEntity>())
{
    context.Clear();
}

LINQ Aggregat-Funktionen nutzen:

using (var store = ObjectStore.GetInstance<MyEntity>())
{
    var result = store.Sum(x => x.Price);
}

Was somit wegfällt ist der Aufruf von LoadAll() um erst Mal an die Liste der Daten zu kommen. Es kann nun also auch direkt über den Instanz eines konkreten IObjectStore<T> iteriert werden.

Dahinter steckt jetzt allerdings keine besondere Magie oder komplexe Logik, wie man vielleicht vermuten könnte, sondern der Zugriff auf die Interne Liste ist nun direkt über den Enumerator möglich, den ich nach Außen freigebe. Es geht hier also nicht um einen LINQ-Provider, wie er beim EntityFramework oder bei NHibernate existiert.

Dank Laurin Stoll (der mit mir zusammen beim einem Kunden einen Workshop zum Thema ASP.NET MVC und Entity Framework gemacht hat) habe ich einen sehr guten Einblick in die Aktuelle API des Entity Framework bekommen und konnte das Prinzip hier stellenweise umsetzen.

Was für einen Sinn hat das?

Der SimpleObjectStore ist keine vollwertige Datenbank und soll es auch nicht sein. Ziel dieses Tools ist es schnell Tests, Demos, Mockups und Click-Dummies aufzubauen, ohne sich um die Details der Persistierung kümmern zu müssen. Auch wäre es möglich UI-Driven zu entwickeln einfache Persistierungen umzusetzen. (HINWEIS: Für den Poduktiveinsatz unter Stress und in Multithreading-, bzw. Multiuser-Umgebungen wird dieses Werkzeug nur bedingt funktionieren)

Der Umstieg zu einer produktiv nutzbaren Persistierung sollte so unkompliziert wie möglich sein, ohne zu viel umstellen zu müssen. Die Direkte Nutzung von LINQ sollte das nun vereinfachen

Was wird noch kommen?

IEntity soll verschwinden. Ich möchte einfache POCOs verwenden können, statt die Implementierung von IEntity vorzuschreiben. in früheren Versionen war das eine einfache Möglichkeit um an den Identifier zu kommen. Schon jetzt kann aber Entweder das Identifier-Attribut verwendet werden oder ToString wird genutzt um Entitäten zu vergleichen. Eine zusätzliche Id-Konvention wäre ebenfalls denkbar.

Die aktuellen Änderungen sind im SourceCode Repository auf BitBucket zu finden, allerdings noch nicht per NuGet verteilt.

Jürgen Gutsch: Event Sourced Applications

Immer mehr bin ich davon überzeugt, dass überall dort wo in einer Applikation eine eindeutige Domäne ausgemacht werden kann, ein Event Source die richtige Datenhaltung ist.

Das mag für kleine Anwendungen etwas übertrieben sein, aber sobald diese kleine Anwendung wächst kann der Aufwand für diese Anpassung schnell unverhältnismäßig wachsen. Aktuell sitze ich auch an einem Projekt, das am Anfang recht einfach ausgesehen hat. Mit der Zeit, sind aber neue Anforderungen an der Kerndomäne hinzugekommen. Das Resultat sind unter anderem Sonderbehandlungen innerhalb dieser Domäne und die Komplexität der Software steigt annähernd exponentiell. Das ist unschön für den Entwickler der die neuen Anforderungen implementiert und für den der den Code warten muss.

Ein noch kommendes Reporting und Export der Daten muss nun ebenfalls auf diese Sonderbehandlungen reagieren. Die Komplexität habe ich also nicht nur bei der Erfassung der Daten, sondern auch beim Lesen der Daten.

Einfacher ist es die Daten in einem Event Stream abzulegen und gleich mehrere zusätzliche Features geschenkt bekommen:

  • Historie / Reporting
  • Logging / Protokollierung
  • Erweiterbarkeit / Evolvierbarkeit (auch auf die Datengrundlage)
  • Modularität
  • Stabilität

Event Source

Gemeint ist eine Art von Datenbank, in welcher die Aktionen auf ein Domainobjekt abgelegt werden. Das Domänenobjekt kann z. B. eine Kunde in einem CRM System sein. Jede Änderung einer Eigenschaft dieses Kunden wird nun persistiert: Die Änderung des Nachnamens, des Vornamens, der Adresse, etc. wird separat erfasst und abgelegt. Üblicherweise wird dabei für jedes Event die ID des Domänenobjekts (Kunden), die Reihenfolge der Events und das Erstelldatum des Events abgelegt, zuzüglich der geänderten Werte des Kunden.

Diese über die ID zusammenhängenden Änderungen, werden Event Stream genannt, das zugehörige Domänenobjekt ist das sog. Aggregate. Das Aggregate ist die Summe der zugehörigen Events. Soll heißen: Alle geladenen Events des Aggregates beschreiben dessen Zustand. Lade ich nur Events des Kunden bis vor zwei Wochen, habe ich den Zustand des Kunden von vor zwei Wochen (Historie).

Daraus ergeben sich die oben aufgelisteten Vorteile:

Historie

Alle Aktionen auf dem Zentralen Objekt werden als Events (und nur als Events) in der DB abgelegt, dadurch erhält man eine komplette Historie über alle vergangenen Aktionen. Das heißt auch, wir sind in der vergangene Zustände wiederherzustellen. Wir können sagen, wie die der Zustand eines Objektes vor zwei Wochen war. Dabei ist die Art des Objektes völlig irrelevant. Sei es ein Vertrag, ein Kunde, ein Werkstück, ein Dokument, was auch immer.

Logging

Wir sind in der Lage, nicht nur die Änderungen, sondern auch die Änderer und die Zeitpunkte der Änderungen mit anzugeben. Wir können also sehen, wer was zu welchem Zeitpunkt geändert hat. Praktisch die totale Überwachung auf Daten-Ebene.

Erweiterbarkeit

Dem Event Stream ist es egal, welche Events abgelegt werden. Kommen neue Anforderungen hinzu, so müssen nur neue Events definiert werden, die einfach zusätzlich in diesen Stream abgelegt werden. Das ist alles. Existieren die Events in der Vergangenheit nicht, sind sie für die Vergangenheit auch nicht relevant. Die Daten sind somit Modularisiert.

Modularität

Die Applikation wird bei neuen Anforderungen mit neuen Events ausgerüstet. Um auf diese Events zu reagieren, werden neue EventHandler angehängt. Es gibt weniger festen Abhängigkeiten in der Software. Auf eine Eventbasierte Datengrundlage kann auch einfach Eventbasiert Entwickelt werden.

Die Modularität geht noch einen Schritt weiter: Es können nicht nur neue Applikationsanforderungen über EventHandler implementiert werden, es können auch neue Datenextrakte – für Reportings, etc. – über EventHandler hinzugefügt werden. Ein Handler der auf Änderungen einer Kundenadresse reagiert, könnte die Daten über das Umzugsverhalten eines Kunden zu Statistikzwecken extrahieren.

Stabilität

Der EventStream sollte in einem stabilen System persistiert werden. Ist das gewährleistet ist auch für Datensicherheit gesorgt. Es gehen keine historischen Informationen verloren, da keine Events gelöscht werden, sondern immer nur neue hinzukommen. Daraus können Informationen für Statistiken, etc. immer wieder neu generiert werden.

Datenmigrationen bei einem Softwareupdate werden fast überflüssig gemacht. Auf veraltete Events muss nicht mehr reagiert werden. Neue Events beeinflussen alte Applikationen nicht. Nur auf die Struktur vorhandener Events muss ggf. geachtet werden. Je nachdem wie diese allerdings persistiert werden. kann auch das egal sein.

Und was ist mit CQRS?

Oftmals wird Event Source im Zusammenhang mit CQRS genannt. Es macht in vielen Fällen Sinn, dort wo das CQRS-Pattern genutzt wird, auch über Event Source nachzudenken. Umgekehrt macht es Sinn, dort wo die Event Source genutzt wird auch über CQRS nachzudenken. Da das Selektieren von Daten aus dem Event Stream recht aufwendig ist, sollte CQRS tatsächlich in Betracht gezogen werden. Also per EventHandler die Daten aus dem Events abzufangen und in eine separate, leseoptimierte Datenbank abzulegen. Also Quasi die aktuellen Zustände des Aggregates separat denormalisiert abzulegen und zu aktualisieren. Dadurch optimiert man die Lesezeit enorm.

Allerdings ist das kein Muss. Beide Patterns arbeiten hervorragend zusammen, müssen aber nicht zwingend in einen Zusammen eingesetzt werden.

Was meint Ihr?

Alexander Schmidt: Windows 8.1 Problemchen gelöst und einige nette Highlights

Nachdem ich mein Entwicklungssystem auf Windows 8.1 hochgezogen habe, nervten mich sogleich 2 Dinge. Ich habe jeweils eine Lösung gefunden möchte dies keinem codingfreaks-Leser vorenthalten. Zum Schluss zeige ich interessierten Lesern noch ein paar meiner Win 8.1 Update 1 Highlights. Problem Nummer 1: Windows Version unten rechts Ich habe zwar bereits ein ziemlich neues Motherboard […]

ppedv Team Blog: Das April-Update für Windows 8.1 und Server 2012 R2

Zeitgleich mit dem Ende vom Support für Windows XP (und dem damit verbundenen letzten Patchday für eben dieses) veröffentlichte Microsoft am 8. April 2014 ein erstes größeres Update für Windows 8.1 und Windows Server 2012 R2:

http://support.microsoft.com/kb/2919355

Entgegen den Erwartungen bringt dieses Patch das "alte" Startmenü nicht zurück (dies soll mit einem weiteren Update vermutlich im Herbst nachgeliefert werden), hat aber dennoch einige Verbesserungen an Bord. Diese zielen vor allem darauf ab, die Bedienung mit Tastatur und Maus zu verbessern. Dazu gehören u.a. folgende Veränderungen:

  • Das System unterscheidet bei einigen Aktionen, ob diese mit der Maus oder dem Touchscreen ausgelöst wurden
  • Fährt man mit der Maus in einer geöffneten Modern UI App an den oberen Bildschirmrand, erscheint eine Box zum Minimieren und Schließen, so wie man es aus klassischen Fenster-Anwendungen kennt
  • Am unteren Bildschirmrand wird die Taskleiste eingeblendet
  • Ein Rechtsklick auf eine Kachel liefert diverse häufig genutzte Optionen
  • Verknüpfungen zu Modern UI Apps können auf der Taskleiste abgelegt werden
  • Auf der Startseite gibt es jetzt einen eigenen Button für den Shutdown, zusätzlich einen für die Suche

Neben diesen Änderungen werden eine ganze Reihe bekannter Probleme behoben. Welche genau kann man im TechNet KB Artikel nachlesen:

http://support.microsoft.com/kb/2919355/en-us

Das Update ist knapp 890MB groß und wird u.a. über Windows Update verteilt.

Code-Inside Blog: Fix: Cannot convert from ‘CConnectProxy::_ComMapClass *’ to ‘AddInDesignerObjects::IDTExtensibility2 *’

Mal einen etwas esoterischer Blogpost, welcher auftaucht wenn man zu viel mit Office Addins rumspielt. Der Fehler passiert beim Bauen von C++ Projekten, welchen diesen Typ benötigen.

Lösung (auf 64bit Systemen):

C:\Program Files (x86)\Common Files\DESIGNER>regsvr32 MSADDNDR.DLL

And Rebuild.

Meine lieben Kollegen hatte mir dies schon mehrfach gesagt, allerdings hatte ich es immer wieder vergessen :) Das Problem samt Lösung wird auch hier gezeigt.

codefest.at [MS]: Hands on Oculus Rift

Vor Kurzem wurde Oculus VR von Facebook um geschätzte 2 Milliarden US Dollar gekauft. Wir können nur hoffen, dass dies die Einführung ihres Vorzeigeproduktes, des Oculus Rift nicht verzögert oder gar behindert. Virtual Reality ist eines der großen Themen im IT und Gamingbereich, und daher möchten wir euch das Oculus Rift Development Kit vorstellen!

Das Development Kit kann für 350$ direkt bei Oculus VR bestellt werden. In der neuesten Version sollen OLED-Displays bereits für die nötig hohe Auflösung sorgen, wir mussten uns leider noch mit der älteren Version begnügen.

Das Development Kit selbst wird in einem hübschen und praktischen Koffer geliefert, der dafür sorgt, dass das Gerät auch auf Reisen unkompliziert mitgenommen werden kann. Enthalten ist die eigentliche Brille mit Kabelverbindung zum Mikrocontroller sowie ein Strom-, USB- und HDMI-Kabel für die Verbindung mit dem Computer. Fast schon ein wenig zu viel Kabelsalat für unseren Geschmack.

Das Rift ist fix per Kabel am Mikrocontroller befestigt

Die Installation ist in wenigen Schritten getan, Windows erkennt das Gerät bereits automatisch, komplizierte Einrichtung sowie Treibersuche bleiben einem erspart. Die Software für die Kalibration sowie offizielle Demoapplikationen sind unter https://developer.oculusvr.com (Registrierung notwendig) zum Download verfügbar. Wir empfehlen gleich vor dem ersten Start zusätzlich das RiftCoaster-Demo unter http://www.oculusriftenabled.com/RiftCoaster.html zu beziehen – in unseren Augen das beste Demo um sich selbst von den Qualitäten der Virtual Reality Brille zu überzeugen.

Brille auf, Demo starten und schon sitzt man mitten in einer Achterbahn, welche in einer mittelalterlichen Umgebung hochgezogen wird. Bereits hier macht sich erstes Gänsehaut-Feeling bemerkbar. Die 3D-Effekte, gepaart mit glaubhaftem Head-Tracking (welches komplette Rundumsicht in alle Richtungen erlaubt), überlisten sofort den Körper und es könnte einem richtig schlecht werden – was wir in dieser Hinsicht aber als Erfolg werten. Manch einer schloss sogar instinktiv die Augen in dem Moment, in dem sich der Achterbahnwaggon mit hoher Geschwindigkeit in Richtung Boden bewegt. Wir hätten stundenlang weiter dieselbe Runde fahren können, dazu ist es aber natürlich nicht gekommen, da bereits eine Menschenschlange hinter uns stand und das Ding sofort ausprobieren wollte.

Begeisterter Oculus Rift Tester

Nachdem wir einen halben Tag damit verbracht hatten, schwindelige und verwirrte Achterbahnfahrer aus dem Raum zu begleiten, nahmen wir das Gerät am Abend mit nach Hause, um uns die Integration in Games sowie Unity3D anzusehen.

Spielen selbst ist gar nicht so einfach, noch kaum ein Spiel unterstützt die Technologie aktiv. Bei vielen ist die Installation von Zusatzplugins von Nöten, uneingeschränkt können wir nur Half-Life 2 (VALVE) über Steam empfehlen. Hierfür muss man nur in den STEAM-Spieleigenschaften die Option „Beta-Tools“ aktivieren und sofort taucht ein neuer Hauptmenüpunkt auf um die Brille im Spiel zu aktivieren. Das Spiel läuft problemlos und sehr glaubhaft, hier möchte ich das Zielen mit der Maus unabhängig vom Head-Tracking positiv erwähnen. Auch wenn das Spiel und damit auch die Grafik bereits in die Jahre gekommen ist fiel uns vor Schreck mehrmals die Maus aus den Händen.

Und nun muss ich nach langem Honig-ums-Rift schmieren auch mit ersten Kritikpunkten kommen: Natürlich sieht man nichts mehr von seiner Umwelt und muss die Brille jedes mal Abnehmen um die Maus wieder zu finden. Ebenso erzeugt das längere Spielen leichte Kopfschmerzen (manche Testpersonen hielten keine Minute durch) und der Nacken sollte für exzessive Nutzung gut trainiert sein. Weiters ist zu hoffen, dass das finale Produkt kabellos funktioniert; fast hätten wir durch die Rundumsicht unsere Tastatur in Saft getränkt.

Doch nun zum nächsten wichtigen Punkt: Wie einfach ist es das Device in eigene Unit3D-Projekte zu integrieren? Unity3D kann unter https://unity3d.com/unity/download heruntergeladen werden, erlaubt Gameentwicklung mit C# auf hohem Niveau und punktet vor allem mit seinen multiplen Exportmöglichkeiten – ein Unity3D Projekt lässt sich für fast jede Plattform kompilieren – von Windows bis Linux, von Windows Phone bis IOs, von Xbox 360 bis Playstation. Einige dieser Features jedoch sind Besitzern der Pro-Version vorbehalten (PC-Betriebssysteme jedoch sind in der Free-Edition enthalten).

Unity beinhaltet außerdem den Code-Editor „MonoDevelop“ zum Bearbeiten der C# Scripts. Funktioniert an sich gut für kleine Übungen, wer jedoch Visual Studio gewohnt ist wird ob des geringen Funktionsumfangs etwas irritiert und enttäuscht sein. Glücklicherweise ist es kein Problem Unity3D in Kombination mit Visual Studio zu betreiben. Hierfür muss nur der Default-Code Editor in den Unity-Einstellungen auf Visual Studio geändert werden. Ab sofort wird beim Öffnen der Skripte Visual Studio als gewohnt komplexe Programmierumgebung gestartet. Details hierfür findet ihr unter: http://docs.unity3d.com/Documentation/Manual/VisualStudioIntegration.html.

Leider konnten wir Oculus Rift nicht ohne weiters in unser Unity-Projekt integrieren – nicht weil es kompliziert wäre sondern weil Unity das Feature unlängst aus der Free-Version entfernt und ausschließlich für die (1500 Euros teure) Pro-Variante zur Verfügung gestellt hat. Ein Fehler wie wir meinen, immerhin wird hierbei eine Vielzahl an nicht-kommerziellen Entwicklern aus dem Prozess ausgeschlossen. Laut Unity liegt dies vor allem an der Tatsache, dass um Rendern für Oculus Rift ein Pro-only PlugIn notwendig ist. Wir können einstweilen nur hoffen dass bereits ein kluger Kopf ein vergleichbares PlugIn für die Free-Edition entwickelt.

Fazit:

3D Applikationen für eine Reihe von Endgeräten zu entwickeln ging noch kaum so einfach wie mit Unity3D – und die perfekte Integration von Visual Studio ermöglicht dabei auch noch jenen Programmierkomfort den wir gewohnt sind. Das Oculus Rift ist ein cooles Device und wie wir meinen absolutes Muss für jeden Gaming-Freak. Um es jedoch mit unseren selbst-programmierten Demos verwenden zu können müssen wir jedoch noch ein wenig warten – sobald neue Möglichkeiten auftauchen das Device in die Free-Edition einzubinden werdet Ihr es auf CODEFEST.AT erfahren!

Norbert Eder: GNOME einfach erweitern

Seit nun längerer Zeit verwende ich Fedora mit GNOME. Ich freunde mich immer besser damit an. Man versucht sich eben aus unterschiedlichen Welten das Beste zu holen. Auch habe ich so eine gute (und sinnvolle) Nutzung für mein älteres Laptop gefunden, welches nun quasi als "Standrechner" fungiert. Im Laufe der Zeit fallen dann jedoch Problemstellen auf, die verbessert werden könnten, oder die gar etwas nervig sind und man beginnt sich auf zu Suche nach Lösungen zu begeben. Eine könnte in den GNOME Extensions liegen ...

codefest.at [MS]: Das Smartphone Orchester–Nachlese zum Microsoft Day Vortrag

DeviceShot130412156693884330

Am Microsoft Day 2014 hatten die Teilnehmer die Möglichkeit, live unsere musikalischen Talente mit unserer NFC Orchestra App zu bewundern. Für alle, die nicht dabei sein konnten, gibt es diese Nachlese. Die Slides und das Recording der Session werden hier in den kommenden Tagen gepostet (Dieser Post wird dann aktualisiert).

In unserer Session “Das Smartphone Orchester – Lautstarker NFC Einsatz am Windows Phone” haben Andreas Jakl, der Entwickler der NDEF Library für Windows Phone, und ich euch gezeigt, wie ihr NFC Features in eure Apps einbauen könnt, und somit ermöglichen könnt, dass eure Apps mit der “echten” Welt interagieren können.

Die Demo-App, anhand der wir euch dies demonstriert haben, ist eine NFC Orchester-App, die bei Berührung von vorher vorbereiteten NFC Tags Instrumente bzw gesprochenen Text abspielt. So ist es möglich, die Tags auf den Tisch zu legen und mit dem Phone “DJ zu spielen”, um Musik abzuspielen.

Die Features, die wir euch in C# mit der NFC Library gezeigt haben, waren:

  • NFC Tags lesen
  • NFC Tags schreiben
  • Spracherkennung und –synthese
  • Peer-to-peer Kommunikation über NFC

Zu jedem Feature habt ihr auch Anwendungsgebiete aus dem Unternehmensumfeld erhalten, damit ihr seht, dass sich mit NFC auch sehr pragmatische Szenarien realisieren lassen.

Als besondere Weltpremiere haben wir euch gezeigt, wie ihr einen Viral Marketing Mechanismus in eurer App einbaut, damit die Benutzer motiviert sind, eure App ihren Freunden und Bekannten weiterzuempfehlen. Dazu haben wir ein Instrument gesperrt und ermöglichen dessen Entsperrung nur über NFC Peer-to-Peer Kommunikation. Wer also alle Instrumente haben will, benötigt eine zweite Person, die diese App installiert hat, damit beide das Instrument entsperren können.

Ihr könnt die App für Windows Phone 8 ab sofort aus dem Store herunterladen. Um die App verwenden zu können, benötigt ihr vorher aber 4 wiederbeschreibbare, formatierte NFC Tags. Hier könnt ihr zum Beispiel welche bestellen. Für die ersten Experimente mit NFC empfiehlt sich ein NFC Starter Pack - im Checkout-Prozess dann einfach Windows Phone angeben, damit die Tags bereits korrekt formatiert sind! Die Tags müsst ihr vorher noch mit den Instrumentinfos beschreiben. Dazu geht ihr in die Setup-Page in der App, klickt auf den “Schreib-Button” eines Instruments und berührt den NFC Tag mit dem Handy, um den Content auf den Tag zu schreiben. Sobald ihr die Tags beschrieben habt, könnt ihr die Instrumente abspielen.

Natürlich ist auch der Source Code der NFC Orchestra App auf CodePlex verfügbar. Die NDEF Library ist auch auf CodePlex und kann über NuGet ins eigene Projekt eingebaut werden. Im Übrigen gibt es zum Microsoft Day ein großes Update der NDEF Library, das viele neue Use-Cases mit NFC ermöglicht, zum Beispiel das Lesen und Schreiben von Visitenkarten, Kalender-Einträgen oder auch Bildern über NFC Tags. Am besten gleich die dazugehörige Demo-App mitsamt Source Code ausprobieren.

Have Fun Tapping!

codefest.at [MS]: Visual Studio Tipps und Tricks MSDay2014

MSDN Vorteile und Hilfestellung beim Anfordern des Zugangs

Visual Studio 2013 Allgemeines

Visual Studio 2013 Web Developers

Team Foundation Server Allgemeines

Debugging

.NET Reference Source

Die wichtigsten Shortcuts aus dem Vortrag

CTRL+Q Suchbox
CTRL+0,C Teamexplorer Connect
CTRL+0,H Teamexplorer Home
CTRL+0,M Teamexplorer My Work
CTRL+0,P Teamexplorer Pending Changes
CTRL+ü Solütion Explorer
CTRL+ä Team Äxplorer
CTRL+M,O Collapse to definition
CTRL+M,M Collapse/Expand
ALT+CURSOR UP/DOWN Move Lines/Selection up and down
CTRL+K, CTRL+B Code Snippet Manager
CTRL+K, CTRL+X Insert Codesnippet
CTRL+M, CTRL+H Create temporary collapsable region
CTRL+M, CTRL+U Remove temporary collapsable region
CTRL+W,T ShowTasks window
CTRL+SHIFT+V Cycle through Clipboard History
ALT + F12 Peek Goto Definition
CTRL+, Navigate To
CTRL + - Navigate back (Browser back)
CTRL + SHIFT + - Navigate forward (Browser forward)
CTRL + ENTER Insert line above current line
CTRL + E, D Format Document
CTRL + E, C Comment
CTRL + E, U Uncomment
ALT+SHIFT+CURSOR Rectangular Selection
CTRL + ´ Jump to closing/opening bracket
CTRL+SHIFT+´ Select region between brackets including
CTRL+SHIFT+ö Show callstack on codemap
CTLR+ö Add item to codemap
CTRL+K, CTRL+G Page Inspector

Have fun!

Andreas Pollak
Product Marketing Manager Visual Studio (Entwicklungs- und Testwerkzeuge)
clip_image001

Leader im Magic Quadrant für ALM

Klaus Aschenbrenner: Improving Query Performance by using correct Search Arguments

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan, where you are getting week by week via email all the essential knowledge you need to know about performance tuning on SQL Server.)

In today’s blog posting I want to talk about a very specific performance problem related to indexing in SQL Server.

The Problem

Imagine the following simple query, which you have already seen hundreds of times in your SQL Server life:

-- Results in an Index Scan
SELECT * FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) = 2005 AND MONTH(OrderDate) = 7
GO

With that simple query, we request sales information for a specific month in a specific year. Not very complicated. Unfortunately that query doesn’t perform very well – even with a Non-Clustered Index on the column OrderDate. When you look at the execution plan, you can see that the Query Optimizer has chosen the Non-Clustered Index that is defined on the column OrderDate, but unfortunately SQL Server performs a complete Scan of the index, instead of performing an efficient Seek operation.

Non Clustered Index Scan

This isn’t really a limitation of SQL Server, this is the way how relational databases are working and thinking :-) . As soon as you are applying an expression (function calls, calculations) on an indexed column (a so-called Search Argument), the database engine HAS TO SCAN that index, instead of performing a seek operation.

The Solution

To get a scalable seek operation in the execution plan, you have to rewrite your query in a way to avoid the call of the function DATEPART:

-- Results in an Index Seek
SELECT * FROM Sales.SalesOrderHeader
WHERE OrderDate >= '20050701' AND OrderDate < '20050801'
GO

As you can see from the rewritten query, the query returns the same result, but we have just eliminated the function call of DATEPART. When you look at the execution plan, you can see that SQL Server performs a seek operation – in that specific case it is a so-called Partial Range Scan: SQL Server seeks to the first value, and scan until he hits the last value of the requested range. If you have to call functions in the context of indexed columns, you should always make sure that these function calls are performed on the right hand side of your column in the query. Let’s have a look at a concrete example. The following query casts the indexed column CreditCardID to the data type CHAR(4):

-- Results in an Index Scan
SELECT * FROM Sales.SalesOrderHeader
WHERE CAST(CreditCardID AS CHAR(4)) = '1347'
GO

When you have a more detailed look on the execution, you can see that SQL Server scans again the whole Non-Clustered Index. Not really scalable if your table gets larger and larger. If you are performing that conversation on the right hand side of your indexed column in the query, you can again eliminate the function call on the indexed column, and SQL Server is able to perform a seek operation:

-- Results in an Index Seek
SELECT * FROM Sales.SalesOrderHeader
WHERE CreditCardID = CAST('1347' AS INT)
GO

Another nice example where you can run into the same problems is the use of the CASE expression in SQL Server. Let’s have a look at the following query, where the column PersonType is indexed through a Non-Clustered Index:

-- Results in an Index Scan
SELECT
	CASE PersonType
		WHEN 'IN' THEN 1
		WHEN 'EM' THEN 2
		WHEN 'SP' THEN 3
		WHEN 'SC' THEN 4
		WHEN 'VC' THEN 5
		WHEN 'GC' THEN 6
	END AS ConvertedPersonType
FROM Person.Person
GO

You are calling here again a function on an indexed column, in our case the CASE expression. You can’t directly see that function call in the T-SQL query, but internally it’s nothing more than a function call. You are getting again a Scan of the Non-Clustered Index instead of a Seek operation. How can you avoid that problem? You can rewrite the query to get rid of the CASE expression. One example is a join against a Common Table Expression, which stores the needed lookup values. Let’s have a look on the rewritten query:

-- Results in an Index Seek
WITH LookupCTE AS
(
	SELECT * FROM
	(
		VALUES
			(N'IN', 1),
			(N'EM', 2),
			(N'SP', 3),
			(N'SC', 4),
			(N'VC', 5),
			(N'GC', 6)
	) tbl (PersonType, Value)
)
SELECT cte.Value FROM Person.Person p
INNER JOIN LookupCTE cte ON cte.PersonType = p.PersonType
GO

With that approach, SQL Server is able to perform a seek operation on the indexed column PersonType.

Summary

As you have seen in this blog posting, it is very important that you are NOT calling any function directly or indirectly on your indexed columns. Otherwise SQL Server has to scan your index, instead of performing an efficient seek operation. And scans will never ever scale, when your table gets more and more rows.

Please feel free to leave a comment, if you want to share other good examples where you have encountered this specific behavior.

Thanks for reading!

-Klaus

ppedv Team Blog: Data Annotations Webforms und Bootstrap ausgereizt

Auf dem Weg zum Lazy Web Developer habe ich dieses Mal den Data Annotations auf den Zahn gefühlt. In Silverlight war das richtig geiler Scheiss.

Man kann einer Klasse per Property-Attributen Regeln mitgeben. Diese werden Data Annotations genannt. Die Regeln können sich auf Darstellung, Reihenfolge oder Gültigkeit eines Propertys beziehen.

   1:  Public Class daten1
   2:      <Key()>
   3:      Property id As Integer
   4:      <Required(ErrorMessage:="brauche Daten")>
   5:      <EmailAddress(ErrorMessage:="brauche email")>
   6:      Property email As String
   7:      <Required(ErrorMessage:="musse haben")>
   8:      Property name As String
   9:  End Class

In der richtigen Umgebung werden diese Klassenattribute ausgewertet.

ASP.NET nutzt die Klassenattribute über Dynamic Data. Eingebettet in ein Datensteuerelement wertet das DynamicEntity-Steuerelement das gebundene Objekt (Itemtype) aus.

   1:      <link href="../Content/bootstrap.css" rel="stylesheet" />
   2:      <script src="../Scripts/jquery-2.0.3.js"></script>
   3:      <script src="../Scripts/bootstrap.js"></script>
   4:  </head>
   5:  <body>
   6:      <form id="form1" runat="server">
   7:      <div>
   8:          <asp:FormView ID="FormView1" DataKeyNames="id" 
ItemType="daten1"
   9:               runat="server" DefaultMode="Insert">
  10:              <InsertItemTemplate>
  11:                  <asp:DynamicEntity runat="server" ID="eins" 
Mode="Insert"/>
  12:                  <asp:Button runat="server" CommandName="Insert" 
Text="insert" class="btn btn-default"/>
  13:              </InsertItemTemplate>
  14:          </asp:FormView>
  15:      </div>
  16:      </form>
  17:  </body>

 

Die Magie geschieht im Verzeichnis Dynamic Data. Je nach Mode (hier insert), wird das Template aus EntityTemplate geladen.

image

Dieses Template wurde von mir leicht angepasst, um den Bootstrap 3 Formular-Regularien zu folgen.

   1:  <asp:EntityTemplate runat="server" ID="EntityTemplate1">
   2:      <ItemTemplate>
   3:          <div class="form-group">
   4:              <asp:Label ID="Label1" runat="server" OnInit="Label_Init"
   5:                  OnPreRender="Label_PreRender" 
CssClass="col-sm-2 control-label" />
   6:              <div class="controls">
   7:                  <asp:DynamicControl runat="server" ID="DynamicControl"
   8:                      Mode="Edit" OnInit="DynamicControl_Init" />
   9:              </div>
  10:          </div>
  11:      </ItemTemplate>
  12:  </asp:EntityTemplate>

 

Das DynamicControl-Element wird dann passend zum Datentypen durch ein Template aus dem Verzeichnis FieldTemplate ersetzt. In diesem Beispiel Integer_Edit, Text_Edit und EMailAddress_Edit.

Folgendes deklarative ASP.NET Code-Beispiel zeigt das Text-Template. Wichtig ist Display Dynamic einzustellen, um den Platz in der Darstellung nicht zu verbrauchen, wenn keine Fehlermeldung angezeigt wird. Außerdem verwendet Bootstrap für sein error HTML Template die CSS-Klasse help-block. Ergebnis ist roter Text.

   1:  <asp:TextBox ID="TextBox1" runat="server" Text='<%# FieldValueEditString %>'
   2:       CssClass="form-control"></asp:TextBox>
   3:   
   4:  <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" 
CssClass="help-block" ControlToValidate="TextBox1" Display="Dynamic" Enabled="false" />
   5:  <asp:RegularExpressionValidator runat="server" ID="RegularExpressionValidator1" 
CssClass="help-block" ControlToValidate="TextBox1" Display="Dynamic" Enabled="false" />
   6:  <asp:DynamicValidator runat="server" ID="DynamicValidator1" 
CssClass="help-block" ControlToValidate="TextBox1" Display="Dynamic" />
   7:   

Die ASP.NET Validation Controls haben allerdings ein Feature, das hier stört. Diese können mit einem Stern die Fehlerposition  und den beschreibenden Fehlertext in einem ValidationSummary Control anzeigen. Wir wollen aber den Fehlertext direkt unterhalb der Eingabe sehen.

Folgender übler Trick ersetzt per VB.NET Code im Page Load Event des ASCX Files den Stern und damit wird der volle Text gezeigt:

   1:  RegularExpressionValidator1.Text = ""
   2:  RequiredFieldValidator1.Text = ""
   3:  DynamicValidator1.Text = ""

Dann füge ich noch eine JavaScript-Datei hinzu, die CSS-Attribute austauscht für has-errors wenn die Eingabe nicht valid ist. Dies ist in einem anderen Blog-Artikel beschrieben.

   1:  var proxied = window.ValidatorValidate;
   2:   
   3:  window.ValidatorValidate = function () {
   4:   
   5:      var result = proxied.apply(this, arguments);
   6:      onAfter(arguments);
   7:   
   8:  };
   9:   
  10:  var onAfter = function (arguments) {
  11:      var control = document.getElementById(arguments[0].controltovalidate);
  12:      var validators = control.Validators;
  13:      var isValid = true;
  14:   
  15:      for (var i = 0; i < validators.length; i++) {
  16:          if (!validators[i].isvalid) {
  17:              isValid = false;
  18:              break;
  19:          }
  20:      }
  21:   
  22:      if (isValid) {
  23:          $(control).closest('.form-group').removeClass('has-error');
  24:      } else {
  25:          $(control).closest('.form-group').addClass('has-error');
  26:      }
  27:  };

Bei einem Submit des Formulars sieht das im Internet Explorer  so aus:

image

Sehr cool, was die ASP.NET Steuerelemente zusammen mit Bootstrap hier so zaubern. Allerdings sind sie einen Hauch zu intelligent. Es werden nämlich auch korrekt die neuen HTML5 Input-Typen gerendert (Type=”number” und Type=”email”). Moderne Browser validieren dann auch gleich mal selber was im IE bei falscher E-Mail-Adresse so aussieht:

image

Zuerst erscheint ein browserspezifisches Popup und wenn man das Feld per TAB verlässt, wird es rot eingerahmt.

Da wir uns hier in den Händen des Browsers befinden, sieht das dann Chrome auch deutlich anders. Die fehlerhafte Eingabe wird gar nicht mehr hervorgehoben und die Nummer wird von einem Updown Icon begleitet.

image

In den Bootstrap-Foren wurde das Thema auch diskutiert und dann geschlossen. Theoretisch wäre auch das Required-Attribut ein HTML5-Standard, hier erzeugt ASP.NET aber stattdessen ein DIV. Optisch besser aber nicht konsistent. Bei meiner Recherche habe ich ein Plugin gefunden, habe aber ein wenig Probleme für das Framework, das für die Unzulänglichkeiten von CSS erfunden wurde, ein Plugin zu verwenden, das die Unzulänglichkeiten des Frameworks fixed. Im ersten Test gibt es einen Konflikt mit meiner eigenen JS Library. Selbst wenn ich das fixe, kann schon morgen mit dem nächsten Nuget-Update wieder alles hin sein.

Holger Schwichtenberg: Zusammenfassung von Microsofts BUILD-Konferenz 2014

Die BUILD-Konferenz brachte Neuigkeiten zu Windows 8.x, Windows Phone, Windows Azure sowie .NET, C# und Visual Studio.

codefest.at [MS]: Windows Phone 8.1–Ein Feuerwerk an Neuerungen

Letzte Woche wurde auf der Build Windows Phone 8.1 vorgestellt und dadurch auch jede Menge Neuerungen die mit dem neuen Windows Phone verbunden sind.

Wir haben daher kurzfristig unseren Vortrag am Microsoft Day zu Windows Phone im Unternehmen umgeändert, und stellen in der Session stattdessen Windows Phone 8.1 vor. Ihr könnt in der Session einige der neuen Lumia Geräte sehen. Außerdem zeigen wir euch, wie Windows Phone 8.1 aussieht und welche Verbesserungen es in der User Experience für Endanwender gibt.

Natürlich werfen wir auch ein Licht auf die vielen Features, die als Unterstützung für Unternehmen eingebaut wurden, damit Windows Phone optimal als Firmengerät eingesetzt werden kann. Wir schauen uns hier Beispiele vom gesamten Mobile Device Management an.

Nicht zu vergessen sind die unzähligen Neuerungen im Bereich von Windows Phone Entwicklung. Wir zeigen euch, welche Möglichkeiten dem Developer nun zur Verfügung stehen, wie man Windows Phone Apps schreiben kann und was es mit One Windows auf sich hat.

Die Session ist bepackt mit so vielen neuen Dingen, dass man nur von einem Feuerwerk sprechen kann. Lass Dir die Österreich-Vorstellung von Windows Phone 8.1 nicht entgehen!

Titel: Windows Phone – Ein Feuerwerk an Neuerungen
Wann: 8. April 2014, 11.30 Uhr
Wo: Forum – Hofburg. Wien

Norbert Eder: Technic Lego neu definiert

Mit Lego und einem Raspberry PI können sehr coole Projekte umgesetzt werden. Hier ein kleines Video von den Grazer Linuxtagen, welches ein ebensolches Projekt zeigt.

ppedv Team Blog: Form-Validierung für Bootstrap

Es gibt verdammt viele Möglichkeiten, um Benutzereingaben zu validieren. Im Webumfeld werden es sogar mehr statt weniger. Hinzu kommen Anforderungen an das Design. Client oder Server? Ganz schön viel für einen kleinen Blogartikel, der sich um ASP.NET-Formulare in Verbindung mit Bootstrap 3 kümmert.

Bootstrap ist ein Framework für einfacheres Webdesign. Responsive Design fast ohne CSS anzufassen. Microsoft setzt in Visual Studio 2013 und seinem One ASP.NET Template auf die aktuelle Version Bootstrap 3. Ist also schon drin. Ideal also für eine schnelle Validierung am Client.

Das HTML Template setzt sich aus geschachtelten DIV zusammen und vor allem dem Attribut has-error. In der  Version 2 lautete das noch control-group und error.

   1:   <div class="form-group has-error">
   2:          <label class="control-label" for="text1">Feldbeschreibung
</label>
   3:          <div class="controls">
   4:              <input type="text" class="form-control" id="text1">
   5:              <span class="help-block">Fehlermeldung</span>
   6:          </div>
   7:  </div>

und sieht dann so aus. Der Fehler ist sozusagen hart verdrahtet.

image

Nun stellt sich sowohl für den ASP.NET MVC und auch den Webforms Frontend Designer die Frage, wie man die Validation Controls bzw. HTML Validation Helper dazu bewegt da mitzuspielen. Das Problem liegt vor allem darin, dass die Fehlermeldung einen übergeordneten Node im HTML Dom verändern muss. Aus Programmierersicht ist es ohnehin verpönt, Elemente (oder Objekte) in Abhängigkeit zu stellen.

Die Alternative, komplett neue Steuerelemente zu entwickeln, erscheint wenig verlockend.

Betrachten wir die Eingabevalidierung mit ASP.NET Web Forms unter Anwendung der vorigen Bootstrap HTML Vorlage. Es soll geprüft werden, ob die Eingabe eine gültige E-Mail-Adresse ist. Visual Studio schlägt in den Control-Eigenschaften die passende Regular Expression vor.

   1:  <div class="form-group" id="test1">
   2:          <asp:Label ID="Label2" runat="server" Text="Beschriftung"
   3:           CssClass="col-sm-2 control-label" />
   4:          <div class="controls">
   5:              <asp:TextBox ID="TextBox1" runat="server" 
CssClass="form-control">
   6:  </asp:TextBox>
   7:              <asp:RegularExpressionValidator 
ID="RegularExpressionValidator1" runat="server"
   8:                  SetFocusOnError="true"
   9:                  ErrorMessage="RegularExpressionValidator" 
ControlToValidate="TextBox1"
  10:  ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
  11:  </asp:RegularExpressionValidator>
  12:          </div>
  13: </div>    

Als nächstes kommt JavaScript und JQuery Magic zum Einsatz. Mein großes Problem war herauszufinden, wo man während der Validierung einhaken kann. Das Validator Control blendet dynamisch ohne Postback die Fehlermeldung ein bzw. aus - dank moderner unobtrusive Validation von ASP.NET Webforms auch mit JQuery Validierung. Im HTML Code wird ein SPAN Element erzeugt. Data-Attribute werden für die Validierung verwendet.

   1:   <input name="ctl00$Inhalt$TextBox1" type="text" 
id="Inhalt_TextBox1"
   2:  class="form-control" />
   3:   
   4:  <span data-val-controltovalidate="Inhalt_TextBox1" 
data-val-focusOnError="t"
   5:  data-val-errormessage="RegularExpressionValidator" 
   6:  id="Inhalt_RegularExpressionValidator1" data-val="true" 
   7:  data-val-evaluationfunction="RegularExpressionValidator
EvaluateIsValid"
   8:  data-val-validationexpression="\w+([-+.&#39;]\w+)*@\w+
([-.]\w+)*\.\w+([-.]\w+)*"
style="visibility:hidden;">
RegularExpressionValidator</span>
   9:          </div>

Bleibt die Frage, wie man aus dem SPAN da, oder nicht da, auf ein übergeordnetes DIV kommt. Ginge, aber ich habe ein Event gefunden, das schon seit Ewigkeiten in der Library existiert, ValidatorValidate.

Diese Methode wird dann überschrieben, wie man das aus OOP so kennt, um seine eigene Logik (onAfter) hinten dran einzufügen. Dann wird die CSS Klasse has-error zugewiesen, wenn ein Fehler auftritt.

   1:  <script>
   2:   var proxied = window.ValidatorValidate;
   3:         window.ValidatorValidate = function () {
   4:          var result = proxied.apply(this, arguments);
   5:          onAfter(arguments);
   6:         };
   8:         var control = document.getElementById(arguments[0].
controltovalidate);
   9:         var validators = control.Validators;
   7:         var onAfter = function (arguments) {
  10:         var isValid = true;
  11:         for (var i = 0; i < validators.length; i++) {
  12:                  if (!validators[i].isvalid) {
  13:                      isValid = false;
  14:                      break;
  15:                  }
  16:              }
  17:             if (isValid) {
  18:                  $(control).closest('.form-group').
removeClass('has-error');
  19:              } else {
  20:                  $(control).closest('.form-group').
addClass('has-error');
  21:              }
  22:          };
  23:  </script>

 

Um ehrlich zu sein, bin ich mir nicht sicher, was ich mir im Detail damit einhandle. Falls es unter den Lesern welche gibt die dazu Feedback haben, per mail an hannesp at ppedv.de oder Facebook.com/preishuber.

Jedenfalls ist der Aufwand nun überschaubar. Einfach als JS-Datei ausgelagert und am besten in der Masterpage included.

Code-Inside Blog: Gegen das Gesetz verstoßen: X Jahre Haft. Gegen die Terms of Use verstoßen: Bann auf Lebenszeit. Danke Google & co.

Bei fast allen Diensten die man im Internet nutzen kann muss man den “Terms of use” zustimmen. Völlig logisch dass da natürlich drin steht was erlaubt und was nicht. Wenn man gegen diese Regelungen verstößt hat das Unternehmen natürlich das Recht etwas dagegen zu unternehmen. In der heutigen Welt beherrschen einige wenige Unternehmen die digitale Identität. Das ist einerseits enorm praktisch, auf der anderen Seite enorm beängstigend – in vielen Bereichen. Verstößt man nun gegen diese Regelungen kann es sein das Google & co. sich dazu entschliesst den Account zu sperren bzw. zu beschneiden. Das Ganze gilt natürlich auf Lebenszeit. Wenn mit diesem Account jetzt aber auch geschäftliche Sachen abgewickelt werden kann diese Sperre plötzlich auch im “echten” Leben fatale Folgen haben.

Banned for lifetime – Android & Google Wallet

Ich bin letzte Woche auf einen Artikel von einem Android Entwickler gestoßen. Um die Geschichte kurz zu machen: Er hatte diverse “YouTube Channels” in Apps verwandelt, damit seine Kinder diese einfacher finden können – das ganze soweit er sagt auch kostenlos. Nachdem er 10 dieser Apps gemacht hatte und Google 3 von diesen Apps aus dem Store nahm wurde sein Android Developer Account gesperrt und zugleich auch sein Google Wallet Konto. Einspruch nützte natürlich auch nichts.

Google Adsense – “Account disabled”

Die Geschichte hat mich daran erinnert das Google mich auch auf Lebenszeit vom Google Adsense Program ausgeschlossen hat. Kein Witz, Grund: “Invalid Click Activity”. Ich will nicht bestreiten dass ich mal auf die Werbung geklickt hatte die ich auf meinen Blog angezeigt war, allerdings würde ich den “Schaden” jetzt im Cent bis Euro Bereich sehen. Naja, gegen die Richtlinie verstoßen und ausgeschlossen, Shit Happens. Das Ganze ist nun schon mindestens 4 Jahre her und so dachte ich, dass Google mir inzwischen verzeiht:

Hello,
Thanks for the additional information provided in your appeal, we 
appreciate your continued interest in the AdSense program. After thoroughly 
reviewing your account data and taking your feedback into consideration, 
our specialists have confirmed that we’re unable to reinstate your AdSense 
account.

Nope. Einspruch natürlich sinnlos. Beide Beispiele beziehen sich jetzt auf Google Dienste, aber vermutlich gibt es auch ähnliche Fälle bei Microsoft, Apple usw.

Mir persönlich ist das Google Adsense Programm aktuell ohnehin egal, aber ich kann mir vorstellen dass solche Aktionen nicht gerade zur Vertrauensbildung beitragen.

ppedv Team Blog: Build-Ankündigungen für Microsoft Azure

Auf der Build-Konferenz, die in dieser Woche in San Francisco stattfand, gab es einige neue Meldungen, natürlich auch zum Thema Microsoft Azure, wie sich die Cloud-Lösung seit dieser Woche nennt.

  • Neues Portal

Seit Donnerstag Abend steht unter https://portal.azure.com/ das neue Portal für Microsoft Azure als Preview zur Verfügung. Dieses neue Portal verknüpft dabei Microsoft Azure und Visual Studio Online. Es soll im Laufe der Zeit um weitere Tools von Microsoft und deren Partnern erweitert werden und auch auf die Wünsche der Kunden angepasst werden.

  • Neue Basiskategorie für Web Sites

Die neue Einsteigerkategorie für Web Sites (Basic) bietet Unterstützung für small, medium und large Virtual Machines. Gegenüber der Standardedition liegen die Preise um 33 % niedriger. Die folgende Grafik zeigt einen Vergleich der verschiedenen Angebote:

Wie Sie aus der Grafik auch erkennen können, wurden die Standardinstanzen auch verbessert. So können Kunden ohne weitere Kosten fünf SNI (Server Name Indication) und ein IP SSL Zertifikat hochladen und nutzen. Automatische Skalierung auf bis zu 10 virtuellen Instanzen und tägliche Backups runden das Angebot ab.

  • Basic Tier auch für Compute Instanzen

Auch im Bereich Cloud-Dienste wird neben der Standardversion eine Basicversion angekündigt, die um 26,67% günstiger sein wird, jedoch kein Loadbalancing und automatische Skalierung unterstützt. Diese Instanzen sind vor allem als Testserver und während der Entwicklung geeignet.

  • Azure Active Directory Premium

Azure Active Directory Premium ist ab sofort generell verfügbar. Alle Kunden, die diesen Service in der Preview genutzt haben, können sich bis zum 1. Juli 2014 entscheiden, ob sie den Dienst bezahlen wollen oder danach das normale Azure Active Directory kostenlos nutzen wollen. Die Premiumversion unterstützt Synchronisation mit dem lokalen Active Directory, Single Sign On und Multifactor Authentifizierung.

  • Scheduler-Dienst verfügbar

Auch ein Scheduler-Dienst ist ab sofort verfügbar. Mit dem Scheduler können Sie Jobs in der Cloud erstellen, die zuverlässig Dienste inner- und ausserhalb der Cloud aufrufen können.

  • Autoskalierung

Applikationen können jetzt so konfiguriert werden, dass sie automatisch auf Basis der aktuellen Nutzung hoch oder auch runterskalieren. Autoskalierung ist möglich für Virtuelle Maschinen, Cloud-Dienste, Web Sites und Mobile Services.

  • weitere verfügbare Dienste

Des Weiteren wurden folgende Dienste generell verfügbar gestellt:

- Visual Studio Online

- Virtual Network Dynamic Routing Gateway und Point-to-Site VPN

- Azure Automation

- Azure Backup 

codefest.at [MS]: Apps & Games–Hackathon for Women

Apps And Games Banner 700x300

Am 24. und 25. Mai 2014 veranstalten wir einen Hackathon der ganz besonderen Art. Alle Frauen, die sich gerne mit Code beschäftigen, laden wir herzlich zu unserem “Apps & Games – Hackathon for Women” ein. Wir haben eine super Programm zusammengestellt, damit ihr an coolen Projekten arbeiten könnt und tolle Frauen zum Netzwerken kennenlernt. Egal, ob ihr lieber Spiele entwickeln oder Apps schreiben wollt, wir haben was passendes für Euch dabei!

Am Samstag, dem 24. Mai haben wir 2 parallele Tracks aufgestellt, in denen ihr einen Workshop besuchen könnt.

Track 1:
Spiele-Entwicklung mit Unity
Bernadette Thalhammer von Sproing Interactive Media GmbH
Entwickelt mit uns gemeinsam ein einfaches Spiel basierend auf dem Unity Framework. Bernadette ist Spieleentwicklerin bei Sproing und kann euch somit auch fachkräftige Informationen aus der österreichischen Spieleindustrie liefern.

Track 2:
App-Entwicklung für Windows
Rina Ahmed von Microsoft Österreich
Ich stelle euch die neue Application Platform für Windows App Entwicklung vor und wir werden gemeinsam an einer Windows Phone App arbeiten.

Nach dem Workshop, den ihr besucht habt, habt ihr Gelegenheit, das Gelernte gleich anzuwenden und auf eure eigenen Ideen umzusetzen. Wir stehen Euch dabei als Unterstützung mit unserem Wissen zur Verfügung.

Am Sonntag, 25. Mai gibt es eine Panel Discussion mit super Frauen, die über Ihre Erfahrungen und Erkenntnissen aus ihrem Karriereweg mit Euch teilen. Ihr habt hierbei die Gelegenheit, mit den Panelteilnehmer in einen Dialog zu treten und von Ihnen Tipps für eure Karriere zu holen. An der Panel Discussion nehmen teil:

  • Johanna Schober, MBA, Chief Operating Officer bei Sproing Interactive Media GmbH
  • Dipl. Ing. Dr. techn. Sherryl Manalo, Account Technology Strategist bei Microsoft Österreich
  • Dipl. Ing. Susana Prestel, IT Specialist bei IBM Österreich
  • Dipl. Ing. Visda Goudarzi, M.A., Audio Researcher bei Institute for Electronic Music and Acoustics, Kunstuniversität Graz

Nach der Panel Discussion geht es weiter mit euren Projekten, die ihr am Vortag begonnen habt.

Der Hackathon findet am Samstag, 24.5.2014 von 09.30 bis 22.00 Uhr statt und am Sonntag 25.5.2014 von 09.30 bis 16.00 Uhr statt.

Wir freuen uns schon auf euch. Anmeldungen sind ab sofort möglich.

In diesem Sinne: Game On!

ppedv Team Blog: Evolution statt Revolution

Nachdem der Staub sich rund um die alljährlichen Ankündigungsreigen der Redmonder Software-Schmiede zu legen beginnt, ist es Zeit ein erstes Fazit zu ziehen. Was bringt uns die Zukunft bzw. was stellt sich Microsoft darunter vor?

Wenn man es ganz nüchtern betrachtet, bleibt eigentlich nur ein Windows Update für 8.1, ein Phone Update von 8 auf 8.1 und eine Reihe von Detail-Änderungen übrig. Daneben noch die faktisch folgenlose Veröffentlichung des Quellcodes einiger neuer Bibliotheken, heute Open Source genannt.

Wer eine Dekade zurückblickt, wird sich erinnern, dass die TechEd Developer sich mit aktuellen und ganz nahen Technologien beschäftigte und die PDC, die Vorgängerin der BUILD, mit den über die nächsten ca. 18 Monaten kommenden. Die BUILD 2014 präsentierte am 2.April ein kleines Windows Update, das am 8.April öffentlich verfügbar sein wird. So ist die Welt heute. Gerade mal eine Woche Zukunft. Roadmaps konnte man in den Slides keine entdecken.

Vor rund fünf Jahren war Windows Mobile 6.5 angesagt. Mit einem kolportierten Marktanteil von ca. 19%. Allerdings war Apple unaufhaltsam auf dem Vormarsch und so entschlossen sich die Redmonder zu einem radikalen Schnitt: es den Jungs aus Cupertino gleich zu tun.

Ich erinnere mich noch gut an ein frühes Meeting bei Microsoft. Ein Kreis erlauchter externer Experten, eine Handvoll Microsofties und meine Wenigkeit. Das Produkt, das da vorgestellt wurde, hatte alle Nachteile von Apple gewonnen und die Vorteile von Microsoft verloren. Ich werde heute noch auf meine unbarmherzige Kritik angesprochen. Und ich habe mit jedem Strich und Punkt Recht behalten. Meine damaligen Vorschläge werden jetzt umgesetzt. Der Marktanteil dümpelt heute noch unterhalb des damaligen Windows Mobile rum. Dennoch hatte auch Microsoft Recht. Es musste ein harter Kurswechsel her. Windows Mobile hatte kein Marktpotential für die Zukunft.

Rund zweieinhalb Jahre später, auf der ersten BUILD, wurde dann Windows 8 angekündigt. Ich war persönlich in Anaheim dabei und habe mich von der Begeisterung anstecken lassen. In einem persönlichen Dialog mit einem Produktmanager wurde die Problematik des Rollouts angesprochen. Er war überzeugt, dass der Appstore-Zwang von den Kunden angenommen wird. Ich nicht. Ein anderer wichtiger Produktmanager war überzeugt, dass bald ohnehin nur mehr touchfähige Devices ausgeliefert werden. Ein folgenschwerer Irrtum, wie sich aus heutiger Sicht zeigt. Der wesentlichste Fehler ist uns und damit meine ich Microsoft und mich, in der  Einschätzung der Verbreitung von Windows 8 und Devices unterlaufen. Meine persönliche Prognose war: 100 Millionen Touch Devices bis 31.Dezember des Erscheinungsjahrs, sonst wird Balmer seinen Hut nehmen müssen. Es waren bei weitem nicht so viele und Balmer ist Geschichte.

Ganz wesentlich ist aber die falsche Consumer-Strategie. Consumerization von IT ist zwar Tatsache, wie auch bei HTML5, aber deren Folgen sind völlig falsch eingeschätzt worden. Die Unternehmen haben keine APPS erstellt. Punkt.

Windows 8 hatte nie ein Qualitätsproblem. Es war schön, modern, einfach zu bedienen. Auf Tablets für den Neueinsteiger völlig intuitiv. Eine Sensation ohne Startbutton. Es sind die über 1 Milliarde Microsoft-Benutzer, die nicht mitspielen. Folgerichtig kann man in den Blogs und Tweets im Tenor lesen, was es eh jeder schon die ganze Zeit sagt: Hört den Kunden zu. Steve Jobs und Steven Sinofsky waren anderer Meinung: Innovation kommt nicht aus Marktforschung.

Ganz anders die Keynotes der BUILD 2014. Wir haben zugehört, hier habt Ihr das Resultat. Auch ein Startmenü gibt es dazu. Und wir nehmen euch euer geliebtes .NET und XAML nicht weg. JavaScript erwähnen wir gar nicht, weil ihr es hasst.

Die Teilnehmer sind begeistert. Twitter quillt über von positiven Feeds: Beste BUILD ever. Vor allem die gemeinsame Codebasis für Phone und Windows wird gelobt. Auch die vereinfachte Sideloading Policy, die faktisch den Store aushebelt, stößt auf Begeisterung.

Die Realität bildet das aber nur zum Teil ab. Weite Teile des Developer Eco Systems beschäftigen sich heute mit HTML5 als Frontend-Technologie. Ich halte diese zwar für grottig, aber vorhanden. Da das Problem mit dem Standard und Browsern systemimmanent ist, erwarte ich keine relevante Besserung. In Angesicht dessen bin ich immer wieder erstaunt, welche großartigen Ergebnisse trotz widriger Umstände erzielt werden.

Diese Community wird auch mit dem Honig Open Source und Nuget kaum kleben bleiben. Das sind die Leute, die nicht auf die BUILD gehen.

Aus dem Applaus und den Besucherzahlen der aufgezeichneten Sessions lassen sich ein paar Trends erkennen. C# und .NET sind weiter top angesagt. Multiplattform-Entwicklung auf dem .NET-Technologiestack wird eindeutig gewünscht und von XAMARIN bedient. Azure ist trotz Scott Guthrie bei weitem nicht das führende Thema.

Schon im Vorfeld hat Microsoft eine Art Office für die Apple-Plattform gelauncht. Ein Eingeständnis der schwindenden Bedeutung von Windows. Dies wird auch mit einem Startmenü nicht besser werden. Die Fokussierung auf das angestammte Publikum, die Vereinheitlichung der Plattform Xbox, Windows und mobile werden helfen, nicht noch weitere Kunden zu vergraulen.

Die nächste Welle wird allerdings woanders an den IT-Strand laufen: das Internet of Things, oft ohne UI, aber damit mit hohem Bedarf an Service-Kommunikation. Davon sah man im BUILD-Programm recht wenig.

Hannes Preishuber besucht seit rund 15 Jahren Microsoft-Konferenzen. Er war Teilnehmer der legendären Hailstorm PDC, deren Visionen und Produkte nie Realität wurden. Auch Projekt Oslo und die Programmiersprache M kennt heute keiner mehr. Obwohl Clippy das selbe Schicksal erleiden musste, war er kein PDC Announcement. 2003 diskutierte er auf der PDC in Los Angeles mit dem noch unbekannten Miguel de Icaza über .net und dessen von Microsoft ungewünschte Implementierung als Mono. Die BUILD Konferenz 2014 besuchte er nur virtuell. Trotz entsprechender Gerüchte nicht wegen des Essens.

Norbert Eder: Wie ich meine Bücherlisten in den Griff bekomme

Ich bekomme manchmal interessante Hinweise auf Bücher, die ich sofort notiere und dann in eine Sammelliste eintrage. Ein richtig einheitliches "System" hierfür konnte ich lange Zeit nicht entwickeln. Zum Einsatz kam schon viel: Excel, Amazon Wunschlisten, zuletzt OneNote. Alles nicht so das Wahre. Irgendwie hätte ich gerne einfach mehr als nur eine simple Liste. Eine Verwaltung wäre mir recht. Übersichtlich und komfortabel. Hier eine Lösung.

Karsten Kempe: ALM-Forum 2014 – Tag 3

header (2)All good things come to an end. So ging auch gestern die dreitägige Konferenz ALM-Forum in Seattle zu Ende. Drei Tage vollgepackt mit informativen Vorträgen, interessanten Gesprächen und ganz viel Kaffee. Steven Borg hat mir Stein und Bein geschworen, dass es in Seattle den besten Kaffee gibt. Für mich gab es gestern auch wieder zwei Vorträge, die sich von den anderen abgehoben haben. Zum einen Roy Osherove, der in seinem Vortrag „Notes to a Team Leader“ sehr mitreißend erklärt hat, wie man an Herausforderungen wachsen kann und zum anderen Dave West, der mit seinem Wissen über „Lean ALM“ beeindruckt hat.

Den Startschuss zum letzten Konferenztag gab Sam Guckenheimer mit dem mir schon bekannten Vortrag „Transforming software development in world of services“. Sam berichtete von den Erfahrungen, die Microsoft auf dem Weg zu einem sehr agilen Vorgehen gemacht hat.

alm-forum2_01_cloudcadence

In meinem Post zu den ALM-Days im Februar hatte ich den Inhalt von Sams Vortrag noch detaillierter zusammengefasst und er kann dort gerne nachgelesen werden.

Der zweiten Talk, den ich besuchte, war die Fortsetzung der Keynote von Mike Brittain vom zweiten Konferenztag. In „Advanced Topics in Continuous Deployment“ beschrieb Brittain, wie der Deployment-Prozess der e-Commerce Plattform Etsy Schritt für Schritt verbessert wurde. Etsy erreicht die unglaubliche Anzahl von bis zu 30 Deployments pro Tag durch ein sehr ausgereiftes System, welches im Wesentlichen aus vier Elementen besteht: Config flags, Automatisierten Deployment-Prozessen, Semi-automatisierten Release Management und Vorwärtsorienierte Schema Änderungen.

Erst der Einsatz von config flags, macht ein ständiges Bereitstellen neuer Code-Änderungen in die Produktionsumgebung möglich. Denn so können Code-Stellen über die Konfiguration „an- und abgeschalten“ werden und Änderungen vorerst vor den Benutzern verborgen werden.

Erst wenn die Bereitstellung komplett automatisiert ist, kann sie schnell und flüssig erfolgen. So stellt Etsy für die Produktionsumgebung immer einen live Cluster und einen „dark“ Cluster bereit. Deployments werden demnach immer zuerst auf den dark Cluster ausgerollt, vertestet und erst wenn alles in Ordnung ist, wird der Cluster-Traffic durch ein config flag umgeschaltet.

Unter semi-automatisierten Release Management versteht Mike Brittain einen benutzergesteuerten Release-Prozess, d.h. jeder Entwickler, der eine Änderung ausrollen will, muss sich mit anderen Entwicklern (max. bis zu sieben Entwicklern) zusammenschließen und den Deployment-Prozess koordinieren. Laut Brittain ist eine Automatisierung hier nicht erwünscht, da sehr oft individuelle Entscheidungen getroffen werden müssen, die vom Standard abweichen.

Schema-Änderungen werden bei Etsy wie Interface-Änderungen behandelt. Dabei wird immer wie folgt vorgegangen:

alm-forum2_04_etsy

Tipps, wie Continuous Deploymemt erreicht werden kann, gab Mike Brittain seinen Zuhörern auch noch mit auf dem Weg. Es sei am besten klein anzufangen (mit wenigen Flags), Test-Automatisierung und Monitoring der Produktionsumgebung einzuführen und  für den Notfall eine Fallback-Strategie zu entwickeln, falls doch einmal ein Deployment schiefgelaufen ist.

Eine sehr mitreißende Vorstellung bot Roy Osherove. Osherove ist Autor des Buches „Notes to a software team leader“ und Blogger auf 5whys.com. In seinem Vortrag befasste er sich mit der Frage, welche Aufgaben ein Team-Leiter haben sollte. Und in seinen Augen ist die Hauptaufgabe eine Leaders, seine Mitarbeiter besser zu machen. Er sollte sie motivieren nach Herausforderungen zu suchen, von denen sie bis dato noch nicht einmal wussten, dass sie diese Herausforderung überhaupt suchen könnten. Denn nur wenn der Mensch aus seiner Komfort-Zone herausgelockt wird, entfaltet er sein größtes Potential um sich zu verbessern.

alm-forum2_05_leaders

Osherove selbst lebt auch nach diesem Motto und sucht sich ständig selbst immer neue Herausforderungen, an denen er wachsen kann. Ein echt starker Typ und Entertainer.

Abschließend möchte ich noch etwas über die Closing-Keynote von Dave West, dem Chief Product Officer von Tasktop, berichten. In „Lean ALM: Making Software flow from idea to implementation“ arbeitete West vier wichtige Faktoren heraus, die für ihn über Erfolg und Misserfolg im Umgang mit immer komplexer werdender Software entscheiden und mit Lean Software Development zusammen hängen.

Autonomy – Adaptability – Transparency – Collaboration

Wie in Dan Pinks „Puzzle of Motivation” sehr gut beschrieben ist, führt Autonomie zu mehr Leistung und Motivation. In einer Welt von Knowledge Workern ist Autonomie sehr wichtig und erstrebenswert. Aber wie passt Autonomie in einen ALM-Prozess, in dem Werte vorgegeben und gemessen werden? Nun, das verlangt den Führungskräften einiges an Fingerspitzengefühl ab, um da die richtige Mischung zu finden.

Agil sein bedeutet auch, sich immer an die bestehenden Gegebenheiten anzupassen. West zeigte auf, dass Agil-sein in der heutigen Software-Entwicklung eher ein hybrides Modell bedeutet, in dem Requirements-Engineering, Planung und ein zyklisches Vorgehen eine große Rolle spielen. Er nannte dieses Modell „Water-Scrum-Fall“!

alm-forum2_17_lean

Und die Schwierigkeit von „Water-Scrum-Fall“ ist, dass es unterschiedliche Zyklen zwischen den einzelnen Artefakten gibt, die am Ende irgendwie zusammengeführt werden müssten – einmal von langer Hand geplante Requirements und andererseits sehr schnell umgesetzte “Entwickler-Tasks”.

Transparenz ist wichtig im agilen Vorgehen und in ALM schon fast unumgänglich. Nur wenn alle Prozess-Teilnehmer zu jeder Zeit alle Informationen haben, können komplexe Systeme gebaut und beherrschbar gemacht werden.

Und der letzte wichtige Faktor, um die zunehmende Komplexität der Systeme zu meistern, ist Zusammenarbeit. Software-Entwicklung ist Teamarbeit. Nur gut eingespielte und gut zusammenarbeitende Teams vollbringen Höchstleistung.

alm-forum2_18_lean

Unternehmen, die es schaffen, all diese Punkte zu erfüllen, haben laut West die größten Chancen, mit den Herausforderungen der heutigen Software-Entwicklung, im Zeitalter des „Internet of things“, schrittzuhalten.

  1. Highlights des dritten Tages

Holger Schwichtenberg: Zusammenfassung der zweiten Keynote der BUILD 2014

Die zweite Keynote der BUILD-2014-Konferenz bot im Wesentlichen Neuigkeiten zu Microsoft Azure und ein wenig auch zu .NET und Visual Studio.

Alexander Schmidt: Cooler wär’ besser!

Es ist mal wieder //build-Zeit. Für einen wie mich heißt das, den normalen Arbeitsprozess zu unterbrechen und mich der Wonne der endlosen Screencasts hinzugeben. Gestern gings los und ich habe es endlich mal geschafft, live bei der Keynote dabei zu sein. Die Eindrücke nach dieser und einigen weiteren Sessions möchte ich schon mal zum besten […]

Kazim Bahar: Session Videos der build 2014 Konferenz

Auf der diesjährigen //build/ Konferenz sind eine Menge Neuerungen rund um das Thema Windows 8 der Entwicklergemeinde vorgestellt worden. Microsoft...

Karsten Kempe: ALM-Forum 2014 – Tag 2

header (2)Gestern ging es im ALM-Forum in Seattle ähnlich spektakulär weiter wie gestern. Die Highlights waren auf jeden Fall die Eröffnungs-Keynote des Scrum-Vaters Ken Schwaber und die Abschluss-Keynote von Steve Denning. Die beiden Speaker wussten mit Fragen ”Wie ist der Erfolg von agilen Techniken messbar” und “Wie kann traditionelles Management von Agile überzeugt werden” das Publikum zu unterhalten.

Die erste Keynote des Tags wurde von Ken Schwaber, dem (Mit-)Erfinder von Scrum, gehalten. Schwaber versuchte in seiner Keynote „The State of Agile“ der Frage nachzugehen, wie der Erfolg von agilen Methoden und Praktiken gemessen werden kann.alm-forum2_ken

Dass agile Frameworks wie Scrum oder Kanban positiven Einfluss auf Unternehmensprozesse haben, ist  mittlerweile in der Software-Branche bekannt. In einer Umfrage im Jahr 2013 konnte Foerster Research sogar feststellen, dass agile Unternehmen erfolgreicher komplexe Software entwickeln können und mehr Geld verdienen als jene, die nach herkömmlichen nicht-agilen Prinzipien arbeiten.

alm-forum2_forrester

Aber die große Frage, der Ken Schwaber nun nach mehr als zehn Jahren Scrum nachzugehen versucht, ist, wie kann der Erfolg von agilen Praktiken belegt werden, ohne sich nur auf Vermutungen zu verlassen? Was ist der unmittelbare Beweist dafür, wie agil sein wirkt?

alm-forum2_nostate

Schwaber untersucht derzeit mit einen Ansatz, der sich “Evidence-Based Management” nennt, den Erfolg von Scrum messbar zu machen. Er versucht damit herauszufinden, welchen tatsächlichen Einfluss agile Prinzipien auf die Softwareentwicklung ausüben.

Evidence-Based Management
Evidenzbasiertes Management ist am ehesten mit Beweisgestützte Unternehmensführung übersetzbar und tritt grundsätzlich dafür ein, Management-Praktiken in sozial- und verhaltenswissenschaftlichen Befunden zu verankern und formale Rückblicke und Evaluationen auf Handlungen oder Ereignisse als zwingende Grundlage für weiteres Handeln anzusehen. Quelle: wikipedia 

alm-forum2_evidence

Wollen wir hoffen, dass er uns bald Beweise vorlegen kann. Vielleicht schon beim nächsten ALM-Forum.

Ein beeindruckenden Vortrag über „Principles and Practices of Continuous Deployment” hielt Mike Brittain, Director of Engineering bei Etsy. Etsy ist eine e-Commerce Plattform für den An- und Verkauf von handgemachten Produkten. Bei Etsy wird jede Änderung, die in einem erfolgreichen Build endet, in das Produktivsystem ausgeliefert. Was dann auch mal zur Folge haben kann, dass pro Tag mehr als 30 Deployments durchgeführt werden.alm-forum2_deploy

Etsy erreicht das durch eine sehr durchdachte Release-Pipeline und die Verwendung von Configuration Flags. So wird z.B. nur in einer perfekten Kopie der Produktivumgebung jede Änderung getestet und Configuration Flags ermöglichen das Freischalten oder Abschalten von Features in der Produktivumgebung.

Die Art und Weise wie bei Etsy Software entwickelt und ausgeliefert wird, ist voll und ganz auf den Deployment-Prozess zugeschnitten. Denn das Einzige was für Etsy zählt, ist die Lauffähigkeit ihrer Webseite und die Reaktionszeit, um Bug-Fixes in das Produktivsystem einzuspielen.

Bevor der Tag durch eine hervorragende Abschluss-Keynote von Steve Denning beendet wurde, konnte ich eine weitere Bird-of-a-feather Session (HOF) zum Thema „Fundamentals of Lean Software Delivery“ besuchen. Und ich muss sagen, diese persönliche und interaktive Art ein Thema zu besprechen, finde ich wirklich genial. Zuerst stellten sich alle Teilnehmer vor und teilten ihre Erwartungen an die BOF-Session mit. Diese Erwartungen und die aufkommenden Fragen wurden dann auf ein Whiteboard geschrieben und von der Gruppe gemeinsam diskutiert.

alm-forum2_bof

Birds-of-a-feather Session sind wirklich eine super Möglichkeit, um von den Erfahrungen von vielen und nicht nur von der Meinung eines einzelnen Sprechers profitieren zu können.

Abgerundet wurde der Tag durch den Vortrag „Transforming managment through agile“ von Steve Denning. Steve Denning hat viele Jahre für die World Bank gearbeitet, ist ausgezeichneter Buchautor und war im Jahre 2000 einer der zehn meist bewundertsten Knowledge Leaders weltweit. Ich muss wirklich sagen, der Mann hat mich beeindruckt. In seiner Session zeigte er die Auswirkungen des traditionellen Managements für eine Firma und seine Mitarbeiter auf und wie diese Denkweise langfristig in den Untergang des Unternehmens endet, weil es mit innovativeren Firmen nicht mehr Schritt halten kann.alm-forum2_value

Seiner Meinung nach, muss sich jedes Management von der traditionellen Zielvorgabe „shareholder value“ zu generieren verabschieden und sich dahingehend entwickeln, die größtmögliche Zufriedenheit seiner Kunden zu erreichen. Und um das zu erreichen, muss ein enormes Umdenken in der Management-Etage der Unternehmen stattfinden.

alm-forum2_value2

Leider hat er meiner Meinung nach viel zu wenig darüber erzählt, wie dieses Umdenken erreicht werden kann. Er gab uns lediglich diese fünf Tipps mit auf den Weg:alm-forum2_value3

Dennoch fand ich die Art und Weise wie Steve Denning vorgetragen hat wirklich herausragend und beeindruckend. Und wenn ich eins von der Session mitgenommen habe, dann war es der Ratschlag „Wenn Du einen Manager überzeugen möchtest, dann musst Du reden wie ein Manager!“

  1. Highlights des zweiten Tages

[0] Wikipedia: Evidenzbasiertes Management

codefest.at [MS]: Hol dir die App für den Microsoft Day 2014

Am 8. April 2014 findet in der Wiener Hofburg der Microsoft Day statt. Heuer gibt es für die Veranstaltung sogar eine App, nämlich die “Get in touch” App. Die Applikation – verfügbar für Windows und Windows Phone - ermöglicht dir einen einfachen Zugriff auf alle Informationen rund um den Event.

Zu den wichtigsten Features gehören: Nachrichten schreiben, verabreden mit anderen Teilnehmern, über Vorträge informieren, individuelles Programm zusammenstellen, etc.  

Holt euch schon im Vorhinein die “Get in touch” App und startet top organisiert in den Microsoft Day. Am besten noch gleich das eigene Profil in der App auf den neusten Stand bringen Zwinkerndes Smiley.

 

Die Windows App

Screenshot Get in Touch

Hier der Link für die Windows App – ideal für dein Tablet:
http://apps.microsoft.com/windows/de-at/app/9a9cfa30-587b-424f-8b81-4e074eb1945e

 

Die Windows Phone App

Screenshot Get in touch Phone (1)     Screenshot Get in touch Phone (2)     Screenshot Get in touch Phone (3)

Und hier der Link für die Windows App:
http://www.windowsphone.com/de-at/store/app/get-in-touch/c47f0b75-0a40-4756-91d8-b1fd4672cbd7

Für andere Plattformen könnt ihr die Web-App verwenden: https://microsoftday.at/app

Wir freuen uns auf euer Kommen!

Norbert Eder: Büchertipps zur persönlichen Weiterentwicklung

Ich lese für mein Leben gerne und habe immer zahlreiche Bücher auf Lager, sowohl digital als auch analog. Eine meiner geplanten Leselisten beschäftigt sich mit der persönlichen Weiterentwicklung, da nicht nur auf fachlicher Ebene investiert werden sollte, sondern auch auf der persönlichen. Viel Spaß beim Lesen.

codefest.at [MS]: News von der BUILD Keynote

Heute hat die BUILD Windows Conference begonnen. Die Keynote (Nummer 1, morgen gibts die zweite mit ScottGu) stand ganz im Zeichen von Windows Phone 8.1 und Windows 8.1 Update – sowie “Development for One Windows”.

image

Doch schön der Reihe nach… Im (derzeit kalten) San Francisco hat heute die mittlerweile vierte BUILD Konferenz im Moscone Center begonnen, nun zum zweiten Mal in “SanFran” (nach L.A. 2011 und am MSFT Campus in Redmond 2012). Mit etwa 5000 Teilnehmern ist die Build eine richtig große Konferenz. So war auch der Andrang stark und die Teilnehmerströme (gewohnt organisiert mit “go this way please”-Anleitung der vielen Helfer) wurden zur Keynote geleitet (…einmal um die Halle rundherum, damit man nachher geordnet in der Schlange vor der Rolltreppe steht…ohne Worte). Anyway, gerade noch einen Platz in der knallvollen Keynote gefunden.

image WP_20140402_11_33_16_Pro

Windows Phone 8.1 (Update) füllte die erste Stunde der Keynote: Begonnen mit 3 Tiles nebeneinander über customizing startscreen, Notification Center bis zu Kalender Wochenansicht (endlich…) und viele weitere Verbesserungen war “Cortana” das Highlight: eine Bing-gestützte persönliche Assistentin, die (dzt. englische) Sprache versteht. Cortana ist für mich nicht unbedingt ein guter Name (dzt. vergesse ich den jedes Mal…), aber wir werden uns daran gewöhnen. Waren auf jeden Fall recht eindrucksvoll und lustig, die Demos.

WP_20140402_09_40_33_Pro WP_20140402_09_25_19_Pro

WP 8.1 kommt in den nächsten Monaten (und schon bald - ab etwa Mai - auf neuen WP-Geräten vorinstalliert), das Update ist kostenlos – und wird natürlich auch für alle bestehenden Windows Phones 8 verfügbar sein.

Neu ist auch die Unterstützung von WinJS in Windows Phone (danke IE11)! Somit können auch WebDeveloper native Apps für Windows Phone entwickeln – wie unter Windows 8.

WP_20140402_10_18_33_Pro

Weitere Verbesserungen findet ihr auf diesem Slide:

WP_20140402_10_02_54_Pro

Das neue Debugging in VS2013 RC2 hilft beim Auffinden von Fehlern. RC2 ist ab sofort verfügbar!

WP_20140402_09_51_46_Pro

Dann gabs noch die Vorstellung einer neuen Touch-Version von Office, die (dank DirectX und XAML) blitzschnell ist – war schön anzusehen und hat eine tolle user Experience.

WP_20140402_09_58_09_Pro

Windows 8.1 Update 1 ist für Developer ab heute im MSDN verfügbar und bringt viele Neuerungen in der Benutzeroberfläche: Das Start-Menü ist zurück, Apps können am klassischen Desktop in einem Windows laufen, die Taskleiste wurde erweitert, PC-Einstellungen und Shutdown und Suche sind nun direkt auf der Startseite verfügbar u.v.m.

WP_20140402_10_40_59_Pro

Eine wesentliche Neuerung sind die “Universal Apps” – eine App für verschiedene Windows-Plattformen. Bei Bedarf können eigene Visualisierungen für verschiedene Formfaktoren hinzugefügt werden. Dafür gibt es ein neues VS-Template und “Shared”-Projects. Universal Apps laufen dann auch auf XBOX ONE!! Wow, wirklich cool!

Besonders gut finde ich den neuen “Broker Mode” für LOB-Apps, die vollen .NET Support erhalten: WinRT Brokered Full .Net and WinJS being open sourced cross-platform! Dieser Modus ist (nur) für Side Loading apps verfügbar. In einer Demo wurde gezeigt, wie eine Legacy App mit Direkt-Zugriff via ADO.NET auf eine SQL-Datenbank mit einem neuem UI als Windows App mit der bestehenden Business Logic umgebaut wurde. Cool!

Das “neue Pricing” von Windows 8.1 wurde veröffentlicht: Windows ist ab sofort gratis für Geräte bis 9” und für IoT (Internet Of Things). Wow!

WP_20140402_10_42_25_Pro

(Noch) Nokia CEO Stephen Elop präsentierte neue Nokia Lumia Geräte – voran mit dem Flaggschiff Lumia 930 (Danke Jürgen für den Hinweis), welches im Sommer kommt und 630 mit Dual-SIM Karten und 635 mit 4G, die ab etwa Mai/Juni verfügbar sein werden.

WP_20140402_10_49_35_Pro

Zum Ende der Keynote beantwortete der neue CEO Satya Nadella einige vorbereitete Fragen – sehr authentisch und klar. Cortana durfte dann noch den End-Song spielen…

WP_20140402_11_07_07_Pro

Und letztlich erhalten alle BUILD-Teilnehmer eine XBOX One und einen 500$-Gutschein für den Microsoft Store. Zwinkerndes Smiley

War ein tolles Feuerwerk an großen und kleinen Neuerungen. Ich bin aber auch schon sehr auf die Developer Keynote morgen gespannt!

Sessions gibts bald auf Channel9- die Keynote ist bereits dort verfügbar - Code und KnowHow auf dev.windows.comund natürlich via Twitter #bldwin bzw #build2014.

Holger Schwichtenberg: Zusammenfassung der ersten Keynote der BUILD 2014

Die erste Keynote der BUILD-2014-Konferenz bot Neuigkeiten zu Windows, Windows Phone und zur Entwicklung von Cross-Plattform-Apps.

Kazim Bahar: News für Microsoft Entwickler

Bereits am ersten Tag der aktuellen //build/ 2014 Konferenz von Microsoft wurden einige wirklich interessante Neuigkeiten für Entwickler angekündigt. Eines...

Martin Richter: Visual Studio 2013 Update 2 RC ist nun verfügbar

Mit dem neuen SQL 2014 der gestern veröffentlicht wurde kamen auch ein RC für Visual Studio 2013 Update 2. Dabei ist das Update 1 erst ende Januar heraus gekommen.
Das Update 2 für den TFS 2013 ist bereits veröffentlicht worden.
Siehe:  http://blogs.msdn.com/b/bharry/archive/2014/04/02/tfs-2013-2-update-2-released.aspx

Besonders gespannt bin ich auf die Linker Enchantements, die mit Update 2 kommen.
http://blogs.msdn.com/b/vcblog/archive/2014/03/25/linker-enhancements-in-visual-studio-2013-update-2-ctp2.aspx

Die Geschwindigkeit mit der aktuell Updates und Releases veröffentlicht werden ist geradezu verstörend. Man kommt kaum dazu sich auf eine Entwicklungsumgebung festzulegen und da ist schon das nächste Update, dass mit neuen Features Funktionen und Fixes reizt. :(

PS: Die Veröffentlichung von MS-SQL 2014 erinnert mich schmerzhaft, dass es nur noch 5 Jahre Support für OLE-DB gibt. Das ist noch einen traurigen Smiley wert :(


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Karsten Kempe: ALM-Forum 2014 – Tag 1

header (2)Gestern hatte ich gleich doppelte Premiere. Zum einen wurde ich zum ersten Mal als Visual Studio ALM MVP ausgezeichnet, und zum anderen nahm ich zum ersten Mal am ALM-Forum teil. Das ALM-Forum findet diesmal im Washington State Convention Center in Seattle statt und bietet allen Teilnehmern eine Plattform, sich über die aktuellen Herausforderungen moderner Software-Entwicklung auszutauschen. Ich werde versuchen, meine Eindrücke dieser Konferenz in einer Blog-Serie niederzuschreiben und meine persönlichen Highlights mit Euch zu teilen.

Meine Highlights von heute waren die Keynote von James Whittaker „A Future Worth Wanting” und die Birds-of-a-feather Session von Steven Borg “What’s git got to do with it”. Aber alles der Reihe nach …

Die Eröffnungskeynote „Disciplined Agile Delivery: The foundation for scaling agile“ wurde von Scott Ambler, dem Co-Creater des DaD Frameworks, gehalten. Scott stellte in der Note Auszüge aus dem DaD Framework vor. DaD steht für Disciplined Agile Delivery und ist laut Scott eine mögliche Antwort auf die Frage, wie große Organisationen agil Software entwickeln könnten. Im Wesentlichen stellt das Framework ein agiles Mindset zur Verfügung, das sich aus sämtlichen agilen Modellen die besten Vorgehens- und Denkweisen herauspickt. Die Grundprinzipien von DaD sind dabei folgende:

DaD

Da das DaD Framework einfach zu mächtig ist um es in eine Keynote zu packen, gab‘s am Abend für jeden Teilnehmer noch eine signierte Ausgabe seines Buches „Disciplined Agile Delivery“.

Als Eröffnungskeynote fand ich das Thema und den Vortrag leider nicht mitreißend genug, da hat mir der Vortrag von James Whittaker wesentlich besser gefallen.

James Whittaker war Redner der zweiten Keynote und befasste sich mit der philosophischen Frage „A future worth wanting“. Auf sehr unterhaltsame Art und Weise entführte James die Zuhörer in eine Zukunft, in der Apps und Devices nicht nur Übermittler von x-beliebigen Informationen sind, sondern Übermittler von genau den Informationen, die mich als Individuum interessieren. Apps sollen noch viel mehr dazu dienen Informationen zu bündeln und benutzerspezifisch aufzubereiten. Die Daten existieren ja längst dazu, denke man nur an die Tonne von Daten, die Facebook oder Google von einem speichert.

whittaker

Ich kann nur jedem empfehlen, wer einmal die Chance hat James Whittaker reden zu hören, sollte sie ergreifen. Der Mann ist einfach „awesome“.

Eine weitere wirklich großartige Session hielt Steven Borg, co-founder von Northwest Cadence und Visual Studio ALM MVP, über das Thema „Metrics that matter: Improving lean and agile, kanban and scrum“. Der wohl prägendste Satz des Vortrags fiel ganz zum Schluss: Metrics are like fire! Powerful but very dangerous!

Und dieser Satz scheint mir sehr richtig und wichtig zu sein, denn jede eingesetzte Metrik hat Konsequenzen – positive also auch negative. Als Beispiel nannte Steven z.B. ein Call-Center, das seine Mitarbeiter an der Anzahl der durchgeführten Telefongespräche pro Tag messen wollte. Die Folge davon war, dass Kundengespräche angenommen wurden, aber schon nach kurzer Zeit einfach der Hörer aufgelegt wurde. So wurden zwar die Anzahl der entgegengenommen Gespräche vervielfacht, aber die Qualität eines einzelnen Anrufs sehr stark reduziert.

Metriken sollten vier Eigenschaften aufweisen: Sie sollten Einfach, Ehrlich, Vergleichbar und Umsetzbar sein.

metrics

Die Hauptmetriken von Scrum (Velocity und Burndown) und Kanban (WIP und Lead Time) kennen wir wohl alle. Das Bemerkenswerte an dieser Tatsache ist allerdings, dass die Modelle Scrum und Kanban meist nur mit diesen wenigen Metriken auskommen, da sich diese Modelle einer anderen, mächtigeren Metrik bedienen – und zwar dem Feedback! Es ist in der agilen Welt viel wichtiger, regelmäßig und zeitnah Feedback über das Entwickelte einzuholen, um zu wissen, ob es das ist, was der Kunde erwartet, als zu messen, wie genau ich in-time und in-budget bin. Denn was nützt es mir, wenn ich meine Software halbwegs in-time und in-budget erzeugt habe, es aber dummerweise nicht ansatzweise das ist, was sich mein Kunde vorgestellt hat.

Steven verriet uns dann auch noch die „metric to rule them all“. Und zwar soll der Schlüssel zum agilen Erfolg die Reduzierung der „Time to feedback“ sein. Also je eher das Feedback kommt, desto schneller kann man eingreifen und desto höher ist mein Erfolg. Probiert’s mal aus!

Als letztes möchte ich noch über eine etwas andere Form der Wissensvermittlung schreiben, die ich so vorher auch noch nicht kannte. Die Session-Variante nennt sich „Birds of a feather“ (BOF) und heißt so viel wie “Zusammenkunft von Gleichgesinnten“. Die BOF-Session, die ich besuchte, wurde ebenfalls von Steven Borg einberufen und hieß „What’s Git got to do with it?“. Ich weiß nicht, ob BOF-Sessions immer so ablaufen, aber ich fand es richtig cool. Als Steven merkte, dass es viele Git-Interessierte gab, die allerdings wenig Erfahrung mit Git hatten, aber wissen wollten, wie Git funktioniert und warum um Git so ein Hype gemacht wird, organisierte er kurzerhand mit ein paar Anwesenden Git-Experten einen kurzen Git-Workshop und zeigte uns ein paar Highlights aus Git. Das nenne ich mal interaktiv …

almforum-bof

Alles in allem fand ich den ersten Tag der Konferenz richtig spannend und unterhaltsam. Mal sehen was der morgige Tag so alles bringt. Stay tuned!

Mehr Infos zum ALM-Forum findet ihr unter www.alm-forum.com

  1. Highlights des ersten Tages

Alexander Schmidt: ABitADay Kickoff

Was macht man, wenn man sein Büro endlich eingerichtet hat, ganz in der Nähe zur Uni ist und glaubt, was im Schädel zu haben, das man anderen gern mitteilen würde? Wir beantworten diese Frage mit “ABitADay”. Über unseren Kickoff hier nun die Bilder und ein paar Erläuterungen. Am 27. März 2014 war es endlich vollbracht. […]

ppedv Team Blog: Weitere Preissenkungen bei Microsoft Azure

Zum 1. Mai wird Microsoft die Preise für Block-BLOB-Speicher deutlich senken. Für lokal redundanten Speicher wird der Preisnachlass 65 Prozent sein, während der Preisnachlass für geographisch redundanten Speicher 44 Prozent beträgt.

Auch die Preise für Virtuelle Maschinen der Kategorie A5 und A7 werden zu diesem Zeitpunkt gesenkt. Linux Virtuelle Maschinen werden zu diesem Zeitpunkt um 35 Prozent billiger werden, während der Preis für die Windows Virtuellen Maschinen um 27 Prozent gesenkt wird.

Ab dem heutigen Tag wird es für Compute bereits eine neue Basic-Konfiguration geben, die der Standardinstanz sehr ähnlich ist, jedoch um 26,67 Prozent günstiger ist.

Pünktlich zur Build-Konferenz unterstreicht Microsoft damit das Streben immer mehr auf Cloudtechnologien zu setzen. Auch die Bereitschaft günstige Preise für ihre Kunden anzubieten ist durch diese und auch bereits in der Vergangenheit getätigte Preisreduzierungen sichtbar. Im Vergleich zu Amazon Web Services bietet Microsoft für die oben genannten Produkte mindestens den gleichen aber häufig auch einen günstigeren Preis an.

Mehr Infos dazu erhalten Sie unter http://blogs.msdn.com/b/windowsazure/archive/2014/03/30/microsoft-azure-innovation-quality-and-price.aspx.

 

 

Karsten Kempe: Auszeichnung als MVP für Visual Studio ALM

mvp2Yeaaaahaaaaaa!!! Gestern habe ich von Microsoft die Nachricht erhalten, dass ich als Microsoft Most Valuable Professional (MVP) ausgezeichnet wurde. Damit bin ich Teil einer kleinen Gruppe von Visual Studio ALM-Experten, die von Microsoft für ihr Engagement und ihre Unterstützung der technischen Communities mit diesem Award geehrt wurden.

Folgende Nachricht erreichte mich gestern bei Mail und ich musste Sie mehrmals lesen, bis ich Sie geglaubt habe:

MVP_Ernennung 

Die Bezeichnung Visual Studio ALM steht für Microsofts Application Lifecycle Plattform und deren Produkte, wie z.B. Visual Studio, Visual Studio Online, Team Foundation Server und einigen mehr.

Ich freue mich wirklich riesig und bin mega stolz Teil dieser Community zu sein. Ich bedanke mich bei Allen, die mich dabei unterstützt haben!!!

Mehr zum MVP-Programm gibt’s unter: http://mvp.microsoft.com/de-de/default.aspx

Klaus Aschenbrenner: Goodbye SQL Server, Hello FileMaker…

The last weeks were very time consuming for me, because I had to make a very tough decision: staying independent and providing high quality SQL Server consulting and training services, or getting employed (again), and being part of a greater team to influence how the IT industry will be in future.

After a very long thinking time, I have made my decision, and joining starting today – on April 1 – Apple. I will be the lead architect for FileMaker, the relational database on the Apple platform. I will be in charge of the whole dev team, leading the various development teams in FileMaker and also coordinate the necessary changes within Mac OS X. Our goal will be the integration of FileMaker within the OS, making HFS a transactional file system – the vision of WinFS, which was discarded by Microsoft…

Why me? I have a lot of experience in the area of relational databases (I know how to write basic SELECT * queries, which was also the toughest part of the SQLMCM certification). And of course the another most important factor why Apple has chosen me over other candidates is my hands-on experience in writing operating systems. As you might know, I have written my own OS, which boots from a FAT12 partition (I have found some code somewhere in the Internet…), reads a key from the keyboard, and writes it out. Everything done in x32 Protected Mode, without any BIOS calls! Impressive, huh? Apple was really amazed by that piece of software, therefore we will also evaluate if that code can be used as the future basis for Mac OS X 15.1.

Of course, Apple screened a lot of different candidates for this position, and I had a very hard competition. In the final round we were only 3 people, and I was feeling like someone in the TV show “Deutschland sucht den Superstar” (Germany searches for the super star). I never heard anything about the other 2 persons, the 1st one was a guy called Bob, and the name of the other one was Conor.

Bob performed really amazing, but he had too less low-level experience. To understand that a little bit better, I want to give you an example: one task that we had to perform during the final round was to join 2 tables together. Very simple task when you know the concept of a cartesian product. But Bob was opening WinDbg, and was doing everything with a graphical hex-dump. He violated the rules, because we were not allowed to use any GUI front-end… And Conor? He talked the whole day about trees, and cardinality estimations… So my solution with the cartesian product was chosen over their approaches. I`m the lucky one!

So wish me luck in my new role, and let´s change the way how relational databases are working.

Thanks for reading and a happy 1st April!

-Klaus

ppedv Team Blog: Webseiten mit Bild-Slider

Immer mehr (so beginnt jeder gute Artikel in einer Frauenzeitschrift) Webseiten beinhalten einen Image Slider. Und immer mehr gewinne ich den Eindruck, dass der aktuelle HTML5, CSS, JS-Weg das wiederholt was zu Visual Basic 4-Zeiten passiert ist: Komplexität in OCXen Widgets zu verstecken. Mein neuestes Fundstück ist in Bootstrap das Carousel.

Das Carousel Widget aus Bootstrap 3 kann ein oder mehrere Bilder durch Sliding-Effekte wechselnd darstellen. Da man mit HTML arbeitet, muss es kein Bild sein, sondern kann alles sein, was in ein DIV so passt (Item). Zur Steuerung bzw. zum direkten Sprung kann der Benutzer den Indikator verwenden. Dieser kann direkt wie ein Pager benutzt werden oder auch mit einer Next-Logik versehen werden. Dies macht Sinn, wenn es wesentlich mehr Bilder sind. Außerdem befindet sich rechts und links ein Carousel-Control. Dazu kommt eine Überschrift, die auch außerhalb des Bild-Bereiches platziert werden kann.

image

Das Ganze als HTML. Mit den Attributen wird Intervall in Millisekunden, und das Verhalten am Ende der Bild-Liste gesteuert.

Die Indikator-Elemente werden als direkte Navigationselemente verwendet.

   1:      <div class="carousel slide" id="carousel-example-generic"
data-ride="carousel" data-interval="3000" wrap="true">
   2:         
   3:          <ol class="carousel-indicators">
   4:              <li data-slide-to="0" 
data-target="#carousel-example-generic"></li>
   5:              <li class="active" data-slide-to="1" 
data-target="#carousel-example-generic"></li>
   6:              <li data-slide-to="2" d
ata-target
="#carousel-example-generic"></li>
   7:          </ol>
   8:   
   9:          <div class="carousel-inner">
  10:              <div class="item">
  11:                  <img alt="PX" src="img/px.png">
  12:                  <div class="carousel-caption">
  13:                      <h3>Vespa PX 200E</h3>
  14:                      <p>Modernere Bauart</p>
  15:                  </div>
  16:              </div>
  17:              <div class="item active">
  18:               <a href="http://www.ppedv.de">
  19:                  <img alt="LX" src="img/lx.png"></a>
  20:                  <div class="carousel-caption">
  21:                      <h3>Vespa LX</h3>
  22:                      <p>jüngere 50er und 125er</p>
  23:                  </div>
  24:              </div>
  25:              <div class="item">
  26:   
  27:                  <img alt="GS" src="img/gs.png">
  28:                  <div class="carousel-caption">
  29:                      <h3>Vespa GS 150</h3>
  30:                      <p>alter Klassiker</p>
  31:                  </div>
  32:              </div>
  33:          </div>
  34:   
  35:         
  36:          <a class="left carousel-control" 
href="#carousel-example-generic" data-slide="prev">
  37:              <span class="glyphicon glyphicon-chevron-left"></span>
  38:          </a>
  39:          <a class="right carousel-control" 
href="#carousel-example-generic" data-slide="next">
  40:              <span class="glyphicon glyphicon-chevron-right"></span>
  41:          </a>
  42:      </div>

Natürlich lässt sich per CSS das visuelle Erscheinungsbild noch verändern. Da die Styles natürlich in bootstrap.css vordefiniert sind, muss die Definition nachgelagert erfolgen.

   1:    <style>
   2:          .carousel-caption {
   3:              position:absolute;
   4:              top:-10px;
   5:              left:auto;
   6:              right:20px;
   7:              bottom:0;
   8:              height: auto;
   9:              z-index: 30;
  10:              background: none;
  11:          }
  12:   
  13:          .carousel-indicators {
  14:              top: 20px;
  15:          }
  16:   
  17:              .carousel-indicators li {
  18:                  width: 12px;
  19:                  height: 12px;
  20:                  margin: 0 3px;
  21:                  background: #555;
  22:                  opacity: 0.3;
  23:                  border: none;
  24:                  transition: all 0.3s;
  25:              }
  26:   
  27:                  .carousel-indicators li.active {
  28:                      width: 12px;
  29:                      height: 12px;
  30:                      margin: 0 3px;
  31:                      opacity: 1;
  32:                      background-color: #555;
  33:                  }
  34:      </style>

Warum erinnert mich das an die VB-Zeiten? Damals sprangen unzählige Control-Hersteller in die Unzulänglichkeiten von Microsoft ein. Schon mit Releasewechsel waren die Controls nicht mehr funktionsfähig. Die allermeisten Hersteller existierten nur sehr kurz. Ein Control in einem Projekt durch ein anderes zu ersetzen überstieg den Aufwand der ursprünglichen Implementierung. 

Was ist der Unterschied, VB 6-Anwendungen laufen auch noch nach 10 Jahren. Das wird keiner mit einer Bootstrap, JQuery und sonst was basierten Seite auch nur 2 Jahre schaffen.

ppedv Team Blog: ‘LESS’-CSS is more than you may think…

Wie der Titel schon verrät, werden wir in diesem Beitrag einen der CSS-Precompiler mal genauer unter die Lupe nehmen. Einfach gesagt kann man sich das ganze wie eine Feature-Erweiterung betrachten. Wir erhalten die Möglichkeit Variablen, Funktionen uvm. in unseren zukünftigen CSS-Files zu verwenden und uns somit das Leben enorm zu erleichtern. Oft hört man den Spruch “Jeder, der CSS mag, hat doch nicht mehr alle Tassen im Schrank”. Ich für meinen Teil mag CSS, besonders durch das neue VS2013 & die WebEssentials macht das ganze wieder richtig Spaß. Ich stoße jedoch oft an Punkte, wo mich die Sehnsucht nach Variablen oder derartigen Methoden packt. Und genau dafür ist LESS zuständig.

Vorab ist es vielleicht noch wichtig zu erwähnen, dass wir im VisualStudio 2013 und 2012 (mit WebEssentials) bereits einen LESS-Compiler mit integriert haben und sogar eine super Ansicht über das daraus gerenderte CSS.

clip_image002

Links: LESS Code | Rechts: CSS Output (nicht editierbar)

In diesem Bild sehen wir eine geöffnete LESS-Datei im VisualStudio (2013 oder 2012 + WebEssentials) und dem daraus entstandenen CSS-File. Das praktische an der ganzen Sache ist folgendes: VS erstellt automatisch eine dazugehörige CSS-Datei und hält diese immer up-to-date. Also müssen wir nicht immer z.B. extra einmal einen Build ausführen oder derartiges. Sogar eine minified Version des Ganzen wird uns zur Verfügung gestellt. Ohne VS müsste man das Ganze on-the-fly kompilieren, für jeden erneuten Request, was nur unnötig Zeit verbrauchen würde.

clip_image004

Variablen

Variablen in LESS lassen sich extrem einfach erstellen und verstehen.

clip_image006

Der Wert, welchen wir dieser Variable nun zuweisen, ist komplett uns überlassen.

ob Farben…

clip_image008

Schriftarten(strings), Pixelangaben, oder das Zuweisen anderer Variablen…

clip_image010

…alles ist möglich. Dadurch lassen sich auch wunderbar sogenannte Abstraktions-Ebenen erstellen, um den Code wiederverwendbarer zu halten:

clip_image012

 

Nested Rules (CSS inheritance)

Durch Nested Rules können wir bereits verwendete CSS-Konstrukte in andere einbinden und dadurch wiederverwenden.

clip_image014

Wie wir sehen werden ‘btn’ als auch ‘btn-default’ ganz normal gerendert. Jedoch enthält btn-default alle Eigenschaften von 'btn'.

Ein gutes Beispiel bzw. guter Anwendungsfall hierfür wäre die allseits bekannte Navigation.

clip_image016

Das ‘&’ vor der :hover Pseudo-Klasse steht für alle vorhergehenden Selektoren und wird zu ‘ul#nav li a:hover’ gerendert’ was auch wiederum enorm viel Getippe spart.

Problem hierbei, wenn wir die Nested Rule als Art Basis-Klasse verwenden wollen, stellen wir bald fest, dass diese immer mit gerendert wird. Das heißt, dass es unter Umständen unnützer CSS-Code erstellt wird.

 

Mixins (Funktionen)

Diese Mixins sehen aus wie ganz normale CSS-Klassen, haben aber noch die Option Parameter mit zu übergeben. Diesen Parametern kann man sogar noch Default-Werte verpassen, wenn man das möchte.

clip_image018

Interessant hierbei: das Mixin selbst erzeugt keinerlei CSS und lässt dieses am Ende dadurch schlanker wirken und kann nun beliebig oft verwendet werden.

 

Funktionen & Berechnungen

Ja endlich! Darauf wartet wahrscheinlich jeder CSS-Tüftler schon sein Leben lang! Endlich sind wir in der Lage einfache bis komplexe Rechenoperationen zu verwenden.

clip_image020

Wie man sieht, können wir nicht nur einfache Werte miteinander addieren, subtrahieren, multiplizieren oder dividieren. Wir können sogar mit HEX-Codes Berechnungen durchführen. Selbstverständlicherweise nur + und –. Hierbei ist anzumerken, dass + oder - #000 immer als 0 gehandhabt wird und + #fff immer in #ffffff (weiß) endet als auch - #fff immer in #000000 (schwarz) endet.

Dazu kommen noch spezielle Funktionen, welche uns den Umgang mit Farben im Allgemeinen erleichtern sollen bzw. die Berechnung dieser.

clip_image022

Lighten und Darken sind, denke ich, selbsterklärend. Saturate steht für Sättigung. Jede dieser drei Funktionen bekommt als zweiten Parameter einen Prozentwert übergeben (0-100).

Spin hingegen ‘verschiebt’ die Farbe um einen gewissen Wert auf dem Farbenkreis und kann somit maximal Werte von 0-360 annehmen. Alles was darüber hinausgeht führt zu einer weiteren Umdrehung.

clip_image024

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Farbkreis

 

Fazit

Sieht ganz so aus als ob wir in Zukunft ein neues Spielzeug haben :-)

Generell ist diese CSS-Precompiler-Geschichte eine recht interessante Sache und kann schon mit relativ einfachen Mitteln durchaus effektiv genutzt werden. Jedoch soll an dieser Stelle angemerkt werden, dass dies nur ein minimaler und kurzer Auszug aus der gesamten Funktionalität von LESS sein sollte, um einen kleinen Vorgeschmack darauf zu geben und evtl. Lust auf mehr zu machen.

Für alle, die sich die Sache noch intensiver anschauen möchten, empfehle ich die offizielle LESS-Website. Auf dieser befindet sich eine Doku mit Beschreibung & Beispielen.

Holger Schwichtenberg: Live-Übertragung von Microsofts BUILD-Konferenz

Microsoft überträgt diese Woche wieder live die Vorträge, in denen die Neuigkeiten rund um Windows, Azure, .NET und Visual Studio präsentiert werden.

ppedv Team Blog: IIS 7/7.5 - Neuerungen

Mit Windows Server 2008 und Windows Vista erblickte der IIS 7 (Internet Information Service 7) die Welt. Die neue Oberfläche und das neue Bedienkonzept standen hier an oberster Stelle. Mit Windows Server 2008R2 bzw. Windows 7 steht der IIS 7.5 zur Verfügung, der speziell in den Bereichen Performance, Stabilität und Sicherheit mit Neuerungen glänzt. So wurde beispielsweise die PHP-Unterstützung mit Hilfe von FastCGI verbessert. Hier nun alle wichtigen Neuerungen im Vergleich zum IIS 6:

Neue Bedienoberfläche
Mit dem IIS 7 wurde eine komplett neue Bedienoberfläche eingeführt, die auf einer verteilten und delegierten Verwaltungsarchitektur basiert. Sie ermöglicht eine flexiblere Konfiguration des Webservers und der Websites.

iis6 iis7
Die Bedienoberfläche des IIS 6 und IIS 7.5 im Vergleich

Modularer Aufbau
Ab Version 7 ist der IIS modular aufgebaut. Bei der Installation kann genau ausgewählt werden, was der IIS können soll oder nicht. Ziel ist es natürlich, den IIS so “schlank” wie möglich zu halten. Folgende Module stehen zur Verfügung:

- Allgemeine HTTP-Features
- Anwendungsentwicklung
- Integrität und Diagnose
- Sicherheit
- Leistung
- Verwaltungsprogramme
- FTP-Server
- Hostfähiger IIS-Webkern

Integrierter Modus
Mit dem sogenannten “Integrierten Pipelinemodus” gewinnt der IIS in Sachen Performance und Stabilität. So können jetzt beispielsweise ASP.NET-Anwendungen über ein integriertes Modul abgearbeitet werden, anstatt die Aufgabe einem “externen” ISAPI-Filter zu überlassen.

Diensthärtung (IIS 7.5)
Mit Hilfe des Isolationsmodells von Anwendungspools kann die Zuverlässigkeit und Sicherheit deutlich gesteigert werden. Es werden jetzt alle Anwendungspools in separate Windowsprozesse standardmäßig mit einer niedrigeren Identität ausgeführt.

Anforderungsfilterung (IIS 7.5)
Um evtl. gefährliche Anforderungen zu filtern, bevor diese den Server erreichen, steht nun die Anforderungsfilterung zur Verfügung. Hier können Anfragen beispielsweise anhand der Dateinamenerweiterung oder des HTTP-Headers gefiltert werden.

Hostfähiger Webkern
Kernkomponenten des IIS-Webmoduls können hiermit von anderen Anwendungen benutzt werden. So kann der IIS HTTP-Anfragen von diesen Anwendungen direkt bearbeiten.

IIS-Modul für die Windows PowerShell
Über das IIS-PowerShell-Modul kann der IIS über Windows PowerShell installiert und verwaltet werden.

Klaus Aschenbrenner: SQL Server Quickie #12 – Nested Loop Operator

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan, where you are getting week by week via email all the essential knowledge you need to know about performance tuning on SQL Server.)

Today I have uploaded the 12th SQL Server Quickie to YouTube. This time I’m talking about the Nested Loop Join Operator in SQL Server. You can find the script used during the demonstration here as a download.

Thanks for watching!

-Klaus

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.