Skip to content

Categories:

Game Producer Blog

In the Future, All Gamers Are Athletes (PS3 Move/Xbox Kinect Stuff)

Several years ago, Nintendo Wii changed the way how families play games. Yes they did. A chap told me that he was never interested in games… but bought Wii and was hooked. So, this proves my statement.

Now, few years later, Sony brings Move for Playstation 3. Move is a odd looking stick with a light ball in the end. Bit like those yedi lightsabers, with a ball instead of blade in the end.

Today I watched some Move game trailers and it sort of hit me that these Wii & Move (and Kinect for Xbox) are helping change the whole nations. I think these things can really have impact on our health. I remember trying Wii at my bro’s house and after a few minutes of boxing I was sweating. It wasn’t “just a video game”, it was bloody exercise. With fun games coming out, I can imagine how these games can help get gamers in better shape.

I still think that nothing beats going out and getting some fresh air… but at least if our kids (and we) play a bit more of these games that get their asses off the sofa, we are heading to somewhere better place.

Here’s a video aobut a game called The Fight: Lights Out (reminded me about the Fight Club movie for some reason). I don’t know how much you can “cheat” nor how accurate the move stick – or two – are, but looks pretty slick to me.

I guess much depends how accurate the system really is.

I’m becoming more of a console man. (Yaiks.)


Micro-ISV.asia

More Goodies in Delphi XE and C++Builder XE

Delphi XE and C++Builder XE were released on Monday. The eagerly anticipated support for Win64, OS X, and Linux remains on the roadmap for Delphi and C++Builder. The focus for the XE releases seems to be on added goodies.

  • Regular expressions: With regular expression support now part of the RTL, that is one less 3rd party component that you need. The way the RegularExpressions unit is implemented is particularly nice. It uses records instead of classes to mimic .NET’s regex support. It only takes one line of code to use a regex. You don’t need to worry about memory management.
  • Subversion integration: Check out projects from version control and commit your changes without leaving the IDE. The Differences subtab of the History tab in the code editor allows you to quickly compare any two revisions of the file you’re editing. All this works even if you don’t have a subversion client installed, though you’ll probably want to keep the client you have to manage files that you edit outside the Delphi or C++Builder IDE. The CollabNet subversion client that is part of the installer is the command-line svn tool. You don’t need to install it unless you really want to work from the command line.
  • Beyond Compare: Delphi and C++Builder do not include the full directory comparison tool. They do include the file differ that is part of Beyond Compare. If you don’t like the built-in differ on the Differences subtab of the History tab in the code editor, you can make a change in Tools, Options to use the Beyond Compare differ instead.
  • AQTime: AQTime from SmartBear Software is a code profiler that supports a wide range of development tools for Win32 and .NET. Delphi and C++Builder XE include a version of AQTime with reduced functionality. It only works with the XE versions of Delphi and C++Builder, and does not include some of the more advanced profilers. Even so it offers everything most developers need for profiling their applications. AQTime normally costs $599, so that’s a nice bundle even with the limitations.
  • CodeSite: CodeSite from Raize Software is a logging tool. A logging tool can be very helpful for debugging code where breakpoints are cumbersome. The main benefit of CodeSite is that you can log almost anything, including complete Delphi objects. CodeSite can also log what your application does on your customer’s computers if they install a redistributable with the CodeSite logging application (or if you make it part of your own installer).
  • IP*Works: IP*Works is a set of Internet components, much like the Indy components that have shipped with Delphi and C++Builder for many years. Since IP*Works is not written in pure Delphi, Indy is likely a better choice for Delphi developers. IP*Works is included with Delphi and C++Builder mainly because it is also included with RadPHP, which is now part of RAD Studio XE. If you want to use the same internet components in Delphi and PHP, then IP*Works may be an option.

FinalBuilder is only included with the Enterprise and Architect editions of Delphi XE and C++Builder XE. All the other goodies are included with all editions, including the Professional edition.


Dennis Forbes on Software and Technology

Flash on Android Slightly Better Than Shockingly Bad

A Brief History of My Antagonism Towards Flash

I was anti-Flash before Steve Jobs made it cool. I have as much anti-Flash credibility as anyone.

For over a decade I've steered organization after organization away from building solutions in Flash, often against great resistance. I was evangelizing SVG — what I saw as the biggest opportunity for a more illuminated, open solution than Flash — back when it's strongest corporate sponsor was none other than Adobe.

Aside: Humorously Adobe was leveraging SVG in their battle against Macromedia's Flash/Shockwave empire, before finally giving in and buying 'em out.

I have railed loudly against Flash on many occasions.

The Great Flash of Propriety

Yet Flash is fairly pervasive, despite my valiant attempts.

Up until around 2005 and the birth of YouTube, Flash had very little presence in the video space: That realm was dominated by Real Player, Windows Media Player, Quicktime, among others. Flash fit in the RIA niche where it displaced the short-lived empire of ActiveX and Java Applets. It was the tool for great web entertainment like You Don't Know Jack, the Net Show.

Then YouTube rose with Flash at its presentation core, and the rest is history. Soon Flash was the oddball foundation for video.

If you mention Flash today, however, the topic will immediately veer violently to the great Flash/Apple battle of 2010, where Apple has loudly rejected Flash (where it represents a proxy for "rich applications they don't control"), and Google, perhaps being a bit antagonistic, has embraced it with their Android and Chrome solutions.

Ok, embraced is probably a bit of an overstatement. In reality Google's initiatives have top notch HTML5 support, the best JavaScript performance, and are probably the best mobile/thin platforms for rich HTML5 applications, but they just happen to optionally support Flash as well, perhaps providing a bridge from the past.

A Very Personal Flash Experience

I've been running Flash on my Nexus One for several months now. I have it configured to On Demand so the scourge of animated, CPU-clogging Flash adverts don't destroy my web browsing experience. When there is Flash content that I want to view, I click the little arrow and voila, Flash is running on my mobile phone.

Overall it has been a very welcome addition to the device. From restaurant sites, to small videos like Zero Punctuation reviews, to games for my children, to product information pages, I like having the option of engaging Flash when the need arises.

So when I saw entry titled "Just How Bad Is Flash on Android" on Daring Fireball, of course I was drawn in. There Gruber indirectly linked to some demonstrations of Flash failing miserably on several Flash video sites.

To which, I say, no kidding.

Anyone under any illusion that having Flash on their mobile device opened up any and all content is willfully or technically incompetent. That or it's link bait trying to herd in the people who desperately need their biases confirmed, and a lot of people desperately need to believe that Flash isn't necessary on mobiles. I'd probably say it's that second option at play.

Of course not all content will play. This is, after all, a mobile device with a little power-sipping mobile processor. While 1Ghz sounds pretty pimp, the Snapdragon in the Nexus One is in many ways a weakling, particularly in video decoding and 3D graphics tasks where it fell behind even the iPhone 3GS.

On this 1Ghz processor I've had trouble playing local 720x480 h264 videos encoded at 1Mbps, encountering frequent stuttering and dropped frames. Compare that to the iPhone 4 which allows for up to 7Mbps+ videos at 1280x720, which it plays flawlessly, owing to the excellent hardware decoding.

When it comes to video the iPhone 4 simply kicks the Nexus One (and virtually every other HTC Android device, as HTC is addicted to Snapdragons) to the curb. Then again, the Samsung Galaxy S kicks the iPhone 4 around and calls it Sally, while the OMAP in the Droid 2/X offers a fair fight.

Snapdragon processor devices are not the top of the pile by a long measure.

So the Nexus One really isn't a great platform to highlight video prowess anyways.

Enough with the hardware excuses.

Add that Flash is often its own worst enemy: When you enable the plug-in, your enable in the Android browser is browser wide for that page, meaning it simultaneously enables the twelve punch-the-monkey animated ads surrounding it, often destroying the experience.

So there is no surprise at all that a high bitrate 1000x500 video surrounded by Flash adverts — a scenario that clogs a high performance 2.4Ghz core on a modern x86 PC (which would be equal to about a 8Ghz or higher snapdragon) — probably with a layer of DRM adding more demands, doesn't run so great on a mobile device.

"So Steve Jobs Was Right! Flash won't work on mobile!"

Given that I've enjoyed Flash on my smartphone on many occasions, I find such claims — which I keep seeing made by seemingly non-stupid individuals — ludicrous. It is fervent, desperate doublespeak.

Mobile Flash exists. It's far from perfect. The available content usually isn't even aware that it exists. Yet still, it is.

And really, it isn't a fair fight anyways. When sites provide HTML5 video, they do so often specifically for the iPhone/iPad because of the massive namespace territory they conquered. Most sites don't even feature sniff for the functionality — they don't care if you are running Chrome or Safari or IE 9 and can run HTML Video — but will instead refuse to serve up HTML 5 video for anything but those Apple devices. Given that, they encode specifically and only for that platform, with appropriate bitrates and complexity profiles ideal for those devices.

There's no big surprise that it often runs well.

That isn't a very encompassing, scalable solution though. One device family isn't meant to rule, and at some future point HTML5 will start to leave the iOS devices behind. The iPhone lived through a special moment in time where it was handled as a blessed child, getting its own special treatment, however that moment is passing.

Of course the Flash people have a solution for disparate devices, using dynamic streaming that is based upon the consuming device (resolution and bitrate scaling based upon the capabilities of the device, very similar to some technology in Microsoft Silverlight). Not surprisingly there is little use of it yet given that mobile Flash devices just started appearing very recently, and still comprise a tiny market.

"So...Steve Jobs Was Right?"

No.

When I originally thought about how to respond to this, my first idea was to make a video demonstrating a smartphone failing miserably at rendering and interacting with various HTML5 sites. But then I thought better because someone might confuse that as a serious criticism of HTML5 when I love the technology stack and pragmatically realize that it can't (and shouldn't) always be universally accessible.

Yet still, contemplate the failings of HTML5 on mobile devices:

  • Layout can be ill suited for the screen dimensions and resolution of a smartphone.
  • Functionality can be overwrought and too heavy for a smartphone.
  • Input techniques might not work on smartphone.
  • etc.

Anyone who has browsed on their smartphone or tablet has experienced all of those. If someone were looking to go out of their way to act shocked that such an experience exists, source material can be found everywhere.

Which is of course why many sites, like the atrocious script pig TechCrunch (seriously, load it up in Firefox with Firebug and check the net tab), created special mobile pages that they force you to, against your will, when you try to visit on a mobile device.

The next time you see a TOP 10 CANVAS DEMOS on your social news site of choice, pull them up on your tablet or smartphone and check out how well they work. Chances are overwhelmingly that they will fail miserably. Almost every HTML5 game demands that you use a keyboard to control it, if they aren't simply too resource demanding for a little mobile device.

