Friday, December 10, 2010

New playback controls (v2)

Slowly working on the look and feel of our playback controls.

Monday, November 15, 2010

New Playback controls

Hello everyone!

Just wanted to show off the new playback controls. They're integrated into one independent Qt Widget. They're 90% functional (still need to write a few routines, and some testing still needs to be done) and user friendly:
  • Clicking on an area of the seek slider does not jump to undefined locations anymore, but to the exact position you want. This was possible thanks to the slick event filtering code in Qt.
  • The shuttle slider now shows a tooltip telling you the current playback speed.
  • The seek slider shows the exact time corresponding to the mouse cursor position (a-la Youtube(TM) seeking)
  • The Play/Stop button has been magnified for easy mouse access.
  • The Mouse wheel has been disabled on the seek slider and the shuttle, but enabled in the volume and the jog.
Behold, ladies and gentlemen, our future playback controls!

Saturday, November 13, 2010

I'm back!!! (kinda)

Dear everyone: After having to bear what seemed to be the worst year of my entire life, suffering the flu, unemployment, a huge debt and personal relationships problem, I have a couple of good news for ya.

1) I have a stable job!! And a very good one, to be honest. It doesn't give me too much free time, but it has helped me to develop my programming skills. My latest toy was a JSON to HTML template engine (this project was actually what led me to the next news).

2) Development on Saya has been restarted!... kinda. Don't get your hopes up, Saya is from now on considered a long-term garage project, with very little chances of succeeding. But I'm committed to at least deliver a usable GUI for a video editor. Instead of focusing on the multithread processing and video handling, I'll start over with the GUI now. Later, if the GUI seems good, and the widgets work, I'll work on tying Saya to an existing video editing framework.

3) The latest development on the UI is the playback control, now with a jog dial for easy frame skipping:

(Yes, the buttons are ugly, but later we can work on that). Next: Making the  shuttle control (to the  left of the "Display" text) pretty, and functional.

4) If you would like to join the project and help me perform code archaeology on the project (and find out what the hell I was doing on some files), you're welcome to join.

See ya!

Sunday, January 10, 2010

I'm sorry to inform you that the project is officially dead.

Dear fans and enthusiasts:

As much as I dislike doing this, it's time to accept reality and face the fact that I don't have any time left to work on the project.

Saya has been really a great project for me, and it filled me with hope and fun. It was a great garage project, but it lacks something critical for an open source project: Leadership.


Let me tell you the story of why the project "failed". Actually, it's not the project that failed, but me. It's not about Saya but about me, and I hope that my failure will enlighten other Open Source developers out there, so that they can avoid making the same mistakes that I made.

No, the project didn't fail. It's not the project's fault. It was my fault and mine only. I want to be clear on this: I still believe that the specs are good, and that the project is viable and could become successful if I had free time to dedicate myself to it (if I received, say, a million dollars, after 6 months I would be able to finish my daytime job and dedicate myself completely to the project). I say this because I want to defend the idea behind the project (using C++ and cross-platform libraries instead of a development language like Python with an unstable spec and/or linux-only libs) and emphasize that the reason why the project "failed" (again, in quotation marks) is not because it was a bad idea, but because I lacked what it took to make it grow and mature. It was a project with a great potential, and I failed to take good care of it.

If someone wants to take my place and rewrite the main part of the project from scratch, by all means, please contact me. It will take a lot of time to understand the project, maybe even a full year, but once you do, I'm sure you'll be able to do a better job than I did.

So, here's the story:

The project was technically unstable when a personal crisis arrived (I got sick with AH1N1, all in the middle of the economic crisis of 2008/09, WHILE I was unemployed - go figure). You could say that the project got infected with the swine flu and died. Worst of all, we were in the middle of a heavy refactoring (switching from wxWidgets to Qt) and I was fixing various bugs in the still-under-development audio/video library.  How could I compare the circumstances? Imagine you're performing a heart transplant on a very weak patient, and then an earthquake arrives and the hospital is in a blackout. You're the only doctor around and then you get hit by a lamp that just fell from the ceiling. You survive, but the patient dies. This is what happened to Saya.

