Disclaimer: This is a personal web page. Contents written here do not represent the position of my employer.



lunes, junio 01, 2009

 

It's all about synchronization

It's been a while since I first blogged about iFolder. At that time it was a bit unstable and I didn't have a good experience overall with it. Unfortunately the development of new features stopped, but there were a lot of fixes to improve its stability, which made into the version 3.7. Unfortunately again, this version was not released on the open, but now Novell has rectified and iFolder is gaining momentum again (especially because it's the only really open source alternative to DropBox or UbuntuOne!).

Who could have imagined at that time, that 3 years later I would not only be working for Novell, but also be able to contribute to it at normal work hours! Yes, this is ITO, and our team spent a week hacking on other projects. In my case, I worked with the awesome guys Stephen Shaw and Mario Carrión. We managed to create an iFolder appliance for the server based on openSUSE 11.1, very easy to install thanks to SUSE Studio and to a new OBS repository where we packaged a preview of Mono 2.4.2 and some fixes needed to make it work.

We even created some demos! (Sorry for the quality of the sound, we had some problems when recording them)

The first one: setting up the appliance.
The second one: creating a user and using the Linux iFolder client.

Now, the next two videos are intended to show the second part of our work on that innovation week: new features.

The third one: automatic/immediate local detection of changes, server side trash can.
The fourth one: automatic/immediate remote synchronization of changes.

How cool is that? Unfortunately, the patches still need work and cleanup (help welcome!), but I plan to do it soon and/or on next hack week.

Before coming back to hacking on iFolder, I wanted to finish some stuff am working on for Banshee, which is also about synchronization! Look at this bug for more details. Yes! bidirectional Rating synchronization, not only from Banshee to the iPod but from the iPod to Banshee. The patch is working fine for me, be sure to give it a go and provide some feedback. Thanks!

Another thing I have on my TODO list is integrate some old mono-based GPL ed2k library into monsoon, now that it's getting MonoAddins support! (Lately there's been many people asking me for the source code.) And now that I talk about monotorrent, how cool would be to make iFolder work with this awesome library??

PS: Hello PlanetSUSE! First post. Hola Planeta GnomeHispano ;)

UPDATE Jun-08-2009: It seems someone wants to resurrect the lphant kernel as well, but using WPF! (WTF?): http://sourceforge.net/projects/hathi/.

Etiquetas: , , , ,


lunes, marzo 30, 2009

 

I14Y happens

Some years ago, I started to get familiarized with abbreviations like 'l10n', 'i18n' when I started contributing to the translation efforts of Mozilla & Firefox under the NAVE Project.

Some months later I came to know the new term 'a11y', and I started to see it in a lot of places. By that time, I only associated it with the web development world. Terms like "Unobstrusive JavaScript" were very related to it (and I even created an "AJAXy" library called AMUSE for this purpose).

Now let's talk about the next one: I14Y. This concept is present when things like this happen: "I can open an (Microsoft's)OpenXML file with some (Novell's) edition of (Sun's)OpenOffice". Or even more weird things: "I can manage my (Apple's)IPod thanks to a (Microsoft's).NET-powered application called (Novell's)Banshee". Or even more awesome ones: "I can use (Sun?'s)Orca screen reader to control my (Microsoft's)Windows.Forms-powered applications in my (Novell's)SUSE Linux Box!".

So, yeah, we made it! Along with the awesome releases of Mono 2.4 and MonoDevelop 2.0.

Now, guess what's the word?

Etiquetas: , , , , , , ,


miércoles, febrero 04, 2009

 

My first .NET runtime wishlist item

Heh, I came up with this while coding a patch for Banshee:


public class TestStaticInits
{
  public static readonly X var = new X ("Hello" + world);
  private static string world = " World";
}

public class X
{
  public X (string s)
  {
    Console.WriteLine (s);
  }

  public override string ToString () { return "Bye"; }
}

public class WishList
{
  public static int Main(string[] args)
  {
    Console.WriteLine (TestStaticInits.var.ToString ());
    return 0;
  }
}