So do we write off web browsers on mobile devices? Do we say, in a tut-tut-tut fashion, "No mobile browser exists. WAP is the world for portable devices!" I hope not.

Punching Monkeys Coming in HTML5 Soon To You

One trend that is accelerating is the movement of many ads to HTML5 and away from Flash. That short period where iOS devices came with an almost intrinsic AdBlock+ in the form of the lack of Flash capabilities is rapidly disappearing. Soon every page you visit is going to be a mishmash of computationally demanding canvas renders and DOM manipulations, and it's going to become much more difficult to avoid their cost.

Closing Notes

For those who are on the fence about the whole Flash thing — whether they care about it on their mobile or tablet — take a look a the quick video I put up above. The videos did not run perfectly, the auto configurator didn't provide a seamless, perfect experience...yet if the option is that or nothing, I think most reasonable people would agree that it's better than nothing.


Joel on Software

Fork it!

The Stack Overflow Blog: “The Unix world loves to take sides. I don’t have to blog about this; Freud already did, in 1930. He called it ‘the narcissism of minor differences’”

Need to hire a really great programmer? Want a job that doesn't drive you crazy? Visit the Joel on Software Job Board: Great software jobs, great people.


Game Producer Blog

And the Contest Is Ended

I have a problem. The very first that I wanted to buy is goddamn free!. I demand a possibility to pay $4.95 to get that game.

I’ve read & checked out half of the games on that list, and so far especially these got my attention. Especially the oddly catchy phrase got my attention.

I’ll go through the list and grab some games.

Thanks everybody who participated.


MicroISV on a Shoestring

New Trends In Startup Financing Explained For Laymen

Noted American technology investor and all-around smart guy Paul Graham wrote recently about emerging trends in startup funding, specifically that convertible notes and rolling closes are displacing the traditional equity rounds done at a fixed valuation done with angel syndicates.

Did that sound like Greek to you?

Great, you might benefit from this translation of Financier into Geek.  (P.S. If you haven’t figured out the significance of it originally being written in Financier instead of in Geek, please, think it through.)  I originally wrote it as a comment on Hacker News but somebody asked me to put it somewhere easily findable.  I have elaborated with standard blog post formating and graphs where I thought they helped the explanation:

Why We Care About Angel Investing

Startups raise money from investors to accelerate their growth into, hopefully, massively profitable businesses and/or massively large acquisitions from big companies.

One particular type of investor that invests in startups is called an angel investor. An angel investor is often an individual human being who is wealthy, frequently as a consequence of successful entrepreneurship. They invest anywhere from $25,000 to $250,000 or so.

Fundraising is painful, and requires a lot of time and focus from startup founders. To mitigate the pain, it is often structured in terms of “rounds”, where the startup goes out to raise a particular large sum of money all at once. For an angel round, let’s say that could be a million dollars. (n.b. It is trending down, as companies can now be founded for sums of money which would have been laughable a few years ago.)  Clearly we’re going to need to piece together contributions from a few angels here.

Why Angel Investing Frustrates Founders

Traditionally, one angel has been the “lead” angel, who handles the bulk of the organizational issues for the investors. The rest just sit by their phone and write checks when required. (Slight exaggeration.) Investors are often skittish, and they require social proof to invest in companies, so you often hear them say something like a) they’re not willing to invest in you but b) they are willing to invest in you if everybody else does. This leads to deadlocks as a group of investors, who all would invest in the company if they company were able to raise investment, fail to invest in the company because it cannot raise investment.

Startup founders are, understandably, frustrated by this.

What “Valuation” Means

All numbers below this point were chosen for ease of illustration only.  They do not represent typical valuations, round sizes, or percentages of companies purchased by angels.

One item of particular interest in investing is the valuation of the company. This gets into heady math, but the core idea is simple: if we agree that the company is worth $100 at this instant in time (the “pre-money valuation”), and you want to invest $100, then right after the company receives your investment, the company is worth $200 (the “post-money valuation”). Since you paid $100, you should own half the company.

Traditionally, the company has exactly one pre-money valuation (which is decided solely by negotiation, and bears little if any relation to what disinterested outside observers could perceive about the company). All investors receive slices in the company awarded in direct proportion to the amount of money they invest. Two investors investing the same amount of money receive the same sized slice of the company. This can be written as “they invested at the same valuation.”

The thesis of PG’s essay is that allowing investors to invest at the same valuation is not advantageous to the startup. Instead, by offering a discount to valuation for moving quickly, you can convince investors to commit to the deal early, thus starting the stampede from the hesitant investors who were waiting to see social proof.

For example, take the company from earlier. We said it was worth $100 prior to receiving investing, but that is not tied to objective reality. Say instead we’ll agree that it is worth $80… but only with respect to the 1st investor. He commits $20. $80 + $20 = $100, so he gets $20 / $100 = 20% of the company for $20, or $1 = 1%. This convinces a second investor to invest. He says “Can I get 20% for $20, too?” Not so fast, buddy, where were you yesterday? The company isn’t worth $80 any more. We think it is worth $105 now. (Did we just get through saying $100? Yes. But valuations are not connected to objective reality.) So you get $20 / ($105 + $20) = 16% of the company for your $20. Think that is fair? You do? OK, done.

This continues a few times. The startup raises money — possibly more money, depending on how much the angels want in — with less hassle for the founders.

What Is A Convertible Note?  Why Do Founders Like Them?

We’ve been talking about just dollars so far, and alluding to control of the company as if it were equity like stocks, but there is a mechanism called “convertible notes” at play here. A convertible note is the result of a torrid affair between a loan and an equity instrument. It looks a bit like Mom and a bit like Dad. Like a loan, it charges interest: typically something fairly modest like 6 to 8%, much less than a credit card.

The tricky thing about convertible notes is that they convert into partial ownership of the company at a defined event, most typically at the next round of VC funding or at the sale of the company. So, instead of the first investor getting $20 = 20% of the company, he loans the company $20 in exchange for a promise like this: “You owe me $20, with interest. Don’t worry about paying me back right now. Instead, next time you raise money or sell the company, we’re going to pretend that I’m either investing with the other guy or selling with you. The portion of the company which I buy or sell will be based on complicated magic to protect both your interests and my interests. If you want to sweeten the deal for me, sweeten the magic.”

Do we understand why this arrangement works for both parties? It incentivizes investors to commit early, which lets startups raise more money with less pain. Because startups are in the driver’s seat, it also lets them avoid collusion among investors (“We decided we’d all invest in you, but we don’t think the company is worth $100. We think it is worth $50. Yeah, that has no basis in objective reality, but objective reality is that your company is worth $0 without the $100 in our collective pockets. What is it going to be? Give up 2/3 of the company, or go broke and get nothing.”)

How Do You Calculate The Equity Value of A Convertible Note?

OK, back to complicated magic. When the company takes outside investment, the convertible notes magically convert into stock, based on:

  • a) the valuation the company receives for the investment round  (higher numbers are better for both founders and angels)
  • b) a negotiated discount to the valuation, to reward the angel investor for his early faith in the company (higher numbers are better for angels)
  • c) possibly, a valuation cap (higher numbers, or no cap,  are better for founders)

For example, continuing with our “low numbers make math comprehensible” startup, let’s say it goes on a few months and is then raising a series A round, which basically means “the first time we got money from VCs”. We’ll say the VC and startup negotiate and agree that the company is worth $500 today, the VC is investing $250, ergo the VC gets a third of the company.

How much does our first $20 angel investor get? Well, he gets to participate like he was investing $20 today, plus he gets a discount to the valuation. So instead of getting $20 / $750 = 2.67% of the company, maybe he got a 20% discount to the valuation, so he gets $20 / (.8 * $750) = 3.33% of the company. (We’re ignoring the effect of interest here for simplicity, but he probably effectively has $21 and change invested by now in real life.)

After this is over, the convertible note is gone, and our angel investors are left with just shares (partial ownership of the company), which they probably hold until the company either goes IPO or gets bought by someone. So if the company later gets bought for $2,000 by Google, our intrepid angel investor makes $66 on his $20 investment.

How Does A Valuation Cap Work?

We haven’t discussed valuation caps yet. Valuation caps are intended to prevent the startup dragging its feet on raising money, thus building up lots of worth in the company, and then the angel investor getting cheesed. For example, if they had just grown through revenues for a year or two, they might be raising money at a valuation of $1,250. In that case, $20 only buys you 2% of the company (remember, he gets a 20% discount : $20 / (.8 * $1250) = 2%), which the angel investor might think doesn’t adequately compensate him for the risk he took on betting on a small, unproven thing several years before. So we make him a deal: he gets to invest his $20 at the same terms as the VCs do if, and only if, the valuation is less than $750. If it is more than $750, for him and only him, we pretend it was $750 instead. This means that under no circumstances will he walk away with less than $20 / (.8 * $750) = 3.33% of the company, as long as the company goes on to raise further investment. (Obviously, if they fold, he walks away with nothing. Well, technically speaking, with debt owed to him by a company which is bankrupt and likely has no assets to speak of, so essentially nothing.)

Perhaps This Will Be Clearer With A Picture

Angels ultimately benefit from higher discounts to the valuation of the Series A round, and lower valuation caps.  Higher discounts, and higher effective discounts, mean you get more of the company for less money.  That is an unambiguous good, as long as you keep the quality of the company constant.

Let’s see how valuation caps affect how much of the company you end up with.  The better the company is doing by Series A time, the less of the company the angel ends up with.  This shows the incentive for the founders: do as well as you can prior to raising money, which is the same incentive founders always have.

As you can see from the below graph, a valuation cap essentially gives the angel an artificially higher discount for if the Series A valuation exceeds the valuation cap.  Obviously then, it is in the interest of angels to negotiate as low a cap as possible, and in the interests of founders to negotiate a high cap or no cap at all. According to Paul Graham, this becomes the primary “pricing” mechanism in the new seed financing economy: if a founder wants to reward an angel, they award them with a lower cap.  If they don’t, the angels get a higher cap, or no cap at all.  This kicks discussions of valuations down the road a little bit, and allows you to simultaneously offer the company to multiple angels at multiple “price points”.  That allows you to reward them for non-monetary compensation (mentoring, having a big name, etc) or for early action on the deal.

This Is Not My Business. Take With A Grain Of Salt.

Lest anyone get the wrong impression, my familiarity with angel investing is very limited and, to the extent that it exists, it is mostly about angel investing in small town Japan.  (Oh, the stories I can’t tell.)  The above explanation is based on me processing what I’ve read and trying to prove that I understand it by explaining it to other people.  If I have made material errors, please correct me in the comments.

