speaker
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.
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.
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.
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
- 21.02.2013 – .NET UG Rhein-Neckar: JavaScript Best Practices
- 26.02.2013 – MongoDB Berlin: Software Tests with MongoDB
- 28.03.2013 – DHBW Mosbach: 1. Gastvorlesung zum Thema NoSQL
- 04.04.2013 – DHBW Mosbach: 2. Gastvorlesung zum Thema NoSQL
- 03.05.2013 – dotnet Cologne: Sicherheit von HTML5 und JavaScript
- 05.06.2013 – Karlsruher Entwicklertag: Sicherheit von HTML5 und JS
- 15.06.2013 – .Net Day Franken: Software Craftsmanship mit JS
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);
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.
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.
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!
Hier sind alle Code-Fragmente aus dem Video:
[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); }
using PostSharp.Aspects; [Serializable] public class MyConvertExeption : OnExceptionAspect { public override void OnException(MethodExecutionArgs args) { throw new MyException("Fehler", args.Exception); } }
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); } } }
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(); } } }
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.