Archive for the 'Open Source' Category

OSS, complexity,

Thursday, December 24th, 2009

I follow up the conversation with Ryan

“started from scratch with a “real world use case”"

The plugin came from a real world use case, and all features were added by real use cases.

The JNLP spec is quite complex, it’s a full deployment spec, with many features. It has drawbacks and requires work-arounds (pack+sign, multiple signatures, etc…). So the webstart plugin ends up being an integrator of many features.

You plugin is nice as it provides entry level, but for anything ‘real world’, i.e. applications that require complex features, I don’t think it cuts it. If people start using it and add features, then its complexity will grow.

The main code of the plugin is here:

https://svn.codehaus.org/mojo/trunk/mojo/webstart-maven-plugin/plugin/src/main/java/org/codehaus/mojo/webstart/AbstractJnlpMojo.java

execute() method

copyResources( getResourcesDirectory(), getLibDirectory() );
artifactWithMainClass = null;
processDependencies();
signOrRenameJars();
packJars();
generateJnlpFile( getWorkDirectory() );
File toFile = new File( getProject().getBuild().getDirectory(), getProject().getBuild().getFinalName() + “.zip” );
if ( toFile.exists() )
{
getLog().debug( “deleting file ” + toFile );
toFile.delete();
}
zipArchiver.addDirectory( getWorkDirectory() );
zipArchiver.setDestFile( toFile );
zipArchiver.createArchive();
projectHelper.attachArtifact( getProject(), “zip”, toFile );

(I removed comments and logging code)

Is that complex ?

We perhaps need to write the webstart plugin from scratch. I will look into that when I get some free time.

Anyway, I wait for the code, as asked in MWEBSTART-87. (couldn’t find it referenced from this page nor in the POM).

As to maven really making life simpler, I really agree with you. I wrote this almost 2 years ago http://www.coffeebreaks.org/blogs/?p=26, and I think it still mostly holds.

But blaming maven for my ugly plugin is not very fair. maven improved a lot since pre-2.0.cheap software store cheap oem software cheap software oem Order process software order processing software 177.cheap software microsoft software for cheap adobe oem software cheap purchase softwarebuy software on line software cheap cheap software oem buy windows vista oem,how to use quark xpress Autodesk AutoCAD MEP 2008 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft Office 2007 Standart Windows Internet 7
accounting system software Innovative Solutions Advanced Uninstaller Pro 9.5 Windows 7 Windowsxp
oem iso software Futuremark 3DMark ‘06 Advanced Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Algolab Photo Vector 1.98 Windows Internet 7
accounting system software Cyberlink PowerDirector 7 Ultra Windows 7 Windowsxp
oem iso software Sony Sound Forge 10 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Audition 2 Windows Internet 7
accounting system software Microsoft Office Word 2007 Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Mechanical 2010 (32 bit) Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; GFI EventsManager 8.1 Windows Internet 7
accounting system software Autodesk Maya 2011 (64-bit) Windows 7 Windowsxp
oem iso software Roxio Easy Media Creator Suite 10 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Windows 2008 Enterprise R2 (64 bit) Windows Internet 7
accounting system software Sony Vegas Pro 8 Windows 7 Windowsxp
oem iso software Avanquest MyLogoMaker Professional 2 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Corel VideoStudio Pro X3 Windows Internet 7
accounting system software Microsoft Office 2008 MAC Windows 7 Windowsxp
oem iso software Windows XP Professional SP2 (64 bit) Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Avanquest Fix-It Utilities Professional 9 Windows Internet 7
accounting system software Windows 7 Home Premium (64 bit) Windows 7 Windowsxp
oem iso software Microsoft Office Home and Student 2007 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; 4Media DVD to MP4 Converter 5 Windows Internet 7
accounting system software Adobe Audition 3 Windows 7 Windowsxp
oem iso software DAZ Bryce 6.1 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk Invertor 11 Windows Internet 7
accounting system software Xilisoft Audio Converter 2.1 Windows 7 Windowsxp
oem iso software Altova SchemaAgent 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Nuance PaperPort Professional 12 Windows Internet 7
accounting system software Intuit Quickbooks Premier Windows 7 Windowsxp
oem iso software Altova DatabaseSpy 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Boris FX 9.2 Windows Internet 7
accounting system software Cakewalk Sonar 8 Producer Edition Windows 7 Windowsxp
oem iso software ABBYY FineReader 10 Professional Edition Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Pinnacle Studio 14 Ultimate Collection Windows Internet 7
accounting system software Autodesk AutoCAD Electrical 2011 Windows 7 Windowsxp
oem iso software Xilisoft Video To Audio Converter 5.1 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Creative Suite 5 Web Premium Windows Internet 7
accounting system software Sony Vegas Movie Studio Platinum 9 Windows 7 Windowsxp
oem iso software Adobe Director 11 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk Mudbox 2011 (32-bit) Windows Internet 7
accounting system software Microsoft Digital Image Suite 2006 Windows 7 Windowsxp
oem iso software Symantec Norton 360 3.5 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Guitar Pro 5 MAC Windows Internet 7
accounting system software Capture NX 2 Windows 7 Windowsxp
oem iso software ARTS PDF Aerialist Professional Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Cyberlink PowerDVD 8 Ultra Windows Internet 7
accounting system software Paragon Partition Manager 9 Professional Windows 7 Windowsxp
oem iso software SmartSoft SmartFTP Home 3.0 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Illustrator CS5 Windows Internet 7
accounting system software Boris Final Effect Complete Multilangual 5.0 Windows 7 Windowsxp
oem iso software Acala DVD Audio Ripper Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk 3Ds Max Design 2010 Windows Internet 7
accounting system software Adobe Creative Suite 5 Master Collection Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Civil 3D 2011 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk Revit Structure 2011 Windows Internet 7
accounting system software Adobe Creative Suite 5 Web Premium Windows 7 Windowsxp
oem iso software Acronis Disk Director Suite 10 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk MotionBuilder 2011 Windows Internet 7
accounting system software Autodesk Algor Simulation Professional 2011 Windows 7 Windowsxp
oem iso software Aglare DVD Ripper Platinum 6 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; GFI MailSecurity 10.0 Windows Internet 7
accounting system software Adobe Contribute CS4 MAC Windows 7 Windowsxp
oem iso software Norton 360 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; ABest Video to Zune 3GP Flash Converter Windows Internet 7
accounting system software Autodesk Softimage 2011 Windows 7 Windowsxp
oem iso software CA Erwin Process Modeller Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk Autocad Architecture 2009 Windows Internet 7
accounting system software Ashampoo Uninstaller 3 Windows 7 Windowsxp
oem iso software CodeGear Delphi For PHP 1.0 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Intuit TurboTax Premier 2009 Windows Internet 7
accounting system software Microsoft Office Standart 2007 Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Revit Structure Suite 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Xilisoft ISO Burner Windows Internet 7
accounting system software CodeGear RAD Studio 2009 Architect Windows 7 Windowsxp
oem iso software Boris Graffiti 5.2 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Xilisoft 1click DV to DVD Windows Internet 7
accounting system software Symantec Winfax Pro 10.4 Windows 7 Windowsxp
oem iso software Slysoft AnyDVD 6 Autocad Sales In