My current business is not seeking funding (and would be an extraordinarily poor candidate for it).  I’ll never say never for the future, but for the present, I rather like getting 100% of the returns.

[Edit: Want to use some or all of this, including the graphs, for your own purposes?  Go ahead.]


The Poker Copilot Blog

Please Don’t Give Me Options

I went to the drugstore to buy new shampoo. They didn't have my regular brand anymore so I had to select a new brand. But which one? Shelf after shelf of shampoos surrounded me and taunted me. I had any useful criteria  to select one. I suspected that most of them were the same formula in different colour bottles but I couldn't be sure. Spending two euros to buy an everyday product became a brain-taxing challenge.

What I needed in the drugstore was a big sign that said "This is the shampoo for everyday men like YOU". Below the sign would be a marble pedestal, upon which a glowing bottle of shampoo would just want me to purchase it. No choices. Just an easy solution.

You've been there right? Whether it's pasta or water or digital cameras or mobile phone plans, we are burdened either with choices that are inconsequential or with choices that we are ill-equipped to make.

Worse even is the choice some software gives you when you download it ("professional version or extended version?"), install it ("Where shall our product install its Quidjibo data?"), or run it for the first time ("Would you like classic mode or postmodern mode?"). I want to defiantly say, "I don't know, I've never used your software, just do all the defaults for me please".

I try hard to keep Poker Copilot free of options. Every time I add an option I feel like I've failed slightly in the user interface design and implementation. People want the option to increase the font size? The hand replayer speed? The keyboard shortcuts? Then I've probably done a poor job in that part of the program. Instead i consider improving how it works so that more people are satisfied with the defaults. Naturally some options are helpful. But most aren't.

This mentality drove the design of the new Hand Replayer 1-click video recorder. When you click "Record" there are no options. You are not asked where to save the file, what to call it, what type of video encoding to us, or what resolution you want it. You shouldn't have to know about these things. Instead I copied the approach used by taking screenshots on the Mac - press [Cmd] + [Shift] + 3 and a screenshot is immediately saved onto your desktop with the word "Screenshot" and the current date and time in the filename. Likewise with Poker Copilot's recorder. The recording starts immediately. The file is saved to your desktop with the poker room name and the game number. It is in a video encoding liked by both QuickTime and YouTube.

 


Business of Software Blog

Different: escaping the competitive herd (a book review)

One of the speakers pulled out of BoS2010 a couple of weeks ago, leaving a gap in the schedule that I've been trying to fill since. For me, the best speakers at previous years have been those who've left my brain throbbing gently by the end of their talk. People like Geoffrey Moore, Don Norman, Seth Godin and Jennifer Aaker. I've been trying to think of somebody - they're often substantial academics and great communicators - who could fill that slot. I've been struggling.

Then I stumbled across Different: Escaping the Competitive Herd by Youngme Moon.

I picked it up expecting a book like all other business books. It would have, I thought, a single idea that would have made a good essay. That idea would be padded out to 200 pages, because that's the length business books have to be. It would include examples from WL Gore, Whole Foods, Best Buy and South West airlines. It would have a coherent set of principles and a checklist I could follow to help improve my business. It would probably do those things exceptionally well.

It didn't.

It totally under-delivered.

But it doesn't matter.

Why doesn't that matter? Because it surprised me in so many other ways. It's not a traditional business book - it's a mashup between a business book and a reflective essay. It meanders between marketing and philosophy, spending as much time discussing what it means to live in the modern world as how to build brands. As you'd expect, Youngme talks about Google and Apple (how could a book that talks about brands that insult their customers, polarise consumers and revolutionise product categories fail to mention Apple?). Less expectedly - but still within the category of 'business book' she's careful to keep one foot in - she writes beautifully and conversationally about Mini, Marmite, Red Bull and BAPE. But she also talks about Richard Feynman, the Onion and the Fonz. She even uses the word 'motherfucker' once. How many business books do that?

Youngme's thesis is that the way businesses are taught to compete is flawed. We're encouraged to talk to our customers and add the new features they demand. We examine our competitors, figure out where they're better than us and then we copy them. We find out what our weaknesses are, and fix them. We repeat, repeat, repeat, stuck on a treadmill of incremental innovation as we try to become better, faster, cleaner, cheaper, tastier - whatever it is that our customers tell us they want. The end result is entire product categories (bottled water, shampoo, detergent, cars, beer, operating systems, accounting software) stuffed with thousands of near-identical, micro-differentiated products that nobody can tell apart.

Youngme thinks there's a better way. She believes that the way to compete isn't by being better. It's by being different. The products and brands that people love are those that fail to give us what we expect, but which then surprise us in some other way. They refuse to be judged on the same axes as their competitors. They change our perception of what a product ought to do. Sometimes, they insult us. They cultivate their enemies as much as they nurture their friends. They're flawed, and they shout about their flaws to whoever will listen. They polarise. They refuse to be bland.

Youngme doesn't pretend this book is complete. Some of its ideas are tentative, and it has flaws. But rather than pretend those imperfections don't exist, she embraces them. Youngme describes Different as a 'leaky, leaky boat'. It takes what could be a weakness - its lack of absoluteness - and turns it into a tremendous strength. Sure, the book is ambiguous, its arguments aren't perfect and it offers few conclusions. But that's what the real world is like.

There's no way I can summarise this wonderful book in a single review. Go buy yourself a copy.

Youngme Moon is speaking at Business of Software 2010. There are still a few tickets left. Book now!


The Poker Copilot Blog

Coming in the next Poker Copilot Update

Do you have poker tracking software on your Mac that allows you to replay any hand and record it to a video? Something you can play in QuickTime, send to your friends or to online poker forums, or post on YouTube?

The next update of Poker Copilot will do this. One click on the replayer's "Record" button, and a video replay of the hand is saved to your desktop.

Screen shot 2010-09-02 at 1.33.30 PM.png

LonelyHackerRSS

Russia In Colour 100 Years Ago

Fabulous article and some gorgeous photographs:

http://www.boston.com/bigpicture/2010/08/russia_in_color_a_century_ago.html?ref=nf

Here’s one of the photos - beautiful and dramatic - I love it :-)

num15
RSS Feed: http://feeds2.feedburner.com/Lonelyhacker


Successful Software

I’m a millionaire!

Well, not in pounds or dollars.  But, according to WordPress.com and to my considerable surprise, this blog has now had over a million impressions since I started it, 3 and a bit years ago.

OK, I know Joel Spolsky or Jeff Atwood probably wouldn’t get out of  bed for a meagre million impressions, but I still couldn’t resist crowing about it.

As you can see in the graph below the traffic is very uneven, dominated by a few posts that made it on to the front page of social news sites.

In fact over 40% of the total impressions come from just 5 (2%) of the posts:

Post Impressions
The software awards scam 234,909
10 things non-technical users don’t understand about your software 55,291
Lessons learned from 13 failed software products 51,676
Your harddrive *will* fail – it’s just a question of when 47,505
Where I program 47,075

Here are a few things I have learnt along the way:

  • As with many things in life, persistence is the key.
  • Choose your audience and write for that audience.
  • Pick a realistic posting schedule and try to stick to it.
  • Find your own voice.
  • The titles of posts are important.
  • Don’t expect lots of clickthroughs from social media sites to translate to lots of subscribers.
  • Get your posts proof read (thanks Claire!).
  • I am lousy at predicting how much interest a particular blog post will generate.
  • Don’t blog about blogging.
  • Be prepared to break the rules from time to time.

Although time is sometimes scarce for blogging I have lots of ideas for future blog posts. But if there is anything you would particularly like to see on this blog, please leave a comment.


Filed under: blogging, software Tagged: blog, statistics, wordpress

Micro-ISV.asia

RAD Studio XE Now Shipping with 4 Programming Languages

Embarcadero shipped RAD Studio XE on Monday. The successor to RAD Studio 2010 now includes 4 development environments:

  • Delphi XE: Develop native 32-bit Windows applications using the Delphi language. Since Delphi now generates Unicode applications, only Windows 2000 and later are supported.
  • C++Builder XE: Same as Delphi XE, but using C++ as the language.
  • Delphi Prism XE: Delphi Prism XE integrates into Visual Studio 2005, 2008, and 2010. If you don’t have Visual Studio, the VS 2010 shell is installed when you install Delphi Prism. Delphi Prism was first included with RAD Studio 2009. It allows you to develop .NET applications using all the frameworks supported by Visual Studio, including WinForms, WPF, and Silverlight. Delphi Prism uses a language that is very similar to Delphi, but not identical. Unlike the Delphi for .NET compiler that was included with RAD Studio 2005 to 2007, it is not intended to make it easy to share code between Win32 and .NET. Instead it is intended to fully exploit the features offered by the .NET framework.
  • RadPHP XE: RAD Studio XE is the first release that includes RadPHP. RadPHP is the new name of Delphi for PHP. The old name was a bit of a misnomer because while RadPHP is inspired by Delphi, they’re totally separate tools. RadPHP is a development tool that looks and feels very much like Delphi and includes a framework very similar to the VCL, but creates web applications using PHP and JavaScript.

All in all that’s quite a bundle. There are 3 editions: Professional, Enterprise, and Architect. Enterprise has all the Professional features plus dbExpress server connectivity, DataSnap (for multi-tier database applications), WebSnap, UML modeling, and build automation. Architect has all the Enterprise features plus database modeling using ER/Studio.


MetaGreg

Deploy a Rails 3, Sqlite3 application in Tomcat using JRuby

and have a Ruby version running side-by-side.

A few months ago I got interested in JRuby while researching for text mining algorithms. I found some gems but they are either unmaintained or inadequate while the mature libraries I found were written in Java. No problem! JRuby to the rescue. Thank God.

Next stop, I decided to take Rails 3 and JRuby for a spin. Incidentally, I will be on a 3-city Rails tour in the Philippines this September and since there are many Filipino Java developers, they might find it interesting to see their favorite Java platform works nicely with Ruby on Rails.

Setup

I will be using the following for this tutorial:

java 1.6 + JDK
tomcat 7.0.2
rvm 1.0.1
jruby 1.5.0
ruby 1.9.2p0

Further below, I outline how to install these software. First, let’s see my current environment.

$ more /etc/issue
Ubuntu 9.10 \n \l

$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)

$ rvm -v
rvm 1.0.1 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]

$ jruby -v
jruby 1.5.0 (ruby 1.8.7 patchlevel 249) (2010-05-12 6769999) (Java HotSpot(TM) Client VM 1.6.0_20) [i386-java]

