Orchard Harvest conference, day 1

We're reporting in live from the 2017 Orchard Harvest conference! This blogpost will be updated as we go, so make sure to check back!

Bertrand is doing the same thing, so make sure to check out his blog for updates too. Aaand, Antoine too, so also check out his blog.

Keynote by Sebastien Ros

  • Not everybody has badges because Sebastien failed Mail Merge, or Mail Merge failed Sebastien. Zoltán doesn't have a badge either :-(.
  • Sebastien's always funny stand-up show starts, although he had a hard night after eating something bad.
  • Let's see where all the attendees come from. It turns out, from a lot of countries and US states.
  • Sebastien hands out some "choc-lates" to speakers. Now you're sorry you won't have a session!
  • Public shaming of those who didn't want to be speakers!
  • Public praise of those who're active in the community.
  • Sebastien whining about organizing the conference. But we all know he just loves it. And he sounds like a parent with some little kids. Oh wait...
  • Word of the day: "websiting". We all do Orchard websiting apparently.
  • Apparently "Lombiq Technologies Ltd." is a long company name. So we'll just go with LMBQ from now on.
  • There will be 4 ladies on the conference, which is maybe a record?
  • Oh, and BTW we'll have some stuff about Orchard too.

Outside In: Using external data with Orchard by Jorge Agraz

  • Jorge is from Onestop, a full service ecommerce agency.
  • They developed their platform on Orchard where they utilize Orchard's flexibility and content model.
  • A CMS was needed to get engineers out of content management.
  • But sometimes Orchard is hard to utilize or an overkill for their use-case.
  • Product catalog information comes from an external system which is queried via API calls.
  • They have "actor" and "carrier" shapes: platform-level business logic templates vs theme-level structural ones. See Jorge's session from last year.
  • First the Onestop platform used widgets to provide pieces of functionaly for ecommerce sites, now mostly Layout Elements and content types for commerce pages.
  • We now know what the address of the Onestop VPN is, but won't tell you here!
  • One of the big points of the latest version of the platform is to reduce the number of shape templates needed for new sites: now just 6.
  • A demo of how product pages are built with content parts. But as usual during demos, Visual Studio freezes :-).
  • It seems Onestop discovered Dynamic Pages ;-).

When Output Cache Just Isn't Enough by Chris Payne and Daniel Stolt

  • Or "Make Output Cache Great Again" :-).
  • They're from IDeliverable and developed IDeliverable.Donuts to handle various caching needs.
  • A common scenario is personalized output, like having the user's name somewhere. This can be cached by keeping token-like placeholders and caching the output with that, evaluating for each request.
  • A demo of how such placholders work.
  • You can also see how the recent changes in the Output Cache module fit into this.
  • Pro tip from Daniel: if you're presenting together with an English guy, use a Swedish keyboard layout. And Dvorak.
  • In this talk we see images of cigars, in the last session there was a shoe with a cigar as the heel. Did we miss that the cigar is this conference's theme?
  • Chris started a sentence with "Donut ships with..." and now I can't stop thinking of donut ships.
  • A demo of the Item Level Cache part, which provides similar caching options but on the level of a single content item, not the whole page.
  • This video apparently has something to do with caching.
  • A demo of how cache entries can be reused across multiple pages.
  • A demo of prerendering some items: even the first user gets a cached version, not first-time penalty. The drawback is that since the context is the request is not there, caching options are limited.

What's new in ASP.NET MVC Core 2.0 by N. Taylor Mullen

  • Hands up if you don't know ASP.NET MVC Core 1.0 either!
  • Taylor is from Microsoft from the Razor team.
  • The talk will be the better the more active the audience is. Remember, this is the first talk after lunch. So...
  • Introducing Razor Pages: a bit like ASP.NET Web Pages, but better, i.e. "best of MVC with less ceremony". If you're a borderline PHP developer, do we have some transitional technology for you!
  • Anatomy of a web application. Not many files.
  • Demo of the basics of app configuration and stuff. VS 2017 can now edit csproj files without having to unload the project first. The future has arrived.
  • Taylor is into League of Legends and Pokemon Go. Just sayin'.
  • Demo of the difference between a standard MVC app and a Razor Pages app. The latter is just add cshtml file, run. No controller, action, Views folder. You can (or rather will be able to in the next version) embed logic otherwise contained in controllers. Looks very neat until you get PHP flashbacks.
  • Just casually used C# 6 string interpolation. Well, since Roslyn the objectively best programming language in the known universe gets better even faster.
  • Razor Pages is not obsolating MVC, it's another way to structure your app. Might help newcomers start with ASP.NET. Wonder if this could be used in an Orchard module?
  • Razor tooling is being redesigned to decouple it from VS, allow extensibility and be able to provide an overall better developer experience like during refactoring.
  • E.g. adding new Razor directives it's just a few lines of code.

Scaling Orchard by Rob King

  • Rob is a technical lead at Bede Gaming. They provide an online gaming platform for gambling brands in the UK and now internationally.
  • They started their platform using PHP by writing a custom CMS, then migrated to using .NET and Orchard.
  • "I'll talk about Mecca". Lombiq guys got Mecca flashbacks. (Because of this.)
  • Their platform had a huge network of dependencies: disabling a feature can disable dozens of others. So they refactored and moved all common central service interface to a common module. Still not perfect, so the next step was to factor those out to smaller projects containing interfaces.
  • To visualize the dependency hierarchy Rob created RJK.FeatureDependencies.
  • Mecca Bingo needs a multi-node setup (12 servers by default) and extensive cashing to handle large loads (a recent peak was 5,4k requests per minute). Like layer rule caching with a custom Redis-using implementation.
  • Output caching is handled with Redis too on top of a local in-memory cache.
  • Scheduled task caused deadlocks in production due to tasks being wrongly rescheduled from multiple nodes. The ultimate solution was to move task execution out to Hangfire (after implementing a workaround of only letting tasks be executed on a single node).

What is Orchard Core SaaS Framework? by Nick Mayne

  • Nick has worked on Orchard Core, the new ASP.NET Core-compatible version of Orchard extensively.
  • Demo of starting an Orchard application from scratch by creating and configuring a host project for it, then adding a module with MVC to it.
  • Demo of configuring extension loading: Custom extension locations, custom manifest definitions.
  • Demo of configuring multi-tenancy.
  • Demo of using Nancy instead of MVC.