For anyone interested in implementing Hobby's algorithm in their own projects, I recommend the paper "Typographers, programmers and mathematicians, or the case of an aesthetically pleasing interpolation" by Bogusław Jackowski [0]. It was my primary reference when working on the code for the examples in the blog post, and I found it easier to understand than Hobby's original paper. I mention this paper in a comment in the linked source code but it looks like I left it out of the post itself so figured I should share it here.
Hi Raph! I'm the author of the blog post. I actually read your PhD thesis when I was working on this project and trying to wrap my head around splines. It was a huge help to me in understanding the landscape of the field and how to think about and compare different classes of splines. Just wanted to say thanks!
It depends on the definition of a “day” that you use, but due to Mercury’s elliptical orbit sunrises and sunsets are weird. [1] It takes 59 Earth days for the planet to revolve once around its axis, but from the surface it takes 176 Earth days to observe the sun making a complete circuit of the sky.
> But when Mercury is moving fastest in its elliptical orbit around the Sun (and it is closest to the Sun), each rotation is not accompanied by sunrise and sunset like it is on most other planets. The morning Sun appears to rise briefly, set, and rise again from some parts of the planet's surface.
There are a number of rich text editors that model documents as a flat array of characters and a separate table of formatting modifiers (each with an offset and length). Medium's text editor is one of them. This post [1] on their engineering blog introduced me to the idea, and I think it's a good starting point for anyone interested in this topic.
ProseMirror (a JavaScript library for building rich text editors) also employs a document model like this. The docs for that project [2] do a good job of explaining how their implementation of this idea works, and what problems it solves.
Very cool that the author had a custom keyboard made with their keymap printed on it.
Personally I like being able to type math symbols on occasion but don't do so often enough to benefit from a custom keyboard layout that I'd then have to memorize. I didn't have a good way to do this until about a year ago, when I learned about Espanso [1] which is a cross-platform text expander. I installed it and set it up to substitute various (vaguely LaTeX-inspired) macros to UTF-8 strings. For example, typing the following keystrokes
x = R cos(:phi) sin(:lambda :minus :lambda:nought)
becomes x = R cos(φ) sin(λ − λ₀)
I chose ':' as a prefix for all my macros but this is just a self-enforced convention; you can configure a substitution for any sequence of keystrokes. Since I gave all the characters names that made sense to me, I don't have to think much when I type them.
A few of the substitutions I get the most mileage out of:
- The Greek alphabet, both upper and lowercase (:theta → θ and :Omega → Ω)
- Double-struck letters for numerical sets; e.g. :RR → ℝ
I do something similar with espanso on Linux, but I chose / instead of :, and my commands are mostly Latex commands. On Windows I do it with AutoHotKey. I have superscript and subscript numbers too.
I don't think it's generally possible. The FIPS code just identifies the county (the first two digits are the state, e.g. 06 for California) and the final three identify a county in that state. So technically that column is redundant with the "county" and "state" columns; I suspect they've included it to make joining this dataset to other data that might use different name-formatting of counties/states easier.
ZIP/postal codes are generally smaller (in the county I live in there are almost a hundred ZIP codes). I'm not sure they're even guaranteed to be entirely within one county either. We tend to think of ZIP codes as boundaries but they're actually delivery routes (which if you squint can be converted into boundaries by joining the properties that those routes serve together).
Pick a lat/long, and you can map between. Or find the centroid of the zip code and map accordingly. Or you might consider unions between the geometry objects. Qgis3 has a lot of great packages for this.
This is phenomenal. I've been scraping the data from primary sources for just Washington state for the past week [0], in order to make this chart which I hacked together last weekend [1].
Doing this for just one state was a pretty substantial effort. I imagine there are multiple people at the Times who are spending several hours a day reviewing and cleaning scraped data (seems every couple of days some formatting change breaks your scripts, or a source publishes data that later needs to be retracted).
The Times dataset appears to contain per-county case and death observations in a time series, going all the way back to the first confirmed U.S. case in January in Snohomish County, WA. This makes it by far the most comprehensive time series dataset of U.S. COVID-19 cases publicly available.
Some people in this thread linked to the Johns Hopkins CSSE dataset; I've looked at this data but it doesn't go back very far in time for the U.S., and the tables are published as daily summaries with differing table schemas which makes them hard to use out of the box. For some days earlier in March, "sublocations" aren't even structured (for example the same column contains, "Boston, MA" and "Los Angeles County", making it very hard to use). No disrespect to the team behind the JHU dataset; it attempts to cover the whole world since the outbreak began which is an incredible and difficult goal. But for mapping and studying the outbreak in the U.S., the Times dataset will likely be the best choice right now.
Huge kudos to the New York Times team for making this data freely available.
This is pretty neat. A week or so ago when "MathJax turns 3.0" was on the frontpage [0], I followed a link to this very thoughtful comment [1] from 2019 by svat about the landscape of math typesetting on the web. Since then I've been thinking a little bit about MathML and how compilers from other more input-friendly formats to MathML might encourage wider adoption. So I'm excited to see this library.
I've heard of AsciiMath before but hadn't ever had a chance to play with it, so I appreciated the live demo on the project website. One thing I noticed is that AsciiMath uses whitespace around operators to determine binding order.
When there's equal spacing around neighboring operators, normal order of operations seems to apply.
This seems fairly intuitive, but might not scale to large, complex equations as well as TeX's bracket syntax does. Nonetheless, I think I like it for simple equations.
Question for the author: you mention on the page that Mathup supports an input language inspired by AsciiMath [2]. What are the differences? Does Mathup accept a subset of AsciiMath, or are there cases where the syntax diverges? And if the latter is the case, what motivated devaiting from AsciiMath's syntax?
Thanks for the comment. This project was previously called Ascii2MathML and I tried to stay as true to the original AsciiMath language as possible. But I’ve since then moved away from it (which is why I renamed it to mathup) as I found it could be improved upon in some minor ways (personal preference really).
There are some trivial differences: e.g. `bf` for boldface instead of AsciiMath’s `bb`; or the `.^` infix for overscripts instead of the `over` prefix. The matrix syntax is also quite different: AsciiMath uses nested brackets, while mathup uses row separators (`;` or `\n`). Most significant is the difference in grammar (you’ve noted the significant white space which is not a feature of AsciiMath).
You can see my attempt of writing down the grammar here[1]. However I’m very much a novice when it comes to compilers and lexical analysis, so this grammar is probably not accurate—in fact when I originally wrote Ascii2MathML I wasn’t even aware that I was writing a compiler. But in words, a set of tokens and operators with no internal white space tends to be grouped together. There are a few infixes (`/`, `^`, `_`, etc.) which generally take precedence but operate on a group of non spaced tokens if they are able to.
I originally wrote this because I wanted people that didn’t necessarily know TeX to be able to drop in a simple expression in comment threads and forums. I also liked to provide as much expressive power as possible, but I found AsciiMath lacking a little in expressiveness. The white space significance I found made writing a little easier, but in longer expressions it is a bit hard to use, but then again, this tool was always intended for smaller expressions anyway.
This looks like a great new introduction to D3. It uses Observable as an interactive playground for D3 example code, which I think is an ideal environment for teaching concepts like these. I hope this will help more folks get started in visualization.
If anyone hasn't given Observable a try yet, I highly encourage you to do so. It's more than just "IPython/Jupyter but for JavaScript" — it's reactive, like a spreadsheet. You define "cells" of JS code that are automatically re-evaluated whenever one of their dependencies (another cell) changes.
It's an amazingly productive programming environment. These days, most of my JavaScript projects start off as Observable notebooks because it's such a great platform for experimentation. And I find myself wishing for Observable's features whenever I'm developing in other languages.
I know reactive programming is nothing new, but Observable has been my first opportunity to use it regularly, by "backporting" reactivity into one of the languages I work in most often. Being able to use it for prototyping and visualization for the past couple years has given me a really warm, fuzzy, "what-a-time-to-be-alive" feeling.
The markup for the callout buttons/links on the example page [0] is just <a href="#"><em>Button text</em></a> (for outlined) and <a href="#"><strong>Button text</strong></a> (for filled). That's a pretty creative solution that I definitely haven't seen before.
Giving opinionated styles to unclassed HTML elements is definitely not the right fit for every website. But, given this project's goal of being a minimalist, quick-start stylesheet that requires no classes, I think this use of `a em` and `a strong` selectors to create button-y links is pretty ingenious.
I think it undermines the semanticity of the markup though. A hyperlink isn't supposed to render as a button, or vice versa. If this was just a bolded word in normal inline link text, the button presentation would be very unwelcome.
[0]: https://tug.org/TUGboat/tb34-2/tb107jackowski.pdf