$ TOMCAT/bin/version.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.2
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.2
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.2/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.2/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.2/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.2
Server built:   Aug 4 2010 12:23:47
Server number:  7.0.2.0
OS Name:        Linux
OS Version:     2.6.31-22-generic
Architecture:   i386
JVM Version:    1.6.0_20-b02
JVM Vendor:     Sun Microsystems Inc.

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

Install JDK and Tomcat

$ aptitude install curl sun-java6-bin sun-java6-jre sun-java6-jdk
$ wget  http://apache.mobiles5.com/tomcat/tomcat-7/v7.0.2-beta/bin/apache-tomcat-7.0.2.tar.gz
$> tar zxvf apache-tomcat-7.0.2.tar.gz
$> mv apache-tomcat-7.0.2 /usr/local

Of course, these assume you want to use 7.0.2 and you want it installed at your /usr/local.

Install JRuby, Rails 3

I assume you already have rvm installed. If not, I highly recommend that you do. I can’t imagine a Ruby developer not using rvm :)

$ rvm install jruby
$ rvm jruby
$ rvm gemset create railsjam
$ rvm jruby@railsjam
$ gem install rails

Try a sample app

I’ve created sample app for the RailsJam tour. This have several functionalities already and better than creating a Rails app from scratch.

$ git clone git://github.com/gregmoreno/railsjam.git

Update the Gemfile

You need a separate set of gems to make your Rails 3 application work with JRuby. For learning purposes, I want my Rails 3 application to work other than JRuby. To accomplish that, we need to specify what gems are needed solely by JRuby.

source 'http://rubygems.org'

gem 'rails', '3.0.0'

if defined?(JRUBY_VERSION)
  gem 'jdbc-sqlite3'
  gem 'activerecord-jdbc-adapter'
  gem 'activerecord-jdbcsqlite3-adapter'
  gem 'jruby-openssl'
  gem 'jruby-rack'
  gem 'warbler'
else
  gem 'sqlite3-ruby', :require => 'sqlite3'
end

(A copy of this Gemfile is available at the ‘jruby’ folder of the railsjam application.)

Now, it’s time to intall the gems.

# Must do this. Otherwise,  bundle picks up wrong version of jdbc
$ rm Gemfile.lock
$ jruby -S bundle install

Prepare the database.

The first time I worked on this tutorial, I needed to specify the jdbcsqlite3 as the database adapter. However, when I tried the tutorial on the same machine with a fresh gemset, it worked pretty well with just ‘sqlite3’. Just to be sure, I modified ‘database.yml’ to check for JRuby.

development:
  adapter: <%= defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3' %>
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: <%= defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3' %>
  database: /home/greg/dev/railsjam/db/development.sqlite3
  pool: 5
  timeout: 5000

When you deploy to Tomcat, it will be on ‘production’ mode by default. Since sqlite3 is file based and for simplicity, I used the same development database.

Now, do the migration.

$ jruby -S rake db:migrate

Deploy to Tomcat

We use ‘warble’ which is an excellent tool for packaging your Rails application. It packages everything you need to run your Rails application inside a Java container.

$ warble
$ cp railsjam.war  $TOMCAT/webapps

# start Tomcat
# assuming you arein $TOMCAT dir
$ sudo ./startup.sh

Check your Rails 3 application

# You should see the famous Rails welcome
localhost:3000/railsjam

# Play around with your application
localhost:3000/railsjam/users

Deploy Rails 3 using Ruby 1.9.2

Without shutting down your JRuby and Tomcat version, let’s try to run our app using Ruby 1.9.2

# In a new console
$ rvm 1.9.2
$ rvm gemset create railsjam
$ rvm 1.9.2@railsjam
$ gem install rails

# Assuming you are in the ‘railsjam’ folder
# This will install sqlite3-ruby gem
$ bundle install

$ rails server

Now, go play with your Rails 3 applications

# jruby + tomcat

http://localhost:8080/railsjam/users

# ruby 1.9.2

http://localhost:3000/users

In case you encountered some problems, here are some ways to solve them. If your problem is not listed here, you can email me. I only accept Paypal :)

JRuby does not support native extensions

You did not update the Gemfile to use the jdbc version of sqlite3. You will encounter this error when you install the gems.

$ bundle install
....
Installing sqlite3-ruby (1.3.1) with native extensions /home/greg/.rvm/rubies/jruby-1.5.2/lib/ruby/site_ruby/1.8/rubygems/installer.rb:482:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/home/greg/.rvm/rubies/jruby-1.5.2/bin/jruby extconf.rb
WARNING: JRuby does not support native extensions or the `mkmf' library.
         Check http://kenai.com/projects/jruby/pages/Home for alternatives.
extconf.rb:9: undefined method `dir_config' for main:Object (NoMethodError)

undefined method `attributes_with_quotes’ for class `ActiveRecord::Base’

I first encountered this problem when doing migration.

$ rake db:migrate
rake aborted!
undefined method `attributes_with_quotes' for class `ActiveRecord::Base'

This is caused by an old version of your jdbc gems. In my case, sometimes bundler installs the old versions:

Installing activerecord-jdbc-adapter (0.9.2)
Installing activerecord-jdbcsqlite3-adapter (0.9.2)

As of this writing, the latest version is 0.9.7

Installing activerecord-jdbc-adapter-0.9.7-java
Installing activerecord-jdbcsqlite3-adapter-0.9.7-java

Bundler keeps installing 0.9.2

$ rm Gemfile.lock
$ jruby -S bundle install

no such file to load — sqlite3

$ rake db:migrate
(in /home/greg/dev/projects/jruby/railsjam)
rake aborted!
no such file to load -- sqlite3

‘sqlite3’ is the default name of the database adapter but with jruby, it should be ‘jdbcsqlite3’. (another) But, when I tried ‘sqlite3’ with a fresh gemset and a new machine, it went well. Anyway, just in case you run into the same problem in the future, add a condition in your database.yml

development:
  adapter: <%= defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3' %>
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

We’re sorry, but something went wrong.

If you see the famous Rails error message, you need to dig in Tomcat’s log files.

$ cd /usr/local/apache-tomcat-7.0.2/logs
$ ls -al localhost*

-rw-r--r-- 1 root root 1181 2010-09-01 00:17 localhost.2010-09-01.log
-rw-r--r-- 1 root root 1062 2010-09-01 00:18 localhost_access_log.2010-09-01.txt

$ tail -f localhost.2010-09-01.log

In the log file, you will see the errors like missing database.

org.jruby.rack.RackInitializationException: The driver encountered an error: java.sql.SQLException: path to ‘/home/greg/dev/tmp/apache-tomcat-7.0.2/webapps/railsjam/WEB-INF/db/production.sqlite3′: ‘/home/greg/dev/tmp/apache-tomcat-7.0.2/webapps/railsjam/WEB-INF/db’ does not exist

Related posts:

  1. Rails 3 upgrade part 1: Booting the application It’s time for another Rails upgrade! We all have our share of bad experiences and frustrations every time we upgrade a piece of software. Even for technical people who live...
  2. How to setup a Rails 3 app I finally decided to give Rails 3 a spin after beta was released 20 days ago. In geek time, that’s being a late adopter. But first, a warning. I’ve read...
  3. Rails 3 upgrade part 4: Prototype helpers and Javascript Rails 3 is embracing the unobtrusive Javascript (or UJS) mantra which is good because it is the right way; at the same time, it is bad because many applications will...



The Poker Copilot Blog

Comparing Mac Poker Tracking Software

Over at PocketFives, a concerned citizen is asking for advice as to which Mac OS X poker tracking software to use. Clearly I'm biased so I won't be answering. You, loyal blog readers and Poker Copilot customers are perhaps somewhat less biased. So I encourage to visit PocketFives and share your experiences. The wider web will be grateful.

 


OnStartups

23 Tweetable Startup Insights From Seth Godin


Regular readers of this blog know that I’m a long-time admirer of Seth Godin.  He’s one of those “big thinkers” that has the added talent of being able to articulate high-level concepts in an immensely approachable way.  That’s a very rare, and dare I say remarkable intersection of abilities.Seth Godin on Startups

The following is a list of short, pithy insights that I’ve been collecting from Seth’s Blog over the past few months.  They were not all written specifically for startups, but I found them to be particularly relevant for entrepreneurs.  I, like many, think Seth's ideas deserve to be spread.

Enjoy.

If you find any of these particularly resonant, there’s a convenient link to tweet it. 

23 Tweetable Startup Insights From Seth Godin

1) Reliance on the tried and true can backfire. [tweet]

2) Sell the problem. No business buys a solution for a problem they don't have. [tweet]

3) Every activity worth doing has a learning curve. [tweet]

4) As the world gets faster, the glacial changes of years and decades are more important, not less. [tweet]

5) Cultural shifts create long terms evolutionary changes. [tweet]

6) Being 1st helps in the short run. Being a little more right pays off in the long run. Last is the worst. [tweet]

7) Build in virality. [tweet]

8) Subscriptions beat one-off sales. [tweet]

9) Treat different customers differently. [tweet]

10) Generate joy. Don't just satisfy a need for a commodity. [tweet]

11) Plan on remarkable experiences, not remarkable ads. [tweet]

12) Don't build a fortress of secrets, bet on open. [tweet]

13) You can get even more done if you give away credit, relentlessly [tweet]

14) Create scarcity but act with abundance. [tweet]

15) Competition validates you. It creates a category. It permits the sale to be this or that, not yes or no. [tweet]

16) There are lots of good reasons to abandon a project. Having a little competition is not one of them. [tweet]

17) It's not who can benefit from what you sell. It's about choosing the customers you'd like to have. [tweet]

18) The customers you fire and those you pay attention to all send signals to the rest of the group. [tweet]

19) 100 people doing something at the same time has far more power than 300 people doing it over time. [tweet]

20) Are you chasing or being chased? Are you leading or following? Are you fleeing or climbing? [tweet]

21) Get it right for ten people before you rush around scaling up to a thousand. [tweet]

22) Highlighting what's working helps you make that happen more often. [tweet]

23) Perfect is overrated. Perfect doesn't scale, either. [tweet]

Which is your favorite?  Any that I missed that you have in your secret stash?


Looking for other startup fanatics?  Request access to the OnStartups LinkedIn Group.  130,000+ members and growing daily.

Oh, and by the way, you should follow me on twitter: @dharmesh.



Game Producer Blog

August Contest… Ending Soon

August is pretty much over, I’d say… but August contest will remain until tomorrow morning (or day, depending when I – or at least my brain – wake up).

Last chances to convince me (for now).

There’s already couple of good looking purchase candidates. See you here.


CaseySoftware, LLC - Supporters & Developers of web2project blogs

