Tuesday, December 6, 2011

Engaging Real People

Last Friday, as you may or may not have heard, we had our first Google+ Hangout with the team. It was, I feel, a success. Google+ says 14 people showed up—2 of those are us, and there were some people who were confused when they showed up and clearly were just joining random Hangouts. Which is cool, we had fun. We talked about the next version of 2cloud, I demoed it a little bit, we talked about monetisation and about the subscription plan (I realise I have not blogged about the subscription plan yet; I will, I promise). We even had one visitor to the Hangout who had never heard of 2cloud and became a user while talking to us. That was really cool.

It was really great to meet all of you. I was talking with Tino after the event, and I asked how he thought it went. This is what he said:

Our service depends on engaging real people, and I'm happy to be a part of our work because that is precisely what we do. And yesterday's hangout is a wonderful example of that. These people, whose only connection to us is software, gave up their time (which we know is the most valuable resource there is) just to meet with and talk to us about the software they enjoy. That is an amazing thing.

It really is an amazing thing. Thanks for setting aside some time to meet with us and chat. We had a Hangout for about 3 hours, and it was an absolute blast. We hope to do one again real soon.

As a closing note, I know I haven't updated this blog since (*cringe*) early September. We've been really busy getting Bessie ready, and haven't had much time to blog. We'll be updating shortly with some information on the subscription model and the next update. We'll also be doing a (*cringe*) mass email when we can't put it off any longer to tell everyone about the new version and the subscription model. We'll keep it short and it won't be until late January, so don't worry too much about it.

Sunday, September 11, 2011

Upcoming Poll, Again About Money

TL;DR version: There will be a poll. It will guide whether or not this app remains free. Please vote if you care at all.

I'm a very opinionated person. I believe in a lot of things, and I believe them very strongly. I believe that software should be open source. I believe that everybody should have access to it. But just because I believe things does not make them true; nor does it mean I'm not willing to change my beliefs. It just means I haven't heard any ideas that are better or evidence that is convincing enough to unseat my beliefs.

I've had a hard time with this project, recently. It stems from a few reasons: my own inadequacies as a developer, limitations of certain platforms, the refusal of device manufacturers to conform to a standard Android experience, the lack of certain standards in Android apps.. I could list things until I turn blue in the face. But the main thing is really that I've been floundering on the business side of this project recently. I'm not a business man, I'm an idealist. When I started this project, I just wanted to learn Android and Chrome development; that's why we have no business plan, why we are so informal about this: it all grew up very, very quickly.

Today, I had a revelation. It came from a user. Now, Michel is a very active user; he runs his own server, he talks with me a lot (we're chatting as I write this, actually), and he's always interested in what's going on with the project. He offers ideas, feedback, and support. I wish Michel were the average user, because the tech world would be a vastly more enjoyable place were that the case. I was lamenting the poor performance of our quota on Google+, and it kicked off a brainstorming session as to why things are the way they are, and how they can be fixed. I love social media.

The revelation Michel prompted in me is simple: "The main problem I see with the quota current model is that it is 'too free'". The idea of "too free" is an interesting one. It suggests that offering something for free devalues the product in the eyes of its users, which shields the fact that it costs money to run from them. So when you have to do things like introduce a quota, they get upset; to them, something that was free is being charged for, which smacks of profiteering. In reality, something that was being run at-cost is trying to get sustainable. We try to communicate that, but it's hard without spamming everyone.

Now, Tino is going to get upset with me over this, because I have a habit of realising things he tried to tell me long after he tells me, and sometimes I forget he told me about them in the first place. I think this is one of those times. He's told me for forever that making it free makes people feel more entitled, but I've never really given much credence to it. Because he's long been advocating for more pressing policies of monetisation, and for good reason: he's been right. But it took a user, someone who would not profit at all, telling me that not only would he pay for the app if we charged a subscription, it's wrong of us to not charge a subscription, before I really heard the argument. Which is a shortcoming of mine that I'm trying to overcome.

I think part of my reluctance to accept the idea was due to one of the most debilitating shortcomings I have: a lack of self-confidence. When we release buggy builds (which happens with unacceptable frequency and is something we're working on), I feel like it's just another reason we shouldn't charge for the app. And I won't be implementing the new subscription model, if there is one, until the current bug count is brought way down and the app's stability is much, much better. But the number of users who have told me the solution lies in charging for the app is helping to overcome my fears that the software isn't good enough.

So what's going to happen is simple. I'll update the app in the Android Market. When you run it, you'll get a popup that will ask you if you would pay a monthly fee for the app. Please vote; it's very important. And please be honest with us; we try so hard to be honest with you.

Thursday, September 8, 2011


I was going to limit this to my personal blog. I wasn't going to make the fatigue I was feeling over the constant struggles this project provides an issue for the project at large. And then something happened; we got a particularly nasty support request from a user. I'm going to go ahead and reproduce it below.

I am getting a message that the server is over quota and my link will be stored until tomorrow unless I want to pay $1 ? What good is the link going to do me tomorrow and if the server really is over quota why will;l $1 free it up? Is this a new fee or something? If it is this app is dead to me and I'm sure many others. If this isn't a bug then it down right wrong to hold my link hostage for $$

Tino gave a pretty detailed response as to why this reaction is insulting and outrageous. I tried to give a more level response, but we're both pretty much on the same level as to how we feel about this. It's a betrayal. It's nothing more than us bending over backwards, trying to provide a service, and it seems like the nicer we try to be about it, the more we're told we're "malicous" or holding links hostage or some other absurd assertion about how us providing a free service by paying for it ourselves is really an evil move on our part.

The project is still going strong. I'm still responding to bug reports. I've found the cause of an issue and will be issuing a fix in the next day or two to try and address it. Another issue is in Google's code, not ours, and we're working with the Engineer behind the API to fix it. He says it's fixed, but is waiting on a rollout. All we can do is wait, sorry. We'll keep working on the bugs that we can fix. But it's getting hard to pour my sweat, blood, tears, and money into a project and not only not get compensated for it, but get verbally abused at every turn. I'm 21 years old, guys. I'm a college student, taking a full course load and working at the same time. I try to provide the best service I can, and try to apologise when I fall short. My shortcomings are many and varied, and the community has borne the brunt of all of them at one point or another. And I'm sorry for that, I am. But malice is not among my shortcomings. And when I go to bed with a heavy heart already, it's hard for me to wake up to people telling me that I'm not being fair to them because I expect even a modicum of engagement from them.

This isn't a post looking for sympathy. This isn't a post looking for donations. This isn't a call to action at all. The sole purpose behind this post, if I'm to be 100% honest with you, is to remind you that there are people behind this project. That people will be reading your support requests. That people worked hard on this and die a little inside watching you talk about how badly it sucks.

This is breaking me down, guys. In my phone call with Tino tonight, I mentioned that writing software for this wasn't even fun right now. It almost brought me to tears to say that, because I purposefully did not pursue an education in programming because I wanted it to remain something pure and fun.

Since the start of this project, I've been banging on about how it's our project. How the community is in control and calls the shots. Well, the community needs to take some responsibility, too. We can't do this alone. This needs to be a partnership, or the project will have to be shut down. We're reaching out to you, desperately flailing in the dark. Please meet us halfway.

Monday, August 22, 2011

Development Cycles

I don't know how many of you have noticed this, but we tend to go through development cycles with this project. We release an update, there's a flurry of activity as we polish it and fix any lingering issues, and then... silence. We don't issue updates until the next large iteration.

This isn't something I'm proud of, or something I'd like to continue, but I'm afraid it has to be the case. I'm still doing the majority of software writing for this project, and I'm still a student working a few jobs to pay the bills. I still can only engage this project in my "free time", such as it is. That means that the development pushes tend to be around when I can clear out some time in my schedule to knuckle down and focus on this project. We're in one of those times now (summer is awesome, isn't it?).

The impetus for writing this post was because we're coming to the end of this little push. I'll be fixing up the major issues that remain (things that prevent people from using the app), but minor inconveniences may or may not get done. A week from today, I start classes at my college again, and those will be taking up a good portion of my time. Development will continue, but it will be slow, and updates won't be as frequent.

I'd love to say this is a temporary problem, but the future is uncertain. When I graduate, I'll need to take a look at my financial situation and see what my options are. If I can, I'd like to continue writing software. I'd like to be able to devote myself to this every single day. I doubt that's going to be the case (this project is still in the red in terms of money) but it's nice to dream. If I can't do this full-time (which, really, is absurdly unlikely), I'll probably have to continue this cycle.

All I know is that the project has grown in leaps and bounds since last year. I'd like to see similar growth this year. I'm going to work hard on it whenever I can, and hopefully I can get it to the point where other people will start working on it, too.

Thanks for your support over the last year, and I hope you'll stick with us as we stumble our way through this one.

Paddy Foran
2cloud Lead Developer

Friday, August 5, 2011

About the Quota

Seeing as we just started rolling out 2.1, I thought I'd take a moment and try to expound a bit on our quota system, our thoughts about administering it, and the plans we have in regards to it.

Anyone who is not new to this project knows we've been fighting with monetisation since the very beginning. We haven't found a way to make the project sustain itself yet, and so far we've just been burning holes in the pockets of our developers and our community members, trying to keep this service online. When you think about it, it's a bit silly. We have over 12,000 active installs, according to the Android Market. That number's a bit low based on our metrics (doesn't cover custom builds, people using non-Market apks, etc.), but we'll use it as a minimum number we can rely on for accuracy.

We have 12,000 users with the app installed. The server costs $31/month, give or take, to maintain. This app should be sustainable if even one half of a percent of our users donated one dollar a day (keeping in mind that Google takes a cut). Put another way, if every user donated a dollar once every 23 years (again, keeping in mind we get seventy cents of that dollar), the app would pay for itself.