Shouldn't this print Hello World instead of just Hello? Basic initializations should have more priority than those involving constructors :)

At least it works if you replace the second static with const... But this confused me a bit for a while. So definitely something the compiler could warn about (ok, Gendarme is another candidate too).

UPDATE: And anyway, if we accept that our runtime is not so clever, it should give a NRE instead of printing Hello, right? You cannot concatenate a string with null. So is this a .NET bug?

UPDATE: Doh! I could have sworn that I got a lot of NRE's in the past when coding this Console.WriteLine ("Hey" + null); (I mean, when using a var and not protecting against null). Thanks for all the comments.

Etiquetas: , , ,


viernes, diciembre 26, 2008

 

On open source software and technical support: the reality

I was curious about some discussion threads posted in LinkedIn's Open Source group. One had the following content:


Is 2009 The year of "supported open source" Do you agree or disagree ?

I have to admit having worked on both sides of the fence the biggest trend we are now experiencing on web related project requirements is the shift to "supported open source technology"...

The days of 6 figure plus licence fees are now over "phew" our clients thankfully quote...

Old versus New

Interwoven / Vignette versus Alfresco / MySource Matrix ?
Salesforce versus Sugar CRM ?
Documentum / Trim versus Alfresco / Sharepoint Integrated CMS's

What are your thoughts fellow CM Professionals ? Don't just take my word for it... http://cmswatch.com/Feature/189


I read some interesting opinions below, such as this one from Tony Wasserman:

To me, the issue here is adoption and use of open source software by companies and governments for activities that are essential to their businesses. One of the key corporate criteria for that type of software acquisition is availability of long-term 24x7 support, including service level agreements for problem resolution. These CIO's and other decision-makers just don't accept the idea that they can post their issues on a forum and that someone will post a reply. They want a toll-free telephone number to call with the assurance that someone knowledgeable will answer and address the issue.

For example, while small companies and the technically knowledgeable will download and install the Drupal CMS (and its underlying components), the corporate buyer, by contrast, will go to Acquia, gladly paying for support. As a better example, many of the installations of open source software in corporate environments are being done through consultants and system integrators, such as Wipro, Infosys, Accenture, and IBM.

So now the next question is whether the demand for open source software will increase in 2009. For that, I would give a qualified "yes". Startups have been building their companies on open source software for most of this decade, and will continue to do so, but they are not spending a lot of money on support, consulting, and training services. Developers in companies of all sizes have also long used open source software packages and libraries, including Eclipse, NetBeans, JBoss, MySQL, and hundreds of others, again without much money changing hands.

For enterprise applications, companies have already made substantial investments in existing proprietary software from Oracle, SAP, Microsoft, and other vendors, so it is hard for them to justify replacing it. The enterprise opportunities for open source come with new applications, and with growing companies that need these applications.

So I think that there will be growing revenue in 2009 for the system integrators providing open source support and services, as well as some money for the vendors of commercialized open source products, such as Zenoss, Groundwork, and other infrastructure packages. I think that the growth for the application packages is probably a little further out, though I would make an exception for OpenOffice.org , which has already seen a lot of acceptance.


Or this one from Glenn A. Curry:


Tony brings up an interesting issue. That of access to tech support. But our experience has been that the tech support available from commercial software manufacturers is in many cases worse than nonexistent. Not all have 24x7. And even if there is someone that answers the phone, there typically is little value in talking to them.

In trying to resolve software issues for our customers, we are most often given answers like "just keep reinstalling it till it works". Or they want security settings reduced because their interface is sloppy. Or they just flat give bad answers. The extremely poor level of phone support so often found is incredible. The battle required to move up the chain to someone that actually has a clue is frustrating and costly to the customer as they have to pay for our time while on the phone.

e.g. we spent days dealing with Sage on a Peachtree upgrade. Their solution (besides the before mentioned "just keep reinstalling it, that usually makes it work eventually") was to run as administrator all the time to get around a security problem. Eventually we found the problem and solved it with some port mapping. It was a common problem based on discussions on techie sites. AFAWK it is still a problem for them. We sure are not going to tell them how to fix THEIR bad software design for free. And noe one there had a clue.