OpenCamp 2010 Recap

OpenCa.mpThis past weekend, I had the opportunity to attend the first OpenCamp in Dallas, TX. While I've been to a few of the CMS-focused events - WordCamp Mid-Atlantic, WordCamp NYC, and DrupalConDC - this was my first time at one of the crossover events. In one event, we had some of the best and brightest from each of the communities in one place presenting, talking, drinking, and generally arguing over the intracies of each of their systems and why the other guy was completely wrong.

Alright, I'm kidding.. most people thought everyone else was just mostly wrong.

First, some high points:

  • The venue was fantastic. The wifi worked pretty consistently. The food (and coffee!) was reasonably priced. Lunch each day was well-done and generous and delivered by an excellent staff. If you're ever in Addison, TX, check out the Crowne Plaza.
  • More importantly, the event gathered some fantastic minds from all over the place. I had dinner with a significant portion of the Joomla! team including Open Source Matters President Ryan Ozimek. I met most of guys that organize DrupalCamp Dallas and chatted on how Austin & Dallas might collaborate. And of course, I had the chance to meet with friends and colleagues like Josh Holmes of Microsoft and make some new acquaintences like Caleb Jenkins and many, many others.
  • Finally, attending a regional conference was great. The vast majority of people here lived within 200 miles and many were from right there in Dallas. A conference has a completely different vibe when you're in someone's backyard. As "hosts," they work hard to take you to the good restaurants and make sure you have a good time.

Next, some low points:

  • The vast majority of the talks were not technical in the slightest. Sure, they mentioned technical concepts and a few even went into them.. but considering the flavor of conferences I normally attend, this was a little jarring. It's not that this was bad, just a little unexpected.
  • Next, the presentation format was just plain screwy. Thirty minute sessions without transition time are terrible. It meant each session was trimmed down to 25 minutes or more like 22 minutes if they left room for questions. Since 15 minutes is normally considered a lightning talk, this just seemed awkward. That said, some of the sessions were a full hour.
  • Finally, some of the presenters were just plain terrible. They all seemed to know their material, but it was apparent that some rarely stepped away from their computers. To be an active contributor in Open Source, a person has to be smart and passionate. The passion was definitely lacking.

Some final thoughts:

While the sessions were not a great match for me, the "hallway track" was fantastic. Through a combination of dumb luck and excellent introductions from good friends, I managed to spend quite a bit of time talking with smart people:

  • I learned more about Drupal modules, permissions, and how to abuse them for fun and benefit;
  • I heard some details about the inner workings of the Joomla! team;
  • I argued about the GPL more than I care to consider;
  • I gathered some patches on code I manage and shared a few with others; and
  • I learned how to make our (web2project's) stuff work better on Microsoft's infrastructure.

Would I attend OpenCamp again?

Yes, but I would go in with clearer expectations and take a more active role in the Birds of a Feather schedule. I know there were people actively looking to share technical ideas and compare implementations. It's just a matter of finding and gathering them in one room. Finally, the best but most unexpected part of all..

I got to spend a good amount of time with people I call friends and may have made some new ones.


Game Producer Blog

Future of “Next Generation” 3D

The next generation 3D (that’s the term I use to describe 3D screens that display 3D stuff in a new way). I experienced a 3D movie for the first time about a year ago, and had to check that blog post to see whether I liked it or not. (I did, if I understood my comments from that blog post properly).

I talked about 3D screens and friend of mine pointed out that there’s new televisions coming… where you won’t need glasses. I know Nintendo has some hand held device that somehow uses two “layers” to create 3D effect (without need for glasses).

Now, will this “next generation” 3D (where the “depth” effect can be so much different than in other movies) happen in games? Will we see more and more next generation 3D that we forget “regular 3D” completely?

I have mixed feelings about this. I can predict that there will be tons of people who say how unhealthy it is for your eyes and how your brain will be messed up and all that… but I feel that we people adapt. I think 3D tech will evolve and at some point it’s not any more unhealthy than staring regular computer screen.

But… will games support it? Will manufacturers go for it?

I find this a really tricky question to be answered. Tons of social & casual games are 2D, and they have become increasingly popular. Wii is doing pretty well in the console side of things, and it has old graphics in it.

I somehow feel that for some games, this next generation 3D will be a breakthrough that will at some point be always used. First person (shooters/rpgs/adventure) games, the 3D will be a hit. (My prediction). I would expect that the immersion of 3D is just so much greater that at some point we won’t see regular FPS games no more. Instead, the new 3D is always there.

Also, some horror games start to use it more and more. There will be more horror games created in 1st person perspective, using the new 3D effect to create more scary environment.

(And as long as games have good writers who understand that horror isn’t about screaming and blood and trying to scare people with sudden loud voices… it’s about waiting for something to happen, this will be good).

In some games, for example RTS games, the new 3D effect won’t be used. Same goes for sports games like NHL, it just won’t cut it.

New 3D requires certain camera view, in my pretty humble opinion. And some camera angles just aren’t good for it, or can just become a mess.

With this all being said… what you think?

(I really think that the 3rd generation 3D will be something that we need. Holograms. We will see graphics that will really fill the living room…. now, that will be something really cool)


Jitbit Software Blog

How To Bend The Universe

I know a Russian guy who's grandfather has bent the universe once.

Long time ago he worked at a plant and desperately needed a special kind of grindstone for his machine. The grindstone of a specific diameter and shape that he could not find anywhere, it's not something you just buy in a hardware store.
"I kept thinking and thinking about this grindstone" - he said - "It was the only question sitting in my head. I went to sleep and woke up with it. I really needed that stone, I would love to buy it, but where? And all of a sudden - I just found it. Just like that, lying on the ground near the bus stop. I've bent the universe."
via Roman

It's exactly like in sports - when your body follows your eyes. I played tennis for 10 years when I was a kid and my tennis coach used to say "Look! Look ahead. Look where you want the ball to be, your body will do the rest."

15 years later, on the racetrack, my motorcycle coach used to say "Look! Look ahead! Don't look at the tarmac, look into the corner and your body will do the rest and make the bike follow your look. Don't use the handlebar to turn, use your eyes instead".

Just like the body follows your eyes, the reality follows your thoughts. Keep thinking, keep trying. Keep visualizing your dream, turning a dream into a goal. Then add deadlines to your goal and make it real. Keep your eyes on the goal and your hands will do the rest.

Joel on Software

A new WordPress Stack Exchange

We’ve been opening new Stack Exchanges left and right on a variety of topics. In almost every case, the Stack Exchange appears to duplicate the content of an existing community. For example, our WordPress answers site (now in beta) covers the exact same material as WordPress.org’s existing forums.

This is nothing new to us at Stack Overflow, which purported to cover the exact same material as hundreds (if not thousands) of other programming sites. There’s no rule that says that there needs to be exactly one Q&A website per topic.

There is, however, a compelling case for the Stack Exchange technology. WordPress.org’s forums don’t have voting, so you have to read through every answer and decide for yourself which one might solve your problem. They don’t have reputation, so there’s no way to see whether you’re getting an answer from someone who knows what they’re talking about. They don’t have wiki-style editing, so collaboration is impossible. You have to log on to ask or answer a question, so the burden of participation is higher. Stack Overflow is simply better than traditional forums, which is why it largely replaced proprietary forums. I remember hours of discussion with John Resig and the folks at jQuery who couldn’t decide whether to replace the jQuery Google Group with a forum or with a Stack Exchange. Ultimately it didn’t matter that much, because most of the jQuery Q&A activity happens on Stack Overflow anyway.

One day, the features that are standard on Stack Exchange will be copied everywhere. Until then, we’ll keep churning out new sites.

Need to hire a really great programmer? Want a job that doesn't drive you crazy? Visit the Joel on Software Job Board: Great software jobs, great people.


The Poker Copilot Blog

Poker Copilot 2.61 Now Available

I didn't want to release an update so soon but it is necessary due to three issues - one caused by me, one by an UltimateBet bug and one by Winamax releasing an updated and better hand history format.
What's fixed:
  • PokerStars Tournaments are now imported again correctly. Sorry all for screwing up this important feature in last week's update.
  • UltimateBet's (aka UB's) all-new broken currency format is now auto-corrected by Poker Copilot. They have been showing $3.50 as $3.5.
  • Winamax have fixed some problems in their hand history format which means that Poker Copilot, as far as my tests tell, now gives correct stats for Winamax.
What's changed:
To sweeten the deal there are a couple of minor hand replayer improvements.
  • Once you fold, the hand replayer still shows your hole cards, but in a faded colour.
  • The hand replayer shows your info with a different background colour to the other players. This lets you find yourself in the replayer immediately.
You can see these replayer tweaks in this screenshot of three-of-a-kind vs straight vs flush:
Screen shot 2010-08-31 at 2.08.47 PM.png


Update Instructions:

1. Download the latest version here.
2. Open the downloaded file.
3. Drag the Poker Copilot icon to the Applications icon. If prompted to replace an existing version, confirm that you do want to replace.

Now you're done and ready to hit the tables.

Business of Software Blog

Pricing a breakthrough product

If you’re a horse rider then coming off your horse is something that’s going to happen to you occasionally:

This rider survived – walked away, in fact – because he was wearing a special protective jacket.  As the rider fell, a ripcord attaching his jacket to the saddle was pulled. By the time he hit the ground, a CO2 canister had inflated an airbag inside his jacket and cushioned his fall.

How do you price something like this? If you’re selling a product people are familiar with – a fizzy drink, a car, a house –then it’s straightforward. You look at the price everybody else is charging and charge a little bit more or a little bit less depending on whether your product is better or worse than the competition. You know that your customers will look around at similar products in the same category to decide if they’re being charged a fair amount or not.

But if you’re creating an entire new category then you’ve got the chance to set the fair price for all products in that category. Customers try to find reference point so they can judge value. If there aren’t any obvious reference points within their immediate grasp then you can create them. In this case, you’d get customers to think about the price of their life (or that of their child). Or you’d encourage comparisons with similar categories, and then emphasize the differences (it’s like a normal jacket, but ten times safer; it’s more likely to save your life than a $500 hat).

There’s something else even cooler about this jacket though: its versioning. Versioning lets you sell different editions of the same product at different prices. A premium version of a product should target a distinct group of customers who get additional perceived value from the extra features, and who are able and willing to pay for it.

In software, this is often done with ‘standard’ and ‘pro’ versions (if you work in a corporation you’ll want to use Outlook and your company will pay for a premium edition of Office. If you’re using it at home, you’ll get the entry level edition and get fewer features). Fast food outlets do it with portion size (hungry customers will pay more money for more food). Airlines do it with travel classes. Normally, the extra money a consumer pays has little to do with the extra cost to the provider (some more bits and bytes, a handful of fries, some more legroom) – it’s simply about finding multiple price points to fit different customers’ preferences.

