<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Armedia Blog &#187; ECM Industry</title>
	<atom:link href="http://www.armedia.com/blog/category/ecm-industry/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.armedia.com/blog</link>
	<description></description>
	<lastBuildDate>Thu, 02 Feb 2012 15:53:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Armedia Case Management &#8211; Content.gov Presentation</title>
		<link>http://www.armedia.com/blog/2012/01/armedia-case-management-content-gov-presentation/</link>
		<comments>http://www.armedia.com/blog/2012/01/armedia-case-management-content-gov-presentation/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 18:54:35 +0000</pubDate>
		<dc:creator>Allison Cotney</dc:creator>
				<category><![CDATA[Alfresco Development]]></category>
		<category><![CDATA[Case Management]]></category>
		<category><![CDATA[Conference Presentations]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Government Solutions]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=2078</guid>
		<description><![CDATA[Did you miss Alfresco&#8217;s Content.gov event today in Washington, DC? Dont worry!! Here are the slides from Armedia&#8217;s presentation. &#160; Armedia nci content gov_alfresco_20120124_v1.0 &#160; For more information about Armedia Case Management, CLICK HERE]]></description>
			<content:encoded><![CDATA[<p>Did you miss Alfresco&#8217;s Content.gov event today in Washington, DC? Dont worry!! Here are the slides from Armedia&#8217;s presentation.</p>
<p>&nbsp;</p>
<div style="width:425px" id="__ss_11220724"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ArmediaLLC/armedia-nci-content-govalfresco20120124v10" title="Armedia nci content gov_alfresco_20120124_v1.0">Armedia nci content gov_alfresco_20120124_v1.0</a></strong><object id="__sse11220724" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=armediancicontentgovalfresco20120124v1-0-120123130825-phpapp01&#038;stripped_title=armedia-nci-content-govalfresco20120124v10&#038;userName=ArmediaLLC" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse11220724" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=armediancicontentgovalfresco20120124v1-0-120123130825-phpapp01&#038;stripped_title=armedia-nci-content-govalfresco20120124v10&#038;userName=ArmediaLLC" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object></div>
<p>&nbsp;</p>
<p>For more information about Armedia Case Management, <a title="ARMEDIA CASE MANAGEMENT PRODUCT PAGE" href="http://www.armedia.com/acm.php" target="_blank">CLICK HERE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2012/01/armedia-case-management-content-gov-presentation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Content Security: The Forgotten Project Feature</title>
		<link>http://www.armedia.com/blog/2011/09/content-security-the-forgotten-project-feature/</link>
		<comments>http://www.armedia.com/blog/2011/09/content-security-the-forgotten-project-feature/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 15:06:27 +0000</pubDate>
		<dc:creator>khusain</dc:creator>
				<category><![CDATA[Content Security]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[ECM]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1729</guid>
		<description><![CDATA[Throughout my many years of experience in the system and software development area, I have noticed one major thing that always seems to be at the top of requirements but becomes relegated to somewhere lower in priority as the project proceeds, only to come back to the forefront as testing and implementation time approach.  This [...]]]></description>
			<content:encoded><![CDATA[<p>Throughout my many years of experience in the system and software development area, I have noticed one major thing that always seems to be at the top of requirements but becomes relegated to somewhere lower in priority as the project proceeds, only to come back to the forefront as testing and implementation time approach.  This is security.   Even in today&#8217;s time, with CISSP and CSSLP professionals everywhere, security seem to still take a back seat in the development process.</p>
<p>Most projects include building security, network security, and various other types of security policies which are generally inherited from the environment where the task is occurring and are fairly defined and stable.  Controlling access to the building, access to the network, access to files and folders, and general access to computing resources are all well established.  However, when we sit down and try to implement some form of security into the software we develop, it gets left out or deferred and needs to be added in at the last moment.  Why is it deferred? Well, how many requirements are really created around security?</p>
<p>Let’s throw a few examples out there:</p>
<ul>
<li>The system will only permit access to authorized users</li>
<li>The authorized users will only be allowed to perform tasks they have been granted</li>
<li>The authorized users will only be able to see the data they are allowed to work on</li>
<li>The system will provide role and group based access controls</li>
<li>The system will log all unauthorized access to data (is this security or logging –you decide)</li>
<li>The system will log access to all data (Again, security or logging? Well, both)</li>
</ul>
<p>These are very similar from project to project and pretty high level and very few, usually a dozen or so, but, without them in place, the system is essentially, non-functional.  Well, with the other functional requirements, what the user wants to see and do, which usually number in the hundreds, it’s easy to see why the security component gets little attention.  Except for the initial log-in, the users don’t really experience what is happening in the background, except for an odd warning about doing something they aren’t allowed to do.  A correctly implemented security model won’t even let the user know that features exist beyond what they are permitted to see.  What prevents them from seeing hidden features by glancing over their co-workers shoulder – well, that’s another issue.</p>
<p>So what happens when one of the most critical components of an application is not designed in from the onset? Besides chaos, a lot of redevelopment which is required to implement the missing feature, which leads to missing project deadlines and at worst not meeting implementation times. This is especially true for Fixed Firm Price (FFP) contracts where this can be disastrous to the bottom line, not to mention project failure – after all who will accept a system that cannot meet their basic requirements. Things are changing for the better, as I have seen projects now that have distinct security implementation team which interacts with the other development teams rather than being a side-attraction.</p>
<p>Naturally, for small scale web projects which are usually secured with 2-factor authentication (userid and password), the implementation is fairly simple and can be supported by the OS or a very simple database table.   If, however, you also need to control what the user can do (functionally) once authenticated, it starts becoming complex as you now have to maintain Access Control information for the user as well.  If you now further need to control what data they user can see, use, or modify, the security implementation gets even more complex.   Finally, if you need to implement CAC card integration, IP based authentication, CPU based authentication, or N-factor authentication (more than just a User ID and PWD, such as secure tokens, bio-metric, key-card …) , then additional complexities arise which need to be implemented in code or at the enterprise IT level.  Even now, we still haven’t addressed any encryption and data security requirements that could exist (ie. The system shall encrypt all personal data – does that just mean when it’s stored or also when transmitted??).  It is for this reason that security requirements must get high priority in any project where application, data, and system security are paramount, with the design engaged from the onset of the project.</p>
<p>The actual size of the security team will vary depending on the size of a project, but at least a single resource, with knowledge on all aspects of security (yes all, not just software), should be assigned as the single point of contact.  This person/team, throughout the project, must be involved intimately at the architectural level and will have the final say in any security testing scenarios.  By being involved at the architectural level, no design will be allowed to move forward until the security implementation has been vetted and approved.  Regardless of the security implementation, the primary goal is to confirm that all teams are compliant, which in essence translates to a compliant and secure application.  Whatever tests are needed to validate compliance should be defined during the design process as there is no better way to validate a system then to penetrate it by knowing its internals.  If you know how the security model is implemented and are still unable to compromise it, and then be default, the system is secure.  Open source systems fall into this category since all their code is accessible; everyone knows how to try to gain access, however, due to a well-implemented security model, they cannot.</p>
<p>At this point, we can keep going on about how imperative it is to make security design a high priority in any application design, or for that matter, any system design.  How would you like it if the car you bought didn’t have a lock or key to get it going?  Instead, I’ll just finish up with stressing that security is not a feature that can be put on the back-burner.  Everyone talks about it – you hear about cyber-security everywhere these days, but when it comes to the actual implementation, it gets compromised and inadequately implemented.  Considering that the raw power of computers is such that most systems can be compromised by simple attacks (such as brute force attacks), effort must be put into not just installing measures at the front gate, but beyond that as well to control losses if a breach were to occur.  It is also essential that management personnel understand this when planning a project to account for the level of effort it entails and to ensure that it is effectively budgeted for the entire project duration.</p>
<p>Now that we have addressed the issue of security in software system (and other systems), where do we go from there?  The best security is achieved by informing and teaching the user base, from the users up through the developers and managers.  I have covered a lot of items in this quick prelude to discussing security in information systems, but each should be followed with further details and training.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/09/content-security-the-forgotten-project-feature/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Insider&#039;s Perspective: The CPSC Project</title>
		<link>http://www.armedia.com/blog/2011/08/an-insiders-perspective-the-cspc-project/</link>
		<comments>http://www.armedia.com/blog/2011/08/an-insiders-perspective-the-cspc-project/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 17:28:01 +0000</pubDate>
		<dc:creator>mseth</dc:creator>
				<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Records Management]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CPSC]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[Migration]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1713</guid>
		<description><![CDATA[It was in the fall of 2010 when I got a call that began my engagement on one of the most interesting projects that I have worked on in recent times. The situation, the project was with one of the leading product safety regulators in the world.  The international arm of the organization was leading [...]]]></description>
			<content:encoded><![CDATA[<p>It was in the fall of 2010 when I got a call that began my engagement on one of the most interesting projects that I have worked on in recent times.</p>
<p>The situation, the project was with one of the leading product safety regulators in the world.  The international arm of the organization was leading an initiative to create a global information pool for product safety recall information in an effort to make product safety efforts across the world more coordinated and effective.  This would be a one stop, one shop view to “any recall &#8211; any where &#8211; any time” product safety recall information.</p>
<p>Armedia was asked to perform an initial assessment of what it would take a build a global recall information pool, build a roadmap for the process and structure the approach for the global consortium.  This was a pure play Information Technology (IT) strategy project where the focus was on creating an IT approach to meet a complex business situation.</p>
<p>What I loved about the project was the challenge of a highly unstructured business situation where the project sponsors understood the pain and knew the desirable outcome, but they had little understanding of what needed to be done.</p>
<p>Building an approach for an IT system in the area of product safety was a challenge, as I soon discovered.   Several factors contributed to the challenge, they included,  (a) plethora of legacy IT deployments, (b) changing data structures and data definitions over time, (c) different data structures and definitions across countries, and (d) project execution headwinds (Note: Our team ran into a situation of competing for attention amongst different priorities both within the organization and with 3<sup>rd</sup> parties outside, in this case the consortium of product safety organizations from other countries).</p>
<p>Sound familiar?</p>
<p>So we walk into the situation not knowing all the pieces of the puzzle and the Armedia team immediately began an assessment of the situation.  Quickly the team structured the analysis into the following topical areas:</p>
<ol>
<li>Strategic</li>
<li>Governance and Oversight</li>
<li>Functional Scope Definition</li>
<li>Usability, Data Search, and Discovery</li>
<li>Architecture</li>
<li>Deployment and Execution</li>
<li>Operations</li>
</ol>
<p>Next came a deep dive into each area to develop specific recommendations and a roadmap at a granular level. Data categorizations, normalization and data definitions were all important areas of focus given the complexity of handling these items across different jurisdictions. I believe that our team’s recommendations around this area were excellent and well received by the international community, especially because our approach required minimal impact to current product safety operations, which was a key requirement by the sponsors.</p>
<p>We brought value in terms of providing structure and simplification for execution to what seemed at the outset to be a complex problem.  The Armedia report on “Considerations for Pursuing Global IT Interoperability for Publicly Available Product Recalls ” was published by the OECD (Organization of Economic Development) and has been accepted as the strategic guidance document by the international product safety working party set-up for the purpose of creating the global recall pool. The execution work on report recommendations has started and is currently underway.</p>
<p>This complex business issue was in need of a technology execution plan that was intentionally kept simple, and yet met the unique requirements of the customer. My team and myself guided our efforts in order to meet these criteria, and in the end the Armedia team successfully developed recommendations that provided both strategic and efficient solutions to this international IT challenge.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/08/an-insiders-perspective-the-cspc-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project Estimating: Lesson Learned</title>
		<link>http://www.armedia.com/blog/2011/06/project-estimating-lesson-learned/</link>
		<comments>http://www.armedia.com/blog/2011/06/project-estimating-lesson-learned/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 17:03:17 +0000</pubDate>
		<dc:creator>Scott Roth</dc:creator>
				<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ECM]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1551</guid>
		<description><![CDATA[Hi, this is Scott Roth.  I am new to Armedia and Armedia&#8217;s blog.  I have been watching the past few weeks as Dave, Tim and Judy have shared their cutting edge technology lessons learned with you.  Personally, I have found these posts incredibly insightful and had to scurrying off to Google more than once to figure [...]]]></description>
			<content:encoded><![CDATA[<p>Hi, this is Scott Roth.  I am new to Armedia and Armedia&#8217;s blog.  I have been watching the past few weeks as Dave, Tim and Judy have shared their cutting edge technology lessons learned with you.  Personally, I have found these posts incredibly insightful and had to scurrying off to Google more than once to figure out what exactly they were talking about.  Well, this post won&#8217;t be that technical.  In fact, this post won&#8217;t be technical at all.</p>
<p>I&#8217;ve been in the software development business for 20 years.  Over the course of those years I have been involved in a lot of proposals, project plans, project re-plans, and estimating exercises.  I have used a variety of approaches and processes from very rigid, overly-documented approaches, to looser, Agile approaches to develop estimates.  One thing I have seen, regardless of the approach, is that project plans rarely reflect reality.  I have observed three frequent oversights when  developing estimates that always seem to bite project teams once reality meets the plan.</p>
<ul>
<li>Developers will spend 5% of their time every week on project management activities.  Time and budget are not usually allocated to developers to attend status meetings or company staff meetings, write input for the project manager&#8217;s weekly report, mentoring, or help with business development efforts, but it happens.  So, figure that 2 hours of every week will be consumed by activities of this type.</li>
<li>Developers (especially those on the customer site) will spend another 5% of their time attending impromptu meetings,<br />
attending  ad hoc JAD design meetings, giving demos, supporting the project manager or customer, or dealing with customer drive-by meetings.<br />
Again, these are not activities easily anticipated or scheduled, but they occur all the time, and can negatively affect project performance.  Figure that 2 hours every week will be consumed by activities of this type.</li>
<li>Developers new to a project need time to get up to speed on the project, the requirements, the environment, the tools, the processes and practices, the rhythm of development, and the project culture.  Don&#8217;t expect developers &#8212; even senior, seasoned developers &#8212; to be 100% productive from day 1.  Expect that it will take at least 40 hours for a developer to settle into the project  before he will be as productive as the rest of the team.  Schedule tasking accordingly.</li>
</ul>
<p>I know it doesn&#8217;t seem like much, but over the course of a 5 week sprint, a team of 5 could lose 100 hours to these otherwise “invisible tasks”!  And, adding team member #6 will not immediately improve performance.</p>
<p>I mention these things because when I (and I suspect most project planners) sit down to estimate development times, we tend to estimate in a vacuum.  What I mean is, when asked how long it will take to develop Widget X or complete Requirement Y, we tend to give estimates that assume a perfect environment, the steady state of the universe, and that developers<em> never get distracted by other project activities</em>.  Or, that developers can be dropped into running projects and be 100% productive from the word &#8220;go&#8221;.</p>
<p>Hedging your task estimates by 10% and easing new developers into running projects can give your project plans a little buffer and more accurately reflect reality.  This advice will certainly not be popular with project managers or business development folk who continually strive for lower costs.  However, it may be to everyone&#8217;s advantage &#8212; yours and your customer&#8217;s &#8212; to produce a realistic project plan that can be met, as opposed to apologizing half way through the project that you have run out of resources for no ascertainable reasons.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/06/project-estimating-lesson-learned/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using SP Designer 2010 to Add Custom Buttons</title>
		<link>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/</link>
		<comments>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 18:16:51 +0000</pubDate>
		<dc:creator>Tim Lisko</dc:creator>
				<category><![CDATA[Case Management]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[enhancing performance]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1533</guid>
		<description><![CDATA[Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application. I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a &#8220;Drop-Off&#8221; library to the libraries where files are directed by my content organizer rules. So, without thought [...]]]></description>
			<content:encoded><![CDATA[<p>Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application.</p>
<p>I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a &#8220;Drop-Off&#8221; library to the libraries where files are directed by my content organizer rules. So, without thought to SP Designer I opened my VS 2010 and commenced to coding. The great thing about building your buttons in VS is the flexibility you have &#8211; but being so flexible means you have to build a lot even if you only want a little!</p>
<p>In this instance I only wanted my buttons in one library. Using VS2010 you start with an elements.xml file. Unfortunately the elements file can only point to a &#8220;type,&#8221; not a specific library or list. So, even though I only wanted to see my buttons in my &#8220;Drop Off&#8221; document library, all the document libraries would also display the buttons. You can certainly get around that by omitting the type and buttons and code them in or setting visibility, but I haven&#8217;t done that myself so I was less interested in getting the coding right and figuring out where to insert the coding.</p>
<p>Enter SharePoint Designer 2010. It provides an easy nterface for creating custom actions that aren&#8217;t complex. You can create buttons that will navigate to a form, initiate a workflow, or navigate to a URL. Even better, it only applies to the document library or list where you are adding the custom action &#8211; exactly what I wanted!</p>
<p>You can certainly add an image to your button &#8211; this was something I overlooked initially and was driving me crazy that I &#8220;couldn&#8217;t&#8221; add a button image! Well, of course you can add an image. Just move that scrollbar down on the side of the &#8220;Create Custom Action&#8221; screen to get to the &#8220;Advanced custome action options&#8221; &#8211; duh!</p>
<p>So, a couple limitations right off:</p>
<ul>
<li>You can&#8217;t create tabs, groups, or context groups with SP Designer so far as I can see</li>
<li>SP Designer placed my buttons in the &#8220;Manage&#8221; group of the &#8220;Documents&#8221; tab. There does not appear to be anyway to direct your buttons to a specific ribbon group or tab that you might prefer.</li>
</ul>
<p>In this case the SP Designer provided all the functionality I needed and saved me time I would have spent coding, testing, and deploying!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/06/using-sp-designer-2010-to-add-custom-buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMIS, SharePoint 2010, and File Checkins</title>
		<link>http://www.armedia.com/blog/2011/06/cmis-sharepoint-2010-and-file-checkins/</link>
		<comments>http://www.armedia.com/blog/2011/06/cmis-sharepoint-2010-and-file-checkins/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 21:32:52 +0000</pubDate>
		<dc:creator>dmiller</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[ECM]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1403</guid>
		<description><![CDATA[A while back I wrote about checking out a SharePoint 2010 file using CMIS.  Getting checkout working excited me so much I forgot to try checking the file back in! Turns out there are a few tricks. We use Apache Chemistry as our CMIS client.  Chemistry&#8217;s checkin method allows you to provide a file content [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I wrote about <a href="http://www.armedia.com/blog/2011/05/cmis-sharepoint-2010-and-file-checkouts/">checking out a SharePoint 2010 file using CMIS</a>.  Getting checkout working excited me so much I forgot to try checking the file back in!</p>
<p>Turns out there are a few tricks.</p>
<p>We use <a href="http://chemistry.apache.org/">Apache Chemistry</a> as our CMIS client.  Chemistry&#8217;s checkin method allows you to provide a file content stream, such that the act of checking the file in also updates the file contents:</p>
<p>checkin(boolean major, Map&lt;String,?&gt; properties, ContentStream contentStream, String checkinComment)</p>
<p>However, sending a non-null contentStream to this method makes it fail!  You will get the famous &#8220;object reference not set to an instance of an object&#8221; message.  You <em>must</em> send null for this parameter.  So how do you update the file contents?  Right before the checkin, you can call the setContentStream method, as illustrated in the below code snippet.</p>
<p>Also, in the properties parameter, you must provide a property for the object name.  This is also illustrated in the below snippet.  You may provide other properties if you want, but if you don&#8217;t provide the object name, the checkin will fail.</p>
<p>The JUnit test case below illustrates how to connect to SP2010 via WSDL, find an object by path, check out the object, update its content stream, and check it back in.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.armedia.acm.ecm.service</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.InputStream</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.math.BigInteger</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.HashMap</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.List</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Map</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.api.Document</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.api.ObjectId</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.api.Repository</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.api.Session</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.api.SessionFactory</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.PropertyIds</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.SessionParameter</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.data.ContentStream</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.enums.BindingType</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.impl.dataobjects.BindingsObjectFactoryImpl</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.junit.Test</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
*<br />
* @author millerd<br />
*/</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SharePointWSDLTest<br />
<span style="color: #009900;">&#123;</span><br />
<br />
@Test<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> connectViaWsdl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">Exception</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #003399;">String</span> cwd <span style="color: #339933;">=</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;user.dir&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Working dir: &quot;</span> <span style="color: #339933;">+</span> cwd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// Default factory implementation of client runtime.</span><br />
SessionFactory sessionFactory <span style="color: #339933;">=</span> SessionFactoryImpl.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">Map</span> parameter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">HashMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// User credentials.</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">USER</span>, <span style="color: #0000ff;">&quot;some_user&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">PASSWORD</span>, <span style="color: #0000ff;">&quot;some_password&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// relative file-based URL works fine so long as you give it the</span><br />
<span style="color: #666666; font-style: italic;">// right relative path... ie. you have to know what the current</span><br />
<span style="color: #666666; font-style: italic;">// working directory is.</span><br />
<span style="color: #003399;">String</span> wsdl <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;file:target/classes/acmv2-sharepoint.wsdl&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// Connection settings.</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">BINDING_TYPE</span>, <span style="color: #003399;">BindingType</span>.<span style="color: #006633;">WEBSERVICES</span>.<span style="color: #006633;">value</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_ACL_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_DISCOVERY_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_MULTIFILING_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_NAVIGATION_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_OBJECT_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_POLICY_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_RELATIONSHIP_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_REPOSITORY_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">WEBSERVICES_VERSIONING_SERVICE</span>, wsdl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
parameter.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>SessionParameter.<span style="color: #006633;">AUTHENTICATION_PROVIDER_CLASS</span>,<br />
CmisBindingFactory.<span style="color: #006633;">STANDARD_AUTHENTICATION_PROVIDER</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Create session.</span><br />
Session session <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003399;">List</span> repositories <span style="color: #339933;">=</span> sessionFactory.<span style="color: #006633;">getRepositories</span><span style="color: #009900;">&#40;</span>parameter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">Repository</span> rep <span style="color: #339933;">:</span> repositories <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// My test file is in the &quot;Unapproved Files&quot; repository</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Unapproved Files&quot;</span>.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>rep.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
session <span style="color: #339933;">=</span> rep.<span style="color: #006633;">createSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">Document</span> doc <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Document</span><span style="color: #009900;">&#41;</span><br />
session.<span style="color: #006633;">getObjectByPath</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/2011/05/03/10/31/19/dave-sharepoint.wsdl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Doc ID: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span> doc <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #339933;">?</span> <span style="color: #0000ff;">&quot; *NOT FOUND* &quot;</span> <span style="color: #339933;">:</span> doc.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> doc <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">try</span><br />
<span style="color: #009900;">&#123;</span><br />
ObjectId co <span style="color: #339933;">=</span> doc.<span style="color: #006633;">checkOut</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Checked out doc ID: &quot;</span> <span style="color: #339933;">+</span> co.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>CmisBaseException cbe<span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception checking out; must be &quot;</span> <span style="color: #339933;">+</span><br />
<span style="color: #0000ff;">&quot;checked out already: &quot;</span> <span style="color: #339933;">+</span> cbe.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// create a new content stream to update the file contents</span><br />
<span style="color: #003399;">InputStream</span> is <span style="color: #339933;">=</span> <span style="color: #003399;">Thread</span>.<span style="color: #006633;">currentThread</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<br />
<span style="color: #006633;">getContextClassLoader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getResourceAsStream</span><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">&quot;dave-sharepoint.wsdl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">boolean</span> majorVersion <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">Map</span> props <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">HashMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// Object name MUST b eprovided</span><br />
props.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>PropertyIds.<span style="color: #006633;">NAME</span>, <span style="color: #0000ff;">&quot;dave-sharepoint&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
BindingsObjectFactory bof <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BindingsObjectFactoryImpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
ContentStream csNew <span style="color: #339933;">=</span> bof.<span style="color: #006633;">createContentStream</span><span style="color: #009900;">&#40;</span><br />
<span style="color: #0000ff;">&quot;dave-sharepoint.wsdl&quot;</span>,<br />
<span style="color: #003399;">BigInteger</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>is.<span style="color: #006633;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,<br />
<span style="color: #0000ff;">&quot;text/plain&quot;</span>,<br />
is<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// OPTIONAL: update the file content stream</span><br />
doc.<span style="color: #006633;">setContentStream</span><span style="color: #009900;">&#40;</span>csNew, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">// NOTE: DO NOT send a content stream in the checkIn call!</span><br />
<span style="color: #666666; font-style: italic;">// the call will fail</span><br />
ObjectId ci <span style="color: #339933;">=</span> doc.<span style="color: #006633;">checkIn</span><span style="color: #009900;">&#40;</span><br />
majorVersion,<br />
props,<br />
<span style="color: #000066; font-weight: bold;">null</span>,<br />
<span style="color: #0000ff;">&quot;test checkin&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Object ID after checkin: &quot;</span> <span style="color: #339933;">+</span> ci.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/06/cmis-sharepoint-2010-and-file-checkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How much do you know about ECM?</title>
		<link>http://www.armedia.com/blog/2011/03/how-much-do-you-know-about-ecm/</link>
		<comments>http://www.armedia.com/blog/2011/03/how-much-do-you-know-about-ecm/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 01:22:28 +0000</pubDate>
		<dc:creator>A.J. McClary</dc:creator>
				<category><![CDATA[ECM Industry]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=1029</guid>
		<description><![CDATA[Check out the latest video we&#8217;ve produced for the AIIM Info360 conference.]]></description>
			<content:encoded><![CDATA[<p>Check out the latest video we&#8217;ve produced for the <a href="http://www.aiimexpo.com/attendee-registration/aiim-2011-expo-and-conference-pricing-information">AIIM Info360 conference</a>.</p>
<p><iframe src="http://player.vimeo.com/video/20830178" width="555" height="302" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/03/how-much-do-you-know-about-ecm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Thoughts on Data</title>
		<link>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/</link>
		<comments>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 13:53:31 +0000</pubDate>
		<dc:creator>jschivera</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[Enterprise Content Management]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=624</guid>
		<description><![CDATA[In my previous blog on data I discussed the importance of structured data within a content management system. Getting a good structured data design to compliment the design of the overall content management solution can be dirty work; not quite Mike Rowe &#8220;Dirty Jobs&#8221; dirty, but to some in our profession it might as well [...]]]></description>
			<content:encoded><![CDATA[<p>In my previous blog on data I discussed the importance of structured data within a content management system. Getting a good structured data design to compliment the design of the overall content management solution can be dirty work; not quite <a title="armedia_blog" href="http://dsc.discovery.com/fansites/dirtyjobs/bio/bio.html" target="_blank">Mike Rowe</a> &#8220;Dirty Jobs&#8221; dirty, but to some in our profession it might as well be.</p>
<p>Why? Because you have to get right down to the user level and find out what they need and the context about how they think about the information.</p>
<p>So, let&#8217;s think about structured data and how it affects the user&#8217;s ability to locate and use the information in the content management system; in other words the search function. The textbook approach is to define the search precision and recall ratios for the system. Search precision being defined as the ratio of relevant (as judged by the user) items retrieved to the total number of items displayed in the search results list. And recall being defined as the ratio of relevant items retrieved to the total number of relevant items in the area being searched.</p>
<p>I mention these terms and definitions because I know many of my traditionally IT trained professionals like to follow the textbook and have their workshops and whiteboard sessions and generate flow maps and UML diagrams. But, in projects I&#8217;ve been involved with, the terms search precision and recall are never mentioned. However, here is the typical search discussion I&#8217;ve witnessed:</p>
<ul>
<li><em>Interviewer</em> &#8211; Ok, how do you want to search for these documents?</li>
<li><em>Interviewee</em> &#8211; Well I search all the time for data A, data B and data C and it sure would be nice to search on data D and data E.</li>
<li><em>Interviewer</em> &#8211; Ok, great, we already have identified attributes for data A, C and E, we&#8217;ll make them searchable for you. And we&#8217;ll add searchable attributes for data B and D.</li>
<li><em>Interviewee</em> &#8211; You know sometimes I don&#8217;t really know the data to search on but I am looking for some text inside the document, is there any way I can search on text?</li>
<li><em>Interviewer</em> &#8211; Oh yes this system has the ability to do text searches on any documents added to the system.</li>
<li><em>Interviewee</em> &#8211; Great!</li>
</ul>
<p>One of the critical success factors of a content management system is user satisfaction with the search and retrieval. Research consistently indicates that most users won&#8217;t make more than two or three attempts at finding the information they need. (Think about your own experiences using Google.) Search is typically driven by structured data. Fail to pay attention to the structured data driving the search functionality and you&#8217;re already placed one of the critical success factors at risk.</p>
<p>I never use the terms search precision and recall anywhere in the design criteria. The terms are just too hard to use quantitatively and what&#8217;s relevant to one user may not be relevant to another user. But the concepts need to be firmly in mind when users are being interviewed about their search preferences and habits. Users are remarkably tolerant of search as long as they get the expected results. Unless searching using a unique ID field like document number, users expect to sift through a results list to find the document of interest. How big result listings are they willing to sift through to find the document they are looking for? 10, 50, 100 results? That&#8217;s the blend of precision and recall you&#8217;re looking for in the interviews.</p>
<p>Much of my work has been in the area of engineering information in the utilities and oil and gas sectors. A favorite attribute that everyone wants to search is the equipment tag number. Drawings show equipment tags; procedures describe operation, maintenance and testing of equipment; specifications and calculations provide design information for equipment; vendor information tells how to maintain and order spare parts for equipment and so on. Lots of great indexing options! Great let&#8217;s add those attributes into the data model.</p>
<p>Stop! This is where the dirty works kicks in.</p>
<p>Does anyone index that information now? No, then how will the information get into the new system? What&#8217;s the source of the equipment tags? Is it validated? Who will be responsible for the information? When will it be complete and how will it be maintained up to date?</p>
<p>Users will tolerate the search feature up to a point. But, when an attribute is available for searching that sets the expectation of a high search precision it should be fully functional. If there&#8217;s little indexing or controls to support the search attribute then two bad things can happen. User frustration starts to set in or worse, a business decision is made without a possibly key piece of information. It is our responsibility as the content management professionals to do the dirty work and let the client know the possible implications of adding this attribute.</p>
<p>So let&#8217;s say the user community is ok with a low search precision % but high recall % listing for the equipment id search example. (Or in other words a result listing of 50.) How does a good structured data design support this result?</p>
<p>See my next blog entry: structured data and a business classification scheme in support of search and other design features&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2011/01/more-thoughts-on-data/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UX Corner: Instant Usability Testing</title>
		<link>http://www.armedia.com/blog/2010/10/ux-corner-instant-usability-testing/</link>
		<comments>http://www.armedia.com/blog/2010/10/ux-corner-instant-usability-testing/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 13:21:51 +0000</pubDate>
		<dc:creator>A.J. McClary</dc:creator>
				<category><![CDATA[ECM Industry]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=589</guid>
		<description><![CDATA[I&#8217;ve been experimenting with a really clever usability testing technique that uses human intelligence to collect quantitative data about a user&#8217;s experience. The way a development project traditionally gathers this data is through conducting a study—gathering participants to sit down in a room and perform a set of tasks. We usually observe these tasks and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been experimenting with a really clever usability testing technique that uses human intelligence to collect quantitative data about a user&#8217;s experience. The way a development project traditionally gathers this data is through conducting a study—gathering participants to sit down in a room and perform a set of tasks. We usually observe these tasks and pay them a gratuity of $75 or so, but it could be quite expensive reserving a lab for hundreds of people. This is a neat alternative to doing an in-depth study.</p>
<p><a href="http://armedia.com/blog2/wp-content/uploads/2010/10/Screen-shot-2010-10-25-at-12.06.39-AM.png"><img class="alignright size-medium wp-image-591" title="Screen shot 2010-10-25 at 12.06.39 AM" src="http://armedia.com/blog2/wp-content/uploads/2010/10/Screen-shot-2010-10-25-at-12.06.39-AM-300x232.png" alt="" width="300" height="232" align="right" /></a></p>
<p>Here&#8217;s how it works:</p>
<ol>
<li>Sign up for an <a href="https://www.mturk.com/mturk/welcome" target="_blank">Amazon Mechanical Turk</a> account</li>
<li>Embed tracking code into your web pages, I recommend <a href="http://www.crazyegg.com/" target="_blank">Crazy Egg</a>—so you can collect more precise data and present it with overlying heat maps</li>
<li>Instruct several &#8220;users&#8221; to go through a series of scenarios and watch the data come in</li>
</ol>
<p>This technique is a nice way to analyze how user&#8217;s react to certain calls-to-action, navigation items, and placement of graphics/text. I&#8217;ve been using this as a mechanism to determine placement of components via A/B testing, but it could just as easily be used to also test  how long it takes for them to get to their destination—if they can figure it out at all. Just rotate two different designs across all of your participants and see which one performs better.</p>
<p>Did I mention this is basically free? It costs around $0.05 cents per scenario, per user. Testing a 100 users could cost you around $5 bucks. Compare that to a traditional test, you can save thousands of dollars just by implementing this one technique into your lifecycle.</p>
<p>While I&#8217;d love to say that &#8220;the numbers don&#8217;t lie&#8221;, they can be very deceiving. Even though you can use this technique to track trends in human behavior, bad data doesn&#8217;t necessarily mean bad design. While this can be very effective, I want to stress that is not a replacement for traditional user testing and should only be used to verify your previously conducted research.</p>
<p>There are two reasons why you should conduct this test along side many other styles of user testing. The first reason is because it lacks qualitative feedback. When you collect only quantitative data, you are missing out on some very important pieces of information, like &#8220;wow&#8221; factors, user quotes, and moments of frustration. The second reason is because you&#8217;re not actually testing authentic users, so this data is probably not going to be relevant to your website audience. It does, however, do a great job at measuring user behavior.</p>
<p>I think it&#8217;s a very big mistake to neglect usability testing. This is a great way to incorporate real data into your development efforts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2010/10/ux-corner-instant-usability-testing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Microsoft SharePoint 2010 and The Last Great Hope</title>
		<link>http://www.armedia.com/blog/2010/06/microsoft-sharepoint-2010-and-the-last-great-hope/</link>
		<comments>http://www.armedia.com/blog/2010/06/microsoft-sharepoint-2010-and-the-last-great-hope/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:56:50 +0000</pubDate>
		<dc:creator>Jim Nasr</dc:creator>
				<category><![CDATA[ECM Industry]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft SharePoint 2010]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[MOSS 07]]></category>
		<category><![CDATA[Office 2010]]></category>
		<category><![CDATA[User Needs]]></category>

		<guid isPermaLink="false">http://www.armedia.com/blog/?p=450</guid>
		<description><![CDATA[Anything that defines the “future of productivity” deserves a welcoming befitting a king: “the lion roars back”! Luscious superlatives take a number&#8230; And now back to our regularly scheduled program… Yes, SharePoint 2010 has arrived (officially since mid-May). Yes, SharePoint 2010 is a good improvement over the previous incarnation (MOSS 2007). And yes, most importantly, [...]]]></description>
			<content:encoded><![CDATA[<p>Anything that defines the “<a title="JimNasr_blog" href="http://www.microsoft.com/presspass/press/2010/may10/05-12office2010availablepr.mspx" target="_blank">future of productivity</a>” deserves a welcoming befitting a king: “<a title="JimNasr_blog" href="http://www.zdnet.com/blog/forrester/the-lion-roars-2010-ships-productivity-cheers/421" target="_blank">the lion roars back</a>”! Luscious superlatives take a number&#8230;</p>
<p>And now back to our regularly scheduled program… Yes, SharePoint 2010 has arrived (officially since mid-May). Yes, SharePoint 2010 is a good improvement over the previous incarnation (<a title="JimNasr_blog" href="http://en.wikipedia.org/wiki/Microsoft_Office_SharePoint_Server" target="_blank">MOSS 2007</a>). And yes, most importantly, SharePoint 2010 taps well into the new (vastly better) <a title="JimNasr_blog" href="http://en.wikipedia.org/wiki/Microsoft_Office_2010" target="_blank">Office 2010</a>. And yes, SharePoint 2010 is the silver bullet to fix all your ECM problems. Errr&#8230;ok, that’s one yes too many.</p>
<p>Though no silver bullet, and perhaps just a smidgen short of the future of productivity, SharePoint 2010 (and, in my opinion, even more so as a hosted solution) definitely has a place at the table. As with all things hyped and dipped in unlimited marketing resources, the trick is to figure out what is real and what is relevant to your needs. So, consider:</p>
<ul>
<li>Capacity, scalability and performance have improved considerably under SharePoint 2010—no more 2000 item view list limit!! And, Microsoft has done a good job providing <a title="JimNasr_blog" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=FD1EAC86-AD47-4865-9378-80040D08AC55&amp;displayLang=en" target="_blank">metrics, tools and guidelines</a> in this area. SharePoint 2010 requires 64-bit hardware, so installation and, in particular, migration from an existing MOSS 03 or 07 platform needs to be planned carefully, even more so than before.</li>
</ul>
<ul>
<li>SharePoint 2010 <a title="JimNasr_blog" href="http://www.cmswire.com/cms/enterprise-20/when-office-2010-and-sharepoint-2010-get-together-new-features-you-will-love-007501.php" target="_blank">integrates very well with MS Office 2010</a>, including Outlook calendaring and, heretofore ignored/talented stepchild, Visio. The most exciting part of this integration is the ability to use and edit metadata across SharePoint and Office. This propels true usability and greases the skids tremendously as far as adoption is concerned. The fact that Office is the reader and editor of choice for a lot of content held in SharePoint makes this integration truly relevant.</li>
</ul>
<ul>
<li>SharePoint 2010 provides the option for <a title="JimNasr_blog" href="http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx?Capability=Search" target="_blank">imbedded FAST</a> (the search engine). This is a big upgrade over MOSS 07 and brings enterprise functionality and scalability to SharePoint search.</li>
</ul>
<ul>
<li>As usual, Microsoft has put focus on usability and in SharePoint 2010 there are some notable application usability improvements (such as the enhanced Ribbon, rules for content storage, smarter folders, a <a title="JimNasr_blog" href="http://www.cmswire.com/cms/document-management/sharepoint-2010-administer-taxonomy-using-term-store-management-007525.php" target="_blank">term store</a> to manage taxonomy, <a title="JimNasr_blog" href="http://www.youtube.com/watch?v=ohy7aMphq3k" target="_blank">offline</a> capability through Workspaces, and, of course, the seamless integration with Office 2010).</li>
</ul>
<ul>
<li>Ease of development: an oxymoron in MOSS 07—more like lots of development—at least as far as web applications were concerned. SharePoint 2010 promises to be far better with a revamped SharePoint Designer and more web services and UI and functional components out of the box. Also, the new <a title="JimNasr_blog" href="http://www.sharepointdevwiki.com/display/sp2010/Business+Connectivity+Services+(BCS)" target="_blank">Business Connectivity Services</a> (BCS) promises to ease integration with third party applications (such as SAP or Microsoft CRM).</li>
</ul>
<ul>
<li>SharePoint 2010’s other enterprise-like features: more comprehensive administration capabilities, easier deployment over distributed networks, better backup and recovery options, auditing/compliance features. Notable improvements in breadth and depth of such features over MOSS 07.</li>
</ul>
<ul>
<li>Surprising improvements in <a title="JimNasr_blog" href="http://www.slideshare.net/cbpeters/share-point-2010-records-management" target="_blank">records management</a> capabilities, including the convenient, in-place record declaration. Though SharePoint has claim-to-fame largely for collaboration, and in SharePoint 2010, even more so, with a social networking slant (blogs, wikis, Cloud-tagging, activity feeds into its MySites, etc.), Microsoft has stealthily taken strides to make SharePoint a legitimate records management alternative. SharePoint 2010 is still some way short of the maturity and depth of features provided by the more established records management tools in the market, however ease of use and pull of momentum are definitely in its corner. <em>Watch this space for more in-depth research and opinion to come…</em></li>
</ul>
<p>So, some compelling reasons to drink the Kool-Aid. Maybe none more compelling though than its inevitability. Inevitable as, errr, <a title="JimNasr_blog" href="http://www.youtube.com/watch?v=DV5i2CZnIDs&amp;feature=related" target="_blank">Mr. Know It All</a> not knowing anything at all! SharePoint is here to stay, as proven by the already-out-of-control “<a title="JimNasr_blog" href="http://sharepointmagazine.net/news/what-is-your-firms-sharepoint-balance" target="_blank">SharePoint Sprawl</a>”. Also, frighteningly (<a title="JimNasr_blog" href="http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services" target="_blank">CMIS </a>implications aside), Microsoft is quite possibly the only truly one-stop-shop ECM vendor around&#8230;not that that’s really all that good: one vendor fits all or the best vendors fit together?</p>
<p>So, buying the hypothesis that it is inevitable, what next? Well, first, what is needed? What does the user need? No tool will solve a problem just because…in fact, in vacuum, it’s likely to compound it. What is the problem? What are the, ahem, six <a title="JimNasr_blog" href="http://en.wikipedia.org/wiki/Five_Ws" target="_blank">5Ws</a> (What, Why, Where, When, Who, How)? Back to basics. Yes, clarity, simplicity rule. Don’t let the expensive consultants tell you otherwise. It’s my experience that most of us spend a lot of time and induce a lot of heartburn on edge cases. Spend time on what really matters, and then de-scope and simplify that even more. If, after all that, SharePoint 2010 is still inevitable then consider these three things:</p>
<ul>
<li>What does the user need?</li>
</ul>
<ul>
<li>What does the user need?</li>
</ul>
<ul>
<li>What does the user need?</li>
</ul>
<p><a href="http://dilbert.com/strips/comic/2009-03-15/" target="_blank"><img class="size-full wp-image-451 alignnone" title="Dilbert_user_needs" src="http://armedia.com/blog2/wp-content/uploads/2010/06/44417.strip_.sunday.gif" alt="Dilbert on user needs" width="640" height="287" /></a></p>
<p>As engineers, we will spend a huge amount of time and energy on what we would like and what works for us—can’t everything be ext-js, RESTful, Spring Observer, n-tiered, service oriented, virtualized, mirrored, horizontally scaled, run on distributed ESX on redundant 4 way blade servers?! Oh, and, please adhere to the very large and complicated Enterprise IT Policy and System Architecture document (because it’s “Enterprise” it must be the right thing to do, right?!), and to every word of every paragraph of the System Requirements Specification (SRS)—written eighteen months ago by a large committee of “stakeholders”—and be sure to offer up all of the vendor’s glorious catch-all feature-set&#8230; Surely, exaggeration to make a point…<em>not really</em>. Bottom line either way: no user: very bloated, very expensive, very politically damning shinny shelfware.</p>
<p>Getting off the user-need soapbox for a second, the next BIG thing to figure out when thinking SharePoint 2010 is <a title="JimNasr_blog" href="http://www.cmswire.com/cms/enterprise-20/5-tips-on-effectively-planning-for-sharepoint-2010-migration-007305.php" target="_blank">migration</a>—nine times out of ten…or maybe 97 times out of 100 it will be needed. Migration from an existing SharePoint (03 or 07) application to the 2010 toolset, migration from a legacy application to SharePoint 2010, migration from another CMS to SharePoint 2010, migration of content and metadata…pick and choose your weapon of choice. Experience tells me that migration is NEVER EASY and its scope is almost ALWAYS UNDERESTIMATED. There are a number of <a title="JimNasr_blog" href="http://www.sharepointjoel.com/Lists/Posts/Post.aspx?List=0cd1a63d-183c-4fc2-8320-ba5369008acb&amp;ID=337" target="_blank">tools that can help</a>, but the solution goes way beyond tool selection; there needs to be a thorough plan (actually a Plan A, a Plan B, a Plan C and maybe even a Plan D). Oh, and let’s not worry about fixing the sprawl just yet…that’s a much bigger deal!</p>
<p>Not to be a buzzkill, but that’s not all. There is a lot more to consider depending on your specific view of the world. One other thing for sure though is <a title="JimNasr_blog" href="http://murraybgordon.wordpress.com/2010/03/23/sharepoint-2010-licensing-explained/" target="_blank">licensing</a>. In the great (and truly annoying) tradition of most Enterprise Software vendors, the licensing is a matrix of variables and if-thens. Every family needs a resident cost-accountant to truly savor such mind-bending aesthetics…</p>
<p>So, SharePoint 2010 represents some interesting opportunities for users and organizations and poses some further dilemma in the ECM space. A definite improvement over MOSS 07 but not (yet?) the iPhone of its genre. Competitors beware, Microsoft is coming…is here.</p>
<p>Lots to look forward to!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.armedia.com/blog/2010/06/microsoft-sharepoint-2010-and-the-last-great-hope/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

