Image Image Image Image Image
Scroll to Top

To Top

speaker

06

Aug
2013

inWebinar

vonJohannes Hoppe

DEVELOPER MEDIA Webinar: ASP.NET Web API (Ankündigung)

On 06, Aug 2013 | inWebinar | vonJohannes Hoppe

Die Neue Mediengesellschaft Ulm mbH bündelt Webinare, Trainings, eBooks und die Events unter einer neuen Marke: Developer Media. Die ersten beiden Webinare (Knockout.js für .NET Entwickler) haben wir mit viel positivem Feedback durchgeführt. Die Reihe setze ich mit zwei Webinaren zur ASP.NET Web API fort! Ich hoffe, ihr seid wieder dabei!

BESCHREIBUNG

Die Windows Communication Foundation (WCF) war einst angetreten, eine universale Bibliothek für alle verteilten Anwendungen zu werden. Durch die Unterstützung von SOAP und weiteren Protokollen sollten Server und Client unabhängig von Programmiersprache, Betriebssystem und Gerät miteinander kommunizieren können. Doch wie so oft wurde die Rechnung ohne den Entwickler gemacht! Was in ersten Demos leichtgewichtig wirkt, entwickelt sich zu einem Wirrwarr aus Konfigurationen und endlosen Definitionen. Steht der erste Service endlich, stellt man fest, dass außerhalb der .NET-Welt kaum jemand die komplexen Szenarien tatsächlich unterstützen kann.

Tags | , ,

25

Apr
2013

inWebinar

vonJohannes Hoppe

DEVELOPER MEDIA Webinar: Knockout.js (Ankündigung)

On 25, Apr 2013 | inWebinar | vonJohannes Hoppe

Jetzt ist die Katze endlich aus dem Sack!

Die Neue Mediengesellschaft Ulm mbH bündelt Webinare, Trainings, eBooks und die Events unter einem neuen Portal. Die ersten beiden Webinare (Knockout.js für .NET Entwickler) werde ich durchführen. Weitere Themen von mir folgen! Das wird ganz großes Kino! Ich hoffe, ihr seid dabei! :-)

Johannes Hoppe nimmt Sie mit auf eine Reise in die Welt von Knockout.js. Am 27.05.2013 um 17 Uhr beginnt der Ausflug mit einem leeren ASP.NET MVC & WebAPI-Projekt. Johannes baut in diesem Webinar live mit den Teilnehmern erste Knockout.js-Anwendungen. Die 45 minütige Einführung in das JavaScript-Framework ist kostenfrei. Am 11.06.2013 um 17 Uhr setzt Johannes die Reise fort.  In 1,5 Stunden finalisiert er das Formular, welches die Möglichkeiten des MVVM-Patterns auslotet.

Tags | , ,

01

Feb
2013

inGeneral

vonJohannes Hoppe

JavaScript Best Practices

On 01, Feb 2013 | inGeneral | vonJohannes Hoppe

Kein modernes ASP.NET Projekt kommt heute noch ohne JavaScript aus. Es gab Zeiten in denen Skriptsprache unterschätzt wurde. Dies ist längst vorbei. Es ist an der Zeit, dass wir das Potential von JavaScript voll ausnutzen. Als Berater für ASP.NET MVC kennt Johannes Hoppe die erfolgreichen als auch die unglücklichen Webprojekte. Dieser intensive Vortrag wird Ihnen zeigen, wie Ihr JavaScript-Code ein solider Baustein für den Erfolg wird!

Entwickeln Sie pragmatischen Clean Code mit JavaScript. Mit 0% PowerPoint und 100% Browser stellt Johannes Hoppe seine persönlichen Best-Practices für JavaScript vor. Den „Software Craftsman“ zeichnen dabei Wissen, Werkzeuge und Übung aus. Lernen Sie die wichtigsten Patterns für eine stabile und modulare Website kennen. Überprüfen Sie Ihre persönliche Werkzeugkiste für Entwicklung, Testing und Deployment.

Tags | ,

18

Jan
2013

inGeneral

vonJohannes Hoppe

Vorträge und Termine 2013

On 18, Jan 2013 | inGeneral | vonJohannes Hoppe

