Showing posts with label mono. Show all posts
Showing posts with label mono. Show all posts

Thursday, November 19, 2009

One-click install for Banshee Telepathy Sharing Extension 0.1.1

Over the course of the summer, you may have read Neil Loknath's various blog posts about his Summer of Code project that lets you share your Banshee music library with your Telepathy contacts.



Well, it's pretty cool stuff, and now that he's started making releases, it's a great opportunity for people to try it out and give him feedback.

If you're using openSUSE 11.2, you can get version 0.1.1 of his extension through this handy one-click install link.

Note that my little repository includes upgrades to telepathy-gabble, telepathy-mission-control, and gnutls. You'll need to log out/in or kill all telepathy/empathy/mission-control processes before the changes take affect.

If you're like me and prefer to build Banshee from source and Neil's extension from source but don't want to reinstall your entire Telepathy stack from source, just install telepathy-gabble and telepathy-mission-control from my repository (this will cause a few gnutls packages to upgrade as well), and you'll be good to go.



Let me know if you have any issues, but let's consider these packages officially unsupported, could break your Empathy, impregnate your cat, etc.

Monday, April 20, 2009

Tomboy 0.14.1, the future, and a word about Gnote

Tomboy 0.14.1 Stable Release for Linux, Windows, and Mac OS X

I'm very proud to announce Tomboy 0.14.1, which represents the beginning of our stable support for Tomboy on all major desktop platforms. Here are some of the major changes since the 0.12.x stable versions:

Searching Notes in Windows


All in all this has been a pretty great cycle for Tomboy. Windows support has been the most-requested Tomboy feature for awhile, and in fact some of my first work on Tomboy three years ago was to make it work at my old Windows-only job. The Windows version has generated interest from a whole new set of users, but most importantly to me, it has gained us several new contributors! Benjamin Podszun, for example, rewrote printing to remove our dependence on the obsolete libgnomeprint, then went on to fix several other bugs and to triage the rest. Since I am not generally a Windows user, it is important to be able to depend on contributors from that world to keep an eye on things.

The Mac port is a little less mature, and we will probably need to get more involved in in the GTK+ implementation on that platform to ensure solid support. Nevertheless, though there are quirks, we are happy to support Tomboy on Mac OS X, too.

Tomboy in your dock (click for full-screen shot)


If you are a GNOME Do user, you may currently be enjoying the wonderful Tomboy plugin, which provides instant access to your notes, and convenient creation of new notes.

Instant note access with GNOME Do


With Tomboy 0.14.1 we have striven to create a solid base on which to build the future of Tomboy. Cross-platform support has given us new contributors and a cleaner code base. We have gotten rid of most of our use of obsolete GNOME APIs. We are off to a great start on profiling and making performance enhancements. Note synchronization is stable on all platforms. Now is the time to make Tomboy really shine.

Looking Forward

For Tomboy 0.16.0, we have a few more fun things planned. The community is having the planning meeting tomorrow, so we'll have our official roadmap soon, but some features I'm currently excited to work on are:
  • Automatic note synchronization between Tomboy(s), G1, iPhone, and the web.
  • Continued improvements to memory usage and overall performance, especially on startup (lots of low-hanging fruit here).
  • Figuring out how best to integrate with gnome-shell, which currently has no specific plans for applet support (which means it's a great time for us to figure out how to make applets awesome in GNOME 3.0!).
The great thing is that most of this work is easy to do in parallel, so now is a wonderful time to join in the hacking.

An old Tomboy Online mockup, stay tuned for news!


A Note about Gnote

Some people have started asking about Gnote, Hubert Figuiere's line-for-line port of Tomboy to C++. Our stance on Gnote is that it is counterproductive to maintain identical software in two languages. It will be harmful to the community, especially as these two apps inevitably diverge. It will result in duplication of effort, duplication of bugs, and a lot of wasted time for those who are trying to add value to the user experience.

Tomboy is not going away, and it will continue to be developed on the extremely productive Mono/GTK# language platform. Anyone thinking about distributing Gnote should consider the impact on users and their data. When we develop, we should always be asking ourselves, "is this adding value for our users?"

Tomboy has a vibrant community, a happy relationship with GNOME, and an exciting future. If you'd like to help us out come to tomorrow's planning meeting, join us on our mailing list, or just start hacking!

This post brought to you by the Tomboy Blogposter add-in.

Monday, February 16, 2009

Tomboy 0.13.5 Brings a Better Windows Installation Experience

Today I released Tomboy 0.13.5. It has a bunch of nice fixes, including updates to Benjamin Podszun's Gtk.Print rewrite of Tomboy's printing add-in (making printing available on all platforms). For Windows users, this is the first time that you should be able to easily install gtk-sharp and Tomboy without having to muck around with your system. But we wouldn't want it to be too easy, so there are some caveats.

From http://live.gnome.org/Tomboy/Installing/Windows :

Instructions for installing a Tomboy Windows release

Upgrading from Tomboy 0.13.4 or earlier
  1. Uninstall Tomboy.
  2. Uninstall any existing versions of gtk-sharp you may have installed.
  3. Continue with Installation instructions.
Installation
  1. Install Novell's gtk-sharp 2.12.8 or newer.
  2. Restart.
  3. Run Tomboy installer 0.13.5 or newer.
  4. Enjoy!
Importing notes from Linux (optional)
  1. On your Linux box, copy all of the *.note files out of ~/.tomboy .
  2. On your Windows box, quit Tomboy.
  3. On your Windows box, copy all the *.note files from Linux into %APPDATA%\tomboy .
Please please please don't hesitate to file bugs for any problems you experience.

Thanks so much to Mike Kestner for working his ass off (on his own time) updating the gtk-sharp installers, making them easier to develop and build, and fixing the issues reported by Tomboy users. Apps like Tomboy, Banshee, and GNOME Do would simply not exist without all of his hard work.

Monday, January 26, 2009

Tomboy 0.13.3, Tomboy 0.12.2, Tasque 0.1.8, and Giver!

There have been some very important Tomboy and Tasque releases in the past month or so that I have neglected to share. I think it's true that Twitter removes a lot of the motivation to blog. Here are the takeaway points:

Shiki-Colors Theme (click for larger version)

So what else is going on? Tomboy 0.13.3 features some fixes that cut down my memory usage by 25% (with ~200 notes). It should also speed up start-up time if you have a big note collection. One user with 621 notes reported a change from 11 seconds to 4 seconds when he upgraded! The fixes were almost all related to extra work done on a per-note basis, so the memory and performance wins are most significant on these large note collections.

That being said, there is a lot more work to do on memory and performance. Ruben Vermeersch blogged about adapting Federico's timeline tracing tools to chart Tomboy start-up performance. This is going to be extremely helpful in figuring out where we're slowing things down. And as for memory usage, I have only fixed the low-hanging fruit; there are more wins to be had! If this is an area of computer science that you find fun, all help is welcome. :-)

