Having fun with philosophy and zombies.

I like to talk about the various philosophies of Software Engineering. Today I want to do a little exercise in the philosophy of consciousness.

You are most likely the only conscious person right now, or there are multiple consciousnesses experiencing your life.

This is a play on the philosophical zombie argument, but bear with me.

Need to make a couple assumptions for this to work:

  • The future and past exist in spacetime and cannot be changed. What is going to happen cannot be changed (Hard Determinism)
  • At the very least you exist and are conscious
  • Your consciousness only experiences a tiny sliver of reality at any given moment, this sliver is almost infinitely narrow.

Here’s my argument:

  1. You are either the only person conscious or there exists many consciousnesses.
  2. If you are not the only consciousness than you are only experiencing your life at a very specific point in 4D spacetime. Your consciousness is like a record needle on the record of spacetime, only experiencing the exact note under your needle at that moment.
  3. Your consciousness experiences time passing at a different rate than other consciousnesses. When you sleep your needle skips ahead, when moving at different speeds (say close to the speed of light) your consciousness experiences spacetime at varying speeds, there are a multitude of things that can affect the rate your consciousness travels through spacetime.
  4. Given you only experience a moment in time; just a sliver or frame, the chances of two consciousnesses; both traveling through spacetime at different speeds, passing through the same moment in spacetime is infinitesimal or virtually impossible. Like multiple needles moving across a record at different speeds, it’s impossible for them to both stay in sync.
  5. The only way to combat the infinitesimal odds of experiencing reality with another consciousness for there to be an infinite number of consciousnesses, meaning there must be other consciousnesses experiencing your point of view or life.
  6. Conclusion, you must either be the only consciousness at this moment, or there are an infinite number of consciousnesses and more than one experiencing your life or point of view.


Last year I ran into a solution composed primarily of WebJobs processing queue items. The daily bill for the WebJobs plus the associated storage account averaged out to about $800 a day.

These services processed several million queue messages a day.

We attempted to use the WebJobs dashboard for debugging but given the quantity of requests the UI was mostly unusable. In order to cut down storage costs we turned off the WebJob dashboard by removing the AzureWebJobsDashboard connection string.

This change cut the cost down to a little over $400 a day. Almost $150k year saved by turning off an unusable feature.

As far as I know this is only relevant to legacy WebJobs before version 3. The official documentation has also been updated to note WebJobs dashboard shouldn’t be used in high throughput production scenarios.

Might be old news to most WebJobs users, but I’m sure there are quite a few production deployments out there with this still enabled. If you’re one of them hurry up and disable it. Turn it on when you need to do debugging, If you need persistent logging look into an Application Insights implementation.

A personal AirBnB host story: a fast growing start-up and nightmares that come along with it.

This isn’t exactly development related, but I’ve spoken about my own startup experiences on this blog.

The holy grail of tech business models requires massive scalability with limited lability.

When comparing AirBnB with another fast growing startup like WeWork, they look similar on the surface, but one is failing while the other continues to grow. One of the primary reasons for this is AirBnB managed to offload almost all of its liabilities to individual property owners; meanwhile WeWork is stuck with nearly 50 billion in lease liabilities.

So, back to the story. Back in September I purchased my neighbors house and moved into it. I’m considering selling my old home next Spring, but until then AirBnB looked like the best option for covering the mortgage.

My listing: link

We hosted our first guest mid October and it has been a wonderful experience. AirBnB had been mostly easy to get a hold of and deal with, and the guests have been respectful and clean. Overall its been a positive experience; up to our most recent guest.

Bad Guest (BG) timeline

Going forward I’ll refer to the “Bad Guest” as BG.

October 30th – BG books home for a single night and single guest. BG’s profile also notes that she lives in Seattle, which is about 15 minutes from the rental property. This might sound strange, but about half of our guests have been from the local area. BG messages us and asks for our phone number, we respond that we can be reached through the app, and that if they need anything we live next door so they can stop by.

BG does not respond and we do not hear from them again.

November 16th (Check in day) – We message BG with the login code and welcome them to the home. No response from BG.

The rest of the events take place on the date of check-in so I will be using timestamps from here forward.

2:00PM – We leave for a movie and dinner.

8:00PM – We return to the neighborhood to find the street filled with cars. Our driveway is blocked and I am unable to park.

