<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Bill Benac</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://blog.billbenac.com/blog/atom.xml" />
    <id>tag:blog.billbenac.com,2008-07-25:/blog//1</id>
    <updated>2015-04-24T04:27:43Z</updated>
    <subtitle>Doing my part to improve your Google search results.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Personal 4.12</generator>

<entry>
    <title>How to trace database commands from WebSphere Portal</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2015/04/how-to-trace-database-commands.html" />
    <id>tag:blog.billbenac.com,2015:/blog//1.69</id>

    <published>2015-04-24T03:39:30Z</published>
    <updated>2015-04-24T04:27:43Z</updated>

    <summary>Hello Folks:I&apos;m now blogging about something new: WSP! You jam band dance freaks immediately think Widespread Panic, but no, I&apos;m talking about IBM WebSphere Portal. After so many years of working with the familiar Oracle/BEA/Plumtree portal, it&apos;s stimulating to now...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    <category term="websphere" label="websphere" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wsp" label="wsp" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Hello Folks:<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="Widespread_ChiB_sm.jpg" src="http://blog.billbenac.com/blog/2015/04/23/Widespread_ChiB_sm.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="300" width="" /></span>I'm now blogging about something new: WSP! You jam band dance freaks immediately think Widespread Panic, but no, I'm talking about IBM WebSphere Portal. After so many years of working with the familiar Oracle/BEA/Plumtree portal, it's stimulating to now work with the mysteries of a new product.<br /><br />But mysteries are meant to be discovered. So here's one for today: how to trace database from WebSphere portal. And it seems appropriate to term this a mystery. When I asked two IBM consultants about help getting oriented to the schema, they both told me they never look directly in the database, with one emphatically saying in ten years he's never done it. Well, the time is right to unveil some new info.<br /><br />The WSP database schema is harder to immediately understand than Plumtree's was, but the product comes with features to lay it out for you. Plumtree had PTSpy logging that would show you the exact queries and commands executed as the system marched along. With WSP, those who config and dig can find similar information in the trace.log file. Here's the process:<br /><br />1. Turn on tracing. Navigate to the administrative area Portal Analysis &gt; Enable Tracing, then add these trace strings:<br /><br /><pre class="pre codeblock"><code>com.ibm.wps.datastore.*=all:   
com.ibm.wps.services.datastore.*=all</code><br /></pre><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="set-logging.PNG" src="http://blog.billbenac.com/blog/2015/04/23/set-logging.PNG" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" height="190" width="" /></span><pre class="pre codeblock"><br /></pre>2. Perform the actions through the portal whose database queries and commands you're interested in. I recommend you submit some easily traced values. For this example, I created a page with the name "simplicity-name," description "simplicity-description," and so forth.<br /><br />3. Search the log files for the commands you're interested in. Since the logs rollover quickly from trace.log into timestamped files like trace_15.04.23_20.15.47.log, you may want to search on rolled files too using a pattern like trace*log.<br /><br />My first search was for this:<br /><br /><pre class="pre codeblock"><code>grep -3 simplicity ./wp_profile/logs/WebSphere_Portal/*&nbsp;&nbsp; | grep -i replace</code></pre><br />The results included this:<br /><br /><p></p><pre class="pre codeblock"><code>StatementTracer executeUpdate Replaced SQL: INSERT INTO 
customization.PAGE_INST_LOD (PAGE_INST_OID, LOCALE, TITLE, DESCRIPTION) 
VALUES 
(00004957101501150159803225B974D380CC(Z6_9QL0HA40L80I50A659E9N93GC6), 
en, simplicity-title, simplicity-description)<br />/opt/middleware/wp_profile/logs/WebSphere_Portal/trace_15.04.23_20.15.47.log:[4/23/15
 20:15:46:022 PDT] 000000ec SQLStatementT 3 