We've tried a couple things. The donations model seemed promising, but there wasn't enough of a steady flow of cash to keep things paid for. We tried ads, but... well, that was a bad idea. Our app wants to get out of your way and not be noticed. Hard to implement display monetisation on something that tries not to display. Our efforts were... well, failures. Since the launch of our ads, we've made four whole dollars. Actually, we've made nothing; we don't get a payout until we make fifty dollars. Which seems unlikely to happen, so we literally got nothing from ads.

Tino (our project manager) and I sat down to think a bit on this and how to make it work. The first important breakthrough we had was that users didn't realise this costs money to run. A lot of you read this blog, subscribe to the mailing list, and follow us on Twitter. And really, thanks for that. We appreciate it, and hope you enjoy hearing from us as much as we enjoy hearing from you. But you're a tiny percentage. Probably less than a percent. Being overly generous and assuming there are no duplicates, we have almost 330 followers on Twitter. Out of over 12,000. So 97% of our users never see our money struggles. Not good.

The second realisation we had was that it's not easy to give us money. Yes, you can run across a donation link. If you use PayPal, that's fairly simple. But if you don't use PayPal or don't run across the link, the barrier is too high. You can buy the donation version from the Market, but you can only buy that once. And if you don't have the Market/can't buy apps on the Market in your country/want to donate more, you're out of luck.

The third realisation we had was that we can't keep this up forever. I'm too busy with classes, my jobs, and iterating on 2cloud to devote myself to writing entirely new software for Second Bit, software that will bring in money to support this. So we're a company whose only product is burning through money like it's that Yule log you see on TV. That leads to bankruptcy and/or server shutdowns pretty quickly. Neither of which is really what we want.

The fourth realisation was that downtime sucks, but some types of downtime suck less than others. For example, if we can fail gracefully and explain that the server is down, that's better than the app just... not working. If we can explain why the server is down, so much the better. And if we can offer a way to keep the app working anyways, then that's probably the best situation we can hope for.

So we came up with a quota. Normally, I hate quota systems, but I am actually pretty excited about this one. I'll get to why in a moment. First, let me explain how it works. One particular piece of our app is the expensive part: the connection between the server and Chrome. As long as Chrome is open, we need to keep that connection alive; that takes some CPU power, and CPU can get pricey. So what we're doing is keeping track of how many of those connections we make. Based on that, we can calculate our CPU usage. Based on that, we can create a "soft quota" to limit how much CPU we use in a day to be something we can reasonably support for a little while with our current funds. That quota is variable; we have an interface to set it based on our available cash on hand and the statistics we have on how many connections/day we're averaging. Our goal is to keep the number of times we exceed that quota a month to one or two, but still be able to pay for everything.

When the quota is exceeded, your links won't open. At all. But we will still store them for you, and open them when the quota resets the next day. Because it's our own imposed quota, we can do that. If that gets too CPU intensive, we may have to turn that off—but rest assured, we'll let you guys know when we're reaching that stage.

This is the cool part, though: you can pay to get around the quota. When you try to send a link and the server is over quota, you'll get a popup explaining that the server is over quota and offering a way to pay. By paying roughly $1 (depending on your country; it's calibrated to be the lowest round number the Market will accept), you gain immunity to the quota. For now, we're saying you get the rest of the day immune. In the future, we may toy with that; you may be able to buy, say, immunity for the next three times we're over quota, as opposed to immunity for a certain amount of time. You may get an entire week for your $1. We're still figuring out that part of this, and hope you'll bear with us and offer feedback. What your immunity buys you is pretty simple: as long as you're immune, you get to use the app, regardless of its quota.

This brings me to our fifth and final realisation, and the reason I'm pretty excited about this quota, instead of dragging my feet. Ready for this? You are not our enemies. We are not here to work against you. You are not trying to take things from us. You don't want us to go bankrupt or shut down the server any more than we want those things. And we know that. And we respect that; we respect our relationship with you. We've worked hard and made a lot of tough decisions about this system to ensure that it would never harm someone by accident. Our payment verification system is less secure than we'd like because we'd rather have ten people slip around the quota than one person get denied on accident, or have the user base jump through hoops. In the end, it's pretty easy to cheat our quota system; the caveat is, we'll know. We just need to manually catch cheaters, which is more desirable than automatically catching cheaters and accidentally catching a couple honest users. We're extending our trust to you guys in the spirit of cooperation; please don't abuse it.

We're also going to be doing a few things to try and mitigate the impact this will have on our users' lives. Our friend Eva has helped out quite a bit on this end. At her suggestion, we'll be randomly choosing one active user a month to be exempt from quotas that month. We're going to take it a step further though; we want to reward people who are consistently paying to get around the quotas. So we're also going to select one user a month who paid to escape the quotas in the previous month (e.g., for October, we'll choose someone who paid in September) and we'll give them immunity for the month. Finally, I'm working on a way to make the cost of immunity go down the more you buy it. Think of it as the bagel card; buy ten, get one free. It's possible that, in future versions, every fourth quota exemption you buy will last a week, and every tenth quota exemption you buy will last a month.

As you can tell, we're trying pretty hard to come up with ways to reward you guys for paying. We're not trying to separate you from your hard-earned money by deception, coercion, or trickery. We just want to keep the server online, possibly recoup some of the cash we've invested in this project over the last year, and maybe even make a modest profit on our hard work. But we want to do it the right way, and we want to do it honestly. We don't want your money unless we've earned it and you're willing to give it to us.

I know there has been a lot of money talk on this blog. You've all been amazing about accepting it on faith. For those of you interested or who doubt the financial claims we've been making, I'm going to release the financial records from the start of the project. All project-related expenditures and project-related income is reported here. I can't promise one of these reports frequently (they take some time to put together, and we'd rather be working on software than compiling financial reports), I'll make a public announcement next time I update it, and will do my best to make it some reasonable frequency, but I can't promise anything.

Thanks for all your support in the last year. If you have questions, comments, concerns, ideas, or cool ways we could reward loyal users, we'd love to hear them!

Thursday, August 4, 2011

2.1: In With The New, Out With The Old

I'm pleased to say that 2cloud 2.1 is nearing the end of its beta phase. Our beta testers have worked hard and deserve a big round of applause for all the testing they've done on such short notice. Really, this project owes a lot to them (especially after the 2.0 debacle—we're pretty sure that won't be happening again).

Here's the important bit: we're going to be rolling out the update to the Android Market and the Chrome webstore at 11pm, EST Friday the fifth. Saturday the sixth at noon (again, EST), the android2cloud.appspot.com server will begin returning errors. In an attempt to shake off some legacy users who never updated and are costing us some CPU, we've moved hosts. The new extension and Android app default to the new public server: 2cloudapp.appspot.com. All data from android2cloud.appspot.com will be ported over to the new server. This doesn't mean much now, but it hopefully will in the future.

I'm really embarrassed about the lack of new features in this version, but hopefully you can forgive that for the other improvements. We're pretty proud of the work we did in the short time we had, and feel pretty good about the base we have to build off of now. We already announced that we're deprecating support for Android 1.5, 1.6, and 2.0 to focus on providing a better experience for the 2.1+ crowd. But we've also done a bit of reworking in our software:

  • We've also gotten a lot more robust. Now our errors actually talk to you! Not literally (though that would be kind of cool.. or annoying), but through dialog boxes. If the app runs into a problem it won't crash or fail silently, leaving you with no idea what's going on (except in very rare cases, and we're trying to remove those one by one). Instead, the app throws up an error with some options. If it thinks an error log will help, it offers to send an error report to us as an email. You can click a button, check the information it will send (it just opens your default mail client), and send it off as a bug report. We'll get back to you with more information and a fix, because it's hooked right into our lovely help system (graciously provided by Tender).
  • We've implemented a quota. I'm not going to talk too much about that here because we've got an entire blog post about it set up for a bit later, but suffice to say it's a bit nicer and more verbose than the server just shutting off and the app ceasing to function with no explanation.
  • The Chrome extension has gotten its icon back! But this is a new, improved icon-on-steroids. It has a status indicator (green for connected, white for disconnected, red for error, blank for connecting) and context-aware clicking. Click when connected to disconnect. Click when disconnected to connect. Click when there's an error for more information.
  • The Chrome extension also has a much prettier install experience. Dylan put his design genius to work again, creating an aesthetic install flow that puts my old hacked-together wizard to shame.
  • This probably doesn't matter to most of you, but we have much better documentation now. Information on the project, on contributing, on the license, on installing or building your own clients... all this and more is available in our lovely README file and our website.
  • All our source is on Github, and is much more structured and readable than it was. We have a long way to go yet—we swear, unit testing is at the top of our priorities! (right next to Firefox...)—but this is a marked improvement over where we were just six months ago. We're going to keep learning and improving, and hope you guys will bear with us. Fork us! We ♥ pull requests!
  • This one's for the developers out there: we're ready to commit to endpoints! We've got the 2cloud-dev mailing list set up for people who want to build this functionality into their applications, and we've got documentation on how to create a client or server on each of the Github repos' wikis (Android, App Engine, Chrome) coming very soon.

As you can see, we've kept busy. We've got a lot of stuff we're looking at for our next versions, too:

  • Chrome In-App Payments
  • Link history in Android and Chrome
  • Device dropdown
  • Native account support
  • C2DM
  • Firefox support
  • iOS support
  • Tablet-friendly!
  • Sending links to friends
  • Binary content (images, videos)

Of course, we're going to try to keep improving our code, fixing bugs, and improving our administration at the same time. Also note, we can't promise any of those features. They're just things that have caught our eye and appended to our wishlist.

