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 the lopopolo IAM user gone, the only ones left were the IAM users in the #artichoke and #hypstatic GitHub organizations used for terraform CI in the project-infrastructure repos. I used the new GitHub Actions OpenID Connect provider to wire up AWS identity federation following this guide – scalesec.com/blog/identity-federation-for-github-actions-on-aws #security #github #aws #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/fb9af6bd19df2149dba5a63a8db…

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

It's been a while since I've posted about #artichoke, but I recently landed a #rust implementation of #ruby's `String` class. #win github.com/artichoke/artichoke/pull/1222

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

More #artichoke updates since March: a marketing site at artichokeruby.org, prebuilt containers on Docker Hub hub.docker.com/r/artichokeruby/artichoke, and prebuilt nightlies github.com/artichoke/nightly/releases/latest #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

#vscode and LLDB in VSCode were SO amazing to use. Within a couple of iterations, I was able to track down the use-after-free: github.com/artichoke/artichoke/pull/674 #fail #win #artichoke

permalink

After 50 PRs, I was able to put GH-442 to bed and remove the Rc wrapper from the Artichoke state github.com/artichoke/artichoke/pull/670 #win This refactor took 4 months #fail #rust #artichoke

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

I contributed a feature to #rust! Added an implementation to allow turning a &mut str into a String using the standard From trait #win #patch github.com/rust-lang/rust/pull/69661

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

Some folks have been contributing #Ruby and #Rust code to #artichoke! #win #github

permalink

I reported an undocumented panic in #rust that was fixed today #patch #win github.com/rust-lang/rust/issues/63456

permalink
Post Image

#artichoke is the top trending repo on all of #github right now #win

permalink
Post Image

I built an #artichoke #Wasm playground in the browser artichoke.github.io/artichoke #win

permalink
Post Image

That is a lot of code #artichoke #github #patch #win

permalink
Post Image

That is a lot of code #artichoke #github #patch #win

permalink

The biggest accomplishment was redoing the #artichoke README github.com/artichoke/artichoke#readme Thought about project goals and differentiators from MRI. Added milestones to track progress in achieving goals #win #ruby #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

Matz likes my code omg omg omg #win #ruby #mruby #patch github.com/mruby/mruby/pull/4560#issuecomment-509572113

permalink

I had a PR accepted in mruby! #patch #ruby #mruby #win github.com/mruby/mruby/pull/4560

permalink

I have Regexp#match? github.com/artichoke/ferrocarril/pull/93 #win #rust #ruby

permalink

It has been a really productive weekend. Merged 23 #github PRs for ferrocarril #win #rust #git github.com/artichoke/ferrocarril/pulls?utf8=✓&q=is:pr+created…

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

My #ci builds of ferrocarril caught a bug in rustyline that made compilation fail on the latest nightly #rust #win #patch github.com/kkawakam/rustyline/issues/217

permalink

I reported a #segfault in mruby and spoke directly with @matz! #win github.com/mruby/mruby/issues/4460 #patch

permalink
Post Image

Excluding generated and vendored sources, ferrocarril is 8700 lines of #rust, #c, and #ruby. This is a lot of code. In very uncharacteristic fashion for a side project, a big chunk is tests #win github.com/artichoke/ferrocarril/commit/fe2febc

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

It only took 49 build jobs, but the ferrocarril build is passing on CircleCI circleci.com/gh/artichoke/ferrocarril/47 This is the first time I've ever set up #ci for a side project #win

permalink

#patch got another PR accepted in the Ansible + ACME + Route53 role I use for the hyperbola dev env load balancer #win github.com/mprahl/ansible-role-lets-encrypt-route-53/pull/15

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 just used #github to create a reproducer case for a panic in a #rust library #win github.com/lopopolo/rust-embed-panic github.com/pyros2097/rust-embed/issues/61 #patch

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

I have eliminated all explicit casts in punchtop #rust #win github.com/lopopolo/punchtop/commit/1e41ca3

permalink

More #rust safety: removed a cast to usize with the new usize::from_be_bytes converter github.com/lopopolo/punchtop/commit/2263c80 #win

permalink

