Subscribe: Javahollics chatter
Added By: Feedage Forager Feedage Grade B rated
Language: English
alfresco  compress home  confluence  email  file  home  jira  output path  output  path  pics home  raw filename  time  user 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Javahollics chatter

Javahollics chatter

My staging post for things I find interesting.

Updated: 2014-10-02T23:16:18.034-07:00


Atlascamp 2010


I'm heading for my first AtlasCamp in San Franciso. The Agenda is up and the Games are afoot.

First and foremost its going to be awsmoe to meet the growing AppFusions team, things are really starting to take shape, go go go!

It's also going to be great to meet more like minded developers in the Atlassian comunity whoI didn't get the opportunity to meet'n'greet at Atlassian Summit 2010.

There are some interesting Lightning Talks coming up, I intend to present on a plugin thats nearing completion, watch My Profile page!

Gotta go, code to write!

Eclipse workspace mechanic


Why do I need this

Eclipse has a lot of preferences, there are SVN, code format, java runtime locations, maven settings, and on and on. Having to rekey all these things when creating a new workspace is time consuming and a pain. This is one reason I have something like 150 projects in my current workspace! I hoped Workspace Mechanic would help.


I can now start a new Eclipse project and import default configuration with the Workspace Mechanic from google, its Eclipse Public License, and is currently at 0.0.2, so perhaps improvements to come.

I've installed this in Eclipse 3.5, I get a tick in the bottom right corner as I have not setup 'rules' yet.

First impressions

OK, so its rule based, and each rule has to be entered by hand into a config file, for example with Preferences, you'd have to use something like: /instance/org.eclipse.ui.ide/REFRESH_WORKSPACE_ON_STARTUP=false

Well, OK, the structure is there, but TBH Ive got more pressing things to do with my time than chop preferences out of eclipse workspace config files.

Closing thoughts

Hopefully future improvements will add some kind of auto-export or even 'mirror' dumping of entire configurations, which would be a winner, as really I do just want an entire copy of what I currently have, minus all the projects.

Update site

Update site is here

Alfresco Ubuntu/Postgres install - in a nutshell


I'd known of Alfresco for a couple of years and have even installed it a few time to see what was on offer (versus the likes of Sharepoint), with upcoming projects under the umbrella, the Confluence - Alfresco plugin has caused me to see whats new in Alfresco 3.3. The Alfresco Install Guide for the installation is pretty comprehensive, I'm only giving the Autobahn subset:InstallationThe install bundled idea is appealing to some people but perhaps the engineer in me just wants to know what is being installed, where and why. So I opted for the *alfresco-community-tomcat-3.3.tar.gz* download.ExtractingWhat could go wrong? Kaboom, instant tarball explosion (ALF-2820 duly raised!), grrrr, and only a little mopping up later, I unpacked the tarball in /usr/local/apps/alfresco-3.3.DatabaseI use Postgresql for pretty much everything these days. Getting Alfresco to work is straight forward, just create an alfresco database, alfresco user and set its password to, yea, alfresco.Getting the database driver, surely I would have a copy around the place, but no, so download that and dump in INSTALL_ROOT/tomcat/lib. As I'm using JRE 1.6, I get the JDBC4 version.Configuration file changesNext up we need to tweak a config file located at INSTALL_ROOT/tomcat/shared/classes/ Its annoying to find in a linux .tgz distribution that the properties files have got the windows line ending characters (^M), this can be cured with apt-get install tofrodos, more annoyingly, the names of the binaries in the latest 10.04 Ubuntu have changed, used to be 'dos2unix' and 'unix2dos', now, its 'fromdos' and 'todos', ah well, progress. So to strip the ^M do this from the alfresco install dir:fromdos ./tomcat/shared/classes/alfresco-global.propertiesFrom the documentation the following need to be applied and TRUE, false FALSEOne final tweak to the config file was external storage:dir.root=/srv/alf_dataStarting upThere is a startup script, it only responds to 'start' and 'stop' arguments, but thats fine for testing. To startup automatically I did the following:Create a alfresco user.Modify the '' script to validate who is running it, prevents user ownership issues, inject the following at the top of the script (after line1)ALFRESCO_USER=alfrescoif [ ! "`whoami`" = "$ALFRESCO_USER" ];then echo "Alfresco must be run as [$ALFRESCO_USER] user, not as ["`whoami`"] (current user)" exitfi Use the following startup script, it wraps the a alfresco script, and runs it as that user:#! /bin/sh### BEGIN INIT INFO# Provides: skeleton# Required-Start: $remote_fs# Required-Stop: $remote_fs# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: Example initscript# Description: This file should be used to construct scripts to be# placed in /etc/init.d.### END INIT INFO## Please remove the "Author" lines above and replace them# with your own name if you copy and modify this script.# Do NOT "set -e"# PATH should only include /usr/* if it runs after the scriptPATH=/sbin:/usr/sbin:/bin:/usr/binALFRESCO_HOME=/usr/local/apps/alfresco/alfresco-community-tomcat-3.3DESC="Alfresco"NAME=alfrescoDAEMON=${ALFRESCO_HOME}/${NAME}.sh#DAEMON_ARGS="--options args"PIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAME# Exit if the package is not installed[ -x "$DAEMON" ] || exit 0# Read configuration variable file if it is present[ -r /etc/default/$NAME ] && . /etc/default/$NAME# Load the VERBOSE setting and other rcS variables. /lib/init/ Define LSB log_* functions.# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.. /lib/lsb/init-functions## Function that starts the daemon/service#do_start(){ # Return # 0 if daemon has been start[...]

