The Rijksmuseum has a comprehensive Vermeer exhibit that looks great. The Rijksmuseum is well worth the visit on a normal day (they have Rembrandt’s Night Watch which is one my very favorite paintings) but this is an exceptional opportunity. I would love to go but not sure that we would be able to make the trip before it closes. Short of that, they have a well done virtual tour and explanation of the main pieces.
Read MoreMoving Back Home
We all know that AWS is expensive. But it used to be that it was by far the best hyperscaler and had the appeal of being novel. AWS profits reflected that. Now that it’s been around a while, the bloom has come off the rose. There are now solid competitors (especially Microsoft Azure and Google Cloud) and enterprises are starting to move their infrastructure back to their own data centers.
Read MoreFun with Promises
One of the problems at the end of the chapter on asynchronous programming in Modern JavaScript for the Impatient is to: Write a loop that invokes the produceRandomAfterDelay function from the preceding exercises n times and prints the sum once the summands are available. This was an interesting problem that helped me understand JavaScript promises much better. The most important learning is that promises are deferred operations and the only way to get results out of a promise is to use then.
Read MoreHistorical accident
This article on the metric system in the US is great. I’ve read a lot of history but I’d never heard the story about pirates capturing a French scientist who was on his way to bring a meter and a kilogram to the US at the request of Thomas Jefferson. Jefferson was a very interested in a new system of measures to replace the crazy quilt of measures we inherited from the UK but the scientist never got there.
Read MoreObject literals as named objects
Some languages, like Python, have named arguments that make it easy to provide defaults and put arguments in any order. JavaScript doesn’t have this sort of thing. Modern JavaScript for the Impatient shows an interesting way to do this using object literals. The idea is that you specify your default args in a structure. That allows the function caller to override the arguments by name. If no argument value is passed in, the defaults are used.
Read MoreDitch it
LastPass was bought by a private equity company. As is often the case, that change of ownership heralded a change in the business model. Usually, these changes are not beneficial to customers. Since the acquisition, LastPass has raised prices and had a very significant security breach. I dropped it early last year after they changed the subscription plan and switched to Bitwarden. Bitwarden has worked really well for me and I would recommend it to anyone looking for a cross-platform password solution.
Read MorePricy clouds
37Signals has a large AWS bill. About $3.2M USD last year. It sounds like they have been proactive at managing the bill and that’s just what it costs to run their business on AWS. They are an interesting and smart company and it seems they are going to try to move some/most of that out of AWS. Dell will be happy to hear that but I don’t know if it will result in significant savings because you now have to hire and manage people to run the show robustly (especially the 8PB of storage).
Read MoreMore fun with GPT
I was curious to see how well ChatGPT could solve a simple programming problem, so I asked: Write a JavaScript function to return the prime factors of a number in an array. A few seconds later, it came back with a pretty good answer: function primeFactors(num) { const factors = []; // check if number is prime function isPrime(n) { if(n<2) return false; for (let i = 2; i <= Math.
Read MoreStrictly speaking
One of the JavaScript golden rules is to use strict mode. It does tighten things up compared to the so-called “sloppy mode” and seems to generally be a good idea. Strict mode has been around for a while (since 2009) and does a bit more than just throw more errors. In the docs, the impacts of strict mode are listed out: * changes converting mistakes into errors (as syntax errors or at runtime) * changes simplifying how variable references are resolved * changes simplifying eval and arguments * changes making it easier to write "secure" JavaScript * changes anticipating future ECMAScript evolution.
Read MoreFirst glimpse
Three years ago, scientists identified the first strain of covid-19 in China. I remember hearing vague rumors of a new virus going around in China starting around late January 2020. It seemed bad, but there were other viruses like the avian flu and swine flu that also seemed like they were going to spread but never got going. It’s almost unbelievable how much change was wrought by one tiny virus. Just about everyone I know has had it.
Read More