<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Bill Benac</title>
        <link>http://blog.billbenac.com/blog/</link>
        <description>Doing my part to improve your Google search results.</description>
        <language>en-US</language>
        <copyright>Copyright 2009</copyright>
        <lastBuildDate>Fri, 02 Jan 2009 13:42:22 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Resolutions and Discoveries After a 10 Week Fast from Facebook</title>
            <description><![CDATA[Yesterday I returned to Facebook after doing a 10 week experiment in self-imposed exile. I wrote the following note for my friends there, and I post it here in hopes that those outside my Facebook network may find it interesting/rewarding.<br /><br />---<br /><br />Hello Friends:<br />
<br />
I struggle today to find the proper words to reintroduce and explain
myself after a 10 week hiatus from this world where words are usually
thrown about so carelessly. It's a new year, and I've been thinking
about my Facebook-centric new year's resolutions really since October
22 which was the first day of my experiment. Let me first share my
resolutions, then explain the experiment that brought me toward them,
then finally describe the discoveries from my experience.<br />
<br />
RESOLUTIONS<br />
<br />
In the year 2009 I plan to:<br />
<br />
* Visit Facebook less compulsively. Instead of logging in many times within an hour, I'll limit myself to twice daily.<br />
* Focus on my objectives within Facebook and consume only the benefits
that I actually want. It's important for me to stay in touch with
friends. It is not important to entertain myself with comic videos, and
I'll abstain from most of your status updates.<br />
* Try to raise the quality of content in your minifeed by posting primarily stimulating information.<br />
* Never be snarky.<br />
* Block most third-party applications than send me invites.<br />
<br />
I recommend that each of you also consider some Facebook-centric
resolutions for yourself. How much have you thought about maximizing
this network's benefits to you while avoiding its distractions and
pitfalls? Let me tell you how about my own journey.<br />
<br />
MY EXPERIMENT<br />
<br />
This past quarter I took a great class at Stanford from a now-favorite professor, Howard Rheingold (<a href="http://rheingold.com/" target="_blank" rel="nofollow">http://rheingold.com</a>). Howard famously coined the term "virtual community" and published a book (<a href="http://bit.ly/virc" target="_blank" rel="nofollow">http://bit.ly/virc</a>)
about the concept in 1993. That was the same year the first graphical
web browser, Mosaic, was released. The class I took with Howard was
called "Virtual Communities and Social Media." After reading several
assigned articles about multitasking, I was stumbled into "Is Google
Making Us Stupid," published by Nicholas Carr in The Atlantic. Carr
explored whether our minds are less able to achieve concerted focus
because Google and our hyperlinked world are training our minds to
optimize themselves to lightly visit brief snippets content. His
article is at <a href="http://bit.ly/think" target="_blank" rel="nofollow">http://bit.ly/think</a>.<br />
<br />
I've been struggling lately to think clearly, and I've joked that if I
had to retake the GRE, there's no way I would earn a score sufficient
for Stanford to accept me again. I used to pride myself on my verbal
skills, but of late I find my abilities have deteriorated. I've
considered several theories. Is my problem that I read less than I used
to? Is it that my writing within the workplace needs to be 100% clear
and therefore I've stripped out all flourishes? It is that I'm
chronically sleep deprived? Or to paraphrase Carr, has my proclivity
for multitasking rewired my brain and "made me stupid?" Facebook seems
made for the short attention span, offering bite-sized visits that can
be accomplished in under one minute. Maybe I should swear off Facebook
for a while, I thought.<br />
<br />
What good was Facebook to me anyway? It was impairing my ability to
accomplish tasks that required focus, because at any mental pause in
the day, I would instinctively click in to see what my friends were up
to. This made working from my home office feel more like working from a
dorm commons area with friends continually passing by. Further, I
wasn't proud of my own contributions to Facebook. In the week leading
up to my decision point, I had posted an unflattering picture of John
McCain, posted a video of a chimp learning to ride a Segway, and teased
a friend about a childhood photo.<br />
<br />
So off the grid I went, to see what I could learn.<br />
<br />
DISCOVERIES<br />
<br />
* I can still read books! Within hours of dropping Facebook, I was
enticed into reading a 300+ page book in just a few days. This was
exactly the type of activity that Carr's article suggested we have a
harder time doing in our over-multitasked digital world. I was
delighted to find that yes, I still have it in me to read something
more substantial than status updates. Before bed I took from the shelf
"Six Degrees" by D.J. Watts, but instead of just scanning its structure
as I expected, I ravenously read some eighty pages. Watts brilliantly
explores the science of network theory, and he shows it applies to much
more than just web-based networks or social networks. Check it out at <a href="http://bit.ly/networks" target="_blank" rel="nofollow">http://bit.ly/networks</a>.<br />
* I really care about maintaining friendships (strong ties) and
connections (loose ties) with you all on Facebook. I was concerned that
some of you might send me messages and be put off that I seemed to
ignore you. Especially after spending a week studying social capital
and taking a few hours in class discussing this topic with the guru
Tara Hunt (<a href="http://horsepigcow.com/" target="_blank" rel="nofollow">http://horsepigcow.com</a>),
I figured my experiment was costing me somewhat. Ironically, two people
who I hadn't been in touch with messaged me on Oct 22, the first day of
the experiment.<br />
* Most everything in Facebook is good for at least some people, but
that didn't mean that it was going to be good for me. I needed to
filter out the content, activities, and habits that didn't lead toward
my goals--and as with anything, I needed to know my goals.<br />
* Facebook is an unparalleled way for me to promote a message. My
sister Annie Poon created a beautiful animated entry for a Coldplay
video competition. I greatly wanted to share it with my friends, and my
best distribution channel would have been Facebook. But alas, I was
locked out. I'll have it available in the future though.<br />
* Twitter rules! While away from Facebook, Howard asked our Virtual
Communities class to use Twitter for a while between ourselves to make
sure we understood that medium. I thus set up an account intended for
class use only. The problem was that by using Twitter even a little, I
began to create some social capital and connections through Twitter
with people I care about, and I got hooked. I'll post another note in
the future about why I think the interest-based network of Twitter may
be a more compelling place for me to spend time than the social-based
network of Facebook. You'll be seeing many more of my Facebook status
updates originating from Twitter.<br />
* Ten weeks is too long to forgo Facebook. Once I returned, I found a
backlog of 30 new friend requests, 18 new inbox messages, and seven
other sundry requests. I need to spend some time playing catch up. Most
of us can probably handle less frequent visits to Facebook, but ten
weeks isn't a maintainable interval.<br />
<br />
WRAP-UP<br />
<br />
As I said earlier, I recommend that every Facebook user take some time
to reflect on whether you are using the technology or the technology is
using you to paraphrase hero Michael Wesch's most famous video about
Web 2.0 (<a href="http://bit.ly/w20" target="_blank" rel="nofollow">http://bit.ly/w20</a>).
Are you benefiting in excess of the gain Facebook gets from having you
view its ads? Do you like the way you use Facebook? I'm certain as I
follow my resolutions that I'll be much happier here than I used to be,
although I'll be here less frequently.<br />
<br />
I'd love to hear your thoughts on this note. Do any of these ideas
strike a chord for you? Do you need some encouragement to go
cold-turkey from Facebook for a while? Am I late to the realizations
that most people already had?<br />
<br />
Thanks!<br />
<br />
Bill<br /> ]]></description>
            <link>http://blog.billbenac.com/blog/2009/01/resolutions-and-discoveries-af.html</link>
            <guid>http://blog.billbenac.com/blog/2009/01/resolutions-and-discoveries-af.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Projects</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Facebook</category>
            
            <pubDate>Fri, 02 Jan 2009 13:42:22 -0800</pubDate>
        </item>
        
        <item>
            <title>WCI 10gR3 Installer Available... But Watch your Virtual Memory!</title>
            <description><![CDATA[Today Oracle released&nbsp; WebCenter Interaction 10gR3, the first Oracle-branded incarnation of the BEA's Aqualogic User Interaction product. I was eager to get started on upgrading a customer's ALUI 6.5 MP1 system to 10gR3. I encountered an "unexpected consideration" in the installer that you might call a bug. In my experience, on Windows the installer fails unless you explicitly allocate virtual memory.<br /><br />I installed on five lab servers that had been running ALUI 6.5 MP1. The first succeeded, but on the second two servers, the installers failed.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="10gr3-setup-fails.jpg" src="http://blog.billbenac.com/blog/2008/11/13/10gr3-setup-fails.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="419" height="257" /></span><br /><div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Hmm. I dug into the logs (and you have to wait a bit after this message before they are all fully written), and I  found the following in \installlogs\versionpolicy_deployment.log:<br /><br /><tt>&nbsp;[trycatch] Caught exception: The config file I:\apps\plumtree\uninstall\ptportal\10.3.0\register\ERROR: Registry key does not exist\ContentsXML\inventory.xml must exist.</tt><br /><br />And later:<br /><br /><tt>BUILD FAILED<br />I:\apps\plumtree\uninstall\ptportal\10.3.0\register\register.xml:4979: The following error occurred while executing this line:<br />I:\apps\plumtree\uninstall\ptportal\10.3.0\register\macrodefs\versionpolicy.xml:690: The following error occurred while executing this line:<br />I:\apps\plumtree\uninstall\ptportal\10.3.0\register\macrodefs\orainventory.xml:172: Oracle Universal Installer failed to properly register your ORACLE_HOME, <br />I:\apps\plumtree, under name OraWCIntgHome1.&nbsp; Make sure (1) that you have proper permissions (on unix you would have needed to run orainstRoot.sh as root user, on windows you need write access to registry and ability to install to %ProgramFiles% directory), (2) that, on unix, you did not run installer as root user.&nbsp; You can attempt to run OUI yourself with command line "I:\apps\plumtree\uninstall\ptportal\10.3.0\register/../../../oui/cd/Disk1/install/setup.exe" -ignoreSysprereqs -attachHome "ORACLE_HOME=I:\apps\plumtree" ORACLE_HOME_NAME=OraWCIntgHome1.&nbsp;&nbsp; If that succeeds, then you can run the installer again.</tt><br /><br />Okay, so I ran the command it suggested in the command line, and it again failed, but this time it left open the Oracle Universal Installer console with this message in it:<br /><br /><tt>Starting Oracle Univeral Installer...<br />Checking swap space: 0MB available, 500 MB required.</tt><br /><br />Ahh, so I dug into the virtual memory settings, and I found on one machine that the C:\ drive had no virtual memory assigned, and then a secondary drive had virtual memory set to "system managed size." On the other machine, the C:\ drive had vritual memory assigned, but it used "system managed size."<br /><br />On my fourth server, I tried setting specific memory settings on the C:\ drive, and that worked. On my fifth server, I tried leaving "system managed size" on the C:\ drive but specific virtual memory size on a secondary drive.&nbsp; Both of those worked fine.<br /><br />So the trick seems to be simply, set virtual memory specifically. To do so:<br /><br /><ul><li>WindowsKey-Break to open the System Properties Window</li><li>Go to the Advanced tab</li><li>Open the Performance settings</li><li>Go to the Advanced tab</li><li>In the Virtual Memory area, select Change</li><li>Specify "Custom Size" and enter intitial of 2046 and max of 4092</li><li>Click Set, then OK, then acknowledge you need to restart, then close apps, restart, and run the installer.</li></ul>Properly set memory could look something like this:<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="10gr3-virtual-memory.jpg" src="http://blog.billbenac.com/blog/2008/11/13/10gr3-virtual-memory.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="344" height="431" /><br /><br /><br /><br /><br /><br /><br /><br /><br /></span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Good luck with your 10gR3 installs!<br /><br />----<br /><br />Added Nov 14: Joel asked where to find the installer. Follow these steps:<br /><br /><ol><li>Log in through http://edelivery.oracle.com/</li><li>Search "Oracle Fusion Middleware" and "Win32"</li><li>Click into Oracle® Application Server 10g Release 3 (10.1.3) Media, Pack for Microsoft Windows (32-bit)</li><li>Search the results page for "Interaction" to find the WCI and related products</li></ol><br /><br /></div><div><br /></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/11/wci-10gr3-installer-available.html</link>
            <guid>http://blog.billbenac.com/blog/2008/11/wci-10gr3-installer-available.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">10gR3</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">bug</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">wci</category>
            
            <pubDate>Thu, 13 Nov 2008 16:32:28 -0800</pubDate>
        </item>
        
        <item>
            <title>Convert YouTube Lectures to MP3</title>
            <description><![CDATA[In addition to working for Oracle, I'm a student these days. Periodically I'm asked by a class to watch a lecture on YouTube. Most recently, I've been watching <a href="http://nl.youtube.com/watch?v=SiWjAVcWK4g">this lecture by thought-leader Jyri Engeström</a> in which he discusses objects around which communities socialize (photos, mobile phones, potato harvests, cats, etc) and what makes compelling services around these social objects. It turns out his lecture doesn't rely heavily on his slides, and I found myself wanting to listen to this through my mp3 player instead of sitting tethered in front of my computer. Yeah, yeah, I know I wouldn't have this problem if I had an iPhone, but...<br /><br />Here's how I converted a YouTube lecture to MP3:<br /><br />* Grabbed the mp4 video by going to <a href="http://keepvid.com/">http://keepvid.com</a>, entering the YouTube URL, then clicking the download button. At this point, the video was on my laptop<br />* Used <a href="http://mmconvert.235soft.org/en_us/">MMConvert</a> to "Convert to MP3" as its left menu offers. I had it use the video as the source instead of the audio files it expected.<br /><br />That's great, but... don't you figure there's an easier way?<br /><br />Turns out someone else set up a service to do this conversion. You can use http://www.flv2mp3.com/ for this. <br /><br />Of course, some YouTube content just isn't suited for MP3 format. An example is of my favorite video lectures by an anthropologist and interpreter of Web 2.0, Michael Wesch. Over the summer he gave an incredible lecture for the Library of Congress entitled <a href="http://nl.youtube.com/watch?v=TPAO-lZ4_hU">An Anthropological Introduction to YouTube</a>." Instead of converting the visual content into audio content, it will convert the YouTube hater into a YouTube lover. <br /><br />As much as I sometimes feel afflicted by the distractions of frivolity of social media, I can't ignore that they can provide critical community, career opportunities, entertainment, advice, and so forth. So I'm glad to learn ways to interact with and manipulate content that might otherwise look locked in a delivery channel (e.g. YouTube) or format (video). I hope you'll benefit from these too.<br /><br />]]></description>
            <link>http://blog.billbenac.com/blog/2008/11/convert-youtube-lectures-to-mp.html</link>
            <guid>http://blog.billbenac.com/blog/2008/11/convert-youtube-lectures-to-mp.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">School</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">mp3</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">youtube</category>
            
            <pubDate>Mon, 10 Nov 2008 22:14:36 -0800</pubDate>
        </item>
        
        <item>
            <title>Spreadsheet to Generate URLMapping Entries</title>
            <description><![CDATA[The URLMapping section of portalconfig.xml isn't the most elegant part of the ALUI portal configuration. You are required, for each URL you intend to support, to repeat a block of settings but with incremented index values. I'm working with a customer using dozens of URLMappings, and we realized there had to be a better way than updating these individually. Enter Excel.<br /><br />I created two spreadsheets, and the one you use depends on your environment and preferences. The simpler <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/2008/11/10/urlmapping-generator.xls">urlmapping-generator.xls</a></span>&nbsp;creates a single mapping for each single URL you want to use, and this is what you would expect is required. However, as I <a href="http://blog.billbenac.com/blog/2007/03/using-alui-urlmappings-especia-2.html">wrote last year</a>, there's a bug in how URLMappings are handled when a proxy or load balancer is involved, and the way to fix it is with an extra URLMapping. I have an advanced spreadsheet, <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/2008/11/10/urlmapping-generator-proxybugfix.xls">urlmapping-generator-proxybugfix.xls</a></span>&nbsp;for this situation, and it creates both the first mapping you would expect as well as the second mapping to handle the bug.<br /><br />I hope this is helpful.<br /> ]]></description>
            <link>http://blog.billbenac.com/blog/2008/11/spreadsheet-to-generate-urlmap.html</link>
            <guid>http://blog.billbenac.com/blog/2008/11/spreadsheet-to-generate-urlmap.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">alui</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Configuration</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">urlmapping</category>
            
            <pubDate>Mon, 10 Nov 2008 13:11:54 -0800</pubDate>
        </item>
        
        <item>
            <title>Fully Disable Search in ALUI Collab 4.5</title>
            <description><![CDATA[I'm working with a Collab deployment where we want to disable the search feature. This involves two things: disabling index requests from Collab to the Search Server and removing the search form from Collab's web UI. <br /><br /><b>Disabling Index Requests from Collab to Search</b><br /><br />The easy part is disabling index requests from Collab to the Search Server. Just open %ALUI_HOME%\ptcollab\4.5\settings\config\config.xml and change the value for "<span class="t">search</span><span class="t"> enabled</span><span class="m">" from "yes" to "</span>no."<br /><br /><b>Removing Search from Project Explorer UI</b><br /><br />For whatever reason, the Project Explorer view of Collab shows a search form even when the app is configured to not have its content index. This is shown below:<br /><br /><div><span><img alt="collab.projexp.search.before.jpg" src="http://blog.billbenac.com/blog/2008/10/15/collab.projexp.search.before.jpg" style="margin: 0pt 20px 20px 0pt; float: left;" width="600" height="222" /></span></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><div>The only way I know of to remove the form is to modify the JSP files within collab.war. The process for modifying collab.war is:<br /><br /><ol><li>Open %ALUI_HOME%\ptcollab\4.5\webapp</li><li>Backup webapp.war to webapp.war.orig</li><li>Create a new subdirectory called build</li><li>Extract collab.war into a new directory at  %ALUI_HOME%\ptcollab\4.5\webapp\build</li><li>Make the appropriate edits (described below)</li><li>Package up the contents of %ALUI_HOME%\ptcollab\4.5\webapp\build</li><li>Stop Collab</li><li>Replace the old collab.war with the new one</li><li>Start Collab</li></ol>In the case you want to remove the search UI, as in this case, make the following edits:<br /><br /><ol><li>Open %ALUI_HOME%\ptcollab\4.5\webapp\war\project\appView\projectToolbar.jsp</li><li>Comment out these lines:<br /><br />&nbsp;&nbsp;&nbsp; <tt>&lt;jsc:toolbarHtmlBlock align="right"&gt;&lt;nobr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fmt:message key="project.search"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="text" id="searchText" class="formInputBoxText" align="center"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;select id="searchScope" class="objectText" width="0%"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="all"&gt;&lt;fmt:message key="project.search.scope.all.folders"/&gt;&lt;/option&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value="current"&gt;&lt;fmt:message key="project.search.scope.current.folder"/&gt;&lt;/option&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/select&gt;&amp;nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;/jsc:toolbarHtmlBlock&gt;<br />&nbsp;&nbsp;&nbsp; &lt;jsc:toolbarHtmlBlock align="right"&gt;&lt;nobr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;collab:img src="search.gif" border="0" align="center" onclick="searchHandler()"/&gt;&lt;/nobr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/jsc:toolbarHtmlBlock&gt;<br /><br /></tt></li><li>Open %ALUI_HOME%\ptcollab\4.5\webapp\war\layout\templates\appViewSearchBar.jsp</li><li>Comment out these lines:<br /><br />&nbsp;&nbsp;&nbsp;<tt> &lt;input type="hidden" name="projID" value="${fn:escapeXml(baseAppViewBean.currentProject.ID)}"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="isAppView" value ="true"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="projRestr" value ="1"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;input type="hidden" name="collabType" value ="&lt;%=com.plumtree.collaboration.cssearch.CollabIndexManager.OBJECT_TYPE_ALL%&gt;"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="banText" align="${fn:escapeXml(tdAlign)}" width="50%" nowrap style="padding-right:5"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;b&gt;&lt;fmt:message key="project.search.label"/&gt;&lt;/b&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input size="32" name="searchString" value="" class="formInputBoxText"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;collab:simpleUI&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="submit" name="go" value="&lt;fmt:message key="key.search"/&gt;" class="formBtnText"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/collab:simpleUI&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;collab:notSimpleUI&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" onClick="document.searchForm.submit();"&gt;&lt;collab:img src="search.gif" border="0" align="absmiddle" altKey="key.search"/&gt;&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="${fn:escapeXml(advancedSearchURL)}"&gt;&lt;collab:img src="advancedSearch.gif" border="0" align="absmiddle" altKey="search.advanced"/&gt;&lt;/a&gt;&amp;nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="button" name="closeWindow" value="&lt;bean:message key="button.close"/&gt;" onClick="window.close()" class="formEditorBtnText"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/collab:notSimpleUI&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;collab:simpleUI&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td class="banText" align="right"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tiles:insert attribute="help"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/collab:simpleUI&gt;</tt><br /><br /></li><li>Add the following lines in the place of what was just commented out:<br /><br /><tt>&lt;td class="banText" align="${fn:escapeXml(tdAlign)}" width="50%" nowrap style="padding-right:5"&gt;<br />&lt;input type="button" name="closeWindow" value="&lt;bean:message key="button.close"/&gt;" onClick="window.close()" class="formEditorBtnText"&gt;<br />&lt;/td&gt;</tt><br /><br /></li><li>Save the files</li></ol><br /><br />The edits remove the undesired UI component from each project's individual view and the Project Explorer view, this latter being shown here:<br /><br /><div><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="collab.projexp.search.after.jpg" src="http://blog.billbenac.com/blog/2008/10/15/collab.projexp.search.after.jpg" style="margin: 0pt 20px 20px 0pt; float: left;" width="600" height="222" /></span></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></div><div>By the way, these steps are a little tedious if you will need to tweak your customizations as you try to get it right. After setting up the directories and unzipping the original collab.war, I wrap the remaining steps in a script that lets me quickly run my iterations. That script's contents:<br /><br /><tt>net stop "BEA ALI Collaboration"<br />c:<br />cd c:\bea\alui\ptcollab\4.5\webapp\build<br />zip -r collab.war *<br />mv -f collab.war ..\.<br />net start "BEA ALI Collaboration"</tt><br /><br />Note that I'm using command line tools "mv" and "zip" that come from the <a href="http://sourceforge.net/project/showfiles.php?group_id=9328">Unxutils</a> project, a collection of Windows ports of Unix utilities.<br /><br />That's it. Enjoy!<br /><div><br /></div><div><br /></div></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/10/fully-disable-search-in-alui-c.html</link>
            <guid>http://blog.billbenac.com/blog/2008/10/fully-disable-search-in-alui-c.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">alui</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Collab</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Search</category>
            
            <pubDate>Wed, 15 Oct 2008 13:30:59 -0800</pubDate>
        </item>
        
        <item>
            <title>Retrieve the info submitted into a timed-out webmail program</title>
            <description><![CDATA[I spend a lot of time in web-based email systems, and I've lost way too many email messages to a timed-out session. If I'm writing something both important and complicated, then I often am still composing after my session times out. Then when I click send? I get an error message.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="webmail_error.jpg" src="http://blog.billbenac.com/blog/2008/10/14/webmail_error.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="710" height="387" /></span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Today though I realized that since the content of my message is still in my browser and resubmitted every time I refresh that error page, I can actually retrieve it. In Firefox, I have a HTTP header monitor called TamperData that shows me my headers, including the POST section from my web-based emails. In MSIE, I would use Fiddler, though I've not tested this exact use case there. In any case, I can indeed retrieve the message.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="webmail_header.jpg" src="http://blog.billbenac.com/blog/2008/10/14/webmail_header.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" width="538" height="229" /></span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The next problem though is the message is encoded with plus+signs+between+the+words and without line breaks separating paragraphs. I realized I could write some simple Javascript to decode the message properly. You may want to do the same thing. I'll put the code here for you to read/take, and I'll also put the form here for my use and yours.<br /><br />Enjoy.<br /><br />&lt;script&gt;<br />function getit(sin) {<br />mystr=unescape(sin)<br />mystr=mystr.replace(/\+/g," ")<br />document.myform.theoutput.value=mystr<br />}<br />&lt;/script&gt;<br />&lt;form name=myform&gt;<br />&lt;hr&gt;&lt;b&gt;Enter your encoded message:&lt;/b&gt;&lt;br&gt;<br />&lt;textarea rows=4 cols=80 name=theinput&gt;&lt;/textarea&gt;<br />&lt;br&gt;<br />&lt;input type=button value="Decode it!"onclick=getit(theinput.value)&gt;<br />&lt;br&gt;<br />&lt;textarea rows=20 cols=80 name=theoutput&gt;&lt;/textarea&gt;<br />&lt;/form&gt;<br />&nbsp;<script>function getit(sin) {
mystr=unescape(sin)
mystr=mystr.replace(/\+/g," ")
document.myform.theoutput.value=mystr
}
</script>
<form name="myform" contenteditable="false">
<hr><b>Enter your encoded message:</b><br />
<textarea rows="4" cols="80" name="theinput"></textarea>
<br />
<input value="Decode it!" onclick="getit(theinput.value)" type="button" />
<br />
<textarea rows="20" cols="80" name="theoutput"></textarea>
</form> <div><br /></div><div><br /></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/10/retrieve-the-info-submitted-in.html</link>
            <guid>http://blog.billbenac.com/blog/2008/10/retrieve-the-info-submitted-in.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
            <pubDate>Tue, 14 Oct 2008 13:41:08 -0800</pubDate>
        </item>
        
        <item>
            <title>An Oldie but a Goodie: Getting Started with Adaptive Portlets</title>
            <description><![CDATA[Recently I had a conversation with someone about the features available in ALUI for portlet developers. We spoke mostly about what the IDK offers, but there's more too. The IDK is largely about data access and content transformation on the back end, either at the remote server level or in the portal's "gateway" processing space. But much can be done on the browser side too using adaptive portlets. I wrote a guide for this a long while ago, and it's still relevant and helpful. So I'll post it here.<br /><br />The guide starts with a Word document that gives an overview and screenshots of adaptive portlets. Then it gives installation instructions for the samples that are provided with the guide in its zip file. I'll put the first few pages of the Word document in this post so you can know whether you want to <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/blogfiles/2008/GettingStartedWithAdaptivePortlets.zip">download the entire guide with its sample code</a></span>.<br /><br /><b>Getting Started with&nbsp; Adaptive Portlets</b><br /><br />BEA uses the term "Adaptive Portlets" to refer to portlets using AJAX--technologies generally based in JavaScript and XML that allow richer application development.&nbsp; A simple introduction to this technology is provided through the "Intro to Adaptive Portlets" community with its associated portlets. This document describes that community and how to install it on your own system.<br /><br />The "Intro to Adaptive Portlets" community consists of several pages. The main page describes the adaptive portlet technology.&nbsp; Subsequent pages of the community illustrate different design patterns individually, and then the last page shows all technologies together in a cacophonous celebration. Screenshots of the pages are below.<br /><br /><b>Main Page<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/main%20page.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />Auto Refresh<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/auto%20refresh.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />Inline Navigator<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/inline%20navigator.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />Inline Post<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/inline%20post.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />Master/Detail<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/master%20detail.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />Broadcast Listener<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/broadcast%20listener.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br />All in One!<br /></b><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img src="http://blog.billbenac.com/blog/blogfiles/2008/all%20in%20one.jpg" class="mt-image-none" style="" width="700" /></span><br /><b><br /></b>]]></description>
            <link>http://blog.billbenac.com/blog/2008/09/an-oldie-but-a-goodie-getting.html</link>
            <guid>http://blog.billbenac.com/blog/2008/09/an-oldie-but-a-goodie-getting.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">alui</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">EDK</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Portlets</category>
            
            <pubDate>Wed, 17 Sep 2008 17:08:24 -0800</pubDate>
        </item>
        
        <item>
            <title>How to Remove Individual Components of Collab</title>
            <description><![CDATA[Let's get to know how to easily do what the Collab installer doesn't let you do easily: manage its individual components.<br /><br />At my current client, we're upgrading ALUI Collab 4.2 to 4.5 as part of our upgrade to ALUI 6.5. One feature of the new ALUI suite is that it offers a "common notification service" that replaces the collab-specific notification service that had been part of 4.2. Accordingly, we don't need the old Collab notification service. The <a href="http://edocs.beasys.com/alui/collaboration/docs45/install/quickstart.html#wp1058325">official upgrade documentation</a> says "<a href="" name="wp1062466"></a>If you have an existing Notification Service from your previous installation of Collaboration, disable or uninstall it." But how do you do that? <br /><br />If you run the Collab 4.2 or 4.5 uninstaller on a machine with more than one Collab component, it will remove every component. That doesn't work well since you're trying to upgrade the Collab piece and remove the notification piece. Similarly, you may realize that you installed Collab 4.5's Search Service on the Collab box when you really want it on the Search box, so how do you remove just the Search Service?<br /><br />In either case, you can use the batch file that is part of the undesired component, remove the service, then delete the files from the file system. In the case of the 4.2 notification, use this batch file: %ALUI_HOME%ptnotification\4.2\bin\ptnotificationserverd.bat, and in the case of the Search Service, use this batch file: %ALUI_HOME%searchservice\1.1\bin\searchservice.bat. Pass in the parameter "remove" and you're done.<br /><br />Enjoy!<br />]]></description>
            <link>http://blog.billbenac.com/blog/2008/08/how-to-remove-individual-compo.html</link>
            <guid>http://blog.billbenac.com/blog/2008/08/how-to-remove-individual-compo.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Collab</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Search</category>
            
            <pubDate>Wed, 27 Aug 2008 12:06:01 -0800</pubDate>
        </item>
        
        <item>
            <title>Firefox Plugin Shows Host Portal Info</title>
            <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="ALUIportalhost.jpg" src="http://blog.billbenac.com/blog/blogfiles/2008/ALUIportalhost.jpg" class="mt-image-none" style="" vspace="4" width="400" align="right" border="1" hspace="4" /></span>Are you familiar with the routine of opening the HTML source of an ALUI portal page, scrolling to the bottom, and checking for the name of the host server? This is something I've done countless times in load balanced environments when trying to test or debug a server. <br /><br />I decided to make a Firefox plugin that will extract that portal host information then display it at the bottom of the browser so that I can immediately see the portal host.<br /><br />I've had several other people try this plugin, and they found it useful. I hope you'll find it helpful too. To install it, <a href="http://blog.billbenac.com/blog/blogfiles/2008/ALUIportalhost.xpi">download the plugin</a>, then drag it onto your Firefox browser. It's been tested on FF versions 1.5 through 3.1.<br /><br />Enjoy!<br /> <div><br /></div><div>Updated October 7: <br /><br />Thanks to Andreas Mersch who improved on my original extension. With his addition, the browser will now display the portal performance information along with the portal host. The new version can be downloaded with the same link as before. <br /></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/08/firefox-plugin-shows-host-port.html</link>
            <guid>http://blog.billbenac.com/blog/2008/08/firefox-plugin-shows-host-port.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">firefox plugin</category>
            
            <pubDate>Wed, 27 Aug 2008 10:33:13 -0800</pubDate>
        </item>
        
        <item>
            <title>Configuring Proxies in ALUI Core Products</title>
            <description><![CDATA[To access the public Internet from many enterprise environments, one needs to configure the browser on his or her laptop to go through a proxy server. Sometimes, this requirement applies as well to the servers that run ALUI as well. With a browser, it's a fairly straight forward point-and-clickety-clickety-click to enter the proxy information, but with ALUI products, it's more involved. It seems like I always need to check my old emails to find configuration instructions, so I'll post here to make it easier for me, and hopefully easier for you too.<br /><br />Of the several core ALUI products, only a few need proxy information. Products like the Search or Document Repository server of course do not need to make requests to resources outside of the ALUI servers. The portal is the most obvious component for doing so. You might have a some <a href="http://blog.billbenac.com/blog/2007/03/using-google-portlets-in-alui.html">portlets provide by Google</a> for example that users should be able to access. The portal's proxy is configured by updating %ALUI_HOME%\settings\common\serverconfig.xml to use the following settings:<br /><br /><textarea rows="15" cols="80">&lt;component name="openhttp" type="http://www.plumtree.com/config/component/types/openhttp"&gt;
        &lt;!-- Leave the following ProxyServer value blank if you have no HTTP Proxy Server. --&gt;
        &lt;setting name="openhttp:ProxyURL"&gt;
            &lt;value xsi:type="xsd:string"&gt;http://www-proxy.myco.com:31060&lt;/value&gt;
        &lt;/setting&gt; 
        &lt;setting name="openhttp:ProxyUsername"&gt;
            &lt;value xsi:type="xsd:string"&gt;
        &lt;/value&gt;
        &lt;setting name="openhttp:ProxyPassword"&gt;
            &lt;value xsi:type="xsd:string"&gt;
        &lt;/value&gt;
        &lt;setting name="openhttp:ProxyBypassLocal"&gt;
            &lt;value xsi:type="xsd:boolean"&gt;true&lt;/value&gt;
        &lt;/setting&gt;
        &lt;!-- Use semicolon-separated list for local addresses, --&gt;
        &lt;!-- e.g., www.example.com;*.plumtree.com --&gt;
        &lt;setting name="openhttp:ProxyBypass"&gt;
		   &lt;value xsi:type="xsd:string"&gt;localhost;*.myco.com&lt;/value&gt;
        &lt;/setting&gt;
&lt;/setting&gt;&lt;/setting&gt;&lt;/component&gt;</textarea><br /><br />A less obvious component that should be configured for proxy access is the automation server.&nbsp; In some cases, portal administrators and content managers may choose to create a job that runs a portlet web service as its operation. One reason to do this is to generate the HTML that comes from a slow-running dynamic portlet. Antoer reason to do this could be if the code behind an URL ran some job. The automation server uses the same proxy setting configuration that the portal does in %ALUI_HOME%\settings\common\serverconfig.xml. <br /><br />Finally, the new Remote Portlet Service's RSS Reader needs a proxy configured in order to get feeds outside the enterprise. The settings are to be put in %ALUI_HOME%\remoteps\1.0\settings\config\wrapper.conf. In myco's case, the proper settings were:<br /><br /><pre>wrapper.java.additional.22=-Dhttp.proxyHost=www-proxy.myco.com<br />wrapper.java.additional.23=-Dhttp.proxyPort=31060<br />wrapper.java.additional.24=-Dhttp.nonProxyHosts="localhost|*.myco.com"</pre><br />It is important to follow the example settings in the file correctly. The nonProxyHosts setting needs to be in quotation marks, but the proxyHost and proxyPort should not be.<br /><br />It is also important to not follow the example settings with regard to the setting number. The file suggests:<br /><br /><pre>#wrapper.java.additional.19=-Dhttp.proxyHost=<br />#wrapper.java.additional.20=-Dhttp.proxyPort=<br />#wrapper.java.additional.21=-Dhttp.nonProxyHosts=</pre><br />However, 19, 20, and 21 are used by previous settings, so the proper wrapper.java.additional numbers will be increased as shown in the myco example.<br /><br />Enjoy!<br /><br />]]></description>
            <link>http://blog.billbenac.com/blog/2008/08/configuring-proxies-in-alui-co.html</link>
            <guid>http://blog.billbenac.com/blog/2008/08/configuring-proxies-in-alui-co.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Configuration</category>
            
            <pubDate>Thu, 21 Aug 2008 14:06:19 -0800</pubDate>
        </item>
        
        <item>
            <title>Why You Don&apos;t Need to Fuss with Portal Server Cache Settings</title>
            <description><![CDATA[A colleague, Jeff, called today to ask about various performance-related items including ALUI portal caching.&nbsp; Many people know that portlet developers and administrators can coordinate to control caching of portlet content. This lets the company news portlet content, for example, be fetched once in an hour into memory and then be shared between all users, while the paycheck content is fetched for each individual user. Less well known though is that the system administrator can tune how the portal server handles the cache. How many of those paychecks for example should be stored in memory before being replaced?<br /><br />So Jeff and I chatted a bit about the options and effects of tuning portal server caching today. I was reminded of analysis I did at one customer which was interested in whether performance (on version 5.0.4) could be improved by using more of its spare portal server memory for caching. We found that it isn't worth the trouble to tune away from the default settings because the system works great out of the box. I believe the analysis applies to current versions as well.<br /><br />I'm not writing this as a blind fanboy who sees nothing but the brilliance of the ALUI product. Rather, after a careful analysis, I realized the tunings really are fine. You'll probably agree with me when you consider how the portal caching works. Basically, the portal stores content in its cache based on how recently used it is. So the more frequently used content is, the more likely it is to regain its place on the top of the list of items to cache. When an item is infrequently used, it will be pushed down the cache list by other items and ultimately get pushed out. But this means that the most important content, the most frequently used, is always on the top of the list. All that content toward the bottom of the list doesn't get used frequently anyway, so who cares if it gets pushed out of cache? And if you triple the cache size, then you just store several times more unimportant content in cache.<br /><br />If you never knew the portal cache settings could be tuned, then forget you read this post because it doesn't matter. But if you were casting about on the Internet looking for information about this topic, stop while you're ahead! Don't bother fixing what isn't broken. It would be better for you to tinker with your image server's content expiration headers for something that will really have impact.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="caching-analysis-results.jpg" src="http://blog.billbenac.com/blog/blogfiles/2008/caching-analysis-results.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" width="450" height="" /></span>Want data? Feel free to <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/blogfiles/2008/portal.cache.analysis.ppt">read the presentation </a></span> I did on the results of my analysis. You'll see that when we tripled the cache size, we gained only insignificant reduction in requests to remote servers.<br /><div><br /></div><div><br /></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/08/why-you-dont-need-to-fuss-with.html</link>
            <guid>http://blog.billbenac.com/blog/2008/08/why-you-dont-need-to-fuss-with.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">performance</category>
            
            <pubDate>Thu, 14 Aug 2008 13:36:38 -0800</pubDate>
        </item>
        
        <item>
            <title>Two ways to connect to the API Service through the EDK</title>
            <description><![CDATA[<p>I've seen a couple questions lately about ways to connect to the ALUI API Service. There are two ways to use the EDK to connect to the API server. Which way you connect depends on the intend of the specific application.  </p><p>One way to connect is with a specific username and password. That works well if you need the API server to access information or do actions not necessarily available to the browsing user. Let's take the example where you want to report the number of portlets in the system.  </p><p>If you want all users to see the total number of portlets including portlets they do not have access too, then you would specify a privileged user for the API connection so that it could query everything. This would be hardcoded or set in admin preferences.  </p><p>If you want users to see only the number of portlets to which they have access, then you would make the API connection using the credential of the current user. This uses something called the login token, and it is obtained programmatically.  </p><p>I'll give example code for both, but let me first say that in either case, a variable should be set in the web.config file. The API call will want to know where the PTHOME directory is, and that's is best set in web.config rather than hardcoded. So with either solution, this should be in web.config:  </p><p>&nbsp; &lt;appSettings&gt;<br />&nbsp;&nbsp;&nbsp; &lt;add key="pthome" value="i:\\apps\\plumtree"/&gt;<br />&nbsp; &lt;/appSettings&gt;  </p><p>Then either case, you'll grab that variable from your code.  </p><p>So if you want to connect using a specific user (usually one with elevated permissions), then you would do it like this:  </p><p>&nbsp; // create a session to portal and connect<br />&nbsp; string sAdminName = ConfigurationSettings.AppSettings["admin-name"];<br />&nbsp; string sAdminPass = ConfigurationSettings.AppSettings["admin-pass"];<br />&nbsp; string sPTHome = ConfigurationSettings.AppSettings["pthome"] + "";<br />&nbsp; com.plumtree.openkernel.config.IOKContext context = com.plumtree.openkernel.factory.OKConfigFactory.createInstance( sPTHome + "\\settings", "portal");<br />&nbsp; PortalObjectsFactory.Init(context);<br />&nbsp; IPTSession session = PortalObjectsFactory.CreateSession();<br />&nbsp; try<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.Connect(sAdminName,sAdminPass,null);<br />&nbsp; }  </p><p>The admin-name and admin-pass for a production application should be set with an administrative preference and retrieved through the EDK so that they are not visible in the source file.  </p><p>And if you want to connect with the individual user's context, then do this:  </p><p>&nbsp; // connect a session<br />&nbsp; string sPTHome = ConfigurationSettings.AppSettings["pthome"] + "";<br />&nbsp; com.plumtree.openkernel.config.IOKContext context = com.plumtree.openkernel.factory.OKConfigFactory.createInstance( sPTHome + "\\settings", "portal");<br />&nbsp; PortalObjectsFactory.Init(context);<br />&nbsp; session = PortalObjectsFactory.CreateSession();<br />&nbsp; // we'll use the context of the logged in user<br />&nbsp; try<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.Reconnect(edk.GetRequest().GetLoginToken());<br />&nbsp; }  </p><p>I have a sample portlet application attached that uses the user's individual context to connect to the API service and gather some information. Its <a href="http://blog.billbenac.com/blog/blogfiles/2008/api-check.zip">zip file is here</a>. It has a folder called install-resources with some install instructions.  </p><p>I hope that helps,  </p><p>Bill</p>]]></description>
            <link>http://blog.billbenac.com/blog/2008/07/two-ways-to-connect-to-the-api.html</link>
            <guid>http://blog.billbenac.com/blog/2008/07/two-ways-to-connect-to-the-api.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">EDK</category>
            
            <pubDate>Mon, 28 Jul 2008 17:33:21 -0800</pubDate>
        </item>
        
        <item>
            <title>Installing Movable Type</title>
            <description><![CDATA[One part of Oracle's post-acquisition integration is to retire the subsumed company's blogs. Thus, the blog I used to maintain at BEA Systems before we were bought by Oracle is going away. I've initiated the process of getting an Oracle blog, but ... well, why not take this opportunity to break free? I do care to preserve my blog posts, and if they live exclusively within a company, they're subject to certain upheavals now and again. Also, occasionally I'll want to blog about something that won't fit at Oracle, such as ... my notes on installing Movable Type.<br /><br />I decided to migrate my old BEA posts to http://blog.billbenac.com, and I chose Movable Type as my blog platform. The process went like this:<br /><br />
<ul>
<li>SSH into web server

</li><li>Login to MYSQL to create my database and user.
<ul>
<br />drop database thedb;
<br />create database thedb;
<br />GRANT USAGE ON thedb.* TO 'theuser'@'localhost';
<br />GRANT SELECT,INSERT,UPDATE,DELETE,CREATE, INDEX, ALTER
<br />ON thedb.*
<br />TO 'theuser'@'localhost'
<br />IDENTIFIED BY 'thepassword';
</ul>
</li><li>Download MT: http://www.movabletype.com/download/personal/MTP-4.12-en.tar.gz

</li><li>Extract as a folder under the root of the desired website such as /mt. This gives me blog.billbenac.com/httpdocs/mt/mt.cgi, among other things. This 

directory will be used for administration.

</li><li>Browse to MT setup page, in my case http://blog.billbenac.com/mt with a login button that brings me to http://blog.billbenac.com/mt/mt-wizard.cgi

</li><li>Use CPAN to download the necessary Perl modules

</li><li>Fill out the wizard screens. When it asks about the configuration file, mt-config.cgi, click the link to view the generated file (Show the mt-config.cgi 

file generated by the wizard). Copy the contents, and put it on the server manually. Tell the wizard you did so, and continue.

</li><li>After choosing a blog name, edit the URL and publishing path as appropriate. I made the URL and path different from the default. The URL is 

http://blog.billbenac.com/blog, and the publishing path ends with blog.billbenac.com/httpdocs/blog/.  I created the directory manually on the server and 

set its permissions with: mkdir blog;chmod 777 blog

</li><li>After logging in, the automatic post didn't display. I republished it, and that was that.

</li><li>But man is it ugly. Login and try in the right actions column to refresh blog templates. Refresh the classics. Don't bother backing up templates.  Hit 

continue. That might not have done anything though...

</li><li>In the web admin section, to to Design-&gt; Styles. Pick one. I grabbed Unity Tricolor from the Default Styles category.

</li><li>Finally, I wanted to configure Live Writer to connect to the site so I could migrate my old BEA Dev2Dev posts. It didn't like my password a few times. It 

turns out Movable Type uses a different password for the API. Thanks to http://www.alexlomas.com/blog/2006/08/live_writer.html for this advice:
<ul>
<br />Log into Movable Type.
<br />Click on your username in the top navigational menu to go to your profile.
<br />Scroll down to the bottom where you see API Password.
<br />Input a password of your choice and save. For security reasons, it should be different from your normal author password.
<br />Use this new password in live writer.
</ul>
</li><li>At this point I thought I was in business. But when I tried publishing from Live Writer to my site, I got this error:

</li><li>Statement has no result columns to bind (perhaps you need to successfully call execute first) at {my path}/mt/extlib/Data/ObjectDriver/Driver/DBI.pm line 

119.

</li><li>One post suggested it could be a database version problem, and indeed, I was an unsupported MySQL from 2003: 3.23.58. I asked my hosting company to upgrade me, 

and now I'm on 4.1.15.

</li><li>I publish, and? "Server Error Server Occurred. Statement has no result columns to bind (perhaps you need to successfully call execute first) at {my 

path}/mt/extlib/Data/ObjectDriver/Driver/DBI.pm line 119.

</li><li>When I log into the web interface of my site though, I see that my posts that failed to publish actually did get created in my MT database, but they 

hadn't made been published entirely. I was able to open them up and successfully republish.

</li><li>When new users registered to comment, the web site said it was sending them confirmation emails, but these didn't arrive. I had to go to System-&gt; 

Preferences-&gt; General and set the outgoing email address to resolve the problem.
</li></ul>
<p>I prefer Drupal!]]></description>
            <link>http://blog.billbenac.com/blog/2008/07/installing-movable-type.html</link>
            <guid>http://blog.billbenac.com/blog/2008/07/installing-movable-type.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Projects</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Blog</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
            <pubDate>Fri, 25 Jul 2008 23:32:05 -0800</pubDate>
        </item>
        
        <item>
            <title>Want to remove /portal from the URL of your portal?</title>
            <description><![CDATA[So you can't live with an url like http://company.com/portal/server.pt? Luckily, you've got options. This blog discusses in detail how you can change that URL with ALUI 6.1 MP1 P1. It more briefly explains how to do it on earlier and later versions too.  <p>First take care of these prerequisites:  </p><ul> <li>Install base ALUI 6.1 MP1  </li><li>Install P1  </li><li>Load portal at http://company.com/portal/server.pt. It works!  </li><li>Because of a bug in MP1 related to alternate virtual directories, you need to also install the CF AquaLogicInteraction_6.1.1.325722. This does not apply to earlier or later releases. I'm sorry to say the only way to get that CF is to ask customer support for it. That's how CFs work.</li></ul> <p>But as we already decided, you don't like that default URL. You want to remove /portal entirely. So set up your machine with Metabase Explorer to easily copy your IIS config from the /portal virtual directory to your root directory. Metabase Explorer is part of the IIS Resource Toolkit available <a href="http://www.microsoft.com/Downloads/details.aspx?familyid=56FC92EE-A71A-4C73-B628-ADE629C89499&amp;displaylang=en">here</a>.  </p><p>Let's use it:  </p><ul> <li>Launch Metabase Explorer (Start-&gt;IIS Resources-&gt;Metabase Explorer-&gt;Metabase Explorer).  </li><li>Navigate the tree to the /portal virtual directory. This may be at LM/W3SVC/1/ROOT/portal.  </li><li>Within /portal, right-click on ScriptMaps and copy.  </li><li>Within /ROOT, right-click on ScriptMaps and paste.  </li><li>Within /portal, right-click on Path and copy.  </li><li>Within /ROOT, right-click on Path and paste. </li></ul> <p>Now you've got IIS configured. Let's move to the portal and get it squared away:  </p><ul> <li>Open %ALUI_HOME%\settings\portal\portalconfig.xml and edit it to remove "portal/" from the following settings:  <ul> <li>VirtualDirectoryPath  </li><li>AdminSiteBaseURL  </li><li>SSOVirtualDirectoryPath</li></ul> </li><li>Save the file  </li><li>Restart IIS </li></ul> <p>You should now be able to browse to http://company/server.pt. It worked for me!  </p><p>In the case of ALUI 6.5, I was able to do this without worrying about a CF. In the case of ALUI 6.1.0.1 and Plumtree 5.0.4, I never tried removing the /portal virtual directory entirely, but I was able to rename that directory without difficulty so I believe renaming the virtual directory to "/" will not pose a problem.  </p><p>Finally, as a bonus, let's say you don't like the server.pt extension. On IIS it turns out, you can use anything that ends in .pt. So you might choose to publish your portal's URL as something more apt such as http://company.com/a.pt.  </p><p>Please let me know how this works for you. These aren't battle tested instructions, and this may not be a "supported" configuration. If you deploy this and have many users hitting the portal on a sustained basis, let me know with a comment. Or if you find my instructions are buggy? Let me know that too.  </p><p>Enjoy!</p>]]></description>
            <link>http://blog.billbenac.com/blog/2008/06/want-to-remove-portal-from-the.html</link>
            <guid>http://blog.billbenac.com/blog/2008/06/want-to-remove-portal-from-the.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
            <pubDate>Tue, 03 Jun 2008 19:39:11 -0800</pubDate>
        </item>
        
        <item>
            <title>Upgrade Presentation: BEA Participate 08</title>
            <description><![CDATA[Are you a chronic ALUI upgrader? A newbie? I gave a presentation at BEA Participate discussing best practices to make anyone have a more pleasant upgrade experience. Seriously, upgrades don't need to be painful. <p>You can <a href="http://blog.billbenac.com/blog/blogfiles/2008/whatareyouwaitingfor.ppt">download my presentation here</a>. <br /></p> <p>Enjoy.</p><div><br /></div>]]></description>
            <link>http://blog.billbenac.com/blog/2008/05/upgrade-presentation-bea-parti.html</link>
            <guid>http://blog.billbenac.com/blog/2008/05/upgrade-presentation-bea-parti.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">BEA/Oracle</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">ALUI</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Powerpoint</category>
            
            <pubDate>Tue, 13 May 2008 20:52:38 -0800</pubDate>
        </item>
        
    </channel>
</rss>