Tomboy Startup (click for full-size graph)

My day job of working on the Mono Accessibility team has kept me pretty busy, and it's been hard lately to find time to work on Tomboy and Tasque. Sure, my team understands when I take a few hours every couple of weeks to prepare a Tomboy release, but that doesn't provide enough time for big feature work or difficult bug fixes. For example, we knew about the problems with Tasque and RememberTheMilk.com for a month before we were able to fix it and get a release out. Fortunately, Novell has its cool "ITO" (Innovation Time On) program. I accumulate 4 hours of ITO every week; that's basically the equivalent of 10% time! As I used up all of my regular time off with hospital visits last year, I scheduled four days of ITO during the week of Christmas. I was able to use that time to review a ton of outstanding patches for Tasque, fix the bugs in the RTM and SQLite backends, and make it easy to build on Windows and Mac OS X. This is also when I did all of the memory fixes for Tomboy. So a big thanks to Novell for supporting me in this work.

Lastly, I'm really excited about Ankit Jain's work on Giver. I never worked on Giver, unless you count the moral support I lent during that first Hackweek. :-) But I am amazed at how many people are asking for updates, Windows and Mac versions, etc. As somebody who works from home, Giver isn't that useful to me, but apparently it is very popular and more people are learning about it every day. With Ankit's help, this project may not be so dead after all. You can help him out by testing his Windows builds, trying latest SVN, filing issues, and hanging out in #giver on GIMPNet.

Wednesday, November 26, 2008

Mono Accessibility 0.9 Released!

Yesterday, Brad announced the first release of the Mono Accessibility team's work, which started a little less than a year ago. It's pretty exciting for us to put out this developer preview release; I'm interested to see what people make of it.

The goal of the first phase of our project, which will culminate in a 1.0 release early next year, is to make Winforms applications accessible in Linux with traditional at-spi tools like Orca and Accerciser. In 0.9, we offer support for most Winforms controls (Button, Label, ComboBox, ToolStrip, WebBrowser, etc). In 1.0, we will be rounding out this support to include the remaining controls (DataGridView, TreeView, custom controls, etc), in addition to fixing bugs and improving stability.

It may not sound that exciting to enable accessibility for Winforms apps. After all, you probably aren't using very many on your GNOME desktop today. However, there certainly are some cool open source apps out there (Paint.NET, NClass, etc). And the main benefit will be for overall Linux adoption. There are many businesses, large and small, schools, governments, non-profits, etc...that are stuck on Windows because they have custom applications written using APIs like Winforms. One goal of the Mono project is to provide a migration path for these potential Linux users. Accessibility support is often a requirement, so by making these custom Winforms applications fully accessible in Linux, we are enabling Linux adoption scenarios that would have been too expensive before (rewriting your internal tools is not cheap or easy).

If you are not familiar with our project, let me briefly explain what it is we are doing:

We are implementing Microsoft's "User Interface Automation" (UIA) specification on Linux. During the first phase of our project, we are focusing on the "provider side" of this specification, which offers interfaces that are implemented by the accessibility/automation "provider" for a given control. This is similar to implementing ATK interfaces for a GTK+ widget, if you are familiar with that. We have been writing UIA providers for all of the Winforms controls.

The other half of our work this phase has been creating a bridge from UIA to ATK. This bridge translates between UIA interfaces and ATK roles/states/etc. This is the piece that makes a Winforms application look like a GTK+ app (or any other app written in a toolkit that exposes a11y info over at-spi) in a tool like Orca.



It's pretty cool the way this fits together. Next year, after 1.0 is released, we'll begin the second phase of our project. It includes two major efforts:

First, we will be making Moonlight accessible in the same way we have made Winforms applications accessible. We will create UIA providers for Moonlight controls, and they will automatically gain accessibility via the exiting UIA<->ATK bridge.

Second, we will implement the "client side" of the UIA specification. This is a set of interfaces designed to allow an accessibility tool (think Orca) to interact with accessible applications. It is similar to the at-spi interfaces, and we will in fact be implementing it as another bridge, this time translating "client" UIA calls into equivalent at-spi calls. The benefit here is that as Windows developers create accessibility and automation tools using the UIA interfaces, they will be portable to Linux (and vice versa).

Accessibility is a great feature for users and potential customers. Automation support is invaluable to testers, software QA, and even users who just want to streamline common tasks. With the release of Mono Accessibility 0.9, we are growing the landscape of accessible applications. We look forward to your feedback (and bug reports)!