Developing a commercial Atlassain plugin


I thought I'd spend a little time walking through my recent experience in developing JDigest, a Notification Digester for the Atlassian Jira issue tracker. InspirationOne day I had several people ask me how to reduce their inbox noise from Jira, well, there just isn't anything you can do about that, if you're involved, you get notified. Looking through the open issues against the Jira product (in Jira of course!), I found JRA-1369 in Feb 2009. This was set the seed in my my to develop a solution. The problem with these kinds of things is that you never really know if Atlassian is going to 'fix' it in the near future themselves, making the effort redundant.Proof of conceptThe path to a proof of concept helped me in avoid some wrong turns, initially I thought that providing Jira with a new MailQueue implementation would be what was required, but quickly found it was just an over-complication. The route adopted was to create a custom Event Listener, enabling normal non-issue related email to be mailed direct through the existing MailQueue, and issue-related email to be digested, if appropriate.Unpicking the default Issue Event handlerJira currently ships with a 'Default' issue event listener implementation, which is hard coded in several places, the likely reasons were to ensure that the event listener got setup before any issue related activity could occur, so as to not loose events.Fixing the code to not use the Default issue event listener wasn't too hard, just modifying to not specifically check for the default listener, and to fix its read only nature to allow system admins to remove it.Making source code changes to Jira is not something to be taken lightly and concerned me on two fronts, firstly, requiring potential customers to make source code changes could damage adoption, and second, every customization has to be verified on the next release, and Atlassian release often. Initially I made changes by hand, but after the 20th install I wanted something more repeatable so I wrote a Bash script and made use of Sed to programmatically fix the files. Even though this needed slight tweaks for newer versions it will save time in the long term support of various Jira versions.In order to help the wary, I prebuilt a pre-modified classes that can be used to overwrite the existing classes.Since then I've found JRA-19957 which asks if this can be fixed, after all, only system admins can modify listeners, its scheduled for 4.1.x so fingers crossed, that this jiggery pokery can be removed soon.Initial implementationExactly what to persist was interesting, I could either (a) try to persist the actual issue event (and its related required data references) and reconstitute later, in order to render the related email content, or (b) render the email, gut the content and persist the rendered output, meaning the reconstituion later would be relatively simple. The initial implementation used RAM to store the actual issue events as they came in. Of course, this isn't scaleable - on a busy site the memory requirements for this would be prohibitive, but was still useful nevertheless, to prove the theory. Choosing (b) seemed to follow the KISS principle. Gutting the email in HTML and Text forms, and later reconstituting was relatively easy through a Velocity template, and will enable end-user styling, but did present a problem - users could change their email preferences half way through a digest period, so half would be in HTML and half would be in text, oh dear, sorry about that.By now something in the order of 4 months part time had passed, but at least I was getting digest emails!Hunting around, it seemed there were two choices, either make use of PropertySet storage within Jira or extend the Jira Database Schema. The choise wasn't clear cut, on the one hand, PropertySet is already present, if used, would ensure queued digest data would not be lost, would be included in backups etc, on the other hand,[...]

Nagios3 / Ubuntu wont send email