8:05PM – I notice the rental’s windows are full of Balloons. I decided to stop by and check if the car belongs to the guest. I knock and the guest opens the door. The home is full of people and I notice all the furniture is moved. Looks to be about 20 or more people from what I can see. I notify them they are in violation of the rules and that they need to move their car. BG says they will move the car, and says they will wrap the party up.

8:10PM – I park my car and go inside my home. From what I can see the guests looked to be having a quiet and respectful party, even if it was against the rules. Since they said they are ending the party I decide that I will just charge them the extra guest rate and an additional cleaning fee.

8:30PM – I call AirBnB to notify them that the guest is in violation of house/AirBnB rules. They drop my call. I call back 3 more times, each time AirBnB drops my call when “transferring” my call.

8:40PM – I finally get through to a case manager, tell them the situation and they ask if I would like to cancel the reservation. I told them they informed me the party is being wrapped up so I just would like to get an additional cleaning and guest fee. They give me instructions for doing that through the app. I slowly see families with children trickle out of the house. It looks like the party is wrapping up.

9:00PM-9:30PM – More guests arrive, many carrying six packs and bottles of alcohol. Mostly younger people in their 20s. People spill out onto the deck, people can be seen drinking and smoking.

9:30PM – I message the guest and tell them to stop the party immediately. No response. I call AirBnB and get assigned a case manager who is extremely rude from the start of the conversation. I tell them I want the reservation canceled and the guest to notified they need to leave the property. AirBnB case manager notifies me I will not get the reservation or cleaning fee money, I ask if the guest is going to be refunded, the case manager says no they will not be refunded.

Confused I ask the case manager why AirBnB would keep the money for themselves due to someone breaking policy. Case manager tells me nobody is getting the money and it is just “gone.” I decide to deal with this later, and ask them to just have the reservation canceled. Case manager tells me they will contact the guest and get back to me.

10:30PM – More people arrive; no word from AirBnB. I call AirBnB and get a new case manager who tells me they are recovering from a cold, they sound very sick, but are extremely helpful. She informs me that they are unable to find the original case manager, and are unsure if she has left. The new case manager takes over my case and contacts the guest. Guest hangs up on case manager and sends calls from AirBnB to voicemail. New case manager informs me that the previous case manager was misinformed and I will still receive payout and the cleaning fee.

10:40PM – I head next door and start knocking on the door. I hear yelling inside but its in a language I do not understand. I continue knocking and they refuse to open the door or speak to me.

10:45PM – I call the police.

11:00PM – Police arrive. I speak to them and they ask if the person has a reservation, I tell them they did but it was canceled due to violation of house rules, and AirBnB policy. They tell me I need to give them their money back. I tell them that I don’t have the money and it’s held by AirBnB.

Police still haven’t spoken with the guest or approached the house. I inform them that the house is licensed, I have a local business license, and by local city and fire code it is illegal for me to even allow parties in a short term rental or have this many people on the premises. They ask me to return to my home and they’ll speak with the guest.

After speaking with the guest they come back and tell me they can’t ask them to leave because this is a “civil matter.” The police also tell me that “99% of the people there are extremely intoxicated and we really don’t want them on the road, we prefer if they stay through the night.”

So, the police inform me they won’t ask people who are now trespassing on my property to leave, and shame me for wanting them to leave.

12:00AM – I hear banging outside and see the guests are throwing trash into my compost bins and look to be leaving. I watch as they carry limp bodies out of the house, they lay one girl on the porch and allow her to throw up on the floor before loading her into a car.

12:15AM – While loading people into a car they put it in neutral and it begins to roll down the hill, almost crushing two people between it and another car. After lots of screaming and people scrambling around the car they get it into park, blocking my driveway again.

12:30AM – Guests are blocking the entire street with cars as they figure out who is able to drive. They begin leaving; they attempt to abandon the car in front of my driveway. I tell them to move the car and someone jumps inside of it and parks it two houses down (it’s still there currently.)

12:40AM – Guests are gone and I head over the access the house. The porch is covered in vomit. Dining room and kitchen floors are covered in some sticky substance. Paintings and artwork is removed from the walls and stored in one of the bedrooms. Small stains on chairs and couch. Random pieces of trash are scattered around.

Dirty, but overall no major damage.

Going Forward

Will be restricting single night single person bookings from locals unless they have previous reviews.