We hope you enjoy 2.1, and we hope you'll give us feedback on what we're doing right and what we're doing wrong. Both are useful in their own way.

Wednesday, July 20, 2011

You Can't Teach An Old Dog New Tricks

Android has a lot of features to it, a lot of services that make development easy, reliable, and convenient for the end user. And this list is constantly growing. And that's a problem.

Right now, we support any Android device that runs Android 1.5 or higher. That means any phone made in the last two years can run the 2cloud Android app. Which is really cool, don't get me wrong. But I was looking at the stats today, and 234 of our users use either Android 1.5 or 1.6. Which seems like a lot, but they really only amount to about 2% of our user-base, give or take. And yet, we're not taking advantage of new APIs (things like the Accounts API) because we're too busy futzing around and fixing bugs with outdated, legacy things (things like the OAuth implementation). 98% of our users are getting a sub-optimal, overly complicated, sometimes buggy experience so that 2% of our users can have any experience. As I was trying to coerce App Engine's OAuth implementation into submission today, I realised something: that's wrong.

Therefore, the 2.1 release will be the last release to support 1.5 or 1.6. New versions of 2cloud will only work on 2.1 and higher. Much like your pet Spike, who (as your parents claimed) "ran away" one summer while you were at camp, we're euthanising our 1.5 and 1.6 client. We will not update it after the public 2.1 release. It will remain on the Market, but any Android 2.1+ users who download it will be prompted to download the new application instead.

In a month or two, expect a new package to hit the market. This will be namespaced to the project (something like com.twocloud.android) and will match only 2.1+ devices. It will be built to support the latest features, and we'd like to include things like tablet support and a certain C2DM API I've heard something about. I can't promise the feature-set yet, but this is our public announcement: from now on, we're looking towards supporting the future, and looking away from keeping the past on life-support.

If you're one of our 200 1.5/1.6 users, I'm sorry. I wish I had the time to support all the devices perfectly. I don't. If you want to port new features over, we'll gladly accept pull requests and update the Market app every now and then. Our code is on Github. But if, as I suspect, you don't want to take the effort, please don't blame us; rather, ask whoever is controlling your updates why you're still on a version of the OS that was released 2 years ago.

As always, you can ask questions and raise concerns in the comments or on our help forum (in the questions forum). We'd love to hear from you.

Tuesday, July 12, 2011

They Grow Up So Fast

