Indiana native. Purdue grad. Programmer / Dev Ops in trade. Dog owner. Husband and father. Have questions? Ask!
246 stories
·
1 follower

Getting to the Indianapolis Motor Speedway (1940 and before)

1 Share

Today’s entry will be graphics heavy. This is going to be a very strange Memorial Day weekend in the Hoosier Capital. The “Greatest Spectacle In Racing” has been postponed. But I wanted to look back at how newspapers covered getting to the track…especially before 1940.

Indianapolis Star, 30 May 1919

A look at the Indianapolis Star of 30 May 1919 shows some of the old road names that existed at the time on the west side of Indianapolis. Waterway Boulevard was still Crawfordsville Road in 1919. And that Crawfordsville Road crossed White River on the old Emrichsville Bridge. The Big Eagle Creek Gravel Road is now Cossell Road and Winton Avenue.

Indianapolis News, 29 May 1923
Indianapolis News,
29 May 1923
Indianapolis News, 29 May 1928
Indianapolis News, 29 May 1928
Indianapolis Star, 29 May 1940


Read the whole story
RyanAdams
1 day ago
reply
Central Indiana
Share this story
Delete

Where’s Waldo? in the Social Distancing Age

3 Shares

Where's Waldo Pandemic

Finding Waldo is a lot easier when no one can go outside. On his Instagram, art director Pedro Mezzini reimagined Where’s Waldo for the age of social distancing. He’s even wearing a mask! See also Clay Bennett’s version.

Tags: books   Clay Bennett   COVID-19   Pedro Mezzini   remix   Where’s Waldo?
Read the whole story
RyanAdams
3 days ago
reply
Central Indiana
Share this story
Delete

Side Scroller

2 Shares

I’ve never met Ian Albert, but years ago he painstakingly scraped and pasted together a set of maps and backgrounds from a various oldschool games, an effort that’s helped me in a bunch of odd little ways over the years and for which I’m grateful. Of particular interest today are the original Super Mario Brothers maps; for the sake of this exercise, let’s start with world 1, level 1.

ImageMagick and FFMpeg are a pair of “classically-Linux” command-line tools, in terms of how insanely complex and opaque they appear until you’ve worked with them for a bit and can sort of see the logic of their approaches. Even then the documentation takes some getting used to – the man page should just say “don’t bother, go to the website” – and even then you’ve gotta kind of fumble your way towards competence if you want to use them day to day.

Well, maybe you don’t, but I sure do. In any case once you know they exist you muddle your way to doing a lot with them. In particular, “convert” from the ImageMagick tool suite lets you upscale some of those Mario-level gifs to PNGs, like so:

$> convert mario-1-1.gif -scale 300% mario-1-1.png

We’re doing this conversion because FFMpeg (apparently?) doesn’t like to pan over gifs as an input stream but is happy to do that with PNGs, and scaling it up gets you an image size better suited for modern screens. We’re admittedly scaling up and then compressing something that eventually gets upscaled again, which looks like it should bea waste of effort. I’ve tested it, though, and on this machine at least it looks like movie upscaling comes out a lot mushier than static image upscaling and this approach is quite a bit crisper.

In any case, then you run “file” on that resulting image to see how big it is:

$> file ./mario-1-1.png
./mario-1-1.png: PNG image data, 10152 x 672, 4-bit colormap, non-interlaced

Do a bit of loose math to figure out your frame width and subtract 16/9 * 672 – that is, the aspect ration of your monitor times the height of the image – from the length – to get the number you need to work with next – in my case rounding to 1200, it’s 8952.

That’s the number of frames you’re going to tell FFMpeg to pan across, like so:

$> ffmpeg -loop 1 -framerate 5 -i mario-1-1.png -vf crop=1200:672:n:0 -frames:v 8952 -pix_fmt yuv420p mario-1-1.mp4

Now, order of operations and operation context both matters in FFMpeg usage, which adds a degree of complexity to figuring out wtf you’re doing with it, but walking through that command:

the “-loop” option is specific to the image processing part of ffpmeg, and in turn specific to some image-processing formats, so “loop 1” might or might not error out saying “unrecognized option”, depending on where you put it in the command line and which image types you’re choosing to process, which is not super helpful. In this case, it works for .png input files, and it means “go through this set of input images once”. We’ll get back to “-framerate” in a moment.

“-i” is input the png of the mario level we made earlier. The rest of this command is where the proverbial action is.

“-vf” means “create a filtergraph”, which is FFMpeg-ese for “transform the set of input images you’ve decoded in the following way”. “The following” can get pretty crazy, as you might imagine, but fortunately for us this will be reasonably simple in intent, despite the somewhat daunting syntax.