I plan on getting in contact with the local PD to discuss short term rentals and how to handle situations like this. This is relatively new to the area and laws regarding short term rentals just went into effect this year.

As far as AirBnB goes, I believe this just comes with the territory. I would advise anyone looking to host on AirBnB to not attempt it with remote properties that they do not have the ability to monitor closely. Do not expect AirBnB to handle guest issues for you, you’re on your own. Same for local authorities. Until this matures more there is going to be a lot of confusion for everyone involved when an incident comes up. With massive scalability comes a lot of growing pains.

Setting up basic cost alerts in Azure

Following up on the last post about simple cost analysis in Azure, this post will cover setting up basic cost alerts in Azure.

In our case I want to set up alerts on the resource group containing this WordPress blog.

First, go into the resource group. Then click Budgets in the left side menu.

Once on the Budgets page click add.

My budget will be $75 per calendar month, and I’ll have it expire 2 years from now. Once you set the budget details click next. Here you will be able to set alerts for your budget.

In my case I want to know when I get close to my budget, and when I exceed it. So I will be creating two alerts, one at 75% and one at 100% of my budget. I won’t be specifying action groups, that is a more advanced subject I’ll try to cover another time. I will only be using the email alert option.

Once that is all filled out, click create. You’ll be redirected to the budgets page where the budget you just created should now be showing.

Congrats! You now have budget alerts set up.

Cost of running a WordPress blog on Azure. AKA: How to do cost analysis on your Azure Subscription

So, I’ve been running this blog for a few weeks now. Long enough to give you all some insights into how much it costs!

For details about how this site was deployed see this post: Installing WordPress on Azure

Thankfully with Azure Cost Management + Billing its really easy to analyze the cost of your resources.

This should be a short post.

Go into your subscription or resource group. In our case we’re going into the resource group containing all our WordPress blog resources.

Next, click Cost Analysis in the left hand menu.

From this view you can select your scope (by default it will be the scope you’re currently in), the grouping, date range, and filtering options.

Here you can see the cost of all the resources in the resource group over the last week.

We’re barely breaking a dollar a day right now, but we have promotional pricing on the Linux app service, which continues through the end of 2019. After the promotional pricing ends the cost will be up to around $40-$50 a month for the app service, doubling our daily cost to a bit over $2 a day.

So how much does it cost to run a “production” WordPress blog on Azure? About $70/month without promotional pricing.

See our next post on budget alerts for setting up cost notifications.

The hardest problem is not always technical execution.

Elm Food, my food and symptom tracking MVP

A little over a year ago I was reflecting on my career as a Software Engineer and came to the conclusion that I wanted some more control over what I worked on and wanted to feel the responsibility of being in full control of a project form ideation to delivery. I wasn’t in a position at my day job to walk in and demand full autonomy on a project of my choosing, and I don’t have the financial resources to quit my job unnecessarily to pursue my own project.

Given the constraints I decided to dedicate my free time after work and on weekends to a project that was personal to me.

I have a relatively sensitive stomach, which became even more sensitive over the previous summer. Faced with this, I started using various food tracking apps in the hope of drawing a correlation between what I ate and how my stomach felt.

Some of these apps even attempted to solve the exact problem I faced, but their analysis was deeply flawed, and their reports were full of false conclusions.

Being a Software Engineer I approached the problem the way I normally do. I exported the raw tracking data and built a python script that did simple statistical analysis and exported a spreadsheet with all the foods I’ve tracked and their correlation with good and bad stomach symptoms.

This first report brought me to the realization that the salads I started to eat on a daily basis in order to ease my stomach problems were directly correlated with an increase in stomach issues.

I cut out salad, my stomach improved slightly, and I was determined to explorer this further.

Next, I scoured the internet to find anyone else using the food and symptom tracking app I used. I found a woman willing to run my analysis on her data. She appreciated the spreadsheet I gave to her, but had some trouble deciphering it. Still there was some insightful information she found useful. A few more people were willing to share their exported data, but most struggled with exporting the data and emailing it to me.

There was a technical understanding boundary between me and collecting the data I needed. To continue with my MVP, I needed to build an easy to use app which would provide my algorithms with the data needed to generate reports. Those reports also needed to be presented in an easy to understand way; a spreadsheet with correlation stats was not going to work for most people.

I went down the road of learning Swift and iOS programming. All was going well but it was going to take me several months before I could deliver. These were new technologies to me.

