I've been using Unity3D a lot these days for business and pleasure. I've been posting some of my code to gists on GitHub to serve as examples or as open-source components. I thought that I should collect them in one place to make the good stuff easier to browse. I intend to update this post occasionally to collect these as I make them. If you want something open-sourced, let me know here and I can add a license if there isn't one already in the file.
For several years now, I have been using git as a means to manage migration of my website from one version of wordpress to the next. I initially was maintaining documentation for myself on how to do this manually, but later I migrated the documentation into an automatic script. I've decided to clean this up a bit and release it to the public as open source.
This has really made managing a wordpress site more bearable. I don't allow FTP connections to my website, since FTP is about as secure as a sign on your digital lawn saying "Please do not hack!" Because of this, the built-in automatic update feature has always been useless to me. Using an ssh connection to the webserver as the backbone, it's possible to do more secure automatic updates than built-in feature can provide. (For more info on security, please read Hardening WordPress.) In addition, I can sleep better at night since my website's code is both version-controlled and backed up to an external server. This isn't possible with the traditional "update wordpress via svn" method either.
Hopefully this will be as useful to you as it was to me. I've tried to make it reasonably configurable, but feel free to fork it and tweak to taste. You can find the code and documentation for wp-upgrade on Github.
I've been working a lot with Unity3D recently, and sometimes it can come in handy to have multiple instances of the editor open at once. On Mac, this works fine, but due to how the dock works, it's awkward to launch more than one instance, requiring you to root around in the app bundle and have a terminal window open.
I wanted a quick shortcut to spawn a new instance, so I threw together a shell script and bundled it up as a stand-alone Mac app using Platypus.
If you're interested, you can download Unispawn on Github. It's not really worthy of its own name and an icon, but I couldn't resist making some references and I needed it to look different from Unity in my dock.
All 3 lines of its source code are available under an MIT license.
GDC is over and I'm hanging out at Noisebridge with some friends. I've been inspired this week by some amazing Twine games and authors so I decided to make a short one myself. It feels most like a poem to me.
I just finished playing Christine Love's Analogue: A Hate Story. I would like to share with you my thoughts on the design, themes, and ramifications of the game, hopefully without revealing many plot or character details that could spoil the experience.
Analogue was a remarkable game that stirred up a wide range of emotions. I felt repulsion at the backwards, patriarchal society depicted. Shock, the traumatic kind, at the depiction of horrific events. Sympathy and affection for the protagonist (at least, that's who she was in my view.) And some funny, cute, and adorably awkward moments as well. It was quite unlike the expectations I had for the game going in. It was deeper, more meaningful, more significant.
Processing is a wonderful little language. It's designed to be easy to pick up by artists who want to learn some programming, etc. However, it's a real programming language. If you haven't played with Processing, I'd recommend you go do that right now. They have a great series of tutorials, and of course the entire SDK is free.
This post is for people like me - programmers who want to take advantage of Processing's short iteration cycle, clear syntax, and simple API to use it as a prototyping environment.
First, here is what I think Processing excels at:
Interactivity - It's dead easy to get and use mouse and keyboard input and define event handlers.
Engineering flow - like I said above, the short iteration cycle, clear syntax, and simple API make it a breeze to get up and running quickly and iterating.
Fun - Because of all of that, it's a lot of fun to write stuff in Processing, especially for smaller projects where you are just messing around.
Multiplatform - Out of the box, Processing 1.5 can build native applications for Windows, Mac, and Linux, native Android applications, and web applets (yuck.) Via Proccessing.js you can also supposedly get your sketches to run natively in web browsers.
Here is what I think Processing is weak at:
Large, complex programs (they tend to get a bit unwieldy since it's impossible to organize your classes inside a folder structure.)
Programmer assistance (No out-of-the-box debugger. The preprocessor's errors are often frustratingly non-specific, and can leave you blindly hunting for syntax errors across multiple files.)
Audio (there is no out-of-the-box support, but there are libraries available) Processing now includes the excellent Minim library, but you have to explicitly import it. Audio still appears to be an afterthought in the documentation and tutorials.
I have been prototyping games and visualizers (including the one above) in Processing for several months now, and have learned some incredibly useful things that I think any programmer looking into it should know. Here they are:
For many people, it really doesn't make a difference. But I'm a programmer. I edit code for a living. My editor is the tool of my trade and I want to use the most efficient tool available.
I'd be preaching to the choir if I was telling programmers that they should use good text editors. But I've noticed some patterns in the history of text editors I've used that have made me come up with my own philosophy about choosing an editor. My goals and usage habits are certainly not the same as everyone else's, but I hope that in sharing them I might get you to reflect on your own habits and see if they match up to your goals.
The find utility is so useful for automation that it deserves a special mention on its own. I will not attempt to cover all of its features, only the ones that I use on a daily basis.
I typically use find for two purposes:
To create a list of files matching some search terms.
To execute a batch operation on those files using the -exec argument.
In Shell Scripting: Becoming a Wizard, I layed out a recipe for productive and useful bash scripts that uses a while loop over some sort of multi-line input. This construct is more powerful than find's built in -exec flag, but that power is not always needed.