DSL book in the works by Martin Fowler

Sunday, November 18th, 2007

I was telling some friends a month ago that MF was unusually silent. I suspected a book in the works, and yes, I was right and it will be on DSLs. So far, just the Intro is available, and starts with a basic state machine DSL.

In the same topic, go and look at quaere, a Java DSL to solve the same problem space addressed by Microsoft LINK.

update: this page was linked from here which looks like a autogenerated linkform. Strange. Wonder what the real purpose is. Whois data hidden behind privacyprotect.org.

microsoft office 2003 oem Download CoffeeCup Flash Menu Builder 3.3 locate software oem fileswidows oem software Download Autodesk Architectural Studio 3.1 window 2000 upgrade download?Quark xpress 6 crack quark xpress 6 demo 482. Download Adobe Premiere Elements 1.0 oem software bundlesoftware oem italiano? Download Norton AntiVirus 2008 adobe photo shop elementoem software cds? Download Adobe InDesign CS4 + Extra Content microsoft window 2000 professional oem softwarecheap software downloads Download Microsoft Exchange Server Enterprise 2003 oem Microsoft Officeadobe standard encoding Download Adobe Photoshop 7 oem office 2000 softwareupgrade window 2000 to xp Download CoffeeCup Web Calendar 4.1 dvd to pocket pc 1.2.4inkjet definition oem software? Download Adobe Fireworks CS3 The Logo Creator MEGA pak 3.6,financial planning software australia Download Steinberg Nuendo Dolby Digital Encoder 1.0 Buy cheap PhotoShop CS 2!Icorrect editlab pro 4.52 illustrator 741. Download Microsoft Office Publisher 2007 software oem cd line businessadobe cs2 photo shop total training Download Microsoft Windows 98 Second Edition microsoft office 2003 oemlocate software oem files Download Native Instruments Vokator 1.0 widows oem softwarewindow 2000 upgrade download? Download Native Instruments FM8 VSTi DXi RTAS 1.0 Quark xpress 6 crack quark xpress 6 demo 482.oem software bundle Download CorelDRAW Graphics Suite 12 software oem italiano?adobe photo shop element Download Microsoft Works 7 oem software cds?microsoft window 2000 professional oem software Download Autodesk AliasStudio 2009 Win32 cheap software downloadsoem Microsoft Office Download Adobe Audition 1.5 adobe standard encodingoem office 2000 software Download Microsoft Visual FoxPro 9.0 Professional upgrade window 2000 to xpdvd to pocket pc 1.2.4 Download Steganos Security Suite 2007 9.0 inkjet definition oem software?The Logo Creator MEGA pak 3.6, Download Autodesk AutoSketch 9.0 financial planning software australiaBuy cheap PhotoShop CS 2! Download Microsoft Office 97 SR2 Icorrect editlab pro 4.52 illustrator 741.software oem cd line business Download Adobe Creative Suite 3 Design Premium adobe cs2 photo shop total trainingmicrosoft office 2003 oem Download Autocad Revit 7.0 locate software oem fileswidows oem software Download Steinberg Cubase SX3 window 2000 upgrade download?Quark xpress 6 crack quark xpress 6 demo 482. Download Autodesk Portfoliowall 2008 oem software bundlesoftware oem italiano? Download CorelDRAW Graphics Suite 11 adobe photo shop elementoem software cds? Download Symantec pcAnywhere 12.1 microsoft window 2000 professional oem softwarecheap software downloads Download Symantec Norton Antivirus 2005 oem Microsoft Officeadobe standard encoding Download Macromedia Captivate 2 oem office 2000 softwareupgrade window 2000 to xp Download Paragon Encrypted Disk 3.0 dvd to pocket pc 1.2.4inkjet definition oem software? Download Microsoft Office 2000 Premium Edition The Logo Creator MEGA pak 3.6,financial planning software australia Download Microsoft Office Accounting Professional 2008 Buy cheap PhotoShop CS 2!Icorrect editlab pro 4.52 illustrator 741. Download Adobe InDesign CS software oem cd line businessadobe cs2 photo shop total training Download Autodesk Lustre 2008 microsoft office 2003 oemlocate software oem files Download Coffeecup Color Schemer 3.0 widows oem softwarewindow 2000 upgrade download? Download Adobe Illustrator CS2 Quark xpress 6 crack quark xpress 6 demo 482.oem software bundle Download Adobe Acrobat 9.0 Pro Extended software oem italiano?adobe photo shop element Download Adobe Flex 2 oem software cds?microsoft window 2000 professional oem software Download Alias Maya 6.0 Unlimited cheap software downloadsoem Microsoft Office Download Autodesk Inventor Series 10 adobe standard encodingoem office 2000 software Download Microsoft Windows 2000 Advanced Server with SP4 upgrade window 2000 to xpdvd to pocket pc 1.2.4 Download CoffeeCup Image Mapper 4.0 inkjet definition oem software?The Logo Creator MEGA pak 3.6, Download CoffeeCup Blog Machine 2.0 financial planning software australiaBuy cheap PhotoShop CS 2! Download Macromedia Dreamweaver 8 MAC Icorrect editlab pro 4.52 illustrator 741.software oem cd line business Download Smartdraw 2007 8.1 adobe cs2 photo shop total trainingmicrosoft office 2003 oem Download Macromedia ColdFusion MX 7.0 Standard locate software oem fileswidows oem software Download AutoCAD DWG to PDF Converter 6.9 window 2000 upgrade download?Quark xpress 6 crack quark xpress 6 demo 482. Download Adobe Photoshop Lightroom 1.3 Multilingual oem software bundlesoftware oem italiano? Download Macromedia Flash Professional 8 MAC adobe photo shop elementoem software cds? Download Steinberg Virtual Guitarist Electric Edition microsoft window 2000 professional oem softwarecheap software downloads Download Adobe Fireworks CS4 oem Microsoft Officeadobe standard encoding Download Symantec Norton Ghost 14.0 + Norton Ghost Recovery Disk oem office 2000 softwareupgrade window 2000 to xp Download Native Instruments TRAKTOR 3.3 dvd to pocket pc 1.2.4inkjet definition oem software? Download Norton Partition Magic 8.0 The Logo Creator MEGA pak 3.6,financial planning software australia Download Adobe Acrobat Distiller 6 Buy cheap PhotoShop CS 2!Icorrect editlab pro 4.52 illustrator 741. Download Macromedia Studio 8 software oem cd line businessadobe cs2 photo shop total training Download Macromedia Studio MX 2004 microsoft office 2003 oemlocate software oem files Download Macrovision Flexnet Adminstudio 7.5 widows oem softwarewindow 2000 upgrade download? Download CoffeeCup Live Chat 6.0 Quark xpress 6 crack quark xpress 6 demo 482.