Exactly one year ago today, android2cloud hit the Android Market. Two weeks later, it was already getting far more usage than I had ever imagined. Since then, the usage has increased pretty steadily. It has been covered by most industry blogs (just Google 'android2cloud'). It has been covered by the venerable Lifehacker, and included in several of their 'top ten' lists. It has gained an advocate (and I've gained a friend) in Kevin Purdy, the author of those Lifehacker posts. It has run into money issues, and gotten two awesome sponsors, SiteSpect and Wonderproxy. It has gotten the team early access to new APIs from Google that now form the core of its software. It has gained an amazing supporter in Moishe, the developer that wrote the API and who now advocates for our project whenever and wherever he can. It has been acquired been Second Bit. It has been launched, still buggy and non-working, to thousands of users. It has been fixed by an overworked, sleep-deprived team on a tight schedule. It has been rebranded to 2cloud as we lay the foundations for expanding into more and more operating systems. It has gotten a gorgeous website from Eternity Online. It has had ads enabled as an opt-in way of donating to the server. It has brought the team to Google I/O. It's been one hell of a year.

And we can't see it stopping any time soon. We've been contacted by a publication (let's call it "Eebowai Mag") that plans on reviewing 2cloud in an issue at the end of July/beginning of August. We'll let you know more information as it becomes available and we're sure it's okay for us to publish it. Suffice to say, Eebowai Mag has several hundred times more readers every day than we do users since January 1st, 2011. And considering we've had over 16,000 users since January 1st, that's not saying nothing.

Ever since we were contacted by Eebowai Mag, the team has been in lockdown, trying to get updates and improvements ready. But Tino (the project manager) and I have been in lengthy discussions about how to make the application scale to support an influx of users. We don't think we'll get all the readers of Eebowai Mag by any of stretch of the imagination, but if we get even one tenth of a percent of them, it will bankrupt us rather quickly. A sustainable system for supporting the application has been our top priority ever since July 1st. We've come up with a system, and I hope you'll like it.

The problem, as I see it, is that we can't pay for all of you to use this as much as you want. I wish we were a multi-million dollar company and could. I really do. But we have a very limited bank account and as our only product is losing money, it tends to dwindle pretty quickly. Your donations are appreciated and amazing and wonderful, but they, unfortunately, don't cover the balance, or even most of it. So if we do nothing, our server will be going down. We started by just assuming this would happen, and planning for it. Our first course of action was to make sure we fail gracefully. We want to make sure you know what is happening. We want to make sure the app doesn't just force close, or silently fail and leave you wondering what happened. We want it to return an error message saying "We're over quota. We'll be back tomorrow."

And this train of thought led us to an idea. What if we do that, but let you pay to get around it? I mean, we can't pay more money--we don't have it--but if you have the money to pay for your usage after that and want to, who says you shouldn't be able to? So we're going to do two things:

  1. We're going to set the App Engine quota high. Unconscionably high. So high, we'll never be able to pay for more than a couple days of it.
  2. We're going to implement our own "soft quota". We're keeping track on our server of how many resources we're using, and when we hit the limit for resources we can pay for, we fail gracefully. We say "Sorry, we're out of quota". But we also offer to let you pay $1 to get around the quota. Right now, we're saying $1 buys you the rest of the day. We still need to do some testing to figure out what those numbers should be-- it could wind up being $1 to get a week of no quota.
A lot of this work was already done. Our team has been feverishly working since July 1st to implement this. We've also been refactoring our codebase so it's readable and takes advantage of everything we've learned in the last year. We were really hoping to have a beta release for you today, but fell barely short. We'll be releasing something to our beta testers tomorrow, if everything goes as planned.

It has been a really exciting year. 2cloud has grown significantly in the last year, and the team has grown with it. We're much better at handling an open source project. We're much better at writing scalable, efficient software. We still have a long way to go in both those. We owe a lot to a lot of people for that. One person who deserves a huge thank you is Matt Turland for all his guidance and mentoring in application design. Our code would be far worse off today were it not for him. So if you have a moment, @ mention @elazar with a "Thank you".

We're really excited for the future. We hope you like the things we've come up with. We hope we've fixed the bugs that are bothering you. But, most of all, we hope you understand how grateful we are to you, our users. This application is what it is because of you. We have over 1,000 reviews on the Android Market and a 4 star rating. We're working really hard to live up to that rating.

Thursday, June 30, 2011

Time to Grow Up

Anyone who knows me knows I dread nothing more than growing up. I have a huge Peter Pan complex, and will generally shout "No! You can't catch me and make me a man!" at anyone who tries to get me to act my age.

Despite that, even I know it's time for this little project to grow up.

I got some interesting news today. I'm not going to go into great detail, as I'm not sure how much I'm allowed to or supposed to say. Suffice to say, I have a very strong feeling that in about a month, our user count and usage is going to explode. Considering we've already got 16,000 registered users, that's not a small expectation.

I've been contacting everyone who would humour me for the last few hours. I've ranted, I've raved, I've fretted. I've driven my roommate nuts. Because the thing is, I should be ecstatic. Our technology can scale to handle the load, thanks to the wonderful engineers behind App Engine. Increasing our user count should be something to celebrate. Instead, one thought dominated my mind: oh God, how am I going to pay for all this?

A lot of you have donated. We love you. A lot of you have given far more than we would ever ask you to give. We cannot express our gratitude enough. But we have to stare a dark truth in the face almost constantly: donations cannot support this application indefinitely. We need an actual business plan.

I think we may have found one. I think you're going to be pretty pleased with it. I know I am. I'm not sure if we're going to end up using it yet. We're going to try a lot of things in the next month or so, in preparation for our event. I was going to release a new iteration of the software with a bunch of shiny new features and some bells and whistles attached. That plan has been shelved for the time being. Instead, we're going to focus on what we have and make it solid. Spit-shine it, if you will. Dylan is working hard on some UX/UI stuff. I'm working hard on the software to run our new business plan. Tino is fretting about money and doing all the boring math to try and measure whether or not our plan is working.

I'll let you know when I know more and can say more. All I know right now is that we're going to have a frantic month, and it's going to end with a bang. And when it goes bang, we're going to need your love and support to see us through. If you have thought about donating but haven't yet, now's a wonderful time. The team feels like we're standing on a precipice; we can either end the month with the project rising to a new level none of us ever dreamed it could rise to, or we can end the month chasing servers, donations, and bills, trying to make ends meet.

And all we know is we're going to need your help. You've held with us this far, and we're grateful for that. We hope you'll weather this with us, too.

Monday, June 27, 2011

We Want To Know You

I'll keep this one brief, guys. We have a special occasion coming up in the next few weeks, and have a few ideas on how to celebrate. But we'd really like to involve our users a bit, too. So here's the deal:

Email paddy@2cloudproject.com. I don't care what you send me. Send me a drawing. Send me a song you wrote. Send me a picture of you. Send me an explanation of why you use 2cloud. Send me your favourite memory. Send me anything (legal and family friendly) you'd like, so long as it (in any way, shape, or form) represents you. There are a lot of you, and I'd like to get to know some of you on any level I can. I've been blessed with getting to know some of you pretty well. The rest of you... I'm friendly. Say hi. I love to meet users and talk.

Please understand that by sending me things, you're giving the project permission to republish them. It hasn't been determined how we'll do that, yet. It really depends on what we get and how many of them we get. But we'll do something (unless we get nothing). This project exists because of its users, though, and I'd really like to include something that shows off our amazing users in our special event. If you're shy or embarrassed or have some other reason for wanting to maintain privacy, that's okay too. I'll respect the wishes you attach to the emails. If you don't want to be named, just say so. If you don't even want it published, just say so-- I appreciate you sharing a bit of yourself with me.

Thank you. All of you. Almost daily, I'm amazed by how awesome all of you are.

Monday, June 6, 2011

Why We Love Open Source

We work really hard to make 2cloud in an open source, dentralised format. We spend a lot of time making everything in such a way that you can set up your own server, your own clients, and run them without us knowing anything about it. We believe (strongly!) that you don't need our permission to use our software how you want to.

Fortunately, we aren't the only ones that believe in this. We wanted to take a moment to thank the companies and individuals who have offered us discounts and free services just because our software is open source. These people deserve a round of applause.

  • Tender runs the 2cloud help site. We love it. It makes handling user problems, suggestions, and requests easy. It helps keep everything running, keep all the questions answered. And because 2cloud is open source, Tender has graciously provided this service to us for free.
  • Github stores our code base and issue trackers. It's amazing. Anyone can contribute a patch to any of our software using a pull request. We all stay on the same page, thanks to their phenomenal issues support. Because our repositories are all open source, we get this for free.
  • Balsamiq Mockups helps us figure out how to make our different software. We hear a lot about how terrible our UX and UI is, and we're working hard on that. Balsamiq is making everything so much easier. We generate mockups quickly, and they help us clarify our thinking. And again, thanks to their support for open source projects, Balsamiq has provided this software to us for free.
Are these the only products we use that support open source? Of course not. We use a lot of open source applications in our development: Android, vim, Eclipse, NodeJS, Chromium... The list of open source software that makes this project possible is staggering in its size.

We're eating a lot of costs to keep the public server up, and free. While your donations are appreciated and helpful, they don't cover the hosting costs... by quite a margin. Since Second Bit acquired 2cloud in January 2011, it has spent $400 on keeping the server online. That's $400 more than has been donated. And while we've made strides that make our server cheaper and cheaper to keep online, we've been struggling to keep pace with more and more users. Our next iteration will cost about as much to run, but will be available on more platforms than ever, and the upgrade is focused on adding more and more platforms in an easy, scalable, modularised way. We're really proud of the system we've come up with, but it's going to lead to increased costs as iOS and Firefox users (eventually) join our ranks. We've been talking with Spaz about including it natively in their award-winning Twitter client for Adobe Air and HP's webOS. We're really excited about this, but again, we need to find a way to pay for all this new traffic. Between January 1st and today, 14,700 people have used 2cloud. That's a lot of people in six months. And as we advance to new platforms and add new ways to share links and new features, we expect that number to explode.

We're working on a donation system that will let you sign up to be a subscriber. It will bill you $5 a month, for as long as you want to support the service. It will also accept one-off donations. Of course, our top donators will be listed (if they choose) with a (optionally) a link to a website of their choice, as our way of saying thank you for support. This system isn't ready yet, but we're working hard on it. In the meantime, I encourage to donate if you can. The public server is surviving by the skin of its teeth, as money runs out for it. Don't worry-- when the new service is ready, we'll email everyone that has donated with instructions on how to claim your donations publicly if you'd like.

Thank you all for your support of this software. Really, it's mind-blowing. And a huge thank you goes to all the companies and individuals who support open source software. You make this project possible.

Monday, May 9, 2011

Are You At I/O?

Come say hi to the team! We love hearing from users, and hearing from you face-to-face would be awesome!

I've added my schedule to this calendar: https://www.google.com/calendar/embed?src=hf4qigu7jgc1qu6n5kqtinnj3o%40group.calendar.google.com&ctz=America/Los_Angeles

Dylan said he'd add his. We'll see if he does or not.

Hunt one of us down and say hi!

Wednesday, April 20, 2011

Android and Ads

Tonight, we rolled out versions of the server and Android. The server update is just a little caching tweak, something that will save us some of our server expenses. Users shouldn't notice anything at all. In Android, we fixed Silent Sending.

We also enabled ads. Sort of.

"But wait!" I hear you cry. "You publicly promised not to do that!" And you're right. I have promised, several times, never to install ads on this. And I will agree I'm eating my own foot at the moment. In my defense, however, I am not quite doing what I promised not to. I promised not to shove ads in your face, and I intend to keep that promise (as long as I can). This is not an excuse, and it does not mean I didn't break a promise. I feel really bad about it. I'm sorry. I really hope it's the last time it happens.

You'll notice I said I'm not shoving ads in your face. There are ads, yes. But they are controlled by a single checkbox in the preferences screen. By default, they are turned off. If you do absolutely nothing, you will never even know they're there. If, however, you want a way to support us and help pay for the public server without actually having to cough up your own money, it's now just a checkbox away.

This broken promise wounds me, and adding ads wounds me. I believe strongly in having things serve their purpose and serve it well, with no extra junk. Ads, to me, are extra junk in this project. They do not directly achieve it's purpose, do not directly benefit the users.

Unfortunately, it had to be done. I did some math, and Second Bit, the company that's paying for the server, had enough money to keep the server online for about 40 days before being entirely out of money. The server costs only $16 a week, but when you're a small software company whose only revenue-earning employee is a full-time student and runs an open source project, revenue is kind of a trickle. After some calculations, I realised that the 2cloud Project accounted for over 20% of the money that Second Bit has spent to date. That "to date" includes filing fees, designers, and other assorted expenses-- 2cloud was 20% of all of that.

My partner and I sat down and talked about it, and had two options: we either need to get 2cloud breaking even or even generating revenue, or we would need to shut down the public server in 40-some-odd days anyways, as we ran out of money. It was a long conversation that was emotionally pretty hard on me, but the ads were arrived at as the lesser of the two evils.

I'm sorry I can't fund this project myself. I'm sorry it needs to find a way to sustain itself. I really am. I wish I could make our perpetual money problem go away, but I can't. If you hate the ads and think we're just trying to scam you and make a quick buck, I do not fault you at all for leaving the Display Ads checkbox unchecked. You are not a bad person, and we will still do our best to support you.

But if you can, it would really help us out if you could check that box, and when you see an ad that interests you, click it. By our estimates, if we can get 100 clicks a day from our 10,000+ userbase, the server will be paid for.

Thank you all for sticking with us. It means a lot to the team. We're working hard on making 2.1 what you expect this service to be, something we can be proud of. We really hope you like it.

Tuesday, March 29, 2011

We've Been Acquired

It was actually months ago, and nobody even noticed (as far as I know).

The 2cloud Project is proud to have been acquired by Second Bit, LLC. This is an overly-formal and mildly ridiculous way to fold the project into the company that my partner and I established in December.

What does this mean?

In practical terms, nothing, really. It means (most importantly) if you want to sue the project, you are suing a company and cannot take my house. I was pretty pumped about that. It means that the company is paying for the server, so it's separated from my finances. Even that's not much of a change though, because the company gets its money from freelance work I do. The most noticeable change you'll see is that Tino Galizio, the CFO and manager for Second Bit, will join the 2cloud Project team as an advisor, responding to support requests and joining discussions about the project's future with the rest of the team.

What won't change is our commitment to free, open source software. We won't be installing ads, we won't suddenly start charging you for it. We're even keeping the 2cloud Project team separate from Second Bit-- Dylan is not an employee of ours (though he does work with us now and then), but he'll remain our lead UX designer.

When did this happen?

You may or may not have noticed that the extension and install pages sported a Second Bit link in the footer from January 1st on. The Second Bit acquisition of the project was supposed to be announced on the first. Due to my inability to get a Second Bit website up in time, it was delayed until a future date. Three months passed as I worked to get the 2cloud Project website online, patch problems in the Chrome extension, and complete client work, but we finally got our website up late last week. We're pretty proud of it. Technically, since January 1st, android2cloud (and then the 2cloud Project) has been a Second Bit product. We just didn't say much about it.

What is Second Bit?

Second Bit, LLC is a software development and consultation company. We write software for clients, write software products on our own volition (like the 2cloud Project), and help advise people on software when necessary. You can see the about page to get more information on the company.

What about donations?

Donations, from this point forward, will be paid to the Second Bit account, not to me personally. This is only fair, as Second Bit is springing for the server (which is still not covered by donations). I, personally, appreciate every donation made to the company, and would prefer the donations go to the company instead of me, personally. Also, if you'd like to donate to the project, hiring the company is a great way to supply money for the project while getting a tangible return. Just saying.

Thanks for all your support, everyone. Feel free to take to the help forums to ask any questions about the acquisition that haven't been answered here. Just post them in the questions forum (not the problems or suggestions forum) please.

Paddy Foran
The 2cloud Project Lead Developer

Monday, March 14, 2011

Say Hello to the 2cloud Project

Since July 12, 2010, we've had the same name and the same terrible, stitched-together-by-a-developer-with-no-design-sense icon. Both were pretty limited in that they only applied to Android. With a focus on expanding to other platforms and becoming a bit more device-agnostic setting the pace for the future, the team got together and decided that a rebranding effort was in order.

So, I'd like to introduce the 2cloud Project.

The 2cloud Project is the new umbrella project that software with the capabilities that android2cloud has will be launched under. The Chrome extension has been renamed 2cloud for Chrome or the Chrome client for the 2cloud Project, whichever you prefer. :) android2cloud will remain android2cloud.

First, I'd like to thank Dylan Staley. Not only did he volunteer to make our icon pretty (and really, the icons he came up with are gorgeous), he also came up with a killer new tagline for the project: Tap. Share. Anywhere.

Second, I'd like to welcome Dylan to the 2cloud Project team. He graciously agreed to take on a permanent post as our designer and UX expert. His next project will be tackling our mobile and/or Chrome interfaces, whenever he gets the time to do so. I'm pretty pumped about that.

Third, I'd like to announce our web presence. We've owned android2cloud.org for forever, but we've finally put some content up for it now. Likewise, we've purchased and launched 2cloudproject.com. Both sites have some pretty good information on them, so I encourage checking them out. Our designs were created by the talented Eternity. For her efforts, we've included her in our sponsors list.

Fourth, I'd like to announce that we're on Convore. If you'd like to chat about the project, head on over to our Convore room and chat us up. We'll try to make a habit of being in there to answer questions and talk with you guys.

And now, some questions I think you'll have.

What exactly is changing?

Nothing. Everything. Basically, a lot of names and icons, and not a whole lot else. We've launched a @2cloudproject Twitter account, but the @android2cloud account will remain. @2cloudproject will post news relevant to the entire project, while @android2cloud will be exclusively for the Android client. So yes, there will be very little difference between them right now.

We're also changing our mailing lists, and adding two more. As a reminder, we've had the discussion list and the beta list. Here's the new layout:

  • 2cloud: A discussion list for the project as a whole.
  • 2cloud-announce: A mailing list for just announcements. Only our project members will be able to start topics in this list, and it will only be used for announcing new platforms, server downtime, policy changes, the like. This is the android2cloud mailing list, renamed; so if you were registered to the old one, you're registered on this one.
  • 2cloud-beta: A mailing list for beta testers. This is the android2cloud-beta mailing list renamed, so everyone is still registered. Very little is changing about how this list functions.
  • 2cloud-dev: A brand new mailing list, this will serve as a discussion forum and congregating place for developers on the project. If you want to build your own client or server implementation, would like to contribute to our client or server implementations, or would just like to find out more about the source code and technologies behind our platform, this is the list for you.
What about the blog?

We still haven't come to a decision on that. One idea was to move this entire blog to blog.2cloudproject.com, rebrand it as the 2cloud Project blog, and call it a day. Another idea was starting a separate blog and maintaining both, or letting this one die. For now, we're just going to leave the blog as it is. We'd love to hear your thoughts and ideas in the comments, on Twitter, or in the 2cloud mailing list, however.

The help site is missing!?

No, the help site is ok. It just moved to http://help.2cloudproject.com. We'll be setting up a redirect for help.android2cloud.org shortly, to help anyone who has gotten confused.

I don't like the new name/the new icon. Will you change it back?

No. But we have no objection to you doing so. We are open source. Just dig through our repositories, and you can build a de-re-branded application for whatever platform you like.

We're pretty excited about this. We hope you guys are, too. Let us know in the comments if we missed any questions, and we'll do our best to answer them.

Tuesday, March 8, 2011

App Engine Error

Just a quick update: App Engine appears to have had some bad breakfast, and is currently puking all over itself. Imports are throwing 500 errors left and right, and we have no idea why-- we didn't break anything, we swear.

Our server is down for the count at the moment, but with any luck, Google will have it up and running again shortly. Sorry for the inconvenience. We'll let you know if we get more information.

Monday, March 7, 2011

On Notifications

We need a better way of keeping in touch with you guys. We have a Google Group, we have this blog, we have a Twitter account, but we only reach a fraction of our users with those. Sometimes, we need to put a message in front of everyone.

It's just tricky to do that in a respectful and friendly way. We want your help. Just fill out this quick survey, a few questions about what you'd feel comfortable with, and we'll do our best to stay in touch, but out of the way.

On a related note, we just sent out an email to 232 people who haven't updated the Chrome extension since before January 1st. If any of you are interested, the body of the message is online, here. You'll notice we moved our deadline for blacklisting users to Friday-- we really don't want to have to do that.

Sunday, March 6, 2011

2.0.4 Landing (For Reals This Time)

Just wanted to let anyone who may be following the blog that android2cloud version 2.0.4 just landed in the Chrome Web Store. This is identical to the extension that was in public beta for the last week or so. It should fix any issues you have with links reopening. To clarify that:
  • You should uninstall version 2.0.3 or have it auto-update. You should never run two installations of the Chrome extension at the same time. Ever. I can't even begin to predict how that would affect performance.
  • You should uninstall the public beta version (which will not update automatically) and install the release version. You should never run two installations of the Chrome extension at the same time. Ever. You should  also always install the extension from the Web Store, if possible, because that will keep you up to date with new releases automatically.
  • You should see the links pop open one last time when you install version 2.0.4. I'm sorry. If I could prevent that, I would. After the first time 2.0.4 sees them, though, they should never open again.
For those that care about the technical details, I offer a post-mortem of the unfortunate situation.

This situation was created entirely from my own folly. For some unknown reason, Chrome disliked the mechanism I had worked out for android2cloud originally, which was storing the ID of the last link that Chrome received, then sending that to the server when it connected to have the server send back all the links received since that ID. In theory, it should have worked. In practice, it didn't. And I still have no idea why. I thought it would be easier to simply modify the database schema to hold a "received" field for each link. Now, when Chrome received links, it would phone home to the server and say "yup, got it!" at which point, the server would mark it as read in the database. So every time Chrome connected to the server, it asked the server for the links that hadn't been marked as read in the database.

Which should work, in theory, right? Right.

Except I was foolish, and didn't think things through fully. I assumed that simply turning around and giving the server back the same data we received would be the easiest way to go about things-- minimise the requests to the server, prevent parsing errors from mucking up the "mark as read" transaction, that sort of thing. What I didn't take into account was that, because it was an OAuth request, all the data got stored in the URL. Which is more than mildly annoying-- it actually broke the "mark as read" transaction by making the URL too long if you had a bunch of links. So the server never got the message to mark the links as read, and dutifully sent them back to Chrome every time Chrome connected.

The solution I came up with was simply parsing out the IDs of the links received, and sending those back to the server. That truncated the request nicely and, therefore, the server got the message that the links were received. This solution is not bulletproof, obviously, but it works as a quick patch until I can get the much more thought out 2.1 out the door.

Sorry for the issues. I'll try to do less foolish things in the future.

Wednesday, March 2, 2011

Show Us Some Love, Google

Wow, 4 days, 4 posts. We're really pushing with this, aren't we?

Google Summer of Code 2011 has started accepting applications for mentoring organisations. For those of you who don't know what GSoC is, it's a program Google runs for open source organisations and students in college. The program strives to let students 'flip bits not burgers' by paying accepted students $5,000 to work for a summer on a project for an open source organisation. Google also donates $500 to the organisation itself, as the organisation is expected to mentor the students.

Normally, larger organisations end up being mentors for GSoC, but (perhaps with some hubris), I'm submitting android2cloud as a mentoring organisation for the 2011 GSoC. I've spoken with two Google engineers, and they've agreed to serve as references for the project, and haven't told me I'm crazy, so I remain optimistically skeptical about our chances of being accepted. Certainly the community-focused work we've been doing can't hurt.

Part of the GSoC Mentoring Organisation application requires a list of suggested project ideas. Our team certainly has some of those, but this is an open source application. We believe you guys drive and define android2cloud, not some elitist team. So we've opened a wiki page, here. Take a look at the instructions, log in, and add your ideas. Who knows? Even if Google doesn't select them, we may get them done over the summer.

And if any of you out there are college students with Python, Java, and/or Javascript proficiency, we'd love an application from you, should we be accepted.

Tuesday, March 1, 2011

Upgrade or Perish

Hey everyone, pretty important announcement.

Since we upgraded to version 2.0 on January 1st, we were supposed to be seeing a huge dip in the number of requests our public server served each day. We were supposed to regain all the CPU we were losing to polling. I keep saying "supposed to" because, in reality, we didn't.

It seems there are some people (quite a few people?) out there who aren't actually using the app, didn't install it from the Chrome Web Store, and haven't uninstalled it or upgraded it since December. Which is two months ago. We're still getting millions of HTTP requests to URLs that haven't been in use since version 2.0 launched. These requests are eating up a significant portion (more than 10%) of our daily CPU, and for no good reason. As it exists right now, the application gives you a friendly message if you load one of those URLs-- try it yourself. I do have a list of IPs that are making server requests the most, which would indicate polling. So here's the deal:

Starting on March 7th, I will be blacklisting 25 IPs a day that are still polling the server. This is not an easy decision for me to make, because blacklisting people means that they will not be able to access the service in any way anymore. But I need to protect the main server for the use of the majority, and this minority of users who will not upgrade in a timely manner (two months is surely enough time) is making the user experience worse for everyone.

Of course, should these users, upon being blacklisted, email me, I will take that as proof that they are going to be updating their Chrome extension to no longer poll our server and will happily remove them from the blacklist. I don't think anyone will, as these people haven't even noticed the extension stopped working months ago.

Please, if you have any questions, comments, or concerns, feel free to get in touch. I can always be reached through the help forums or at paddy at android2cloud.org.

I'm tinkering with an idea for a notification system that would help solve issues like these (as I'm sure the people who are polling our servers don't read the blog, follow the Twitter account, or subscribe to the mailing list), but it's a little more intrusive than I'm comfortable with. I'll be sending out a poll or feedback form about it a bit later to try and gauge the users' feelings on how it should be handled, so I'd love if you would respond for me. It will give me information that will help make your experience better.

As always, you have my thanks.

EDIT: The Chrome extension can be found here: link If you install from the Web Store, you will automatically be updated to the latest and greatest versions.

Monday, February 28, 2011

Premature Announcement

That title is misleading, as I'm not really even announcing anything yet. But whatever.

As you may or may not have noticed, we've been working a bit on some branding stuff, some UI stuff, and trying to refresh our look a little. In other words, we don't want to look like a six year old drew our icon and interface with his new crayons. So we needed to draft someone who's not me to work on it.

Dylan Staley, apart from being awesome, was gracious enough to volunteer his time without any begging at all on my part. I'm serious. I didn't even have to ask him, he just said something to the effect of "Can I make your designs suck less?" except less rude, because he's not me.

What I'm really getting at, here, is Dylan worked on some new designs and branding for us, and then they were entered into a design competition for his school. One that has voting open to the public. You can see where this is heading.

His entry is listed here. I'm sure he would appreciate your votes. Actually, we'd appreciate them, too, because it would be super awesome to be able to say we had an award-winning design.

And one that's not drawn in crayon is cool, too.

Sunday, February 27, 2011

2.0.4 (Sort of)

A lot of people have been having issues recently with links opening ad-nauseum. I just wrote a quick patch, being dubbed "2.0.4", for the Chrome extension and server, but it's going to be released in a little bit of a different manner.

I don't want to push out untested software again, but people having links opening constantly is annoying and a terrible experience. So I'm trying to get the best of both worlds: not pushing live software that hasn't been tested (not breaking more stuff for people who have android2cloud working) and getting a fix out fast for people.

To that end, I'm making this beta a public beta. You can download the extension from here, and the software is running live on the android2cloud and android2cloud-test servers. 2.0.4 and 2.0.3 both will work at the same time. Next Sunday, I'll update the extension in the Web Store if everything seems to be going well.

For those of you running your own server instances, you will need to update your servers with the new software. You can do that with the source, found in zip file format here.

Sorry for all the issues lately, guys. Working hard to get them resolved as fast as I can.

Thursday, February 24, 2011

Links Constantly Being Opened

It seems my terrible code has struck again. We're getting reports of links being opened and re-opened for people every time Chrome starts up. There's a help discussion going for it, here. There is, obviously, a bug somewhere in the server code, but I can't quite figure out where it is.

Unfortunately, I don't have the time at the moment to go searching through the code and testing things until at least Sunday. So a fix is likely not coming before then. I'm really sorry for that, but I need to take care of my responsibilities.

In the meantime, I will be happy to remove links from the database for anyone who would like me to, to prevent them from opening again. Simply email paddy android2cloud org from the email address associated with your android2cloud account. Also, be sure to include the device name for Chrome that is having problems. Just include that information, and request your links be removed, and I'll delete them from the database as soon as I can.

I've also cloned the main server over to http://android2cloud-test.appspot.com/. Any users who are experiencing this problem and are feeling particularly helpful, I'd love it if you could use this server (which will give me additional diagnostic information) to help figure out where the bug is coming from. I'm going to ask that if you're not experiencing the error, you don't use this server, so as to not pollute the logs. I'll be looking through the data on Sunday to try and pick out any patterns, and hopefully fixing the bug right then and there. To participate, simply change the options on your Chrome install to point to http://android2cloud-test.appspot.com as the server. On your Android phone, open the app, hit menu, choose Preferences, enable Advanced mode, add an account (replace your other one by simply using the name again) and point it to http://android2cloud-test.appspot.com.

I'm sorry for all the issues we've had. Really. I don't know what to say. Since January 1st, I know that stability has been a nightmare. I'm really grateful you guys have stuck with the app through this. My hope is that version 2.1, which the server is 99% complete on, will fix all these issues by virtue of clean, succinct code and well-defined protocols. I'm doing my best to get 2.1 released by the ides of March, and will keep you up to date on that as it happens.

Monday, February 21, 2011

2.0.3 Landing

Just a quick update: the 2.0.3 Chrome extension has been pushed live in the Chrome Webstore. If you downloaded the extension through that (recommended) then it should automatically update for you. Otherwise, you can get the download off the project page.

2.0.3 is just a couple (necessary) bugfixes. It should fix the issue with links not getting marked as read, and should fix the issue with links not arriving at all. Sorry for the delay in this one, guys and girls.

I'll be focusing on my other commitments for about a week, but I have a pretty big update planned (2.1, maybe?) that will give us a unified API, server code that's readable, and hopefully readable Chrome and Android code. Expect it in a few weeks-- the server portion is already written. :) Just need to work with Chrome and Android, and can't start that until I finish one of my other commitments.

