A few people have been asking me when Mides is going to get its bugs fixed. A few others are asking about Git & Subversion, yet a few others have been asking me about code completion, syntax highlighting and shortcuts. I thought I would take a moment to post about what I have been doing, what the future of Mides looks like, and what I hope to be doing.
A few months ago, 5 to be exact, I thought I was in a stable place, where the coding challenges were hard, but not too hard, I worked with some great people, and we were having a great time. Well, most of that was true, unfortunately the stability thing became an issue, and I started looking for a new job. I was contacted by an awesome founder looking for a technical co-founder to help revolutionize the concept of whiteboarding with a strong focus on usability. I accepted, and am now the CTO and Co-Founder of ZigZag.
Since we are a lean / agile outfit, we have an iteration loop that consists of building stuff and putting it in front of customers, and repeating. I am having so much fun, and there is so much to do that there just isn’t time to do anything else. When I was working at my old job, the breakdown looked like this:
My Brain Capacity Before ZigZag
I just had the ability to do a ton more stuff, and one of the things that I really wanted, and still want to do, is make it possible to do serious development while mobile. The thing is that right now I just flat out don’t have time to work on it. My available time and space for working on other projects looks more like this now:
Brain Capacity After ZigZag Board
So what do I see as the future of Mides. Well, after ZigZag gets funded, which will take a ton of work, fortunately less from me since I have a non-technical co-founder who is awesome at sales, and we can hire a few quality engineers and usability people, I’d like to come back to it. Its a tool that I currently use for working on our RoR web stuff, and since we use GitHub, pivotal, and AWS, I’d like to build in more integration with those tools. I originally built Mides so that I could be more efficient, and I still see it as a tool for doing that. Some things that likely will go away are plain old FTP access. It is too complicated to support FTP, and I can’t find a library that isn’t encumbered by the GPL, so that probably will go away since I have to write it all from scratch for it to work.
What will stay, and get added? Some other things that I would like to add include code coloring, git and subversion, more RoR support, a shell to work in AWS, a service to compile and run code in an on-demand instance, some other goodies like that. I am currently thinking about that kind of stuff in the few seconds between when I am hacking Erlang, and Objective-C… Granted those seconds are precious and hard to come by, so while I am not saying that I will be dropping work on Mides entirely I am not going to be doing any sort of hard core coding on it until ZigZag Board is completely off the ground and flying, which I hope is soon, I am putting everything I have into it.
How I Feel Every Day I Get to Work at ZigZag
The good side is that when I do start working on Mides again, the quality of the implementation will be much higher as my Obj-C skills are improving by leaps and bounds. I am constantly amazed by the stuff that is possible on the iPad and iPhone, not that it isn’t challenging to work with, but it is an awesome platform.
Changing jobs was a great decision for me, I am challenged by something new and different every day that I log in. I was atrophying before, and now I find myself asking myself what is important to do right now, and what can we ship right now so we can learn from our customers. It is a much healthier place to be in, even though it is tinged by paranoia about money. I am becoming a much more focused developer, and working with a co-founder who can clearly articulate his vision for the product, and who is also well versed in lean / agile, is hopefully going to make me an even better leader than I have been in the past. Unfortunately my other projects will have to take a seat way, way back in the balcony.
Future Plans for Mides
I hope to get through even some of that for Mides eventually, if I can, then my vision for Mides will be complete. It might take a couple of years, but I still want to do it. Building tools is extremely difficult, not the least because developers are frequently not willing to pay for tools ( thanks Sun! ), they are incredibly critical of said tools, and getting the usability story right is nearly impossible. That non-withstanding, I have learned a bunch from people using Mides, other developers are typically very clear about bugs, and the offers of support and help have been wonderful. Well, that’s the news, I felt I should update everyone on the status of Mides. It is definitely a side-project, and is likely to remain one, I can’t really see any reasonable business behind it, it is fun to work on, and will continue to be.
A few days ago I submitted Mides 1.8.5 to the App Store with some cool features and fixes to a number of minor bugs. I was happy when it was approved and then went live. Unfortunately, there was a bug in the release for iPad users, a hidden dependency that was broken with the changes that I made to the file view, and as a consequence, file uploading was broken. The workaround, to type the file name into the now blank rename / upload screen will work only if the file resides in the root path, any files in subpaths will upload a file called (null).
While there is a partial-workaround, and the fix was a two-line change to a single class, it is still what I consider to be a severe bug. As soon as a customer let me know about it, I fixed it and submitted it to Apple, emailing wherever I could to try to get the fix deployed to the App Store quickly. I am super grateful to my customers for letting me know right away that there was a bug in the update.
I guess what I really want to say is that as a one-man shop, especially one with a day-job, it is extremely difficult to move quickly. The approval process makes it extremely painful to keep short release cycles and iterate as I like to, because there is a risk that you will have a severe bug. On the web, and elsewhere, recovering from this is pretty easy, just push an update, boom everyone has it. With the App Store I can’t, since the review process can take a while, and while you are waiting, your ratings and reviews get destroyed. Very few people go back and update their one star reviews after you have fixed their problems, so your ratings are unrecoverable.
So I am going to slow down the cycle of releases, and allow myself adequate time for rigorous regression testing. My hope is that this should improve the quality of each release. I think this is Apple’s intent and desire, and maybe they are right. As for me, I have learned my lesson, this is shrink wrap, not web development, and I will think about it that way. I’m sorry for anyone who is experiencing a hardship due to this bug, and I hope the fix is approved soon.
The Mides 1.8.1 release should have fixed a bunch of the startup, and SFTP stability issues, but there was one lingering issue. The endless keyboard popup issue. The fix is to disable the “Twist to complete” feature in the iPad settings app.
The reason this is an issue is that the accelerometer values for the iPad are way more extreme than the iPhone due to it’s size, so the code that I had to ignore small movements of the device is not working on the iPad. I will remove twist to autocomplete for the iPad in a future release as it doesn’t make sense for this device, and since there is now a button for it.
This issue shouldn’t affect the iPhone, it is an iPad only issue. There was no way to find then issue before I had hardware since the accelerometer is not available in the way I need on the iPad simulator. But at least there is a good workaround.
Today at around 9 AM my opinion of the Apple iPad changed. In one of my previous blogs, thoughts on the apple iPad, I commented that I wouldn’t buy the iPad if I weren’t a developer, and if I hadn’t I would be seriously disappointed that I hadn’t.
The first thing that I noticed was that the iPad feels really sturdy. It feels as strong as s piece of solid aluminum. The on screen keyboard is pretty good, in fact, I’m using it right now to create this post. But using the Apple Bluetooth keyboard with it makes it clear that this thing has the ability to replace my laptop for most of the reasons I carry one. My own app looks great, although not without it’s minor bugs. A friend found a way to get into an endless loop with the code completion dialog. It took me a while to figure out a work around, it turned out to be changing the orientation.
Browsing the web is just …. Natural … There is a quality to using the web on this that is difficult to describe, but it is like nothing else. I would recommend that if you can wait, the 3G version would be better if you don’t mind AT&T, and you don’t mind paying them extra. If you do not have an iPhone, it may make sense to pay the extra. If you do have an iPhone already, then it just doesn’t make a ton of sense to me. I will probably get a MiFi somewhere and just sign up for a contract.
I would recommend getting a case as well. While I am not afraid that it will break, it is bigger than it feels in your hands and as such is a pretty likely candidate for some unintended bumping. The battery life is stellar. I don’t even think about it, and at the end of the day I still have 47% power.
The app situation is pretty unclear. I added a bunch of apps to my iPad hoping that more of them would have been optimized for the iPad. But it seems that most developers opted to create completely separate applications for the iPad. I was going to do that as well, but I didn’t want the headache of having to maintain two separate applications with the same functionality. The doubled applications range in usability. I found that most of the applications were very usable in their iPhone form.
In summary, my opinion has been changed. The iPad is a game changer. Mides on it is excellent, especially with the bluetooth keyboard. The iWork suite is fantastic. I love this form factor, it feels like you are playing with the future. It is also awesome to be able to stream episodes of Top Gear on my iPad with the Netflix app. I am glad that I got the 16 GB version, I really find that I don’t need more storage since I always have my iPhone with me, I haven’t found that I run out of space, especially with the convert to 128kbps AAC option in iTunes 9.1. Since this is a first impression, I’ll check back in after my experiment to see if I can live with the iPad instead of a laptop for a couple of weeks.
On Thursday I submitted Mides 1.8 to Apple, hoping to get it in for the big launch of the iPad store. However, it got kicked back to me because the reviewers approached it in a pattern that I hadn’t tested. They exposed a bug related to some #ifdef code that had hung around after my refactoring.
While I am disappointed that I didn’t make it for the launch, I am happy that Apple found that bug before my customers did. I have since fixed that bug and fixed some other minor issues related to SFTP. So all in all, this release should be a really good one. Unfortunately I’ll have to wait a few days to resubmit until my iPad comes in the mail. It’s better to test on real hardware. I could sit here and pretend that I didn’t want to release until I had the device to make sure that I had everything just right, but I am too honest for that.
I think that this is a huge launch and would have loved to be there at day 1. Suprisingly I just missed the 2.0 launch in much the same fashion. But I was in the store about a week or two later. Fortunately we won’t have to wait that long this time.
The announcement that Apple was accepting apps before the hardware shipped caught me by suprise. I thought they would make everyone wait until the device was out. 1.8 is a very ambitious release, trying to get SFTP and the iPad refactoring into it.
I’ll probably keep plugging away on 1.9 until I can resubmit my 1.8 branch. Mides on the simulator is awesome. I can’t wait to load it up on my shiny new iPad, I can’t wait for everyone who is supporting and using mides to do the same!
Mides actually will make the launch of the iPad app store. In fact, it is in there already! I am super jazzed to have a launch title on the AppStore. The iPad version is pretty cool. Just having more screen real-estate is huge. I hope that there are no strange bugs. Once I get my iPad on Saturday, I’ll sanity check it and try to fix any bugs that I notice. Apple did pretty good due diligence on the app though, so I figure it is OK.
A few days ago I completed an analysis of what my profit and loss looked like for both of my applications. What I discovered was very disturbing, or would be to any entrepreneur.
I have to date put around 200 hours of work into Mides and around 90 hours into CycleMetrics. So far I have made less than $2,000 total on either of them.
Part of this is my fault, I started out with something of a flawed concept with the design of Mides because I was in love with the idea of nested code, self closing tags, and closures. This ended up eating away almost all of the devices’ memory, and was so recursive as to be nearly unmaintainable.
So I killed my darlings, went in for a heavy refactoring of the code without nesting, and ended up with a pretty decent mobile IDE.
However, at what my hourly rate is at this point in my career, based on my salary plus benefits, I am as of now, with all of my original plus ongoing effort into the software, about $30,000 in the hole on Mides, and $10,800 in the hole on CycleMetrics.
When I launched my app, shortly after the app store launched, I thought that I would be able to make back my money in 2 years and get positive. It has been 2 years, and I’m nowhere near making my investment back.
This is mostly O.K. since I have an awesome job, and I’m not missing a house payment or anything, but I think it is unwise to basically give away software that you keep shelling out effort on. I can’t let it die either, that doesn’t make sense, I love the idea of programming on your mobile, and I love the idea of being able to code on the apple tablet even more.
I also hate ads, and don’t want to do the ad driven thing. So while I’m still subsidizing the hell out of Mides at $9.99, it isn’t the slap in the face that $4.99 was.
So as a result, I have decided on $9.99 for Mides. I am putting in a fair amount of work to get to the tablet in an intuitive and sane manner, I also have a bunch of features planned. Some of which have been suggested by the awesome community at getsatisfaction.com/mides, and others that fit in with my dream of Mides.
I am still not sure what I want to do about CycleMetrics, but I have some online features that should be able to drive more reveneue for me. I don’t want to go to ads, and I don’t want to lock users in or try to steal their personal info to try to make a buck on it. That just doesn’t jibe with my philosophy.
We’ll see if the market thinks Mides is worth $9.99. I still think it is worth way more, but that is because I see it as it will be, not as it is. If people don’t think it’s worth $9.99, then they will later, but I can’t promise to keep the price there as I struggle to make it my dream of a fully featured mobile development environment.
Another issue I wanted to address with a new feature is that I always forget the argument, or the exact PHP method call that I want to use, especially around MySQL. I already had the documentation in there, but since it is a full-text search, it tends to take a while. So I added a new feature that allows you to look up just the method signature, that is the method name and the arguments to the method. I didn’t want to put a button in there for this, it just didn’t seem right. I tried for a while to come up with something usable, and I think I have figured out something that works. You just need to twist the phone to the right ( or left ) to do the code-completion on the method. If the text before the cursor matches one or more PHP method signatures, then it will add that value in context, in line into your code with the argument types. If it matches more than one, it will display a modal dialog that will allow you to choose from the top 5 PHP methods that match what you have typed.
One fix that a customer asked for on getsatisfaction.com/mides was that I make tabs parse properly. I also added that in Mides 1.7, now your tabs will be properly displayed. To create a tab, just space 5 chars into the document.
I am adding features both at the request of customers on the burgeoning community on getsatisfaction, as well as through my own usage of the product. I probably won’t implement all of them, but please keep the suggestions coming. They help tremendously. Some of them are really tough to implement, but if they make it more usable I’m all for it.
One of the main issues around Mides is moving files onto and off of the phone, Apple hasn’t made it easy, and FTP is not the best solution, it is a nightmare to support, and difficult for users to set up. I thought about having a small application that you could install on your Mac and PC that would make it much easier to transfer files with, but this didn’t seem like the best solution either. I am actively thinking through better ways, but nothing so far has really stuck.
At any rate, I am constantly trying to make Mides more useful, I know it has been rough, but I’m glad to see that some of you are starting to get real use out of Mides. I hope to keep making it better and eventually to rival and in some ways improve upon the desktop coding experience.
I have been getting killed in the reviews for the past couple of weeks. Probably deservedly so. I wanted to drop a brief update as to what is going on with Mides. After exploring the concept of including a PHP interpreter to debug scripts, I have decided that at this time it isn’t practical. There are too many problems and roadblocks to implementing it, not to mention that it is only palatable, performance wise, on the iPhone 3GS, which many people do not have at this time.
What I have decided to do is to work on additional features to improve the functionality of Mides as an IDE. I have some code completion features I am working on, improving the performance of the documentation searches, and adding line numbers are a few of the improvements that I have brewing for the next release of Mides.
I appreciate all of the awesome feedback, and am working to implement as much of it as I can, or at least as much as my day-job will allow.
For the past couple of months, I have been struggling to write a PHP interpreter for an upcoming Android version of Mides. The tokenizer was fairly easy, building the Abstract Syntax Tree was relatively uncomplicated, but now we come to actually writing the executor. This is giving me pause.
I totally understand why Joel Spolsky says that there are two classes of programmers, one class that sort of hacks their way through life, and another that writes compilers for fun. I guess I am trying to blunder my way into the latter class. At first, it didn’t seem to be so difficult, but eventually it has gotten so hard that sometimes I feel like just dropping the whole thing entirely. However, when I feel like bashing my head into the desk, and / or throwing my MacBook Pro out a window, I know I am on the right track. That is how I felt when I was trying to learn Java and Objective-C a few years ago, or attempting to understand domain modeling as it pertained to Object Oriented Programming, before understanding Object Oriented Programming.
I guess these are just things that we all must get through, I also see why most CS majors don’t every actually finish their compilers. I, however have a dream that I can develop web applications without being encumbered by any sort of connections from my handheld.
The first part that slowed me down was that I was trying to approach the executor by compiling the program to opcodes and then running them against the system, sort of like the asm function in C. That won’t work with Dalvik, at least not in an elegant way. Then I asked this question on StackOverflow, and the answer made me think; I don’t think I quite got it immediately, but now I understand. It basically comes down to a large hashmap of keys ( variable names ) and their values, ( the statements to evaluate into them ). OK, I get that, but the new problem I am facing with the top-down recursive descent parser is how to handle classes and functions efficiently.
I guess what I am understanding is why PHP has taken more than a couple years or more to get where it is today, why Ruby still has quite a few oddities to the language, and why Python basically needed a complete rewrite for version 3. This is not easy stuff, but nothing worthwhile is. I have never considered the possibility that this may not fully work in any practical sense. When I do release the Android Mides, the PHP parser functionality is likely to be beta. I did look at the code once for Quericus, but without some sort of object diagram, I can’t really understand what I am looking at. Much of the code is mixed up with the server code so it is difficult to figure out what is doing what. I have read a few pages of the Mak book and I’m thinking about buying it just to see how he implemented the parser, but I am not sure it will do me any good.
I may consider creating my own language for use with Mides, and then compilers that generate PHP and Ruby source code from it while I work on versions for Apache, Nginx, etc… In lots of ways I think it would be much easier, and I could offer type checking and other things from compiled languages that help build more robust code. I would maintain the PHP documentation that is present in Mides, and naturally you could FTP up the code to your server and test it there. But I think that would be copping out, and I don’t like to have something like this beat me. I do however have to realize that PHP wasn’t built in a day, and that this process will not happen immediately.
I keep asking myself what would Steve Jobs do, and the answer I keep coming up with is that he would go his own way, well I’ll keep stewing on it, and hopefully the end result is that I will become the sort of programmer that Joel would want to hire, although somehow I doubt I could ever achieve that level of software engineering excellence ;-).
The primary problem with my iPhone, G1, iPod Touch, etc… Is that they are too small and have too limited a battery life. What I have been hoping for, for a very long time is a single slab tablet computer, sort of like a big iPod Touch with a 3G / LTE modem, a soft keyboard, and an open set of programming APIs so that I can make whatever applications for it that I wish. Ideally it would have a dual core ARM CPU and great battery life, plus the option for a physical keyboard, well it seems that while I was hoping that Apple has done it, Always Innovating has taken matters into their own hands:
The TouchBook will run a variant of an open operating system called OpenEmbedded, a variant of something called the Angstrom Distribution, which I suppose is a distribution of the OpenEmbedded OS. Although I have only seen the you tube video:
It seems to have the right stuff to be successful. At $299 for just the touch part, or $399 for the touch part with the keyboard and second battery, the price is right. The 3D in the video appears to be sufficient to compete with the iPhone, but what it will likely come down two are a couple of things:
Are the APIs polished, or are they as disjointed as the normal Linux programming APIs
Is Apple going to do a large form factor iPod Touch
If Apple is going to do a MacBook Touch, or a MacBook Mini, even at $499 or more, that can run the current crop of iPhone apps as desktop widgets, it will make it difficult for normal people to justify buying the TouchBook over a big iPod Touch. Hax0rz, evangelists, early adopters, and general geeks like me may buy the TouchBook, but it is going to be an uphill battle for widespread customer adoption with yet another programming environment for developers to adapt their iPhone apps to.
On the other hand, if they were to make a pre-installed Android option available that was running Gnome or something, but could still run Android apps with little to no modification, in the same widget system as was described above, it could be interesting.
I respect what these guys are doing, its something I have thought of doing many times myself, and I might even spring for one if I get a little personal government bail-out money, but I just am afraid that I will crave whatever Apple makes. Even though I have switched my personal phone over to a G1 and love it, and love coding for it, I still pine after the iPhone, some things are just simpler. It really has nothing to do with the G1 hardware, while it is ugly as the offspring of sin and feces it functions adequately. Its the OS that seriously lacks polish in places, and the unavailability of any sort of desktop synchronization mechanism is difficult at times, especially since the iTunes app doesn’t always play ball when dragging large numbers of UN-DRMed files out.
I suppose Google could modify gears to allow Android to tether to some kind of web app / web management system, that would be interesting, but I see that as being in the distant future. Love it or hate it the iPhone and the iPod Touch, Cocoa Touch is just way ahead of any of its competitors. If Apple would loosen up on the app store policies, allow 3rd party libraries and scripting languages on the iPhone, I think most of the competition would disappear overnight. You’d still see the Linux guys pushing stuff for the fringe crowd, but Apple would have the consumer market locked up.
I think that the App Store situation is what is going to hurt Apple the most. I am only developing for Android because I can’t flush out my app on iPhone, not because I can’t or because its obscene, but only because Apple doesn’t allow PHP, Ruby, and Perl, which is what my application is all about. I can’t believe I am the only one who is playing by the rules and doing what Apple is making me do, develop for competing platforms. I’m sure Apple doesn’t and wouldn’t care, my application applies to only a subset of a subset of a subset of the general population, web developers, and isn’t likely to bring in a ton of money for them or me, but I do it because I love the concept of building web apps while mobile.
The TouchBook is really perfect for my application, so after the Android release, I guess I’ll be doing it again for the TouchBook. Here’s to hoping people buy it, and that Apple doesn’t announce a large iPod Touch at WWDC.