The riding jacket gives a vivid example of how versioning can be done on anything customers perceive as valuable. You can buy the standard edition of this jacket for about $580. But you can get it in pink for $725. It’s not a meaningful, practical distinction. A pink jacket is no more likely to save your life than a black one. It costs the manufacturer no more to manufacture it in pink than in black. It delivers no more value. But it’s a difference that some people are willing to pay for.

It’s clever in another way too. Since the jacket is innovative, and people lack reference points, it creates its own reference point. Suddenly, the $580 seems like good value.

For product versioning to succeed you need to make sure that:

  • The features you’re adding provide extra value to a subset of your customers
  • Those customers can, and will, pay extra for it
  • There is a coherent story that identifies those customers, and why they need the extra features (‘hungry people want and will pay for more fries’)
  • This coherence is important. If all you’re doing is adding a bunch of features to your product or if the people who value those features aren’t the people who can pay for them, then you’ll struggle.

Pricing’s a fascinating topic. It’s often far more about psychology ($580? Is that expensive? Is it cheap? Am I being ripped off? I want it in pink!) than economics (would I rather spend $580 on a jacket or on a holiday? How much utility would I derive from those two options?). If you want to learn more about product pricing then check out my free eBook (‘Don’t just roll the dice – usefully short guide to software pricing’).

Enjoyed this post? Follow me on Twitter or subscribe to my RSS feed


Game Producer Blog

Connectivity Is The Key

Sharing.

Sharing stuff is that makes all the difference in the world. Earlier in my life I’ve bought things separately and haven’t given much thought about connections. For example, I’ve bought PC and do PC stuff with it. I have a separate radio/CD player that can play radio. Then I have TV which I use to watch TV.

(Being slightly oversimplistic here to make the point, but hopefully it helps)

This has changed a bit. Now I think about connectivity and sharing things. For example, I can use my PS3 with my tv but also want to connect it to home cinema system to get nice sounds. And then I’ve found information about setting the PS3 media server to speak with PC so that it would be possible to get to play spotify via PS3. And then I’ve given though about a new mobile phone so that I could connect it to different devices and listen to music. And of course this mobile phone could use the wlan to connect to net at home.

And so on, and so on. This is probably very familiar to you guys.

Separately, PS3 (without a network connection for example) loses its value. By making it possible to connect PS3 to other devices, the value of all devices is greater. When adding new things (such as the mobile phone) I can leverage the existing system, thus increasing again the value of all pieces.

And this is due the possibility to connect devices with each other.

Now… to think gaming.

How could your game benefit from connectivity? (Might be a tough question in some areas (for example people who do epic single-player RPGs), but very relevant in some areas (especially games for social platforms))

Some food for thought.


LonelyHackerRSS

Generating Perfect Passwords

Generating secure passwords is a subject that many people struggle with. For generating passwords for services that you don’t need to re-enter often, for example Wireless Network WPA2 passwords, you should check out this page from world renowned security expert Steve Gibson.

Steve’s page generates these passwords for you as well as educating you in the process should you wish.

perfpass

Interesting, and useful Stuff.

RSS Feed: http://feeds2.feedburner.com/Lonelyhacker


Component Factory

KryptonMessageBox

Due to popular demand, well at least 2 people anyway, I have added a Kryptonized version of the standard windows MessageBox funtionality. In order to make it fully backward compatible I have provided a set of static methods that have identical parameters to the existing MessageBox methods. So you need only perform a search and replace of the existing MessageBox.Show methods so they become KryptonMessageBox.Show instead.

Here you have some examples of the appearance using different palettes…

The text used in the buttons is localizable and exposed via the KryptonManager component. So if you need to define text for non-English systems you can update the new GlobalStrings property of the manager and all message boxes will then use those updated strings.


Game Producer Blog

Sofa Is The Best Place to Code (After Bed)

I spend quite a bit of time coding in front of my computer (especially when handling tricky bug hunting…) but there’s two places where I do much of progress:

  • Sofa
  • Bed

I might sit down a sofa and make notes on paper. I might build pseudo code in order to solve certain coding dilemmas. I might lie down and just stare the roof and think. This is all without a computer. Pen & paper you know.

The other place where my code is refined (without even thinking it) is in my bed, while at sleep. I might have some tricky coding puzzle that won’t solve by staring the screen. After failing to see the solution, I might realize that now I just need to stop, go to bed, and see the solution the next morning. And this has yet to fail me.

Sure, I can do “puzzle solving” in front of my computer, but I’ve found it good to prepare and plan the code in my mind while somewhere else. That’s where the hard part happens. That’s where the thinking process takes place.

After the plan is made, it’s easy to sit and start typing the code together.


LonelyHackerRSS

ZT Club Guitar Amplifier

Maybe I should get out more. I have been told that. However, that doesn’t change the fact that the design of the new ZT Club Guitar Amplifier is stunningly beautiful in it’s simplicity. If Apple designed Guitar Amps ...

zt1

zt2

zt3

zt4

This would make an incredible amp used in conjunction with my Boss GT-8 ... I almost *need* this amp ...

boss_gt8

RSS Feed: http://feeds2.feedburner.com/Lonelyhacker


Game Producer Blog

I’m So Close To Showing Something Cool

But won’t do that just yet.

Can’t almost wait.

(Talking about the game stuff I’m working on)

Off I go, there’s coding to do!


Game Producer Blog

Few Days Remaining: I Wanna Buy Your Game

Just a gentle reminder that I really, really want to purchase your game (if you convince me).


Gurock Software Blog

TestRail customer testimonials

Our test management software TestRail is still a rather new product, especially if you compare it to some of the other tools in our niche. That’s why we were especially happy to see that so many teams adopted TestRail as their new test management tool. A lot of those teams switched to TestRail because they weren’t happy with their existing solution. Here are some of the quotes we received from customers about TestRail so far:

We are very grateful to receive such positive feedback and testimonials. Thank you! We really appreciate it. If you also want to contribute a quote, please email us. You can see more TestRail customer testimonials and reviews on our website:

TestRail Testimonials


The Poker Copilot Blog

Poker Copilot 2.60 Now Available

Poker Copilot 2.60 is now available to download.

What's changed:
  • Colours in the Head-up Display (HUD). Configure the colours in the HUD Preferences.
  • "Day" summary
  • An optional "My playing day starts at" setting
  • Odds in the hand replayer now take into account known opponent cards at showdown
  • Work-around for Winamax changes and "Dealt to <player> null" problem
What's fixed:
  • Sometimes PokerStars tournaments were not being imported properly
  • Winamax hand histories were no displaying showdown correctly in the hand replayer
  • Hand replayer keyboard shortcuts were sometimes inactive
  • Added support for PokerStars European Poker Tour steps tournaments
Update Instructions:
  1. Download the latest version here.
  2. Open the downloaded file.
  3. Drag the Poker Copilot icon to the Applications icon. If prompted to replace an existing version, confirm that you do want to replace.
Now you're done and ready to hit the tables.

Game Producer Blog

Now, THIS Is Customer Service

Moment ago I downloaded Plain Sight game from Gamersgate summer sale, and few minutes later made a few tweets.

Check the below discussion (click the image)

Basically: I made a comment about corrupted download file (at 11:20). 11 minutes later (11:31) gamersgate replies to me that they want to help me get it working. And a minute later (11:32) they give me idea of redownloading the whole thing. Few minutes later (11:35) I got the thing working.

If customer service is about following people who talk about your game… you certainly are doing something very right.

Kudos Gamersgate.


Game Producer Blog

Would You Get In To This “Spotify for Games” Indie Portal? (Players-Pay-Monthly-Model)

I’ve been discussing this with the Insiders and they are showing quite green light (as long as certain things are handled “the right way”), and I thought I’d post a poll in this blog as well.

Basically, I’ve been brainstorming this idea about an indie game portal where people could play any games in the portal for paying $9.99 per month. Gross sales (most of it, let’s say for example 70% to 80% of the Real Money) would be split among developers based on how much people play their games in each month.

Links to more detailed posts part 1, part 2 and part 3.

So, what’s your take in this? Would you submit your game to this indie only games portal?
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.


OnStartups

Announcing My New Startup Project: The Most Ambitious Yet


I am thrilled to announce my most recent — and most ambitious — startup project to date. 

My wife Kirsten and I are now expecting our first child — I’m going to be a dad!

New Ambitous Startup Project: The Details

1. Funding:  Unlike my current startup HubSpot (which has raised $33 million in venture capital), this particular project will be self-funded.  Hopefully, it won’t be quite as capital intensive.

2. Founding Team: Though both founders are new to the domain, we hope to make up for the inexperience with passion and perseverance.describe the image

3. Launch Date:  Scheduled for January, 2011. 

4. Branding:  We haven’t kicked off a branding project yet — will do that as the scheduled launch date approaches.  Meanwhile, we'll use the term, NewBay, Inc. (inspired by that fantastically inspired name, NewCo, Inc.)

5. Management:  Luckily, we have many people interested in helping with this project.  Some will be helping grow the effort on a volunteer basis.

6. Parallel Startups:  Generally, I’m not a fan of working on multiple startup projects simultaneously. But, in this case, it was not avoidable.  HubSpot hasn’t quite hit adulthood yet (and still wants the car keys every Friday night), and this new project couldn't really wait. 

7. Distribution:  We believe there is a market need as evidenced by some recent survey respondents: “Quit working so hard and focus on life a bit. You’re not getting any younger -My Mom”.  “Listen to your mom.”  -My Dad.  Though the sample size for these surveys is not statistically representative, seems like finding early interest in the project will be easy.  Then, using lean startup principles, we’ll iterate from there based on what we learn.

As is the case with any new, early-stage effort, we’re likely to make mistakes.  The hope is that in the the long run (and in this case, it’s a really long run), we will have created something great and made the world a tad better.  Wish us luck!  Exciting times!

Looking for other startup fanatics?  Request access to the OnStartups LinkedIn Group.  130,000+ members and growing daily.

Oh, and by the way, you should follow me on twitter: @dharmesh.



Business of Software Blog

Free tickets for Business of Software 2010

Here's the list of people who'll be getting free tickets to come to BoS 2010:

http://news.ycombinator.com/item?id=1635106

If you're on the list, drop me a line at neil.davidson@businessofsoftware.org


MicroISV on a Shoestring

The Hardest Adjustment To Self Employment