Email just wouldn't come. No errors, no log output, nada. Turns out there is a deployment bug, #387069 but the fix hasn't seemingly fed back into Ubuntu 9.04, so for my info:

sudo /etc/init.d/nagios3 stop
sudo dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
sudo /etc/init.d/nagios3 start

And notifications start to flow...

jabberd14 for testing with jira


I'm working on getting a previously developed Jira IM library JIMI (which leveraged the work done in Yet Another IM Plugin) integrated with JEMH. The merge was always on the cards but until JEMH got bright enough to enable comment processing, the usability wasn't there. Now is the time.

With IM support, and an ability to modify issues, it becomes a whole new ballgame, so the old JIMI code is getting the dust blown off.

Current IM features include:
  • Jira configuration for Jabber
  • Additional authentication check, including captcha support
  • access to system info, eg memory usage
  • dynamic execution of arbitrary uploaded beanshell scripts. hmmmm.
Im thinking of future-features such as:
  • watch a project
  • watch a component
  • watch an issue
  • watch a user
  • filters enabling matching of subject/comment text (aking to xyz was mentioned...)
  • of course, modifying issues, eg reassign, change priority, resolve, start progress etc etc.
all doable, in time, question is, what can I get working in the next week :)

Jira, SSL and Gmail, what a faff!


I had cause today to verify correct operation of Jira with Gmail with JEMH. I had enough fun to want to write it down for future reference.

1. So Gmail needs SSL for POP and SMTP
The problem is that in order for Jira (Java actually) to setup even a single SSL connection, it needs to be able to trust the source.

Following the Connecting to SSL services page I recalled the nitty gritty of extracting the Gmail security cert, loading into the JRE cacerts file I remembered. Really usefully I was happy to the the old SSLPoke.class file I wrote to do testing ages ago still available, ironically able to use it to test my setup today! With a JRE now able to talk SSL to gmail, time to setup Jira.

2. Setup Jira
a) POP
Adding a popserver entry, with simple details, host as and valid username/password. The SSL bit comes in when setting up the handler
When adding a POP handler, ensure the gmail popserver is selected, the handler has a Uses SSL option, which needs setting true, and the port should be 995.

Followed Configuring JIRA to send SMTP mail , so modified the config/server.xml file, all seemed fine, but this is where I hit a few snags, the most irritating was "java:comp/env....." not found. Turned out this was due to a space at the front of the " java:", gah, my kingdom for a trim().

I found JRA-12180 , so moved the two jars (mail / activation ) from atlassian-jira/WEB-INF/lib into common/lib. Q: Why isnt this already done as part of the standalone dist? huh.

And yet, it still didn't work. Hmm. So found an Atlassian knowledge base article
that indicated the "mail.smptp.socketFactoryClass" entry in the server.xml file that the earlier page instructed to be added.

Alls well that ends well. Gmail now working as SMTP/POP server over SSL,.

Exterminating debian packages that wont uninstall


Darn it,
you've install shiny package X that didn't come through the relatively QA'd Ubuntu package archive, you don't want it anymore and try and uninstall, and it all goes south. It doesn't uninstall cleanly and every 10minutes you get an update window telling you that only a partial update is posssible.

I ignored this for a few days but my annoyance grew. In my case, the package in question was db2, which Ive kind of moved away from to Postgres due to simple 'just work dammit' reasons.

Removing with the various dpg optons had no effect. Surgery required.

Scalpel in hand and a probable guess that the dpk 'installed packages' file was in /lib somewhere, I did the following:

find /var -exec grep -H db2exc {} \;

This little beuty scans every file for a substring match and prints the matching filename / line. bingo

Sure enough, the file was /var/lib/dpkg/status, a flick of the scalpel and db2exc was history.

I could have done it properly and fixed the uninstall script, but I was feeling ruthless, one of those rm -rf moments.

Automatically resize the 'family pics' collection for a photo frame