Monday, October 20, 2008

Tomboy Preview for Windows and Mac

Please To Try

At the end of August, I told you about my little project to bring Tomboy to Windows users. Well, last week I finally merged that code into trunk. And then Friday, the excellent Mono team released a Mono 2.0 installer for OS X, and I found that my Windows build of Tomboy finally worked pretty well on the Mac, too. Of course, some platform integration there would be nice...





Click for full-screen shots. Notice that I added a menu for tracking open note windows, and attached the classic recent notes menu to the dock icon. This is not the most elegant solution, but I wanted Mac users to play around with it and share their own opinions. I'm very open to changes here. :-)

I didn't have any plans this weekend, so I present to you "preview builds" of Tomboy 0.13.0 for Windows and Mac OS X. I'm distributing them with the disclaimer that they are not widely tested, though in my own testing I have found no bugs that would make me worry about loss of data. Just consider yourself warned, and please back up your notes.

If you find any bugs, or have ideas for better platform integration, or find issues with install, please please PLEASE file bugs!

Click to file a bug for Tomboy on Windows!

Click to file a bug for Tomboy on Mac OS X!

Mac Instructions
  1. Install Mono 2.0 for Mac OS X.
  2. Download and mount the Tomboy disk image.
  3. Drag Tomboy to Applications, run!
  4. (optional) Copy your notes to ~/.config/tomboy

Mac Known Issues
  • Shortcut keys all use Control instead of Command.
  • The Bugzilla add-in doesn't work.
  • In the note window toolbar, notebook names can be ellipsized oddly.
  • Hand cursor doesn't show when hovering over links, but they're still clickable.
  • No keybindings support.
  • No i18n support.

Windows Instructions
  1. Install Medsphere's GTK# SDK installer (the runtime installer should work, but in my testing it did not install a particular registry key needed for Tomboy to recognize its presence).
  2. If you are running Windows Vista, you may need to follow additional instructions to work around an installer bug.
  3. Restart your computer.
  4. Download the Tomboy installer.
  5. Double-click to install!
  6. (optional) Copy your notes to %appdata%\tomboy

Windows Known Issues
  • Menu rendering issues.
  • Two console windows appear briefly when Tomboy starts (fixed in Mono.Addins SVN).
  • No drag and drop from other apps into Tomboy (appears to be unimplemented in GTK+ for Windows).
  • If you try to run Tomboy twice, it should show the Search window instead of launching again, but sometimes it will not show the Search window until you have interacted with Tomboy in some other way (by hovering over a window or clicking the tray icon, for example).
  • No i18n support.

Big Thanks

This was actually a pretty easy job, thanks to these folks:
  • Eoin Hennessey, who pioneered a lot of this work in his banshee-osx git branch, which he and Aaron are merging into Banshee trunk this week. Among other things, he created Mono bindings for Imendio's excellent ige-mac-integration library, and scripts for building app bundles.
  • Andrew Jorgensen, Thomas Wiest, Marc Christensen, and Geoff Norton of the Mono team. These guys have been rocking hard on Mono's Mac story, and it shows. Thanks especially for getting me a build of MonoDevelop in time for my Saturday hack fest!
  • Aaron Bockover, who keeps threatening to do a Mac release before me.
  • Brad Taylor and his old Medsphere cronies, who whipped gtk-sharp on Windows into shape.
  • All GTK+ developers and porters, especially those at Imendio!
  • The entire Tomboy community, especially Dmitry Kostenko, Doug Johnston, and Samuel Vandamme for their patches to help make Tomboy on Windows a reality. You guys are awesome!

Tuesday, September 30, 2008

Touching Banshee, Porting Tasque

Toward a more clickable Banshee

I've written on a patch to make the artist and album text in the Banshee track info display interactive. 95% of the time I am listening to my library on shuffle, and sometimes I hear a song and decide I want to hear more from that artist or album. Well, with my patch, you can click on either to perform a search on your library.



You can also right-click and add the album or all tracks by the artist right to the play queue, which is my favorite Banshee trick now. Have you ever used the Banshee Play Queue? It's really cool...if you're listening on shuffle and you add a bunch of stuff to the play queue, it will play those items in order and then go back to shuffling through your library (or whatever you were listening to before you shoved stuff into the queue).



Click to see low-quality demo on YouTube.

So why is this still just a patch and not in Banshee SVN? Well, really, it's kind of ugly, don't you think? Here's this pretty Banshee UI with some gross hyperlink-looking text in the middle of it. What do you folks think I should do?
  • Use a different color, like "Selected"?

  • Only change the text color on hover?

  • Both?

The only thing I like right now about having it colored all the time is that it makes the feature more discoverable. But is it worth it? Any thoughts on the appearance or behavior of this feature? If you build Banshee from SVN, give it a try and see what you think!

I'm busy lately so if somebody else wants to mess with this bug, be my guest. It won't get into SVN until after Banshee 1.4 is released, anyway. ;-)


Tasque Goes Cross-Platform

I couldn't sleep Thursday night, so I yanked some of my code from tomboy-portable2 and got Tasque going on Windows. Then I decided Tasque is simple enough to play with that I'd better get it going on Mac OS X, too. This weekend I even put together I nice little disk image for Mac users. Big thanks to Eoin Hennessy for creating Mono bindings to Immendio's Mac/GTK+ integration library. The next Tasque release will be equally supported on Linux, Windows, and Mac, so feel free to start filing bugs.





Really this is just an excuse to try stuff out for Tomboy.

Thursday, August 28, 2008

Hack Week III: Tomboy Joins The Dark Side

Tomboy on Windows Where It Belongs