I apologize in advance for spelling mistakes, because I am writing this on my iPad on the bullet train to Tokyo. Wonderful device, not so great for writing lengthy blog posts like my usual.

I am on the way to Tokyo because a high school friend is there this week. As soon as I heard, I told him to pick a day and I would be there. What day? Literally any day. My schedule is infinitely flexible.

That is what scares me the most about this job. Like most people, I have lived an entire lifetime conforming to schedules. They exist like the Greek gods: you didn’t ask for them but they are there, there is no negotiating with them, and prolonged association means you are likely to get your dignity violated by a bovine.

But schedules are structure, and structure helps. Be at school at nine AM. Seminar starts at 10:30, do not be late. Work starts at nine, Patrick, waltzing in at ten annoys people even if you are contractually permitted to do it and even if you will still be here at 2 AM. (Regardless of start time. If you thought the gods were rational, you have been reading the wrong mythology.)

At the very least, schedules put you and everyone else on the same page as to what you should be doing. Gainfully employed young men should be working at 2 PM on a Wednesday. I was having a late lunch and reading a novel at the coffee shop. The waitress asked me, confused, whether I was a student or not. Students have social license to do bugger all for a few years prior to working for a living. I told her I run a software company, and one of the perks is that I get to have lunch whenever. She was impressed, but asked how my customers and employees stand that.

That’s the the thing about schedules: once you have one everyone else needs to, too, preferably as close to yours as possible. My customers do not share my schedule: most use my software when I am asleep, and mail me with their urgent issues at 3 AM in the morning Japan time. I spend lots of effort decoupling their happiness from my personal availability. This does wonderful things for site uptime but it also means, perhaps regrettably, that there is generally no compulsion to work today.

My freelancers largely don’t share my schedule either. I just got the front page for Appointment Reminder redone after several months with placeholder graphics. The extraordinarily talented designer I worked with (Melvin Ram at Volcanic Web Design, a web design company) “met” with me for a total of perhaps twenty minutes, and we worked (him on having graphical inspiration, me on wrangling it into a functioning product) in temporal isolation for the rest of the project. This is the arrangement I almost always use for freelancing. It is wonderfully productive except in that it lets me off the hook for causing forward progress.

That is the other part about scheduling: with the debatable exception of my consulting work, I am terrible about setting and keeping multi week schedules for milestones. This never came up when I was employed, since I had managers to crack the whip and avoided doing anything multi week for my business, but it is now biting me with a vengeance. I wanted to have AR in beta six weeks ago. Between consulting, vacation, and BCC, I haven’t made almost any forward progress on engineering.

I know that to be true for AR because code isn’t getting written, but I always think it to be true for BCC. It turns out that I am smoking something: I ran a shell script to compare my productivity (commits, A/B tests, etc) prior and post quitting. I thought it would show me spinning my wheels. Turns out I am getting more done than ever. This is normally the point where I would paste a graph but, sorry, iPad. Suffice it to say I have run more A/B tests this summer than in the last year. (Interesting finding of today: Google Checkout really does increase conversion rates over having only Paypal as an option. I strongly suspected that, but now I know.)

Sales are up, too. Why doesn’t it feel this way? I think after a couple of decades of living by the clock I have become habituated to measuring my productivity that way. Insane and irrational, I know.

I am looking for ways to hack this: the discipline and social validation of having a schedule, without actually having to work at nine. I have been considering getting an office just to have mental separation between work and non work. (They give them away in this town if you work in tech. I could pay the rent with the savings in my iced cocoa budget.) Plus, if I have an office, I have an offsetting factor the next time I am accused of being unemployed. Sounds funny until it happens from a police officer who does not quite understand immigration statuses. (You know that controversial immigration policy in Arizona? Don’t ask me my opinions about it around sharp implements. Suffice it to say I can vividly imagine what getting stopped under it will feel like.)

Another way is, and you might laugh, a little iPad app called EpicWin which gives me fake RPG loot for making progress. Will it work? No clue, but one week in, I seem to be getting more of my “boring” chores accomplished. (I had considered building this into my business for a while, but resisted because I thought it would cause neglect of my nonbusiness priorities. It turns out that, if anything, I have the opposite problem now that I have infinite scheduling flexibility.)

And I just earned 100xp for this blog post.


Component Factory

Missing Modal Windows

If you are using a Krypton application on Windows 7 machines then you need to be aware of a potential bug that is quite nasty. When using ShowDialog to show a window that derives from KryptonForm the window will sometimes not appear. This only seems to be the case when you have the Desktop Window Manager (DWM) enabled. It will effectively be invisible even though it has been successfully created.

For those now aware, the DWM is responsible for the Aero theme (sometimes known as the glass). Needless to say, your customers are going to be confused if a window is just plain missing. In fact your developers are going to be pretty confused as well.

The workaround for this is quite simple. You need to hook into the Shown event of the modal window and then add the following call to the PerformNeedPaint method:-

    private void Form1_Shown(object sender, EventArgs e)
    {
        PerformNeedPaint(true);
    }

I expect to release a maintenance release in about three weeks that will include this fix along with any other fixes and changes that accumulate between now and then.


Game Producer Blog

Something Odd Has Happened: I’m Checking Email After Twitter

I quite cannot put my finger on it, but after the twitter system has been getting better client software and new systems that help in displaying conversations and doing retweets, things have changed for me. I’m not thinking of “checking email”, I’m thinking “checking Twitter, and then email” nowadays.

Well, at least more than earlier.

I’m following and unfollowing people that I want, and twitter has become an easy way to find out what’s going on. When new games appear, somebody in Twitter is mentioning them. When new relevant game dev stuff occurs, somebody there I follow will tweet about it.

Yes, it’s still 90+% spam but hey, that’s how Internet works: most of the stuff in the Internet is spam anyway and at least you get to choose not to follow people who tweet about stuff like this.

Twitter is also one of the top traffic senders to this site, so that’s another reason why I’m liking it.

There’s 2 gloomy things that are in my mind about twitter. First is potential spam. I haven’t seen pretty close to any bot-generated spam in my account, but there’s already huge amount of fake accounts and spambots tweeting rubbish (which I don’t see, since I don’t follow those bots). My fear is that these spammers somehow manage to make things messed up. Don’t know how, but still think it might happen one day.

The second perhaps bigger issue is that there’s no revenue model for Twitter. I wouldn’t be surprised if one day they’d shut down the whole service. Maybe Twitter has grown beyond that point, but it’s still totally free and is sucking money as we speak. Facebook figured out how to make donuts. Twitter hasn’t. As much as I like “free stuff”, there’s the problem with free that somebody needs to pay it. I’m not saying I’d pay anything for Twitter (I think) but if they don’t figure out a way to earn donuts, they cannot continue this thing forever.

Meanwhile, Twitter is proving to be a pretty slick tool for game developers in quite many ways and I feel it is something developers shouldn’t ignore. You can ask and get help. You can network. You can throw quick messages without stealing other people’s precious time (as you gotta keep it short you know).

I’m no Twitter fan, but growing to like it a bit more.

It’s bit like a virtual pub where you can bring the folks you like.

And that’s perhaps why I sometimes look forward to checking Twitter instead of my email inbox.


The Poker Copilot Blog

What I’ve Been Reading

Alex's Adventures in Numberland by Alex Bellos. Somehow it makes mathematics readable. It has the best explanation of equity value I've read.

* Kill Everyone: Advanced Strategies for No-limit Hold 'em Poker Tournaments and Sit-n-go's by Lee Nelson and co. "Kill Everyone" is a disturbing title for book that lies on my coffee table. I found it particularly helpful in making my live tournament playing style more aggressive.

* Start Small, Stay Small: A Developer's Guide to Launching a Startup by Rob Walling. A book I wish had been available when I started Poker Copilot. Perfect to read if you are hoping to start a one-person software company.

 


Business of Software Blog

Paul Graham on trends for the future

Paul Graham spoke at last year's Business of Software conference.

"I’m going to try to do something for you guys that I’ve always resisted doing. One of the big questions, probably the biggest questions that I get from reporters, is 'what trends do you see? What’s going to happen in the future?' I sit reading hundreds of applications from would be start-ups founders. We’ve funded 144 startups so far, of which 93 are still alive. We had to write a CRM to keep track of them all. I’m suppose to know what’s going on. Yet reporters ask me this question all the time and I never have a good answer for them. I realized that it was because I deliberately tried to avoid thinking consciously about trends. But I forced myself to actually try and write down a list of trends that I see."

Here's the video:

 

You can see other videos from Joel Spolsky, Dharmesh Shah, Seth Godin, Eric Sink, Don Norman, Geoffrey Moore, Kathy Sierra and many others on the conference web site.

This year's conference is in Boston, October 4th-6th. The price is about to go up, so book now. Find out more here.

Enjoyed this post? Follow me on Twitter or subscribe to my RSS feed


LonelyHackerRSS

Consumer Rights Advice (UK)

I subscribe to a newsletter from Martin Lewis, a TV Celebrity and Money Saving Expert. It’s send out weekly and is always full of interesting and potentially money saving ideas. This week there is an awesome printable / foldable ‘Guide to Consumer Rights’ that everyone (in the UK!) could benefit from.

Have a look at it here: http://www.moneysavingexpert.com/shopping/consumer-rights-wallet-print


I love the graphic as well :-)

sadfart

RSS Feed: http://feeds2.feedburner.com/Lonelyhacker


Blog@Surfulater

User feedback is so important

With the new V3.31.0.0 Surfulater release, when someone uninstalls Surfulater, a feedback request Web page is opened. This is something I have been wanting to do for quite some time and simply haven’t gotten around to it. Fortunately the Content Management System (CMS) we are using for the revamped Surfulater web site made this easy to do.

We receive customer feedback on a regular basis and it is usually very positive, however we rarely receive critical comments from people who have tried Surfulater and found it wanting, or simply doesn’t meet their needs. These critical comments are just as, if not even more important to us, ensuring we are doing the best we can to evolve Surfulater to satisfy broader community needs.  I am hopeful this new uninstall feedback form will give us some new found insights.

Flipping back to positive feedback, Jason Ebaugh, Founder of APIS Scientific sent me the following e-mail last week, which I am reproducing here in full with his permission.

I found out about surfulater on http://www.outlinersoftware.com/

I have been using it less than 24 hours, but have done a lot of research on the web in that time (as is typical for me).  Even in this short amount of time, it is obvious that Surfulator is a lot slicker than my previous method. I have found myself looking back thinking how much faster things could have gone if I would have been using it all along.

So, so far, so good!
JasonE

I have to say that feedback such as this is great to receive and helps reinforce that we have developed a good product that people find truly useful. Thanks again Jason.