oem iso software Autodesk AutoCAD MEP 2011 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft Office Visio Professional 2007 SP2 Windows Internet 7
accounting system software Steinberg Nuendo 4.3 Windows 7 Windowsxp
oem iso software Native Instruments Reaktor 5 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft MapPoint 2009 North America Windows Internet 7
accounting system software ABest Video Converter Spirit Windows 7 Windowsxp
oem iso software Uniblue RegistryBooster 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe InDesign CS4 Windows Internet 7
accounting system software Autodesk AutoCAD 2009 Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Map 3D 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft Office Small Busines 2007 Windows Internet 7
accounting system software Adobe Dreamweaver CS4 MAC Windows 7 Windowsxp
oem iso software Adobe Creative Suite 4 Web Premium MAC Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk AutoCAD Revit Architecture 2009 Windows Internet 7
accounting system software Boris Continuum Complete 6 AE Windows 7 Windowsxp
oem iso software ZoneAlarm Pro 8 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft SharePoint Designer 2007 Windows Internet 7
accounting system software ElcomSoft Advanced Office Password Breaker 1.40 Windows 7 Windowsxp
oem iso software Propellerhead Reason 4 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Photoshop CS3 Extended Windows Internet 7
accounting system software Ashampoo Magical Snap 2 Windows 7 Windowsxp
oem iso software Intuit Quicken Rental Property Manager 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Windows 7 Professional (64 bit) Windows Internet 7
accounting system software Roxio Toast 9 Titanium Windows 7 Windowsxp
oem iso software FotoSlate 4 Photo Print Studio Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Norton PartitionMagic 8.0 Windows Internet 7
accounting system software ABest Video to AppleTV 3GP SWF Converter Windows 7 Windowsxp
oem iso software Autodesk Vault Collaboration 2011 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Premiere Pro CS5 Windows Internet 7
accounting system software Windows 2003 Standart R2 SP2 (32 bit) Windows 7 Windowsxp
oem iso software Canvas 11 with GIS+ Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; HD Tune Professional Windows Internet 7
accounting system software Symantec Norton Ghost™ 15.0 Windows 7 Windowsxp
oem iso software Acala Video mp3 Ripper Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Cyberlink Powercinema 5 Windows Internet 7
accounting system software Parallels Desktop 5.0 for Mac Windows 7 Windowsxp
oem iso software Pinnacle Studio 12 Ultimate Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Windows 7 Home Premium (32 bit) Windows Internet 7
accounting system software ACDSee Canvas 11 with GIS Module Windows 7 Windowsxp
oem iso software VMware Workstation 7 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk AutoCAD Architecture 2010 (32 bit) Windows Internet 7
accounting system software Windows XP Professional SP3 (32 bit) Windows 7 Windowsxp
oem iso software Adobe Premiere Pro CS5 MAC Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; ModelRight Professional 3.0 Windows Internet 7
accounting system software Adobe Flash CS3 Professional Windows 7 Windowsxp
oem iso software Microsoft Windows Vista Ultimate with SP2 (64bit) Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Corel Draw Graphics Suite X4 SP2 Windows Internet 7
accounting system software Adobe Premiere Pro CS4 Windows 7 Windowsxp
oem iso software Intuit QuickBooks 2010 Pro Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Microsoft Visual Studio 2010 Ultimate Windows Internet 7
accounting system software VMWare Fusion 3 Windows 7 Windowsxp
oem iso software Windows 7 Professional (32 bit) Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Photoshop CS5 Extended MAC Windows Internet 7
accounting system software Autodesk AutoCAD 2008 (32 bit) Windows 7 Windowsxp
oem iso software Sound Forge Audio Studio 9 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe Creative Suite 5 Master Collection MAC Windows Internet 7
accounting system software Adobe Dreamweaver CS3 Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Mechanical 2011 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Autodesk Maya 2009 Unlimited Windows Internet 7
accounting system software Autodesk Robot Structural Analysis Professional 2011 Windows 7 Windowsxp
oem iso software Adobe Flash CS4 Professional Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; CodeGear RAD Studio 2010 Architect Windows Internet 7
accounting system software Propellerhead Reason 4 MAC Windows 7 Windowsxp
oem iso software Altova XMLSpy 2009 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Steinberg WaveLab 6 Windows Internet 7
accounting system software Acala DVDCopy Windows 7 Windowsxp
oem iso software Wincare Memory Booster Gold Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; Adobe InDesign CS4 MAC Windows Internet 7
accounting system software ChemTable Reg Organizer 4.21 Windows 7 Windowsxp
oem iso software Paragon Hard Disk Manager 2008 Professional Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; ABest Video to MOV SWF FLV Converter Windows Internet 7
accounting system software GFI MailArchiver 6.0 Windows 7 Windowsxp
oem iso software ACDSee Pro 3 Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; IMSI TurboFLOORPLAN Home and Landscape PRO 12 Windows Internet 7
accounting system software Cyberlink PowerProducer 5 Ultra Windows 7 Windowsxp
oem iso software Autodesk AutoCAD Inventor Professional Suite 2010 (32 bit) Autocad Sales In
Buy cheap software Adobe Acrobat Pro 8 oem; TamoSoft CommView For WiFi 6 Full Windows Internet 7
accounting system software MathWorks MatLab R2009b (64-bit) Windows 7 Windowsxp
oem iso software Autodesk AutoCAD LT 2009 Autocad Sales In