I needed to leverage my core skillset and deliver this faster. I reconsidered my approach. What was I trying to build? A polished iOS app? No. I was trying to build an easy to use interface for logging food and symptoms, and for viewing reports. I could do this much faster by building a mobile website with an Azure cloud powered backend. These were skills I already had.

Elm Food landing page

Within a week I built out the tracking functionality of my application and released it as a beta. The reporting functionality was not complete, but I needed at least a week of tracked data before I could generate useful reports anyways.

On the report section of my application I put up a notice:

“Our algorithms require a week’s data before we can display your results.”

This gave me a week to complete the report processing service.

The reporting engine was complete six days later and on the seventh day I took down the notice and started allowing users to view their reports.

Early users were happy with application, but I struggled to find new users to onboard. Many were not tech savvy and still confused with its usage. One user wrote an angry email asking why my useless app was unable to tell her what foods would give her symptoms BEFORE ever trying them.

I’m a Software Engineer. I have not worked in healthcare. I have not worked extensively with non-tech savvy users. I made the mistake of thinking that if I could build something, the rest would figure itself out. Turns out engineering is not always the hardest problem.

Several users continued to use the application on a regular basis, but the numbers dwindled, and I shut it down three months after launch.

By no means did I consider it a failure, I learned quite a bit, but for now it sits in my GitHub repository gathering dust.

Every. Manager. Is. An. Architect.

The natural progression of a system will lead it to fill the confines of the structure it is contained in. 

Therefore, the first act in architecting a system is defining the structure that contains it. 

When a system exists in opposition to its containing structure, this is a problem; the result will be the destruction of the system, container, or both. 

Last week I reviewed the design of two different systems. At a high level they both accomplished the same goal, but nonetheless their designs differed. 

The first was developed by a single team; it had no clear security, data, or communication boundaries within its implementation. The second, developed by two teams, was composed of two distinct and loosely coupled services which communicated with each other through a single externally developed service. 

Their architectures mirrored the developing team’s organizational structure; their designs influenced more by the organization in which they existed, than the problem they solved. 

The scenario above is not unique, and has been observed in software for decades (see: Conway’s law.) Yet we rarely expect leadership; the people who dictate an organizations structure, to have the technical ability to architect the systems developed under them. 

If you want to improve the design of the systems in your organization, you better invest in making your architects into managers, or your into managers into architects.

How to get your data in Azure Data Explorer for dummies

I entered the Azure Data Explorer (ADX) world recently after primarily working with Azure Tables, SQL Databases, and Cosmos DBs over the past few years.

When I moved onto ADX I approached it like I was working with the databases I’ve become so familiar with. ADX is not like the databases I had been working with and required that I adjust my though process around working with it.

Querying data in ADX was straight forward enough but getting data into ADX was not. While there are methods of synchronously inserting handfuls of records at a time, these methods are not intended for production use. If you plan on using ADX for individual or small create, update, and delete transactions you’re probably better off looking elsewhere.

Quickly, while we’re on the subject of updating and deleting. For the most part this is not supported in ADX. Tables and databases support retention polices where on insertion to ADX you can specify the time to live of the data being inserted, so if you know you only need the inserted data for a specified amount of time before being cleaned up, than this is natively supported. There are very inefficient methods of deleting a single record, but this is only implemented for GDPR use cases, and should be treated as a last resort. There are also methods of deleting whole blocks of data; you don’t need to worry about this until you get into advanced use of ADX.

Anyways, moving onto what this is really about. Getting your data into ADX.

When thinking about ingestion you first have to decide if you’re going to tell ADX when to ingest your data, direct ingestion, or if you’re going to tell ADX where your data is and let it decide when the best time to ingest is, managed ingestion. For most use cases, if your workload supports the managed model this is the most efficient and recommended method of getting your data into ADX. The managed model allows ADX to handle the distribution, rate of ingestion, and clean-up of ingested data. If you opt for a direct model, you will be forced to handle orchestration of your ingestion to prevent overloading the cluster with ingestion requests, but you will have more control over every aspect of ingestion.

Managed and direct are just the models, which are implemented by a wide range of SDKs. The following are the most common methods of ingestion:

Inline ingestion (Direct Ingestion)

Specify the data to be ingested (inserted) right in the query itself. This method is not intended for production use and is commonly used in the development phase or for small one-time ingestions.

