Blog

During the course of the day I encounter lots of challenges, some of which take minutes to solve and others that take much longer. My goal for this section is to keep track of these challenges and their solutions. I will turn the longer ones into articles, while the shorter ones will stay as blog entries. You can expect topics to range from very specific programming challenges to broader topics like life.

Below is a list of the recent blog entries. You can also browse the blog by using the tags on the right side, or if you know what you are looking for then you can use the search box at the top right.

CV19Assist Effort

In March of this year (2020), when the Coronavirus disease (COVID-19) pandemic was getting into full flux in the US, I, along with other volunteers, started an initiative to help with grocery and other essential item deliveries for at-risk population. With volunteer developers’ help, we launched right away. Later, we successfully concluded this initiative at the end of May once commercial services and grocery stores caught up to the delivery demand surge. This page hosts the last remnants of that effort, and the cv19assist.com domain now redirects to this page.


About Page

The world is facing the biggest outbreak of the viral illness, Coronavirus Disease (COVID-19). COVID-19 belongs to a large family of viruses, which get their name from the crown-like spikes on their surface, and include other diseases like Middle East Respiratory Syndrome (MERS-CoV) and Severe Acute Respiratory Syndrome (SARS-CoV). The disease is believed to be spread by person-to-person contact, i.e. between people who are in close contact, and through respiratory droplets produced when an infected person coughs or sneezes. People are thought to be most contagious when they are symptomatic, but asymptomatic transmission is of significant concern. Most people have a mild flu-like illness; however, older adults and people with serious medical conditions, like heart disease, diabetes, and lung disease are at increased risk of developing a severe illness.

One of the most effective strategies to reduce the transmission of COVID-19 is avoiding exposure to the disease. Keeping older and at-risk population disease free will go a long way in “flattening the curve” and reducing the potential strain on medical services due to a sudden rise in patients requiring hospitalization. We believe the most productive way to achieve that goal is by taking initiative at the community level–providing a platform to bring together those in need and those willing to help.

To accomplish this, CV19Assist is a network where people at-risk can quickly and easily connect with volunteers willing to help. Among other things this includes requesting assistance for tasks like grocery shopping and getting medications.


Press Coverage


Final Blog Post

Here is the final blog post summarizing the effort.

Looking Back, Looking Ahead

By Farhan Ahmad – 2020-05-29

Hello Volunteers!

We hope you are staying safe.

Two months ago, we started the CV19 Assist initiative to help flatten the COVID-19 curve by helping the at-health-risk population minimize their exposure to the virus. We went live with the website within a week of our announcement. We have focused mostly on the local Madison-Wisconsin geographical area and got some good news coverage. This coverage helped us enroll about 250 volunteers who graciously offered to help with deliveries and all other tasks.

Overall, although reaching out to our target demographic has been a bit challenging, we still did a lot of good. Below is an excerpt from one of the requests.

I am 75 with no family nearby to help. I have already placed and paid online for an order for curbside pick up at … This is such a blessing! Thank you so very, very much! I was thinking about cancelling the order because the church can’t help so I had planned to go get it myself but now the CDC wants us old folks to be extra careful to not go any where at all this week or next, so I’m scared to do it. Again, bless you! This is such a wonderful blessing! Thank you so very much.

Besides the numerous grocery deliveries that the volunteers made, we also provided about $2,500 worth of financial aid, which was funded by the Madison Muslim community.

There have been many volunteers who helped with software development, but we would like to give a special shoutout to Prescott Prue, Deniz Simsek, Maaz Baig, and Jessie Luo for all their extra effort.

Now that the grocery stores and delivery companies are catching up with the demand, and as our society is learning how to better deal with coronavirus, we feel that we have achieved our initiative’s goal. In the coming two weeks, the development team will be adding email notifications in case we get any more requests (as the website will still be up and running). Besides this last set of changes, we are not planning on making any more changes unless the need comes up again (which we hope does not!!). If you do see more requests come from CV19 Assist, please help fulfill them as you have done in the past.

On a general note, if you have COVID-19 related needs or are helping others in need, please check out the very helpful, volunteer-created http://www.madisoncovid.com/. If you are curious, the source code for our website is available on GitHub at https://github.com/cv19assist.

Lastly, whether you got the opportunity to make a delivery or not, we want to thank you very much for signing up and making yourselves available to help those in need. You are the best part of this initiative, and we hope our world gets to see many more like you.

Stay safe!

  • Farhan Ahmad, Saad Baig and Steven Knurr – CV19 Assist

MacBook Pro Wireless Roaming

It has been a while since I have had to set up a new MacBook Pro so I forgot about all the small things that I had changed over the past few years. I have some interference issues at home that I am still trying to resolve, but in the meanwhile I set up a second slightly older access point that I had lying around. I noticed that my MacBook Pro wasn’t switching when it got closer to the second access point (AP).

Read full post… “MacBook Pro Wireless Roaming”

Tesla Autopilot’s Odd Behaviors

I couldn’t resist the Tesla fever and finally took the plunge a few months ago. Since then, I have been absorbing the Tesla ecosystem and observing everything that it has to offer. I have been especially intrigued by the Autosteer (part of “Autopilot”) functionality because that’s one of the game-changing features that Tesla is offering. Here are a few odd behaviors of the system that I have observed so far. Note that most of the Autopilot features are currently in Beta, so I am always careful when using it, and I am also expecting that Tesla will work out these kinks as it continues to improve the system.