As you all know, my job here at Novell is to migrate all worthwhile desktop Linux applications off of that ridiculous platform and onto Windows so that we can do away with this nasty open source stuff. Unfortunately I haven't yet gotten the paper work to close up my code for the latest victim of this effort, so for now dirty open source hippies can get it here:

http://svn.gnome.org/svn/tomboy/branches/tomboy-portable2/

Somebody even impersonated me and posted instructions and current limitations on our mailing list (soon to be replaced with a 1-900 number offering support for a reasonable fee).

And here's an image of what it looks like. Windows has a really awesome feature where you can press your "Print Screen" button, and then you dig around in the menus to find the excellent Microsoft Paint application, at which point you recall that you can produce a "screen shot" by "pasting". Then you save in one of a myriad of excellent file formats, and you have an image of what you were doing on your computer! You can then share it with your friends like so:



What do you think? Excited to end the Linux charade and switch to a solid and hip platform like Vista? Woo!

I feel very silly today.

Utah Open Source Conference

I was fortunate enough to get to join my friends and coworkers in Provo for this Hack Week. I normally work from my home office, so I'm having a blast seeing everybody. Today we're working at Salt Lake Community College as part of the Utah Open Source Conference. I'm actually talking with my buddy Brian Merrell about the efforts of the Mono a11y team (you know, my actual job). It should be fun, we've got some neat slides and we are both cool people so I don't really see what could go wrong. The UTOSC team has done a ridiculously awesome job setting up this conference, so I'm really excited to see everything come to fruition. We had a sweet speaker dinner last night but moron that I am I forgot my camera so you just have to take my word for it!

This Tomboy stuff still needs a bit of work so off I go. Hopefully having Tomboy run on more platforms will help us attract more users and developers. I know it's a popular request so I'm pretty serious about getting it supported in trunk. Later guys!

Monday, August 4, 2008

Tomboy 0.11.1 Released

