Tag Archives: Techiness

I’ll clump web design talk and gadget talk here, I guess.

Upcoming Granny Squares updates

Over the weekend of April 22, ye olde Granny Squares Color Generator is getting some upgrades! Unlike previous updates, I’m kinda-sorta locking down the database for this one, so blankets can’t be saved during the maintenance window.

It includes getting rid of the already-broken Twitter login (fuck twitter), adding email/password auth, and allowing multiple login methods per user. Not a ton of flashy blanket-related features, but there’s a big database normalization that enables me to set up a not-terrible RESTful API layer, which then lets me implement new blankety features using React.

I went into lots of detail over on the GSC forums, so go read that.

Using Google Assistant with Habitica

So here’s what I did instead of finishing part two of my video game post (or doing FPG work) last night: I got a little service in place so that I can use Google Assistant to add tasks to Habitica, my (adorable) task tracking system.

I quite often think of to dos while I’m driving, and haven’t had a good way to get them into Habitica. They’re often quick, contextual thoughts that won’t stick around, like a reminder to check if there’s a Beat Saber map for a song or artist I’m listening to, or a note to check out a game from a podcast I’m listening to.

It’s best, of course, if I don’t have to touch my phone at all to get the task in, which rules out voice-to-text keyboards. Google Assistant and IFTTT are natural components to make that happen, since I’m an Android user.

Continue reading Using Google Assistant with Habitica

Migrating G Suite to Gmail

Have Google Home and a G Suite account and wish your calendar was accessible? Good luck waiting for Google (2+ years) or messing around with external services to bridge the gap. 

An alternative is to switch back to Gmail and get it to send/receive using your personalized domain. Ugh. Unfortunately, Google seems to be sticking to the idea that G Suite is now for businesses, not personal use, so there are a few things G Suite users are being denied.

I have a Google Apps for Domains account (now G Suite) for irrsinn.net, and have for years. A lot of stuff to tied to it–OAuth, Hangouts history, voice personalization, keyboard personalization, etc. I wanted to move as much as I could to my (even older) gmail account.

I really, really liked Christopher Hamilton’s “Migrate G Suite account to a Personal Google Account“, and it got me 85% of the way to completion. Definitely follow that. There are some places where things were different for me or I found solutions that original author didn’t. This post is an extension of Hamilton’s, not a replacement.

Email

The original article mentions going away for a couple of hours while email imported. Eight years of not-pruned-enough email took a couple of days, so beware. Start the import early if you have tens of thousands of emails, and work on all the other parts of the conversion while it’s happening.

Also, clean up your damn email as it’s migrating into Gmail. Just delete all that shit under “Promotions”–you can’t use a 2015 coupon from your local nursery anymore.

DNS/Domain registration

This domain isn’t registered or hosted through Google Domains, so this step from the guide didn’t line up. Instead, my hosting provider has MX records for G Suite. Once all emails have finished importing to your Gmail account and you’re ready to flip the switch, reset your MX records and email hosting to defaults with your hosting provider (presumably that they host your email), and forward all emails to your Gmail address.

Chrome settings

Bookmarks are easy (although I moved my bookmarks to a self-hosted Shaarli instance when I switched to Brave on my phone), but I couldn’t find a way to migrate history, extensions, etc. I had about 65 tabs open, and I just went one by one and closed ’em or moved them into my new Chrome profile that syncs to the Gmail address. Bai, settings.

I store very few passwords in Chrome–mostly those for stuff that logs me out approximately every 10 seconds anyway (*looks at nhl.com*). Everything goes into 1Password, including sites using OAuth. I continue to recommend Nathan’s excellent piece, “On Digital Identity, Technology Dependents, and Death“, although I’d do things a little differently these days with 1Password’s online service.

Hangouts

One of my biggest concerns was whether people could IM me at my “good” email address, and the answer is “yes”.

Unfortunately, if they already had a conversation with my “good” address, they can’t start a new one that reaches my Gmail account. Even if they archive the old one, a new one goes to the old G Suite account. Hangouts also doesn’t seem to be updating the email address on that old account, so no one is getting the clever joke in it.

Le sigh. I love Hangouts. I was also really bummed to not be able to migrate my history smoothly, as Chats can’t be forwarded like emails. I used Google Takeouts to get a JSON download of my Hangouts chats (500 MB of text!), but I’m not sure what I want to do with it.

It’s not very immediately readable/searchable, so I’m toying with tools like hangouts-reader to get a different format. I may very well write a command line parser to side-step the issue of browser memory. 

In short, Hangouts is something of a trash fire. This and Google Play are the primary reasons I even need to stay logged in as the G Suite user.

YouTube channel

You can, if you wish, download and re-upload all your videos. You’d lose view counts, URLs, comments, etc. 

Or you can follow a merry path to change the ownership of your channel. Assuming you’re a normal casual YouTube user rather than someone who knows that “Brand Accounts” are even a thing, follow links from that support page to create a Brand Account, move your channel to it, then transfer ownership to your Gmail account. I then migrated the channel to my Gmail account directly, but you could also just keep the Brand Account and enjoy the flexibility it provides. (I was just sick of having so many things with the same profile image floating around.)

