<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17823979</id><updated>2012-01-28T11:53:06.657-05:00</updated><category term='provisioning'/><category term='p2.inf'/><category term='p2'/><category term='flash'/><category term='xvid'/><category term='fsck'/><category term='9000'/><category term='mvn3'/><category term='midpssh'/><category term='China'/><category term='behaviour'/><category term='uubp'/><category term='scifi'/><category term='conversion'/><category term='toronto'/><category term='krandr'/><category term='proposal'/><category term='torrents'/><category term='analytics'/><category term='linkedin'/><category term='query'/><category term='ip'/><category term='rhel'/><category term='picasa'/><category term='mouse'/><category term='64'/><category term='lvm2'/><category term='gas'/><category term='shimo'/><category term='email'/><category term='rogers'/><category term='mepis'/><category term='mdd'/><category term='dtp'/><category term='eula'/><category term='opera'/><category term='scripting'/><category term='facebook'/><category term='x.org'/><category term='evil-empire'/><category term='visualization'/><category term='retro'/><category term='colour'/><category term='reality'/><category term='berry4all'/><category term='java'/><category term='ogg'/><category term='xsd'/><category term='wifi'/><category term='fink'/><category term='dr-bt30q'/><category term='formatting'/><category term='guest'/><category term='registrar'/><category term='m5'/><category term='mplex'/><category term='scarborough'/><category term='networking'/><category term='onion'/><category term='xrandr'/><category term='bandwidth'/><category term='desktop'/><category term='aircanada'/><category term='delicious'/><category term='mac'/><category term='mp3'/><category term='ubuntu'/><category term='norris'/><category term='e4'/><category term='google'/><category term='svn'/><category term='mail'/><category term='conky'/><category term='atf'/><category term='domains'/><category term='releng'/><category term='europa'/><category term='macosx'/><category term='bigblue'/><category term='red hat'/><category term='status'/><category term='iso'/><category term='.product'/><category term='dsdp'/><category term='osx'/><category term='demo'/><category term='sync'/><category term='site'/><category term='grid'/><category term='tasks'/><category term='grammar'/><category term='committer'/><category term='it'/><category term='track'/><category term='jbt'/><category term='contributor'/><category term='fglrx'/><category term='ve'/><category term='survey'/><category term='pdt'/><category term='compare'/><category term='javahl'/><category term='maintenance'/><category term='physics'/><category term='productivity'/><category term='tether'/><category term='playlist'/><category term='gde'/><category term='update'/><category term='alias'/><category term='hack'/><category term='del.icio.us'/><category term='sarcasm'/><category term='xfce4'/><category term='extensions'/><category term='transaction'/><category term='diversity'/><category term='boot'/><category term='p2p'/><category term='usb'/><category term='uml2'/><category term='howto'/><category term='photoshop'/><category term='macpro'/><category term='startup'/><category term='manifest'/><category term='jbpm'/><category term='g.i.joe'/><category term='ssh'/><category term='music'/><category term='xslt'/><category term='m5a'/><category term='growisofs'/><category term='qvt'/><category term='pop'/><category term='netbeans'/><category term='regex'/><category term='rcp'/><category term='slapchop'/><category term='bestpractices'/><category term='energy'/><category term='fedora15'/><category term='friendofeclipse'/><category term='cdt'/><category term='mnt'/><category term='xubuntu'/><category term='twitter'/><category term='drools'/><category term='bliteotw'/><category term='log'/><category term='associate'/><category term='ohf'/><category term='health'/><category term='gmail'/><category term='mylar'/><category term='sonyericsson'/><category term='bpm'/><category term='calendar'/><category term='xsl'/><category term='sr1'/><category term='continuous integration'/><category term='display'/><category term='lolcat'/><category term='documentation'/><category term='vg'/><category term='encoding'/><category term='a2dp'/><category term='junit'/><category term='gef'/><category term='presto'/><category term='wtf'/><category term='vimscript'/><category term='whedon'/><category term='oligarchy'/><category term='cloudsmith'/><category term='sshfs'/><category term='xulrunner'/><category term='b3'/><category term='japanese'/><category term='update manager'/><category term='css'/><category term='jfk'/><category term='ati'/><category term='vboxfs'/><category term='rtfm'/><category term='performance'/><category term='barry'/><category term='vim'/><category term='tv'/><category term='babel'/><category term='steinberg'/><category term='X11'/><category term='funfacts'/><category term='thepiratebay'/><category term='asp'/><category term='xml'/><category term='virtualbox'/><category term='scala'/><category term='doc brown'/><category term='ignore'/><category term='entrepreneur'/><category term='mysql'/><category term='lightning'/><category term='overload'/><category term='eclipse35'/><category term='marty'/><category term='hsr'/><category term='keybindings'/><category term='sourceforge'/><category term='graffiti'/><category term='pom'/><category term='language'/><category term='filter'/><category term='xcode'/><category term='intel'/><category term='canned-os'/><category term='eclipse36'/><category term='Lenovo'/><category term='partition'/><category term='modeling'/><category term='chainletter'/><category term='midp'/><category term='bugzilla'/><category term='gsoc'/><category term='distro'/><category term='diesel sweeties'/><category term='javascript'/><category term='modprobe'/><category term='comics'/><category term='change'/><category term='mvn'/><category term='shamwow'/><category term='crack'/><category term='sequel'/><category term='viral marketing'/><category term='help'/><category term='rpm'/><category term='dvdrip'/><category term='cdo'/><category term='drivekey'/><category term='stp'/><category term='social networking'/><category term='webtools'/><category term='wordle'/><category term='all-in-one'/><category term='zimbra'/><category term='browser'/><category term='product build'/><category term='avi'/><category term='monitor'/><category term='blacklist'/><category term='ci'/><category term='windows'/><category term='athena'/><category term='404'/><category term='timestamp'/><category term='phoenix'/><category term='print is dead'/><category term='zaurus'/><category term='FLOSS'/><category term='merge'/><category term='lotus'/><category term='debug'/><category term='rubiks'/><category term='cvs'/><category term='ant'/><category term='php'/><category term='process'/><category term='dvcs'/><category term='random'/><category term='modem'/><category term='director'/><category term='flv'/><category term='target'/><category term='games'/><category term='ese'/><category term='audit'/><category term='epl'/><category term='hypersnap'/><category term='nas'/><category term='life'/><category term='demographics'/><category term='xorg'/><category term='firefox35'/><category term='bluetooth'/><category term='manpage'/><category term='galileo'/><category term='captcha'/><category term='blogger'/><category term='w810i'/><category term='funambol'/><category term='history'/><category term='jbds'/><category term='search'/><category term='features'/><category term='phone book'/><category term='aggregation'/><category term='mozilla'/><category term='maps'/><category term='burn'/><category term='bloat'/><category term='metadata'/><category term='clean'/><category term='m3u'/><category term='ethics'/><category term='m2eclipse'/><category term='transcode'/><category term='icons'/><category term='movies'/><category term='death'/><category term='svnkit'/><category term='tm'/><category term='maven'/><category term='lvm'/><category term='api'/><category term='resolution'/><category term='chrome'/><category term='audio'/><category term='osgi'/><category term='xkcd'/><category term='git'/><category term='player'/><category term='spam'/><category term='rss'/><category term='video'/><category term='virtual'/><category term='dotnet'/><category term='transform'/><category term='apathy'/><category term='antix'/><category term='grandma'/><category term='IBM'/><category term='wrestling'/><category term='iis'/><category term='mdt'/><category term='dual-monitor'/><category term='seam'/><category term='ohloh'/><category term='bluez'/><category term='humour'/><category term='faq'/><category term='ffmpeg'/><category term='codegear'/><category term='diff'/><category term='dvdauthor'/><category term='coke'/><category term='camp'/><category term='notes8'/><category term='beta'/><category term='ui'/><category term='thinkpad'/><category term='monopoly'/><category term='build'/><category term='pain'/><category term='cc'/><category term='dsl'/><category term='marketing'/><category term='asp.net'/><category term='epic'/><category term='b2p'/><category term='bes'/><category term='cruise control'/><category term='pde'/><category term='chuck'/><category term='cross-project'/><category term='chinese'/><category term='af'/><category term='label'/><category term='subversion'/><category term='dependencies'/><category term='guildwood'/><category term='tethering'/><category term='nomenclature'/><category term='NTFS'/><category term='helios'/><category term='consumer'/><category term='packaging'/><category term='support'/><category term='emf'/><category term='notes7'/><category term='vax'/><category term='subversive'/><category term='perl'/><category term='tmf'/><category term='sony'/><category term='loyalty'/><category term='tag'/><category term='wine'/><category term='pack200'/><category term='mplayer'/><category term='birt'/><category term='tshirt'/><category term='3g'/><category term='ccrypt'/><category term='ganymede'/><category term='composite'/><category term='downloads'/><category term='ivy'/><category term='shell'/><category term='jwflv'/><category term='licensing'/><category term='scooter'/><category term='gimp'/><category term='irc'/><category term='bpmn'/><category term='livecd'/><category term='kvm'/><category term='aggregator'/><category term='easeofuse'/><category term='branding'/><category term='usability'/><category term='wassim'/><category term='screen'/><category term='embedded'/><category term='collabnet'/><category term='jna'/><category term='mylyn'/><category term='english'/><category term='jbosstools'/><category term='viz'/><category term='hudson'/><category term='speaker'/><category term='subclipse'/><category term='kde'/><category term='publishing'/><category term='mjpegtools'/><category term='egit'/><category term='clone'/><category term='it crowd'/><category term='blackberry'/><category term='aybabtu'/><category term='scrum'/><category term='adsense'/><category term='kernel'/><category term='flac'/><category term='awards'/><category term='server'/><category term='lamp'/><category term='vpn'/><category term='mod'/><category term='bell'/><category term='opensync'/><category term='numbers'/><category term='conventions'/><category term='korean'/><category term='gmf'/><category term='vtp'/><category term='cable'/><category term='copywriter'/><category term='enbridge'/><category term='svn:ignore'/><category term='sdo'/><category term='javadoc'/><category term='zombies'/><category term='xine'/><category term='discount'/><category term='harris'/><category term='fillion'/><category term='open source'/><category term='termination'/><category term='dvd'/><category term='validation'/><category term='c#'/><category term='firefox'/><category term='mutt'/><category term='cisco'/><category term='nuclear'/><category term='travel'/><category term='cow bell'/><category term='yum'/><category term='opera10'/><category term='tips'/><category term='callisto'/><category term='symbian'/><category term='commonbuilder'/><category term='sports'/><category term='joelonsoftware'/><category term='macro'/><category term='efi'/><category term='maven3'/><category term='jarprocessor'/><category term='eclipse'/><category term='cbi'/><category term='soc'/><category term='xp'/><category term='bootsauce'/><category term='zemeckis'/><category term='multiple'/><category term='notes'/><category term='contest'/><category term='dash'/><category term='ext3'/><category term='advice'/><category term='xmpp'/><category term='security'/><category term='vmware'/><category term='customer service'/><category term='bb'/><category term='utf-8'/><category term='theonion'/><category term='repo'/><category term='bash'/><category term='linkdump'/><category term='swt'/><category term='flex'/><category term='movieOS'/><category term='emft'/><category term='pcspkr'/><category term='color'/><category term='32'/><category term='geography'/><category term='stats'/><category term='errata'/><category term='components'/><category term='testing'/><category term='automation'/><category term='plugins'/><category term='vcs'/><category term='vista'/><category term='bcompare'/><category term='simplicity'/><category term='media'/><category term='disclaimer'/><category term='wiki'/><category term='workflow'/><category term='metallica'/><category term='apple'/><category term='homestarrunner'/><category term='mirror'/><category term='refit'/><category term='spin'/><category term='fedora'/><category term='bluffs'/><category term='vpnc'/><category term='toons'/><category term='codecs'/><category term='network solutions'/><category term='gnome'/><category term='agile'/><category term='buckminster'/><category term='enterprise'/><category term='debian'/><category term='darwinports'/><category term='britney'/><category term='melhem'/><category term='gcal'/><category term='thunderbird'/><category term='pocketmac'/><category term='hype'/><category term='tycho'/><category term='linux'/><category term='meme'/><category term='tptp'/><category term='red robot'/><category term='branching'/><category term='platform'/><category term='beep'/><category term='eclipsecon'/><category term='cygwin'/><category term='politics'/><category term='mount'/><category term='back to the future'/><category term='bsd'/><category term='scutil'/><category term='ant-contrib'/><category term='wii'/><category term='lv'/><category term='book'/><category term='beyondvc'/><category term='versioning'/><category term='bold'/><category term='publisher'/><category term='zindus'/><category term='fat32'/><category term='wtp'/><category term='imap'/><category term='xfce'/><category term='jboss'/><category term='microsoft'/><category term='amd'/><category term='vorbis'/><category term='fail'/><category term='data'/><category term='warning'/><category term='password'/><category term='git-svn'/><title type='text'>DivByZero.com</title><subtitle type='html'>Much ado about scripting, Linux &amp; Eclipse: card subject to change</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default?start-index=101&amp;max-results=100'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>414</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17823979.post-5046791684776403209</id><published>2011-12-11T14:12:00.003-05:00</published><updated>2011-12-11T14:15:23.127-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nomenclature'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='releng'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='conventions'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Build Nomenclature Conventions: What's in a name?</title><content type='html'>&lt;i&gt;The following post is inspired by Mickael Istria's recent blog, &lt;a href="http://mickaelistria.wordpress.com/2011/12/07/call-a-spade-a-spade-and-a-nightly-a-snapshot/"&gt;Call a spade a spade, and a Nightly a Snapshot&lt;/a&gt;.&lt;/i&gt;

&lt;p&gt;
When I was doing builds for the Eclipse Modeling Project, I-builds were weekly published nightlies -- same level of stability as a SNAPSHOT (to use Maven parlance) or nightly, but published on a weekly schedule to bridge the gap between nightly/daily/SNAPSHOT/CI builds and the every-6-weeks milestone releases. The goal was to provide something stable enough for early adopters to grab once a week, but without the non-stop flux of nightlies. Regardless of the label on the build, the process was the same: tag CVS, then build using that tag. 

&lt;p&gt;
The Final/GA/Release ("R") builds were done as simple renames of the last good milestone or release candidate build, so as to ensure binary-compatibility w/ the last-tested milestone/RC. The same was true for "M" and "S" builds -- they were just renamed "I" builds, and the letter was there simply to differentiate between a maintenance build (M), a stable milestone (S), or release (R).

&lt;p&gt;
Branching only happened when a release was done and it was time to produce the maintenance stream vs. the ongoing next-year-release. Sometimes branching would happen AFTER the x.y.1 maintenance because it saved duplication of commits in the x.y+1.0 and x.y.1 streams.

&lt;p&gt;
--
&lt;p&gt;

Now at JBoss, we publish "nightly" builds, which are keyed to SVN changes and therefore could be as often as hourly or as infrequent as weekly, depending on what's happening in the repo.

&lt;p&gt;
We also do milestone builds about once ever 6-8 weeks (similar to the Eclipse.org release train schedules), which is more carefully vetted, tested, and QE'd. It is produced using the same *process* as the nightlies, but are named differently and pulled from a freshly-created stable branch in the repo (so its degree of change/churn is less). (Branching happens right before every milestone or release candidate so that hardening/stabilization/documentation can happen in the branch while trunk stays open for new development.)

&lt;p&gt;
--
&lt;p&gt;

Bottom line -- I've only ever needed three types of builds, regardless of nomenclature or labelling differences. And of these 3, the last 2 are the same thing but renamed to underline the build quality/stability:

&lt;p&gt;
* nightly/CI/integration/weekly/SNAPSHOT build (unstable, for bleeding edge adopters)

&lt;p&gt;
* development milestone (probably a re-christened nightly; stable, early adopters)

&lt;p&gt;
* stable release / Final / GA (probably a re-christened milestone; release quality)

&lt;p&gt;
--

&lt;p&gt;
So... does it matter if it's called nightly, integration or SNAPSHOT? or Stable, Milestone, Maintenance, Final, GA or Release? As long as it's easily reproducible (yeah, Tycho!), what's in a name?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5046791684776403209?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5046791684776403209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5046791684776403209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5046791684776403209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5046791684776403209'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/12/build-nomenclature-conventions-whats-in.html' title='Build Nomenclature Conventions: What&apos;s in a name?'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7358511695928364307</id><published>2011-11-09T16:24:00.006-05:00</published><updated>2011-11-09T16:36:10.092-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='display'/><category scheme='http://www.blogger.com/atom/ns#' term='krandr'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='X11'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>HOWTO: Make KDE remember dual-monitor randr settings</title><content type='html'>&lt;p&gt;
Every time I boot up, KDE appears to forget that I want my monitors to be positioned left-to-right and instead defaults to mirrored config. But, after a lot of cursing and a little googling, I found an answer so it'll no so much keep your settings, but reset its broken config to your settings.

&lt;p&gt;
1. Hit ALT-F2, then enter "display" to run the Display Settings app.

&lt;p&gt;
2. Configure your settings as you'd like. Note that if the Apply button isn't active after your changes, you can change/revert something like a Position: button to make it active.

&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-9XFAUJBqajo/TrrwUNlBE3I/AAAAAAAAGYE/GCUyXGKWh9Q/s1600/kde-display-settings.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;" src="http://2.bp.blogspot.com/-9XFAUJBqajo/TrrwUNlBE3I/AAAAAAAAGYE/GCUyXGKWh9Q/s320/kde-display-settings.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5673110910659531634" /&gt;&lt;/a&gt;

&lt;p&gt;
3. On restart, KDE may forget your dual-monitor settings. So, to prevent this, go look in your &lt;tt&gt;~/.kde/share/config/krandrrc&lt;/tt&gt; file:

&lt;pre class="brush:shell"&gt;
[Display]
ApplyOnStartup=true
StartupCommands=xrandr --output "DVI-I-1" --pos 1920x0 --mode 1920x1200 --refresh 59.9502\nxrandr --output "HDMI-1" --pos 0x130 --mode 1920x1080 --refresh 60\nxrandr --noprimary
&lt;/pre&gt;

&lt;p&gt;
4. Copy the configuration into a new file, and replace &lt;tt&gt;\n&lt;/tt&gt; with newlines. I like to put scripts like this in &lt;tt&gt;/etc/X11&lt;/tt&gt; because they relate to screen res and positioning.

&lt;pre class="brush:shell"&gt;
# from ~/.kde/share/config/krandrrc
xrandr --output "DVI-I-1" --pos 1920x0 --mode 1920x1200 --refresh 59.9502 
xrandr --output "HDMI-1" --pos 0x130 --mode 1920x1080 --refresh 60 
xrandr --noprimary
&lt;/pre&gt;

&lt;p&gt;5. Ensure the script is readable/executable for all users:

&lt;pre class="brush:shell"&gt;
chmod 755 /etc/X11/1920x2.sh
&lt;/pre&gt;

&lt;p&gt;6. Hit ALT-F2, then enter "autostart" to run the Autostart config tool.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-CFfZLM9yPWs/Trrxb0Zz8uI/AAAAAAAAGYU/YdYowiOCJOE/s1600/autostart_fix_screen_resolution.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 238px;" src="http://3.bp.blogspot.com/-CFfZLM9yPWs/Trrxb0Zz8uI/AAAAAAAAGYU/YdYowiOCJOE/s320/autostart_fix_screen_resolution.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5673112140852228834" /&gt;&lt;/a&gt;

&lt;p&gt;7. Click &lt;tt&gt;Add script... &lt;/tt&gt; and browse for the script you created above.

&lt;p&gt;8. Reboot and watch the magic unfold.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7358511695928364307?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7358511695928364307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7358511695928364307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7358511695928364307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7358511695928364307'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/11/howto-make-kde-remember-dual-monitor.html' title='HOWTO: Make KDE remember dual-monitor randr settings'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9XFAUJBqajo/TrrwUNlBE3I/AAAAAAAAGYE/GCUyXGKWh9Q/s72-c/kde-display-settings.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7608301473038077848</id><published>2011-10-29T14:22:00.008-04:00</published><updated>2011-10-29T14:47:01.868-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='git-svn'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>HOWTO: See what happened in SVN between builds</title><content type='html'>&lt;p&gt;
I was recently asked how to determine what changed between two builds. Jenkins provides nice interlinks into JIRA (issues), Fisheye (source changes), SVN (sources), but let's say you want to kick things a little more old school and investigate the old way... or the builds you want to compare are no longer shown in Jenkins because they expired and their metadata was automatically purged.

&lt;p&gt;
If you can't just look at the changelog in Jenkins to see what revision of source was used for the build, you can check the SVN log to find revision numbers based on the timestamp of the build.

&lt;p&gt;
So, if your build was generated on 2011-10-18, you can see that the log shows the last commit before that build was this:

&lt;pre class="brush:shell"&gt;
$ svn log http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/

...

r35735 | bfitzpat | 2011-10-17 15:35:23 -0400 (Mon, 17 Oct 2011) | 2 lines
Changed paths:
   A esb/plugins/.project
   M esb/plugins/org.jboss.tools.esb.project.core/src/org/jboss/tools/esb/core/runtime/ESBRuntimeResolver_410.java

JBDS-1889 - Now checking for juddi-client-3.1.2.jar as well as 3.1.0 and 3.1.1 when seeing if the runtime includes ESB 4.10

...

&lt;/pre&gt;

&lt;p&gt;
Want to see actual diffs between that build and the latest one?

&lt;pre class="brush:shell"&gt;
$ svn diff http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/@35735 http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/
&lt;/pre&gt;

&lt;p&gt;
Or, if you want to collect just the section of log relevant to the change:

&lt;pre class="brush:shell"&gt;
$ svn log -r35735:HEAD http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/
&lt;/pre&gt;

&lt;p&gt;
Of course if you have all the sources locally, you don't need to log or diff via a URL - you can simply use local file paths. And if like me you use git-svn instead of pure svn, you can use that to diff or log too.

&lt;p&gt;
If you want to easily determine when a branch was created and get the SVN revision number for that branch point, use this:

&lt;pre class="brush:shell"&gt;
# from r28571, returns -r28571:HEAD
rev=$(svn log --stop-on-copy \
  http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x \
  | egrep "r[0-9]+" | tail -1 | sed -e "s#\(r[0-9]\+\).\+#-\1:HEAD#")
&lt;/pre&gt;

&lt;p&gt;If you'd like to &lt;a href="http://beerpla.net/2010/02/20/how-to-view-a-specific-svn-revision-in-your-browser/"&gt;view a specific svn revision in your browser&lt;/a&gt;, use &lt;tt&gt;!svn/bc/REVISION_NUMBER/ before the branch and path to file or folder:

&lt;p&gt;
&lt;a href="http://svn.jboss.org/repos/jbosstools/!svn/bc/35735/branches/jbosstools-3.2.x/"&gt;http://svn.jboss.org/repos/jbosstools/!svn/bc/35735/branches/jbosstools-3.2.x/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7608301473038077848?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7608301473038077848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7608301473038077848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7608301473038077848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7608301473038077848'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/10/howto-see-what-happened-in-svn-between.html' title='HOWTO: See what happened in SVN between builds'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4030805247654871073</id><published>2011-10-26T20:48:00.003-04:00</published><updated>2011-10-26T20:51:51.851-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='p2.inf'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='transform'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='ant-contrib'/><category scheme='http://www.blogger.com/atom/ns#' term='xsl'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><title type='text'>HOWTO: Use Maven, Ant, and XSLT to scrub unwanted p2 metadata from an update site</title><content type='html'>&lt;p&gt;Some time ago, &lt;a href="http://divby0.blogspot.com/2011/02/simplifying-p2-process-part-4-using.html"&gt;I wrote about Using p2.inf to add/remove update sites&lt;/a&gt;. Tonight I found a simpler way to remove references in p2 metadata to external 3rd party sites.

&lt;p&gt;For example, say you're repackaging some 3rd party features onto your own site, but don't want those features to provide references to the vendor's own update sites because you want to ensure that your product's site will only result in your sanctioned version being installed.

&lt;p&gt;When you generate an update site, p2 pulls the information in the included features and will result in a section of references in the site's metadata that looks like this:

&lt;p&gt;&lt;pre class="brush:xml"&gt;
  &amp;lt;references size="6"&gt;
    &amp;lt;repository uri="http://download.eclipse.org/egit/updates" url="http://download.eclipse.org/egit/updates" type="0" options="0"/&gt;
    &amp;lt;repository uri="http://subclipse.tigris.org/update_1.6.x" url="http://subclipse.tigris.org/update_1.6.x" type="1" options="0"/&gt;
    &amp;lt;repository uri="http://download.eclipse.org/egit/updates" url="http://download.eclipse.org/egit/updates" type="1" options="0"/&gt;
    &amp;lt;repository uri="http://subclipse.tigris.org/update_1.6.x" url="http://subclipse.tigris.org/update_1.6.x" type="0" options="0"/&gt;
    &amp;lt;repository uri="http://eclipse.svnkit.com/1.3.x/" url="http://eclipse.svnkit.com/1.3.x/" type="0" options="0"/&gt;
    &amp;lt;repository uri="http://eclipse.svnkit.com/1.3.x/" url="http://eclipse.svnkit.com/1.3.x/" type="1" options="0"/&gt;
  &amp;lt;/references&gt;
&lt;/pre&gt;

To remove that, you can play with p2.inf directives, or you can simply perform an XSL transformation on the generated content.xml (inside content.jar, if your metadata is compressed) to remove the &lt;tt&gt;&amp;lt;references/&gt;&lt;/tt&gt; node:

&lt;p&gt;&lt;pre class="brush:xml"&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"&gt;
&amp;lt;xsl:template match="/"&gt;
        &amp;lt;xsl:apply-templates select="*"/&gt;
&amp;lt;/xsl:template&gt;
&amp;lt;xsl:template match="*"&gt;
        &amp;lt;xsl:copy &gt;
                &amp;lt;xsl:for-each select="@*"&gt;
                        &amp;lt;xsl:copy /&gt;
                &amp;lt;/xsl:for-each&gt;
                &amp;lt;xsl:apply-templates /&gt;
        &amp;lt;/xsl:copy&gt;
&amp;lt;/xsl:template&gt;
&amp;lt;xsl:template match="references" /&gt;
&amp;lt;/xsl:stylesheet&gt;
&lt;/pre&gt;

If you're generating your update site w/ Tycho, this transform can be called via a simple Ant script:

&lt;p&gt;&lt;pre class="brush:xml"&gt;
       &amp;lt;target name="remove.references"&gt;
                &amp;lt;!-- requires ant-contrib only if you like using if-then-else structures --&gt;
                &amp;lt;if&gt;
                        &amp;lt;available file="${update.site.source.dir}/content.jar" type="file" /&gt;
                        &amp;lt;then&gt;
                                &amp;lt;unzip src="${update.site.source.dir}/content.jar" dest="${update.site.source.dir}" /&gt;
                                &amp;lt;delete file="${update.site.source.dir}/content.jar" /&gt;
                        &amp;lt;/then&gt;
                &amp;lt;/if&gt;
                &amp;lt;copy file="${update.site.source.dir}/content.xml" tofile="${update.site.source.dir}/content.old.xml" overwrite="true" /&gt;
                &amp;lt;xslt style="remove-references.xsl" in="${update.site.source.dir}/content.old.xml" out="${update.site.source.dir}/content.xml" /&gt;
                &amp;lt;zip destfile="${update.site.source.dir}/content.jar" basedir="${update.site.source.dir}" includes="content.xml" /&gt;
                &amp;lt;delete file="${update.site.source.dir}/content.xml" /&gt;
                &amp;lt;delete file="${update.site.source.dir}/content.old.xml" /&gt;
        &amp;lt;/target&gt;

&lt;/pre&gt;

Then, in your site's pom.xml, to call the Ant script, do this:

&lt;p&gt;&lt;pre class="brush:xml"&gt;
       &amp;lt;build&gt;
                &amp;lt;plugins&gt;
                        &amp;lt;plugin&gt;
                                &amp;lt;groupId&gt;org.apache.maven.plugins&amp;lt;/groupId&gt;
                                &amp;lt;artifactId&gt;maven-antrun-plugin&amp;lt;/artifactId&gt;
                                &amp;lt;!-- make sure this variable is defined, eg., set to 1.3 --&gt;
                                &amp;lt;version&gt;${maven.antrun.plugin.version}&amp;lt;/version&gt;
                                &amp;lt;executions&gt;
                                        &amp;lt;execution&gt;
                                                &amp;lt;id&gt;install&amp;lt;/id&gt;
                                                &amp;lt;phase&gt;install&amp;lt;/phase&gt;
                                                &amp;lt;configuration&gt;
                                                        &amp;lt;quiet&gt;true&amp;lt;/quiet&gt;
                                                        &amp;lt;tasks&gt;
                                                                &amp;lt;!-- called AFTER generating update site + zip to tweak content --&gt;
                                                                &amp;lt;ant antfile="build.xml"&gt;
                                                                        &amp;lt;property name="SOME_ANT_VARIABLE" value="${SOME_MAVEN_VARIABLE}" /&gt;
                                                                &amp;lt;/ant&gt;
                                                        &amp;lt;/tasks&gt;
                                                &amp;lt;/configuration&gt;
                                                &amp;lt;goals&gt;
                                                        &amp;lt;goal&gt;run&amp;lt;/goal&gt;
                                                &amp;lt;/goals&gt;
                                        &amp;lt;/execution&gt;
                                &amp;lt;/executions&gt;
                                &amp;lt;dependencies&gt;
                                        &amp;lt;!-- some dependencies your ant script might need --&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;commons-net&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;commons-net&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.4.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant-nodeps&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant-trax&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant-commons-net&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant-apache-regexp&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                        &amp;lt;dependency&gt;
                                                &amp;lt;groupId&gt;ant-contrib&amp;lt;/groupId&gt;
                                                &amp;lt;artifactId&gt;ant-contrib&amp;lt;/artifactId&gt;
                                                &amp;lt;version&gt;1.0b3&amp;lt;/version&gt;
                                        &amp;lt;/dependency&gt;
                                &amp;lt;/dependencies&gt;
                        &amp;lt;/plugin&gt;
                &amp;lt;/plugins&gt;
        &amp;lt;/build&gt;
&lt;/pre&gt;

&lt;p&gt;I suppose there's probably a way to call a transform directly from Maven w/o the Ant wrapper, but this allows unpacking and repacking of the content.jar to get at the content.xml file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4030805247654871073?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4030805247654871073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4030805247654871073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4030805247654871073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4030805247654871073'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/10/howto-use-maven-ant-and-xslt-to-scrub.html' title='HOWTO: Use Maven, Ant, and XSLT to scrub unwanted p2 metadata from an update site'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5450342330726063877</id><published>2011-09-01T02:03:00.011-04:00</published><updated>2011-09-01T02:51:45.655-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keybindings'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora15'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='spin'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>HOWTO: Move around between desktops &amp; windows with keyboard or mouse</title><content type='html'>&lt;p&gt;Recently installed &lt;a href="http://spins.fedoraproject.org/kde/"&gt;Fedora 15 KDE spin&lt;/a&gt;, partly because the XFCE spins wouldn't boot from CD but also because I've heard less-than-favourable things about Gnome3 and because I'm addicted to Konqueror as a graphical sftp/scp/ssh viewer, so figured might as well use kdm instead of xfwm4 or gdm.

&lt;p&gt;Still having some problems getting my 1600x1200 (or 1920x1200) monitor to do anything more than 1024x768 on the VGA port of the video card (works fine on the DisplayPort connector, either directly or via a DP-to-DVI cable, but not on the VGA connector, even with xorg.conf hackery). That said the options for display/monitor management under KDE are much better than under XFCE, and this is the first time I've been able to get two monitors working without HOURS of hacking away at xorg.conf scripts. So... big props for this release *almost* Just Working. 
&lt;p&gt;
Workaround I'm trying next is to install a second video card. Will update when/if that solves the problem once it arrives. 

&lt;p&gt;
But video resolution aside, I did recently figure out how to set keyboard bindings for moving windows between desktops (thanks to &lt;a href="http://productivity.davidfisco.com/2011/06/organizing-your-kde-desktops-and.html"&gt;David Fisco&lt;/a&gt;). From the K-menu, select &lt;b&gt;System Settings &gt; Shortcuts and Gestures &gt; Global Keyboard Shortcuts &gt; KDE Component: KWin &gt; "Window One Desktop To The Left/Right"&lt;/b&gt;:

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-fSaXvZeOaos/Tl8hce6VqMI/AAAAAAAAGWg/ha5En9_bQrc/s1600/kde-move-windows-between-desktops.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://4.bp.blogspot.com/-fSaXvZeOaos/Tl8hce6VqMI/AAAAAAAAGWg/ha5En9_bQrc/s320/kde-move-windows-between-desktops.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647269230963697858" /&gt;&lt;/a&gt;

&lt;p&gt;... and for switching between desktops (&lt;b&gt;"Switch To Next/Previous Desktop"&lt;/b&gt;)

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-6Z6C602zBfc/Tl8h6k_356I/AAAAAAAAGWo/Stdv1Ib4_B8/s1600/kde-switch-between-desktops.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://3.bp.blogspot.com/-6Z6C602zBfc/Tl8h6k_356I/AAAAAAAAGWo/Stdv1Ib4_B8/s320/kde-switch-between-desktops.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647269747993601954" /&gt;&lt;/a&gt;

&lt;p&gt;Also recently discovered some fun options for switching between windows (on all desktops). From the K-menu, select &lt;b&gt;System Settings &gt; Desktop Effects &gt; Enable desktop effects &gt; Effect for window switching: Present Windows&lt;/b&gt; (or any of the other options).

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-BWnwj-5gWko/Tl8kG5Z6JYI/AAAAAAAAGW0/66-my3qtV8g/s1600/snapshot1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 280px;" src="http://3.bp.blogspot.com/-BWnwj-5gWko/Tl8kG5Z6JYI/AAAAAAAAGW0/66-my3qtV8g/s320/snapshot1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647272158653195650" /&gt;&lt;/a&gt;

&lt;p&gt;There's also &lt;b&gt;System Settings &gt; Window Behavior &gt; Task Switcher &gt; Effect: Present Windows&lt;/b&gt;:

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-9C1NjsF5q_U/Tl8mMRIPHGI/AAAAAAAAGXM/t4Uq-ELy29c/s1600/snapshot3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 274px;" src="http://2.bp.blogspot.com/-9C1NjsF5q_U/Tl8mMRIPHGI/AAAAAAAAGXM/t4Uq-ELy29c/s320/snapshot3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647274449944124514" /&gt;&lt;/a&gt;

&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-4gtWa5xUywY/Tl8lLTSKeHI/AAAAAAAAGXA/5nU0Yg-MIlY/s1600/snapshot2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://1.bp.blogspot.com/-4gtWa5xUywY/Tl8lLTSKeHI/AAAAAAAAGXA/5nU0Yg-MIlY/s320/snapshot2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647273333831137394" /&gt;&lt;/a&gt;

&lt;p&gt;You might want to set an animation for switching between desktops, though I find with multiple monitors this can be a bit dizzying. From the K-menu, select &lt;b&gt;System Settings &gt; Workspace Behavior &gt; Virtual Desktops &gt; Switching &gt; Animation: Desktop Cube Animation&lt;/b&gt;. For something more subtle, try "Fade Desktop".

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-8ckNKZbYlKs/Tl8nM3ftRFI/AAAAAAAAGXY/tVfL5bHLtvc/s1600/snapshot4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 274px;" src="http://2.bp.blogspot.com/-8ckNKZbYlKs/Tl8nM3ftRFI/AAAAAAAAGXY/tVfL5bHLtvc/s320/snapshot4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647275559754744914" /&gt;&lt;/a&gt;

&lt;p&gt;Finally, you may want to set screen edge behaviours, such as making Present Windows appear when you cursor to the top-center of your screen. &lt;b&gt;System Settings &gt; Workspace Behavior &gt; Screen Edges &gt; right-click a target zone:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-lwN9CMCjFHE/Tl8pLlYrgtI/AAAAAAAAGXk/5vzEff8jcpw/s1600/snapshot5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 270px;" src="http://3.bp.blogspot.com/-lwN9CMCjFHE/Tl8pLlYrgtI/AAAAAAAAGXk/5vzEff8jcpw/s320/snapshot5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5647277736736817874" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5450342330726063877?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5450342330726063877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5450342330726063877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5450342330726063877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5450342330726063877'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/09/howto-move-around-between-desktops.html' title='HOWTO: Move around between desktops &amp; windows with keyboard or mouse'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-fSaXvZeOaos/Tl8hce6VqMI/AAAAAAAAGWg/ha5En9_bQrc/s72-c/kde-move-windows-between-desktops.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7803856999651641537</id><published>2011-08-16T15:15:00.005-04:00</published><updated>2011-08-16T15:27:36.552-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mnt'/><category scheme='http://www.blogger.com/atom/ns#' term='partition'/><category scheme='http://www.blogger.com/atom/ns#' term='vg'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='lvm2'/><category scheme='http://www.blogger.com/atom/ns#' term='livecd'/><category scheme='http://www.blogger.com/atom/ns#' term='lvm'/><category scheme='http://www.blogger.com/atom/ns#' term='mount'/><category scheme='http://www.blogger.com/atom/ns#' term='lv'/><title type='text'>Mounting Linux LVM drives</title><content type='html'>&lt;p&gt;Because my Thinkpad X200 has finally, after just under 3 years, decided to give up the ghost via a FAN ERROR and refusal to start (POST beeps &amp;amp; auto-shutdown), I'm now faced with the task of recovering all the data on the drive (about 120G) across multiple partitions.

&lt;p&gt;
Here's the drive layout, as per cfdisk:

&lt;p&gt;&lt;pre class="brush:shell"&gt;                                   cfdisk (util-linux-ng 2.17.2)

                                        Disk Drive: /dev/sdb
                                 Size: 160041885696 bytes, 160.0 GB
                       Heads: 255   Sectors per Track: 63   Cylinders: 19457

     Name           Flags         Part Type    FS Type              [Label]            Size (MB)
 --------------------------------------------------------------------------------------------------
     sdb1                          Primary     NTFS                 [^B]                26214.44   *
     sdb2           Boot           Primary     Linux ext3                                 209.72   *
                                   Logical     Free Space                                   3.68   *
     sdb5                          Logical     Linux ext3           [HOME]             106043.70   *
     sdb6           NC             Logical     Linux LVM                                20970.48   *
                                   Logical     Free Space                                   1.09   *
     sdb4                          Primary     Compaq diagnostics                        6595.71   *
                                               Unusable                                     0.49   *
&lt;/pre&gt;

&lt;p&gt;So, under a Fedora 13 LiveCD, the /boot (sdb2) and /home (sdb5) partitions automounted, along with the WinXP (sdb1) partition. But the root partition (/, part of sdb6) would not as it's part of a LVM. After a &lt;a href="http://lmgtfy.com/?q=mount+linux+lvm+partition"&gt;quick burst of googling&lt;/a&gt;, &lt;a href="http://linuxers.org/howto/how-mount-linux-lvm-volume-partitions-linux"&gt;I found this solution&lt;/a&gt;, which digests down to simply this:

&lt;p&gt;&lt;pre class="brush:shell"&gt;
yum install lvm2 -y; # install support for lvm2
pvscan # scan vol groups
vgchange vg_x2lappy -a y # mark your vol group active
lvscan # scan for logical volumes 
mkdir /media/sdb6 # create a mount point
mount /dev/vg_x2lappy/lv_root /media/sdb6/ # mount the lv
cd /media/sdb6/; ls -la # take off every zig!
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7803856999651641537?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7803856999651641537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7803856999651641537' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7803856999651641537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7803856999651641537'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/08/mounting-linux-lvm-drives.html' title='Mounting Linux LVM drives'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8189197383575414537</id><published>2011-07-27T11:48:00.003-04:00</published><updated>2011-07-27T12:46:36.116-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='versioning'/><category scheme='http://www.blogger.com/atom/ns#' term='manifest'/><title type='text'>MANIFEST.MF and feature.xml versioning rules</title><content type='html'>I'm forever forgetting what the rules are for dependency declarations in MANIFEST.MF and feature.xml for &lt;a href="#plugin"&gt;osgi plugins&lt;/a&gt; and &lt;a href="#feature"&gt;features&lt;/a&gt;. And Googling often results in frustration rather than an answer. So, because today I actually found a concise list of the rules, I thought I'd repost them here, with some minor edits to help clarify.

&lt;blockquote&gt;

&lt;a name="plugin"&gt;&lt;/a&gt;&lt;h4&gt;OSGi Plugin Version Ranges&lt;/h4&gt;&lt;p&gt;Dependencies on bundles and packages have an associated &lt;em&gt;version range&lt;/em&gt; which is specified using an interval notation: a square bracket
&amp;#8220;[&amp;#8221; or &amp;#8220;]&amp;#8221; denotes
an &lt;em&gt;inclusive&lt;/em&gt; end of the range and a round bracket
&amp;#8220;(&amp;#8221; or &amp;#8220;)&amp;#8221; denotes
an &lt;em&gt;exclusive&lt;/em&gt; end of the range. Where one end of the range is to be included and the other excluded, it is permitted to
pair a round bracket with a square bracket.
The examples below make this clear.&lt;/p&gt;&lt;p&gt;If a single version number is used where a version &lt;em&gt;range&lt;/em&gt; is
required this does &lt;em&gt;not&lt;/em&gt; indicate a single version, but the range &lt;em&gt;starting&lt;/em&gt; from that version and 
including all higher versions.&lt;/p&gt;&lt;p&gt;There are four common cases:

&lt;ul type="disc"&gt;
&lt;li&gt;&lt;p&gt;A &amp;#8220;strict&amp;#8221; version range, such as [1.2.3,1.2.3], which
denotes that version and only that version.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;A &amp;#8220;half-open&amp;#8221; range, such as [1.2.3,2.0.0), which has an inclusive lower limit
and an exclusive upper limit, denoting version 1.2.3 and any version after this, up 
to, &lt;em&gt;but not including&lt;/em&gt;, version 2.0.0.
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;An &amp;#8220;unbounded&amp;#8221; version range, such as 1.2.3, which
denotes version 1.2.3 and &lt;em&gt;all&lt;/em&gt; later versions.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;No version range, which denotes any version will be acceptable. &lt;span style="font-weight:bold;"&gt;&lt;span style="font-style:italic;"&gt;NOT RECOMMENDED.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;a href="http://divbyzero.com/eclipse/osgi-concepts-versioning.html"&gt;The complete text of the above snippet can be seen here&lt;/a&gt; (&lt;a href="http://divbyzero.com/eclipse/osgi-concepts-versioning.pdf"&gt;or here as PDF&lt;/a&gt;).

&lt;p&gt;Example:

&lt;pre class="brush:shell"&gt;
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
 org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
 org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)",
 org.eclipse.ui.navigator;bundle-version="3.5.100",
 com.ibm.icu&lt;/pre&gt;

&lt;p&gt;See also:

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html"&gt;plugin manifest&lt;/a&gt; (plugin.xml)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/bundle_manifest.html"&gt;osgi bundle manifest&lt;/a&gt; (MANIFEST.MF)&lt;/li&gt;

&lt;/ul&gt;

&lt;hr/&gt;
&lt;a name="feature"&gt;&lt;/a&gt;In terms of feature manifest (feature.xml) rules, &lt;a href="http://help.eclipse.org"&gt;help.eclipse.org&lt;/a&gt; has pretty good documentation, but the most important thing to remember - and what I often have to look up - is how to state the matching rules for required upstream features &amp;amp; plugins.

Experience says it's always better to state things explicitly so there's no downstream guesswork needed and anyone reading your manifest knows EXACTLY what version(s) are required for or compatible with your feature. Plus, while YOU might be using PDE UI to build, someone else might be using Tycho and Maven, and every tool can interpret missing metadata their own way. 

&lt;p&gt;&lt;b&gt;&lt;i&gt;When in doubt, spell it out.&lt;/i&gt;&lt;/b&gt;

&lt;blockquote&gt;Valid values and processing are as follows:

&lt;ul&gt;&lt;li&gt;if version attribute is not specified, the match attribute (if specified) is ignored.
    &lt;li&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;perfect&lt;/span&gt;&lt;/span&gt; - dependent plug-in version must match exactly the specified version. If "patch" is "true", "perfect" is assumed and other values cannot be set. &lt;span style="font-style:italic;"&gt;[1.2.3,1.2.3]&lt;/span&gt;
    &lt;li&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;equivalent&lt;/span&gt;&lt;/span&gt; - dependent plug-in version must be at least at the version specified, or at a higher service level (major and minor version levels must equal the specified version). &lt;span style="font-style:italic;"&gt;[1.2.3,1.3)&lt;/span&gt;
    &lt;li&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;compatible&lt;/span&gt;&lt;/span&gt; - dependent plug-in version must be at least at the version specified, or at a higher service level or minor level (major version level must equal the specified version). &lt;span style="font-style:italic;"&gt;[1.2.3,2.0)&lt;/span&gt;
    &lt;li&gt;&lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;greaterOrEqual&lt;/span&gt;&lt;/span&gt; - dependent plug-in version must be at least at the version specified, or at a higher service, minor or major level. &lt;span style="font-style:italic;"&gt;1.2.3&lt;/span&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;a href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/reference/misc/feature_manifest.html"&gt;The complete text of the above snippet can be seen here&lt;/a&gt;.

&lt;p&gt;Example:

&lt;pre class="brush:xml"&gt;
&amp;lt;requires&gt;
  &amp;lt;import feature="org.eclipse.m2e.feature" version="1.0.0" match="compatible"/&gt;
  &amp;lt;import feature="org.maven.ide.eclipse.wtp.feature" version="0.13.0" match="greaterOrEqual"/&gt;

  &amp;lt;plugin id="ch.qos.logback.classic" version="0.9.27.v20110224-1110" match="greaterOrEqual"/&gt;
  &amp;lt;plugin id="ch.qos.logback.core" version="0.9.27.v20110224-1110" match="greaterOrEqual"/&gt;
  &amp;lt;plugin id="ch.qos.logback.slf4j" version="0.9.27.v20110224-1110" match="greaterOrEqual"/&gt;
  &amp;lt;plugin id="org.slf4j.api" version="1.6.1.v20100831-0715" match="compatible"/&gt;
  &amp;lt;plugin id="com.ning.async-http-client" version="1.6.3.201106061504" match="equivalent"/&gt;
  &amp;lt;plugin id="org.jboss.netty" version="3.2.4.Final-201106061504" match="perfect"/&gt;
  &amp;lt;plugin id="org.hamcrest.core" version="1.1.0.v20090501071000" match="equivalent"/&gt;
&amp;lt;/requires&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8189197383575414537?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8189197383575414537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8189197383575414537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8189197383575414537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8189197383575414537'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/07/manifestmf-and-featurexml-versioning.html' title='MANIFEST.MF and feature.xml versioning rules'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2547477740773302519</id><published>2011-06-06T17:20:00.003-04:00</published><updated>2011-06-06T17:43:17.726-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xfce4'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='xfce'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><title type='text'>HOWTO: get xorg.conf to work w/ 1600x1200 res and an old Intel card</title><content type='html'>&lt;ol&gt;&lt;li&gt;Check your hardware spec, and determine how much memory your card has&lt;a href="http://www.ubuntugeek.com/intel-graphics-performance-guide-for-ubuntu-904-jaunty-users.html"&gt;[1]&lt;/a&gt;:

&lt;pre class="brush:shell"&gt;# lspci -vv | grep "Intel" -A7 | grep "VGA controller" -A7 | egrep "controller|Region"
00:02.0 VGA compatible controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02) (prog-if 00 [VGA controller])
 Region 0: Memory at e0000000 (32-bit, prefetchable) [size=128M]
 Region 1: Memory at d0000000 (32-bit, non-prefetchable) [size=512K]&lt;/pre&gt;

&lt;li&gt; Use the above values to configure your /etc/X11/xorg.conf file - I suspect much of this is not needed, but here's what I have:

&lt;pre class="brush:shell"&gt;Section "Device"
 Identifier "Intel"
 Option "AccelMethod" "UXA"
 VideoRam 130560
 #Driver      "intel"
 Driver      "vesa"
 VendorName  "Intel Corporation"
 BoardName   "82852/855GM Integrated Graphics Device"
 BusID       "PCI:0:2:0"
EndSection

Section "Monitor"
 Identifier "VGA"
 ModelName    "Sceptre 24"
        HorizSync    31 - 80
        VertRefresh  55 - 76
        Option      "DPMS" "true"
EndSection

Section "Screen"
 Identifier "Default Screen"
 Device "Intel"
 Monitor "VGA"
 DefaultDepth 16
        SubSection "Display"
               Depth           16
               Modes           "1920x1440_60" "1920x1200_60" "1920x1080_60" "1680x1050_59.883" "1360x768_59.8" "1600x1200_60" "1280x1024_60" "1024x768_60"
               #Modes           "1920x1440" "1600x1200" "1280x1024" "1280x768"
        EndSubSection
EndSection 

Section "DRI"
        Mode         0666
EndSection

Section "Extensions"
        Option      "Composite" "Enable"
EndSection

Section "Module"
        Load  "dri"
EndSection&lt;/pre&gt;

&lt;li&gt; In /boot/grub/menu.lst, add the correct vga mode for 1600x1200 (&lt;span style="font-weight:bold;"&gt;vga=8&lt;/span&gt;). If you enter what you think is the correct mode based on &lt;a href="http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers"&gt;this table&lt;/a&gt;, you'll be told it's wrong and can manually correct it, boot up, then fix the file &amp;amp; reboot.

&lt;pre class="brush:shell"&gt;default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz


title Fedora (2.6.34.7-56.fc13.i686)
 root (hd0,0)
 kernel /vmlinuz-2.6.34.7-56.fc13.i686 ro root=/dev/mapper/vg_xlappy-lv_root rd_LVM_LV=vg_xlappy/lv_root rd_LVM_LV=vg_xlappy/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet vga=8
 initrd /initramfs-2.6.34.7-56.fc13.i686.img

title Fedora (2.6.34.7-56.fc13.i686) cmdline only, vga=8 = 1600x1200x16
 root (hd0,0)
 kernel /vmlinuz-2.6.34.7-56.fc13.i686 ro root=/dev/mapper/vg_xlappy-lv_root rd_LVM_LV=vg_xlappy/lv_root rd_LVM_LV=vg_xlappy/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us init=3 init 3 vga=8
 initrd /initramfs-2.6.34.7-56.fc13.i686.img&lt;/pre&gt;

&lt;/ol&gt;

&lt;p&gt;See also:

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://wiki.antlinux.com/pmwiki.php?n=HowTos.VgaModes"&gt;VGA Modes&lt;/a&gt;
&lt;li&gt;&lt;a href="http://blog.devnu11.net/2008/11/grub-vga-mode/"&gt;grub VGA Modes&lt;/a&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2547477740773302519?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2547477740773302519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2547477740773302519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2547477740773302519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2547477740773302519'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/06/howto-get-xorgconf-to-work-w-1600x1200.html' title='HOWTO: get xorg.conf to work w/ 1600x1200 res and an old Intel card'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1397311738654346497</id><published>2011-04-19T21:57:00.005-04:00</published><updated>2011-04-19T22:16:41.463-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vimscript'/><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='timestamp'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='composite'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>vim scripting: replacing timestamps</title><content type='html'>&lt;p&gt;After weeks of manually updating compositeArtifacts.xml and compositeContent.xml files' timestamps using `date +%s000`, I finally snapped and went looking for a better way.

&lt;p&gt;Using &lt;a href="http://vim.wikia.com/wiki/Write_a_date-stamped_backup_of_the_current_file"&gt;the Vim Tips wiki&lt;/a&gt; as inspiration, I cobbled together this &lt;a href="http://vim.wikia.com/wiki/Timestamp_update_in_XML_file"&gt;keymapped string replacement function&lt;/a&gt; for use in Vim:

&lt;p&gt;
&lt;pre class="brush:shell"&gt;
" add this to your ~/.vimrc file, then type '\ts' to update timestamp to current
fun! ReplaceTimestamp()
   let tstamp = strftime("%s000")
   exe ":%s#&amp;lt;property name='p2.timestamp' value='[0-9]\\+'/&amp;gt;#&amp;lt;property name='p2.timestamp' value='" . tstamp . "'/&amp;gt;#g"
   echo "New time: " . tstamp
endfun
nnoremap &amp;lt;Leader&amp;gt;ts :call ReplaceTimestamp()&amp;lt;CR&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1397311738654346497?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1397311738654346497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1397311738654346497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1397311738654346497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1397311738654346497'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/04/vim-scripting-replacing-timestamps.html' title='vim scripting: replacing timestamps'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5922112597548637752</id><published>2011-03-03T17:14:00.005-05:00</published><updated>2011-03-03T17:20:19.705-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='color'/><category scheme='http://www.blogger.com/atom/ns#' term='colour'/><category scheme='http://www.blogger.com/atom/ns#' term='status'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>Git in colour</title><content type='html'>&lt;p&gt;I've been using Git for a while now, but only today realized I can have coloured output for diff, grep, branch, show-branch and status, without having to hook in any other external tools (like colordiff, for example).

&lt;p&gt;Here's my &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html"&gt;~/.gitconfig&lt;/a&gt; file, which &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html#EXAMPLES"&gt;enables colour&lt;/a&gt;:

&lt;p&gt;&lt;pre class="brush:shell"&gt;[user]
        name = Nick Boldt
        email = nickboldt (at) gmail.com

[giggle]
        main-window-maximized = false
        main-window-geometry = 1324x838+0+24
        main-window-view = HistoryView

[core]
        trustctime = false
        branch = auto
        diff = auto
        interactive = auto
        status = auto
        editor = vim

[merge]
        tool = vimdiff

[receive]
        denyCurrentBranch = warn

[branch]
        autosetuprebase = local

[color]
        ui = true
        diff = true
        grep = true
        branch = true
        showbranch = true
        status = true

[color "diff"]
        plain = normal dim
        meta = yellow dim
        frag = blue bold
        old = magenta
        new = cyan
        whitespace = red reverse

[color "status"]
        header = normal dim
        added = yellow
        untracked = magenta

[color "branch"]
        current = yellow reverse
        local = yellow
        remote = red&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5922112597548637752?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5922112597548637752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5922112597548637752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5922112597548637752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5922112597548637752'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/03/git-in-colour.html' title='Git in colour'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3232124265339361286</id><published>2011-02-16T17:57:00.005-05:00</published><updated>2011-03-03T10:24:15.044-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='product build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='p2.inf'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='.product'/><title type='text'>Simplifying the p2 Process, Part 4: Using p2.inf to add/remove update sites</title><content type='html'>&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-1-p2.html"&gt;Part 1&lt;/a&gt; of this series, I looked at use of composite repos to provide a way of combining update sites into a single URL for ease of use and a single point of entry from which to do updates. 

&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-2-target.html"&gt;Part 2&lt;/a&gt;, I discussed why we switched from using a collection of SDKs against which to build - using the now-deprecated brute-force "just unzip into eclipse root folder or dropins" approach - to using a single target platform update site so as to simplify maintenance and provide a reusable artifact for both build and workspace provisioning.

&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2011/02/simplifying-p2-process-part-3-associate.html"&gt;Part 3&lt;/a&gt;, I looked at the idea of associating your repo with its upstream requirement sites, so that end-users need only use a single URL, rather than a half-dozen.

&lt;hr/&gt;
Finally, let's look at how you can use a p2.inf file to remove sites you don't support and add sites you do.

&lt;p&gt;In JBDS 4, we include only two update sites - one for core features, and one for certified third-party extras, so that users will only get official updates from us, rather than from Spring, Eclipse, or anywhere else. Sure, they can &lt;b&gt;manually&lt;/b&gt; add other URLs themselves, but that's a bit like pulling off the 'do not remove this tag' tag on a mattress or removing the 'warranty void if removed' sticker on your laptop.

&lt;p&gt;So, first, we remove all the update site and discovery site URLs from our upstream features' feature.xml files, so they don't trickle down into the product.

&lt;p&gt;Next, we use a p2.inf file:

&lt;p&gt;&lt;pre class="brush:shell"&gt;# To explicitly remove a site, use instructions.unconfigure
instructions.configure=\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:https${#58}//www.your.server.com/,name:Core Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:https${#58}//www.your.server.com/,name:Core Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:https${#58}//www.your.server.com/extras/,name:Extra Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:https${#58}//www.your.server.com/extras/,name:Extra Product Updates);\
 
&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Then, to generate a site using that p2.inf instruction, here's a bit of Ant code:

&lt;p&gt;&lt;pre class="brush:xml"&gt;&amp;lt;echo&gt;Run p2.publisher.UpdateSitePublisher using launcherjar = @{launcherjar}&amp;lt;/echo&gt;
&amp;lt;java jar="@{launcherjar}"
      fork="true" timeout="10800000" jvm="${java.home}/bin/java" failonerror="true"
      maxmemory="256m" taskname="p2"
&gt;
        &amp;lt;classpath&gt;
                &amp;lt;fileset dir="${builder.build.path}/plugins"
                         includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
                /&gt;
                &amp;lt;fileset dir="${clean.eclipse.home}/plugins"
                         includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
                /&gt;
                &amp;lt;pathelement location="${builder.build.path}/plugins" /&gt;
                &amp;lt;pathelement location="${clean.eclipse.home}/plugins" /&gt;
        &amp;lt;/classpath&gt;
        &amp;lt;arg line=" org.eclipse.equinox.launcher.Main -consolelog -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher"
        /&gt;
        &amp;lt;arg line=" -metadataRepository file:${updateSiteJarDir}/ -metadataRepositoryName &amp;quot;${update.site.product.name} ${update.site.description} Update Site&amp;quot;"
        /&gt;
        &amp;lt;arg line=" -artifactRepository file:${updateSiteJarDir}/ -artifactRepositoryName &amp;quot;${update.site.product.name} ${update.site.description} Artifacts&amp;quot;"
        /&gt;
        &amp;lt;arg line=" -source ${updateSiteJarDir}/" /&gt;
        &amp;lt;arg line=" -compress -publishArtifacts -reusePack200Files -configs *,*,*" /&gt;
&amp;lt;/java&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Or, put your p2.inf file in the same directory as your build.properties ...

&lt;p&gt;&lt;pre class="brush:shell"&gt;product=${builderDirectory}/jbds-all.product
runPackager=true

p2.gathering=true
p2.category.site=file:${builderDirectory}/site.xml
# locations.  Don't need a baseLocation, the transformedRepoLocation will have what we need
buildDirectory=${product.build.directory}/jbds-all-package
transformedRepoLocation=${product.build.directory}/jbds-all-package/transformed
repoBaseLocation=${product.build.directory}/jbds-all-package/toTransform

# The prefix that will be used in the generated archive.
archivePrefix=studio

# The location underwhich all of the build output will be collected.
collectingFolder=${archivePrefix}

# The list of {os, ws, arch} configurations to build.
configs = linux,gtk,x86 &amp; win32,win32,x86 &amp; linux,gtk,x86_64 &amp; macosx,cocoa,x86 &amp; macosx,cocoa,x86_64

buildId=${product.name}-product-${versionTag}
buildLabel=${buildId}

skipBase=true
skipMaps=true
skipFetch=true&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt; ... and your .product file ...

&lt;p&gt;&lt;pre class="brush:xml"&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;?pde version="3.5"?&gt;

&amp;lt;product name="JBoss Developer Studio for Web and SOA Development" uid="com.jboss.jbds.all" id="com.jboss.jbds.product.product" application="org.eclipse.ui.ide.workbench" version="4.0.0.qualifier" useFeatures="true" includeLaunchers="true"&gt;

   &amp;lt;configIni use="default"&gt;
   &amp;lt;/configIni&gt;

   &amp;lt;launcherArgs&gt;
      &amp;lt;programArgs&gt;--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile&amp;lt;/programArgs&gt;
      &amp;lt;vmArgs&gt;-Xms512m
-Xmx1024m
-Dosgi.bundles=reference:file:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1:start
-Dosgi.instance.area.default=@user.home/workspace&amp;lt;/vmArgs&gt;
      &amp;lt;vmArgsMac&gt;-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
-Xdock:icon=../Resources/JBDevStudio.icns&amp;lt;/vmArgsMac&gt;
   &amp;lt;/launcherArgs&gt;

   &amp;lt;windowImages/&gt;

   &amp;lt;splash
      location="com.jboss.jbds.product" /&gt;
   &amp;lt;launcher name="jbdevstudio"&gt;
      &amp;lt;solaris/&gt;
      &amp;lt;win useIco="true"&gt;
         &amp;lt;ico path="jbds.ico"/&gt;
         &amp;lt;bmp/&gt;
      &amp;lt;/win&gt;
   &amp;lt;/launcher&gt;

   &amp;lt;vm&gt;
   &amp;lt;/vm&gt;

   &amp;lt;plugins&gt;
   &amp;lt;/plugins&gt;

   &amp;lt;features&gt;
      &amp;lt;feature id="com.jboss.jbds.product.feature" version="4.0.0.qualifier"/&gt;
   &amp;lt;/features&gt;


&amp;lt;/product&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt; ... and when generating a product using PDE, that file and its instructions should be read at the correct time.

&lt;p&gt;Hope this series has been helpful! If you have any examples of what you've done with .product or p2.inf files, please feel free to send me a link to your post or the file in your cvs, svn, or git repo. I'd love to see what else you can do with p2 and product builds.

&lt;p&gt;See also:

&lt;ul&gt;&lt;li&gt;&lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_customizing_metadata.html"&gt;help.eclipse.org - Customizing p2 metadata&lt;/a&gt;
&lt;li&gt;&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.releng.eclipsebuilder/eclipse/buildConfigs/sdk/builder/p2.inf?view=co"&gt;p2.inf for building Eclipse SDK&lt;/a&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3232124265339361286?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3232124265339361286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3232124265339361286' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3232124265339361286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3232124265339361286'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/02/simplifying-p2-process-part-4-using.html' title='Simplifying the p2 Process, Part 4: Using p2.inf to add/remove update sites'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3311076791175478368</id><published>2011-02-13T09:00:00.000-05:00</published><updated>2011-02-13T09:00:01.129-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='associate'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='p2.inf'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><category scheme='http://www.blogger.com/atom/ns#' term='easeofuse'/><title type='text'>Simplifying The p2 Process, Part 3: Associate Sites</title><content type='html'>&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-1-p2.html"&gt;Part 1&lt;/a&gt; of this series, I looked at use of composite repos to provide a way of combining update sites into a single URL for ease of use and a single point of entry from which to do updates. 

&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-2-target.html"&gt;Part 2&lt;/a&gt;, I discussed why we switched from using a collection of SDKs against which to build - using the now-deprecated brute-force "just unzip into eclipse root folder or dropins" approach - to using a single target platform update site so as to simplify maintenance and provide a reusable artifact for both build and workspace provisioning.

&lt;hr/&gt;

&lt;p&gt;Now, let's look at the no-brainer that says that "less is more" when it comes to telling p2 from where to get updates, and that less effort for your user when installing is always a win. 

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HLxAgx5nUWg/TVMx-a2IKMI/AAAAAAAAGQA/YrXvAsWRGYs/s1600/win.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 275px;" src="http://3.bp.blogspot.com/-HLxAgx5nUWg/TVMx-a2IKMI/AAAAAAAAGQA/YrXvAsWRGYs/s320/win.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571852112415434946" /&gt;&lt;/a&gt;

&lt;p&gt;If this sounds familar, I did blog about this briefly &lt;a href="http://divby0.blogspot.com/2010/08/p2-repository-association-and-fine-art.html"&gt;back in August&lt;/a&gt;. Since then, we've also added a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/build/aggregate/site/remove-uncategorized.xsl"&gt;quick XSLT script&lt;/a&gt; to remove the "Uncategorized" category that Tycho automatically adds for features which are listed in your site.xml but are not associated with a category. While this isn't strictly related to associate sites, it is about ease of use; while I applaud the desire to have everything belong to a category bucket (perhaps because the model Tycho's using requires it), the reason we'd rather hide these is to declutter the install view and not confuse people by suggesting features that won't work on their OS (eg., for which there's no XulRunner port). 

&lt;p&gt;But I digress...

&lt;h3&gt;Associate Sites&lt;/h3&gt;

In the old days of yore, you could situate an &lt;a href="http://download.jboss.org/jbosstools/updates/stable/ganymede/associateSites.xml"&gt;associateSites.xml&lt;/a&gt; next to your site.xml in your "classic" update site, and Eclipse Update Manager would happily read that file and add those extra sites to your list of available update sites.

&lt;p&gt;&lt;a href="http://divby0.blogspot.com/2008/05/ganymede-poster-contest.html"&gt;Then came p2&lt;/a&gt;, and while the old way still worked, it was no longer ideal. So, the new approach was to insert these associate sites directly into the p2 metadata for the site, content.xml and artifacts.xml (or content.jar and artifacts.jar).

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-pJLvuww9JMw/TVM1nZP1J-I/AAAAAAAAGQY/DIJZflknkfU/s1600/p2_Came_From_Beneath_Equinox.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 249px;" src="http://4.bp.blogspot.com/-pJLvuww9JMw/TVM1nZP1J-I/AAAAAAAAGQY/DIJZflknkfU/s320/p2_Came_From_Beneath_Equinox.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571856114895890402" /&gt;&lt;/a&gt;

&lt;p&gt;This could be accomplished via a somewhat hacky appraoch - unpacking the existing metadata (content.jar) and shoehorning in the information at the bottom of the content.xml file, using &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/build/aggregate/site/build.xml"&gt;an ant script&lt;/a&gt; (see "add.associate.sites" target, below) and a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x/build/aggregate/site/aggregateSite.jbosstools.properties"&gt;list of sites to be added&lt;/a&gt;:

&lt;p&gt;&lt;pre class="brush:xml"&gt;&amp;lt;target name="add.associate.sites" if="associate.sites"&gt;
        &amp;lt;if&gt;
                &amp;lt;and&gt;
                        &amp;lt;!-- Defined in aggregateSite.properties --&gt;
                        &amp;lt;isset property="associate.sites" /&gt;
                        &amp;lt;not&gt;
                                &amp;lt;equals arg1="${associate.sites}" arg2="" /&gt;
                        &amp;lt;/not&gt;
                &amp;lt;/and&gt;
                &amp;lt;then&gt;
                        &amp;lt;if&gt;
                                &amp;lt;available file="${update.site.source.dir}/content.jar" type="file" /&gt;
                                &amp;lt;then&gt;
                                        &amp;lt;unzip src="${update.site.source.dir}/content.jar" dest="${update.site.source.dir}" /&gt;
                                        &amp;lt;delete file="${update.site.source.dir}/content.jar" /&gt;
                                &amp;lt;/then&gt;
                        &amp;lt;/if&gt;
                        &amp;lt;!-- counter variable --&gt;
                        &amp;lt;var name="associate.sites.0" value="" /&gt;
                        &amp;lt;for param="associate.site" list="${associate.sites}" delimiter=", 
"&gt;
                                &amp;lt;sequential&gt;
                                        &amp;lt;var name="associate.sites.0" value="${associate.sites.0}00" /&gt;
                                &amp;lt;/sequential&gt;
                        &amp;lt;/for&gt;
                        &amp;lt;length property="associate.sites.length" string="${associate.sites.0}" /&gt;

                        &amp;lt;loadfile srcfile="${update.site.source.dir}/content.xml" property="content.xml"&gt;
                                &amp;lt;filterchain&gt;
                                        &amp;lt;tailfilter lines="-1" skip="1" /&gt;
                                &amp;lt;/filterchain&gt;
                        &amp;lt;/loadfile&gt;
                        &amp;lt;echo file="${update.site.source.dir}/content.xml" message="${content.xml}" /&gt;
                        &amp;lt;echo file="${update.site.source.dir}/content.xml" append="true"&gt;  &amp;lt;references size='${associate.sites.length}'&gt;
&amp;lt;/echo&gt;
                        &amp;lt;for param="associate.site" list="${associate.sites}" delimiter=", 
"&gt;
                                &amp;lt;sequential&gt;
                                        &amp;lt;!-- insert into content.xml --&gt;
                                        &amp;lt;echo file="${update.site.source.dir}/content.xml" append="true"&gt;    &amp;lt;repository uri='@{associate.site}' url='@{associate.site}' type='0' options='1'/&gt;
&amp;lt;repository uri='@{associate.site}' url='@{associate.site}' type='1' options='1'/&gt;
&amp;lt;/echo&gt;
                                &amp;lt;/sequential&gt;
                        &amp;lt;/for&gt;
                        &amp;lt;echo file="${update.site.source.dir}/content.xml" append="true"&gt;  &amp;lt;/references&gt;
&amp;lt;/repository&gt;
&amp;lt;/echo&gt;
          &amp;lt;!--  
    workaround for Tycho bug: uncategorized features in site.xml are put into
    "Uncategorized" category, rather than just being uncategorized (hidden) 
   --&gt;
                 &amp;lt;copy file="${update.site.source.dir}/content.xml" tofile="${update.site.source.dir}/content.old.xml" overwrite="true" /&gt;
                        &amp;lt;xslt style="remove-uncategorized.xsl" in="${update.site.source.dir}/content.old.xml" out="${update.site.source.dir}/content.xml" /&gt;
                        &amp;lt;zip destfile="${update.site.source.dir}/content.jar" basedir="${update.site.source.dir}" includes="content.xml" /&gt;
                        &amp;lt;delete file="${update.site.source.dir}/content.xml" /&gt;
                        &amp;lt;delete file="${update.site.source.dir}/content.old.xml" /&gt;
                &amp;lt;/then&gt;
        &amp;lt;/if&gt;
&amp;lt;/target&gt;&lt;/pre&gt;

&lt;p&gt;So, now, instead of &lt;a href="http://download.jboss.org/jbosstools/updates/JBossTools-3.1.1.GA/"&gt;telling people to add multiple update sites&lt;/a&gt; to resolve missing potentially dependencies when installing, we can cause those extra sites to be automatically added at the same time they add the single URL for JBoss Tools. Now the &lt;a href="http://www.jboss.org/tools/download/dev#noteBirt"&gt;additional sites need only be listed for reference&lt;/a&gt;, but no additional effort is required by the user.

&lt;p&gt;&lt;B&gt;BONUS HACK&lt;/b&gt;: to force a site that may already be listed (but disabled) to be added again, and this time definitely be enabled, you can add an extra slash into URL. Thus &lt;a href="http://download.eclipse.org/birt/update-site/2.6"&gt;http://download.eclipse.org/birt/update-site/2.6&lt;/a&gt; becomes &lt;a href="http://download.eclipse.org//birt/update-site/2.6/"&gt;http://download.eclipse.org//birt/update-site/2.6/&lt;/a&gt;, and as p2 sees a new site, it adds the new site (instead of ignoring it because it's already present but disabled. Again, a win.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NdFiEbj5a7w/TVM0cQOVfBI/AAAAAAAAGQM/6DMPnlf40Sg/s1600/let%2Bthe%2Bwookie%2Bwin.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 242px;" src="http://4.bp.blogspot.com/-NdFiEbj5a7w/TVM0cQOVfBI/AAAAAAAAGQM/6DMPnlf40Sg/s320/let%2Bthe%2Bwookie%2Bwin.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5571854823983512594" /&gt;&lt;/a&gt;

&lt;p&gt;Alternatively, you could cast an &lt;a href="http://en.wikipedia.org/wiki/Spellcasting_101"&gt;arcane spell&lt;/a&gt; using a &lt;a href="http://wiki.eclipse.org/Equinox/p2/Customizing_Metadata"&gt;p2.inf file&lt;/a&gt; in your &lt;a href="http://eclipsesource.com/blogs/2009/05/14/pimp-your-p2-profile/"&gt;feature's root folder or plugin's META-INF/ folder&lt;/a&gt; to add these additional, required sites... or do whatever &lt;a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/p2_actions_touchpoints.html"&gt;processing&lt;/a&gt; you might need. &lt;i&gt;I'm not sure if Tycho supports this yet, or how fully PDE supports reading this information. Got sample code? Send it to me as a comment below or via twitter to &lt;a href="http://twitter.com/#!/nickboldt"&gt;@nickboldt&lt;/a&gt;. Thanks!&lt;/i&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-63Uq4NtMf0A/TVMuIuUWRfI/AAAAAAAAGP0/VpknjNCghvI/s1600/Spellcasting_101_interface.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 175px;" src="http://2.bp.blogspot.com/-63Uq4NtMf0A/TVMuIuUWRfI/AAAAAAAAGP0/VpknjNCghvI/s320/Spellcasting_101_interface.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571847891394643442" /&gt;&lt;/a&gt;

&lt;hr/&gt;

&lt;p&gt;In part 4, I'll talk a little about how to prevent your product build from getting updates from unofficial sources, and preload your product with the official sites from which to get updates. Because it's important to balance ease of use with prevention of unsupported features. &lt;b&gt;&lt;i&gt;SPOILER ALERT&lt;/i&gt;&lt;/b&gt;: may contain p2.inf instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3311076791175478368?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3311076791175478368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3311076791175478368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3311076791175478368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3311076791175478368'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/02/simplifying-p2-process-part-3-associate.html' title='Simplifying The p2 Process, Part 3: Associate Sites'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HLxAgx5nUWg/TVMx-a2IKMI/AAAAAAAAGQA/YrXvAsWRGYs/s72-c/win.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2190576117483138168</id><published>2011-02-09T18:25:00.001-05:00</published><updated>2011-02-09T18:39:13.121-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><category scheme='http://www.blogger.com/atom/ns#' term='easeofuse'/><title type='text'>Simplifying The p2 Process, Part 2: Target Platform Repos</title><content type='html'>In &lt;a href="http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-1-p2.html"&gt;Part 1&lt;/a&gt; of this series, I looked at use of composite repos to provide a way of combining update sites into a single URL for ease of use and a single point of entry from which to do updates.

&lt;h3&gt;Defining a Target&lt;/h3&gt;

&lt;p&gt;Now, I'd like to talk about how to escape the proliferation of zips needed to establish a target platform. For those unfamiliar with the term "target platform", it's either the installed base against which you're compiling your code, or it's the collection of things you have to install first before you can install something on top of that.

&lt;p&gt;For the JBoss Tools case, we have at least 8 prereqs for installation. Here's what you had to install prior to JBoss Tools 3.1.1:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/TVC3Vmu2ecI/AAAAAAAAGPk/cpa-TZR1X0A/s1600/Screenshot-target-platform-as-SDKs-and-runtimes.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 234px; height: 205px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/TVC3Vmu2ecI/AAAAAAAAGPk/cpa-TZR1X0A/s320/Screenshot-target-platform-as-SDKs-and-runtimes.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5571154320859494850" /&gt;&lt;/a&gt;

&lt;p&gt;Now, admittedly, because there is also the &lt;a href="http://download.eclipse.org/releases/ganymede/"&gt;Ganymede update site&lt;/a&gt;, you don't necessarily need to download and unpack all these zips in order to install JBoss Tools - instead, &lt;a href="https://www.jboss.org/tools/download/installation/update_3_1.html"&gt;you need only enable the Ganymede site&lt;/a&gt;. (Same story for &lt;a href="http://download.eclipse.org/releases/helios/"&gt;Helios&lt;/a&gt; and &lt;a href="https://www.jboss.org/tools/download/installation/update_3_2.html"&gt;JBoss Tools 3.2&lt;/a&gt;.)

&lt;p&gt;However, to do a reproduceable PDE-based build, you still need to create this base install. Traditionally, PDE's approach was to download and unpack these zips into the root of the Eclipse install running the build. &lt;a href="http://wiki.eclipse.org/Athena_Common_Build"&gt;Athena&lt;/a&gt; attempted to improve on this situation by allowing you to &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report#2009-09-01"&gt;define a list of update sites and IUs&lt;/a&gt; (features and/or plugins) which were needed to define the platform. But it was far from portable, and hardly reusable.

&lt;p&gt;Buckminster (later b3) also approached this problem by creating its own markup for defining what sites and what IUs to install, backed by an EMF model. But rather than dealing with a UI to create the model and populate it, I found it more useful to simply generate an instance of the &lt;a href="http://wiki.eclipse.org/Eclipse_b3/aggregator/manual"&gt;aggregator&lt;/a&gt; model and then use the aggregator to fetch &amp; install IUs. But as the aggregator is simply a wrapper for the underlying p2.mirror and p2.director tasks, you can use those directly too. 

&lt;p&gt;But as they say... "&lt;a href="http://en.wikipedia.org/wiki/Don%27t_Bore_Us,_Get_to_the_Chorus!"&gt;Don't bore us, get to the chorus!&lt;/a&gt;" So, here's some sample code for the various solutions for build-time provisioning.

&lt;ol&gt;&lt;li&gt;&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.xml?view=markup&amp;root=Technology_Project"&gt;Using the buckminster aggregator&lt;/a&gt; (&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.m2eclipse.properties?view=markup&amp;root=Technology_Project"&gt;properties file&lt;/a&gt;) - stopped working for us w/ Eclipse 3.6, so we switched to b3
&lt;p&gt;
&lt;li&gt;&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.b3.xml?view=markup&amp;root=Technology_Project"&gt;Using the b3 aggregator&lt;/a&gt; (&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.b3.m2eclipse.properties?view=markup&amp;root=Technology_Project"&gt;properties file&lt;/a&gt;) - stopped worked consistently due to network timeouts resolving deps &amp; fetching IUs.
&lt;p&gt;
&lt;li&gt;&lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/partialMirrorFromRepo.xml?view=markup&amp;root=Technology_Project"&gt;Using p2.mirror&lt;/a&gt; - underlying p2 ant task for mirroring from one or more repos to local disk
&lt;p&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/installation/installJBossTools.xml"&gt;Using p2.director&lt;/a&gt; - underlying p2 ant task for installing IUs (from local or remote repo) into some target Eclipse
&lt;/ol&gt;

&lt;p&gt;So, with these tools, you could create a p2 repo from other repos - mirroring and installing IUs as needed - and even script an installation. But was there a better way?

&lt;h3&gt;Target Platform Definition File&lt;/h3&gt;

&lt;p&gt;Enter the target platform definition file (.target). This file contains a list of IUs and the p2 repos from which to provision them. So, it's like a b3 aggregator model, or an &lt;a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.gef.releng/build.properties?view=markup&amp;root=Technology_Project"&gt;Athena build.properties file&lt;/a&gt;, but abstracted away from the concept of a build, because it can be used for building but ALSO for provisioning a user's installed Eclipse base.

&lt;p&gt;Unfortunately, the Target Platform Definition File editor in Eclipse 3.6 is less than optimal for large targets, or when your internet connection is suboptimal. So, after fighting with it for a while, filing bugs, and ultimately giving up, I went back to my handy-dandy XML editor (often just vim) to maintain it more simply. So rather than having Eclipse automatically install things based on a .target file, I revert to a workflow that actually works: installing by hand from an update site.

&lt;p&gt;While Buckminster does support .target files (or &lt;a href="http://www.ralfebert.de/blog/eclipsercp/rcp_builds/"&gt;so I've read&lt;/a&gt;), I didn't want to be dependent on it any more, preferring a more "pure" solution. 

&lt;p&gt;So, based on code from Peter Nehrer (&lt;a href="http://twitter.com/#!/pnehrer"&gt;@pnehrer&lt;/a&gt;), I then wrote &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/target2p2mirrorXml.xsl"&gt;an XSL transform&lt;/a&gt; to &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/target2p2mirror.xml"&gt;create a p2.mirror script&lt;/a&gt; from a .target file, wrapped with &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/build.xml"&gt;another Ant script&lt;/a&gt; (and optionally, a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/pom.xml"&gt;Maven pom.xml script&lt;/a&gt;).

&lt;p&gt;And why might you care? Well, this .target file can be used to:

&lt;ul&gt;&lt;li&gt;Provision a developer's Eclipse, using the Target Platform Definition Editor and a few clicks (when it &lt;a href="http://divby0.blogspot.com/2010/07/troubleshooting-eclipseorg-mirrors.html"&gt;doesn't time out&lt;/a&gt;)
&lt;li&gt;Provision a developer's Eclipse via script for offline or multiple users (getting the team up to speed)
&lt;/ul&gt;

&lt;P&gt;And yes, much (or all) of the above can be done w/ Buckminster and/or b3, if you like that approach.

&lt;p&gt;But I prefer to create the .target as input to a build process, rather than being explicitly tied to one. So, as I noted above, if you have a .target file, you can easily generate a p2 repo, and use that repo to run downstream builds. Now, instead of having a half-dozen zips to download and unpack with every build (using the deprecated and unsupported "&lt;a href="http://wiki.eclipse.org/Equinox_p2_Getting_Started#Dropins"&gt;dropins&lt;/a&gt;" method) you can use a fully-p2-friendly repo site which contains everything you need to do your builds - whether you're a Hudson server or a developer working at home or offline.

&lt;h3&gt;Benefits&lt;/h3&gt;

&lt;ul&gt;&lt;li&gt;
Unlike "a collection of zips" this single-source-site &lt;b&gt;can be versioned&lt;/b&gt; with each release.

&lt;p&gt;&lt;li&gt;It only contains &lt;b&gt;WHAT YOU ACTUALLY NEED&lt;/b&gt; rather than extraneous sources and doc and tangential plugins/features you don't. It's a bit like making muffins by first grinding your own flour, but at least you know there's nothing evil in that muffin mix, and you will be able to consistently reproduce the recipe every time, regardless of where you might be on teh interwebz.

&lt;p&gt;&lt;li&gt;f you're a keener / beta tester who likes to build against the latest milestone (or even a weekly integration build) of Eclipse 3.next or 4.future, you can use the script above to self-update. So, while the TP itself is a contained snapshot listing the explicit versions of feature groups needed, it can also be run in "&lt;b&gt;get the latest available&lt;/b&gt;" mode in order to keep your TP current against some HEAD or trunk development / releases.

&lt;p&gt;&lt;li&gt;By splitting the TP out of the build, you can &lt;b&gt;build it upstream&lt;/b&gt;. So, where in the past we had one "uberbuild" and an implied TP therein, now we have a TP build job, and it is then shared by the 34 downstream jobs which depend on it for their dependencies. 

&lt;/ul&gt;

&lt;h3&gt;Shut up and show me the code!&lt;/h3&gt;

&lt;p&gt;&lt;pre class="brush:shell"&gt;
# for the "foo.target" file, build a local target platform repo, fetching the latest versions and updating the .target file
$ ant -f build.xml -DtargetFile=foo.target -DuseLatest=true

# for the "bar.target" file, build a local target platform repo, but fetch only the stated versions of IUs
$ ant -f build.xml -DtargetFile=bar.target -DuseLatest=false
&lt;/pre&gt;

&lt;p&gt;That's it. I also wrap the &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/build.xml"&gt;build.xml ant script&lt;/a&gt; w/ &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/pom.xml"&gt;a pom&lt;/a&gt; which allows it to be called from an upstream Maven/Tycho process, but that's nothing more than just calling the script using the antrun plugin (and a few ant dependencies), like this:

&lt;p&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;build&gt;
        &amp;lt;plugins&gt;
                &amp;lt;plugin&gt;
                        &amp;lt;groupId&gt;org.apache.maven.plugins&amp;lt;/groupId&gt;
                        &amp;lt;artifactId&gt;maven-antrun-plugin&amp;lt;/artifactId&gt;
                        &amp;lt;version&gt;1.6&amp;lt;/version&gt;
                        &amp;lt;executions&gt;
                                &amp;lt;execution&gt;
                                        &amp;lt;phase&gt;validate&amp;lt;/phase&gt;
                                        &amp;lt;configuration&gt;
                                                &amp;lt;tasks&gt;
                                                        &amp;lt;ant antfile="build.xml"&gt;
                                                                &amp;lt;property name="targetFile" value="multiple.target" /&gt;
                                                                &amp;lt;!-- &amp;lt;property name="repoDir" value="/path/to/where/to/provision/repo"/&gt; --&gt;
                                                        &amp;lt;/ant&gt;
                                                &amp;lt;/tasks&gt;
                                        &amp;lt;/configuration&gt;
                                        &amp;lt;goals&gt;
                                                &amp;lt;goal&gt;run&amp;lt;/goal&gt;
                                        &amp;lt;/goals&gt;
                                &amp;lt;/execution&gt;
                     &amp;lt;/executions&gt;
                        &amp;lt;dependencies&gt;
                                &amp;lt;dependency&gt;
                                        &amp;lt;groupId&gt;commons-net&amp;lt;/groupId&gt;
                                        &amp;lt;artifactId&gt;commons-net&amp;lt;/artifactId&gt;
                                        &amp;lt;version&gt;1.4.1&amp;lt;/version&gt;
                                &amp;lt;/dependency&gt;
                                &amp;lt;dependency&gt;
                                        &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                        &amp;lt;artifactId&gt;ant-commons-net&amp;lt;/artifactId&gt;
                                        &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                &amp;lt;/dependency&gt;
                                &amp;lt;dependency&gt;
                                        &amp;lt;groupId&gt;org.apache.ant&amp;lt;/groupId&gt;
                                        &amp;lt;artifactId&gt;ant-trax&amp;lt;/artifactId&gt;
                                        &amp;lt;version&gt;1.7.1&amp;lt;/version&gt;
                                &amp;lt;/dependency&gt;
                        &amp;lt;/dependencies&gt;
                &amp;lt;/plugin&gt;
 &amp;lt;/plugins&gt;
&amp;lt;/build&gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/"/&gt;The rest of the code is here&lt;/a&gt;.&lt;/b&gt;

&lt;hr/&gt;

&lt;p&gt;In part 3, I'll look back at the success we've had using associate sites instead of asking people to manually add 3rd party URLs when installing JBoss Tools. &lt;b&gt;&lt;i&gt;SPOILER ALERT&lt;/i&gt;&lt;/b&gt;: one URL is easier for people to use than 6.

&lt;p&gt;In part 4, I'll talk a little about how to prevent your product build from getting updates from unofficial sources, and preload your product with the official sites from which to get updates. Because it's important to balance ease of use with prevention of unsupported features. &lt;b&gt;&lt;i&gt;SPOILER ALERT&lt;/i&gt;&lt;/b&gt;: may contain p2.inf instructions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2190576117483138168?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2190576117483138168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2190576117483138168' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2190576117483138168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2190576117483138168'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-2-target.html' title='Simplifying The p2 Process, Part 2: Target Platform Repos'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/TVC3Vmu2ecI/AAAAAAAAGPk/cpa-TZR1X0A/s72-c/Screenshot-target-platform-as-SDKs-and-runtimes.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5154172285702605781</id><published>2011-02-02T16:48:00.005-05:00</published><updated>2011-02-02T17:21:22.658-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='dependencies'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='viz'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><title type='text'>Visualizing OSGi Dependencies</title><content type='html'>&lt;a href="http://divby0.blogspot.com/2011/02/howto-find-osgi-dependencies-in.html"&gt;Yesterday&lt;/a&gt; I blogged about how to find dependencies in features on plugins or features using a shell script to rip through feature jars. 

&lt;p&gt;But maybe you're less commandline, and more visual? Well, it may be over three years old, but there's a way to visualize plugin interdependencies using &lt;a href="http://blog.ianbull.com/2007/08/pde-dependency-view-soc.html"&gt;Ian Bull's PDE Dependency View&lt;/a&gt;. Frankly, I'm amazed this isn't already a core feature in PDE (and correct me if it is).

&lt;p&gt;To use this tool, simply install it from:
&lt;blockquote&gt;&lt;a href="http://download.eclipse.org/eclipse/pde/incubator/visualization/site"&gt;http://download.eclipse.org/eclipse/pde/incubator/visualization/site&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;After installing and restarting, hit &lt;b&gt;&lt;code&gt;CTRL-3&lt;/code&gt;&lt;/b&gt; and type "Graph" to find the "Graph Plug-In Dependencies View". &lt;i&gt;(It's also available from &lt;b&gt;&lt;code&gt;Window &gt; Show View &gt; Other...&lt;/code&gt;&lt;/b&gt; (&lt;b&gt;&lt;code&gt;ALT-SHIFT-Q,Q&lt;/code&gt;&lt;/b&gt;) under Plug-in Development, if you prefer to kick it old-school.)&lt;/i&gt;

&lt;p&gt;Next, right-click in the view or hit the "Focus on" button in the view, and select the plugin on which you want to focus.

&lt;p&gt;Now you can browse up or down through plugins to explore dependencies.

&lt;p&gt;For example, to see what plugins depend on a given plugin, such as org.eclipse.tm.terminal, click the "Show Callers" button in the view.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/TUnV-RWyjII/AAAAAAAAGPM/fHg17E_Mi7Q/s1600/Screenshot%2B-%2BPDE%2Bviz%2Bgraph%2Bof%2Bdependencies%2Bon%2Btm.terminal.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 103px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/TUnV-RWyjII/AAAAAAAAGPM/fHg17E_Mi7Q/s320/Screenshot%2B-%2BPDE%2Bviz%2Bgraph%2Bof%2Bdependencies%2Bon%2Btm.terminal.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569217680007924866" /&gt;&lt;/a&gt;

&lt;p&gt;Or, to see on which plugins org.jboss.ide.eclipe.as.rse.ui depends, click the "Show Callees" button in the view. You can shift-click on nodes to highlight them for emphasis, or click and drag them around.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TUnTg-DW6lI/AAAAAAAAGPE/48v8GIF0WEg/s1600/Screenshot%2B-%2BPDE%2Bviz%2Bgraph%2Bof%2Bdeps%2Bof%2Borg.jboss.ide.eclipse.as.rse.ui.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TUnTg-DW6lI/AAAAAAAAGPE/48v8GIF0WEg/s320/Screenshot%2B-%2BPDE%2Bviz%2Bgraph%2Bof%2Bdeps%2Bof%2Borg.jboss.ide.eclipse.as.rse.ui.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5569214977586686546" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5154172285702605781?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5154172285702605781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5154172285702605781' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5154172285702605781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5154172285702605781'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/02/visualizing-osgi-dependencies.html' title='Visualizing OSGi Dependencies'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/TUnV-RWyjII/AAAAAAAAGPM/fHg17E_Mi7Q/s72-c/Screenshot%2B-%2BPDE%2Bviz%2Bgraph%2Bof%2Bdependencies%2Bon%2Btm.terminal.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2670791886290387559</id><published>2011-02-01T13:26:00.003-05:00</published><updated>2011-02-01T13:33:59.945-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='formatting'/><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Syntax highlighting for code snippets in blogs</title><content type='html'>&lt;blockquote&gt;Where does he get those wonderful toys? 
- &lt;a href="http://www.imdb.com/title/tt0096895/quotes?qt0371943"&gt;The Joker, Batman (1989)&lt;/a&gt;&lt;/blockquote&gt;

Recently I was asked how I make code snippets on this blog prettier. Here's how.

&lt;ol&gt;&lt;li&gt;In your blog's template, &lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html"&gt;install&lt;/a&gt; &lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;Alex Gorbatchev's Syntax Highlighter&lt;/a&gt;. 

&lt;li&gt;Then, in the body of the blog post (with all occurrences of "&amp;lt;" HTML-escaped as "&amp;amp;lt"):

&lt;pre class="brush:xml"&gt;&amp;lt;pre class="brush:shell"&gt; ... &amp;lt;/pre&gt;
or
&amp;lt;pre class="brush:java"&gt; ... &amp;lt;/pre&gt;
or
&amp;lt;pre class="brush:xml"&gt; ... &amp;lt;/pre&gt;&lt;/pre&gt;

&lt;li&gt;There are other "&lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/"&gt;brushes&lt;/a&gt;" available too with which you can "paint" your code. I generally only need java, xml, and shell.

&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2670791886290387559?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2670791886290387559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2670791886290387559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2670791886290387559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2670791886290387559'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/02/syntax-highlighting-for-code-snippets.html' title='Syntax highlighting for code snippets in blogs'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1506136629767297141</id><published>2011-02-01T01:17:00.011-05:00</published><updated>2011-02-01T01:37:40.076-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='osgi'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='hack'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>HOWTO: Find osgi dependencies in features</title><content type='html'>Say you're trying to build something with Tycho &amp; Maven 3 and while resolving dependencies before compilation, you're told:

&lt;blockquote&gt;&lt;pre class="brush:shell"&gt;[INFO] [Software being installed: 
  org.eclipse.tm.terminal.local.feature.group 0.1.0.v201006041240-10-7w312117152433, 
  Missing requirement: 
    org.eclipse.tm.terminal.local 0.1.0.v201006041322 
      requires 
        'bundle org.eclipse.cdt.core 5.2.0' 
          but it could not be found, 
  Cannot satisfy dependency: 
    org.eclipse.tm.terminal.local.feature.group 0.1.0.v201006041240-10-7w312117152433 
      depends on: 
        org.eclipse.tm.terminal.local [0.1.0.v201006041322]]
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;To quickly verify where this dependency is coming from, you can go look into the feature.xml for the org.eclipse.tm.terminal.local feature jar... but if you don't have it installed, this is somewhat more cumbersome; besides, you then have to unpack the jar before you can look inside it.

&lt;p&gt;And maybe that feature contains a number of OTHER dependencies that you'll also need to resolve in your target platform when building. Sure, there are UI tools to do this within Eclipse, but when you're working on remote servers sometimes UI isn't available.

&lt;p&gt;Workaround? Assuming you have &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks/Partial_Mirroring/Example"&gt;a mirror of the update site(s)&lt;/a&gt; from which you're trying to resolve the dependency (eg., Helios) or can ssh to dev.eclipse.org, you can simply run a quick shell script to do the investigative work for you:

&lt;blockquote&gt;&lt;pre class="brush:shell"&gt;$ cd ~/downloads/releases/helios/201009240900/aggregate/; ~/bin/findDepInFeature "*tm*" cdt

./features/org.eclipse.tm.terminal.local_0.1.0.v201006041240-10-7w312117152433.jar
      &amp;lt;import feature="org.eclipse.cdt.platform" version="7.0.0" match="greaterOrEqual"/&gt;
      &amp;lt;import plugin="org.eclipse.cdt.core" version="5.2.0" match="compatible"/&gt;
      &amp;lt;import plugin="org.eclipse.core.runtime"/&gt;
&lt;/pre&gt;&lt;/blockquote&gt;

Where the script looks like this:
&lt;blockquote&gt;&lt;pre class="brush:shell"&gt;#!/bin/bash
# find plugins/feature deps by searching in some folder for feature jars, and searching through their feature.xml files for dependencies

# 1 - featurePattern - pattern of features to search (eg., "org.eclipse.tptp" or "\*" for all features)
# 2 - dependencyPattern  - pattern of plugins/feature deps for which to search (eg., "org.eclipse.tptp.platform.instrumentation.ui")
# 3 - location       - directory in which to search, if not "."

if [[ ! $1 ]]; then
        echo "Usage: $0 &amp;lt;featurePattern&gt; &amp;lt;dependencyPattern&gt; &amp;lt;location&gt;"
        echo ""
        echo "Example: $0 tm.terminal cdt"
        exit 1
fi

# if no location, look in current dir (.)
if [[ $3 ]]; then location="$3"; else location="."; fi

# if no featurePattern, search all features for dependencyPattern
if [[ ! $2 ]]; then featurePattern="*"; dependencyPattern="$1"; else dependencyPattern="$2"; featurePattern="$1"; fi

rm -fr /tmp/findinfeature/; mkdir -p /tmp/findinfeature/features/
for f in $(find "$location" -type f -name "*${featurePattern}*" | egrep -v "pack.gz|source" | grep features | egrep "${featurePattern}"); do
        #echo "$f [$featurePattern, $dependencyPattern]"
        unzip -q $f -d /tmp/findinfeature/ feature.xml
        #       &amp;lt;import feature="org.eclipse.cdt.platform" version="7.0.0" match="greaterOrEqual"/&gt;
        #       &amp;lt;import plugin="org.eclipse.cdt.core" version="5.2.0" match="compatible"/&gt;
        if [[ ! $(cat /tmp/findinfeature/feature.xml | egrep "&amp;lt;import" -A3 | egrep "plugin=|feature=" -A1 -B1 | egrep "\".*${dependencyPattern}[^\"]*\"" -A1 -B1) ]]; then
                rm -fr /tmp/findinfeature/feature.xml
        else
                mv /tmp/findinfeature/feature.xml /tmp/findinfeature/${f}_feature.xml
                echo "${f}"
                cat /tmp/findinfeature/${f}_feature.xml | egrep "&amp;lt;import" -A3 | egrep "plugin=|feature=" -A1 -B1 | egrep "\".*${dependencyPattern}[^\"]*\"" -A1 -B1
                echo ""
        fi
        rm -fr /tmp/findinfeature/feature.xml
done&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1506136629767297141?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1506136629767297141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1506136629767297141' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1506136629767297141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1506136629767297141'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/02/howto-find-osgi-dependencies-in.html' title='HOWTO: Find osgi dependencies in features'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7194790088916190769</id><published>2011-01-29T16:40:00.008-05:00</published><updated>2011-01-29T18:24:48.695-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='composite'/><category scheme='http://www.blogger.com/atom/ns#' term='simplicity'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><category scheme='http://www.blogger.com/atom/ns#' term='easeofuse'/><title type='text'>Simplifying The p2 Process, Part 1: p2 Composite Repos</title><content type='html'>&lt;p&gt;
With the release of &lt;a href="http://community.jboss.org/en/tools/blog/2011/01/27/jboss-tools-32-cr1--killer-of-bugs"&gt;JBoss Tools 3.2&lt;/a&gt; and &lt;a href="http://devstudio.jboss.com/earlyaccess/"&gt;JBoss Developer Studio 4.0&lt;/a&gt; just around the corner, you may be thinking to yourself, "Self, how many update sites and SDK zips and runtimes will I need to download THIS time?"
&lt;p&gt;
Or maybe you're thinking, "Self, why is this so damn complicated?"
&lt;p&gt;
Well, folks, we heard your &lt;a href="http://www.kvetch.com/"&gt;kvetching&lt;/a&gt; and we did something about it. 

&lt;h3&gt;Composite Repos&lt;/h3&gt;

&lt;p&gt;While this is not a new concept to many, we embraced &lt;a href="http://www.vogella.de/blog/2010/04/06/eclipse-p2-composite-repository/"&gt;the composite update site&lt;/a&gt; this past year and it's made life a lot easier for iterative, agile development cycles. Last year, JBoss Tools 3.1 was built as a single Hudson job, with a second one for JBoss Developer Studio. This meant that any change in any of the components would cause a build to be launched, and 4-6hrs later, we'd have fresh bits. Yeah, far from ideal.

&lt;p align="center"&gt;&lt;a href="http://www.jinx.com/youth/shirts/geek/fresh_data.html"&gt;&lt;img src="http://www.jinx.com/Content/Product/1178p_42c_zoomb.jpg" width="465"/&gt;&lt;/a&gt;

&lt;p&gt;This year, we split up the monolith (and added a few new components!) so that now we have 34 update sites to compose into a single one against which builds can then be built. This composite update site looks like this:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TUSL3emByyI/AAAAAAAAGOo/rU88XjI4dIg/s1600/Screenshot-3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 141px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TUSL3emByyI/AAAAAAAAGOo/rU88XjI4dIg/s320/Screenshot-3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5567728824558406434" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;compositeArtifacts.xml&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush:xml"&gt;
&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;
&amp;lt;?compositeArtifactRepository version='1.0.0'?&amp;gt;
&amp;lt;repository name='JBoss Tools Staging Repository' 
  type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' 
  version='1.0.0'&amp;gt;
&amp;lt;properties size='2'&amp;gt;
&amp;lt;property name='p2.compressed' value='true'/&amp;gt;
&amp;lt;!-- get new time w/ `date +%s000` --&amp;gt;
&amp;lt;property name='p2.timestamp' value='1294205433000'/&amp;gt;
&amp;lt;/properties&amp;gt;
&amp;lt;children size='34'&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-3.2_trunk.component--archives/all/repo/'/&amp;gt;
...
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-3.2_trunk.component--ws/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-pi4soa-3.1_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-teiid-designer-7.1_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-drools-5.2_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-savara-1.1_trunk/tools/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/xulrunner-1.9.1.2/all/repo/'/&amp;gt;
&amp;lt;/children&amp;gt;
&amp;lt;/repository&amp;gt;&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;compositeContent.xml&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="brush:xml"&gt;
&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;
&amp;lt;?compositeMetadataRepository version='1.0.0'?&amp;gt;
&amp;lt;repository name='JBoss Tools Staging Repository' 
  type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' 
  version='1.0.0'&amp;gt;
&amp;lt;properties size='2'&amp;gt;
&amp;lt;property name='p2.compressed' value='true'/&amp;gt;
&amp;lt;!-- get new time w/ `date +%s000` --&amp;gt;
&amp;lt;property name='p2.timestamp' value='1294205433000'/&amp;gt;
&amp;lt;/properties&amp;gt;
&amp;lt;children size='34'&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-3.2_trunk.component--archives/all/repo/'/&amp;gt;
...
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-3.2_trunk.component--ws/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-pi4soa-3.1_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-teiid-designer-7.1_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-drools-5.2_trunk/all/repo/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/jbosstools-savara-1.1_trunk/tools/'/&amp;gt;
&amp;lt;child location='http://download.jboss.org/jbosstools/builds/staging/xulrunner-1.9.1.2/all/repo/'/&amp;gt;
&amp;lt;/children&amp;gt;
&amp;lt;/repository&amp;gt;&lt;/pre&gt;

&lt;p&gt;So, now that JBoss Tools is built in 34 pieces, the bits that haven't changed aren't rebuilt over and over and builds are faster. If that sounds insanely obvious to you, well, we used to have a lot of inter-component cyclic dependencies. We eliminated those early in the development cycle for JBoss Tools 3.2, and have been able to build smarter and faster ever since.

&lt;p&gt;Added benefits to this composite site are:

&lt;ul&gt;&lt;li&gt;Newly built and published bits are instantly available from the composite site - sure, the same was true under last year's PDE "uberbuild" regime, but that's because everything was built fresh every time, which was slow and near-impossible to get people to run at home.
&lt;p&gt;
&lt;li&gt;Developers can use this site to install latest updates to components they're interested in testing - again, this was true before; but now using the same site and searching for updates, developers and beta testers can get incremental updates to the components that have actually changed, rather than having to pull down 160M every day to get a few K of changes.
&lt;p&gt;
&lt;li&gt;Tycho can be pointed at this site (see below) in order to resolve binary p2 dependencies, so building a component deep in the dependency chain can be done w/o having to first build its upstream dependencies - this wasn't a concern before because everything was built from source every time, so by definition everything was already on disk. But now, if a developer only cares about a single component, like ModeShape or GWT, they need only have that source (and some bootstrapping code) on disk. Smaller, faster, more agile. And way more likely to be built locally before checking in code than before, making the painful "who broke what and when?" process much less painful. Fewer moving pieces and local dev builds at home mean - in theory - fewer incomplete or breaking commits.&lt;/ul&gt;

&lt;p&gt;When we first moved to Tycho, we needed to build a series of components locally in order to just get to a deep component. For example, the Struts component needs VPE, which needs JST and &lt;a href="http://divby0.blogspot.com/2010/04/build-xulrunner-1912-update-site-with.html"&gt;XulRunner&lt;/a&gt;. JST also needs the Common component, which in turn needs the Tests component. 

&lt;p&gt;So, to build Struts locally, 5 other components would have to be built locally first. This worked, but was still a fairly large barrier to entry for most developers (much less contributors!)

&lt;p&gt;But with this new composite site, building Struts can be done without this lengthy bootstrapping; instead we just point Tycho at this composite site, and it pulls down the 5 upstream components' jars from this p2 repo - because the upstream deps are already built in Hudson.

&lt;p&gt;Here's what we added to our &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/parent/pom.xml"&gt;parent pom.xml&lt;/a&gt; to have the builds find the binaries:

&lt;p&gt;&lt;pre class="brush:xml"&gt;
&amp;lt;repository&amp;gt;
        &amp;lt;id&amp;gt;jbosstools-nightly-staging-composite-trunk&amp;lt;/id&amp;gt;
        &amp;lt;url&amp;gt;http://path.to.the.site/staging/_composite_/trunk/ &amp;lt;/url&amp;gt;
        &amp;lt;layout&amp;gt;p2&amp;lt;/layout&amp;gt;
        &amp;lt;snapshots&amp;gt;
                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
        &amp;lt;/snapshots&amp;gt;
        &amp;lt;releases&amp;gt;
                &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;
        &amp;lt;/releases&amp;gt;
&amp;lt;/repository&amp;gt;&lt;/pre&gt;

&lt;p&gt;So, using this composite update site, we can use Maven 3 with Tycho 0.10 to &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/"&gt;generate a single update site&lt;/a&gt; (&lt;a href="http://download.jboss.org/jbosstools/builds/staging/jbosstools-3.2_trunk.aggregate/"&gt;staged here&lt;/a&gt;, then ultimately &lt;a href="https://www.jboss.org/tools/download/dev"&gt;published here&lt;/a&gt;). 

&lt;hr/&gt;

&lt;p&gt;In part 2, I'll look at why we switched from using a collection of SDKs (Eclipse, EMF, DTP, GEF, M2E, RSE, TPTP, UMl2, WTP, XSD and more) against which to build - using the now-deprecated brute-force "just unzip into eclipse root folder or dropins" approach - to using a single target platform update site. &lt;i&gt;&lt;b&gt;SPOILER ALERT&lt;/b&gt;&lt;/i&gt;: Easier to update and maintain.

&lt;p&gt;In part 3, I'll look back at the success we've had using associate sites instead of asking people to manually add 3rd party URLs when installing JBoss Tools. &lt;i&gt;&lt;b&gt;SPOILER ALERT&lt;/b&gt;&lt;/i&gt;: one URL is easier for people to use than 6.

&lt;p&gt;In part 4, I'll talk a little about how to prevent your product build from getting updates from unofficial sources, and preload your product with the official sites from which to get updates. Because it's important to balance ease of use with prevention of unsupported features. &lt;i&gt;&lt;b&gt;SPOILER ALERT&lt;/b&gt;&lt;/i&gt;: may contain p2.inf instructions.

&lt;p&gt;By the way, &lt;a href="http://community.jboss.org/en/tools/blog/2011/01/27/jboss-tools-32-cr1--killer-of-bugs"&gt;JBoss Tools 3.2.0.CR1&lt;/a&gt; and &lt;a href="http://devstudio.jboss.com/earlyaccess/"&gt;JBoss Developer Studio 4.0.0.CR1&lt;/a&gt; are available. Get 'em while they're hot (and &lt;a href="http://sourceforge.net/apps/wordpress/sourceforge/2011/01/27/service-downtime/"&gt;sourceforge is not&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7194790088916190769?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7194790088916190769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7194790088916190769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7194790088916190769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7194790088916190769'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-1-p2.html' title='Simplifying The p2 Process, Part 1: p2 Composite Repos'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/TUSL3emByyI/AAAAAAAAGOo/rU88XjI4dIg/s72-c/Screenshot-3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7702897349860310774</id><published>2011-01-27T19:39:00.015-05:00</published><updated>2011-01-27T20:50:41.234-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='clone'/><category scheme='http://www.blogger.com/atom/ns#' term='vcs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>HOWTO: partially clone an SVN repo to Git, and work with branches</title><content type='html'>&lt;p&gt;&lt;i&gt;&lt;a href="#skiptocode"&gt;Skip to the code&lt;/a&gt;&lt;/i&gt;

&lt;p&gt;I've blogged a few times now about Git (which I pronounce with a hard 'g' a la "get", as it's supposed to be &lt;a href="http://en.wikipedia.org/wiki/Git_%28software%29#Name"&gt;named for Linus Torvalds, a self-described git&lt;/a&gt;, but which I've also heard called pronounced with a soft 'g' like "jet"). Either way, I'm finding it way more efficient and less painful than either CVS or SVN combined. 
&lt;p&gt;
So, to continue this series (&lt;a href="http://divby0.blogspot.com/2010/11/git-vs-svn-basic-commandline-syntax.html"&gt;[1]&lt;/a&gt;, &lt;a href="http://divby0.blogspot.com/2010/11/howto-contributing-to-jboss-tools-using.html"&gt;[2]&lt;/a&gt;, &lt;a href="http://divby0.blogspot.com/2010/12/using-git-like-cvs.html"&gt;[3]&lt;/a&gt;), here is how (and why) to pull an SVN repo down as a Git repo, but with the omission of old (irrelevant) revisions and branches. 

&lt;h3&gt;Using SVN for SVN repos&lt;/h3&gt;
&lt;p&gt;
In days of yore when working with the JBoss Tools and JBoss Developer Studio SVN repos, I would keep a copy of everything in trunk on disk, plus the current active branch (most recent milestone or stable branch maintenance). With all the SVN metadata, this would eat up substantial amounts of disk space but still require network access to pull any old history of files. The two repos were about 2G of space on disk, for each branch. Sure, there's tooling to be able to diff and merge between branches w/o having both branches physically checked out, but nothing beats the ability to place two folders side by side OFFLINE for deep comparisons. So, at times, I would burn as much as 6-8G of disk simply to have a few branches of source for comparison and merging. With my painfullly slow IDE drive, this would grind my machine to a halt, especially when doing any SVN operation or counting files / disk usage.

&lt;h3&gt;Using Git for SVN repos naively&lt;/h3&gt;
&lt;p&gt;Recently, I started using git-svn to pull the whole JBDS repo into a local Git repo, but it was slow to create and still unwieldy. And the JBoss Tools repo was too large to even create as a Git repo - the operation would run out of memory while processing old revisions of code to play forward.

&lt;p&gt;At this point, I was stuck having individual Git repos for each JBoss Tools component (major source folder) in &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/"&gt;SVN&lt;/a&gt;: archives, as, birt, bpel, build, etc. It worked, but replicating it when I needed to create a matching repo-collection for a branch was painful and time-consuming. As well, all the old revision information was eating even more disk than before:

&lt;p&gt;&lt;ul&gt;&lt;li&gt;jbosstools' trunk as &lt;span style="font-weight:bold;"&gt;multiple&lt;/span&gt; git-svn clones: 6.1G
&lt;li&gt;devstudio's trunk as single git-svn clone:    1.3G&lt;/ul&gt;

&lt;p&gt;So, now, instead of a couple Gb per branch, I was at nearly 4x as much disk usage. But at least I could work offline and not deal w/ network-intense activity just to check history or commit a change. Still, far from ideal.

&lt;h3&gt;Cloning SVN with standard layout &amp;amp; partial history&lt;/h3&gt;
&lt;p&gt;
This past week, I discovered two ways to make the git-svn experience at least an order of magnitude better: 

&lt;ol&gt;&lt;li&gt;Standard layout (-s) - this allows your generated Git repo to contain the usual trunk, branches/* and tags/* layout that's present in the source SVN repo. This is a win because it means your repo will contain the branch information so you can easily &lt;a href="http://justaddwater.dk/2009/03/09/using-git-for-svn-repositories-workflow/"&gt;switch between branches&lt;/a&gt; within the same repo on disk. No more remote network access needed!

&lt;li&gt;Revision filter (-r) - this allows your generated Git repo to &lt;a href="http://stackoverflow.com/questions/747075/how-to-git-svn-clone-the-last-n-revisions-from-a-subversion-repository"&gt;start from a known revision number&lt;/a&gt; instead of starting at its birth. Now instead of taking hours to generate, you can get a repo in minutes by excluding irrelevant (ancient) revisions.
&lt;/ol&gt;

&lt;p&gt;So, why is this cool? Because now, instead of having 2G of source+metadata to copy when I want to do a local comparison between branches, the size on disk is merely:

&lt;p&gt;&lt;ul&gt;&lt;li&gt;jbosstools' trunk as single git-svn clone w/ trunk and single branch: 1.3G
&lt;li&gt;devstudio's trunk as single git-svn clone w/ trunk and single branch:    0.13G&lt;/ul&gt;

&lt;p&gt;So, not only is the footprint smaller, but the performance is better and &lt;b&gt;I need never do a full clone (or svn checkout) again&lt;/b&gt; - instead, I can just copy the existing Git repo, and rebase it to a different branch. Instead of hours, this operation takes seconds (or minutes) and happens without the need for a network connection.

&lt;hr/&gt;
&lt;a name="skiptocode"&gt;&lt;/a&gt;
&lt;h3&gt;Okay, enough blather. Show me the code!&lt;/h3&gt;

&lt;p&gt;Check out the repo, including only the trunk &amp;amp; most recent branch

&lt;blockquote&gt;&lt;pre&gt;
# Figure out the revision number based on when a branch was created, then 
# from r28571, returns -r28571:HEAD
rev=$(svn log --stop-on-copy \
  http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x \
  | egrep "r[0-9]+" | tail -1 | sed -e "s#\(r[0-9]\+\).\+#-\1:HEAD#")

# now, fetch repo starting from the branch's initial commit
git svn clone -s $rev http://svn.jboss.org/repos/jbosstools jbosstools_GIT
&lt;/blockquote&gt;&lt;/pre&gt;

&lt;p&gt;Now you have a repo which contains trunk &amp;amp; a single branch

&lt;blockquote&gt;&lt;pre&gt;
git branch -a # list local (Git) and remote (SVN) branches

  * master
    remotes/jbosstools-3.2.x
    remotes/trunk
&lt;/blockquote&gt;&lt;/pre&gt;

&lt;p&gt;Switch to the branch&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
git checkout -b local/jbosstools-3.2.x jbosstools-3.2.x # connect a new local branch to remote one

  Checking out files: 100% (609/609), done.
  Switched to a new branch 'local/jbosstools-3.2.x'

git svn info # verify now working in branch

  URL: http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x
  Repository Root: http://svn.jboss.org/repos/jbosstools
&lt;/blockquote&gt;&lt;/pre&gt;

&lt;p&gt;Switch back to trunk&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
git checkout -b local/trunk trunk # connect a new local branch to remote trunk

  Switched to a new branch 'local/trunk'

git svn info # verify now working in branch

  URL: http://svn.jboss.org/repos/jbosstools/trunk
  Repository Root: http://svn.jboss.org/repos/jbosstools
&lt;/blockquote&gt;&lt;/pre&gt;


&lt;p&gt;Rewind your changes, pull updates from SVN repo, apply your changes; won't work if you have local uncommitted changes&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
git svn rebase
&lt;/blockquote&gt;&lt;/pre&gt;

&lt;p&gt;Fetch updates from SVN repo (ignoring local changes?)&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
git svn fetch
&lt;/blockquote&gt;&lt;/pre&gt;

&lt;p&gt;Create a new branch (remotely with SVN)&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;
svn copy \
  http://svn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.x \
  http://svn.jboss.org/repos/jbosstools/branches/some-new-branch
&lt;/blockquote&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7702897349860310774?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7702897349860310774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7702897349860310774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7702897349860310774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7702897349860310774'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2011/01/howto-partially-clone-svn-repo-to-git.html' title='HOWTO: partially clone an SVN repo to Git, and work with branches'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2318894837041747587</id><published>2010-12-30T23:14:00.015-05:00</published><updated>2010-12-31T00:18:37.855-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='egit'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><title type='text'>Using Git like CVS</title><content type='html'>&lt;p&gt;
Tonight I moved the &lt;a href="http://rainbowcinemas.ca"&gt;http://rainbowcinemas.ca&lt;/a&gt; sources from phpeclipse and CVS to PDT and Git.

&lt;p&gt;Below are some gotchas and tips for initial repo creation, how to keep the central remote copy up to date, and how to work around complaints about updating master directly from remote. I'm sure there's a better way to do this w/o the need for the workaround, but this is what I found worked.

&lt;table&gt;&lt;tr valign="top"&gt;&lt;td colspan="2"&gt;
&lt;h4 style="color:#994444"&gt;Initial setup&lt;/h4&gt;

&lt;p&gt;To crawl a directory and create a git project for each subfolder:

&lt;blockquote&gt;&lt;pre&gt;for d in $(find . -maxdepth 1 -type d -not -name "." | \
  egrep -v ".ssh|logs|OLD|download|upload"); do cd $d; \
    &lt;b&gt;git init; git add .; git commit -m "initial commit" .&lt;/b&gt;; \
  cd ..; \
done&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;See also &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-shared-repository"&gt;Setting up a shared repository&lt;/a&gt;.
&lt;/td&gt;
&lt;/tr&gt;&lt;tr valign="top"&gt;&lt;td&gt;
&lt;h4 style="color:#994444"&gt;Create local clone via commandline&lt;/h4&gt;

&lt;p&gt;&lt;b&gt;git clone ssh://servername/path/to/.git folderToCreateLocally&lt;/b&gt;

&lt;/td&gt;&lt;td&gt;
&lt;h4 style="color:green"&gt;Create local clone w/ eGit&lt;/h4&gt;

&lt;p&gt;Once your repo is created, you can clone a copy from the remote server onto your local box, and import it into Eclipse (with eGit installed) using &lt;b&gt;File &amp;gt; Import &amp;gt; Git &amp;gt; Projects from Git &amp;gt; Clone... &lt;/b&gt;.
&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;

&lt;h4 style="color:#994444"&gt;Commit local changes via commandline&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://divby0.blogspot.com/2010/11/git-vs-svn-basic-commandline-syntax.html"&gt;As outlined before&lt;/a&gt;, you can &lt;span style="font-weight:bold;"&gt;git pull&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;git checkout&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;git commit&lt;/span&gt;, and finally &lt;span style="font-weight:bold;"&gt;git push&lt;/span&gt; your changes.

&lt;p&gt;If you encounter an error trying to commit changes back to the repo, see the section below, "Allow a ref update to the currently checked out branch of a non-bare repository".

&lt;/td&gt;
&lt;td&gt;
&lt;h4 style="color:green"&gt;Commit local changes w/ eGit&lt;/h4&gt;

&lt;p&gt;With eGit, you can pull, push, checkout, commit, merge, etc. using the context menu on a Git project or with the Synchronize view. I don't recommend using any of the change sets / models except the Git Change Set, since the others will tend to show more than is actually needed (like local changes which Git doesn't track).

&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td colspan="2"&gt;
&lt;h4 style="color:#994444"&gt;Allow a ref update to the currently checked out branch of a non-bare repository&lt;/h4&gt;

Update the &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html"&gt;&lt;b&gt;~/.gitconfig&lt;/b&gt;&lt;/a&gt; file on the remote server to look something like this:
&lt;blockquote&gt;&lt;pre&gt;[user]
    name = Your Name
    email = your@email.address
[color]
    branch = auto
    diff = auto
    interactive = auto
    status = auto
[core]
    editor = vim
[merge]
    tool = vimdiff
[receive]
    &lt;b&gt;denyCurrentBranch = warn&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h4 style="color:#994444"&gt;Retrieve changes into remote repo&lt;/h4&gt;

&lt;p&gt;Because I'm using the remote server to both host http-accessible files AND host the git repo, it's important that changes checked into the git repo be then checked out into the local filesystem so that the local workspace is in synch with the repo's metadata.

&lt;p&gt;To pull changes, I use &lt;span style="font-weight:bold;"&gt;git status&lt;/span&gt; (to review changes), &lt;span style="font-weight:bold;"&gt;git reset HEAD &amp;lt;filename&amp;gt;&lt;/span&gt; (to reset specified file, or omit filename to reset all changes) and finally &lt;b&gt;git checkout&lt;/b&gt; to retrieve the changed file from the repo into the working directory.

&lt;h4 style="color:#994444"&gt;Access the server w/o a password prompt&lt;/h4&gt;

&lt;p&gt;To skip being prompted for a password when you connect over ssh, scp, or fish, add your public SSH key to the &lt;a href="http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html"&gt;&lt;b&gt;~/.ssh/authorized_keys&lt;/b&gt;&lt;/a&gt; file on the remote server.

&lt;h4 style="color:#994444"&gt;Access the server via an alias&lt;/h4&gt;

&lt;p&gt;Instead of having to reference the server as username@server when connecting, you can add an entry to your &lt;a href="http://linux.die.net/man/5/ssh_config"&gt;&lt;b&gt;~/.ssh/config&lt;/b&gt;&lt;/a&gt; file that looks like this: 
&lt;blockquote&gt;&lt;pre&gt;Host shortName
Hostname fully.qualified.domain.name.or.IP.address
User yourUsername
Port 22&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2318894837041747587?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2318894837041747587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2318894837041747587' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2318894837041747587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2318894837041747587'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/12/using-git-like-cvs.html' title='Using Git like CVS'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1088533185887378981</id><published>2010-11-15T11:46:00.006-05:00</published><updated>2010-11-15T12:59:35.367-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='committer'/><category scheme='http://www.blogger.com/atom/ns#' term='dependencies'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><category scheme='http://www.blogger.com/atom/ns#' term='m2eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='alias'/><category scheme='http://www.blogger.com/atom/ns#' term='git-svn'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><title type='text'>HOWTO: Contributing to JBoss Tools using Git</title><content type='html'>&lt;p&gt;If you'd like to use Git instead of SVN as your SCM tool of choice, here's how you can connect to the JBoss Tools SVN repo, pull down all the sources, work on them locally, then either commit changes back into the SVN repo (or submit a patch, if you're not already a committer).

&lt;p&gt;&lt;i&gt;The instructions below assume you have either Linux, Mac OSX, or Windows w/ &lt;a href="http://www.cygwin.com/"&gt;cygwin&lt;/a&gt;. If you have none of those, YMMV.&lt;/i&gt;

&lt;h3&gt;Fetch sources from SVN&lt;/h3&gt;

&lt;p&gt;First, fetch sources from SVN using &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html"&gt;git-svn&lt;/a&gt;. If you don't want to check out all the components, use a subset of the components listed below. &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/"&gt;The complete list is here&lt;/a&gt;.

&lt;blockquote&gt;&lt;pre&gt;
# create a directory into which to check out the JBoss Tools projects
mkdir ~/trunk; cd ~/trunk;

# fetch projects - this will take quite some time
# Committers, use http://svn.jboss.org/repos/jbosstools/trunk/
# Contributors, use http://anonsvn.jboss.org/repos/jbosstools/trunk/
for d in \
  archives as birt bpel bpmn build cdi common \
  deltacloud documentation download.jboss.org drools \
  esb examples flow freemarker gwt hibernatetools \
  jbpm jmx jsf jst maven modeshape portlet profiler \
  requirements runtime seam site smooks struts \
  tests tptp usage vpe ws xulrunner; do \
    git svn clone http://anonsvn.jboss.org/repos/jbosstools/trunk/${d};
done&lt;/pre&gt;&lt;/blockquote&gt;

&lt;h3&gt; Configure Eclipse &lt;/h3&gt;

&lt;p&gt;Next, fire up &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1"&gt;Eclipse Helios 3.6 for Java EE Developers&lt;/a&gt;.

&lt;p&gt;Install the latest eGit from &lt;a href="http://download.eclipse.org/egit/updates"&gt;http://download.eclipse.org/egit/updates&lt;/a&gt;.
&lt;p&gt;Install the latest m2eclipse from &lt;a href="http://m2eclipse.sonatype.org/sites/m2e/"&gt;http://m2eclipse.sonatype.org/sites/m2e/&lt;/a&gt; and optionally, &lt;a href="http://m2eclipse.sonatype.org/sites/m2e-extras/"&gt;http://m2eclipse.sonatype.org/sites/m2e-extras/&lt;/a&gt;.

&lt;p&gt; Restart when prompted.

&lt;h3&gt; Import Git projects into Eclipse&lt;/h3&gt;

&lt;p&gt;Now, import Git projects into Eclipse using:

&lt;blockquote&gt;&lt;pre&gt;File &amp;gt; Import 
    Git &amp;gt; Projects from Git
        Click 'Add' then browse for ~/trunk/ 
        Enable [x] Look for nested repositories 
        Click 'Search', then click 'OK' when done
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/TOFtgGW-giI/AAAAAAAAGG4/vSdBC9rLcW8/s1600/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 309px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/TOFtgGW-giI/AAAAAAAAGG4/vSdBC9rLcW8/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5539829414872646178" /&gt;&lt;/a&gt;

&lt;blockquote&gt;&lt;pre&gt;        Select a local repo from the list, click 'Next'
        (*) Import Existing Projects
        (*) Try to share automatically
        Click 'Next'
        Click 'Select All', then click 'Finish'
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TOFtgfLYEjI/AAAAAAAAGHA/aQUIftFweoA/s1600/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TOFtgfLYEjI/AAAAAAAAGHA/aQUIftFweoA/s320/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5539829421534876210" /&gt;&lt;/a&gt;

&lt;p&gt;Repeat for other components you want to import. You can add each component to a working set to keep your workspace sorted by component.

&lt;h3&gt;Resolve missing dependencies&lt;/h3&gt;

&lt;p&gt;While the &lt;a href="http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr1"&gt;Eclipse Helios 3.6 for Java EE Developers&lt;/a&gt; contains most of the dependencies against which JBoss Tools must be compiled, it does not contain everything. For that, you need to install extra dependencies. There are two places to go:
&lt;p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/latest/"&gt;JBoss Tools Target Platform p2 Repo&lt;/a&gt; (also &lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/e361-wtp322.target.zip"&gt;available as an archived update site zip&lt;/a&gt; for offline use) - contains all the Eclipse.org, google.com, and sonatype.org features needed to compile / install all of JBoss Tools. You can install everything, or just the pieces you need.
&lt;li&gt;&lt;a href="http://download.jboss.org/jbosstools/updates/nightly/trunk/"&gt;JBoss Tools Nightly Repo&lt;/a&gt; (Update Site) - if you don't have all the source projects in your workspace, you can resolve dependencies against this site and install them from here. Once again, you can install everything, or just the pieces you need.
&lt;/ol&gt;

&lt;h3&gt;Build &amp;amp; run tests&lt;/h3&gt;

&lt;p&gt;With m2eclipse installed, you can simply right-click a project and select '&lt;b&gt;&lt;code&gt;Run As &amp;gt; Maven Build (ALT-SHIFT-X, M)&lt;/code&gt;&lt;/b&gt;', which will prompt you complete a run configuration dialog. Here are the simplest options you need to set:
&lt;blockquote&gt;&lt;pre&gt;
   Goals: clean install
   [x] Resolve Workspace artifacts&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TOF0QpxXRyI/AAAAAAAAGHM/61jA14YLrhw/s1600/Screenshot-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 277px; height: 320px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TOF0QpxXRyI/AAAAAAAAGHM/61jA14YLrhw/s320/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5539836846082049826" /&gt;&lt;/a&gt;

&lt;p&gt;You can also run &lt;a href="http://community.jboss.org/wiki/HowtoBuildJBossToolswithMaven3"&gt;Maven to build your projects outside Eclipse&lt;/a&gt;, if you prefer. 

&lt;p&gt;If running outside Eclipse, &lt;a href="https://www.jboss.org//tools/docs/testing#remote"&gt;you can run tests which are still tied to the Eclipse debugger&lt;/a&gt;. 

&lt;h3&gt;Commit changes to master repo&lt;/h3&gt;

&lt;p&gt;Because &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=315264"&gt;there's no support yet&lt;/a&gt; for '&lt;b&gt;&lt;code&gt;git svn rebase&lt;/code&gt;&lt;/b&gt;' or '&lt;b&gt;&lt;code&gt;git svn dcommmit&lt;/code&gt;&lt;/b&gt;' you're stuck pushing changes to the master repo using the commandline. However, you can shorten the amount of typing needed using an .alias file. See below.

&lt;h3&gt;Use an .alias file&lt;/h3&gt; 

&lt;p&gt;To avoid having to type the same git commands over and over, I use these &lt;a href="http://en.wikipedia.org/wiki/Alias_%28command%29"&gt;shortcuts&lt;/a&gt; in my ~/.alias file:

&lt;blockquote&gt;&lt;pre&gt;
# update local git-svn repo from master SVN repo
alias   gitup='for d in $(find . -maxdepth 1 -type d); do cd $d; echo $d; if [[ -d .git ]]; then git svn rebase; fi; cd -; done'

# Push local changes to master SVN repo
alias   gp='git svn rebase; git svn dcommit'

# commit local changes to local git-svn repo
alias   ci='git commit -m'

# check status of local git-svn repo
alias   stat='git status'&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;So, after committing changes (with eGit or via commandline) I can push those to the master SVN repo w/ a simple '&lt;b&gt;&lt;code&gt;gp&lt;/code&gt;&lt;/b&gt;'. If your shell doesn't read the .alias file, make sure your .bashrc loads the file using one of these commands:

&lt;blockquote&gt;&lt;pre&gt;source /home/yourUserName/.alias
. /home/yourUserName/.alias
&lt;/pre&gt;&lt;/blockquote&gt;

Or, put them directly in your &lt;a href="http://tldp.org/LDP/abs/html/sample-bashrc.html"&gt;.bashrc&lt;/a&gt; file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1088533185887378981?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1088533185887378981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1088533185887378981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1088533185887378981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1088533185887378981'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/11/howto-contributing-to-jboss-tools-using.html' title='HOWTO: Contributing to JBoss Tools using Git'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/TOFtgGW-giI/AAAAAAAAGG4/vSdBC9rLcW8/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-704926310375264366</id><published>2010-11-03T08:36:00.017-04:00</published><updated>2010-11-05T16:28:40.411-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn:ignore'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='ese'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Git vs. SVN - Basic Commandline Syntax Reference</title><content type='html'>Learning the &lt;a href="https://github.com/bard/sameplace/wiki/Typical-Git-workflow"&gt;git workflow&lt;/a&gt; takes a bit of brain retraining, but since I've been using SVN almost entirely via commandline (because Subversive sucks and locks up my Eclipse when I try to use it for anything beyond synching/updating/committing a handful of files), adopting git's commandline syntax is reasonably similar. Consider these simple operations:

&lt;table cellspacing="2" cellpadding="2"&gt;

&lt;tr&gt;&lt;th&gt;Initial checkout from existing repo for a given branch
&lt;/th&gt;&lt;td&gt;git clone http://github.com/sonatype/sonatype-tycho.git; cd sonatype-tycho; git checkout origin/tycho-0.10.x
&lt;/td&gt;&lt;td&gt;svn checkout http://anonsvn.jboss.org/repos/jbosstools/branches/jbosstools-3.2.0.Beta1/
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Update locally checked out files from central repo
&lt;/th&gt;&lt;td&gt;git pull
&lt;/td&gt;&lt;td&gt;svn update
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;List locally changes files/folders
&lt;/th&gt;&lt;td&gt;git status
&lt;/td&gt;&lt;td&gt;svn stat
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Diff locally changed file
&lt;/th&gt;&lt;td&gt;git diff somefile.txt
&lt;/td&gt;&lt;td&gt;svn diff somefile.txt
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;Revert locally changed file&lt;a href="http://bryan-murdock.blogspot.com/2007/07/git-revert-is-not-equivalent-to-svn.html"&gt;*&lt;/a&gt;
&lt;/th&gt;&lt;td&gt;git checkout somefile.txt
&lt;/td&gt;&lt;td&gt;svn revert somefile.txt
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Revert ALL local changes (except untracked files)&lt;a href="http://bryan-murdock.blogspot.com/2007/07/git-revert-is-not-equivalent-to-svn.html"&gt;*&lt;/a&gt;
&lt;/th&gt;&lt;td&gt;git reset --hard HEAD 
&lt;/td&gt;&lt;td&gt;svn revert . -R
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;Add new file
&lt;/th&gt;&lt;td&gt;git add file.txt
&lt;/td&gt;&lt;td&gt;svn add file.txt
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Add new folder recursively
&lt;/th&gt;&lt;td&gt;git add folder
&lt;/td&gt;&lt;td&gt;svn add folder
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;Delete file
&lt;/th&gt;&lt;td&gt;git rm file.txt
&lt;/td&gt;&lt;td&gt;svn rm file.txt
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Delete folder
&lt;/th&gt;&lt;td&gt;git rm -r folder &lt;i&gt;(non-recursive by default; use -r to recurse)&lt;/i&gt;
&lt;/td&gt;&lt;td&gt;svn rm folder &lt;i&gt;(recursive by default; use -N to not recurse)&lt;/i&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;th&gt;Commit changed file to central repo
&lt;/th&gt;&lt;td&gt;git commit -m "message" file.txt; git push
&lt;/td&gt;&lt;td&gt;svn ci -m "message" file.txt
&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#eeeeee"&gt;&lt;th&gt;Ignore files/folders (in the current folder)
&lt;/th&gt;&lt;td&gt;echo "target&lt;br/&gt;
*.class&lt;br/&gt;
bin" &amp;gt; .&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/gitignore.html"&gt;gitignore&lt;/a&gt;; \&lt;br/&gt;
git ci -m "gitignore" .gitignore
&lt;/td&gt;&lt;td&gt;svn propset &lt;a href="http://subversion.apache.org/faq.html#ignore-commit"&gt;svn:ignore&lt;/a&gt; "target&lt;br/&gt;
*.class&lt;br/&gt;
bin" .; \&lt;br/&gt;
svn ci -N -m "svn:ignore" .
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;

&lt;p&gt;Obviously you can do a lot more w/ Git than with SVN (like &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-stash.html"&gt;stashing local changes temporarily&lt;/a&gt;), but for the sake of simply moving from a VCS to a DVCS and being able to continue to work the same way you already do, the above table should provide a good introduction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-704926310375264366?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/704926310375264366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=704926310375264366' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/704926310375264366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/704926310375264366'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/11/git-vs-svn-basic-commandline-syntax.html' title='Git vs. SVN - Basic Commandline Syntax Reference'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3288189313740450466</id><published>2010-11-03T07:54:00.007-04:00</published><updated>2010-11-05T16:34:36.604-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='ese'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>My First Maven Plugin</title><content type='html'>&lt;p&gt;Having been working with Maven and Tycho for about the last 8 months, it was high time I got around to writing my first Maven plugin, because I need to break myself from my tendency to revert to ant and bash whenever I need to do something outside the normal Maven flow.

&lt;p&gt;So, first I imported the git sources for Tycho 0.11.0-SNAPSHOT from &lt;a href="https://github.com/sonatype/sonatype-tycho"&gt;https://github.com/sonatype/sonatype-tycho&lt;/a&gt; so I'd have something from which to learn. Sure, Hello World samples are nice, but a working example is always more fruitful.

&lt;blockquote&gt;&lt;pre&gt;git clone http://github.com/sonatype/sonatype-tycho.git
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/TNFRUsb4oYI/AAAAAAAAGGM/bEEUzedJ020/s1600/Screenshot-1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 120px; height: 200px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/TNFRUsb4oYI/AAAAAAAAGGM/bEEUzedJ020/s200/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5535294832982401410" /&gt;&lt;/a&gt;

&lt;p&gt;Next, I imported a few Tycho projects (tycho-p2-facade, tycho-p2-plugin, tycho-p2-publisher-plugin) from the git clone folder into Eclipse using &lt;a href="http://m2eclipse.sonatype.org/"&gt;m2eclipse&lt;/a&gt; 0.10.2. Because these are Maven projects &lt;strike&gt;and don't need Eclipse project clutter, there are no .project files and therefore they couldn't be imported as pre-existing projects.

&lt;p&gt;So, I had to wobble through the New &gt; Maven Project wizard a little until I figured out that I could check the 'Create a simple project (skip archetype selection)' box to create a new .project file in an existing project folder. Only wrinkle here is that if there's an existing pom.xml in a project, the New Maven Project wizard complains. The obvious workaround is to rename the existing pom.xml to pom.xml_, create the new Maven Project in w/ m2eclipse in the existing folder (as above), then replace the pom.xml that m2eclipse creates with the actual (renamed) one, pom.xml_ and refresh the project in Eclipse. Voila! I also updated the project settings to use JDK5 instead of the default JDK1.4.&lt;/strike&gt; You need only do &lt;b&gt;File &gt; Import &gt; Maven &gt; Existing Maven Projects&lt;/b&gt; and browse for the pom files. So much easier than what I did above. &lt;i&gt;Thanks to everyone for setting me straight!&lt;/i&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TNFTTIr9vrI/AAAAAAAAGGY/4dvdmm7f9Mw/s1600/Screenshot-2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 126px; height: 200px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TNFTTIr9vrI/AAAAAAAAGGY/4dvdmm7f9Mw/s200/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5535297005229555378" /&gt;&lt;/a&gt;

&lt;p&gt;So, with sample code to clone from it was time to create my own plugin project, then a second project on which that plugin depended in order to test the dependency chain thru Maven. 

&lt;p&gt;The first uses the "maven-archetype-plugin" archetype v1.1; the second, the "maven-archetype-quickstart" archetype v1.1. Here are the two projects:

&lt;p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://github.com/nickboldt/sample-maven-plugin/tree/master/sample-maven-plugin/"&gt;sample-plugin&lt;/a&gt;
&lt;li&gt;&lt;a href="https://github.com/nickboldt/sample-maven-plugin/tree/master/sample-maven-project-depends-on-plugins/"&gt;sample-project&lt;/a&gt;
&lt;/ol&gt;

&lt;p&gt;The glue between these projects is in the sample-project's pom.xml:

&lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.jboss.maven.plugin&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;sample-plugin&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;0.0.1-SNAPSHOT&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;

And that's seemingly it. Next... adding actual useful functionality to a plugin, then using that functionality in our &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/parent/pom.xml"&gt;JBoss Tools build's parent pom.xml&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3288189313740450466?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3288189313740450466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3288189313740450466' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3288189313740450466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3288189313740450466'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/11/my-first-maven-plugin.html' title='My First Maven Plugin'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/TNFRUsb4oYI/AAAAAAAAGGM/bEEUzedJ020/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5528304178999575415</id><published>2010-10-25T12:54:00.008-04:00</published><updated>2010-10-25T17:37:15.074-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='grandma'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>In Which I Explain Once Again That Linux Is A Viable Alternative to Windows</title><content type='html'>&lt;p&gt;I was recently asked this question:

&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;Can linux be used for a normal computer, operating email programs, word processing, etc? I am quite frustrated with all the "improvements" that Windows keeps getting;  each improvement making it slower and more prone to erratic behavior. I use a computer only for the above tasks, and would really like to get away from the problems.&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;As I've been telling friends, colleagues, family, and everyone who'll listen for about the past 5 years... &lt;b&gt;YES&lt;/b&gt;.

&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Mail&lt;/b&gt;: Instead of Outlook, you can use &lt;a href="http://www.mozillamessaging.com/en-US/thunderbird/"&gt;Thunderbird&lt;/a&gt;.&lt;p&gt;
&lt;li&gt;&lt;b&gt;Calendar&lt;/b&gt;: use &lt;a href="http://www.mozilla.org/projects/calendar/sunbird/"&gt;Sunbird&lt;/a&gt; or go online w/ &lt;a href="http://www.google.com/googlecalendar/about.html"&gt;Google Calendar&lt;/a&gt;&lt;p&gt;
&lt;li&gt;&lt;b&gt;Web&lt;/b&gt;: Instead of Internet Explorer, &lt;a href="http://www.mozilla.com/en-US/"&gt;Firefox&lt;/a&gt;, &lt;a href="http://www.opera.com/"&gt;Opera&lt;/a&gt;, &lt;a href="http://www.google.com/chrome?platform=linux"&gt;Chrome&lt;/a&gt;, or &lt;a href="http://www.konqueror.org/"&gt;Konqueror&lt;/a&gt;. None will "accidentally" install spyware for you.&lt;p&gt;
&lt;li&gt;&lt;b&gt;Office&lt;/b&gt;: Instead of the bloated and dinosauric (20 years old!) MS Office's Word, Excel &amp;amp; Powerpoint, use Open Office's &lt;a href="http://www.openoffice.org/"&gt;Writer, Calc &amp;amp; Impress&lt;/a&gt;. &lt;i&gt;(Open Office is now 10 years old - old enough to be feature rich, young enough to be standards-compliant.)&lt;/i&gt;&lt;p&gt;
&lt;li&gt;&lt;b&gt;Chat&lt;/b&gt;: instead of MSN, use &lt;a href="http://pidgin.im/"&gt;pidgin&lt;/a&gt; (supports all IM protocols, including MSN, Yahoo, gtalk, IRC, Twitter, Facebook) and/or &lt;a href="http://www.skype.com/intl/en-us/get-skype/on-your-computer/linux/"&gt;Skype&lt;/a&gt; (for audio/video chat)&lt;p&gt;
&lt;li&gt;&lt;b&gt;Audio/Video playback &amp; streaming&lt;/b&gt;: instead of Windows Media Player, &lt;a href="http://www.videolan.org/vlc/"&gt;VLC player&lt;/a&gt;. &lt;p&gt;
&lt;li&gt;&lt;b&gt;Solitaire&lt;/b&gt;: &lt;a href="http://www.pysol.org/"&gt;PySol&lt;/a&gt; includes 200 solitaire games; &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1562/"&gt;Firefox
"Cards" plugin&lt;/a&gt; contains dozens more.&lt;p&gt;
&lt;/ul&gt;

&lt;p&gt;More advanced users:

&lt;ul&gt;&lt;li&gt;&lt;b&gt;Graphics&lt;/b&gt;: instead of Photoshop, use &lt;a href="http://www.gimp.org/"&gt;GIMP&lt;/a&gt;&lt;p&gt;
&lt;li&gt;&lt;b&gt;MP3 ripping&lt;/b&gt;: &lt;a href="http://nostatic.org/grip/"&gt;grip&lt;/a&gt; or &lt;a href="http://littlesvr.ca/asunder/"&gt;asunder&lt;/a&gt;
&lt;/ul&gt;

&lt;p&gt;I personally use linux flavours designed for older machines so they're
lightweight, faster, and less bloated. Then, if I need a more
"bloated" app (like something from the KDE school instead of the XFCE or GDE school), I simply install that into the operating system as an add-on. Of course if you *want* eye candy (like 3D desktops and transitions when you open/close applications) you can get that too. It's pure eye candy, but it's available if you need Vista or Win7-like "bling". 

&lt;p&gt;If you want to try Linux before jumping in fully, I advise two options:

&lt;p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xubuntu.org/"&gt;Xubuntu&lt;/a&gt;, designed for old machines and to stay more-or-less the same over time. Download and install it into Windows without having to reformat your hard drive. Good for your grandmother's desktop machine.&lt;p&gt;
&lt;li&gt;&lt;a href="http://fedoraproject.org/"&gt;Fedora&lt;/a&gt;, designed for newer machines and to stay up to date with recent improvements in the Linux world. Can be &lt;a href="http://en.wikipedia.org/wiki/Fedora_Live_USB_Creator"&gt;installed onto a USB key&lt;/a&gt; so you can boot your system from that without having to touch your existing Windows install. Good for your parents or your machine, or for an office.&lt;p&gt;
&lt;li&gt;There are of course &lt;a href="http://distrowatch.com/"&gt;lots of other Linux distros out there&lt;/a&gt;...
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5528304178999575415?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5528304178999575415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5528304178999575415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5528304178999575415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5528304178999575415'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/10/in-which-i-explain-once-again-that.html' title='In Which I Explain Once Again That Linux Is A Viable Alternative to Windows'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-89136539775228987</id><published>2010-10-08T00:05:00.003-04:00</published><updated>2010-10-08T00:28:00.577-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='tptp'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='mirror'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><title type='text'>HOWTO: Find the feature that contains a plugin</title><content type='html'>&lt;p&gt;Tycho is awesome. 

&lt;p&gt;However, like all build systems, it has its limitations. 

&lt;p&gt;One such limitation is that when you're building against a target platform, and something's missing, you get errors such as these:

&lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;[INFO] Cannot complete the request.  Generating details.
{org.osgi.framework.executionenvironment=OSGi/Minimum-1.0,OSGi/Minimum-1.1, osgi.ws=cocoa, osgi.arch=x86, osgi.os=macosx, org.eclipse.update.install.features=true, org.osgi.framework.system.packages=}
[Software being installed: org.jboss.tools.tptp.feature.feature.group 1.2.0.qualifier, Missing requirement: org.eclipse.tptp.platform.instrumentation.ui 4.4.1.v201009092123 requires 'bundle org.eclipse.hyades.probekit [4.2.0,5.0.0)' but it could not be found, Cannot satisfy dependency: org.eclipse.tptp.platform.instrumentation.ui.feature.group 4.3.1.v201009092123-797908s73533D4H6D56 depends on: org.eclipse.tptp.platform.instrumentation.ui [4.4.1.v201009092123], Cannot satisfy dependency: org.jboss.tools.tptp.feature.feature.group 1.2.0.qualifier depends on: org.eclipse.tptp.platform.instrumentation.ui.feature.group 4.3.0]
[ERROR] Internal error: java.lang.RuntimeException: org.eclipse.equinox.p2.core.ProvisionException: No solution found because the problem is unsatisfiable. -&gt; [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: org.eclipse.equinox.p2.core.ProvisionException: No solution found because the problem is unsatisfiable.
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;The important part of that error message is as follows:

&lt;p&gt;&lt;blockquote&gt;&lt;pre&gt;org.jboss.tools.tptp.feature.feature.group 1.2.0.qualifier
   requirement: org.eclipse.tptp.platform.instrumentation.ui 4.4.1.v201009092123 
      &lt;b&gt;requires 'bundle org.eclipse.hyades.probekit [4.2.0,5.0.0)' 
         but it could not be found&lt;/b&gt;

org.eclipse.tptp.platform.instrumentation.ui.feature.group 4.3.1.v201009092123-797908s73533D4H6D56 
   depends on: org.eclipse.tptp.platform.instrumentation.ui [4.4.1.v201009092123]
     dependency: org.jboss.tools.tptp.feature.feature.group 1.2.0.qualifier 
        depends on: org.eclipse.tptp.platform.instrumentation.ui.feature.group 4.3.0]
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;So, how do you find which feature contains that plugin, so that you can add it to your target platform?

&lt;p&gt;First, you need access to the repository. If you have direct server access to the repository from which the plugin comes (eg., the TPTP Helios update site), you can run &lt;a href="http://divbyzero.com/linux/findInFeature.sh.txt"&gt;this script&lt;/a&gt; in the root of that repository. 

&lt;p&gt;If you don't have server access (eg., you can't ssh to dev.eclipse.org and look in ~/downloads/tptp/updates/helios), then you can pull down a zip of the site (or use a &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks/Partial_Mirroring/Example"&gt;p2.mirror script&lt;/a&gt; to fetch a copy of the site to your local machine)... and then run &lt;a href="http://divbyzero.com/linux/findInFeature.sh.txt"&gt;this script&lt;/a&gt; in the root of that repository.

&lt;p&gt;Essentially the script finds matching feature jar files, unpacks them to extract the feature.xml files therein, and then greps those files for lines which suggest an included plugin matching the pattern for which you're searching:

&lt;blockquote&gt;&lt;pre&gt;
$ findInFeature platform.probekit
./features/org.eclipse.tptp.platform.probekit_4.5.1.v201009092123-7H7BF8PAkF7B77ZARCNEK.jar
   &amp;lt;plugin
         id="org.eclipse.tptp.platform.probekit"

./features/org.eclipse.tptp.platform.trace_4.5.1.v201009092123-7L7O8bBgJ9E99jAfGWEM.jar
   &amp;lt;plugin
         id="org.eclipse.tptp.platform.probekit.launch"
&lt;/pre&gt;&lt;/blockquote&gt;

From there, it's a trivial exercise to add another line item into your &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/e361-wtp322.target"&gt;target platform&lt;/a&gt; file. First, paste in the feature jar:

&lt;blockquote&gt;&lt;pre&gt;
./features/org.eclipse.tptp.platform.probekit_4.5.1.v201009092123-7H7BF8PAkF7B77ZARCNEK.jar
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Then use vim to pattern-replace that string:

&lt;blockquote&gt;&lt;pre&gt;
:%s/.\+\/\(org.\+\)_\(\d\+.\+\)\.jar/\t\t\t&lt;unit version="\2" id="\1.feature.group"\/&gt;/g
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;And you'll end up with a new .feature.group added to the target:

&lt;blockquote&gt;&lt;pre&gt;
&amp;lt;unit version="4.5.1.v201009092123-7H7BF8PAkF7B77ZARCNEK" id="org.eclipse.tptp.platform.probekit.feature.group"/&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-89136539775228987?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/89136539775228987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=89136539775228987' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/89136539775228987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/89136539775228987'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/10/howto-find-feature-that-contains-plugin.html' title='HOWTO: Find the feature that contains a plugin'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5155063257607199984</id><published>2010-10-01T22:43:00.008-04:00</published><updated>2010-10-01T23:28:41.193-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='b2p'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='helios'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='provisioning'/><category scheme='http://www.blogger.com/atom/ns#' term='director'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='sr1'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><title type='text'>JBoss Tools: making it easier to build against a complex target platform</title><content type='html'>&lt;p&gt;So you want to be a JBoss Tools developer? Awesome. Welcome to the family. &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/"&gt;SVN sources are here&lt;/a&gt;, &lt;a href="https://jira.jboss.org/browse/JBIDE"&gt;JIRA's over here&lt;/a&gt; and there's cold beer in the fridge*. 

&lt;p&gt;But you say it's a pain in the tuchus to &lt;a href="http://download.jboss.org/jbosstools/requirements/helios/"&gt;download over 25 zips&lt;/a&gt; or add a whole bunch of &lt;a href="https://www.jboss.org/tools/download/dev.html#noteBirt"&gt;update sites&lt;/a&gt; and hope you get everything you need? Yeah, no argument there. If only there was an easier way to resolve all the dependencies you need to get building, much less to even RUN this stuff.

&lt;p&gt;To make this process simpler, I've created a &lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/latest/"&gt;p2 repo&lt;/a&gt; (update site) from our &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/e361-wtp322.target"&gt;target platform file&lt;/a&gt;, which has been recently updated to include Helios SR1 dependencies. You can track subsequent work in progress here: &lt;a href="https://jira.jboss.org/browse/JBIDE-6982"&gt;JIRA JBIDE-6982&lt;/a&gt;. You can also report any issues there too.

&lt;hr/&gt;

&lt;p&gt;So, now, just add this &lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/latest/"&gt;single site&lt;/a&gt;** into your vanilla Eclipse 3.6.1 Classic (or a Helios SR1 bundle), uncheck the box for 'Group Items by Category' and you can install everything listed. For great justice.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TKadr2A10mI/AAAAAAAAGGA/NqA_ZrH_wBw/s1600/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TKadr2A10mI/AAAAAAAAGGA/NqA_ZrH_wBw/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5523275369575469666" /&gt;&lt;/a&gt;
&lt;hr/&gt;

&lt;p&gt;Some handy links:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/latest/"&gt;Latest Target Platform Repo&lt;/a&gt;
&lt;li&gt;&lt;a href="http://download.jboss.org/jbosstools/updates/target-platform/e361-wtp322.target_v3.zip"&gt;Archived Target Platform Repo&lt;/a&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/e361-wtp322.target"&gt;Target Platform Definition File&lt;/a&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/"&gt;JBoss Tools SVN Sources&lt;/a&gt;
&lt;li&gt;&lt;a href="https://jira.jboss.org/browse/JBIDE"&gt;JBoss Tools JIRA&lt;/a&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;p&gt;Some handy HOWTOs:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://community.jboss.org/wiki/HowtoBuildJBossToolswithMaven3"&gt;HOWTO build JBoss Tools (all or individual components) using Tycho&lt;/a&gt;

&lt;li&gt;&lt;a href="https://www.jboss.org/tools/docs/testing"&gt;HOWTO run JBoss Tools' tests (all or individual components) using Tycho&lt;/a&gt;

&lt;li&gt;&lt;a href="https://www.jboss.org/tools/docs/testing#remote"&gt;HOWTO attach Eclipse's debugger to JUnit or SWTBot tests running w/ Tycho&lt;/a&gt;

&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/README.txt"&gt;HOWTO convert from a .target into a repo&lt;/a&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/README.txt"&gt;HOWTO update a .target to include newer versions based on contents of a local repo&lt;/a&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/installation/README.txt"&gt;HOWTO install from p2 repo(s) into Eclipse using p2.director script&lt;/a&gt;
&lt;/ul&gt;
&lt;hr/&gt;
&lt;p&gt;&lt;i&gt;&lt;small&gt;* - Due to &lt;a href="http://divby0.blogspot.com/2007/12/beer-to-peer-networking-part-1.html"&gt;beer2peer limitations&lt;/a&gt;, YMMV.&lt;/small&gt;&lt;/i&gt;

&lt;p&gt;&lt;i&gt;&lt;small&gt;** - I'm aware that the update site throws a 403 if you open it in a browser. I can't be arsed to generate an index.html just yet, nor are there categorized features. Because really, you don't need either - this site is only meant to be used by p2.&lt;/small&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5155063257607199984?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5155063257607199984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5155063257607199984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5155063257607199984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5155063257607199984'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/10/jboss-tools-making-it-easier-to-build.html' title='JBoss Tools: making it easier to build against a complex target platform'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/TKadr2A10mI/AAAAAAAAGGA/NqA_ZrH_wBw/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4416621489749967067</id><published>2010-08-16T00:56:00.012-04:00</published><updated>2010-08-16T01:40:56.281-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='9000'/><category scheme='http://www.blogger.com/atom/ns#' term='modem'/><category scheme='http://www.blogger.com/atom/ns#' term='tether'/><category scheme='http://www.blogger.com/atom/ns#' term='bb'/><category scheme='http://www.blogger.com/atom/ns#' term='3g'/><category scheme='http://www.blogger.com/atom/ns#' term='berry4all'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><category scheme='http://www.blogger.com/atom/ns#' term='bold'/><category scheme='http://www.blogger.com/atom/ns#' term='tethering'/><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='barry'/><category scheme='http://www.blogger.com/atom/ns#' term='bandwidth'/><category scheme='http://www.blogger.com/atom/ns#' term='wifi'/><title type='text'>Linux modem tethering with berry4all, Rogers 3G network, and Blackberry Bold 9000</title><content type='html'>&lt;p&gt;Because I'll be out of town for the next couple days, part of my packing list included setting up tethering via my Blackberry.

&lt;p&gt;First I tried &lt;a href="http://www.netdirect.ca/software/packages/barry/modem.php"&gt;barry&lt;/a&gt; but was unsuccessful in trying to make a successful connection.

&lt;p&gt;Then I found &lt;a href="http://www.berry4all.com/install"&gt;berry4all&lt;/a&gt;.
&lt;p&gt;I had two problems, but thanks to the &lt;a href="http://www.berry4all.com/faqs"&gt;extensive FAQ&lt;/a&gt;, I managed to solve them:

&lt;ol&gt;
&lt;li&gt;Ensure your device (in my case, Blackberry Bold 9000) has its &lt;a href="http://www.quickim.com/support/gprs-settings.html#Canada"&gt;APN&lt;/a&gt; correctly set in &lt;code&gt;Setup &gt; Options &gt; Advanced &gt; TCP&lt;/code&gt;

&lt;li&gt;Ensure other network connections are disabled using &lt;code&gt;route -n; ifconfig -a&lt;/code&gt; before attempting to connect via tethered 3G modem. See also &lt;a href="http://www.berry4all.com/use#if_it_does_not_support_it"&gt;If your PPPD does not support &lt;code&gt;replacedefaultroute&lt;/code&gt;&lt;/a&gt;

&lt;li&gt;Ensure &lt;code&gt;/etc/resolv.conf&lt;/code&gt; is being correctly updated with the appropriate DNS entries (I have to do this by hand at the moment, but tweaked the default /opt/bbtether/berry4all.sh script to add this line so that I can automatically update the file immediately before connecting:

&lt;blockquote&gt;&lt;code&gt;#!/bin/sh&lt;br/&gt;
cp -f /etc/resolv.conf.bbtether /etc/resolv.conf&lt;br/&gt;
python bbgui.py &amp;&lt;/code&gt;&lt;/blockquote&gt;

where &lt;code&gt;/etc/resolv.conf.bbtether&lt;/code&gt; contains:

&lt;blockquote&gt;&lt;code&gt;domain rogers.com&lt;br/&gt;
search rogers.com&lt;br/&gt;
nameserver 64.71.255.198&lt;br/&gt;
#nameserver 64.71.255.253&lt;/code&gt;&lt;/blockquote&gt;

&lt;li&gt;Load up a bandwidth speed test such as &lt;a href="http://www.bandwidthplace.com/"&gt;bandwidthplace.com&lt;/a&gt; and see what network speed you can get.

&lt;/ol&gt;

&lt;p&gt;Admittedly, tethered speeds are nothing close to wifi speeds.

&lt;ul&gt;&lt;li&gt; With Rogers 3G network and Blackberry Bold 9000 attached via USB, I managed to get about 500-2800kbps down and 100-200 kpbs up.
&lt;li&gt;With Rogers "Exterme" cable internet access (wifi @ home) I get 9800kbps down, 960kbps up.
&lt;/ul&gt;

&lt;p&gt;But at least I can surf on my laptop using the 3G network while I'm away from the office.

&lt;p&gt;To disconnect wired &amp; wifi, then tether automatically and stay connected until &lt;b&gt;&lt;code&gt;CTRL-C&lt;/code&gt;&lt;/b&gt; is pressed, try this script:

&lt;blockquote&gt;&lt;pre&gt;#!/bin/bash
if [[ $UID != 0 ]]; then
 echo "Must be run as root!"
else
 /etc/init.d/network stop
 cp /etc/resolv.conf.bbtether /etc/resolv.conf
 route -n; ifconfig

 cd /opt/bbtether; python bbtether.py rogers -P **YOUR_DEVICE_PASSWORD_HERE**

 /etc/init.d/network start
 route -n; ifconfig
fi&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4416621489749967067?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4416621489749967067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4416621489749967067' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4416621489749967067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4416621489749967067'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/08/blackberry-tethering-for-linux.html' title='Linux modem tethering with berry4all, Rogers 3G network, and Blackberry Bold 9000'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1208833483661139152</id><published>2010-08-11T11:39:00.004-04:00</published><updated>2010-08-11T11:51:58.908-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='associate'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='aggregation'/><category scheme='http://www.blogger.com/atom/ns#' term='aggregator'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='buckminster'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><category scheme='http://www.blogger.com/atom/ns#' term='b3'/><title type='text'>p2 Repository Association And The Fine Art Of Forceably Enabling Disabled Sites 2: Tycho Edition</title><content type='html'>&lt;a href="http://divby0.blogspot.com/2010/02/p2-repository-association-and-fine-art.html"&gt;Back in February&lt;/a&gt;, I blogged about how to add associate sites to an update site generated w/ the Buckminster or B3 aggregator.
&lt;p&gt;
Since we've moved our build infrastructure to use Tycho + Maven, I had to port the script over to work there for our &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/"&gt;update site aggregation&lt;/a&gt;. 

&lt;p&gt;Here are the moving pieces:&lt;ul&gt;
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/pom.xml"&gt;pom.xml&lt;/a&gt; that builds the site, listing input sites as &lt;code&gt;&amp;lt;repository&amp;gt;&lt;/code&gt; entries, and a shout-out to &lt;code&gt;build.xml&lt;/code&gt;, below, to do extra stuff during the &lt;code&gt;install&lt;/code&gt; phase
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/build.xml"&gt;build.xml&lt;/a&gt; ant script called by &lt;code&gt;pom.xml&lt;/code&gt;, above, to do additional work after the creation of the &lt;code&gt;site_assembly.zip&lt;/code&gt; update site zip
&lt;li&gt;&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/aggregateSite.jbosstools.properties"&gt;aggregateSite.jbosstools.properties&lt;/a&gt; properties file listing the aggregate sites to add
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1208833483661139152?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1208833483661139152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1208833483661139152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1208833483661139152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1208833483661139152'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/08/p2-repository-association-and-fine-art.html' title='p2 Repository Association And The Fine Art Of Forceably Enabling Disabled Sites 2: Tycho Edition'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3067275829444964193</id><published>2010-07-20T14:33:00.005-04:00</published><updated>2010-08-11T11:55:53.592-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='helios'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='target'/><title type='text'>Troubleshooting Eclipse.org Mirrors / Using Profiles &amp; Target Platform Definition Files With Tycho</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;If you look in the mirror and you say his name 5 times, he'll appear behind you breathing down your neck.&lt;/i&gt; - &lt;a href="http://www.imdb.com/title/tt0103919/quotes"&gt;Candyman&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;If only troubleshooting mirrors was so simple. Have you ever been running a build or an install which stalls at the provisioning step, with a message like:

&lt;blockquote&gt;&lt;i&gt; [INFO] Fetching org.eclipse.birt.integration.wtp.ui_2.6.0.v20100617-1315.jar.pack.gz (4.3MB of 46.13MB at 171.56kB/s) from http://mirrors.xmission.com/eclipse/birt/update-site/2.6/plugins/org.eclipse.birt.integration.wtp.ui_2.6.0.v20100617-1315.jar.pack.gz&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;The solution here is often simply to force p2 to pick &lt;b&gt;a specific mirror&lt;/b&gt; rather than letting it choose any mirror it wants.

&lt;p&gt;How, you ask?

&lt;p&gt;Well, assuming you were polling this site looking for artifacts to install or update...

&lt;blockquote&gt;&lt;i&gt;&lt;a href="http://download.eclipse.org/birt/update-site/2.6/"&gt;http://download.eclipse.org/birt/update-site/2.6/&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;... you would then change that URL to this, and look at the list of available mirrors:

&lt;blockquote&gt;&lt;i&gt;&lt;a href="http://www.eclipse.org/downloads/download.php?file=/birt/update-site/2.6/"&gt;http://www.eclipse.org/downloads/download.php?file=/birt/update-site/2.6/&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;Now it's a trivial matter to select a mirror that's close to you and try that instead of the download.eclipse.org mirror, such as:

&lt;blockquote&gt;&lt;i&gt;&lt;a href="ftp://mirror.csclub.uwaterloo.ca/eclipse/birt/update-site/2.6/"&gt;ftp://mirror.csclub.uwaterloo.ca/eclipse/birt/update-site/2.6/&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;

&lt;hr/&gt;

&lt;p&gt;If you're running a Tycho build, this URL should be changed in your &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/parent-pom.xml"&gt;parent-pom.xml&lt;/a&gt; ...

&lt;blockquote&gt;&lt;i&gt;
&amp;lt;url&amp;gt;http://download.eclipse.org/birt/update-site/2.6/&amp;lt;/url&amp;gt;
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt; ... or your &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/e36-wtp32.target"&gt;.target platform file&lt;/a&gt;, depending on which way you're building. 

&lt;blockquote&gt;&lt;i&gt;
&amp;lt;repository location="http://download.eclipse.org/birt/update-site/2.6/"/&amp;gt;
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;If you rely on a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/parent-pom.xml"&gt;parent-pom.xml&lt;/a&gt;, make sure you're activating the profile with the revised URL...

&lt;blockquote&gt;&lt;i&gt;mvn3 clean install -U -B -fae -Phelios&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;... or, if you're building against a .target platform file, make sure you update the URL in that file, and that your build points to the profile which will load the &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/target-platform/e36-wtp32.target"&gt;.target file&lt;/a&gt;.

&lt;blockquote&gt;&lt;i&gt;mvn3 clean install -U -B -fae -P!helios,helios-no-target&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;b&gt;UPDATE, 2010/08/11&lt;/b&gt;: Forgot to mention that there are a number of p2 update site zips available here to help with your offsite mirroring: &lt;a href="http://download.eclipse.org/athena/repos/"&gt;http://download.eclipse.org/athena/repos/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3067275829444964193?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3067275829444964193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3067275829444964193' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3067275829444964193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3067275829444964193'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/07/troubleshooting-eclipseorg-mirrors.html' title='Troubleshooting Eclipse.org Mirrors / Using Profiles &amp; Target Platform Definition Files With Tycho'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6329109191721483090</id><published>2010-07-03T01:59:00.003-04:00</published><updated>2010-07-03T02:03:09.585-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='utf-8'/><category scheme='http://www.blogger.com/atom/ns#' term='japanese'/><category scheme='http://www.blogger.com/atom/ns#' term='chinese'/><category scheme='http://www.blogger.com/atom/ns#' term='korean'/><category scheme='http://www.blogger.com/atom/ns#' term='spam'/><title type='text'>Blog comments or spam? No idea.</title><content type='html'>&lt;p&gt;I don't speak Chinese. Or Korean. Or Japanese. I mention this because lately I've been getting a couple comments per post in a foreign character set, and I can't tell if it's spam or a legit comment. 

&lt;p&gt;Please, if you have something to say, stick to English, French, German, or Spanish. Hell, even Latin, lolcode, or twitterspeak. Anything other than that I'll just delete as spam. 

&lt;p&gt;kthxbai,

&lt;p&gt;Nick&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6329109191721483090?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6329109191721483090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6329109191721483090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6329109191721483090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6329109191721483090'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/07/blog-comments-or-spam-no-idea.html' title='Blog comments or spam? No idea.'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6443252661231964088</id><published>2010-06-30T11:10:00.004-04:00</published><updated>2010-06-30T11:26:56.218-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='pom'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='buckminster'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='ant-contrib'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='b3'/><title type='text'>Update Site Aggregation: B3 vs. Tycho</title><content type='html'>&lt;p&gt;Last year, I used to aggregate update sites with the Buckminster Aggregator, but since that won't install into Eclipse 3.6 (Helios), I had to &lt;a href="http://wiki.eclipse.org/Eclipse_b3/aggregator/Migration_From_buckminster"&gt;migrate to the B3 Aggregator&lt;/a&gt;. This new version of the Aggregator is greatly expanded and worked fine until recently, when it has begun to suffer from a rather nasty p2 problem: instead of the Director just installing the aggregator into an Eclipse instance prior to then running the aggregation, I get "&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=317656"&gt;The copies of profile SDKProfile are not in sync&lt;/a&gt;," and the whole process dies.
http://www.blogger.com/img/blank.gif
&lt;p&gt;So, in order to find a workaround, I went back to &lt;a href="http://divby0.blogspot.com/search/label/tycho"&gt;Tycho&lt;/a&gt;, and discovered you can merge update sites with little more than two simple files:

&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/site.xml"&gt;site.xml&lt;/a&gt;, which lists the features to aggregate and how to categorize them, and &lt;li&gt;a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/build/aggregate/site/pom.xml"&gt;pom.xml&lt;/a&gt; to list the source sites and drive the aggregation.&lt;/ul&gt;&lt;/blockquote&gt; 

&lt;p&gt;Unfortunately the Tycho solution doesn't &lt;a href="http://divby0.blogspot.com/2010/02/p2-repository-association-and-fine-art.html"&gt;include the ability to add associate sites to the metadata after generation&lt;/a&gt;, but that can simply be done as a downstream step (&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/drools/pom.xml"&gt;Tycho can call Ant&lt;/a&gt; using the maven-antrun-plugin).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6443252661231964088?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6443252661231964088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6443252661231964088' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6443252661231964088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6443252661231964088'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/06/update-site-aggregation-b3-vs-tycho.html' title='Update Site Aggregation: B3 vs. Tycho'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5974869398188320543</id><published>2010-06-21T17:22:00.010-04:00</published><updated>2010-06-21T17:48:47.166-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='nas'/><category scheme='http://www.blogger.com/atom/ns#' term='fat32'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='ext3'/><title type='text'>pogoplug network attached storage (NAS) for linux, mac, windows</title><content type='html'>A couple months ago I bought a &lt;a href="http://www.pogoplug.com/"&gt;PogoPlug&lt;/a&gt;. Because it's an ungodly pink colour and because I've been hella busy with other stuff, I finally unboxed it today, and discovered that while:

&lt;ul&gt;&lt;li&gt;it's a snap to configure through the web UI
&lt;li&gt;it works with ext3 and fat32 drives
&lt;li&gt;it's &lt;a href="http://www.pogoplugged.com/article/11798/How-To-Install-OpenPogo-On-Your-Pogoplug-Harness-The-Power-of-Linux-Apps/"&gt;SSH accessible&lt;/a&gt;, and 
&lt;li&gt;there are other &lt;a href="http://www.pogoplugged.com/article/11798/How-To-Install-OpenPogo-On-Your-Pogoplug-Harness-The-Power-of-Linux-Apps/"&gt;installable linux apps&lt;/a&gt; for it&lt;/ul&gt;

&lt;p&gt;... &lt;a href="http://www.pogoplugged.com/article/13974/How-to-Install-Pogoplug-Drive-on-Ubuntu-10.04-Lucid-Lynx/"&gt;setting it up for Linux&lt;/a&gt; was not entirely trivial.
&lt;p&gt;
While the &lt;a href="http://www.pogoplugged.com/article/13974/How-to-Install-Pogoplug-Drive-on-Ubuntu-10.04-Lucid-Lynx/"&gt;above article&lt;/a&gt; helped, a couple points were not immediately obvious:

&lt;ul&gt;&lt;li&gt;If you mount the drive as root, it's not accessible as anyone else; if you mount as the user, not even root can read it.
&lt;li&gt;Use of a &lt;code&gt;/etc/pogoplugfs.conf&lt;/code&gt; file is highly recommended, so that you can log in w/o having to key in your username and password every time. Create this file &lt;b&gt;as root&lt;/b&gt;, and set it &lt;code&gt;chmod 644&lt;/code&gt; if not already:
&lt;pre style="brush:shell"&gt;svcuser=you@email-provider.com
svcpassword=web-login-password
logseverity=10&lt;/pre&gt;

&lt;li&gt;To automount the drive on startup (eg., on my old xubuntu 6 system), &lt;b&gt;as root&lt;/b&gt;, try creating a new file, &lt;code&gt;/etc/init.d/pogoplug&lt;/code&gt;:
&lt;pre style="brush:shell"&gt;#! /bin/sh
### BEGIN INIT INFO
# Provides:          
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $named
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: pogoplug fs mount as myusername
# Description:       pogoplug fs mount as myusername
### END INIT INFO

sudo -u myusername /usr/bin/pogoplugfs --mountpoint /media/pogoplug

exit 0&lt;/pre&gt;

&lt;li&gt;Then, to activate this file, &lt;b&gt;as root&lt;/b&gt;:
&lt;pre style="brush:shell"&gt;chmod +x /etc/init.d/pogoplug; \
for x in 2 3 4 5; do \
  cd /etc/rc${x}.d; ln -s /etc/init.d/pogoplug S99pogoplug; \
done&lt;/pre&gt;

&lt;/ul&gt;
&lt;p&gt;With Fedora 12, I could simply create a startup task using &lt;code&gt;System &amp;lt; Preferences &amp;lt; Startup Applications&lt;/code&gt; from the gnome menu.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TB_ba_08-yI/AAAAAAAAGEw/E87fqL8OebA/s1600/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 248px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TB_ba_08-yI/AAAAAAAAGEw/E87fqL8OebA/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485344128017169186" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5974869398188320543?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5974869398188320543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5974869398188320543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5974869398188320543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5974869398188320543'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/06/pogoplug-network-attached-storage-nas.html' title='pogoplug network attached storage (NAS) for linux, mac, windows'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/TB_ba_08-yI/AAAAAAAAGEw/E87fqL8OebA/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6236098407758397462</id><published>2010-06-18T12:42:00.005-04:00</published><updated>2010-06-18T12:45:28.246-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tshirt'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='scifi'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>#FailWhale v2.0</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/TBuh_Dszb6I/AAAAAAAAGEk/FkFc9hsLFW4/s1600/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/TBuh_Dszb6I/AAAAAAAAGEk/FkFc9hsLFW4/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5484155075950768034" /&gt;&lt;/a&gt;
&lt;p align="center"&gt; 

&lt;br/&gt;&lt;small&gt;&lt;i&gt; 
#Fail Bot?
&lt;/i&gt;&lt;br/&gt;
-- Someone's been watching too much &lt;a href="http://www.topatoco.com/merchant.mvc?Screen=PROD&amp;Store_Code=TO&amp;Product_Code=HIJI-TITLEGEN&amp;Category_Code=HIJI"&gt;made-for-tv sci-fi&lt;/a&gt;, I think
&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6236098407758397462?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6236098407758397462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6236098407758397462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6236098407758397462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6236098407758397462'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/06/failwhale-v20.html' title='#FailWhale v2.0'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/TBuh_Dszb6I/AAAAAAAAGEk/FkFc9hsLFW4/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2098777487977672283</id><published>2010-05-25T16:19:00.004-04:00</published><updated>2010-05-25T16:52:39.749-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='svnkit'/><category scheme='http://www.blogger.com/atom/ns#' term='jna'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='helios'/><category scheme='http://www.blogger.com/atom/ns#' term='mirror'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse36'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>My love-hate with SVN, Part 8: Installation Ease Of Use (UPDATED)</title><content type='html'>&lt;p&gt;
Back in July 2009, I blogged about &lt;a href="http://divby0.blogspot.com/2009/07/my-love-hate-with-svn-part-6.html"&gt;My love-hate with SVN, Part 6: Installation Ease Of Use&lt;/a&gt;. With &lt;a href="http://eclipse.org/helios/"&gt;Helios&lt;/a&gt; just around the corner, I wanted to produce an updated repo for use with the latest &amp; greatest Eclipse 3.6.

&lt;p&gt;Now the &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks#Partial_Mirroring"&gt;&lt;code&gt;&amp;lt;p2.mirror/&amp;gt;&lt;/code&gt;&lt;/a&gt; &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks/Partial_Mirroring/Example"&gt;script&lt;/a&gt; will fetch and use Ant-Contrib automatically.

&lt;p&gt;Here's the updated 15M update site zip, which includes the following:

&lt;blockquote&gt;&lt;a href="http://download.jboss.org/jbosstools/requirements/helios/Subvsve079.I201005121900_SVNconn222.I201005121900_SVNKit133.6648_JNA323_ECF310.v201005082345-Update.zip"&gt;Subversive 0.7.9&lt;br/&gt;SVN Connector 2.2.2&lt;br/&gt;SVNKit 1.3.3&lt;br/&gt;JNA 3.2.3&lt;br/&gt;ECF 3.1.0&lt;/a&gt;&lt;/blockquote&gt;

Any problems, please report them in &lt;A href="http://bugs.eclipse.org/284077"&gt;bug 284077&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2098777487977672283?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2098777487977672283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2098777487977672283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2098777487977672283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2098777487977672283'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/05/my-love-hate-with-svn-part-8.html' title='My love-hate with SVN, Part 8: Installation Ease Of Use (UPDATED)'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3428093897797794564</id><published>2010-05-04T01:11:00.003-04:00</published><updated>2010-05-04T01:17:53.434-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>So long and thanks for all the faece</title><content type='html'>&lt;p align="center"&gt;&lt;a href="http://www.rocket.ly/home/2010/4/26/top-ten-reasons-you-should-quit-facebook.html"&gt;&lt;img src="http://www.rocket.ly/storage/post-images/ban_facebook.png?__SQUARESPACE_CACHEVERSION=1272329059660" width=274/&gt;&lt;/a&gt;

&lt;p&gt;I'm done with Faecebook. &lt;a href="http://www.rocket.ly/home/2010/4/26/top-ten-reasons-you-should-quit-facebook.html"&gt;Here's why&lt;/a&gt;. &lt;a href="http://www.groovypost.com/howto/security/permanently-delete-your-facebook-profile-account/"&gt;And here's how to quit&lt;/a&gt;. I encourage you to &lt;a href="http://www.facebook.com/help/contact.php?show_form=delete_account"&gt;do the same&lt;/a&gt;.

&lt;p&gt;Instead, find me on &lt;a href="http://twitter.com/nickboldt"&gt;Twitter&lt;/a&gt; and &lt;a href="http://ca.linkedin.com/in/nickboldt"&gt;LinkedIn&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3428093897797794564?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3428093897797794564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3428093897797794564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3428093897797794564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3428093897797794564'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/05/so-long-and-thanks-for-all-faece.html' title='So long and thanks for all the faece'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1389409578694352729</id><published>2010-04-16T03:11:00.008-04:00</published><updated>2010-04-16T03:41:15.398-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='xulrunner'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>HOWTO: Build a XulRunner 1.9.1.2 Update Site with Tycho 0.8 + Maven 3</title><content type='html'>&lt;p&gt;0. Install Maven 3 by downloading then unpacking the tar.gz:

&lt;pre class="brush:shell"&gt;cd /tmp; \
wget http://mirror.csclub.uwaterloo.ca/apache/maven/binaries/apache-maven-3.0-alpha-7-bin.tar.gz; \
tar xvzf apache-maven-3.0-alpha-7-bin.tar.gz; \
chmod 755 apache-maven-3.0-alpha-7/bin/mvn; \
alias mvn3='/tmp/apache-maven-3.0-alpha-7/bin/mvn'&lt;/pre&gt;

&lt;p&gt;1. Check out sources:

&lt;pre class="brush:shell"&gt;cd /tmp; \
svn co http://anonsvn.jboss.org/repos/jbosstools/branches/modular_build/xulrunner/; \
wget http://anonsvn.jboss.org/repos/jbosstools/branches/modular_build/parent-pom.xml&lt;/pre&gt;

&lt;p&gt;2. Run build:

&lt;pre class="brush:shell"&gt;cd xulrunner; mvn3 -fae clean install&lt;/pre&gt;

&lt;p&gt;3. You will get a p2 repo / update site in the target folder of the site project, from which you can install XulRunner or XPCOM into your Eclipse.

&lt;pre class="brush:shell"&gt;cd site/org.mozilla.xulrunner.site/target/site&lt;/pre&gt;

&lt;hr/&gt;

Note that the parent-pom.xml used above can in fact be much simpler. You only need the following:

&lt;pre class="brush:xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;project&gt;
  &amp;lt;modelVersion&gt;4.0.0&amp;lt;/modelVersion&gt;
  &amp;lt;groupId&gt;org.jboss.tools&amp;lt;/groupId&gt;
  &amp;lt;artifactId&gt;org.jboss.tools.parent.pom&amp;lt;/artifactId&gt;
  &amp;lt;version&gt;0.0.1-SNAPSHOT&amp;lt;/version&gt;
  &amp;lt;name&gt;JBoss Tools Parent&amp;lt;/name&gt;
  &amp;lt;packaging&gt;pom&amp;lt;/packaging&gt;
  &amp;lt;properties&gt;
    &amp;lt;tychoVersion&gt;0.8.0&amp;lt;/tychoVersion&gt;
  &amp;lt;/properties&gt;
  &amp;lt;build&gt;
    &amp;lt;plugins&gt;
      &amp;lt;plugin&gt;
        &amp;lt;groupId&gt;org.sonatype.tycho&amp;lt;/groupId&gt;
        &amp;lt;artifactId&gt;tycho-maven-plugin&amp;lt;/artifactId&gt;
        &amp;lt;version&gt;${tychoVersion}&amp;lt;/version&gt;
        &amp;lt;extensions&gt;true&amp;lt;/extensions&gt;
      &amp;lt;/plugin&gt;

      &amp;lt;plugin&gt;
        &amp;lt;groupId&gt;org.sonatype.tycho&amp;lt;/groupId&gt;
        &amp;lt;artifactId&gt;target-platform-configuration&amp;lt;/artifactId&gt;
        &amp;lt;version&gt;${tychoVersion}&amp;lt;/version&gt;
        &amp;lt;configuration&gt;
          &amp;lt;resolver&gt;p2&amp;lt;/resolver&gt;
          &amp;lt;environments&gt;
            &amp;lt;environment&gt;
              &amp;lt;os&gt;macosx&amp;lt;/os&gt;
              &amp;lt;ws&gt;cocoa&amp;lt;/ws&gt;
              &amp;lt;arch&gt;x86&amp;lt;/arch&gt;
            &amp;lt;/environment&gt;
            &amp;lt;environment&gt;
              &amp;lt;os&gt;macosx&amp;lt;/os&gt;
              &amp;lt;ws&gt;carbon&amp;lt;/ws&gt;
              &amp;lt;arch&gt;x86&amp;lt;/arch&gt;
            &amp;lt;/environment&gt;
            &amp;lt;environment&gt;
              &amp;lt;os&gt;win32&amp;lt;/os&gt;
              &amp;lt;ws&gt;win32&amp;lt;/ws&gt;
              &amp;lt;arch&gt;x86&amp;lt;/arch&gt;
            &amp;lt;/environment&gt;
            &amp;lt;environment&gt;
              &amp;lt;os&gt;linux&amp;lt;/os&gt;
              &amp;lt;ws&gt;gtk&amp;lt;/ws&gt;
              &amp;lt;arch&gt;x86&amp;lt;/arch&gt;
            &amp;lt;/environment&gt;
            &amp;lt;environment&gt;
              &amp;lt;os&gt;linux&amp;lt;/os&gt;
              &amp;lt;ws&gt;gtk&amp;lt;/ws&gt;
              &amp;lt;arch&gt;x86_64&amp;lt;/arch&gt;
            &amp;lt;/environment&gt;
          &amp;lt;/environments&gt;
        &amp;lt;/configuration&gt;
      &amp;lt;/plugin&gt;
    &amp;lt;/plugins&gt;
  &amp;lt;/build&gt;
&amp;lt;/project&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1389409578694352729?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1389409578694352729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1389409578694352729' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1389409578694352729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1389409578694352729'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/04/build-xulrunner-1912-update-site-with.html' title='HOWTO: Build a XulRunner 1.9.1.2 Update Site with Tycho 0.8 + Maven 3'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-280439872318828300</id><published>2010-04-15T16:51:00.003-04:00</published><updated>2010-04-15T16:57:47.923-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Better Bootstrapping For Athena Projects</title><content type='html'>&lt;p&gt;Inspired by Tycho and Maven, I've simplified the self-bootstrapping process for &lt;a href="http://wiki.eclipse.org/Category:Athena_Common_Build"&gt;Athena&lt;/a&gt; builds.

&lt;p&gt;Previously, you needed a start.sh script to fetch org.eclipse.releng.basebuilder and org.eclipse.dash.common.releng before you could run a build; if on build.eclipse.org this is done for you automatically. Or, if building locally (or on Windows), you had to fetch these yourself.

&lt;p&gt;Now, you can simply tell your build.xml to bootstrap itself, and it will fetch those projects for you. You can also tell it which version of basebuilder or common.releng to use, rather than being tied to the defaults.

&lt;p&gt;For details, see &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Bootstrapping"&gt;Getting Started - Bootstrapping&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-280439872318828300?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/280439872318828300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=280439872318828300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/280439872318828300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/280439872318828300'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/04/better-bootstrapping-for-athena.html' title='Better Bootstrapping For Athena Projects'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3211848196720172070</id><published>2010-04-04T12:57:00.005-04:00</published><updated>2010-04-04T13:06:52.920-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clean'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='ant-contrib'/><category scheme='http://www.blogger.com/atom/ns#' term='macro'/><title type='text'>Cleaner Ant Build Logs: Get Rid of "Trying to override old definition of task"</title><content type='html'>&lt;p&gt;If you use macros in Ant, you have probably seen clutter in your log such as

&lt;pre class="brush:xml"&gt;Trying to override old definition of task ...&lt;/pre&gt;

&lt;p&gt;Here's how to purge this garbage from your log and keep your build output cleaner.

&lt;ol&gt;&lt;li&gt;move your macros into a target such as &amp;lt;target name="init"&gt;
&lt;li&gt;have your main target(s) depend on the target that defines the macros
&lt;li&gt;call your macros
&lt;/ol&gt;

&lt;p&gt;You can make your log even quieter with &lt;code&gt;-q&lt;/code&gt; when running ant, eg., &lt;code&gt;ant -f build.xml -q&lt;/code&gt;

&lt;p&gt;Here's a complete example that will first self-bootstrap itself by downloading Ant-Contrib, define two ant macros, and produce very quiet output (unless &lt;code&gt;debug=true&lt;/code&gt;):

&lt;pre class="brush:xml"&gt;&amp;lt;project default="run"&gt;
 &amp;lt;property name="COMMON_TOOLS" value="${java.io.tmpdir}" /&gt;
 &amp;lt;property name="debug" value="false"/&gt;

 &amp;lt;target name="get.ant-contrib" unless="ant-contrib.jar.exists"&gt;
  &amp;lt;property name="ANTCONTRIB_MIRROR" value="http://downloads.sourceforge.net/ant-contrib/" /&gt;
  &amp;lt;get usetimestamp="true"
       dest="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip"
       src="${ANTCONTRIB_MIRROR}/ant-contrib-1.0b2-bin.zip"
  /&gt;
  &amp;lt;touch file="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip" /&gt;
  &amp;lt;mkdir dir="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_" /&gt;
  &amp;lt;unzip src="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip"
         dest="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_"
         overwrite="true"
  /&gt;
  &amp;lt;copy file="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_/ant-contrib/lib/ant-contrib.jar"
        tofile="${COMMON_TOOLS}/ant-contrib.jar"
        failonerror="true"
  /&gt;
  &amp;lt;delete dir="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_" includeemptydirs="true" quiet="true" /&gt;
 &amp;lt;/target&gt;

 &amp;lt;target name="init"&gt;
  &amp;lt;available file="${COMMON_TOOLS}/ant-contrib.jar" type="file" property="ant-contrib.jar.exists" /&gt;
  &amp;lt;antcall target="get.ant-contrib" /&gt;

  &amp;lt;taskdef resource="net/sf/antcontrib/antlib.xml"&gt;
   &amp;lt;classpath&gt;
    &amp;lt;pathelement location="${COMMON_TOOLS}/ant-contrib.jar" /&gt;
   &amp;lt;/classpath&gt;
  &amp;lt;/taskdef&gt;
  
  &amp;lt;macrodef name="debug"&gt;
   &amp;lt;text name="echo" /&gt;
   &amp;lt;sequential&gt;
    &amp;lt;if&gt;
     &amp;lt;and&gt;
      &amp;lt;isset property="debug" /&gt;
      &amp;lt;istrue value="${debug}" /&gt;
     &amp;lt;/and&gt;
     &amp;lt;then&gt;
      &amp;lt;echo message="@{echo}" /&gt;
     &amp;lt;/then&gt;
    &amp;lt;/if&gt;
   &amp;lt;/sequential&gt;
  &amp;lt;/macrodef&gt;

  &amp;lt;macrodef name="list.count"&gt;
   &amp;lt;attribute name="list" default="" /&gt;
   &amp;lt;sequential&gt;
    &amp;lt;var name="count" value="" /&gt;
    &amp;lt;for param="listitem" list="@{list}" delimiter=", "&gt;
     &amp;lt;sequential&gt;
      &amp;lt;var name="count" value="${count}0" /&gt;
     &amp;lt;/sequential&gt;
    &amp;lt;/for&gt;
    &amp;lt;length property="list.count.return" string="${count}" /&gt;
   &amp;lt;/sequential&gt;
  &amp;lt;/macrodef&gt;
 &amp;lt;/target&gt;

 &amp;lt;target name="run" depends="init"&gt;
  &amp;lt;property name="list" value="foo bar baz"/&gt;
  &amp;lt;list.count list="${list}" /&gt;
  &amp;lt;debug&gt;For list [${list}], size = &amp;lt;/debug&gt;
  &amp;lt;echo&gt;${list.count.return}&amp;lt;/echo&gt;
 &amp;lt;/target&gt;

&amp;lt;/project&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3211848196720172070?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3211848196720172070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3211848196720172070' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3211848196720172070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3211848196720172070'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/04/cleaner-ant-build-logs-get-rid-of.html' title='Cleaner Ant Build Logs: Get Rid of &quot;Trying to override old definition of task&quot;'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8722949529414523490</id><published>2010-03-31T16:55:00.006-04:00</published><updated>2010-03-31T17:12:31.266-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='gef'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>HOWTO: Build Plugin &amp; Feature Projects, Then Run Their Unit Tests w/ Tycho :: GEF Example</title><content type='html'>&lt;p&gt;&lt;i&gt;Note that the instructions below are for Linux (or MacOSX). On Windows, your YMMV, but the process is the same.&lt;/i&gt;

&lt;p&gt;1. Check out the &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/?root=Tools_Project"&gt;entire source tree of your project&lt;/a&gt; from CVS, SVN, or Git into ~/build.

&lt;p&gt;2. If needed, move plugins, features &amp; test plugins into:
&lt;pre style="brush:shell"&gt;~/build/plugins/
~/build/features/
~/build/tests/&lt;/pre&gt;

&lt;p&gt;(Test features should go into features/ folder too.)

&lt;p&gt;3. Install scala from &lt;a href="http://www.scala-lang.org/downloads"&gt;http://www.scala-lang.org/downloads&lt;/a&gt;

&lt;p&gt;4. Fetch &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/genpom.scala?root=Tools_Project&amp;view=co"&gt;genpom.scala&lt;/a&gt; and &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/parent-pom.xml?root=Tools_Project&amp;content-type=text%2Fplain&amp;view=co"&gt;parent-pom.xml&lt;/a&gt;; save in &lt;code&gt;~/build&lt;/code&gt; or equivalent.

&lt;p&gt;5. Tweak &lt;code&gt;parent-pom.xml&lt;/code&gt; to suit your needs or use as-is.

&lt;p&gt;6. Run this to generate pom.xml files for plugins, features, and tests:

&lt;pre style="brush:shell"&gt;cd ~/build/plugins/; scala ../genpom.scala
cd ~/build/features/; scala ../genpom.scala
cd ~/build/tests/; scala ../genpom.scala&lt;/pre&gt;

&lt;p&gt;7. Download Maven 3 from &lt;a href="http://www.apache.org/dyn/closer.cgi?path=/maven/binaries/apache-maven-3.0-alpha-7-bin.tar.gz"&gt;http://www.apache.org/dyn/closer.cgi?path=/maven/binaries/apache-maven-3.0-alpha-7-bin.tar.gz&lt;/a&gt;

&lt;p&gt;8. Install Maven 3 

&lt;pre style="brush:shell"&gt;sudo su; cd /opt; tar xvzf apache-maven-3.0-alpha-7-bin.tar.gz
ln -s apache-maven-3.0-alpha-7 maven3&lt;/pre&gt;

&lt;p&gt;9. For convenience, alias mvn3 to the new maven:

&lt;pre style="brush:shell"&gt;alias mvn3='/opt/maven3/bin/mvn 2&gt;&amp;1 clean install | tee buildlog.latest.txt'&lt;/pre&gt;

&lt;p&gt;10. Build the plugins, features, and finally tests:

&lt;pre style="brush:shell"&gt;cd ~/build/plugins/; mvn3
cd ~/build/features/; mvn3
cd ~/build/tests/; mvn3&lt;/pre&gt;

Look in &lt;code&gt;~/build/plugins/org.eclipse.*/target/&lt;/code&gt; for generated jars.&lt;br/&gt;
Look in &lt;code&gt;~/.m2/repository/org/eclipse/*&lt;/code&gt; for published jars.

&lt;hr/&gt;

To automate steps 6 and 10, you can run this script in the ~/build/ folder:

&lt;pre style="brush:shell"&gt;#!/bin/bash
for f in plugins/ features/ tests/; do \
  cd $f; scala ../genpom.scala; \
  /opt/maven3/bin/mvn 2&gt;&amp;1 clean install | tee buildlog.latest.txt; \
  cd ..; \
done&lt;/pre&gt;

&lt;p&gt;&lt;small&gt;&lt;i&gt;(&lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/README.build.with.Tycho.txt?revision=1.1&amp;root=Tools_Project"&gt;The above blog is also posted here&lt;/a&gt;.)&lt;/i&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8722949529414523490?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8722949529414523490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8722949529414523490' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8722949529414523490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8722949529414523490'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/03/howto-build-pde-projects-run-their-ui.html' title='HOWTO: Build Plugin &amp; Feature Projects, Then Run Their Unit Tests w/ Tycho :: GEF Example'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8624558713779067986</id><published>2010-03-28T13:07:00.008-04:00</published><updated>2010-03-28T15:11:56.271-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='dash'/><title type='text'>Dash Athena: Post-EclipseCon Wrap-Up</title><content type='html'>&lt;p&gt;Updates to Athena since Feb 2010&lt;/p&gt;

&lt;h2&gt;Ease of use&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt;
&lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Migration_to_Ant"&gt;New documentation available for migrating from Bash to Ant&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt; &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/build.xml?root=Technology_Project&amp;amp;revision=1.2&amp;amp;content-type=text%2Fplain" class="external text" title="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/build.xml?root=Technology_Project&amp;amp;revision=1.2&amp;amp;content-type=text%2Fplain" rel="nofollow"&gt;build.xml&lt;/a&gt; is now simpler. &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/?root=Technology_Project" class="external text" title="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/?root=Technology_Project" rel="nofollow"&gt;Sample project template&lt;/a&gt; updated. You can now use the same build.xml script to run a build in Eclipse or in Hudson from an Ant-based job. Note that the page &lt;a href="/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Ant_Script" title="Common Build Infrastructure/Getting Started/Build In Hudson/Ant Script"&gt;Build In Hudson/Ant Script&lt;/a&gt; is no longer current. See also &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304800" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304800" rel="nofollow"&gt;bug 304800&lt;/a&gt;.

&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;You can now run &lt;code&gt;buildExtra.xml#extraPackaging&lt;/code&gt; via &lt;code&gt;build.steps=buildExtra&lt;/code&gt; rather than requiring &lt;code&gt;build.steps=buildZips&lt;/code&gt;.

&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt; Publishing support will improve thanks to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306854" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306854" rel="nofollow"&gt;bug 306854&lt;/a&gt;... anyone want to contribute to writing a Hudson job, please feel free!
&lt;/li&gt;&lt;/ul&gt;
&lt;h2&gt; Packaging Support&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306300" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306300" rel="nofollow"&gt;bug 306300&lt;/a&gt; Athena removes .jar files and only contains pack 200 files in update site - new default setting (keep both artifact types) is &lt;code&gt;removeUnpackedJars=false&lt;/code&gt;, but can revert to old behaviour (and smaller update site) with &lt;code&gt;removeUnpackedJars=true&lt;/code&gt;

&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307016" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307016" rel="nofollow"&gt;bug 307016&lt;/a&gt; SDK and Runtime zips produced with buildZips target are missing {notice,epl-v10}.html files; if root files exist they will now be copied into the SDK, Runtime, Examples zips; ${allZip} will also include this so it can be copied from there too (custom packaging in buildExtra.xml#extraPackaging task)
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt; Testing Support&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296352" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=296352" rel="nofollow"&gt;bug 296352&lt;/a&gt; Can't connect to vnc server - fixed using Xnvc option in Hudson job and improvements to testLocal task
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt; Publishing Support&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302170" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=302170" rel="nofollow"&gt;bug 302170&lt;/a&gt; Work around Hudson's missing lastS*Build folders - promote.xml will now recurse into Hudson job tree looking for correct build to publish
&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt; Publishing support will improve thanks to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306854" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=306854" rel="nofollow"&gt;bug 306854&lt;/a&gt;... anyone want to contribute to writing a Hudson job, please feel free!
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt; Bug Fixes&lt;/h2&gt;

&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304800" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=304800" rel="nofollow"&gt;bug 304800&lt;/a&gt; Temporary regression caused by adopting new build.xml script with too-aggressive cleanup default
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307016" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=307016" rel="nofollow"&gt;bug 307016&lt;/a&gt; SDK and Runtime zips produced with buildZips target are missing {notice,epl-v10}.html files; if root files exist they will now be copied into the SDK, Runtime, Examples zips; ${allZip} will also include this so it can be copied from there too (custom packaging in buildExtra.xml#extraPackaging task)
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt; Documentation &amp;amp; Branding&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;
&lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Migration_to_Ant"&gt;New documentation available for migrating from Bash to Ant&lt;/a&gt;
&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt; &lt;a href="http://eclipse.org/athena/doc/eclipsecon2010/" class="external text" title="http://eclipse.org/athena/doc/eclipsecon2010/" rel="nofollow"&gt;EclipseCon 2010 Presentation&lt;/a&gt;, "Dash Athena Exposed" is available here.

&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="/Common_Build_Infrastructure/Getting_Started" title="Common Build Infrastructure/Getting Started"&gt;Common Build Infrastructure/Getting Started&lt;/a&gt; and &lt;a href="/Common_Build_Infrastructure/Getting_Started/Build_In_Eclipse" title="Common Build Infrastructure/Getting Started/Build In Eclipse"&gt;Common Build Infrastructure/Getting Started/Build In Eclipse&lt;/a&gt; updated.
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/?root=Technology_Project" class="external text" title="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/?root=Technology_Project" rel="nofollow"&gt;Sample project template&lt;/a&gt; &amp;amp; generic &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/build.xml?root=Technology_Project&amp;amp;revision=1.2&amp;amp;content-type=text%2Fplain" class="external text" title="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.myproject.releng/build.xml?root=Technology_Project&amp;amp;revision=1.2&amp;amp;content-type=text%2Fplain" rel="nofollow"&gt;build.xml&lt;/a&gt; updated.
&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272723" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272723" rel="nofollow"&gt;bug 272723&lt;/a&gt; Logo design contest for Athena under way: vote early, vote often!
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8624558713779067986?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8624558713779067986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8624558713779067986' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8624558713779067986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8624558713779067986'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/03/dash-athena-post-eclipsecon-wrap-up.html' title='Dash Athena: Post-EclipseCon Wrap-Up'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6265917145486194849</id><published>2010-03-24T14:43:00.009-04:00</published><updated>2010-03-24T16:55:51.296-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipsecon'/><category scheme='http://www.blogger.com/atom/ns#' term='mvn'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tycho'/><category scheme='http://www.blogger.com/atom/ns#' term='mvn3'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='maven3'/><category scheme='http://www.blogger.com/atom/ns#' term='gef'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>I'm in love with Tycho 0.8 and Maven 3</title><content type='html'>&lt;p&gt;Monday:
&lt;p&gt;Signed up for GitHub, downloaded apache-maven-3.0-alpha-7-bin.tar.gz, and &lt;a href="https://docs.sonatype.org/display/TYCHO/BuildingTycho"&gt;built Tycho&lt;/a&gt; from source. Took a bit of path wrangling (namely figuring out that maven runs based on current directory), but it built and most of the tests passed. Not bad for my first day ever using Maven.

&lt;pre style="brush:shell"&gt;# First download Maven3 and unpack into /opt/
export MAVEN_OPTS="-Xmx512m"
export TYCHO_TARGET_PLATFORM=/home/nboldt/eclipse/35clean/eclipse
mvn=/opt/maven/bin/mvn
$mvn clean install -e -V -Pbootstrap-1
$mvn clean install -e -V -Pbootstrap-2 -Dtycho.targetPlatform=$TYCHO_TARGET_PLATFORM
$mvn clean test -e -V -Pits -Dtycho.targetPlatform=$TYCHO_TARGET_PLATFORM&lt;/pre&gt;
&lt;p&gt;The really confusing part was "what now? what did I just build? And how do I use it?" Answer: You can now run maven3 from &lt;code&gt;.../sonatype-tycho/tycho-its/target/apache-maven-3.0-alpha-7/bin/mvn&lt;/code&gt;

&lt;hr/&gt;

&lt;p&gt;Tuesday:
&lt;p&gt;Attended the &lt;a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&amp;id=1571"&gt;Sonatype-sponsored Tycho Build Workshop&lt;/a&gt;, and amazed &lt;a href="http://lenettoyeur-on-eclipse.blogspot.com/"&gt;Pascal&lt;/a&gt; by saying &lt;b&gt;good things&lt;/b&gt; about Tycho and Maven3. Apparently I'm known to complain about all things p2, despite my numerous blogs and wiki contributions touting its success and usefulness. Also installed &lt;a href="http://m2eclipse.sonatype.org/installing-m2eclipse.html"&gt;m2eclipse&lt;/a&gt; to see how effective the pom editor is. 
&lt;p&gt;During the workshop, I got the following JBoss Tools projects to build: &lt;b&gt;jmx, archives, as, flow, jbpm3/4, drools, bpel, smooks, common&lt;/b&gt;. That's nearly half our projects! Thanks to &lt;a href="http://www.sonatype.com/people/author/jason/"&gt;Jason&lt;/a&gt; and Igor for their invaluable assistance.

&lt;p&gt;The reason it was so easy was that &lt;a href="http://relation.to/Bloggers/Max"&gt;Max&lt;/a&gt; had already created a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/genpom.scala"&gt;scala script&lt;/a&gt; to generate all the pom.xml files we need to build JBoss Tools, and a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/parent-pom.xml"&gt;parent-pom.xml&lt;/a&gt; on which those tiny pom.xml files depend. (For me as a Maven noob, not having to think at all about creating poms made this transition a no-brainer. Speaking of &lt;a href="http://delicious.com/nickboldt/zombies"&gt;no-brainers&lt;/a&gt;, my slides from &lt;a href="http://eclipse.org/athena/doc/eclipsecon2010/"&gt;Monday's talk about Dash Athena and Zombies are here&lt;/a&gt; (PDF).

&lt;a href="http://delicious.com/nickboldt/zombies"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 308px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/S6p8KbwkHpI/AAAAAAAAGDw/cAQ45LBB0lQ/s320/miserymachine-cropped.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5452306817577393810" /&gt;&lt;/a&gt;

&lt;p&gt;As an added bonus, Tycho, being more strict than PDE, exposes missing information in MANIFEST.MF files such as dependencies on plugins. PDE-based builds are apparently more forgiving because they generally include more crap than is actually needed in the target platform against which the build runs; Tycho builds against what you tell it you need. So, the mavenification of JBoss Tools will actually cause us to have better described plugins, and therefore make them easier to build anywhere. I'm very impressed so far.

&lt;p&gt;Unlike Dash Athena which needs to be told all the IUs (features/plugins) against which your project needs to build, Tycho determines this information from your manifests, so the information need not be duplicated.

&lt;p&gt;I still need to look at how to build update sites from the output of a Tycho build, and how to hook in SWTBot/JUnit4 tests. I have a suspicion this may be handled using Buckminster tools such as their &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.xml?root=Technology_Project&amp;view=markup"&gt;Aggregator&lt;/a&gt;, or my own custom Ant hackery using the &lt;a href="http://wiki.eclipse.org/SWTBot/Ant"&gt;SWTBot wiki docs&lt;/a&gt;. Time will tell.

&lt;hr/&gt;

&lt;p&gt;Wed
&lt;p&gt;
This morning on a whim I decided to see if I could port Max's scala script (aside: I've never seen scala before yesterday) to generate pom.xml files for EMF or GEF. Success! With some minor tweaks, I've managed to build GEF 3.6 into my local maven repo (~/.m2). Obviously there's more to be done here... but damn, this is easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6265917145486194849?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6265917145486194849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6265917145486194849' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6265917145486194849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6265917145486194849'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/03/im-in-love-with-tycho-08-and-maven-3.html' title='I&apos;m in love with Tycho 0.8 and Maven 3'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/S6p8KbwkHpI/AAAAAAAAGDw/cAQ45LBB0lQ/s72-c/miserymachine-cropped.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1274789271416797870</id><published>2010-03-05T17:07:00.004-05:00</published><updated>2010-03-05T17:33:50.681-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='beyondvc'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='compare'/><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><title type='text'>Beyond CVS 0.8.9 Released!</title><content type='html'>&lt;p&gt;It's true that the shoemaker's children often go shoeless; so to my little Sourceforge project, &lt;a href="http://beyondcvs.sourceforge.net/"&gt;Beyond CVS/SVN&lt;/a&gt; - maintained tirelessly over the years by Chris Callendar - has had to wait *years* to finally get its own update site.

&lt;p&gt;Sad, I know. But thanks to &lt;a href="http://divby0.blogspot.com/2010/03/athena-p2-repos-w-associate-sites.html"&gt;a recent breakthough&lt;/a&gt; in being able to insert associate sites into p2 repo metadata, you can now install Beyond CVS/SVN without having to hunt down Subclipse or Subversive's update sites. 

&lt;p align="center"&gt;&lt;img src="http://beyondcvs.sourceforge.net/bc32t.png"&gt;&lt;/p&gt;

&lt;p&gt;Here's the new site: &lt;a href="http://beyondcvs.sourceforge.net/update/0.8.x"&gt;http://beyondcvs.sourceforge.net/update/0.8.x&lt;/a&gt;. If you point Eclipse at it, you can install the features therein. If you point a browser at it, you can see instructions for how to do the install. And if you want an offline install, here's the zip: &lt;a href="https://sourceforge.net/projects/beyondcvs/files/Beyond%20CVS/Version%200.8.9/org.eclipse.externaltools-Update-0.8.9.v201003051612.zip/download"&gt;org.eclipse.externaltools-Update-0.8.9.v201003051612.zip&lt;/a&gt; (&lt;a href="https://sourceforge.net/projects/beyondcvs/files/Beyond%20CVS/Version%200.8.9/README.BeyondCVS.0.8.9.txt/download"&gt;README&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1274789271416797870?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1274789271416797870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1274789271416797870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1274789271416797870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1274789271416797870'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/03/beyond-cvs-089-released.html' title='Beyond CVS 0.8.9 Released!'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-602402722902183141</id><published>2010-03-04T20:23:00.005-05:00</published><updated>2010-03-04T20:36:05.470-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='associate'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><title type='text'>Athena: p2 repos w/ associate sites</title><content type='html'>Want to insert associate update sites into your user's Eclipse when they go to install your features from an update site/zip? With an Athena build this is now a trivial exercise.

For example... say you're &lt;a href="https://sourceforge.net/projects/beyondcvs/files/"&gt;building a plugin&lt;/a&gt; which supports integration with Subclipse or Subversive.

In a traditional install from an SDK or runtime zip, you'd unpack into eclipse/, and wonder why the new plugins didn't work.

In the new p2 install world, you point Eclipse at the update site or zip, and are told that you cannot install the SVN integration because missing requirements cannot be found. So you hunt down the required sites, add them to Eclipse, and try again; this time you are allowed to install the new features.

To improve the ease of use for the end user, Athena now allows you to define associate.sites in your &lt;a href="http://beyondcvs.cvs.sourceforge.net/viewvc/beyondcvs/org.eclipse.externaltools.releng/build.properties?view=markup"&gt;build.properties&lt;/a&gt;. If this property is set, URLs will be added into your p2 repo's metadata and Eclipse will automatically add those sites when it scans your zip or site. &lt;b&gt;No more manual copy+paste from documentation needed!&lt;/b&gt;

&lt;pre class="brush:shell"&gt;associate.sites=\
http://subclipse.tigris.org/update_1.6.x,\
http://download.eclipse.org/technology/subversive/0.7/update-site/,\
http://community.polarion.com/projects/subversive/download/eclipse/2.0/update-site/&lt;/pre&gt;

And, of course, you can reuse these sites when resolving dependencies against which to build or test:

&lt;pre class="brush:shell"&gt;repositoryURLs=\
http://download.eclipse.org/releases/galileo/,\
http://download.eclipse.org/athena/repos/eclipse-Update-3.5.2-201002111343.zip,\
http://download.eclipse.org/eclipse/updates/3.5/,\
${associate.sites}

IUsToInstall=org.eclipse.sdk.feature.group+org.eclipse.sdk.ide+\
org.eclipse.team.svn+org.eclipse.team.svn.core+org.eclipse.team.svn.ui+\
org.tigris.subversion.subclipse.core+org.tigris.subversion.subclipse.ui&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-602402722902183141?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/602402722902183141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=602402722902183141' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/602402722902183141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/602402722902183141'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/03/athena-p2-repos-w-associate-sites.html' title='Athena: p2 repos w/ associate sites'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4395896424681006667</id><published>2010-02-18T21:36:00.005-05:00</published><updated>2010-02-18T22:13:46.027-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='provisioning'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='rtfm'/><title type='text'>p2 Repository Association And The Fine Art Of Forceably Enabling Disabled Sites</title><content type='html'>&lt;p&gt;This week I've spent some time exploring how to associate p2 repo sites with other sites. The reason for this is that we publish features which depend on other publishers' features, and so would like to be able to have our update site automatically enable sites on which we depend in the end user's Eclipse.

&lt;p&gt;The first attempt to do this was by using p2.inf files. Based on examples on blogs and in newsgroups, I added this p2.inf file into our &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/birt/features/org.jboss.tools.birt.feature/"&gt;BIRT Integration feature&lt;/a&gt;:

&lt;p&gt;&lt;pre style="brush:xml"&gt;
instructions.configure=addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:0,name:Eclipse Galileo,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:1,name:Eclipse Galileo,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:0,name:Eclipse 3.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:1,name:Eclipse 3.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:0,name:BIRT 2.5,enabled:true); \
   addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:1,name:BIRT 2.5,enabled:true);
&lt;/pre&gt;

Unfortunately, this didn't work - I got this error while building:

&lt;p&gt;&lt;pre style="brush:xml"&gt;
 java.lang.IllegalArgumentException: No action found for: addRepository.
&lt;/pre&gt;

&lt;p&gt;So, hoping that using a fully-qualified name for the action would help, I tried this:

&lt;p&gt;&lt;pre style="brush:xml"&gt;
instructions.configure=org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:0,name:Eclipse Galileo,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/releases/galileo/,type:1,name:Eclipse Galileo,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:0,name:Eclipse 3.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/eclipse/updates/3.5/,type:1,name:Eclipse 3.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:0,name:BIRT 2.5,enabled:true); \
   org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(location:http${#58}//download.eclipse.org/birt/update-site/2.5/,type:1,name:BIRT 2.5,enabled:true);
&lt;/pre&gt;

&lt;p&gt;Success! The build no longer complained. Of course I wasn't getting any associate sites enabled when I added the new repo into Eclipse. Why, I wondered? 

&lt;p&gt;Thankfully, &lt;a href="https://jira.jboss.org/jira/browse/JBIDE-5520?focusedCommentId=12514382#action_12514382"&gt;I was told&lt;/a&gt; that 
the now-deprecated Metadata Generator (org.eclipse.equinox.p2.metadata.generator.EclipseGenerator) &lt;a href="http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.pde.doc.user/tasks/pde_p2_builds.htm"&gt;doesn't 
support p2.inf files&lt;/a&gt;, so it was finally time to switch to Eclipse 3.5's &lt;a href="http://wiki.eclipse.org/Equinox/p2/Publisher#UpdateSite_Publisher_Application"&gt;Update Site Publisher&lt;/a&gt; (org.eclipse.equinox.p2.publisher.UpdateSitePublisher), which 
can be run like this as a drop-in replacement for the above application:

&lt;p&gt;&lt;pre style="brush:xml"&gt;
&amp;lt;echo&amp;gt;Run p2.publisher.UpdateSitePublisher using launcherjar = @{launcherjar}&amp;lt;/echo&amp;gt;
&amp;lt;java jar="@{launcherjar}"
      fork="true" timeout="10800000"
      jvm="${java.home}/bin/java"
      failonerror="false" maxmemory="256m" taskname="p2"&amp;gt;
 &amp;lt;classpath&amp;gt;
  &amp;lt;fileset dir="${builder.build.path}/plugins"
           includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
  /&amp;gt;
  &amp;lt;fileset dir="${clean.eclipse.home}/plugins"
           includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
  /&amp;gt;
  &amp;lt;pathelement location="${builder.build.path}/plugins" /&amp;gt;
  &amp;lt;pathelement location="${clean.eclipse.home}/plugins" /&amp;gt;
 &amp;lt;/classpath&amp;gt;
 &amp;lt;arg line=" org.eclipse.equinox.launcher.Main -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher" /&amp;gt;
 &amp;lt;arg line=" -metadataRepository file:${updateSiteJarDir}/ -metadataRepositoryName &amp;quot;${update.site.product.name} ${update.site.description} Update Site&amp;quot;" /&amp;gt;
 &amp;lt;arg line=" -artifactRepository file:${updateSiteJarDir}/ -artifactRepositoryName &amp;quot;${update.site.product.name} ${update.site.description} Artifacts&amp;quot;" /&amp;gt;
 &amp;lt;arg line=" -source ${updateSiteJarDir}/" /&amp;gt;
 &amp;lt;arg line=" -compress -publishArtifacts -reusePack200Files -configs *,*,*" /&amp;gt;
&amp;lt;/java&amp;gt;&lt;/pre&gt;

&lt;p&gt;Having switched out the deprecated app for its successor, I then discovered that using the &lt;a href="http://wiki.eclipse.org/Equinox/p2/Engine/Touchpoint_Instructions#Fully_Qualified_Action_Names_and_Importing_Actions"&gt;instructions.configure touchpoint&lt;/a&gt; was way too late in the process 
to be of any use; this information is only used when you install the feature, not when you poll the repo for metadata. So to add the BIRT 2.5 update site I'd have to install the BIRT integration feature... which depends on the BIRT 2.5 site. I needed to inject this requirement in at an earlier point in the process.

&lt;p&gt;So, the next step was to hit up &lt;a href="http://wiki.eclipse.org/IRC"&gt;#equinox-dev&lt;/a&gt; and ask for help, which I got from 
&lt;a href="http://lenettoyeur-on-eclipse.blogspot.com/"&gt;Pascal "LeNettoyeur" Rapicault&lt;/a&gt;, &lt;a href="http://lenettoyeur-on-eclipse.blogspot.com/2010/02/moving-on.html"&gt;fellow IBM alumnus&lt;/a&gt;. 
He suggested that I append into the content.xml file in my repo the following information. Note that type 0 and 1 represent metadata repo and artifact repo, and options=1 or 0 is used to mark the site enabled or disabled.

&lt;p&gt;&lt;pre style="brush:xml"&gt;
  &amp;lt;references size='2'&amp;gt;
    &amp;lt;repository uri='http://download.eclipse.org/birt/update-site/2.5/'
url='http://download.eclipse.org/birt/update-site/2.5/' type='0' options='1'/&amp;gt;
    &amp;lt;repository uri='http://download.eclipse.org/birt/update-site/2.5/'
url='http://download.eclipse.org/birt/update-site/2.5/' type='1' options='1'/&amp;gt;
  &amp;lt;/references&amp;gt;
&amp;lt;/repository&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Success, I again thought, since the associated sites were finally being added and enabled into Eclipse when the repo was scanned for metadata. 
I even &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.xml?root=Technology_Project&amp;view=markup"&gt;scripted this process&lt;/a&gt; so that
 it could be integrated into our build process, or simply reused, eg., to &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/aggregateRepos.m2eclipse.properties?root=Technology_Project&amp;view=markup"&gt;merge two update sites and add some associate site for optional feature installs&lt;/a&gt;.
 
&lt;p&gt;But alas, every step forward brings another step backward, as I discovered that available but disabled sites are NOT enabled despite the instructions in the repo. 

In other words, &lt;b&gt;I cannot force an existing, yet disabled site to become enabled because my repo requires it&lt;/b&gt;. I can only document the requirement and hope that users will RTFM without getting too annoyed.

&lt;p&gt;So, what's the solution? Well, there currently isn't one. But if this scenario seems like something you'd like to see improved, please cast your votes &amp;amp; comments in one of these bugs:

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bugs.eclipse.org/303258"&gt;http://bugs.eclipse.org/303258&lt;/a&gt;
&lt;li&gt;&lt;a href="http://bugs.eclipse.org/241307"&gt;http://bugs.eclipse.org/241307&lt;/a&gt;
&lt;li&gt;&lt;a href="http://bugs.eclipse.org/229183"&gt;http://bugs.eclipse.org/229183&lt;/a&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4395896424681006667?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4395896424681006667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4395896424681006667' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4395896424681006667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4395896424681006667'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/02/p2-repository-association-and-fine-art.html' title='p2 Repository Association And The Fine Art Of Forceably Enabling Disabled Sites'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5264326607179690338</id><published>2010-02-16T11:44:00.005-05:00</published><updated>2010-02-16T11:47:32.047-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='geography'/><category scheme='http://www.blogger.com/atom/ns#' term='aircanada'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Ontario's capital now in the U.S.A.</title><content type='html'>&lt;p align="center"&gt; 
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/S3rLwCay-2I/AAAAAAAAGCc/aXtc_iwSk4o/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 134px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/S3rLwCay-2I/AAAAAAAAGCc/aXtc_iwSk4o/s320/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5438883526146718562" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;small&gt;&lt;i&gt; 
 Air Canada does not permit flight searches which have both an origin and destination in the United States.
&lt;/i&gt;&lt;br/&gt;
-- When did Toronto (YYZ) move to the US? I suspect this is why Air Canada keeps needing federal bail out money: geography lessons.
&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5264326607179690338?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5264326607179690338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5264326607179690338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5264326607179690338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5264326607179690338'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/02/ontarios-capital-now-in-usa.html' title='Ontario&apos;s capital now in the U.S.A.'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/S3rLwCay-2I/AAAAAAAAGCc/aXtc_iwSk4o/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3159125024591417652</id><published>2010-01-18T09:54:00.002-05:00</published><updated>2010-01-18T09:59:09.944-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='intel'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='x.org'/><category scheme='http://www.blogger.com/atom/ns#' term='lolcat'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='display'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Monitor fail</title><content type='html'>Well, that's a week of my life I'll never have again. Spent most of last week playing with WinXP, LinuxMint 8, and Fedora 11 &amp; 12 (both 32- and 64-bit) trying to find a solution to my external display issues.
&lt;p&gt;
Turns out that it's a software issue: &lt;a href="https://fedoraproject.org/wiki/Common_F12_bugs#Miscellaneous_problems_with_Intel_graphics_adapters"&gt;the latest xorg intel driver has a bug&lt;/a&gt;.
&lt;p&gt;
&lt;a href="http://icanhascheezburger.com/2008/03/21/funny-pictures-i-haz-a-bug/"&gt;&lt;img src="http://icanhascheezburger.wordpress.com/files/2008/03/funny-pictures-orange-kitten-has-ladybug.jpg" style="word-spacing:721078px;font-size:721078px;" alt="Humorous Pictures" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3159125024591417652?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3159125024591417652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3159125024591417652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3159125024591417652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3159125024591417652'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/01/monitor-fail.html' title='Monitor fail'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7281494161121818313</id><published>2010-01-12T11:56:00.005-05:00</published><updated>2010-01-12T12:17:27.259-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='beyondvc'/><category scheme='http://www.blogger.com/atom/ns#' term='scooter'/><category scheme='http://www.blogger.com/atom/ns#' term='32'/><category scheme='http://www.blogger.com/atom/ns#' term='64'/><category scheme='http://www.blogger.com/atom/ns#' term='bcompare'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Beyond Compare 3 for 64-bit ubuntu linux</title><content type='html'>&lt;p&gt;Last week, I switched my &lt;a href="http://www.xubuntu.org/get"&gt;xubuntu 8.04 (Hardy Heron)&lt;/a&gt; box to &lt;a href="http://www.linuxmint.com/download.php"&gt;Linux Mint 8 (Helena)&lt;/a&gt;, to see how things had evolved in the past 18 months. Unfortunately, I also decided to switch from 32- to 64-bit, and of course not everything works the way it used to.

&lt;p&gt;Luckily, the good folks at &lt;a href="http://www.scootersoftware.com/vbulletin/showthread.php?t=153"&gt;Scooter Software&lt;/a&gt; pointed me to &lt;a href="http://www.scootersoftware.com/vbulletin/showthread.php?t=153"&gt;this hack&lt;/a&gt; to allow their 32-bit Linux flavour of Beyond Compare 3 to find the 32-bit libraries it needs to run.

&lt;p&gt;So, here's an updated version of that hack for &lt;b&gt;ubuntu 9.10 Karmic Koala&lt;/b&gt; or &lt;b&gt;Linux Mint 8 Helena&lt;/b&gt;:

&lt;p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://packages.ubuntu.com/karmic/i386/libqt3-mt/download"&gt;Download&lt;/a&gt; the &lt;a href="http://packages.ubuntu.com/karmic/libqt3-mt"&gt;i386 libqt3-mt&lt;/a&gt; .deb package into /tmp

&lt;li&gt;&lt;a href="http://www.scootersoftware.com/download.php"&gt;Download&lt;/a&gt; the &lt;a href="http://www.scootersoftware.com/BCompareLinux-3.1.9.11282_i386.deb"&gt;latest Beyond Compare 3&lt;/a&gt; .deb package into /tmp

&lt;li&gt;&lt;code&gt;$ sudo su&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;pre style="brush:shell"&gt;apt-get install ia32-libs
cd /tmp; dpkg-deb --extract /tmp/libqt3-mt*.deb libqt3-mt
cp -R libqt3-mt/usr/lib/* /usr/lib32; rm -fr /tmp/libqt3-mt
dpkg -i --force-architecture /tmp/BCompareLinux*.deb&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7281494161121818313?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7281494161121818313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7281494161121818313' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7281494161121818313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7281494161121818313'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/01/beyond-compare-3-for-64-bit-ubuntu.html' title='Beyond Compare 3 for 64-bit ubuntu linux'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4191206399642581836</id><published>2010-01-05T12:19:00.002-05:00</published><updated>2010-01-05T12:32:28.041-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commonbuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='bestpractices'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='advice'/><title type='text'>PDE Best Practices : A Noob's Guide To Plugin &amp; Build Health</title><content type='html'>&lt;p&gt;I've drafted a collection of tips for keeping your plugins healthy and your builds green.

&lt;p&gt;Feel free to add to, change, or comment on the list here:

&lt;p&gt;&lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/FAQ/Plugin_Health_And_Best_Practices"&gt;http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/FAQ/Plugin_Health_And_Best_Practices&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4191206399642581836?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4191206399642581836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4191206399642581836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4191206399642581836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4191206399642581836'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2010/01/pde-best-practices-noobs-guide-to.html' title='PDE Best Practices : A Noob&apos;s Guide To Plugin &amp; Build Health'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-9164240917481049915</id><published>2010-01-05T01:11:00.000-05:00</published><updated>2010-01-05T01:11:07.097-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resolution'/><category scheme='http://www.blogger.com/atom/ns#' term='screen'/><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='display'/><category scheme='http://www.blogger.com/atom/ns#' term='xorg'/><title type='text'>Switching monitors with xrandr</title><content type='html'>&lt;p&gt;Sure, there are applets and other GUI tools to do this, but nothing beats the purity of going commando, er, commandline. :) &lt;a href="http://wiki.debian.org/XStrikeForce/HowToRandR12"&gt;Thanks to this article&lt;/a&gt; for the inspiration.
&lt;p&gt;
&lt;blockquote&gt;&lt;pre&gt;# reset 
xrandr --auto

# turn off laptop screen
xrandr --output LVDS --off

# 24" 16x12 on
xrandr --output VGA --mode &lt;b&gt;&lt;a href="http://divbyzero.com/linux/xrandr_enable_external_at_1600.sh.txt"&gt;1600x1200&lt;/a&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;
&lt;blockquote&gt;&lt;pre&gt;# reset 
xrandr --auto

# turn off external screen
xrandr --output VGA --off

# laptop screen on
xrandr --output LVDS --mode &lt;span style="font-weight:bold;"&gt;&lt;a href="http://divbyzero.com/linux/xrandr_enable_laptop_at_1280.sh.txt"&gt;1280x800&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;b&gt;UPDATE, 2010/01/05:&lt;/b&gt;

&lt;p&gt;To enable both screens and force the larger one to include the taskbar:

&lt;blockquote&gt;&lt;pre&gt;# reset 
xrandr --auto

# laptop screen on
xrandr --output LVDS1 --mode 1280x800 --noprimary --pos 1600x0

# 24" 16x12 on
xrandr --output VGA1 --mode 1600x1200 --primary --pos 0x0

# echo current status
xrandr --current
&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-9164240917481049915?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/9164240917481049915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=9164240917481049915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/9164240917481049915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/9164240917481049915'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2008/12/switching-monitors-with-xrandr.html' title='Switching monitors with xrandr'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-748098638805641304</id><published>2009-12-31T02:40:00.006-05:00</published><updated>2009-12-31T02:51:44.798-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='discount'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Discount Fail</title><content type='html'>&lt;p&gt;I'm having a problem w/ a purchase. 

&lt;p&gt;I added a &lt;a href="http://www.piloshop.ca/index.php?main_page=product_info&amp;cPath=3008438_3008443&amp;products_id=470122"&gt;Blackberry Bold compatible 2400mAh battery&lt;/a&gt; to my cart, on sale for 20% off ($24.07).

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SzxVkJtynSI/AAAAAAAAF9U/GVP48er7w9w/s1600-h/blackberry_bold_battery_20percent_off_cart.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SzxVkJtynSI/AAAAAAAAF9U/GVP48er7w9w/s320/blackberry_bold_battery_20percent_off_cart.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5421302131018865954" /&gt;&lt;/a&gt;

&lt;p&gt;On page two, the price was still 20% discounted:

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/SzxVkZTzWQI/AAAAAAAAF9c/QqstCMG67yQ/s1600-h/blackberry_bold_battery_20percent_off_cart2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 88px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/SzxVkZTzWQI/AAAAAAAAF9c/QqstCMG67yQ/s320/blackberry_bold_battery_20percent_off_cart2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5421302135204829442" /&gt;&lt;/a&gt;

&lt;p&gt;On page three of the cart, the price jumped back up to the full $30.09 price. 

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SzxWrdxxy9I/AAAAAAAAF9s/pEUjmt952EU/s1600-h/blackberry_bold_battery_20percent_off_cart3_discount_gone.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 299px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SzxWrdxxy9I/AAAAAAAAF9s/pEUjmt952EU/s320/blackberry_bold_battery_20percent_off_cart3_discount_gone.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5421303356175010770" /&gt;&lt;/a&gt;

&lt;p&gt; So... is this item on sale, or not?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-748098638805641304?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/748098638805641304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=748098638805641304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/748098638805641304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/748098638805641304'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/12/discount-fail.html' title='Discount Fail'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/SzxVkJtynSI/AAAAAAAAF9U/GVP48er7w9w/s72-c/blackberry_bold_battery_20percent_off_cart.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5020314369731025183</id><published>2009-12-04T11:32:00.007-05:00</published><updated>2009-12-04T14:10:23.488-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='maps'/><category scheme='http://www.blogger.com/atom/ns#' term='ci'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='tag'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>Feeding The Right Sources To Your Builds</title><content type='html'>I was recently asked the best approach for how to control the input to one's builds, and while there is no single solution to this that fits all projects, here are two ways you might want to go.

&lt;h3&gt;Freeze Then Branch&lt;/h3&gt;
&lt;p&gt;The current approach for &lt;a href="http://jboss.org/tools.html"&gt;JBoss Tools&lt;/a&gt; development involves continuous nightly builds from trunk until such time as the project is deemed frozen in prep for an upcoming milestone or release candidate. At that time, the trunk is copied to branches/JBossTools-3.1.0.M4, and very little is done to that branch - only urgent tweaks and fixes. A new Hudson job is cloned from the current one, and adjusted to point at the branched sources instead of trunk. The maps are also updated to point at the new source location in SVN.
&lt;p&gt;This allows more nightly builds towards an upcoming &lt;a href="http://jboss.org/tools/download/dev"&gt;stable development milestone&lt;/a&gt;, while new development can continue in parallel in trunk. When the milestone is released, the unneeded job is disabled or removed.
&lt;p&gt;The only issue with this approach is that all plugins, built from the head of a branch (or trunk) are re-versioned w/ the latest timestamp every time they're compiled. Thus upgrading from one 80M update to the next requires another 80M download. To mitigate this, milestones are released only once every month or two.

&lt;h3&gt;Tag And Release&lt;/h3&gt;
&lt;p&gt;The current approach for numerous Eclipse.org projects, such as &lt;a href="http://eclipse.org/gef/"&gt;GEF&lt;/a&gt;, is to develop continuously in HEAD and when a number of changes are ready to be released, a tool such as the &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/R-3.5.1-200909170800/index.php#org.eclipse.releng"&gt;org.eclipse.releng.tools plugin&lt;/a&gt; can be used to, in a single operation, both tag the sources and &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/org.eclipse.gef.releng/maps/gef.map?annotate=1.105&amp;root=Tools_Project"&gt;release those tags into the map file&lt;/a&gt;.
&lt;p&gt;This permits a granular approach to plugin versioning wherein only the plugins which have actually changed are renumbered, and thus incremental updates between releases is possible, and if only a single plugin changes from week to week, only that plugin will be upgraded. 
&lt;p&gt;This approach also allows your adopters to get more stable, weekly updates rather than hourly or ad hoc nightlies which may include incomplete changes. Sure, you can only watch for &lt;b&gt;good builds&lt;/b&gt; in Hudson, but a more predictable schedule makes inter-build communication easier.
&lt;p&gt;The only issue with this approach is that it introduces extra overhead, unless the tag&amp;amp;release process can be automated and run on a (weekly?) schedule. For CVS sources, there is the &lt;a href="http://wiki.eclipse.org/Modeling_Project_Releng/Releasing/Scheduled_Releases"&gt;org.eclipse.releng.tools.tagandrelease crontab script available&lt;/a&gt;; for SVN, no such script (yet) exists. Want to help? See &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=264713"&gt;bug 264713&lt;/a&gt;.

&lt;h3&gt;Hybrid Approach&lt;/h3&gt;
&lt;p&gt;With &lt;a href="http://wiki.eclipse.org/Category:Athena_Common_Build"&gt;the Athena Common Build&lt;/a&gt;, you can set up a &lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/"&gt;Hudson job&lt;/a&gt; to run from &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.gef/org.eclipse.gef.releng/maps/gef.map?annotate=1.105&amp;root=Tools_Project"&gt;tagged maps&lt;/a&gt;, but also override those tags &lt;i&gt;on demand&lt;/i&gt; to force a build from head (or trunk) instead of from the specific repo tags.
&lt;p&gt;To do so, pass in the following flags to EXTRAFLAGS via your build's job configuration / parameters. To build from the workspace's sources instead of fetching anything new from the repo (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=252774"&gt;bug 252774&lt;/a&gt;):

&lt;p&gt;&lt;code&gt;-localSourceCheckoutDir /opt/users/hudsonbuild/.hudson/jobs/${JOB_NAME}/workspace/&lt;/code&gt;

&lt;p&gt;To fetch from the repo, but ignore tags (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=251926"&gt;bug 251926&lt;/a&gt;):

&lt;p&gt;&lt;code&gt;-forceContextQualifier -fetchTag HEAD&lt;/code&gt; 
&lt;p&gt;Or, like many projects on &lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/"&gt;build.eclipse.org&lt;/a&gt; have done, set up two jobs: one for nightly from trunk, and one for weekly integration from maps. Then instead of doing CI builds when you remember to, they will run automatically &lt;i&gt;when the repo changes&lt;/i&gt; so you'll have immediate feedback when something has broken. Add email, IRC, or &lt;a href="http://www.twitter.com/nickboldt"&gt;Twitter&lt;/a&gt; notification to the job, and everyone else will know too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5020314369731025183?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5020314369731025183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5020314369731025183' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5020314369731025183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5020314369731025183'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/12/feeding-right-sources-to-your-builds.html' title='Feeding The Right Sources To Your Builds'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5603821932947012700</id><published>2009-11-27T00:57:00.005-05:00</published><updated>2009-11-27T12:02:28.693-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='macosx'/><title type='text'>Dash Athena: More Ant, More Tests, More Repos!</title><content type='html'>&lt;ul&gt;&lt;li&gt; Infrastructure Changes
&lt;/li&gt;&lt;/ul&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295394" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295394" rel="nofollow"&gt;bug 295394&lt;/a&gt; - Headless UI tests are broken on build.eclipse.org! &lt;b&gt;&lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/FAQ#My_build_used_to_work_but_now_headless_UI_tests_are_broken.21" title="Common Build Infrastructure/Getting Started/FAQ"&gt;See workaround here&lt;/a&gt;.&lt;/b&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;ul&gt;&lt;li&gt; Cross-Platform / Ease of Use
&lt;/li&gt;&lt;/ul&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282987" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282987" rel="nofollow"&gt;bug 282987&lt;/a&gt; Can now define Eclipse platform as a p2 repo + required features/plugins. Can also use platform, SDK, or RCP zip, as before. See also &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Defining_Binary_Dependencies#Update_Sites" title="Common Build Infrastructure/Defining Binary Dependencies"&gt;Defining Binary Dependencies&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292589" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292589" rel="nofollow"&gt;bug 292589&lt;/a&gt; Support &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Ant_Job" title="Common Build Infrastructure/Getting Started/Build In Hudson/Ant Job"&gt;building from Ant in Hudson&lt;/a&gt; (instead of via &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Bash_Job" title="Common Build Infrastructure/Getting Started/Build In Hudson/Bash Job"&gt;Bash script&lt;/a&gt;)
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295670" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295670" rel="nofollow"&gt;bug 295670&lt;/a&gt; Support &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Testing" title="Common Build Infrastructure/Testing"&gt;running JUnit tests&lt;/a&gt; run from Ant script instead of Bash - tests can now be run on Linux and Windows (and to a lesser extent on &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268420" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=268420" rel="nofollow"&gt;Mac OSX&lt;/a&gt;) using new &lt;code&gt;testLocal&lt;/code&gt; build step
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;ul&gt;&lt;li&gt; Bug Fixes
&lt;/li&gt;&lt;/ul&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292486" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292486" rel="nofollow"&gt;bug 292486&lt;/a&gt; Allow builds to fail if unit tests fail using &lt;code&gt;failBuildIfTestFailuresOrErrors=true&lt;/code&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294678" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=294678" rel="nofollow"&gt;bug 294678&lt;/a&gt; Categories don't show up with IBM 1.6 JDK - implemented workaround so a different JDK can be used for p2 operations than for compilation of sources: use &lt;code&gt;PACK200_JAVA_HOME=/path/to/different/JDK&lt;/code&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295773" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=295773" rel="nofollow"&gt;bug 295773&lt;/a&gt; Non-incubating projects no longer need to set "incubation=" in their build.properties
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292235" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=292235" rel="nofollow"&gt;bug 292235&lt;/a&gt; Included pre-compiled binary features/plugins are now included by default using PDE's runPackager property; can disable this behaviour with &lt;code&gt;packageFeaturesIncludedBinaries=false&lt;/code&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;ul&gt;&lt;li&gt; Documentation
&lt;/li&gt;&lt;/ul&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Testing" title="Common Build Infrastructure/Testing"&gt;Testing&lt;/a&gt; - Different ways to run or re-run tests, including as a secondary process after a build (so they can be run on a different platform or by a different user)
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Defining_Binary_Dependencies" title="Common Build Infrastructure/Defining Binary Dependencies"&gt;Defining Binary Dependencies&lt;/a&gt; - All four types of repos are now currently supported: remote zip, remote site, local zip, local site.
&lt;/li&gt;&lt;/ul&gt;
&lt;dl&gt;&lt;dd&gt;&lt;i&gt;p2 does not natively support remote repo zips; to workaround this the zip is fetched and the URL is rewritten from &lt;code&gt;http://path/to/foo.zip&lt;/code&gt; to &lt;code&gt;jar:file:/tmp/path/foo.zip!/&lt;/code&gt;&lt;/i&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Ant_Job" title="Common Build Infrastructure/Getting Started/Build In Hudson/Ant Job"&gt; Build In Hudson - Ant Job&lt;/a&gt;,  &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Ant_Script" title="Common Build Infrastructure/Getting Started/Build In Hudson/Ant Script"&gt; Ant Script&lt;/a&gt; - new, simpler way to run builds in Hudson using pure Ant
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;
&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Hudson/Bash_Job" title="Common Build Infrastructure/Getting Started/Build In Hudson/Bash Job"&gt;Build In Hudson - Bash Job&lt;/a&gt; - updated &amp;amp; refactored
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p align="right"&gt;&lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report"&gt;Previous New &amp; Noteworthy&lt;/a&gt; | &lt;a href="http://wiki.eclipse.org/Category:Athena_Common_Build"&gt;More Athena Docs&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5603821932947012700?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5603821932947012700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5603821932947012700' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5603821932947012700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5603821932947012700'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/11/dash-athena-more-ant-more-tests-more.html' title='Dash Athena: More Ant, More Tests, More Repos!'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8289341268229227380</id><published>2009-10-19T16:58:00.003-04:00</published><updated>2009-10-19T17:12:03.736-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='shamwow'/><category scheme='http://www.blogger.com/atom/ns#' term='slapchop'/><title type='text'>Ontario [GNU] Linux Fest 2009</title><content type='html'>&lt;p&gt;Annoyed that your boss didn't approve that expense to fly over to &lt;a href="http://www.eclipsecon.org/summiteurope2009/"&gt;Germany for Eclipse Summit Europe&lt;/a&gt;? Well, fret no more!

&lt;p&gt;Have we got a deal for you! 
&lt;p&gt;
&lt;iframe src ="http://www.onlinux.ca/files/OLF480x60.html" style="margin: 0 0 0 0;width: 480px; height: 60px"
scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;
&lt;a href="http://www.onlinux.ca" target="olf"&gt;
&lt;img src="http://www.onlinux.ca/files/OLF480x60.jpg" alt="Ontario GNU Linux Fest 2009. Register Now!" &gt;
&lt;/a&gt;
&lt;/iframe&gt;

&lt;p&gt;For only $40 you can &lt;a href="http://onlinux.ca/olfreg"&gt;attend Ontario [GNU] Linux Fest 2009&lt;/a&gt; - a whole day of open source geekery from the following &lt;a href="http://onlinux.ca/speakers"&gt;speakers&lt;/a&gt;! And, while there, stop by the Eclipse and Fedora tables for your chance to win some schwag! 

&lt;p&gt;I'd like to say we'll be giving away Slap-Chops or Sham-Wows too, but &lt;a href="http://video.google.ca/videosearch?client=opera&amp;rls=en&amp;q=youtube+vince+slapchop&amp;sourceid=opera&amp;oe=utf-8&amp;um=1&amp;ie=UTF-8&amp;ei=69TcSseEH8O2lAfNjYWiAQ&amp;sa=X&amp;oi=video_result_group&amp;ct=title&amp;resnum=1&amp;ved=0CBAQqwQwAA#"&gt;Vince will be rappin' &amp;amp; reppin' elsewhere&lt;/a&gt;. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8289341268229227380?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8289341268229227380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8289341268229227380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8289341268229227380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8289341268229227380'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/10/ontario-gnu-linux-fest-2009.html' title='Ontario [GNU] Linux Fest 2009'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-67229159207352376</id><published>2009-10-19T00:28:00.006-04:00</published><updated>2009-10-19T01:59:08.656-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>HOWTO: Join Architecture Council, Break Hudson, Break Athena</title><content type='html'>&lt;P&gt;About a week ago, &lt;a href="http://http://dev.eclipse.org/blogs/wayne/"&gt;Wayne Beaton&lt;/a&gt; approached me with an unexpected question: would I like to be drafted into the rank and file of the &lt;a href="http://www.eclipse.org/projects/dev_process/development_process.php#4_8_Councils"&gt;Eclipse Architecture Council&lt;/a&gt;?

&lt;P&gt;I was honoured. Flabbergasted. And a bit apprehensive: could I measure up?

&lt;P&gt;Well, it seems my first act as an AC member was, Thursday night, &lt;a href="http://bugs.eclipse.org/292476"&gt;to cripple our shared Hudson build server&lt;/a&gt; by dumb-assedly performing a seemingly innocuous update. Heartfelt thanks to the Webmasters for once again extracting my cheeks from the fire and getting everyone's builds back up and running.

&lt;P&gt;My second act, Friday afternoon, was to commit some "fixes" to the
Athena Common Build code which effectively prevented it from reading
your project's build.properties. Thankfully, the ever-vigilant &lt;a href="http://intellectualcramps.blogspot.com/"&gt;Dave
Carver&lt;/a&gt; spotted the snafu, filed a bug, and I had it my error fixed
shortly after my return from &lt;a href="http://http://www.imdb.com/title/tt1156398/"&gt;Zombieland&lt;/a&gt; last night (aside: best
zom-rom-com since &lt;a href="http://www.imdb.com/title/tt0365748/"&gt;Shaun Of The Dead&lt;/a&gt;!)

&lt;P&gt;Thanks to Matt, Dave C, David W, Denis, Gunnar, and everyone else for reporting &amp;/or fixing these issues, and to the AC for welcoming me into their fold. It's going to be interesting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-67229159207352376?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/67229159207352376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=67229159207352376' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/67229159207352376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/67229159207352376'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/10/howto-join-architecture-council-break.html' title='HOWTO: Join Architecture Council, Break Hudson, Break Athena'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2011318351842235693</id><published>2009-10-13T20:00:00.001-04:00</published><updated>2009-10-13T19:57:36.439-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='dash'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Dash Athena News, Oct 2009</title><content type='html'>&lt;p&gt;Have you heard &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report#2009-10-13"&gt;the latest&lt;/a&gt;? Here's what's been going on in the Dash Athena project lately. 

&lt;h4&gt;Infrastructure Changes&lt;/h4&gt;

&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; There are now &lt;b&gt;43 Athena jobs&lt;/b&gt; on &lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/" class="external text" title="https://build.eclipse.org/hudson/view/Athena%20CBI/" rel="nofollow"&gt;build.eclipse.org&lt;/a&gt;! Of those, &lt;b style="color:green"&gt;30 are green&lt;/b&gt;, &lt;b style="color:orange"&gt;1 is yellow&lt;/b&gt;, and 6 have not yet been enabled. These jobs represent &lt;b&gt;29 different projects'&lt;/b&gt; builds! &lt;b&gt;6 of them use SVN&lt;/b&gt; sources instead of CVS. 
&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257074#c12" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257074#c12" rel="nofollow"&gt;bug 257074 comment 12&lt;/a&gt; build.eclipse.org now has SVN 1.6.5; if your map files no longer work (your build complains it can't resolve plugin or features sources) then &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257074#c12" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=257074#c12" rel="nofollow"&gt;read this&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;h4&gt;New Features&lt;/h4&gt;

&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291446" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291446" rel="nofollow"&gt;bug 291446&lt;/a&gt; Provide hook for extra actions after fetching code from repo and before compiling it (e.g. code generation, parser generators, etc.)
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt; &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275529" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=275529" rel="nofollow"&gt;bug 275529&lt;/a&gt; Athena is now a full Project rather than a Component! Now if we could just get &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272723" class="external text" title="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272723" rel="nofollow"&gt;someone to design a logo&lt;/a&gt;... Do I need to offer up prizes? I will, if you comment on &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=272723"&gt;bug 272723&lt;/a&gt; with some design ideas (or prize ideas).
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;h4&gt;Better Documentation&lt;/h4&gt;

&lt;dl&gt;&lt;dd&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://wiki.eclipse.org/MoDisco/Releng/How_to_Use#Building_on_Windows" title="MoDisco/Releng/How to Use"&gt;Tips for Building on Windows&lt;/a&gt; - community contributed! Thanks to Nicolas Bros!
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt; New category created for User-contributed build stories: &lt;a href="http://wiki.eclipse.org/Category:Athena_Common_Build_Users" title="Category:Athena Common Build Users"&gt;Category:Athena Common Build Users&lt;/a&gt;
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt; Athena bugs moved from &lt;code style="color:red"&gt;product=Dash&amp;amp;component=Common+Builder&lt;/code&gt; to &lt;code style="color:green"&gt;product=Dash+Athena&lt;/code&gt;. &lt;a href="https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;classification=Technology&amp;product=Dash+Athena&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=&amp;emailtype1=substring&amp;email1=&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;chfieldfrom=1w&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0="&gt;Here's what's changed this week&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/dd&gt;&lt;/dl&gt;

&lt;p&gt;See also &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report"&gt;Older New &amp; Noteworthy&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2011318351842235693?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2011318351842235693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2011318351842235693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2011318351842235693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2011318351842235693'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/09/dash-athena-update.html' title='Dash Athena News, Oct 2009'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4029408339708201514</id><published>2009-09-10T12:04:00.002-04:00</published><updated>2009-09-10T12:06:37.802-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zimbra'/><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='bes'/><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>HOWTO: Enable Zimbra filtered message folders on Blackberry w/ BES service</title><content type='html'>Thanks to the folks at my IT helpdesk for this tip on how to enable your BB to get mail from within Zimbra folders:
&lt;p&gt;
&lt;ol&gt;&lt;li&gt;Go to your Messages folder, hit menu key and select Options.

&lt;li&gt;Go to Email Settings. Hit menu button, select Folder Redirection.

&lt;li&gt;You will see your mailbox which can be expanded. Expand your inbox and select the folders you want to be sync'd (on my device they're blue instead of grey). Hit menu button, select Save. 
&lt;/ol&gt;
&lt;p&gt;
Any NEW messages routed to those folders will now be located in the folders on the device as well. As new messages, they'll appear in your Messages folder along with SMSs, MMSs, BBIMs, and other email. Once read, they'll disappear into the appropriate folder(s).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4029408339708201514?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4029408339708201514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4029408339708201514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4029408339708201514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4029408339708201514'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/09/howto-enable-zimbra-filtered-message.html' title='HOWTO: Enable Zimbra filtered message folders on Blackberry w/ BES service'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7684957702809126123</id><published>2009-09-07T23:46:00.006-04:00</published><updated>2009-09-08T00:41:24.294-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='jarprocessor'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='packaging'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='dash'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='javahl'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='svnkit'/><category scheme='http://www.blogger.com/atom/ns#' term='pack200'/><category scheme='http://www.blogger.com/atom/ns#' term='b3'/><title type='text'>Re-Return to Athena</title><content type='html'>&lt;p&gt;Thanks to &lt;a href="http://milesparker.blogspot.com/2009/09/return-to-athena.html"&gt;Miles&lt;/a&gt; for taking the time to slap Athena into submission on his local system - frequent and regular stress testing is what's going to make this facade over PDE bridge the gap between today and the far-flung future (namely &lt;a href="http://wiki.eclipse.org/PDE/Incubator/b3/Proposal"&gt;B3&lt;/a&gt;).

&lt;p&gt;Because he took the time to itemize his concerns / problems / gotchas, I thought I'd take the time to explain why these happen... and which are bugs vs. features. Speaking of bugs and features, Athena has a handy &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report"&gt;New &amp;amp; Noteworthy wiki page&lt;/a&gt; which I update about once a month. If you've never seen the N&amp;N, &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report"&gt;it's here&lt;/a&gt;. 

&lt;blockquote&gt;# skipPack=true is useful if you want to test locally. I found that the update manager does not work with pak'd jars when running locally. Perhaps P2 is relying on something on the web server side..?&lt;/blockquote&gt;

If p2 isn't properly unpacking pack'd jars, the problem is either: you're using a JDK with pack200 bugs (like Sun 1.6), or you have jars which should never be packed. How can you exclude jars from packing? See &lt;a href="http://wiki.eclipse.org/JarProcessor_Options"&gt;JarProcessor Options&lt;/a&gt;.

&lt;blockquote&gt;# The build scripts appear to be simply searching for the occurrence of strings to determine wether a given map entry type is being used. They do not appear to respect the comment lines. I guess I should file a bug report on this one -- it cost a bit of time because I have a dodgy SVN setup on my home laptop. I'm actually still not sure what is going on with that (and does the mysterious Java 134 error msg have anything to do with it) but I'm trying to learn not to fix things for which I have a work-around, i.e. if ti works on a different machine, just use that instead!&lt;/blockquote&gt;

The purpose of the &lt;code&gt;collectMapTypes&lt;/code&gt; task is to simply know what types of maps are being used so that warnings can be echoed to the user if appropriate. If you use SVN on linux, there's a good chance you'll get this message:

&lt;pre class="brush:bash"&gt;[echo] If you get a SIGSEGV or Java Result: 134 when fetching from SVN, remove 
[echo] subversion-javahl and svnkit to force PDE to use commandline svn client.&lt;/pre&gt;

Why? Because it's a pain in the butt to debug, and at least having a message in the build log gives you some tea leaves to read. I favour documentation over performance in this case.

&lt;blockquote&gt;# There is a somewhat lengthy description at http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started of how to setup your local build to use a local cache CVS site but I'm not sure what scenario that would really be helpful in. I just use COPY and it works fine. I suppose that using the CVS approach might excercie some issues that you wouldn't run into with a plain COPY. And I'm not sure wether the local build copies over the binary files or not. If it does, you could get different build results if say your local environment happens to place some artifacts in the copied directories that aren't cleaned out by the PDE build. Not going to worry about it!&lt;/blockquote&gt;

A more useful scenario is to take a dump of a CVS, SVN, or Git tree, and point your build at that folder using &lt;code&gt;localSourceCheckoutDir=/path/to/full/source/tree/root&lt;/code&gt; in your build.properties file. Then it'll build against that local source cache instead of having to fetch from the repo. Once you have the dump of the repo, from Eclipse do File &gt; Import &gt; Existing projects, and you can have those same projects compilable/editable in your workspace. You can also use Eclipse (eg., with Subversive, Subclipse, eGit) to update the cache before doing a build.

&lt;blockquote&gt;# A useful hack when building locally is to pack up your difficult dependency(s) into a zip file and refer to them in your dependencyURL. It doesn't matter what you use for the URL, because it will use the cached file instead. For example, GEF3D doesn't yet have a build or update site. (We've been collaborating a bit on this so hopefully the build I've got working will help them get one up soon.) So instead of solving the the SVN stuff right away, I put that off until everything else worked. So I created a zip and added an entry for http://download.eclipse.org/tools/gef/fake/gef3d.zip. You have to be careful to have your zip file packaged up correctly or it won't work. That's easy to get wrong..your file structure needs to conform to the standard structure, i.e. eclipse/plugins/some.plugin. On the other hand, you have to be careful to remove these fake dependencies when you begin testing the real fetched versions! The fetch part then fails silently; your build succeeds but using the previously downloaded files.&lt;/blockquote&gt;

I generally add comments (TODO, FIXME) in my build.properties to mark temporary hacks, or use a new file, like build.properties.local.hack so I'm not breaking the server-friendly version. (Just make sure you tell build.xml which build.properties file to use, if not the default one -- and DON'T CHECK IN the changed file.)

&lt;blockquote&gt;# But in any case getting the SVN map file right has been a major headache. Again, the only reason I want this is to grab the GEF3D sources, but I can't seem to let this one go as it seems that it should be so easy. The Athena build seems to mangle things in the fetch script; or perhaps this is a PDE Build issue. So I tried the sourceforge style entry and after a couple of hours of fiddling (see below) I found a magic incantation that seems to work -- plugin@org.eclipse.draw3d=SVN,trunk,http://dev.eclipse.org/svnroot/technology/org.eclipse.gef3d,,org.eclipse.draw3d@HEAD&lt;/blockquote&gt;

@HEAD is optional; you only need to specify a tag if it's not the HEAD of the branch or trunk. Here's a &lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/jmx/releng/maps/project.map"&gt;sample SVN map&lt;/a&gt;.

&lt;blockquote&gt;# It would be super nice if there were a built-in dependency analyzer so that one could find the root plugin issues easily. As it is, if you have a bad dependency you get the whole tree and you have to walk the tree by hand to find out the root cause. Overall I think this is another demonstration of the ultimate weakness of the standard build systems out there. They are by nature linear (batch) approaches and so usually you can't do post hoc or inline analysis of issues. There is no semantic information in logs! You end up having to parse them back if you want to do any useful analysis. In a parallel lifetime, I would love to work on a simple semantic logging system that would allow structured analysis of this sort.&lt;/blockquote&gt;

I believe the Buckminster guys are doing work in this area, so this may make its way into &lt;a href="http://wiki.eclipse.org/PDE/Incubator/b3/Proposal"&gt;B3&lt;/a&gt;.

&lt;blockquote&gt;# Here is something else that I would love to do given time. The map files are pretty well structured - it would be nice to whip up a quick XText editor that would at least check syntax and more ambitiously provide a mechanism for hooking in semantic checks -- wouldn't it be nice if you could check that that SVN url is correct while editing the map file itself?!&lt;/blockquote&gt;

Add that to the wishlist for &lt;a href="http://wiki.eclipse.org/PDE/Incubator/b3/Proposal"&gt;B3&lt;/a&gt;!

&lt;blockquote&gt;# I'm still not sure how Athena determines what goes in the sdk vs. runtime vs. example zips so for now I'm just building the examples manually. Anyone come across documentation for this?&lt;/blockquote&gt;

This arbitrary allocation of files is done in &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/buildAllHelper.xml?view=annotate&amp;root=Technology_Project"&gt;common.releng/tools/scripts/buildAllHelper.xml&lt;/a&gt;, lines 1063-1097, and is only done if the build.steps entry 'buildZips' is enabled. This behaviour is as far as I'm concerned deprecated, but in place simply to ease transition for existing builds using the old Common Modeling Build to the Athena Common Build. IMHO, no one needs these zips - you only need an update site zip. If you don't like what's in the zips, you can omit the 'buildZips' step and package your own zips by hand, eg:

&lt;pre class="brush:xml"&gt;
 &amp;lt;zip destfile="${buildDirectory}/${buildLabel}/${SDKZip}" update="true"&gt;
   &amp;lt;zipfileset src="${buildDirectory}/${buildLabel}/${allZip}" dirmode="775" filemode="664" excludes="**/*.pack.gz, **/pack.properties, **/features/*.jar, **/${domainNamespace}.*.all*, **/${domainNamespace}.*.all*/**" /&gt;
 &amp;lt;/zip&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;i&gt;(For those unfamiliar with the story of the &lt;a href="http://www.tv.com/how-i-met-your-mother/game-night/episode/617765/recap.html?tag=episode_recap;recap"&gt;&lt;b&gt;Re-Return&lt;/b&gt;&lt;/a&gt;, you need to watch &lt;a href="http://www.imdb.com/title/tt0606107/quotes"&gt;HIMYM&lt;/a&gt;, S1E15.)&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7684957702809126123?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7684957702809126123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7684957702809126123' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7684957702809126123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7684957702809126123'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/09/re-return-to-athena.html' title='Re-Return to Athena'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1509243153273196112</id><published>2009-09-06T17:38:00.006-04:00</published><updated>2009-09-06T17:44:26.508-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='opera10'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><title type='text'>Opera 10 as Hudson Helper</title><content type='html'>As there's still no &lt;a href="http://greensopinion.blogspot.com/2009/05/hudson-helper-hudson-on-your-iphone.html"&gt;Hudson Helper&lt;/a&gt; for Blackberry (&lt;a href="http://greensopinion.blogspot.com/2009/06/hudson-helper-for-android.html"&gt;David&lt;/a&gt;: hint, hint!), I've been forced to do my own monitoring in a browser (when not monitoring by email, that is). 

&lt;p&gt;Now, with Opera 10 (and its new tab layout options), it's even easier to monitor multiple builds via a single view:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SqQsIXENeYI/AAAAAAAAFgY/FBGpgLqslHE/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 234px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SqQsIXENeYI/AAAAAAAAFgY/FBGpgLqslHE/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5378472377129466242" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1509243153273196112?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1509243153273196112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1509243153273196112' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1509243153273196112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1509243153273196112'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/09/opera-10-as-hudson-helper.html' title='Opera 10 as Hudson Helper'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/SqQsIXENeYI/AAAAAAAAFgY/FBGpgLqslHE/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6153546168989600078</id><published>2009-08-27T01:24:00.007-04:00</published><updated>2009-08-28T02:33:19.831-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='growisofs'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='multiple'/><category scheme='http://www.blogger.com/atom/ns#' term='xvid'/><category scheme='http://www.blogger.com/atom/ns#' term='transcode'/><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='avi'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='mjpegtools'/><category scheme='http://www.blogger.com/atom/ns#' term='mplex'/><category scheme='http://www.blogger.com/atom/ns#' term='xine'/><category scheme='http://www.blogger.com/atom/ns#' term='dvdauthor'/><title type='text'>HOWTO: AVI to DVD Conversion, Part 2: Merging Multiple AVIs</title><content type='html'>&lt;a href="http://divby0.blogspot.com/2009/05/howto-avi-to-dvd-conversion.html"&gt;Converting a single AVI to DVD format is easy&lt;/a&gt;.

&lt;p&gt;However, if you want to merge multiple files into a single DVD image, you must:

&lt;ul&gt;&lt;li&gt;Convert the AVI files to MPEG:

&lt;pre class="brush:shell"&gt;for f in $(ls /path/to/season1/{GI_Joe.S1E0*.avi,GI_Joe.S1E1*.avi,GI_Joe.S1E2{0,1,2,3}*.avi}); do \
  g=${f/.avi/.mpg}; g=${g/season1/season1_mpg}; \
  transcode -i $f -y ffmpeg --export_prof dvd-ntsc --export_asr 3 -o movie \
    -D0 -s2 -m movie.ac3 -J modfps=clonetype=3 --export_fps 29.97; \
  mplex -f 8 -o $g  movie.m2v movie.ac3; \
  rm -fr movie.m2v movie.ac3; \
done; \
cd /path/to/season1_mpg&lt;/pre&gt;

&lt;li&gt;Next, using a more complex dvdauthor.xml file...

&lt;pre class="brush:xml"&gt;&amp;lt;dvdauthor dest="DVD_Season1_Ep01-05"&gt;
  &amp;lt;vmgm /&gt;
  &amp;lt;titleset&gt;
     &amp;lt;titles&gt;
       &amp;lt;pgc&gt;
         &amp;lt;vob file="GI_Joe.S1E01.The_Further_Adventures_of_G.I.Joe.mpg" chapters="0,8:00,16:00,21:00"/&gt;
         &amp;lt;vob file="GI_Joe.S1E02.Rendezvous_in_the_City_of_the_Dead.mpg" chapters="0,8:00,16:00,21:00"/&gt;
         &amp;lt;vob file="GI_Joe.S1E03.Three_Cubes_to_Darkness.mpg" chapters="0,8:00,16:00,21:00"/&gt;
         &amp;lt;vob file="GI_Joe.S1E04.Chaos_in_the_Sea_of_Lost_Souls.mpg" chapters="0,8:00,16:00,21:00"/&gt;
         &amp;lt;vob file="GI_Joe.S1E05.Knotting_Cobras_Coils.mpg" chapters="0,8:00,16:00,21:00"/&gt;
       &amp;lt;/pgc&gt;
     &amp;lt;/titles&gt;
  &amp;lt;/titleset&gt;
&amp;lt;/dvdauthor&gt;&lt;/pre&gt;

...merge the MPEG files into a single disc image: 

&lt;pre class="brush:shell"&gt;dvdauthor -x dvdauthor_s1e01-05.xml&lt;/pre&gt;

&lt;li&gt;Verify the video and audio will play.
&lt;pre class="brush:shell"&gt;xine dvd:/full/path/to/DVD_Season1_Ep01-05&lt;/pre&gt;

&lt;li&gt;Burn the DVD. 
&lt;pre class="brush:shell"&gt;growisofs -Z /dev/dvd1 -dvd-video DVD_Season1_Ep01-05/&lt;/pre&gt;

&lt;/ul&gt;

&lt;p&gt;Yo, Joe!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6153546168989600078?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6153546168989600078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6153546168989600078' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6153546168989600078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6153546168989600078'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/08/howto-avi-to-dvd-conversion-part-2.html' title='HOWTO: AVI to DVD Conversion, Part 2: Merging Multiple AVIs'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5888627492716271851</id><published>2009-08-13T16:46:00.002-04:00</published><updated>2009-08-13T17:00:40.999-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='galileo'/><category scheme='http://www.blogger.com/atom/ns#' term='repo'/><category scheme='http://www.blogger.com/atom/ns#' term='buckminster'/><category scheme='http://www.blogger.com/atom/ns#' term='ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><title type='text'>We Don't Need Another Repo</title><content type='html'>&lt;P&gt;Re &lt;A href="http://dev.eclipse.org/blogs/wayne/2009/08/13/eclipse-maven-repository/"&gt;Wayne's blog about an Eclipse.org Maven Repo&lt;/a&gt;:

&lt;P&gt;EMF has had an undocumented/unmarketed Maven2 repo for about 4 years now. 

&lt;P&gt;All you need is to take an update site zip, unpack it, rearrange the folder structure, and rename the jars. Then you create little XML files called .poms to describe the jars in the tree, and Maven-aware tools can read the tree. It's fairly trivial. http://download.eclipse.org/modeling/emf/emf/maven2/ is the URL, IIRC. About once every 2 years someone asks about our providing such a repo, and I give out the URL. Clearly not a huge demand for it. 

&lt;P&gt;One might argue that creation of such a folder structure is in the purview of Athena's publishing scripts, which today eases the process of copying your bits to download.eclipse.org, then unpacks your Update site so it can be scanned by p2 rather than downloaded as a single archive. It too is fairly trivial. I would not be adverse to converting my existing shell script for the EMF repo creation into a generic Ant script for use by Athena users.
 
&lt;P&gt;Frankly though, I think it would be more valuable if the m2eclipse folks added support for reading/converting p2 repos. Publishing yet another file format would require another release-train-like workflow (we already have two: EPP and buckybuilder for Galileo) and more people maintain it. Even if every project published their own maven repo, we'd want for the sake of ease of use to aggregate them into a central place for easier navigation and discovery by maven tools. So, like with Ganymede, we'd have each project's bits copied to two places on disk for each build. (Galileo used composite repos to POINT at project repos rather than copying them saving tons of disk space and CPU cycles. AFAIK, Maven does not support this concept, but I could be wrong.)

&lt;P&gt;There's also another benefit to having tooling to support converting from p2 repo to maven2 repo: the aggregate repo could be housed at apache.org and suck THEIR bandwidth and support resources instead. Thus just as Eclipse.org is upstream from Fedora's Eclipse project .rpms (which are upstream from Debian/Ubuntu's .debs), Eclipse.org p2 repos could be upstream from Apache's Maven repo(s). After all, Apache already collects maven artifacts for non-apache.org projects to facilitate the use and adoption of maven, so this is entirely in line with their standard operating procedures.

&lt;P&gt;Thoughts?

&lt;P align="right"&gt;&lt;I&gt;Posted from Blackberry using Opera Mini, by the side of Shawnigan Lake, Vancouver Island, BC&lt;/I&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5888627492716271851?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5888627492716271851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5888627492716271851' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5888627492716271851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5888627492716271851'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/08/we-dont-need-another-repo.html' title='We Don&apos;t Need Another Repo'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3673873002792470001</id><published>2009-08-07T13:25:00.004-04:00</published><updated>2009-08-07T13:31:51.498-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>My love-hate with SVN, Part 8: Unprotected &amp; Unhidden Metadata</title><content type='html'>&lt;p align="center"&gt; 
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/Snxj2rr1ekI/AAAAAAAAFEM/LMP9dRESb8A/s1600-h/Screenshot-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 304px; height: 320px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/Snxj2rr1ekI/AAAAAAAAFEM/LMP9dRESb8A/s320/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5367274647009458754" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;small&gt;&lt;i&gt; 
SVN metadata appears when searching
&lt;/i&gt;&lt;/small&gt;

&lt;p&gt;Why would anyone ever want to see .svn folders and their children in Eclipse? If they're hidden from the Package Explorer, why can't I hide them from a Search? And if I did a naive find and replace, wouldn't this corrupt the metadata and prevent me from committing the update to the repo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3673873002792470001?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3673873002792470001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3673873002792470001' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3673873002792470001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3673873002792470001'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/08/my-love-hate-with-svn-part-8.html' title='My love-hate with SVN, Part 8: Unprotected &amp; Unhidden Metadata'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/Snxj2rr1ekI/AAAAAAAAFEM/LMP9dRESb8A/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7302925176698210580</id><published>2009-08-06T22:31:00.007-04:00</published><updated>2009-08-06T23:25:58.182-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='vboxfs'/><category scheme='http://www.blogger.com/atom/ns#' term='mount'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='boot'/><title type='text'>Hudson &amp; Virtual Box, Part 2: Creating a common share with vboxsf</title><content type='html'>My experiment last week with &lt;a href="http://divby0.blogspot.com/2009/07/hudson-virtual-box-creating-common.html"&gt;sshfs&lt;/a&gt; came to a grinding halt when I realized that while the share works, and can be automatically started, the permissions do not work and Hudson can't actually use the sshfs share; also, I couldn't get sshfs to compile for OpenSolaris, so it's really a non-starter.
&lt;p&gt;
Next up was &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man8/mount_nfs.8.html#//apple_ref/doc/man/8/mount_nfs"&gt;&lt;code&gt;mount_nfs&lt;/code&gt;&lt;/a&gt;, but after &lt;a href="http://www.opensourcehowto.org/how-to/fedora/basic-nfs-share-mount-auto-mount.html"&gt;fighting&lt;/a&gt; with that, &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man5/nfs.conf.5.html#//apple_ref/doc/man/5/nfs.conf"&gt;&lt;code&gt;/etc/nfs.conf&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/Manpages/man5/exports.5.html#//apple_ref/doc/man/5/exports"&gt;&lt;code&gt;/etc/exports&lt;/code&gt;&lt;/a&gt; for a couple days off and on, I realized there's a much simpler solution using Virtual Box itself: &lt;a href="http://www.google.ca/search?hl=en&amp;client=firefox-a&amp;rls=org.mozilla:en-US:official&amp;hs=QOG&amp;ei=K517SpfiGor8tgf1_LX-AQ&amp;sa=X&amp;oi=spell&amp;resnum=0&amp;ct=result&amp;cd=1&amp;q=vboxsf&amp;spell=1"&gt;&lt;code&gt;vboxsf&lt;/code&gt;&lt;/a&gt;. &lt;i&gt;Note that it's sf (shared folder) not fs (file system).&lt;/i&gt;

&lt;p&gt;Thanks to &lt;a href="http://davidherron.com/blog/topics/628-virtualbox-running-ubuntu-accessing-host-file-system-mac-os-x"&gt;David Herron&lt;/a&gt; for the inspiration.
&lt;p&gt;
Here's how to set up a vboxfs share:
&lt;ol&gt;
&lt;li&gt;Ignore the &lt;a href="http://www.virtualbox.org/wiki/User_HOWTOS"&gt;Virtual Box wiki&lt;/a&gt; which &lt;a href="http://www.virtualbox.org/wiki/Sharing_files_on_OSE"&gt;suggests that you can't just use a Shared Folder&lt;/a&gt;: you can.

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: Launch your guest, then &lt;a href="http://forums.virtualbox.org/viewtopic.php?f=3&amp;t=15679"&gt;install the Virtual Box Guest Additions&lt;/a&gt; onto it.

&lt;li&gt;&lt;b style="color:red"&gt;Host&lt;/b&gt;: Create a user and set its uid and gid to some value which can be created on the guest / slave. For example, on Mac OSX 10.5 Server, launch &lt;code&gt;System Preferences &gt; System &gt; Accounts&lt;/code&gt;, and create a "hudsonbuild" user with User ID and Group ID set to 500.

&lt;blockquote&gt;&lt;i&gt;Note that uid 500 and gid 500 are the defaults for the first user on a Fedora system; on Ubuntu it's 1000; on other systems YMMV. &lt;/i&gt;&lt;/blockquote&gt;

&lt;li&gt;&lt;b style="color:red"&gt;Host&lt;/b&gt;: Create a folder in the root of your host called &lt;code&gt;/shared&lt;/code&gt;. Put some files there. Give it full write permissions, and set its ownership to the user who'll be sharing the files:
&lt;pre class="brush:shell"&gt;find /shared -type f -exec chmod 666 \;
find /shared -type d -exec chmod 777 \;
chown -R 500:500 /shared&lt;/pre&gt;

&lt;li&gt;&lt;b style="color:red"&gt;Host&lt;/b&gt;: Add a Shared Folder. &lt;b&gt;NOTE:&lt;/b&gt; &lt;i&gt;If your guest is running, shut it down or see the next item.&lt;/i&gt; From the Virtual Box GUI (on the host), select &lt;code&gt;Settings &gt; Shared Folders &gt; New (+)&lt;/code&gt;. Add a shared folder called "shared" mapped to &lt;code&gt;/shared&lt;/code&gt; (or call it something else and map it to a different path on your host).

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: Alternatively, you can add a Shared Folder to a running guest from its &lt;code&gt;Devices&lt;/code&gt; menu. Add a shared folder called "shared" mapped to &lt;code&gt;/shared&lt;/code&gt;.

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: As root, create a folder on the guest called /shared. Leave it empty, but make sure it's owned by your user.

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: As root, add this to the guest's /etc/fstab:
&lt;pre class="brush:shell"&gt;shared  /shared vboxsf  auto,exec,rw,uid=500,gid=500    0       0&lt;/pre&gt;

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: As root, mount the share one of three ways:

&lt;pre class="brush:shell"&gt;
# mount everything in /etc/fstab
mount -a

# mount using mount (and optional -o options)
mount -t vboxfs -o auto,exec,rw,uid=500,gid=500 shared /shared

# mount using mount.vboxsf (and optional -w and -o options)
/sbin/mount.vboxsf -w -o rw,uid=500,gid=500 shared /shared&lt;/pre&gt;

&lt;li&gt;&lt;b style="color:green"&gt;Guest&lt;/b&gt;: If this mount doesn't start automatically when the VirtualBox guest is started, you can add one of the above commands to the script you use to start the Hudson slave, eg:

&lt;pre class="brush:shell"&gt;!/bin/bash
#
# Init file for Hudson server daemon
#
# chkconfig: 2345 65 15
# description: Hudson server

# HOWTO:
# 1. rename this file on target server (Hudson slave node) to /etc/init.d/hudson
# 2. to enable this script to run on startup, as root type the following:
#    Fedora: 
#        chkconfig --add hudson; chkconfig --list hudson
#    OpenSolaris:
#         for n in 0 1 6;   do cd /etc/rc${n}.d; ln -s /etc/init.d/hudson K15hudson; done
#         for n in 2 3 4 5; do cd /etc/rc${n}.d; ln -s /etc/init.d/hudson S65hudson; done
#         svccfg add hudson; svcs | grep hudson

RETVAL=0

#run Hudson as a slave node
java -jar /opt/hudson/slave.jar -jnlpUrl \
  http://vboxsvr:8080/computer/${slaveNodeName}/slave-agent.jnlp &amp;

/sbin/mount.vboxsf -w shared /shared &amp;
 
exit $RETVAL&lt;/pre&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7302925176698210580?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7302925176698210580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7302925176698210580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7302925176698210580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7302925176698210580'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/08/hudson-virtual-box-part-2-creating.html' title='Hudson &amp; Virtual Box, Part 2: Creating a common share with vboxsf'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6563233196076318717</id><published>2009-07-28T01:19:00.006-04:00</published><updated>2009-07-30T16:36:30.198-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='manpage'/><category scheme='http://www.blogger.com/atom/ns#' term='sshfs'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><category scheme='http://www.blogger.com/atom/ns#' term='mount'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><title type='text'>Hudson &amp; Virtual Box: Creating a common share with SSHFS</title><content type='html'>&lt;p&gt;I've been working a recently with my own Hudson server, setting up Fedora and OpenSolaris images as slave nodes to prototype new ways to build. Tonight I found a very handy trick for mounting shared drives using SSHFS. Kudos to the man page writers -- all the tips I found via Google were outdated or just plain wrong. &lt;code&gt;man sshfs&lt;/code&gt; to the rescue!

&lt;p&gt;Step 1: create a folder on the Hudson master / Virtual Box host with files you want to share, eg., &lt;code style="color:red"&gt;/shared&lt;/code&gt;

&lt;p&gt;Step 2: create an &lt;b&gt;empty&lt;/b&gt; folder on each Hudson slave / Virtual Box guest as a mount point for the shared folder, eg., &lt;code style="color:green"&gt;/shared&lt;/code&gt;

&lt;p&gt;Step 3: on the guest, install sshfs, eg., &lt;code&gt;sudo yum install fuse-sshfs&lt;/code&gt;.

&lt;p&gt;Step 4: mount the share: &lt;code&gt;sshfs user@hudson-master-host.your-domain.com:&lt;/code&gt;&lt;code style="color:red"&gt;/shared&lt;/code&gt; &lt;code style="color:green"&gt;/shared&lt;/code&gt;

&lt;p&gt;Of course you'll probably want to set up ssh keys and add this to your startup scripts so that the mount happens automatically when the guest is launched, but I'll leave that for next time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6563233196076318717?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6563233196076318717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6563233196076318717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6563233196076318717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6563233196076318717'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/hudson-virtual-box-creating-common.html' title='Hudson &amp; Virtual Box: Creating a common share with SSHFS'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7809558091830922075</id><published>2009-07-24T02:12:00.006-04:00</published><updated>2009-07-24T03:38:01.298-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atf'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='faq'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='ve'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='bpm'/><category scheme='http://www.blogger.com/atom/ns#' term='jbpm'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vtp'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Athena Common Builder: Thanks to the early adopters!</title><content type='html'>Here's a quick list of some of the projects @ &lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/"&gt;Eclipse.org&lt;/a&gt; currently using Athena. If you haven't tried Athena, maybe it's time!

&lt;ol&gt;
&lt;li&gt;Linux Tools
&lt;li&gt;Visual Editor (VE)
&lt;li&gt;Voice Tools (VTP)
&lt;li&gt;PDE Declarative Services Modeling Incubator (pde.ds.modeling.incubator)
&lt;li&gt;Nebula Widgets Gallery
&lt;li&gt;Faceted Project Framework (fproj)
&lt;li&gt;EMF Query (EMF MQ)
&lt;li&gt;EMF Validation (EMF VF)
&lt;li&gt;EMF Transaction (EMF MT)
&lt;li&gt;Ajax Tools Framework (ATF)
&lt;/ol&gt;

And @ &lt;a href="http://www.jboss.org/tools/"&gt;JBoss.org&lt;/a&gt;, all available in &lt;a href="http://www.jboss.org/tools/downloads/dev.html"&gt;JBoss Tools 3.1.0.M2&lt;/a&gt; for Eclipse 3.5 (Galileo) ...

&lt;ol&gt;&lt;li&gt;JMX Console
&lt;li&gt;BPEL Editor*
&lt;li&gt;jBPM 3 and 4
&lt;li&gt;FreeMarker
&lt;li&gt;...to name but a few.
&lt;/ol&gt;

&lt;p&gt;&lt;i&gt;* - will be available in M3 or you can &lt;a href="http://download.jboss.org/jbosstools/updates/nightly/trunk/"&gt;get a nightly build here&lt;/a&gt;.&lt;/i&gt;

&lt;p&gt;What are people saying about Athena?

&lt;blockquote&gt;
"[I] really like the new build. It is much less confusing then the old [Common Modeling] one."
&lt;p&gt;
"[C]ongrats for this builder. It is quite good and I'm eager to rely fully on it."
&lt;p&gt;
"We are playing around with Athena and finding it really useful. It is already deployed to one of our customer developments. Thanks a lot for the hard work! We will definitely try to contribute back anything useful we will have in the process."
&lt;/blockquote&gt;

&lt;p&gt;So, how do &lt;b&gt;*you*&lt;/b&gt; get started? &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/FAQ"&gt;Here's a FAQ&lt;/a&gt;. Here's our &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Athena_Progress_Report"&gt;New and Noteworthy&lt;/a&gt;. And here's all the rest of the &lt;a href="http://wiki.eclipse.org/Category:Athena_Common_Build"&gt;knowledge base articles&lt;/a&gt;. 

&lt;p&gt;Oh, and I'd be remiss if I didn't mention that there's a &lt;a href="http://www.eclipse.org/projects/project-plan.php?planurl=http://www.eclipse.org/dash/athena/project-info/plan.xml&amp;component=Athena"&gt;big list of requested features&lt;/a&gt; still waiting for contributions. If you use Athena, you're already half-way to contributing back. Want to help? Drop me a line any time and we can discuss what holes need filling that match your skills and most directly improve your use of PDE, p2 and Athena.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7809558091830922075?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7809558091830922075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7809558091830922075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7809558091830922075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7809558091830922075'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/athena-common-builder-thanks-to-early.html' title='Athena Common Builder: Thanks to the early adopters!'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6597767397264524144</id><published>2009-07-22T18:48:00.006-04:00</published><updated>2009-07-22T20:17:31.026-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='query'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='transaction'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='modeling'/><category scheme='http://www.blogger.com/atom/ns#' term='grid'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Using Hudson for parallel Athena builds</title><content type='html'>&lt;p&gt;This week I set up a multi-configuration Hudson job to try doing EMF's Query, Validation, and Transaction projects as a single job (instead of the traditional three linked jobs), then &lt;a href="http://wp.kolbware.de/"&gt;Bernd&lt;/a&gt; took over to do most of the work required to migrate to the new, simpler build system... and unearthed a few sticky bugs along the way. For example, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284331"&gt;Athena now supports running from jarred test plugins&lt;/a&gt;, as well as test plugin folders. (Yes, I'm amazed no one ever tested that use case before now either. Anyway, it works now.)

&lt;p&gt;Doing these builds in parallel (rather than serially) may be a bad idea, but for now, it lets the Q,V,T developers build all three linked components via a single build button, and if the sources for any of the three changes, all three will be rebuilt and tests will be run.

&lt;p&gt;Since Transaction depends on Query and Validation, this is certainly useful; however, Query and Validation do not depend on each other, so there may be some extraneous build churn with this set up.

&lt;p&gt;Still, it's nice to see a the status of all three builds in one place:

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/SmeYvEd1O0I/AAAAAAAAFEE/OHSTjC33Ccc/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 106px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/SmeYvEd1O0I/AAAAAAAAFEE/OHSTjC33Ccc/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5361421815828003650" /&gt;&lt;/a&gt;

&lt;p&gt;What's next? Well, hooking up &lt;a href="http://wiki.hudson-ci.org/display/HUDSON/FindBugs+Plugin"&gt;FindBugs&lt;/a&gt;, eliminating all the old SDK/runtime zips (because we have the new, shiny, p2 update site zip instead, and you can convert from repo to "runnable" SDK &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.dash/athena/org.eclipse.dash.commonbuilder/org.eclipse.dash.common.releng/tools/scripts/p2repoFormatToRunnableSDKFormat.xml?root=Technology_Project&amp;content-type=text%2Fplain&amp;view=co"&gt;easily using this script&lt;/a&gt;), and figuring out how to make the builds use each others' newer binary output instead of building from a known entity (Query 1.4.0.N.ten.minutes.ago vs. 1.3.0.R.last.month). Luckily, Athena supports building against p2 repos and &lt;a href="http://divby0.blogspot.com/2009/07/tracking-build-status-with-hudson-data.html"&gt;Hudson has APIs for fetching the latest good output&lt;/a&gt;, so this should be as simple as &lt;a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.emf/org.eclipse.emf.transaction/releng/build.properties?root=Modeling_Project&amp;view=markup"&gt;configuring the Transaction build&lt;/a&gt; to fetch from the &lt;a href="https://build.eclipse.org/hudson/job/cbi-emf-qvt-1.4/BUILDNAME=query/lastSuccessfulBuild/artifact/**/*-Update-*.zip"&gt;latest successful Query zip&lt;/a&gt; using properties like these:

&lt;pre class="brush:shell"&gt;
dependencyURLs=https://build.eclipse.org/hudson/.../path/to/Update.zip
&lt;/pre&gt;

&lt;p&gt;Of course if you want to build against the latest PUBLISHED update, you could do this:

&lt;pre class="brush:shell"&gt;
repositoryURLs=http://download.eclipse.org/modeling/emf/query/updates/nightly/
featureIDsToInstall=org.eclipse.emf.query.sdk
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6597767397264524144?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6597767397264524144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6597767397264524144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6597767397264524144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6597767397264524144'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/using-hudson-for-parallel-athena-builds.html' title='Using Hudson for parallel Athena builds'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/SmeYvEd1O0I/AAAAAAAAFEE/OHSTjC33Ccc/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7051434872846422259</id><published>2009-07-21T21:07:00.001-04:00</published><updated>2009-07-21T21:24:47.886-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn:ignore'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ignore'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>My love-hate with SVN, Part 7: Setting svn:ignore properties</title><content type='html'>&lt;p&gt;If you've inherited code where someone has accidentally committed *.class files, here's how you can find those bin/ folders, wipe them out, and hopefully never see them in the Synchronize view again.

&lt;p&gt;Sure, you could use &lt;code&gt;Team &amp;gt; Add to svn:ignore...&lt;/code&gt; on a file or &lt;code&gt;Team &amp;gt; Set Property...&lt;/code&gt; on a folder in Eclipse using Subversive, but this is faster and less clickity-click.

&lt;pre class="brush:shell"&gt;for d in $(find -maxdepth 1 -mindepth 1 -type d ~/workspace/ -name "org.eclipse.*"); do
  pushd $d
  svn up
  svn propset svn:ignore "bin
bin/*" .
  svn propget svn:ignore . 
  svn propset svn:ignore "*.class
*/*.class
**/*.class" bin
  svn propget svn:ignore bin
  cd bin
  rm -fr *
  svn delete org
  svn delete model
  # find other deleteables with `svn status`
  cd ..
  svn ci -m "svn:ignore"
  popd
done&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7051434872846422259?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7051434872846422259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7051434872846422259' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7051434872846422259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7051434872846422259'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/my-love-hate-with-svn-part-7-setting.html' title='My love-hate with SVN, Part 7: Setting svn:ignore properties'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8045513917562092156</id><published>2009-07-21T01:36:00.003-04:00</published><updated>2009-07-21T01:45:38.338-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='playlist'/><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='m3u'/><category scheme='http://www.blogger.com/atom/ns#' term='mp3'/><category scheme='http://www.blogger.com/atom/ns#' term='player'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>HOWTO: generate .m3u playlist from .mp3 directory</title><content type='html'>&lt;p&gt;Been trying to find a solution to this one for ages. Turns out it's stupidly simple - just dump the results of a find into a file.

&lt;pre class="brush:shell"&gt;#!/bin/bash
dir="$1"
echo "Create playlist for $1 ..."
if [[ $2 ]]; then list="$2"; else list="$1"; fi

pushd "$dir" 2&gt;&amp;1 &gt;/dev/null
find . -type f -name "*.mp3" &gt; "$list.m3u"
echo "Found these files:"
cat "$list.m3u"
popd 2&gt;&amp;1 &gt;/dev/null
&lt;/pre&gt;

&lt;p&gt;With or without the "./" prefix on each found file, the resulting .m3u files work on my Blackberry (and are found automatically), including nested folders and paths with spaces. To run the above, just do this:

&lt;pre class="brush:shell"&gt;$ ./m3u.sh "artist folder/disc folder" "playlist name"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8045513917562092156?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8045513917562092156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8045513917562092156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8045513917562092156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8045513917562092156'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/howto-generate-m3u-playlist-from-mp3.html' title='HOWTO: generate .m3u playlist from .mp3 directory'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-2054549250713821630</id><published>2009-07-20T23:45:00.007-04:00</published><updated>2009-07-21T01:52:44.309-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='svnkit'/><category scheme='http://www.blogger.com/atom/ns#' term='jna'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='mirror'/><category scheme='http://www.blogger.com/atom/ns#' term='galileo'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudsmith'/><title type='text'>My love-hate with SVN, Part 6: Installation Ease Of Use</title><content type='html'>&lt;p&gt;&lt;a href="http://divby0.blogspot.com/search?q=My+love-hate+with+SVN"&gt;For months&lt;/a&gt; I've been annoyed by the fact that installation of Subversive (or Subclipse) requires fetching features and plugins from 3 or more update sites. No more!

&lt;p&gt;Today, as an exercise to learn how to use the &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks#Partial_Mirroring"&gt;&lt;code&gt;&amp;lt;p2.mirror/&amp;gt;&lt;/code&gt; task&lt;/a&gt; and provide a reproduceable, offline way to get Subversive into a virtual machine, I've created an update site zip, complete with site.xml and p2 metadata, which can be used to install Subversive from a single source. &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks/Partial_Mirroring/Example"&gt;Here's the Ant script&lt;/a&gt; if you'd like to try this at home.

&lt;p&gt;Because let's be real: you can only complain so long before it's time to roll up your sleeves and pitch in, right? That's how open source survives - thanks to people who care enough to complain AND care enough to help.

&lt;p&gt;Here's the 13M update site zip, which includes the following:

&lt;blockquote&gt;&lt;a href="http://anonsvn.jboss.org/repos/repository.jboss.org/eclipse/galileo/Subvsve078.I200905061500_SVNconn221.I200907081500_SVNKit123.5521_JNA309_ECF300.v200906041131-Update.zip"&gt;Subversive 0.7.8&lt;br/&gt;SVN Connector 2.2.1&lt;br/&gt;SVNKit 1.2.3&lt;br/&gt;JNA 3.0.9&lt;br/&gt;ECF 3.0.0&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Any problems, please report them in &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=284077"&gt;bug 284077&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-2054549250713821630?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/2054549250713821630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=2054549250713821630' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2054549250713821630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/2054549250713821630'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/my-love-hate-with-svn-part-6.html' title='My love-hate with SVN, Part 6: Installation Ease Of Use'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6001800104039772144</id><published>2009-07-18T12:46:00.005-04:00</published><updated>2009-07-18T12:53:09.349-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='burn'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='iso'/><title type='text'>HOWTO: Burn ISO image to DVD w/ linux commandline</title><content type='html'>When burning an ISO image to disc, I simply use this:

&lt;pre class="brush:shell"&gt;
$ growisofs -dvd-compat -speed=1 -Z /dev/dvd=disc.iso
&lt;/pre&gt;

Using &lt;code&gt;-speed=1&lt;/code&gt; takes a little longer than the default "as fast as possible" mode, but guarantees the disc can be properly read in the pickiest of drives (eg., a Wii DVD drive). DVD-R (not DVD+R) is also recommended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6001800104039772144?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6001800104039772144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6001800104039772144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6001800104039772144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6001800104039772144'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/howto-burn-iso-image-to-dvd-w-linux.html' title='HOWTO: Burn ISO image to DVD w/ linux commandline'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8069356021816669442</id><published>2009-07-16T21:17:00.003-04:00</published><updated>2009-07-16T18:39:29.340-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='committer'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='FLOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='contributor'/><title type='text'>HOWTO: Be full of C.R.A.P.</title><content type='html'>&lt;p&gt;In &lt;a href="http://divby0.blogspot.com/2009/07/howto-becoming-open-source-project.html"&gt;part 1&lt;/a&gt; I rambled on at length about what I think needs to be done to prove yourself to a project team in order to become a committer on tht project.

&lt;p&gt;So, what the crap's up with being full of C.R.A.P.? I'm not referring to the &lt;a href="http://www.dailyblogtips.com/crapthe-four-principles-of-sound-design/"&gt;four principles of design&lt;/a&gt; (Contrast, Repetition, Alignment, Proximity), though there are some similarities here.

&lt;p&gt;For me, being full of C.R.A.P is about the transition from one state to another:

&lt;p align="center"&gt;&lt;table align="center" border="0" cellpadding="5"&gt;&lt;tr&gt;&lt;td&gt;
Contributing&lt;br/&gt;Responsive&lt;br/&gt;Able&lt;br/&gt;Peer
&lt;/td&gt;
&lt;td&gt; to &lt;/td&gt;
&lt;td&gt;
Committed&lt;br/&gt;Responsible&lt;br/&gt;Active&lt;br/&gt;Participant
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;/p&gt;

&lt;p&gt;How do you move from one state to another?

&lt;p&gt;&lt;acronym title="Give a crap, Clean up some old crap, Make some new crap, Now you're C.R.A.P.!"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/Sl-lGxrtx6I/AAAAAAAAFD8/gybn1vmYqKo/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/Sl-lGxrtx6I/AAAAAAAAFD8/gybn1vmYqKo/s320/Screenshot-1.png" border="0" alt="Give a crap, Clean up some old crap, Make some new crap, Now you're C.R.A.P.!" id="BLOGGER_PHOTO_ID_5359183617428670370" /&gt;&lt;/a&gt;

&lt;p&gt;Simple, right? 

&lt;p&gt;'Till next time... 

&lt;p align="center"&gt;&lt;img src="http://hrwiki.org/w/images/e/ea/Crapfully_yours.PNG" width="400"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8069356021816669442?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8069356021816669442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8069356021816669442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8069356021816669442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8069356021816669442'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/howto-be-full-of-crap.html' title='HOWTO: Be full of C.R.A.P.'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/Sl-lGxrtx6I/AAAAAAAAFD8/gybn1vmYqKo/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-5748205772766247917</id><published>2009-07-16T18:20:00.003-04:00</published><updated>2009-07-16T18:29:15.392-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='committer'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='FLOSS'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='contributor'/><title type='text'>HOWTO: Becoming an open source project committer</title><content type='html'>&lt;p&gt;The &lt;a href="http://search.twitter.com/search?q=committer"&gt;Tweetosphere&lt;/a&gt;/&lt;a href="http://following-flo.blogspot.com/2009/07/lowering-open-source-contribution.html"&gt;blogosphere&lt;/a&gt; has been buzzing with discussions about what one needs to do to be a committer @ Eclipse.org.

&lt;p&gt;I got my rights by working for IBM and being handed the keys to the Porsche when I started working at the Toronto Lab as a member of the EMF team, oh so many lunar eclipses ago. No longer with IBM, I'll retain my committerships until I manually ask to be removed, or they claw 'em &lt;a href="http://www.youtube.com/watch?v=O0B_UZNtEk4"&gt;from my cold dead hands&lt;/a&gt;. After all, what's a revised patch but a &lt;a href="http://en.wikipedia.org/wiki/Second_Amendment_to_the_United_States_Constitution"&gt;2nd Amendment&lt;/a&gt;? &lt;i&gt;(Aside: seriously, people, it's 2009. You don't need a gun. There's no Imperial Army coming to steal your land. LET IT GO.)&lt;/i&gt;

&lt;p&gt;For most committers, however, you can't just be appointed to the job; you have to earn it. So, here are my tips for getting on *my* project, the &lt;a href="http://eclipse.org/dash/athena"&gt;Athena Common Build&lt;/a&gt;.

&lt;ol&gt;&lt;li&gt;Easiest way to get on the project: &lt;b&gt;be invited&lt;/b&gt; by someone already on the team by personal
recommendation (see criteria below). Others can +1/-1 the suggestion based on the criteria below, but in my experience with other projects, &lt;b&gt;&lt;i&gt;no one ever vetoes a nomination&lt;/i&gt;&lt;/b&gt;. (I've seen it once, and it only delayed that person's committership by about a month.) So cozy up to the existing committers, and you're in. Why is this? Because it's &lt;b&gt;OPEN&lt;/b&gt; source, and how can you be open if you exclude people who want to contribute?

&lt;li&gt;The nominee &lt;b&gt;must use the project at least weekly, if not daily&lt;/b&gt;. For Athena, this means you have to be actively writing Ant scripts, doing builds, or at least be active in PDE or p2 development. Why is this important? &lt;br/&gt;
a) I don't want "dump and run" code which I'll then have to maintain, and&lt;br/&gt;
b) if you're not a user, you can't intelligently decide what pains
exist and which are important to solve

&lt;li&gt;I'd like to see &lt;b&gt;two accepted patches&lt;/b&gt; to prove you've got the technical skill, and that you're willing to thrown down and help with existing known issues - see 2 (b) above.

&lt;li&gt;If you're not technical (or not *yet* technical), then you need &lt;b&gt;demonstrated skills or commitment&lt;/b&gt;, or have worked in a related field with someone mutually known who can vouch for you. 

&lt;/ol&gt;

So, what constitutes "commitment?" Lots of things...

&lt;ul&gt;&lt;li&gt;show up to meetings
&lt;li&gt;comment on or write
bugs, blogs, wiki, articles, recipes, HOWTOs, newsgroup, mailing list, IRC
&lt;li&gt;submits patches or test cases
&lt;li&gt;help triage bugs
&lt;li&gt;mentor students (GSoc or other)
&lt;li&gt;runs contests, does viral marketing, etc.
&lt;/ul&gt;

&lt;p&gt;Now, of course, these items are not all mesaurable, but if people know you're involved, and you'd like to be a committer, you'll likely be voted in. (Many people trying out Athena may have noticed I've offered them committer rights in exchange for code or doc contributions. So far, no takers, but the offer stands.)

&lt;p&gt;Frankly, I'd rather have more people as committers who do little to the code base but who have the power to do so when needed. For example, (if &lt;a href="http://dash.eclipse.org/dash/commits/web-app/active-committers.cgi?project=technology.dash"&gt;the data&lt;/a&gt; is accurate) Kim's only committed 48 LOC in the past 9 months, compared to my 80,000 LOC &lt;i&gt;(seriously, that can't be right)&lt;/i&gt; - but what she, Andrew and Andrew have done has been invaluable. And, &lt;b&gt;&lt;i&gt;often much more valuable&lt;/i&gt;&lt;/b&gt;, they've all helped out with with advice in bugs. Thanks!

&lt;p&gt;Good planning trumps code any day.

&lt;p align="right"&gt;Continued in &lt;a href="http://divby0.blogspot.com/2009/07/howto-be-full-of-crap.html"&gt;part 2&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-5748205772766247917?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/5748205772766247917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=5748205772766247917' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5748205772766247917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/5748205772766247917'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/howto-becoming-open-source-project.html' title='HOWTO: Becoming an open source project committer'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8502431937379674180</id><published>2009-07-16T00:46:00.008-04:00</published><updated>2009-07-16T18:38:00.890-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drools'/><category scheme='http://www.blogger.com/atom/ns#' term='ci'/><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Tracking Build Status With Hudson Data APIs</title><content type='html'>&lt;a href="http://search.twitter.com/search?q=hudson+helper"&gt;A number of people&lt;/a&gt; have been twittering recently about &lt;a href="http://greensopinion.blogspot.com/2009/05/hudson-helper-hudson-on-your-iphone.html"&gt;Hudson Helper&lt;/a&gt;&lt;strike&gt;, and the fact that it can't (yet) support http access to Hudson servers. (There's just no pleasing some people, eh David?)&lt;/strike&gt; 

&lt;p&gt;&lt;b&gt;UPDATE:&lt;/b&gt; &lt;a href="http://www.blogger.com/profile/05853899131970655876"&gt;David&lt;/a&gt; reports that Hudson Helper has worked with both &lt;a href="http://greensopinion.blogspot.com/2009/06/hudson-helper-and-untrusted.html"&gt;http and https&lt;/a&gt; since day one. He invites &lt;a href="mailto:dgreen99@gmail.com"&gt;direct feedback if you're having problems&lt;/a&gt;.

&lt;p&gt;To help fill this gap, I'd like to detail some of the handy API features of &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt; I've discovered since I first started using it back in October, which cane be fetched via http (or https) in a browser or via a script. 

&lt;table&gt;
&lt;tr&gt;&lt;th align="left"&gt;Datum&lt;/th&gt;
&lt;th align="left"&gt;Example&lt;/th&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;Latest &lt;b style="color:green"&gt;Successful&lt;/b&gt; build number&lt;/td&gt;
&lt;td&gt;&lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-gef-3.5.x-nightly/lastSuccessfulBuild/buildNumber"&gt;buildNumber&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;Latest &lt;b style="color:green"&gt;Successful&lt;/b&gt; zip (published artifact)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-gef-3.5.x-nightly/lastSuccessfulBuild/artifact/build/*/*Update*.zip"&gt;GEF-Update-*.zip&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;All checked out Project Set Files (Hudson workspace)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-gef-3.5.x-nightly/ws/**/*.psf"&gt;*.psf&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;XML Digest of Latest &lt;b style="color:orange"&gt;Stable&lt;/b&gt; Build&lt;/td&gt;
&lt;td&gt;&lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Galileo/lastStableBuild/api/xml"&gt;lastStableBuild/api/xml&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt;&lt;td&gt;SVN revision used for Latest &lt;b style="color:orange"&gt;Stable&lt;/b&gt; Build&lt;/td&gt;
&lt;td&gt;&lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Galileo/lastStableBuild/api/xml?xpath=//changeSet/revision/revision"&gt;//changeSet/revision/revision&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;/table&gt;

&lt;p&gt;For more on the APIs available to the Latest &lt;b style="color:green"&gt;Successful&lt;/b&gt;, &lt;b style="color:orange"&gt;Stable&lt;/b&gt;, &lt;b style="color:red"&gt;Failed&lt;/b&gt;, or in fact simply the &lt;b&gt;Latest Build&lt;/b&gt;, see:

&lt;ol&gt;
&lt;li&gt;&lt;a style="font-weight:bold;color:green" href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Galileo/lastSuccessfulBuild/api/"&gt;/lastSuccessfulBuild/api/&lt;/a&gt;
&lt;li&gt;&lt;a style="font-weight:bold;color:orange" href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Galileo/lastStableBuild/api/"&gt;/lastStableBuild/api/&lt;/a&gt;
&lt;li&gt;&lt;a style="font-weight:bold;color:red" href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Ganymede/lastFailedBuild/api/"&gt;/lastFailedBuild/api/&lt;/a&gt;
&lt;li&gt;&lt;a style="font-weight:bold;color:black" href="https://build.eclipse.org/hudson/view/Athena%20CBI/job/cbi-linuxtools-Galileo/lastBuild/api/"&gt;/lastBuild/api/&lt;/a&gt;
&lt;/ol&gt;

&lt;p&gt;Of course, should you want details on a specific build rather than the latest, you can replace the "last*Build" token with an actual build number.

&lt;p&gt;Finally, because no post about APIs should be complete with out some script showing how to exploit that interface, here's a quick example of how to fetch the latest successful, and as yet unreleased &lt;a href="http://jboss.org/drools/downloads.html"&gt;Drools&lt;/a&gt; 5.1 runtime library zip for use in our &lt;a href="https://www.jboss.org/tools/download/dev.html"&gt;JBoss Tools 3.1.0.M2&lt;/a&gt; builds. In this example, we fetch the build number for the last successful build and compare it to a cached version. We also fetch and cache the latest SVN revision number (in a build.properties file) so that we can later fetch Drools sources from the same point in time as the precompiled Drools binaries in the zip. This guarantees we're building from trunk, but only a good build in trunk, skipping over any failed builds or intermediate states (partial commits).

&lt;pre class="brush:shell"&gt;
#!/bin/bash
droolsSNAPSHOTnum=drools-SNAPSHOT-num.txt
droolsSNAPSHOTrev=drools-SNAPSHOT-rev.txt
droolsSNAPSHOTzip=drools-SNAPSHOT-bin.zip
droolsSNAPSHOTurl=http://jboss-hudson-server/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/drools-5.1.0.SNAPSHOT-bin.zip

buildNumOld=0; if [[ -f $droolsSNAPSHOTnum ]]; then buildNumOld=$(cat $droolsSNAPSHOTnum); fi
buildNumNew=$(wget -q --no-clobber -O - http://jboss-hudson-server/hudson/job/drools/lastSuccessfulBuild/buildNumber)

buildRevOld=0; if [[ -f $droolsSNAPSHOTrev ]]; then buildRevOld=$(cat $droolsSNAPSHOTrev); fi
buildRevNew=$(wget -q --no-clobber -O - http://jboss-hudson-server/hudson/job/drools/lastSuccessfulBuild/api/xml?xpath=//changeSet/revision/revision)

if [[ $buildNumNew -gt $buildNumOld ]]; then
 # get: &lt;revision&gt;27013&lt;/revision&gt;; must change to 27013 
 echo $buildRevNew &gt; $droolsSNAPSHOTrev;
 sed -i "s#&lt;revision&gt;\|&lt;/revision&gt;##g" $droolsSNAPSHOTrev 
 buildRevNew="$(cat $droolsSNAPSHOTrev)"; #echo "."$buildRevNew"."
 # replace "defaultTag=trunk:\d+" with defaultTag=trunk:${buildRevNew} in build.properties
 #  defaultSvnUrl=http://anonsvn.jboss.org/repos/labs/labs/jbossrules
 #  defaultTag=trunk:27013
 sed -i "s#defaultTag=trunk:\d\+#defaultTag=trunk:$buildRevNew#g" build.properties; # grep "defaultTag=trunk:" build.properties 

 echo $buildNumNew &gt; $droolsSNAPSHOTnum; 
 echo "Download $droolsSNAPSHOTurl ..."
 wget -q --no-clobber -O $droolsSNAPSHOTzip $droolsSNAPSHOTurl 

 # ...

fi
&lt;/pre&gt;

Oh, and BTW, if you're ever looking for the latest &lt;a href="http://hudson-ci.org/latest/hudson.war"&gt;hudson.war&lt;/a&gt; executable, it's &lt;a href="http://hudson-ci.org/latest/hudson.war"&gt;always here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8502431937379674180?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8502431937379674180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8502431937379674180' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8502431937379674180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8502431937379674180'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/tracking-build-status-with-hudson-data.html' title='Tracking Build Status With Hudson Data APIs'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7316494212870485063</id><published>2009-07-13T00:48:00.007-04:00</published><updated>2009-07-13T01:31:00.862-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='codecs'/><category scheme='http://www.blogger.com/atom/ns#' term='conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='wii'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='player'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><category scheme='http://www.blogger.com/atom/ns#' term='avi'/><category scheme='http://www.blogger.com/atom/ns#' term='mod'/><category scheme='http://www.blogger.com/atom/ns#' term='drivekey'/><title type='text'>Workin' For The Wiikend</title><content type='html'>&lt;p&gt;After acquiring my first &lt;a href="http://www.drivekey.com/"&gt;DriveKey&lt;/a&gt;-powered "try before you buy" Wii game via torrent (and having a little fun fighting the Joker's minions off while occasionally blowing Robin into his component bricks with a well-placed BatBomb), I decided tonight to do a little more hacking. Thanks, CanadaMods.ca!

&lt;p&gt;So, with the wife out watching some chick-flick w/ a friend, I got to spend a few hours playing with the &lt;a href="http://wiibrew.org/wiki/Main_Page"&gt;HomeBrew Channel on my Wii&lt;/a&gt;. Very cool stuff available, from game emulators &amp; ports, to new games, media players, and utilities. &lt;a href="http://wiibrew.org/wiki/Category:Homebrew_in_HomebrewBrowser"&gt;Complete list here&lt;/a&gt;.

&lt;p&gt;To set up the HomeBrew Channel, &lt;a href="http://www.wiibrew.org/wiki/Setting_up_your_Wii_for_Homebrew#Homebrew_setup"&gt;follow these steps&lt;/a&gt;, including installation of the DVDx application so your Wii can play video DVDs.

&lt;p&gt;Then, install the HomeBrew Browser, and grab some more software. After numerous tests, crashes, and reboots, I found that the best three options for playing video are these, all available through the HomeBrew Browser or via manual download from &lt;a href="http://wiibrew.org"&gt;wiibrew.org&lt;/a&gt;.

&lt;p&gt;Here's what I tested:
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;2G SD card w/ .mp3&lt;/th&gt;
&lt;th&gt;Bus-powered 2.5" 500G USB drive w/ .avi&lt;/th&gt;
&lt;th&gt;DVD-R w/ .avi&lt;/th&gt;
&lt;th&gt;DVD-R Video DVD (burned w/ growisofs from dl'd .avi torrent) &lt;a href="http://divby0.blogspot.com/2009/05/howto-avi-to-dvd-conversion.html"&gt;[1]&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;Video DVD (original, possibly DVD-DL? or DVD+R)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr align="center"&gt;&lt;td&gt;&lt;a href="http://geexboxforwii.sourceforge.net/setup.html"&gt;GeeXboX&lt;/a&gt; (embedded linux)&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="#FFCCCC"&gt;N&lt;/td&gt;
&lt;td bgcolor="#FFCCCC"&gt;N&lt;/td&gt;
&lt;td bgcolor="#FFCCCC"&gt;N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align="center"&gt;&lt;th&gt;&lt;a href="http://wiibrew.org/wiki/MPlayer_CE"&gt;MPlayer CE&lt;/a&gt;&lt;/th&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="#FFCCCC"&gt;N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr align="center"&gt;&lt;th&gt;&lt;a href="http://wiibrew.org/wiki/MPlayer_TT"&gt;MPlayer TT&lt;/a&gt;&lt;/th&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="lightgreen"&gt;Y&lt;/td&gt;
&lt;td bgcolor="#FFCCCC"&gt;N&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

So, while I have &lt;a href="http://divby0.blogspot.com/2009/05/howto-avi-to-dvd-conversion.html"&gt;scripted the process for easily converting .avi to DVD&lt;/a&gt;, I now no longer need to do so -- I can just plug my USB drive directly into the Wii and watch it on the big screen w/o having to waste hours in format conversion. Wii!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7316494212870485063?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7316494212870485063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7316494212870485063' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7316494212870485063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7316494212870485063'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/workin-for-wiikend.html' title='Workin&apos; For The Wiikend'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6843096045180899101</id><published>2009-07-09T11:59:00.005-04:00</published><updated>2009-07-09T12:15:35.764-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='overload'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='death'/><category scheme='http://www.blogger.com/atom/ns#' term='filter'/><category scheme='http://www.blogger.com/atom/ns#' term='xkcd'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>E-Fail</title><content type='html'>&lt;p&gt;It's taken a while, but I've managed to get some metrics for how much mail I actually process.

&lt;P&gt;Here's my inbox 3 weeks ago before I went on vacation for a week, then went without VPN access for a few days. The &lt;a href="http://xkcd.com/597/"&gt;xkcd strip&lt;/a&gt; is particularly appropos.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/SlYUZRs4GqI/AAAAAAAAFBM/ll7jylHLZPs/s1600-h/Screenshot-43.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/SlYUZRs4GqI/AAAAAAAAFBM/ll7jylHLZPs/s320/Screenshot-43.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5356491231284697762" /&gt;&lt;/a&gt;

&lt;p&gt;Here's that same inbox today, sporting a newer version of Thunderbird. Note the pileup of over 1,000 emails in three weeks, in just ONE of the mailing list filter/folders I monitor.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SlYUfDYYlmI/AAAAAAAAFBU/1IbW2caZY4s/s1600-h/Screenshot-51.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SlYUfDYYlmI/AAAAAAAAFBU/1IbW2caZY4s/s320/Screenshot-51.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5356491330519864930" /&gt;&lt;/a&gt;

&lt;p&gt;So, other than filtering by sender &amp; subject, automatically marking my own mailing list replies read, colourizing emails to make the more important ones stand out, and using "Show Unread Threads" view filtering ... what else can one do to manage the deluge? 

&lt;p&gt;Does anyone have any &lt;a href="http://www.google.com/search?client=opera&amp;rls=en&amp;q=email+bankruptcy&amp;sourceid=opera&amp;ie=utf-8&amp;oe=utf-8"&gt;good, realistic strategies&lt;/a&gt; for dealing with 1000s of emails a month?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6843096045180899101?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6843096045180899101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6843096045180899101' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6843096045180899101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6843096045180899101'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/e-fail.html' title='E-Fail'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/SlYUZRs4GqI/AAAAAAAAFBM/ll7jylHLZPs/s72-c/Screenshot-43.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-7005990448384133693</id><published>2009-07-09T11:07:00.003-04:00</published><updated>2009-07-09T11:12:12.111-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='licensing'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='eula'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Simplified Win XP Pro EULA</title><content type='html'>&lt;p align="center"&gt; 
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/SlYIJBbicQI/AAAAAAAAFBE/_u0FtB0XRcQ/s1600-h/Screenshot-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 305px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/SlYIJBbicQI/AAAAAAAAFBE/_u0FtB0XRcQ/s320/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5356477757899567362" /&gt;&lt;/a&gt;
&lt;br/&gt;&lt;small&gt;&lt;i&gt; 
&lt;a href="http://www.microsoft.com/windowsxp/eula/pro.mspx"&gt;http://www.microsoft.com/windowsxp/eula/pro.mspx&lt;/a&gt;
&lt;/i&gt;&lt;br/&gt;
-- Reminds me of the &lt;a href="http://en.wikipedia.org/wiki/WTFPL"&gt;WTFPL&lt;/a&gt; license...
&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-7005990448384133693?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/7005990448384133693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=7005990448384133693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7005990448384133693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/7005990448384133693'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/simplified-win-xp-pro-eula.html' title='Simplified Win XP Pro EULA'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/SlYIJBbicQI/AAAAAAAAFBE/_u0FtB0XRcQ/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3670977376515904567</id><published>2009-07-08T16:58:00.008-04:00</published><updated>2009-07-08T17:15:08.459-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='darwinports'/><category scheme='http://www.blogger.com/atom/ns#' term='scutil'/><category scheme='http://www.blogger.com/atom/ns#' term='cisco'/><category scheme='http://www.blogger.com/atom/ns#' term='vpnc'/><category scheme='http://www.blogger.com/atom/ns#' term='shimo'/><category scheme='http://www.blogger.com/atom/ns#' term='vpn'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Mac OS X - VPN vs. LAN: DNS Royal Rumble</title><content type='html'>I've been "&lt;a href="http://www.youtube.com/watch?v=tOEKBC1JPz4"&gt;sharing the Mac experience&lt;/a&gt;" for the past day trying to get access to my local LAN and VPN concurrently. So far, it's only one or the other, but never both at the same time.

&lt;p&gt;I've tried the Cisco client, the &lt;a href="http://www.shimoapp.com/"&gt;Shimo client&lt;/a&gt;, vpnc (compiled from scratch with and without openssl support), vpnc 0.5.3 from DarwinPorts, and even this custom bit of script I wrote based on some tips about using &lt;code&gt;scutil&lt;/code&gt;.

&lt;pre class="brush:shell"&gt;
#!/bin/bash
# goal here is to collect the DNS entries from the active services and merge them into the Global list

tmpfile=$(mktemp)

# get IPs from services using scutil
function getIPs ()
{
        return_IPs=""
        keys=$(echo "list State:/Network/"$1 | scutil | awk '{print $4}')
        for f in $keys; do
                echo "&gt; show $f"
                printf "get "$f"\nshow "$f | scutil | grep "\."
                echo "show $f" | scutil 2&gt;&amp;1 | grep "\." 2&gt;&amp;1 | \
                  awk '{print $3}' 2&gt;&amp;1 &gt;&gt; $tmpfile
        done
        #cat $tmpfile
        IPlist=$(cat $tmpfile | sort -r 2&gt;&amp;1 | uniq 2&gt;&amp;1)
        for i in $IPlist; do
                return_IPs=$return_IPs" "$i
        done
        #echo $return_IPs
        rm -fr $tmpfile
}

function setIPs ()
{
        label="$1"
        IPs="$2"; # echo $IPs
        printf "get State:/Network/$label\nd.add ServerAddresses *$IPs\nset State:/Network/$label" | scutil
        echo "&gt; show State:/Network/"$label
        printf "get State:/Network/"$label"\nshow State:/Network/"$label | \
          scutil | grep "\."
}

echo "--- BEFORE ---"
getIPs "Service/.+/DNS"
IPs=$return_IPs

echo ""; echo "--- AFTER ---"
setIPs "Service/com.cisco.VPN/DNS" "$IPs"
setIPs "Global/DNS" "$IPs"

mv /etc/resolv.conf /etc/resolv.conf.bak
for i in $IPs; do echo "nameserver $i" &gt;&gt; /etc/resolv.conf; done&lt;/pre&gt;

&lt;pre class="brush:shell"&gt;
# ./dnsfix.sh 
--- BEFORE ---
&gt; show State:/Network/Service/F1C45B82-45A1-4F44-89AC-82102F187F0B/DNS
    0 : 192.168.x.y
&gt; show State:/Network/Service/com.cisco.VPN/DNS
    0 : a.b.c.d
    1 : e.f.g.h

--- AFTER ---
&gt; show State:/Network/Service/com.cisco.VPN/DNS
    0 : 192.168.x.y
    1 : a.b.c.d
    2 : e.f.g.h
&gt; show State:/Network/Global/DNS
    0 : 192.168.x.y
    1 : a.b.c.d
    2 : e.f.g.h
&lt;/pre&gt;

&lt;p&gt;Obviously, since it's a Mac, there's got to be a dead-simple way for this to work. Anyone know how?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3670977376515904567?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3670977376515904567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3670977376515904567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3670977376515904567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3670977376515904567'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/mac-os-x-vpn-vs-lan-dns-royal-rumble.html' title='Mac OS X - VPN vs. LAN: DNS Royal Rumble'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3196422411811094242</id><published>2009-07-07T22:05:00.007-04:00</published><updated>2009-07-08T17:23:56.177-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keybindings'/><category scheme='http://www.blogger.com/atom/ns#' term='macpro'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mouse'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>Learning to Love the Mac, Part 2: Mouse Tips &amp; Desktop Management</title><content type='html'>&lt;p&gt;I have an 8-button Logitech MX500 optical mouse, and this week is the first time I've ever successfully mapped functionality to all the buttons. Windows did a reasonable job with a few of the buttons; Linux doesn't support anything beyond the first three; Mac OS X Server just gets it done. 

&lt;p&gt;Out of the box, my third button (scroll wheel) is mapped to the seemingly pointless Dashboard, which is a huge pain when you're used to middle-clicking to open a link in a new tab or to copy/paste text in a console. To get that functionality back, go to &lt;code&gt;Applications &amp;gt; System Preferences &amp;gt; Expos&amp;eacute; &amp;amp; Spaces&lt;/code&gt; then remove Mouse Button 3 from the Dashboard's "Hide and Show" feature.

&lt;p&gt;Next, I set Mouse buttons 5, 6, and 8 to All windows, Application windows, and Show Desktop.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/SlQA_Y08EUI/AAAAAAAAFAk/tTEa7INma4g/s1600-h/2009-07-07_2213.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 314px;" src="http://4.bp.blogspot.com/_i21-98vOfTA/SlQA_Y08EUI/AAAAAAAAFAk/tTEa7INma4g/s320/2009-07-07_2213.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355906945846612290" /&gt;&lt;/a&gt;

&lt;p&gt;But even cooler than these is Spaces, &lt;strike&gt;though as yet I can't find a way to replicate Gnome or XFCE's ability to move windows from from Space to Space&lt;/strike&gt; which lets you drag open app windows from Space to Space which in the Spaces view (F8). Still, having up to 16 virtual desktops is very handy, particularly when you need to virtualize Windows and Linux. If you want to be able to have console windows on all Spaces rather than having them all collected on a single Space, uncheck the "When switching to an application, switch to a space with open windows for the application".

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/SlQBlu-xLbI/AAAAAAAAFAs/jaBWsLXt1is/s1600-h/2009-07-07_2216.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 314px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/SlQBlu-xLbI/AAAAAAAAFAs/jaBWsLXt1is/s320/2009-07-07_2216.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355907604628450738" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3196422411811094242?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3196422411811094242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3196422411811094242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3196422411811094242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3196422411811094242'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/learning-to-love-mac-part-2-mouse-tips.html' title='Learning to Love the Mac, Part 2: Mouse Tips &amp; Desktop Management'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i21-98vOfTA/SlQA_Y08EUI/AAAAAAAAFAk/tTEa7INma4g/s72-c/2009-07-07_2213.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4414726794591281455</id><published>2009-07-07T21:05:00.000-04:00</published><updated>2009-07-07T21:06:26.672-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svnkit'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='galileo'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='cloudsmith'/><title type='text'>My love-hate with SVN, Part 5: Fedora 11 + Eclipse 3.5 + Subversion 1.6</title><content type='html'>&lt;p&gt;Finally figured out how to make Eclipse 3.5 play nicely on Fedora 11 w/ Subversion, and I owe this bit of knowledge to our new &lt;a href="http://divby0.blogspot.com/2009/07/learning-to-love-mac-13-tips.html"&gt;MacPro&lt;/a&gt;. *sigh*

&lt;p&gt;I also owe a great deal of gratitude to Cloudsmith for providing their &lt;a href="http://download.cloudsmith.com/galileoplus/"&gt;Cloudsmith Galileo+ repository&lt;/a&gt;, which includes these features:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/SlOnVFm-GWI/AAAAAAAAFAc/pH9XFKyiCwg/s1600-h/Screenshot-3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 217px; height: 320px;" src="http://4.bp.blogspot.com/_i21-98vOfTA/SlOnVFm-GWI/AAAAAAAAFAc/pH9XFKyiCwg/s320/Screenshot-3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5355808362598373730" /&gt;&lt;/a&gt;

&lt;p&gt;I still wish the version numbers would better align, in that I have to install the SVN Team Provider v0.7.8 with the SVN Connector v2.2.0 and the SVNKit 1.3.0 implementation v2.2.0 to make all this work with Subversion 1.6. Oof.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4414726794591281455?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4414726794591281455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4414726794591281455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4414726794591281455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4414726794591281455'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/my-love-hate-with-svn-part-5-fedora-11.html' title='My love-hate with SVN, Part 5: Fedora 11 + Eclipse 3.5 + Subversion 1.6'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i21-98vOfTA/SlOnVFm-GWI/AAAAAAAAFAc/pH9XFKyiCwg/s72-c/Screenshot-3.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8246065507899158796</id><published>2009-07-06T16:49:00.011-04:00</published><updated>2009-07-06T18:18:07.417-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='keybindings'/><category scheme='http://www.blogger.com/atom/ns#' term='macpro'/><category scheme='http://www.blogger.com/atom/ns#' term='fink'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='osx'/><category scheme='http://www.blogger.com/atom/ns#' term='darwinports'/><category scheme='http://www.blogger.com/atom/ns#' term='virtual'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='efi'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='subversive'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='refit'/><title type='text'>Learning to Love the Mac: 13 Tips</title><content type='html'>&lt;p&gt;A month ago a very large package arrived in the mail: my first MacPro server. I at once fell in love with the case design - clean, simple, and dead-easy to take apart in order to add more drives and RAM. However, that's where the love boat ran aground.

&lt;p&gt;To say it's been a gradual learning curve would be an understatement. Here are a few things I've learned over the past month of dealing with Mac hardware and OS, as well as retraining my fingers to use Mac keyboard bindings (META = Apple Key or Windows Key, depending on your keyboard).

&lt;ol&gt;
&lt;li&gt;Use META-TAB instead of ALT-TAB to cycle applications
&lt;li&gt;Use META-LEFT/RIGHT instead of HOME/END to jump to start/end of a line
&lt;li&gt;Use ALT-LEFT/RIGHT instead of CTRL-LEFT/RIGHT to jump to prev/next word on a line
&lt;li&gt;META-A, META-X, META-C, META-V replace CTRL-A, CTRL-X, CTRL-C, CTRL-V for select all, cut, copy, &amp; paste. META-L, META-T, META-N replace CTRL-L, CTRL-T, CTRL-N (jump to location bar, new tab, new window). But CTRL-TAB still switches tabs. However, if you have multiple Firefox windows open, there is no way to toggle between them with the keyboard. Same problem with multiple Terminal windows. META-TAB only switches between groups of applications, but not windows within an application. 
&lt;li&gt;Sometimes ESC works to dispose a dialog; sometimes only clicking the red X works.
&lt;p&gt;
&lt;li&gt;&lt;a href="http://www.kju-app.org/"&gt;Q&lt;/a&gt; replaces qemu, but doesn't seem to work very well for my existing vmware or Virtual Box images
&lt;li&gt;&lt;a href-"http://www.virtualbox.org/"&gt;Virtual Box&lt;/a&gt; rocks on Windows, Linux and Mac

&lt;p&gt;
&lt;li&gt;&lt;a href="http://developer.apple.com/tools/xcode"&gt;XCode&lt;/a&gt; provides gcc, make, etc.
&lt;li&gt;&lt;a href="http://www.finkproject.org/download/index.php?phpLang=en"&gt;Fink&lt;/a&gt; and &lt;a href="http://darwinports.com/"&gt;DarwinPorts&lt;/a&gt; replace Debian/Ubuntu's &lt;code&gt;apt-get&lt;/code&gt; and Gentoo's &lt;code&gt;emerge&lt;/code&gt;, respectively. Once XCode and DarwinPorts are installed, you can &lt;code&gt;port install vpnc&lt;/code&gt; (to fetch deps and compile on the fly) or &lt;code&gt;apt-get install curl&lt;/code&gt; (to fetch deps and install).
&lt;li&gt;&lt;a href="http://refit.sourceforge.net/"&gt;rEFIt&lt;/a&gt; replaces grub, and more or less works as I'd expect. &lt;code&gt;/efi/refit/refit.conf&lt;/code&gt; approximately replaces &lt;code&gt;/boot/grub/menu.lst&lt;/code&gt; at least as far as picking what partition to default-boot and how long to wait

&lt;p&gt;
&lt;li&gt;Java is in &lt;code&gt;/System/Library/Frameworks/JavaVM.framework/Home&lt;/code&gt; instead of &lt;code&gt;/opt/&lt;/code&gt; or &lt;code&gt;/usr/lib/jvm/java&lt;/code&gt;
&lt;li&gt;Subversion was easier to set up on Mac (using Fink) than on Fedora 10 (using yum), especially since there's now the &lt;a href="http://download.cloudsmith.com/galileoplus/"&gt;Galileo+ Update Site from Cloudsmith&lt;/a&gt; so you don't have to download from multiple update sites to get it installed. 
&lt;blockquote&gt;&lt;i&gt;However, the version of Subversion available via Fink doesn't work with projects checked out using Eclipse - seems that the commandline client (Subversion 1.4.4) and Subversive with SVNKit (SVN 1.6.1 w/ SVNKit 1.3.0.beta.r5741) are not compatible: &lt;code&gt;svn: This client is too old to work with working copy '.'; please get a newer Subversion client&lt;/code&gt;. Using DarwinPorts to update the subversive client to 1.6.3 fixed this issue, but installed it into a different path (&lt;code&gt;/opt/local/bin&lt;/code&gt; instead of &lt;code&gt;/sw/bin&lt;/code&gt; or &lt;code&gt;/usr/bin&lt;/code&gt;).&lt;/i&gt;&lt;/blockquote&gt;

&lt;li&gt;Eclipse looks better on Mac than on Linux; however, I recently stumbled across a great tip for making &lt;a href="http://dev.eclipse.org/mhonarc/lists/linuxtools-dev/msg00143.html"&gt;Eclipse waste less screen space under gtk on Linux&lt;/a&gt;. Highly recommended bit of gtk hackery - one file makes a world of difference!

&lt;/ol&gt;

Do you have any other tips for Linux or Windows people, surviving the transition to Mac OSX? Is there any way to tell OSX to use Windows or Linux keyboard defaults so I don't have to retrain myself?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8246065507899158796?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8246065507899158796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8246065507899158796' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8246065507899158796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8246065507899158796'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/07/learning-to-love-mac-13-tips.html' title='Learning to Love the Mac: 13 Tips'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8138506445669919174</id><published>2009-06-25T18:34:00.010-04:00</published><updated>2009-06-25T19:28:48.992-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collabnet'/><category scheme='http://www.blogger.com/atom/ns#' term='svnkit'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='presto'/><category scheme='http://www.blogger.com/atom/ns#' term='update'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='rogers'/><title type='text'>My love-hate with SVN, Part 4: Corrupt Metadata &amp; Going Over Quota</title><content type='html'>&lt;p&gt;Ever had one of those days where nothing seems to work? Most of June's been that way for me... 

&lt;p&gt;This week I decided to trust my OS and let Fedora update me automatically to the latest release, Fedora 11. I've never tried a distribution upgrade; in the past I've only ever done a clean install (be it Windows, Ubuntu, MEPIS, AntiX, or Fedora). But I figured if &lt;a href="http://twitter.com/dougschaefer"&gt;@dougschaefer&lt;/a&gt; could do it, so could I.

&lt;p&gt;It was fairly smooth sailing, though the handy gui tool &lt;code&gt;preupgrade&lt;/code&gt; only downloaded packages but didn't do the upgrade, so on reboot (still in F10) I had to run &lt;code&gt;preupgrade-cli "Fedora 11 (Leonidas)"&lt;/code&gt;. I suspect I must have fatfingered my hard drive password when I rebooted he first time because it worked like a charm the second time. Overall, way more successful than attempts so far to make a Mac Pro get Fedora'd, thatsfersure (grub, video, and network card issues, to name but a few).

&lt;p&gt;Anyway, now I have updated versions of subversion and python, and as a result, my Subversive projects in Eclipse don't work. After much cursing and experimenting (and updating my &lt;a href="http://www.open.collab.net/downloads/subversion/redhat.html"&gt;CollabNet Subversion version to 1.6.3&lt;/a&gt;, the solution seems to be simply this:

&lt;p&gt;&lt;blockquote&gt;Check out the projects anew within Eclipse, and if necessary, diff local changes from old project to new project.&lt;/blockquote&gt;

&lt;p&gt;But, if the project is too big (&lt;a href="http://anonsvn.jboss.org/repos/jbosstools/trunk/"&gt;jbosstools trunk folder&lt;/a&gt; is over 1.1G) you may get a heap error. You can check the whole project out via commandline, but Eclipse (or Subversive? or Mylyn?) uses too much memory and the whole thing dies, despite my running Eclipse w/ a half-gig of heap:

&lt;pre class="brush:shell"&gt;/home/nboldt/eclipse/eclipse/eclipse -clean \
  -showLocation -data /home/nboldt/eclipse/workspace-jboss \
  -vmargs -Djava.library.path=/opt/CollabNet_Subversion/lib \
  -Xmx512M -XX:PermSize=512M&lt;/pre&gt;

&lt;p&gt;In this case, the solution is to check out the project &lt;b&gt;without recursing into folders&lt;/b&gt;.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SkQAiH8K54I/AAAAAAAAEgE/faR59Uq5uck/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 274px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SkQAiH8K54I/AAAAAAAAEgE/faR59Uq5uck/s320/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5351402843469965186" /&gt;&lt;/a&gt;

&lt;p&gt;Commandline on in the Console view, that looks like this:

&lt;pre class="brush:shell"&gt;
svn checkout "https://svn.jboss.org/repos/jbosstools/trunk@HEAD" -r \
  HEAD --depth empty  "/home/nboldt/eclipse/workspace-jboss/jbosstools-trunk"&lt;/pre&gt;

&lt;p&gt;You can then copy stuff you already checked out into the new target project, then refresh the project in Eclipse. Of course in my case Eclipse then thought all the files were new, so I had to Override and Update from the repo. 

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/SkQAW2Xgd4I/AAAAAAAAEf8/uq3q7QOmCvs/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/SkQAW2Xgd4I/AAAAAAAAEf8/uq3q7QOmCvs/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5351402649774225282" /&gt;&lt;/a&gt;

&lt;p&gt;Another 24374 files or 1.1G to download. No wonder I went over my quota this month!

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/SkQBbLIVrDI/AAAAAAAAEgM/_oOdc8l5WXU/s1600-h/Screenshot-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 285px;" src="http://4.bp.blogspot.com/_i21-98vOfTA/SkQBbLIVrDI/AAAAAAAAEgM/_oOdc8l5WXU/s320/Screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5351403823578852402" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;i&gt;(Really, it was due to several different .iso torrent downloads for Fedora and CentOS, along with the movie &lt;a href="http://www.imdb.com/title/tt0103873/"&gt;Dead Alive&lt;/a&gt;, just in time for &lt;a href="http://twitter.com/search?category=saved_search&amp;id=397424&amp;q=%23zombie+OR+%23zombies+OR+%23tliteotw+OR+%23bliteotw&amp;source=sidebar"&gt;BLITEOTW&lt;/a&gt; day!)&lt;/i&gt;

&lt;p&gt;So, unfortunately, I haven't been able to enjoy any of the 33 projects in this years' Eclipse Galileo release, unlike others on the &lt;a href="http://planeteclipse.org/planet/"&gt;Planet&lt;/a&gt; and the &lt;a href="http://galileo.chinposin.com/"&gt;BirdsNest&lt;/a&gt; have. Hopefully next month will see calmer seas.

&lt;p&gt;On the plus side now that I'm running Fedora 11, I can use &lt;a href="http://fedoraproject.org/wiki/Releases/FeaturePresto"&gt;Delta RPMs&lt;/a&gt; thanks to the &lt;code&gt;yum-presto&lt;/code&gt; plugin... so next month's bill should be much, much smaller.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8138506445669919174?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8138506445669919174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8138506445669919174' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8138506445669919174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8138506445669919174'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/my-love-hate-with-svn-part-4-corrupt.html' title='My love-hate with SVN, Part 4: Corrupt Metadata &amp; Going Over Quota'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/SkQAiH8K54I/AAAAAAAAEgE/faR59Uq5uck/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6085987865780263715</id><published>2009-06-24T14:37:00.002-04:00</published><updated>2009-06-24T14:39:56.597-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox35'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>I know it's a beta, but c'mon...</title><content type='html'>In addition to crashing a few times a day, Firefox 3.5b4 has this cool overlapping button feature on its "&lt;a href="http://failwhale.com/"&gt;fail whale&lt;/a&gt;" page:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/SkJyn7A8LPI/AAAAAAAAEL8/jQFMjzF9OxE/s1600-h/Screenshot-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 172px;" src="http://4.bp.blogspot.com/_i21-98vOfTA/SkJyn7A8LPI/AAAAAAAAEL8/jQFMjzF9OxE/s320/Screenshot-1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5350965337451670770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6085987865780263715?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6085987865780263715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6085987865780263715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6085987865780263715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6085987865780263715'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/i-know-its-beta-but-cmon.html' title='I know it&apos;s a beta, but c&apos;mon...'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i21-98vOfTA/SkJyn7A8LPI/AAAAAAAAEL8/jQFMjzF9OxE/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1779431406843294592</id><published>2009-06-24T01:14:00.005-04:00</published><updated>2009-06-24T01:55:52.335-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox35'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='aybabtu'/><category scheme='http://www.blogger.com/atom/ns#' term='beta'/><title type='text'>HOWTO: Enable Firefox 3.0 extensions in Firefox 3.5 for great justice</title><content type='html'>Just updated to Fedora 11, and with it Firefox 3.5b4. Sadly, that meant most of my extensions (including mouse gestures!) no longer worked... until I found this:
&lt;blockquote&gt;&lt;i&gt;
In A.D. 2009,&lt;br/&gt;
&lt;a href="http://en-us.www.mozilla.com/en-US/firefox/3.5b4/whatsnew/"&gt;Firefox 3.5 was beginning&lt;/a&gt;.&lt;br/&gt;
Captain: What happen ?&lt;br/&gt;
Mechanic: &lt;a href="https://fedoraproject.org/wiki/Features/Firefox_3.5"&gt;Fedora 11 repo set up us the beta&lt;/a&gt;.&lt;br/&gt;
Operator: We get signal.&lt;br/&gt;
Captain: What !&lt;br/&gt;
Operator: Main browser turn on.&lt;br/&gt;
Captain: It's you !!&lt;br/&gt;
FF35: How are you gentlemen !!&lt;br/&gt;
FF35: All your extensions are belong to 3.0.&lt;br/&gt;
FF35: You are on the way a vanilla Firefox.&lt;br/&gt;
Captain: What you say !!&lt;br/&gt;
FF35: You have no chance to survive wait for GA.&lt;br/&gt;
FF35: Ha ha ha ha....&lt;br/&gt;
Operator: Captain !! *&lt;br/&gt;
Captain: To put back every 'extension'!!&lt;br/&gt;
Captain: You know what you doing.&lt;br/&gt;
Captain: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/6543"&gt;Install this&lt;/a&gt;.&lt;br/&gt;
Captain: For great justice.&lt;/i&gt;
&lt;/blockquote&gt;

Captain's Log - Additional: Here's the &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/6543"&gt;same extension for Thunderbird 3.0b2&lt;/a&gt;, though I had to disable the quicksearch toolbar box as it wouldn't close properly in TB3; also found some handy &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/2377"&gt;toolbar buttons here&lt;/a&gt; for filtering a mailbox for all/unread.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1779431406843294592?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1779431406843294592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1779431406843294592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1779431406843294592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1779431406843294592'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/howto-enable-firefox-30-extensions-in.html' title='HOWTO: Enable Firefox 3.0 extensions in Firefox 3.5 for great justice'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3348884833622740575</id><published>2009-06-23T17:59:00.006-04:00</published><updated>2009-06-23T18:09:22.428-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse35'/><category scheme='http://www.blogger.com/atom/ns#' term='galileo'/><category scheme='http://www.blogger.com/atom/ns#' term='ganymede'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Workspace #fail</title><content type='html'>&lt;p&gt;Another obscure and unhelpful error message that now pops up about once every five minutes while I'm working in Eclipse. &lt;a href="http://friends.eclipse.org/downloads/eclipse/downloads/"&gt;Upgraded to Eclipse 3.5&lt;/a&gt; a day before the official release (thanks to my &lt;a href="http://www.eclipse.org/donate/"&gt;Friends of Eclipse membership&lt;/a&gt;), but to no avail. Evidently my workspace is pooched somehow.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/SkFQX6uINdI/AAAAAAAADgs/5VoD5vEaNMw/s1600-h/encoded-string-too-long.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 259px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/SkFQX6uINdI/AAAAAAAADgs/5VoD5vEaNMw/s320/encoded-string-too-long.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5350646204122805714" /&gt;&lt;/a&gt;

&lt;p&gt;Why can't more error messages tell you &lt;b&gt;*HOW TO SOLVE THE PROBLEM*&lt;/b&gt;, rather than just reporting that something went wrong? Surely as software devs we should be able to do better... if for no better reason that to avoid having to listen to end users like myself complain? :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3348884833622740575?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3348884833622740575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3348884833622740575' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3348884833622740575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3348884833622740575'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/workspace-fail.html' title='Workspace #fail'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/SkFQX6uINdI/AAAAAAAADgs/5VoD5vEaNMw/s72-c/encoded-string-too-long.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1988443673134804557</id><published>2009-06-15T12:23:00.003-04:00</published><updated>2009-06-15T12:24:31.476-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='wtf'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Eclipse 'Vote For Pedro' Plugin?</title><content type='html'>&lt;p&gt;Got this today. No idea why / how. Anyone ever seen this?

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i21-98vOfTA/SjZ1kcl_VkI/AAAAAAAADcc/yA-VlgnNkhE/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://1.bp.blogspot.com/_i21-98vOfTA/SjZ1kcl_VkI/AAAAAAAADcc/yA-VlgnNkhE/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5347590876560315970" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1988443673134804557?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1988443673134804557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1988443673134804557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1988443673134804557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1988443673134804557'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/eclipse-vote-for-pedro-plugin.html' title='Eclipse &apos;Vote For Pedro&apos; Plugin?'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_i21-98vOfTA/SjZ1kcl_VkI/AAAAAAAADcc/yA-VlgnNkhE/s72-c/Screenshot.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3751541990393552323</id><published>2009-06-15T11:38:00.002-04:00</published><updated>2009-06-15T11:40:38.811-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cruise control'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='wtp'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='cc'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>WTP Cruise Control #fail #eclipse35</title><content type='html'>&lt;p&gt;Nine days without a green build this close to GA? Seriouslywtfbbq, people!

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/SjZrKLJ9B7I/AAAAAAAADcU/ZssCHDMxprs/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 150px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/SjZrKLJ9B7I/AAAAAAAADcU/ZssCHDMxprs/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5347579430086444978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-3751541990393552323?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/3751541990393552323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=3751541990393552323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3751541990393552323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/3751541990393552323'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/wtp-cruise-control-fail-eclipse35.html' title='WTP Cruise Control #fail #eclipse35'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/SjZrKLJ9B7I/AAAAAAAADcU/ZssCHDMxprs/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1635967770330154349</id><published>2009-06-03T16:11:00.003-04:00</published><updated>2009-06-03T16:19:02.449-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='publisher'/><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='galileo'/><title type='text'>P2: The Publisher</title><content type='html'>&lt;p&gt;The publishment has begun &lt;a href="http://www.imdb.com/title/tt0330793/taglines"&gt;[1]&lt;/a&gt;. 

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i21-98vOfTA/SibZsk0MGnI/AAAAAAAADbs/LzZqJGB-gu0/s1600-h/publisher.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 217px; height: 320px;" src="http://3.bp.blogspot.com/_i21-98vOfTA/SibZsk0MGnI/AAAAAAAADbs/LzZqJGB-gu0/s320/publisher.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5343197367741717106" /&gt;&lt;/a&gt;

&lt;p&gt;Read all &lt;a href="http://wiki.eclipse.org/Equinox/p2/Publisher"&gt;about this enhanced replacement&lt;/a&gt; for the &lt;a href="http://wiki.eclipse.org/Equinox_p2_Metadata_Generator"&gt;Metadata Generator&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1635967770330154349?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1635967770330154349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1635967770330154349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1635967770330154349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1635967770330154349'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/06/p2-publisher.html' title='P2: The Publisher'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i21-98vOfTA/SibZsk0MGnI/AAAAAAAADbs/LzZqJGB-gu0/s72-c/publisher.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-1716986569738766252</id><published>2009-05-28T12:50:00.003-04:00</published><updated>2009-05-28T12:51:56.937-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='marty'/><category scheme='http://www.blogger.com/atom/ns#' term='back to the future'/><category scheme='http://www.blogger.com/atom/ns#' term='zemeckis'/><category scheme='http://www.blogger.com/atom/ns#' term='doc brown'/><category scheme='http://www.blogger.com/atom/ns#' term='404'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>We404</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/Sh7A7EkhnfI/AAAAAAAADbg/NNlYy0HgbMc/s1600-h/wefollow404d.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 63px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/Sh7A7EkhnfI/AAAAAAAADbg/NNlYy0HgbMc/s320/wefollow404d.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340918329179741682" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-1716986569738766252?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/1716986569738766252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=1716986569738766252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1716986569738766252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/1716986569738766252'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/we404.html' title='We404'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/Sh7A7EkhnfI/AAAAAAAADbg/NNlYy0HgbMc/s72-c/wefollow404d.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-4659970102541188164</id><published>2009-05-28T11:45:00.013-04:00</published><updated>2009-05-30T11:54:45.757-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jfk'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='joelonsoftware'/><category scheme='http://www.blogger.com/atom/ns#' term='help'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='rhel'/><category scheme='http://www.blogger.com/atom/ns#' term='red hat'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='jbosstools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><category scheme='http://www.blogger.com/atom/ns#' term='survey'/><title type='text'>Eclipse Community Survey: 4 More Insights</title><content type='html'>&lt;a href="http://ianskerrett.wordpress.com/2009/05/27/top-6-insights-from-the-eclipse-community-survey/"&gt;Ian blogged&lt;/a&gt; 6 insights from this year's  &lt;a href="http://www.surveymonkey.com/sr.aspx?sm=bKNBxgKzbKzowkAOTMijPkpFhFbRCzoenXxak5KSEuU_3d"&gt;Eclipse Community Survey&lt;/a&gt;; here are a few more to get us to a full &lt;a href="http://en.wikipedia.org/wiki/Top_Ten_list_(David_Letterman)"&gt;Top Ten list&lt;/a&gt;.

&lt;ol&gt;

&lt;li&gt;&lt;i&gt;What is your primary operating system?&lt;/i&gt; 

&lt;br/&gt;&lt;br/&gt; Linux is certainly a strong player in both development (26%) and deployment (40%), beating Mac (7% and 3%) but losing to Windows (64% and 38%). More interesting to me is the fragmentation of Linux, showing that Ubuntu beats RHEL/Fedora by 10% in the desktop space (development), but loses in the server space (deployment). &lt;/li&gt;

&lt;br/&gt;

&lt;li&gt;&lt;i&gt;Where do you typically go to find Eclipse-related information?&lt;/i&gt; 

&lt;br/&gt;&lt;br/&gt; About &lt;b&gt;2/3rds&lt;/b&gt; said Google and/or the &lt;a href="http://www.eclipse.org"&gt;Eclipse&lt;/a&gt; home page, which suggests that the homepage has certainly improved - but a lot of people would rather just search. However, the survey didn't mention our finely crafted &lt;a href="http://wiki.eclipse.org"&gt;wiki.eclipse.org&lt;/a&gt;, or &lt;a href="http://help.eclipse.org"&gt;help.eclipse.org&lt;/a&gt;. Survey &lt;a href="http://twitter.com/#search?q=%23fail"&gt;#FAIL&lt;/a&gt;.
&lt;/li&gt;

&lt;br/&gt;

&lt;li&gt;&lt;i&gt;Are you or the organization you work for a member of the Eclipse Foundation?&lt;/i&gt; 

&lt;br/&gt;&lt;br/&gt; Five out of six respondents (&lt;b style="color:red"&gt;83%&lt;/b&gt;) said &lt;b style="color:red"&gt;No&lt;/b&gt;. So either we've done a terrible job of converting users into members, or people would rather give back in the form of testing, documentation, filing bugs, and writing articles. I suspect it's a little of both, but mostly the former.&lt;br/&gt;&lt;br/&gt;

 Kudos to the contributors, and shame on the corporate drones for not convincing their queen to send a little honey back to Eclipse.&lt;/li&gt;

&lt;br/&gt;

&lt;li&gt;&lt;i&gt;In the last year, how have you participated in the Eclipse community?&lt;/i&gt; 

&lt;br/&gt;&lt;br/&gt;While nearly a quarter of respondents (&lt;b style="color:green"&gt;24%&lt;/b&gt;) said "I entered at least one bug into Bugzilla", more than &lt;b style="color:red"&gt;2/3rds&lt;/b&gt; said they "used Eclipse but didn't actively participate in the community." To me that's a clear sign we have more users than contributors. Is that because most Eclipse users are Windows folks who don't grok that Open Source works best when everyone sees themselves as part of the process, rather than just a consumer?&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_i21-98vOfTA/Sh6-Q1-2GUI/AAAAAAAADbY/WPE_AsOeHA8/s1600-h/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://2.bp.blogspot.com/_i21-98vOfTA/Sh6-Q1-2GUI/AAAAAAAADbY/WPE_AsOeHA8/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340915404685842754" /&gt;&lt;/a&gt;

&lt;p&gt;I've been reading &lt;a href="http://www.amazon.com/More-Joel-Software-Occasionally-Developers/dp/1430209879/ref=pd_sim_b_1"&gt;More Joel On Software&lt;/a&gt; recently, thanks to winning a prize for &lt;a href="http://divby0.blogspot.com/2009/03/eclipsecon-09-byobsted.html"&gt;bringing a bag&lt;/a&gt; purchased in Alaska to &lt;a href="http://www.eclipsecon.org/2009/"&gt;EclipseCon&lt;/a&gt; this past March. One article stands out from there in this context, &lt;A href="http://www.joelonsoftware.com/articles/BuildingCommunitieswithSo.html"&gt;Building Communities with Software&lt;/a&gt;, from March 2003. Here's an excerpt:

&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;
The social scientist Ray Oldenburg talks about how humans need a third place, besides work and home, to meet with friends, have a beer, discuss the events of the day, and enjoy some human interaction. Coffee shops, bars, hair salons, beer gardens, pool halls, clubs, and other hangouts are as vital as factories, schools and apartments ["The Great Good Place", 1989]. But capitalist society has been eroding those third places, and society is left impoverished.
&lt;p&gt;...
&lt;p&gt;So it's no surprise that so many programmers, desperate for a little human contact, flock to online communities - chat rooms, discussion forums, open source projects, and Ultima Online. In creating community software, we are, to some extent, trying to create a third place.
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;If you feel your third place is lacking, please consider contributing more to Eclipse, to &lt;a href="http://fedoraproject.org/"&gt;Fedora&lt;/a&gt; or &lt;a href="http://centos.org/"&gt;CentOS&lt;/a&gt;, to &lt;a href="http://www.jboss.org/tools/"&gt;JBoss Tools&lt;/a&gt;, or whatever tickles your fancy. Just give something back. Your community will thank you, since, after all, "&lt;a href="http://www.answers.com/topic/a-rising-tide-lifts-all-boats-1"&gt;A rising tide lifts all boats&lt;/a&gt;."

&lt;p&gt;&lt;b&gt;UPDATE, 2009/05/30&lt;/b&gt;: &lt;a href="http://divby0.blogspot.com/2009/05/eclipse-community-survey-4-more.html#comment-7532329001215395625"&gt;Mike&lt;/a&gt;'s right, calling our users "freeloaders" isn't fair. I just wish there was a more obvious way to convert users into contributors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-4659970102541188164?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/4659970102541188164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=4659970102541188164' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4659970102541188164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/4659970102541188164'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/eclipse-community-survey-4-more.html' title='Eclipse Community Survey: 4 More Insights'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/Sh6-Q1-2GUI/AAAAAAAADbY/WPE_AsOeHA8/s72-c/Screenshot.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6511570748503640865</id><published>2009-05-26T12:23:00.003-04:00</published><updated>2009-05-26T18:19:14.429-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commonbuilder'/><category scheme='http://www.blogger.com/atom/ns#' term='athena'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='dash'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='junit'/><title type='text'>Dash Athena: Eclipse Common Build System / Running Tests On Your System</title><content type='html'>&lt;p&gt;&lt;a href="http://eclipse-projects.blogspot.com/2009/05/cpan-modules.html"&gt;Bjorn recently kvetched&lt;/a&gt; that &lt;i&gt;Eclipse projects met two or three of &lt;a href="http://www.catalyzed.org/2009/05/the-holy-grail-of-software-development.html"&gt;those goals&lt;/a&gt;, but fell down on the "common build system" and "tests run on your system"&lt;/i&gt; &lt;a href="http://eclipse-projects.blogspot.com/2009/05/cpan-modules.html"&gt;[1]&lt;/a&gt;.

&lt;p&gt;While it's true I've seen a number of projects who don't have, don't run, or don't publish their tests, I'm a little disappointed to see Bjorn's no longer committed to the common build solution we've been working on since &lt;a href="http://wiki.eclipse.org/Build_Workshop_1"&gt;September 2006&lt;/a&gt; (in earnest since &lt;a href="http://wiki.eclipse.org/Athena_Common_Build#Past_Workshops"&gt;June 2008&lt;/a&gt;). We do have a project to solve both those concerns, but like all things at Eclipse, it's powered by &lt;span style="font-weight:bold;"&gt;YOU&lt;/span&gt;. You want it to happen, you have to help. I'm looking for a few good contributors and committers for the &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure"&gt;Dash Athena&lt;/a&gt; project to supplement the great people we already have. Or, if you don't have time to contribute code, you can help by using the system, testing it, opening bugs, enhancing documentation, and blogging about it.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/Shwavx6SswI/AAAAAAAADbQ/pAkCQkNpTjI/s1600-h/athena-wants-you.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 226px; height: 320px;" src="http://4.bp.blogspot.com/_i21-98vOfTA/Shwavx6SswI/AAAAAAAADbQ/pAkCQkNpTjI/s320/athena-wants-you.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340172666308571906" /&gt;&lt;/a&gt;

&lt;p&gt;&lt;b&gt;So, what is &lt;a href="http://wiki.eclipse.org/Athena_Common_Build"&gt;Dash Athena&lt;/a&gt;?&lt;/b&gt;

&lt;p&gt;Well, it's &lt;a href="https://build.eclipse.org/hudson/view/Athena%20CBI/"&gt;a common build system using Hudson&lt;/a&gt; and PDE which can also be run commandline on Linux, Windows or Mac, or &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Getting_Started/Build_In_Eclipse"&gt;in Eclipse&lt;/a&gt;. It can produce zips of plugins, features, examples, tests, then run those tests. It can also produce update sites with p2 metadata, which can then be published to eclipse.org (or sourceforge.net, for that matter) so everyone can get your bits via Update.

&lt;p&gt;Tests will currently only run on Linux - if you'd like to help us port to &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Virtual_Server_Setup/MacOSX#TODO"&gt;Mac OS X&lt;/a&gt; and &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Virtual_Server_Setup/WinXP#TODO"&gt;Windows&lt;/a&gt;, please step up. The system works with CVS, SVN, and probably Git/Bzr/Hg too, since it supports building from locally checked-out sources and will copy your features/plugins so they're in the format that PDE requires. It supports source input via map files (soon Project Set Files (*.psf), too!) and &lt;a href="http://wiki.eclipse.org/Common_Build_Infrastructure/Defining_Binary_Dependencies"&gt;binary inputs via zips and p2 repos / update sites&lt;/a&gt;.

&lt;p&gt;If you aren't sure how to get started w/ an Athena build, please don't hesitate to ask. If you feel the docs are insufficient, incomplete, or inaccurate, let me know - or better - fix them! Want your own Hudson job to run your build? Just &lt;a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=dash&amp;component=Common%20Builder"&gt;open a bug&lt;/a&gt; and we'll set you up.

&lt;p&gt;&lt;small&gt;&lt;i&gt;Oh, and incidentally, the irony is not lost on me that I'm using American iconography above even though 5 of the 6 committers on the project are Canucks. :)&lt;/i&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6511570748503640865?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6511570748503640865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6511570748503640865' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6511570748503640865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6511570748503640865'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/dash-athena-eclipse-common-build-system.html' title='Dash Athena: Eclipse Common Build System / Running Tests On Your System'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i21-98vOfTA/Shwavx6SswI/AAAAAAAADbQ/pAkCQkNpTjI/s72-c/athena-wants-you.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-6583495665981332554</id><published>2009-05-25T15:49:00.002-04:00</published><updated>2009-05-25T16:03:51.248-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IBM'/><category scheme='http://www.blogger.com/atom/ns#' term='pde'/><category scheme='http://www.blogger.com/atom/ns#' term='evil-empire'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='wassim'/><category scheme='http://www.blogger.com/atom/ns#' term='melhem'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='bigblue'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='dotnet'/><category scheme='http://www.blogger.com/atom/ns#' term='asp'/><title type='text'>They're Coming To Make Me Write ASP!</title><content type='html'>&lt;p align="center"&gt;
&lt;a href="http://www.youtube.com/watch?v=1d0QND_24DE&amp;feature=related"&gt;&lt;img src="http://2.bp.blogspot.com/_i21-98vOfTA/Shr2mpeHhPI/AAAAAAAADbA/6TW8D8-qy6w/s320/Screenshot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5339851452028781810" /&gt;&lt;br/&gt;&lt;small&gt;watch video&lt;/small&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;blockquote&gt;&lt;i&gt;
Remember when you ran away&lt;br/&gt;
Big Blue got on their knees&lt;br/&gt;
And begged you not to leave&lt;br/&gt;
PDE'd go berserk&lt;br/&gt;
&lt;br/&gt;
You left 'em anyhow&lt;br/&gt;
And then the days got &lt;a href="http://kenn-hussey.blogspot.com/2008/01/on-biting-dust.html"&gt;worse and worse&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://wassim-melhem.blogspot.com/2009/04/passage-to-dubai_30.html"&gt;And now I see you've gone&lt;/a&gt;&lt;br/&gt;
(Completely out of your mind)&lt;br/&gt;
&lt;br/&gt;
And they're coming to take you away ha-haaa&lt;br/&gt;
They're coming to take you away ho ho hee hee ha haaa&lt;br/&gt;
To the Redmond farm&lt;br/&gt;
Where life is beautiful all the time&lt;br/&gt;
And you'll be happy to see those nice young men&lt;br/&gt;
In their - see? Sharp coats&lt;br/&gt;
And they're coming to take you away ha haaa&lt;br/&gt;
&lt;br/&gt;
We thought it was a joke&lt;br/&gt;
And so we laughed&lt;br/&gt;
We laughed when you had said&lt;br/&gt;
That you could leave the FLOSS and work for Bill&lt;br/&gt;
&lt;br/&gt;
Right? You know we laughed&lt;br/&gt;
You heard us laugh. We laughed&lt;br/&gt;
We laughed and laughed but still you left&lt;br/&gt;
But now we know you're utterly mad&lt;br/&gt;
&lt;br/&gt;
And they're coming to take you away ha haaa&lt;br/&gt;
They're coming to take you away ho ho hee hee ha haaa&lt;br/&gt;
To the happy home with bugs and Vista and viruses&lt;br/&gt;
Security "fixes" which patch and patch and open new hacks and holes&lt;br/&gt;
And they're coming to take you away ha haaa&lt;br/&gt;
&lt;br/&gt;
We've read your blogs&lt;br/&gt;
And used your code&lt;br/&gt;
And this is how you pay us back&lt;br/&gt;
For all our kind unselfish, loving deeds?&lt;br/&gt;
Ha! Well you just wait&lt;br/&gt;
They'll find you yet and when they do&lt;br/&gt;
They'll make you write with ASP.net&lt;br/&gt;
You well-dressed geek&lt;br/&gt;
&lt;br/&gt;
And they're coming to take you away ha haaa&lt;br/&gt;
They're coming to take you away ha haaa ho ho hee hee&lt;br/&gt;
To Camp Microserf where life is beautiful all the time&lt;br/&gt;
And you'll be happy to drink that nice Kool-Aid&lt;br/&gt;
In their clean white cups&lt;br/&gt;
And they're coming to take you away&lt;br/&gt;
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p align="right"&gt;&lt;small&gt;&lt;a href="http://en.wikipedia.org/wiki/Gelb_(album)"&gt;
Neuroticfish
&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/They%27re_Coming_to_Take_Me_Away_Ha-Haaa!"&gt;
They're Coming To Take Me Away
&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-6583495665981332554?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/6583495665981332554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=6583495665981332554' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6583495665981332554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/6583495665981332554'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/theyre-coming-to-make-me-write-asp.html' title='They&apos;re Coming To Make Me Write ASP!'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i21-98vOfTA/Shr2mpeHhPI/AAAAAAAADbA/6TW8D8-qy6w/s72-c/Screenshot.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8544352715118373697</id><published>2009-05-22T13:12:00.006-04:00</published><updated>2009-06-02T15:35:16.595-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='packaging'/><category scheme='http://www.blogger.com/atom/ns#' term='movies'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='provisioning'/><category scheme='http://www.blogger.com/atom/ns#' term='update manager'/><title type='text'>Use Your Metadata, Vol. 2 [Update]</title><content type='html'>&lt;p&gt;&lt;a href="http://divby0.blogspot.com/2009/05/use-your-metadata-vol-1.html"&gt;Wednesday&lt;/a&gt; I went off on a bit of a G'n'R-fueled rant about metadata, documentation, and the &lt;a href="http://www.youtube.com/watch?v=tfpc1cKnsf4"&gt;shotgun blues&lt;/a&gt;. Today, I'd like to focus on something more positive.

&lt;p&gt;As &lt;a href="http://lenettoyeur-on-eclipse.blogspot.com/2009/05/p2-call-for-community-testing.html"&gt;Pascal blogged the other day&lt;/a&gt;, the new p2 is almost done and is ready for tire-kicking.

Some new features I personally like include:

&lt;ol&gt;&lt;li&gt;a new p2.director app / task, which includes support for &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276589"&gt;installing multiple IUs&lt;/a&gt; (feature.groups) in the same step and finally has &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=273889"&gt;commandline help&lt;/a&gt;

&lt;li&gt; a new &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks#Repo2Runnable"&gt;p2.repo2runnable&lt;/a&gt; ant task, used to convert an update site zip to the old-school unpacked "runnable" features/plugins format so that one day we will be able to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=240223"&gt;throw away all those extra zips&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;UPDATE, 2009-06-02&lt;/b&gt;: repo2runnable now works as a commandline application too, thanks to &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277504#c16"&gt;Andrew's fix&lt;/a&gt;. &lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks#Repo2Runnable"&gt;Wiki updated&lt;/a&gt;.
  
&lt;li&gt;&lt;a href="http://wiki.eclipse.org/Equinox/p2/Ant_Tasks"&gt;Composite Repo, Mirroring and Slicing Tasks&lt;/a&gt; - haven't tried these yet, but they look like they'll be very handy for one day replacing the hack that is buildUpdateSite.sh for our &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271486"&gt;Modeling Project composite repos&lt;/a&gt; with something more robust and easily maintainable.

&lt;/ol&gt;

&lt;p&gt;I'm also impressed that there is new, current documentation regarding the above tasks, as well on the new &lt;a href="http://wiki.eclipse.org/Equinox/p2/Publisher"&gt;Publisher&lt;/a&gt; which replaces the &lt;a href="http://wiki.eclipse.org/Equinox_p2_Metadata_Generator"&gt;Metadata Generator&lt;/a&gt;.

&lt;p&gt;&lt;b&gt;&lt;i&gt;Will this release be p2's salvation? &lt;/i&gt;&lt;/b&gt;

&lt;p align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i21-98vOfTA/ShcE40mbpBI/AAAAAAAADa4/SKlqD1W_30c/s1600-h/p2terminator_salvation__the_future.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_i21-98vOfTA/ShcE40mbpBI/AAAAAAAADa4/SKlqD1W_30c/s400/p2terminator_salvation__the_future.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5338741257510036498" /&gt;&lt;br/&gt;&lt;small&gt;click to zoom&lt;/small&gt;&lt;/a&gt;

&lt;p&gt;Well, I'm split on the new default behaviour in the update UI, such that when you add a new update site p2 won't &lt;b&gt;by default&lt;/b&gt; search ALL your other listed sites. This is a great performance gain if you're installing a new self-contained feature, but a pain if you're installing something like &lt;a href="http://wiki.eclipse.org/VE/Update"&gt;VE&lt;/a&gt; which depends on EMF and GEF, and you don't already have those deps installed. Simple workaround is to just pick the "all sites" entry in the dropdown.

&lt;p&gt;I'm also waiting to see if there will be &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277535"&gt;something better done about recovery from slow/incomplete mirrors&lt;/a&gt;.

&lt;p&gt;But other than these minor concerns, I'd say &lt;b&gt;YES&lt;/b&gt;. With lots more commandline and ant toys available, p2 is certainly maturing. And with more people adopting its use and spinning p2 repo zips, more testing is being done, and more use cases are being covered.

&lt;p&gt;So... &lt;a href="http://www.youtube.com/watch?v=7tfyLbin9gs"&gt;get in the ring&lt;/a&gt;, and go a few rounds with p2. It's worth the battle. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8544352715118373697?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8544352715118373697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8544352715118373697' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8544352715118373697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8544352715118373697'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/use-your-metadata-vol-2.html' title='Use Your Metadata, Vol. 2 [Update]'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i21-98vOfTA/ShcE40mbpBI/AAAAAAAADa4/SKlqD1W_30c/s72-c/p2terminator_salvation__the_future.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-8699831611628316389</id><published>2009-05-20T15:07:00.006-04:00</published><updated>2009-05-20T16:03:19.349-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p2'/><category scheme='http://www.blogger.com/atom/ns#' term='bugzilla'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='fail'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='releng'/><category scheme='http://www.blogger.com/atom/ns#' term='update manager'/><category scheme='http://www.blogger.com/atom/ns#' term='errata'/><title type='text'>Use Your Metadata, Vol. 1</title><content type='html'>&lt;p&gt;It's been a bad week for update sites and Galileo contribution from Modeling... and I confess I'm partly to blame. That and the fact that despite documenting processes, workarounds, tips, tricks, and advice... no one &lt;b&gt;R&lt;/b&gt;eads &lt;b&gt;T&lt;/b&gt;he &lt;b&gt;F&lt;/b&gt;ine &lt;b&gt;M&lt;/b&gt;ediawiki (&lt;a href="http://wiki.eclipse.org/Category:Releng"&gt;Category:Releng&lt;/a&gt; or &lt;a href="http://wiki.eclipse.org/Modeling_Project_Releng"&gt;Modeling Project Releng&lt;/a&gt;).
&lt;p&gt;
Highlights:
&lt;ol&gt;&lt;li&gt;The mysterious appearance of a new version of org.eclipse.osgi_*.jar in releng.basebuilder's R35_M5 tag, which caused an ant &amp;lt;copy/&gt; used to rename a file to fail because copy can't merge two jars into one file. Still no idea why an old basebuilder tag would magically grow a new jars, but I've worked around the now-faulty assumption w/ smarter Ant code. 

&lt;li&gt;A change to the way our sites are created, in an attempt to workaround what I believe (but can't yet prove) is a flaw in the way content.xml is produced - namely, if the xml file is &gt; 21M, it gets truncated or corrupted. We used to cache 2 or 3 releases of a given project (eg., M5 and M6) on the same site, in order to give people a way to "back up" to the previous release; now, you only get the latest (&lt;A href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=271486"&gt;bug 271486&lt;/a&gt;). I confess I screwed up here and instead of replacing a folder with new contents, I was copying INTO that folder - `cp -r one two` resulted in folder one/two/ instead of two/. I fixed that by changing to a move instead of a copy, but a downstream process failed because of the assumption that both one/ and two/ would exist. The lessons here are: a) shotgun debugging sucks, and b) don't change the way stuff is created after M7.

&lt;li&gt;People publishing two updates to a site at the same time, resulting in the appearance of two &amp;lt/site&gt; tags in a site.xml file, causing p2 metadata generation to be incomplete or fail entirely; unfortunately, no error is logged when this happens so it's rather difficult to decipher the tea leaves. This may be the real source of the metadata corruption, if not the "file is too big" issue above.

&lt;li&gt;Observations about obsolete jars corrupting metadata, but no one taking it upon themselves to &lt;a href="http://wiki.eclipse.org/Modeling_Project_Releng/Maintenance"&gt;clean up the site&lt;/a&gt; or do some &lt;a href="http://wiki.eclipse.org/Modeling_Project_Releng/Releasing/Update_Site_Generation/Troubleshooting"&gt;troubleshooting&lt;/a&gt;

&lt;li&gt;People inconsistently naming their milestones (it's 2.0.0M7, not just M7!) and corrupting our Release Notes database. This one amazes me the most since it takes seconds to see what was done last time (check any of the following: RSS feeds, release notes, downloads pages, update sites) and follow suit. And, of course, the &lt;a href="http://wiki.eclipse.org/Modeling_Project_Releng/Releasing#Build_Naming_Conventions"&gt;conventions are documented&lt;/a&gt;, along with the rationale (consistent patterns == simpler code).
&lt;/ol&gt;

&lt;p&gt;Or, to put it another way...

&lt;blockquote&gt;&lt;i&gt;
Sick of this life &lt;br/&gt;
Not that you'd care&lt;br/&gt;
I'm not the only one with&lt;br/&gt;
whom these feelings I share&lt;br/&gt;
&lt;br/&gt;
Nobody understands &lt;br/&gt;
Quite why we're here&lt;br/&gt;
We're searchin' for answers&lt;br/&gt;
That never appear&lt;br/&gt;
&lt;br/&gt;
But maybe if I looked real hard I'd&lt;br/&gt;
I'd see your tryin' too&lt;br/&gt;
To understand this life,&lt;br/&gt;
That we're all goin' through&lt;br/&gt;
&lt;br/&gt;
Sometimes I feel like I'm beatin' a &lt;a href="http://www.youtube.com/watch?v=dFxd5wCEqTA"&gt;dead horse&lt;/a&gt;&lt;br/&gt;
And I don't know why you'd be bringin' me down&lt;br/&gt;
I'd like to think that your love's&lt;br/&gt;
Worth a tad more&lt;br/&gt;
It may sound funny but you'd think by now&lt;br/&gt;
I'd be smilin'&lt;br/&gt;
I guess some things never change&lt;br/&gt;
Never change&lt;br/&gt;
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;So, please, can we stop opening bugs (&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277172"&gt;277172&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277105"&gt;277105&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=277034"&gt;277034&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276928"&gt;276928&lt;/a&gt;, &lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=276641"&gt;276641&lt;/a&gt;) and just use the tools and docs already available?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17823979-8699831611628316389?l=divby0.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://divby0.blogspot.com/feeds/8699831611628316389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17823979&amp;postID=8699831611628316389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8699831611628316389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17823979/posts/default/8699831611628316389'/><link rel='alternate' type='text/html' href='http://divby0.blogspot.com/2009/05/use-your-metadata-vol-1.html' title='Use Your Metadata, Vol. 1'/><author><name>nickb</name><uri>http://www.blogger.com/profile/09200865148587349560</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_i21-98vOfTA/TRp6LoMew4I/AAAAAAAAGOI/-n7Iz3j-vy0/S220/cycling_x2_113f4eb.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17823979.post-3624126041622062895</id><published>2009-05-16T23:43:00.011-04:00</published><updated>2009-08-23T11:47:42.723-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='growisofs'/><category scheme='http://www.blogger.com/atom/ns#' term='xvid'/><category scheme='http://www.blogger.com/atom/ns#' term='transcode'/><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='dvd'/><category scheme='http://www.blogger.com/atom/ns#' term='avi'/><category scheme='http://www.blogger.com/atom/ns#' term='mplayer'/><category scheme='http://www.blogger.com/atom/ns#' term='conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='ffmpeg'/><category scheme='http://www.blogger.com/atom/ns#' term='mjpegtools'/><category scheme='http://www.blogger.com/atom/ns#' term='mplex'/><c