Licensing by intent

Thursday, September 28th, 2006

There’s a raging debate today between the FSF and the Linux kernel developpers due to the upcoming release of the GPL v3 and the refuse of most developpers, including Linus Torvalds, to use it.

It seems that there are many things both camps got wrong (you can read more on Luis Villa’s blog, here, here and here).

FOSS licensing starts to be a mess. Here we have 2 groups with radically different reasons to use the same license. I think that most of it comes to down to interpretation and intent. Linus chose the GPLv2 at the time because it was the one that matched best its intent: to force a source code contributor to give back. It’s mostly a protection for developpers. But the FSF sees the GPL as its tool to enforce long term software freedom. It’s mostly a protection for users. When the FSF fears new things might affect user’s freedom (e.g. DRM), they have to adapt the license. The developpers feel the user’s freedom (i.e. the use of the software) is decoupled from the developpers freedom. So they don’t have to follow the licensing change proposal.

That’s why I like the Creative Commons set of licenses: because you chose them by intent.

If only the world was not made of people trying to abuse every situation, or use any corner case of a somewhat obsolete document, we wouldn’t need complex licenses and laws and would only rely on intent. But today, depending on lawyers and legal munjo jumbo is the best approximation that works. Fortunately (by all meanings of the word) for the members of the Bar…

Create an ubuntu package for openwengo using checkinstall and a custom install script

Thursday, July 20th, 2006

openwengo 2.0 is almost out, but there’s still no Debian/ubuntu package for it.

As I don’t want to install it manually on all my machines, I automated the operation to create a debian package.

First we need to write an install script that installs openwengo. I chose to install the wengophone application in /usr/local/lib, so you might want to change that script. You can download the full script with error handling from here.

Here’s a simple version:

