All blog posts and articles.
Posts
Peto quia peto or App Store Age Gates on All Ages Content
René Descartes, contemplating his own existence declared “Cogito ergo sum” – “I think, therefore I am.” And with that, he stopped questioning whether the world he experienced was piped into his mind by a demonic force and moved on with his life. The fact that he could doubt, he concluded, was foundational proof of his existence. App Store Accountability Acts have started to roll out in states like Texas and Utah (Virginia has a version that has been continued to 2027). These laws place liability on mobile App Stores and app developers to check whether the user of a device has parental permission to download and use the app. Parental permission can be granted by “a parent or guardian or the Family Organizer … always … ask the child everytime … never.” Unless you live in Texas. If you create an Apple account in Texas you will always share your age range with developers and there is no way to turn the sharing off. How do the app stores verify age? Apple checks whether a user is over 18 by requesting the user to add a credit card (not a debit card!) to their account, checking how long the user has had an Apple account, or by analyzing a picture of a user’s government issued identification card. If a user cannot pass one of these checks, they are required to attach their account to family user group in order to set up parental consent.How to Set Up Claude Desktop with Docker MCP Toolkit on Ubuntu
Getting Claude Desktop working with Docker Desktop’s MCP (Model Context Protocol) toolkit on Ubuntu requires a few manual configuration steps. This guide walks you through the complete process, from installing both Docker Desktop and Claude Desktop to successfully connecting them via MCP integration.
Prerequisites
- Ubuntu Linux system
- Basic familiarity with command line operations
- Git installed
Step 1: Install Docker Desktop
First, install Docker Engine and then Docker Desktop:
Definition
Technology use in this document refers to personal computing devices such as computers, phones, and tablets to access content on the internet or local device. This includes specific concerns related to social media, video games, extreme content, and online communities.
Goals
- Help our children use technology to enhance their development and learning
- Develop critical thinking skills to recognize and resist digital manipulation and exploitation
- Teach children to view technology as a tool with specific benefits and limitations
- Help children understand the tradeoffs of using technology for entertainment
- Establish healthy device habits that prioritize physical presence and real-world engagement
Understanding Technology’s Impact
Digital Literacy
- Identify what specific problem a technology helps solve
- Understand how personalization algorithms work and their purposes
- Recognize the business models behind “free” services
- Learn how to evaluate information sources for credibility
Online Safety
- Recognize manipulative behavior online and develop response strategies
- Understand different forms of cyberbullying:
- Group exclusion
- Targeted hashtag campaigns
- Late-night messaging/harassment
- Manipulated photos and videos
- Indirect negative references (“subtweeting”)
- Inappropriate photo sharing and solicitation
- Understand the prevalence and harms of online pornography
- Recognize AI-generated content including:
- Deepfakes
- AI-generated images
- Style transfer
- Marketing
- Propaganda
Digital Wellbeing
- Develop personal strategies for monitoring device use
- Understand technology’s impact on sleep quality
- Recognize addiction mechanisms and how companies employ them
- Consider opportunity costs: time spent with technology means less time for other activities
- Learn to use technology to enhance real-world experiences
Family Technology Boundaries
Device-Free Zones and Times
- No device use in bedrooms
- No devices during meals
- No screens at least 1 hour before bedtime
- Device-free family time periods
Age-Appropriate Access
- No social media accounts before age 16
- No personal smartphones before age 16 (consider basic phones for communication)
- No unsupervised YouTube browsing
- No Roblox (consider alternatives like Minecraft)
Management Strategies
- Regular family discussions about technology use
- Transparent monitoring of younger children’s online activities
- Gradually increasing autonomy with demonstrated responsibility
- Modeling healthy technology habits as parents
Resources
These are external resources which were used to come up with some of the ideas in this document. I include a link to the resource and a summary of what information or perspective the resource provides.
I was working on optimizing some code that contained a series of loops. I began my analysis by running a few different versions of the program and timing each execution. The results were enlightening! I decided to share the approach with my team along with an essay on the topic by Guido Van Rossem.
General Rules of Thumb by Which to Develop Loops
- Never optimize before you have proven a speed bottleneck exists. Then, only optimize the innermost loop. If you have a bunch of loops, consider breaking the function apart.
- Python incurs significant lookup charges for bytecode instructions and variable lookup, it rarely improves code to add extra conditionals/checks to a function to save a little work e.g. handling known scenarios with unpythonic case-like statements.
- Use intrinsic operations. An implied loop in
map()is faster than an explicit for loop; An explicit for loop is faster than a while loop with a loop counter.
- Use intrinsic operations. An implied loop in

I recently started working on a workflow for picking up files from S3, processing them, and writing the results to another S3 location. This is a common pattern in data processing pipelines and our team wanted to see whether we could do it using AWS serverless services. We were able to get it running via Lambda functions and event triggers published to an AWS EventHub. The entire workflow was fairly easy to stand up once we grasped how the various services worked together.
Uploading a Pandas dataframe to S3 is different from writing the dataframe to a local filesystem. But have no fear! It is easy once you understand a couple of key concepts. Here is a working example using
boto3.resource("s3")that has been tested against pandas 1.3.2. It is worth noting that the following will only work with pandas versions greater than 1.2.0.from io import BytesIO import boto3 import pandas from pandas import util df = util.testing.makeMixedDataFrame() s3_resource = boto3.resource("s3") buffer = BytesIO() df.to_csv(buffer, sep=",", index=False, mode="wb", encoding="UTF-8") df.seek(0) # Make sure the stream position is at the beginning! s3_resource.Object("test-bucket", "test_df_from_resource.csv").put(Body=buffer.getvalue())Once you make the call to S3, you should receive a confirmation message similar to the one below:
I started the process of moving my personal blog over a year ago, when the global pandemic brought on by the COVID-19 virus sent my local area into lock down. The reasons for doing so were simple enough, my web hosting bill had grown north of $200 dollars a month for my personal blog. Don’t get me wrong, Wordpress is great! I just wanted to get my blog onto something more appropriate for the audience (read, pretty small).
Sometimes the solution to a problem is so obvious, it takes a while to figure it out. I recently stumbled on such a problem when trying to configure a set of Object Relational Mappings (ORM) to support an application with the same set of table objects across different schemas in Postgres. Developing an ORM to support this pattern, a multi-tenant database model, proved challenging because of where I started. Below, I will detail the correct way to support the multi-tenant pattern as well as various approaches I came across and why they should not be used.
Normalizing data is a common data engineering task. It prepares information to be stored in a way that minimizes duplication and is digestible by machines. It also aims to solve other problems and issues that are out of scope for this particular article but worth reading about if you find yourself struggling to understand jokes about E. F. Codd. This begs the question, why does normalization matter when entering information in a table or organizing a spreadsheet? In order to properly answer that question, we should explore a simple example.
Wondering whether your favorite tools, services, or products are one sale this week? Below is a list of Cyber Week deals to help you get started with Data Engineering, refresh your toolbox, or launch your side project. Feel free to add to the list over on Github.