As an apathetic open source programmer who had no interest in the economic world, Wall Street and all that, and not living outside the US, I had severely underestimated the consequences of the economic crisis. I thought that with my technical skills, I would be able to easily get another job. Welcome to the real world. This, and due to family situations, I wasn't able to remember that the project even existed. It disappeared completely from my depressed mind. See, I lived with my parents, and I discovered we had a huge credit card debt (not my fault). Being unemployed, all this gave me a nervous breakdown around July/Aug. 2009, which only made it worse. So the project was completely out of the radar for me. All I could think about was to survive, get a job, get it fast, work overtime to pay some debts (which we still have), and now save enough money to get my own house and find a girlfriend (did I mention I got hit by the mid-30's crisis, when I hadn't even considered getting a girlfriend?).

In other words, the worst of Murphy's Law applied to me. What would  go wrong, did go wrong, and it went wrong when it was the worst moment to go wrong, around the worst circumstances, and when going wrong would have the worst consequences.

It would have been different without the AH1N1 outbreak, without the 2009 economic crisis, without the family credit card problem and without my depression. Perhaps the project would have reached 1.0 by now, like the Openshot Video Editor project did.

So, after clarifying the personal circumstances around the project, I'd like to go to the technical part and my mistakes when starting the project.

Around a year and a half ago, I started the project from scratch because I needed a working cross-platform video editor. After starting it, I realized that to start an open source project required much more than technical skills. It required human skills, i.e. leadership.

It took me a lot of effort to design the website, the project infrastructure, i.e. class diagrams, sell the idea to other programmers in forums, and gather a team.

For the first few months I welcomed enthusiasts, some of whom, unfortunately, lacked the technical skills and/or the perseverance that an Open Source programmer requires. Some of them just wanted a fun project to participate in; others weren't committed and never attended the monthly meetings. Others just wanted a nice stamp on their resumes. So it took me several months to gather a working team.

Then came the decision to choose a toolkit.  Originally, I had chosen wxWidgets because of it being cross-platform. But it seems that this toolkit isn't quite welcome in the Linux world. It's the "ugly duckling" of GUI toolkits. People just don't take it seriously, and its community is somewhat isolated. So I realized the need to switch to Qt (which by now is stable, LGPL and with tons of features). It was needed, otherwise we would end with a crippled UI - something you don't want to deal with in a Video Editor.

Another decision I made was to choose the Audio/Video toolkit. Around the time, I was forced to choose between GStreamer+GNonlin and MLT. Having glanced at  them, I found that the codec parts of the toolkits were tightly coupled to the editing parts. It was all or nothing, and which toolkit I chose would dictate the architecture for many of the classes.

So I decided to make a wrapper and stay only with the codec parts. The wrapper was going fine, and I was technically proficient to make a good wrapper and at the same time develop a low-level audio / video library that handled the streaming. I said proficient, because I was in the middle of doing all this when the crisis arrived. I could never finish the core library for the project.

So, what was my contribution to the project's failure? After studying several leadership and economic books (kudos to Robert Kiyosaki for his Rich Dad Poor Dad series of books, they made me understand many things we all need to know), I realized that starting an Open Source Project is 99% similar to starting your own company. If you want it to be successful, that is.

Before I start with this comparison, allow me to mention the "bus factor". A project's Bus Factor is an irreverent measurement of concentration of information in a single person, or very few people. The bus factor is the total number of key developers who would need to be incapacitated, as by getting hit by a bus, to send the project into such disarray that it would not be able to proceed. Getting hit by a bus could take many different forms. This could be a person taking a new job, having a baby, changing their lifestyle or life status: the impact would have the same effect. In my case, it was the flu, the crisis, and our personal economic problems.

