J5’s Blog

August 23, 2010

D-Feet moved upstream to GNOME.org

Filed under: D-Bus, Redhat, usability — J5 @ 1:03 pm

Since GNOME’s move to using git and the fact that upstream is where all the cool kids hack I have decided to move D-Feet to the GNOME servers to make it easier for contributors to contribute and users to file bugs.  That doesn’t mean I’m going to fix every feature request but it does mean others can help make D-Feet more useful.

I was sort of blown away that my humble little project was being used by more people than I had realized.    I was even more amazed that it was mentioned in the literature for the GNOME Developer Training Days at this year’s GUADEC.

That is not to say I think D-Feet is a particularly shining example of how a D-Bus debugging app should be written.  It kind of sucks but it does fill a niche, which is why I am starting a new design process for potentially developing a better D-Bus debugger.  Here is the hitch, I don’t want feature requests, I don’t want your bug reports (those can go into bugzilla), what I want is your workflow.  How do you debug your D-Bus apps?  What are the pitfalls, the annoyances, the most repetitive tasks that you encounter?  Please head to the Workflow Design page and add your own voice.

D-Feet is a D-Bus debugger written in PyGtk+ by John (J5) Palmieri

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

March 10, 2010

Buy concert tickets while floating in the clouds

Filed under: Recreation, travel, usability, wine — J5 @ 10:32 am

Ladies and gentlemen, God Street Wine is getting back together for a couple of shows this summer and their fan club presale tickets go on sale in a half hour. I was bummed because I was getting on a flight to Austin for a friend’s wedding, right before ticketing opened. Well, I am on that flight now and apparently all American Airlines domestic flights have WiFi. Technology can be awesome sometimes (usually when it makes it easier to do every day things). Let’s just hope my battery doesn’t die before I can snag a few tickets.

Note: Fedora connected flawlessly. Bar none, we have the easiest networking setup out there. Dan Williams has done a kick ass job with Network Manager!

Update: Just purchased six tickets for Friday and six for the Saturday shows! The money goes to a good cause and I have plenty of friends who will come back to NY for this.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

January 13, 2010

It’s all about the API

Filed under: AMQP, JavaScript, messaging, usability — J5 @ 11:28 am

If there is one thing I learned when working on D-Bus is that if you build a decent API, people will use it. Right now I am working on Kamaloka-js – JavaScript bindings for building JavaScript native AMQP clients. As AMQP starts moving towards 1.0 a new high level API, based loosely on JMS, is emerging to bridge the gap between 0.10 and 1.0. Previously with AMQP you pretty much worked with patterns on the protocol level which meant when the new specification came out you would pretty much have to rewrite to the new API. The new messaging based API seeks to decouple the protocol from the API for the most common use cases.

As I implement the JavaScript API there are some decisions I must make regarding how closely I stick to this new API as implemented in other bindings. Lets look at how the new API receives messages in Python:

...

conn = Connection.open(url.host, url.port)
ssn = conn.session()
rcv = ssn.receiver('amq.topic/org.j5live.demo')

while True:
    try:
        msg = rcv.fetch(timeout=timeout)
        process_message(msg)
        ssn.acknowledge()
    except Empty:
        break
    except ReceiveError, e:
        print e
        break

If you notice the API is very much mainloop based. With every loop we fetch a message off the local queue. If there are no messages, fetch works very similar to the way poll does for sockets – sleep until woken up by network traffic or a timeout. The issue is if we did this in JavaScript we would block the UI and event propagation (newer browsers do expose threading but that feature can not be relied upon in all browsers). If you have ever mistakenly created an infinite loop in JavaScript you will understand how bad this is.

There are two options I see here, keep the fetch method and require the programmer to use timers to read from the local queue or, as currently implemented in my own high level API, attach callbacks to receivers.

The timer/fetch method has a couple of advantages. First it more closely resembles the API of the other bindings. Also it allows tighter management of the local queue. Since each time the timer is triggered we can determine how many messages we wish to process we can give some performance guarantees based on how long it takes to run operations in response to the messages. In this way we can dictate when a message is processed and tweak applications to run smoother. This comes at the price of added complexity which could be even more of a detriment to performance when in the wrong hands.