I finally got some time this weekend to take care of some irritating Tomboy bugs, so today I present to you Tomboy 0.11.1, "A PhD in Horribleness":
  • New tray icon code using GtkStatusIcon (kill libegg, #349265, Stefan Cosma).
  • Fix crashers: #544406, #460642, #544996, #523035
  • Fix bugzilla addin to accept bug IDs of one or more digits (#533024).
  • Fix behavior when start note is recreated (#508982, Jon Lund Steffensen)
  • Include .mdb files during install. Allow --debug, --trace, and --profile options when running Tomboy.
  • Translation updates: ar, bg, ca, de, es, et, fr, gl, he, nb, nl, oc, pt_BR, sk, sv, th, vi, zh_CN
Major things left to do before 0.12.0 is released: Finish port to GtkPrint, fix major outstanding bugs in synchronization, and, if there's time, do some work on startup performance. All help is welcome, especially on the GtkPrint stuff! :-)

Monday, July 14, 2008

GHOP Awards Ceremony

I just finished a great weekend in the San Francisco Bay Area, thanks largely to Google and their Highly-Open Participation Contest (GHOP). As you may already know, Google worked with several open source projects to run a contest for high school-aged students to complete tasks ranging from translation and documentation to coding and other bug fixes. Vincent Untz, Andre Klapper, and Behdad Esfahbod, Lucas Rocha, and Christian Kellner ran things from the GNOME end, and did a great job. Unfortunately the awards ceremony for GHOP grand prize winners was scheduled for this past Friday, and they were busy at GUADEC. Since I had been involved in GHOP as a mentor, I volunteered to represent GNOME at the ceremony. Later, I found out that the Mono project was unable to send a representative as well. Their side was largely administered by Miguel de Icaza and Michael Hutchinson, and Michael asked me to represent them since I was already going to be there. So although I was probably the least-involved mentor at the ceremony, I was also the only one with two students. :-P

GNOME's Grand Prize Winner: Patrick Hulin

Patrick is a junior at Hopkins School in New Haven, CT. He finished several tasks, often swooping in to get the job done after another student bailed. He submitted fixes to Totem and ported baobab from gnome-vfs to gio, in addition to documentation and GTK+ performance tasks. I had a great time meeting him and his parents on Friday. I'm always encouraged to meet teenagers who actually *enjoy* math, and find opportunities to learn about software development. Patrick is going to be a counselor at a local computer camp this summer, brainwashing^W teaching teens the ways of code and circuit. We had a blast in the lobbies at each Google building, watching on a screen as the world's search queries scrolled by.


Mono's Grand Prize Winner: Dan Abramov

Dan is from St. Petersburg, Russia, and came to the ceremony with his mother (who had an awesome camera, I hope I get to see some of her photos from the trip). He's a largely self-taught 16 year old dynamo. He made some nice contributions to Mono, including Gendarme analysis rules and MonoDevelop addins and documentation. One of my favorite moments of this trip is when I was asking Dan about his future plans, did he intend to go to university in Russia, pursue Computer Science, etc. He told me that although he felt confident programming in managed languages like C#, he wanted to understand more about the low-level details. He asked me if I had read Joel Spolsky's article on "leaky abstractions", and described how sometimes .NET/Mono programming could be like that. I could only laugh with joy that this guy was already reading (and understanding) Joel.

Daniel and his mother
I think it's pretty clear that these students have a huge head-start in computer science. Everybody was interested and excited about open source software. I got a lot of questions about what it's like to work on open source software all day at Novell. Being there, it really felt like I was looking at the next generation of open source leaders. I can only hope they stick with it instead of going down the boring path of being a doctor or a lawyer or something. ;-)

Thank you Google for encouraging these kids, and providing incentives like GHOP and Summer of Code to keep them in our world.

The Visit

It was pretty cool to meet the mentor representatives from other open source projects, some of whom were actually Google employees. Friday was a busy day, what with touring the Google campus, having the actual award ceremony, being interviewed for YouTube (eep), and stuffing my face. We saw presentations about App Engine (by Guido van Rossum), Android (Romain Guy), Google infrastructure (Jeff Dean), and testing at Google (Bharat Mediratta and Mike Bland).

My favorite talk by far was the testing one. Bharat and Mike are among the better pair presenters I've seen, so it was a joy just to watch them. But the subject matter is dear to my heart. At my last company I was often frustrated with how difficult it was to proliferate best practices (specifically TDD) even within a single team. I was fascinated to hear how these guys just decided to fix the testing problem at Google, guerrilla-style. They introduced the awesome Testing on the Toilet newsletter, devised testing training and certification programs for projects and employees, and introduced "test mercenaries" to spread skills where needed by hopping from project to project, staying only a few months with each. Ingraining these practices in a company's culture is a singularly difficult problem. Their example is inspiring, though of course it requires constant ongoing work, and it might be difficult to convince any company to invest such significant resources into a never-ending program like that. I've been following the Testing on the Toilet blog for awhile, but meeting these guys was truly invigorating. I wish there had been time to chat them up afterwards!

The Rest

Over the weekend, Ellery and I visited our old stomping grounds at San Francisco State University, Stonestown Borders, and West Portal. We had a fun dinner with Liz and Bernat at Mozzarella Di Bufala. It was nice; I really do miss my friends sometimes. :-) Later we visited some family in the East Bay.

Ellery is Queen of the Campus
The rest of my photos can be seen on my picasaweb. By the way, Lazyweb, do you know how to tag all photos in an album at once?

Tuesday, June 24, 2008

Tasque 0.1.6 Released

Yesterday I released Tasque 0.1.6 to a legion of hungry Linux users. I can't believe it's been three months since 0.1.5 was released! You can expect to see 0.1.7 a lot quicker, especially because there are some good patches in bugzilla that just need a bit of review.

As you might expect, Tasque 0.1.6 is our best release yet. There's a new task entry widget at the top of the main window, and due dates are parsed right out of the task text. Plus, there are the usual handful of bug fixes, including a few crashers.

Give it a try, and let us know what you think!



Tuesday, April 22, 2008

Why do we bother with Linux? Also, UIA status, and Twitter revisited...

The Question

My good friend Aaron is a PhD student in Geology at Penn State. We've known each other since we were toddlers, and connect on many levels. He uses Matlab and god knows what other crazy software to write molecular simulations for his experiments, but he's not the same kind of geek as I am. After reading about Banshee on my last blog, he comments:
I really like reading your blog. I click on all the links and feel like I'm learning something. I do have one question though. When you are working to create these programs for Linux does it ever feel like you are reinventing the wheel? It seems like a lot of time and effort is spent creating linux versions of programs that already exist. Sure there are a few new features that are neat but the bulk of the work seems like recreation. I'm totally missing the point here right?
I've been thinking about this for a few days now. I'm not going to waste time arguing specifics about Banshee, bringing up examples of truly new and unique software on Linux, or explaining how even when we are reinventing the wheel, it is a worthwhile and fulfilling endeavor. Instead, in the spirit of Passover, I will address the general question, "four children" style:

So, why do I spend so much time working on Linux, when a no-cost proprietary solution may already be available?

The free software zealot says: "I will not use software unless it is free (as in freedom). Whether or not a proprietary solution exists is irrelevant; I have problems I need to solve, and if there is no free software that solves it I will create a new project. It is simply unacceptable to sacrifice my freedom for the sake of convenience. As Benjamin Franklin said, 'Those who would give up Essential Liberty to purchase a little Temporary Safety, deserve neither Liberty nor Safety.'"

The pragmatic user or programmer says: "It is in my best interest to use free software. If I find a bug or wish there was a certain feature, I can talk directly with developers about it, pay somebody to fix it, or fix it myself. I don't have to wait until it's in the best interest of some corporation. I don't have to be afraid of being stuck with unsupported abandonware."

The young developer says: "Reinventing the wheel is half the fun of writing software! Even if there *is* an existing free software project that mostly does what I want, I'll probably start one from scratch because then I can do it *my* way. If it's useful to others, then that's great, too. Duplication is par for the course in the software world; after all, weren't there plenty of media players before iTunes, and aren't there still? If there are multiple operating systems, applications, or web sites that appear to serve the same need, then you just need to look closer to understand what niche each is for."

The user who does not understand enough to know the difference says: "My friend/child/administrator set up my computer with Linux. If popular software isn't available on Linux, I'm usually lucky enough to find a suitable free alternative. I get free updates and no weird restrictions on how I can use my computer."


My own answer is a mix of those. Sure, sometimes when I'm writing code that could literally be copy/pasted from some Microsoft engineer's workstation, it's a bit frustrating. It's frustrating that other companies rarely see fit to release their code. But in reality, most code that I write isn't like that at all. It's written to solve a specific, unique problem, and when I solve that problem I feel fulfilled. Using and writing free software gives me warm fuzzies. And as a developer and demanding user, it is very important to me to have access to source code, so that I can fix bugs and add features I care about. Nobody at Apple ever cared about the problems I had using iTunes to burn CDs (every version and OS), and I couldn't do anything about it. That's the opposite of feeling warm and fuzzy.

I'd be interested to see how other developers answer this question, though.


Yay, UIA

Andres has started adding support for firing ATK events, so now we can see Windows Forms appear and disappear, as expected, in Accerciser. It's been fun working with him on this...I get the feeling we'd be a good pair for XP, if he wasn't on the other side of the globe. :-P I've written a lot of unit tests against Microsoft's classes and fixed ours to match that behavior.

This week I'll be continuing with that, and probably working with Andres to expand our event support. I'm excited to be able to send and receive standard window and button events. But I guess I'm easily excited?


Yes, Twitter

I've been experimenting with twitter, because it turns out people I care about are using it in non-masturbatory ways. I'm looking for a better client that I can read on *my* time (instead of being IM'd whenever a friend updates). Gtwitter isn't getting updates for some reason and Twitux requires newer GNOME libraries. If I start checking for new tweets more than twice a day I'll have to do something about this...

Monday, April 14, 2008

LugRadio Live Rocked, and UIA progresses

So I'm on the plane back to San Diego after spending all weekend in San Francisco at LugRadio Live, and HOLY CRAP that was an awesome time. It could be that it was my first open source conference, or that I stayed with some awesome Utah hackers, or that I got to meet a ton of colleagues in person for the first time...but man I'm glad I went. Soon I'll post about the details, but for now I'll talk a bit about how the UIA implementation is going.


UIA Continues at a Reasonable Pace (watch out for dangling participles!)

For now we're sticking with the design approach I discussed last week for connecting the Winforms UIA providers to the UIA<->ATK bridge. But I didn't work much on that, because there are some issues with atk-sharp that Andres is busily hacking away at. Instead, I've been writing unit tests against Microsoft's implementation to pull out a ton of constant values that we need. This was really boring so I wrote a little program to automate it, though it's not very general. I think it would be cool to expand it to parse through MSDN documentation for some given classes and generate the boring unit tests for the appropriate fields/constants/etc. As it is it probably took me as much time to write the test generator as it would have to write the tests manually, and it's not terribly reusable. :-P I'll write more about it if it grows.

This week I'll continue writing unit tests, though I have some catching up to do because I spent Friday largely offline, and ditto today, so I've got to see where the team is. There's still plenty of work to be done in the providers and the core; they're just harder to test right now.


Tune In Next Time...

I started writing about LRL but it just got too damn long and I have work to do. But for now, I will fire the first volley in what is sure to be an extensive character debate. Here's young Aaron Bockover to share with you his impressions of LRL, through the magic of the karaoke Rickroll:

Monday, April 7, 2008

Moving, UIA Progress

Moving

Looks like we'll be moving from San Diego to Las Vegas some time around May 1st. We're having some trouble finding a decent home to rent, but I'm hoping that will all resolve itself in the next few days.

UIA Progress

Last week, Andres committed a ton of fixes to get stuff working in the UIA<->ATK bridge. I spent a few days working on my end (winforms and providers), until we finally got this:

Screenshot of a winforms app showing up in Accerciser!
So that was exciting. Our friends on the Mono team helped us figure out that some of our problems were caused by the fact that Winforms actually has a current dependency on GTK+ to get theme colors! The initialization of GTK+ before we load our UIA<->ATK bridge was causing runtime failures. We have filed a bug on it, and will probably be removing the GTK+ dependency in Winforms (see bug for details). Currently we work around it in our patch to Winforms.

Of course, the implementation to achieve this wasn't really too great. My providers were depending directly on Andres' bridge. So now it's time to start working more on the "core". I'm experimenting with it now. Here's an updated version of my old diagram, color-coded to differentiate between MS assemblies and our new assemblies:

Diagram of dependencies in UIA-related assemblies
Notice that I have removed the core, and in its place is the MS-defined UIAutomationProvider assembly. I played around with different designs, but there is a fundamental problem in that MS intends all interop between providers and *their* core to happen via a static class called AutomationInteropProvider, that lives in the UIAutomationProvider assembly along with a ton of useful interfaces. Well, we can't add new public interfaces to that assembly, but when messages come to the AutomationInteropProvider they need to somehow get to the bridge. And I'm trying to avoid excessive reflection.

So right now I'm assuming that I can define a good bridge interface in a new assembly, UIAutomationBridge, that only depends on MS's UIAutomationTypes assembly. A class in the UIA<->ATK bridge assembly implements that interface, and the AutomationInteropProvider uses reflection only once in order to find that class. This prevents me from using interfaces in the UIAutomationProvider assembly in the bridge interface, but I think this will be okay...we'll just have to pass a few things around as plain old objects, and document what the client can expect from them.

I'm thinking that this AutomationInteropProvider class is already designed to represent the "core", so I'm just going to run with that idea this week and see where it takes me. It's all happening in the olive and uia2atk projects.

My winforms providers are a little nicer now, but they're not much use until the bridge grows a little bit. So this week I'll focus a lot on these design issues, and also I need to write unit tests against MS's implementation to derive a bunch of constant values.

It should be a fun week; I like this sort of stuff.

Monday, March 31, 2008

Tweeters, UIA Status

Climbing, Addiction

I took last week pretty easy, since I was still kind of wiped out from being sick. This allowed me to be refreshed and ready for my weekly Thursday rock climbing. This week our usual group was supplemented by new friends and some friendly geeks (it was almost a BarCamp reunion). I had a pretty good climbing night, and then we went out for dinner at Shakespeare's Pub which is always fun.

Dinner with a big group is interesting and fun because there are usually two or three main conversations going on, and the center of those conversations may shift around the table. What was weird at this dinner was that any time there was a lull in the conversation, the geeks produced their smart phones and (presumably) caught up on email, feeds, and general internet happenings. At the other extreme, if somebody made a particularly witty comment, these same geeks raced each other to Twitter it.

It was kind of surreal...I generally consider myself too plugged-in, so I avoid highly-addictive services like Twitter. During the recent San Diego fires, I did find Twitter the best source for fire news, but in general I've made a conscious effort to *not* join that community. I really wonder what these services do to a person's attention span. When spending time with tweeters, I get the feeling that if I am not a constant source of interest or entertainment, they will be quickly drawn back to the web via the nearest terminal.

Previously I've thought about how convenient it might be to have a cool smart phone that I could develop software for, but now I fear that my addictive personality would quickly fall victim to these pitfalls.

I kind of get the feeling that hyper-plugged-in people are not so much the creators of Web 2.0 as they are the "product" for some weird Web 2.0 economy. Although, they could just be geniuses with much more time and energy than I have... ;-)

UIA Status


In other news, I made some good progress last week. I have a hacky little patch to winforms that initializes the providers via reflection, and exposes a FormAdded event to get notified when forms are created. I really want to stress that this is just a proof-of-concept to get the pieces connected for UIA, and is not ready (for various reasons) to be proposed for inclusion in Mono. Anyway, this initializes our new UIAutomationWinforms assembly so that it can create providers as Forms are created. I also made a little more progress on the WindowProvider and ButtonProvider, but they haven't been my focus so they are still incomplete. I wanted to work more on our "core" that will connect the UIAutomationProvider assembly with the winforms provider and the UIA<->ATK bridge, but ended up getting stuck reading a lot of documentation about the Microsoft implementation.

Andres has done some awesome work to get the bridge working, so I'll be working with him to get the end-to-end model working. It will be very nice to have a thin vertical slice of our entire infrastructure working, so that we can at least see winforms windows in Accerciser. I'll be working on the core and improving providers this week.

Summer of Code Deadline Extension

Also, the deadline for submitting proposals to GNOME for Summer of Code 2008 has been extended by one week. I spent a lot of time this weekend reviewing the proposals we have received so far, and plan on spending next weekend in much the same way. There are some really great proposals in there, but it will be good to see what another week brings us. I don't expect to do any mentoring (I didn't propose any Tomboy ideas this year), but it's fun to help out with the whole process. My main role this year will be getting on people's backs about deadlines and overall status. ;-)

