First of all, use the hash-object
command as follows to print the SHA-1 hash that Git calculates for an object. (You can also pass a filename as an argument to hash-object
.)
$ echo 'test content' | git hash-object --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4
Note that, by default, echo
prints a trailing newline character so this command is actually computing the SHA-1 hash of "test content\n"
. Interestingly enough, though, if you try to reproduce this behavior in Ruby by computing the SHA-1 hash of the same string, you get a different result.
$ irb
>> require 'digest/sha1'
=> true
>> puts Digest::SHA1.hexdigest "test content\n"
4fe2b8dd12cd9cd6a413ea960cd8c09c25f19527
=> nil
The reason for this, as explained in Pro Git, is that Git actually prepends the following information to a file's contents before it calculates a hash.
blob
for a regular object, tree
for a tree object, and commit
for a commit object\0
)In other words, you need to run the following command to generate the appropriate hash.
$ irb
>> require 'digest/sha1'
=> true
>> puts Digest::SHA1.hexdigest "blob 13\0test content\n"
d670460b4b4aece5915caf5c68d12f560a9fe3e4
=> nil
Hope this helps!
]]>One of the bigger issues for me is that it’s more complicated than I think most developers and development teams actually require. It’s complicated enough that a big helper script was developed to help enforce the flow. Though this is cool, the issue is that it cannot be enforced in a Git GUI, only on the command line, so the only people who have to learn the complex workflow really well, because they have to do all the steps manually, are the same people who aren’t comfortable with the system enough to use it from the command line. This can be a huge problem.
So the complexity of git-flow is one issue, and another is the frequency with which GitHub releases code (emphasis mine).
So, why don’t we use git-flow at GitHub? Well, the main issue is that we deploy all the time. The git-flow process is designed largely around the “release”. We don’t really have “releases” because we deploy to production every day – often several times a day. We can do so through our chat room robot, which is the same place our CI results are displayed. We try to make the process of testing and shipping as simple as possible so that every employee feels comfortable doing it.
This makes sense—git-flow does appear to be designed for more traditional release schedules rather than for continuous delivery, as summarized below.
For teams that have to do formal releases on a longer term interval (a few weeks to a few months between releases), and be able to do hot-fixes and maintenance branches and other things that arise from shipping so infrequently, git-flow makes sense and I would highly advocate it’s use.
For teams that have set up a culture of shipping, who push to production every day, who are constantly testing and deploying, I would advocate picking something simpler like GitHub Flow.
I highly recommend that you read the full article. If you're still interested in learning more about Git, I would also recommend Scott Chacon's comprehensive book on the subject, Pro Git.
]]>Undefined symbols for architecture x86_64:
"_SDL_main", referenced from:
-[SDLMain applicationDidFinishLaunching:] in SDLMain.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I naturally searched for a solution on Google and eventually found this video, which explains how to successfully build and run a program in XCode 4 using the SDL. I generally prefer to read instructions, though, so I'm essentially going to transcribe the major steps outlined in the video for your convenience. I hope that you find this at least as helpful as I did!
Open the package and extract its contents (SDL.framework
and devel-lite
).
Create a new project (a “Command Line Tool”), making sure to disable Automatic Reference Counting.
Drag the SDL framework that you extracted in step 2 (SDL.framework
) into the project.
Drag SDLMain.h
and SDLMain.m
into the project from the devel-lite
folder that you extracted in step 2.
Replace #include "SDL.h"
with #include <SDL/SDL.h>
in SDLMain.m
.
Add the following #include
's to main.cpp
.
#include <SDL/SDL.h>
#include "SDLMain.h"
Make main.cpp
an Objective-C++ file. One way to do this is to select main.cpp
in the Navigator, open the File Inspector in the Utilities on the right side of the XCode window, and then select “Objective-C++ Source” as the File Type. You could also simply rename main.cpp
to main.mm
.
Change the main
function signature to accept a char * argv[]
instead of a const char * argv[]
.
Make sure that SDLMain.m
is compiled with the project. Select the project file in the Navigator, open the Build Phases tab, and add SDLMain.m
to the list of files under Compile Sources.
Make sure that the binary is being linked with the SDL framework. SDL.framework
should be listed under Link Binary With Libraries.
Link the Cocoa and Foundation frameworks with the project's binary. Simply add Cocoa.framework
and Foundation.framework
to the list of frameworks under Link Binary With Libraries.
Build the program. This should finish successfully with a few warnings but no errors.
Build and run the program. A blank window should appear.
The answer is always more art; the corollary to that is the answer is never less art. If you start to think that less art is the answer, start over. That’s not the side you want to be on. The problem isn’t that people create or enjoy offensive work. The problem is that so many people believe that culture is something other people create, the sole domain of some anonymized other, so they never put their hat in the ring. That even with a computer in your pocket connected to an instantaneous global network, no-one can hear you. When you believe that, really believe it, the devil dances in hell.
With that said, I was really impressed to see that Nintendo is trying to become a much more viable platform for independent game developers. According to the Penny Arcade Report, I'm not the only one to be pleased with Nintendo's new policies.
One developer I spoke with said this change in policy may have come a little late for Nintendo, but it's still a step in the right direction. Being able to control your own pricing, pick your release date, and the affordability of dev kits (Nintendo described the cost as the same as a high-end PC) are all moves that make Nintendo consoles much more attractive to developers.
In fact, I'm going to list what I found to be the biggest takeaways from the Gamasutra interview for anyone who may be interested in developing games for a Nintendo platform (particularly the Wii U). Unless stated otherwise, emphasis in all quotes is mine.
By the way, don't forget that you can follow Dan Adelman on Twitter if you enjoyed his interview and would like to continue getting the latest information on Wii U development.
We really have only a few requirements to sign up as a licensed developer with Nintendo. The most notable ones are that you have to have some experience making games, you have to be able to keep any confidential materials like dev kits secure and you have to form a company. None of these should be prohibitive to any indie developer.
You can apply to become a licensed Nintendo developer at WarioWorld.com.
So that second requirement – the ability to keep confidential materials secure – was originally defined in terms of an office that was separate from the home. Back when that rule was created, that seemed to be an appropriate way of defining things.
As you point out, more and more people are working from home, and we recognize that developers are forming virtual teams around the world. I know we've shied away from talking about these things publicly in the past, so I'm glad that I can officially confirm that the office requirement is a thing of the past.
Anyone from any country can make their games available on the eShop within the NOA and NOE region – i.e., pretty much everywhere outside of Japan.
Japan seems to be the exception to the rule: it sounds like you still need to have a physical Japanese address to release games in Japan.
Developers set their own pricing for their Wii U and Nintendo 3DS content. As one example, Little Inferno launched at $14.99. They did a sale for $9.99, and it went so well, they decided to make that price change permanent. It's completely in their control.
Updating games is also fairly straightforward. If [developers] find an issue they need to fix, they can. In terms of other Nintendo eShop functionality, there's a dedicated team working through a roadmap of new features. We'll be able to announce those as they get closer to release.
I don't know what this means in specific terms; perhaps you don't need to pay any patch fees?
Dev kits are actually not all that expensive. They're about the price of a high-end PC. Nothing that should be a showstopper for anyone.
We recently announced that we're providing Unity Pro 4 for Wii U to licensed developers at no added cost. So if a developer is currently working on a game in Unity and has a Wii U dev kit, it should be super easy to bring that game over to the Wii U console – and not just do a straight port but also take advantage of any features of the console they want, like motion controls, Miiverse or of course the second-screen GamePad controller. Or vice versa – making a game for Wii U and then going to other platforms should also be seamless.
This not only makes it easier and faster to develop games for Nintendo consoles, but it also gives developers the opportunity to release those games on other platforms, as well. Nintendo didn't have to do this, so I think it's a very nice gesture of goodwill to the game development community.
In addition, at GDC we're going to be talking about some new tools we're rolling out for developers to use HTML5 and JavaScript to make games. The thing I'm most excited about for this is how easy it is to prototype new game ideas to find the fun quickly and easily.
This—like Unity—makes it easier not only to develop games for the Wii U but also to port those games to other platforms (such as web browsers!).
Let me give you a sense of the thought process behind the [6000 unit] threshold in the first place. Even as far back as the early WiiWare days, we allowed developers to forgo the need to hire an intermediary publisher to get their content on our system. We didn't believe that Nintendo should screen game concepts. That should be up to the developer who's making the investment. Instead, we wanted to have a mechanism that would encourage developers to self-police their own game quality.
The threshold was thought to be a convenient way to go about it. Unfortunately, some great games that just didn't find an audience wound up being penalized. So for all systems after WiiWare – DSiWare, Nintendo 3DS eShop, and Wii U eShop, we decided to get rid of the thresholds altogether. Developers receive revenue from unit 1.
It's nice to hear that developers no longer need to sell 6000 copies of a game to get paid.
A lot of our processes were originally created in an environment where there was a set number of large publishers who had employees on staff whose sole job was to interface with the different console platforms. Those people had to learn how we were organized and know who to call for what issue. That obviously doesn't work for smaller developers.
As a result, we've narrowed everything down to a single point of contact – one alias that developers can write to for any issue. There's a core team at Nintendo who then tracks down the information and follows up. We have an internal goal of getting every question a response within 24 hours. And if we can't get an answer in 24 hours, we at least will let them know when we expect to be able to get them what they need.
I think that a 24-hour turnaround on questions is quite admirable, though I must admit that I don't know what the standard is for other companies. In any case, it's great to have a single point of contact for all issues to minimize confusion.
]]>I work smarter, not harder.
Isn't it seductive? As long as we are smart, we don't have to work as hard, right? After all, who really wants to work harder?
Well, as it turns out you can work both smarter and harder, and you probably should, too, if you want to get any better at what you do. Especially if you're trying to keep up with John Carmack.
]]>I'd like to emphasize that I am entirely aware that I am using beta software (caveat emptor) and that, consequently, I do not intend for this to reflect negatively on Octopress in any way. I love Octopress because it allows me to write a nice, professional-looking blog using nothing but simple, elegant Markdown. In fact, I want to document my experience with the 2.1 branch to make it easier for other people to use it, too.
Okay, are you with me now? Let's get started.
After upgrading to the 2.1 branch of Octopress, I tried running rake update_source
and rake update_style
(according to the instructions given by the documentation for the 2.1 branch) and was somewhat surprised to find that these tasks don't work any more. Curious, I used rake -T
to get a list of all the available rake
tasks. As it turns out, there are a lot of them.
|
The following tasks are new:
|
The following tasks have been removed:
|
Of particular interest to me were the changes to the update_*
tasks. Specificaly, update_source
and update_style
have been replaced with update_javascripts
, update_stylesheets
, and update_template
. However, the Rakefile seems to imply that you can simply use rake update
to run all of these update tasks at once, so I did.
Unfortunately, I encountered the following error when I ran rake update
.
|
I have no idea what was causing this error and I certainly don't know enough about Octopress's internals to make much of an educated guess. Thankfully, I don't necessarily have to: all I really need to do is isolate the commit that caused this problem. I can use the entire 2.1 branch up to that point.
How do I find the offending commit?
I remembered that this sort of situation is exactly what git bisect
is for. Do a binary search through the commit tree, starting with the latest bad commit and ending with the last known good commit. I had created my 2.1 branch off of master
, which I knew to be good, so I starting git bisect
with the following commands.
|
This produced the following output.
|
Because I wanted to test Octopress's update process, I needed to make absolutely sure that I had generated the Octopress theme (source directories) correctly. I also wanted to make sure that all of my bundles were up to date. To accomplish this, I used the following (probably horribly inefficient) procedure.
Update gems.
bundle update
“Uninstall” the default Octopress theme by removing the source
and (if they exist) sass
directories.
rm -r sass sass.old source source.old
Re-install the default Octopress theme.
rake install
Try to update Octopress.
rake update
Discard all changes to Gemfile.lock
.
git checkout -- Gemfile.lock
Run git bisect good
if step 4 was successful or git bisect bad
if it failed. Repeat steps 1–6 until there are no more commits to check.
Clean up the source
directories (rm -r source source.old
) and then run git bisect reset
to stop bisecting and restore HEAD to its original location.
When step 4 succeeded, it produced output similar to the following.
|
When step 4 failed, it produced output similar to the following.
|
And finally, here is the result of my little excursion:
|
I don't know precisely what happened in this commit to break the update process, but it is suspect because it adds several features and changes several files all at once.
Once I found the offending commit (7bdab0e65), I was able to create a new branch off of its parent (4972fb6c62) and continue blogging. I noticed that some settings have been moved, but that's a topic for another post.
]]>Life aboard the USS John C. Stennis, an aircraft carrier in the Arabian Sea that's supporting bombing missions over Afghanistan as part of Operation Enduring Freedom. Only a few dozen people on board actually fly F-18s and F-14s. It takes the rest of the crew—over 5,000 people—to keep them in the air.
Because I'm weird, this radio show also reminded me of a question and answer posted on scifi.stackexchange.com about the ships used by the Empire in the Star Wars universe. I particularly liked the following paragraph in the answer.
And the more you scale up, the greater the logistical resource needs stack up, especially if the vessel is going to be on multi-year missions across the galaxy. For psychological and social reasons, you'd need to have even more crew comforts and civic infrastructure, like libraries, entertainment centers, living areas, schools, gyms, hydroponic farms, etc. You'd also have more need for support personnel from electricians and mechanics to nuclear engineers and scientists to security officers, forklift operators and janitors. Conveniently, a large crew and ship will also serve to reduce the psychological stresses of feeling isolated and trapped during extended space voyages.
So whenever we finally get around to building spaceships to explore the stars, they may end up operating a lot like our aircraft carriers do now. Anyway, it's an interesting thought.
]]>So what is it about the Wii U version that makes up for losing access to Xbox Live? For me it’s the gamepad functionality. At any time you can tap a button on the Wii U gamepad and shift the video from your TV down to the handheld screen. For a gaming dad this feature is a blessing. You people without kids might be surprised to learn that when you have children you need to alter your gaming routines. First of all the TV simply isn’t always available. Much of the time it’s showing the same Curious George episode for the millionth time or being used to re-watch the entire Lego Ninjago series from start to finnish. The ability to start up and play CoD on the gamepad without ever having to use the TV once is incredible. Normally I’d wait until the kids were in bed to play a game like CoD but now I can sit there on the couch with my kids and play an M rated game without them even noticing. More importantly I’m not playing some bullshit mobile version of CoD, I’m playing the real game and earning real XP! When they leave or go to bed I can tap a button and send the video back up to the TV and keep playing.
This sounds very similar to my own experience of using a smartphone for the first time. At first, I assumed that I was mainly going to use it for maps and web browsing. I was dead wrong. To my great astonishment, I have found that I mainly use my phone for reading. I can pull it out of my pocket whenever and wherever I have a few minutes free, read an article or blog entry, and then quickly put it back. I can shunt my reading from my computer to a portable device and thus free up my computer to do tasks for which it is more optimized (i.e. anything that involves a lot of typing). My smartphone has expanded my computer's capabilities, not replaced them. In the same way, I see the Wii U GamePad expanding the capabilities of the next-generation gaming console. The Wii U GamePad is fundamentally different from a computing tablet because it doesn't require you to buy or download mobile versions of every game; you can use the GamePad as your screen at any time while still playing the exact same game. That's a very compelling feature for any household that shares a TV.
]]>I have lived in Japan for nearly nine months now, and I think that I am finally ready to share several observations that I've made about domestic life here. Note that I am explicitly focusing on (what are to me) interesting aspects of Japanese residences; I will not discuss cultural differences between Japan and the U.S. per se. Although it's true that I have immersed myself in the Japanese language and culture from abroad for over twelve years, I don't feel qualified to pontificate on the Japanese people, language, and culture; I couldn't do the subjects justice, nor would I wish to expend the requisite time and effort to do so if I could. No, I'm more interested in shedding some light on what it's like to live in a Japanese home, to illustrate a number of small ways in which the trappings of everyday life differ between Japan and the United States.
Japanese futons are far different from their eponymous doppelgängers in the western world. The differences are striking.
Some salient facts about Japanese futons include the following.
I like the simplicity of the futon as well as its space-saving efficiency, and I am consistently amazed at how warm a good futon comforter can be. Nevertheless, there is also something to be said for sleeping on a thick, western-style mattress.
As far as I can tell, most Japanese households don't have dryers—and even the households that do use them very sparingly. (I've seen washing machines with built-in drying units in stores, but I haven't actually seen one of these models in use yet.) Of course, the lack of dryers makes perfect economic sense if you think about it because they use a lot of electricity, which is relatively expensive here—and getting more expensive and even scarce now that all but two of Japan's 54 nuclear reactors are offline. I'm sure that there are other reasons, as well, but in any event a corollary to the lack of dryers is the need to line dry all of one's laundry, and a corollary to that is a heightened sensitivity to the weather. (Dehumidifiers actually appear to be sold primarily for drying laundry indoors on rainy days.) Thankfully, it's sunny more often than not where I live—and in the middle of the summer a pair of jeans can dry out in two hours flat—but when it does rain, as well as during the winter months, clothes can take an entire day to dry. I recognize and appreciate the fact that this is a more environmentally friendly way to live, but I still can't help but find the process of hanging clothes, waiting for them to dry, and then folding them again extremely tedious and time-consuming. At least I have a lot of podcasts that I can listen to!
Since most people line dry their clothes and air out their futons in the sun, balconies are a pretty important component of Japanese homes. These balconies are usually rather large—at least by my (U.S.) standards—to accommodate both the clothing and bedding. Furthermore, because clothes dry better in direct sunlight, houses and apartment buildings tend to be designed so that every residence has a balcony that faces east, west, or—preferably—south. North-facing balconies are much less common.
I've noticed that every Japanese home and apartment I have been in has used a tankless water heater instead of (what I consider to be) a “traditional” hot water tank. To their credit, the tankless water heaters work perfectly fine once you get used to the slight lag between the time that you open a hot-water faucet and the time that the hot water actually arrives from the heater.
What's particularly interesting to me about these tankless water heaters is that they are usually operated by “remote controls” installed in both the kitchen and the bathroom, and for the vast majority of the day these controls are turned off. So even though water should theoretically be heated on demand, it usually isn't heated at all because the heater itself is off. This means that tap water is tepid in the summer and frigid in the winter. Furthermore, the washing machines I've seen aren't even connected to a hot water tap (if you want hot water you can either pour it in with a bucket or use a tube to suck it out of your bathtub—more on that later), so clothes are almost always washed in cold water, which not surprisingly doesn't dissolve laundry detergent very well in the winter. I'm actually a bit surprised that people don't have more problems with pipes freezing, but then again, temperatures don't drop below freezing very often or very long in most of Japan. That being said, I have heard that heating works differently in the northern prefecture of Hokkaido, where the weather is colder and snow more common in the winter.
At this point, you may be wondering: if the tankless water heater is usually turned off, what in the world is it used for?
The answer is that, in general, hot water is used for bathing. In the U.S., this is often just a shower in the morning. In Japan, this is often a shower and a bath in the evening.
Japanese bathtubs are deeper—sometimes significantly so—than their counterparts in the U.S. They are meant for soaking, for relaxing after a long day, and for warming up in the winter. The water in the tub is used by all the members of a household, so everyone is supposed to take a shower and clean themselves off before they get in the tub. The remote control (often) installed above the bathtub is used to individually adjust the water temperature for the shower and the bath (the latter by periodically circulating hot water through a filter in the side of the tub). In my experience, bath water temperature is usually between 40° and 42°C (104° and 107.6°F), and I can attest to the fact that it really does feel good to take a nice, relaxing bath at the end of the day (except in the summer, anyway). As an added bonus, you can reuse the bath water for your washing machine's first wash and rinse cycles!
Because you are expected to take a shower before you get in the bathtub, there is usually a hand-held shower head hanging on a rail next to the tub for you to use. There is also often a plastic stool for you to sit on while you shower yourself and a shallow bucket for you to fill with water—either from the tub next to you or from a faucet installed somewhere near the shower head—for rinsing yourself off in addition to or in lieu of the shower head. Furthermore, to facilitate showering outside of the tub, the entire room is built out of materials that are designed to get wet and there is even a drain in the floor.
Incidentally, it's worth noting that Japanese bathrooms are designed very differently from their western counterparts. A western-style bathroom typically consolidates a shower/bathtub, toilet, and sink in the same room. In Japan—excluding western-style hotel rooms—these are split up into three separate rooms. The toilet is located in a room about as large as a small walk-in closet; the sink is usually in the next small room down the hallway, which also commonly has the household's washing machine; and the bathtub and shower are in most cases adjacent to the room with the sink and washing machine, and may be accessed through a door between them.
This setup definitely has its advantages: three different people can use the sink, toilet, and shower simultaneously without getting in each other's way. Personally, I happen to think that it's more sanitary to keep the toilet and shower in separate rooms anyway.
I've known about this for several years now, but I still admit that I was a bit surprised when I first discovered that very few Japanese residences have the kind of central heat/air systems that are common in the U.S. (Good insulation seems to be lacking, as well, with one possible exception being buildings in Hokkaido.) Instead, Japanese homes are typically heated and cooled one room at a time. In other words, you need to install a heater or air conditioner in every single room you want to heat or cool. Thankfully, you have a bit of flexibility in choosing how to heat your home: you can use any combination of electric space heaters, kerosene heaters (some of which have a flat surface on top for placing a kettle), gas heaters, “hot carpets”, kotatsu, and even heated toilet seats. Unfortunately, you have fewer options for cooling your home: you can really only use mechanical fans, hand fans, and wall-mounted air conditioners. You can—and probably should—carry a towel around for wiping your sweat off periodically, too, especially in the middle of the summer when it's 35°C (95°F) outside and the humidity hovers around 70%.
As I mentioned earlier, heat and electricity are expensive. I know that I represent an extremely small sample size, but consider the following energy costs.
To be fair, these rates feel exorbitant to me because I was used to paying for cheap hydroelectric power. Specifically, I used to pay a base service charge of ~$4.50 plus ~$0.05 for each kWh up to 10 per day and ~$0.10 for each kWh after that. So not accounting for my current “fuel costs” and “renewable energy costs”, my base service charge has more than doubled and my cost per kWh has quadrupled.
Feel free to work out how much your energy costs differ from these.
Ovens don't appear to be a standard appliance in Japanese residences, so you would need to buy your own standalone oven—and find somewhere in put it—if you wanted to do any baking at home. Of course, given the high cost of gas and electricity here, this may be for the best anyway.
I think that moving is unpleasant regardless of where you live, but in Japan it is particularly annoying—to put it mildly—because you have to bring and install almost all of your major appliances yourself. These include your refrigerator/freezer, your washing machine, your air conditioners, your heaters, and in some cases even your kitchen stove. (Thankfully, you aren't expected to move your bathtub or water heater.) I had no idea how fortunate I was to have these appliances provided for me whenever I moved into a new apartment in the U.S.
That being said, moving in Japan isn't without its advantages, either: I'm told that after you've moved into an apartment your rent doesn't tend to change too much, unlike in the U.S. where your rent is often subject to yearly increases. I knew a number of people in the U.S. who decided to move because they had essentially been priced out of their own apartments. Of course, there are always exceptions: I hear that apartments in Kyoto have some kind of yearly “lease renewal fees” instead.
Japan is very environmentally conscious with respect to trash and recycling. It has to be: with a population of over 125 million people in a country smaller than the state of California—most of which is forested or mountainous—there isn't enough space to bury everyone's garbage in landfills. Instead, as far as I can tell, the vast majority of residential trash is either burned or recycled. Households are responsible for separating their trash and recyclables into several categories, which include combustibles, non-combustibles, plastic, paper, aluminum, glass, and PET bottles. Virtually all disposable consumer goods have clear labeling to indicate how they are categorized. I really wish the United States would adopt a stricter recycling system like this, but I'm not going to hold my breath.
If I was asked what all of these observations have in common, I would have to say that they are all attempts to conserve space and resources, both of which are very limited in Japan. Nearly everything about the Japanese home reflects this reality. While I can fully appreciate the frugality inherent in the trade-offs that have been made, I still sometimes miss the little luxuries that I used to take for granted.
]]>Here's a quick overview:
I've long been inspired by an idea I first learned about in The Artist's Way called morning pages. Morning pages are three pages of writing done every day, typically encouraged to be in “long hand”, typically done in the morning, that can be about anything and everything that comes into your head. It's about getting it all out of your head, and is not supposed to be edited or censored in any way. The idea is that if you can get in the habit of writing three pages a day, that it will help clear your mind and get the ideas flowing for the rest of the day. Unlike many of the other exercises in that book, I found that this one actually worked and was really really useful.
How much can one say in 750 words? How long will it take? You and I are about to find out together.
After a hiatus of many years, I finally started reading science fiction novels again last year. The catalyst? The Humble eBook Bundle.
As it happens, a coworker of mine had recommended Old Man's War as one of the titles on his shortlist of great contemporary science fiction. I filed the name away for later—which of course is a euphemism for “more or less forgot it entirely.” Nevertheless, the seed had been planted.
As it also happens, I purchased my first iPad early in 2012 in preparation for my impending move from the United States to Japan. I had been an avid reader of (non-fiction) books through my local library, and I was afraid of losing easy access to all of that great English literature. Ebooks, I thought, were the solution that I was looking for. Although I had considered buying a Kindle, I ultimately decided on the iPad because I already owned an Apple laptop and felt that a “general-purpose” device would probably be a better use for my money in the long run. Be that as it may, I didn't use my shiny new iPad as much as I had hoped, mainly because I didn't want to buy any books encumbered by digital rights management, and those proved difficult to find.
Anyway, when I saw Old Man's War in the Humble eBook Bundle, I knew that the stars had finally aligned and I had to grab it. I enjoyed the book so much, in fact, that I wanted to read the rest of the series. But how could I find DRM-free versions of those books?
Once again, I got very, very lucky. Unbeknownst to me, in April Tom Doherty Associates—the publisher of Old Man's War—announced that they would remove digital rights management from all of their ebooks by early July 2012. Note that the Humble eBook Bundle went up for sale on October 9, three full months after Tom Doherty Associates' announcement. In other words, I could get the sequels to Old Man's War entirely DRM-free! This was pretty exciting news to me.
Unfortunately, this being the real world, there are still a number of kinks to work out.
I will say this, though: after reading a few ebooks on my iPad, I never want to go back to physical books again. Ebooks are infinitely light—or at least as light as your ebook reader of choice—and easily searchable. I can carry an entire library in my pocket. I can't count the number of times that I agonized over whether to sell old books of mine because they were taking up too much space, or, conversely, wished that I could re-read a book that I once owned when I was much younger but has since been lost to time (and which may, in fact, still be languishing somewhere in my parents' house). Honestly, what's the point of a bookshelf full of books other than as an antiquated trophy case of written ideas trapped in awkward, temporary physical relics? I realize that I may be in the minority here, but I honestly believe that in the war between bits and atoms, bits are going to win.
And that's all I have for today! 836 words, 83 minutes. Thanks for reading.
]]>Everyone is in the process of becoming who they are; we all start as rough drafts and through the act of living and choices we make, refine who are [sic]**, hopefully getting closer to who we imagine we could be as we go.** None of that is easy. Some people have further to go with that process than others, because of their own set of circumstances. I think if you’re a good person or are at least trying to be, when you see someone on that sort of journey, you encourage them when you can. And if they have come to a place where they are happy (or even just happier) with who they are, then you celebrate that with them.
I love this quote because although John was writing to explain what he meant by saying that he is supportive of transsexuals, the quote can be applied to pretty much everyone. I've held onto a similar sentiment for a long time with regards to getting older, actually: I feel that with each passing year I am coming to understand myself better and thus approach what I would consider to be my “true self.” I've certainly made a few missteps along the way, but as I look back I realize that I have undeniably made progress. Life really is a story that we tell ourselves and each other, for better or for worse.
Finally, for what it's worth, I should say that I am entirely in agreement with John's view of transfolk. I would be lying if I said that I understand how they feel, but I fully support their right to do so.
]]>For what it's worth, I came across this article through a link on John Scalzi's blog.
]]>For the perfectionist, nothing is ever done. Every endeavour begs for improvement; every flaw is conspicuous and must be tended to. It is difficult to ever truly feel proud of what you have accomplished because, deep down inside, you will keep telling yourself that it could have been so much better. This is why I still hesitate to share these words with you, even after reading them over dozens of times. Yet I must.
For far too long I have been just another anonymous blip in cyberspace. I'd like to change that. I'd like to start creating things, and doing it in public. Obscurity sucks. Most of the thoughts and ideas that occur to me every day are simply forgotten; the least I can do is respect them by sharing them with others. Even if only a few people in the world find them interesting or helpful, it will have been worth it.
]]>