com.ibm.wps.datastore.impl.debug.SQLStatementTracer executeUpdate 
Replaced SQL: INSERT INTO customization.PAGE_INST_DD (PAGE_INST_OID, 
NAME, VALUE) VALUES 
(00004957101501150159803225B974D380CC(Z6_9QL0HA40L80I50A659E9N93GC6), 
com.ibm.portal.friendly.name, simplicity-friendly)</code></pre><br />And from that I could tell my new page had the ID of 00004957101501150159803225B974D380CC. So with that info, I could search for all the SQL related to it:<br /><br /><pre class="pre codeblock"><code>grep -3 00004957101501150159803225B974D380CC ./wp_profile/logs/WebSphere_Portal/*&nbsp;&nbsp; | grep -i replace</code></pre><br />That gave me many lines. I wanted to know the summary of all the tables that were inserted to as my new page was created, so I searched just the uniq tables with insert statements, stripping out the exact commands:<br /><br /><pre class="pre codeblock"><code>$ grep -3 00004957101501150159803225B974D380CC ./wp_profile/logs/WebSphere_Portal/*&nbsp; <br />&nbsp;| grep -i replace | grep -i insert | sed s/".*INSERT"//g | sed s/"(.*"//g | sort | uniq<br />&nbsp;INTO customization.COMP_INST<br />&nbsp;INTO customization.COMP_INST_DD<br />&nbsp;INTO customization.PAGE_INST<br />&nbsp;INTO customization.PAGE_INST_DD<br />&nbsp;INTO customization.PAGE_INST_LOD<br />&nbsp;INTO customization.PAGE_INST_MAD<br />&nbsp;INTO customization.PROT_RES<br />&nbsp;INTO customization.UNIQUE_NAME</code></pre><br />I hope that's enough to get you started. After getting the first glimpses of what actions use which tables, you'll then be able to start piecing together relationships between tables and queries that can answer questions for you. For example, here's one I put together to see the RELEASE database's various elements that make up Web Application Bridge portlet entries:<br /><br />select * from outbound_config, outbound_mapping, outbound_policy, outbound_cookie_rule<br />where OUTBOUND_MAPPING.OUTBOUND_CONFIG_ID = OUTBOUND_CONFIG.OID<br />and OUTBOUND_POLICY.OUTBOUND_MAPPING_ID = OUTBOUND_MAPPING.OID<br />and OUTBOUND_COOKIE_RULE.OUTBOUND_POLICY_ID = OUTBOUND_POLICY.OID;<br /><br />And what keeps you up at night? <br /><br />Enjoy!<br /> 



]]>
        
    </content>
</entry>

<entry>
    <title>Selecting across archived Analytics event tables</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2014/07/selecting-across-archived-anal.html" />
    <id>tag:blog.billbenac.com,2014:/blog//1.68</id>

    <published>2014-07-03T13:58:15Z</published>
    <updated>2014-07-03T14:23:21Z</updated>

    <summary>Hi Folks:To celebrate the eve of my nation&apos;s Independence Day, I free myself from only querying across the data of a single Analytics asfact (Analytics Server fact) table. As a reminder, in most Analytics installations, the system archives events each...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    <category term="sql" label="sql" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Hi Folks:<br /><br />To celebrate the eve of my nation's Independence Day, I free myself from only querying across the data of a single Analytics asfact (Analytics Server fact) table. As a reminder, in most Analytics installations, the system archives events each month to put events from the prior month into its own table. This makes it harder to get a view across a period greater than what is in a particular table.<br /><br />Consider first this query that tells me the users who have logged into the system in the past week and the number of their logins, with extra info about when the first and last of those logins were:<br /><br /><i>select distinct <br />u.name user_name, count (u.name) total_logins,<br />min(occurred) earliest_login_of_period, max(occurred) last_login <br />from asdim_users u inner join asfact_logins logins on u.userid = logins.userid<br />where occurred &gt; GETDATE()-7<br />group by u.name<br />order by last_login desc</i><br /><br />That's fine, but what if I want to get the past 45 days? Or 90 days? I can change the query so that instead of treating "login" as an alias of a single table, it instead becomes the name of a derived table, and I create that derived table by joining the current asfact_login with the appropriate number of archived asfact_login_X tables:<br /><br /><i>select distinct <br />u.name user_name, count (u.name) total_logins,<br />min(occurred) earliest_login_of_period, max(occurred) last_login <br />from asdim_users u left join (<br />select occurred,userid from asfact_logins<br />union<br />select occurred, userid from asfact_logins_2014_05<br />union<br />select occurred, userid from asfact_logins_2014_04<br />) logins on u.userid = logins.userid<br />where occurred &gt; GETDATE()-999<br />group by u.name<br />order by last_login desc</i><br /><br />I don't know whether you're excited about that, but from my perspective:<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="fireworks.jpg" src="http://blog.billbenac.com/blog/2014/07/03/fireworks.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" height="505" width="958" /></span><br /> <div><br /></div>

]]>
        
    </content>
</entry>

<entry>
    <title>Monitor your network reliability</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2014/01/monitor-your-network-reliabili.html" />
    <id>tag:blog.billbenac.com,2014:/blog//1.67</id>

    <published>2014-01-24T18:28:28Z</published>
    <updated>2014-01-24T19:01:05Z</updated>

    <summary>My network has been unreliable. Many weeks of inconvenience didn&apos;t push me to solve it, but you can bet I did once my wife told me The Colbert Report wasn&apos;t streaming well. I turned to a script to help me....</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="colbert.jpg" src="http://blog.billbenac.com/blog/2014/01/24/colbert.jpg" class="mt-image-none" style="" align="right" height="270" width="360" /></span>My network has been unreliable. Many weeks of inconvenience didn't push me to solve it, but you can bet I did once my wife told me The Colbert Report wasn't streaming well. I turned to a script to help me. You may find it helpful too.<br /><br />If you launch this script on a machine, it will ping in batches of 200 and writes the results to a log file. You can then scan the results to know how your network performs over time.<br /><br /><i>@echo off<br /><br />@REM =============== CONFIG BEGIN ================<br /><br />@REM == set the size of the ping batches<br />set loopsize=200<br />@REM == set the destination for ping<br />set pingdest=www.google.com<br /><br />@REM =============== CONFIG END ================<br /><br />@REM == set up the log file directory<br />set logdir=%~dp0\ping.logs<br />if not exist %logdir% mkdir %logdir%<br />@REM == set the current log file<br />for /f "tokens=1-9 delims=/:. " %%d in ("%date% %time%") do set stamp=%%g-%%e-%%f_%%h-%%i-%%j<br />set log=%logdir%\pinglog_%stamp%.log<br /><br /><br />:loop<br />echo === starting %loopsize% pings on %date% at %time%<br />echo === starting %loopsize% pings on %date% at %time% &gt;&gt; %log%<br />netsh wlan show interfaces | grep SSID | grep -v BSSID<br />netsh wlan show interfaces | grep SSID | grep -v BSSID &gt;&gt; %log%<br />ping -n %loopsize% %pingdest%&nbsp; &gt;&gt; %log%<br />goto loop<br />@echo on<br /></i><br />In my case, I noticed that video streaming was glitchy, and VOIP telephone calls and video conferences would sometimes lose data. The script reported that batches of pings almost always had 2% losses and frequently as high as 5% losses. My network setup looked like this:<br /><br /><i>internet provider - modem - netgear wifi router - computers</i><br /><br />Was the problem my inexpensive Internet package? My used modem from ebay? My old router? I changed my system to be this:<br /><br /><i>internet provider - modem - dlink wifi router - netgear wifi router - computers</i><br /><br />Then I connected one machine to the dlink radio and another to the netgear radio. I watched network performance on each. The dlink radio performed great, but the netgear radio still had high ping loss. I had identified that the netgear wifi router was the problem.<br /><br />So I reverted a firmware upgrade that I had put in a couple months ago, connected again to the netgear radio, and now its ping losses are far less than one in a thousand. This script helped me diagnose and solve the problem -- so I don't have to buy a new router and reconfigure the house.<br /><br />By the way, I use this ugly command to extract just the lines I need to see: the name of the radio I'm connected to and the results per ping batch. This works because I've downloaded egrep and sed (among other unix-style utilities) and added them to my path:<br /><br /><i>egrep "SSID|loss" C:\ping.logs\pinglog_2014-01-24_9-46-32.log | sed s/".*("//g | sed s/").*"//g | sed s/".*\:"//g</i><br /><br />The result looks like this:<br /><br /><i>0% loss<br />&nbsp;netgear radio<br />0% loss<br />&nbsp;netgear radio<br />0% loss<br />&nbsp;netgear radio</i><br /><br /><br />











]]>
        
    </content>
</entry>

<entry>
    <title>Configure Eclipse TFS Plugin for SSL Repos</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2014/01/configure-eclipse-tfs-plugin-f.html" />
    <id>tag:blog.billbenac.com,2014:/blog//1.66</id>

    <published>2014-01-06T16:20:05Z</published>
    <updated>2014-01-07T15:13:03Z</updated>

    <summary>Java and Microsoft integrations? Edge cases aren&apos;t always fully documented.Today I tried setting up my Eclipse IDE with a Microsoft Team Foundation Server (TFS). The TFS plugin is here. My organization&apos;s TFS in on a host with SSL, and we...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="eclipse" label="Eclipse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Java and Microsoft integrations? Edge cases aren't always fully documented.<br /><br />Today I tried setting up my Eclipse IDE with a Microsoft Team Foundation Server (TFS). The TFS plugin is <a href="http://marketplace.eclipse.org/content/tfs-plug-eclipse#.Usd4Iim0Zf0">here</a>. My organization's TFS in on a host with SSL, and we use our own certificate authority for the certificate. When I tried to connect to TFS, I got this error:<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="SunCertPathBuilderException.jpg" src="http://blog.billbenac.com/blog/2014/01/06/SunCertPathBuilderException.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" height="179" width="540" /></span><font style="font-size: 0.512em;">sun.security.validator.validatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target</font><br /><br />With SSL, the client (in this case Eclipse) needs to know whether to trust the certificate on the server. Usually, servers use certificates from Verisign, Thawte, and the like. Java ships with a file that describes those commercial certificate authorities that can be trusted. But if you're using a certificate or a CA that isn't recognized, then Java and by extension Eclipse won't trust the certificate. But you can tell Java to trust the certificates or CAs you need. There are at least three ways to do this.<br /><br />First, I found an IBM webpage that described how to start Eclipse with an extra trust store. This worked, but it seems like unnecessary overhead to create a new trust store and to launch the application with extra arguments every time. The page is <a href="http://pic.dhe.ibm.com/infocenter/ramhelp/v7r2m0/index.jsp?topic=/com.ibm.ram.installguide.doc/topics/t_install_eclipse_https.html">here</a>. This creates a custom keystore:<br /><br /><i>C:\&gt;%JAVA_HOME%\bin\keytool.exe&nbsp; -import -alias tfsrepo.mydomain.com -file c:\temp\tfsrepo.mydomain.der -keystore mycustom.keystore -storepass password</i><br /><br />And this starts Eclipse using that keystore:<br /><br /><i>C:\eclipse\eclipse.exe -vmargs -Djavax.net.ssl.trustStore="</i><i>%JAVA_HOME%\bin\mycustom.keystore" -Djavax.net.ssl.trustStorePassword=password</i><br /><br />Second, I realized that it would be simpler to have the Java install behind Eclipse include my TFS server's certificate in its default trust store. So I downloaded the SSL certificate for my TFS server and added it to my cacerts file:<br /><br /><i>C:\&gt;%JAVA_HOME%\bin\keytool.exe&nbsp; -import -alias tfsrepo.mydomain.com -file c:\temp\tfsrepo.mydomain.der -keystore %JAVA_HOME%\lib\security\cacerts -storepass changeit</i><br /><br />Third, I realized that I ought to just import the certificate for my organization's top-level CA instead of using the TFS cert. The top-level CA's certificate lasts many years longer than the one on the TFS server, and if I trust the top-level CA then my Eclipse install will trust all other systems with certificates from our CA. So I first deleted the TFS certificate:<br /><br /><i>%JAVA_HOME%\bin\keytool.exe&nbsp; -delete -alias tfsrepo.mydomain.com&nbsp; -keystore %JAVA_HOME%\lib\security\cacerts -storepass changeit</i><br /><br />Then I imported the top-level CA's certificate:<br /><i><br />C:\&gt;%JAVA_HOME%\bin\keytool.exe&nbsp; -import -alias topCA.mydomain.com -file c:\temp\topCA.mydomain.der -keystore %JAVA_HOME%\lib\security\cacerts -storepass changeit</i><br /><br />And now I can launch Eclipse (c:\eclipse\eclipse.exe) and connect to my TFS system (File-&gt;Import-&gt;Team-&gt;Projects for Team Foundation Server-&gt;Servers-&gt;Add-&gt;tfsrepo.mydomain.com).<br /><br />To download a certificate, use your web browser to visit the URL of the system. Use the browser's feature to look at the certificate. <span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="cert-firefox.jpg" src="http://blog.billbenac.com/blog/2014/01/06/cert-firefox.jpg" class="mt-image-center" /></span>In Firefox, I click the lock icon in front of the URL, then click "More Information...," then click "View Certificate," then "Details." At this point, I have an Export button to save this certificate to a file, or I can use the certificate hierarchy to select the top-level certificate from the CA and save it.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="cert-viewer.jpg" src="http://blog.billbenac.com/blog/2014/01/06/cert-viewer.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span><br /><br />And if you want to see which certificates your Java system trusts, you can list what's in the cacerts file with this:<br /><br />%JAVA_HOME%\bin\keytool.exe&nbsp; -list -keystore %JAVA_HOME%\lib\security\cacerts -storepass changeit <div><br /></div><div><br /></div>]]>
        <![CDATA[<br />]]>
    </content>
</entry>

<entry>
    <title>WCI Recurring Jobs Don&apos;t Party in 2013</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2013/01/wci-recurring-jobs-dont-party.html" />
    <id>tag:blog.billbenac.com,2013:/blog//1.65</id>

    <published>2013-01-02T19:02:28Z</published>
    <updated>2013-01-02T20:58:28Z</updated>

    <summary>Happy New Year!Now that the holiday parties are over, we get to deal with the mess that comes so often in technology when calendars turn over. The mess I found myself facing this morning is due to a &quot;feature&quot; of...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="automation" label="automation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wci" label="WCI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="post-party-mess.jpg" src="http://blog.billbenac.com/blog/2013/01/02/post-party-mess.jpg" class="mt-image-none" style="" height="" hspace="10" width="500" align="right" /></span>Happy New Year!<br /><br /><p>Now that the holiday parties are over, we get to deal with the mess that comes so often in technology when calendars turn over. The mess I found myself facing this morning is due to a "feature" of WCI, so you may have it too.<br /><br />Recurring jobs are set to run on an interval that has an end date. The portal UI defaults to an end date of Jan 1, 2013. Any pre-existing job that was set to run periodically and to use the default end date is no longer scheduled to run. This includes many crawlers, syncs, maintenance jobs, and so forth. Any new job set to run on a recurring basis defaults to Jan 1 2013 which since it's in the past will cause the job to run once but never again.<br /><br />You can query the portal database to get a list of jobs that [1] ran as recently as December and [2] aren't scheduled to run again. This is the list of likely candidates that would need to be rescheduled. Also, the query gives URL suffixes to let you easily create links to open the job editors. In your case, you may want to put the full URL to your admin portal in there. In my case, I used this query for many systems with different prefixes, so I kept it generic. Here's the query I used:<br /><br />SELECT j.[OBJECTID],j.[NAME]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,u.NAME 'owner name'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,j.[CREATED],j.[LASTMODIFIED],j.[LASTMODIFIEDBY],[LASTRUNTIME],[NEXTRUNTIME]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,'server.pt?open=256&amp;objID=' + cast(j.objectid as varchar(9)) 'admin editor page suffix'<br />&nbsp; FROM [PTJOBS] j inner join PTUSERS u on j.OWNERID=u.OBJECTID<br />&nbsp; where NEXTRUNTIME is null and LASTRUNTIME &gt; '12/1/2012'<br />&nbsp; order by [owner name]<br /><br />Enjoy!</p><p><br /></p><hr size="1"><p><br /></p><p>Update: This is now <a href="https://support.oracle.com/epmos/faces/ui/km/BugDisplay.jspx?id=15947880">BUG:15947880</a> and <a href="https://support.oracle.com/epmos/faces/DocumentDisplay?id=1516806.1">KB Article:1516806.1</a>.<br /></p><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Another Social Media Disappointment: Twitter Gamed</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2011/05/another-social-media-disappoin.html" />
    <id>tag:blog.billbenac.com,2011:/blog//1.64</id>

    <published>2011-05-12T05:14:08Z</published>
    <updated>2011-05-12T07:35:41Z</updated>

    <summary>Marketers goes where the eyeballs are. We look at &quot;social&quot; media, so how can we be surprised by the invasion? But I&apos;m still disappointed when I encounter blatant gaming of the channels that supposedly are trusted sources of information from...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    <category term="socialmedia" label="Social Media" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twitter" label="Twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Marketers goes where the eyeballs are. We look at "social" media, so how can we be surprised by the invasion? But I'm still disappointed when I encounter blatant gaming of the channels that supposedly are trusted sources of information from "people" like us.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="L7sWA[1].jpg" src="http://blog.billbenac.com/blog/2011/05/11/L7sWA%5B1%5D.jpg" class="mt-image-none" style="" align="left" height="300" hspace="10" /></span>Let me introduce you to Anne Waterhouse. She lives in New York, and judging by her photo, she's a lovely mix of saucy and innocent (who isn't drawn by that?), and she is of modest means (just like the rest of us!). <a href="http://twitter.com/#%21/annewaterhouse">She tweets as @annewaterhouse </a>about things that interest her nearly 2000 followers. It's good content. Funny posts from Failblog, smart content from Alltop, tech goodness from Mashable, and helpful tips from Lifehacker.<br /><br />The problem is she isn't real. <br /><br />I met Anne because yesterday she tweeted about a short video that my cycling buddy made. She picked it up from thought-leader Guy Kawasaki's blog. "How to make better presentations in 2:53 <a href="http://bit.ly/m8B3b5" target="_blank" rel="nofollow" class="twitter-timeline-link">http://bit.ly/m8B3b5</a>" she said.<br /><br />Cool! Kawasaki likes Marc's video, and someone shared it on Twitter. When I looked at her Twitter page, I was surprised by the pace at which she posted. How could she consume so much web content? Who was she? Her profile revealed little. I scanned the timestamps, and I realized she had posted in each of the preceding 24 hours. Ah, she's superhuman and doesn't need sleep? <br /><br />The constantly changing Twitter API now allows you to access the latest 200 tweets from a person using URLs like this: <a href="https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=annewaterhouse&amp;count=200">https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=annewaterhouse&amp;count=200</a>. I grabbed her tweets and extracted the timestamps using this: <br /><br />grep -i pubdate tweets.xml | sed s/".*&lt;pubDate&gt;"//g | sed s/"&lt;\/pubDate&gt;"//g &gt; timestamps.xml<br /><br />I then brought those into Excel and made histograms by day, then combined them to show all three days overlapping. This amazing woman tweeted 200 times in the past 37 hours. Check it out (<span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/2011/05/11/annewaterhouse.tweet.analysis.xlsx">or download spreadsheet</a></span>):<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="annewaterhouse.tweets.jpg" src="http://blog.billbenac.com/blog/2011/05/11/annewaterhouse.tweets.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" width="575" height="283" /></span><br /> <div>Okay, fine, she has some automated tool that retweets the RSS feeds from her favorite sites. Some of her <a href="http://twitter.com/#%21/annewaterhouse/status/68563423595732992">tweets like this one </a>are generated by TwitterFeed.com. That doesn't mean she's not real. Is a real person behind these? Maybe she talks with her friends too? Well, no. In these 200 tweets, I used grep -v to filter out messages that didn't include a link as would come from the RSS feeds, and there was nothing left. I filtered for "@" mentions of other users and found none.<br /><br />Who set this up? Is this the creation of one of the websites that she links back to? Are they trying to drive their own traffic? The idea is clearly a good one, based on the thousands of people following these garbage tweets. Is there a marketer/exploiter out there who discreetly sells this to websites? "Give me $500 for your own @annewaterhouse. I guarantee she'll share interesting content and garner a following, and this will drive traffic to your site." Does that exploiter use the metrics available from URL shortener sites that generate the links to then charge its customers advertising? "Give me two cents per click into your site." Do they go to the trouble of using so many URL shortener services to make it look less automated?<br /><br />And to think my friend and I were pleased that she shared a link to his video. Well, I guarantee Guy Kawasaki is real, and he's the one whose opinion matters. Now let's stop thinking about social media and learn how to give better presentations when we're dealing with real people:<br /><br /></div><div><br />
<iframe src="http://www.youtube.com/embed/i68a6M5FFBc" allowfullscreen="" width="560" frameborder="0" height="349"></iframe></div>]]>
        
    </content>
</entry>

<entry>
    <title>How To: Bulk download from Sharepoint</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2011/05/how-to-bulk-download-from-shar.html" />
    <id>tag:blog.billbenac.com,2011:/blog//1.63</id>

    <published>2011-05-11T04:43:35Z</published>
    <updated>2011-05-11T05:45:09Z</updated>

    <summary>This post goes in the &quot;Why wasn&apos;t I able to Google that?&quot; category. Remember this old comic?It turns out things that seem like they should be easily Googleable aren&apos;t. Maybe this post will be helpful to someone else out there.I&apos;ve...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    <category term="dns323" label="DNS 323" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sharepoint" label="Sharepoint" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[This post goes in the "Why wasn't I able to Google that?" category. Remember this old comic?<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="100322_cartoon_6_a14837_p4651[1].gif" src="http://blog.billbenac.com/blog/2011/05/10/100322_cartoon_6_a14837_p4651%5B1%5D.gif" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" height="508" width="465" /></span><br />It turns out things that seem like they should be easily Googleable aren't. Maybe this post will be helpful to someone else out there.<br /><br />I've been helping a small business migrate off Sharepoint and onto a local NAS device (Dlink DNS-323). They have about 4000 documents in 300 folders on Sharepoint hosted by Microsoft Online. How to do a bulk download? The Sharepoint UI (that they hated so much that they asked me if I could migrate them off it) gives no clues. I did searches for these without turning up anything good:<br /><br />sharepoint "bulk download" "microsoft online"<br />bulk download sharepoint.microsoftonline.com<br />sharepoint server 2007 bulk download<br /><br />Many people offer bulk upload tools, but what about bulk download? Certainly people want to change technologies now and again. I saw one discussion thread that vaguely mentioned WebDAV, but I found nothing about it in the online help, and I found very little for this Google search:<br /><br />&nbsp;"microsoft online services" webdav sharepoint<br /><br />Finally I just gave it my best shot. If it does support WebDAV, which the web hasn't confirmed for me, then how would I go about it?<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="network-places_smallco.jpg" src="http://blog.billbenac.com/blog/2011/05/10/network-places_smallco.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="289" width="248" /></span>My laptop runs XP (still my favorite environment), so I used these steps:<br /><br /><ol><li>My Network Places </li><li>Add Network Place </li><li>Next </li><li>Choose another network location </li><li>Enter URL to Sharepoint site: https://smallcomicrosoftonlinecom-2.sharepoint.microsoftonline.com/Shared%20Documents/</li><li>Give same credentials used to log into Sharepoint</li></ol><br />The laptop of the person for whom I was doing this migration runs Vista, so the process is a little different there. I connected them using notes from <a href="http://www.vistax64.com/vista-general/31370-what-has-happened-network-place.html">a forum</a>:<br /><br /><ol><li>Hit start menu and go to "Network"</li><li>Hit Alt-button to get the tools-menu.</li><li>Go to Tools -&gt; Map Network Drive</li><li>
Click on the link on the bottom that says "Connect to a website that you can use to store your documents and pictures"</li><li>
Hit Next</li><li>
Choose "Choose a custom network location" and hit Next.</li><li>
Enter your url location...</li></ol><br />Well, the instructions from here weren't a perfect fit, but on Vista, basically, enter the URL to Sharepoint, then the credentials, then maybe select the drive this will map to.<br /><br />After connecting by WebDAV, I was able to access the entire Sharepoint site as a folder in Windows Explorer, and I could then open that folder and copy its entire contents to a local disk drive. I brought it to the laptop first, then I copied it onto the NAS drive. <br /><br />At this point, the folks I'm helping out were able to disable Sharepoint logins for everyone but the administrator. They'll let their Sharepoint subscription lapse at the end of the month, which they're very happy about.<br /><div><br />By the way, the DNS-323 that I wrote about and to which I gave a glowing review? It has extraordinarily frustrating user and group management through the web interface. Users can only belong to a single group. So if you want to have a group for managers who would access the /managers share, then a group for accounting who would access the /accounting share? You can't do it with the standard UI. As soon as you add the manager Adam to the accounting group, he is taken out of the manager group. I wound up having to telnet into the server to edit the undocumented, non-standard config file (/mnt/HD_a4/.systemfile/.smb.ses). I don't recommend this NAS for use outside the home.<br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Install just PTSpy on desktop for reading logs</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2011/05/install-just-ptspy-on-desktop.html" />
    <id>tag:blog.billbenac.com,2011:/blog//1.62</id>

    <published>2011-05-04T16:25:54Z</published>
    <updated>2011-05-04T16:59:16Z</updated>

    <summary>Do you work with people who need to analyze PTspy logs on their desktop but who don&apos;t have the Spy reader available to get those logs into an easy-to-read format?Back in the day, BEA put out an installer called LoggingUtilities_PTspy...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
    <category term="wci" label="wci" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="spy-display.jpg" src="http://blog.billbenac.com/blog/2011/05/04/spy-display.jpg" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" width="350" /></span>Do you work with people who need to analyze PTspy logs on their desktop but who don't have the Spy reader available to get those logs into an easy-to-read format?<br /><br />Back in the day, BEA put out an installer called LoggingUtilities_PTspy with the executable file&nbsp; ALILoggingUtilities_v1-1_MP1.exe. If you still can find that installer, you can use it to install the Spy reader. The format of .spy logs hasn't changed, so that old reader works for the latest and greatest (or worst) logs.<br /><br />But that installer was only for 32-bit machines. If you're working with Windows 7, then you need another approach. My recommendation is that you use the regular (and unfortunately huge) component installer, install something that includes the Spy reader, then delete the components you didn't want. The steps I used to do so follow.<br /><br />Run the WebCenterInteraction_10.3.3.0.0.exe installer. At the prompts, enter the following:<br /><br />--<br /><br />Installation folder: (your choice. i'm choosing c:\apps\plumtree).<br /><br />Choose components: Check ONLY Automation Service.<br /><br />If you get a Dependency Warning about Microsoft Visual C++, then "Yes, launch the installer."<br /><br />Configuration Manager - Port and Password: Accept the default port of 12345 and leave the password blank.<br /><br />Password inconsistency: Click "Continue" to keep the blank password.<br /><br />Pre-Installation Summary: Click install.<br /><br />Launch Configuration Manager: Just click next.<br /><br />Application Settings Confirmation: Select "No, configure later," then click next.<br /><br />Install Complete: Select "No, I will restart my system myself," then click done. <br /><br />--<br /><br />PTSpy is now available on your machine. You don't need to reboot.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="run-cmd-as-admin.jpg" src="http://blog.billbenac.com/blog/2011/05/04/run-cmd-as-admin.jpg" class="mt-image-left" style="float: left; margin: 0pt 20px 20px 0pt;" width="175" /></span>However, your computer also has three services installed that you probably don't want. To remove them, you need to run commands in a command prompt that runs with elevated administrator privileges. To get that command prompt, click the start button and type "cmd" into the search box. You'll see cmd.exe is one of the search results. <br />Right click on it, then select "run as administrator." <br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="cmd-paste.jpg" src="http://blog.billbenac.com/blog/2011/05/04/cmd-paste.jpg" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" width="200" /></span>Now in that prompt, paste in the following commands (to paste, right-click the title bar, click edit, click paste). You can paste these all in at the same time:<br /><br /><i>@rem -- make sure all services are stopped<br />sc stop "oracle wci logger"<br />sc stop ConfigurationManager12345<br />sc stop ptautomationserver<br /><br />@rem -- now delete them <br />sc delete "oracle wci logger"<br />sc delete ConfigurationManager12345<br />sc delete ptautomationserver</i><br /><br />That should do it. You should see output like this:<br /><br />C:\Windows\system32&gt;sc delete "oracle wci logger"<br />[SC] DeleteService SUCCESS<br /><br />C:\Windows\system32&gt;sc delete ConfigurationManager12345<br />[SC] DeleteService SUCCESS<br /><br />C:\Windows\system32&gt;sc delete ptautomationserver<br />[SC] DeleteService SUCCESS<br /><br />The install put just over 800mb of files on your machine, but most of those are not related to ptspy. You can delete about 600mb of these by deleting unnecessary files and folders.<br /><br />Open the folder C:\apps\plumtree\common and delete these:<br /><br />container<br />icu<br />inxight<br />outsidein<br />pthreads<br />wrapper<br /><br />Then open the folder C:\apps\plumtree and delete these:<br /><br />configmgr<br />descriptors<br />jre142<br />jre160<br />ptportal<br />uninstall<br /><br />Now on to analyzing spy files!<br /><br />What Oracle engineering should do though is put an option in the WCI installer for just the Spy logging toolkit (it won't be in WCI 10.3.3). Maybe some day...<br /><br />Enjoy!<br /><br /> <div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Resigning like me? How to wipe your corporate laptop.</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2011/03/resigning-like-me-how-to-wipe.html" />
    <id>tag:blog.billbenac.com,2011:/blog//1.61</id>

    <published>2011-03-25T03:10:36Z</published>
    <updated>2011-03-25T18:24:29Z</updated>

    <summary>Universe: I am resigning from Oracle. I know the universe of interested parties shrinks every year as the sales of the WCI portal (née Plumtree) decline, Oracle promotes a different product, and old customers move on to new platforms. But!...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Off Topic Tech" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="boeing" label="boeing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="datawipe" label="data wipe" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="resigned" label="resigned" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="ptdell.jpg" src="http://blog.billbenac.com/blog/2011/03/24/ptdell.jpg" class="mt-image-left" style="float: right; margin: 0 20px 20px 0;" height="296" width="300" /></span>Universe: I am resigning from Oracle. <br /><br />I know the universe of interested parties shrinks every year as the sales of the WCI portal (née Plumtree) decline, Oracle promotes a different product, and old customers move on to new platforms. But! Some of you are still out there reading, and so thanks!<br /><br />Fortunately for you all, I'm not going far. I'll continue working with the WCI portal for a long-time customer, Boeing, for whom I've consulted off and on, but mostly on, since 2004. So the blog entries will continue to sporadically pop into your RSS feeds.<br /><br />I have three company laptops that I need to return. The newest one Oracle issued to me several months ago, and I'm sure it will be redeployed to another employee. The older ones, however, will likely be "decommissioned." Occasionally I read stories about crooks who buy old hard drives to recover their data and then engage in all sorts of nefarious crimes. I don't want my data open to that risk. Since I don't know exactly what Oracle's decommissioning process is, and since any company's processes may not be perfectly followed, I decided to take extra care to destroy the personal, customer, and corporate data 
that had been on the hard drives.<br /><br />So here's what I'm doing tonight, and you probably should do something similar when you let go of your old laptops, whether you're disposing of an old personal machine or resigning from the job that had run its course:<br /><br /><ol><li><img alt="buddha-baby.jpg" src="http://blog.billbenac.com/blog/2011/03/24/buddha-baby.jpg" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" height="450" width="300" />Copy any needed data off the old laptop (e.g. this photo from when kiddo was a newborn)</li><li>Create a "live cd" or a bootable disk with a *nix operating system on it. I used Ubuntu (<a href="http://www.ubuntu.com/desktop/get-ubuntu/download">get it</a>).</li><li>Boot your old laptop from the CD. On my Dell laptop, I used F12 to get a one-time boot menu to select that I wanted to boot from CD rather than from the hard drive.</li><li>Identify the partition name for your disk. I did this by going to System -&gt; Administration -&gt; GParted Partition Editor.<br /></li><li>Open a console.</li><li>Type a command like this one at the prompt, where /dev/sda2 is my laptop partition to wipe:<br /><br /><i>sudo shred -vfz -n 1 /dev/sda2</i><br /><br /></li><li>Wait while the machine overwrites your entire disk first with random data, then with zeros.</li></ol><br />That's it. There's not much left to find on the drive. This is a much better approach than just reformatting the drive, because reformatting merely clears the address tables for the disk but still leaves the data intact and retrievable by Dr. Evil who makes his business doing such things. Of course, you could be more fastidious than I was. <a href="http://techthrob.com/2009/03/02/howto-delete-files-permanently-and-securely-in-linux/">Another blog</a> gives a more detailed review of the technical issue and even more thorough ways to knock it out.<br /><br />After erasing the data, I went the extra mile to installed Ubuntu. This way anyone who turns on the computer will be able to log in and see that nothing is readily available, and they'll also find it to be a generally useful machine.<br /><br />Enjoy.<br /><br />PS: Yes, I'm extraordinarily happy to move on from Oracle! <br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Detailed Diagram of ALUI Publisher 6.5 Components</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/12/detailed-diagram-of-alui-publi.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.60</id>

    <published>2010-12-20T15:22:42Z</published>
    <updated>2010-12-20T15:32:10Z</updated>

    <summary>Publisher is an old product, but it still has legs in some organizations. I recently helped a customer set up Publisher to load balance the portion of the app used by browsing users, the readers, of published content. The discussions...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="alui" label="ALUI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="publisher" label="Publisher" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wci" label="WCI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Publisher is an old product, but it still has legs in some organizations. I recently helped a customer set up Publisher to load balance the portion of the app used by browsing users, the readers, of published content. The discussions about how to set this up were difficult until I diagrammed the components clearly.<br /><br />If you ever need to work with Publisher, an especially if you want to increase reliability of the reader component, then I hope this diagram will be helpful to you.<br /><br />Enjoy!<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://blog.billbenac.com/blog/2010/12/20/publisher-drawing.jpg"><img alt="publisher-drawing.jpg" src="http://blog.billbenac.com/blog/2010/12/20/publisher-drawing.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0pt auto 20px;" width="700" /></a></span><br />]]>
        
    </content>
</entry>

<entry>
    <title>F5 Terminology Cheat Sheet</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/11/f5-terminology-cheat-sheet.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.59</id>

    <published>2010-11-17T17:01:15Z</published>
    <updated>2014-06-25T22:39:57Z</updated>

    <summary>Technology is a land of overlapping and confusing terminology. I&apos;ve been involved in plenty of confusing conversations about F5 products as they relate to WCI portal deployments, and I&apos;ve worked to develop a more precise use of terms. To help...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="f5" label="f5" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="corporate acronyms.jpg" src="http://blog.billbenac.com/blog/2010/11/17/corporate%20acronyms.jpg" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="332" width="258" /></span>Technology is a land of overlapping and confusing terminology. I've been involved in plenty of confusing conversations about F5 products as they relate to WCI portal deployments, and I've worked to develop a more precise use of terms. To help a colleague sort out the mishmash, I made this list of objects we commonly discuss. Maybe you'll find it useful too?<br /><br />In addition to understanding the terms, I think it's helpful to recognize areas of overlap and be careful to avoid confusion. For example, since the VMWare team thinks "virtual servers" run an operating system and the F5 team thinks "virtual servers" represent pathways through their network, I like to say "F5 virtual server" or "VMWare virtual server." <br /><br /><b>Objects</b><br />Global Traffic Manager -- GTM (routes requests to the appropriate LTM)<br />- Wide IPs represent services. An URL is associated with the Wide IP so that users can route through here. Wide IPs can have iRules.<br />- Pools are configured under Wide IPs.<br />- Members are assigned within the pools. We create a region1 and a region2 member. These members point to the IP addresses and ports of LTM virtual servers. Normally (but not always) they are given names that match the LTM virtual servers.<br /><br />Local Traffic Manager -- LTM (routes requests to the appropriate application servers)<br />- Virtual servers represent services. They have IP addresses and they listen on a port. They can have iRules. When multiple host names are required for the same service, those host names can all alias to the IP of the virtual server (e.g. http://portlets and http://portlets2).<br />- Pools are configured under virtual servers. One pool can be used by multiple virtual servers, as we do in an environment with the imageserver pool, since we need both HTTP and SSL access to those resources. The customer usually assigns monitors to these, and the monitor applies to every member in the pool.<br />- Members are assigned within the pools. They are represented by the IP address of the server hosting the service and the port of that service, though the port doesn't have to be the same one used by the virtual server. Customers doesn't usually assign monitors to these, though it could be done.<br />- Nodes we don't talk about much. These are the IP addresses of the servers that are later combined with ports to be members.<br /><br /><b>Examples:</b><br />GTM:<br />- Wide IP: app-portlet.lb.cs.customer.com<br />- URL: http://portlet.customer.com<br />- Pool of Wide IP: app-portlet<br />- Members of Pool: 209.45.18.146 port 80, 209.40.40.147 port 80. Member names are app-portlet-reg2-80 and app-portlet-reg3-80<br /><br />LTM:<br />- Virtual Server: Name app-portlet-reg3-80 with IP address 209.40.40.147 and port 80<br />- http://portlet-primary.customer.com<br />- Pool of Virtual Server: app-portlet-reg3-80 with monitor<br />- Members of Pool: 209.45.42.36:80 and 209.45.42.35:80<br />- Nodes of Members: 209.45.42.36 and 209.45.42.35 <br /><br />Here is a picture of the LTM's network map view. This shows the virtual servers, their pools, and the members of the pools:<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="ltm.jpg" src="http://blog.billbenac.com/blog/2014/06/25/ltm.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" height="" width="500" /></span><br /><br /><b>Training</b><br />Want to understand F5's LTM in depth, everything from the objects above to session awareness, monitor configuration, iRules, and so forth?&nbsp; Then I recommend you take "BIG-IP Local Traffic Manager (LTM) Essentials," the free, self-paced, 14 hour training course at <a href="https://university.f5.com/">https://university.f5.com/</a>. You can follow training modules, then log into a cloud-based LTM to do configuration exercises. Even if you're not the person managing the device for your customer, you'll be able to ask for the right things by knowing so much. And you might even know about features your F5 team isn't aware of, and you'll then be able to push them to a new level of ROI from this product.<br /><br />Enjoy.<br /> <div><br /></div>

]]>
        
    </content>
</entry>

<entry>
    <title>Dealing with frenemies and port conflicts</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/09/dealing-with-frenemies-and-por.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.58</id>

    <published>2010-09-27T20:13:43Z</published>
    <updated>2010-09-27T21:15:11Z</updated>

    <summary>Subtitle: How to identify which process is running on a portHi Folks:I just found a surprise about a friend of mine. First I&apos;ll introduce: Gizmo5. First some background on how I met Gizmo5.Do you know about Google Voice&apos;s offering? Google...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="automation" label="automation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ports" label="ports" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Subtitle: How to identify which process is running on a port<br /><br />Hi Folks:<br /><br />I just found a surprise about a friend of mine. First I'll introduce: Gizmo5. First some background on how I met Gizmo5.<br /><br />Do you know about Google Voice's offering? Google gives you a free phone number, then among other things, it lets you forward that number elsewhere. Where to forward it? One thing I wanted to do after moving to a new city (Helloooooo Austin!) was get a landline since my wife didn't get great cell reception at our new place. "A landline it is," I said, but continued to her mild displeasure, "but I want to try getting this set up without using AT&amp;T." I searched for a good voice-over-IP phone service. I wanted something like Vonage, but I didn't want fees.<br /><br />Gizmo5 is one of many free VOIP services, or SIP providers. Another I use is sipgate. Oh yeah, and there's Skype, but Skype charges a monthly fee for a phone number right? Something like that. Money was involved, so I didn't go there. Plus, I wanted to have more of a DIY solution. So the idea of these VOIP providers is they give a phone number that rings to an Internet-connected client. The easiest client is the laptop-based softphone that every SIP provider has. Here's the one from Gizmo:<br /><br /><form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><img alt="gizmo5.jpg" src="http://blog.billbenac.com/blog/2010/09/27/gizmo5.jpg" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="450" width="418" /></form><br /> But the Internet-connected client becomes much more interesting when the client is a simple, old-fashioned, landline style phone. This is what Vonage does.<br /><br />So I bought an analog telephone adapter (ATA) from <a href="http://www.grandstream.com/products/ata.html">Grandstream</a> for $45, and after a bit of configuration, I was able to plug my old landline phone into the ATA, then plug the ATA into my router, then have the ATA register itself with Gizmo5's servers to say, "when a call comes in to Bill's Gizmo5 account, let me know because I'm his phone." Then I had Google Voice forward my Google Voice number to that Gizmo5 number, and I'm in business. How cool is this? So cool that Google bought Gizmo5 and ended new registrations while they work on their integration plan. Don't worry though. You can set this up with a <a href="http://www.sipgate.com/">sipgate</a> account too.<br /><br />Anyway, I still have that Gizmo5 softclient running on my laptop from time to time. And today I fired up my WCI Automation service, and I messages like these in my PTSpy:<br /><br /><i>Automation Server cannot be initialized.<br />com.plumtree.openfoundation.util.XPException: Address already in use: JVM_Bind<br /><br />InitForScheduler(): Unable to start communicator on port 7777<br />java.net.BindException: Address already in use: JVM_Bind</i><br /><br />Hey, what's that about? I ran this command to see what was running on port 7777:<br /><br /><i>Netstat -a -n -o | GREP 7777</i><br /><br />And the report came back:<br /><br /><i>TCP&nbsp;&nbsp;&nbsp; 0.0.0.0:7777&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTENING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3184</i><br /><br />So what is running behind process 3184? I checked my task manager and found it's my friend Gizmo5 now acting as my enemy:<br /><br /><form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><img alt="proc-is-gizmo5jpg.jpg" src="http://blog.billbenac.com/blog/2010/09/27/proc-is-gizmo5jpg.jpg" class="mt-image-none" style="" height="447" width="516" /></form><br /><br />Since I don't know how to change the port of Gizmo5, I hop into my serverconfig.xml and change the automation server's port, restart, and I'm back in business with a fully functioning WCI system. Gizmo5 is no longer an enemy but a friend.<br /><br />PS: The business model behind free SIP providers is they charge for outgoing telephone calls. Gizmo5 is a penny per minute. Sipgate is two cents per minute. But incoming calls are free, so? Initiate those long calls from Google Voice. Google will ring your SIP provider as an incoming call, then Google rings the party you wish to speak with, and it's free.<br /><br /><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Why Place a Proxy in Front of the Portal?</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/06/why-place-a-proxy-in-front-of.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.57</id>

    <published>2010-06-24T15:42:21Z</published>
    <updated>2010-06-24T16:10:34Z</updated>

    <summary>Someone asked this question today:What does a web proxy server placed in front of the Portal give you, in terms of security (or anything else), when there is already an SSL Accelerator (F5 BigIP) managing the portal? The end user...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="wci" label="wci" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[Someone asked this question today:<br /><br /><pre wrap=""><i>What does a web proxy server placed in front of the Portal give you, in terms of security (or anything else), when there is already an SSL Accelerator (F5 BigIP) managing the portal? The end user would still access the Portal on port 80.  Either way.  What does the extra server buy you?</i><br /><br />In hopes a larger audience might find my answer useful, here you go. First though, I'll try the "picture is worth a thousand words" approach, using a slide from a presentation I did a couple years ago:<br /></pre><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="proxymity.jpg" src="http://blog.billbenac.com/blog/2010/06/24/proxymity.jpg" class="mt-image-none" style="" height="541" width="700" /></span><br /><br />Now my take:<br /><br />Consider this case: You have users on the public internet, and you don't 
want any of your app servers to be in the DMZ. So you put a proxy in the 
DMZ, and it can reach back through the firewall to the internal Big IP 
that can route traffic to the many app servers.
<br />
<br />Why not put the Big IP itself in the DMZ and have it route from there? 
One reason is that it handles traffic for many more ports than you want 
open on the firewall (e.g. for search, directory, dr). But more 
importantly, Big IP needs to be able to monitor the members of its 
pools. So there's lots of chatter between it and the servers.
<br />
<br />So there you've got the security angle.
<br />
<br />Also, proxies sometimes offer additional features such as 
authentication. You may only have internal users, want your users to 
authenticate at your company proxy.
<br />
<br />There's also improved performance when you can keep the portal in the 
same VLAN as the remote servers it uses to build pages. A single portal 
page load can generate dozens of DB queries and http requests to the 
remote tier. A proxy lets you keep users in the DMZ while keeping the 
portal near those resources.
<br /> <div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>WCI Settings Files: rules for construction</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/02/wci-settings-files-requirement.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.56</id>

    <published>2010-02-27T21:15:55Z</published>
    <updated>2010-02-27T21:25:45Z</updated>

    <summary>The world is full of rules. I was amused at a local Austin grocery store to find rules against something that seem pretty obvious: food trays are not sleds. Other rules though can be harder to figure out. In case...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="config" label="config" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="settings" label="settings" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wci" label="WCI" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="rules.jpg" src="http://blog.billbenac.com/blog/2010/02/27/rules.jpg" class="mt-image-right" style="float: right; margin: 0pt 0pt 20px 20px;" height="387" width="250" /></span>The world is full of rules. I was amused at a local Austin grocery store to find rules against something that seem pretty obvious: food trays are not sleds. Other rules though can be harder to figure out. In case you need to know some of these less obvious rules:<br /><br />I'm working on an effort to restructure WCI settings files, and a piece of this required understanding the rules for putting together a valid settings file. I hope to later explain the whole project, but until then, here's a subset of what I learned.<br /><br /><b>The Loose</b><br />WCI applications read in everything in the %WCI_HOME%\settings directory on startup. A default system would have these in c:\oracle\wci or some such location. That everything is read means WCI neither cares what your file names are nor what subfolders they may be in. For example, you can move .\settings\configuration.xml to .\settings\do-not-use\disabled.xml, and it will still work just fine. The system treats all information across all files as a single settings definition.<br /><br />You can also break apart the out-of-the-box XML files into new smaller files, or you can rearrange their content entirely. This explains how it is that systems run WCI 10.3.0.0 equally well for fresh installs versus upgraded installs even though each has differently structured XML files (for example, fresh installs store settings in configuration.xml that upgraded installs keep only in portal\portalconfig.xml and common\serverconfig.xml).<br /><br />You can add settings in the XML files that are not required and not used by the system. For example, you can have a context or a component defined but never used.<br /><br /><b>The Strict</b><br />Within the config files, however, you'll find tightly linked context, component, and client sections. Some rules are:<br /><ol><li>A context cannot be defined more than once.</li><li>A component name cannot be used more than once.</li><li>A component cannot have a subscribed client that is not a defined context.</li><li>A client cannot subscribe to two different contexts of the same component type.</li></ol><b>An Example</b><br />Now is a great time for an example. The following file sits on my system as %WCI_HOME%\settings\example.xml. When the system starts, this file is read into the settings definition, though nothing in it will be used by my applications. The system runs just fine, and it will continue to do so unless I uncomment any of the sections of the config file that are designed to break the four strict rules I previously listed.<br /><br /><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.billbenac.com/blog/2010/02/27/example.zip">Download the file</a></span> so you can load it in a readable XML parser, load it on your system, or tweak it. You can also try reading it in less readable format below.<br /><br />Enjoy!<br /><br />
<code>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;OpenConfig xmlns="http://www.plumtree.com/xmlschemas/config/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;context name="example-context"/&gt;<br />
	&lt;!-- ERROR 1: uncomment the below client to create "context with this name already exists" error --&gt;<br />
	&lt;!--	<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;context name="example-context"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- include the below context to illustrate that listed contexts need not be used --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;context name="example-context-unused"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;component name="example-component" type="http://www.plumtree.com/config/component/types/example-type"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setting name="sometype:something"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value xsi:type="xsd:boolean"&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setting&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;client name="example-context"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- ERROR 2: uncomment the below client to create "context could not be opened" error --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;client name="undeclared-context-breaks-system"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- include the below component to illustrate that components need not have clients --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;component name="example-component-no-clients" type="http://www.plumtree.com/config/component/types/example-type"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setting name="sometype:something"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value xsi:type="xsd:boolean"&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setting&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- ERROR 3: uncomment the below component to create "component with this name already exists" error --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;component name="example-component-no-clients" type="http://www.plumtree.com/config/component/types/example-type2"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setting name="sometype:something"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value xsi:type="xsd:boolean"&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setting&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- ERROR 4: uncomment the below component to create "context already subscribes to component of type" error --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;component name="example-component-duplicate-type" type="http://www.plumtree.com/config/component/types/example-type"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;setting name="sometype:something"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value xsi:type="xsd:boolean"&gt;true&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/setting&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;client name="example-context"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/clients&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/component&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;--&gt;<br />
&lt;/OpenConfig&gt;<br />

</code>
<br /><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>ALUI/WCI SSO Login Sequence and Log Files</title>
    <link rel="alternate" type="text/html" href="http://blog.billbenac.com/blog/2010/01/aluiwci-sso-login-sequence-and.html" />
    <id>tag:blog.billbenac.com,2010:/blog//1.55</id>

    <published>2010-01-20T19:27:53Z</published>
    <updated>2010-01-20T20:02:47Z</updated>

    <summary>You can&apos;t trust your web server logs to tell you how many pages your portal users view. When logging in, especially under SSO, the login sequence generates several &quot;GET /portal/server.pt &quot; lines. I dug into this today, and the results...</summary>
    <author>
        <name>bill</name>
        
    </author>
    
        <category term="BEA/Oracle" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="alui" label="alui" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wci" label="wci" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://blog.billbenac.com/blog/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="sequence.gif" src="http://blog.billbenac.com/blog/2010/01/20/sequence.gif" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="191" width="327" /></span>You can't trust your web server logs to tell you how many pages your portal users view. When logging in, especially under SSO, the login sequence generates several "<i>GET /portal/server.pt </i>" lines. I dug into this today, and the results may be helpful as you look to infer portal usage from log files.<br /><br />Yesterday I turned to IIS logs to determine some usage patterns in the portals I work with where users can enter through two different SSO systems. I started my search by looking at how many times SSOLogin.aspx occurred for each SSO system (hosted on different servers). When the results appeared material, today I wondered whether the load for the systems are different. Do the users of one SSO system have a more engaged portal session?<br /><br />First I counted simply "<i>GET /portal/server.pt</i>" in the log files, and I though one set of users had far more pages per session than did the other. However, I then realized that gateway images were returned by my search pattern, so I added a space: "<i>GET /portal/server.pt </i>" This made the traffic look much more similar.<br /><br />But I still didn't know how many actual pages the user sees. What happens in the login sequence?<br /><br />What I found was:<br /><br />* It is hard to identify actual pages per visit because the IIS log sometimes shows 3 and sometimes 4 requests per login.<br />* A user's login generates three lines in the IIS log with "GET /&lt;virtualdirectory&gt;/server.pt/ "&nbsp; when the user enters the portal through http(s)://&lt;portalhost&gt;/<br />* A user's login generates four lines in the IIS log with "GET /&lt;virtualdirectory&gt;/server.pt/ "&nbsp; when the user enters the portal through http(s)://&lt;portalhost&gt;/&lt;virtualdirectory&gt;/server.pt<br /><br />The login sequence as found in IIS logs looks similar to this:
<br />
<br />1. The unidentified user enters without specifying the 
&lt;virtualdirectory&gt;/server.pt, then redirects to the SSO login <br /><i>/&nbsp; 

</i><br /><br />2. The SSO-authenticated user is redirected to the portal from the WSSO 
login
<br /><i>/portal/server.pt&nbsp; 

</i><br /><br />3. The SSO-authenticated user is directed to the portal's SSOLogin 
sequence to process the SSO token and become portal-authenticated
<br /><i>/portal/sso/SSOLogin.aspx</i>&nbsp; 

<br /><br />4. The portal-authenticated user runs a login sequence to determine the 
proper home page behavior
<br /><i>/portal/server.pt open=space&amp;name=Login&amp;dljr=&nbsp; 

</i><br /><br />5. The user lands on the proper home page
<br /><i>/portal/server.pt/community/superstuff/204&nbsp; 

</i><br /><br />I hope that's helpful.<br />]]>
        
    </content>
</entry>

</feed>