Monday, March 24, 2008

Fevers and hacking go together like rocks and rollerskates

So I was pretty sick last week, running a high fever for several days. Consequently, I didn't get a whole lot done. But here's my status since my last update...

I talked with Jonathan Pobst and Geoff Norton to figure out how we should hook into the winforms implementation...Calvin, Andres, and I had been discussing the idea of implementing the UIA providers directly in the winforms assembly. Turns out we really can't be adding anything public to winforms or even adding additional dependencies, since we need to match the Microsoft implementation. Therefore, we'll be trying the following approach:
  • Winforms UIA Providers are implemented in a separate assembly (WinformsAutomationProvider).
  • When the Winforms assembly initializes, it will use reflection to initialize required UIA assemblies like the provider implementation (and possibly the UIA<->ATK bridge).
  • The WinformsAutomationProvider assembly will use reflection to hook into an internal Winforms event that will allow providers to be created as new forms and controls appear. This internal event may need to be added to Winforms.
I made a diagram of this to help me visualize the interaction. It assumes the existence of a UIA "Core" that would sit in between provider implementations and potential bridges. This would be a more flexible design, but there's no reason we can't just have our provider implementations go straight to the UIA<->ATK bridge if that makes the most sense.



In the future there will be at least one more provider implementation (Moonlight), and potentially there could be other bridges if we needed to target other accessibility platforms. Anyway, the big question mark in there is who is the one to initialize the bridge. That's probably a piece of conditionally-compiled code sitting in the core, though I haven't really thought much about it.