I have a C109D 9" Digital Photo frame, which has a 2GB SD flash card. I thought that would have been enough, but I hit the limit over the weekend. This spurred to to finally figure out how to bulk compress images, and annoyingly, not to just convert them but to convert them in a different place so the originals are available for printing.Resizing several Gb of images is a tedious job, fortunately there are some nifty tools out there to help. At the core of the process is the imagemagick convert program, the rest is syntactic script-sugar.I wrote two scripts to do this, the first makes the first set of root folders in the target directory and calls the second to do the heavy lifting of per-root folder processing. A bug in the photo-frame code meant it hung if it encountered an empty directory (took a while to figure that out), so as a post-process, after the compression process has completed, script1 finds all folders with no files, and adds a default as a workaround.SCRIPT 1 - create.shMy top level folders were simply the year, eg 2001 etc.#!/bin/bashPICS_HOME=/srv/FamilyPicsCOMPRESS_HOME=/srv/compressedPicscd $COMPRESS_HOME#rm -rf $COMPRESS_HOME/*for aDir in `find $PICS_HOME -maxdepth 1 -name '200*' -type d`do BASEDIR=`basename $aDir` #echo Making top level folder: $COMPRESS_HOME/$BASEDIR mkdir -p $COMPRESS_HOME/$BASEDIR cd $aDir find . -iname "*.jpg" -exec $PICS_HOME/ $PICS_HOME $COMPRESS_HOME $aDir "{}" \;done#Now fixup empty dirs that break the digital photoframePLACEHOLDER="$COMPRESS_HOME/2002/someplace/placeholder.jpg"DIRS=`find $COMPRESS_HOME -type d`for aDir in $DIRSdo FILE_COUNT=`find $aDir -maxdepth 1 -type f |wc -l` if [ $FILE_COUNT -eq 0 ]; then echo need to fix dir $aDir : $FILE_COUNT cp $PLACEHOLDER $aDir/. fidoneSCRIPT 2 -!/bin/bashPICS_HOME="$1"COMPRESS_HOME="$2"aDir="$3"BASEDIR=`basename "$aDir"`aFile="$4"#echo "picsHome=[$PICS_HOME] compressHome=[$COMPRESS_HOME] aDir=[$aDir] baseDir=[$BASEDIR] aFile=[$aFile]"FILENAME=`basename "$aFile"`RELATIVE_PATH=`echo $aFile | sed -e 's/$FILENAME//g' |sed -e 's/ /-/g' | sed -e 's/\.\///g'`OUTPUT_PATH="$COMPRESS_HOME/$BASEDIR/$RELATIVE_PATH"OUTPUT_DIR=`dirname $OUTPUT_PATH`#echo Making Folder path for output: $OUTPUT_DIRmkdir -p $OUTPUT_DIR# echo Compressing $BASEDIR/$aFile to $OUTPUT_PATH cd `dirname $OUTPUT_PATH`RAW_FILENAME="`basename $OUTPUT_PATH`"if [ ! -f $OUTPUT_PATH ]; then if [ -s "$PICS_HOME/$BASEDIR/$aFile" ]; then cp "$PICS_HOME/$BASEDIR/$aFile" $OUTPUT_PATH chmod +w $OUTPUT_PATH# dd if=$PICS_HOME/jpg.hdr of="$RAW_FILENAME" bs=2 count=1# echo RAW filename=$RAW_FILENAME# echo Current dir `pwd`# echo Compressing $OUTPUT_PATH convert $RAW_FILENAME -encoding jpg -resize 640x480 -quality 86 -strip $RAW_FILENAME.tmp rm "./$RAW_FILENAME" mv "./$RAW_FILENAME.tmp" "$RAW_FILENAME" OLDSIZE=`ls -l "$PICS_HOME/$BASEDIR/$aFile" | gawk 'FS=" " { print $5 }'` NEWSIZE=`ls -l "$RAW_FILENAME" | gawk 'FS=" " { print $5 }'` echo Compressed $OUTPUT_PATH from $OLDSIZE to $NEWSIZE else echo "File is empty: $PICS_HOME/$BASEDIR/$aFile" fielse OLDSIZE=`ls -l "$PICS_HOME/$BASEDIR/$aFile" | gawk 'FS=" " { print $5 }'` NEWSIZE=`ls -l "$RAW_FILENAME" | gawk 'FS=" " { print $5 }'` echo Already Compressed $OUTPUT_PATH from $OLDSIZE to $NEWSIZEfiThe result of this compression is that my 2Gb cart is now only 10% full rather than 100% full, so in theory, should be good for another 90 years, we'll probably have HD photo frames by then so the topic may become moot!I hope these scripts will be useful fodder to anyone needing to do a similar thing.[...]

Getting a Canon MP620 working with Ubuntu 8.04 x86_64


Not quite as straight forward as it should be from Ubuntu land. Following on from this other blog...

First job is to get it on the wireless network, I had to use winxp and the bundled client to poke the right values in the printer for WEP config. Printing from XP was flawless, naturally.

