22 Jan 2017
After over six months of development, ChuckPad is online! What’s ChuckPad? It was Spencer’s answer when I told him: “I’m bored. Anything I could build to help make your disseration kick ass?” Spencer now describes it as:
ChuckPad is a network-based platform for sharing code, modules, patches, and even entire musical works written with the ChucK programming language and other music programming platforms. ChuckPad provides a single repository and record of musical code from supported musical programming systems, an interface for organizing, browsing, and searching this body of code, and a readily accessible means of evaluating the musical output of code in the repository.
You can check out a demo of what ChuckPad is capable of at www.chuckpad.io.
ChuckPad has a bunch of components. The main backend service is a Sinatra server written in Ruby and hosted on Heroku. It was designed as a REST-based service with basic user (registration, login) and patch (creation, edit, delete) API endpoints. An iOS client library for the service was created and Spencer did the integration work for MiniAudicle (the ChucK IDE) and his dissertation project: Auraglyph. A Docker image running a ChucK rendering service with a Sinatra server exposing a simple API was also developed and deployed onto DigitalOcean. And the thing I’m most proud of as a quality-first engineer: iOS unit tests that exercises the iOS client library and – wait for it – the Sinatra server!
We originally built ChuckPad to share ChucK code, but we decided to power it up and let it support any number of apps on a single server instance. If you’re interested in joining the ChuckPad family and bring a social touch to your app, please reach out!
10 Jan 2017
Scenario: you’ve got a snazzy Sinatra server running on Heroku. You just got a fancy custom domain and you now want to get an SSL certificate for it.
Solution: Damien Mathieu from the Heroku team built a cool utility to automate SSL certificate generation and renewal: sabanyon. Bonus points for naming it after a delicious Italian dessert! The instructions exist (never a given), are easy to follow (happens sometimes), and work as expected (frequently rare). Thanks, Damien!
Damien includes challenge responder code for a bunch of different apps, but not Sinatra. Fortunately, the Ruby example provided only needs a few tweaks to get everything working:
Now your domain will have an SSL certificate forever!
06 Jan 2017
I’ve never seen my grandma use a recipe. I’ve never seen her use a timer. I’ve never seen her ask for advice on how to improve a dish. And most importantly — given all this — I’ve never tasted one of her creations that was off.
Cooking some rabanadas!
But we all can’t be my grandma. Whereas my grandma makes cooking look like an art, conjuring divine inspiration and direction from thin air, I take a more scientific approach to cooking. Things are measured carefully and precisely, timers are used all the time, and recipes are annotated to remove any and all ambiguity.
So that’s why I don’t print out recipes or keep a list of bookmarked recipes; I use the Evernote Web Clipper to clip recipes directly into Evernote. Then when I use those recipes, I add observations (e.g. different flour brands affect the density of bread), critical reminders (e.g. don’t forget to set the oven temperature down), tweaks (e.g. add a little more flour to get less sticky dough), and fun facts (e.g. which maple syrup Canadians prefer). Here are some examples:
This method lets each recipe evolve every time I use it. I can also easily share them with others as seen above. Ultimately, I aim to be about 10% as good as my grandma which is a stretch goal to be honest.
02 Jan 2017
It’s been a few weeks since I completed Final Fantasy XV; I’ve had some time to digest the experience, get all the trophies, and read plenty of other people’s take on the game. The short of it: in spite of the story being very rushed starting at Altissia, FFXV is a critical hit: a fantastic entry released when the series appeared to be flailing.
It has its flaws, but FFXV is a game that rejuvenated my faith in the Final Fantasy series. The fundamentals of the story are there: characters I care about, a truly menacing villain, and a plot that is compelling and makes sense.
Xenoblade Chronicles (XC) for the Wii still stands as my favorite modern JRPG and is my go-to game when people complain that the golden era of JRPGs has come and gone; it’s my gold standard for JRPGs. Xenoblade Chronicles X (XCX) for the Wii U expanded on the open-world amazingness of XC but unfortunately had a story that felt very unfinished. FFXV sits right there alongside XCX: the open world was good (not as open and big as XCX) and a decent story (not as complete as XC) that could have benefited from more fleshing out.
There is a bunch of DLC planned for FFXV and I’m excited to dive into it, especially if it fills in some of the holes in the story. But even more so, I am pumped for the FFXV development team to have a productive post-mortem, take the best of what they did, and improve on the mistakes to ultimately deliver an amazing next entry in the series… Hopefully before 2026!
14 Dec 2016
After ten long years, Final Fantasy XV has been released! Two weeks after the release, I’ve plowed through most of the side-quests and completed the main storyline. And I enjoyed it! The game does a lot of things right: the battle system is fun and fast-paced, the story pulls you along without being overly complicated, the music is excellent, and the main cast of characters are personable and make the entire trip funny and interesting. The photographs Prompto, one of your team members, takes throughout the journey was unexpectedly awesome too!
But the game certainly has some flaws.
The latter half of the game is completely rushed. This game took forever to make so that leaves me confuddled. It’s not Xenogears Disc 2 rushed, where the protagonist sits on a chair and tells you what’s happening, but it’s still pretty bad. The game could’ve maybe done a little of the Xenogears Disc 2 style to help fill in the obvious blanks to make the story flow a bit better at the end. The story is good and main villain in this entry is exceptional. It’s sad to see that all get squandered by resource and time constraints.
The sidequests also left a lot to be desired. Some of them are fun and challenging (e.g. trailing and slaying the Behemoth to get access to Chocobos), but a lot of them are simple fetch or kill quests that don’t relate at all to the main story. The game also has a bounty hunt system where you can go out and hunt powerful enemies. But you can only accept one of these quests at a time and you must report one quest before taking on another. Limitations like these seem to be put in place purely to extend the longevity of the game in non-productive ways.
The first open-world Final Fantasy game also has far too many frustrating invisible walls. There are many roads that cut across the open world (great for driving on with your car) with grassy lands straddling both sides; not being able to jump over the edge of road with my Chocobo and having to find the stairs was extremely frustrating. Many trees are also walls so I quickly learned to steer very clear of them. For a point of comparison, in Xenoblade Chronicles (Wii), you could actually jump off the edge of the world and in Xenoblade Chronicles X (Wii U), you could swim from one continent to another!
By the end of the game, I was super invested in the four main characters, but the game does a poor job of fleshing out the secondary characters and making the player care about them. There are way too many characters that just don’t get enough screen time. Obviously fixing the rushed latter half of the game could address this. And perhaps incorporating these characters or their stories into sidequests would also address how unimportant sidequests felt. I really feel like the universe in this game has a lot of interesting characters; it’d be great to see them developed some more.
A very quaint certificate of completion!
That said Final Fantasy XV is a great entry in the series and I think it’s exactly what the breath of life the series - that many say has been languishing - needed. Developers have already said they are tweaking the latter chapters in the game and have lots of downloadable content planned. I hope the Final Fantasy team can take the learnings from this entry and improve on it in a shorter amount of time in the future!