The Subtle Arts of Logging and Testing
I'm a big fan of testing, but I get lazy sometimes and it ends up costing me money, directly.
A collection of my thoughts, tutorials, and insights about web development, programming, and technology. For more recent content, check out my newsletter.
I'm a big fan of testing, but I get lazy sometimes and it ends up costing me money, directly.
TDD is one of those things that people talk about, argue about, and think is interesting. I'm one of those people, so I asked Brad Wilson to clear it all up for me.
Curious about Playwright, the frontend testing framework? Well hang out for the next hour and I'll show it to you!
Learning Elixir changed me as a programmer, and learning functional concepts changed the way I think about writing software. How about you? Is functional proogramming a useful thing to learn?
I've been using Ghost for many years and recently I decided to see just how far I could push it.
The tech industry is slowly changing over to structured interviews, but most people don't know what they are and that they have a formula!
How to explain hashing algorithms to 5-year olds? Well... I'll do my best in this post, which comes with a video too!
Writing tests can be tricky, especially using a more complex tool like Playwright. I took some time and dug in over the last year and I'm happy I did.
Solving problems is what we do, but sometimes the solution is to burn it all down and start again, learning from your mistakes. How do you make this choice?
Vue is a very powerful framework that I love a lot, but understanding some of the builtin machinery can be extremely confusing. Here's how I deal with that.
I'm creating an episodic walkthrough where I build a real application I need to ship, and you get to do it with me. It's up for presale at 50% off.
I'm popping a new course on Vue and Nuxt and here's what you need to know as a subscriber.
I spent almost 3 hours last weekend trying to figure out one of the most vexing problems I've ever faced, and I recorded all of it.
This is an excerpt for a talk I gave in 2016 at NDC London, featuring Elixir and the concurrency features it has, built in. It's easily the most annoying demo I've ever done...
Getting over imposter syndrome is no easy task, but it starts by recognizing a cold, hard truth: you're being toxic to yourself and those around you. I'll share with you some steps I took to get over it.
Think about the lines of code you would have to write in order to manage a scheduling system. Duration checks, start and end time requirements as well as checking for overlap! You could spend a few days writing all that code or you could let PostgreSQL do it better with 5 lines of SQL.
Digging through my archives once again and found this wonderful video with Jon Skeet doing what he loves to do: sleuthing date bugs and answering questions on StackOverflow!
I'm allergic to crappy, non-sensical, faked up demos that try to convey highly technical concepts. Yet I find myself falling into that lazy trap constantly. This requires intervention.
As programmers we tend to think of reports after the fact, often when it's too late. I learned this the hard way over the last few days.
Many people are interviewing these days and you really, really should know the basics if you expect to do well. You'll find that here with common data structures and algorithms.
Handling dates properly is delicate business and, thankfully, Postgres gives you many tools to help make sure you store date information correctly. But that only works if you know what's going on!
Digging through my archives of hundreds of videos, I found an oldy but goody - publishing it for you to enjoy!
I love nerding out over the holidays and today was no exception. I added a feature to my blog that I've wanted to add forever!
Web Assembly is enabling people to do some crazy stuff in the browser, including running a full PostgreSQL installation and Adobe Photoshop!
I like to change my publishing site regularly - it's fun and it keeps me sharp. This iteration is with Nuxt and Firebase, and I learned a ton.
Writers often talk about "finding their voice", but what does that even mean? There are ways to loosen the control your internal filters have on your ability to express yourself.
Nitro is an exciting web server created by the unjs team, who are also the people behind Nuxt. Nitro is a study in simplicity and a wonderful tool for your JS belt.
In this production, a SQL Server DBA (Rob Sullivan) and a developer (Rob Conery) take a deep dive into PostGreSQL (v9.1) and are surprised by just how capable, intelligent and *fast* PostGreSQL is.
In this feature-length production, Scott Hanselman and Rob Conery offer suggestions and advice on how you can get out there, and get involved. Blogging, Twitter, Github, StackOverflow, User Groups and Conferences: get out there!
There are too many crappy demos out there. It just takes a little extra time and some empathy to tie your tutorial to a real problem.
Can a blog be turned into a book? Yes! But it can't be just any old blog - the writer has to have something to say and no fear of saying it... like Troy Hunt. Here's the story of how I turned his blog into a book.
The hardest thing anyone can do is break down their own mental constructs, realizing they're toxic and destroy relationships. It's part of the journey.
I really think too much. I have a lot of fear in me that keeps me from doing things I love to do. It's unhealthy and also self-obsessive (there are 3 "I's" and 2 "me's" above). I really need to stop thinking and just... do...
Writing a full text index in PostgreSQL is an art form. You need to know what your users are looking so you can build the right index AND you need to understand how they write their search terms. Thankfully, Postgres is here to help.
It’s always fun to study the basics, and in this video we dive into the linked list and how to create one from scratch. Sounds ridiculous, but it can rescue an interview!
The third version of a framework, library or tool generally sucks, at least in my experience. Will this be the case with Vue 3? Let’s find out!
Retirement is one thing, being where you want to be and doing what you want to do when your current job is finished in another thing entirely. What’s your exit strategy?
Importing data into PostgreSQL can be time consuming and painful – unless you toss the GUI tools and use scripts.
Understanding Big O has many real world benefits, aside from passing a technical interview. In this post I'll provide a cheat sheet and some real world examples.
Most people will default to bcrypt when choosing a hashing algorithm for storing sensitive information - but why? Are there other choices? Indeed! In this video we'll take a look at scrypt, PBKDF2 and my favorite: argon2
Over the holidays I decided I wanted to see if I could improve the Node/Cosmos DB provisioning and deploymment story with AZX. In short: yes, I can.
I love writing. I also love editing my writing because it starts to take shape. The formatting process, however, gets me every time. Over the years, however, things have become easier so for 2021 here's my list of tools you can use.
I'm fascinated by people's stories and the decisions they made to move their career forward or, in some cases, backwards. I decided to take that to a whole new level with my friend Troy Hunt. We're turning his blog into a book...
This is part 3 of a series of posts I’m writing for Friendo, a web person who wants to get their hands a lot dirtier with Node and Postgres. You can read part 1 here, and part 2 here, where we...
Getting up to speed with Postgres and Node can be daunting but in this post I'll dive into how you can easily work with both - including JSON document storage... in Postgres!
Just yesterday I was talking to a friend about Postgres (not uncommon) and he said something that I found shocking: I can’t even with Postgres, I know JACK SQUAT This person calls themself my...
Full Text Indexing in PostgreSQL is easy... and it's not. It's not difficult to do simple keyword searches, but fine-tuning your index with weighting and parsing rules takes some effort.
PostgreSQL 12 introduced a feature I've long wished for: computed columns that are indexable and stored on disk! They're amazing and in this post I'll show you how they work and how things kind of go...
I love audiobooks and sometimes I listen to one that is so good, I have to share. This one took effort - like all of Stephenson's stuff - but it was worth it!
Understanding Big O has many real world benefits, aside from passing a technical interview. In this post I'll provide a cheat sheet and some real world examples.
I started my career on the Microsoft stack building forms and websites using drag and drop tools. Over time that became a punchline, which is unfortunate because honestly, the productivity was insane...
I love traveling but hate overpacking! In this post I'll offer a few of the tricks I've learned from traveling extensively over the years.
Over the winter holiday break (on Christmas Eve, to be precise), Scott Hanselman and I released the next volume in the Imposter's Handbook series. It took us just over 18 months to put this thing...
A remainder and a modulus look so very similar, but they are not the same thing and worse, are treated differently by different programming languages. Do you know how your language handles mod?
Working with Common Table Expressions in PostgreSQL is easy and straightforward. You can insert, update and delete data easily, all in one operation, within a single transaction.
Working with dates and series of dates is easy in PostgreSQL, especially using generate_series.
One of the joys of working with PostgreSQL is the ability to run full-text searches right out of the box. But how do you set this up? Better yet: when should you use full-text indexing and how would...
This last month has been intense. I'm writing the second volume of The Imposter's Handbook with Scott Hanselman, I moved back to Hawaii, and I'm trying to finish up a sprint for a contract I've been...
Another day, another database project in my repo! This time it's a pure PostgreSQL JSONB document storage API that you can drop in and get going with right away!
I'm in the middle of writing the next volume of The Imposter's Handbook and I found myself down a Rabbit Hole from the very outset: how can we, as programmers, justify the existence of null in our...
Going out on your own as a solo developer can be terrifying! That's why I made this 1-hour video: to share with you the things I did to scale myself from a solo developer to a successful online...
I was interviewed on .NET Rocks! while at NDC London.
The smallest comment from a good friend can lead to introspecting your life choices. This just happened to me!
I just released a new book about PostgreSQL, Saturn, and Cassini! Quite possibly the most fun I've had writing about data and databases.
Writing a book is fun and can easily consume you. Just like writing software, however, if the tools get in your way, writing becomes a chore.
The print edition of my book is now available through print-on-demand at Blurb.com. Quality paper and a perfect size, a great holiday gift.
Going through a coding interview is not fun. The questions you're asked can come off as pointless - there's a reason you're asked these things, however.
We can checkout and execute an order, but what does the client see? Firebase gives us a unique ability that way: a realtime update powered by VueJS.
Do we use a lot of smaller routines with Firebase Functions? Or one big one? We'll explore the options in this post.
There are no 'best practices' or established architectural patterns with Firebase Functions. So what do we do when we receive payment from the customer?
Let's address the elephant in the room: Should you trust a service like Firebase to handle your business? Not unless you want your pants on fire(base)!
Yes, I know, you're sick of the term. The idea is interesting... but is it realistic? In this blog series we'll find out. This is Part 1: where I investigate various serverless services...
I want to love this process... I ... want to ...
I both love and hate when things go upside down in my career. A little panic mixed with the intoxicating effect of opportunity.
I've taken a little time from blogging about Elixir and this little project, mainly because I wanted to dive into OTP a bit more, and I also needed to figure out Phoenix and what I needed to remove.
I am not a fan of migrations - never have been and probably never will be. They were interesting when Rails first came out, but now they're pure friction.
There is a lot of opinion about stored procedures out there that are just...
I'm building out a pretty detailed application using Postgres and Node - mostly Postgres - trying to flex as much of its power as I can. For me, this means kicking ORMs to the curb and relying on Postgres' amazing function features
The fuller support for JSONB in Postgres 9.4 makes working with document structures incredibly compelling. Here's an interesting way to have your Relational Peanut Butter play nicely with Document... Chocolate
I've been playing around with DigitalOcean lately, specifically the pre-rolled Applications they have setup. I'm just blown away at how simple things have become: including setting up your own private Heroku
I get asked rather often by friends if I wouldn't mind reviewing abstracts they've put together for submission to various conferences. This usually happens after they've been rejected. I'm not a Master Speaker by any stretch - but one thing I know how to do is to craft a compelling abstract. I offered to review an abstract for a friend today - as long as he let me blog it... so here goes..
I just released my latest screencast for Tekpub Pluralsight and I rather like it. It's live coding and I'm building something I need; I did my best to keep it real, and bring in what I've learned from other frameworks like Ruby on Rails and Node.
There is a trend in the .NET space of trying to abstract EF behind a Repository. This is a fundamentally bad idea and hopefully I'll explain why.
Postgres is an amazing database and you can EF with it, sort of. If you want to explore something new and have some fun - read on.
I'm a fan of BDD, but I find that many examples (and codebases and default settings) fall short of the original philosophy. Here's Why.
When I read things like "Callbacks as our Generations Go To Statement" I’m like maybe we need that. Maybe we need some time where we’re walking around with a donkey with old rusty GO TO statements clinking on the sides.
There's a thought in neuroscience/psychological circles that words are much more than sounds that represent things: they are the abstraction of our higher brain function. Words are language, code is language. Restricting yourself to one or two languages is limiting your cognitive abilities
I've been teeth-deep in Client-side JavaScript frameworks over the last 4 months for Tekpub. This month is Angular, last month was Ember's turn and I gave up. It's the first time I've given up - here's why.
Once the script outline is set and you have a skeleton of the words and tone you want to use - it's time to bake the demos. Yes: Bake.
It was exactly 1:32pm, HST, when the motor died. I stared at the throttle... hoping it was a joke. Land was 50 miles away, and the sea was building, and we were drifting. I thought: "This time dude... this time you really fucked up".
You have a solid idea of what you want to say - now you just have to say it. The uphill climb begins. This is part 2 of how to improve your screencasting skills.
I get asked a lot about my process, software, and microphone for the screencasts I do at Tekpub. I figured I'd blog about it because the world needs better screencasts. This is part 1 of more to come...
Any tool can create a mess. Some seem more prone to messes then others - that's what I thought of KnockoutJS until recently when I had a chance to catch up with Steve Sanderson - Knockout's creator. We talked, I tried some different things. I've changed my mind.
Postgres is gaining more and more attention - deservedly so. Open database systems like Postgres are standing up squarely against the massive, sprawling (and expensive) "Enterprise" systems like SQL Server and Oracle - usually with feature parity that works better. Of all these systems, Postgres is the smartest, fastest, and most capable.
At NDC 2012, I was set to give a talk on NodeJS, and what it's like to work with it. I dislike the quick "hey neat wow" demos - but how do you show what it's like on a daily basis to a room full of people who have likely never tried it?
Don Syme makes a very interesting postulation over on his blog: "Is JavaScript code always so full of bugs?" His post goes on to show what happens when you turn on script errors in IE - which is striking. But is it really that easy?
One problem people face when starting out with Node (and JavaScript in general) is handling the asynchronous, deep callback nesting issue. EventEmitters help fix that.
Tekpub just pushed its latest production: Hello PostgreSQL - and I invite you to take a look at some of the very compelling and interesting features this Open Source system has. No seriously - it's worth a look.
I made the mistake of publicly commenting on someone's idea of a RESTful API. And already - I've probably lost you. I don't know any single term more explosive and zeal-inducing than REST and "what it means to be RESTful". Oh - you say "it's quite simple?" You say "what's so hard?" Pedanticize away my pedantic pedant...
NodeJS has a pretty specific convention when implementing callbacks in modules - function(err,result). Does this always make sense?
We just recently pushed Tekpub over to Posgres and all in all, it was very simple. I won't talk about the reasons we moved from MySQL - that's another post. This one is all about making sure your backups go off nightly.
In a previous post I showed some fun stuff with System.Dynamic and Data Access. I'm happy to say that I tweaked it, loved it, and pushed it to Github if you want to diddle with it. This post is a tad long and dives into Dynamics at the end - read it if you want a fun mental exercise. Otherwise the code is upfront.
I promised myself I'd never do this again: create an ORM-y/Data Tool for .NET. But I needed some utilities for some work I'm doing, and I extracted the databits because I can't help myself. I like to share - mom taught me right.
Fight Club is one of those movies that you can take at face value and have a great time, or dig a bit deeper into David Fincher's directorial excellence and unravel some crazy stuff. The shifting reality of the film leaves a lot to be discovered.
I've always been a major proponent of Open ID. I love the idea and the intention - it's a great solution to a long-standing problem and solves a lot of issues for developers. Unfortunately it creates a ton more for business owners.
Props on this one go to Scott Hanselman who pulled me back from the edge of the cliff last night. I was particularly distraught in getting a MIX demo together where I had to do some queries using LINQ, and I couldn't for the life of me figure out how to fashion an IN query!