As always, feel free to post in the help forums if you're experiencing issues. We'll do our best to get them taken care of.

Thursday, February 17, 2011

Proof Is In The Pudding

I talk about how awesome the android2cloud users are, like, all the time. Because really, you guys are. But people may think it's idle flattery. So I thought I'd just take a moment and prove it, because this blew my mind last night.

Nine hours ago, Nick Asmar (@nickerrides) asked "no, seriously why isnt there phone to chrome yet??"

Shortly thereafter, Chris Chavez (@gamercore) retweeted the question.

Within the hour, Neil Lund (@neillund) replied "@Nickerrides This does that http://bit.ly/gMG6xN Android2Cloud"

Eight hours ago, Jake Sibley (@disbj4ke) chimed in "@Nickerrides @GamerCore there is it's in the market as android2cloud"

Shortly thereafter, Android Shug-ar (@android_shug24) added his two cents: "@Nickerrides there is.. check out android2cloud"

Seven hours ago, The Twitterer Known As B (@southeastbeast) made an appearance: "@Nickerrides @gamercore they already have it. Google phone to chrome. Think it's called android2cloud"

Not to be left out, Liam (@falmc) brought up the tail-end with "@Nickerrides android2cloud app. Not a Google app but does what you want."

I love you guys.

Monday, February 14, 2011