So I've been working on provider implementations for Form and Button, with some success. I also experimented with a couple of ways to set up the internal Winforms event. By the end of this week, I will have created the infrastructure for the WinformsAutomationProvider assembly, which will include my Form and Button providers. I will have a patch to Winforms that initializes that assembly, so that I can dynamically create providers as forms are created. I may also work on the Core or whatever else needs to be done.

I'm looking forward to a more productive week.

Monday, March 10, 2008

A week in Cambridge, a11y status, new Tomboy release, and other hacking


So I spent last week in Cambridge, getting to know Mike and Andres, who just joined the Mono Accessibility team. Aside from consuming massive amounts of seafood, I became a lot more familiar with the project and the entire accessibility landscape. I do wish I'd seen more of Boston, though.


I'm going to start blogging a sort of status report every Monday, to keep everybody informed about what I've done and what I'll be doing as part of implementing UIA on Linux. This is the first such entry. Last week was kind of a wash for development, but I did help get Mike and Andres set up, verify some of our unit tests against the MS UIA implementation in my new Vista VM, and delve into winforms code. We need some way to know when new Forms are created so that we can register them in the UIA-ATK bridge, but once they are created, I believe we can implement the UIA "provider" interfaces with just regular access to the public members of forms and their controls. Though I've been warned that it may be necessary to hook in a bit lower in the winforms code...

This week I intend to start implementing some basic UIA providers (window, button, etc). I'll drop some code into winforms to alert me when new forms are created, and since the UIA-ATK bridge is not quite ready, I'll write a few tests directly against the provider interfaces. Should be fun!

In other news, Boyd just released Tomboy 0.10.0! This is a nice release with a lot of polish. I think people are really going to like Notebooks...I'm looking forward to feedback that should let us know if we were right or wrong in going with Notebooks instead of free-form tagging (which is totally supported in the implementation, if anybody wants to write an addin or dbus client). I'm sure that we'll get a lot of good suggestions from our users, as usual. Soon we'll have a meeting to plan our next release, so keep your ears open!


