Archives
All the articles I've archived.
Deploying .NET applications to Coolify
Published: at 04:45 PMA step-by-step guide on migrating from WordPress on Digital Ocean VPS to Cloudflare Pages and Astro SSG, including integrating Giscus comments and other benefits.
Moving from WordPress on Digital Ocean VPS to Cloudflare Pages and Astro SSG
Published: at 04:45 PMA step-by-step guide on migrating from WordPress on Digital Ocean VPS to Cloudflare Pages and Astro SSG, including integrating Giscus comments and other benefits.
Integrating Giscus Comments in AstroPaper v5
Published: at 03:00 PMA step-by-step guide on integrating Giscus comments into AstroPaper v5, including fixes for common issues.
Moving Content to Astro
Published: at 11:00 AMA guide on migrating blog content to Astro, including exporting from WordPress, setting up Astro, importing Markdown files, and cleaning them up using GitHub Copilot.
The Plague of Microsoft Excel
Published: at 05:53 AMAn exploration of the hidden costs and inefficiencies caused by the overuse of Microsoft Excel in business environments, with recommendations for identifying and addressing these issues.
Exploring the Traits of Exceptional Developers
Published: at 09:25 PMAn exploration of the qualities that define exceptional developers, including T-shaped skills, continuous learning, problem-solving, and the ability to switch between big-picture thinking and detailed focus.
Is Bob C. Smith the same person as Robert Charles Smith? A conversation with OpenAI Chat GPT
Published: at 08:00 PMAn exploration of name matching challenges in automated systems, discussing fuzzy matching algorithms and machine learning techniques, with insights from a conversation with OpenAI's ChatGPT.
NServiceBus problems with RavenDb
Published: at 10:16 AMTroubleshooting NServiceBus and RavenDb issues in a .NET application, including solutions for GUID formatting errors and corrupted performance counters after a Windows 10 update.
Auto-generating documentation and SDKs in ASP.NET Web API
Published: at 04:00 PMDiscusses the benefits and methods of auto-generating documentation and SDKs for ASP.NET Web API using tools like Swagger and AutoRest.
Golden rules for building better software
Published: at 01:20 PMA comprehensive guide to best practices in web development, covering design/UI, graphics/charts, HTML/JavaScript, data handling, site setup, server configuration, and general process.
JavaScript Module Pattern
Published: at 04:05 PMAn overview of the JavaScript module design pattern, highlighting its benefits for code organization and readability, with resources for further learning.
VirtualMin, SSL Perfect Forward Secrecy and StartSSL
Published: at 09:56 PMA detailed guide on setting up SSL with Perfect Forward Secrecy using VirtualMin and StartSSL, including configuration tips and security best practices.
Cool tools for wireframing
Published: at 07:05 PMAn overview of tools for wireframing and prototyping, including Axure RP and Balsamiq Mockups, highlighting their features and benefits for design and collaboration.
Common .htaccess Redirects
Published: at 05:11 AMA comprehensive guide to common .htaccess redirects, including examples for single pages, entire sites, subfolders, and advanced redirection techniques using mod_rewrite.
FluentMigrator timeout when adding a new column to a large table
Published: at 12:00 PMDiscusses the challenges and solutions for adding a new column to a large table using FluentMigrator, including handling timeouts and adjusting SQL command timeout settings.
P vs NP explained
Published: at 02:34 PMAn overview of the P versus NP problem, explaining the difference between the complexity classes P and NP and the significance of determining whether every problem whose solution can be quickly verified can also be quickly solved.
The story of AllowRowLocks equals false. When indexes go bad.
Published: at 10:55 AMDiscusses the challenges and solutions related to SQL Server indexes with AllowRowLocks set to false, including troubleshooting deadlocks and failed deletes, and provides guidance on enabling row locks.
Saving Table Space Quick And Dirty
Published: at 04:26 AMA practical guide on reducing database space usage with a SQL script that identifies tables with high data-per-row ratios, helping to improve database performance.
Deploying Database Migrations in .NET Using FluentMigrator, TeamCity, and Octopus Deploy
Published: at 09:30 AMA practical guide to database migrations in .NET using FluentMigrator, covering challenges with existing databases, deployment strategies with Octopus Deploy and TeamCity, and overcoming migration complexities. This post provides insights into automation, version control, and structured schema changes for efficient database management.
SOLVED - apache2: Could not reliably determine the server's fully qualified domain name
Published: at 08:22 AMA solution to the Apache2 error "Could not reliably determine the server's fully qualified domain name," including steps to configure ServerName and correct the hosts file on a Digital Ocean VPS with VirtualMin.
Powershell Power - Moving large amounts of files to the cloud
Published: at 06:25 PMA detailed guide on using Powershell and .NET to transfer large amounts of files to the cloud, including challenges faced and solutions implemented for efficient file migration and database updates.
The golden rules of encryption for developers
Published: at 10:51 PMEssential guidelines for developers on implementing encryption, highlighting common pitfalls and recommending best practices for secure cryptographic methods and algorithms.s for developers on implementing encryption, highlighting common pitfalls and recommending best practices for secure cryptographic methods and algorithms.
The browser wars illustrated - playground edition
Published: at 08:03 AMA humorous recount of the browser wars in 2014, highlighting Chrome's dominance, Firefox's struggle, and Internet Explorer's obsolescence, with playful analogies and reflections on the ongoing competition.of the browser wars in 2014, highlighting Chrome's dominance, Firefox's struggle, and Internet Explorer's obsolescence, with playful analogies and reflections on the ongoing competition.
Teletype effects in JavaScript
Published: at 08:10 AMAn exploration of implementing teletype effects in JavaScript, including references to jQuery plugins and a live example on jsFiddle.
Command prompt here in Explorer Vista, Windows 7 and Windows 8
Published: at 09:27 AMA guide on opening a command prompt from Windows Explorer in Vista, Windows 7, and Windows 8, including adding a Visual Studio Command Prompt to the context menu and using Git Bash for Unix-like tools.a command prompt from Windows Explorer in Vista, Windows 7, and Windows 8, including adding a Visual Studio Command Prompt to the context menu and using Git Bash for Unix-like tools.
Fix Internet Explorer prompts to save JSON response when uploading files
Published: at 12:08 PMA guide to fixing the issue where Internet Explorer prompts to save JSON responses when uploading files via AJAX, including a solution for modifying HTTP headers in ASP.NET MVC.
A simple lightweight HTTP Request Library
Published: at 08:43 AMAn introduction to Unirest, a lightweight HTTP request library for .NET, including examples of basic POST requests and an overview of its features.
How I setup my Digital Ocean droplet with ZPanel and configured the DKIM and SPF records
Published: at 09:52 AMA detailed guide on setting up a Digital Ocean droplet with ZPanel, and configuring DKIM and SPF records for email authentication, including securing the server and installing Spam Assassin.
JavaScript for hackers
Published: at 05:30 AMAn exploration of JavaScript techniques for XSS filter evasion, emphasizing the importance of understanding these methods for improving web application security.
How Software Companies Die
Published: at 09:26 AMA humorous and insightful look at how software companies thrive and eventually decline, based on Orson Scott Card's analogy of programmers as domesticated bees and the inevitable corporate shift from innovation to bureaucracy.
The First Few Milliseconds of an HTTPS Connection
Published: at 11:26 AMAn in-depth look at the initial milliseconds of establishing an HTTPS connection, using Wireshark and a debug build of Firefox to analyze the SSL/TLS handshake and certificate verification process.
Leaflet - An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps
Published: at 12:00 PMAn introduction to Leaflet, a lightweight open-source JavaScript library for creating mobile-friendly interactive maps, highlighting its features, performance, and usability.
Visual Representation of SQL Joins
Published: at 09:16 AMA visual guide to understanding different types of SQL joins, including INNER JOIN, LEFT JOIN, RIGHT JOIN, and FULL OUTER JOIN, with visual aids to help grasp the concepts.
Text to UML Diagrams - Online tools
Published: at 12:00 PMAn introduction to text-based tools for creating UML diagrams, highlighting SVG-Sequence-Diagram, js-sequence-diagrams, and websequencediagrams.com, with an example of a request-poll-response style architecture.
The one cost engineers and product managers donât consider
Published: at 12:00 PMEmphasizes the importance of simplicity in engineering, arguing that simpler code is more valuable to an organization and advocating for a focus on efficiency over complexity.
Request-Acknowledge-Poll as a service design pattern
Published: at 01:40 PMAn explanation of the Request/Acknowledge service design pattern, including variations like Request/Acknowledge/Poll and Request/Acknowledge/Callback, and their implementation in reducing temporal coupling.
MongoDB - Geospatial Indexing and Advanced Queries
Published: at 01:00 PMAn overview of MongoDB's geospatial indexing and advanced queries, highlighting its advantages over traditional MySQL algorithms for geospatial data.
Twitter Bootstrap responsive design features problem YUI Compressor
Published: at 02:53 PMAn overview of an issue with Twitter Bootstrap responsive design classes when using YUI Compressor, and a solution to fix the problem.
Why you should never say "click here" in anchor text
Published: at 11:53 AMAn explanation of why using 'click here' in anchor text is detrimental to user experience, and the benefits of using more descriptive anchor text.
The lowdown on DateTime vs DateTimeOffset
Published: at 01:52 PMAn explanation of the differences between DateTime and DateTimeOffset in .NET, highlighting the advantages of using DateTimeOffset for timezone-aware date and time handling.
Why .NET developers should use NodaTime
Published: at 01:52 PMAn explanation of the benefits of using NodaTime for date and time handling in .NET applications, highlighting its advantages over the .NET date and time API.
Understanding open source code licensing models
Published: at 09:58 AMAn explanation of the importance of adhering to open source license terms when using someone else's code, highlighting the need to respect copyright notices and license conditions.
How to contribute to open source projects on Github
Published: at 01:46 PMA guide on how to properly contribute to open source projects on GitHub, covering forking, branching, making changes, and submitting pull requests.
The right algorithm for user ratings
Published: at 09:59 AMAn explanation of the correct algorithm for sorting user ratings, highlighting the use of the Wilson score confidence interval for accurate ranking.
Never rewrite code from scratch
Published: at 10:25 AMAn explanation of why rewriting code from scratch is a strategic mistake, and the benefits of using the Strangler Pattern for refactoring and improving existing codebases.
Document and interface with your REST service using Swagger
Published: at 09:04 AMAn overview of using Swagger to document and interface with RESTful web services, highlighting its benefits for keeping APIs in sync and simplifying deployment and management.
Bing Maps has a SOAP Search service
Published: at 11:36 AMAn overview of the SOAP-based search service provided by Bing Maps, discussing its limitations and referencing a detailed explanation by Alastair Aitchison.
Warning: The HTML5 Data Attribute is case sensitive
Published: at 08:33 AMAn explanation of why the HTML5 data attribute is case-sensitive, highlighting a specific issue with uppercase letters and providing a solution based on the HTML5 specification.
ServiceStack
Published: at 01:59 PMAn overview of ServiceStack, a modern alternative to WCF, highlighting its advantages for building high-performance, scalable REST and RPC web services.
Automate site deployments with TeamCity
Published: at 10:39 AMAn overview of automating site deployments with TeamCity, highlighting the benefits of continuous delivery and deployment automation.
Could not load file or assembly bug in Visual Studio 2010
Published: at 01:48 PMAn overview of a bug in Visual Studio 2010 where the Copy Local setting on a referenced DLL is not honored, and a solution to fix the issue.
ComponentArt 2008 ASP.NET Ajax controls display problem in .NET 4.0
Published: at 08:39 AMAn overview of a display problem with ComponentArt 2008 ASP.NET Ajax controls in .NET 4.0, and a solution to fix the issue by modifying the web.config file.
Schema Compare in the Visual Studio Database Project sucks
Published: at 11:31 AMAn overview of the frustrations with the Schema Compare feature in Visual Studio 2010's Database Project, and suggestions for improving the tool.
WCF JSON Serialization error with DateTime.MinVal and UTC
Published: at 02:51 PMAn overview of a WCF JSON serialization error with DateTime.MinVal and UTC, and a solution to fix the issue by specifying the DateTimeKind as UTC.
HTTPS and HTTP the protocol-less or protocol relative URLs
Published: at 09:39 AMAn overview of using protocol-relative URLs to load external content over HTTPS or HTTP based on the protocol of the page, avoiding mixed content errors and reducing overhead.
BCrypt and ASP.net MVC
Published: at 07:27 AMAn overview of using BCrypt for password hashing in ASP.NET MVC applications, highlighting its advantages for secure password storage.
Do developers get better with age?
Published: at 07:43 AMAn exploration of whether developers get better with age, considering the constant evolution of technology and the benefits of experience and continuous learning.
Storing data securely - A primer for .NET developers
Published: at 07:28 AMAn overview of the importance of cryptography in computer systems, highlighting common pitfalls and best practices for .NET developers to securely store data.
Change the color of a transparent PNG image icon on the fly using ASP.NET MVC
Published: at 10:33 AMAn overview of using a ColorMatrix to transform the non-transparent pixels of a PNG image on the fly using ASP.NET MVC, including a detailed guide and code examples.
Supporting the WS-I Basic Profile Password Digest in a WCF client proxy
Published: at 03:31 PMAn overview of how to use the message inspector and custom behaviors to implement the WS-I Basic Profile Password Digest in a WCF client proxy, including a detailed guide and code examples.
ASP.NET Tip: If your DropDownList items are lost on postback
Published: at 06:55 PMA tip for ASP.NET developers on how to handle DropDownList items being lost on postback by understanding the behavior of EnableViewState.
ASP.NET MVC Simple authentication without a database
Published: at 08:40 AMA guide on implementing simple authentication in ASP.NET MVC applications without using a database, including configuration and code examples.
RPX OpenID with ASP.NET Webforms and Membership Providers
Published: at 08:15 PMExploring the integration of RPX, an OpenID consolidator, with ASP.NET Webforms and Membership Providers. This guide covers implementation steps, handling authentication tokens, and mapping OpenID users to an existing database.
ASP.NET - Disabling the submit button to prevent double submissions
Published: at 02:38 PMA solution for preventing double submissions in ASP.NET applications by creating a custom button that disables itself upon being clicked.
Sending photos from your mobile to your website
Published: at 04:22 PMA guide on how to send photos from a mobile phone to a website using ASP.NET, including the use of the DevMail.Net POP3 component, XML database setup, and code examples.
C# vs VB.NET - My choice and why
Published: at 03:08 PMA comparison of C# and VB.NET, highlighting the reasons for choosing C# over VB.NET, including its certification, powerful features, less verbose syntax, and XML code documentation.
MMS Email Photo Blogging
Published: at 04:22 PMA guide on how to automatically pick up MMS emails, extract the images, and post them as a "moblog" using ASP.NET, including POP3 integration, scheduling, and displaying images.
Creating a PowerPoint presentation on-the-fly using a design template
Published: at 04:22 PMA guide on how to automate the creation of PowerPoint presentations using ASP (classic), including using a design template, updating the title, copying slides, and saving the presentation to the server.
First blog post
Published: at 04:22 PMIntroduction to the new blog created using XML-based code provided by Johan Danforth, highlighting its features and ease of use.
Dynamic OG image generation in AstroPaper blog posts
Published: at 04:59 AMNew feature in AstroPaper v1.4.0, introducing dynamic OG image generation for blog posts.
Predefined color schemes
Published: at 12:13 PMSome of the well-crafted, predefined color schemes for AstroPaper blog theme.
Customizing AstroPaper theme color schemes
Published: at 03:20 PMHow you can enable/disable light & dark mode; and customize color schemes of AstroPaper theme.
AstroPaper 3.0
Published: at 10:25 AMAstroPaper Version 3: Elevating Your Web Experience with Astro v3 and Seamless View Transitions
Adding new posts in AstroPaper theme
Updated: at 09:12 AMSome rules & recommendations for creating or adding new posts using AstroPaper theme.
How to configure AstroPaper theme
Updated: at 09:27 AMHow you can make AstroPaper theme absolutely yours.
How to connect AstroPaper blog with Forestry CMS
Published: at 05:17 AMStep by step process of connecting Astro-Paper blog theme with Forestry Headless CMS.
Adding LaTeX Equations in AstroPaper blog posts
Published: at 08:58 PMHow to use LaTeX equations in your Markdown files for AstroPaper.
How to integrate Giscus comments into AstroPaper
Updated: at 12:07 PMComment function on a static blog hosted on GitHub Pages with Giscus.
How to add an estimated reading time in AstroPaper
Published: at 10:11 AMHow you can add an 'Estimated Reading time' in your blog posts of AstroPaper.
How to update dependencies of AstroPaper
Published: at 03:33 PMHow to update project dependencies and AstroPaper template.
Tailwind Typography Plugin
Published: at 02:05 AMEXAMPLE POST: About Tailwind Typography Plugin and how you can use it effectively.
How Do I Develop My Terminal Portfolio Website with React
Published: at 03:42 AMEXAMPLE POST: Developing a terminal-like website using ReactJS, TypeScript and Styled-Components. Includes features like autocomplete, multiple themes, command hints etc.
How Do I Develop My Portfolio Website & Blog
Published: at 04:55 PMEXAMPLE POST: My experience about developing my first portfolio website and a blog using NextJS and a headless CMS.
AstroPaper 2.0
Published: at 03:57 PMAstroPaper with the enhancements of Astro v2. Type-safe markdown contents, bug fixes and better dev experience etc.
How to add a new Social Icon to AstroPaper
Published: at 06:16 PMHow to add a new social icon to AstroPaper
AstroPaper 4.0
Published: at 09:30 AMAstroPaper v4: ensuring a smoother and more feature-rich blogging experience.
How to use Git Hooks to set Created and Modified Dates
Updated: at 06:59 PMHow to use Git Hooks to set your Created and Modified Dates on AstroPaper