The callback API has the advantage of being more in line to what JavaScript developers expect. JavaScript is highly event/callback based with onFoo handlers everywhere. We currently work this way. When a message is decoded from the socket we dispatch it immediately to any callback registered to listen for it. The issue here is an application can get hammered with messages with no way to defer processing (except by implementing their own processing queue).

Why not implement both? This is an option but that doesn’t mean it is a good option. Multiple ways of doing the same thing often confuse new users. Understanding the differences between the API’s and the nuances between usecases are often more complex than either API alone. This could be daunting to a new user.

The trick is to make the API’s build on one another. For instance I could add an onReady handler which then allows the user to use the fetch API to grab any messages inside the handler. We would then set up an internal timer if the queue was not completely drained. This would require users be familiar with the fetch API without having to set up their own timer. If they wanted to have more control, they could set up their own timers instead of using the handler.

Any JavaScript developers have any insight as to the best way forward?

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

November 9, 2009

Is the whole world smiling or just laughing behind your back

Filed under: Uncategorized, community, usability — J5 @ 12:39 am

For various reasons I am staying out of government politics these days but that doesn’t mean I’m going to stay away from a bit of controversy when it comes to my beloved Open Source crowd.

I remember at one Boston Summit, being held at the MIT Stata Center, where Luis Villa, our much appreciated lawyer in training (or is he an actual lawyer yet and more importantly can we start cracking lawyer jokes?), was holding a Marketing BOF. In this BOF we ended up listing things that GNOME didn’t do well in which someone who was not part of the GNOME community but rather an invited guest took the session to mean that GNOME was in serious trouble and was folding in on itself.

What this person failed to realize is that self introspection and acknowledging ones weaknesses is the first step to becoming stronger. In our case it was the first steps to becoming a stronger community.

It is with this in mind that I read Henri Bergius’ great synopsis on the Apple MagicMouse vs the Open Office mouse design. It illustrates one of Open Source’s short comings with mitigating complexity. To stereotype us collectively a bit, we are like Sheldon from the show the Big Bang Theory. Sheldon can solve complex theoretical physics questions in his sleep but ask him to engage in simple social interaction and he hides behind condescension and excuses the interaction as unimportant.

Similarly, ask us to solve a complex computer problem and we will do it but ask us to make it easy to use, something the masses would go out and spend money on, and the same indignant statement seems to permeate every discussion about it – “that’s not something I would want to use”. Ok, so the analogy isn’t fair because as a group we are as diverse as any other but from the amazing things that we have produced it is clear that collectively we have a hard time hiding the complexity of it all. For some reason Apple is able to promote ease of use and they get praised for it but when we try to promote it we hit a wall of cynicism – “You’ll have to pry my user interface from my cold dead hands!”

So the question is will we ever learn how to mitigate complexity or will we just leave that for others to add as a competitive advantage? Is our end goal to just be a building block of modern technology or will we be the finished product itself? I don’t have that answer but I do know it is something we need to introspect on. We need to ask ourselves these hard questions, not as acknowledgement of failure but as acknowledgement of the fact that we can always do better by honestly and without cynicism, examine our weakest points. As other parts of the industry learn from our successes in development and internally implement changes based off of the Open Source model, we too need to look at their successes in the mass market and see what we learn from them.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

November 4, 2009

Litl’s little netbook

Filed under: Gnome, usability — J5 @ 4:30 pm

I popped down to Boston today to see Litl’s internet computer and catch up with friends who now work for Litl. Unfortunately I did not see Havoc there (probably release partying too much or more likely coding) but a number of GNOME folk and others who I worked with at OLPC did show up. (I’m not going to name names because I will inevitably leave someone out).

In any case the Litl webbook looks promising. Finally someone has looked at what a target group of consumers wanted and designed a simplified interface around services instead of just dropping a Linux distribution in and saying here you go. Did they hit the mark, only time can tell but for Linux on devices to win in this area we need this sort of targeted design instead of chasing the windows generic computing market. It is how Apple won with the iPod and iPhone. Anyone who reads my blog should know my stance on this issue so I won’t beat it to death.