Chrome 2.0.3, and the Ever-Expanding "Soon"

So, a few of you may have heard that android2cloud's Chrome client version 2.0.3 was coming "soon" or even "this week" several weeks ago. And, obviously, that has not yet landed. I thought I'd take a minute to explain why.

Chrome 2.0.3 was intended to fix an issue in which links were not opening for some people sporadically, because of a simple coding glitch on my part. Largely the result of sloppy code and negligence in cleaning up test data before releasing. The fix should have been simple.

I fixed everything up in the code, included some other things, and pushed it out to the beta testers. Everything went smoothly, until it was discovered that, for some reason or another, the links weren't being marked as seen reliably. Meaning you get the extremely annoying bug of links opening every single time you start/restart Chrome, or every 4 hours if you leave it open.

I chose to delay release until I could get that major bug sorted out, hoping it would be a quick fix. Long story short, it wasn't. Isn't.

I'm still working to get 2.0.3 out. It will be accompanied by an App Engine 2.0.3 release, as well. I'm sorry it's taking so long-- I wish I could work full time on this, I really do, but it's not possible right now. I promise I'm doing my best to get the fix out there as soon as possible.

Thanks for your patience.

Monday, January 31, 2011

6 Months in Review

I missed the boat on this one by a couple of weeks, but I still thought it was worth pointing out: android2cloud turned 6 months old on January 12th. On July 12th, I hit the big green Publish button that put the app live in the market, and put the source code online for everyone to download and play with.

It's been one hell of a ride since then.

We've been covered by most the Android publications, and by the venerable Lifehacker. I got to meet the editor behind that Lifehacker post, and am honoured to be able to refer to him as a friend.

We've been given early access to Google APIs and worked closely with Google engineers to help them improve their products as they help us to improve ours.

As of this writing, the Android app has been downloaded 37,000 times. On January 1st, version 2.0 went public. Since version 2.0, almost 7,000 users have sent almost 40,000 links. Comparatively, it took until December for us to reach 100,000 links, from July. We've been one of the top ten hottest applications on App Brain not once, but twice.

We've weathered insufficient resources, and all of you turned out in droves with money in hand to help keep servers online. We've been blessed with two wonderful sponsors, SiteSpect and Wonderproxy, who helped us to keep the lights on when we couldn't anymore. Another name will be added to that list shortly, but I'll make that announcement in due time.

You're all amazing, wonderful people. This application spread through word of mouth and suggestions. The Google searches leading to any of our properties are for the application, by name. Hardly a day goes by where I don't see someone recommending android2cloud to a friend on Twitter. Really, thank you, all of you. It's awe-inspiring for me, an English major at a tiny little college who plays with software as a hobby, to see my work being used by so many people. Sometimes, I block out the idea that so many people are using my software, which leads to some bad things. It's just a little overwhelming for me to consider. More people have downloaded and used my app than I've ever met in my life. That's... unreal. I've spoken to so many of you on GTalk as you patiently helped me find bugs in the software, and am blessed to know you. You guys are amazing. Thank you to those who do this with me, to those who stick around on the mailing list, answering questions for other people. You are the core of the community. Which leads nicely into my next point:

My focus for the next six months will be on the community. I will be working to move this from my hobby project into an Open Source project of its own right, something with momentum of its own. To that end, I'm publicly declaring my priorities for the next six months:

  1. Stability. Nobody likes using code that doesn't work, and communities don't grow around things nobody likes. We'll be fixing those lingering issues and errors, patching and applying band-aids until we get back to stability.
  2. Readability. Our codebase at the moment is atrocious and sprawling, and that's entirely my fault. I'll be working to clean things up so that others can figure out what the heck is going on in my code, and can start auditing it and contributing to it.
  3. Maintainability. Right now, there are no tests for anything in android2cloud. Nothing. Which leads to some problems, as we've seen. It also makes it hard for someone to have any confidence in the code they're writing for the project, which is a deterrent from people submitting code. I'll be working to develop independent test suites for the Android app, the server, and the Chrome extension. Hopefully, this will help give people confidence in submitting code to the app.
  4. Documentation. The documentation I've written is woefully inadequate and out of date. The in-code documentation is non-existent. I'll be working to remedy both of these. The creation of the help site, which I've been pushing users towards, has helped greatly. The less-publicised bug tracker will become more orderly and better maintained, so users can quickly identify known bugs and see their current status.
  5. Expansion. Right now, we have an extension for Chrome, an app for Android, and an App Engine server. I'd like to expand on those. I'd like to add a Firefox extension. I'd like to finish and release the NodeJS server that is mostly done at the moment, but needs some love. I have the shell of an Android application exclusive to FroYo that can do some interesting things, and I'd like to let the users who have FroYo (the majority, if Analytics are to be believed) get the added benefit. Expansion is the lowest priority for now, because we need to do some cultivating and maintenance on our community before we start adding to it. But expansion is definitely on the horizons. I've got some pretty fun ideas for places this could go, and I hope you guys can give me some more.