For Ubuntu printing, we need to build cups-bjnp but with 8.04 there is a snag. Just doing:

apt-get install libcupsys2-dev

.. results in all dependencies bar 1 file, 'sidechannel.h', which can be extracted from upstream 1.3.8 (cups/sidechannel.h) and copied into /usr/include/cups.

Making cups-bjnp was straight forward 'make', followed by 'make install' which adds 'bjnp' as a printer back-end in cups.

In the Printer Configuration wizard, setting up the MP620 was just a case of selecting the Canon610 being the closest relative, and adding the IP address of the printer.

The next stumble was finding test pages would be processed by the printer but never printed. This was simply a useless default setting for media source, picking 'automatic paper source switching' fixed that, and prints come forth.

If printing doesn't start almost immediately, the paper source/sizes are probably incorrect, check print options in the application used to print.

Close but no cigar, so far. I can print to the MP620 but test pages come out 'split' with almost 1 for 1 white lines horizontally, cutting off an A4 print at just after the Magenta text. Plain text prints suffer the same issues. Gah, its like looking at an ancient green screen Commodore PET! Its not the printer, can print XP test pages fine, can copy XP test pages fine. CUPS and/or printer settings not quiet right. Will post more details when I figure it out.

Am I an Atlassian Lassie?


WTF? Once upon a time I wrote applications, I wrote web-apps, I created databases. Times change. I seem to be spending much time in the Atlassian eco-sphere, slowly sinking deeper and deeper into the API's but do I have the time!The recent Jira 3.13 upgrade bust my previously unpublished email interoperability fixes to plug the gap between Jira inbound email support for issue creation and my companies nefarious Exchange server and user email configurations. Why care? Well, Confluence has no 'nice' way to interface Jira, its either one webapp or another. Confluence has nice macros like {jiraissues} and {jiraportlet} which rock (ok, we forgive almost current IE6 CSS problems in the macro), there is just no nice 'form' to create issues. It is however possible to email issues into Jira. But.The problem is that we have multiple email formats, some of which are 'aliases' and not the 'one' that is in the mail attribute. Oh, and depending on which email client you use, it can change from that too. So basically, the Jira function was useless unless I could fix this. Rather than just patch my code and move on, this time, I decided to do it a little more 'properly' and create a framework that fixed all my problems, allowed extensions for other formats of inbound mail and kept such tweakery separate from the issue creation code. This got published Extendable Mail Handler. Currently, it only has an implementation that makes it compatible with Form Mail Ng, if only that worked with the current 2.[8,9] releases, 2.10m3 seemed to work fine, so fingers crossed. Here is a FormMail Ng example form for interest.As the EMH integrates with LDAP, I've been continuing to work on and around the LDAP Util library, making great use of the Beanshell plugin to embed a few SQL queries and LDAP lookups, combining with the fabulous Run macro to do parameter replacement. The result is a fully interactive series of pages allowing users to easily search for an LDAP user, Confluence group, Jira group. I need to add a few screen-shots to do it justice. As I've almost entirely delegated Confluence Space management to users (thanks to CSUM) this last piece gives them the solution that thorny question 'who is in group X' how do I give access to user Y. Keeping the solution in the Confluence bubble should help.A while back I tried to import a Twiki site from another area of the company using the Universal Wiki Translator for Twiki. As with most online translators, YMMV. In this case I managed to hit a a bug preventing upload from the off (seems to be a talent of mine), some pages got uploaded seamlessly, others were complete dross, all told 3500 pages got loaded, only later did I discern that some data was cruft and broke the XML export (I think). Man that was a couple of days of delete from ... INNER JOIN ... WHERE hell. I think I finally got down to the last 7 rows of data but got bored, well, scared, I think I finally had to remove foreign key constraints in order to remove circular referencing data. I'm not quite brave enough to try that live :) Anyway, back to the point. So we have a twiki system, its works well for those guys, and I have to say, it has one killer feature that Confluence is still scratching around for, forms. So simple, so elegant, so killer-feature. If you don't know about this, imagine a form on a Page, set some values through radio buttons, select drop-downs with images etc, hit 'save', the data gets saved, fine, but in a database from which tabular data can be extracted at a higher level. OK so, there is Scaffolding and Meta data2. Its getting there, just lacking maturity if compared to Twiki. Soooo:Integrating Twiki data with Confluence? Hmmm, {html-include} would appear a useful ally but there's a problem, Twiki, like other sites uses rel[...]