Read full post… “Tesla Autopilot’s Odd Behaviors”

Entriway – Overkilling it with a Raspberry Pi

Raspberry Pi Model 3 with the PiTFT
Raspberry Pi Model 3 with the PiTFT

As a “prosumer” I have liked the Ubiquiti equipment because it’s not too expensive and at the same time provides advanced functionality that I like to tinker with. After switching to an EdgeRouter, I recently swapped one of my two access points with the UniFi nanoHD access point. The EdgeRouter works independently, but the UniFi HD provides a lot more options when controlled using the UniFi Controller. For this, I had a Raspberry Pi 3 lying around so instead of getting the UniFi Cloud Key, I decided to set up the controller on the Raspberry Pi.

I work from home most of the days and generally keep my office door closed to keep distractions to a minimum. I also tend to be on video and audio calls quite a bit. When I am talking on the calls, then it is easy for my family to know not to come in, but when I am listening, then they obviously cannot tell. There have been times when I am on video calls and have had a family member walk in, not knowing. Those can be awkward at times.

Raspberry Pi running “Entriway”
Raspberry Pi running “Entriway”

Now, what does this all have to do with the Raspberry Pi? In addition to the Raspberry Pi, I also had a 2.8″ Adafruit PiTFT lying around that I did not end up using in another project. I was planning on having the Raspberry Pi running all day for the UniFi Controller anyway, so why not give it another purpose? So, I decided to create a small digital sign that I could control remotely and put it outside my door for people to know what I was up to. Overkill? Why, yes it is, but it was also fun. Actually, the real overkill would have been this solution running on a rechargeable battery! I called this the “Entriway.”

Read full post… “Entriway – Overkilling it with a Raspberry Pi”

How to try out macOS Mojave without messing with your primary install

I am generally excited to try out new software.  This was the case when Apple announced the public betas for macOS Mojave recently.  I was excited to try out the public beta, but I didn’t want to mess with my primary setup.  Unfortunately, my older spare MacBook Pro is no longer supported by Mojave so my only option was using my primary MacBook Pro, which was a little scary.  After looking around for a little bit, I learned that I could install Mojave on a new partition without messing much with the existing install.

Read full post… “How to try out macOS Mojave without messing with your primary install”

Getting to a Shell in Alpine Linux on Kubernetes

I have lately been experimenting with Kubernetes and containers.  As I was playing around with a few configurations I had the need for exploring a container’s contents interactively.  Kubernetes’s dashboard has functionality to get into a container, but it assumes that you are using the bash shell.  Unfortunately, any Apline Linux-based container images do not have bash installed so we have to resort to other options to get access.

Alpine uses the busybox provided ash shell (which basically a symbolic link to /bin/busybox).  To get to the prompt you have to run.

kubectl exec <POD_NAME> /bin/ash -it

Ansible/win_get_url downloading 1KB file?

I have recently been looking at using Ansible for managing some Windows-based web servers.  Fortunately, I was able to get the authentication configured properly, but as soon as I got to downloading PHP, the Ansible win_get_url module started behaving oddly.  It downloaded some other files as I would have expected, but it would download the PHP distributable as a 1KB file.

Read full post… “Ansible/win_get_url downloading 1KB file?”

Apache Benchmark (ab) tool acting slowly?

I recently needed to do some informal HealthDecision API concurrent session testing. I decided to try out the Apache benchmarking tool (ab).  Given that I needed something quick, I started a new HealthDecision session in the browser and used Chrome Developer Tools’ copy as cUrl functionality to get the headers and the POST data.  This obviously worked on the command line, but each request was taking close to six seconds when I used ab!

The request something like this…

ab -n 1 -c 1 -H 'X-Session-ID: XXXXXX' -H 'User-Agent: curl/Farhan testing'-H 'Connection: keep-alive' -H 'X-Session-Passphrase: XXXXXXX' -H 'X-API-Key: XXXXXXXXXXXXX' -T 'application/json' -p post-data.txt 'https://dev.healthdecision.org/...'

It didn’t make much sense at first sight because the exact same request was less than half a second every time.  I tried running with output turned on (-v 4) and could see that it was waiting after it received the response from the server.  After some more troubleshooting, I finally realized that it was the keep-alive header causing ab to wait for the connection to close!

Lesson learned, pay very close attention to the headers.

How to split chunks in Webpack 4.0

Webpack 4.0 was released a few days ago.  I happened to be in the middle of updating an older app and decided to jump to this version; especially because the webpack team is claiming a significant improvement in compile times (up to 98%!). Read full post… “How to split chunks in Webpack 4.0”

cURL error 77: error setting certificate verify locations: CAfile

I recently started randomly seeing the following error in a development environment for a PHP application that I am maintaining.

cURL error 77: error setting certificate verify locations: CAfile: c:\<<Path removed>>\cacert.pem CApath: none (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

What was weird was that the CA file existed at the path that was shown in the error.  Restarting Apache seemed to fix the issue for a little bit, but then the issue would come back.

Read full post… “cURL error 77: error setting certificate verify locations: CAfile”