Giving away digital content only worked because no one is doing it


If Steve had posted comments on the thread about how his graphic novel shouldn’t have been uploaded, or how piracy was wrong, the response would not have been pretty. But he didn’t, instead deciding to engage with users who probably wouldn’t have otherwise heard of or even seen his work.

The end result is Steve now has a few more genuine fans who may now buy his work regardless of how much it gets illegally uploaded to the web. So he effectively gave away the digital version for free which lead to more paper-based sales. Would that actually work as a model for the industry? I doubt it. Steve won the respect of the 4chan users and that’s what spurred sales not the availability of the pages in the first place.

I think generally, people are pretty heavy handed when it comes to piracy. Digital content is a different beast of a different nature, and trying to shoehorn it into the usage models and economic models of the past often end up with people pulling out lawyers. And we all know what people think of lawyers. (!)

However, I don’t agree with the conclusion and assessment of the OP that because he gave away digital copies, that lead to more paper sales, which meant that it’d work for everyone.

It’s not that this is a one off chance occurrence, but rather, he found another way to talk about his product and get engagement from potential customers where no one else was talking. In addition, it was what Seth Godin calls the Purple Cow. It was significant for 4chan members to pay attention to because it was new, and no one else was doing it. Thus, he got the full attention of his audience. Imagine that if all graphic novelists gave away their stuff digitally for free on 4chan. Then you’re going to get a fragmentation of attention, and that peak’s not going to be that high.

Groupon actually suffered from the same problem of focused attention when it first started out as the Point. When it was the Point, the community could be concentrating on any number of causes or group actions. However, the power of group actions is in numbers, and when you can focus the attention of your community on one thing, then the power of the community is magnified and they can actually make things happen. Thus, Groupon only has one deal a day, and focuses their community on that.

I think generally, authors and musicians will slowly come to terms with giving away digital content, but they’ll find that as everyone starts doing it, the less effective it becomes with the particular audience you’re talking to. 

Using nightly builds of Titanium

I’ve started using nightly builds of Titanium to our code base, and this is what I found out:

First of all, you can get the latest Titanium from github’s master branch, but you’d need to compile it yourself using python and scons, as detailed here. If you run into problems building the android sdk from source: 

scons: Reading SConscript files ...
Exception: No Android SDK directory found:
  File "/Users/jmw/src/titanium_mobile/SConstruct", line 79:
    sdk = AndroidSDK(ARGUMENTS.get("android_sdk", None), 4)
  File "/Users/jmw/src/titanium_mobile/support/android/", line 42:
    raise Exception('No Android SDK directory found')

here’s the fix.

However, if you don’t want to compile it, there’s a repository of nightly builds.

Either way, you’ll end up with a zip file that you can copy to your Library/Application Support/ directory from root or from your user directory. From the 3rd step detailed here:

Unzip the new distribution file and put the new mobilesdk source in the Titanium application directory:

/Library/Application Support/Titanium/mobilesdk/osx/

Then restart Titanium Developer and select the new Titanium SDK version, and then launch. Thereafter, you can compile from Xcode.

If you’re upgrading from 1.4.2, you might get this error:

_OBJC_CLASS_$_SBJSON". referenced from: Objc-class-ref-to-SBJSON in libtiverify.a (TiVerify.o) 
Symbol(s) not found


And once again, google is great. Here’s the fix. You’ll need to scroll down to the comments to figure out the fix.

Questions to ask yourself when debugging

Typically, debugging has been hard. I’m not talking about the kind where you made a mistake and could fix easily after a bit of inspection. I’m talking about the ones where it seems like things just go wrong, and you have no idea what to do or where to start to fix it.

In the beginning, it use to be when I debugged, I would just try random things until it worked. I quickly grew out of that, and almost always managed to figure out what was wrong, even if it was a painful slog. It was worse when I was using libraries. If the bug ended up being in a library with no documentation, I’d not know what to do. Digging into a library to see what was wrong? Inconceivable! 

And when I got frustrated, I’d just re-run the same thing, thinking that it would magically change something this time around. Wasn’t it Einstein that said insanity is doing the same thing over and over again and expecting different results?

Nowadays, when debugging, I’ve found that asking myself a couple of pertinent questions helps with the debugging.

What’s the reported problem?

I hesitated to put this question in here because it’s something that’s second-nature to me now. But seeing nacent coders, they often times don’t read the error output and figure out what the computer’s actually complaining about. It’s too easy to just see “Argh, it’s not working!”, and have a mental block there.

Read the actual error! Where does the error occur and what’s the immediate reason for the error? If it doesn’t make sense, search the error message on stackoverflow. That’s a good start to understanding what the error means. If you don’t know where to see errors, find out. Ask around. Without some sort of error log or output log at the very least, you’re just flying blind.

What is it doing that’s different from what I think it’s doing?

When something goes wrong, I realize it’s usually an assumption that I have about the system that isn’t matched up to reality. The next step is to understand what the heck the system is doing instead of what I think it should be doing. This is a pretty important step that I’ve had a mental block on before. 

How did the immediate cause for the crash or error come to be? What are the data and states that are coming into this function? What’s the sequence of events that lead up to the state?

How do I find out what it’s doing?

And lastly, if I don’t know what it’s doing, and I can’t tell what it’s doing, I usually ask myself how do I find out? Do I look at the log files? Is there a place where error messages are outputted? Are there debugging tools that will help me?

Often times, if the error is reproducible, then you can keep running it until you find out what it’s doing. If it’s a large system wide crash, then you ought to be sure that the system keeps a log of the important things that it’s doing.

It’s not quite like puzzle solving.

People have often compared debugging to solving puzzles. That conjures up in most people’s minds as doing something. However, in puzzle solving and debugging, most of your time is not actually coming up with fixes, tweaks, and solutions. It’s mostly spent understanding wtf is going on. Once you know what’s going on, the solution is usually fairly apparent.

When debugging, you should be spending time on resolving the dissonance between what you think should happen and what is actually happening, otherwise, you’re just wasting your time.

Facebook allows you to download your info.


This is a surprising move from Facebook. I don’t yet know to the extent that it allows you to download your information, or what you can do with it, but on first glance, it seems a way to head off Diaspora off at the pass.

It could be that Facebook is counting on other social networks in the future being built on top of it, rather than being started over from scratch. If that’s the case, then it has positioned itself as a fabric of the web, rather than a footnote in history.