I've also been spending some time on Tasky, which I'm liking a lot better than the other task programs I've tried. In general I like RTM's Gmail extension for Firefox, but its mouse dependence really slows me down. My favorite RTM/Gmail feature is how I can type in a task like "lunch today" or "release tomboy 0.10.0 march 10th", and it will become "lunch" or "release tomboy 0.10.0" with the proper due date set. I've implemented this for Tasky, though I don't yet support as many natural language phrases as RTM/Gmail does (we don't appear to have a cool library like Chronic for .NET). Hopefully some variation on my patch will make it into trunk, as I think this is the easiest way to type in tasks with a due date. What do you think?



Other things I'd love to hack on when I have time: offline Tasky for RTM, DAAP client support in Banshee trunk, and better refactoring support in MonoDevelop (like typing out a new method call, right-clicking the method, and choosing "Implement method"). I'll save my Tomboy thoughts for a future entry...

Tuesday, February 26, 2008

A Few Firsts

Monday had some pretty interesting firsts for me...
  • First day with a 30-second commute, instead of a 30-minute one.
  • First day where getting to my desk didn't require a badge and several security checks.
  • First day writing software for citizens instead of soldiers.
  • First day writing free software full-time.
  • First day working for Novell.
Yes, the rumors and tabloids are true: I've joined Calvin's accessibility team. I'm really psyched with this turn in my career. It's a nice change to support a cause that is more aligned with my own values. Not to mention that I'll be working with a bunch of engineers that I really respect, and from whom I hope to learn a lot.

Plus...I've always wanted to take my dogs to work! ;-) Working from home is...interesting.

Oh, and another first: this is the first day where I've been allowed to take a picture of my work area! Behold!


Just imagine a bowl of cereal by my headphones, a dog under the desk, and OpenSUSE on my awesome company-provided 24" LCD, and you'll see what I see right now.

Cheers!

Monday, November 12, 2007

Slides from my talk

Talking at BarCamp San Diego

So I wasn't really sure what I wanted to talk about at BarCamp, and I've been way too busy to prepare anything. Since this was my first BarCamp, I didn't really know what to expect. I assumed my audience would mostly be Mac-toting, TextMate-using Rails developers, with a healthy dose of open source enthusiasts (and probably not too many free software zealots).

So with that in mind, I thought I'd talk about .NET, and whether or not geeks in general should use it, weighing its technical strengths against its source. My approach was to show that .NET was a compelling platform in a few minutes, and then set up the grounds for a discussion about whether or not it is in our best interests to consume a Microsoft product like that. I did *not* want to talk about whether or not free software zealots should be interested in Mono, because that's just exhausting. I threw the slides together Saturday morning, tweaked them a bit while at BarCamp, and presented on Sunday.




What I learned
  • People came to my talk who really just wanted to hear more about .NET or Mono. This slowed things down a bit, but I'm glad I was able to help.
  • 30 minutes goes by much faster than you think.
  • Telling people they can interrupt and ask questions at any point is counter-productive to trying to power through slides and then have time for a discussion. We didn't really have time.
  • BarCamp folks are awesome and forgiving even if you're not the best presenter.
  • Most people want to be presented to during these 30 minute sessions, so it's important to have a strong focus and a clear message. I didn't really have those, but it still went well I think.
  • Scheduling your talk against one entitled "How To Make Money Online" is not a great idea after half the people you meet have identified themselves as "entrepreneurs". At least I didn't have to watch it!
  • Turns out I'm not that bad of a presenter when I know what I'm talking about.

Sandy, Presentator

Friday night I came home from work, somewhat exhausted, with the goal of starting my slides. I thought I'd try Google Presentations and see what all the fuss was about. Bad idea. I spent almost half an hour preparing five shitty slides, without having time to think about where I really wanted my presentation to go. And I found myself making bullets, just because, the same way I've always felt compelled to make stupid bullets when using PowerPoint/OO.o/etc. I went to bed frustrated.

The next morning I realized it just wasn't going to happen. I had only a couple of hours to clean up and head to BarCamp. Then I remembered somebody at work using a cute little XUL app to prepare Takashi-style presentations. It was perfect! Please load up my slides and press ctrl+e to see how easy it is to write slides in that style. I had a blast, and it was really fast and easy to tweak them on the fly when I had an idea. Plus, I had no problems hacking the CSS and XUL/JavaScript to handle little things I wanted to work differently (EM=>Red in EVA mode, ability to use images without specifying height/width, etc). I managed to do a pretty good job presenting without rehearsing, though if I had a more difficult/subtle topic/message or a longer presentation, I think practicing would be really important.

The downside: my slides only work in XUL-based browsers. I've only tested them in Firefox.
I'm sure there's a way (or easily could be) to do the same sort of thing using S5. I'll look into that for next time.


BarCamp San Diego 2

I have more thoughts about BarCamp, but I think I'll just write about them later. I will say I was a little sad that there were no hackfests, but it's not like I tried to organize one, so I can't really complain. Unconferences are both awesome and weird, and this was my first. Looking forward to the next one!

Friday, November 2, 2007

BarCamp San Diego


I'll be attending BarCamp San Diego next weekend (November 10th-11th), which will be my first experience with anything like that. I'm extremely psyched...I hope the massive overtime I'll be putting in next week won't impair my ability to hack. A friend of mine (and rock climbing partner!) will be there, too...she has an awesome idea for a web app to hack on, which would be a pretty neat change of pace for me.

Will any other GNOMEers be there? They say if it's your first time at BarCamp you have to present (sounds familiar). I was thinking about talking about Mono or leading a discussion about how .NET should be approached by geeks, considering its source. People are writing a lot of free software using the .NET framework (I'm not even talking about Mono here), so it's an interesting topic to me.

If anyone's interested in hacking, doing some sort of GNOME-related presentation, or just meeting up, let me know.