Mit insgesamt 12 Vorträgen und tollem Feedback war das Jahr 2012 für mich als Sprecher ein voller Erfolg. Ich bin gespannt, ob ich eine vergleichbare Serie dieses Jahr wiederholen kann. Folgende Liste wird laufend aktualisiert:

Konferenzen

Tags | ,

30

Aug
2012

inNoSQL

vonJohannes Hoppe

NoSQL Bootcamp – Fazit

On 30, Aug 2012 | inNoSQL | vonJohannes Hoppe

Fazit: Ein aufmerksame Teilnehmer und ausgiebig NoSQL. Mir hat der Tag sehr viel Spaß gemacht!
Wie versprochen sind hier die Folien (alles in einem Set) sowie die Übungsdaten und die Lösungen zu den Aufgaben.


Hier sind die Trainingsdaten zu den Aufgaben auf Slide 90 und 92. Folgende Queries sind eine von mehreren Lösungen:

// 1. Find all scores less than 65. 
use training
db.scores.find( { score: { $lt: 65 }} );
 
// 2. Find the lowest quiz score. Find the highest quiz score. 
use training
db.scores.find({}).sort({score: -1}).limit(1);
db.scores.find({}).sort({score: 1}).limit(1);
 
// 3. Write a query to find all digg stories where the view count is greater than 1000. 
use digg
db.stories.find({ "shorturl.view_count" : { $gt : 1000 }}).count();
db.stories.find({ "shorturl.view_count" : { $gt : 1000 }});
 
// 4. Query for all digg stories whose media type is either 'news' or 'images' and where the topic name is 'Comedy’.
use digg
db.stories.find({'topic.name' : 'Comedy', media: { $in : ['news', 'images']}}).count();
db.stories.find({'topic.name' : 'Comedy', media: { $in : ['news', 'images']}});
 
// 5. Find all digg stories where the topic name is 'Television' or the media type is 'videos'. Skip the first 5 results, and limit the result set to 10.
db.stories.find({$or : [ {'topic.name' : 'Television' } , { media: 'videos' } ] }).skip(5).limit(10);
 
// 1.  Set the proper 'grade' a
db.scores.update({'score': {"$gte": 90}}, {'$set': {grade: "A"}}, false, true);
db.scores.update({'score': {"$gte": 80, $lte: 90}}, {'$set': {grade: "B"}}, false, true);
 
// 2.  You're being nice
db.scores.update(
	{'score': {"$lte": 60}, 'name' : 'exam'}, 
	{'$inc': {score: 10}},
	false, true);

Tags | , ,

05

Aug
2012

inNoSQL

vonJohannes Hoppe

NoSQL Bootcamp – ICH WILL DEINEN ARSCH IN WOLFSBURG SEHEN!

On 05, Aug 2012 | inNoSQL | vonJohannes Hoppe

 

Die DNUG Braunschweig und ich veranstalten ein Bootcamp zum Thema NoSQL. Und du bist dabei!

Datum: 29.08.2012 / 0-100
Ort: Operational Services GmbH & Co. KG, T-Systems-Gebäude, Alessandro-Volta-Str. 11, 38440 Wolfsburg 

Beschreibung:
Eine große Anzahl an neuartigen Datenbank-Systemen drängt auf den Markt. Lerne jetzt das Rüstzeug kennen, um mit .NET erfolgreich hochskalierende Lösungen für die Cloud zu entwickeln.
Das Bootcamp führt in die Theorie ein und stellt die NoSQL-Datenbanksysteme Redis, RavenDB und MongoDB vor. Im Fokus steht die Open-Source Datenbank MongoDB. Der Workshop beinhaltet Übungsaufgaben und ein umfassendes ASP.NET MVC Beispielprojekt, welche allen Teilnehmern zur Verfügung gestellt wird.

Agenda 

1,5h – Vortrag: Einführung NoSQL mit Redis, MongoDB und RavenDB
2,5h – MongoDB Übungsaufgaben mit der JavaScript-Shell und .NET/C#
2h – Vortrag mit Diskussion & Übungsaufgaben: Schemadesign
1h – MongoDB auf Azure, Ausblick Hadoop auf Azure

Voraussetzungen
Laptop mit Visual Studio 2010 (Express)
Grundkenntnisse in .NET und ASP.NET MVC

Veranstaltungsort:
Operational Services GmbH & Co. KG