Some key innovative features here are

  • Browser centric design
  • Easel mode in which the UI accommodates the device’s configuration
  • Instant sharing and mobile configs – if one breaks you can log in from another and continue whatever you were doing
  • Almost zero maintenance and setup (you still need to tell it who your friends are)

Sure we have some of these features being developed in GNOME (it doesn’t come as a surprise since a lot of the UI is based on work done in GNOME and other GNOME related projects like the OLPC) but this is the first complete commercial offering which brings those features into one consumer friendly device with a laptop form factor.

As someone who is proud of GNOME’s accomplishments I wish Litl the best of luck and thank them for the code they have contributed back to the community.  As a Foundation member I hope to see even more collaboration between them and the foundation in the future.  Keep up the awesome work!!!

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

November 2, 2009

Quick video using Jokosher, PiTiVi and my Canon digital camera

Filed under: Open Formats, celebration, family, music, usability, video — J5 @ 1:51 pm


Rome.ogv
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License

Above is a song I was writing for my sister’s wedding. Unfortunately I never finished it and logistics got in the way of me bringing a guitar to Italy (namely I didn’t want to lug a guitar all around Italy). I thought I would record it using my Cannon PowerShot camera and edit it with Jokosher and PiTiVi to see how far our tools have gone.

I have to say it was fairly easy but I still ran into issues. As far as UI Goes PiTiVi is much easier to use than Jokosher in terms of organizing what I wanted to do. I really only needed Jokosher to tweak the sound a bit but it was still a bit of trial and error to get something decent. I used the high and low pass filters to filter out background noise and echo from my room. Jokosher lacks a basic noise filter effect which can be implemented manually in most other editors by taking a sample of the ambient noise and phase shifting it 180 degrees so the ambient noise is canceled out. Unfortunately the solid bar UI which departs from the usual wave graph makes it impossible to do this by hand. In any case the low and high pass filters worked fairly well to get the most annoying twangs and hisses out.

Another issue is not being able to mark cutin and cutout points and have PiTiVi sync the video with these point. I essentially had to do minimal processing in Jokosher so I could easily sync the video to the edited sound in PiTiVi. It would have been nice to trim the audio in Jokosher and when I imported it into PiTiVi, had it sync up to the correct points in the video. Manually doing that in PiTiVi is hard because of the timeline scale and the fact that it is exclusively drag and drop. It would be nice to be able to enter exact values or load markup metadata so I could snap to my cuts. Once the audio is in PiTiVi we are stuck with PiTiVi’s audio tools which will never be as complete as Jokosher’s (assuming Jokosher gets some development love). It would be nice to be able to jump back and forth between the two.

All that being said, once I planned out what I wanted to do it took no time at all to do it for a video as simple as this. It might not be all roses and honey yet but it is much better than it has been. The next step is to start multi-tracking in Jokosher and syncing it to a video. We shall see.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

June 10, 2009

Drink a glass of wine it’s release time

Filed under: Fedora, community, usability — J5 @ 5:25 pm

The project I have been working on for a long time now has seen it’s first (beta) release. Meet Fedora Community, a consolidation of the various Fedora Infrastructure bits into one UI with a focus on usability. The unique thing about this site is that it doesn’t replace the other Fedora Infrastructure bits. It uses them as backends and mashes together the data into one view. For instance you no longer have to go to the bodhi update tool after checking on a build in koji. Instead you simply look at the build tool and if the package is able to be updated you will be presented with the option to do so. It will also point you to the correct log if an error happens in the build.

Right now it is geared towards Fedora packagers but in the future we hope to be adding a lot more functionality. Since the concept revolves around small applications running in a dashboard the possibilities are endless. Think live server status for sysadmins or up to date Fedora news for users. As always, because Fedora stands for Freedom and Community we will be emphasizing upstream collaboration which we owe a great debt for making all of Fedora possible, and Fedora Community’s code will always be licensed under AGPLv3 and compatible licenses.

To learn more you can grab the podcasts (in ogg vorbis format of course) or go to our project page.

Be a Super Packager

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

March 17, 2009

Collecting the little annoyances