Ingest from query (Direct Ingestion)

Write a data explorer query and ingest the results from that query execution into another table. This can be used across databases and clusters. This is typically used for generating reports and storing them into another table. For best performance the result sets should be less than 1GB, if you need to work with larger sets, batch it into multiple smaller sets.

Ingest from storage (Direct Ingestion)

Tell data explorer where the data is that needs to be ingested; a blob URI for example, and it will pull it in to be ingested.

Queued Ingestion (Managed Ingestion)

Similar to ingest from storage, however with this method you queue up a request with the location of the data to be ingested. This allows the cluster to determine the best time to do ingestion. Once it has capacity it will pull an item from the queue to be ingested. This is the most efficient and best method for ingesting large quantities of data, but could result in longer latency from when the ingestion request is sent to when the data is ready for querying.

For more info check out the Azure doc on this subject: ADX Data Ingestion

Confused? Need more info? Leave a comment and I’ll try to get you sorted out.

Cultural Inclusivity is a dead end without creativity.

Imagine hosting a dinner with all your closest friends.

Before the dinner you had asked everyone to bring their favorite meal. One by one as people arrive you take their meal, and dump it on a single platter in the middle of the table. Once everyone has arrived you all sit down to share this unrecognizable heap of food.

Sound appetizing?

This is the naive approach most companies, schools, and organizations take to cultural inclusivity. The forced inclusion of every member’s culture without a thread of critical thought.

Let’s imagine this dinner party again, this time the host doesn’t take anyone’s preferences into consideration and instead cooks what they believe will be the most enjoyable meal for everyone.

This might be better than an arbitrary heap of food, but still not ideal.

We see this in organizations that impose a pre-defined company culture from the top down. At the very least there is some thought put into it, but it exists without input from most of the people who make up the organization, who are not invested in it given they had no input in its creation.

Again we’ll imagine this dinner party. Like the first example the host asks everyone to bring their favorite meal. Unlike the first example everyone sits down and enjoy’s their own meal.

Not bad right?

In this scenario everyone get’s to enjoy what they like, and possibly even share it with those interested. This example is seen in organizations that encourage individual expression. It’s the best example so far, and requires the least effort on the part of the organization, but it can still be improved upon.

While the previous example can result in increased satisfaction for individual participants in an organization, it does little to grow the organization as a whole. Individuals maintain their identity, but it does little to build their investment in the organization.

Finally, we’ll imagine this dinner one more time, however this time everyone comes with the expectation that they’ll be cooking. They plan ingredients, plan dishes, and work together in the kitchen to create something unique to everyone.

The first dinner may or may not be very good, but it will have aspects of everyone involved, and will get better with each iteration.

This will take trial and error, and will evolve over time as members come and go. It takes more creativity and critical thinking, but what you end up with is an evolving culture unique to the organization and its members. A new culture which develops organically and is inherently inclusive of those involved in its creation.

Organizations are not dinner parties though. As to what this looks like in practice, check back for my next post on this subject.

Fixing HTTPS issues for WordPress hosted on Azure Linux App Services

Shortly after deploying my WordPress site I realized I was having a few issues with HTTPS. I thought it would be as simple as changing the site URL in WordPress and turning on force HTTP in Azure. It was not that simple…

Thankfully there’s not too much you need to do, it took me a few hours to figure it all out, but hopefully this will save you the time I wasted.

Step 1: Enable HTTPS on the Azure App Service

Open your App Service in the Azure portal and enable HTTPS only.

Step 2: Update/Create .htaccess file

Create a .htaccess file in the root directory of your website with the following within it

RewriteCond %{HTTP:X-ARR-SSL} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Step 3: Update wp-config.php

In your wp-config.php file add the following before the MySQL settings

define('FORCE_SSL_ADMIN', true); 
if ( isset($_SERVER['HTTP_X_ARR_SSL']) ) 

Step 4: Update site URLs with HTTPS in WordPress admin

Navigate to your admin portal in WordPress. Click Settings -> General in the sidebar and change your WordPress Address and Site URL with https:// in place of http://


You should be all set with HTTPS after following these steps. If the website is failing to load after changing the URLs in step 4 then you can revert them by changing the database settings or by updating your wp-config, see this document for more information: https://wordpress.org/support/article/changing-the-site-url/#changing-the-site-url