T-Systems-Gebäude
Alessandro-Volta-Str. 11
38440 Wolfsburg

Anmeldung:
Die Anmeldung erfolgt in dem du einfach eine E-Mail an [email protected] schickst.
Es gibt 25 Plätze. Das Bootcamp ist kostenlos.

Tags | , ,

10

Mai
2012

inNoSQL

vonJohannes Hoppe

NoSQL bei der .NET Developer Conference (DDC) – Slides & Download

On 10, Mai 2012 | inNoSQL | vonJohannes Hoppe

1: Vortrag: NoSQL in .NET – mit Redis und MongoDB
Der Vortrag führt in die Theorie ein, stellt die beiden NoSQL-Datenbanksysteme Redis und MongoDB näher vor und gibt Praxisbeispiele. Ich präsentiere die beiden Systeme live an einem ASP.NET MVC Beispielprojekt, welches allen Teilnehmern zur Verfügung gestellt wird.

2. Vortrag: NoSQL – Dokumente und Relationen
Eine dokumentenbasierte NoSQL-Datenbank wie MongoDB hat nicht nur eine andere API zur Abfrage der Daten. Die tiefergehende Neuerung ist eine grundlegende andere Art die Daten abzuspeichern. Der Vortrag konzentriert sich auf Schema-Design und bekannten Patterns für Dokumenten-basierte Datenbanken.


 

Tags | , , ,

xCutting – AOP bei der .NET User Group Niederrhein – Video, Slides & Download

On 12, Apr 2012 | inAOP, Clean Code Developer | vonJohannes Hoppe

Johannes Hoppe spricht von seiner Sicht über Clean-Code und die Grenzen von objektorientierter Programmierung bei der .NET User Group Niederrhein. Anhand praktischer Bespiele zeigt er, wie man mit dem AOP-Framework Postsharp elegante Modularisierungsansätze erhält. Der Vortrag richtet sich an interessierte Einsteiger in das Thema Aspektorientierte Programmierung (AOP) mit .NET.

Alle relevanten Code-Fragmente sind weiter unten aufgelistet!

  1. ActionResult Edit
  2. MyConvertExeption
  3. LogTimeAspect
  4. SimpleCacheBaseAspect


Hier sind alle Code-Fragmente aus dem Video:

ActionResult Edit

[HandleError(ExceptionType = typeof(MyException))]
[AcceptVerbs(HttpVerbs.Post)]
[MyConvertExeption]
public ActionResult Edit(Note noteToEdit, int[] newCategories)
{
    NoteWithCategories changedNote = this.WebNoteService.Update(noteToEdit, newCategories);
    return View(changedNote);
}


MyConvertExeption

using PostSharp.Aspects;
 
[Serializable]
public class MyConvertExeption : OnExceptionAspect
{
    public override void OnException(MethodExecutionArgs args)
    {
        throw new MyException("Fehler", args.Exception);
    }
}

LogTimeAspect

namespace PostsharpAspects.Logging
{
    using System;
    using System.Diagnostics;
    using System.Reflection;
 
    using NLog;
 
    using PostSharp.Aspects;
    using PostSharp.Aspects.Dependencies;
 
    [Serializable]
    [ProvideAspectRole(StandardRoles.PerformanceInstrumentation)]
    [AspectRoleDependency(AspectDependencyAction.Order, AspectDependencyPosition.After, StandardRoles.Caching)]
    [AspectRoleDependency(AspectDependencyAction.Order, AspectDependencyPosition.After, StandardRoles.ExceptionHandling)]
    [AspectRoleDependency(AspectDependencyAction.Commute, StandardRoles.PerformanceInstrumentation)]
    public class LogTimeAspect : OnMethodBoundaryAspect
    {
        private const int SlowTotalMilliseconds = 250;
 
        private static readonly Logger Logger = LogManager.GetLogger("LogTimeAspect");
        private static readonly Stopwatch Stopwatch = new Stopwatch();
        private string instanceName;
 
        static LogTimeAspect()
        {
            Stopwatch.Start();
        }
 
        /// <summary>
        /// Method executed at build time.
        /// </summary>
        public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
        {
            this.instanceName = method.DeclaringType.FullName + "." + method.Name;
        }
 