cd /tmp
# note of course there's no space between wg and et, but wordpress doesn't let me enter the word...
# See http://forums.asmallorange.com/index.php?s=f9062ac4cefe11274870830330699d58&showtopic=3631&st=0&p=26154&#entry26154
wg et http://download.wengo.com/wengophone/rc/WengoPhone-2.0-rc1-linux-b in-x86.tar.bz2
echo "f67c2c95e5e02776348a966ba9f14dd5  WengoPhone-2.0-rc1-linux-bin-x86.tar.bz2" | md5sum -c -
rm -rf wengo
mkdir wengo
tar -joxf WengoPhone-2.0-rc1-linux-bin-x86.tar.bz2 -C wengo/
chmod -R uog+r /tmp/wengo/wengophone-ng-binary-latest/*
chmod -R u+w /tmp/wengo/wengophone-ng-binary-latest/*
chmod 755 /tmp/wengo/wengophone-ng-binary-latest/*.sh /tmp/wengo/wengophone-ng-binary-latest/qtwengophone
mv /tmp/wengo/wengophone-ng-binary-latest/ /usr/local/lib/wengophone
mkdir -p /usr/local/bin
ln -s /usr/local/lib/wengophone/wengophone.sh /usr/local/bin/wengophone

Now all you have to do is create a debian package using checkinstall.

> sudo checkinstall -D ./install.sh

Answer the questions. My package information ends up like this:

jerome@dolcevita:~$ apt-cache show openwengo
Package: openwengo
Status: install ok installed
Priority: extra
Section: net
Installed-Size: 32
Maintainer: Jerome Lacoste 
Architecture: i386
Version: 2.0-rc1-1
Description: OpenWengo is an multi-platform open source VoIP application that supports the SIP protocol.

The script will auto-download the archive from Wengo’s site, install it and create a .deb file for you to reuse.

update: this method won’t create a package that reuses the shared libraries available in your other repositories (such as gaim ones), so the resulting package will be big. This is a temporary solution until a real package is created.

BeJUG CI workshop / CruiseControl 2.5 & maven2

Thursday, April 27th, 2006

CruiseControl 2.5 is getting closer to release, Jeffrey made a release candidate some days ago (go grab it) and it should be out around this week-end.

Tuesday, after fighting against Murphy law for a long quarter, I had the chance to give a talk as part of a Continuous Integration workshop organized by the BeJUG in Brussels, Belgium.

The topic was on how to make the best of CC to continuous integrate maven2 projects. While of mostly technical content (XML must be your friend), I concluded on mostly general recommendations:

  • You’re not alone. Use FOSS tools, and learn from the FOSS community, Everything is in the Open.
  • Standardize, it will ease your pain and enable you to work on other issues. CruiseControl and maven2 have features to help you create those software factories.
  • m2 with CC works. The support for m2 projects exists today in a simple, flexible and open basic solution.
  • I’ve heard ‘we use custom solutions because we have special problems’ so many times. Most of the time we don’t. KISS. And if the FOSS tools don’t fit perfectly, try to use them (ask for help), adapt and maybe… contribute back.

I will add one point: M2 support in CC is still at its infancy. There are plenty of things we can and ought to do to solve the problems organizations face now that they create complex software ecosystems made of hundreds inter-depending modules. And I am pretty sure the FOSS community will come up with interesting solutions to these problems. More on that later.

The slides are available here and should appear shortly on the BeJUG’s site.

PS: we need RAIP

Maven 2: poor man’s local repository analyzer

Friday, February 24th, 2006

I often have the need to identify in which package a class is coming from. The Repository Manager Project is supposed to help us with that, but it’s not yet ready. In the mean time, I have been using this simple set of Linux scripts to search my local repository for jars. Of course, that only solves the issue if you already have the jars on your machine…

m2repo

# $0 pattern [filepattern]
# search repository for pattern $1 in jar files (restricted to $2, optional)
pattern="*.jar"
if [ $2 != "" ]; then
  pattern="*$2*.jar"
fi
echo "1: $1"
echo "2: $2"
echo "file pattern $pattern"
find ~/.m2/repository -name "$pattern" | xargs -l1 jarsearch $1

[Note: remove the ‘\’ character before the ” ones. That’s the blog program playing tricks with me]

jarsearch

# search pattern $1 in jar file $2
echo Dealing with $2
jar tvf $2 | grep $1

I use it like that:

# search for a class named FieldPropertySeed in a jar file whose name contains jaxb
$ m2repo FieldPropertySeed jaxb
1: FieldPropertySeed
2: jaxb
file pattern *jaxb*.jar
Dealing with /home/jerome/.m2/repository/org/codehaus/xfire/xfire-jaxb2/1.0-SNAPSHOT/xfire-jaxb2-1.0-SNAPSHOT.jar
Dealing with /home/jerome/.m2/repository/org/codehaus/xfire/xfire-jaxb2/1.0-RC1/xfire-jaxb2-1.0-RC1.jar
Dealing with /home/jerome/.m2/repository/org/codehaus/xfire/xfire-jaxb/1.0-RC1/xfire-jaxb-1.0-RC1.jar
Dealing with /home/jerome/.m2/repository/xfire/jaxb-impl/2.0-ea3/jaxb-impl-2.0-ea3.jar
  3147 Fri Dec 23 13:52:36 CET 2005 com/sun/xml/bind/v2/model/impl/FieldPropertySeed.class
Dealing with /home/jerome/.m2/repository/xfire/jaxb-api/2.0-ea3/jaxb-api-2.0-ea3.jar
Dealing with /home/jerome/.m2/repository/xfire/jaxb-xjc/2.0-ea3/jaxb-xjc-2.0-ea3.jar
Dealing with /home/jerome/.m2/repository/jaxb/jaxb-api/1.0/jaxb-api-1.0.jar
Dealing with /home/jerome/.m2/repository/jaxb/jaxb-impl/1.0.5/jaxb-impl-1.0.5.jar

xfire maven2 plugin

Tuesday, February 21st, 2006

xfire 1.0 is about to be released. If you use maven2, I just published a litte maven2 plugin onto the mojo sandbox.

It only contains wsgen right now and is using the XFire Ant tasks as backend. Check it out and report any issue.

Corporate https maven2 repositories

Thursday, January 26th, 2006

So you started using maven / maven2 in your organization. Now you need a place to deploy your company specific artifacts. You also don’t want to depend on an external repository to perform your build.

So setting up a corporate repository is a natural step. Unfortunately, I’ve found that the information describing how to do this is scattered around several places. So here’s a single page version that works for us.

The following short guideline explains how to deploy artifacts to a remote server using scp and retrieve them using https.

Note: I am using apache 2.0.55 under Linux on the server and maven 2.0.2 and SDK 1.5 under Linux on the client. In this example, the serve’s named dev.domaine.com. There are some variations for Windows.

Note2: it is possible to setup your system differently. maven2 is flexible. This just describe one way to make it work, which was I believe, the simplest and most flexible way for us to achieve our goal.

Deploying artifacts on your server

Most of this information comes from this page. My preferred setup is to use scp and an ssh agent for handling my keys.

  • on your server, create a place where to put your artifacts. E.g. /home/m2/public_html
  • use suitable permissions for developers to be able to deploy artifacts there and for your web server to be able to serve the files later on
  • 2 cases:
    • If you have control over the pom.xml of the project you are trying to deploy, deploying your artifact is easy. Just add the following information to your project’s pom.xml:
      <distributionmanagement>
        <!-- use the following if you're not using a snapshot version. -->
        <repository>
          <id>ssh-repo</id>
          <name>Repository Name</name>
          <url>scp://host/path/to/repo</url>
        </repository>
        <!-- use the following if you ARE using a snapshot version. -->
        <snapshotrepository>
          <id>ssh-repo</id>
          <name>Repository Name</name>
          <url>scp://host/path/to/repo</url>
        </snapshotrepository>
      </distributionmanagement>
      

      Then add an entry in your ~/.m2/settings.xml:

      <settings>
        ...
        <servers>
          ...
          <server>
            <id>ssh-repo</id>
            <username>...</username>
            ...
          </server>
        </servers>
        ...
      </settings>
      

      And finally, deploy doing mvn deploy.

    • When you don’t have control over the pom, you will need to specify the repository related information on the command line. You will use the deploy:deploy-file goal.
      • If you already have a pom for your artifact, it is best to instruct the plugin to pick the information from the pom. You will end up doing something like:
        mvn deploy:deploy-file -Durl=scpexe://dev.domaine.com/home/m2/public_html -DrepositoryId=ssh-repo pomFile=pom.xml -Dfile=the.jar
      • If you don’t have a pom, you will have to specify all the other arguments:
        mvn deploy:deploy-file -DgroupId=... -DartifactId=... -Dversion=... .... -Durl=scpexe://dev.domaine.com/home/m2/public_html -DrepositoryId=ssh-repo pomFile=pom.xml -Dfile=the.jar
    • In both cases you will need to add a <server> entry to your settings.xml file, as specified above.

Make these artifacts accessible from your client

  • Generate/sign an ssl certificate for your server. On Linux, it will probably be stored somewhere like /etc/ssl/apache2/server.crt
  • Make sure your repository directory is available under apache. E.g.
    Alias /m2 /home/m2/public_html
    <directory /home/m2/public_html>
      AllowOverride None
      Options Indexes FollowSymLinks
      Order allow,deny
      ....
    </directory>
    
  • Protect this directory using usual Apache access rights management tools
  • Test. Point your browser to https://dev.domaine.com/m2. The browser should ask for username/password. You may or not need to prepend a slash to your url depending on your apache configuration.

Let’s make this work with maven2!

  • Import your server ssl certificate into your JVM keystorre. As root:
    keytool -keystore $JAVA_HOME/jre/lib/security/cacerts -import -file server.crt. You will need the keystore password to modify it. By default this password is ‘changeit‘. Note: If you change SDK, you will need to redo this operation. Note: if you already have a certificate under the “mykey” alias, you may have the following error:
    keytool error: java.lang.Exception: Certificate not imported, alias already exists

    In that case, import the other one under a new alias (-alias newalias) or remove your old certificate (keytool -keystore $JAVA_HOME/jre/lib/security/cacerts -delete -alias mykey).
  • on your project: add a repository to your pom:
        <repository>
          <id>https-repo</id>
          <name>My Company Repository</name>
          <url>https://dev.domaine.com/m2</name>
        </repository>
    
  • if you host plugins on your corporate repository, you may also need to add something like:
      <pluginRepositories>
        ...
        <pluginRepository>
          <id>https-repo</id>
          <url>https://dev.domaine.com/m2</url>
        </pluginRepository>
    
      </pluginRepositories>
    
  • Modify your ~/.m2/settings.xml. That’s where you will add your personnal authentication information:
    <settings>
      ...
      <servers>
        ...
        <server>
          <id>https-repo</id>
          <username>...</username>
          <password>...</password>
        </server>
      </servers>
      ...
    </settings>
    
  • clean up your local maven repository to test downloading from the remote one. E.g. rm ~/.m2/repository/com/domaine/...
  • Test building your project. e.g. m2 install.
  • If you have any issue and you think it might be ssl related, enable debugging using the javax.net.https unsupported option. You might want to try m2 -Djavax.net.https=ssl install. -Djavax.net.https=all for more info and -Djavax.net.https=help for usage information.

Troubleshooting and common mistakes

  • Note: trying to use a a full basic auth url (https://user:password@dev.domaine.com/m2), either in the pom or on the command line won’t work. You have to externalize your login/password into an external file
  • if you are deploying a multi-project, and one module is not deployed and you get a generic error that says something like:
    
    Failed to configure plugin parameters for: org.apache.maven.plugins:maven-deploy-plugin:2.1
    
    check that the following section of the pom.xml is present and correct:
    
    <distributionManagement>
      <!-- use the following if you're not using a snapshot version. -->
      <repository>
        <id>repo</id>
        <name>Repository Name</name>
        <url>scp://host/path/to/repo</url>
      </repository>
      <!-- use the following if you ARE using a snapshot version. -->
      <snapshotRepository>
        <id>repo</id>
        <name>Repository Name</name>
        <url>scp://host/path/to/repo</url>
      </snapshotRepository>
    </distributionManagement>
    
    Cause: Class 'org.apache.maven.artifact.repository.ArtifactRepository' cannot be instantiated
    [INFO] ----------------------------------------------------------------------------
    [...]
    Caused by: java.lang.InstantiationException: org.apache.maven.artifact.repository.ArtifactRepository
            at java.lang.Class.newInstance0(Class.java:335)
            at java.lang.Class.newInstance(Class.java:303)
            at org.codehaus.plexus.component.configurator.converters.AbstractConfigurationConverter.instantiateObject(AbstractConfigurationConverter.java:111 )
            ... 24 more
    

    then be sure to follow the recommendations in the error log. A classical mistake is to have forgotten to inherit the module’s pom from the parent pom where this information was stored.

  • when deploying a module, maven searches the repositories referenced in the pom for the dependencies of the module. I think the idea is to identify whether the required dependency versions are already deployed. If you try to deploy a multi project whose modules depend on each other, you will probably have to make sure that the target repository is listed in the <repositories> section of your pom, otherwise the deploy operation might fail, not finding a suitable version for your module, even though the dependency might just have been uploaded there. Maven has no way to know that fact (especially as you refer to a repository differently when you upload or retrieve information from it, and also because each module deployment is treated independently of the others, even in the case of a multi-project).

Last advice: you might want to have one repository for snapshots and one for releases. That might simplify backing up operations on the server if you only want to backup your releases.

Voila! m2 should now download your artifacts from new your shiny corporate repository. Good luck!

update: added information on how to update the imported certificate.

What happened to the java.net pack200 ant tasks project?

Friday, January 13th, 2006

I am getting more and more fed up with Sun and the java.net project.

When I started writting the Maven2 webstart plugin, I reused functionality from both mustang (the jnlp-servlet) and the java.net pack200 ant tasks.

First my request to create a java.net project to put the jnlp-servlet BSD code is stalled. I’ve created my project 2 months ago and I am still waiting. I sent mails, added a note to a related BUG parade issue, and created an issue in the java.net issue tracker. Not a single feedback.

Now the advanced search page doesn’t work.

Now I have been unable to reach the pack200 ant tasks web site for some time and I just discovered that its link seems to have disappeared from the listing. As it is the unique project on that page without a link to the home page, I am wondering if something fuzzy is going on.

Unfortunately I’ve suffered 2 hardware failures in the past month (RAM leading to disk corruption on master disk + dropped external backup disk…), so if i’ve lost the original code for the project (apparently under the SDL license).

So can someone please tell me where to get this code, and if not, let me know why the project was removed from java.net without an explanation?

update: forgot some links. The pack200 ant tasks project was here and the author was probably Kumar Srinivasan.

update (26/01/2006): seems like the project page appeared again. It is still not part of the listing thus. And I am still waiting for the jnlp-servlet to be created… What time does the Sun raise in the sky?

CuiseControl, everything is a project

Monday, October 31st, 2005

I spent the best of last night working on CC-352 which maps every node in the cruisecontrol file to a plugin, including the root (implicitly, i.e. it if you don’t name it cruisecontrol it should still work) and the projects (explicitly). (In reality plugin and property are still handled slightly differently, but that shouldn’t be a limitation yet).

The main benefit apart from a very good code cleanup is that you should now be able to preconfigure the whole projects, and create aliases for your projects. Here’s a very simple example:

<cruisecontrol>
  ...
  <!-- note the classname may change during commit -->
  <plugin name='ant1.6project' classname='net.sourceforge.cruisecontrol.ProjectConfig'>
    <schedule>
      <ant antscript='/usr/local/lib/ant1.6.5/bin/ant'>
    </schedule>
    <listeners>
      <currentbuildstatuslistener file='${project.dir}/buildstatus.txt'>
    </listeners>
  <plugin>
  <ant1.6project name='project1'/>
  <ant1.6project name='project2'/>
  ...

So if you are an organization with many projects under CI with CruiseControl, and if your projects have a very similar setup, this should reduce considerably your config file size.

If you use CruiseControl, we could use your help in testing the new feature. Don’t look for it in CVS. You can find the current patch here, or get a build from http://moca.dynalias.com, build >= 118. Send your comments to the Jira issue or on the devel list.

I hope you will enjoy it as much as I enjoyed coding it :)

update: Jeffrey already committed the code to the trunk. Great!

Sunday, October 9th, 2005

- open source frameworks, development strategies modularity
- what makes a good design API analysis
- m2 plugin

Clean room open source mock API

Monday, October 3rd, 2005

Seeking legal advice.

Sometimes one needs to integrate open source software with a third party library. This library may not have a license allowing for free redistribution. This is the case with CruiseControl which integrates with SameTime and StarTeam. A contributor with access to the original libraries wrote support for those external tools in the form of a plugin that integrates with those libs. These plugins made their way into the official tree. As CruiseControl distribution model is to bundle all official plugins, it is problematic to support these plugins in an official way.

If someone makes a clean room implementation of the APIs, by only looking at the plugins,

EULA & freedom

Sunday, October 2nd, 2005

Most of the time, using software forces you to agree to a EULA. This can create some interesting issues.

EULA are mostly about restrictions. They restrict your rights (and often restrict the compensations you can get out of the company who made the software). Thing is that some of these EULA are really restrictive. For example a particular EULA would forbid users to contribute to a competing software. Sounds fair on a first intent, but it really creates issues.

Another interesting issue is that the person who is responsible of agreeing to the EULA is not necessarily the same as the one using the software.

So how do handle EULAs in a wide company? You should probably first have a lawyer review the content of the agreement, especially when it comes to damage costs. You may want a technology commitee to review the EULA to see if it fits with your needs and infrastructure, a corporate policy to make sure your employees abid by the EULA they sometimes don’t even see, etc…

When you use Free Software, you don’t see any of this. The EULAs are Free Software License Agreements, and you should see them as giving you rights, not restricting them.

We often talk about hidden costs of Free Software, and this is obviously a hidden one for non-Free Software. Remember: it’s not just about money. It’s all about freedom. Lower costs is just a consequence of that freedom.

Protected: Post Mortem Analysis of a one-way relationship

Thursday, September 29th, 2005

This post is password protected. To view it please enter your password below:

Reusable ant tasks, a Java Command Line Interface library?

Saturday, June 4th, 2005

Idea

Something is needed to ease the running of command line programs in Java. Several issues appear when using the official SDK Runtime#exec() and Process: multiple exec() method to chose from, quotes handling, lack of shell, no timeout management, input/output management…

Ant first solved the problem by creating a Commandline class some years ago and a couple of helper classes to provide more functionality on top of Runtime.exec().

These classes have been copied and sligthty forked in several projects including plexus, maven2, cruisecontrol. To me that clearly denotates its usefulness. So why not putting these classes available in a standalone library?

Note: this is similar to the general idea Vincent Massol had on reusable ant tasks, with a focus on command line and process execution.

Interest?

  • Trygve from the plexus/m2 team said he was OK with making this a little bit more uniform.
  • Jeffrey Fredrik from CruiseControl agreed as well.
  • I have not contacted the ant project so far. I will do soon
  • I am willing to work on making this happen.
  • If no consensus can be reached so that all projects end up using it, I think it could
    still be useful to have this as standalone somewhere.

Requirements & features (proposal)

  • handles the definition of a command line and its running in a flexible framework
  • minimal external dependencies (0 if possible)
  • run on the oldest SDK possible
  • increased thread safety
  • POJO objects where appropriate
  • extension friendly
  • automatic handling of command execution timeout
  • library should not be in the way of clients. E.g. possibility for clients to monitor or kill underlying processes
  • test friendly. In particular easy to mock the running of a command line, e.g. replacing Process inputs/outputs with normal streams. Maybe provide some mocks as part of the lib or in a jcli-mock lib.

Statuses:

I’ve merged several Commandline classes and have various design solutions for brainstormings. Now I would like to get feedback from the potentially interested parties and see where we can head.

Speak up!

Do you have any issues regarding:

  • merging of the features. Is there something you need or want to add to the existing classes?
  • standardization of the API. Should we take the opportunity to clean the classes a little bit? I think yes.
    I’ve done it a little bit given the requirements & features I defined earlier.
  • agreement on the implementation (exception handling, logging, dependencies on external tools)
  • licenses clash? how do we cope with small changes made by several individuals on different projects with compatible but different BSD licenses? I we can avoid distributing a class under 3 different licenses…
  • one issue I have is that some helper classes (StreamPumper etc..) are not that CLI specific.
  • Removing them makes the package mostly empty though and would create an external dependency
    There are also other classes that have been duplicated (e.g. OSEnvironment)
    and could be tied to the Command line execution.
    Should the cli classes be part of a larger ‘oses’ package?
    Or should it just return to ant in a way that makes it possible for us to reuse it without depending on the ant specific classes?

  • where to put this library? apache? (commons?) codehaus? sf? And of course which package name should be used?
    I feel the best would be to have it back in some sort of ant reusable classes, but I am not sure it meets the requirements to be in there.

Design ideas:

Update: having had a closer look a the ant classes, I think I should emphasize a little bit more on the existing ant Execute class which captures a lot of important knowledge. Nevertheless I will appreciate comments on what’s below while I go back playing with the code.

CommandLine is intentionally very similar to the ant Commandline class for compatibility reasons.
We could discuss whether we want to make the working directory a propriety of the Command line or of the running of the command line.
CommandLine, Argument and Mark POJO beans. No execute() method in CommandLine.

interface StreamConsumer {
  void consumeLine(String line);
}
class CommandLineExecutor {
   // several methods overriding the main method:
  // asynchroneous execution
  CommandLineExecution execute(CommandLine, int timeout, InputStream,
          StreamConsumer systemOut, StreamConsumer systemErr...);
}

class CommandLineExecution {
  // if we expose the real Process, we have no way to know how the process
  // was really interrupted (internal timeout vs outside interrupt()). In that
  // case better to expose a modified Process delegating to the execution to
  // rapport usage of the destroy() call, but then issues
  boolean wasInterrupted();

  // blocking. Similar to getPrOcess().waitFor(). Do we need to expose the
  // exception? If not, what do we return upon failure?
  int waitFor() [throws InterruptedException];

  // optional - shortcut for getProcess().destroy();
  void destroyProcess();

  // underlying process - is destroyProcess() sufficient?
  // having the Process would let clients more freedom.
  // Maybe don't provide it in the first version.
  [ Process getProcess(); ]

  // immutable version returned?
  CommandLine getCommandLine();
}

Usage:

CommandLine commandLine = new CommandLine();
commandLine.setExecutable("java“);
Argument arg = commandLine.createArgument();
arg.setValue(”–version“);

CommandLineExecution execution
    = CommandLineExecutor.execute(commandLine, 10, ….);
// want to expose your execution?
MBean execution = new CommandLineExecutionController(execution);
….
int exitStatus = execution.waitFor();
if (execution.wasInterrupted())
{
  …
}

For more decoupling, we could remove the dependency between the executor, the execution and commandline

interface Executable {
  Process execute();
  // more methods to describe the command line
  String getCommandLine();
}

Then we can have either

// #1
class CommandLine implements Executable {}

Execution execution = Executor.execute((Executable) CommandLine, 10, ...);

// #2
class CommandLine {
  Executable getExecutable();
}

Execution execution = Executor.execute(commandLine.getExecutable(), 10, ....);

We could also replace the Execution class by a more specialized interface, taking into account the aforementionned ideas:

interface InterruptableProcess {
  boolean wasInterrupted();
  int waitFor();
  void destroyProcess();
  // return a smart Process wrapper to control the destroy() calls?
  Process getProcess();
}

then

InterruptableProcess process = Executor.execute(commandLine, 10, ....);
// or
// InterruptableProcess process
//    = Executor.execute(commandLine.getExecutable(), 10, ....);...
int exitStatus = process.waitFor();
if (process.wasInterrupted())
{
  ...
}

Comments appreciated!

Update 1: I will probably rework a little bit the design proposal based upon what I saw in the latest ant code and some feedback I received.
Update 2: Do not forget to look into the new SDK 1.5 ProcessBuilder class.

Importing patches into quilt

Thursday, May 26th, 2005

I have started using quilt for my patching needs. While working on some projects where I don’t have committing rights, my patches tend to queue in line. Managing them becomes a pain, in particular when it comes to unrotting.
The solution I used before was to create several directories, one for each patch you are working on. But I don’t like it. It takes too much disk space (in particular when the projects include their own libraries) and has other issues. In particular I like to use a single IDE :)

Quilt is supposed to help me managing my patches, by maintaining a stack of your changes.
Quilt has an overall good documentation: PDF and man pages.

Importing my patches in it was the first thing I had to do. Here’s a simple worklog:

# get your project
> cvs co yourproject
> cd yourproject
# repeat the following for each of your patches:
# prepare to create a new patch (called myfix1.diff)
> quilt new myfix1.diff
> quilt fold -p0 < patch1.txt
# quick fold finds the modified files add them to the patch currently on top and applies the specified patch (like quilt import does).
# You could reproduce something similar with:
# grep +++ patch1.txt  | cut -c 5- | cut -f 1 | xargs -l1 quilt add
# patch -p0 < patch1.txt
# obvisouly not as easy :)
# Now take the changes into account
> quilt refresh myfix1.diff

I have now to find a way to maintain these patches accross several machines and autopublish them.

Vincent Massol on Increasing open source project contribution

Friday, March 11th, 2005

Vincent Massol was apparently in a blog mood today, as he already made 2 interesting posts, one on Distributed Builds, one on “Increasing open source project contribution”. Let me answer to the latter.

Vincent, I completely agree with you. Althought there are many things that will help make an open source/free software project successful, lowering your barrier of entry is an critical factor.

Splitting your software in modules is a good step toward that goal. For example, check the mozilla project. While very high profile, it doesn’t have many contributors. This seems to be a problem for them. The barrier of entry is high and the code complex. On the other side, Linux, perhaps with a similar number of users has many more contributors. I believe that by nature, the OS is more modular, and it makes it easy to modifies some parts, in particular the drivers.

But lowering the barrier of entry can also be done by:

  • take care of your users. They are potentially the next generation developers. In particular, make problems easy to report and to debug. People curiosity will be much increased that way. At the same time make sure that user questions are answered in the user list.
  • use a one step build system. Once again the Mozilla project is a good example. It was very hard to build on some platforms (e.g. Windows) while were those with the primary potential users. Many people were scared away because of that. On the other side, compiling the kernel is a simple as running make. Much easier -> more developers.
  • make sure that your build system lowers the time it takes for a change to be tested. If you can avoid rebuilding completely your software for each change, that’s a big plus. There the idea of using modules can be very helpful. Deployment should also be as easy as possible (and not necessary if possible).
  • pay attention to external contributions. Review them as fast as you can. Whether you will accept it or not is not that important, but make sure you don’t let . The idea is to empower users into contributors then developers. If you’ve introduced modules, you can grant your developers rights to maintain parts of the system. If they mess around you can always remove those rights afterwards. I see that you apply this idea in Cargo and it seems very effective.
  • add unit tests. Although not easily applicable to all projects (e.g. when you work with a particular complex hardware), by providing unit tests you enable cooperative development. People are not afraid of changing stuff as they have a harness. Using a Test Driven Development helps further as people focus on what they want to do.
  • strong and consistent leadership. Accepting too many contributions can be fatal for an FOSS project. Brookes talked about conceptual integrity 30 years ago. He was right. Not so long ago, an Apache project became “Everything but the kitchen sink” and dissolved. So, to refuse contributions is not a bad thing, it’s critical.
  • and for the developers, keep your system stable. Use Continuous Integration and run your tests when you build. With regard to FOSS, it could be interesting for the project that have a continuous integration system that automatically merges and tests external contributions during special builds. In fact it looks like a good idea and I will look into it a little bit as it could be a way to provide Continuous Integration to non actual developers, lowering their barrier of entry. People would only have to queue patches or group of patches for them to be automatically tested.