Another day in the life of a Confluence administrator


More buildsThose guys at Atlassian sure crank out the builds. Half of me is impressed that new fixes come in bite sized chunks, but the down side is having to manage that change, repeatedly. Take Confluence for example, our corporate system has oh 60 or so third party plugins giving it that extra whiz-bang, but every release I have to go through a time consuming verification process for each. What would be great in the future-vapourware tense is a way to script or otherwise define behaviour, almost like runtime JUnit tests. Anyway back to the update cycle. Being a little behind the curve is a useful thing, sure as god made little green apples there will be bugs. Being behind lets other people fix find them first, sometimes I feel like a rampant RC tester, not just limited to Atlassian, but I seem to be gifted to find those ridiculously obscure bugs/problems that no-one else does, like X windows mouse acceleration being bust and having to do a manual xset, but I digress.Upgrade/degradeWith the ever increasing visibility of Confluence in our company yours truly wants it all running nicely with as little foobar as possible. The use of 3rd party libs is both a benefit and a curse. With 2.8x and the new hover-menus I found that the MailformNG email integration I'd just spent a week or so fixing to get issues into Jira via a nice Form (and fixing Jira email handler to deal with multiple aliases for the same 'id'). Classic scenario, do I upgrade and void the work or upgrade to gain platform whiz-bang. In this scenario I went for the update/degrade, and am patiently sitting on the side waiting for a fix to FMNG-44. I suppose this could be my queue to get the source and figure out what needs to be done. Gah, another project, more email :/MailformNG 'client' for Jira issue entrySpeaking of the Jira mail handler, I hear that Jira 3.13 is coming along nicely. I should probably create another project for this particular beast, which is a modified create or comment handler. The driver for me is that depending on where a user is and what email client they use, their email address may be different that their registered email address in ldap. Jira currently insists on a direct match, I needed an 'indirect match' which I posted under JRA-14973 including an implementation for our Active Directory server. I did hear that Jira4 may have improved email management, but I have no clue as to whether or not this will be API breaking. To create another project, more email :/NTLM and LDAPutilI'm still chugging away on the Confluence NTLM, recent fixes included extending the LDAP library code to parse multiple nodes in either atlassian-user.xml or osuser.xml, doing this enables the NTLM hash 'token' that a client offers to a Confluence instance with the NTLM authenticator to be passed around to all the configured Domain Controllers to see if its valid. For a single domain this seems to work well, and should work for multiple domains, but perhaps not. I don't know if there is some weird stuff going on when mulitple DC's are defined with duplicate content, time will tell. The current approach isn't terribly scalable, as each server config is tested in turn (my only get out for this approach is that if it actually works properly I can go and fix it, honest, one day.LDAP filtersI have great fun with LDAP filters, as Im limited to working with Active Directory I've had enough time to come up with some funky filters. Whilst going into the NTLM side of things and figuring out I didn't have enough Domain Controllers defined I wanted to get a list of Domain Controllers.... Where to find... it dawned on me that I could create an LDAP filter to list the 'machine' entries in AD itself. It all revolves around the UAC (User Access Control) value, w[...]

Well, it happened


Its shameful to admit, but this is my cherry blog. It happened almost by accident, but now its done. Ahh, the fredom to rant and rage to the world or not....

The geek in my is enjoying figuring out the ins and out of creating plugins for Confluence (second cherry of the day), not bad, not bad. It all looks reminiscent of Apache Struts and forwards to JSP , albeit with Velocity templates taking over from JSP, not surprising considering its a webapp.

Why do this? well, all I want to do is not spam a thousand people when I have to patch a server, playing nice I would like to issue targeted mail. How to do that? Given Confluence, its not straight forward but can be done, probably. I'm looking at modding the existing UserList plugin to spit out a CSV list of users, which can then be embedded in the Mail NG plugin. Giving me a nice form to hit the exact userbase, perfect. All I have to do is figure out how to deploy it.

Confluence plugins look pretty powerful, I have some ideas about graphing org charts, perhaps with Graphviz, but that doesn't look flashy enough. I just wondered about SVG and would you believe it, there's a plugin for SVG also, fab. Its just a shame Microsoft can't support open standards, SVG plugins for IE are very hard to come by, I eventually used the discontinued COREL plugin due to its support for interactive functionality. Just as well there's Firefox.