The game that I'm working on is punchtop github.com/lopopolo/punchtop #win #rust #powerhour

permalink

I made a small #rust crate called stream-util for a game I'm working on. github.com/lopopolo/punchtop/tree/master/stream-util allows graceful drains of tokio mpsc channels or canceling a futures Stream. Clippy pedantic and fully documented #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

Been using #ack for almost a decade. Installed #ripgrep today. Wow it's so fast! #win

permalink

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

permalink

41-commit weekend 🤩Feel much better about my #webpack , #ansible, and #packer code #win

permalink

Add in some manual #terraform state edits and deleting things in the #aws console and we're recovered #fail #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

That was a 35-commit weekend. New features and improved code quality. #win github.com/hyperbola/hyperbola/compare/918f6d0f..4c331eee

permalink

Significantly refactored my #webpack static asset pipeline today. No longer build assets locally and check them in. Build happens as part of #ansible provisioning. #win github.com/hyperbola/hyperbola/commit/eaf5b3197

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

Further #cost optimized my #AWS infra. Saved $3/month by turning off CloudWatch monitoring and making my ASG out of spot instances github.com/hyperbola/hyperbola/commit/ffa0e34 #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

That was easy! hyperbola running on t3s now. #aws #terraform #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

hyperbola is ready for #django 2.1. github.com/hyperbola/hyperbola/commit/d92a79f. That was easy #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

Switched from community PPA to official nginx-provided binaries. That was ... really easy: github.com/hyperbola/hyperbola/commit/5461837 #win #ansible

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

DNS is flipped and propagated! Live in #aws! #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

Converted wiki from ELB to ALB this morning ... took a couple of hours. modified #terraform config and updated #ansible ... also converted from Let's Encrypt to ACM. github.com/hyperbola/hyperbola-tools/commit/23fb9a7 #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

OMG just rewrote my #git PS1 which runs as part of my PROMPT_COMMAND. Now 20% faster both inside and outside a repo. terminal feels so much faster now #win #performance github.com/lopopolo/dotfiles/commit/2d5054c4ce

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

and the #monitoring even triggered when I took the box down. #win

permalink

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

permalink

Added liveness monitoring of healthz endpoints on wiki and hyperbo.la today #monitoring #devops #win healthz goes all the way through to rack/django

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

Yay refactoring! #python #django #win

permalink

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

permalink

hyperbola-wiki is now fully deployed using #ansible. #vagrant made testing easy. #win

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

Enabled cloudflare cdn on hyperbolacdn.com today. Took 4 clicks. #win

permalink

hyperbo.la staging and production are TLS enabled. Still have to turn on HSTS. #win #letsencrypt

permalink

Successfully migrated hyperbo.la and staging.hyperbo.la to a new host, hyperbola3. Ubuntu 16.04 and 8GB of RAM. Just shut down hyperbola1. #win

permalink

Did my first #aws prod deploy today #win

permalink

successfully did an out of band release not of master while in the process of migrating hyperbola to a new host #win #deployment #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

With this latest release, hyperbola has surpassed 500 commits! #win github.com/hyperbola/hyperbola/tree/2015-11-21-lifestream-tem…

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

I bought IntelliJ Ultimate and it has already been decently valuable: github.com/hyperbola/hyperbola/pull/28 ... fixing lots of warnings #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

chrome has #emoji now. such web. #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

TIL that two trailing spaces + line break = br in the same p #markdown #win

permalink

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

permalink

Just did 2 fully automated deployments to staging! #win #automation

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

My wiki is getting filled up with #devops documentation for #hyperbola #win Runbooks are fun!

permalink

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

permalink

Won best performance hack at the #Box #Hackathon last night #win

permalink

git commit -m 'removed 2 chainz' #git #win

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

ssh and an html/js terminal that will run anywhere I have chrome because of native client? Yes please #win #awesome chrome.google.com/webstore/detail/pnhechapfaindjhompbnflcldab…

permalink

screen wipes are the best things ever for both laptop screens and glasses #win #thingsineedtobuy

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
Post Image

Best commit message ever #git #win

permalink

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

permalink

ruby's splat is just python's tuple (un)packing #win #fail

permalink