And I won't even begin to list the massive Microsoft tech support nightmares.

Just because a company claims 24x7 tech support, does not mean it has an actual usable value.


So, without trying to be devil's attorney, I gave my opinion:


I think Tony and Glenn raise good points about support, but I would like to arise a third point, that maybe contrasts with them. The issue is not about support itself, but about what does "support" mean in open source software:

1) Yes, in open source, there's no monopoly about technical support, and this is always a good thing, except for the cases in which it can be seen wrongly as bad quality, because:
a) It may happen that there's no company behind an open source project, just one or some developers, and it's a bit awkward to ask them for support if they're not professionally gathered in some way. Besides, if the developer base is so small, it's going to be difficult to find another company which gives you support if they don't know much about the product.
b) It may happen that the developer-base is spread around many companies (for example: OpenOffice, the Linux kernel), so the company that needs support is normally confused as to which one is the best one to request support. This is awkward to a company which normally considers a product to come from "just one company".

2) Propietary software may mean a monopoly in regards to technical support but, let's face it: many incompetent people working inside companies just prefer some provider to blame if something goes wrong: "we're stuck in this issue because Oracle (or put you're favorite propietary software company here) technical support sucks", and it's not their fault anymore. If they had chosen an open source software solution, they may be accused of:
a) Not choosing the best provider for technical support.
b) Not fixing the issue themselves, since, if you have the code, it's just a matter of time to solve it, right?

Well, just trying to be realistic. Of course I advocate open source (I work on it on a daily basis), but just wanted to give some clues about why it's not getting the success it should have.


In general, the (2) point and (2a) in particular, is very similar to the reason why still incompetent but huge companies survive on the market: I've heard many cases of people just buying Oracle or Accenture because they're the most expensive. If all goes wrong, it's impossible they would be accused of selecting the wrong provider if they selected the most expensive one, right?

UPDATE 16-FEB-2008: Even though the above given problems about choosing open source solutions, here's a nice guide to try to overcome them: Convincing Management To Approve Free Software.

Etiquetas: ,


jueves, octubre 16, 2008

 

Hilarious, but true (ninja crisis, a.k.a. how to hack the economy)


The Last Laugh - George Parr - Subprime - subtitulos


Update 01-NOV-2008: Awesome explanation of the current crisis here (in Spanish, sorry) (not so hilarious).

Etiquetas: , ,


domingo, septiembre 07, 2008

 

Hackweeks