The Outliner Software web site focuses on discussing Outlining software, however it also ventures into Information Management software and related areas. A number of the regulars there are Surfulater users, so you will see it mentioned from time to time. I also make the occasional appearance.

All feedback is important to us, whether you are new to Surfulater, just checking it out or have been using it for ages, we do want to hear from you. Our new Support Center has a Suggestions Category which is a good place to start.

Neville


MetaGreg

Rails 3 upgrade part 4: Prototype helpers and Javascript

Rails 3 is embracing the unobtrusive Javascript (or UJS) mantra which is good because it is the right way; at the same time, it is bad because many applications will break when they upgrade to Rails 3. On the other hand, who’s expecting a smooth upgrade anyway :)

In my test application, I used jrails because I am more interested in jQuery than Prototype. But since jrails doesn’t work with Rails 3, I removed it.

When jrails was removed, I received this error:

undefined method `observe_field' for #<#<Class:0xb6867e58>:0xb6865b6c>

Install Prototype helper plugin

observe_field’ is a Prototype helper and Rails 3 removed the the link between its Javascript helpers and Prototype. The goal in Rails 3 is for developers to use their preferred Javascript library. Also note that remote_#{method} helpers have been removed from Rails and moved to Prototype Legacy Helper plugin . To install this plugin, just do:

rails plugin install git://github.com/rails/prototype_legacy_helper

Remove jQuery

Once the prototype_legacy_helper is installed, the missing method is gone but observe_field is not triggering. Removing jQuery fixes this problem.

Now what if you want to use jQuery instead of Prototype? It depends how dependent your application is to Prototype. I have not found a jQuery equivalent for Prototype helper plugin yet so that would be an issue like in my case. Based on this jQuery and Rails 3 tutorial, using the jQuery UJS driver looks very easy.

Previous: Rails 3 upgrade part 3: Code fixes, views, and forms

Related posts:

  1. Rails 3 upgrade part 3: Code fixes, views, and forms This is part 3 of my Rails 2 to Rails 3 upgrade experience. Part 1 is about the initial code upgrade and getting the application to boot while part 2...
  2. How to share code between Javascript and Rails Rails’ validations is great because it allows you to quickly implement the valid states of your models and at the same time have a ready-made way of displaying the errors...
  3. Rails 3 upgrade part 2: Routes In the previous post, I outlined the steps I took to upgrade and boot a Rails 3 application. This time, I share my experience upgrading the routes file. By the...



BenCurtis.com

Excessive Use of Redis

Yesterday I read a post over at the EngineYard blog about a use case for Redis (in the name of being a polyglot, trying new things, etc.), and I just had to scratch my head. I love Redis — it rocks my world — but that example was too much for me. If you just want to store a set of ids somewhere to avoid normalization headaches, introducing Redis is overkill… just do it in MySQL!

The example was the classic one of non-recipirocal friendships (like twitter) where person A can follow (or friend) person B but person B doesn’t have to follow (or friend) person A. While there’s a tried-and-true schema that can easily handle this in your plain-vanilla SQL store, sometimes that causes a bit of implementation friction when you just want a quick list of friends. So I give you the “new hotness” sets in the “old and busted” MySQL database:

First, the schema:

create_table "users", :force => true do |t|
t.string "name"
t.text "friend_list"
t.datetime "created_at"
t.datetime "updated_at"
end

end

And then some data:

And finally the model:

def following
self.class.all(:conditions => "id in (#{friend_list})")
end

def follow(id)
update_attribute(:friend_list, (friend_list.split(',').map(&:to_i) | [id.to_i]).join(','))
end

def unfollow(id)
update_attribute(:friend_list, (friend_list.split(',').map(&:to_i) - [id.to_i]).join(','))
end

def followers
self.class.all(:conditions => ['find_in_set(?, friend_list)', id])
end
end

Oh noes! An interpolated string in the SQL! Yes, I know, our knee-jerk reaction is that this is a really bad thing, but thanks to attr_protected and coercing the id to an integer in the follow and unfollow methods, it’s safe, really. :) If it gives you too much anxiety, though, you can use a placeholder and just pass in friend_list.split(',') as the data.

Will this perform as well as Redis when it comes to updating sets of ids? Probably not. Will it do for the vast majority of Rails apps out there? Yes. And if you’re lucky enough to have an app that has this code as a major bottleneck, then you can go to town with Redis, and with only minor changes to this model. Until then, you can be happy living in the familiarity of MySQL-land, and keep your deployment environment that much simpler.


Game Producer Blog

I Like Threatening People

I’ve added a “Like” button on my blog (see the right side menu). In case you’d happen to like this blog… then feel free to click that button.

No pressures, but I will release the air from your bicycle wheels (and might smack it with a large trout too) if you don’t click the button.

No point risking it. Right?


The Poker Copilot Blog

Video Demo Time: Changing the Colours in Poker Copilot’s Head-up Display (HUD)

The next Poker Copilot update gives you a much more colourful head-up display (HUD). Here's a video demo showing how you can customise the colours:

 

Tip: View this in Facebook in HD to see what's going on.

Successful Software

10 things non-technical users don’t understand about your software

If you are writing consumer software you have to understand that you and your average user have a very different level of understanding of computers. When you first start doing support it can be a shock to realize just how vast this gulf is. It doesn’t mean that your users are stupid, just that they haven’t spent the thousands of hours in front of a computer that you have. Below I have summarized a few of the things I have come to understand about non-techies through answering thousands of support requests relating to my own table planning software.

1. Copy and paste

It is very clear from many support emails I have received that users will often re-type a licence key emailed to them because they don’t know how to (or even that they can) copy and paste text. Yes, really. You can mitigate this to some extent by including instructions on how to copy and paste where relevant and making licence keys easy to type (short and without ambiguous characters, e.g. ’0′ and ‘o’).

2. The difference between web and native applications

Many users are used to web applications and don’t understand that they need to download and install new versions of desktop software to get access to the features in a new version. You can avoid this by automating the update process, but this can be pretty catastrophic if you get it wrong.

3. Data storage

Many users don’t understand how or where data is stored or even that it is separate from the application. They don’t understand that some data is stored on their local harddisk and some is stored ‘in the cloud’. And they don’t understand the difference between storage in a file, a database or the Windows registry. Consequently, when they install a desktop app on a new machine they are often surprised that it can’t automatically access the documents they created on a previous machine. So it is worth having something in your FAQ about moving from one machine to another.

Given that users don’t understand the basics of data storage it should come as no surprise that they also don’t understand the concept of file formats either. For example when told to ‘save a .xlsx file as a .csv file’ some users will simply change the file extension from .xlsx to .csv and be surprised when the resultant .csv file is gibberish when they open it in Excel. You can try to avoid this by providing clear step-by-step instructions on how to save a .xlsx file as a .csv file.

4. The jargon you use

Using terms that your users don’t understand can be very off-putting. For example, non-techies have no idea what a “dialog” is, let alone a “modal dialog”. Just call it a “window”.

5. Right click

Some users have not discovered (or will not think to try) clicking the right mouse button. You should therefore never put something only in a right click menu or anywhere else that it can’t easily be discovered.

6. Concurrency

Some applications can handle concurrent access (e.g. client-server and web-based apps) others can’t (e.g. most desktop apps). But many users assume that all software can be safely used by multiple concurrent users. If your software can’t it might be worth spelling this out in your marketing so as not to raise false expectations.

7. What changes can be reversed

Techies are happy to play with software to see what it does. They aren’t usually too worried about trying things because they can rely on some combination to undo, version control and backups to reverse most changes and they can usually judge when a change won’t be reversible. Non-technical users aren’t so confident and won’t try things in the same way. In fact some of them seem to think that a wrong move could cause the computer to burst into flames. So try to stick to conventions they will understand (e.g. on Windows those used by MS Office and Outlook) and offer step-by-step guidance for complex tasks.

8. The need for backups

Every few days I get an email from someone who has lost all their data because they had a major hardware problem and no backups on a separate device. Sometimes this is because they don’t even realize the data is stored on their computer. You can mention the need for back-ups in your documentation and/or in the software, but it is unlikely to make much difference. History shows that this is a lesson most people have to learn the hard way (techies included). Mentioning it doesn’t hurt though and it might help to defuse an angry users if you point it out to them after the event.

9. That they should read the documentation

People are using your software because they have things to do. Like it or not, your beloved software is just a means to that end. Although some users will read documentation, most consider it a waste of their precious time. In fact, support emails I receive provide incontrovertible evidence that some users won’t even read a single sentence of text in an error message explaining what the problem is. This means you need to write clear and concise documentation, but you also should develop your software under the assumption that most users won’t read it. That is where usability testing comes in.

10. Problem exists between keyboard and chair

Unskilled users often don’t realize how unskilled they are. Consequently they may blame your software for problems that are of their own making. One just has to be as polite as possible in such cases. Making your customer feel stupid is never great for business. If it is clear that the customer doesn’t have a sufficient level of skill to use you should politely suggest that it “obviously isn’t ideal for their requirements” and offer to refund them. However, if several people have the same problem then you need to change your product to be a better fit for your users (changing your users to be a better fit to your software unfortunately not being an option for most of us).

Have you been caught out by assuming technical knowlege that your users don’t have? If so, please leave a comment below.


Filed under: article, software, usability Tagged: b2c, documentation, PEBKAC, software, usability

The Poker Copilot Blog

Coming in the Next Update

The next Poker Copilot update has a new preference: "My Playing Day Starts at".

Screen shot 2010-08-24 at 4.09.06 PM.png

This is mostly useful with the new "Day" summary, which will also be in the next update. This is a feature to use with caution, as you may end up forgetting that you are telling Poker Copilot mess around with the concept of day versus 24 hour periods. Then you'll find it mysterious that hands played this morning in real-world time were played yesterday in Poker Copilot time.

 

 


The Poker Copilot Blog

Colourful Poker Copilot Update: Take Two

I corrected a spelling mistake in Poker Copilot's code, and an unfortunate and entirely unexpected side-effect was this: if you had "fold to continuation bet" in your Poker Copilot HUD, then today's early-adopters-only update crashed on you.

If you were affected by this, you can now try downloading the unofficial update again: http://pokercopilot.com/downloads/pokercopilot2.59.dmg


Game Producer Blog

Whoa, It’s Already 23:23?

Today I’ve been doing a lot of work to get my game online with certain functionality… and did a bit of testing with help of couple of chaps (thanks to you, you know who you are).

It’s amazing how time flies when you get into the zone and have 110% clear idea of what you are supposed to do.

Better get some food (I’m hungry right now) and then transform my body to the bed. (My mind probably joins me as soon as it closes a few loops…)