Filed under: usability — J5 @ 4:02 pm

In my day to day usage of apps I often run into little annoyances. I know I should be filing bugs but I instead did the next best thing and created a rant usability page that lists the things I wish I could do in an application but couldn’t. The idea is to have a quick place to jot down notes and then review them later for possible bug filing. I think everyone should do something similar as it provides a stream of conscious map of how people use the desktop and the little things that they may not feel is worth filing but are most likely the key to making the Linux desktop experience more enjoyable. It also allows a user to get out their frustrations in their own forum and then come back and file a more useful bug without the static of emotions.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

February 24, 2009

The Economics of Time and Effort

Filed under: Standards, community, usability — J5 @ 1:14 pm

When people think about economics they usually just think in terms of money but economics is about understanding the flow of limited resources within systems in an effort to make those systems more efficient (or if you are cynical making those systems be more efficient for a specific group). Money is just a system we have used to quantify the worth of those resources to counteract the inefficiencies of bartering. Since money has the ability to be traded for almost any resource (including money itself) it holds a lot of power and has become the focus of most of economics.

However, in the Open Source community a majority of our transactions do not include money. At least not directly. In fact, a majority of our capital is payed in the measure of time and effort; both by the consumers and producers. Both are highly limited resources which in the Open Source world aren’t really given the thought they deserve.

First consumers often give the impression that they think producers have all the time and energy in the world but only a small portion of the community can be classified as producers, and even a smaller subset are full time producers. The only way to grow time and energy in an efficient way is to get more people to become producers. The power of Open Source is not that it is freely available but that anyone can become a producer. Providing that producers work together in some sense of a direction, Open Source growth should be exponential and eventually overtake proprietary development in terms of an efficient economic model and generation of capital. That is why the GPL and other reciprocal licenses are in the long term a better model as they prevent the “picking up and going home once the market expands” syndrome – though there are other forces that effectively prevent that for projects under other licenses. That is all another post though.

The other place where both time and effort are not given enough thought is in the use of the final product. In fact many projects fail to productize their efforts, choosing to leave that up to vendors. I cringe when I hear things like, Linux can do anything you want, you just have to configure XYZ. I don’t know anyone who truly wants something that can do everything. They want something that can do what they want without too much time and effort put into it. Every time we require our users to expend time and effort that is resources they are spending. If the cost is too high they will simply look elsewhere. Believe it or not, the worth of time and effort are readily quantifiable by looking how much people spend a year on unneeded conveniences. It is pretty high.

An example of time and energy wasted is logging into open services. Logins are inevitable but why in a world that prides itself on community are we beaten to the single signon party by the likes of MS Passport or Google checkout? Taking an example from Sound Juicer, the cd ripping app, I have a number of cds which I pick up at local venues because I heard something I liked when walking by. Sound Juicer gives you the option to upload track info to the MusicBrainz database. Unfortunately all this option does is bring me to a login/signup screen after I took the time to enter in all of the track data. Having to get yet another account for something I don’t really care about anymore because I already have the track info is just too much effort to spend so I end up just closing the browser window. Sound Juicer and MusicBrainz does get the consumer seal of approval for making it easy to grab track info when ripping my cds but they missed an opportunity to convert me into a producer which would bring even more value to their consumers. In fact the track grabbing functionality is so transparent – no configurations needed, no extra actions are required – that it is a quintessential example of how an app should be productized. Why adding to the DB isn’t more wiki like or federated with other open services, such as wikipedia, slashdot, lwn, distributions, etc. is somewhat of a mystery. It isn’t a mystery altogether though -

Time and effort on the producer side needs to grow and producers need to work closer together, building bridges instead of just looking to grow their own little island. The Open Source ecosystem, while priding itself on community has often neglected to build technology which works like a community. More cohesion between these islands allows them to grow and innovate on their own but still act as an integrated/efficient experience for the user, minimizing the time and effort it takes to use our software. By having an integrated experience all the way to the producer level we have more of a chance to convert consumers to producers thereby adding more time and effort capital to the entire ecosystem. Make it easier to both consume and produce in the Open Source ecosystem and traditional economics will take over to propel it to the mainstream as it has done in small subsets such as in the business server market.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

