Archive for the 'software' Category

Desktop Analytics: The Embeddable Library

Monday, January 5th, 2009

In the spirit of me actually spending the bulk of my time writing code, I’m going to dispense with the meandering long-winded stories and just show a few details of the upcoming implementation of the Desktop Analytics platform.

Within the next couple of months, I’m going to release the full product suite. The server is written in Java and the reporting GUI will be deployed as an Adobe AIR application, but those aren’t what I want to talk about today. Today I just want to provide a sneak-peek into the embeddable library that developers will link into their own applications to enable statistical reporting.

(more…)

Desktop Analytics Platform: Still Alive?

Wednesday, December 17th, 2008

The wooden doors of the saloon have long since fallen off their hinges.

A sun-bleached steer skull gleams under the hot desert sky.

And tumbleweed creeps across the road, bumping against the old hitching post.

It’s been a ghost town around here lately, since I posted my last message in June, and the lost signs of life have not gone unnoticed a few of you out there.

ghost town

Three or four times a month, I get an email from someone curious about my Desktop Analytics project, who maybe saw the GUI mockup, and wondered whether I was still around and still actively working on an implementation.

As it turns out, I’m still here. And I’m still working hard.

In fact, the ongoing emails from interested bystanders have really kept me motivated and have reaffirmed my confidence in the strength of the concept. As my way of saying thank you to the people who have sent me their questions, I’ll take a little time tonight to give you a long-overdue status report. Then, sometime within the next few days, I’ll post a sneak peak into the architecture I’m developing and some of the cool features that I hope to unleash on my users early next year.

I’m thinking…mid to late Q1…

First, a quick refresher, for those of you who might not have been around when I originally floated this idea.

I’m building an application analytics platform, analogous in many ways to Google Analytics or Omniture. But those solutions focus on analyzing web traffic to answer questions like “which search engine keywords provide me with the most traffic?” and “which of my content resources have the highest click-conversion ratio?” Those types of metrics were invented my the advertising industry for messuring consumer responses to ad campaigns. Long before Google emerged from the labs at Stanford, ad executives asked Nielsen analysts for their conversion numbers.

The web analytics software on the market today still reflects that mentality: the internet is a medium for delivering content. Some of that content attracts a lot of eyeballs. Some of those eyeballs tell their mouse-fingers to clicky on an ad. And some of ad-clickers buy hilarious cat calendars from Amazon.com.

Web analytics is all about maximizing throughput of the content/eyeball/mouse-finger/cat-calendar pipeline.

Developers of applications, rather than publishers of web content or cat calendars, get short shrift in the whole equation. Sure, we can get detailed statistics about which types of web surfers are more likely to download our products. But when the last byte finishes downloading, our visibility into that user’s behavior evaporates.

I want an analytics package that tells me how users actually interact with my software.

How many people are using that new spellcheck feature I spent so much time developing? How often do my users fire up the application? Every day? Once a week? Do they use the software all day long, or just for a few minutes in the morning? How many menu clicks does it take to find certain features? Are people getting lost in my user interface? Do they invoke the HELP system? Do the “Premium Edition” users actually use any of the premium features, or do their behavior patterns look just like the “Free Edition” users? How many people are still using a legacy version, and which features should I improve, to motivate an upgrade decision among those users?

Answering questions like that will help me develop better software.

And I like to think that “better software” is almost as important as “good keywords” in driving new revenue.

Anyhoo…I hope I’ve gotten you a little sweaty and breathless…

Now: status report. Tomorrow: architecture details.

The software comes in three pieces: an embeddable library, a server, and a reporting client.

The embeddable library is a tiny piece of code that developers will link into their own “host” applications. The code is written in a snazzy little programming language called D, which compiles to native machine code, providing C linkage on Windows and on x86 Linux and OSX. No matter what language or platform you’ve used to write your application, as long as it provides some mechanism for linking with C libraries, you’ll be able to embed the analytics library in your code.

As of today, the Windows version of the embeddable library is about 95% complete (the OSX and Linux versions are about 75% done).

The server is implemented in Java, so you can run it pretty much anywhere (I personally recommend a “Mr Coffee” deployment environment). The server is about 85% finished, and can handle about 100 requests per second on my dinky little 2-year old laptop. It doesn’t use Tomcat or JBoss, and it doesn’t depend on a gazillion application frameworks. It’s a standalone HTTP server, talking to a MySQL backend, and you can get it up and running within minutes (hint: no XML configuration).

Finally, there’s the reporting client, with all the sexy charts and graphs. I’m only about 10% done here, after making a bold decision to switch my development environment. I started out working in C# with WPF/XAML, but I recently switched to Flash/Flex/AIR (for reasons that I’ll describe in more detail later) and now I’m playing catch-up.

That’s all for now :o)

I’ll be back soon with more details. But right now, I just wanted to check in with you guys, let you know that the project is still rolling forward, and that I’m anticipating a Q109 release.

Desktop Analytics Platforms: Version 1

Thursday, June 19th, 2008

Thanks, everyone, for your feedback about the Desktop Analytics software.

I’ve made the following platform choices:

Initially, the embeddable client library will strictly provide a C interface for Windows. In future versions, I’ll also provide wrappers in popular high-level languages, starting with C# and Java. At some point, the library will also be available for Linux and Mac OS X.

The server will be developed as a standalone Java server (i.e., without requiring Tomcat or JBoss or anything like that) with a MySQL backend. Future versions will enable more database choices (probably starting with SQL Server), though I won’t develop a non-Java version.