A lot of the shortcomings are my fault, and I apologise profusely for that. If anyone wants to step up and help out on any of these fronts, by committing code or lending a hand in the help forums or signing up to beta test or even just making wishlists of documentation or platforms or features in the help forum, I'd like to encourage them to. I'm learning how to run a project of this size and scale as I'm going, and I appreciate the patience you've all had with my amateur mistakes. You guys really are awesome.

The things I outlined above may or may not all get done in the next six months. But android2cloud will never be finished. We'll continue tweaking and improving it, as a community, until something better comes along or enough of us get bored enough that it's allowed to recede into obscurity. But for now, you've put up with six months of issues, bugs, downtime, and an amateur developer, and I appreciate it. And I hope I've learned some things in these last six months that will make my mistakes in the next six months less painful an experience for all of you.

Tuesday, January 25, 2011


A couple of you may have noticed that I was on an unofficial hiatus for the week of the tenth. If you're really attentive, you may have noticed that the speed of my responses to support requests in the last couple of weeks have not been what they were prior to the hiatus. Part of this is due to my moving back to campus and getting settled back in Buffalo. Part of it, however, is due to a problem with my classes. I won't bore you with the specific details of it, but suffice to say that from last week until today, I was unsure I was going to be able to take enough classes to be considered a full time student. And if I lost my full time student status, I'd have to drop out of college. Obviously, this was a huge priority (and source of stress) for me, and I couldn't devote much energy to android2cloud. Those of you who follow me on Twitter may have noticed a steadily increasing stream of expletives. This situation would be why.

Though the situation is mostly resolved, I still need to devote the vast majority of my energy towards my schoolwork for, at the very least, the rest of the month. While I'll be focusing on it all semester, I'll be living, breathing, and dreaming my school work for the next few weeks to try and recover from this situation in a gainly fashion.

To that end, I must announce I'll be on hiatus for the remainder of January, and probably as late as February 4th. I will strive to release the fix I've identified and implemented already during that time, and may accomplish it soon, but I can't promise anything. There will definitely be nothing beyond the version 2.0.4 bugfixes, however, until at the very least February. Additionally, the support I supply (mainly responding to emails and bug reports) will be heavily curtailed. If you do not receive a response at all, I apologise profusely. I'll try to respond to everything, but please be aware that it will most likely be a few a days before you hear from me. If you want to be absolutely sure your email will get answered, save it as a draft and send it out on February 5th.

In the meantime, I hope you'll all help each other. The help site is there as a communication tool, as is the Google Group. I'll do my best to approve pending Google Group messages in a timely manner, even if I don't respond immediately.

I would also love some feedback about what features you consider the most important, or don't care about. Do you care at all about hosting your own server? How important is stability? What features would you sacrifice for stability? If you could choose between stability in the service and hosting your own server, which would you choose? How do you feel about premium features? I don't want to charge anyone anything for my programming or anything like that, but if we could enable a feature that would cost us money on a per-message basis, the only way we'd be able to support it is through a per-message fee passed on to the users who opted into that. Would you rather I continue to try and improve the stability of the current service, or would you rather see things like Firefox support? Feel free to sound off in the comments, or discuss it in the Google Group.

Thanks for everything, you guys. I'll see you all on February 5th.

Friday, January 7, 2011


I have a confession to make: I'm disappointed, for the very first time, in my userbase.

You guys are normally wonderful. You're very supportive, you donate money to the project like it's your job, and you're helpful with your error reports. Lately, however, I've started to feel like dealing with users on a general basis (the ones I work with on an individual, personalised basis are still a pleasure and a joy to work with) has become the worst part of my day. Everywhere I turn, I'm bombarded with complaints and demoralising messages. I'm told android2cloud sucks, that version 2.0(.1/.2) sucks, I'm told that I should just revert back to 1.0 and leave it.

I feel bad for posting this message here, because the people who read this blog and will see this message are the ones who care about the project, who are patient with bugs, who donate money, who are every developer's dream users. But lately, I've been getting less and less patient and helpful with users. And I wanted to share why. I try not to be; I try to do my best, I really do. But still, sometimes the messages people send are so upsetting or insulting that I can't help but link them to Let Me Google That For You, or sarcastically reply that no, I had no idea the latest version broke my software for 20,000 people, I didn't get that memo.

When people say things like "just give us the old version back", that's really upsetting to me. I worked hard on android2cloud 2.0, and for a very long time. It has been in development since October. I have worked with Google engineers to tweak Google's code specifically to allow features this application uses. I have ignored coursework and work as an intern for my University to develop this application. Now that it is buggy, I have put off work that I'm being paid to do as a freelance developer in order to issue two bug fixes in two days. My sleep schedule is wrecked beyond belief, and my phone is constantly blowing up with bug reports and support requests for android2cloud. I don't know if any of you have noticed this, but on top of developing and patching android2cloud, I respond to every single bug report and support request I can find. I have Google Alerts set for the term android2cloud, and will register on forums for the sole purpose of helping people get it working or hearing their ideas and feedback. I have a twitter search saved in Tweetdeck for android2cloud, and try to help everyone I find who has issues or ideas for it. From the beginning, I've tried to give the best support I could for this product, and all of the work is wearing me down.

So, here's what's going to happen. A lot of you want version 1 back. That's your prerogative. You can get the source code for everything from our project page's Mercurial repository. Don't know how to check out Mercurial source code? LMGTFY. You'll need to set up your own server, because I can't afford to be watching my pay schedule, hoping I get paid in time to pay for the server anymore. It should be free to run if you run your own, so go ahead and set one up. The instructions for doing so are still on our project page's wiki. Just do the minimum possible effort and look for them.

Note, though, that if you decide to revert to version 1, you forfeit any right you had to my support. I will not answer questions, I will not debug, and I will not patch for you. If you switch you version 1, you're on your own. If you stay with version 2 and complain that version 1 was better, I will simply direct you to this post.

android2cloud has always been, and will always be, an open source project. If you think version 2 sucks so badly, I would love to know why I have not received any patches from anyone for it. If it sucks, fix it. That is the nature of open source software.

I'm doing the best I can. Tonight, there will be no patches. I've responded to most the bug reports and support requests I got while I slept, and I make no promises that I'll respond to any more tonight. Tonight, I need to work on client work. Tonight, I need to pay the bills, fulfill my obligations, and stop being such a letdown to the people I've made promises to. I owe them better than what I've been giving them. Also, please remember that android2cloud does not pay me anything. I have to work on my $20/hour job that I don't get abuse from tonight, instead of the $0/hour one that gets me plenty of abuse.

I'll end with a positive note: Thank you, users who are doing the right thing. Thank you for your understanding, for your patience, and for your assistance. Thank you for realising this is a project, not a product, and you are as important to its success as I am. Thank you for understanding there will be bumps and bruises along the way, but we'll get there. Thank you for understanding that I'm human, and doing the best I can. You make this project worth doing. You make me glad I released it in July, instead of just holding on to it and using it myself.

Thursday, January 6, 2011

2.0.2 Just Pushed

I just pushed version 2.0.2 live. It is an update to the Chrome extension and the App Engine server. Basically, it fixes the bug wherein links would open multiple times. I ended up switching away from storing the last link received's ID in the Chrome extension and then simply telling the server to send every link sent after that to have the Chrome extension send the server a message every time it receives a link, confirming that it did receive the link, and then storing that information on the server. Therefore, you should never see a link twice.

I apologise for all the recent problems we've been having. I know there's one other issue that can occur if you type a link into the Android app manually (the Page Not Found error), but it's 2:30 in the morning here, and I need sleep. So I'll be fixing that one soon. In the meantime, just use the Share button to send links, or make sure you include http:// when typing in links.

Wednesday, January 5, 2011

2.0.1 Landing

Just wanted to do a quick post to say that 2.0.1 has landed. This should fix the reported issues with 2.0. If you're running your own server, or obtained the app or extension through non-Market or non-Webstore areas, respectively, you need to manually update. You can find the updates on the project page. As always, please let me know if something breaks.

Sorry this patch took so long to get out.

Sunday, January 2, 2011

About Version 2.0

Clearly, the January 1st update was not as smooth a transition as I had hoped for. I'm going to try and lay out what's going on, but first let me celebrate the good before we get to talking about the bad.

Since the application went live on July 12, 2010, android2cloud has gained over 20,000 users. Those users sent more than 100,000 links through the default server, not including servers set up by users. I was paying roughly $80/week in server bills, and had raised over $800 in donations.

Version 2.0 came about as a result of that server bill. $80 a week is not an expense that I can rely on donations to take care of, and my part-time, minimum wage internship for my University can't just swallow the expense. The underlying architecture had to be rewritten to be faster and more efficient. In the Fall, I was invited to beta test the Channel API on App Engine to speed up our infrastructure and bring down our cost. This became the backbone of version 2.0.

