How to spot phishing attacks

TL;DR; Stay woke! Always be suspicious, especially of things too good to be true.

Like every parent, my Mum cares a lot for us, and she’s always looking out for our progress. So this morning, she sent me this:

At first glance I was like whoa! The USA is opening its doors like that?

Then I saw the email address, and became suspicious. I then visited americaimmigration.us and saw this:


What we learnt before, during and after

On Thursday, July 30th, 2020, we created the twitter account for FindTreasure.app, and made its first tweet:

What followed was an interesting 24 hour journey of making sure the game was a success.

If you’re not familiar with how FindTreasure.app works, I suggest you check it out, and play the Test game at least before continuing.

During this time, we learnt a few things about User Behavior and Developer mistakes we think are worth sharing.

1. Every loop hole will be exploited

While building, we considered that a Contestant can create multiple accounts, and run parallel instances of their script, with different JWTs obtained when creating…


Dell XPS 15

I got a Dell XPS 15 Laptop recently. It is a thing of beauty, except when the Touchpad just stops responding, and only click-and-drag mode seems to work, so I have to restart the Computer to get it working again.

Fix — Using Device Manager

Restarting every time is a terrible solution, so I began to check what else I could do to fix this.

I found that disabling and enabling the “HID-compliant Touch Pad” device in Device Manager, fixed the problem every time.


Let’s play a speculation game.

Imagine you’re tasked to scale a tailor shop to provide same-day sewing and pickup of any dress.

How would you do it?

Note: It should support Owambe dresses with the most custom fittings.

It’s a compound problem, made up of some really complex problems people have been solving for decades.

Problems like

  • Supply MGMT
  • Maintenance
  • Employee MGMT
  • Assembly Line Design and MGMT
  • Generic Representation of Garments for sewing
  • Fitting

Should be fun.

I’m incredibly naive about sewing, and most of the above topics, so feel free to not take me seriously.

Our Goal

The goal is clearly…


I remember the way her voice rang out when she was excited.

I loved how excited she got when talking about the things she was passionate about.

Music.

She visited a few days after Olowo Gbogboro came out, and it was all she could talk about. Apparently, she’d stayed up until it came out, and she wrote about it on her blog asap, a post which got a then astonishing number of views in a short period.

Social Media.

Her Facebook was always bubbling with activity. She was quirky, fun, and could have serious conversations on a broad range of topics.

Non-mainstream movies.

Christianity.

Esther was…


The Romans had a deity called Janus, a two-headed figure who could look into the future and the past at the same time. He was the god of door-ways and decision-making, and it is for him, that the month of January gets its name.

I’m at a point in my life, where I find myself almost a spectator of my own history. I think I’ve always sucked at making big decisions. I either try to delay it till I can’t anymore, or choose an option with a decision making process that may as well be rolling a die.

I feel…


Especially in dotnet core 3.0

1. Computed Columns do not work with Sqlite

It used to be that EF Core would ignore computed columns, but in dotnet core 3.0, I have to conditionally add my computed columns to the model builder.

if (!Database.IsSqlite())
{
builder.Entity<Person>()
.Property(bl => bl.Age)
.HasComputedColumnSql(...);
}

2. Use Database.EnsureCreatedAsync(…) for MsSQL and Sqlite

For performing a DB Migration at runtime, I used to think EnsureCreated(…) and its async EnsureCreatedAsync(…) counterpart would only create the database if it does not exist. However, it will actually perform a migration, if the database did not previously exist, and do absolutely nothing if the DB exists already.

I also noticed it does not work well with MySql via Pomelo, which…


Today, I faced the nastiest bug 🐜 in my code, when upgrading a Web API project from 2.2. to 3.0.

The API response was consistently an MS Excel file.

The API response was consistently an MS Excel file, no matter what the request’s Accept header was.

I knew the API had multiple output formatters, and it worked well in 2.2, so what could be wrong? My MVC setup in my Startup.cs looked like:

You might have noticed that Mykeels.ExcelOutputFormatter is first added to the OutputFormatters property in the MVC options.

This turned out to be the reason, and it was surprising because it was never a problem before.


From an existing one in .NET Core

Like me, you might have injected a DBContext into your web app’s service provider with Startup.cs, and now need to create a new instance of it on the fly, because multi-threading.

Or you just need to create a new instance manually, for whatever reason.

await foreach (var image in query)
{
using (var _newContext = new MyDbContext(_context.Options))
{
...
}
}

Where _context is a MyDbContext instance, injected into my constructor by the service provider.

Tweaking the MyDbContext class

You might have noticed I passed _context.Options as an argument into MyDbContext's constructor.

That’s because MyDbContext has the following constructor definition:

public MyDbContext(DbContextOptions<MyDbContext> options): base(options)


Error NETSDK1045: .NET Standard 2.1, .NET Core 3.0

I just installed .NET Core 3.0, and began trying it. However, running nuget restore on my sln give the errors:

error NETSDK1045: The current .NET SDK does not support targeting .NET Standard 2.1
error NETSDK1045: The current .NET SDK does not support targeting .NET Core 3.0

To fix,

  • Check that you have dotnet core 3.0 installed with dotnet --list-sdks
  • If you do, create a global.json file in the root of your project(s) directory:
{
"sdk": {
"version": "3.0.100"
}
}

Enjoy!

Ikechi Michael

I’ve learned I don’t know anything. I've also learned that people will pay for what I know. Maybe that's why they never pay.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store