In a subsequent version, I’ll also release a “reflector” module in PHP/MySQL. The reflector will be a dumb server component that listens for events from the embedded client library and stuffs them into a database. Periodically, it will connect to the main server and send a batch of data. The purpose of the reflector module will be for developers who don’t want their users to see an outgoing HTTP request to an unfamiliar domain, but who don’t want to actually host the main server themselves. At some point, the reflector will probably also serve as a load-balancer and/or a failover mechanism.

The reporting client, with all the fancy charts, will be developed in C# using the .Net 3.5 framework, for maximum WPF goodness.

Thanks again for your help in choosing platforms!

Client Platform? Server Platform?

Sunday, June 15th, 2008

I know not everyone is interested in getting a truckload of business intelligence about the users of their software. But for those of you who think the Desktop Analytics project is pretty cool, tell me a little bit about your development platforms.

Do you use Java or .Net to develop your desktop software? Or are you maybe using C++ with MFC or WxWidgets? Anyone selling desktop software built with Ruby or Python?

Do you have a server? Is it Windows or Linux? Do you have your own server, or do you use a VPS account? Or just a shared web server, with PHP/MySQL? Do you have permission to install your own software into your server environment? Are you already running a Java app server? Tomcat, or something else?

Whatever platforms people seem interested in are the ones I’ll focus on in my development, so express you preferences here!

Analytics GUI Mockup

Friday, June 13th, 2008

I’d like to solicit some feedback on a GUI mockup I’ve put together, for the deskop analytics project (click to enlarge):

Without any additional commentary on my part, what do you think of that design? I’ll answer questions in the comments section.

Business Intelligence for Desktop Software

Monday, June 2nd, 2008

First of all, let’s start by assuming that you love hilarious tee-shirts.

Something, perhaps, to express your knowledge of contemporary video-game pop culture, while simultaneously making an ironic commentary about being a complete social misfit. Not just a run-of-the-mill computer nerd. But maybe a former a member of an actual high school band. Brass section.

Maybe something like this…

(more…)

Concept to Product in 30 Days!!

Sunday, June 1st, 2008

A handful of steadfast readers out there may remember that, a few years back, I challenged myself with developing a list of 30 unique business ideas in 30 days, with the goal of launching a product and building a business.

During that time, I did a lot of blogging (sometimes as late as 3am, to write a blog entry while on vacation, after everyone else had fallen asleep). The whole endeavor really got me into a mindset of wide-open possibilities, to the point where it was hard to stop thinking of new ideas and actually focus on just one.

(I’m going to make a bold statement: The people who complain about a lack of software ideas have never really spent a significant chunk of time going through a methodical brainstorming process.)

Now, after two years, I’m finally making good on the implied promise of that brainstorming month.

At the end of June, I’m going to release a new product.

Later this afternoon, I’m going to write my first line of code.

(more…)

Going Solo

Monday, December 10th, 2007

So, I finally bit the bullet and started my own company. I’ve been a free-agent for about three weeks now, and I love it.

Hooray for me!!

The new company is called Wry Research, and at least at first, I’m mostly just doing AI research consulting for a couple of clients. I’m trying to also fit in some original product development, when I have spare time. But I don’t have a whole hell of a lot of spare time, so I’m mostly just consulting right now.

But life is very good, and I’m enjoying the freedom and flexibility of being a solo software developer.

In the near future, I’ll talk about some of the work I’m doing as a consultant. I’ll also talk a little bit about a really cool research project that I’m doing, in conjunction with the Columbia Medical School Neurovascular Research Lab. Depending on the success of the research, it could lead me to developing a very cool product/service for the medical research community.

I’ll keep ya posted :)

MIT Puzzle Research

Monday, June 4th, 2007

I was browsing around tonight, as I sometimes do, looking for interesting CS research publications, and I stumbled upon this little tidbit:

Jigsaw Puzzles, Edge Matching, and Polyomino Packing: Connections and Complexity

For those of you share my fascination with the Eternity II Puzzle, you’ll definitely be interested in reading this paper. In it, the author talks about the various degrees of complexity of jigsaw puzzles, polyomino packing puzzles (Eternity), and edge-matching puzzles (Eternity II).

I don’t mean to spoil the punchline or anything, but they’re all NP-complete, meaning the most successful algorithms will involve optimization, approximation, partial solutions, and problem decomposition.

Interestingly, the author also provides a proof that all three types of puzzles are trivially transformable into one another. In other words, a polyomino packing puzzle like Eternity could be logically transformed into an edge-matching puzzle like Eternity II, and the two puzzles would share the same locus of possible solutions.

Hopefully, that helps at least one of us get a little closer to the big $2 million bounty!!

Introducing Sproiiiing: the Hottest New EoC Framework

Wednesday, May 2nd, 2007

The last few years have been an exciting time in the Enterprise Java world. We’ve seen a proliferation of lightweight application frameworks that vastly simplify the wiring of applications without introducing dreaded dependencies into our precious class hierarchies.

But these frameworks still fall short of the mark. Every time you use an import statement or define a new class, you place a burden on the consumers of your application. Import statements create dependencies on other classes in your project. The existence of specific methods and (even worse) classes, constrain the functionality of your application to the features defined at compile-time by your developers.

Based on these unacceptable constraints, I’ve been working hard on a new “Elimination of Code” framework (EoC), and I’m proud today to announce the availability of the Sproiiiing framework!!!

(more…)