<?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-227846948065670831</id><updated>2011-11-26T17:21:42.284+10:00</updated><category term='rdf apache'/><category term='semantic rdf'/><category term='GTD'/><category term='repositories'/><category term='eresearch'/><category term='eprints'/><category term='research'/><category term='blog research search fascinator'/><category term='fascinator DTeRrev'/><category term='fascinator'/><category term='Scrum'/><title type='text'>Prag-o-Matic</title><subtitle type='html'>The Prag-o-Matic is an online automaton for developing ideas about pragmatic and agile approaches to teams and projects. It is written by Duncan Dickinson, a project manager based in Brisbane, who is mainly focused on Scrum but wanders across the agile spectrum.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-582135672313623941</id><published>2011-07-15T11:54:00.000+10:00</published><updated>2011-07-15T11:54:50.812+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='repositories'/><category scheme='http://www.blogger.com/atom/ns#' term='research'/><title type='text'>New Article: Repositories post 2010: embracing heterogeneity in AWE, the Academic Working Environment</title><content type='html'>After beefing it up a little, Peter Sefton and I had our Open Repositories 2010 paper published to the Journal of Digital Information (JoDI). Check it out at&amp;nbsp;&lt;a href="http://journals.tdl.org/jodi/article/view/1766/2165"&gt;http://journals.tdl.org/jodi/article/view/1766/2165&lt;/a&gt;. I now need to start getting our OR 2011 paper ready for submission!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Abstract&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;The organizers of the 5th International Conference on Open Repositories list nine polar dichotomies that represent “The Grand Integration Challenge” for the repository community/movement. In this paper we take up the challenge. We do so in the context of a our work to build infrastructure for the academy in general, with the goal to develop a modular 'Academic Working Environment' (AWE) which encompasses both teaching and learning on one hand and research on the other. Repositories and the ecosystem of services and workflows that surround them play a key role in this emerging system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-582135672313623941?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/582135672313623941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2011/07/new-article-repositories-post-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/582135672313623941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/582135672313623941'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2011/07/new-article-repositories-post-2010.html' title='New Article: Repositories post 2010: embracing heterogeneity in AWE, the Academic Working Environment'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-1787564865444667738</id><published>2011-06-10T15:36:00.000+10:00</published><updated>2011-06-10T15:36:11.036+10:00</updated><title type='text'>Tuning your project's GPS</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;i&gt;[T]here are known knowns; there are things we know we know.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;i&gt;We also know there are known unknowns; that is to say we know there are some things we do not know.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;i&gt;But there are also unknown unknowns – the ones we don't know we don't know.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;i&gt;- Donald Rumsfeld&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I'll dare to be very simplistic and state that most projects can be abstracted into 3 main stages – determination of a goal, advancement towards that goal, and completion of the goal. There's lots to debate in that tiny framework: the time-frame, the notion of “complete”, how pure the goal remains through the process, etc. but let's run with this for a bit.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Most projects start with the determination of a goal. This may be directed towards solving a problem (“People are copying music and we want to stop it”) or maybe to create/design something new (“What does the next form of online communication look like?”). Assuming it is agreed that this goal is worth pursuing, an effort is undertaken to reach that goal. In some cases the goal is not really achievable – your project is an ongoing effort to get as close to the goal as possible – but you have a direction that you're heading in. At the end of the project or at a useful point in time (say, the release of the next version) you look back and reflect on how well that goal was being worked towards. You may then continue your efforts, refactor the goal or just dump the project.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Newell and Simon (1972) described that middle stage (advancement towards the goal) as a space through which problem-solvers must traverse to achieve their goal. It is in this problem space that we often see the trouble begin.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Consider a project that you've been on recently – did you experience staff changes, political pressure, changing technologies, ideological differences, technical hitches or just anything that made the traversal go off in a different angle to what you'd expected? If you didn't then you probably ran the project in your own shed, with the door locked. If you did then the map of your traversal features a few detours, renegotiations and stop signs. Understanding (or at least generally comprehending) the space through which your project is traversing is the difference between watching your project fall from the sky like a flying piano and getting somewhere near your goal.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In their 2003 paper “The new dynamics of strategy: Sense-making in a complex and complicated world”, Kurtz &amp;amp; Snowden state that “we challenge the universality of three basic assumptions prevalent in organizational decision support and strategy: assumptions of order, of rational choice, and of intent”. Having thrown down (or taken up) this gauntlet, they present their Cynefin sense-making framework. This was modified slightly in an HBR piece in 2007 and makes for a useful reflection point when you just can't see the forest for the trees.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Cynefin describes four domains: Known (Simple), Knowable (Complicated), Complex and Chaotic. I find these to be useful reference points on projects as they beckon me to review the project environment and explore why things are going the way they are. I also like the fact that Cynefin isn't the same old 2x2 matrix that every second analyst seems to barrow out whenever they want to describe an optimal outcome. As Kurtz &amp;amp; Snowden indicate, there is no optimal state in Cynefin – you can't make everything stable (simple) and nor should you want to.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In the Known domain we see standards, well established procedures and even best practice. If we feed in input X, we get output Y and we always get output Y. In terms of technology projects, this domain invites ERP and off the shelf solutions. You probably use more traditional, structured approaches to project management, based on the SDLC.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The Knowable domain is less structured than the Known but, with the help of experts, you can find a pertinent pathway. We need to engage with the right people in the organisation to understand how and why things are. We can acquire systems that can be customised to achieve our goals and the project can be reasonably structured but we must be aware that eliciting expert knowledge is rarely a straight-forward brain dump.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Projects in the complex domain are probably my favourite. There aren't any really solid rules and you need to search for themes, commonalities and patterns as you seed ideas and check the response. In this domain there's probably not a lot of single, off the shelf titles that will meet the goal requirements. Instead you call on a mix of existing software, development, data exchange and training to work towards the goal. This, to me, is the domain in which agile practices fit well. Quick iterations, frequent demonstrations and releases, and close client contact allow the team to see how effectively they are traversing the problem space.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Chaos can be a difficult domain in which to run a project. Chaos can take form when you've suddenly dropped out of one domain due to an unplanned "happening". Maybe it's cutting edge work, a huge upheaval in the organisation, or it's a death march project taken over by a sociopath manager that has their own dream to fulfill. In operational systems, chaos occurs if your system suddenly fails (hacked, rushed/forced to production, solar flare). At this point you have to move quickly and definitively to fix the problem. Once fixed, you may be in a good position to explain (again) to senior management why you've been lobbying for that high availability setup.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;To be honest I lied a bit – there's a fifth domain, disorder. You're most likely to have experienced this domain if you're a high-school teacher trying to teach VB6 to students that found a case of Red Bull in the fridge at little lunch. Being extremely agile here is the only way to weather the storm.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;These domains aren't set on some dogmatic lore and you may even notice the your project spans across more than one domain. Take for example a payroll system. It's most likely in the Known/Knowable domain in terms of software but the organisational context may be Complex/Chaotic. Maybe Product X was selected but the accounting team used Product Y and look set to engage in passive/aggressive mode. Maybe you're facing an organisation with 6 payroll systems or maybe you got the budget for the software but none for the customisation.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;It is important to bend your mind a bit and see if the domain really is what it appears. Perhaps what you're seeing fits the Known domain but it's really out of date and people are just clinging on to old ways – maybe it needs some disorder thrown at it. What's critical is that you get a sense of how decisions and understandings are reached within those domains. Armed with this you'll at least be able to tailor your navigational instruments as you motor towards your goal.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As someone who often works on projects that seek to introduce several new concepts to stakeholders I am often suprised that it's a struggle to convince the project office that agile methodologies are more effective than their highly structured project management framework. Everyone in the room knows that the timelines and feature-set will be difficult to set out up-front. Everyone in the room knows that we're doing more than development work - we're bringing about cultural change. But not everyone in the room likes to admit that things will get complex.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;References&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Kurtz, C.F. &amp;amp; Snowden, D.J., 2003. The new dynamics of strategy: sense-making in a complex and complicated world. Engineering Management Review, IEEE, 31(4), p.110.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Newell, A. &amp;amp; Simon, H.A., 1972. Human problem solving, Prentice-Hall.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Snowden, David J. &amp;amp; Boone, M.E., 2007. A Leader’s Framework for Decision Making. (cover story). Harvard Business Review, 85(11), p.68-76.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-1787564865444667738?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/1787564865444667738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2011/06/tuning-your-projects-gps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1787564865444667738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1787564865444667738'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2011/06/tuning-your-projects-gps.html' title='Tuning your project&apos;s GPS'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-2846002574626846722</id><published>2011-06-01T17:15:00.001+10:00</published><updated>2011-06-01T18:11:00.178+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GTD'/><category scheme='http://www.blogger.com/atom/ns#' term='Scrum'/><title type='text'>GTD® as my personal product backlog</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;i&gt;No time to discuss this as a committee - Han Solo&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;I forget things - I admit it. I also look at a mass of work and struggle  to know what I should do next. Part of the problem is that I have a  wide range of interests and often work across a number of projects. Another issue is that I can get bogged down in  the procedural if I'm not careful. My goal over the past year or so has been to organise myself so that I can better see to what needs to be seen to and give myself time to get above the forest.&lt;br /&gt;&lt;br /&gt;I have kept lists for quite some time - sometimes on paper, sometimes using software. What I didn't really do though, was see these lists as an ongoing effort in knowing my priorities. In some ways, &lt;a href="http://xkcd.com/874/"&gt;this xkcd comic&lt;/a&gt; boils down exactly what I was doing. Lists can be a prison if they're just a huge blob of stuff. This really hit home when I looked through the issue list for software that had been developed by a team I worked with. This issue list had hundreds of items, some were defects, others were features. Each week this list just rolled over and got larger. It was impossible to work out what needed to be seen to now and what was just some blue-sky thought. In the end, the development team appeared to just ignore the list and deal with issues they were being called about. My lists treated me a little differently - they made me feel guilty that I wasn't finishing everything.&lt;br /&gt;&lt;br /&gt;So, with the idea that I could do better at this, I picked up David Allen's book &lt;a href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280/ref=ntt_at_ep_dpi_1"&gt;Getting Things Done&lt;/a&gt;. David talks about many of the issues I was facing and presented a process that I find rather natural:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Collect all of my stuff - emails, articles, meeting notes etc&lt;/li&gt;&lt;li&gt;Process this stuff - work out if I need to do something and, if it takes less than 2 minutes I do it, otherwise I Organise it (next step)&lt;/li&gt;&lt;li&gt;Organise tasks in terms of priority, project etc&lt;/li&gt;&lt;li&gt;Review my tasks on a weekly basis to ensure priorities match my current context&lt;/li&gt;&lt;li&gt;Work through the tasks as a series of "next actionable items"&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;What really hit me was the similarities with Scrum. In essence, I was drawing in my various inputs and building a personal product backlog. Each task is described much like a user story ("Book car in for service") and it's important that the task is described in a useful way ("Call John" is not as useful as "Call John about the new server order"). Each day I check my calendar for fixed tasks and then plan which actionable tasks I can achieve, based on time and priority - rather similar to a sprint backlog. Every week I groom my personal product backlog to ensure it matches my current reality.&lt;br /&gt;&lt;br /&gt;Whilst David Allen doesn't use technology beyond pen and paper, I decided to look for software to help me organise myself. To be frank, the idea of using non-virtual folders and paper made me shudder. After a brief search I eventually chose &lt;a href="http://www.toodledo.com/"&gt;Toodledo&lt;/a&gt;.&amp;nbsp; There's a fair number of titles on the market but Toodledo had plugins for the iPad® and Firefox® and I've found it flexible yet easy to keep using.&lt;br /&gt;&lt;br /&gt;When I had an iPad I used &lt;a href="http://www.gingerlabs.com/cont/notability.php"&gt;Notability&lt;/a&gt; to collect things like meeting notes for processing at my normal time. The loss of the iPad (I left the job and had to hand it back) saw me go to system cards and I found that these work quite well. I would take a new card to a meeting, jot down any notes and then put the card in my in-tray for processing as any other collected item. What the card offers is a discrete input and avoids the notepad issue whereby you just end up with pages and pages of notes/tasks that never get actioned. The other thing I've been able to leave behind is the desk piled with papers that never get read and this makes my cubicle that little bit nicer.&lt;br /&gt;&lt;br /&gt;It's not been an overnight thing and, at really busy times, I've had to focus and keep my rituals going but this has meant that I don't suddenly lose track of what needs to be done. I even get more time to think about the bigger picture.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;The legal stuff:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: xx-small;"&gt;&lt;i&gt;GTD® and Getting Things Done® are registered trademarks of the &lt;a href="http://www.davidco.com/what_is_gtd.php"&gt;David Allen Company&lt;/a&gt;. &lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: xx-small;"&gt;&lt;i&gt;iPad&lt;/i&gt;&lt;i&gt;®&lt;/i&gt;&lt;i&gt; is a registered trademark of Apple Inc&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: xx-small;"&gt;&lt;i&gt;Firefox® is a registered trademark of the Mozilla Foundation&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;i&gt; &lt;/i&gt;&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/227846948065670831-2846002574626846722?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/2846002574626846722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2011/06/gtd-as-my-personal-product-backlog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2846002574626846722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2846002574626846722'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2011/06/gtd-as-my-personal-product-backlog.html' title='GTD&amp;reg; as my personal product backlog'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-7565240685697277558</id><published>2011-04-01T18:35:00.000+10:00</published><updated>2011-04-01T18:35:21.768+10:00</updated><title type='text'>Scrum at ADFI</title><content type='html'>For quite a while I've been meaning to post an overview of my work to implement Scrum in the development team in which I work at the University of Southern Queensland. This has taken shape over many months and, as with any real process, it is always being reviewed and developed to meet team needs. If you aren't really acquainted with Scrum I would encourage you to visit &lt;a href="http://www.scrum.org/"&gt;http://www.scrum.org/&lt;/a&gt; and check out their Scrum guide.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Why Scrum?&lt;/h2&gt;For quite some time the ADFI software development team had asserted that it was Agile in its approach. However, this was a very loose notion and the need for improved structure was recognised when we considered our problems in areas such as project scope and code stability and releases. &lt;br /&gt;&lt;br /&gt;The type of software development I'm interested in is design-based. No, not design as in design processes like UML, but in the creation of new solutions that improves a targetted context. We often work in new areas such as research data management systems and the main thing I have noticed when you create these new systems is that you embark on a journey that doesn't easily lend itself to easily defined time-frames and user requirements. This is where waterfall methods really fall over.&lt;br /&gt;&lt;br /&gt;I like Scrum as it provides an open and honest approach to project management. It doesn't tell you how to code, instead it focuses on what a project is delivering and how it communicates. I won't go into the various comparisons I undertook across approaches such as XP but I can say that a fair bit of time was spent looking for a best-fit method.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What does it look like?&lt;/h2&gt;To begin with, the introduction of any new methodology is an exercise in culture change.If the change is to be sustained it's important that those in the team are willing to try the new approach, see its value and start to internalise the process. This last bit is the hardest part.&lt;br /&gt;&lt;br /&gt;I started gently by reorganising our meeting schedule. Our developers had been drawn into a long weekly meeting that was largely administrative and, when they demonstrated new development work, the conversation was dragged into organisational issues such as possible project sponsors and committee procedures. This was incurring a large cost in terms of resources. I am a strong believer that developers are most effective when given time to focus and, more broadly, people are more useful in meetings that relate to their work. So Step 1 was to break the meeting into two different meetings - an admin one (usually with no developers) and an iteration meeting for demoing the work being done and planning the next iteration.&lt;br /&gt;&lt;br /&gt;I then brought in the daily scrum so as to track our work on a daily basis and I can be made aware of any issues slowing us down. We don't have fines for being late - that's not helpful and can be a real demotivater. In my teaching career I really had problems with teachers that gave out lollies to motivate students and yelled at students for infractions. If people see a value in something (or are at the very least neutral to it) their intrinsic motivation should guide them to attending. In a negative scenario it's important to individually discuss the issue with the team member and try to work out what's going on before you wave the "fine tin" at them.&lt;br /&gt;&lt;br /&gt;So we now had fortnightly iteration (sprint) demos, sprint reflections and sprint planning and daily scrums. &lt;br /&gt;&lt;br /&gt;As a team we'd been using the Trac system for quite a while. Tickets that had been opened in an iteration but not finished just carried over into the next iteration and, very quickly, the list of tickets was soul destroying. To tame this beast we went through (groomed) our tickets and chucked out stuff that had been done, broke up the "needs" vs "dreams", and ensured that the remaining tickets had appropriate metadata. I then added custom fields so different projects could grab tickets and allocate them to their sprints.&lt;br /&gt;&lt;br /&gt;We then started to call tickets User Stories as they're really meant to track feature requests and be written so users could look at the list of things being done and understand them. However, we found that some stories were really developer stories and created another Story class to cover things that needed to be done that the user is unlikely to ever request.&lt;br /&gt;&lt;br /&gt;The result of this Trac work can be seen in pages like &lt;a href="https://fascinator.usq.edu.au/trac/wiki/Projects/ReDBox"&gt;https://fascinator.usq.edu.au/trac/wiki/Projects/ReDBox&lt;/a&gt;- we have a vision statement for the project, key info and document links on the project page. Under the &lt;a href="https://fascinator.usq.edu.au/trac/wiki/Projects/ReDBox/DevelopmentPlanning"&gt;development planning&lt;/a&gt; link you can see the current sprint burndown and agreed that a defect burndown would be really handy in seeing the defects that need to be fixed and when we plan to get to them. From the development planning page you can access the product backlog and the various sprints. Picking a &lt;a href="https://fascinator.usq.edu.au/trac/wiki/Projects/ReDBox/Sprints/ReDBox_2011-04-12"&gt;recent sprint&lt;/a&gt; I can see the burndown list, a sprint goal and the full sprint backlog (this helps with the sprint demo). We also have room for Sprint notes but, honestly, we're getting better at commenting the stories so a lot of the information goes there or is expanded upon in a wiki page.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Issues&lt;/h2&gt;One of the first things people shout out (they really do) when you describe the Scrum method is "so you want us to change how we do things just for your team?". It's one of the many ways you can see how dogmatic people can be about project management. Many of us have seen organisations cling to project management frameworks that fail time after time but are kept in place as they provide for "accountability".&lt;br /&gt;&lt;br /&gt;Realistically I find that Scrum makes us even more accountable than in many other methods. On a daily basis the team looks each other in the eye and lists the work they're doing. In every sprint meeting we demonstrate our efforts to the product owner and our peers. We then reflect on how well we're going. Surely this is far more accountable than feeding project reports into monthly project steering meetings in which only the only attending team member is the project manager.&lt;br /&gt;&lt;br /&gt;The point about meeting the needs and structures of others is still important though. This is another area where I believe Scrum is strong. I believe that Scrum can dovetail into a variety of project environments and, whilst not being "pure" Scrum, it still provides tangible benefits. In a current project we don't really have a perfect Scrum environment (a remote stakeholder and a project environment that isn't structured in that direct product owner &amp;lt;-&amp;gt; team interaction). This is where we adapt. We still have daily scrums, sprint planning, review and reflection but the team is suggesting priorities to the product owner rather than the product owner grooming and setting the user stories. The project group, however, is a trusting one and these suggestions are well placed and accepted before the sprint begins.&lt;br /&gt;&lt;br /&gt;I also think our demos are still overly technical and we need to be more user-centric in our presentations but we're getting there. Our releases are also not as often as they maybe could be but over time this process can be refined. This sort of ongoing development really highlights to me how much more effective stable teams can become rather than teams that are constantly dissolved at project completion (unless you have an organisation-wide agile model). As always, you're making a big investment in your team and it's probably got the best pay-off when viewed as a long term investment.&lt;br /&gt;&lt;br /&gt;As for Trac, it isn't a great multi-project environment but it's the one we had and, given more scope, I would start to explore better options.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Where to now?&lt;/h2&gt;As Scrum settles in I would like to start looking at drawing on my teaching background and examine how a variety of thinking skills can help development teams but that's for another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-7565240685697277558?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/7565240685697277558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2011/04/scrum-at-adfi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7565240685697277558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7565240685697277558'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2011/04/scrum-at-adfi.html' title='Scrum at ADFI'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-7026942232816847383</id><published>2011-03-24T15:20:00.001+10:00</published><updated>2011-03-24T15:20:56.962+10:00</updated><title type='text'>Reboot</title><content type='html'>&lt;h1 id="dtp2"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;b&gt;&lt;font size="6"&gt;Reboot&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Well, it&amp;rsquo;s been a while since this blog and I ran into each other but rest assured, I haven&amp;rsquo;t been hibernating. As usual I&amp;rsquo;ve been involved in a wide variety of stuff:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Building the ReDBox/Mint system for recording the existence of research data&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Developing an Creative Arts Research Repository&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Building the ADFI development team&amp;rsquo;s Scrum model and support systems&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Investigating the noSQL and Convention over Configuration landscapes&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Trying to round up my reading into the eResearch environment and actually start writing&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;I&amp;rsquo;m aiming to get the Prag-o-Matic cranked up again with some posts really soon. I have done some writing elsewhere, however:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;ul&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;a href="http://www.ands-partners.org/blog/2010/08/on-the-subject-of-identifiers-3/"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000099"&gt;&lt;u&gt;&lt;font size="3"&gt;On the subject of identifiers&lt;/font&gt;&lt;/u&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;: As various teams start to build research metadata stores, it&amp;rsquo;s important to look back at the work done and lessons learnt in the Institutional Repository world. In this post I&amp;rsquo;ll discuss the issue of identifying &amp;ldquo;things&amp;rdquo; so that all repositories can have a shared understanding of data. It&amp;rsquo;s something that wasn&amp;rsquo;t well resolved in the IR community and threatens to reappear in our research metadata stores.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color:transparent;color:#000000;font-family:arial;font-style:normal;list-style-type:disc;vertical-align:baseline"&gt;&lt;span style="font-style:normal;vertical-align:baseline"&gt;&lt;font face="arial"&gt;&lt;font color="#000000"&gt;&lt;font size="3"&gt;Some conference presentations as well - I really should get these up on the web&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-7026942232816847383?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/7026942232816847383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2011/03/reboot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7026942232816847383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7026942232816847383'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2011/03/reboot.html' title='Reboot'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-3623898925227427762</id><published>2009-12-01T04:02:00.002+10:00</published><updated>2009-12-01T04:14:15.707+10:00</updated><title type='text'>London Trip (Part 1)</title><content type='html'>I headed off to London on Saturday. The first flight was an uneventful 14 hours from Brisbane to Dubai in an Emirates A340 - uneventful is a good thing.&lt;br /&gt;&lt;br /&gt;The next leg was the 8 hours from Dubai to London and the first flight I've had in an Emirates A380. It's a big plane (you knew that) and had 3 bridges for boarding. I was at the back of the plane on the first floor and it was obvious that these flying beasts take a long time for boarding.&lt;br /&gt;&lt;br /&gt;I was always skeptical of some of the airline promos going on - you know, with the idea of bars/lounges, meeting areas and indoor cricket. In reality, the seats and in-seat entertainment screens were slightly wider than those on the A340. Food also took a while to serve - on a longer flight I imagine that the rear seats must be getting breakfast as lunch is being served at the front.&lt;br /&gt;&lt;br /&gt;The underground trip from Heathrow to Gloucester Road started off well, with a lady giving me a day-pass as she didn't need it anymore. The hotel proved to be close to the station and the room is quite pleasant. Too easy!&lt;br /&gt;&lt;br /&gt;So, with only spasmodic naps under my belt from the past 36 hours I headed out for a quick trip to the London Science museum. It was a cold and rainy Sunday and, you guessed it, the place was full of kids. I don't mind kids (especially those that are stunned by trains and atmospheric engines) and the museum is now free (unlike the last time) so it was all fine. I got a few shots of Puffing Billy, Rocket and the Energy Hall before heading off.&lt;br /&gt;&lt;br /&gt;Dinner was at Garfunkel's. I'd never tried it and won't try it again.&lt;br /&gt;&lt;br /&gt;Next morning was an early awakening - 4am. After moderating myself at the breakfast buffet I headed out. Yup, out into the wind and rain - it reminded me of London :) I only got so far before stopping in for a coffee and a quick dry...&lt;br /&gt;&lt;br /&gt;&lt;iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps?f=d&amp;source=s_d&amp;saddr=110+Cromwell+Rd,+Kensington,+Greater+London+SW7+4,+United+Kingdom&amp;daddr=51.511307,-0.11939+to:Covent+Garden,+london+to:Hyde+Park+London+to:A4%2FKnightsbridge+to:110+Cromwell+Rd,+Kensington,+Greater+London+SW7+4,+United+Kingdom&amp;hl=en&amp;geocode=FQ3AEQMd0i_9_ykxjAk5XgV2SDH16nOHme8mbQ%3B%3BFa0LEgMdtgz-_ykVYHRIzQR2SDHi2tu8xoURJg%3BFQUGEgMdV4n9_yknFhX9NAV2SDEB8bs5Lq4OJg%3BFfzaEQMdqIz9_w%3BFQ3AEQMd0i_9_ykxjAk5XgV2SDH16nOHme8mbQ&amp;mra=dpe&amp;mrcr=0&amp;mrsp=1&amp;sz=14&amp;via=1,4&amp;dirflg=w&amp;sll=51.511841,-0.160074&amp;sspn=0.040704,0.132093&amp;ie=UTF8&amp;ll=51.511841,-0.160074&amp;spn=0.040704,0.132093&amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.co.uk/maps?f=d&amp;source=embed&amp;saddr=110+Cromwell+Rd,+Kensington,+Greater+London+SW7+4,+United+Kingdom&amp;daddr=51.511307,-0.11939+to:Covent+Garden,+london+to:Hyde+Park+London+to:A4%2FKnightsbridge+to:110+Cromwell+Rd,+Kensington,+Greater+London+SW7+4,+United+Kingdom&amp;hl=en&amp;geocode=FQ3AEQMd0i_9_ykxjAk5XgV2SDH16nOHme8mbQ%3B%3BFa0LEgMdtgz-_ykVYHRIzQR2SDHi2tu8xoURJg%3BFQUGEgMdV4n9_yknFhX9NAV2SDEB8bs5Lq4OJg%3BFfzaEQMdqIz9_w%3BFQ3AEQMd0i_9_ykxjAk5XgV2SDH16nOHme8mbQ&amp;mra=dpe&amp;mrcr=0&amp;mrsp=1&amp;sz=14&amp;via=1,4&amp;dirflg=w&amp;sll=51.511841,-0.160074&amp;sspn=0.040704,0.132093&amp;ie=UTF8&amp;ll=51.511841,-0.160074&amp;spn=0.040704,0.132093" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;My main target was the London Transport Museum to see the displays about the early Underground. It's a nice museum and worth the visit. I was happy to see some stuff on Marc Brunel's tunnelling shield as well as a fair bit on the early underground steam trains. Frankly, I have no desire to have experienced a form of travel that would feel like sucking on the household chimney. Funny thing is, they banned smoking from the underground whilst steam was still in use...&lt;br /&gt;&lt;br /&gt;I topped the day with a roast beef dinner and pint at the pub down the road. Happy to see yorkshire pud but wondered if I'd bought the cask's last pint of London Pride. It was about as lively as my old long-term unemployed flat mate. I'll have to find someplace with more than 3 taps...&lt;br /&gt;&lt;br /&gt;No pictures sorry - I didn't bring the cable for my camera. D'oh.&lt;br /&gt;&lt;br /&gt;PS Love the UK's Yesterday channel's close signal: "Yesterday will return at 6am"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-3623898925227427762?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/3623898925227427762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/12/london-trip-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/3623898925227427762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/3623898925227427762'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/12/london-trip-part-1.html' title='London Trip (Part 1)'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-1774601312825396332</id><published>2009-11-20T09:24:00.003+10:00</published><updated>2009-11-20T09:25:22.202+10:00</updated><title type='text'>Fascinator 0.3.0 and 2009 in review</title><content type='html'>Well, Linda has just released &lt;a href="http://fascinator.usq.edu.au/trac/wiki/tf2/Version0.3.0"&gt;Version 0.3.0 of The Fascinator &lt;/a&gt;and I thought I'd take the opportunity to sit back and reflect on our work in 2009.&lt;br /&gt;&lt;br /&gt;So, to keep it short, here's my Top 5 "big things" from our Fascinator work this year:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Complete Fascinator redesign&lt;/b&gt;&lt;br /&gt;We took a look at The Fascinator as it had been built for the ARROW project and started to reconceptualise it as a desktop system. Our work has lead us to take on a plugin notion throughout the system and this gives us the flexibility of plugging in different harvesters, storage layers and transformers.&lt;br /&gt;&lt;br /&gt;Maybe calling it a desktop eResearch system is a misnomer. We are certainly working to ensure that it runs on the desktop in a friendly manner but it should also scale so that it can be the faculty eResearch system, the institutional eResearch system and so on. eResearch - isn't it all about data and collaboration?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Advancing our Agile approach&lt;br /&gt;&lt;/b&gt;The team (esp. Linda) has been&lt;b&gt; &lt;/b&gt;working to fulfill more of the Agile approach. We're getting a lot better at scoping specific releases and actually releasing them. We're also finding a good balance in our documentation and knowledge sharing, with the idea that all the developers can work across the system.&lt;br /&gt;&lt;br /&gt;The hope now is to draw a line at some point near Easter and get The Fascinator 2.0 out there.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;3. Embracing Maven&lt;/b&gt;&lt;br /&gt;Oliver had utilised Maven in the original Fascinator and we continued this work. It's quite a learning curve but investment in time has meant that we can easily get instances of TF up and running and (hopefully) be more open to external developers wanting to take a crack at the code. Complementing this is our Nexus repository which allows us to manage dependencies without chunks of doco and frustration.&lt;br /&gt;&lt;br /&gt;This aspect is still developing and we hope to have a Continuous Integration service (Hudson) up and running in the new year. This will allow us to release daily snapshots, keep a live Maven site constantly updated and allow for Darth Tater to be quickly relocated to anyone that breaks the build.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Working with RDF&lt;/b&gt;&lt;br /&gt;This proved a steep learning curve. We picked up RDF2Go and RDFReactor on the back of implementing the Aperture system. As we started to develop new harvesters and indexing rules we found the need to read/write RDF. I even got in and developed an RDF Reactor plugin for Eclipse with the hope of easing the development of my long overdue feed reader plugin.&lt;br /&gt;&lt;br /&gt;The area of RDF development still has a long way to go before it matches the abstraction provided to RDBMS developers.&lt;br /&gt;&lt;br /&gt;We're also getting a grip on SPARQL and may even have a triple store running at the back of TF sometime in 2010.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Presenting Fascinator&lt;/b&gt;&lt;br /&gt;Well, this was big for me - I presented at eResearch Australasia 2009 and had a room full of people.&lt;br /&gt;&lt;br /&gt;I'm off to the UK for the DCC and IEEE eScience conferences in the first half of December. I'm looking forward to meeting a raft of new people and (hopefully) showing off our work over a pint.&lt;br /&gt;&lt;br /&gt;Importantly, it's not just me or Peter working on this stuff - Bron, Linda, Oliver, Ron and Cynthia have been developing, designing, planning and dealing with our flights of fancy (including harried IMs from conferences). Thanks guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-1774601312825396332?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/1774601312825396332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/fascinator-030-and-2009-in-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1774601312825396332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1774601312825396332'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/fascinator-030-and-2009-in-review.html' title='Fascinator 0.3.0 and 2009 in review'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-8370159319176147445</id><published>2009-11-16T18:04:00.002+10:00</published><updated>2009-11-16T18:04:52.454+10:00</updated><title type='text'>eResearch Australasia 2009</title><content type='html'>Well, it was a busy week last week as Peter Sefton and I attended &lt;a href="http://www.eresearch.edu.au/programme"&gt;eResearch Australasia 2009&lt;/a&gt;. This post represents my report on the main items of interest for our development work - it's not a blow by blow account.&lt;br /&gt;&lt;br /&gt;I'm told that slides and video will be available online shortly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Monday (Workshops)&lt;/b&gt;&lt;br /&gt;Two workshops on Monday. The first was "Tools and Technologies for the Social Sciences and Humanities" and focussed on the ASSDA (&lt;a href="http://assda.anu.edu.au/"&gt;Australian Social Science Data Archive&lt;/a&gt;). Main points of interest were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ASSDA is working to incorporate more qualitative research artefacts&lt;/li&gt;&lt;li&gt;Work is being done to provide quantitative analysis tools via the Nesstar tool&lt;/li&gt;&lt;li&gt;The &lt;a href="http://hccda.anu.edu.au/"&gt;Historical Census and Colonial Data Archive&lt;/a&gt; discussed the difficulty of digitising older texts (in this case fiche) - a fair bit of manual work is involved, esp. for tabular data. This work was outsourced to India.&lt;/li&gt; &lt;/ul&gt;The afternoon saw me trying out R, a data mining package. It was interesting, if a little out of my normal mode of operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tuesday (Conference)&lt;br /&gt;&lt;/b&gt;The presentation on the &lt;a href="http://www.blackloyalist.info/"&gt;Black Loyalist repository&lt;/a&gt; was an interesting look at a project that took historical documents and attempted to map the lives of little known slaves in the US. Of interest to me was the user interface which provides timeline, map and network visualisations that help you discover an individual's movements and relationships. This is backed up through links to the original source. Furthermore, the project team is working to crowd source the project by allowing others to comment and contribute to the project. Behind the scenes is the timeline from &lt;a href="http://www.simile-widgets.org/"&gt;Simile widgets&lt;/a&gt; and I'm not sure where the network map is from.&lt;br /&gt;&lt;br /&gt;Mitchell Whitelaw's visualisations of archival datasets was very interesting. Of note was the A1 Explorer which provides a tag cloud that would be really interesting to see within the Fascinator. See &lt;a href="http://visiblearchive.blogspot.com/"&gt;http://visiblearchive.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I &lt;a href="http://www.eresearch.edu.au/dickinson2009"&gt;presented The Fascinator&lt;/a&gt; and that seemed to go well. I really feel that we're working on "new" stuff here and was encouraged by people's interest in the project and the various technologies we've been utilising.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Wednesday (Conference)&lt;/b&gt;&lt;br /&gt;I attended Anne Cregan's introduction to Linked Open Data in the morning and a BOF by Peter Sefton, Anna Gerber and Peter Murray-Rust on the same topic in the afternoon. Peter describes the BOF &lt;a href="http://ptsefton.com/2009/11/12/boundaryless-eresearch-use-linked-open-data.htm/trackback"&gt;in his blog&lt;/a&gt;. I'll only add that the &lt;a href="http://www.w3.org/2008/WebVideo/Fragments/"&gt;W3C's Media Fragments&lt;/a&gt; work was mentioned and this looks to provide a method for linking to video segments. I haven't looked into this standard (yet) and interested as to how it relates to SMIL.&lt;br /&gt;&lt;br /&gt;Rob Chenrich's presentation on the Atlas of Australia was a good look at &lt;a href="http://metadata.net/sfprojects/danno.html"&gt;Danno&lt;/a&gt;, an RDF-based annotation server for text and images. It's completely browser-based and I'm really interested in setting this system up on my PC and annotate my local Fascinator. Now, if we could annotate media fragments....&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thursday (Conference)&lt;/b&gt;&lt;br /&gt;The sessions where generally informative but not specifically related to our work. I did enjoy the text mining session by Calum Robertson. With the NLA putting newspapers online it would be interesting to mine old news to find emerging patterns. Specifically for The Fascinator, text mining could bring out patterns in content such as interviews.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Friday (Workshop)&lt;/b&gt;&lt;br /&gt;This was an eResearch Project Management session that covered a lot of stuff in a few hours. It was a generally OK session but a lot of our work is of a size that I feel a weighty PM approach would slow us down. I'm a big fan of our work in the Maven space and out on-going work to refine our development practise. I can see the need to scope our projects to a reasonably formal level but, beyond that, PM starts to dominate the actual work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-8370159319176147445?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/8370159319176147445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/eresearch-australasia-2009.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8370159319176147445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8370159319176147445'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/eresearch-australasia-2009.html' title='eResearch Australasia 2009'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-550327349820462078</id><published>2009-11-11T07:11:00.004+10:00</published><updated>2009-11-11T09:38:37.533+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fascinator'/><category scheme='http://www.blogger.com/atom/ns#' term='eresearch'/><title type='text'>The Fascinator @ eResearch Australasia</title><content type='html'>Well, I gave my first substantial conference presentation today and, although I felt really nervous, I'm told it didn't show. The presentation ran for 15 minutes with 5 on top for questions.&lt;br /&gt;&lt;br /&gt;I was asked 2 questions - one by Andrew Treloar on the design and another by Jim Richardson about tagging. Andrew asked about the code model and I thought I'd add some extra clarification: the whole system is a plugin model so already runs as components. What it lacks, however, is an asynchronous, parallel form of communication. So, when you harvest a file, the system will transform and index in serial and then look at the next file. What we're wanting to do is move towards a message queue system (e.g. Rabbit MQ or Apache's MQ) that allows the system to break up and spread things like transformation. This is very useful when you hit a 1Gig video that you want to transform to flv. Time, however, is always challenging us...&lt;br /&gt;&lt;br /&gt;Jim's question was handy as I had forgotten to show off the tagging system. We're using the CommonTag schema (http://commontag.org/) so can point to endpoints. We're currently creating a user endpoint using their email as the URI but hope to have you linking to ontologies and places like dbPedia soon(ish).&lt;br /&gt;&lt;br /&gt;On the tagging front, I'd like to see us build an ontology/taxonomy/thesearus builder. This may be based on SKOS and will allow the user to create their own thesaurus. For example, in our current work, Leonie could create a list of participants for use in tags. Peter's also interested in hierarchical tagging (e.g. people/duncan) that doesn't require you to define anything formally. With this data we could create at least a basic SKOS for the user at publication time.&lt;br /&gt;&lt;br /&gt;At some point in the near future (once it's been cleared) you'll be able to check out the slides via USQ ePrints: http://eprints.usq.edu.au/6090.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-550327349820462078?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/550327349820462078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/fascinator-eresearch-australasia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/550327349820462078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/550327349820462078'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/11/fascinator-eresearch-australasia.html' title='The Fascinator @ eResearch Australasia'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-1792973306829366447</id><published>2009-10-14T18:27:00.001+10:00</published><updated>2009-10-14T18:27:24.542+10:00</updated><title type='text'>Thoughts on the ANDS Roadshow</title><content type='html'>On October 29 and 30 I attended the Australian National Data Service (ANDS) Roadshow. The primary topics were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Research data policy and the Australian Code for the Responsible Conduct of Research&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ANDS software services&lt;/li&gt;&lt;/ul&gt;This post is a bit of my thinking about the various topics discussed rather than a didactic report back.&lt;br /&gt;&lt;h1&gt;&lt;a href="http://www.ands.org.au/services/identify-my-data.html"&gt;Identify my Data&lt;/a&gt;&lt;/h1&gt;&lt;blockquote&gt;The ANDS Identify My Data service allows you to persistently identify your data.&lt;/blockquote&gt;The primary "marketing" around handles is that it provides an identifier that points to the underlying resource. You can move this resource, update the handle and people using the handle will always be able to get to the document (or an explanation as to why it doesn't exist).&lt;br /&gt;&lt;br /&gt;The W3C talks about "Cool URIs" (&lt;a href="http://www.w3.org/Provider/Style/URI"&gt;http://www.w3.org/Provider/Style/URI&lt;/a&gt;) and, in essence, a repository manager that tends their URL garden according to the notion of "cool" will be achieving this availability aspect of handles anyway.&lt;br /&gt;&lt;br /&gt;Let's look at a USQ ePrint: &lt;a href="http://eprints.usq.edu.au/5259/"&gt;http://eprints.usq.edu.au/5259/&lt;/a&gt;. This was written by my boss, Peter Sefton and Oliver Lucido, a member of our coding team. The URI is pretty "cool" as it doesn't specify a file name/extension. The domain name may be argued as not very "cool" as the "eprints" aspect may be seen to relate to the ePrints software from Southampton. However the eprints actually refers to the notion of a research document (see &lt;a href="http://en.wikipedia.org/wiki/Eprint"&gt;http://en.wikipedia.org/wiki/Eprint&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;We don't use handles in USQ ePrints so what would happen if we moved to a new server or even a new software platform? Well, we'd dump out the data and move it over to the new instance. We know what the old URL is and any decent platform should indicate the new URL (or at least identifier). So we'd then write an Apache Rewrite rule or even a small script that maps to the new location.&lt;br /&gt;&lt;br /&gt;If we did have handles we'd just have to add something to our migration script that updated the handle at the same time.&lt;br /&gt;&lt;br /&gt;Thinking from the user end of the process though, say we did have a handle for &lt;a href="http://eprints.usq.edu.au/5259/"&gt;http://eprints.usq.edu.au/5259/&lt;/a&gt;. When Peter created his eprint he'd open the page (either via the eprint URL or a handle) and in the URL box he'd see....&lt;br /&gt;&lt;a href="http://eprints.usq.edu.au/5259/"&gt;http://eprints.usq.edu.au/5259/&lt;/a&gt;. So what do you think he'd email people, put on his powerpoints or display in his staff profiles? Chances are it's &lt;a href="http://eprints.usq.edu.au/5259/"&gt;http://eprints.usq.edu.au/5259/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So all this basically means is that &lt;a href="http://eprints.usq.edu.au/5259/"&gt;http://eprints.usq.edu.au/5259/&lt;/a&gt; should be "cool" and always resolve to either the metadata page or a page explaining why it has disappeared. In effect, any good repository manager is already making the decision to keep the URL operating for a good stretch of time. If they also had handles they would have to update those as well.&lt;br /&gt;&lt;br /&gt;So I don't see that handles really change this aspect of data management. I see a more tangible role for it in my later discussion.&lt;br /&gt;&lt;h1&gt;&lt;a href="http://www.ands.org.au/services/register-my-data.html"&gt;Register my Data&lt;/a&gt;&lt;/h1&gt;&lt;blockquote&gt;The ANDS Register My Data service allows you to register collections of research materials.&lt;/blockquote&gt;The current state of institutional repositories would indicate that people register metadata in their home institution rather than just defer to an entry hosted elsewhere. For example, a USQ researcher and a QUT researcher that write an article together will each submit a copy to their institutional repository. Why? for a variety of reasons - reporting, staff profiles, different policies etc. This was a concern echoed by QUT's Lance DeVine at the ANDS Roadshow.&lt;br /&gt;&lt;br /&gt;Each repository is harvested by various sources (e.g. OAIster and the NLA's ARO service). The big international harvesters don't scrub the data so you'll often see repeated entries. The NLA does look for matches and only displays one entry for the publication. I checked this with Natasha over at the NLA and this matching is done on identifiers, not titles so using a handle in your local repository could provide an aggregator with the ability to match across multiple repositories.&lt;br /&gt;&lt;br /&gt;But who's metadata wins? What if the researchers disagree on some of the metadata?&lt;br /&gt;This may not seem to be an issue but start to think about 5, 10, 20 years into the future. So a good idea put forward by ANDS is that the research team decides who will manage the data from the outset. This person will register and manage the handle/identifier and take on the role of ensuring that data/metadata are available for a reasonable length of time. This person manages what I'll call the authoritative metadata.&lt;br /&gt;&lt;br /&gt;But what we have seen in institutional repositories will, I suspect, re-occur in data repositories. People will start to put data (or at least metadata) into their own local repositories. This may be due to local policies (we want to have any data you've worked on), local access (2Tb is a large amount to download each time you have a new postgrad student) or even for peace of mind. This creates a concern when this non-authoritative metadata is harvested by ANDS - it creates duplication that can start to affect the usefulness of search results.&lt;br /&gt;&lt;br /&gt;The easiest option is to only put authoritative metadata into any dataset repository being offered up to the ANDS harvester. This means that you're not supplying potentially redundant information but also means you may need to run more that one repository.&lt;br /&gt;&lt;br /&gt;Another option is to have 2 OAI-PMH sets - one for authoritative metadata and the other for "local" metadata. I think maybe the term canonical comes to play here.&lt;br /&gt;A further option is to look at the data/metadata in a FRBR fashion. The notion of the dataset is a Work and all local instances are an Expression/Manifestation/Item - whichever makes sense. The Work could be denoted by a persistent identifier (e.g. a handle) that is referred to by each local instance. This would mean a change to RIF-CS so an easier model could be the one described to me by StJohn Kettle, as described in the next section.&lt;br /&gt;&lt;h2&gt;Handles as Works&lt;/h2&gt;If we create a handle we can do more than just create a simple link-through. A handle would effectively be the identifier for that Work (ala FRBR).&lt;br /&gt;&lt;br /&gt;Let's say QUT and USQ start a collaborative research effort. We agree that QUT will manage the data and create a handle to point to their dataset's metadata. They take on responsibility to look after the metadata and the handle. USQ, however, might have a policy that they hold a local copy in their own data repository.&lt;br /&gt;&lt;br /&gt;So, we might end up with ANDS harvesting the same data from QUT and USQ. However, with a "tweak" their harvester could say "for every handle I get I am going to determine the primary link and only index that".&lt;br /&gt;&lt;br /&gt;The main problem is that the Handle points to the metadata location and not the OAI-PMH record for the metadata. However OAI-PMH identifiers can be any URI so, potentially, the identifier could be the handle URI. I need to think more on this one.&lt;br /&gt;&lt;br /&gt;What we also get is a distributed data access system - if the handle system can't find the primary record it will indicate other possible locations.&lt;br /&gt;&lt;h1&gt;Classify my data&lt;/h1&gt;Briefly, ANDS is working on a system to provide "end points" to useful thesauri such as the ANZSRC. This means that we can eliminate the problems faced by the NLA ARO system of inconsistent resource type and subject naming. This may also provide a platform for institutional repositories to normalise their labels.&lt;br /&gt;&lt;br /&gt;I don't want to go into it here as it's all a work in progress and I don't want to send you down the wrong path. However, I will say that this work will be useful to watch with regards to repository software as the service and vocabs will provide a handy central reference. I'll also say that my enquiries about the service were quickly and comprehensively answered by ANDS team members.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-1792973306829366447?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/1792973306829366447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/10/thoughts-on-ands-roadshow.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1792973306829366447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/1792973306829366447'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/10/thoughts-on-ands-roadshow.html' title='Thoughts on the ANDS Roadshow'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-4544099323343838020</id><published>2009-06-22T18:04:00.002+10:00</published><updated>2009-06-22T18:35:38.276+10:00</updated><title type='text'>Staying on Trac</title><content type='html'>I admit it - I am growing tired of Trac wiki. It's probably our fault - we're using an old version - but I get the feeling it's a bigger problem than that. I work with a University-based technology team that tries to keep the following things together:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Organisational news and info&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Project information&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Source code&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Job Tickets&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Server details&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Documentation&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Publications&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Procedures and Policy&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;We've got a range of skills on our team but obscure wiki markup format is not necessarily a precondition of employment. What's more, we've ended up with several sites running Trac or ICE that makes learning where to put stuff rather onerous.&lt;br /&gt;&lt;br /&gt;My thought is to start trying to bring this stuff together but the question is how. In a previous job I created a controlled vocabulary within Confluence Wiki to bring together reports and project info but source code didn't really come into the equation. XWiki might be a good open alternative but there'd be some coding to do.&lt;br /&gt;&lt;br /&gt;I've also been picking up on Maven and see that it could provide a good basis for the coding side of things but that doesn't help non-technical staff.   &lt;br /&gt;&lt;br /&gt;For presenting the content we could use The Fascinator to harvest from all of our sources and present (mash) it in a variety of combinations (public, developer or manager). That still leaves us with lots of entry points.&lt;br /&gt;&lt;br /&gt;So I have some leads but nothing solid (yet). Ideas welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-4544099323343838020?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/4544099323343838020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/staying-on-trac.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4544099323343838020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4544099323343838020'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/staying-on-trac.html' title='Staying on Trac'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-7297077609277491192</id><published>2009-06-22T17:46:00.002+10:00</published><updated>2009-06-22T18:03:39.991+10:00</updated><title type='text'>The Fascinator 2</title><content type='html'>The team found itself with a little bit of breathing space this past week or so and we focussed on developing The Fascinator Desktop. There was a fair bit of whiteboard time with Peter early on and the coding began. Call it agile or whatever, a team sharing design issues whilst developing components just seems to get their stuff together better than a highly pre-spec'd system. &lt;br /&gt;&lt;br /&gt;So, what did we achieve? Well:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Linda got Watcher up and running - even despite a moving goal.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ron and Oliver worked on creating a storage API to allow us to test against Fedora or CouchDB&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bron and I created components to get the Watcher queue and extract metadata and full text via Aperture.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Linda created a transformation API to convert files into a variety of renditions.&lt;/li&gt; &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This gives us a tool chain where we:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Watch your system for file changes&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Extract the metadata and fulltext from the file&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Transform your various file types to renditions such as html and pdf&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Store the data in a repository&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;From this point, we can lay The Fascinator search engine over the top and give you a faceted search of your files. It's not all there yet - we need to finish off some of the storage work and get it all tied together - but here's hoping that the end of the week brings version 0.1 of The Fascinator Desktop!&lt;br /&gt;&lt;br /&gt;My admission from the week: I must integrate unit tests into my development approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-7297077609277491192?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/7297077609277491192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/fascinator-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7297077609277491192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7297077609277491192'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/fascinator-2.html' title='The Fascinator 2'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-3476250679558079525</id><published>2009-06-15T09:03:00.002+10:00</published><updated>2009-06-15T09:38:16.330+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rdf apache'/><title type='text'>RDF and mod_rewrite</title><content type='html'>I was reading the &lt;a href="http://www.w3.org/TR/swbp-vocab-pub/"&gt;Best Practice Recipes for Publishing RDF Vocabularies&lt;/a&gt; and looking for an easy way to provide HTML and RDF on my site. At the moment I have (very) limited RDF but I wanted something that would allow me to have cool(ish) URIs automatically. Basically, a system that would work out if I have an HTML or RDF file depending on your request.&lt;br /&gt;&lt;br /&gt;So, http://duncan.dickinson.name/card should give you:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;card.html if you're a web browser&lt;/li&gt;&lt;br /&gt;&lt;li&gt;card.rdf if you want semantic data&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;This stretched my mod_rewrite skills but the following seems to work:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Turn off MultiViews&lt;br /&gt;Options -MultiViews -Indexes &lt;br /&gt;DirectoryIndex card.html index.html index.htm index.php&lt;br /&gt;&lt;br /&gt;# Directive to ensure *.rdf files served as appropriate content type,&lt;br /&gt;# if not present in main apache config&lt;br /&gt;AddType application/rdf+xml .rdf&lt;br /&gt;&lt;br /&gt;# Rewrite engine setup&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteBase /&lt;br /&gt;&lt;br /&gt;#Check if an RDF page exists, and return it&lt;br /&gt;RewriteCond %{HTTP_ACCEPT} application/rdf\+xml&lt;br /&gt;RewriteCond %{REQUEST_FILENAME}.rdf -f&lt;br /&gt;RewriteCond %{REQUEST_URI} !^/.*/$&lt;br /&gt;RewriteRule (.*) $1.rdf [L,R=303]&lt;br /&gt;&lt;br /&gt;#Provide a default RDF page &lt;br /&gt;RewriteCond %{HTTP_ACCEPT} application/rdf\+xml&lt;br /&gt;RewriteCond %{REQUEST_URI} ^/$&lt;br /&gt;RewriteRule .* /card.rdf [L,R=303]&lt;br /&gt;&lt;br /&gt;#Provide the HTML for the request&lt;br /&gt;RewriteCond %{REQUEST_FILENAME}.html -f&lt;br /&gt;RewriteCond %{REQUEST_URI} !^/.*/$&lt;br /&gt;RewriteRule (.*) $1.html [L,R=303]&lt;br /&gt;&lt;br /&gt;#provide the PHP page for the request&lt;br /&gt;RewriteCond %{REQUEST_FILENAME}.php -f&lt;br /&gt;RewriteCond %{REQUEST_URI} !^/.*/$&lt;br /&gt;RewriteRule (.*) $1.php [L,R=303]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Using &lt;a href="http://dowhatimean.net/2007/02/debugging-semantic-web-sites-with-curl"&gt;some help&lt;/a&gt; I got curl looking at my site's rdf:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;curl -H "Accept: application/rdf+xml" http://duncan.dickinson.name/card&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So now I get back a 303 redirect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-3476250679558079525?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/3476250679558079525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/rdf-and-modrewrite.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/3476250679558079525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/3476250679558079525'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/06/rdf-and-modrewrite.html' title='RDF and mod_rewrite'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-2060615447817612095</id><published>2009-04-16T08:13:00.004+10:00</published><updated>2009-04-16T09:27:58.212+10:00</updated><title type='text'>Easy semantic linking for authors</title><content type='html'>I've been playing with RDF a bit lately to see what I can make of it in terms of practical applications. The first hurdle is the rather long specs. Now, I won't pretend I'm someone that can pick up a spec and read it cover to cover. I like to play with some code as I read so that I can sort it in my head. So, as part of my reading I put together &lt;a href="http://duncan.dickinson.name/semanto/index.php"&gt;semanto&lt;/a&gt; - it's wrong in a couple of ways and generally basic but it's my live learning.&lt;br /&gt;&lt;br /&gt;This got me thinking about people that don't want to read the W3 specs and hunt for schema that suits their needs. Peter Sefton &lt;a href="http://ptsefton.com/2009/04/08/journal-20-embedding-semantics-in-documents.htm"&gt;discussed&lt;/a&gt; a method for authors to embed a triple into a document's link. Once the article is completed, the publisher can pass the document to a system that will turn these links into RDF/RDFa and output a webpage.&lt;br /&gt;&lt;br /&gt;As he's my boss, I tend to agree with Peter. Actually, no, I tend to agree with the idea as it provides part of an "easy in" for authors.&lt;br /&gt;&lt;br /&gt;Having played with the various RDF stuff out there, I can see that an essential part of the "easy in" is to remove the chase for RDF schemas. Bascially, I want to author something and then have an easy to use UI for classifying the information. If that system can provide me standard predicates for my items then I don't really need to think too much about semantics.&lt;br /&gt;&lt;br /&gt;To base my thoughts on this workflow:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Do research&lt;/li&gt;&lt;li&gt;Write article&lt;/li&gt;&lt;li&gt;Indicate document predicates/objects&lt;/li&gt;&lt;li&gt;(Maybe) Determine other predicates/objects&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Publish&lt;/li&gt;&lt;/ol&gt;Steps 1 &amp;amp; 2 are really in your court (though you may want to keep an eye on &lt;a href="http://fascinator.usq.edu.au/"&gt;The Fascinator&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I pick up Peter's idea in step 3. You can go through your document and add links to useful information. For example, you can assert that "Jim Smith" is a dc:creator and the dc:title is "My Weekend" etc. In Peter's model, these all appear as hyperlinks. You could even highlight the abstract and create a dc:description link. It'd be ugly and (from my experience unwieldy) but it is possible and it is cross app. You could even do some fancy grouping *.&lt;br /&gt;&lt;br /&gt;What Step 3 needs is a predefined set of terms for you to plug into. For example, we would cherry pick the various schema elements and provide those best suited to the work being produced. You could base this in an eprints-style workflow:&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;form&gt;&lt;br /&gt;What sort of publication are you describing?&lt;br /&gt;&lt;select&gt;&lt;option&gt;Article&lt;/option&gt;&lt;option&gt;Book&lt;/option&gt;&lt;/select&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;... then we present the usual&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;form&gt;&lt;br /&gt;The following properties are available for an article:&lt;br /&gt;&lt;p&gt;&lt;label for="title"&gt;Title&lt;/label&gt;&lt;input id="title" type="text"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;label for="creator"&gt;Creator&lt;/label&gt;&lt;input id="creator" type="text"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;label for="abstract"&gt;Abstract&lt;/label&gt;&lt;input id="abstract" type="text"&gt;&lt;/p&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;From that session we could produce an RDF document for the article using Dublin Core and the Bibliographic Ontology. The user will get a generated RDF file that has all the info and no need for them to work out which namespaces/schemas are the most appropriate. This isn't new - it's a little like the &lt;a href="http://www.ldodds.com/foaf/foaf-a-matic"&gt;FOAF-a-matic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We could also provide an interface with something like&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;form&gt;&lt;br /&gt;What are you describing?&lt;br /&gt;&lt;select&gt;&lt;option&gt;A location&lt;/option&gt;&lt;option&gt;An element&lt;/option&gt;&lt;option&gt;A person&lt;/option&gt;&lt;/select&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;The system can then spit out rdf triples or a link for Peter's word processor. What matters here is that, again, the author can be largely unaware of the underlying rdf complexities.&lt;br /&gt;&lt;br /&gt;This last point leads to Step 4, in which we could throw the article at a system like &lt;a href="http://www.opencalais.com/"&gt;OpenCalais&lt;/a&gt; to find content/metadata in the article that may be worth describing in RDF/RDFa. The author can select/deselect elements as they deem sensible and those that remain are either linked via RDFa or put into the associated RDF file.&lt;br /&gt;&lt;br /&gt;Now, all I need is to find the time to try this out....&lt;br /&gt;&lt;br /&gt;* Not being completely across the spec, RDFa does seem to be limited in terms of some aspects of academic publishing. The issue of author order comes to mind. Using the basic RDFa examples, I link the authors but can't contain them ala an RDF:Seq. This is discussed in &lt;a href="http://www.w3.org/2001/sw/BestPractices/HTML/2006-rdfa-containers"&gt;RDFa Containers&lt;/a&gt; and solvable - even in word processors as they have (un)ordered lists....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-2060615447817612095?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/2060615447817612095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/easy-semantic-linking-for-authors.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2060615447817612095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2060615447817612095'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/easy-semantic-linking-for-authors.html' title='Easy semantic linking for authors'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-144803732855313918</id><published>2009-04-14T14:30:00.002+10:00</published><updated>2009-04-14T14:34:49.641+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semantic rdf'/><title type='text'>Attempt 1: URLs with semantics</title><content type='html'>Having read Peter Sefton's &lt;a href="http://ptsefton.com/2009/04/08/journal-20-embedding-semantics-in-documents.htm/trackback"&gt;Journal 2.0&lt;/a&gt; post, I thought I'd have a play and create a basic URL encoder for such information. The result is the &lt;a href="http://duncan.dickinson.name/semanto/index.php"&gt;semant-o-matic&lt;/a&gt; and it's basic but a start.&lt;br /&gt;&lt;br /&gt;Excuse the poor formatting - I just wanted to have a play with some code (I get only rare chances).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-144803732855313918?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/144803732855313918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/attempt-1-urls-with-semantics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/144803732855313918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/144803732855313918'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/attempt-1-urls-with-semantics.html' title='Attempt 1: URLs with semantics'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-8089978780122174541</id><published>2009-04-06T09:06:00.004+10:00</published><updated>2009-04-06T09:21:00.612+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog research search fascinator'/><title type='text'>Accessing the Personal Knowledge Network</title><content type='html'>I get my RSS/ATOM feeds through Google Reader and can't always get to reading *everything*. This is where the search tool is such an excellent component. Like GMail, Reader allows those of us who don't tag everything to recall articles and posts that we glanced but didn't tag/store/zotero etc.&lt;br /&gt;&lt;br /&gt;Working on The Fascinator has made me start to think where my pool of "knowledge" comes from. Naturally, there are a few things in my head but I really rely on my various data sources to form my personal knowledge network.&lt;br /&gt;&lt;br /&gt;Whilst &lt;a href="http://fascinator.usq.edu.au/"&gt;The Fascinator&lt;/a&gt; desktop edition will scan sections of my drive for things that I've saved, I often don't save articles and posts to my drive. If I know I want to keep something, I put it into my poorly organised Zotero library. Otherwise, I might tag it via Delicious. If it's a blog post I sometimes tag or star it but usually I am happy to know that it's somewhere in that mess of posts.&lt;br /&gt;&lt;br /&gt;So, based on this, I think that The Fascinator would benefit from allowing this personal knowledge network to be aggregated - even at only the search level. This would mean that we can allow users to access their full network and tag/comment/associate across it.&lt;br /&gt;&lt;br /&gt;My initial targets are selfish ones - Zotero, Delicious and Google Reader.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-8089978780122174541?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/8089978780122174541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/federated-blog-searching.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8089978780122174541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8089978780122174541'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/federated-blog-searching.html' title='Accessing the Personal Knowledge Network'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-4522901946177437922</id><published>2009-04-02T14:04:00.001+10:00</published><updated>2009-04-02T14:05:43.518+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eresearch'/><title type='text'>Scholary HTML and Article 2.0</title><content type='html'>I wanted to respond to Peter Sefton's blog about Scholarly HTML in light of the Article 2.0 competition winners so, instead of doing it here, I posted a log-winded &lt;a href="http://ptsefton.com/2009/03/31/scholarly-html.htm/trackback"&gt;response on Peter's blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-4522901946177437922?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/4522901946177437922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/scholary-html-and-article-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4522901946177437922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4522901946177437922'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/04/scholary-html-and-article-20.html' title='Scholary HTML and Article 2.0'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-2077620845378257607</id><published>2009-03-17T20:31:00.007+10:00</published><updated>2009-03-18T08:55:52.681+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fascinator DTeRrev'/><title type='text'>Desktop Fascinator: File Synch</title><content type='html'>We've started work on the &lt;a href="http://fascinator.usq.edu.au/"&gt;Desktop Fascinator&lt;/a&gt; and it's coming together well. Oliver has managed to grab a snapshot of the filesystem, put it into FEDORA and index it with SOLR. Hopefully we'll have something up soon for people to check out and comment.&lt;br /&gt;&lt;br /&gt;For now, though, I've turned my attention to the part of the system reading the filesystem. The Fascinator uses harvesters to grab data from various places via various means and put the object/metadata into Fedora. For example, we have ORE and PMH harvesters to schlurp (technical term) up repository data. The current filesystem harvester basically takes a snapshot of the filesystem and load metadata into Fedora. We don't make a copy of the file in Fedora as we're expecting the files to get quite large and don't want to replicate that within the desktop.&lt;br /&gt;&lt;br /&gt;The main goal is to pick up what the user has in their directories and give them a more expansive (metadata/tags/etc) view of it. This means that the user can continue to use the filesystem and their preferred apps. It also means that we have to keep up with the filesystem state.&lt;br /&gt;&lt;br /&gt;The first thought was to poll the filesystem but that is rather intensive. Luckily, one our team members, Linda, has done a thesis that covers the alternatives and, with some quick research, I located some python options for Windows/Linux. I'm not certain how this works in OS X so I'll have to get one of the developers to test it. So for each platform:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Linux: use inotify via &lt;a href="http://pyinotify.sourceforge.net/"&gt;pyinotify&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Windows: use &lt;a href="http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx"&gt;FileSystemWatcher&lt;/a&gt; via IronPython&lt;/li&gt;&lt;li&gt;Mac: use &lt;a href="http://developer.apple.com/documentation/Darwin/Conceptual/FSEvents_ProgGuide/Introduction/Introduction.html"&gt;File System Events&lt;/a&gt; via Python (?)&lt;/li&gt;&lt;/ul&gt;This gives us a common code base and we can wrap the code up as a service that logs filesystem going-ons - the FS Watcher Service. Thinking further, The Fascinator may not be running whilst the FS Watcher is doing its thing so we can push each event into a queue to be consumed once The Fascinator is running.&lt;br /&gt;&lt;br /&gt;The team laughs at my diagrams so I like to make sure I include one:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jslpfifycq4/ScAoOnt0-FI/AAAAAAAAAAU/n9doEjf9MCo/s1600-h/fswatcher.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 153px;" src="http://1.bp.blogspot.com/_jslpfifycq4/ScAoOnt0-FI/AAAAAAAAAAU/n9doEjf9MCo/s320/fswatcher.png" alt="Diagram to match filesystem watcher description" id="BLOGGER_PHOTO_ID_5314291791941662802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;There may still be an issue with staying current with the filesystem state. Something may be lost (if the service dies for some reason) so we might still need the scanning system in case a disconnect occurs between the filesystem and the repository. This would potentially be something that the user can run when they're not finding their file in The Fascinator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-2077620845378257607?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/2077620845378257607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/desktop-fascinator-file-synch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2077620845378257607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/2077620845378257607'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/desktop-fascinator-file-synch.html' title='Desktop Fascinator: File Synch'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jslpfifycq4/ScAoOnt0-FI/AAAAAAAAAAU/n9doEjf9MCo/s72-c/fswatcher.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-8910237359514828815</id><published>2009-03-17T17:12:00.003+10:00</published><updated>2009-03-17T18:41:07.971+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eprints'/><title type='text'>OAI-PMH in ePrints</title><content type='html'>I was chatting with Peter Sefton today about OAI-PMH and resource type names so I thought I'd get back to documenting some ePrints work.&lt;br /&gt;&lt;br /&gt;So, to configure OAI-PMH for eprints is straight forward. Within your archive's folder you'll find cfg/cfg.d/oai.pl. You can make some basic alterations such as defining sets and setting up your metadata policy.&lt;br /&gt;&lt;br /&gt;Actually deciding how to represent your PMH data is important. For repositories in Australia, the NLA's &lt;a href="http://search.arrow.edu.au/"&gt;Arrow Discovery Search&lt;/a&gt; provides an interesting angle on this. Just because your repository can be harvested doesn't mean it's interoperable. You should try and see if there's a naming scheme for resource types that others around you are using. Check out &lt;a href="http://ptsefton.com/2008/10/20/towards-australian-repository-interoperability-using-oia-pmh.htm"&gt;Peter Sefton's blog post&lt;/a&gt; for a more in-depth commentary on this.&lt;br /&gt;&lt;br /&gt;So, what do you do if internally you want to define a Resource Type "Article" but the outside world want to know it as "Journal Article"? Well, for one, you can use the phrase files to call it whatever you want for users of the system. So if eprints internally calls it "Paper" your phrase file can call it "Article" to make the data submission less confusing.&lt;br /&gt;&lt;br /&gt;But, if you want to change the way that the metadata is presented to systems such as OAI-PMH, you need to look at how ePrints deals with Dublin Core. Basically, the OAI-PMH data contains the metadata in DC. Each eprint page also puts the DC into the page's meta tags.&lt;br /&gt;&lt;br /&gt;Under perl_lib/EPrints/Plugin/Export you'll find DC.pm. Now, this is an important file if you define your own resource type (with non-inbuilt fields) as eprints won't know about them and you'll have to make sure you adapt files such as DC.pm to output your Resource Type's metadata correctly. Look at the convert_dataobj procedure and you'll see how fields are then put into DC format.&lt;br /&gt;&lt;br /&gt;So, we created a qut_thesis type to indicate QUT-based theses for collection within the ADT. Now, eprints doesn't know anything about qut_thesis and we needed to edit DC.pm:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;get_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;'thesis'&lt;/span&gt; || &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;get_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;'qut_thesis'&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@dcdata&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"publisher"&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;get_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"institution"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;if&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;exists_and_set&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"institution"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;else&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@dcdata&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"publisher"&lt;/span&gt;, &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;get_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"publisher"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;if&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;exists_and_set&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"publisher"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is a basic example - I just make sure that qut_thesis DC is the same as the thesis representation. But the MACAR resource types don't include qut_thesis (funnily enough) and we want to make sure that our DC is what external readers/harvesters expect. So, the DC.pm file changes the DC type to Thesis for qut_thesis types:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;exists_and_set&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(68, 68, 68);"&gt;# We need to map the types to that of MACAR&lt;br /&gt; # But only if the text displayed in the eprint_types.xml&lt;br /&gt; # phrases file does not match MACAR&lt;br /&gt; &lt;/span&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$type&lt;/span&gt; = &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;get_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(32, 64, 160);"&gt;$type&lt;/span&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;'qut_thesis'&lt;/span&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@dcdata&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 0);"&gt;"Thesis"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;else&lt;/strong&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;strong&gt;push&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;@dcdata&lt;/span&gt;, &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt;, EPrint&lt;span style="color: rgb(176, 0, 208);"&gt;s::Utils:&lt;/span&gt;:tree_to_utf8&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(32, 64, 160);"&gt;$eprint&lt;/span&gt;-&amp;gt;render_value&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 128, 0);"&gt;"type"&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/span&gt;;&lt;br /&gt; &lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, if you visit a &lt;a href="http://eprints.qut.edu.au/18342/"&gt;sample eprint&lt;/a&gt;, and select the Export Dublin Core link you'll see that the metadata indicates that the document is a Thesis. qut_thesis is only interesting to QUT so we keep it out of the Dublin Core.&lt;br /&gt;&lt;br /&gt;Nearly there...&lt;br /&gt;&lt;br /&gt;The problem is, qut_thesis represents theses from QUT and this is harvested by the ADT system. You have to see how eprints delineates OAI-PMH sets to do this. Basically, eprints does a search on various fields such as type, subject and ispublished. It does this search and then formats the DC metadata. The code above only changes the output at this latter step. Check your archive's cfg/cfg.d/oai.pl to see the sets being defined.&lt;br /&gt;&lt;br /&gt;Checkout those import and export plugin folders. If you define your own types and properties you'll need to make sure that the import/export matches your structures. Only enable the plugins that you know work.&lt;br /&gt;&lt;br /&gt;There are better ways for EPrints to do this - e.g. provide an archive mapping system for import/export. However, it doesn't and the work isn't that difficult. Besides, that's part of the strength of a working open source product.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Other PMH Stuff&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;It's also important to make sure that you have a metadata policy so that harvesters know what they can do. OpenDOAR provides a &lt;a href="http://www.opendoar.org/tools/en/policies.php"&gt;policies tool&lt;/a&gt; to make this easy - it even exports an eprints compliant file that you can then put in your archive's cfg/cfg.d/oai.pl file. For examples of this, see the &lt;a href="http://eprints.qut.edu.au/cgi/oai2/103?verb=Identify"&gt;QUT ePrints Policy&lt;/a&gt; and the one at &lt;a href="http://eprints.utas.edu.au/cgi/oai2?verb=Identify"&gt;UTas&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Once you're ready to go, check out the Open Archives Initiative site and &lt;a href="http://www.openarchives.org/data/registerasprovider.html"&gt;register as a provider&lt;/a&gt; . If anything, it gives you a tick that your PMH output conforms. If you get the tick you'll be added to the list of &lt;a href="http://www.openarchives.org/Register/BrowseSites"&gt;registered providers&lt;/a&gt;. It's quite painless - except for getting people to decide on the actual policy.&lt;br /&gt;&lt;br /&gt;* I'm often told "we can't do that - it's hacking the source code". I take this comment to mean that Open Source means $free or that the project has no future capacity to maintain the system. This might set off your alarm bell and you really need to read &lt;a href="http://cavlec.yarinareth.net/2009/03/14/just-say-no-to-maverick-manager-jobs/" rel="bookmark" title="Permanent Link to Just say no to maverick-manager jobs"&gt;Just say no to maverick-manager jobs&lt;/a&gt; by Dorothea Salo. Consider this - software such as Peoplesoft and ResearchMaster are often "customised" - then again they also get a squadron of full-time staff. Why isn't your IR getting similar attention?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-8910237359514828815?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/8910237359514828815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/oai-pmh-in-eprints.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8910237359514828815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/8910237359514828815'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/oai-pmh-in-eprints.html' title='OAI-PMH in ePrints'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-396025450095801361</id><published>2009-03-05T19:16:00.000+10:00</published><updated>2009-03-05T19:51:54.055+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eresearch'/><title type='text'>(e)Research monkey on my back</title><content type='html'>Many years ago I was studying an MTeach/MEd, having dropped out of full-time coding and into full-time study. I lived in a share house and owned a vintage Dell laptop. Having done my BIT I admit that I never used the Library and did almost no written assignments. Studying education called on me to access articles, read them and try to turn them into a paper. Sometimes I even had to undertake observations. Most of the "research" was qualitative.&lt;br /&gt;&lt;br /&gt;So, armed with a stack of highlighted papers I drew up (paper) concept maps and started to flesh out a piece. I used emacs and LaTeX with BibTeX in that first year - it was fun but really relied heavily on my technical background to keep it afloat. For my MEd I had a newer PC so gave EndNote a go. By the time I'd set it up to understand that APA should mention that the article was on the web, I'd left that product.&lt;br /&gt;&lt;br /&gt;Now, I don't pretend that my heady coursework days can match your 5 year research effort - nuh-uh. But what I can say is that, if I nearly threw my laptop across the room just trying to create 5000 words, I can only imagine how a doctorate feels.&lt;br /&gt;&lt;br /&gt;There has to be a better way. Really.&lt;br /&gt;&lt;br /&gt;It also has to be made better for people not hitting the whoa-o-meter with their project. That's people like educators and historians. In fact anyone whose research requires them to collate data that amounts to something less than a large European dodgem circuit. It really seems that, if you're not munching PetaBytes, no-one wants to share your lunch. University ICT teams give you just enough storage to hold a picture of your cat and many eResearch data people are looking for that bigger bang.&lt;br /&gt;&lt;br /&gt;So you store all your data on your laptop and a few disks and roll the dice.&lt;br /&gt;&lt;a href="http://eprints.qut.edu.au/14549/"&gt;Investigating Data Management Practices in Australian Universities&lt;/a&gt; and &lt;a href="https://urresearch.rochester.edu/retrieve/15430/Report+to+Public+on+Grad+Student+User+Research.pdf"&gt;The Next Generation of Academics&lt;/a&gt; really showed me some truths:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Researchers don't have time to play with their computers and eResearch tools: they just want them to work&lt;/li&gt;&lt;li&gt;Researchers aren't catalogers: they don't want to create comprehensive metadata for everything they're reading/watching/creating.&lt;/li&gt;&lt;li&gt;Researchers don't run data centres: they want institutional storage and backup so that they don't have to think about it.&lt;/li&gt;&lt;li&gt;Researchers (often) work in teams: let them share&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If your eResearch idea will create more administrative work for researchers, go back to the drawing board. I hope repository admins are listening.&lt;/li&gt;&lt;li&gt;It's not about the software - it's about the research getting done.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;So, whilst at QUT we worked really hard to integrate our ePrints data collection into the Research Master (HERDC) data collection. This essentially sought to stop doubled-up administrivia. Putting your data into ePrints actually also meant you were largely killing two birds. I really hope this work has been effective. I also really hope that the stand-alone job of submitting to an IR will become as forgotten as the night cart.&lt;br /&gt;&lt;br /&gt;So there's a lot of work to be done to create software that helps rather than hinders and workflows that flow, rather than fail.&lt;br /&gt;&lt;br /&gt;Leaving the ramble here - ready to hone these ideas into the &lt;a href="http://ptsefton.com/2009/03/05/desktop-eresearch-revolution.htm/trackback"&gt;Desktop eResearch Revolution&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-396025450095801361?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/396025450095801361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/eresearch-monkey-on-my-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/396025450095801361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/396025450095801361'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/03/eresearch-monkey-on-my-back.html' title='(e)Research monkey on my back'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-5692291364515137742</id><published>2009-02-05T12:44:00.000+10:00</published><updated>2009-02-05T13:11:02.924+10:00</updated><title type='text'>Repository Stats</title><content type='html'>For anyone that's implemented an institutional repository that has some level of researcher support, the issue of statistics is an unavoidable one. Just like a javascript counter on a web page, people like to see that their paper was downloaded n times. Now, we all know that this doesn't lead to funding in the same way that citations do but there's evidence that open access leads to increased citations.&lt;br /&gt;&lt;br /&gt;So, as IR people you can put in a stats package that really just counts hits. Something like AWStats or the like. With a bucket of aspro you might even try IR Stats. You can provide your users with trend data that indicates if the link given in their conference presentation attracted hits. These are useful indicators and depositors like them.&lt;br /&gt;&lt;br /&gt;But you might also sit there and ask if there isn't something more that the IR can give you. Well, consider what you've got in your IR. There's information about institutional staff, what they study and what they write. In this world of &lt;a href="http://en.wikipedia.org/wiki/Cynefin"&gt;complex/chaotic&lt;/a&gt; problems your IR could be mined to provide possible research collaborations that teams hadn't even dreamt of.&lt;br /&gt;&lt;br /&gt;Expand this to a system like the NLA's &lt;a href="http://search.arrow.edu.au/"&gt;ARROW Discovery Service&lt;/a&gt; and you extend beyond the campus. You have a national body of knowledge that can be mined to exploit possible research cross-overs.&lt;br /&gt;&lt;br /&gt;I mentioned this some time ago to a colleague and their response was "most researchers know others in their field - they know who to contact". Yup, agreed. But that's within their field. What about this linkages that they'd never thought of? I K Brunel is often noted as someone who didn't excel at inventing but combining: steam + iron + screw propellor = SS Great Britain. Would I be wrong to say that new "big" problems are now distributed and rather more complex? Where one person could be the innovator, we then looked at teams. But maybe the teams thing is dead - maybe it's a &lt;a href="http://books.google.com.au/books?id=LCJkRTUYueEC&amp;amp;pg=PA210&amp;amp;lpg=PA210&amp;amp;dq=the+fourth+blueprint&amp;amp;source=bl&amp;amp;ots=0OXtjN4Qs8&amp;amp;sig=y5xSMubC29DBvf-U0pBF5qEd1o8&amp;amp;hl=en&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;resnum=4&amp;amp;ct=result"&gt;Fourth Blueprint&lt;/a&gt; world of networked organisations. Maybe the IR can be mined to discover links that we didn't think of.&lt;br /&gt;&lt;br /&gt;Maybe it's also a good way to find a superviser for that thesis you're wanting to write.&lt;br /&gt;&lt;br /&gt;There's some work going on about visualisations and mining within repositories and it'll be interesting to see if that wave makes the beach.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Lies,_damned_lies,_and_statistics"&gt;Lies, damn lies, and statistics&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-5692291364515137742?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/5692291364515137742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/02/repository-stats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/5692291364515137742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/5692291364515137742'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/02/repository-stats.html' title='Repository Stats'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-4861745068937967755</id><published>2009-01-28T18:24:00.000+10:00</published><updated>2009-01-28T19:24:57.073+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eprints'/><title type='text'>EPrints: Random EPrint</title><content type='html'>Having an eprint of the day on your IR site is a useful tool. Authors like to see their work come up and it gives people something new to look at. I created a basic script to select a full-text eprint and either redirect the browser or create a citation. The redirection would be useful if you wanted a link along the lines "Find a random eprint" but this maybe isn't overly useful. By outputting a citation you can embed the information into a web page. We needed two types of output: one creates a citation as a snippet of html for use in web pages. The other outputs the citation within the archive's template.&lt;br /&gt;&lt;br /&gt;So, the code below lives in a file called "random" in the cgi folder. You have some options:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;http://myeprints.org/cgi/random: Displays the random eprint within the archive template&lt;/li&gt;&lt;br /&gt;&lt;li&gt;http://myeprints.org/cgi/random?insert=1: Displays an HTML snippet&lt;/li&gt;&lt;br /&gt;&lt;li&gt;http://myeprints.org/cgi/random?redirect=1: Redirects the browser to the full abstract of a random eprint&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;You may also notice that, in the code, I search eprints for items with public full text.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Code&lt;/h2&gt;&lt;br /&gt;Now, here's that code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#444444"&gt;######################################################################&lt;br /&gt;#&lt;br /&gt;#  Returns a random eprint&lt;br /&gt;#&lt;br /&gt;######################################################################&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;strong&gt;use&lt;/strong&gt; EPrints;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; strict;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; Data::Dumper;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt; = &lt;strong&gt;new&lt;/strong&gt; EPrints::Session;&lt;br /&gt;&lt;strong&gt;exit&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;0&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;unless&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="a52a2a"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#load the archive data set&lt;br /&gt;&lt;/font&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$ds&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;get_repository-&amp;gt;get_dataset&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;archive&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$searchexp&lt;/font&gt; = EPrints::Search-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    satisfy_all =&amp;gt; 1,&lt;br /&gt;    session     =&amp;gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;,&lt;br /&gt;    dataset     =&amp;gt; &lt;font color="#2040a0"&gt;$ds&lt;/font&gt;,&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;font color="#2040a0"&gt;$searchexp&lt;/font&gt;-&amp;gt;add_field&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$ds&lt;/font&gt;-&amp;gt;get_field&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;full_text_status&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;, &lt;font color="#008000"&gt;'public'&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$results&lt;/font&gt; = &lt;font color="#2040a0"&gt;$searchexp&lt;/font&gt;-&amp;gt;perform_search;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$offset&lt;/font&gt;  = &lt;font color="a52a2a"&gt;&lt;strong&gt;rand&lt;/strong&gt;&lt;/font&gt; &lt;font color="a52a2a"&gt;&lt;strong&gt;int&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$results&lt;/font&gt;-&amp;gt;count &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;@ids&lt;/font&gt; = &lt;font color="#2040a0"&gt;@{ $searchexp-&amp;gt;get_ids }&lt;/font&gt;;&lt;br /&gt;&lt;font color="#2040a0"&gt;$searchexp&lt;/font&gt;-&amp;gt;dispose;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;param&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;redirect&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; == 1 &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;redirect&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;/&amp;quot;&lt;/font&gt; . &lt;font color="#2040a0"&gt;$ids&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$offset&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;strong&gt;exit&lt;/strong&gt;;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#prepare a citation string&lt;br /&gt;&lt;/font&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$ep&lt;/font&gt; = EPrint&lt;font color="b000d0"&gt;s::DataObj:&lt;/font&gt;:EPrint-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;, &lt;font color="#2040a0"&gt;$ids&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$offset&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$citation&lt;/font&gt; = &lt;font color="#2040a0"&gt;$ep&lt;/font&gt;-&amp;gt;render_citation_link&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;default&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;param&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;insert&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;font color="#008000"&gt;'1'&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;send_http_header&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; content_type =&amp;gt; &lt;font color="#008000"&gt;&amp;quot;text/plain&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$citation&lt;/font&gt;-&amp;gt;toString;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;else&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;#Build a display page&lt;br /&gt;    &lt;/font&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$title&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;html_phrase&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;cgi/random:title&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$page&lt;/font&gt;  = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;make_doc_fragment&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="#2040a0"&gt;$page&lt;/font&gt;-&amp;gt;appendChild&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$citation&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;build_page&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$title&lt;/font&gt;, &lt;font color="#2040a0"&gt;$page&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;latest&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;send_page&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;terminate&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;strong&gt;exit&lt;/strong&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;How?&lt;/h2&gt;&lt;br /&gt;So, how can you use this? Well, we could have setup a cron job to wget a random citation snippet. One of the library pages accessed this via JSP and inserted it into their page. &lt;br /&gt;&lt;br /&gt;However, we also wanted the eprint of the day on our eprints home page. After a few thoughts on the best way to do this, I settled with phrases. So, in the code below, I request a random eprint in HTML snippet and do 2 things. Firstly (easily) I output this to a text file that can be grabbed over the web. Secondly, I create a phrase file with the citation in it. I can then use this phrase in any xpage with &lt;code&gt;&amp;lt;epc:phrase ref="eprint_of_the_day" /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is the script that does the job:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#444444"&gt;#!/usr/bin/perl -w&lt;br /&gt;&lt;/font&gt;&lt;strong&gt;use&lt;/strong&gt; LWP::UserAgent;&lt;br /&gt;&lt;strong&gt;use&lt;/strong&gt; HTTP::Request;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;$ua&lt;/font&gt; = LWP::UserAgent-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; env_proxy =&amp;gt; 1, keep_alive =&amp;gt; 1, timeout =&amp;gt; 30, &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$response&lt;/font&gt; = &lt;font color="#2040a0"&gt;$ua&lt;/font&gt;-&amp;gt;request&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    HTTP::Request-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#008000"&gt;'GET'&lt;/font&gt;, &lt;font color="#008000"&gt;'http://my.eprints/cgi/random?insert=1'&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; PHRASE_FILE,&lt;br /&gt;&lt;font color="#008000"&gt;&amp;quot;&amp;gt;/usr/local/eprints/archives/myeprints/cfg/lang/en/phrases/eprint_of_the_day.xml&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; INCLUDE_FILE,&lt;br /&gt;    &lt;font color="#008000"&gt;&amp;quot;&amp;gt;/usr/local/eprints/archives/myeprints/cfg/lang/en/static/random.txt&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; PHRASE_FILE &lt;font color="#008000"&gt;&amp;quot;&amp;lt;?xml version=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;1.0&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt; encoding=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;UTF-8&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE phrases SYSTEM &lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;entities.dtd&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;&amp;gt;&lt;br /&gt;&amp;lt;epp:phrases xmlns=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;http://www.w3.org/1999/xhtml&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt; xmlns:epp=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;http://eprints.org/ep3/phrase&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;&lt;br /&gt; xmlns:epc=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;http://eprints.org/ep3/control&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;&amp;gt;&lt;br /&gt; &amp;lt;epp:phrase id=&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;eprint_of_the_day&lt;font color="#77dd77"&gt;\&amp;quot;&lt;/font&gt;&amp;gt;&amp;quot;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; PHRASE_FILE &lt;font color="#2040a0"&gt;$response&lt;/font&gt;-&amp;gt;content;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; INCLUDE_FILE &lt;font color="#2040a0"&gt;$response&lt;/font&gt;-&amp;gt;content;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; PHRASE_FILE &lt;font color="#008000"&gt;&amp;quot;&amp;lt;/epp:phrase&amp;gt;&amp;lt;/epp:phrases&amp;gt;&amp;quot;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;close&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;PHRASE_FILE&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;close&lt;/strong&gt;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;INCLUDE_FILE&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;`su - eprints -c &lt;font color="#008000"&gt;'/usr/local/eprints/bin/generate_static myeprints'&lt;/font&gt;`;&lt;br /&gt;&lt;br /&gt;&lt;font color="a52a2a"&gt;&lt;strong&gt;print&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$response&lt;/font&gt;-&amp;gt;content;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;syntax highlighted by &lt;a href="http://www.palfrader.org/code2html"&gt;Code2HTML&lt;/a&gt;, v. 0.9.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-4861745068937967755?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/4861745068937967755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/eprints-random-eprint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4861745068937967755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4861745068937967755'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/eprints-random-eprint.html' title='EPrints: Random EPrint'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-7555173662315391499</id><published>2009-01-27T18:39:00.000+10:00</published><updated>2009-01-28T18:20:12.085+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eprints'/><title type='text'>Eprints: Context sensitive labels and help</title><content type='html'>As a part of the QUT ePrints upgrade we held several meetings to discuss the submission workflow. As we were integrating the data with other systems we had to make sure that those undertaking the data entry (researchers, admin officers) wouldn't be thrown off by the language. One thing that came up was the need to have fields given a diferent label based on the resource type. For example, a book has an author but a painting may have an artist. You don't want to create an extra field because the data is the same, it's just the human interface that needs to be flexible. Likewise, the help text should change based on resource type.&lt;br /&gt;&lt;br /&gt;So, the idea was to provide a sub-phrase within the phrases file. The system would default to a base phrase if none was found.&lt;br /&gt;&lt;br /&gt;This would mean that we can have the following in our phrases file:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;epp:phrase id="eprint_fieldname_volume"&amp;gt;Volume&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;epp:phrase id="eprint_fieldname_volume#book"&amp;gt;Series Volume&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;epp:phrase id="eprint_fieldhelp_volume"&amp;gt;&lt;br /&gt;    Enter the volume number of the journal or series in which your item appeared. Please just use the number, do not include text such as "vol".&lt;br /&gt;&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;&amp;lt;epp:phrase id="eprint_fieldhelp_volume#book"&amp;gt;&lt;br /&gt;    If this book is a part of a series, please provide the volume number here. Please just use the number, do not include text such as "vol".&lt;br /&gt;&amp;lt;/epp:phrase&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;As I hope you can see, if you're entering the information for a book, you get a contextual label and help. Any other resource types that use the volume field will fall back to the default text.&lt;br /&gt;&lt;br /&gt;As usual, when the doco falls short, I hit the mailing list. This can go one of two ways. You can get a good answer or you can get ignored. My question got a discussion going and a solution was reached. My final message can be read &lt;a href="http://www.eprints.org/tech.php/10085.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The biggest difficulty we faced was working out which objects were available from within the given piece of code...&lt;br /&gt;&lt;br /&gt;So, in perl_lib/EPrints/MetaField.pm, I changed the render_name and render_help to check for a resource type specific phrase. I've used the hash (#) to denote the separation but you could change this.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;sub&lt;font color="ff0000"&gt; render_name&lt;/font&gt; {&lt;/strong&gt;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;, &lt;font color="#2040a0"&gt;$session&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; = &lt;font color="#2040a0"&gt;@_&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="a52a2a"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;title_xhtml&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;title_xhtml&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt; = &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;confid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; . &lt;font color="#008000"&gt;&amp;quot;_fieldname_&amp;quot;&lt;/font&gt; . &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;name&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;# START: Changes made to provide context sensitive names&lt;br /&gt;    &lt;/font&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="a52a2a"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;query&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;query&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;eprintid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;0&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;query&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;param&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;eprintid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;0&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$ep&lt;/font&gt; = EPrint&lt;font color="b000d0"&gt;s::DataObj:&lt;/font&gt;:EPrint-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;, &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$ep&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$eptype&lt;/font&gt; = &lt;font color="#2040a0"&gt;$ep&lt;/font&gt;-&amp;gt;get_type;&lt;br /&gt;            &lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt; .= &lt;font color="#008000"&gt;&amp;quot;#&lt;font color="#2040a0"&gt;$eptype&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;              &lt;strong&gt;if&lt;/strong&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;get_lang-&amp;gt;has_phrase&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt;#&lt;font color="#2040a0"&gt;$eptype&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;        &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;# END: Changes made to provide context sensitive names&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;html_phrase&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;sub&lt;font color="ff0000"&gt; render_help&lt;/font&gt; {&lt;/strong&gt;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;, &lt;font color="#2040a0"&gt;$session&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; = &lt;font color="#2040a0"&gt;@_&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="a52a2a"&gt;&lt;strong&gt;defined&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;help_xhtml&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;help_xhtml&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt; = &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;confid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt; . &lt;font color="#008000"&gt;&amp;quot;_fieldhelp_&amp;quot;&lt;/font&gt; . &lt;font color="#2040a0"&gt;$self&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;name&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;# START: Changes made to provide context sensitive help&lt;br /&gt;    &lt;/font&gt;&lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;query&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;eprintid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;0&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; &lt;strong&gt;eq&lt;/strong&gt; &lt;font color="#008000"&gt;&amp;quot;&amp;quot;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; = &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;query&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;param&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;eprintid&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;-&amp;gt;&lt;font color="4444FF"&gt;&lt;strong&gt;[&lt;/strong&gt;&lt;/font&gt;0&lt;font color="4444FF"&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$ep&lt;/font&gt; = EPrint&lt;font color="b000d0"&gt;s::DataObj:&lt;/font&gt;:EPrint-&amp;gt;&lt;strong&gt;new&lt;/strong&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;, &lt;font color="#2040a0"&gt;$eprintid&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$ep&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;strong&gt;my&lt;/strong&gt; &lt;font color="#2040a0"&gt;$eptype&lt;/font&gt; = &lt;font color="#2040a0"&gt;$ep&lt;/font&gt;-&amp;gt;get_type;&lt;br /&gt;        &lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt; .= &lt;font color="#008000"&gt;&amp;quot;#&lt;font color="#2040a0"&gt;$eptype&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;          &lt;strong&gt;if&lt;/strong&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;get_lang-&amp;gt;has_phrase&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;&lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt;#&lt;font color="#2040a0"&gt;$eptype&lt;/font&gt;&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#444444"&gt;# END: Changes made to provide context sensitive help&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;$session&lt;/font&gt;-&amp;gt;html_phrase&lt;font color="4444FF"&gt;&lt;strong&gt;(&lt;/strong&gt;&lt;/font&gt;&lt;font color="#2040a0"&gt;$phrasename&lt;/font&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/font&gt;;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;syntax highlighted by &lt;a href="http://www.palfrader.org/code2html"&gt;Code2HTML&lt;/a&gt;, v. 0.9.1&lt;br /&gt;&lt;br /&gt;The code base modified was 3.1.1.&lt;br /&gt;&lt;br /&gt;Naturally, no warranty is offered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-7555173662315391499?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/7555173662315391499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/eprints-context-sensitive-labels-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7555173662315391499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/7555173662315391499'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/eprints-context-sensitive-labels-and.html' title='Eprints: Context sensitive labels and help'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-5095702905233821071</id><published>2009-01-22T22:11:00.000+10:00</published><updated>2009-01-22T22:13:09.380+10:00</updated><title type='text'>Omeka Man</title><content type='html'>Just been checking out &lt;a href="http://omeka.org"&gt;Omeka&lt;/a&gt;. Very interesting. Installing it now so will tr and post my thoughts soonish&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-5095702905233821071?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/5095702905233821071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/omeka-man.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/5095702905233821071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/5095702905233821071'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/omeka-man.html' title='Omeka Man'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-6544693782592181945</id><published>2009-01-13T18:28:00.000+10:00</published><updated>2009-01-22T22:11:22.752+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eprints'/><title type='text'>Upgrading QUT ePrints</title><content type='html'>One of the main reasons I wanted to start this blog was to document the work I recently completed in upgrading the &lt;a href="http://eprints.qut.edu.au/"&gt;QUT ePrints&lt;/a&gt; system. I did not do this alone so will state outright that there was a team of Librarians, a couple of developers and other QUT staff. I won't name them here for privacy reasons.&lt;br /&gt;&lt;br /&gt;So, this is my attempt to feed back to the eprints community with some code and discussion about the work.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What is QUT ePrints?&lt;br /&gt;&lt;/span&gt;QUT operates its institutional repository out of the Library. There is &lt;a href="http://www.mopp.qut.edu.au/F/F_01_03.jsp"&gt;high-level support&lt;/a&gt; for the repository - not just rhetoric. The insitution alo has some key people - one of whom lives and breathes this stuff - they're fun to work with :)&lt;br /&gt;&lt;br /&gt;Chances are that if you don't know what &lt;a href="http://www.eprints.org/"&gt;ePrints&lt;/a&gt; is then you have moved away from this page for now. QUT was a member of the now defunct &lt;a href="http://arrow.edu.au/"&gt;ARROW&lt;/a&gt; group and bought into the VITAL software. However, due to a variety of reasons, we chose to upgrade from eprints v2 to v3. I won't go into the whys...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What we did&lt;/span&gt;&lt;br /&gt;A fair bit... Whilst the eprints team provides a complete out of the box solution, the beauty of its open sourciness is that we could adapt it to QUT and Australian higher-ed requirements.&lt;br /&gt;&lt;br /&gt;So the main items we produced were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Integrate QUT's &lt;a href="http://www.esoeproject.org/"&gt;ESOE&lt;/a&gt; infrastructure for single sign on&lt;/li&gt;&lt;li&gt;Transfer the data from ePrints 2 to a new server running ePrints 3&lt;/li&gt;&lt;li&gt;Bring over the ADT theses to be served from our IR&lt;/li&gt;&lt;li&gt;Expand the metadata to capture data for the HERDC collection - this could reduce a fair bit of work for researchers&lt;br /&gt;&lt;/li&gt;&lt;li&gt;... and some general user interface work&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The data data transfer gave us a chance to normalise our metadata - the system had grown "organically" over several years so needed a little landscaping&lt;ul&gt;&lt;li&gt;We were also able to fall in line with the &lt;a href="http://macar.wikidot.com/"&gt;MACAR resource types&lt;/a&gt;&lt;/li&gt;&lt;li&gt;This was a job for XSLT&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What we didn't do&lt;/span&gt;&lt;br /&gt;Well, there were a few things dropped along the way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Oracle integration: We'd thought about using the university's corporate Oracle infrastructure but, after battling with the rather new database layer, killed the idea off so as to meet the deadline.&lt;/li&gt;&lt;li&gt;We'd really wanted to link into QUT's Identity system but it wasn't ready yet. This would give us a name authority that could ensure that systems with which we share data were all on the same page&lt;/li&gt;&lt;/ul&gt;On that last point, I received a bit of flack as I was talking of using a QUT-local name authority. I tended to disagree with people on this one. For one, we actually had a name authority at QUT (though the SOAP interface was delayed). The NLA have the &lt;a href="http://www.nla.gov.au/initiatives/peopleaustralia/"&gt;People Australia&lt;/a&gt; work that would meet our needs but it sin't there yet. There was talk of other projects but it all started to sound rather overly crowded in terms of scope. Secondly, the SOA interface could easily provide any info needed once given that unique QUT ID - we all know that one ID won't be enough, especially for the public sector.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Moving on&lt;/span&gt;&lt;br /&gt;Well, enough of a ramble. I'll start posting code and overviews shortly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-6544693782592181945?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/6544693782592181945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/upgrading-qut-eprints.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/6544693782592181945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/6544693782592181945'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/upgrading-qut-eprints.html' title='Upgrading QUT ePrints'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-227846948065670831.post-4184735500750017053</id><published>2009-01-13T18:23:00.000+10:00</published><updated>2009-01-13T18:24:37.942+10:00</updated><title type='text'>Obligatory first post</title><content type='html'>I guess there has to be a first post and this is it.&lt;br /&gt;&lt;br /&gt;Well, ok then&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/227846948065670831-4184735500750017053?l=blog.duncan.dickinson.name' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.duncan.dickinson.name/feeds/4184735500750017053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/obligatory-first-post.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4184735500750017053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/227846948065670831/posts/default/4184735500750017053'/><link rel='alternate' type='text/html' href='http://blog.duncan.dickinson.name/2009/01/obligatory-first-post.html' title='Obligatory first post'/><author><name>Duncan Dickinson</name><uri>http://www.blogger.com/profile/18141428747565552436</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_jslpfifycq4/Scg8vrd_Q3I/AAAAAAAAAAg/aTEWwDoN5Zc/S220/profile.jpg'/></author><thr:total>2</thr:total></entry></feed>