I'm going to give a brief summary of what I've done in the past weeks (and specially previous week (last one in August), sponsored by Novell as The Hackweek - a form of ITO, in which you can hack at working hours and not only spare time!

I was not so lucky as most of my teammates, who spent the week on the wonderful offices (as they say) of Novell Utah. Maybe if I was in the states already... but well, I had recently an interview in the US Embassy which was the last step of my visa process, so I hope that at least I can make it for the Gnome Boston Summit!

So, firstly I thought of dedicating my week to this task that I submitted to the ideas website, but in the end realized it would be a ton of work to complete without help, and nobody joined me so I decided to learn to use OpenSuseBuildService in order to package Bugzilla, a pretty complex server side software.

Fortunately, I've learnt a lot this week, especially thanks to all the people in irc://irc.freenode.net/#openSUSE-buildservice (above all, darix) and some people from my team (Ray Wang and Stephen Shaw). I could also contact the author of the RPM file for Fedora (who was formerly working for Red Hat), and he's willing to help on joining efforts, as OBS is cross-distribution.

Unfortunately, packaging is a complex task and I didn't finish the package. The documentation is a bit incomplete and having past experience in packaging is a plus that I didn't have. It's awesome that inside our UIA Team we have exclusive resources dedicate to this, because it would be impossible to do from just the developer side.

One of the difficulties I found is finding packages I needed. I could find some of them (BTW, using Webpin is cool for searching on SUSE software repositories, including Packman; except for the fact that doesn't enhance one-click-install) but not all so then I'll have to help on providing packages for some CPAN Perl modules, contributing to the devel:languages:perl official repo.

On the way of learning OBS, I also filed bugs and feature requests (not only to OBS, but also to Banshee! as I have been using it a lot lately at the same time I hack and I even cooked some small patches):

OBS:
Usability issues in project creation page
Link to "My projects" fails if no home:login project has been created yet
New option for uploading the tarball
ChangeLogs parsing is too strict: lines beginning with tab are not recognized, only one date format is accepted
OBS should not allow to create a package named "packageand"
The spec parser should detect the use of a miscplaced packageand(_:_) keyword

Banshee:
No such file or directory errors while importing
Cannot empty some ID3 tag fields
Importing songs without album metadata breaks artist navigation on the iPod
Banshee inserts deduced fictional text on metadata
Should try to locate correct album (and download its cover) in case no album is supplied on metadata


The patches are quite simple so I hope they get committed soon! Clearly Banshee devs and contributors are doing an amazing work, I'm specially amazed by the Moonlight effects, the Muinshee front-end and the effort that it seems is being dedicated to bring Library Sync & Refresh for 1.4. I wish them all the best success.

So let's get back to packaging. Firstly I thought I had found some limitations in OBS or rpm systems because the lack of proper "dual dependency" support. In the past when I installed Bugzilla manually (and updated it to newer versions) I found it a bit hard to do it, specially to deal with DB creation and upgrade. I wanted to make this process easier for the potential rpm user, but without limiting the choice of the DB engine used (as now Bugzilla supports MySQL, PostgreSQL, and Oracle, although the latter was not on my scope). It turns out that it's really hard to apply virtual-provides rules for these cases, as we should stablish more sub-dependencies depending on the db engine you choose, such as perl-DBD-mysql or perl-DBD-Pg, and because it would cause inconsistent situations in case someone in the future replaces his DB-engine with the alternative one (as in theory it should work at the dependencies-level without warning). For references, you may be interested in reading the whole thread about it in the BuildService mailing-list, whose last message includes a possible hack to workaround these problems using patterns (although I don't like to use patterns for solving something like this).

Even discarding the dream about solving this at a package level, it's difficult to solve it at an app level that wouldn't involve reading manuals. My idea was to modify Bugzilla upstream in order to avoid running manually a local script for its initialization, and replace it with a nice web front-end (even if it's only allowed to be run locally). That would cause problems because normally the webserver user doesn't have enough permissions to create files and the database tables and initial data (I'm sure there's always a solution that also doesn't expose security problems, but it's hard to find it as it's noticed in this thread in bugzilla devel newsgroup; so, help is truly welcome).

Maybe the easier and fastest solution is a mixture of both worlds, that is, having a web front-end that asks you the initial configuration, and the form submission process just writes it in a local XML and tells the admin to open a console and run a script as root to finish the process. But even with this solution I guess we should need something to detect at runtime (which should be cross distribution) if some package is installed (which also checks the version). I guess there's already some of that capabilities used in the bugzilla's script checksetup.pl, so I would reuse them. However, in case it finds a problem, there's no way for the application to request installation of a package directly to your OS (but I've attended to a PackageKit conference in last Guadec in which I heard something about this possibility in the future!).

Etiquetas: , , , , , , ,


martes, julio 08, 2008

 

Subversion 1.5.0 highlights and some MD hacking

Subversion 1.5.0 has been recently released (June the 19th) and I'm surprised with the tons of great stuff it brings. Some highlights:

  • A common problem in older versions of Subversion was the way in which svn update handled incoming copies and moves.
    Consider this scenario: Harry runs svn move foo bar; svn commit, and meanwhile Sally makes local changes to 'foo', and then runs svn update. In earlier versions of Subversion, the server would send down a completely new file 'bar', and unversion the file 'foo' (if it had no uncommitted changes, Subversion would remove it entirely.) From Sally's point of view, her changes seem to be lost; the newly added 'bar' file has the older content, and the file 'foo' has been taken out of version control.
    In Subversion 1.5, the client and server both attempt to be smarter about this. The server doesn't send a whole new file during the update, but rather instructions to copy something that likely already exists in the working copy. So Sally's 'foo' file is copied to 'bar' (with local edits intact!).
  • Merge tracking means Subversion keeps track of what changes have been merged where. This reduces the overhead involved in maintaining branches, and gives users a way to inquire what changes are merged — or are available to be merged — on different lines of development.
    Example (one of the improvements in place): Merging changes from (say) trunk to a branch no longer requires that you specify the revision range. Instead, each time you want to sync up with trunk, you can just do:

    $ cd BRANCH_WORKING_COPY
    $ svn merge URL_TO_TRUNK

    Subversion will figure out what changes from URL_TO_TRUNK have not yet been merged and pull in just those changes. When it's time to merge the branch back to trunk, do this:

    $ cd TRUNK_WORKING_COPY
    $ svn merge --reintegrate URL_TO_BRANCH

  • Sparse checkouts (via new --depth option): Many users have very large trees of which they only want to checkout certain parts. In previous versions of Subversion, checkout -N was not really up to this task. Subversion 1.5 introduces the --depth option to the checkout, and other subcommands.
  • Conflict resolution is now done interactively by the command-line client for the update/switch/merge subcommands.
  • Relative URLs and @peg revisions for svn:externals.



Don't you think this is AMAZING? This means we almost got full/real MOVE support and that merging is taking the best ideas from DVCS systems (yes, we lack yet local commits).

To get up to speed with DVCS features I would also add pending commits feature although there are concerns and people seem to prefer it to be implemented upstream in bug tracking tools.

Well, I guess you already may have noticed I don't like current DVCS tools (at least the most popular), by a different set of (a little bit subjective, I know) set of reasons:

- Git: it's implemented in an unmanaged language (yeah SVN too, but at least the latter is cross-platform!).
- Bazar & Mercurial: they're implemented in a "too-managed" language (yeah sorry I dislike dynamically typed languages very much, especially for big developments that need to have a long life; yeah, refactorings are a pain with these ones, although I don't know the test coverage they may have...).

Maybe Git# (Mono SoC2008) is the answer? (I don't know the progress of this project.)

I was discussing about this yesterday with JP, and when I talked to him about this SVN 1.5.0 he said "too late!". Ermmm, what?, Gnome hasn't switched to DVCS yet so, why too late? Maybe because it's imminent? I don't know. Sincerely, there is much contradiction about how people approach migrations... Today I've been attending for almost an hour a meeting about Gnome Mobile, and one thing that was arised is the lack of flexibility and ease of use of the Gtk+ toolkit, as opposed to other toolkits. People were concerned about it and wanted to fix it, and nobody wanted to give up pushing Gtk+ just because it's old. Then, why doing this for Subversion? Subversion is very mature, and their devs have demonstrated to be worried about its lack of flexibility wrt the new distributed ways of work, so they are fixing it, they are *supporting* us. And however at Guadec here it seems everybody wants to push for the migration (but only taking care of doing the correct decision, i.e., select the 1 from the 3 we all know, but why not considering just to update to new SVN and wait a bit more to see where we go?

Well, now that I'm talking about Subversion, I'm going to talk you about a couple of features I worked on recently (and committed today), as my first ITO day, in the Subversion Addin of MonoDevelop: revert to revision, and revert changes from a revision. The mandatory screenshot (you get to this dialog when requesting the Log inside the Version Control contextual menu):


This reduces the need of having a console open when coding with the MonoDevelop IDE, which is a thing that many developers request.

Another feature I completed is the new pattern for searching in many files inside MonoDevelop: Current project (previously we only had "Whole solution", "Directories" and "Open files"):


Enjoy them! (Currently on SVN.)

Etiquetas: , , , ,


This page is powered by Blogger. Isn't yours?

Firma contra el canon