February 17, 2009

Rules and Constraints for Creative Design

Filed under: usability — Tags: , — J5 @ 2:15 pm

After reading Jeremy’s blog on the book Don’t Make Me Think I started thinking. That’s part of my job – to think about a subset of problems that plague a subset of individuals so they don’t have to. I haven’t read the book yet but I plan to pick it up at some point. My conjecture is mostly in addressing the “boring makes people comfortable” part of Jeremy’s though I am in no way debating any of his conclusions. I’ve often argued that boring can be a good thing because “thing’s don’t become useful until they are no longer exciting”. Not being someone who views the world in black and white I have also argued the opposite (all be it pretty sarcastically). Both view points are valid as you really need to strike a balance between familiar and new in order to have a successful project. So as I was thinking about all of this I wanted to come up with some talking points for thinking about where that balance is.

What if everything was possible what would the world look like?

Here we define any possibility as being a world with no rules, no systems, no constraints. I know, it is pretty much a kōan because it “contains aspects that are inaccessible to rational understanding”. If rules, systems and constraints are not possible in a world where everything is possible how can everything be possible? But if rules, systems and constraints do exist in this hypothetical world, don’t they work to restrict possibilities to a predictable path thereby deliberately making some things impossible?

Thankfully we do live in a world governed by rules we call natural laws, which actually brought about the possibility of life as we know it. Technology is pretty much built on top of these rules and constraints. We harness these systems of rules to obtain predictable results within some threshold of error. That is exactly what projects are, putting together rules in new combinations to obtain a desired result. We can choose to use the same rules people have found in the past to obtain the desired results or we can test new combinations in an attempt to find a more efficient path. Both have their advantages and disadvantages so the choice must be made per project based on cost/benefit and risk analysis.

Scoping Constraints as a Creative Catalyst

I keep coming back to this PBS special on a New Hampshire photo artist who’s life’s work consisted of black and white photos of body parts sticking out of still water. The pictures of a hand and forearm, breaking the surface of a pond with the mirror reflection almost an exact duplicate were both simple and breathtaking. I can’t quite remember the guy’s name but the essence of something he said I can’t forget. What he basically said was by restricting his medium he was able to challenge himself to be creative. Not any black and white photo of water and a hand would be art worthy – he had to really figure out what path would work within the rules he had set for himself. He may have never found it if his rule set was too complex because in the expanded set of possibilities that comes with a more complex rule set comes more combinations that just won’t work. (BTW If anyone knows who I am referring to, let me know. I feel bad referring to him but I can’t remember his name)

Mutation as a Cure to Stagnation

That is not to say your rule set can’t be large, just that having constraints helps move a project along and helps focus on the final goal by having ready to find answers to those little roadblocks that projects run into. Also if the constraints are shared among projects it means those projects can easily share ideas and complement each other. However too ridged constraints can lead to stagnation. Sure users may feel comfortable with them now but will they find the constraints limiting a year from now. Will something that uses new constraints or slightly tweaks the current constraints be perceived as so much better that the cost of a brief period of unease is worth the switch? Will a new batch of users be available with no preconceived notions of how an outcome should be accomplished?

Progress can be defined as “gradual betterment”. In the natural world that often happens via mutations. The ones that don’t work out die out pretty quickly but the ones that can survive and flourish stick around. Mutations are a risky venture but without them there is no progress. For projects, gradual mutation, or in Jeremy’s words, iteration is a must. This doesn’t mean that innovation has to move at a snails pace. In fact projects can often jump start the iteration process by iterating over other projects, even bringing in the ideas of multiple projects under one umbrella. The threat comes when the goal itself is innovation and not solving an actual need; where the rules and constraints of a project are defined and redefined at every step.

Where’s the Balance?

The glib answer is, where it would make a project the most successful. Each project needs to figure out where that point is for them. Stick to the well worn path and risk obsolescence or blaze your own path and risk uselessness. Most projects stick to somewhere in between where the rewards are much more balanced with the risk.

[read this post in: ar de es fr it ja ko pt ru zh-CN ]
Older Posts »

Powered by WordPress