And proof that this setup is both good and bad – CI failed because I forgot to set the publish timestamp in the post YAML on the previous post. But CI ALSO failed because I forgot to run gazelle. #win #fail #bazel #hypstatic

permalink

I just removed all pagination from the #hypstatic lifestream section #win this design choice dates all the way back to the first implementation of lifestream in 2010 #history

permalink

There is no more #webpack in #artichoke. All web properties have been migrated to esbuild, eta template engine, the Node fs API, and custom build scripts. This is simple, this is good. #hypstatic is next but there is a lot to unwind. #win

permalink

With AWS SSO in place, I started using aws-vault locally for #terraform and AWS CLI. I learned about this tool at work. No IAM access keys with inline IAM policies! SSO + assume role for administrator access! #security #win

permalink

In #aws things, I migrated both hyperbola and #artichoke infra to separate AWS organizations and set them up with AWS Control Tower's account vending machine. Audit logs! AWS Config! SCPs! AWS Cost and Usage Reports! AWS SSO! #win #security #cost

permalink

I took a hacksaw to my homebrew installation. I'm not sure how this happened but the brewfile I've been carrying around at one point had the entire dependency graph in it rather than the explicitly installed deps ... which made everything on my new Mac an explicitly installed dep. I had hundreds of libs installed for no reason. Burned everything down and started from scratch. #fail #win github.com/lopopolo/dotfiles/blob/fb9af6bd19df2149dba5a63a8db161702bcbe5db/homebrew-packages/Brewfile.rooster

permalink

macOS things – I tried out alacritty and tmux again but didn't switch away from iTerm2. I tried a bunch of fancy neovim LSP, floating pane, and lua config and then stripped all IDE bits out of vimrc to keep it just an editor. Finally enabled dark mode on my Mac (synced with the sunrise and sunset), switched to dark terminal and neovim color schemes. #win #vim

permalink

I got a PR in artichoke suggesting to bump down the frequency of dependabot updates to monthly. I applied this change across all artichoke, hyperbola, and lopopolo repositories. It has been a big quality of life improvement and cuts down on a lot of churn in JS dependencies. Applying dep updates once a month is 👍 #win #artichoke

permalink

Yay! hyperbo.la is running Bootstrap v5. This upgrade was actually really small! Just some small changes to the Sass for customizing colors and updates to the navbar. #win

permalink

Also Windows Terminal and the Cascadia Code font were a dream to use. I replaced Inconsolata with Cascadia Code on my Mac iTerm2 #terminal #font #windows #win

permalink
Post image

Nightly builds of Artichoke are available via ruby-build: rbenv install artichoke-dev #artichoke #win

permalink

The one dynamic bit I cannot truly replicate is shortlinks but I never used this feature #win

permalink

No more security updates, terraform, autoscaling group rolling deploys, packer and baking AMIs, Ansible deprecation warnings, RDS outages #win I can unsubscribe from nginx release notes listsrv lol

permalink

Big wins from switching to static: modifying content with a lightweight dev server, CI via GitHub Actions, automated deploys, better webpack integration and minification, site is free as in beer to operate #win

permalink

Partials tended to end up in the same places as before #win

permalink

Some bespoke filters I hand rolled before got pushed into dependencies, like hashtag parsing and linking moving to linkifyjs #win #yolo

permalink

There is about as much javascript as there is python in the dynamic, django-based hyperbola, which is to say not much #win

permalink

Migrated all #artichoke CI to GitHub Actions #github #win Jobs and workflows are so much easier to reason about. And it's free 💪

permalink

Also added many more converter implementations with macros. There are 988 TryConvert implementations. #win #fail #artichoke

permalink

This change added new functionality: Converting to and from byte and string slices #win #artichoke

permalink

Being forced to set up the repository infra from scratch in cactusref was a good way to fix everything I disliked about my dev environment. CircleCI build and scripts/lint.sh got overhauled #win #artichoke #shell #bash #node #lint

permalink

ferrocarril had different goals than artichoke: it wanted to run Rails. To do that, it had a lot of extra bits in it like gems, a Rack server, and sample apps. Nuked all of it #win #artichoke

permalink

Adding #ci to a project is encouraging such better code hygiene. Because I want to make sure the build stays green, I actually make PRs even if it is only me approving them. Seeing the code in the browser makes it easier to review than #git diff #win

permalink

