wicked programmer
helping developers everywhere innovate and learn
  • Home
  • Events
  • Publications
  • Learning
  • About

General

Searching for the “Perfect” Laptop!

Wicked Programmer June 7, 2019

As a consultant and a software developer, we need to be road warriors.  Hence the need for a laptop.  With the work that we do at MILL5, we are often called upon to do some amazing things quickly.  That means productivity is extremely important.  Then those amazing things that I spoke of are usually big things like “Make my entire application go really, really, really fast while doing millions of things”.  All of this means that we need killer laptops.

Here are our specifications for what we feel is the “Perfect” Laptop.

CPU:  8th Generation i9 8950HK (minimum), the more cores and faster the better

GPU:  RTX 2080 with or without Max-Q w/ 8GB

Memory: 64GB or better, 2666MHz or better

Screen Size:  15″ Screen

Screen Type: OLED

Screen Resolution: 3840 x 2160

Biometrics:  Windows Hello (minimum)

Storage:  Minimum of 3 Drives, All SSD, NVMe, PCIe 3.0 or Better

Storage Capabilities:  RAID 0

Ports:  Several USB-C and one HDMI

Battery:  99 Wh

Keyboard:  Per Key RGB

Bling:  Gaming Lights would be Cool!  (i.e. Alienware)

*** MUST RUN COOL ON IDLE ***

*** MUST HAVE ENOUGH COOLING TO RUN UNDER AVERAGE LOAD WITHOUT ENGAGING FANS ***

*** FANS MUST BE PREMIUM IF REQUIRED TO BE RUNNING ***

*** IDEALLY FANLESS AND SILENT ***

General/ IoT

Digging in with Industrial IoT

Wicked Programmer October 21, 2018

MILL5 has had the opportunity to build some amazing IoT applications and we continue to do so.  We build systems that connect surgery rooms, electric meters, oil wells, and more.  The end result are modern, cutting-edge applications that leverage today’s modern technology stacks.  Everything from realtime web-based applications using Angular and React to mobile applications that connect field technicians to IoT devices at the edge and container-based SaaS applications for IoT devices that run in the cloud.  Along the way we face the difficulty in building these modern IoT systems including:

  • Legacy devices that are still need to be supported
  • Operating systems that are geriatric and esoteric in nature
  • Code that is also geriatric in nature (i.e. 10 or more years old)
  • Custom device protocols with no available implementation
  • Both serial and network-based communication
  • Multiple competing industry standards/protocols (ex. OPC UA, MQTT)
  • Deprecated industry standards/protocols (ex. OPC DA)
  • Devices that do not implement modern security standards (ex. MQTT, TLS/SSL)

You find all of these challenges when you work with and build Industrial IoT systems.  You better be ready to sharpen your skills to be able to overcome these challenges.  For us at MILL5, it is a passion.  We like difficult problems.

Just today we are spending time reading up on a protocol that has been around for 15+ years.  We have had to look at both Visual Basic 6 and C code that was built over a decade ago and tried to compile it.  Unfortunately our first attempt was unsuccessful due to some missing dependencies.  Fortunately, we have a working version of the application and we were able to reverse engineer at the protocol level (Thanks Wireshark and Portmon).

You might think “Why are you doing any of this?”  The answer is that the customer has a ton of legacy devices and we need to be able to talk to them.  Don’t worry, it is not all gloom and doom, we will have our fun too.  We are building IoT Gateways using modern hardware (ex. Dell Edge Gateways for IoT) and Azure Sphere which talk to these devices and do protocol translation to MQTT.  The nice thing is that these modern devices help connect existing infrastructure and devices.

General/ Learning

Daily Update – Oh Yeah! Use UserName Instead of Email Address with Docker

Wicked Programmer October 17, 2018

Every time I have to do docker work, I forget that Docker for Windows needs to authenticate using your Docker Hub “username” and not your “email address”.  This is so confusing because Docker Hub will allow you to use your email address when you visit the website and from the tray application in Docker for Windows.

When you use your email address to authenticate with docker it creates all sort of problems with Docker for Windows and Visual Studio.  Running docker login from the Command Prompt shows the issue.  If you use your email address, it works fine on hub.docker.com and from the tray application, but you will experience issues with docker login and Visual Studio.  The issues include failed deployments, failing to start docker, failing to authenticate, and more.  All of these errors are almost random.  You can even get into a bad state where you feel that you have to reset docker.

 

General/ Learning

Daily Learning – Ugh! Guids As Primary Keys

Wicked Programmer September 23, 2018

I am working on fixing a database that uses GUIDs (i.e. uniqueidentifier) as primary keys.  Our customer does a high number of inserts and generates their keys from their application or from NEWID().  In addition, their primary keys are clustered.  There are many articles on the Internet that talk about the problem of using non-sequential GUIDs as primary keys.  Kimberly Tripp over at SQLSkills has a good article here.  The short description of the problem is that generating a non-sequential key can create fragmentation.  Unless you use a function that generates sequential GUIDs, like NEWSEQUENTIALID, you are bound to see fragmentation.  Additionally, a GUID is an unnecessarily wide key and can bloat your non-clustered indexes and add significant overhead in terms of wasted space and query performance.

I love GUIDs as keys, but not primary keys.  In order to fix this problem, I created a database generated identifier (i.e. IDENTITY) as the primary key with an integer (i.e. int) data type.  I then create a unique index on the original GUID which gives me the benefit of having the best of both worlds.  First, a small, sequential identifier that is highly optimized for querying, joins, and storage.  And second, a globally unique identifier which I can share outside my application.

NOTE:  We see this problem all the time.  That is what happens when you have developers manage your database.

‹ 1 2 3 4›»







Back to Top

© wicked programmer 2025