15 Jan 2026 #misc
Following my own advice, I’m writing a 10-idea list to quiet the chatter in my head. Not that I had writer’s block, but a “too much noise in my head” block—If that’s even a thing.
#1. Use your blog as insurance. Blogs might feel dead. People consume content inside platforms, instead of Googling to land on personal blogs. But your blog is your insurance against dead platforms and suspensions. If you trigger a filter inside a platform, even if it’s a false positive, your account gets suspended, with almost no chance of getting it back.
#2. Your real asset is your email list. I’ve heard it plenty of times: “Build your list…,” “Count subscribers, not followers…“ But it wasn’t until my account on a social blog got suspended that I learned the lesson.
#3. Cut the news. Venezuela, Iran, Israel, United States…There’s always something going on somewhere. Unless you’re a diplomat, advisor, or spy, there’s almost nothing you can do. News only makes you anxious.
#4. “I want to build a product.” This is the second or third time I’ve heard a friend saying they want to build something beyond the 9-5. The problem? They recreate their day job after hours, when there’s less energy and willpower. A better alternative is to make experiments and create something in two hours. Or a portfolio of small bets.
#5. We live without being conscious of our bodies. I’m rereading The Power of Now by Eckhart Tolle. I wasn’t ready the first time I read it. One takeaway so far: We’re so in our heads we forget our bodies. Just stop to breathe.
#6. Coding is changing for good. I keep seeing people on the IndieWeb and LinkedIn brag about coding without touching an editor or IDE. Now they “code” from their phones with Claude Code. Maybe writing lines of code is becoming optional.
#7. Write books for AI to read. The other day, Kevin Kelly said he writes (or plans to write) his books for AI. What if we offer our books as chatbots? Instead of reading it, people talk with them. It’s another reminder that our job as writers is to adapt to how our readers consume content. Credits to Smart Brevity. That’s how we’re consuming content now.
#8. 12 apps in a year. The other day, I found an indie blogger running a challenge: building one small app per month. Such a great idea! Forget the next Uber, build tiny apps (or websites) that solve a simple problem and put a “Buy me a Coffee” link. Something like a “pill time calculator” or “time off finder.” Those are two small apps I’d use.
#9. Do something hard this year. This idea comes from Ryan Holiday. Marcus Aurelius, or another stoic, used to jump into a frozen lake at the start of every year. Prove yourself wrong and do something hard. Maybe that’s a side project, a book, or a jump into a frozen lake.
#10. You’re not too late. I just listened to an interview with Hassan Osman, a book writer, course creator, and podcaster. He admitted part of the success of his books and courses was starting around the lockdown in 2020. The best time was five years ago. The next best time to take action is now. Experiment, and double down.
14 Jan 2026 #books
For writers, the real challenge is to make readers finish books.
TikTok, Instagram, and endless feeds have turned us into skimmers. And as Smart Brevity says, our job as writers is to adapt to how readers consume content. Give them something fast.
Short non-fiction books, or mini books, are the answer for impatient readers.
A book doesn’t need 30,000 words. It could be a summary of 10 papers, a collection of personal stories, or your best posts—as long as it’s valuable even for one person, it’s worth publishing.
And to my surprise, after going down a rabbit hole, today I found a one-page book, This Book is One Page Long by Hassan Osman. Well, the book has 5 pages. I guess that’s the front matter, back matter, and one page of actual content.
If that doesn’t kill every excuse for writing a book, nothing will.
13 Jan 2026 #csharp #todayilearned
In another episode of Adventures with Entity Framework…
I expected Include() to always translate to an INNER JOIN. But with nullable “joining” properties, EF Core uses a LEFT JOIN.
Here’s my replicated scenario with movies and directors.
#1. Let’s create a Movies and Directors table with no foreign keys between them.
USE Movies;
GO
CREATE TABLE Movies (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(100) NOT NULL
);
GO
CREATE TABLE Directors (
Id INT PRIMARY KEY IDENTITY(1,1),
Name NVARCHAR(100) NOT NULL,
MovieId INT NULL, /* <- A nullable column here */
/* And no constraint here. I'm a legacy app */
);
GO
#2. Let’s store (and retrieve) one movie and its director and an orphan director.
using Microsoft.EntityFrameworkCore;
namespace NullableForeignKeys;
public class Movie
{
public int Id { get; set; }
public string Name { get; set; }
public List<Director> Directors { get; set; }
}
public class Director
{
public int Id { get; set; }
public string Name { get; set; }
public int? MovieId { get; set; }
// ^^^^
// A nullable property here
public Movie Movie { get; set; }
}
public class MovieContext : DbContext
{
public MovieContext(DbContextOptions<MovieContext> options) : base(options)
{
}
public DbSet<Movie> Movies { get; set; }
public DbSet<Director> Directors { get; set; }
}
[TestClass]
public class MovieTests
{
[TestMethod]
public async Task NullableForeignKey()
{
const string connectionString = $"Server=(localdb)\\MSSQLLocalDB;Database=Movies;Trusted_Connection=True;";
var options = new DbContextOptionsBuilder<MovieContext>()
.UseSqlServer(connectionString)
.Options;
using (var context = new MovieContext(options))
{
// An orphan director
context.Directors.Add(new Director
{
Name = "Quentin Tarantino"
});
// A movie and its director
context.Movies.Add(new Movie
{
Name = "Titanic",
Directors =
[
new Director
{
Name = "James Cameron",
}
]
});
context.SaveChanges();
}
using (var context = new MovieContext(options))
{
// Imagine a query with filters on director and movie
var directors = await context.Directors
.Include(d => d.Movie)
// I thought this would retrieve
// directors with movies
.ToListAsync();
foreach (var d in directors)
{
Assert.IsNotNull(d);
Assert.IsNotNull(d.Movie);
// ^^^^^
// This one breaks...
}
}
}
}
In this legacy app, child entities could exist without parents. The real query also applied filters on both entities.
Now let’s look at the SQL EF Core generated:
SELECT [d].[Id], [d].[MovieId], [d].[Name], [m].[Id], [m].[Name]
FROM [Directors] AS [d]
LEFT JOIN [Movies] AS [m] ON [d].[MovieId] = [m].[Id]
Notice the LEFT JOIN. Using int Movie instead produces an INNER JOIN.
Lesson: JOIN type depends on the joining property’s nullability, not on Include() itself.
12 Jan 2026 #writing
I tried the “proven” formula the big names swear by and it failed miserably.
I did what most people recommend to sell:
- Write social media and long-form posts.
- Offer a free email course or opt-in.
- Take people to a newsletter.
- Pitch your offer or products.
But after months of content, I realized something was broken.
The realization that changed everything
I packed my best career LinkedIn posts into a free 7-day email course.
I offered it as “pay what you want” and promoted it on LinkedIn. A few readers left a tip. It gave me momentum to keep promoting it.
But when I sent emails, almost nobody clicked my offers. After more than 30 emails, my products made just $1. OK, maybe my copywriting wasn’t strong or I was selling the wrong products.
The math doesn’t add up.
The change that brought the sales
Every step between your reader and your offer makes a sale harder.
It’s like walking people into your store, then sending them away for a course before selling what’s already on your shelves. By the time you follow up, they already bought somewhere else and forgot about you.
For my content strategy, I removed the intermediate steps. Social media and long-form posts -> products. Now I plug my book sales pages inside or at the end of posts.
With that simple fix, sales came in and I passed the $1 test. My first book, Street-Smart Coding, got two pre-sales within weeks of announcing it.
It wasn’t emails or “nurturing.” It was removing friction. A confused reader takes no action.
Remove the friction. Make action effortless. Let every piece of content be a sales representative.
11 Jan 2026 #misc
One day, a man approached a Zen master with a question.
“Master, what can a simple man like me do to become wiser like you?”
The Zen master said, “Well, I just sleep, eat, and talk.”
“Hmm, I already do that. But I’m not a wise man like you,” the man said.
“You may do that. But when I sleep, I’m simply sleeping. When I eat, I’m simply eating. And when I talk, I’m simply talking. When you sleep, you remember problems. When you eat, you use your phone. And when you talk, you think about what to ask next or how to answer.”
I first heard that story in a Sunday sermon, and it stayed with me.
It reminds me of a lesson from Eckhart Tolle’s The Power of Now. Our mind is like a time machine, taking us to the past (where guilt and resentment live) and into the future (where anxiety lives). But wisdom begins when we step off that machine and live in the present.