It turns out that subscriptions are tied to your channel, not your account, so my 235 subscriptions followed along like little ducklings, although I lost statuses of what I had watched. (This was an open question on the original article.) 

Google Fit

Nope. Couldn’t find a way to do it. I just let my Gmail create a Fit account, then shifted all my app connections to point to the new account. MyFitnessPal and my scale app have the most important information anyway. (Also, can we talk about this new design that makes it near-impossible to have a damn step goal?!)

Google Play, Google Books

Nope. Can’t migrate any of it. Anything that might be considered a “purchase”–even if it’s free or you uploaded it, in the case of a book–is pretty locked down. I understand the security aspect of that, but I’m still sad. I have an export of my book notes/marks anyway.

OAuth

In case you aren’t sure what “OAuth” is, it’s when you log in using the “Sign in with Google” or “Sign in with Facebook” buttons instead of a username and password. It’s a great way to avoid being on the list of folks with exposed passwords, since you don’t give every rando web developer a password. It’s unfortunate when you decide that Facebook is the devil or that you need to change Google accounts.

In addition to the original article’s note to check the “connected applications” list, also leverage your third party password manager of choice for anything you’ve marked as using OAuth instead of an actual password.

Lastly, if you keep your G Suite account open with a changed email address (e.g., deadass@irrsinn.net) to make your main email address available, OAuth connections on that G Suite account still work. You’ll just login to Google with that fake address. You probably have to keep the G Suite account around for Google Play anyway, so it’s not the end of the world.

A Note on Google Takeout

A suggestion you’ll see all over the place is to use Google Takeout — that sounds great, but a lot of those exports can’t be re-imported. That’s not a migration, that’s an archive, and they even call it that. If you’re willing to go into a hunt for a conversion tool (like I mentioned for Hangouts), then feel free, but don’t get your hopes up about anything Google-provided.

Did I miss anything?

I think the original article plus this one makes for a pretty complete picture, but there are plenty of Google services that I don’t use and probably haven’t heard of.

Eight years of G Suite entrenchment is tough to work through, so don’t take this on casually, folks.

Long-awaited Granny Squares Design Going Live

Years, folks. Years. That weird fabric texture background is finally going away.

Ever since I’ve thrown myself full-tilt at Future Proof Games, I’ve let my older side projects run as they are with no updates from me unless something was catastrophically wrong.

A lot has changed on the web since Granny Square Colors got a major update from me, though: tablets and smartphones are even more popular among the GSC user base, Internet Explorer isn’t the worst thing to develop for anymore, and I’m a way better architect and coder than I was a handful of years ago.

Continue reading Long-awaited Granny Squares Design Going Live

Deploying “The Whispering Thing”

After the shenanigans of getting that site pushing, building, testing, and deploying from git to Jenkins to DreamHost, I was able to get deployment for “The Whispering Thing” in place while I slept.

Seriously, Jira says I clocked 90 minutes, and that’s with versioning (details below) and using a new service–DreamObjects.

Twine (what “The Whispering Thing” is written in) produces a single HTML file with all CSS and JS right in the file. A dream for deployment–just put it somewhere.

DreamObjects is–from my perspective–like S3, but doesn’t require me to start the clock ticking on Future Proof Games’ free tier status with Amazon Web Services. DreamObjects is API-compliant with S3, so I can use boto and just change the host name to point to Dreamhost.

I use fabric for deployment scripts, and I wanted this to run through Jenkins so that pushes to the “develop” branch push to a staging location, and pushes with tags to the “master” branch release to prod. This is in alignment with git flow.

The tagging, though–ugh. I must be doing this wrong. The shell command git describe --abbrev=0 --tags --exact-match will get a tag that is on the current commit only. Future commits after that one won’t return the tag. I want that strictness to ensure that only intentionally versioned commits to master go live.

But if there isn’t a tag, the exit code on that command is some error code, which makes fabric stop the deployment and Jenkins fail the build. If you use “warn_only” to prevent that failure, you still have to check for that failure and set the version to something defaulty.

It’s awkward. The function looks like:

def set_version():
  with settings(warn_only=True):
    env.current_version = local('git describe --abbrev=0 --tags --exact-match', capture=True)
 
  if env.current_version.failed: #fabric creates "succeeded" and "failed"
    env.current_version = 'staging'

This is slightly cleaner than what’s currently in my FPG.com deployment scripts, but it’s ugly and not robust.

Also, pushing tags is a pain in the ass. To get Jenkins to properly have both tag and branch when it runs, you have to do the following on the master branch:

  git merge --no-ff release-1.1.1
  git tag -a 1.1.1
  git push --tags
  git push

Jenkins won’t build just for a pushed tag change (grr!), so the tag has to be out before the commit it’s attached to. And the current version of git doesn’t have a way to push both commits and tags simultaneously. It feels awkward and clunky.

Complaints about stank versioning aside, deployment is fast, smooth, and easy. Twenty seconds of Jenkins’ time, including setting up virtualenv with boto.

Then, less than 48 hours after I get deployments working,