        /// <summary>
        /// Saves the time method start
        /// </summary>
        [DebuggerStepThrough]
        public override void OnEntry(MethodExecutionArgs args)
        {
            args.MethodExecutionTag = Stopwatch.ElapsedTicks;
        }
 
        /// <summary>
        /// Stops the time on method end
        /// </summary>
        [DebuggerStepThrough]
        public override void OnExit(MethodExecutionArgs args)
        {
            long timeInTicks = Stopwatch.ElapsedTicks - (long)args.MethodExecutionTag;
            double totalMilliseconds = TimeSpan.FromTicks(timeInTicks).TotalMilliseconds;
 
            if (totalMilliseconds > SlowTotalMilliseconds)
            {
                Logger.Trace(String.Format("{0}ms\t- {1}", totalMilliseconds, this.instanceName));
            }
 
            base.OnExit(args);
        }
    }
}

SimpleCacheBaseAspect

namespace PostsharpAspects.Caching
{
    using System;
    using System.Reflection;
    using System.Text;
 
    using PostSharp.Aspects;
 
    using PostsharpAspects.Caching.CacheImplementation;
 
    [Serializable]
    public class SimpleCacheBaseAspect : OnMethodBoundaryAspect
    {
        protected ICache Cache { get; set; }
 
        public override void CompileTimeInitialize(MethodBase method, AspectInfo aspectInfo)
        {
            string prefix = method.DeclaringType.ToString();
            this.Cache = new Cache(prefix);
        }
 
        public override void OnEntry(MethodExecutionArgs args)
        {
            string cacheKey = GenerateCacheKey(args);
            object value = this.Cache.Get(cacheKey);
 
            if (value == null)
            {
                args.MethodExecutionTag = cacheKey;
                return;
            }
 
            args.ReturnValue = value;
            args.FlowBehavior = FlowBehavior.Return;
        }
 
        public override void OnSuccess(MethodExecutionArgs args)
        {
            string cacheKey = (string)args.MethodExecutionTag;
            this.Cache.Insert(cacheKey, args.ReturnValue);
        }
 
        protected static string GenerateCacheKey(MethodExecutionArgs args)
        {
            StringBuilder stringBuilder = new StringBuilder();
 
            for (int i = 0; i < args.Arguments.Count; i++)
            {
                if (i > 0)
                {
                    stringBuilder.Append("|");
                }
 
                stringBuilder.AppendFormat(
                    "{0}_{1}",
                    args.Method.GetParameters()[i].Name,
                    args.Arguments.GetArgument(i) ?? "null");
            }
 
            return stringBuilder.ToString();
        }
    }
}

Tags | ,

07

Apr
2012

inAOP

vonJohannes Hoppe

Vortrag zu AOP bei der .NET User Group Niederrhein

On 07, Apr 2012 | inAOP | vonJohannes Hoppe

Als Entwickler sind wir täglich bemüht hochwertigen und sauberen Code zu produzieren. Für viele Probleme kennen wir bewährte Patterns und Vorgehensweisen. Doch manche Belange – wie etwa Logging, Exception Handling, Validierung oder Caching – liegen schnell unsauber verstreut im gesamten Projekt herum.

Bei dem Treffen der .NET Usergroup Niederrhein spreche ich von meiner Sicht über Clean-Code und die Grenzen von objektorientierter Programmierung. Anhand praktischer Bespiele zeige ich, wie man mit dem AOP-Framework Postsharp elegante Modularisierungsansätze erhält.

Der Vortrag richtet sich an interessierte Einsteiger in das Thema AOP mit .NET.
Sofern bereits Postsharp auf dem Laptop installiert ist, können alle Beispiele Anhand der ASP.NET MVC Demo-Applikation WebNoteAOP nachvollzogen werden.

Tags | , ,

19

Mrz
2012

inNode.js
NoSQL

vonJohannes Hoppe

Getting started with Node.js and MongoDB on MS Azure – Slides and VIDEO

On 19, Mrz 2012 | inNode.js, NoSQL | vonJohannes Hoppe

Johannes at MongoDB Berlin 2012

It was a  great pleasure to attend the MongoDB workshops and to speak at the conference about Node.js and MongoDB on MS Azure. Here are my slides and the recorded Video:


Tags | , , ,