Self-Hosting SpaceBot: My Setup Guide
How I self-host Spacebot on bare metal with Ubuntu Server - building from source, configuring model routing, systemd, Caddy reverse proxy, and nightly auto-updates.
54 articles on software engineering, .NET, and leadership.
How I self-host Spacebot on bare metal with Ubuntu Server - building from source, configuring model routing, systemd, Caddy reverse proxy, and nightly auto-updates.
Stop spam bots without those annoying CAPTCHAs by using three invisible layers: honeypots, timestamp validation, and server-side hashing. A privacy-friendly, user-friendly spam prevention guide for Next.js forms.
Learn how to add Unicorn Studio 3D animations to your Next.js blog while maintaining a perfect 100 Lighthouse score. Self-hosting, CSP optimisation, and React integration tips.
From design paralysis to shipped in 5 days using Superdesign.dev & Claude Code. See how AI eliminated my biggest blocker rebuilding my Next.js blog.
A practical guide to deploying Directus as a Docker container on Azure Web Apps, including Azure Storage configuration and custom domain setup.
Migrating SearchExtensions from a dotNet project to dotnet core
Improved Levenshtein string search for use with Entityframework or other IQueryable data sets
Celebrating 10000 downloads of SearchExtensions whilst calling out for new features and ideas
NinjaNye.SearchExtensions now supports searching child collections for IQueryable meaning you can perform complex searches that automatically translate to the SQL
Ability to search child collections now supported in Ninjanye.SearchExtensions
Review of the new SearchExtensions feature that allows users to perform searches based on matching the whole word only.
Description and example usage of the primitive type search support provided by NinjaNye.SearchExtensions
I have recently started at 7digital and already there are a few things of note that may seem small, but highlight the differences in attitude 7digital take over other companies I have worked for. Here are a few thoughts from my first week at 7digital.
Why Sitecore ItemWebApi does not work and how to fix it.
My review of NDepend. What I found useful what I found challenging
Overview of the recent Levenshtein support added to NinjaNye Search Extensions nuget package
Describing one of the new features of NinjaNye.SearchExtensions. Added as part of version 1.3, ContainingAll() allows a user to return records where all search terms are included in the defined properties
As part of a new feature on a nuget package I am working on, I wanted to reverse a string into a new string. A simple request I thought, and indeed it was. However it was slow. Here is a version that performs better
Fleshing out an idea around a new c# operator and how it might work. Input is encouraged
Performance analysis of the new Soundex search functionality
Describing how the new Soundex search functionality is used in NinjaNye.SearchExtensions
Release 1.0 of NinjaNye.SearchExtensions is now available. Updates include removing obsolete methods, promote the fluent Search methods out of the NinjaNye.SearchExtensions.Fluent namespace, remove the specific SearchAll() method in favour of utilising .Search() and performance improvements
Creating a c# attribute that allows for dynamic origins based on the appsettings section but can be adapted to any source.
The latest release of NinjaNye.SearchExtensions supports Ranked Searches as part of the fluent API. This post describes how to use this new api method as well as inspects the sql it produces
Anouncing the release of NinjaNye.SearchExtensions (SearchExtensions) new fluent API. Linq search contains extension method for use with Entity Framework, Linq to Entities, Linq to Objects
How to stop robots, spambots, bots from posting forms on your site using hashing, honeypots, fieldnames, spinners and timestamps. CSRF XSS
Describes the latest method signature changes implemented in NinjaNye.SearchExtensions.
Ninjanye.SearchExtensions describes the search all feature for a given type
How to integrate Ninjanye.SearchExtensions nuget package into my blogs search engine.
Introduction into RankedSearch functionality provided by NinjaNye.SearchExtensions nuget package.
A handy extension method enabling the ability to perform a replace on a string whole using the StringComparison enumeration
Creating an IQueryable search extension method that allows dynamic searching with ranked results via occurrence counts. This solution is written in C# using the power of expression trees.
A while back I came across an error whereby my bundles were not being fullfilled but instead, I was receiving a 403 forbidden error. The fix is to rename your virtualPath values for the bundles that match local directory paths.
Returning and flattening all ModelState errors as Json using linq and extension methods
How to create a custom blog comment engine in asp.net mvc 4 using c#, entityframework code first, jquery and markdowndeep.
My fix to allow markdown deep resizer functionality when using JQuery 1.9 onwards.
Custom sitecore validation to capture if an items field value has changed and stop the save action when required. Written in c#
Validate your entity framework models but still automatically generate your models using entity framework database-first by using partial classes to define validation attributes by utilizing the MetadataTypeAttribute class
How to implement table per type (TPT) using entity framework code first. This solution uses entity framework code first migrations to create a table per type database with sub type foreign key relationship
I recently added a new method to my library of IQueryable extensions methods built using expression trees. The library is geared towards enabling search functionality via extension methods.
This post describes how I setup my own url shortener as part of my blog. It also shows how to set up the routings table to allow the url shortener to work alongside existing controllers
Here is my take on how test projects should be structured within a solution. I have used this in the past and find it makes for easy navigation and understanding.
I recently deployed a new test website to Windows Azure using Azure's Git integration. The problem I had is that I didn't want to drop and recreate the database each time I pushed a release (and lose my data), nor did I want to manually upgrade the database in Package Manager Console. This is the solution.
My take on a blog post by Bipin Joshi on Creating Cascading DropDownLists Using ASP.NET MVC 4 And JQuery. I decide to use some more up to date features of mvc 4 including the section keyword, the Url.Action extension method and the jquery .on method
A simple yet hugely beneficial feature of Specflow (and cucumber) that helps avoid repeating scenarios. By using Scenario Outlines we were able to outline the test and use an examples table to define each test to be run.
My resolution to the following problem. Given I have X apples and Y baskets, how can I evenly split the apples into each of the baskets. To do this I ended up creating an IEnumerable extension method that can be applied to the source (apples)
A common requirement that is often requested in modern sites is for forms to be submitted and validated on asynchronously. Here is my usual approach to the problem using MVC4 and JQuery
Continuing my latest theme of search extension methods, my new method allows users to search a property against multiple search terms. The code has been added to my existing search extensions project which can be found on github by going to https://github.com/ninjanye/SearchExtensions
Following on from my previous post on creating a generic search extension method for IQueryable, I decided to take the concept a step further and create an additional method that allows you to search multiple properties for a particular search term. This has now also been created as a github project
Following up to my previous post on a generic repository method, I decided to take it a step further and create an generic search extension method to perform the same task. Here is the extension method as well as the SQL it generated
In this post I begin to create a generic search extension method using expression trees. The result is a cool extension method that can be applied to any IQueryable. More to follow as I expand on the method.
Creating a dropdown list from an enum in asp.net MVC is a common task. In this post I create a custom c# enum helper which allows for easy creation of a SelectList accounting for custom descriptions and selected values
In this post I demonstrate how to get schema information from an edmx file by manipulating our t4 template.
John Nye. Agile developer from London. Specialising in C#, ASP.NET MVC, TDD, Entity Framework, HTML5, Javascript and JQuery