Category: tech

Catch all for technology.

  • Scratch

    Scratch is a one of the best languages to learn how to program computers. The language is easy to learn while being surprisingly powerful. Often I meet students who want to learn how to create web sites or applications. They want to immediately learn Python, C#, or other other “practical” programming languages. My recommendation is to first learn programming basics using Scratch and then learn other languages like Python. Scratch lets you focus on learning the most critical skills. Often it is faster for a novice programmer to gain mastery by learning Scratch and then “a practical language” than to start with the language they ultimately want to use.

    [toc]

    This post was inspired by meeting the teachers and students at Achungo. A WhatsApp Group for teachers and students interested in Scratch@Achungo.

    I will be adding more to this page in the near future.

    Getting Scratch

    If you have a browser that was updated in the last year and an Internet connection, just click the “Create” button on the Scratch home page and you are ready to go. If Internet access is spotty or you are using an old browser you can download offline scratch for Macintosh, Windows, Chromebooks still under support, and Android powered devices. On Macintoshes you can also download scratch through the App Store.

    The current version of Scratch does not work on older Chromebooks (like HP Chromebook Pavilion 14 at Achungo). I am working to get this fixed. I was hoping to have a copy of Scratch 3 that could be loaded onto an Chromebook by the end of March, but so far, the folks from MIT haven’t been able to get something that works to me. In the mean time, Scratch 1.4 running inside Squeak does work on old Chromebooks. It takes awhile to load, it’s a bit slow, and some of the functions in Scratch version 3 are missing… but you can still write programs and create games in it!! There is a nice textbook about Scratch 1.4 which can be borrowed for free from archive.org. Here is the scratch site from 2012 (when Scratch was at version 1.4). Have fun.

    Newer iPads can run Scratch in the Browser. There seems to be a full version Scratch in Chinese but it will be challenging to use by people who can’t read Chinese. There is a ScratchJr app which can run on iPads but it is missing most of the features of full Scratch. I will update this section if/when I find an English version of Scratch as an App for the iPad.

    Scratch Tutorial Coding Game in the Macintosh App Store is a free + pay for additional features app which walks a student through the creation of games in a very easy to follow way. Warning: sometimes it is a bit buggy and you might have to restart the lesson.

    Getting Started

    I would recommend exploring scratch.mit.edu which has links to many resources. Some good courses that use Scratch:

    • Harvard’s Creative Computing Curriculum: Curriculum including workbooks, resources, notes for classes to use Scratch to learn to think computationally.
    • Harvard CS50 Scratch Module: Harvard CS50 is one of the best college level introductions to computer science. Once the basic have been mastered using Scratch, the class using C and Python.

    Kenya has produced textbooks about programming scratch for grades 5-9 as well as training material for teachers.

    Games

    Games are fun to play, and can inspire creativity by providing ideas of things to build. There are many excellent games that have been created using Scratch. Not only can you play these games, but if you click the “See Inside” button you get to see the code which makes the game work.

    Going Further

    You will not be able to create cool games or really complex applications immediately. You will have to start with simpler programs and work your way up. There are skills that you will need to develop through practice. Often this practice can be boring… but it’s necessary, and will be worth the time you spend learning and practicing.

    Once you have mastered the basics in Scratch a good second step is learning the material covered by the AP CS Principles Curriculum. In the spirit of Scratch is the language Snap and the excellent Beauty and Joy of Computing which covers the AP CS Principles Curriculum.

    How to go from writing simple games in Scratch or Snap to being a software engineer who could work for companies like Google and Apple?

    It is said that it takes 10,000 hours of practice to master a discipline. That’s 4 hours / day for 7 years. This can be seen in elite athletics who win in the olympics or play for professional teams as well as great scientists and doctors. They constantly learn and train to become the best. Practice is also needed to become a great programmer.

    COMMON SOON: Next steps in mastering programming and becoming a software engineer.

    There is a close relationship between thinking well, problem solving, and programming. Working hard at school, especially math and science will help you become a good programmer.

    Where did Scratch Come From?

    In the 1960s there was some amazing work done by a team of people at MIT led by Seymour Papert. They used computers as a tool for students to explore and learn rather than merely an automated tool for rout memorization or for teaching computer science.  The book Mindstorms described some of their work. The Logo programming language and “turtle graphics” were two of the technologies that were invented by this team. This work has inspired many other projects. In the 1970s a group of people at the legendary Xerox Palo Alto Research Center (PARC) created Smalltalk as an environment for children to learn and program. This simple language grew into one of the most advanced programming environment used by professional programmers. Years later a free version of Smalltalk called Squeak became a beloved environment for kids and professionals alike. Several members of MIT Media Lab’s Lifelong Kindergarten wanted something a bit easier to learn than Squeak. They invented Scratch which was initially a program running inside Squeak. The current version 3 of Scratch no longer depends on Squeak. The paper Scratch: Programming for Everyone explains what the creators of Scratch hoped to accomplish.

    See Also

  • Computing Memory Lane

    Periodically I get asked questions about computing in the age before Linux, OSX, Microsoft Windows (NT based), Google, Stack Overflow and Chat-GPT/Claude. I encourage people to look at historical systems that can inspire and teach important lessons. The following are sites which are preserving the past. Some of these links are to wikipedia and should be replaced with link to something that tells the story and significance of these systems more effectively. I think it’s amazing that people today can experience what computing was like in the 1970s and 1980s.

    Operating Systems

    • Multicians: Wonderful site providing history of Multics and clear explanation of why Multics matters. Many first. Complete and consistent OS which when first produced was considered “large”, but later was much smaller that many operating systems that followed it. You can run Multics in a simulator on your own machine. Multics simulator on a Raspberry Pi is faster than the original production systems that supported hundreds of simultaneously
      users . 🙂
    • Plan 9: what UNIX would be if taken to it’s logical conclusion. Amazingly powerful and compact. Plan 9 was designed to be used in a distributed environment.
    • KeyKOS a secure capability based system. Nice memorial for Norm Hardys

    Programming Environments (way more than just a programming languages)

    • Smalltalk: amazing, paradigm shattering. See the Smalltalk Zoo for history and some early artifacts you can interact with.
    • Interlisp-D: lovely and rich version of lisp. a revival project to get it running natively on modern systems. It’s possible to run the historical code on emulators… but why bother 🙂

    Hardware Emulators (and software for them)

    Archive Sites

    Videos

    Related

  • Classic Systems Papers

    Many of the ideas that drive today’s “innovations” trace their origins to the groundbreaking work done in before 1990. Back then resources were scarse so people had to think and work harder than we do today.

    I strongly encourage people working on computing systems to read classic systems papers. These are papers that first introduced key ideas that have shaped our understanding of computing and often illuminate fundamentals more effectively than later papers.

    Technologies come and go, but foundations, core principles endure. Understanding the fundamental concepts ensures long-term adaptability and relevance in a fast changing world. I have found that reading classic papers has enabled me to reason from first principle and saved me from learning many lessons “the hard way.”

    My Reading List

    I was asked by some students for a list of classic system papers. Unfortunately the lists of papers I made for previous classic systems reading groups aren’t in my possession. So… the following is a list of papers I made this afternoon by harvesting my “outbox”. These are the papers that I have most frequently recommended to people in email. Sometime later I will update this page with a more carefully curated list of papers which will also include some more recent papers such as MapReduce and Attention is All You Need which I consider classic, even if they were published in the 21st century :). I am sure there are important topics not covered below, but this can be a starting point. Ordered by the frequency I sent them, not by importance.

    Other People’s Classic Systems Papers List

    Reading Groups

    I have been part numerous “reading groups” which focused on “systems”. The participates would identify both classic and current papers  they thought were important. Just making the list together was instructive and often led to a spirited discussion. Once we made a list of papers we would make a schedule that listed which papers were going to be covered and who was going to lead the discussion.  We would typically met once per week, often over lunch. Everyone in the group would read the designated paper.

    For a more complete set of guidelines, see How to Lead a Technical Reading Group by Cathy Wu of MIT. I am sure there are other good materials out there about reading groups.

    Related

    Are there papers that changed your perspective or have been foundational to you as a software engineer, systems designer, etc? Drop me a note because I would love to read it and potentially add it to my list.

    “Instead of standing on each other’s shoulders, we stand on each other’s toes”. – Butler Lampson, quoted Hamming

  • Computing Technology I Use

    My work has had me near the cutting edge of computing technology from 1978-2022. In 2022 I retired. I still follow current trends but I am not as involved in pushing things forward. I take a measured approach to technology. I don’t chase after everything new. Rather I try to thoughtfully adopt technologies which will effectively solve real world problems or will enhance life. I am sometimes an innovator or early adopter, but I often make a move with the early majority, and have sometimes avoided technology which even the trailing edge has adopted. I recognize that technology is powerful, and can both improve and impoverish life.

    [toc]

    Keep Options Open

    I strive to avoid lock-in to a particular technology, product, or company. I tend to select technology that have well designed, standards based interfaces. Likewise, I want my applications to run on the most common platforms. For user facing applications this would be native support of iOS, Android, OSX, Windows, and providing a web interface. Supporting a native Linux application is a bonus. I want to “own” my content. I really like encrypted, local-first storage that supports replication. This insures my content is accessible to me while preventing cloud operators or bad actors from being able to corrupt, remove, or access my content.

    I have always encourage my team to select the best technology for the problem they need to solve, even if it means going with a product / company they loved to hate, e.g. I have no patience for “religion”. In the 1990s, the discussion was often about Microsoft products. Many people on my team hated Microsoft but I would encourage them to use products that best got the job done. What I found was that Microsoft products were typically terrible in “production”, but often the best choice for “corporate” computing.

    Cloud

    Unless you are a large company operating at scale… using cloud services makes a huge amount of sense. Using well selected cloud products will provide higher quality, higher reliability solutions for a lower cost than more traditional solutions. Of course, poor select of cloud services can result in run-away cost for a service which is no more resilient than running everything in the same data center. I am a big fan infrastructure as code, and immutable infrastructure.

    For me it’s essential that cloud products keep my data encrypted, and that the encryption keys are only accessible by me, not the provider. When it comes to applications I use, I want them to support disconnected operations, so if I can’t access “the cloud” I can still get work done.

    I used to be a fan of google, but increasingly I have watch how the customer being the product is producing worse user experiences, aka enshittification. I am no longer confident that the data held by Google won’t be used against me, rather than to enhance my life. I have more confidence that Apple will care for me properly, which makes sense because I am paying for my services. Ironically, I trust Microsoft to try to treat me better than Google, but the combination of security flaws in Microsoft products and that numerous services (like OneDrive) don’t use zero-knowledge encryption is a non-starter for me. Proton is trying to fill the space Google used to occupy when it comes to web apps. I hope they succeed.

    Apple Eco-system

    In the last couple of years I have changed my strategy at bit. I still insist using technology that provides a way to export my content into rich, standards based formats, but I am ok if the applications only run in the Apple eco-system which I now inhabit. For example, I use Bear for most of my notes which is Apple only but has a great export ability and mostly avoid Apple Notes because there is no good way to export all my Apple Notes content to a different platform.

    OSX and iOS have less security vulnerabilities than Windows and Android while providing higher quality applications than is typically found on Linux or ChromeOS. I appreciate that Apple implements end-to-end encryption which helps keep my data secure while making sharing easy (AirDrop, iMessage, Photos, Notes, Files, etc). Apple supports hardware longer than many manufacturers which reduces the frequency that I need to upgrade my devices. The downside of Apple is a closed eco-system and products tend to be more expensive. I am sad that Apple, like most manufacturers, no longer make small phones or ultralight laptops. The Apple products I am currently using:

    • MacBook 12″ from 2017 (2023) This is the last ultra portable made by Apple. It’s 2lb, decent keyboard, and enables me to complete daily tasks with a minimum amount of friction. Can’t run the current version of OSX but security patches are still available. I could use OpenCore Patcher to run current OS, but not willing to risk bricking it right now.
    • Apple iPhone 16 Pro (2024) Too big, but can’t find a usable small phone :(. Camera on the 16 pro is quite good, appreciate the action and camera button, and the satellite messaging might be useful. On T-Mobile (2022) which has good international coverage but mediocre coverage in USA compared to Verizon. Purchased the 16Pro when my iPhone 12 mini’s battery couldn’t last more than a few hours.
    • Apple AirPod Pros (2021/2023) are nicely integrated with the Apple eco-system and just works. Noise reduction is “ok”, and the “ambient mode” provides situational awareness. The case is part of the “Find My” eco-system.  Downside is battery can’t be swapped when it no longer holds a charge. I have written about other headphones.
    • MacBook Pro 14-inch (2006/2022) When I am at home this is the device I use. When I am traveling it is left running in a safe location and I access it remotely via Tailscale. Holds the family’s archives: pictures, videos, ripped CDs, digitized books, and documents. I could change workflows so everything lived in cloud, but current system is working well. I select a configuration with enough storage for 2x my current usage (4tb at the time of purchase) and the maximum memory available which has allowed me to use the same MacBook Pro for >5 years before I feel the need to upgrade.

    Laptops

    When I am creating written content I like using devices with >12″ screens and an attached keyboard I can touch type on which works when it’s sitting on my lap. I want an operating system which lets me quickly switch between overlapping windows / applications, and supports easy copying of information between applications. This means that I want to use a traditional laptop.

    Since I am often on the move, I would like this device to be as small and light as possible while providing me adequate keyboard and display. For me, a perfect laptop is <2lb, with a 13-14″ display, running the current version of OSX. There are no devices that meet all these specifications. Hardware that comes the closest:

    • Apple MacBook 12″ from 2017.. mentioned above. Out of date, but light and still useful.
    • Current MacBook Air 13″, weights 2.7lb. When my MacBook 12″ no longer gets the job done I will purchase one and cry about how heavy it is 🙁
    • Fujitsu Lifebook UH-X: Just 1.4lbs, good performance, nice selection of ports. Almost impossible to find outside of Japan, and somewhat difficult to find in Japan.
    • Lenovo ThinkPad X1 Nano: Good all around and more easily found that the Lifebook UH-X. Gen 2 could be configured with 32GB of RAM and motherboard is well supported by Linux making it superior to Gen3
    • Asus Expertbook B9: Performance and battery life substandard to Lifebook and X1, but a decent option.
    • Asus Zenbook A14: announced at CES 2025. 2.2 lb, reported to have a good screen and very long battery life.
    • Microsoft Surface: Not a fan. Tablet with external keyboard running Windows. I want the keyboard attached, and my wife’s surface (several years ago) was regularly needing to go into the shop.

    None the modern laptops can be turned into a hackintosh because their CPUs are more modern than the last IntelMac made by Apple. The only way to use OSX on one of these x86 based laptops would be to run a host operating system (Windows, Linux, BSD, etc), and execute OSX in a virtual machines. This would mean maintaining two operating systems, paying the overhead of a virtual machine, and dealing with the inevitable hassles of using OSX in an environment it was not designed for. It used to be that you couldn’t log into your Apple account / access CloudKit and other iCloud resources from OSX running in a VM, but I have read that as of OSX 15 Sequoia it is possible to access some of Apple’s cloud resources.

    I spin up AWS instances time to time when I need more computing power.

    Chromebooks

    The OS is easier to maintain and more secure than most other options. Chromebooks boot quickly and are very responsive considering the hardware they are running on. For people who live in Google Apps, using a Chromebook can be good alternative to using a traditional laptop. Most modern Chromebooks are able to run Android applications which provides access to applications which aren’t native on ChromeOS. You can run Linux containers as well. I used a Google Pixelbook as my primary personal device for awhile until Google stopped providing OS updates. It was a shame that Google dropped support, the hardware was still very responsive, and had better specs that many of the Chromebooks in production at that time.

    Low end Chromebooks are cheaper and more functional than budget priced traditional laptops which is one of the reasons they have become popular at schools that send devices home with their students. I appreciate that Google has committed to continue to support releases of ChromeOS for 10 years on hardware produced after 2021.

    Unfortunately, there are no ultra portable Chromebooks. The lightest Chromebooks are actually tablets with removable keyboards. They often list weight of the tablet without the keyboard. When factoring in the weight of the keyboard these Chromebooks weight more (and are less ergonomic) than some of the laptops listed above.

    ChromeOS Flex is one way to make an out of date laptop usable.

    TinyPCs / PalmTops / Subnotebooks

    In 1989 I lusted after the tiny Poqet PC. In 2001 picked one of it’s successors, the Toshiba Libretto. It was a tiny PC which fit in the palm of my hand. While the concept of a full powered computer which could fit into my pocket was electrifying… the reality was disappointing. The keyboard and screen were just too small for me to be productive, Years later I tried one of the TinyPC made by GDP. My theory was that I could carry it everywhere and dock it with full size keyboard and screen when at home and work. After a few weeks I gave up on this. I found that it was just too painful to use when away from the docking station. I frequently would use my smartphone rather than pulling out my TinyPC. When I determined I needed to use the TinyPC I would often wait until I got to the docking station. I determined it was better to carry a normal laptop when there was a reasonable chance I might need to do “real work”, and make do with my phone (which had a SSH client) in the case of an emergency.

    Tablets

    I have tried using tablets on and off since 2010… well actually since 1993 when I was working at PARC next to the people inventing ubiquitous computing. I have found tablets to be wonderful for creating art, consuming information, the iPad also makes a nice portable monitor for MacBooks, but terrible for creating written content… even when using a good Bluetooth keyboard such as the Magic Keyboard. With any of the Android or iOS based tablets, there is too much friction integrating information from several windows and often the app experience on the “phone OS” platforms fell short when compared to the experience on a real laptop. It’s possible to run windows or Linux on a table… but those options to be more power hungry, and many apps don’t have UI that is well refined for tablet gestures. Furthermore, I never found a keyboard that would hold the tablet stable and at a good viewing angle when on my lap Over the years I have purchased three iPads and a couple of other tablets. While each was useful for a particular task, I have yet to find a tablet that was compelling for general use.

    Smart Phones

    Like most people I find a smart phone invaluable. I use a phone to capture information, to quickly look up information, and to communicate with other people. My ideal phone would have a battery which would support 24 hours of my normal use without recharging, support the applications I use, and have a 4″ diagonal screen which would allow me to hold the phone in one hand and touch the entire screen with my thumb. An initiative to build a small Android phone seems to have stalled out. Unihertz does make the tiny Jelly phone. I tried the first model and was disappointed. It was missing some of the frequency bands used by Verizon, it was rather thick / chunky, and the screen was a bit too small to be useful.

    The perfect phone for me would be an iPhone that was the size of the original iPhone that had a modern CPU, good camera, and a battery which would last for 2 days of light use. Alas, Apple canceled the iPhone mini, and even if they kept it, it was too big. When holding it securely in one hand I couldn’t reach the whole screen with my thumb. In 2024 I switched to an iPhone 16 Pro. The phone is way too big, but so are just about all the phones people use today. I do love the .5-5x camera, the separate camera button, and am hopeful that satellite based messaging will be useful when I am outside normal coverage areas. My biggest complaint (besides size) is that I find the voice support almost useless (Android seems better). First, accuracy seems poor. Second, Apple restricts what can be done via voice when the phone is locked.

    There are many people who do most of their “computational tasks” on phones. This has helped drive the adoption of larger screens and the growing popularity of folding phones. As I noted above, when I want to do real work, I much rather use a laptop. A number of the applications I use have excellent web interfaces when using a real computer than render badly on mobile browsers and the native iOS apps are often missing functionality.

    I briefly tried some of the “simple” / “low distraction” phones a number of years ago including the original light phone and the Punkt phones but gave up because they didn’t support all the frequency bands used by Verizon in the USA. I might have considered changing carriers, but all the long term reviews I read indicated that people ultimately switched back to a traditional smart phone because the minimalist applications were inadequate for their real (rather than imagined) lives. Additionally, there were several apps I was not prepared to give up that weren’t available of these phones. At that time, the app I won’t give up was Evernote which functioned as my second brain.

    What makes smart phones deeply useful is the connectivity provided by carriers.  In this season of life where I have no idea what country I will be in month to month I am using T-Mobile. They are the best deal if you want a US phone number and will be doing a lot of international travel. I get 5gb of data when outside the US, free texting, and reasonable price phone calls. Note: I have historically live within 5Gb/month on cellular networks, but recently iOS is using a lot of bandwidth, and I haven’t been able to identify how to stop it. If I turn off “cell” and make calls via WiFi, my calls to the US are free. There are three downsides. First, coverage is not nearly as good Verizon in the US. Second, they seem to partner the the second best carrier in many markets. Third, when traveling internationally, traffic is backhauled to the US, so performance is lower than using local carriers. For people not using T-Mobile, Airalo makes it easy to acquire an eSIM for wireless data while traveling internationally.

    Digital Recording Device

    I have found a small digital recording device can be an excellent way to make a quick “notes” to myself when I on the go and to record important meetings. Originally I used a small recorder from Olympus.

    I picked up a Plaud AI Recorder through Kickstarter and have used it a bit for on the go notes and recording meetings and presentations. I have been pleasantly surprised by the quality of the microphone and it’s useful summaries. The form factor for their NotePin and a similar product from Senstone would likely be even better. Another possibility is the CarbonVoice App on an iWatch. The nice thing about all these is that they have both the voice recording and a full transcript which is organized by a machine learning system. Most of the time, the transcription is perfectly good. When it’s not, you can listen to the audio.

    I have tried a number of apps on the phone but have been dissatisfied. The microphone on the phones I have tried was not good at picking up distant voices in meetings. The second issue is that the iPhone doesn’t permit apps to access the microphone when the phone is locked. While a good security feature, it kills my memo on the go use case. I can’t say “Siri Take a Memo” when I have AirPods in and the phone is in my pocket, locked. I can have Siri trigger launching an app stuffing text from a prompt to an app like ToDoist, but the transcript is wrong more often than right.

    A product / feature I am hoping for I first saw around 2016 on kickstarter? It was a wrist device which have a 2? minute continuous recording loop running.  A button press dumped the buffer to storage. The idea was wonderful.  Someone says something profound.  We don’t want to forgot it, but when someone says “That’s brilliant. Say it again so I can get that down”. and the response is often “I don’t know. What did I say?”. Unfortunately the product’s execution was poor. The device was much better at picking up background noise, rustling from shirts cuffs, etc than recording meaningful content.

    Software/Services

    Google Apps: Currently verber.com is a Google Apps business account. Originally it was set up as a free domain allowing me to shutdown much of the computing infrastructure in my home. At some point I had to upgrade to a business account. I am not using many of the features, and quite frankly it feels overpriced. Furthermore I don’t trust Google not to be evil. I am primarily using gmail for my email which works reasonably well and they do a good job of protecting me from unwanted spam. On OSX I use web apps. I use Google Calendar, Google Maps, and Gmail iOS applications. When working with others I will use docs, sheets, and slides because they have powerful collaborative features. I sometimes use drive when I have files I need to share out. At some point I will point my MX records to some other mail provider and cancel my gApps business account. Making this sort of change would have been easy years ago. These days, the combination of aggressive spam and that the largest mail providers functioning like a Cabal make it more challenging. I am not prepared to put all the effort required to make that transition right now.

    Apple Files: Data is end-2-end encrypted so Apple does not have access to my content. Permits me to share files (or folders) with others as needed. All the meta data lives on all devices. The actual contents are always present in the Cloud. Content is pulled down to a device on demand. It’s possible to explicitly clear the local copy, force a download, and pin the content to always be retained on the device. Historically I used sync.com. I selected sync.com because it was one of the early systems that provided end-2-end encryption and works on OSX, iOS, Android, Windows, and Linux. As an early adopted I have 7GB of free data. I moved away from it because 7GB isn’t enough data for all my needs, the people I wanted to share data with didn’t want to install sync.com, and currently I am just using Apple devices. I also have access to 1TB of “free” storage via Microsoft’s OneDrive. I place non sensitive, bulk data here since they don’t support end-2-end encryption.

    Bear: is a beautiful note taking application with a clean, intuitive user interface. I find markdown lets me quickly create nice looking notes. I am paying for the premium version which enables syncing between Apple devices using iCloud. This allows me to have all my content (editable) even when I am offline. Bear’s sync is built on top of Apple’s CloudKit so the data is well protected with end-2-end encryption. Hierarchal tags lets me organizing my content. It has a fairly powerful search (though it can be a bit slow). It’s easy to crosslink notes. Biggest downside is that I can’t share my notes with others. When I need something to be shared with others I either put it on my website, share it out with Google Apps, or place it in an Apple Note. I leave a stub behind in Bear with a pointer to where the shared document lives. Bear has excellent import and export features which allows me to painlessly migrate from Evernote, and should enable me to switch to some other system if I decide to leave the Bear ecosystem. This was important because I had thousands of notes I had created since 2009 in Evernote. I decided Evernote was hopeless bloated and buggy and it was time to move to a new system. I tried OneNote but was frustrated by its organizational features, its poor support of important/export, and it lacked encryption. Bear is my principal knowledge management system. I am really stretching it for this task. At some point I will likely investigate Obsidian and Anytype. I took a quick look at Logseq (complex and lacked polish), Craft (didn’t have fully functional version I could try for free) and Joplin (falls short of the user experience of Bear without obvious benefits). While powerful, the lack of offline supports removes Notion and Roam remove them from my consideration.

    Messaging: I mostly use iMessage/Facetime when communicating with friends and family. It just works… if others are using Apple products :). I use other apps based of what my friends are using. WhatsApp is the second most common system… seems to dominate the EU, Signal for my tech/security buddies, LINE for people in TW/Japan, and Telegraph for a couple of friends who are in Eastern Europe/Middle East. I am thinking about removing Telegraph due to the amount of spam I get on that system. I generally don’t use Facebook Messenger.

    Todoist: A list keeping app which has a good balance between simplicity and powerful features. I am using the free version, I can get along without the added features which required a subscription. I switch from Asana when I was no longer collaborating with my team on task lists.

    1Password: Insecure and reused passwords at the biggest risk for account security. Using a second factor eliminates something like 98% of account breaches. 1Password provides a safe place to store all my credential. It generates secure passwords and integrates well with all the software I use. It supports Google Authenticator one-time passwords and even notifies me when an account I am using doesn’t have a OTP set. I believe 1Password corporate culture and engineering practices makes it the most secure system for storing this sort of information. I have watch system other systems such as LastPass have security issues which did not give me confidence that my secrets would be safe. I originally moved into 1Password because I trusted their security and they supported all the platforms I was using. It’s possible I could switch to using Apple’s built-in system, but the cost of 1Password is small enough vs labor / risk of making the change. If you have the switch export/import doesn’t move your OTP. These have to be added to Apple’s Password by hand.

    Lightroom/Apple Photo: Most of my pictures are taken with the Camera app on my iPhone which automatically feeds into Apple’s Photo app. I don’t like the user interface / organizational features of Apple’s Photo app. I use Lightroom on my iPhone to automatically ingest my pictures into Lightroom. I run Lightroom Classic on my MacBook Pro which holds all my photographs. Once they are downloaded to my MacBook Pro and backed up, I delete new photos in the cloud version of Lightroom. I use features in Lightroom Classic to collect particularly treasured pictures into albums which I replicate into Lightroom Classic. I would like to migrate to Lightroom Cloud, but it still lacks some organizational features I want. Both Lightroom and Lightroom Classic’s auto face-tagging is substandard.

    Chat-GPT/Claude: Look up specific information, learning new material, assistance problem solving. Remember, these use large language models which predict what sequence of words is mostly likely. It doesn’t understand / have a model of the world, do it can gets things wrong than anyone with common sense would get right, and will often hallucinate.

    Google (and Apple) Translate: To read menus, labels, and documents when in non English speaking locations and when looking at websites that don’t have English. Google Translate on the iPhone 16pro doesn’t switch to macro mode when you are close to the writing who I desire to translate, Apple’s Translate application supports macro mode.

    Apple Podcasts: I don’t love the UI, but appreciate that it works well with Siri, the support of transcription, syncs across all my devices. Furthermore, the Apple Podcast app is used by all the people I regularly share recommendations with so it’s easy to send them links / recommendations. Originally I used Pocket Casts which supported multiple platforms and has an excellent UI.

    Feedly: I am still using RSS feeds. Lets be create a personalized “feed”. Articles that are particularly good get saved into Bear.

    Reddit: Often find good ideas / recommendations. Something I am not doing now, but considering for subreddits I regularly participate in comes from Dracomies: If I read a post, I click “Hide.” If I think it’s gold, I “Save” it. If it’s low value or I don’t care, I “Hide.” Goal = empty subreddit. So at the end of the day, the Subreddit is blank. This is useful because I only see what I want to see each day. And nothing is lost. I even got Life Pro Tips to nearly blank by going through Top posts (Day, Week, Month, All-Time) until it’s just less than 100 upvotes. Again, I click Hide when I read it. Until eventually everything is Hidden.

    Kindle: I have over 1000 books which were purchased in Kindle form. I find the Kindle app generally works well, though e-reading results is poorer retention of information. I like that my reading location is synced between devices which allows me to switch between devices. I make heavy use of highlighting and notes. My biggest gripe with Kindle is they are using DRM for the books. I know people who have lost their whole collection of books when they were incorrectly flagged as violating Amazon’s Terms of Service. To protect against this I periodically copy all my purchased content off the Kindle, but Amazon stopped supporting this in 2024. I use hoopla and libby to borrow free e-books and audio books.

    Spotify: They have a massive catalog of music, support offline caching of music, stream directly to smart devices, and most of my friends use so it’s easy to share playlists. The downsides are that I don’t like the UI and they still don’t support lossless audio. When I care about sound quality I use Apple Music to play tracks I RIPPED from CDs I purchased. At one time I was using Tidal. If Apple Music supported direct streaming to the smart devices I use, I would likely switch to it.

    Logos Bible: Arguably the best app for serious Biblical study. The combination of analytical tools and rich (but expensive) resource library makes it unmatched for detailed study. Besides the price, the other downside is that the iOS version requires Internet connectivity for many of its more advanced functions. Years ago, when I was downsizing my book collection, I re-purchased many of my Biblical references which saved significant space, allowed me to use them wherever I had a computing device, and made it much faster / easier to lookup information. Before I purchased Logos Bible I used Olive Tree Bible Reader which provide a simple and clear UI smart phones. e-Sword is arguably the best freeware Bible tool.

    Passapartout: VPN tool which makes it e as y yo set up OpenVPN and Wireshark connections on all Apple devices, enabling geoshift while traveling (eg looking like I am in the US while traveling outside the country). For some reason using the free OpenVPN would break access to the network after I started and then stopped a VPN connection requiring a reboot… this doesn’t happen with Passapartout.

    Quicken Simplify: Track finances. Don’t love it, but haven’t found anything I like better. I miss the early days of Mint… before innovation stopped.

    Supporting Technology

    “Tech Kit” items are stored in a small litesmith zipza pouch (2023) which is the perfect size, mostly waterproof, light, and a different texture than anything else in my bag so easy to find by touch. I am hoping that I will soon only have devices that use USB-C and will be able to do away with the adapters.

    • Nomad 65w Slim Charger (2024) hangs down rather than out so doesn’t lever itself out of loose outlets and packs well. 65W to one slot, 45W/20W when using both. Replaced an Anker 523 which is powering devices in our home. My wife loves her tiny 30w Anker Nano. For people who need three outlets, Anker 735 and Minix P1 and P3 are pretty good. If you need more power / more outlets I would think about getting something that has a removal cord rather than plugs directly into the wall like the Baseus 100W … because heavy watt chargers are getting so heavy that it will leverage itself out of the outlet. Snug plug can help prevent this problem.
    • Nitecore 10000 Gen2 (2023) power bank with USB-A out C in/out. Lightest and most compact 10k battery I have found. Comfortable in my pocket while charging my phone. Can slowly charge my MacBook or mostly power the MacBook while charging my iPhone. Supports pass through charging so I can charge this battery while my MacBook is plugged into. Has a bug that when you hold the “low power” button too long it puts the battery in standby mode which is only ended when you plug it in to be charged which is fixed in Gen3. Spreadsheet of many power bank options.
    • Cables: A 6ft USB-C cable, 2 6″ USB-C cables
    • Adaptor tips from USB-C to (Lighting, Garmin), and 2 USB-C to A converter.
    • Mogics Adapter MA1 (2023) is the smallest and lightest universal power adaptor I have found. For type E remember to unscrew and extended the type C prongs. Some trouble in UK outlets due to round pins: sparking until I got it set properly. BTW: The best visual display of outlet types I have found.
    • Tempo Logging Thermometer (2022) which lets me keep track of the conditions I experience.
    • Etymotic HF3 (2013/2023) Great sound isolation. Provides me with around 40db of noise reduction which is better than any consumer grade active noise cancelling headphones I have tried. Carried with FiiO KA11 (2024) USB-C DAC and airplane double jack adaptors. Second foam eartips for when current pair stops sealing.

    Related

  • Poetic Chat-GPT

    In gratitude for changes I tried to capture what I was feeling. I wondered how chat-gpt would improve what I wrote so I fed it my paragraph with a number of different instructions. The original paragraph was:

    I had planned on going for a hike today, but I missed the group. Instead, I find myself sitting on the couch, looking down on Portland, the light softened by the rain, framed by beautiful trees, warm and dry, with a cup of tea, luxuriating in the memories of blessings that have shaped my life. I don’t have time to write them all down. That will have to wait for another day.

    It’s my voice, but I felt I could do better.  Here is what chat-gpt did with it with the following requests

    Poetic

    Today, my intention had been to embark on a hiking adventure, yet the hands of time slipped away, and I missed the gathering. Now, I sit here, nestled upon the couch, peering out at the enchanting tableau of Portland, a city embraced by the graceful boughs of trees, their silhouettes softened by the soothing rain. Here, I am ensconced in warmth and comfort, cradling a cup of tea, and basking in the tapestry of memories that have woven the fabric of my life.

    The blessings I’ve encountered flood my mind, an overwhelming rush of gratitude that threatens to overflow. They are stories waiting to be told, tales of love, laughter, and resilience. But for now, I must savor them in the quiet corners of my heart, like precious jewels waiting to be discovered. The quill shall meet paper on another day, when time and inspiration conspire, allowing me to unfurl these cherished tales and give them life in written form.

    Definitely not me.  I guess I am not very poetic.

    Improve

    I had originally intended to go for a hike today, but I ended up missing the group. Instead, I now find myself comfortably nestled on the couch, gazing out at the rain-kissed scenery of Portland. The soft, diffused light filtering through the raindrops paints a tranquil picture, framed by the majestic trees that surround the city. I’m wrapped in the warmth and coziness of my surroundings, cradling a steaming cup of tea in my hands. In this moment, I’m indulging in a cascade of cherished memories that have woven the tapestry of my life. The sheer abundance of blessings is overwhelming, and while I’d love to document them all, that task must wait for another day.

    Hmm… not bad. I could definitely make use of some of these changes.

    Clear, to point

    I missed the hike today, but now I’m on the cozy couch, gazing at rainy Portland. Tea in hand, relishing life’s blessings in my memories. No time to jot them down; that can wait.

    A bit to short but I like.

    Haiku like

    Hike plans slipped away
    Couch, rain-kissed view, tea’s embrace,
    Blessings linger, stay.

    Did this just for fun. not bad.

    In the voice of John McPhee

    My intention had been set squarely on venturing into the great outdoors for a hike today. Yet, as fate would have it, the rhythms of time proved unforgiving, and I found myself falling behind, missing the gathering of fellow wanderers.

    And so, here I am, firmly ensconced upon my favored spot, this well-worn couch, with a view that stretches down to the city of Portland. The cityscape below, bathed in the soft, diffused light of recent rain, is a picturesque tableau framed by the graceful boughs of trees.

    I am nestled in a cocoon of warmth, shielded from the elements, my hands wrapped around a comforting cup of tea. It’s a moment of luxurious reprieve, where time seems to slow and memories take center stage.

    These memories, these blessings, are like polished stones collected over a lifetime, each one bearing the weight of experiences and moments that have profoundly shaped my journey. They beckon, urging me to put pen to paper, to immortalize their stories.

    Yet, as the hands on the clock continue their relentless march, I am reminded that this day is not the one for such endeavors. The tales and reflections that reside within me will have to bide their time, waiting patiently for the day when I can commit them to paper. That day will come, but for now, I sit here, sipping tea and luxuriating in the silent symphony of memories that have graced my life.

    Hmm.  I think they need to train on McPhee a bit more.  Doesn’t sound like him at all to me.

    DALL-E2 Image from the Original Paragraph

    DALL-E2 from Haiku

  • Estimating IT Staffing

    Originally Published in 1991
    Minor updates 2005, 2021

    “How many IT staff does an organization need?” is a commonly asked and difficult to answer question. There is no magic ratio. There is no ideal staffing level. The appropriate number of a staff depends on what the IT organization is responsible for and the level of service expected in each area of responsibility.

    [toc]

    This post is primarily about classic enterprise IT staffing… what happens inside a company or a university where IS/IT solutions are delivered. While related, running a production service which is delivering software as service is quite a bit different from enterprise computing. There was a brief article in CIO which demonstrates what happens when you  benchmark enterprises against service providers. I discuss some of these issues in my Hints for Operating High Quality ServicesJames Hamilton has noted that in mega scale operations, human staff accounts for less than 10% of overall costs.

    There was a nice graph found in the slide deck Impliance: an Information Management Appliance by folks from IBM Research which captured how staffing costs have gone up in comparison to the cost of hardware for enterprise computing. In a production environment, there is typically significantly more investment make into infrastructure and tools, work is often shared between an engineering group and an operations group, and there are often economies of scale that I only hint at in this paper. 

    What IT Staff Do

    There are number of different kinds of work that IT teams are often responsible to deliver.

    User Services (e.g. Helpdesk)

    How much hand-holding is expected? Some sites have users who are pretty self-sufficient; other sites have users who need assistance for everything they do. Can your users take care of themselves or do they need and want the administrator to perform even the simplest tasks for them? For example, I have a friend whose users demand that he perform the most basic tasks for them (such as moving their files from one directory to another). Anything that isn’t simply invoking the text editor or reading mail is “UNIX” and hence a job for the administrator. This sort of support requires a ratio something like one administrator for every four users.

    Does the site want you to conduct workshops or prepare extensive local documentation? To what extent are you expected to consult on technical issues? Do you concern yourself with just the operating system like OSX or is the Helpdesk assisting with applications, or even development tools? For example, let’s say your site has heavy users of TeX, Mathematica, C++, Python, X11, R, MySQL, and Google G-Suite. Is user services supposed to be able to answer detailed questions on all those topics? Few people are experts at all these things. Development of expertise in any given topic area requires time to play, experiment, and mature in that area, and there are limits to the number of areas someone can master.

    Software Support

    How much public domain software or freeware do people want installed? What level of support are they expecting? Installing RPMs is typically fairly easy. Just compiling and installing software doesn’t take much time. Often though, software doesn’t just compile and install properly. Often there are conflicts between packages which can be challenging to resolve. There are often assumptions in the software which need to be changed before the software can be used at a given site. In addition, administrators are often expected (and rightly so) to continue maintenance of the software (bug fixes, security patches, and what not) and to become an expert in the use of the software. Compiling and installing (coupled with frequent patches) or many hardware/software platforms can make this incredibly time consuming for even just a few software packages. The time this takes varies with the quality and complexity of the software. Keeping a current version of kermit or perl isn’t hard (I wish everyone did as nice a job as Larry Wall has with perl); keeping up with g++ is much more time-consuming.

    Cloud Services Support

    Increasingly today, organizations use cloud services to solve their business problems. Staff time for Cloud services are often under estimated because they tend to be distributed. First is the cost of on boarding. Often this is as soon as someone using a company credit card to sign up for a service, but that is not sustainable. First, the billing really need to be going to the organization, not an individual. More important though is insuring the correct people have access, and than when people’s roles changes, or they leave the company, the right thing happens.

    In the best case, the SaaS can leverage an existing account management systems such as Google Apps, enterprise single sign-on system like Okta, or an internal AD service if it provides an externally reachable SaML endpoint. Can has to be made to insure that disabling a single sign-on account blocks access (some systems also permit access against a service specific credential). Generally on boarding apps is around 1 man week / app which you factor in learning about the service, arranging integrations, producing appropriate documentation.

    Beyond getting a SaaS plumbed in, there are a wide range of possible costs depending on the complexity of the integrations, how much customization is required, and whether there will be a need for the IT team to provide customer support.

    ERP System

    In our increasingly complex and regulated world, organizations have to track and manage a wide range of processes. As the pace of work has increased there is the perception that data needs to be available in real-time but has lead to the adoption of Enterprise resource planning (ERP) systems. The best know systems in this space are SAP and Oracle’s suite of applications. In the mid-tier there are companies like Netsuite and Workday. For small businesses, Quickbooks is commonly used.

    In smaller orginiztions  ERP systems are often managed by the team that is responsible for the function. Finance takes care of the the accounting software. Human Resources often takes care of whatever tools are used to manage headcount, and uses whatever system finance has selected for doing payroll.   In these cases IT staffing is fairly minimal and is typically focused providing a server and insuring that it’s data is regularly backed up.

    As a company grows and size and complexity, the requirements of these systems can grow massively. It’s beyond the scope of this post to discuss estimating the staffing requirements for ERP systems, but I will make one observation. In almost all cases, it’s a bad idea to customize ERP systems to exactly match your existing business processes. Whenever possible you should use a system as close to out of the box as you can, and if the choice is change your process or customize the software, change your process.

    Custom Software

    Many organizations don’t have a dedicated software engineering department, so the IT staff is called on not just to manage software provided by vendors but  also to create — on demand — tools for the user community. This is understandable, especially in small sites where the IT staff might be the only professional programmers. If there is this expectation, time must be allocated for this development process.

    Site Planning/Administration Overhead

    How much site planning is the administrator expected to handle? Must the administrator know that the average person generate 115 watts, and how to factor that and heat loads from machines to scale appropriate AC/heating loads and power? How much paperwork is there?

    Hardware/Network Maintenance

    Who crawls through the ceiling to pull wires? Who finds the flaky transceiver when the Ethernet starts to go crazy? When a workstation dies, does a secretary just call your vendor and wait, or are more creative solutions required? Do you do board level repairs? Does your site buy all its peripherals ready-to-install or do you save money by purchasing components and do the integration yourself? Having IT staff do any of these things takes time.

    Anticipate Technology

    Is the IT staff supposed to anticipate new technology and advise the company about new approaches? Most places I have worked expect the IT staff to have a good feel for the state of the art and new technology that looks promising (not just products, but research, too). Anticipation is often necessary given many sites have a three-to-six year planning or depreciation schedule. Keeping up with our field isn’t easy. There are a variety sources one much draw upon to stay current. I have found a variety of good sources for current information. Trade rags can give you a picture of what is being sold, blog (and other electronic media) is great for questions regarding current issues and problems. Professional journals from ACM, IEEE, etc are useful to see what is happening on the almost done research front. There is no substitute however, for a good network of professional contacts. This network can be maintained with phone calls, electronic mail, participating in online communities, and attending conferences.

    My Ratios

    The best way to estimate the number of administrators needed is to figure out what level of service is required and how various factors (for instance networking infrastructure and heterogeneity of the machines being supported) will affect the the fulfillment of those responsibilities. Rarely are system administrators doing only “administrator” tasks. The first part of this article will detail the tasks that I find myself performing in addition to the normal “administrator” tasks, such as backups, installing new users, operating-system maintenance, and so forth. Additional tasks are presented (for the most part) in the form of questions. The second part details some of the various factors that will affect staff levels. The third part details some simple perspectives that system administrators can adopt to make their environment more easily administrable. Finally, I will end by quickly examining some ratios which might help you to approximate your staffing needs.

    The following is a very rough set of rules I use to estimate staffing requirements. Your mileage will vary. I should note that these numbers assume maintaining a reasonably stable environment. Rapid turnover of user base, machines, abnormally frequent software changes, growth of the environment, etc results in more work and effect the ratios.

    Type of WorkUnits of labor to deliver best practice performance and scaling factors
    End User Service1 unit to 50 users who get good service.  1 unit for every 200 who get basic service, and  (e.g. students in an educational factory) assuming 8×5 support.  Not needed if you are running the service with a seperate customer care organization. Ratio has to go up if you want help desk to run extended hours.
    24 x 7 Support (Partners, clients, etc)Doing a 24×7 NOC which requires proactive notification and rapid problem resolution scales against  the complexity of the service that is being managed and the number of high touch clients. Places that really care about this have a step in cost of 14 people… a manager, an assistant manager, three shifts, with each shift having two people, one shift running sunday-wednesday, and the other running wednesday-saturday so there is overlap between teams, clean handoffs, and times to do group training.  Less that this can easily result in shifts not being covered.  For example, having a single person / shift can fail if the night shift person falls asleep, or if someone working one of the weekend shifts gets sick. This doesn’t count folks to escalate to. The number of people needed per shift is related to how much normal work there is, and how many simultaneous disasters the team is expected to be able to handle.
    Operating System Management2 units for each make of OS requiring basic support. If you are pushing the OS beyond mainstream / tested scale add an addition 4 units. Doing very complex things requiring hacked kernels, non standard device drivers, etc then add 4 units. If you really care about security add an additional 12 units. Need functionality which isn’t in the kernel at this time and/or something more than basic jumpstart or kickstart for installation and management? Manage this like a software development project and get good engineers working on it.
    Hardware Management / Host Imaging (OS Deployment)1 unit for every 50 boxes if you can’t protect the OS and system configurations from the users (Windows in many environments) or where there is high customization which has to be done by IT staff. 1 unit for every 200 boxes if you can protect the OS from the users without hindering the user, but can’t be automatically build / rebuild / update OS and software without IT oversight. 1 unit for every 400 boxes which have network based software installs (compute clusters or fully automated user workstations with configuration management).  Extremely large scale operations (1,000s of machines running completely cookie cutter) scale more like 500 boxes / unit and might scale as high as 2500 boxes/unit at a google scale where you can afford to lose full racks / service units without needing to immediately take action.
    Appliance Support1 unit for each simple app. 4 units for any complex app which staff are expected to be power users. Initial deployment of apps is typically time consuming. When large number of apps are deployed need to account for the time it takes staff to context switch / “swap in” information.
    Simple Network Services1 unit for every two  basic services: httpd, DNS, mail, printing, SAMBA, etc. Add 2 units if you want them to have better than 99.8% availability. Add 2 unit if you care about security. Add 1 unit if you are scaling larger than the average.  Add 4 if you are scaling to mega size and are beyond what the software was designed for. If you are completely beyond scale, treat a development project and staff accordingly with engineers.
    Complex Network ServicesHighly variable. For example, multi-terabyte database used for data mining could easy consume multiple DBAs + multiple senior system administrators who specialize in performance tuning and large scale storage system.
    Network ConnectivityScales against number of network devices, number of networks, security issues, complexity of routing, HA requirements.
    Coordination and ManagementThe larger and more complex an organization, the more there is a need for coordination roles. People who focus on human management, systems architecture, program management, project management.  This is quite complex. It would be presumptuous to suggest a ratio.

    A solid SAGE II system administrator can handle 4 units of work. A strong SAGE III system administrator can handle 8 units of work. A superior SAGE IV system administrator can handle 12 units of work. There are some rare individuals who have both deep and broad experience, are out of the box thinkers, high EQ, and incredibly focused and production. While they don’t scale against human tasks like end user support better than a SAGE IV level person, they scale significantly better on the technical / systems work. This is related to the lore that there are some developers who are 10x better than a “normal” developer. Over my career have have had the pleasure of working with several of these exceptional performers. This counting system is loosely based on an equation proposed by Sherwood Botsford and found in the comp.unix.admin FAQ. A some point I will update the counting to use my SRE Skill Matrix (excel).

    Other Issues

    Site with one administrator are not very desirable.

    They are a fact of life since many small sites can neither afford nor justify more than one system administrator. It is difficult for one person to have the breadth of knowledge and experience to run a really first-class site, no matter how few machines it has. There will always be some area that is not the strength of a sole administrator.

    Another problem is that the site with a single system administrator has a single point of failure: when the administrator is on vacation (or gets run over by a bus), the site is vulnerable. Carrying a pager on vacation isn’t my idea of fun; however, no one can predict when a crisis might occur. Of course, it’s hard to interest a high-level person in a job that also involves changing the backup tapes and crawling through the ceilings.

    The more homogeneous a site is, the easier it is to support.

    The number of different platforms supported (different machine architectures or different operating systems) increases the complexity of the support task. Upgrading the operating system will have to be done at least once by hand for each platform. Each operating system has it own idiosyncrasies that must be learned and mastered. Most sites want all the platforms to appear identical so that their users can sit down on any of the workstations and get work done. This requires that each platform have identical tools, window systems, etc. This can greatly increase the amount of work the administrator must do. In the best of circumstances this means recompiling programs for each platform. In the worst circumstances, it involves porting software, and fighting with vendor-supplied software. My personal nightmare is trying to support all of X11R4 (from MIT), DECwindows, OSF/Motif, and Sun’s OpenWindows on three different platforms.

    Larger sites can exploit economies of scale.

    Large sites can expand their administration staffs less rapidly than the number of users (or workstations) grows. The reason for this is that as your staff gets larger it is possible for people to specialize. This specialization permits individual staff members to develop a depth of expertise that enables them to understand all the issues on a given topic and solve more quickly whatever problems crop up.

    Secondly, larger sites can leverage off previous work. The first installation of a machine or piece of software is always the most difficult. The second is easier. By the time you have done 50 or 100 installations, you have developed automatic scripts and can do installations in your sleep. I have seen large sites at a 1:100 administrator-to-machine ratio where things ran pretty well. I must caution the reader though: this sort of ratio is only feasible with top-notch people working in a carefully engineered environment with many hundreds of users. Most sites can’t get productive work done with this sort of ratio. This sort of ratio also limits the professional growth of members of the system staff because they will spend most of their time with the day-to-day issues and fire-fighting. This is a shame since an organization’s most valuable resource is its people.

    Increased SA EfficiencyDecreased SA Efficiency
    Automation
    Standards (policy, architecture)
    Effective monitoring
    Common tools
    Robust IS security
    Tight control over what gets loaded on HW/SW baseline
    Redundancy of critical services
    Separating services (single service machines)
    Good training program
    Detailed disaster recovery plans, by system
    System which don’t require backups
    Diverse hardware baseline
    Diverse software baseline
    Lax IS security
    Little or no training
    A staff that is reactive, not proactive
    ad-hoc backups or no backups

    High Availability Sites Require higher staffing.

    Site which need to be highly available (e.g. greater than 99.9% service delivery) will require a higher level of staffing. The reason for this is you need people who can respond almost immediately to any service issues (e.g. 24×7 coverage, ideally at least 2 people deep who can do first and second level resolution, and be able to escalate to subject area experts). You also need to have multiple people for each subject area who are able to diagnosis and resolve complex issues quickly.

    What About Other Platforms?

    The platform which is being supported makes a great deal of difference. My experience is that support of Macintosh and UNIX communities take approximately the same staffing levels. Historically support of PCs running any Microsoft OS seems to require at least double the staffing and delivers a lower level of service. Since Windows XP the ratio doesn’t need to be as high… but I still find administration scales better on UNIX than Windows.

    Other People’s Ratios

    In the last few years there have been a lot of people who have talked about the ratios they think are reasonable. It is common to hear people talking about staff/user ratios of 1:60 where there is some variation in the population and a lot of custom work, and staff/user ratios of 1:150 (or higher) in locations that can use “cookie cutter” solutions, eg universities with hordes of undergraduates or enterprises where people are using computing as a tool rather than looking to innovate on the machines that are being administered. A more realistic set of ratios (based on best practices in the field rather than vendor white pages on TCO) was the Mega Group’s Improve staffing ratios article. There are a number of other studies that have found that in the real world most organizations have not been able to support ratios greater than 30:1.  A Mitre study from 2000 suggested that the ratio is 47:1 +/- 17%.  In a video about  User to Technician Ratios by Justin Nguyen a base ratio of 60:1 was suggestion, with a number of factors which impacts this ratio.

    An example of over inflated numbers can be found in Staffing for Technology Support, a white paper for education institutions.   Unfortunately, these folks are trying to apply staffing ratios from MIT’s Project Athena to the rest of the world. This is flawed for three reasons. First, most sites don’t have the sophisticated tools that Athena had. Second, Athena had people who make Athena run which were not capture in their ratios: student volunteers that did a lot of work and hard core system programmer that developed tools which met MIT’s requirements. Finally, MITs user population is not an average user population.

    David Cappuccio of the Gartner Group suggested in his article Know The Types: Sizing up Support Staffs that there are two ratios that you need to consider. The first ratio is staff to users, an attempt to capture the human part of the equation. This ratio is looking at how many people you need to do what is often called Tier I, help desk, or user support. The second ratio is the number of machines and subsystems per staff, that is capturing how many people are needed to take care of the technical infrastructure. While I like David’s framework, I think that his ratios are too high for user support, and that he has failed to capture the diverse set of technologies most organizations deploy: there is much more than print, file, web, and database servers. There are directory, security, messaging, and collaborative services. To complicate matters, many sites are heterogeneous requiring extra efforts to make one service work for all clients, or worse, resulting in the need services which are based on the client platform. A final complicating factor is that these services often have complex interactions and dependencies which makes them more difficult to deploy and maintain. The result is that David’s ratios will result staffing which will be able to deliver only the most basic services at an adequate level.

    The itbenchmark blog has a number of postings on the topic of staff sizing.

    Conclusion

    The number of administrators required varies greatly from site to site. The one constant is that there are rarely enough system administrators for the responsibilities that they have. At the time this was originally written, I found it was possible for a single person to maintain up to 220 machines (with three different platforms) and give adequate user services to a fairly sophisticated user population of around 80 people. My time is divided between user services (30 percent), general system administration tasks (20 percent), installing new machines and hardware/network support (10 percent), software installation and maintenance (30 percent), custom software development and tracking of trends (35 percent), and site planning (10 percent). You will note that this adds up to 135 percent.

    History of this Post

    In 1991 I posted a note to Usenet responding to a question about staffing ratios.  Rob Kostad asked me to expand that short note into an article which ran with the title “How Many Administrators are Enough?”  in the magazine Unix Review, April 1991. Over the years I have made some, mostly minor updates to the original article. One of these days I will rewrite it completely. While this article was written a long time ago, I find that the ratios are still pretty accurate. If you think I am wrong, send me mail with your experiences.

  • Gamification of Life

    Over the last few years I seen a growing interest in gamification of life.  There is part of me that wants to say the whole idea was silly.  Who needs their real life to be turned into a video game where you are accumulating points and badges. Shouldn’t we direct our lives based on results rather than some artificial scoring systems? Earning virtual points isn’t going to change behavior… or is it?

    I have been following work happening at places like the The Persuasive Technology Lab at Stanford that looks at how interaction with technology can change people’s thinking or behavior.  In the last few months I have seen in a small way how this can work out in my own life. I am convinced that we want to shape people by intrinsic rewards, not badges, but that the badges and scores can be good metrics which reveals an a clear manner project people are making.

    My family owns two cars.  A Prius and a Passat.  If you would have asked me a few months ago, I would have said that Passat is more fun to drive: it has better acceleration, better handling, more comfortable seats.   When I drive the Passat, I tend to push it a little bit.  Take the turns tight, accelerate hard when it’s safe, push to make lights.  I tend to drive in a mildly aggressive manner. My attitudes reflect my driving style.  I find that I am a bit impatient, wanting to go quickly, I get annoyed with drivers that are going more slowly than they need or seem indecisive.

    Prius has it’s own kind of fun.  Trying to get the best MPG score I can.  Now my Passat records mpg numbers as well, both average, and instantaneous… but these numbers don’t really help you maximize your milage.  The Prius though, will shown your accumulated score (mpg since the trip was resent – I do it after each fill up), it has a bar graph of current mpg, charge in the battery, and how much energy you are putting into (or taking out) of the drive system with a line indicating where the car will likely switch from running on battery to starting the gas engine and a second line indicating when you are switching from running the engine efficiently (eco) to burning fuel (full power). As I started to drive the Prius I noticed that I was trying maximize my mph score. I would accelerate more slowly.  I was paying more aware of how traffic was flowing to minimize the amount of braking I had to do, and worked to keep the braking in the range that the regenerative system would capture energy.  I found myself adjusting my speed on the road to maximize milage.  Rather than pushing to squeak through a light before it changed, I found myself considering fuel economy introduced by the light, that is, could I make it through the light on eco which would result in a better score than having to come to a complete stop.  I have also noticed that I am a bit more calm and patient, because “the game” rewards that.  Wow, it seems like both my behavior and attitude were being effected by having a score.  Of course, I told myself it was just about being economical and being a good stewart.  This is why I was driving the Prius rather than the Passat.

    Well… maybe not. One week I noticed my score was down to 40.2mpg, lower than my normal 45-48mpg score.  As the score stayed low and I watched the game time running out (fuel meter was approaching the half way mark) I knew that I needed to do something, or the score would be low when the game ended (next fill up). I found myself considering taking an unnecessary trip on the freeway so I could improve my score.  Oh my, I was caring more about the score than using resources wisely. I didn’t take the unnecessarily trip, but I was tempted to.  A note to designers: make sure you are instrumenting that right things, or you might discover you are encouraging the wrong behaviors.

    I now find myself wondering, am I driving the Prius because it is more economical, or because it’s fun and I am trying to get good scores?  Or maybe it just because it’s a nicer car with a sun roof and a plug for my iPhone. Every now and again I will express joy or sorrow at my score.  Helen laughs at me and says that she is going to get me a driving video game… but why would I need one?  I use one every day, and it gets me (and her) the places we need to go.  My just wish Toyota had the Prius record the top 10 scores like a good video game.  Even better, top score with any Prius’ in the neighborhood.  There would be plenty of players since Prius in our neighborhood are as common as pickup trucks in Texas.  My top score for a full tank of gas is 53.5mpg.  What’s yours?  🙂

  • Environments for Teaching Kids to Program

    In 2007 my ten year old daughter asked me to help her learn to program. It’s not that she’s interested in computer science, it’s that she knows that programming is required to create games and other things that she has imagined. I investigated a multitude of languages / environments. The following is what I decided would be the best languages for instructing kids at that time. Some updates in 2024 below.

    • Scratch or Logo for simple projects and younger kids. Both provide simple worlds to explore.  There was more material for Logo, but Scratch is “more fun”.
    • Squeak (smalltalk) for older kids whose focus is building artifacts more than programming. 
    • Scheme for kids focusing on learning computer science. The kids can focus on CS principles rather than syntax. Scheme can be used to teach a number of programming styles.
    • JavaPython, or Ruby for kids that want a quick path to vocational programming.

    A few months later I discovered Alice which was designed for children who want to tell stories through created worlds. Alice has been used very successfully with middle school girls. The environment uses a drag and drop editor to drive an animation 3d world.

    In 2024 there is a richer set of options and a lot of good material.

    • Scratch for kids wanting to learn concepts and have some fun
    • Scheme for teaching fundamental computer science
    • Python for a quick path to vocational programming
    • JavaScript for people who want to build web or simple model applications. Several of the classes / projects on code.org use JavaScript.

    In 2007 I decided that Squeak was best option for my daughter, especially using the ReadyPC environment from Squeak: Learning to Program with Robots and that it had an Alice like Wonderland environment. After we started, it has become clear that Alice would have been a better choice because she is more interested in storytelling than creating artifacts. There are also a number of other other noteworthy languages that I considered, but I rejected them for various reasons after a brief investigation. Others might find these languages useful for their needs.

    The Search

    Years ago I was inspired by the book Mindstorms which made the case to use computers as a tool for students to explore and learn rather than merely an automated tool for rout memorization or for teaching computer science. In the early 1990s I helped run some classes in Scheme and Logo that focused on discovery and creativity.  I figured there had been a lot of advances in the last ten years. So I started by looking for projects which were not just teaching kids to program, but were using computers and programming to help kids explore the world around them. I guess I wasn’t looking in the right places, because I had trouble finding people doing interesting things. I have recorded what I discovered in the additional information end the end of this document.

    I spend some time trying to find what languages / environments and curriculum were being successfully used with kids. The rest of the document details what I found. For each language I have recorded my biased assessment of it’s pedagogical value, small bit about the history of the language, educational material / practices I could find, a summary of possible implementations to use, and a list of additional resources. I believe the best environment would provide minimally:

    • Simple, clean, powerful language
    • Easy to use interactive development environment (IDE)
    • Quick development cycles with direct commands
    • Easy access to graphics… want near immediate feedback

    Logo was designed from the ground up for use as a pedagogical tool and is very easy to learn. Logo is good for a very basic introduction to programming or for exploring mathematical principles, especially geometry. Most logo implementations provide a friendly IDE. A down side, there are no industrial strength logo implementations and the programming model is fairly simple. These days, visual “block” oriented languages like Scratch are better for youngsters. While more advanced computer science could be taught in logo, I would recommend using scheme, python, or Pyret.

    The Language

    Logo originally designed at MIT in the late 1960s as a educational tool for children. Logo itself is a functional language which is normally implemented as an interpreter within an interactive environment. All logo implementations to my knowledge provide a read, interpreter, execute loop which allows the direct entry of expressions as well as the creation of functions and provide turtle graphics makes it extremely easy for kids to immediately gain visual feedback for the programs they create. Logo hasn’t changed significantly over the years though a number of logo implementations have taken the 2d graphics “world” of turtle graphics to much richer “worlds” which support 3d graphics, animation, and/or music.

    Educational Use

    Through the 1980s logo was the premier language and environment for thoughtful education. There is a reasonable body of research, curriculum, and tools for someone wanting to use logo for instruction and exploration. There were a number of MIT-AI memos about logo. The Logo Foundation continued to generate educational resources as well as often workshops to help teachers better use logo in educational settings. Today, Logo is typically used as a tool to explore topics such as geometry rather than a way to teach “programming”.

    Implementations

    • UCB Logo: As close as you will find to “classic logo” which will run on just about any machine.  Provides basic logo with turtle graphics.  Has been ported to a number of platforms. [Freeware: DOS, Windows, Macintosh, UNIX]
    • LCSI Microworlds: seems to be the premier commercial logo. The staff of LCSI have been near the center of the logo community since Seymour Papert help found the company. In recent years the LCSI has updated their implementation for the 21st century including the support of richer “worlds”, robot systems such as Lego mindstorms, and publishing and sharing projects via the web. [Commercial: Windows, Macintosh]
    • Terrapin Logo is a “classic” logo implementation. Many children used terrapin logo on Apple IIs and later IBM PCs and Macintoshes. In recent years Terrapin updated the UI to confirm more to the native OS GUI and added support for lego mindstorm. [Commercial: Windows, Macintosh]
    • mswlogo, and fmslogo are updated versions of UCB logo which support Windows functionality such as direct access to the GUI and other OS functionality. Some function names have been changed from classic logo, for example “forward” is now “fd” [Freeware: Windows]
    • For other options see a list of  logo software.

    Resources

    • The Logo Foundation Resources List
    • All of the web sites listed in the implementation section have links to resources for their specific implementation.

    Scheme

    Scheme is well suited for classic computer science education. The scheme language is clean and simple. I would recommend considering scheme for teaching computer science material because the student can focus on the core concepts they need to understand without spending a lot of time thinking about the language they are working in.

    The Language

    Scheme is a language rooted in the Lisp community which was originally designed to explore Carl Hewitt’s theory of actors as a computing model. [See Evolution of Lisp, see page 33-36 for a brief explanations of scheme’s history]. Scheme has exceptionally clear and simple syntax and semantics making the language very quick to learn. You will find that the full description of scheme is concise and extremely readable. Yet, scheme supports a wide variety of programming paradigms, including imperative, functional, and message passing styles. With additional libraries it is possible to explore object oriented, meta-object, and aspect orient approaches. 

    Educational Use

    In the early 1980s scheme started to displace Pascal as the language of choice for computer science education in progressive schools. For a short time I had hopes that Scheme might become the dominate instructional language, but that didn’t happen and the number of schools using Scheme has significantly decreased. I found people whose introduction to computing was by way of the classic introductory SICP textbook tended to have better foundational understanding that the more commonly used textbooks. There are several reasons why scheme is ideal for teaching introduction to computer science materials. There are several excellent college level textbooks for teaching computer science in scheme as well as a number trade texts.  The two most popular texts these days seem to be:

    Implementation

    • Racket environment provides the best IDE for teaching using Scheme, and several other scheme inspired languages [Freeware: Windows, Macintosh, UNIX]
    • BEE: Decent IDE [Freeware: UNIX w/ Emacs]
    • Lisppad: Simpe IDE [Freeware: Macintosh, iPhone, iPad]
    • LambdaNative: [Freeware: Gambit based which creates apps for iOS, Android, etc]
    • BiwaScheme: [Freeware: Scheme in JavaScript / Your Browser]
    • See scheme wiki’s list scheme implementations for other options

    Resources

    • scheme.org is a good place to begin learning about the scheme language

    Squeak (Smalltalk)

    Squeak provides an extremely rich development environment. The down side of squeak is that the complex environment is fairly different from everything else. The Smalltalk language also uses a moderately complex syntax which is quite different from most other languages. So the learning curve is more than say scheme, and the learning invested into learning Smalltalk is unlikely to transfer to other languages. Even with the extra complexity I would recommend using Squeak to explore general topics, building multi-media projects, or creating simulations because the environments richness offsets it’s idiosyncrasies. I would recommend using some other language if you want to focus primarily of computer science.

    The Language

    The Smalltalk family of languages that was developed at Xerox PARC. The original versions of Smalltalk was designed to teach younger children. Over time Smalltalk evolved into an extremely rich programming language and environment designed for professional programmers. Smalltalk is a purely object oriented language and the environment is also written in Smalltalk. The syntax is quite different from popular language in common use. Squeak is a version of Smalltalk which was developed to be a freely available. It’s extremely powerful, complex, with a GUI interface which doesn’t follow the native windowing system user interface guidelines. It is easy to change and evolve Smalltalk, yet little has been changed since 1980. Hopefully more people will start to work on Squeak and take it to the next level.

    Educational Use

    Squeak and tools built on top of squeak seems to have taken up the “premier educational tool” mantle from logo in the educational research community. There was a nice article/interview about squeak. The best place to find information about using squeak for education will be found at Squeakland. If you click on “download” you will find a repackaged Squeak designed to make it easier for kids to get a good start by hide some of the environment’s complexity.  

    • Powerful Ideas in the Classroom by B.J. Allen Conn and Kim Rose. Short text designed for elementary age kids. Gets them started using the Squeakland environment and with etoys components. 
    • Squeak: Learn Programming with Robots by Stéphane Ducasse seems to be the best text for teaching programming which would be appropriate for late elementary or middle school students. Old Miner follow-on to “Robots” will take students into more advanced topics.

    Implementations

    • Squeak [Freeware: Macintosh, Windows, UNIX, PocketPC]
    • Squeakland (@archive.org) [Freeware: Browser Helper for Macintosh, Windows]
    • SqueakJS [Freeware: Lets you run Squeak in JavaScript such as your browser]

    Resources

    Python

    Python is a clean language which are easy to learn. Python is popular in the real world for developing web oriented applications, doing data analysis and many other tasks. Given many kids’ desire to create cool web pages, there is a nature drive which can be harnessed for educational purposes in python. The downside of python is that there isn’t a really great, kid friendly, IDE.

    The Language

    Python is a dynamic language designed for the creation of scripting and applications in a variety of domains. Python was built for working programmer, but due to the clean design, are well suited for educational uses. Python has a rich library and an extremely active community.

    Educational Use

    In 2007 material was pretty scarce for teaching python. The only introductory material I was able to find was:

    In 2024 there are plenty of materials. From what I can tell, many of the best engineering schools are using Python in their introduction to computer science classes. A few examples

    Implementation

    • Python: [Freeware: Macintosh, Windows, and UNIX]
    • PyCharm: Arguably the best IDE for Python. [Free/Paid: Macintosh, Windows, and Linux]
    • Trinket: Simple IDE / interpreter which runs in the Browser. Good for getting a quick start at the beginning of learning.
    • ActivePython: In 2007 the best version of Python for Windows. No clue how good it is today

    Resources

    Java

    In the 2000s Java unfortunately has become the most common language used in high schools and for CS1 & CS2 in college and college prep curriculum, though by 2024 it seems like Python is more often the language used in these course. On the plus side, Java has become a popular vocational language and has a rich and growing set of libraries. The downside is that there is a large learning curve, students typically end up focusing a large amount of time on learning the libraries rather than focused on creating unique / new code, and the develop/test/evaluate cycle is slow compared to the environments provides by most of the other languages in this list.

    Language

    Java was original developed to be a working language industrial strength applications and operating systems incorporating features found in a number of languages and making up for some deficiencies found in C++. Java is the first language to win a large popular following which has a garbage collector, modules, a decent type system, exception handling, and a clean object system. Java is commonly used in industry for the creation of business applications. Java is often used for web based applications which require complex user interaction.

    Educational Use

    There are a wide variety of text books and curriculum for classic computer science education in Java, especially at the college level. Sometimes Karel the Robot or Alice are used at the beginning of a course to provide an easier framework for programming. Once the core concepts related to computing are understood, the students switch to using Java. I would strongly recommend starting students out with Karel or Alice if students have no past programming experience.

    In 2007 some resources for teaching Java to kids (still accessible thanks to archive.org) were

    These days, I am sure there are materials that are actively maintained, but I haven’t gone looking for them since I am not particularly fond of Java for instruction.

    Implementations

    • bluej: One of the best IDE for instruction due to it’s simplicity
    • Eclipse Seems to be one of the most popular IDE for Java. Industrial strength used by many professional developers.

    Resources

    JavaScript

    To be added.

    Language

    Educational Use

    Implementations

    Resources

    • Code on iOS: IDE for JavaScript (and other languages) which runs in iPhone and iPad

    Other Languages

    • AgentSheets: Disovered this recently. Looks like a pretty cool environment for building simulations. A lot of kids want to make games and this would be a good environment to do that in.
    • Alice: Uses a drag and drop editor to drive an animation 3d world. A number of universities are using Alice to help student understand the core concepts found in CS1 before working in Java. Alice like functionality has been added to Squeak as Wonderland. Can be pitched as a tool for storytelling to folks who aren’t excited about programming.
    • C#: Not significantly better than python or java with less instructional material
    • Factor: Forth meets lisp. Interesting system but doesn’t seem to be as easy to use as some of the other systems I are considering.
    • Forth: In the days of small memory, slow machines I would have considering Forth… but these days it makes sense to use a more advanced language that is memory safe
    • Greenfoot: A set of java objects that produce an object oriented, graphical environment for kids to build tools and explore. The authors suggest that it offers the best of the object interaction of BlueJ with a microworld which provide visualization like Karel the Robot.
    • Guido van Robot: Logo with python syntax. Designed to be a easy way to get into python, much like Karel the Robot was an intro to Pascal.
    • Haskell with pan#: Pure functional language. Pretty cool for CS, but steeper learning curve than I would want for younger kids.
    • Karel the Robot: Originally a gentle introduction to Pascal from CMU. Multiple forms of Karel have evolved over time.  Search the phrase karel the robot for a variety of resources.
    • KPL: Kid’s Programming Language: looks like a simplified version of Visual Basic meets C# which Microsoft is promoting for use with first time programmers / kids. As you might expect, KPL was build in Visual Studio in C# and is tied pretty solidly to Microsoft’s .NET framework. Don’t expect KPL to run on anything but Windows. Think of KPL & C# as being the proprietary equivalent of Karel & Java. [Freeware: Windows]
    • Kodu: logo meets video games
    • love2d: gaming engine + Lua
    • MakeCode: Microsoft’s block system which embeds JavaScript and/or Python providing a nice transition from a block / visual system to text oriented code and can be uses with microbit for bridging into the physical world.
    • Processing: a graphics oriented IDE which execute a graphics oriented language which is built on top of java
    • Pyret: A language in the spirit of Scheme with a Python like syntax with a wide array of instructional material at bootstrampworld
    • RCX: Visual programming language for Lego Mindstorms. Build programs on the PC and then execute them on a mindstorms robot. Somewhat limited, but you do get to build and control robots. Mindstorms are not cheap.
    • Ruby: Materials in python are more developed but it seems like Ruby is catching on. One nice thing about Ruby on Rails is that very sophisticated applications can be created with little effort. You can take advantage of the auto-magic at the beginning and the progressively have the students learn what’s happening under the covers. hacketyhack was been constructed to provide newbies with a friendly environment.
    • Scratch: Drag and drop interface where you plug actions, controls, sensors, etc together to control sprites and environments. Easier to use than Alice, but originally lacked the 3D rendering. Scratch would be an ideal environment to use anywhere people have historically used logo. Version 1 was built on top of Squeak, Scratch has been rewritten in JavaScript and happily runs in a modern browser.
    • Small Basic: Free language from Microsoft based on the original basic running in a .NET framework. Just 14 imperatives. Designed for kids.
    • Stagecast Creator: No longer around. Several junior high girl’s schools seemed to be using it.
    • Toontalk: First-person-ish environment which using direct manipulation to interact with the virtual world. I would think building anything substantial would be quite tedious. [Commercial, Windows]

    Around 2007 there were a few discussions I found about educational programming languages including Don’s Box discussion on teaching younger kids to program and lambda’s follow-up. Some other idea could be found in kidsdomain list of programming languages and the Educational programming languages article on wikipedia. Microsoft has a “kid’s oriented” coding4fun section of MSDN.  I am sure there are more up-to-date resources now.

    Additional Information

    Active Research Programs

    Interesting People

    Other Information

    Other Information (from 2007)