Version 2.0 brings a bunch of improvements with it:

  • Links are now opened in Chrome as soon as they hit the server. There is no more 15 second delay, something that used to be annoying in older versions.
  • Links can now be queued. If you're out and about and Chrome is closed, feel free to send as many links as you'd like; Chrome will open all of them as soon as you start it up.
  • The android2cloud icon is no longer displayed in the Chrome toolbar. The icon no longer had any effect (clicking it used to force a check for the latest link) and people were asking for it to be removed, so I did. Future version plans include reinstating it with some cool functionality, so don't worry if you miss it.
  • android2cloud now supports sending links to individual Chrome installs. I call these installs "Devices", and it's helpful if you have multiple computers, or dual-boot your computer. android2cloud on Windows could be called "Windows Chrome", an install on the same computer but under Ubuntu, could be dubbed "Ubuntu Chrome", and an install on the Cr-48 could be called "Cr-48". Then, you can use those unique names to specify which you want to send to, instead of sending it to all of them, like you used to. As devices, browsers, and Operating Systems are added to our product line, this upgrade will be more and more useful. This is also a requirement imposed by the Channel API.
  • I made an install flow for the Chrome extension. Now you get a friendly wizard to guide you through setting up, instead of an unexplained window popping open, asking for access to your Google account. The new version also sports a settings page for the Chrome extension, which makes using a self-hosted or custom server even easier.
  • The Android app now sports a canon Settings page, using the built-in Android library for it. It should now be more intuitive for people to change their settings.
  • I opened a Help page on Tender, which is kindly hosting us under their free Open Source license. You can use this website to get answers and help with the application.
  • I also opened a Github account for the source code. This marks an official migration from the Google Code hosting; I'll be shutting those repositories off in a couple of days, at which point the Github repositories will migrate from the "development" branch they're currently in to the "master" branch. The switch to Github is easy to explain: I love Google and Google Code, but Github has better support for ad-hoc contributions. I corrected this blog post a few times to try and remove all the references to "we" and replace them with "I", because 99% of the code right now is written exclusively by me. This explains why it's so atrocious and embarrassing. I'd like to change that in the future; I'd like to make this our application, not mine. So, please, fork me and send me Pull Requests. Link me to your Github repository of a new client implementation or entirely new project built on top of android2cloud or using android2cloud, and I'll fork you and list you in the 3rd party repositories. Github simply has better support for social coding than Google Code, and the future of android2cloud is social.
These new fixes should provide a much better product experience for you and be much cheaper to maintain (which means much more server uptime and much less growing pains)—or, at least, they will once we get these issues sorted out.

These improvements (and some things we've been working on that weren't quite ready, or were less ready) were only made possible by the help and support of awesome people:

  • First, our first sponsor, WonderProxy and the representative who contacted us, Paul Reinheimer. They donated a large sum of money to us to keep our server online during our first main financial crisis.
  • Our second sponsor, SiteSpect and its representative, Eric Hansen. They matched WonderProxy's donation to keep our server up during our second financial crisis. Without these two companies, our public server would not have been offered for the past few months, and hundreds or thousands of users would have been terribly inconvenienced. We owe both of them our thanks and support.
  • Matthew Turland has been, apart from a good friend, a huge source of help as I struggle to refactor our codebase into something respectable, a source of inspiration as I struggle to maintain the frantic pace of college, employment, and development on this, and a source of wisdom that has helped guide me through a turbulent time in my life. I can honestly say that there would have been no software to release were it not for his patient and methodical help bug-fixing, explaining computer science theories my English and Education backgrounds have left me lacking, advice in figuring out what the application should be and what technologies would best implement it, and selfless sharing and experience as he talked me through making life decisions.
  • Ed Finkler has been a mentor and a friend to me ever since I started contributing the open source Twitter client, Spaz. His philosophies on open source match up rather well with my own, and I look to him when I fight myself over moral issues involving the application and paying for it. His Javascript wizardry and patience in figuring out the ethical choice have been invaluable to me.
  • Steve Pirk and the rest of the Yensid team adopted me shortly before I launched android2cloud back in July. Since then, they've been quietly accepting of my lack of time and breakneck pace of life, even after they stood stoically behind me with everything (including financial support!) they had during the initial release and the crush of users that Lifehacker brought on.
  • Kevin Purdy, of Lifehacker. Kevin originally covered the application back in August, and it has been spiraling out of control in terms of use and popularity ever since. I discovered while I was back at school that Kevin lived in Buffalo, NY, which just so happens to be where I go to college. We arranged a meeting, and had a wonderful conversation about Android, Google, and computers. Since then, he has been constantly pushing paid work my way and serving as an advocate for me. My professional advancement through the last few months has accelerated at an alarming pace, and most of that is thanks to Kevin. I am proud to know him, and excited to work with him.
  • Florian Sellmayr is someone I know very little about (including their gender; I'm going to, risking misogyny, proceed with the assumption of male. Correct me if I'm wrong, Florian, and I'll update immediately with my apologies), but someone I have enormous respect. I got an email from Florian five days ago, letting me know that he had created a pure Java implementation of our old client, one that would allow users to open their latest links in the browser of their choice, as long as the Java program was running on their computer. This is a huge achievement, and was accomplished without any input on my part. Florian is currently hard at work trying to patch the software to work with the new version of the server software, and I'll be sure to update everyone on the progress of that.
  • Everyone who donated. $800 in donations, most of which were $0.70 donations from the paid Android app, means a lot. The people who donated as much as $50 or $200 have my undying gratitude and respect.
  • All of the users who use the app and tell their friends. I'm still shocked that it grew to over 20,000 users without any advertising effort on my part. I've been kept on my toes, constantly sprinting, trying to keep up with the pace at which all of you are making this grow, and I couldn't be more excited. Trying to keep up with all of you is much, much easier than trying to drag all of you along with me, and I'm humbled that so many of you use and take value from this application. The fact that we've had so many rough patches and problems but still maintain an Android Market and Chrome Webstore rating of over 4 stars speaks volumes about our user base.
Speaking of rough patches, it's time to address our current one. I'm going to start off with an apology, and move on to what's going on and how I'm addressing it, and finally finishing up with what I've learned and how I'll be improving in the future.

First, the apology. I planned out the version 2.0 upgrade in my head, mapped it all out, put it on a timetable. There was an exciting announcement I had planned to announce simultaneously, but that I've now delayed until this can all be sorted out. The fact that we're having such widespread issues is my fault entirely; I gave the wonderful beta testers only a few days to play with the Android app, and was fixing these and cutting features right up until the release itself in an attempt to keep to my self-imposed schedule. I was determined to release something that night, after working for months, and I rushed it and botched the job. I apologise for the inconvenience that caused and am hoping you'll stick with me as I sprint to fix it. I understand if you don't. I failed you, and I apologise.

The problems I've seen reported so far, and their respective fixes/causes (or my best guess, at least), are as follows:
  • People are nervous that the Chrome icon disappeared. This is, in fact, not a bug but a feature, and something I should have communicated more clearly.
  • The Android application shows an empty popup when a link is sent, and the link never reaches Chrome. I suspect this has something to do with how I'm handling caching on the server side, and I will be attempting to trace the exact source. Anyone that experiences this, I would love a few testers to work with me on it. If you're interested in trying things out for me, email paddy at android2cloud dot org. I would appreciate any help I can get, as I cannot seem to reproduce the problem myself.
  • Silent Sending no longer functions on the Android app. This, I am almost certain, is a result of the switched handling of the settings. It should be an easily fixed issue, and I'll roll out an update as soon as I have one available to me.
  • Chrome keeps opening the setup window, even after you've gone through the setup process once. From my understanding of this, people are getting to step four, a window pops open to authorize their Google account, and they assume they're done. You actually need to return to the setup screen, and click Continue >> one last time. After that, the setup page will disappear. I'll be issuing an update soon to make this clearer.
  • Everything seems to work fine, but Chrome fails to open the link. I'm hearing this mostly occurs after Chrome has been reopened. My best guess is that there's some difference between how the extension connects to the server during normal startup vs. how it connects to the server after being set up. I'll be finding the specifics behind this and correcting it as soon as I can. Until then, apparently, going to chrome-extension://hkelgkihphkegiaagbcgglfidabmgkgp/setup.html and going through the process again will get it working for that session, at least. A pain, and one whose removal is my highest priority. If anyone experiences this, I'd love to see any errors their console reports from background.html, and what background.html holds in the config and channel variables. Emails to paddy at android2cloud dot org are greatly appreciated.
  • I've had a single report of a memory leak, and am diligently trying to find where one would occur. The user (the generous @shawn) has agreed to continue using the extension, and will help me track down the problem if it occurs again. I've heard no other reports of this but am remaining alert for it. Anyone who experiences it, I'd love any diagnostic information you can give me, or even a notification that you experienced it, so I can find out how widespread it is.
  • I've also had a single report of a force close. I've no idea, as of yet, where in the Android application this occurred or what could have caused it, but I'll be trying to get some diagnostic information to get it sorted.
The fact that there are so many errors and problems upon release is an embarrassment and a travesty, and one I take full responsibility for. I cannot apologise enough for the inconvenience it has caused users, nor can I show my appreciation for the users who are supporting us even as they weather these problems. The fact that we have four star reviews saying "Great application, but latest version broke it." is mind-boggling to me. You're all understanding and generous, and I thank you all for it.

To ensure this doesn't happen again, I'm devoting some time to developing a release schedule for the next major release, a release that will be much less of a rehaul for the software, but should therefore be implemented without error. This schedule will only run up to the beta; therefore, the final release should never be rushed again, and everything should be sufficiently beta tested. Furthermore, I'm going to learn test-driven development, something I have no experience with. This is where my lack of Computer Science background hurts me, and something I'm working to remedy. It will take me time to build up tests for the software, but when done, it should assure quality and well-tested software is released every time, making situations like this far less likely.

Again, you all have my apologies and gratitude.