In this case, it means “crop out a sub-image from the given input image, of with 1200 and height 672, starting at horizontal offset “n” and vertical offset 0. “n” in this case is implicitly provided by the “frames” part, as we iterate over the frames from zero to the value of “-frames:v”

The “-pix_fmt yuv420p” part – “pixel format”, is what that means – I don’t really understand, beyond the fact that FFMpeg can encode videos in way more formats than browsers can easily decode, and its’ default idea of “best” doesn’t work everywhere. This incantation seems to fix that, which isn’t particularly satisfying but is definitely part of the whole fumbling-towards-competence part I mentioned.

In any case, the “-framerate 5” part is the interesting bit. That’s there because about nine thousand frames – 8952 specifically – divided by the number of seconds in a 30 minute meeting is very close to five. Five frames per second is really slow, so the resulting output video is, as predicted by our basic arithmetic, a lazy 29 minutes and 50 seconds long:

… and that’s the story of how you make a videoconference background that scrolls slowly through a Mario level over the course of half an hour.

A few notes:

  • If you leave out the framerate option and just want to see it scroll by at a default 25 frames per second, the movie is five minutes and change, which is amusingly a few seconds longer than the best speedruns of the entire game.
  • That crop=1200:672:n:0 option elides a lot of possible complexity; there’s an entire mathematical-expression interpreter under the hood of of crop and all the other FFMPeg filters, so if you want a 1080p movie panning diagonally across some of the many classic and modern works of art that are available now from any number of places, you can roll your own with relative ease.
  • The temptation to edit these to say something like “Thank you, Mario! But Peach went to another meeting.” is strong; if I get around to that, the fonts are here or maybe here.
  • I really need to get out of the house more. I guess we all do?

Update: A friend points me at FFMprovisr:

“FFmpeg is a powerful tool for manipulating audiovisual files. Unfortunately, it also has a steep learning curve, especially for users unfamiliar with a command line interface. This app helps users through the command generation process so that more people can reap the benefits of FFmpeg.”

Thank you, Sumana!

Read the whole story
RyanAdams
7 days ago
reply
Central Indiana
Share this story
Delete

A Pandemic Strikes Business Town

4 Shares

I featured Business Town, an ultra-capitalist spoof of Richard Scarry’s Busy Busy Town, on this site a few years ago. Their last few entries have focused on the pandemic and they are devastatingly spot on.

Business Town Pandemic

Business Town Pandemic

(via waxy)

Tags: business   COVID-19   remix   Richard Scarry
Read the whole story
RyanAdams
18 days ago
reply
Central Indiana
Share this story
Delete

We, the Hard-Working, Newly Homeschooling Parents of America, Have Rewritten the Common Core Standards

1 Share

Domain 1: Snack Time

Grades K-5

1-A. Students will learn not to ask for a snack every five minutes, or in the thirty minutes directly following a full meal.

1-B. Students will learn the elements of a healthy snack, and in particular, that consuming one’s body weight in goldfish crackers is not a healthy choice.

Grades 6-8

2-A. Students will learn to get their own damned snacks.

2-B. Students will learn that consuming every edible item in this house within the first day of home confinement is not compatible with sustaining life in this house.

Grades 9-12

3-A. Students will learn to make a mean bowl of Rice Krispies.

3-B. Students will learn that you cannot cook a hot dog in a toaster.

3-C. Students will learn to hunt and process squirrels for food.

Domain 2: Screen Time

Grades K-5

1-A. Students will learn that screen time is the only time during the blessed day when the grown-ups caring for them can get some peace.

1-B. Students will learn to solve computer problems on their own, rather than yelling for a grown-up. This is called “inquiry-based learning.”

Grades 6-8

2-A. Students will learn that their parents do not want to know what a “TikTok” is, nor do they want to see your “TikTok,” but it had better be appropriate.

2-B. Students will learn that the threat of loss of screen time is now entirely empty, as no grown-up is willing to deal with the catastrophic consequences of being stuck in the house with a bored, screen-less child.

Grades 9-12

3-A. Students will learn how to mute themselves in a Zoom class so that no one can hear them learning to burp the alphabet.

3-B. Students will learn how to replace the video feed of themselves in a Zoom class with a pre-recorded video of themselves looking attentive so that they can learn to burp the alphabet in peace.

3-C. Students will learn that that awesome video of them doing The Renegade is now sufficient to win them acceptance at any online university, including all the Ivy League schools.

Domain 3: Study Skills & Learning Habits

Grades K-5