In a related note, I now peg the nightly version in the rust-toolchain file to a specific date archive #ci #rust #win

permalink

You can tell which parts of ferrocarril are new to me based on how many consecutive commits are dedicated to a feature. By this measure, the new (and hard) things were sys crates, #ci, and TryFrom traits #rust #win #fail

permalink

I tried to explain continuous integration to my Dad and he synthesized it as "spellcheck for code" which is pretty good tbh #win #ci

permalink

Using cargo:rerun-if-changed and cargo:rerun-if-env-changed to make most sys crate builds a noop. developer productivity #win #rust

permalink

About 6 weeks ago I reached out to two literary agents to see if they'd help me publish a book. I got an explicit rejection last week! A little bit #fail, but also definitely progress #win 😊

permalink

I generated FFI bindings for mruby with bindgen! I wrote a #c extension library for wrapping mruby macros! #win I wrote (a lot of) unsafe #rust code. Clippy helps a lot to make sure I'm not doing anything stupid. I have caused quite a few #segfault #fail

permalink

I implemented a #rust macro for the first time to implement some traits to convert between mruby values and Vec and Option containers #win

permalink

I overflowed the compiler (which didn't crash it) and crashed the linter with an ICE #win #fail

permalink

I've been working on creating an idiomatic, modern set of #rust bindings for mruby, an embedded #ruby interpreter. I am learning a ton and doing lots of code things I've never done before! #win

permalink

Yikes haven't done a deploy since January 6. I've definitely been ignoring all of the USNs about Linux kernel vulnerabilities. #fail Django 2.2 release is what got me to get to upgrading #django #win

permalink

Spaceships don’t come equipped with a rear view mirror 🚀 #win

permalink

Optimizing #react bundle ... cut bundle size by 72KB. Biggest wins are turning an image into CSS + an emoji, removing unused deps, enabling mini-css-extract-plugin in release builds #win #webpack index.html is 333 KB

permalink

I've now over-engineered an iTunes library integrity checker by turning a script into a module #win

permalink

At least I was able to repro in local #vagrant once I figured out what was going on. #win

permalink

I completed removing build artifacts from source control. Static assets dist and document-root dirs: replaced with running #webpack on host. Third-party #ansible roles: installed from galaxy via #packer and #vagrant at provision time. #win

permalink

#django is a joy to use. Making my new blog app was so easy. Each view is only two lines of code! #win

permalink

Jumped to latest #django 2.0.x and then to latest 2.1.x today. No deprecation warnings, smooth sailing. As a plus, I turned on PYTHONWARNINGS for my app in systemd #win

permalink

Finally deployed a 2 month old branch incorporating lessons learned from my Docker experiment into my VM-based deploys. Big change is building from local source instead of pulling in a tarball from GitHub. Iteration speed is improved #win

permalink

LuaLaTeX is amazing. My documents look better than they did with XeLaTeX. Less hyphenation, less inter-section spacing. fontspec, polyglossia, selnolig, nowidow, and impnattypo packages are dope too. #LaTeX #win

permalink

I've been using make and vagrant for self-contained builds in other projects. I've been working with #LaTeX a lot and a bionic vm with TexLive installed creates a repeatable build env, takes 15 minutes to set up, and doesn't pollute my desktop #win

permalink

Upgrades are painful, so upgrade frequently. hyperbola now running Ubuntu 18.04 Bionic. 2 build config changes and 1 removed ansible task. #win

permalink

for frklft.tires, I stopped using #terraform for managing the static content of the site. It now lives outside of my terraform code in a public directory, published explicitly with a make target #win

permalink

Last week I shipped secondary attribution for Jenkins builds. Email featured lyrics from Bills, Bills, Bills by Destiny's Child #win

permalink

Ansible, Let's Encrypt, nginx, and Vagrant have combined to make my local env look more like prod. Spun up a new ALB-like VM with HTTPS. less divergence #win

permalink

Starting 2018 off right by fixing pbr installation, deploying django 2.0.1, upgrading Pillow, and removing dep on django-localflavor #win

permalink

Removed some "bespokeness" from hyperbola: migrated from a shell script that exported env vars and exec'd to dotenv. Same concept, but now a standard mechanism #win

permalink

Put some investment into my #vagrant setup. MySQL running in a separate VM with automatically provisioned fixtures means I can go from zero to full replica of prod in 10 minutes. No more dep on laptop MySQL. #win

permalink

New in v0.122.0: python packaging actually works now. No .pth symlinks. No PYTHONPATH. setup.py and pbr install hyperbola directly into the venv. Finally. #win

permalink

hyperbola is now running #django 2.0. Added automigrate to hyperbola-app systemd unit, eliminating one of the last things I ever needed a bastion host for #win

permalink

That was easy. Enabled #AWS Time Sync by adding one ansible role, reading some docs, and redeploying. #win

permalink

Shaved another $35 (40%) off my #AWS bill by disabling the NAT on my app subnets. Yay immutable infrastructure and VPC endpoints #win

permalink

I made a thing! burnfastburnbright.com Bootstrap 4, route53 domains, and terraform made this really easy. went from 0 to 100 in about 1.5 hours. #win

permalink

New in v0.117.0: nuked time-elements webcomponents due to Firefox breakage (cut js payload by a factor of 4), infra improvements to resume handling #win

permalink

It is a good thing that I've automated things well enough that I don't need the bastion #win

permalink

More cost savings. RAM footprint of a hyperbola backend is 143MB. Switch from t2.micro to t2.nano #aws #win

permalink

hyperbola: now with multi-homed DNS. AWS Route 53 and CloudFlare, made possible by terraform. (In the process upgraded hyperbo.la mail to a 2048-bit DKIM key) #win #redundancy #devops

permalink

I accomplished this migration with ~no downtime #win. I spun up the new infrastructure and then deployed new AMIs with updated service records. I did have ~2 minutes of 500s when I accidentally overwrote old mysql DNS record due to a bad copypasta #fail

permalink

Just bumped backend ASG from 1 -> 3 t2.micros. With this change now all parts of hyperbola (redis, mysql, backend, lb) are multi-AZ #win

permalink

The magic command to make homebrew work after uninstalling Xcode: sudo xcode-select -switch /Library/Developer/CommandLineTools #win

permalink

this is just one example of the times #git has saved my life #win

permalink

I've taken to opening shipped emails with playfully mutated rap lyrics. Super Nintendo. #win

permalink

Total upgrade time ~1 hour. Includes code changes, testing locally, cut release, deploy to vagrant, build AMI, terraform, smoke test #win

permalink

I skipped #django 1.11.4 and 1.11.5. Finally did an upgrade today to 1.11.6 #win. My dep upgrades for python, js, and ansible deps are too coarse grained. Pulled in ansible changes which blocked the deployment #fail

permalink

4. addendum: I used #LetsEncrypt before migrating to AWS with a combination of cron, systemd timers, and dehydrated. ACM is easier, less error prone, and set-it-and-forget-it #win

permalink

#aurora was much less forgiving with unique constraints than mysql. The schema for one of my utf8mb4 varchars had a max length of 255 and a unique index. It appears mysql silently truncates, whereas aurora complained the index was > 767 bytes. ~ #win

permalink

my #terraform life became much easier by using name_prefix instead of name. name and name_prefix parameters were never interpolated. Instead, use interpolation in tags. In practice this means config can change without rebuilding the world #win

permalink
Post image

And with post 506, I can now say that hyperbola is hosted on #aws #win

permalink

#webpack is amazing. I added the time-elements web components to the lifestream and contact pages. Only took an hour. Before this would have been next to impossible. #frontend #win

permalink

💯💯💯💯💯 = 500 posts #win

permalink

related, using pip-tools to manage and pin python dependencies has removed uncertainty from my deploy process. Upgrade packages only when I intend to #win #django 1.11.3 upgrade went super smoothly in part due to this

permalink

Packer + Ansible + AWS + Terraform is really quite lovely #devops #win

permalink

Migrated terraform state from a private github repo to a private, encrypted S3 bucket. State infra is bulkheaded from main app and protected with prevent_destroy lifecycle #win #terraform #aws

permalink

Tested a #django release candidate (1.11RC1) for the first time. Site continues to work. No deprecation warnings. #win

permalink

Just freed up 350MB in my gmail by purging 35 emails. Did a search for size:5000000. removed emails with mp3s as attachments and event announcements with large images and pdfs #win

permalink

bastion is now in an ASG with an automatically bound (with user data) elastic IP. Yay fault-tolerant infra! #win #aws #terraform

permalink

Switched to building an ami with packer. Now an ASG roll takes 2 minutes #win #aws

permalink

Added middleware to hyperbola app and wiki to inject a comment with the canonical hostname of the host that rendered the request. Debugging #win

permalink

hyperbola, now with properly localized dates using window.Intl #win

permalink

just automated a spreadsheet (concatenating several columns) with filter #win filter(L6:L, L6:L<>"") vs manually updating ranges #automation

permalink

With systemd I am one step closer to #12factor app bliss since all service logs get logged to syslog #win

permalink

made the #nginx config a little better, converted thin to bind to a domain socket, and deployed with a dedicated app user with deploy keys #win

permalink

In the process, I've added #TLS with Let's Encrypt #win

permalink

And a 4 years newer OS (Ubuntu 16.04 LTS) and 64-bit #win

permalink

Project new VPS is underway. For the same price as my current 1G box, I'm getting a 4G box with more cores #win

permalink

I enjoy golfing my minified javascript. Just shaved 19 bytes off of the inlined date formatter js I include on the lifestream page #js #win

permalink

Today I upgraded node to 4.3.2 (from 4.2.2), python to 3.5.1 (from 2.7.3), and django to 1.9.4 (from 1.8.8). What fun! #win

permalink

Caught an issue in staging today because staging is more like prod than dev is. Dev has pipeline disabled. Yay for release process. Yay for testing. #win

permalink

lifestream template refactor didn't yield any #performance wins, but the code is much cleaner now. #win

permalink

Sped up the lifestream page by 30ms by caching the archive sidebar. More template speedups to be had by switching to python3 (str to unicode coercion in python2) #win #performance

permalink

Woo! I can run hyperbola on my mac. Local development! #win

permalink

Even better: precompiling app/hyperbola to pyc and getting to keep the deployment read-only. better #win

permalink

gunicorn workers get warm quicker now that I've allowed gunicorn write access to a deployment's app and virtualenv dirs #win

permalink

Added a post-commit hook to my gollum wiki today to do a pull/push. Changes instantly synced to #github. No more stupid 5-minutely cron. #win

permalink

Having a linter is so awesome. IntelliJ rocks. #win

permalink

Fixed a long outstanding bug in how the sidebar on the lifestream calculated monthly post counts #win Tickled by the upgrade to #django 1.8 which caused them to all display as 1. #fail

permalink

TIL: Selecting 2 cells and then dragging to repeat causes google sheets to infer the increment #win

permalink

Answered a phone call on my computer for the first time. That was so cool. #win

permalink

Upgrade to Bootstrap 3.3.0 went really smoothly. Everything just worked #win

permalink

Finally bootstrap-ified the last bits of #hyperbola: the frontpage and the lifestream entry panel #win

permalink

Just added CORS headers for web-fonts on my 2 assets domains through cloudflare ... whoa. This has apparently been broken for a while #fail #win #hyperbola

permalink

The admin site is slightly modernized in #django 1.7 ... looks nice #win

permalink

live site was just deployed automatically for the first time. Switched from legacy deployment to automated with no downtime! #win

permalink

Woo! First 2 hyperbola releases with #git tags today #win. Also local development. dev + ops = #devops

permalink

Get optimized, HTML! Just added some middleware that minifies Django template HTML output #performance Google pagespeed really likes my site now (on Desktops) ... 94/100 #win

permalink

#django 1.6 upgrade was a breeze. Just a single deprecation warning. #win ... took the opportunity to refactor some old code too :)

permalink

It makes me happy when I see people using If-None-Match sprinkled throughout the splunk logs at #box #win

permalink

Just forked, edited code, submitted a pull request, and got it merged all from the browser #win #git #github

permalink

I feel like serializing procs to strings, passing them over HTTP and evaling them is an abuse of #ruby, but it is awesome that I can #win

permalink

just discovered that once you're in cmd+TAB mode on OS X, cmd+` cycles backward. So much easier than cmd+shift+TAB #learnability? #fail #win

permalink

So now that I got #airdrop working, I like it. It doesn't handle large transfers so well though. Transferring a gig of #music files has taken 15 minutes so far and I'm only 2/3 done. #fail and #win

permalink

printed over 600 pages in an athena cluster today #win

permalink

sysadmin ing is fun. hello beautiful browser based svn repo browsing (insurrection) and web-based svn admining (svn-admin) #linux #win

permalink