So yes, at the time, Saya had a Bus Factor of 1. I was aware of this. I needed to finish the audio/video framework and finish the Qt conversion as soon as I could. Otherwise, the project might not make it. And it didn't.

Having said this, please let me continue with the similarities between an Open Source project and a Startup.

According to Robert Kiyosaki, for a company to be succesful you need the following areas:
  • Product
  • Legal
  • Systems
  • Communications
  • Cash flow
Product: The product is the project, as a software. It was in the process of being developed.

Legal: In this, the Open Source / Free Software community has a great advantage. It has the General Public License, and the aid of the Free Software Foundation to deal with companies stealing our code for their profit.

Systems: This is a fundamental part of an open source project. In a company, the system is the office and the technical parts of the product / service. For open source projects, you need to develop good specs and documentation so that everyone can understand the project in case you're unavailable. You also need to have a website, a forum, a good issue tracker like Sourceforge or Berlios, and possibly a wiki.

Communications: Another important part. It covers part of what I mentioned under "systems", but also needs you to be a good salesman and sell the idea to others.

Cash flow: Without a good cash flow arriving to all the team members (which, in case of a company, it comes from the sales), the project is doomed to fail. No cash flow, no time to develop. If there's no time to develop, then all the other parts of the project start to crumble: People stop going to meetings, they don't read their emails, important issues stop being addressed, they just don't have time to fix bugs (patches welcome), and it's only matter of time until the project dies.

As you can see, in Saya, everything was working so far. The design and implementation was going well (product), we were using the GPLv3 (legal), we had a nice website and bug tracking system (systems), we had an IRC channel and held monthly meetings, and the blog has been receiving contributions and support from all around the world (communications).

And then we come to cash flow. I won't need to repeat myself, but you can understand why everything went down.

If you start an Open Source project, please take consider these hints:
  • Make sure you got a stable income. This is especially important if you're the project leader.
  • Make sure that the people you gather at the beginning are committed to the project. Even if you start with only one good contributor, having that one is better than having 5 or 6 people that you delegate tasks to, and then don't show up. Otherwise you'll lose several months reteaching what you had to teach the people who left the project.
  • Do NOT try to do it all by yourself. It's much better if you have a partner who can understand your technical view of the project, and can assist you with the modules you write. Make sure the project has a bus factor of 2, at least.
  • Do spend some effort on getting donations. Don't wait for the project to succeed to then ask for donations. First comes the cash flow, then everything else. Tell the donors beforehand that it's not probable the project will survive, so it's a risk their money will go to the garbage. But still, if you believe the project merits having a good donation income, train yourself in sales and practice. Find people who want to contribute. Go search for philantropists who can give the project a constant cash source. At least for you, if you feel you're going to have economic troubles.
  • Make sure your life is stable at the moment (no emotional problems, no economic problems, no pending baby to arrive), at least until the project reaches critical mass.
A closing note:

It is very, very sad for me to cancel this project, but I can't lie to myself anymore. I don't have the time to work on the project, and to be honest, I somewhat lost interest. Right now I have to focus on paying those debts and get a house for me and my future wife and children, and ... of course, on getting a wife in the first place. I'm too old right now, around 35, and time is running out for me.

I really can't express my grief in taking this decision. The project had so much potential, it was like my own child. The worst part is knowing that after given so much hope and ideas, I saw the project turn to dust in my own hands. It's very painful. I want to say "no, I won't give up, the project needs me, I still can do it", but that would be fooling myself and giving false hope to others.

To the person who donated $20 to my Paypal account, I'm very sorry. I thank you for your donation... if only I had 1000 more people who donated when I needed that money, the project could have made it. But now I'm not able to continue on the project, even if I received that million dollars. I signed a contract and I need at least 6 months to be free to work on the project again... *if* I get a good donation to be able to work full time on the project for at least two years.

At least I'm happy that the Openshot Video Editor, has matured enough and reached version 1.0. Congratulations to you.

Having said this, I thank everyone who contributed to the project. Thank you, and farewell.