1-A. Students will learn that sliding off of their chairs into a sobbing heap on the ground will bring every lesson to a quick end, especially if they are shrieking, “MY TEACHER DOESN’T DO IT LIKE THAT!” as they crumple.

1-B. Students will learn that their parents did not learn math very well, and it is up to them to teach their parents how to solve basic equations using anything other than the standard algorithm. Students will also learn that if they ask their parents to explain why the standard algorithm works, they can waste at least an hour of “learning” time while their parents frantically google things like “What is math?” and “How do numbers work?”

Grades 6-8

2-A. Students will learn that they can fool their parents into thinking that they don’t understand the online lessons at all, and that they, therefore, need to watch each lesson repeatedly, which really means watching YouTube videos on compelling topics such as taking things out of boxes, creating the perfect cat eye, and how to straight-pipe your Toyota Supra.

2-B. Students will learn the most ergonomic and effective posture for online work: scootch way down until your feet are on the coffee table, your butt is hanging off the edge of the couch, and you are basically sitting on your neck.

Grades 9-12

3-A. Students will learn that their parents do not remember anything they learned in high school. Not a single thing.

3-B. Students will learn that teenagers really do function better when they can sleep until 3 PM.

3-C. Students will learn that the SATs might not matter as much as we thought they did.

Domain 4: Content

Grades K-5

1-A. Students will learn Anatomy 101, as the weeks drag on and every member of the family begins to take a decidedly laissez-faire approach to wearing clothes.

1-B. Students will learn to read the instructions on a microwave bag of popcorn, gain a rudimentary understanding of physics after the popcorn explodes in the microwave, and learn the difference between 3 minutes and 30 minutes, especially when measured in popcorn cooking time.

Grades 6-8

2-A. Students will learn the principles of decay, decomposition, and mycology, as the piles of discarded food and old clothes in their rooms begin to sprout mushrooms.

2-B. Students will learn whatever they damned well please.

Grades 9-12

3-A. Students will learn that Romeo and Juliet had it easy, because they only had to contend with an inter-family feud, and not the cancellation of prom, or the indefinite postponement of “going to the next level,” which their significant other definitely gave affirmative consent for, via text, last week.

3-B. Students will learn the basics of psychology as they (loudly) analyze each of their family members’ most annoying habits.

3-C. Students will learn exactly how irritating, boring, aggravating, and absurd it can be to live through history. They will also learn that attendance in History IRL is mandatory.

Read the whole story
RyanAdams
23 days ago
reply
Central Indiana
Share this story
Delete

It's worth documenting the obvious (before it stops being obvious)

1 Share

I often feel a little bit silly when I write entries about things like making bar graphs in Grafana or tags for Grafana dashboard variables because when I write them up it's all pretty straightforward and even obvious. This is an illusion. It's all straightforward and obvious to me right now because I've been in the middle of doing this with Grafana, and so I have a lot of context and contextual knowledge. Not only do I know how to do things, I also know what they're called and roughly where to find information about them in Grafana's official documentation. All of this is going to fade away over time, as I stop making and updating our Grafana dashboards.

Writing down these obvious things has two uses. First and foremost, I'll have specific documentation for when I want to do this again in six months or a year or whatever (provided that I can remember that I wrote some entries on this and that I haven't left out crucial context, which I've done in the past). Second, actually writing down my own documentation forces me to understand things more thoroughly and hopefully helps fix them more solidly in my mind, so perhaps I won't even need my entries (or at least not need them so soon).

There's a lot of obvious things and obvious context that we don't document explicitly (in our worklog system or otherwise), which I've noticed before. Some of those obvious things don't really need to be documented because we do them all of the time, but I'm sure there's other things I'm dealing with right now that I won't be in six months. And even for the things that we do all the time, maybe it wouldn't hurt to explicitly write them up once (or every so often, or at least re-check the standard 'how we do X' documentation every so often).

(Also, just because we do something all the time right now doesn't mean we always will. What we do routinely can shift over time, and we won't even necessarily directly notice the shift; it may just slowly be more and more of this and less of that. Or perhaps we'll introduce a system that automates a lot of something we used to do by hand.)

The other side of this, and part of why I'm writing this entry, is that I shouldn't feel silly about documenting the obvious, or at least I shouldn't let that feeling stop me from doing it. There's value in doing it even if the obvious remains obvious to me, and I should keep on doing a certain amount of it.

(Telling myself not to feel things is probably mostly futile. Humans are not rational robots, no matter how much we tell ourselves that we are.)

Read the whole story
RyanAdams
25 days ago
reply
Central Indiana
Share this story
Delete
Next Page of Stories