<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10437474</id><updated>2012-02-06T06:22:47.926-05:00</updated><category term='practice'/><category term='technology'/><category term='travel'/><category term='caves'/><category term='oam'/><category term='java'/><category term='oim'/><category term='web'/><category term='spring'/><category term='reference'/><category term='security'/><category term='11g'/><category term='tasmania'/><category term='nz'/><category term='making'/><category term='toronto'/><category term='language'/><category term='art'/><category term='life'/><title type='text'>sharon "syber" beynon:  enterprise java, security, IDM developer</title><subtitle type='html'>syber:- uber geek chic .. clogging the tubes with personal prattle, random music likes, technical segues, and rants since '05.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.sbeynon.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default?start-index=101&amp;max-results=100'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>147</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10437474.post-6765343651468393877</id><published>2012-01-15T14:17:00.001-05:00</published><updated>2012-01-15T14:55:49.418-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oam'/><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Fun with OAM 11g SDK</title><content type='html'>OAM 11g was a step backward from 10g, but slowly - as of .5 - it's becoming usable again. Bringing back custom authentication plugins and schemes was vital, and then there's the topic of this post, the indispensable; AccessServerSDK.&lt;br /&gt;&lt;br /&gt;I am still not pleased - Certain things are still missing, like the "originally requested URL" - making it impossible to do something like, allow a user to self-register and return to their original destination. I read that Oracle are working on the request, but who knows how long it will take with all the legitimate bugs out there.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;OFM OAM SDK 11g&lt;/h3&gt;&lt;br /&gt;The 11g SDK is a simple Java API. Download and extract "ofm_oam_sdk_generic_11.1.1.5.0_disk1_1of1.zip" - no installer necessary. Sort of. &lt;br /&gt;&lt;br /&gt;To get started, create a 10g gate in the OAM console, and copy the generated ObAccessClient.xml to your "AccessServerSDK" home folder within the subfolders: oblix\lib.  For example, on my workstation, I created "C:\Oracle\asdk\oblix\lib".&lt;br /&gt;&lt;br /&gt;From that point, you can copy the AccessServerSDK directory ("C:\Oracle\asdk") to setup multiple clients on developer or test machines, no worries, as long as the path is the same for everyone.&lt;br /&gt;&lt;br /&gt;Add your oam-sdk jar to the project classpath - that's it. See &lt;a href="http://docs.oracle.com/cd/E21764_01/doc.1111/e12491/as_api.htm"&gt;Oracle API for a basic example&lt;/a&gt; or keep reading.&lt;br /&gt;&lt;br /&gt;The fun part is using the SDK to authenticate a user for a valid SSO session they can take with them. I will get to that in a second, let's show the basic concept first.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Basic OAM SDK client class&lt;/h4&gt;&lt;br /&gt;Let's start with logging in with a basic OAM SDK client. To run this test, update: configLocation, login, password, resource for your environment. &lt;br /&gt;&lt;br /&gt;You can use any http resource already protected in OAM, or create a new one with any FORM type Authentication Scheme.&lt;br /&gt;&lt;br /&gt;The resource format is : "//HostnameFromHostIdentifier:80/ResourcePath"&lt;br /&gt;&lt;br /&gt;In my environment, I need the code to work on Windows or Unix, so there are two configLocation values - use is determined by the java System Property for OS.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;import java.util.Hashtable;&lt;br /&gt;&lt;br /&gt;import oracle.security.am.asdk.AccessClient;&lt;br /&gt;import oracle.security.am.asdk.AccessException;&lt;br /&gt;import oracle.security.am.asdk.AuthenticationScheme;&lt;br /&gt;import oracle.security.am.asdk.ResourceRequest;&lt;br /&gt;import oracle.security.am.asdk.UserSession;&lt;br /&gt;&lt;br /&gt;import org.slf4j.Logger;&lt;br /&gt;import org.slf4j.LoggerFactory;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * To generate the Access SDK log, you must provide a logging configuration file&lt;br /&gt; * when you start the application. e.g.&lt;br /&gt;* java -Djava.util.logging.config.file=JRE_DIRECTORY/lib/logging.properties&lt;br /&gt; */&lt;br /&gt;public class Simple10gClient {&lt;br /&gt;  protected static final Logger log = LoggerFactory.getLogger(Simple10gClient.class);&lt;br /&gt;&lt;br /&gt;  // assume all resources are http GETs&lt;br /&gt;  public static final String res_type = "http";&lt;br /&gt;  public static final String ms_method = "GET";&lt;br /&gt;&lt;br /&gt;  // Using standard location for SDK; will choose based on OS.&lt;br /&gt;  public static String configLocation = "/Oracle/Middleware/asdk";&lt;br /&gt;  public static String winConfigLocation = "C:/Oracle/asdk";&lt;br /&gt;  private static AccessClient ac;&lt;br /&gt;&lt;br /&gt;  private Simple10gClient() {}&lt;br /&gt;&lt;br /&gt;  // simple test &lt;br /&gt;  public static void main(String argv[]) {&lt;br /&gt;    String anonResource = "//AccessServerSDK_HostID:443/ResourceProtectedWithNoPasswordScheme";&lt;br /&gt;    String login = "testuser1";&lt;br /&gt;    String password = null;&lt;br /&gt;&lt;br /&gt;    try {&lt;br /&gt;      String sId = Simple10gClient.authenticate(anonResource, login, password);&lt;br /&gt;&lt;br /&gt;      Simple10gClient.isLoggedIn(sId);&lt;br /&gt;&lt;br /&gt;      Simple10gClient.shutdown();&lt;br /&gt;      &lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @SuppressWarnings("rawtypes")&lt;br /&gt;  private static void setupAccessClient() {&lt;br /&gt;    try {&lt;br /&gt;      String os = System.getProperty("os.name").toLowerCase();&lt;br /&gt;      if (os.indexOf("win") &gt; -1) {&lt;br /&gt;        configLocation = winConfigLocation;&lt;br /&gt;      }&lt;br /&gt;      // "C:/Oracle/asdk/oblix/lib/ObAccessClient.xml" must exist/be valid:&lt;br /&gt;      log.info("getAccessClient() config:" + configLocation );&lt;br /&gt;      ac = AccessClient.createDefaultInstance(configLocation , AccessClient.CompatibilityMode.OAM_10G);&lt;br /&gt;      log.info("Nap:" + AccessClient.getNAPVersion() + " SDK:" + AccessClient.getSDKVersion());&lt;br /&gt;      Hashtable diagnostic = ac.getServerDiagnosticInfo();&lt;br /&gt;      for (Object key : diagnostic.keySet()) {&lt;br /&gt;        log.info("Server Diagnostic " + key + "==" + diagnostic.get(key));&lt;br /&gt;      }&lt;br /&gt;      diagnostic = ac.getClientDiagnosticInfo();&lt;br /&gt;      for (Object key : diagnostic.keySet()) {&lt;br /&gt;        log.info("Client Diagnostic " + key + "==" + diagnostic.get(key));&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;    } catch (AccessException ae) {&lt;br /&gt;      if (ae.getMessage().indexOf("OAMAGENT-02055") &gt; -1) {&lt;br /&gt;        log.error("AccessServerSDK - is this agent webgate configured? " + ae);&lt;br /&gt;      } else {&lt;br /&gt;        log.error("Access Exception: " + ae.getMessage(), ae);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static String authenticate(String resource, String login, String pw) {&lt;br /&gt;    log.debug("authenticate() user=" + login + " res:" + res_type + " " + resource);&lt;br /&gt;    try {&lt;br /&gt;      if (ac == null || !ac.isInitialized()) {&lt;br /&gt;        setupAccessClient();&lt;br /&gt;      }&lt;br /&gt;      ResourceRequest rrq = new ResourceRequest(res_type, resource, ms_method);&lt;br /&gt;      if (rrq.isProtected()) {&lt;br /&gt;        log.info("Resource is protected: " + resource);&lt;br /&gt;        AuthenticationScheme authnScheme = new AuthenticationScheme(rrq);&lt;br /&gt;        if (authnScheme.isForm()) {&lt;br /&gt;          log.info("Form Authentication Scheme: " + authnScheme.getName());&lt;br /&gt;          Hashtable&lt;String, String&gt; creds = new Hashtable&lt;String, String&gt;();&lt;br /&gt;          // to know credential key names, either you write the AuthN scheme yourself&lt;br /&gt;          // or go with the Oracle example.&lt;br /&gt;          creds.put("userid", login);&lt;br /&gt;          if (pw != null &amp;&amp; pw.length() &gt; 0)&lt;br /&gt;            creds.put("password", pw);&lt;br /&gt;          UserSession session = new UserSession(rrq, creds);&lt;br /&gt;          if (session.getStatus() == UserSession.LOGGEDIN) {&lt;br /&gt;            if (session.isAuthorized(rrq)) {&lt;br /&gt;              log.info("User is logged in and authorized, level " + session.getLevel());&lt;br /&gt;            } else {&lt;br /&gt;              log.info("User is logged in but NOT authorized");&lt;br /&gt;            }&lt;br /&gt;            log.info("User sessionToken:" + session.getSessionToken());&lt;br /&gt;            return session.getSessionToken();&lt;br /&gt;          } else {&lt;br /&gt;            log.warn("User is NOT logged in");&lt;br /&gt;            return null;&lt;br /&gt;          }&lt;br /&gt;        } else {&lt;br /&gt;          log.warn("non-Form Authentication Scheme.");&lt;br /&gt;        }&lt;br /&gt;      } else {&lt;br /&gt;        log.warn("Resource is NOT protected.");&lt;br /&gt;      }&lt;br /&gt;    } catch (AccessException ae) {&lt;br /&gt;      log.error("authenticate() Access Exception: " + ae.getMessage());&lt;br /&gt;    }&lt;br /&gt;    return null;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void logout(String sessionId) {&lt;br /&gt;    try {&lt;br /&gt;      if (ac == null || !ac.isInitialized()) {&lt;br /&gt;        setupAccessClient();&lt;br /&gt;      }&lt;br /&gt;      oracle.security.am.asdk.UserSession session = new UserSession(ac, sessionId);&lt;br /&gt;      log.info("is logout required? " + session);&lt;br /&gt;      if (session.getStatus() == 1)&lt;br /&gt;        session.logoff();&lt;br /&gt;    } catch (Exception ae) {&lt;br /&gt;      log.error("logout() Access Exception: " + ae.getMessage(), ae);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * @param sessionId&lt;br /&gt;   */&lt;br /&gt;  public static boolean isLoggedIn(String sessionId) {&lt;br /&gt;    // 0 for AWAITINGLOGIN&lt;br /&gt;    // 1 for LOGGEDIN&lt;br /&gt;    // 2 for LOGGEDOUT&lt;br /&gt;    // 3 for LOGINFAILED&lt;br /&gt;    // 4 for EXPIRED&lt;br /&gt;    try {&lt;br /&gt;      if (ac == null || !ac.isInitialized()) {&lt;br /&gt;        setupAccessClient();&lt;br /&gt;      }&lt;br /&gt;      oracle.security.am.asdk.UserSession session = new UserSession(ac, sessionId);&lt;br /&gt;      log.info("isLoggedIn  startTime:" + session.getStartTime() + " status:" + session.getStatus());&lt;br /&gt;      java.util.Date since = new java.util.Date(session.getStartTime());&lt;br /&gt;      log.debug("since? " + since);&lt;br /&gt;      return session.getStatus() == 1;&lt;br /&gt;    } catch (Exception ae) {&lt;br /&gt;      log.error("isLoggedIn() Access Exception: " + ae.getMessage(), ae);&lt;br /&gt;    }&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void shutdown() {&lt;br /&gt;    try {&lt;br /&gt;      if (ac != null)&lt;br /&gt;        ac.shutdown();&lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;      log.warn("AccessServerSDK shutdown error " + e);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Right click and Run in eclipse, and you should see something like:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;- authenticate() user=testuser1 resource:http //AccessServerSDK_HostID:443/ResourceProtectedWithNoPasswordScheme&lt;br /&gt;- getAccessClient() config:C:/Oracle/asdk&lt;br /&gt;- Nap:3 SDK:OAMAccessSDK_Ver_11.1.1.5&lt;br /&gt;- Server Diagnostic oamserverhostname5575=={}&lt;br /&gt;- Client Diagnostic oamserverhostname5575=={host=oamserverhostname, port=5575, priority=1, createtime=1326647958849}&lt;br /&gt;- Resource is protected.&lt;br /&gt;- Form Authentication Scheme.&lt;br /&gt;- User is logged in and authorized for the request at level 3&lt;br /&gt;- User sessionToken:LEHZ+zmSIZiamCTmHNQh9S+4JH0R8AvJ0eVwLPkUwmZArWb9qOg&lt;br /&gt;KHYtEKrNTYHmEjt/UcqfFQ3Bq+mWud7APd0lqZlf31IigqrUAKJn7wRbRHanIpIQ1ygj64s&lt;br /&gt;FjCoP6CwSTvSGeLY6gv49okJCM/2QivVqWb2Ce1Xwru89Vs/ZaE7YVXfjS8DnWwPBqYR8kQ&lt;br /&gt;ONN348NI2cRMSMbryhG4neWah7rSFtJDH/gwAU55xwpE4SCcfTsXor8Qm7Ag==&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Using the OAM SDK to authenticate a web client&lt;/h4&gt;&lt;br /&gt;My next step is wildly insecure, but a good shortcut for this example. Using the session ID generated with the SDK login, construct a valid SSO cookie and send the user on their merry authenticated way.&lt;br /&gt;&lt;br /&gt;First, in the OAM console: Create a resource for your AccessServerSDK host, path "ResourceProtectedWithNoPasswordScheme" and add a "No Password Authentication Scheme" to it.  I created my own AuthN scheme, setting the level to 3 - because I needed to match the authentication level of the forwarding online resource.&lt;br /&gt;&lt;br /&gt;Create a LogMeIn servlet class taking a request parameter for login ID, and log the user in with a request parameter (see what I mean about being wildly insecure!):&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;String login = request.getParameter("login");&lt;br /&gt;  String anonResource = "//AccessServerSDK_HostID:443/ResourceProtectedWithNoPasswordScheme";&lt;br /&gt;&lt;br /&gt;      try {&lt;br /&gt;        String sessId = Simple10gClient.authenticate(anonResource, login, null);&lt;br /&gt;        log.info("Anon authenticate sessId:" + sessId);&lt;br /&gt;&lt;br /&gt;        // using the Session ID, create a ObSSOCookie and give it to the user&lt;br /&gt;        if (sessId != null) {&lt;br /&gt;          Cookie obCookie = new Cookie("ObSSOCookie", sessId);&lt;br /&gt;          obCookie.setDomain(".domain.com");&lt;br /&gt;          // obCookie.setHttpOnly(true); -- not sure why Weblogic 10.3.5 wasn't able to find this method&lt;br /&gt;          obCookie.setPath("/");&lt;br /&gt;          response.addCookie(obCookie);&lt;br /&gt;&lt;br /&gt;          // now send a response.redirect to a level 3 protected resource, user is logged in&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;        response.getOutputStream().print("Exception " + e);&lt;br /&gt;        log.error("logmein failed", e);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Deloying on the OIM/OAM WLS Domain&lt;/h4&gt;&lt;br /&gt;There was a bit of a gotcha using this sdk jar on the same domain as OIM/OAM - class/jar conflicts. Easily solved by adding a weblogic.xml to the war WEB-INF, requesting that weblogic look at the web libraries only.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;  &amp;lt;wls:container-descriptor&amp;gt;&lt;br /&gt;    &amp;lt;wls:prefer-application-packages&amp;gt;&lt;br /&gt; &amp;lt;!-- add package names from the Oracle Access Server SDK --&amp;gt;&lt;br /&gt; &amp;lt;wls:package-name&amp;gt;com.oblix.*&amp;lt;/wls:package-name&amp;gt;&lt;br /&gt; &amp;lt;wls:package-name&amp;gt;oracle.security.am.*&amp;lt;/wls:package-name&amp;gt;&lt;br /&gt;    &amp;lt;/wls:prefer-application-packages&amp;gt;&lt;br /&gt;  &amp;lt;/wls:container-descriptor&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The end result of this is that you now can authenticate with standard username / password, check if the value of an ObSSOCookie is a valid session token, and generate for the end-user a valid SSO token to continue their with session on other OAM protected resources.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6765343651468393877?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6765343651468393877' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6765343651468393877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6765343651468393877'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2012/01/fun-with-oam-11g-sdk.html' title='Fun with OAM 11g SDK'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8157784123416041243</id><published>2011-12-30T14:47:00.001-05:00</published><updated>2011-12-30T15:01:20.692-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Spring Security with SSO Headers - integrating with OAM WebGate</title><content type='html'>How to integrate java web applications with SSO? Usually a simple J2EE filter looking for the correct header name can suffice, however, if you want to take advantage of Spring Security you need to set it up with a "PreAuthentication" filter. This states that spring is not performing authentication, it's already done.&lt;br /&gt;&lt;br /&gt;This solution may be overkill, but it provides more control/log info, and the ability to test outside of the SSO environment without implementing alternate authentication providers (although it would also be possible to have a form/database authentication fallback as well).&lt;br /&gt;&lt;br /&gt;My environment: J2ee (any app server) fronted by a Oracle Access WebGate protected web server.&lt;br /&gt;&lt;br /&gt;Spring Security 2.5+ (tested with 3.0.5)&lt;br /&gt;&lt;br /&gt;What I need: Convert Request Headers OAM_REMOTE_USER and ROLES to map to an authenticated principal.&lt;br /&gt;&lt;br /&gt;Making it usable: Allow a fallback security configuration for local testing.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Step 1. PreAuthentication Config&lt;/h3&gt;&lt;br /&gt;There are two custom beans in this file "HeaderAuthenticationFilter" and "HeaderAuthenticationDetails" and three configuration properties:&lt;br /&gt;&lt;br /&gt;security.principal.header.name=OAM_REMOTE_USER&lt;br /&gt;security.roles.header.name=ROLES&lt;br /&gt;security.test.principal=no_header_in_test_mode&lt;br /&gt;&lt;br /&gt;applicationContext-security.xml:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans xmlns=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt;  xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:aop=&amp;quot;http://www.springframework.org/schema/aop&amp;quot;&lt;br /&gt;  xmlns:context=&amp;quot;http://www.springframework.org/schema/context&amp;quot; xmlns:tx=&amp;quot;http://www.springframework.org/schema/tx&amp;quot;&lt;br /&gt;  xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&lt;br /&gt;            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd&lt;br /&gt;            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd&lt;br /&gt;            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd&amp;quot;&lt;br /&gt;  default-lazy-init=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;bean&lt;br /&gt;    class=&amp;quot;org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- this bean name must match the filter name defined in security.xml below --&amp;gt;&lt;br /&gt;  &amp;lt;bean id=&amp;quot;ssoHeaderFilter&amp;quot;&lt;br /&gt;    class=&amp;quot;com.sharnibey.sample.security.HeaderAuthenticationFilter&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;principalRequestHeader&amp;quot; value=&amp;quot;${security.principal.header.name}&amp;quot; /&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;!-- fall back to other authentication providers is OAM SSO is not there --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;exceptionIfHeaderMissing&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;!-- hard code a testUserId for local tests --&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;testUserId&amp;quot; value=&amp;quot;${security.test.principal}&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;authenticationManager&amp;quot; ref=&amp;quot;authenticationManager&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;authenticationDetailsSource&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;bean class=&amp;quot;com.sharnibey.sample.security.HeaderAuthenticationDetails&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;!-- look for the request header set by the webgate and map to local &lt;br /&gt;          roles --&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;roleHeaderName&amp;quot; value=&amp;quot;${security.roles.header.name}&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;userRoles2GrantedAuthoritiesMapper&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;bean&lt;br /&gt;            class=&amp;quot;org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;property name=&amp;quot;convertAttributeToUpperCase&amp;quot; value=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;/bean&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;!-- setup a testing role if not deployed with a webgate - this only &lt;br /&gt;          applies if ENV_NAME != uat/prod --&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;testingRoles&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;set&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;USER&amp;lt;/value&amp;gt;&lt;br /&gt;          &amp;lt;/set&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;        &lt;br /&gt;        &amp;lt;!-- all available roles for this application --&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;allRoles&amp;quot;&amp;gt;&lt;br /&gt;          &amp;lt;set&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;USER&amp;lt;/value&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;ADMIN&amp;lt;/value&amp;gt;&lt;br /&gt;          &amp;lt;/set&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;      &amp;lt;/bean&amp;gt;&lt;br /&gt;    &amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;bean id=&amp;quot;preauthAuthProvider&amp;quot;&lt;br /&gt;    class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;property name=&amp;quot;preAuthenticatedUserDetailsService&amp;quot; ref=&amp;quot;preAuthenticatedUserDetailsService&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;/bean&amp;gt;&lt;br /&gt;  &amp;lt;!-- magically map the user header to a valid user object --&amp;gt;&lt;br /&gt;  &amp;lt;bean id=&amp;quot;preAuthenticatedUserDetailsService&amp;quot;&lt;br /&gt;    class=&amp;quot;org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesUserDetailsService&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;bean id=&amp;quot;securityContextHolderAwareRequestFilter&amp;quot;&lt;br /&gt;    class=&amp;quot;org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;PreAuthentication Code&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public class HeaderAuthenticationFilter &lt;br /&gt;    extends AbstractPreAuthenticatedProcessingFilter {&lt;br /&gt;  protected final Logger log = LoggerFactory.getLogger(HeaderAuthenticationFilter.class);&lt;br /&gt;  private String principalRequestHeader = "OAM_REMOTE_USER";&lt;br /&gt;  /**&lt;br /&gt;   * Configure a value in the applicationContext-security for local tests.&lt;br /&gt;   */&lt;br /&gt;  private String testUserId = null;&lt;br /&gt;  /**&lt;br /&gt;   * Configure whether a missing SSO header is an exception.&lt;br /&gt;   */&lt;br /&gt;  private boolean exceptionIfHeaderMissing = false;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Read and return header named by &lt;tt&gt;principalRequestHeader&lt;/tt&gt; from Request&lt;br /&gt;   * &lt;br /&gt;   * @throws PreAuthenticatedCredentialsNotFoundException&lt;br /&gt;   *             if the header is missing and&lt;br /&gt;   *             &lt;tt&gt;exceptionIfHeaderMissing&lt;/tt&gt; is set to &lt;tt&gt;true&lt;/tt&gt;.&lt;br /&gt;   */&lt;br /&gt;  protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {&lt;br /&gt;    String principal = request.getHeader(principalRequestHeader);&lt;br /&gt;&lt;br /&gt;    if (principal == null) {&lt;br /&gt;      if (exceptionIfHeaderMissing) {&lt;br /&gt;        throw new PreAuthenticatedCredentialsNotFoundException(principalRequestHeader&lt;br /&gt;            + " header not found in request.");&lt;br /&gt;      } if (StringUtils.isNotBlank(testUserId)) {&lt;br /&gt;          log.warn("spring configuration has a test user id " + testUserId);&lt;br /&gt;          principal = testUserId;&lt;br /&gt;      } else if (request.getSession().getAttribute("session_user") != null) {&lt;br /&gt;// A bit of a hack for testers - allow the principal to be &lt;br /&gt;// obtained by session. Must be set by a page with no security filters enabled.&lt;br /&gt;// should remove for production.&lt;br /&gt;        principal = (String) request.getSession().getAttribute("session_user");&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    // also set it into the session, sometimes that's easier for jsp/faces&lt;br /&gt;    // to get at..&lt;br /&gt;    request.getSession().setAttribute("session_user", principal);&lt;br /&gt;    return principal;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Credentials aren't applicable here for OAM WebGate SSO.&lt;br /&gt;   */&lt;br /&gt;  protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {&lt;br /&gt;    return "password_not_applicable";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setPrincipalRequestHeader(String principalRequestHeader) {&lt;br /&gt;    Assert.hasText(principalRequestHeader, "principalRequestHeader must not be empty or null");&lt;br /&gt;    this.principalRequestHeader = principalRequestHeader;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setTestUserId(String testId) {&lt;br /&gt;    if (StringUtils.isNotBlank(testId)) {&lt;br /&gt;      this.testUserId = testId;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Exception if the principal header is missing. Default &lt;tt&gt;false&lt;/tt&gt;&lt;br /&gt;   * @param exceptionIfHeaderMissing&lt;br /&gt;   */&lt;br /&gt;  public void setExceptionIfHeaderMissing(boolean exceptionIfHeaderMissing) {&lt;br /&gt;    this.exceptionIfHeaderMissing = exceptionIfHeaderMissing;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setAuthenticationDetailsSource(AuthenticationDetailsSource source) {&lt;br /&gt;    log.info("testing authenticationDetailsSource set " + source);&lt;br /&gt;    super.setAuthenticationDetailsSource(source);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public class HeaderAuthenticationDetails extends AuthenticationDetailsSourceImpl {&lt;br /&gt;  protected final Logger log = LoggerFactory.getLogger(HeaderAuthenticationDetails.class);&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Can be setup in applicationContext-security if the ROLES header value is&lt;br /&gt;   * not found.&lt;br /&gt;   */&lt;br /&gt;  private Set&lt;string&gt; testingRoles = new HashSet&lt;string&gt;();&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Security principal will only contain roles from "allRoles" - letting us&lt;br /&gt;   * cut down the irrelevant values setup by the webgate SSO header.&lt;br /&gt;   */&lt;br /&gt;  protected Set&lt;string&gt; allRoles = new HashSet&lt;string&gt;();&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * setup in applicationContext-security&lt;br /&gt;   */&lt;br /&gt;  private String roleHeaderName = "ROLES";&lt;br /&gt;&lt;br /&gt;  protected Attributes2GrantedAuthoritiesMapper grantedAuthoritiesMapper &lt;br /&gt;    = new SimpleAttributes2GrantedAuthoritiesMapper();&lt;br /&gt;&lt;br /&gt;  public HeaderAuthenticationDetails() {&lt;br /&gt;    super.setClazz(PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails.class);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Build the authentication details object. If the specified authentication&lt;br /&gt;   * details class implements {@link MutableGrantedAuthoritiesContainer}, a&lt;br /&gt;   * list of pre-authenticated Granted Authorities will be set based on the&lt;br /&gt;   * roles for the current user.&lt;br /&gt;   */&lt;br /&gt;  public Object buildDetails(Object context) {&lt;br /&gt;    Object result = super.buildDetails(context);&lt;br /&gt;    List&lt;grantedauthority&gt; userGas = new ArrayList&lt;grantedauthority&gt;();&lt;br /&gt;    if (result instanceof MutableGrantedAuthoritiesContainer) {&lt;br /&gt;      Collection&lt;string&gt; userRoles = getUserRoles(context, allRoles);&lt;br /&gt;      userGas = grantedAuthoritiesMapper.getGrantedAuthorities(userRoles);&lt;br /&gt;      ((MutableGrantedAuthoritiesContainer) result).setGrantedAuthorities(userGas);&lt;br /&gt;    }&lt;br /&gt;    return result;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Allows the roles of the current user to be determined from the context&lt;br /&gt;   * object&lt;br /&gt;   * &lt;br /&gt;   * @param context&lt;br /&gt;   *            the context object (HttpRequest, PortletRequest etc)&lt;br /&gt;   * @param mappableRoles&lt;br /&gt;   *            the possible roles determined by the&lt;br /&gt;   *            MappableAttributesRetriever&lt;br /&gt;   * @return Collection&lt;string&gt; subset of mappable roles current user has.&lt;br /&gt;   */&lt;br /&gt;  protected Collection&lt;string&gt; getUserRoles(Object context, Set&lt;string&gt; mappableRoles) {&lt;br /&gt;    ArrayList&lt;string&gt; requestRoles = new ArrayList&lt;string&gt;();&lt;br /&gt;    if (((HttpServletRequest) context).getHeader(roleHeaderName) != null) {&lt;br /&gt;      String[] roles = ((HttpServletRequest) context).getHeader(roleHeaderName).split(",");&lt;br /&gt;      for (int i = 0; i &lt; roles.length; i++) {&lt;br /&gt;        if (mappableRoles.contains(roles[i])) {&lt;br /&gt;          requestRoles.add(roles[i]);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    } else if ( testingRoles != null) {&lt;br /&gt;      log.warn("Failed to retrieve Roles from Header, for debug purposes set to testingRole");&lt;br /&gt;      requestRoles.addAll(testingRoles);&lt;br /&gt;    } else {&lt;br /&gt;      log.warn("Failed to retrieve Roles from Header, setup as 'user' role.");&lt;br /&gt;      requestRoles.add("USER");&lt;br /&gt;    }&lt;br /&gt;    // add them to the session for convenience&lt;br /&gt;    ((HttpServletRequest) context).getSession().setAttribute(RequestUtil.SESSION_ROLE_KEY, requestRoles);&lt;br /&gt;    return requestRoles;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * @param mapper&lt;br /&gt;   *            The Attributes2GrantedAuthoritiesMapper to use&lt;br /&gt;   */&lt;br /&gt;  public void setUserRoles2GrantedAuthoritiesMapper(Attributes2GrantedAuthoritiesMapper mapper) {&lt;br /&gt;    grantedAuthoritiesMapper = mapper;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * All available roles for this application&lt;br /&gt;   * &lt;br /&gt;   * @param allRoles&lt;br /&gt;   */&lt;br /&gt;  public void setAllRoles(Set&lt;String&gt; allRoles) {&lt;br /&gt;    this.allRoles = allRoles;&lt;br /&gt;  }&lt;br /&gt;  /**&lt;br /&gt;   * @param roleHeaderName&lt;br /&gt;   */&lt;br /&gt;  public void setRoleHeaderName(String roleHeaderName) {&lt;br /&gt;    this.roleHeaderName = roleHeaderName;&lt;br /&gt;  }&lt;br /&gt;  /**&lt;br /&gt;   * @param testingRole&lt;br /&gt;   */&lt;br /&gt;  public void setTestingRoles(Set&lt;string&gt; testingRole) {&lt;br /&gt;    this.testingRoles = testingRole;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;web.xml updates&lt;/h3&gt;&lt;br /&gt;These snippets will look familiar if you've ever used spring security; define the filter, map to all resources. Spring contextConfiguration locations should have your resource properties loaded first, then security config, and everything else.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;    &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&lt;br /&gt;    &amp;lt;param-value&amp;gt; &lt;br /&gt; classpath:/ctx/applicationContext-resources.xml &lt;br /&gt; classpath:/ctx/applicationContext-security.xml &lt;br /&gt; /WEB-INF/security.xml&lt;br /&gt; /WEB-INF/applicationContext*.xml&lt;br /&gt;    &amp;lt;/param-value&amp;gt;&lt;br /&gt;  &amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;filter&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;filter-class&amp;gt;org.springframework.web.filter.DelegatingFilterProxy&amp;lt;/filter-class&amp;gt;&lt;br /&gt;  &amp;lt;/filter&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;filter-mapping&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;springSecurityFilterChain&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;  &amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Final Step - Setup Spring Security &lt;/h3&gt;&lt;br /&gt;security.xml is application specific, but my sample application is based on appfuse - JSF version - so it should cover most example uses.&lt;br /&gt;&lt;br /&gt;The intercept-url element defines the roles or authentication states  that are required to access a URL path. Roles should be comma-delimited. &lt;br /&gt;&lt;br /&gt;To restrict pages by user type instead of user role the following values can be used: &lt;br /&gt;IS_AUTHENTICATED_ANONYMOUSLY - Allow access to any user. &lt;br /&gt;IS_AUTHENTICATED_REMEMBERED - Allow access to logged-in users or users with a "remember me" cookie. &lt;br /&gt;IS_AUTHENTICATED_FULLY - Allow access to logged-in users. &lt;br /&gt;&lt;br /&gt;To remove all Spring Security processing from a page use the filters="none"  attribute.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;beans:beans xmlns=&amp;quot;http://www.springframework.org/schema/security&amp;quot;&lt;br /&gt; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:beans=&amp;quot;http://www.springframework.org/schema/beans&amp;quot;&lt;br /&gt; xsi:schemaLocation=&amp;quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&lt;br /&gt;              http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;http auto-config=&amp;quot;true&amp;quot; lowercase-comparisons=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/images/**&amp;quot; filters=&amp;quot;none&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/styles/**&amp;quot; filters=&amp;quot;none&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/scripts/**&amp;quot; filters=&amp;quot;none&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/javax.faces.resource/**&amp;quot;&lt;br /&gt;   filters=&amp;quot;none&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- direct xhtml access disallowed --&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/**/*.xhtml&amp;quot; access=&amp;quot;ROLE_NOBODY&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- local authentication is unused, but this is how it's configured --&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/j_security*&amp;quot; access=&amp;quot;IS_AUTHENTICATED_ANONYMOUSLY&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/login*&amp;quot; access=&amp;quot;IS_AUTHENTICATED_ANONYMOUSLY&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/a4j.res/**&amp;quot;&lt;br /&gt;   access=&amp;quot;ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/admin/**&amp;quot; access=&amp;quot;ROLE_ADMIN&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/user/**&amp;quot; access=&amp;quot;ROLE_ADMIN,ROLE_USER&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- show request headers and session variables for any user --&amp;gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/env.jsp&amp;quot; access=&amp;quot;IS_AUTHENTICATED_ANONYMOUSLY&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;intercept-url pattern=&amp;quot;/**&amp;quot; access=&amp;quot;IS_AUTHENTICATED_ANONYMOUSLY&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- matches the bean name for HeaderAuthenticationFilter class above --&amp;gt;&lt;br /&gt;  &amp;lt;custom-filter position=&amp;quot;PRE_AUTH_FILTER&amp;quot; ref=&amp;quot;ssoHeaderFilter&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;form-login login-page=&amp;quot;/login&amp;quot; authentication-failure-url=&amp;quot;/login?error=true&amp;quot;&lt;br /&gt;   login-processing-url=&amp;quot;/j_security_check&amp;quot; always-use-default-target=&amp;quot;true&amp;quot;&lt;br /&gt;   default-target-url=&amp;quot;/&amp;quot; /&amp;gt;&lt;br /&gt; &amp;lt;/http&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;authentication-manager alias=&amp;quot;authenticationManager&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;authentication-provider ref=&amp;quot;preauthAuthProvider&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;!-- this is an example of alternate user authentication providers, although &lt;br /&gt;   we only have the PRE_AUTH_FILTER defined above, so it isn't used. --&amp;gt;&lt;br /&gt;  &amp;lt;authentication-provider&amp;gt;&lt;br /&gt;   &amp;lt;user-service&amp;gt;&lt;br /&gt;    &amp;lt;user authorities=&amp;quot;ROLE_USER&amp;quot; name=&amp;quot;guest&amp;quot; password=&amp;quot;guest&amp;quot; /&amp;gt;&lt;br /&gt;   &amp;lt;/user-service&amp;gt;&lt;br /&gt;  &amp;lt;/authentication-provider&amp;gt;&lt;br /&gt; &amp;lt;/authentication-manager&amp;gt;&lt;br /&gt;&amp;lt;/beans:beans&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you read this far, and you want a Ready-To-Go example of how all this fits together, leave a comment and I will upload a full-source war to a temporary share site. Please don't put your email in the comments.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8157784123416041243?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8157784123416041243' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8157784123416041243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8157784123416041243'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/12/spring-security-with-sso-headers.html' title='Spring Security with SSO Headers - integrating with OAM WebGate'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-193472639595896864</id><published>2011-12-30T12:07:00.003-05:00</published><updated>2011-12-30T12:19:19.407-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oam'/><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='oim'/><title type='text'>OIM Recon LDAP - adding fields</title><content type='html'>&lt;br /&gt;First, grab your metadata from MDS: MW_HOME/Oracle_IDM[1,2]/server/bin/&lt;br /&gt;&lt;br /&gt;Setup weblogic.properties&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;wls_servername=oim_server1&lt;br /&gt;application_name=oim&lt;br /&gt;metadata_from_loca=/data/temp&lt;br /&gt;metadata_to_loca=/data/temp&lt;br /&gt;metadata_files=/db/LDAPUser,/db/RA_LDAPUSER.xml,/metadata/iam-features-ldap-sync/LDAPUser.xml&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;weblogicExportMetadata.sh/bat (connect as weblogic to the AdminServer e.g. t3://localhost:7001)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;OIM Default/Existing Field Example&lt;/h3&gt;&lt;br /&gt;TO show you the fields that are required for update, here's a generic example to describe the LDAP/recon process for the OIM Role (user type) field to the LDAP attribute employeetype:&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;metadata/db/LDAPUser: Attribute appears twice, under &amp;quot;reconFields&amp;quot; and reconToOIMMappings:&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;reconFields&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDeescriptiveName&amp;gt;Role&amp;lt;/oimFormDescriptiveName&amp;gt; (Attribute Name from OIM user attribute config)&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;employeetype&amp;lt;/reconFieldName&amp;gt;&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_USR_EMP_TYPE&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;string&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;String&amp;quot; name=&amp;quot;usr_emp_type&amp;quot;/&amp;gt; (name of field in USR table)&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;reconToOIMMappings&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDescriptiveName&amp;gt;Role&amp;lt;/oimFormDescriptiveName&amp;gt; (Attribute Name from OIM user attribute config)&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;employeetype&amp;lt;/reconFieldName&amp;gt; (LDAPUser.xml fieldname)&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_USR_EMP_TYPE&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;string&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;String&amp;quot; name=&amp;quot;usr_emp_type&amp;quot;&amp;gt; (name of field in USR table)&lt;br /&gt;&amp;lt;Transformation name=&amp;quot;OneToOne&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;Parameter name=&amp;quot;employeetype&amp;quot; fieldname=&amp;quot;employeetype&amp;quot;/&amp;gt; (name of field in OVD)&lt;br /&gt;&amp;lt;/Transformation&amp;gt;&lt;br /&gt;&amp;lt;/targetattr&amp;gt;&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;/metadata/dbRA_LDAPUSer.xml: Attribute and recon field defined, under &amp;quot;entity-attributes&amp;quot; and &amp;quot;target-fields&amp;quot;:&lt;/h4&gt;&lt;br /&gt;&lt;b&gt;entity-attributes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;attribute name=&amp;quot;Role&amp;quot;&amp;gt; (Attribute Name from OIM user attribute config)&lt;br /&gt;&amp;lt;type&amp;gt;string&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;searchable&amp;gt;true&amp;lt;/searchable&amp;gt;&lt;br /&gt;&amp;lt;MLS&amp;gt;false&amp;lt;/MLS&amp;gt;&lt;br /&gt;&amp;lt;attribute-group&amp;gt;Basic&amp;lt;/attribute-group&amp;gt;&lt;br /&gt;&amp;lt;metadata-attachment/&amp;gt;&lt;br /&gt;&amp;lt;/attribute&amp;gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;Role&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;RECON_USR_EMP_TYPE&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;target-fields&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;RECON_USR_EMP_TYPE&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;string&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;/metadata/iam-features-ldap-sync/LDAPUser.xml: Mapping is defined, under &amp;quot;entity-attributes&amp;quot;, &amp;quot;target-fields&amp;quot; and &amp;quot;attribute-maps&amp;quot;&lt;/h4&gt;&lt;br /&gt;&amp;lt;attribute name=&amp;quot;Role&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;string&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;attribute-group&amp;gt;Basic&amp;lt;/attribute-group&amp;gt;&lt;br /&gt;&amp;lt;searchable&amp;gt;true&amp;lt;/searchable&amp;gt;&lt;br /&gt;&amp;lt;/attribute&amp;gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;employeeType&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;string&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;Role&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;employeeType&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Now a real example -  Adding Lock Fields &lt;/h3&gt;&lt;br /&gt;The problem with a fully integrated OIM/OAM/Ldap Sync/OVD 11g is that it's broken. &lt;br /&gt;&lt;br /&gt;Users lock themselves through OAM webgate login, correctly setting the oblockouttime - but OIM knows nothing about it. I have no idea how to get a unix-style epoch time (oblockouttime) through the reconcile process to OIM - if anyone knows how to convert to a date type, that would be awesome? &lt;br /&gt;&lt;br /&gt;Oracle SR response not forthcoming (after several weeks), we looked for alternatives. Found an OVD field which was set during lockout: pwdaccountlockedtime. &lt;br /&gt;&lt;br /&gt;First OVD must know about the target LDAP attribute. OAM schema (ob* attributes) should have been loaded to OVD, this is the relevant objectclass containing the OAM lockout info:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;objectclasses: ( 1.3.6.1.4.1.3831.0.1.21 NAME 'oblixPersonPwdPolicy' DESC 'Oracle Access Manager defined objectclass' SUP top &lt;br /&gt;AUXILIARY MAY ( obpasswordcreationdate $ obpasswordhistory $ obpasswordchangeflag $ obpasswordexpmail $ oblockouttime $ oblogintrycount $ obfirstlogin $ obresponsetries $ oblastloginattemptdate $ oblastresponseattemptdate $ obresponsetimeout $ oblastsuccessfullogin $ oblastfailedlogin $ etc. etc. ) )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next, to have two-way updates (LDAP back to OIM) you need a RECON field, I added these two to the RA_LDAPUSER table in the OIM database: lock date and number of failed login attempts.&lt;br /&gt;&lt;br /&gt;&lt;pre  class="prettyprint"&gt;describe RA_LDAPUSER &lt;br /&gt;&lt;br /&gt; ... rest of the RA_LDAPUSER table above ...&lt;br /&gt;RECON_ORCLUSERLOCKEDON DATE &lt;br /&gt;RECON_LOGINATTEMPTS    NUMBER(19) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;LDAPUser&lt;/h4&gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDescriptiveName&amp;gt;Locked On&amp;lt;/oimFormDescriptiveName&amp;gt; (This field must match the OIM Attribute Name - see Configuration, User Attributes to confirm)&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;pwdaccountlockedtime&amp;lt;/reconFieldName&amp;gt;&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_ORCLUSERLOCKEDON&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;date&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;Date&amp;quot; name=&amp;quot;pwdaccountlockedtime&amp;quot;/&amp;gt; (This field must match your OVD or LDAP)&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDescriptiveName&amp;gt;usr_login_attempts_ctr&amp;lt;/oimFormDescriptiveName&amp;gt; (This field must match the OIM Attribute Name - see Configuration, User Attributes to confirm)&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;oblogintrycount&amp;lt;/reconFieldName&amp;gt;&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_LOGINATTEMPTS&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;number&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;String&amp;quot; name=&amp;quot;oblogintrycount&amp;quot;/&amp;gt; (This field must match your OVD or LDAP)&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDescriptiveName&amp;gt;Locked On&amp;lt;/oimFormDescriptiveName&amp;gt; (This field must match above - the OIM Attribute Name)&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;pwdaccountlockedtime&amp;lt;/reconFieldName&amp;gt;&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_ORCLUSERLOCKEDON&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;date&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;Date&amp;quot; name=&amp;quot;usr_locked_on&amp;quot;&amp;gt; (This field must match the USR table column name)&lt;br /&gt;&amp;lt;Transformation name=&amp;quot;OneToOne&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;Parameter name=&amp;quot;pwdaccountlockedtime&amp;quot; fieldname=&amp;quot;pwdaccountlockedtime&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Transformation&amp;gt; (This field must match your OVD or LDAP)&lt;br /&gt;&amp;lt;/targetattr&amp;gt;&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&amp;lt;reconAttr&amp;gt;&lt;br /&gt;&amp;lt;oimFormDescriptiveName&amp;gt;usr_login_attempts_ctr&amp;lt;/oimFormDescriptiveName&amp;gt;&lt;br /&gt;&amp;lt;reconFieldName xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xsi:type=&amp;quot;xs:string&amp;quot;&amp;gt;oblogintrycount&amp;lt;/reconFieldName&amp;gt;&lt;br /&gt;&amp;lt;reconColName&amp;gt;RECON_LOGINATTEMPTS&amp;lt;/reconColName&amp;gt;&lt;br /&gt;&amp;lt;emDataType&amp;gt;number&amp;lt;/emDataType&amp;gt;&lt;br /&gt;&amp;lt;formFieldType/&amp;gt;&lt;br /&gt;&amp;lt;targetattr keyfield=&amp;quot;false&amp;quot; encrypted=&amp;quot;false&amp;quot; required=&amp;quot;false&amp;quot; type=&amp;quot;String&amp;quot; name=&amp;quot;usr_login_attempts_ctr&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;Transformation name=&amp;quot;OneToOne&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;Parameter name=&amp;quot;oblogintrycount&amp;quot; fieldname=&amp;quot;oblogintrycount&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Transformation&amp;gt;&lt;br /&gt;&amp;lt;/targetattr&amp;gt;&lt;br /&gt;&amp;lt;/reconAttr&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;RA_LDAPUSER.xml&lt;/h4&gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;Locked On&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;RECON_ORCLUSERLOCKEDON&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;usr_login_attempts_ctr&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;RECON_LOGINATTEMPTS&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;RECON_ORCLUSERLOCKEDON&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;date&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;RECON_LOGINATTEMPTS&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;LDAPUser.xml&lt;/h4&gt;&lt;br /&gt;&amp;lt;attribute name=&amp;quot;Locked On&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;date&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;attribute-group&amp;gt;Basic&amp;lt;/attribute-group&amp;gt;&lt;br /&gt;&amp;lt;searchable&amp;gt;true&amp;lt;/searchable&amp;gt;&lt;br /&gt;&amp;lt;/attribute&amp;gt;&lt;br /&gt;&amp;lt;attribute name=&amp;quot;usr_login_attempts_ctr&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;attribute-group&amp;gt;Basic&amp;lt;/attribute-group&amp;gt;&lt;br /&gt;&amp;lt;searchable&amp;gt;true&amp;lt;/searchable&amp;gt;&lt;br /&gt;&amp;lt;/attribute&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;pwdaccountlockedtime&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;date&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&amp;lt;field name=&amp;quot;oblogintrycount&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;&amp;lt;required&amp;gt;false&amp;lt;/required&amp;gt;&lt;br /&gt;&amp;lt;/field&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;Locked On&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;pwdaccountlockedtime&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&amp;lt;attribute-map&amp;gt;&lt;br /&gt;&amp;lt;entity-attribute&amp;gt;usr_login_attempts_ctr&amp;lt;/entity-attribute&amp;gt;&lt;br /&gt;&amp;lt;target-field&amp;gt;oblogintrycount&amp;lt;/target-field&amp;gt;&lt;br /&gt;&amp;lt;/attribute-map&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Re-import LDAP/Recon config&lt;/h4&gt;&lt;br /&gt;Back to the OIM_HOME server bin directory, run weblogicImportMetadata.sh/bat&lt;br /&gt;&lt;br /&gt;Doesn't appear to need a restart, but I usually run "PurgeCache.sh All" at the same time.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Test reconciliation&lt;/h4&gt;&lt;br /&gt;Run the scheduled job; LDAP Full User Group reconcile - look to error details, fix typos and run again.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-193472639595896864?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=193472639595896864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/193472639595896864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/193472639595896864'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/12/oim-recon-ldap-adding-fields.html' title='OIM Recon LDAP - adding fields'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5500211126351493928</id><published>2011-12-22T11:25:00.002-05:00</published><updated>2011-12-22T11:26:37.351-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='making'/><category scheme='http://www.blogger.com/atom/ns#' term='toronto'/><title type='text'>An open house at site3.ca</title><content type='html'>So here's this naff video i made talking to the folks at Site 3 coLaboratory - check it out: &lt;a href="http://site3.ca/news/how-does-it-work/"&gt;http://site3.ca/news/how-does-it-work/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5500211126351493928?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5500211126351493928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5500211126351493928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5500211126351493928'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/12/open-house-at-site3ca.html' title='An open house at site3.ca'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5224249541224602727</id><published>2011-12-07T15:50:00.001-05:00</published><updated>2011-12-30T12:16:38.590-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11g'/><category scheme='http://www.blogger.com/atom/ns#' term='oim'/><title type='text'>OIM 11g really delete deleted</title><content type='html'>I run through a *lot* of accounts testing in OIM/OAM 11.1.1.5. Things happen, accounts get borked. &lt;br /&gt;&lt;br /&gt;Easiest way to keep your UAT system from getting out of hand is to delete sometimes, but the Reuse ID functionality in OIM is extremely dangerous (i.e. it doesn't work).&lt;br /&gt;&lt;br /&gt;So I suggest using this SQL to clean your deleted test accounts (this is not something I would do in production!)&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;delete from oud where oiu_key in (select oiu_key from oiu where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from osi where req_key in (select req_key from req where orc_key in (select orc_key from orc where orc.usr_key in (select USR_KEY from USR where usr_status='Deleted')));&lt;br /&gt;delete from osi where osi_assigned_to_usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from osh where osh_assigned_to_usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from rcd where rce_key in (select rce_key from rce,orc where rce.orc_key = orc.orc_key and orc.usr_key  in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from rch where rce_key in (select rce_key from rce,orc where rce.orc_key = orc.orc_key and orc.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from rcu where rce_key in (select rce_key from rce,orc where rce.orc_key = orc.orc_key and orc.usr_key  in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from rcb where rce_key in (select rce_key from rce,orc where rce.orc_key = orc.orc_key and orc.usr_key  in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from rce where orc_key in (select orc_key from orc where orc.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from oio where orc_key in (select orc_key from orc where orc.usr_key  in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from oiu where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from oti where orc_key in (select orc_key from orc where orc.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from osi where orc_key in (select orc_key from orc where orc.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from orc where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from upd where upp_key in (select upp_key from upp where upp.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from upp where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from usg where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from uhd where uph_key in (select uph_key from uph where uph.usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from uph where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from pcq where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from rcu where usr_key  in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from RECON_USER_MATCH where USR_KEY in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from RECON_ROLE_MATCH where RE_KEY in (select re_key from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from RECON_ROLE_MEMBER_MATCH where RE_KEY in (select re_key from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from RA_LDAPROLEMEMBERSHIP where RE_KEY in (select re_key from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from RECON_HISTORY where RE_KEY in (select re_key from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from RA_LDAPUSER where RE_KEY in (select re_key from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted'));&lt;br /&gt;delete from RECON_EVENTS where usr_key in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;delete from usr where usr_key in (select USR_KEY from USR where usr_status='Deleted');&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5224249541224602727?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5224249541224602727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5224249541224602727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5224249541224602727'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/12/oim-11g-really-delete-deleted.html' title='OIM 11g really delete deleted'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4938675272766638513</id><published>2011-12-07T14:37:00.001-05:00</published><updated>2011-12-15T12:23:43.789-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>OIM 11g SPML Modify Request</title><content type='html'>This post is a follow-on from my post about &lt;a href="http://blog.sbeynon.net/2011/06/oim-11g-spml-client-test.html"&gt;getting the SPML service to work security-wise.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now we're using CXF to send a mod request - including User Defined Fields (UDF). My UDF is TermsAgreement, if you're not sure what to use, I'm not surprised.&lt;br /&gt;&lt;br /&gt;In API code, if it's Thor API you need to use USR_UDF_ATTRIBNAME.. if it's Oracle API you need to use exactly as appears on User Configuration -&gt; User Attributes tab; in the "Attribute Name" column.&lt;br /&gt;&lt;br /&gt;Also verify with what's in your OIM metadata/iam-features-requestactions/model-data/ModifyUserDataset.xml - the value of what you set for AttributeReference name="YourAttributeName"&lt;br /&gt;&lt;br /&gt;Also, it doesn't seem to love spaces. &lt;br /&gt;&lt;br /&gt;The full source project: &lt;a href="http://wikisend.com/download/608008/spmlclient-11.1.1.5.cxf.jar "&gt;http://wikisend.com/download/608008/spmlclient-11.1.1.5.cxf.jar &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;private static final QName SERVICE_NAME = new QName("http://xmlns.oracle.com/idm/identity/webservice/SPMLService",&lt;br /&gt;   "SPMLService");&lt;br /&gt;&lt;br /&gt; public static void main(String args[]) throws Exception {&lt;br /&gt; &lt;br /&gt;  URL wsdlURL = new URL("http://localhost:14000/spml-xsd/SPMLService?wsdl");&lt;br /&gt;  // URL wsdlURL = SPMLService.WSDL_LOCATION;&lt;br /&gt;&lt;br /&gt;  SPMLService ss = new SPMLService(wsdlURL, SERVICE_NAME);&lt;br /&gt;  SPMLRequestPortType port = ss.getSPMLServiceProviderSoap();&lt;br /&gt;&lt;br /&gt;  Map&lt;String, Object&gt; ctx = ((BindingProvider) port).getRequestContext();&lt;br /&gt;  ctx.put("ws-security.username", "xelsysadm");&lt;br /&gt;  ctx.put("ws-security.password", "the password");&lt;br /&gt;&lt;br /&gt;  // adding logging&lt;br /&gt;  Client client = ClientProxy.getClient(port);&lt;br /&gt;  client.getInInterceptors().add(new LoggingInInterceptor());&lt;br /&gt;  client.getOutInterceptors().add(new LoggingOutInterceptor());&lt;br /&gt;&lt;br /&gt;  ServiceHeaderType serviceHeader = new ServiceHeaderType();&lt;br /&gt;&lt;br /&gt;  System.out.println("Invoking spmlModifyRequest...");&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ModifyRequestType modifyBody = new oracle.iam.wsschema.model.spmlv2.core.ModifyRequestType();&lt;br /&gt; &lt;br /&gt;  java.util.List&lt;oracle.iam.wsschema.model.spmlv2.core.CapabilityDataType&gt; modCapData = new java.util.ArrayList&lt;oracle.iam.wsschema.model.spmlv2.core.CapabilityDataType&gt;();&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.CapabilityDataType modCap = new oracle.iam.wsschema.model.spmlv2.core.CapabilityDataType();&lt;br /&gt;  java.util.List&lt;java.lang.Object&gt; modCapAny = new java.util.ArrayList&lt;java.lang.Object&gt;();&lt;br /&gt;  modCap.getAny().addAll(modCapAny);&lt;br /&gt;  modCap.setMustUnderstand(Boolean.TRUE);&lt;br /&gt;  modCap.setCapabilityURI("urn:oasis:names:tc:SPML:2:0:reference");&lt;br /&gt;  modCapData.add(modCap);&lt;br /&gt;  modifyBody.getCapabilityData().addAll(modCapData);&lt;br /&gt;  modifyBody.setRequestID("RequestID-763892610");&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ExecutionModeType async = oracle.iam.wsschema.model.spmlv2.core.ExecutionModeType.ASYNCHRONOUS;&lt;br /&gt;  modifyBody.setExecutionMode(async);&lt;br /&gt;  modifyBody.setLocale("en");&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.PSOIdentifierType modifyBodyPsoID = new oracle.iam.wsschema.model.spmlv2.core.PSOIdentifierType();&lt;br /&gt;&lt;br /&gt;  java.util.List&lt;java.lang.Object&gt; modifyBodyPsoIDAny = new java.util.ArrayList&lt;java.lang.Object&gt;();&lt;br /&gt;  java.lang.Object modifyBodyPsoIDAnyVal1 = null;&lt;br /&gt;  modifyBodyPsoIDAny.add(modifyBodyPsoIDAnyVal1);&lt;br /&gt;  modifyBodyPsoID.getAny().addAll(modifyBodyPsoIDAny);&lt;br /&gt;  modifyBodyPsoID.setID("identity:6C9B96E99FC8DC32E040E50A3D5252F5");&lt;br /&gt;&lt;br /&gt;  java.util.List&lt;oracle.iam.wsschema.model.spmlv2.core.ModificationType&gt; mods = new java.util.ArrayList&lt;oracle.iam.wsschema.model.spmlv2.core.ModificationType&gt;();&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ModificationType modType = new oracle.iam.wsschema.model.spmlv2.core.ModificationType();&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.SelectionType component = new oracle.iam.wsschema.model.spmlv2.core.SelectionType();&lt;br /&gt;  java.util.List&lt;java.lang.Object&gt; componentAny = new java.util.ArrayList&lt;java.lang.Object&gt;();&lt;br /&gt;  component.getAny().addAll(componentAny);&lt;br /&gt;  java.util.List&lt;oracle.iam.wsschema.model.spmlv2.core.NamespacePrefixMappingType&gt; componentNamespacePrefixMap = new java.util.ArrayList&lt;oracle.iam.wsschema.model.spmlv2.core.NamespacePrefixMappingType&gt;();&lt;br /&gt;  component.getNamespacePrefixMap().addAll(componentNamespacePrefixMap);&lt;br /&gt;  component.setPath("/identity");&lt;br /&gt;  component.setNamespaceURI("http://www.w3.org/TR/xpath20");&lt;br /&gt;  modType.setComponent(component);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.ProvisioningObjectType modsData = new oracle.iam.wsschema.model.common.pso.ProvisioningObjectType();&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.Identity idAttribs = new oracle.iam.wsschema.model.common.pso.Identity();&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.UnboundedAttributes unboundedIdAttribs = new oracle.iam.wsschema.model.common.pso.UnboundedAttributes();&lt;br /&gt;&lt;br /&gt;                // Must use these unbounded attributes for UDFs.&lt;br /&gt;  java.util.List&lt;oracle.iam.wsschema.model.common.pso.DsmlAttr&gt; modsDataIdentityAttributesAttr = new java.util.ArrayList&lt;oracle.iam.wsschema.model.common.pso.DsmlAttr&gt;();&lt;br /&gt;  DsmlAttr udfAttr = new DsmlAttr();&lt;br /&gt;  udfAttr.setName("TermsAgreement");&lt;br /&gt;  udfAttr.getValue().add("1.0");&lt;br /&gt;  modsDataIdentityAttributesAttr.add(udfAttr);&lt;br /&gt;  unboundedIdAttribs.getAttr().addAll(modsDataIdentityAttributesAttr);&lt;br /&gt;  idAttribs.setAttributes(unboundedIdAttribs);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                // Standard attributes for SPML modifications follows.&lt;br /&gt;  idAttribs.setActiveEndDate(javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(&lt;br /&gt;    "2011-06-14T16:07:20.498-04:00"));&lt;br /&gt;  idAttribs.setActiveStartDate(javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(&lt;br /&gt;    "2011-06-14T16:07:20.514-04:00"));&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.MultiValuedString deptNum = new oracle.iam.wsschema.model.common.pso.MultiValuedString();&lt;br /&gt;  java.util.List&lt;java.lang.String&gt; deptNumValue = new java.util.ArrayList&lt;java.lang.String&gt;();&lt;br /&gt;  deptNumValue.add("12345");&lt;br /&gt;  deptNum.getValue().addAll(deptNumValue);&lt;br /&gt;  idAttribs.setDepartmentNumber(deptNum);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.MultiValuedString firstName = new oracle.iam.wsschema.model.common.pso.MultiValuedString();&lt;br /&gt;  java.util.List&lt;java.lang.String&gt; firstNameValue = new java.util.ArrayList&lt;java.lang.String&gt;();&lt;br /&gt;  firstNameValue.add("Hello");&lt;br /&gt;  firstName.getValue().addAll(firstNameValue);&lt;br /&gt;  idAttribs.setGivenName(firstName);&lt;br /&gt;&lt;br /&gt;  idAttribs.setHireDate(javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(&lt;br /&gt;    "2011-06-14T16:07:20.514-04:00"));&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.MultiValuedString mail = new oracle.iam.wsschema.model.common.pso.MultiValuedString();&lt;br /&gt;  java.util.List&lt;java.lang.String&gt; mailValue = new java.util.ArrayList&lt;java.lang.String&gt;();&lt;br /&gt;  mail.getValue().addAll(mailValue);&lt;br /&gt;  idAttribs.setMail(mail);&lt;br /&gt;&lt;br /&gt;  idAttribs.setMiddleName("MiddleName");&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.MultiValuedBinary passwd = new oracle.iam.wsschema.model.common.pso.MultiValuedBinary();&lt;br /&gt;  java.util.List&lt;byte[]&gt; passwdValue = new java.util.ArrayList&lt;byte[]&gt;();&lt;br /&gt;  passwdValue.add("Testing123!".getBytes());&lt;br /&gt;  passwd.getValue().addAll(passwdValue);&lt;br /&gt;  idAttribs.setPassword(passwd);&lt;br /&gt;&lt;br /&gt;  idAttribs.setPreferredLanguage("fr");&lt;br /&gt;&lt;br /&gt;  idAttribs.setUserType("NONW");&lt;br /&gt;&lt;br /&gt;  modsData.setIdentity(idAttribs);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.common.pso.Member modsDataMember = new oracle.iam.wsschema.model.common.pso.Member();&lt;br /&gt;  // Entity ID / USR_KEY from OIM&lt;br /&gt;  modsDataMember.setIdentityPSOID("3");&lt;br /&gt;&lt;br /&gt;  modsData.setMember(modsDataMember);&lt;br /&gt;  modType.setData(modsData);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ModificationModeType modTypeModificationMode = oracle.iam.wsschema.model.spmlv2.core.ModificationModeType.REPLACE;&lt;br /&gt;  modType.setModificationMode(modTypeModificationMode);&lt;br /&gt;  mods.add(modType);&lt;br /&gt;  modifyBody.getModification().addAll(mods);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ReturnDataType modifyBodyReturnData = oracle.iam.wsschema.model.spmlv2.core.ReturnDataType.DATA;&lt;br /&gt;  modifyBody.setReturnData(modifyBodyReturnData);&lt;br /&gt;&lt;br /&gt;  oracle.iam.wsschema.model.spmlv2.core.ModifyResponseType modReturn = port.spmlModifyRequest(modifyBody,&lt;br /&gt;    serviceHeader);&lt;br /&gt;  System.out.println("spmlModifyRequest.result=" + modReturn);&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And since some people are assembling the requests in other clients, here's an example of the request by the above code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;soap:Envelope xmlns:soap=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;soap:Header&amp;gt;&lt;br /&gt;    &amp;lt;wsse:Security soap:mustUnderstand=&amp;quot;1&amp;quot; xmlns:wsse=&amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;wsse:UsernameToken xmlns:wsu=&amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&amp;quot; wsu:Id=&amp;quot;UsernameToken-1&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;wsse:Username&amp;gt;xelsysadm&amp;lt;/wsse:Username&amp;gt;&lt;br /&gt;        &amp;lt;wsse:Password Type=&amp;quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText&amp;quot;&amp;gt;the password&amp;lt;/wsse:Password&amp;gt;&lt;br /&gt;      &amp;lt;/wsse:UsernameToken&amp;gt;&lt;br /&gt;    &amp;lt;/wsse:Security&amp;gt;&lt;br /&gt;    &amp;lt;ServiceHeader xmlns:ns9=&amp;quot;http://xmlns.oracle.com/idm/identity/OperationData&amp;quot; xmlns:ns8=&amp;quot;urn:oasis:names:tc:SPML:2:0:reference&amp;quot; xmlns:ns7=&amp;quot;urn:oasis:names:tc:SPML:2:0:suspend&amp;quot; xmlns:ns6=&amp;quot;http://xmlns.oracle.com/idm/identity/PSO&amp;quot; xmlns:ns5=&amp;quot;http://xmlns.oracle.com/idm/identity/spmlv2custom/Username&amp;quot; xmlns:ns4=&amp;quot;urn:oasis:names:tc:SPML:2:0:password&amp;quot; xmlns:ns3=&amp;quot;urn:oasis:names:tc:SPML:2:0:async&amp;quot; xmlns:ns2=&amp;quot;urn:oasis:names:tc:SPML:2:0&amp;quot; xmlns=&amp;quot;urn:names:spml:ws:header&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/soap:Header&amp;gt;&lt;br /&gt;  &amp;lt;soap:Body&amp;gt;&lt;br /&gt;    &amp;lt;ns2:modifyRequest xmlns=&amp;quot;urn:names:spml:ws:header&amp;quot; xmlns:ns2=&amp;quot;urn:oasis:names:tc:SPML:2:0&amp;quot; xmlns:ns3=&amp;quot;urn:oasis:names:tc:SPML:2:0:async&amp;quot; xmlns:ns4=&amp;quot;urn:oasis:names:tc:SPML:2:0:password&amp;quot; xmlns:ns5=&amp;quot;http://xmlns.oracle.com/idm/identity/spmlv2custom/Username&amp;quot; xmlns:ns6=&amp;quot;http://xmlns.oracle.com/idm/identity/PSO&amp;quot; xmlns:ns7=&amp;quot;urn:oasis:names:tc:SPML:2:0:suspend&amp;quot; xmlns:ns8=&amp;quot;urn:oasis:names:tc:SPML:2:0:reference&amp;quot; xmlns:ns9=&amp;quot;http://xmlns.oracle.com/idm/identity/OperationData&amp;quot; returnData=&amp;quot;data&amp;quot; requestID=&amp;quot;RequestID-763892610&amp;quot; executionMode=&amp;quot;asynchronous&amp;quot; locale=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;ns2:capabilityData mustUnderstand=&amp;quot;true&amp;quot; capabilityURI=&amp;quot;urn:oasis:names:tc:SPML:2:0:reference&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;ns2:modification modificationMode=&amp;quot;replace&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;ns2:component path=&amp;quot;/identity&amp;quot; namespaceURI=&amp;quot;http://www.w3.org/TR/xpath20&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;ns2:data&amp;gt;&lt;br /&gt;          &amp;lt;ns6:identity&amp;gt;&lt;br /&gt;            &amp;lt;ns6:attributes&amp;gt;&lt;br /&gt;              &amp;lt;ns6:attr name=&amp;quot;TermsAgreement&amp;quot;&amp;gt;&lt;br /&gt;                &amp;lt;ns6:value&amp;gt;1.0&amp;lt;/ns6:value&amp;gt;&lt;br /&gt;              &amp;lt;/ns6:attr&amp;gt;&lt;br /&gt;            &amp;lt;/ns6:attributes&amp;gt;&lt;br /&gt;            &amp;lt;ns6:activeEndDate&amp;gt;2011-06-14T16:07:20.498-04:00&amp;lt;/ns6:activeEndDate&amp;gt;&lt;br /&gt;            &amp;lt;ns6:activeStartDate&amp;gt;2011-06-14T16:07:20.514-04:00&amp;lt;/ns6:activeStartDate&amp;gt;&lt;br /&gt;            &amp;lt;ns6:departmentNumber&amp;gt;&lt;br /&gt;              &amp;lt;ns6:value&amp;gt;12345&amp;lt;/ns6:value&amp;gt;&lt;br /&gt;            &amp;lt;/ns6:departmentNumber&amp;gt;&lt;br /&gt;            &amp;lt;ns6:givenName&amp;gt;&lt;br /&gt;              &amp;lt;ns6:value&amp;gt;Hello&amp;lt;/ns6:value&amp;gt;&lt;br /&gt;            &amp;lt;/ns6:givenName&amp;gt;&lt;br /&gt;            &amp;lt;ns6:hireDate&amp;gt;2011-06-14T16:07:20.514-04:00&amp;lt;/ns6:hireDate&amp;gt;&lt;br /&gt;            &amp;lt;ns6:mail/&amp;gt;&lt;br /&gt;            &amp;lt;ns6:middleName&amp;gt;MiddleName&amp;lt;/ns6:middleName&amp;gt;&lt;br /&gt;            &amp;lt;ns6:password&amp;gt;&lt;br /&gt;              &amp;lt;ns6:value&amp;gt;VGVzdGluZzEyMyE=&amp;lt;/ns6:value&amp;gt;&lt;br /&gt;            &amp;lt;/ns6:password&amp;gt;&lt;br /&gt;            &amp;lt;ns6:preferredLanguage&amp;gt;fr&amp;lt;/ns6:preferredLanguage&amp;gt;&lt;br /&gt;            &amp;lt;ns6:userType&amp;gt;NONW&amp;lt;/ns6:userType&amp;gt;&lt;br /&gt;          &amp;lt;/ns6:identity&amp;gt;&lt;br /&gt;          &amp;lt;ns6:member&amp;gt;&lt;br /&gt;            &amp;lt;ns6:identityPSOID&amp;gt;3&amp;lt;/ns6:identityPSOID&amp;gt;&lt;br /&gt;          &amp;lt;/ns6:member&amp;gt;&lt;br /&gt;        &amp;lt;/ns2:data&amp;gt;&lt;br /&gt;      &amp;lt;/ns2:modification&amp;gt;&lt;br /&gt;    &amp;lt;/ns2:modifyRequest&amp;gt;&lt;br /&gt;  &amp;lt;/soap:Body&amp;gt;&lt;br /&gt;&amp;lt;/soap:Envelope&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4938675272766638513?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4938675272766638513' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4938675272766638513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4938675272766638513'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/12/oim-11g-spml-modify-request.html' title='OIM 11g SPML Modify Request'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7704129616363846573</id><published>2011-11-15T10:48:00.000-05:00</published><updated>2011-11-15T10:48:15.409-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>The Logging Mess</title><content type='html'>Fantastic article (because we both came to the same conclusion) about logging options in JEE.&lt;br /&gt;&lt;br /&gt;Also, oracle weblogic logging is the worst thing I have ever seen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7704129616363846573?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://techblog.bozho.net/?p=503' title='The Logging Mess'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7704129616363846573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7704129616363846573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7704129616363846573'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/11/logging-mess.html' title='The Logging Mess'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7159010608162688744</id><published>2011-06-29T10:51:00.002-04:00</published><updated>2011-12-15T12:22:26.605-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>OIM 11g SPML Client test</title><content type='html'>OIM (Oracle Identity Manager) 11g has a default security policy attached to the spml-xsd SOAP endpoint that is overly difficult to deal with.&lt;br /&gt;&lt;br /&gt;The default endpoint policy is oracle/wss11_saml_or_username_token \&lt;br /&gt;with_message_protection_service_policy &lt;br /&gt;&lt;br /&gt;However, the "message protection" requirement is not configured with a signing certificate. &lt;br /&gt;&lt;br /&gt;Detach this policy and attach: "oracle/wss_username_token_service_policy" and restart oim.&lt;br /&gt;&lt;br /&gt;Creating a client with JAX-WS or CXF is super easy now! Using the Eclipse "new webservice client wizard" and the Apache CXF runtime, enter WSDL and generate. &lt;br /&gt;&lt;br /&gt;Add the "ws-security.username" and credentials to the client class, and it starts to look much easier.&lt;br /&gt;&lt;br /&gt;If you want the full CXF generated source, the jar is:&lt;br /&gt;&lt;a href="http://wikisend.com/download/608008/spmlclient-11.1.1.5.cxf.jar "&gt;http://wikisend.com/download/608008/spmlclient-11.1.1.5.cxf.jar &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;public class TestClass {&lt;br /&gt;&lt;br /&gt;private static final QName SERVICE_NAME = new QName(&lt;br /&gt;   "http://xmlns.oracle.com/idm/identity/webservice/SPMLService",&lt;br /&gt;   "SPMLService");&lt;br /&gt;&lt;br /&gt; public static void main(String args[]) throws Exception {&lt;br /&gt;  URL wsdlURL = new URL("http://your-identity-host/spml-xsd/SPMLService?wsdl");&lt;br /&gt;&lt;br /&gt;  SPMLService ss = new SPMLService(wsdlURL, SERVICE_NAME);&lt;br /&gt;  SPMLRequestPortType port = ss.getSPMLServiceProviderSoap();&lt;br /&gt;&lt;br /&gt;  Map&lt;String, Object&gt; ctx = ((BindingProvider) port).getRequestContext();&lt;br /&gt;  ctx.put("ws-security.username", "xelsysadm");&lt;br /&gt;  ctx.put("ws-security.password", "the password");&lt;br /&gt;&lt;br /&gt;  ServiceHeaderType serviceHeader = new ServiceHeaderType();&lt;br /&gt;&lt;br /&gt;  ValidateUsernameRequestType validateUser = new ValidateUsernameRequestType();&lt;br /&gt;  validateUser.setUsername("sbeynon");&lt;br /&gt;  ValidateUsernameResponseType retValUser = port&lt;br /&gt;    .spmlValidateUsernameRequest(validateUser, serviceHeader);&lt;br /&gt;  System.out.println("spml validate user =" + retValUser.isValid());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;There's a follow on to this post, showing an &lt;a href="http://blog.sbeynon.net/2011/12/oim-11g-spml-modify-request.html"&gt;example SPML Modify Request&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7159010608162688744?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7159010608162688744' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7159010608162688744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7159010608162688744'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/06/oim-11g-spml-client-test.html' title='OIM 11g SPML Client test'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5176926868801265543</id><published>2011-06-06T17:50:00.001-04:00</published><updated>2011-06-06T17:50:45.475-04:00</updated><title type='text'>2011 fencing, fire swords</title><content type='html'>&lt;div style="padding: 0; overflow: hidden; margin: 0; width: 500px;"&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806147768/in/set-72157626777571917/" title="DSC_0578" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3066/5806147768_52e9e7199f_s.jpg" alt="DSC_0578" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805515893/in/set-72157626777571917/" title="DSC_0421" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5225/5805515893_074c322cb2_s.jpg" alt="DSC_0421" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806078178/in/set-72157626777571917/" title="DSC_0425" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2495/5806078178_b97158c890_s.jpg" alt="DSC_0425" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805519315/in/set-72157626777571917/" title="DSC_0426" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2526/5805519315_c96f45fb2f_s.jpg" alt="DSC_0426" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805520565/in/set-72157626777571917/" title="DSC_0428" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5072/5805520565_555b34646a_s.jpg" alt="DSC_0428" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805521895/in/set-72157626777571917/" title="DSC_0429" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5189/5805521895_537e837140_s.jpg" alt="DSC_0429" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806083044/in/set-72157626777571917/" title="DSC_0430" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5106/5806083044_c7194a8d26_s.jpg" alt="DSC_0430" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806083752/in/set-72157626777571917/" title="DSC_0431" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2503/5806083752_0347845baa_s.jpg" alt="DSC_0431" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805524897/in/set-72157626777571917/" title="DSC_0432" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3302/5805524897_1cbde5aae2_s.jpg" alt="DSC_0432" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805526375/in/set-72157626777571917/" title="DSC_0436" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2004/5805526375_3b8948eeae_s.jpg" alt="DSC_0436" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805527735/in/set-72157626777571917/" title="DSC_0438" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2164/5805527735_8a479b16ce_s.jpg" alt="DSC_0438" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806090558/in/set-72157626777571917/" title="DSC_0443" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2517/5806090558_cff0ba9b31_s.jpg" alt="DSC_0443" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805532195/in/set-72157626777571917/" title="DSC_0449" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2714/5805532195_12e2f54e56_s.jpg" alt="DSC_0449" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806093552/in/set-72157626777571917/" title="DSC_0453" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5027/5806093552_3b1b701ce8_s.jpg" alt="DSC_0453" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805535695/in/set-72157626777571917/" title="DSC_0455" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5240/5805535695_ab9d0e2bbf_s.jpg" alt="DSC_0455" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805576087/in/set-72157626777571917/" title="DSC_0469" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5226/5805576087_653db17ff9_s.jpg" alt="DSC_0469" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806138624/in/set-72157626777571917/" title="DSC_0472" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2062/5806138624_54904bacbd_s.jpg" alt="DSC_0472" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805560879/in/set-72157626777571917/" title="DSC_0476" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5101/5805560879_12346e2d71_s.jpg" alt="DSC_0476" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806140578/in/set-72157626777571917/" title="DSC_0481" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5073/5806140578_8758466038_s.jpg" alt="DSC_0481" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805584557/in/set-72157626777571917/" title="DSC_0489" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2339/5805584557_b2c6896c39_s.jpg" alt="DSC_0489" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805585421/in/set-72157626777571917/" title="DSC_0492" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3236/5805585421_dcae7ff7ed_s.jpg" alt="DSC_0492" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806142600/in/set-72157626777571917/" title="DSC_0500" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5221/5806142600_41a0dff4f8_s.jpg" alt="DSC_0500" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5806123140/in/set-72157626777571917/" title="DSC_0503" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5152/5806123140_bafe48fba8_s.jpg" alt="DSC_0503" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5805583683/in/set-72157626777571917/" title="DSC_0533" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3166/5805583683_54aa6e4283_s.jpg" alt="DSC_0533" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 5px"&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/syberchic/sets/72157626777571917/"&gt;2011 fencing, fire swords&lt;/a&gt;, a set on Flickr.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;how cool is it when you turn 30 and throw a keg/fencing party? 30 straight rounds.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5176926868801265543?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5176926868801265543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5176926868801265543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5176926868801265543'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/06/2011-fencing-fire-swords.html' title='2011 fencing, fire swords'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3066/5806147768_52e9e7199f_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4938082756956289890</id><published>2011-05-08T19:32:00.001-04:00</published><updated>2011-05-08T19:32:52.683-04:00</updated><title type='text'>2011 May - Toronto Mini Maker Faire</title><content type='html'>&lt;div style="padding: 0; overflow: hidden; margin: 0; width: 500px;"&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696598703/in/set-72157626544101071/" title="On or way !" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2581/5696598703_044970197d_s.jpg" alt="On or way !" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696660125/in/set-72157626544101071/" title="first decent day of spring!" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5106/5696660125_c605d95c82_s.jpg" alt="first decent day of spring!" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697237208/in/set-72157626544101071/" title="i like the trees" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5141/5697237208_177c4cac3c_s.jpg" alt="i like the trees" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697238622/in/set-72157626544101071/" title="down toward the don valley" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2694/5697238622_44e944a3d3_s.jpg" alt="down toward the don valley" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697240228/in/set-72157626544101071/" title="wander out of the ravine to the brickworks" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2338/5697240228_7de38d8ae0_s.jpg" alt="wander out of the ravine to the brickworks" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697241688/in/set-72157626544101071/" title="brickworks exterior" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5061/5697241688_452391f744_s.jpg" alt="brickworks exterior" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697243150/in/set-72157626544101071/" title="bucket o' waffle batter" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5307/5697243150_069a52ce5e_s.jpg" alt="bucket o' waffle batter" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697244622/in/set-72157626544101071/" title="Ontario Science Centre - represent" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2568/5697244622_d683bcd2cc_s.jpg" alt="Ontario Science Centre - represent" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696600257/in/set-72157626544101071/" title="Foulab - of Montreal" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5063/5696600257_33b0dfe8be_s.jpg" alt="Foulab - of Montreal" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697177536/in/set-72157626544101071/" title="blasting machine game from Foulab - of Montreal" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2616/5697177536_44d8d3e3ca_s.jpg" alt="blasting machine game from Foulab - of Montreal" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696604781/in/set-72157626544101071/" title="Foulab - of Montreal" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5026/5696604781_30a1880277_s.jpg" alt="Foulab - of Montreal" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696670199/in/set-72157626544101071/" title="DYAD by ][ - in action" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2577/5696670199_70e3134690_s.jpg" alt="DYAD by ][ - in action" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696671919/in/set-72157626544101071/" title="putt putt" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3433/5696671919_b2c9489e08_s.jpg" alt="putt putt" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696673437/in/set-72157626544101071/" title="DYAD - dismount" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5142/5696673437_73a3f1f90d_s.jpg" alt="DYAD - dismount" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697250844/in/set-72157626544101071/" title="DYAD by ][" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5190/5697250844_45c6910803_s.jpg" alt="DYAD by ][" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696607663/in/set-72157626544101071/" title="the man behind the DYAD game" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5102/5696607663_d2d94a212a_s.jpg" alt="the man behind the DYAD game" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697252416/in/set-72157626544101071/" title="brickworks kiln tunnels" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5226/5697252416_bdd2ddc334_s.jpg" alt="brickworks kiln tunnels" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697254104/in/set-72157626544101071/" title="brian tao - adjusting something :)" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm4.static.flickr.com/3211/5697254104_33ce513726_s.jpg" alt="brian tao - adjusting something :)" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697185232/in/set-72157626544101071/" title="DSC_0278" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2670/5697185232_7cddef7c7a_s.jpg" alt="DSC_0278" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696610625/in/set-72157626544101071/" title="ddimit - 3D printed design" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2602/5696610625_d56319a514_s.jpg" alt="ddimit - 3D printed design" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696613727/in/set-72157626544101071/" title="DSC_0281" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2437/5696613727_c3255b4494_s.jpg" alt="DSC_0281" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5696614639/in/set-72157626544101071/" title="Interaccess" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2365/5696614639_c665a8bb6f_s.jpg" alt="Interaccess" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697192276/in/set-72157626544101071/" title="DSC_0283" style="display: block; padding: 0 10px 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm6.static.flickr.com/5070/5697192276_20fcda2fbc_s.jpg" alt="DSC_0283" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;a href="http://www.flickr.com/photos/syberchic/5697193852/in/set-72157626544101071/" title="russel zeit - chair" style="display: block; padding: 0 0 10px 0; width: 75px; height: 75px; float: left;"&gt;&lt;img src="http://farm3.static.flickr.com/2256/5697193852_73dc824ecc_s.jpg" alt="russel zeit - chair" style="border:none; margin: 0; padding: 0; width: 75px; height: 75px;"/&gt;&lt;/a&gt;&lt;br clear="all"/&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 5px"&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/syberchic/sets/72157626544101071/"&gt;2011 May - Toronto Mini Maker Faire&lt;/a&gt;, a set on Flickr.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;First Toronto Mini Maker Faire was a bunch of fun and awesome. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4938082756956289890?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4938082756956289890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4938082756956289890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4938082756956289890'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/05/2011-may-toronto-mini-maker-faire.html' title='2011 May - Toronto Mini Maker Faire'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2581/5696598703_044970197d_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1212427594324488175</id><published>2011-04-07T16:38:00.000-04:00</published><updated>2011-04-07T16:38:43.039-04:00</updated><title type='text'>C code - a mixup for Password Based Key Derivation 2 (PBKDF2)</title><content type='html'>PolarSSL is a fantastic (simple and modular) C library for all your crypto needs, except one little thing I needed. PolarSSL being easy and cross platform, I grabbed the gnulib equivalent - changed the sha1 call - and it slotted in easily!&lt;br /&gt;&lt;br /&gt;I love when things are easy!&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#include &amp;quot;polarssl/sha1.h&amp;quot;&lt;br /&gt;&lt;br /&gt;// Note: hLen, dkLen, l, r, T, F, etc. are horrible names for&lt;br /&gt;// variables and functions0, but they are used in RFC 2898 to describe&lt;br /&gt;// the PBKDF2 algorithm, which improves validation of the&lt;br /&gt;// code vs. the RFC.&lt;br /&gt;//&lt;br /&gt;// dklen is expressed in bytes. (16 for a 128-bit key)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; ** Implement PKCS#5 PBKDF2 as per RFC 2898.  The PRF to use is hard&lt;br /&gt;   coded to be HMAC-SHA1.  Inputs are the password P of length PLEN,&lt;br /&gt;   the salt S of length SLEN, the iteration counter C (&amp;gt; 0), and the&lt;br /&gt;   desired derived output length DKLEN.  Output buffer is DK which&lt;br /&gt;   must have room for at least DKLEN octets.  The output buffer will&lt;br /&gt;   be filled with the derived data. &lt;br /&gt; *&lt;br /&gt; *  PBKDF2 (P, S, c, dkLen)&lt;br /&gt; *&lt;br /&gt; *  Options:        PRF        underlying pseudorandom function (hLen&lt;br /&gt; *                             denotes the length in octets of the&lt;br /&gt; *                             pseudorandom function output)&lt;br /&gt; *&lt;br /&gt; *  Input:          P          password, an octet string (ASCII or UTF-8)&lt;br /&gt; *                  S          salt, an octet string&lt;br /&gt; *                  c          iteration count, a positive integer&lt;br /&gt; *                  dkLen      intended length in octets of the derived&lt;br /&gt; *                             key, a positive integer, at most&lt;br /&gt; *                             (2^32 - 1) * hLen&lt;br /&gt; *&lt;br /&gt; *  Output:         DK         derived key, a dkLen-octet string&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;int ok_pbkdf2_sha1 (const char *P, int Plen,&lt;br /&gt;  const char *S, int Slen,&lt;br /&gt;  unsigned int c,&lt;br /&gt;  char *DK, size_t dkLen)&lt;br /&gt;{&lt;br /&gt;  unsigned int hLen = 20;&lt;br /&gt;  char U[20];&lt;br /&gt;  char T[20];&lt;br /&gt;  unsigned int u;&lt;br /&gt;  unsigned int l;&lt;br /&gt;  unsigned int r;&lt;br /&gt;  unsigned int i;&lt;br /&gt;  unsigned int k;&lt;br /&gt;//  int rc;&lt;br /&gt;  char *tmp;&lt;br /&gt;  size_t tmplen = Slen + 4;&lt;br /&gt;  /*&lt;br /&gt;   *     2. Let l be the number of hLen-octet blocks in the derived key,&lt;br /&gt;   *        rounding up, and let r be the number of octets in the last&lt;br /&gt;   *        block:&lt;br /&gt;   *&lt;br /&gt;   *                  l = CEIL (dkLen / hLen) ,&lt;br /&gt;   *                  r = dkLen - (l - 1) * hLen .&lt;br /&gt;   *&lt;br /&gt;   *        Here, CEIL (x) is the &amp;quot;ceiling&amp;quot; function, i.e. the smallest&lt;br /&gt;   *        integer greater than, or equal to, x.&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;  l = ((dkLen - 1) / hLen) + 1;&lt;br /&gt;  r = dkLen - (l - 1) * hLen;&lt;br /&gt;&lt;br /&gt;  /*&lt;br /&gt;   *     3. For each block of the derived key apply the function F defined&lt;br /&gt;   *        below to the password P, the salt S, the iteration count c, and&lt;br /&gt;   *        the block index to compute the block:&lt;br /&gt;   *&lt;br /&gt;   *                  T_1 = F (P, S, c, 1) ,&lt;br /&gt;   *                  T_2 = F (P, S, c, 2) ,&lt;br /&gt;   *                  ...&lt;br /&gt;   *                  T_l = F (P, S, c, l) ,&lt;br /&gt;   *&lt;br /&gt;   *        where the function F is defined as the exclusive-or sum of the&lt;br /&gt;   *        first c iterates of the underlying pseudorandom function PRF&lt;br /&gt;   *        applied to the password P and the concatenation of the salt S&lt;br /&gt;   *        and the block index i:&lt;br /&gt;   *&lt;br /&gt;   *                  F (P, S, c, i) = U_1 \xor U_2 \xor ... \xor U_c&lt;br /&gt;   *&lt;br /&gt;   *        where&lt;br /&gt;   *&lt;br /&gt;   *                  U_1 = PRF (P, S || INT (i)) ,&lt;br /&gt;   *                  U_2 = PRF (P, U_1) ,&lt;br /&gt;   *                  ...&lt;br /&gt;   *                  U_c = PRF (P, U_{c-1}) .&lt;br /&gt;   *&lt;br /&gt;   *        Here, INT (i) is a four-octet encoding of the integer i, most&lt;br /&gt;   *        significant octet first.&lt;br /&gt;   *&lt;br /&gt;   *     4. Concatenate the blocks and extract the first dkLen octets to&lt;br /&gt;   *        produce a derived key DK:&lt;br /&gt;   *&lt;br /&gt;   *                  DK = T_1 || T_2 ||  ...  || T_l&amp;lt;0..r-1&amp;gt;&lt;br /&gt;   *&lt;br /&gt;   *     5. Output the derived key DK.&lt;br /&gt;   *&lt;br /&gt;   *  Note. The construction of the function F follows a &amp;quot;belt-and-&lt;br /&gt;   *  suspenders&amp;quot; approach. The iterates U_i are computed recursively to&lt;br /&gt;   *  remove a degree of parallelism from an opponent; they are exclusive-&lt;br /&gt;   *  ored together to reduce concerns about the recursion degenerating&lt;br /&gt;   *  into a small set of values.&lt;br /&gt;   *&lt;br /&gt;   */&lt;br /&gt;&lt;br /&gt;  tmp = malloc (tmplen);&lt;br /&gt;  if (tmp == NULL)&lt;br /&gt;    return -1;&lt;br /&gt;&lt;br /&gt;  memcpy (tmp, S, Slen);&lt;br /&gt;&lt;br /&gt;  for (i = 1; i &amp;lt;= l; i++)&lt;br /&gt;    {&lt;br /&gt;      memset (T, 0, hLen);&lt;br /&gt;&lt;br /&gt;    for (u = 1; u &amp;lt;= c; u++) {&lt;br /&gt;   if (u == 1) {&lt;br /&gt;       tmp[Slen + 0] = (i &amp;amp; 0xff000000) &amp;gt;&amp;gt; 24;&lt;br /&gt;       tmp[Slen + 1] = (i &amp;amp; 0x00ff0000) &amp;gt;&amp;gt; 16;&lt;br /&gt;       tmp[Slen + 2] = (i &amp;amp; 0x0000ff00) &amp;gt;&amp;gt; 8;&lt;br /&gt;       tmp[Slen + 3] = (i &amp;amp; 0x000000ff) &amp;gt;&amp;gt; 0;&lt;br /&gt;&lt;br /&gt;       sha1_hmac (P, Plen, tmp, tmplen, U);&lt;br /&gt;   }&lt;br /&gt;   else {&lt;br /&gt;     sha1_hmac (P, Plen, U, hLen, U);&lt;br /&gt;   }&lt;br /&gt;   for (k = 0; k &amp;lt; hLen; k++) {&lt;br /&gt;     T[k] ^= U[k];&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;      memcpy (DK + (i - 1) * hLen, T, i == l ? r : hLen);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  free (tmp);&lt;br /&gt;&lt;br /&gt;  return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int test_PBKDF2()&lt;br /&gt;{ &lt;br /&gt; // 128 bit key (16 bytes ) &lt;br /&gt; unsigned int dkLen = 16;&lt;br /&gt; // number of iterations for key creation&lt;br /&gt; unsigned int iterations = 4096;&lt;br /&gt;&lt;br /&gt; int i,j;&lt;br /&gt;    unsigned char *DK;&lt;br /&gt; const char *passwd = &amp;quot;short&amp;quot;;&lt;br /&gt; const char *salt = &amp;quot;an extremely long wordy salt &amp;amp; vinegar chips&amp;quot;;&lt;br /&gt;&lt;br /&gt; // test the polarssl sha1 implementation&lt;br /&gt; //sha1_self_test(1);&lt;br /&gt;&lt;br /&gt; printf(&amp;quot;\n\n****---***---***---***---***---***---****\n\n&amp;quot;);&lt;br /&gt;&lt;br /&gt; // see http://anandam.name/pbkdf2/&lt;br /&gt; // for PBKDF2 Verification&lt;br /&gt;&lt;br /&gt; DK = malloc (dkLen);&lt;br /&gt;&lt;br /&gt; ok_pbkdf2_sha1 (passwd, strlen(passwd), salt, strlen(salt), iterations, DK, dkLen);&lt;br /&gt; printf(&amp;quot;PBKDF2 test  \n&amp;quot;);&lt;br /&gt; printf(&amp;quot;Salted   : %s\n&amp;quot;, salt);&lt;br /&gt; printf(&amp;quot;Password : %s\n&amp;quot;, passwd);&lt;br /&gt; printf(&amp;quot;Iterations : %d\n&amp;quot;, iterations);&lt;br /&gt; printf(&amp;quot;keyByteLen : %d\n&amp;quot;, dkLen);&lt;br /&gt;&lt;br /&gt; printf(&amp;quot;Length   : %d\n&amp;quot;, strlen(DK));&lt;br /&gt;&lt;br /&gt; printf(&amp;quot;Expected : f2c11c3445258d8bf9a44fc3c98e00c6\n&amp;quot;);&lt;br /&gt; printf(&amp;quot;Returned : &amp;quot;);&lt;br /&gt; &lt;br /&gt; for (j = 0; j &amp;lt; (int)dkLen ; j++) {&lt;br /&gt;  printf(&amp;quot;%02x&amp;quot;,DK[j]);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; free(DK);&lt;br /&gt; return 1;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1212427594324488175?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1212427594324488175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1212427594324488175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1212427594324488175'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/04/c-code-mixup-for-password-based-key.html' title='C code - a mixup for Password Based Key Derivation 2 (PBKDF2)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6393945321497251912</id><published>2011-04-05T12:50:00.000-04:00</published><updated>2011-04-05T12:50:17.768-04:00</updated><title type='text'>Solaris SPARC x64 ELF mismatch Oracle JDK fix</title><content type='html'>things that are stupid #168:&lt;br /&gt;&lt;br /&gt;Test command &lt;code&gt;"opatch lsinventory"&lt;/code&gt; fails on 64 bit unless the env variable &lt;code&gt;JVM_D64&lt;/code&gt; is set.&lt;br /&gt;&lt;br /&gt;export JVM_D64=-d64&lt;br /&gt;&lt;br /&gt;Error details: &lt;br /&gt;java.lang.UnsatisfiedLinkError: /xxx/oracle_common/oui/lib/solaris/liboraInstaller.so: ld.so.1: java: fatal: /xxx/oracle_common/oui/lib/solaris/liboraInstaller.so: wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6393945321497251912?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6393945321497251912' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6393945321497251912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6393945321497251912'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/04/solaris-sparc-x64-elf-mismatch-oracle.html' title='Solaris SPARC x64 ELF mismatch Oracle JDK fix'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8392375989452278846</id><published>2011-03-26T23:34:00.001-04:00</published><updated>2011-03-26T23:35:14.138-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Find out which process is on which port (windows)</title><content type='html'>This is something I do all the time in Unix, I have a script :) &lt;br /&gt;&lt;br /&gt;Far less often in windows, so here's a note to self:&lt;br /&gt;&lt;br /&gt;netstat -a -n -o &lt;br /&gt;&lt;br /&gt;tasklist /svc /FI "PID eq 768"&lt;br /&gt;&lt;br /&gt;aside. Why is skype using port 80 ?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8392375989452278846?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8392375989452278846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8392375989452278846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8392375989452278846'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/03/find-out-which-process-is-on-which-port.html' title='Find out which process is on which port (windows)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3260357034059074742</id><published>2011-03-22T13:04:00.000-04:00</published><updated>2011-03-22T13:04:49.638-04:00</updated><title type='text'>Fallout from product amalgamation</title><content type='html'>You'd think the Oracle Identity Manager Admin guide might lead one easily to the path of changing a list of Challenge Questions.. &lt;b&gt;nothing so easy for the monstrous amalgam of products that is Oracle Identity Management 11g&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;Lucky the docs from version nine are still online, and the answer is:&lt;br /&gt;&lt;br /&gt;Design Console -&gt; Administration -&gt; Lookup Definition -&gt; Lookup.WebClient.Questions&lt;br /&gt;&lt;br /&gt;Localization is another matter (properties file in the oim web app directory)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3260357034059074742?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3260357034059074742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3260357034059074742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3260357034059074742'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/03/fallout-from-product-amalgamation.html' title='Fallout from product amalgamation'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5602971326527112298</id><published>2011-03-19T12:40:00.000-04:00</published><updated>2011-03-19T12:40:44.163-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>back from australia - rsa hacked</title><content type='html'>Great news - Australia is still awesome. My family is great, the barrier reef is gorgeous, the blue mountains are amazing and the great ocean road is beautiful - everywhere smells like gum trees and the koalas were literally falling over themselves to be noticed :) hahaha.. not really, they slept, but i did cross the path of one koala in the wild as he moved between the trees and a wild echidna. &lt;br /&gt;&lt;br /&gt;Here's a few shots from the trip (by state):&lt;br /&gt;&lt;a href="https://picasaweb.google.com/syberchic/20110226_qld"&gt;QLD&lt;/a&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/syberchic/20110305_nsw"&gt;NSW&lt;/a&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/syberchic/20110310_vic"&gt;VIC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When I return from vacation there's usually an offensive pile of work waiting.. not so bad this time, but look what i come back to :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.engadget.com/2011/03/18/rsa-hacked-data-exposed-that-could-reduce-the-effectiveness-o/"&gt;RSA hacked&lt;/a&gt; and all the second-factor token generators could be compromised.. how is not clear.&lt;br /&gt;&lt;br /&gt;Using an external, central source for authentication technology, which is shrouded in mystery, doesn't look so good anymore. One seriously organized hack has compromised an authentication technology used by scores of banks and government institutions. &lt;br /&gt;&lt;br /&gt;And what to do now? Use your PIN accompanying the token code and you'll be fine. &lt;br /&gt;&lt;br /&gt;OK, so why pay for &amp; distribute the wee plastic thing if we're only protected by a PIN? Are all the token providers similarly affected?&lt;br /&gt;&lt;br /&gt;Personally, I see second factor implementations as too unwieldy to be effective. Most banks eschew them for a variety of preventative measures. Validation of login source, chaining authentication with knowledge requests, image selection, and preventing key-loggers by using keyboard/number-pad image-clicks - with random arrangement of the buttons!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5602971326527112298?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5602971326527112298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5602971326527112298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5602971326527112298'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2011/03/back-from-australia-rsa-hacked.html' title='back from australia - rsa hacked'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4704714506493021715</id><published>2010-12-16T12:58:00.000-05:00</published><updated>2010-12-16T12:58:31.602-05:00</updated><title type='text'>tis the season</title><content type='html'>An artificial stress has been mandated by the seasonal IT shutdown (change freeze). &lt;br /&gt;&lt;br /&gt;I have been many roles for many projects over the past few weeks, and they all have a similar theme - get things done before the IT department shuts down for several weeks. &lt;br /&gt;&lt;br /&gt;Does it matter what we're "getting done" .. I'm not sure I know anymore.&lt;br /&gt;&lt;br /&gt;As a result, I'm moving from task to task, my TODO list getting longer every day. Things are bound to get sloppy. IMHO, this change-freeze sounds reasonable on paper, but is not the way to maintain a secure and considered project path. Errors and insecurity are bound to jump in. &lt;br /&gt;&lt;br /&gt;On the other hand, in about a week I get a couple of days off. Thank-you Christian majority :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4704714506493021715?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4704714506493021715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4704714506493021715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4704714506493021715'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/12/tis-season.html' title='tis the season'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3235365103342989439</id><published>2010-10-31T15:11:00.002-04:00</published><updated>2010-10-31T15:13:26.845-04:00</updated><title type='text'>firesheep</title><content type='html'>Like anyone working in security, I thought &lt;a href="http://codebutler.com/firesheep"&gt;Firesheep&lt;/a&gt; was fun, cheeky and an important message: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nothing is safe on a public/open wifi network, nothing is safe on http. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I am particularly amused by techcrunch reporting; &lt;blockquote&gt;"Developer Eric Butler has exposed the soft underbelly of the web with his new Firefox extension, Firesheep, which will let you essentially eavesdrop on any open Wi-Fi network and capture users’ cookies."&lt;/blockquote&gt;&lt;br /&gt;Soft underbellies aside; as usual it's up to you, the end user. Most of these sites have a https option which nullifies simple side-jacking security concerns. &lt;br /&gt;&lt;br /&gt;Public/social sites don't care about your security -- what are you thinking putting private information on the internet, right? ;) besides, https is slower.&lt;br /&gt;&lt;br /&gt;The message is (should be), protect yourself - don't complain to facebook if your account is highjacked when you use public networks! As linked in the techcrunch article, you can easily combat firesheep with : &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12714/"&gt;force TLS&lt;/a&gt; firefox add-on.&lt;br /&gt;&lt;br /&gt;(SSL is an implementation of TLS)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3235365103342989439?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://codebutler.com/firesheep' title='firesheep'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3235365103342989439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3235365103342989439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3235365103342989439'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/10/firesheep.html' title='firesheep'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6648156301076731924</id><published>2010-10-19T19:26:00.002-04:00</published><updated>2010-10-19T19:43:22.065-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>PassWindow - cheap and simple authentication</title><content type='html'>I've spent my recent time investigating options for authentication. We used to care how good a password encryption algorithm was, but why bother cracking authentication stores when it's so much easier to obtain credentials or find an unused account with a "default" style P@ssword?&lt;br /&gt;&lt;br /&gt;With the combination of "something you know" and "something that you have" we can begin to determine that 1. There is a person on the other side of the screen and 2. It's the person we expect.&lt;br /&gt;&lt;br /&gt;I'm a big fan of simple. Like one-time-passwords from my days at uni - we were given a dot-matrix printed page of 50 random strings, and crossed them off with each use. It's cheap and effective. Of course, if someone obtains/copies your paper, not so great.&lt;br /&gt;&lt;br /&gt;There's a great new option from Aussie investor Matthew Walker: &lt;a href="http://www.passwindow.com/index.html"&gt;PassWindow&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Basically, your card - credit card, staff ID, etc - has a transparent window with random segments of a old-school 7 segment digit display (think digital clock). &lt;br /&gt;&lt;br /&gt;The authenticating challenge generates complementary segments and asks you to center the card on target corners. You enter the digit(s): Multiple digits or several digits over an interval.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The puzzle pieces have to fit to obtain the secret entry code!&lt;/b&gt; &lt;i&gt;How fun is that?&lt;/i&gt;  &lt;br /&gt;&lt;br /&gt;I can see this being a great choice for banking, but also government IDs - not for authentication, but to provide a validity bit check, for example when you visit a doctor and show your health card.&lt;br /&gt;&lt;br /&gt;The downside to the technology is adding that transparent window might not be that straightforward - most plastic cards are opaque. And if someone has obtained your credentials and copied your card, you'd never know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6648156301076731924?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.abc.net.au/tv/newinventors/txt/s2622746.htm' title='PassWindow - cheap and simple authentication'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6648156301076731924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6648156301076731924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6648156301076731924'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/10/passwindow-cheap-and-simple.html' title='PassWindow - cheap and simple authentication'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-160831702639156996</id><published>2010-06-09T13:55:00.001-04:00</published><updated>2010-06-09T13:56:59.530-04:00</updated><title type='text'>An e-mail: "Site 3 coLaboratory - spreading some art/technology love"</title><content type='html'>Hey, are you interested in collaborating with other technophiles and artists on projects, presenting/attending workshops on the awesome toys/art/hacks you've created - or &lt;b&gt;will create&lt;/b&gt; !! -- or using space and equipment you might not have at home?&lt;br /&gt;&lt;br /&gt;I have just the place in mind!! :) I'm a member of &lt;a href="http://site3.ca/"&gt;Site 3 coLaboratory&lt;/a&gt; - we're opening shop at Bloor and Ossington next month - and we're looking for members, associate members and cool collaborators!&lt;br /&gt;&lt;br /&gt;Our members are former Toronto Hacklab folk, crazy artists, engineers,&lt;br /&gt;physicists, special-effects guys, pyrotechs, leather and metalworkers.&lt;br /&gt;&lt;br /&gt;If this seems interesting, contact me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-160831702639156996?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://site3.ca/about/' title='An e-mail: &quot;Site 3 coLaboratory - spreading some art/technology love&quot;'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=160831702639156996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/160831702639156996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/160831702639156996'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/06/e-mail-site-3-colaboratory-spreading.html' title='An e-mail: &quot;Site 3 coLaboratory - spreading some art/technology love&quot;'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5260228192189379298</id><published>2010-05-05T15:46:00.000-04:00</published><updated>2010-05-05T15:46:03.684-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>low tech security</title><content type='html'>We're not great at choosing and remembering secure passwords, admit it?! &lt;br /&gt;&lt;br /&gt;While my wordly combinations of aussie slang / l33t are contributing (marginally) to making my online life more secure ;) - I've been embarrassingly compromised more than once. Thus I would give anything for an easy way to meet the ridiculous password requirements and not get tripped up by my nonsensical security answers! &lt;br /&gt;&lt;br /&gt;Enter &lt;a href="http://www.passwordcard.org/"&gt;the grid solution&lt;/a&gt;! I've seen this in commercial enterprise, but this example is a free, low-tech password vault.&lt;br /&gt;&lt;br /&gt;There are some people drawbacks; starting at corner/edges, reusing passwords. However, assuming you're the kind of person who chooses this solution, let's assume you'd avoid this ;)&lt;br /&gt;&lt;br /&gt;If you turn the solution about, and start challenging with grid co-ordinates, you're coming close to infringing on patented 2nd-factor authentication from Entrust. Although if you go down that road, why don't we start challenging with connect-the-dots, next item in the series, etc  ;D&lt;br /&gt;&lt;br /&gt;In personal news, I discovered the game &lt;a href="http://en.wikipedia.org/wiki/NetHack"&gt;NETHACK!&lt;/a&gt; today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5260228192189379298?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.passwordcard.org/' title='low tech security'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5260228192189379298' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5260228192189379298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5260228192189379298'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/05/low-tech-security.html' title='low tech security'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6716114021475495554</id><published>2010-03-14T11:40:00.008-04:00</published><updated>2010-03-14T14:48:55.847-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Security in web application design</title><content type='html'>Security is something I think about constantly. It's part of the "unwritten" requirements. We usually only receive requirements for functionality, i.e. "the system must ..." but the unspoken agreement is that the functions will be &lt;span style="font-weight:bold;"&gt;usuable&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;secure&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Usability is a whole article, let's focus on where security fits into user-interaction end of design.&lt;br /&gt;&lt;br /&gt;What are we concerned about? User Input, malicious or otherwise. &lt;br /&gt;&lt;br /&gt;Starting with web input, three things we can do: &lt;span style="font-weight:bold;"&gt;reduce, restrict and sanitize&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Reduce: data from forms or URL parameters is not trusted, don't allow it unless you need to! Users are a trusting bunch, don't let them down: ENFORCE SSL. Don't even allow http access.&lt;br /&gt;&lt;br /&gt;Restrict: Input can be restricted to a certain set; length, character format, value options. Value options are safest, instead of directly passing on input, convert it to one or more values in a server-side list. Examples include address fields, product codes, etc. &lt;br /&gt;&lt;br /&gt;Setting javascript or form validation, e.g. using maxlength or specifying select options, means nothing if we don't enforce validation on the server!&lt;br /&gt;&lt;br /&gt;Compare expectations to input instead of using it directly;&lt;br /&gt;if ("expectedData".equals(request.getParameter("data")) {}&lt;br /&gt;Not:&lt;br /&gt;String data = request.getParameter("data");&lt;br /&gt;&lt;br /&gt;Sanitize: If you must pass on user input, then sanitize. Here's a simple trick, use Commons Validation library: check every field for alphanumeric only. &lt;br /&gt;&lt;br /&gt;There's a list of &lt;a href="http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet"&gt;XSS protection tricks at OWASP&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Authentication&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Do you use cookies for session authentication? If so, are you using them well? &lt;br /&gt;&lt;br /&gt;Use the maximum amount of cookie information to protect your users. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Restrict the cookie to your own domain&lt;/li&gt;&lt;li&gt;use the secure flag (of course you're using HTTPS)&lt;/li&gt;&lt;li&gt;restrict to HTTP only, requires JDK 6 - see http://www.owasp.org/index.php/HTTPOnly&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6716114021475495554?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6716114021475495554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6716114021475495554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6716114021475495554'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/03/security-in-web-application-design.html' title='Security in web application design'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6787159737276049935</id><published>2010-03-07T11:53:00.002-05:00</published><updated>2010-03-07T12:07:05.648-05:00</updated><title type='text'>if I didn't know how good I was at math, would I have been as good at anything?</title><content type='html'>I'm drinking coffee and reading Scientific American - two of life's inestimable pleasures - and I came across the article "&lt;a href="http://www.scientificamerican.com/article.cfm?id=numbers-war"&gt;Numbers War: School Battles Heat Up Again in the Traditional versus Reform-Math Debate&lt;/a&gt;" &lt;br /&gt;&lt;br /&gt;Imagine if they stopped teaching algebra, geometry, and polynomials in high schools - would it be a real detriment to society? &lt;br /&gt;&lt;br /&gt;Imagine the fun we could have if we looked at the topics which have reference to real world situations? The &lt;a href="http://en.wikipedia.org/wiki/Wave_function"&gt;wave function&lt;/a&gt; can be made fun to learn with the right teaching!&lt;br /&gt;&lt;br /&gt;My personal beef with mathematical education is the lack of choice. By age 12-13 families and students are mostly sure which broad path to look forward to: academic or applied. Aren't they?&lt;br /&gt;&lt;br /&gt;I cannot however, underestimate the &lt;span style="font-weight:bold;"&gt;ways of thinking&lt;/span&gt; that only became my tools to use after bashing on through some difficult concepts - and only by repetition. &lt;br /&gt;&lt;br /&gt;I'm not in favour of simplifying education, but in teaching children what they need to know, and how to find out what they don't yet know. &lt;br /&gt;&lt;br /&gt;Teach them to learn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6787159737276049935?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.scientificamerican.com/article.cfm?id=numbers-war' title='if I didn&apos;t know how good I was at math, would I have been as good at anything?'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6787159737276049935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6787159737276049935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6787159737276049935'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/03/if-i-didnt-know-how-good-i-was-at-math.html' title='if I didn&apos;t know how good I was at math, would I have been as good at anything?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1306772514247624670</id><published>2010-01-21T15:26:00.003-05:00</published><updated>2010-03-14T14:48:43.800-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Finding the directories that are eating up the hard disk</title><content type='html'>By user home:&lt;br /&gt;&lt;br /&gt;du -k /home/ | sort -n | tail -10&lt;br /&gt;&lt;br /&gt;All. This generally takes forever:&lt;br /&gt;&lt;br /&gt;cd /&lt;br /&gt;du -k | sort -n | tail -10&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1306772514247624670?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1306772514247624670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1306772514247624670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1306772514247624670'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2010/01/finding-directories-that-are-eating-up.html' title='Finding the directories that are eating up the hard disk'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1784388785829296748</id><published>2009-11-08T19:04:00.007-05:00</published><updated>2009-11-09T11:03:28.820-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>Web Application Configuration - custom settings per target environment</title><content type='html'>The issue comes up in every new project - how to create a custom build or customized configuration for each environment. There will be different configurations for JDBC connections, SOAP endpoints, etc. loaded as ResourceBundles, Spring properties, and so on.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1568985/java-web-application-configuration-patterns"&gt;Stack overflow has a discussion on configuration patterns&lt;/a&gt; where most of the potential solutions are represented. Many externalize the files (not packaged in the war/ear) to a hardcoded file path or to a location on the appserver classpath. Other solutions have multiple properties files and rely on the build script to replace the main application.properties.&lt;br /&gt;&lt;br /&gt;These are good solutions, elements of each have been used in projects I've worked on. The externalized properties file or jar is often more hassle in reality, as the build guys are often not the developers - and every extra deploy step is more application downtime. &lt;br /&gt;&lt;br /&gt;The build script option is also something I wish to avoid. I want my maven pom to speak for itself with no extra plugins or build hassles.&lt;br /&gt;&lt;br /&gt;In my experience, the best solution is multiple properties files, one per environment, bundled in the ear/war and a single set-and-forget JVM property.&lt;br /&gt;&lt;br /&gt;The key is letting the application choose a config based on where it's deployed. It's a bad to use IP or hostname for such choices, so choose something that's done once, but is still within the developers/build guys control. &lt;br /&gt;&lt;br /&gt;When you setup each application server: set a JVM custom property called "ENV_NAME" that contains the environment name indicator. e.g. local, dev, stage, prod.&lt;br /&gt;&lt;br /&gt;This value can then be used anywhere in your J2EE application, from front-end to back as simply as:&lt;br /&gt;&lt;pre&gt;    if ("dev".equals(System.getProperty("ENV_NAME")) {&lt;br /&gt;        // do what you need for dev env. &lt;br /&gt;    }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Make testing easier by loading custom props! Add a static block to your base TestCase class, and call: &lt;pre&gt;System.setProperty("ENV_NAME", "local")&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Pretty clunky so far&lt;/span&gt;, but now we can take advantage of the Spring property configurator to load environment specific files. (This version was tested on spring 2.5, but have been using this setup since 1.2).&lt;br /&gt;&lt;br /&gt;Create a default myapp-config.properties in the classpath root. This is the fallback. &lt;br /&gt;&lt;br /&gt;Add a folder for &lt;span style="font-style:italic;"&gt;each target environment&lt;/span&gt; to your src classpath. &lt;br /&gt;&lt;br /&gt;Copy myapp-config.properties with customized values for the target environment to a new folder matching ENV_NAME; e.g. /dev/myapp-config.properties containing the dev JDBC settings.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"  &lt;br /&gt;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;xsi:schemaLocation="http://www.springframework.org/schema/beans &lt;br /&gt;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Configurer that replaces ${..} placeholders with values from properties&lt;br /&gt; Customized to load properties file from classpath, based on path from JVM ENV_NAME value &lt;br /&gt; e.g. ENV_NAME=dev Configurer will look for classpath:/dev/myapp-registration.properties --&amp;gt;&lt;br /&gt; &amp;lt;bean id="propertyConfigurer" class="com...myapp.util.EnvNameBasedConfigurer"&amp;gt;&lt;br /&gt;  &amp;lt;property name="ignoreResourceNotFound" value="true" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="locations"&amp;gt;&lt;br /&gt;   &amp;lt;list&amp;gt;&lt;br /&gt;    &amp;lt;value&gt;myapp-config.properties&amp;lt;/value&amp;gt;&lt;br /&gt;   &amp;lt;/list&amp;gt;&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt; &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'm a little behind the times already, because I think spring3 can already handle this sort of thing - but not every app is ready to go with spring3 yet.&lt;br /&gt;&lt;br /&gt;Added bonus example called in the constructor; loading a customized log4j setup file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt; * This class extends the Spring Property Configurer for the &lt;br /&gt; * purpose of loading environment specific property files. This &lt;br /&gt; * implementation relies on a JVM system propery named &lt;br /&gt; * "ENV_NAME" the value sets up which classpath&lt;br /&gt; * folder name property files will be loaded.&lt;br /&gt; *&lt;br /&gt; * For example if ENV_NAME == dev, the resource[s] will be&lt;br /&gt; * loaded from "classpath:/dev/resourcename"&lt;br /&gt; *&lt;br /&gt; * The WebSphere administrator should set ENV_NAME as a custom JVM&lt;br /&gt; * property in each server instance Process Definition. &lt;br /&gt; * JBoss users should alter JAVA_OPTS setting in the run.bat files. &lt;br /&gt; * Standard (not enforced) should be: local, dev, uat, or prod.&lt;br /&gt; * &lt;br /&gt; * @author &lt;a href="mailto:snb@sbeynon.net"&gt;s.n.beynon&lt;/a&gt;&lt;br /&gt; * @version $Revision: 1.4 $ $Date: 2009/11/03 16:46:52 $&lt;br /&gt; */&lt;br /&gt;public class EnvNameBasedConfigurer extends PropertyPlaceholderConfigurer {&lt;br /&gt;&lt;br /&gt;  private static Logger log = null; &lt;br /&gt;  public static final String SEP = "/";&lt;br /&gt;  public static final String APPNAME = "myapp";&lt;br /&gt;  private static final String LOGSUFFIX = "-log4j.xml";&lt;br /&gt;&lt;br /&gt;  public EnvNameBasedConfigurer() {&lt;br /&gt;    super();&lt;br /&gt;    setup();&lt;br /&gt;  }&lt;br /&gt;  /**&lt;br /&gt;   * @return String env name; dev, uat, prod - default return blank&lt;br /&gt;   */&lt;br /&gt;  public static String env() {&lt;br /&gt;    return System.getProperty("ENV_NAME", "");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /*&lt;br /&gt;   * normally would do this setup stuff in an initializing servlet&lt;br /&gt;   * call here because we want our custom log config setup before&lt;br /&gt;   * spring loads our configuration.&lt;br /&gt;   */&lt;br /&gt;  private void setup() {&lt;br /&gt;    System.out.println("spring and log4j configuration loading.");&lt;br /&gt;    try {&lt;br /&gt;      // standard environment log setup (unix log path)&lt;br /&gt;      String logconfig = APPNAME + LOGSUFFIX;&lt;br /&gt;      // configure different logging based on ENV here.&lt;br /&gt;      // developers all use win32; appname-win-log4j.xml&lt;br /&gt;      // dev/uat/prod are unix; appname-envname-log4j.xml&lt;br /&gt;      if (System.getProperty("os.name").indexOf("Win") &gt; -1) {&lt;br /&gt;        logconfig = APPNAME + "-win" + LOGSUFFIX;&lt;br /&gt;      }&lt;br /&gt;      else if (!"".equals(env())) {&lt;br /&gt;        // &lt;br /&gt;        logconfig = APPNAME + "-" + env() + LOGSUFFIX;&lt;br /&gt;      }&lt;br /&gt;      // from classpath load the standard log4j.xml&lt;br /&gt;      URL url = Loader.getResource(logconfig);&lt;br /&gt;      // custom environment log config not found, fallback to default&lt;br /&gt;      if (url == null) logconfig = APPNAME + LOGSUFFIX;&lt;br /&gt;      System.out.println("Configuring log from config file: " + url.getFile());&lt;br /&gt;      DOMConfigurator.configure(url);&lt;br /&gt;&lt;br /&gt;      log = Logger.getLogger(EnvNameBasedConfigurer.class);&lt;br /&gt;    } catch (Throwable t) {&lt;br /&gt;      t.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Override the Property Loader resource configuration based on System&lt;br /&gt;   * Property value "ENV_NAME". If ENV_NAME is set, property file will be&lt;br /&gt;   * loaded from a directory named by that value (in the classpath). &lt;br /&gt;&lt;br /&gt;   * &lt;br /&gt; For example, &lt;tt&gt;System.setProperty("local")&lt;/tt&gt; will load files&lt;br /&gt;   * from the "local" directory. &lt;br /&gt; &lt;br /&gt; If that directory does not&lt;br /&gt;   * contain the requested class path resource, will fall back to original&lt;br /&gt;   * name.&lt;br /&gt;   * &lt;br /&gt;   * @see org.springframework.core.io.support.PropertiesLoaderSupport#setLocation(org.springframework.core.io.Resource)&lt;br /&gt;   */&lt;br /&gt;  public void setLocation(Resource resource) {&lt;br /&gt;&lt;br /&gt;    Resource localized = new ClassPathResource(env() + SEP + resource.getFilename());&lt;br /&gt;    if ("".equals(env())) {&lt;br /&gt;      log.warn("Expected to find system property ENV_NAME - Not Found!");&lt;br /&gt;      localized = new ClassPathResource(resource.getFilename());&lt;br /&gt;    }&lt;br /&gt;    if (localized.exists()) {&lt;br /&gt;      super.setLocation(localized);&lt;br /&gt;      return;&lt;br /&gt;    }&lt;br /&gt;    // fall back to what was supplied to this method&lt;br /&gt;    super.setLocation(resource);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Override the Property Loader resource configuration based on System&lt;br /&gt;   * Property value "ENV_NAME". If ENV_NAME is set, property files will be&lt;br /&gt;   * loaded from a directory named by that value (in the classpath). &lt;br /&gt;&lt;br /&gt;   * &lt;br /&gt; For example, &lt;tt&gt;System.setProperty("local")&lt;/tt&gt; will load files&lt;br /&gt;   * from the "local" directory. &lt;br /&gt; &lt;br /&gt; If that directory does not&lt;br /&gt;   * contain the requested class path resource, will fall back to original&lt;br /&gt;   * name.&lt;br /&gt;   * &lt;br /&gt;   * @see org.springframework.core.io.support.PropertiesLoaderSupport#setLocations(org.springframework.core.io.Resource[])&lt;br /&gt;   */&lt;br /&gt;  public void setLocations(Resource[] resources) {&lt;br /&gt;    log.debug("EnvNameBasedConfigurer setLocations from classpath for ENV_NAME:" + env());&lt;br /&gt;    if ("".equals(env())) {&lt;br /&gt;      log.warn("Expected to find system property ENV_NAME - Not Found!");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    Resource[] envResources = new Resource[resources.length];&lt;br /&gt;    for (int i = 0; i &lt; resources.length; i++) {&lt;br /&gt;      log.debug("setLocations " + resources[i]);&lt;br /&gt;      try {&lt;br /&gt;        Resource localized = new ClassPathResource(env() + SEP&lt;br /&gt;            + resources[i].getFilename());&lt;br /&gt;        if (localized.exists()) {&lt;br /&gt;          envResources[i] = localized;&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          envResources[i] = new ClassPathResource(resources[i].getFilename());&lt;br /&gt;        }&lt;br /&gt;        log.debug(envResources[i]);&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;        log.warn(e);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    super.setLocations(envResources);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This one class demonstrates using ENV_NAME - a static System Property set on the JVM startup, thus available at any time - to load a custom log4j configuration for the environment. The same method can be used to load a custom ResourceBundle or static properties.&lt;br /&gt;&lt;br /&gt;It is important to have a default/fallback configuration, this should be the production configuration. If the ENV_NAME is missing, then it's likely the production resources are firewalled from accidental dev/uat access, and if the ENV_NAME is missing in production then the default configuration is the correct file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1784388785829296748?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1784388785829296748' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1784388785829296748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1784388785829296748'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/11/web-application-configuration-custom.html' title='Web Application Configuration - custom settings per target environment'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8652519997304182818</id><published>2009-11-03T14:50:00.003-05:00</published><updated>2009-11-03T14:57:24.359-05:00</updated><title type='text'>struts2 regex validation for a phone number</title><content type='html'>Struts2 bundled (built-in) validator regex type could really have some better examples! &lt;br /&gt;&lt;br /&gt;Here's a basic phone number regex sample for a standard North American telephone number e.g. 123-456-7890&lt;br /&gt;&lt;br /&gt;Key point is to use start/end pattern indicators ^ and $ - otherwise 123-456-78901234 etc. will also match!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &amp;lt;field name="person.phone"&amp;gt;&lt;br /&gt; &amp;lt;field-validator type="required" circuit="true"&amp;gt;&lt;br /&gt;  &amp;lt;message&amp;gt;${getText("error.phone.required")}&amp;lt;/message&amp;gt;&lt;br /&gt; &amp;lt;/field-validator&amp;gt;&lt;br /&gt;    &amp;lt;field-validator type="regex"&amp;gt;&lt;br /&gt;        &amp;lt;param name="expression"&amp;gt;&amp;lt;![CDATA[^[\d]{3}-[\d]{3}-[\d]{4}$]]&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;        &amp;lt;message&amp;gt;${getText("error.phone.format")}&amp;lt;/message&amp;gt;&lt;br /&gt;    &amp;lt;/field-validator&amp;gt;&lt;br /&gt; &amp;lt;/field&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8652519997304182818?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8652519997304182818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8652519997304182818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8652519997304182818'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/11/struts2-regex-validation-for-phone.html' title='struts2 regex validation for a phone number'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6444726828074684669</id><published>2009-10-24T11:21:00.003-04:00</published><updated>2009-10-24T11:27:31.960-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>simon willison on redis</title><content type='html'>Proving again and old-school c is still fast and relevant, he talks about a "data structure" storage server (that which is not a database, but still a means to store data). Any programmer can see why this would be a valuable hook for the debugging process (think HSQL, MockDB, etc).&lt;br /&gt;&lt;br /&gt;The fascinating tidbit at the end of the article is what got me interested however:&lt;br /&gt;&lt;a href="http://hurl.it/"&gt;hurl.it&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Hurl makes HTTP requests. Enter a URL, set some headers, view the response, then share it with others. Perfect for demoing and debugging APIs. "&lt;br /&gt;&lt;br /&gt;Sounds like a great addition to a system test toolkit for anyone who works on web apps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6444726828074684669?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://simonwillison.net/2009/Oct/22/redis/' title='simon willison on redis'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6444726828074684669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6444726828074684669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6444726828074684669'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/10/simon-willison-on-redis.html' title='simon willison on redis'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6191228549519518084</id><published>2009-10-11T10:44:00.011-04:00</published><updated>2010-03-14T18:13:42.929-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>WebSphere Trust Access Interceptor</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Background - What is a TAI?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To correlate between external authentication (e.g. SSO with Oracle AM WebGate, IBM TAM, etc.) and the WebSphere Application Server (WAS) User Registry identity, use a Trust Association Interceptor within the WebSphere security layer. &lt;br /&gt;&lt;br /&gt;Lightweight Third Party Authentication (LTPA) is the mechanism by which WAS supports SSO. With LTPA a token is created with the user data and expiry time, signed by the LTPA keys (which why multiple nodes in a cell must have their LTPA keys in sync). The LTPA token can be forwarded by authenticated resources. This token passes to other servers, in the same cell or in a different cell, either through cookies (for Web resources) or through the authentication layer Security Authentication Service (SAS) or CSIv2 for EJBs. &lt;br /&gt;&lt;br /&gt;A TAI is an identity provider, it takes information from an HTTP request, and, assuming trust is validated, provides either a principal (to be filled in by the User Registry) or a fully populated subject. In either case the user must exist in the WAS User Registry. The option for the TAI to populate the Subject allows the implementer to override existing group membership in the WAS LDAP. &lt;br /&gt;&lt;br /&gt;Trust Interceptors operate completely within the WebSphere security layer, usually loaded on server startup from AppServer lib ext directory. The interceptor is &lt;span style="font-weight:bold;"&gt;only executed when an authenticated resource is requested&lt;/span&gt; via HTTP(S), &lt;span style="font-style:italic;"&gt;i.e. the web.xml has a security constraint for that URL&lt;/span&gt;. If the user has already authenticated to any participating cell in the WebSphere deployment, they will have a valid LTPA token for the resource; the interceptor will skip. &lt;br /&gt;&lt;br /&gt;This interceptor implementation is an adjunct to the security system; fallback to the usual authentication mechanism is always possible. Make note that a TAI is available for web authentication only (as opposed to JAAS); there is no intercepting programmatic login or access to Enterprise Beans. &lt;br /&gt;&lt;br /&gt;The negotiation stage is only executed only if the target is defined as protected by the implementing class. Targets are evaluated in the isTargetInterceptor method. &lt;br /&gt;&lt;br /&gt;For more information, this article is dated now, but a great start to &lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/0508_benantar/0508_benantar.html"&gt;WAS security&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Implementation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have implemented TAIs for WAS v6.0, v6.1 and v7.0. Slight differences, but I will cover my implementation for v6.1.&lt;br /&gt;&lt;br /&gt;Basically, implement the interface &lt;a href="http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/rsec_taisubcreate.html"&gt;com.ibm.wsspi.security.tai.TrustAssociationInterceptor&lt;/a&gt; from the websphere_apis.jar.&lt;br /&gt;&lt;br /&gt;Order of execution is:&lt;br /&gt;&lt;br /&gt;1. initialize(Properties props) - on server startup.&lt;br /&gt;2. boolean isTargetInterceptor (HttpServletRequest req) - on each request - if true, continue to negociate.&lt;br /&gt;3. TAIResult negotiateValidateandEstablishTrust (HttpServletRequest req, HttpServletResponse res)&lt;br /&gt;&lt;br /&gt;TAI Result holds either a string user id to be retrieved from the Registry, or the fully qualified Subject.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Initialize&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Load your TAI settings, a list of regex patterns to intercept, the name of the SSO Request Header, etc. Will be loaded from the referenced properties file or from the console custom properties. Console settings override.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public int initialize(Properties props) throws WebTrustAssociationFailedException {&lt;br /&gt;// read the Resource Bundle and add to static properties&lt;br /&gt;// *console values* will overwrite props file.&lt;br /&gt;try {&lt;br /&gt;ResourceBundle rb = Constants.getResourceBundle();&lt;br /&gt;Enumeration keys = rb.getKeys();&lt;br /&gt;while (keys.hasMoreElements()) {&lt;br /&gt;String key = (String) keys.nextElement();&lt;br /&gt;log.debug("Prop from " + key + "=" + rb.getObject(key));&lt;br /&gt;taiProps.put(key, rb.getObject(key));&lt;br /&gt;}&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;// check the constants RESOURCE_PKG/RESOURCES values to see&lt;br /&gt;// if the properties files exist!&lt;br /&gt;log.warn("Did not find/load iaatai_en.properties " + e.getMessage());&lt;br /&gt;// No rethrow, console might be used to set properties.&lt;br /&gt;}&lt;br /&gt;try {&lt;br /&gt;// read properties from console config add to static list&lt;br /&gt;if (props != null) {&lt;br /&gt;props.list(System.out);&lt;br /&gt;taiProps.putAll(props);&lt;br /&gt;}&lt;br /&gt;// setup url patterns and header names from props.&lt;br /&gt;configureFromProperties();&lt;br /&gt;} catch (Throwable t) {&lt;br /&gt;log.error("Initialization error (props not loaded)", t);&lt;br /&gt;}&lt;br /&gt;// return zero for success - any other value is failure.&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;isTargetInterceptor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Should the target URL be intercepted? For this, setup a Map (cache) of URLs, and from the properties compare to set of Regex Patterns to intercept.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public boolean isTargetInterceptor(HttpServletRequest request) {&lt;br /&gt;log.info("isTargetInterceptor: Check URI " + request.getRequestURI());&lt;br /&gt;try {&lt;br /&gt;// if we can get away without regexing, do so&lt;br /&gt;if (targetUris.contains(request.getRequestURI())) {&lt;br /&gt;log.debug("Found uri in cache");&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;// iterate over the patterns (values)&lt;br /&gt;Iterator&lt;pattern&gt; urlPatterns = targetUrlPatterns.values().iterator();&lt;br /&gt;while (urlPatterns.hasNext()) {&lt;br /&gt;Pattern p = (Pattern) urlPatterns.next();&lt;br /&gt;// log.debug("Test URI pattern: " + p.pattern());&lt;br /&gt;Matcher m = p.matcher(request.getRequestURI());&lt;br /&gt;if (m.matches()) {&lt;br /&gt;log.debug("Matched Pattern " + p.pattern());&lt;br /&gt;targetUris.add(request.getRequestURI());&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;log.error("ERROR: isTargetInterceptor", e);&lt;br /&gt;}&lt;br /&gt;log.info("TAI will not intercept this target URI");&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Negotiate Trust&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quick and easy - direct mapping to a WAS registry ID. The simplest way, if the SSO header exists map it to an existing user.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public TAIResult negotiateValidateandEstablishTrust(HttpServletRequest request,&lt;br /&gt;HttpServletResponse response) throws WebTrustAssociationFailedException {&lt;br /&gt;log.debug("negotiateValidateandEstablishTrust starting.");&lt;br /&gt;String ssoId = null;&lt;br /&gt;TAIResult result = TAIResult.create(401);&lt;br /&gt;ssoId = request.getHeader(Constants.HEADER_USER_ID);&lt;br /&gt;if (ssoId != null &amp;&amp; !"".equals(ssoId)) {&lt;br /&gt;return TAIResult.create(HttpServletResponse.SC_OK, wasId);&lt;br /&gt;}&lt;br /&gt;// no header, return the default result, unauthorized 401&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Another option for TAI's using Basic Authentication:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public TAIResult negotiateValidateandEstablishTrust(HttpServletRequest req,&lt;br /&gt;HttpServletResponse resp) throws WebTrustAssociationFailedException {&lt;br /&gt;log.debug("negotiateValidateandEstablishTrust");&lt;br /&gt;&lt;br /&gt;String basicAuth = req.getHeader("Authorization");&lt;br /&gt;TAIResult tairesult;&lt;br /&gt;if (basicAuth == null || basicAuth.equals("") || !basicAuth.startsWith("Basic ")) {&lt;br /&gt;tairesult = challengeClient(resp);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;String userId = null;&lt;br /&gt;String passwd = "";&lt;br /&gt;try {&lt;br /&gt;String basicDecoded = new String(Base64.decode(basicAuth.substring(6), '='),&lt;br /&gt;"UTF-8");&lt;br /&gt;int i = basicDecoded.indexOf(':');&lt;br /&gt;if (i == -1) {&lt;br /&gt;userId = basicDecoded;&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;userId = basicDecoded.substring(0, i);&lt;br /&gt;passwd = basicDecoded.substring(i + 1);&lt;br /&gt;}&lt;br /&gt;log.debug("negotiateValidateandEstablishTrust userID:" + userId);&lt;br /&gt;if (userId != null &amp;&amp; (passwd == null || passwd.length() == 0)) {&lt;br /&gt;log.warn("negotiateValidateandEstablishTrust FAILED, no password for "&lt;br /&gt;+ userId);&lt;br /&gt;tairesult = challengeClient(resp);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;Subject subject = doBasicWASLogin(userId, passwd);&lt;br /&gt;tairesult = TAIResult.create(200, userId, subject);&lt;br /&gt;}&lt;br /&gt;} catch (LoginException e) {&lt;br /&gt;log.error("negotiateValidateandEstablishTrust " + userId, e);&lt;br /&gt;tairesult = challengeClient(resp);&lt;br /&gt;} catch (UnsupportedEncodingException e) {&lt;br /&gt;tairesult = null;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;log.info("negotiateValidateandEstablishTrust " + tairesult.getStatus());&lt;br /&gt;return tairesult;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private TAIResult challengeClient(HttpServletResponse resp)&lt;br /&gt;throws WebTrustAssociationFailedException {&lt;br /&gt;resp.setHeader("WWW-Authenticate", wwwAuthenticateHeader);&lt;br /&gt;resp.setStatus(401);&lt;br /&gt;return TAIResult.create(401);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private Subject doBasicWASLogin(String user, String pass) throws LoginException {&lt;br /&gt;Subject subject = null;&lt;br /&gt;CallbackHandler callbackhandler = WSCallbackHandlerFactory.getInstance()&lt;br /&gt;.getCallbackHandler(user, pass);&lt;br /&gt;&lt;br /&gt;LoginContext logincontext = new LoginContext(basicLoginTarget, callbackhandler);&lt;br /&gt;log.debug("doBasicWASLogin built LoginContext");&lt;br /&gt;logincontext.login();&lt;br /&gt;log.debug("doBasicWASLogin login done");&lt;br /&gt;return logincontext.getSubject();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For our actual implementation, we break user types into two paths by the application URL. getRealm is a custom function not shown here, it translates URLs to just a context root and maps to a list of Anonymous/MustExistInRegistry type apps.&lt;br /&gt;&lt;br /&gt;Anonymous user mapping. Each user with a valid header is allowed in, and if they don't exist the user is created. &lt;br /&gt;&lt;br /&gt;Must-exist users are higher security and must exist in the WAS registry before access.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public TAIResult negotiateValidateandEstablishTrust(HttpServletRequest request,&lt;br /&gt;HttpServletResponse response) throws WebTrustAssociationFailedException {&lt;br /&gt;log.debug("negotiateValidateandEstablishTrust starting.");&lt;br /&gt;String ssoId = null;&lt;br /&gt;String wasId = null;&lt;br /&gt;String realm = "";&lt;br /&gt;String lang = "en";&lt;br /&gt;// http authenticate response&lt;br /&gt;TAIResult result = TAIResult.create(401);&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;// headers will be set by GA runtime, actual header&lt;br /&gt;// name is configured via properties.&lt;br /&gt;ssoId = request.getHeader(Constants.HEADER_USER_ID);&lt;br /&gt;lang = request.getHeader(Constants.HEADER_LANG_ID);&lt;br /&gt;if (ssoId == null&lt;br /&gt;&amp;&amp; "true".equals(taiProps.getProperty("DEBUG_HEADER_VALUE", "false"))) {&lt;br /&gt;log.warn("SSO_ID null, but DEBUG_HEADER_VALUE found to be true.");&lt;br /&gt;ssoId = "debuguser " + new Random().nextInt();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (ssoId == null) {&lt;br /&gt;// SSO *not* protecting this resource, no SSO_ID header &amp;&lt;br /&gt;// DEBUG_HEADER_VALUE not set.&lt;br /&gt;log.warn("TAI cannot trust, no header. Should we be intercepting this URL?");&lt;br /&gt;throw new WebTrustAssociationUserException("Null SSO user");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// retrieve the name of the application, used to decide if anon/mustexist&lt;br /&gt;realm = getRealm(request);&lt;br /&gt;wasId = mapToAnonOrMustExistId(ssoId, realm);&lt;br /&gt;&lt;br /&gt;// Anonymous users will be auto-created&lt;br /&gt;log.debug(realm + ":requires that users exist? " + mustexistRealms);&lt;br /&gt;boolean mustExist = (mustexistRealms != null &amp;&amp; mustexistRealms.contains(realm));&lt;br /&gt;// Setup the sharedState user credentials&lt;br /&gt;Map sharedState = null;&lt;br /&gt;&lt;br /&gt;// Using the sharedState map is an example of creating the subject&lt;br /&gt;// to change the user credentials or state. It may not be necessary&lt;br /&gt;// in your implementation. If not, simply return an ID WAS will&lt;br /&gt;// recognize:&lt;br /&gt;// TAIResult.create(HttpServletResponse.SC_OK, wasId);&lt;br /&gt;&lt;br /&gt;UserRegistryLookup userRegLookup = new UserRegistryLookup();&lt;br /&gt;try {&lt;br /&gt;// lookup the user, group, etc &lt;br /&gt;sharedState = userRegLookup.getSharedState(wasId, lang, realm);&lt;br /&gt;} catch (EntryNotFoundException enf) {&lt;br /&gt;log.warn("No match for wasId " + wasId);&lt;br /&gt;// Check for another chance - create the user&lt;br /&gt;// then attempt to read sharedState for newly created.&lt;br /&gt;if (!ismustexist) {&lt;br /&gt;createNewUser(ssoId, wasId, lang, realm);&lt;br /&gt;log.debug("WAS user created, return TAIResult OK.");&lt;br /&gt;return TAIResult.create(HttpServletResponse.SC_OK, wasId);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if (sharedState != null) {&lt;br /&gt;// Create the subject and add credentials&lt;br /&gt;Subject authenticatedPrincipal = new Subject();&lt;br /&gt;authenticatedPrincipal.getPublicCredentials().add(sharedState);&lt;br /&gt;// N.B. the principal field (arg1) is unnecesary when&lt;br /&gt;// providing the Subject object.&lt;br /&gt;log.debug("Return the authenticated principal. " + wasId);&lt;br /&gt;return TAIResult.create(HttpServletResponse.SC_OK, wasId,&lt;br /&gt;authenticatedPrincipal);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;} catch (Throwable e) {&lt;br /&gt;// most actions do not throw, this must be a catastrophic failure&lt;br /&gt;log.error("Trust ERROR for:" + ssoId + "::" + wasId, e);&lt;br /&gt;throw new WebTrustAssociationFailedException(e.getMessage());&lt;br /&gt;}&lt;br /&gt;// return the default result, unauthorized 401&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Reading the User Registry - creating a Shared State from scratch. This give the TAI the option to alter user groups/roles.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public Map getSharedState(final String user, final String lang, final String realm)&lt;br /&gt;throws NamingException, RemoteException, EntryNotFoundException,&lt;br /&gt;CustomRegistryException {&lt;br /&gt;&lt;br /&gt;Hashtable secTable = new Hashtable();&lt;br /&gt;InitialContext _ctx = VmmServiceManager.getInitialContext();&lt;br /&gt;&lt;br /&gt;// Retrieve the local UserRegistry implementation.&lt;br /&gt;// For v6.0 this is WMM-UR (WMM custom registry)&lt;br /&gt;// Impl: com.ibm.websphere.security._UserRegistry_Stub&lt;br /&gt;// v6.1 Use com.ibm.ws.wim.registry.WIMUserRegistry&lt;br /&gt;UserRegistry reg = (UserRegistry) _ctx.lookup("UserRegistry");&lt;br /&gt;log.info("Got User Registry "&lt;br /&gt;+ (reg != null ? reg.getRealm() : "NULL"));&lt;br /&gt;if (reg == null) {&lt;br /&gt;log.error("Failed connnection to WMM User Registry ");&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Retrieves the user registry uniqueID based on the uid specified&lt;br /&gt;// in the NameCallback. Unique ID is the full DN.&lt;br /&gt;String uniqueID = reg.getUniqueUserId(user);&lt;br /&gt;log.debug("From user registry: uniqueID " + uniqueID);&lt;br /&gt;&lt;br /&gt;// read the WAS user ID from registry userID@realm&lt;br /&gt;String wsUserId = WSSecurityPropagationHelper&lt;br /&gt;.getUserFromUniqueID(uniqueID);&lt;br /&gt;log.debug("wsUserId from WSSecurityPropagationHelper "&lt;br /&gt;+ wsUserId);&lt;br /&gt;&lt;br /&gt;// Retrieves display name from the user registry based on the&lt;br /&gt;// WAS UserId.&lt;br /&gt;String securityName = reg.getUserSecurityName(wsUserId);&lt;br /&gt;// display name from user registry&lt;br /&gt;log.debug("securityName from user registry " + securityName);&lt;br /&gt;&lt;br /&gt;// Retrieves the groups associated with the uniqueID.&lt;br /&gt;List groupList = null;&lt;br /&gt;try {&lt;br /&gt;groupList = reg.getUniqueGroupIds(wsUserId);&lt;br /&gt;log.debug("found groupList " + groupList);&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;log.warn("ERROR retrieving groupList " + e.getMessage());&lt;br /&gt;groupList = new ArrayList();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// N.B. This is the ideal place to override group membership.&lt;br /&gt;// Example, set all users in the group name "Realmusers".&lt;br /&gt;try {&lt;br /&gt;String usersGroupUniqueId = reg.getUniqueGroupId(realm + "users");&lt;br /&gt;groupList.add(usersGroupUniqueId);&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;log.warn("ERROR finding users group " + realm + " " + e);&lt;br /&gt;}&lt;br /&gt;// Creates the java.util.Hashtable with the information that you&lt;br /&gt;// gathered from the UserRegistry implementation.&lt;br /&gt;log.debug("Now creating the subject shared state. " + realm&lt;br /&gt;+ " " + uniqueID);&lt;br /&gt;secTable.put(AttributeNameConstants.WSCREDENTIAL_USERID, securityName);&lt;br /&gt;secTable.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uniqueID);&lt;br /&gt;secTable.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME,&lt;br /&gt;securityName);&lt;br /&gt;// secTable.put(AttributeNameConstants.WSCREDENTIAL_REALM,&lt;br /&gt;// reg.getRealm());&lt;br /&gt;secTable.put(AttributeNameConstants.WSCREDENTIAL_GROUPS, groupList);&lt;br /&gt;&lt;br /&gt;// Adds a cache key that is used as part of the lookup mechanism for&lt;br /&gt;// the created Subject. The cache key can be an object, but should have&lt;br /&gt;// an implemented toString() method. Make sure that the cacheKey&lt;br /&gt;// contains enough information to scope it to the user and any&lt;br /&gt;// additional attributes that you are using. If you do not specify this&lt;br /&gt;// property the Subject is scoped to the returned WSCREDENTIAL_UNIQUEID,&lt;br /&gt;// by default.&lt;br /&gt;secTable.put(AttributeNameConstants.WSCREDENTIAL_CACHE_KEY, realm&lt;br /&gt;+ uniqueID);&lt;br /&gt;return secTable;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Updating and creating users in the TAI requires a privileged request. The entire class to setup users and update properties is included here:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class VmmServiceManager implements VmmService {&lt;br /&gt;private static final Logger log = Logger.getLogger(VmmServiceManager.class);&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Provider URL for JNDI lookup - default provider for WAS - first Node only.&lt;br /&gt;*/&lt;br /&gt;public static String providerURL = "corbaloc:iiop:localhost:10031";&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Constructor for Virtual Member Manager Service Manager.&lt;br /&gt;*/&lt;br /&gt;public VmmServiceManager() {&lt;br /&gt;super();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @return InitialContext for the current environment.&lt;br /&gt;* @throws NamingException&lt;br /&gt;*/&lt;br /&gt;public static InitialContext getInitialContext() throws NamingException {&lt;br /&gt;&lt;br /&gt;Hashtable&lt;String, String&gt; env = getEnv();&lt;br /&gt;if (env.size() == 2) {&lt;br /&gt;return new InitialContext(env);&lt;br /&gt;}&lt;br /&gt;return new InitialContext();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @return Hashtable&lt;String, String&gt; containing INITIAL_CONTEXT_FACTORY and&lt;br /&gt;*         PROVIDER_URL&lt;br /&gt;* @throws NamingException&lt;br /&gt;*/&lt;br /&gt;private static Hashtable&lt;String, String&gt; getEnv() throws NamingException {&lt;br /&gt;ResourceBundle rb = Constants.getResourceBundle();&lt;br /&gt;// look for a server specific provider url&lt;br /&gt;String serverid = System.getProperty(Constants.SERVER_NAME);&lt;br /&gt;log.info("getInitialContext SERVER_NAME=" + serverid);&lt;br /&gt;String providerURL = null;&lt;br /&gt;try {&lt;br /&gt;providerURL = rb.getString("provider.url." + serverid);&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;// no providerURL for this serverid (serverid may have been null).&lt;br /&gt;try {&lt;br /&gt;// look in properties for the default provider URL&lt;br /&gt;providerURL = rb.getString("provider.url");&lt;br /&gt;} catch (Exception e2) {&lt;br /&gt;// no providerURL, WAS will use the local provider.&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;log.info("Init Ctx lookup using providerURL=" + providerURL);&lt;br /&gt;Hashtable&lt;String, String&gt; env = new Hashtable&lt;String, String&gt;(2);&lt;br /&gt;if (providerURL != null) {&lt;br /&gt;env.put(Context.INITIAL_CONTEXT_FACTORY,&lt;br /&gt;"com.ibm.websphere.naming.WsnInitialContextFactory");&lt;br /&gt;env.put(Context.PROVIDER_URL, providerURL);&lt;br /&gt;}&lt;br /&gt;return env;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @return LocalServiceProvider Wim Client com.ibm.websphere.wim.Service&lt;br /&gt;*/&lt;br /&gt;public LocalServiceProvider getLocalServiceProvider() {&lt;br /&gt;//http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=&lt;br /&gt;// /com.ibm.websphere.javadoc.doc/vmm/com/ibm/websphere/wim/client/&lt;br /&gt;// LocalServiceProvider.html&lt;br /&gt;try {&lt;br /&gt;// holds reference to "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"&lt;br /&gt;LocalServiceProvider service = new LocalServiceProvider(getEnv());&lt;br /&gt;&lt;br /&gt;return service;&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;log.error("LocalServiceProvider setup fail.", e);&lt;br /&gt;}&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param userId&lt;br /&gt;* @param lang&lt;br /&gt;* @param containerDn&lt;br /&gt;* @return boolean success flag&lt;br /&gt;*/&lt;br /&gt;public boolean createUser(final String userId, final String lang,&lt;br /&gt;String containerDn) {&lt;br /&gt;&lt;br /&gt;LocalServiceProvider service = null;&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;service = getLocalServiceProvider();&lt;br /&gt;if (service == null)&lt;br /&gt;return false;&lt;br /&gt;&lt;br /&gt;// containerDn has to be null - empty string is bad.&lt;br /&gt;if (containerDn != null &amp;&amp; containerDn.trim().length() == 0) {&lt;br /&gt;containerDn = null;&lt;br /&gt;}&lt;br /&gt;DataObject root = SDOHelper.createRootDataObject();&lt;br /&gt;// API entity type might be "PersonAccount" or "Person"&lt;br /&gt;// this is unclear to me. using the SchemaConstants field.&lt;br /&gt;// leave the 2nd param blank to use the default container.&lt;br /&gt;DataObject entity = SDOHelper.createEntityDataObject(root, containerDn,&lt;br /&gt;SchemaConstants.DO_PERSON_ACCOUNT);&lt;br /&gt;entity.set(Constants.UID, userId);&lt;br /&gt;entity.set(Constants.CN, userId);&lt;br /&gt;entity.set(Constants.SN, userId);&lt;br /&gt;List displayName = new ArrayList();&lt;br /&gt;displayName.add(userId);&lt;br /&gt;entity.set(Constants.DISPLAY_NAME, displayName);&lt;br /&gt;entity.set(Constants.PREFERRED_LANGUAGE, lang);&lt;br /&gt;&lt;br /&gt;log.info("PersonAccount object assembled " + entity);&lt;br /&gt;&lt;br /&gt;// Assemble a logged-in subject with admin (create-user) rights.&lt;br /&gt;Subject adminSubject = retrieveAdminSubject();&lt;br /&gt;log.info("VMM AdminSubject logged in " + adminSubject);&lt;br /&gt;&lt;br /&gt;root = doSecureCreate(adminSubject, root);&lt;br /&gt;&lt;br /&gt;log.info("PersonAccount create completed: " + root);&lt;br /&gt;return true;&lt;br /&gt;} catch (Throwable t) {&lt;br /&gt;log.error("PersonAccount create failed", t);&lt;br /&gt;}&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param uniqueId&lt;br /&gt;* @param lang&lt;br /&gt;* @return boolean success flag&lt;br /&gt;*/&lt;br /&gt;public boolean updateUser(final String uniqueId, final String lang) {&lt;br /&gt;&lt;br /&gt;LocalServiceProvider service = null;&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;service = getLocalServiceProvider();&lt;br /&gt;if (service == null)&lt;br /&gt;return false;&lt;br /&gt;DataObject root = SDOHelper.createRootDataObject();&lt;br /&gt;DataObject entity = SDOHelper.createEntityDataObject(root, null,&lt;br /&gt;SchemaConstants.DO_PERSON_ACCOUNT);&lt;br /&gt;entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(&lt;br /&gt;SchemaConstants.PROP_UNIQUE_NAME, uniqueId);&lt;br /&gt;&lt;br /&gt;List displayName = new ArrayList();&lt;br /&gt;displayName.add(lang);&lt;br /&gt;entity.set(Constants.DISPLAY_NAME, displayName);&lt;br /&gt;entity.set(Constants.PREFERRED_LANGUAGE, lang);&lt;br /&gt;&lt;br /&gt;log.info("PersonAccount object for update " + entity);&lt;br /&gt;&lt;br /&gt;// Assemble a logged-in subject with admin (update-user) rights.&lt;br /&gt;Subject adminSubject = retrieveAdminSubject();&lt;br /&gt;log.info("VMM AdminSubject logged in " + adminSubject);&lt;br /&gt;&lt;br /&gt;root = doSecureUpdate(adminSubject, root);&lt;br /&gt;&lt;br /&gt;log.info("PersonAccount update completed: " + root);&lt;br /&gt;return true;&lt;br /&gt;} catch (Throwable t) {&lt;br /&gt;log.error("PersonAccount update failed", t);&lt;br /&gt;}&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param adminSubject&lt;br /&gt;* @param userRoot&lt;br /&gt;* @return DataObject&lt;br /&gt;* @throws PrivilegedActionException&lt;br /&gt;*/&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;protected DataObject doSecureCreate(final Subject adminSubject, final DataObject userRoot)&lt;br /&gt;throws PrivilegedActionException {&lt;br /&gt;&lt;br /&gt;return (DataObject) WSSubject.doAs(adminSubject,&lt;br /&gt;new java.security.PrivilegedExceptionAction() {&lt;br /&gt;public Object run() throws PrivilegedActionException {&lt;br /&gt;// Subject is associated with the current thread context&lt;br /&gt;return AccessController.doPrivileged(new CreateUserPrivileged(&lt;br /&gt;userRoot));&lt;br /&gt;}&lt;br /&gt;// Subject is re-associated with the current thread context&lt;br /&gt;}); // end doAs admin.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;protected DataObject doSecureUpdate(final Subject adminSubject, final DataObject userRoot)&lt;br /&gt;throws PrivilegedActionException {&lt;br /&gt;&lt;br /&gt;return (DataObject) WSSubject.doAs(adminSubject,&lt;br /&gt;new java.security.PrivilegedExceptionAction() {&lt;br /&gt;public Object run() throws PrivilegedActionException {&lt;br /&gt;// Subject is associated with the current thread context&lt;br /&gt;return AccessController.doPrivileged(new UpdateUserPrivileged(&lt;br /&gt;userRoot));&lt;br /&gt;}&lt;br /&gt;// Subject is re-associated with the current thread context&lt;br /&gt;}); // end doAs&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Create new user in the WebSphere Repository. This private class runs&lt;br /&gt;* inside PrivilegedAction; must implement PrivilegedAction interface.&lt;br /&gt;*/&lt;br /&gt;class CreateUserPrivileged implements PrivilegedExceptionAction {&lt;br /&gt;private DataObject rootWithNewUser;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param containsUserObj&lt;br /&gt;*/&lt;br /&gt;public CreateUserPrivileged(DataObject containsUserObj) {&lt;br /&gt;this.rootWithNewUser = containsUserObj;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Cannot throw specific exceptions on this method signature, so return&lt;br /&gt;* the DataObject, or general Exception with cause.&lt;br /&gt;* &lt;br /&gt;* @return Object DataObject if success, null otherwise.&lt;br /&gt;* @throws Exception&lt;br /&gt;*             RemoteException, WIMExcpetion&lt;br /&gt;* @see java.security.PrivilegedExceptionAction#run()&lt;br /&gt;*/&lt;br /&gt;public Object run() throws Exception {&lt;br /&gt;// Subject cut off from the current thread context.&lt;br /&gt;LocalServiceProvider service = getLocalServiceProvider();&lt;br /&gt;if (service == null)&lt;br /&gt;return null;&lt;br /&gt;log.debug("Connected to WIM service " + service.getClass().getName());&lt;br /&gt;return service.create(rootWithNewUser);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Update user in the WebSphere Repository. This private class runs inside&lt;br /&gt;* PrivilegedAction; must implement PrivilegedAction interface.&lt;br /&gt;*/&lt;br /&gt;class UpdateUserPrivileged implements PrivilegedExceptionAction {&lt;br /&gt;private DataObject rootWithUser;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param containsUserObj&lt;br /&gt;*/&lt;br /&gt;public UpdateUserPrivileged(DataObject containsUserObj) {&lt;br /&gt;this.rootWithUser = containsUserObj;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Cannot throw specific exceptions on this method signature, so return&lt;br /&gt;* the DataObject, or general Exception with cause.&lt;br /&gt;* &lt;br /&gt;* @return Object DataObject if success, null otherwise.&lt;br /&gt;* @throws Exception&lt;br /&gt;*             RemoteException, WIMExcpetion&lt;br /&gt;* @see java.security.PrivilegedExceptionAction#run()&lt;br /&gt;*/&lt;br /&gt;public Object run() throws Exception {&lt;br /&gt;// Subject cut off from the current thread context.&lt;br /&gt;LocalServiceProvider service = getLocalServiceProvider();&lt;br /&gt;if (service == null)&lt;br /&gt;return null;&lt;br /&gt;log.debug("Connected to WIM service " + service.getClass().getName());&lt;br /&gt;return service.update(rootWithUser);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @return Subject logged-in administrator subject.&lt;br /&gt;* @throws NamingException&lt;br /&gt;*/&lt;br /&gt;private Subject retrieveAdminSubject() throws NamingException {&lt;br /&gt;// hard-set the locale to ensure the expected file is always found.&lt;br /&gt;// see also, IaaTrustAssociationInterceptor notes.&lt;br /&gt;ResourceBundle rb = Constants.getResourceBundle();&lt;br /&gt;final String wasAdminUser = rb.getString("admin.user");&lt;br /&gt;final String wasAdminPasswd = rb.getString("admin.pass");&lt;br /&gt;// log.debug("REMOVE ME LATER " + wasAdminUser + " " +&lt;br /&gt;// wasAdminPasswd);&lt;br /&gt;&lt;br /&gt;// This will only work with admin credentials, see props&lt;br /&gt;Subject adminSubject = null;&lt;br /&gt;LoginContext lc = null;&lt;br /&gt;try {&lt;br /&gt;lc = new LoginContext("WSLogin", new WSCallbackHandlerImpl(&lt;br /&gt;wasAdminUser, wasAdminPasswd));&lt;br /&gt;lc.login();&lt;br /&gt;adminSubject = lc.getSubject();&lt;br /&gt;&lt;br /&gt;} catch (Throwable t) {&lt;br /&gt;log.error("LoginContext error " + t.getMessage());&lt;br /&gt;// everything falls apart&lt;br /&gt;}&lt;br /&gt;return adminSubject;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6191228549519518084?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6191228549519518084' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6191228549519518084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6191228549519518084'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/10/websphere-trust-access-interceptor.html' title='WebSphere Trust Access Interceptor'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4755867032181376432</id><published>2009-10-08T16:09:00.010-04:00</published><updated>2010-03-14T18:13:11.226-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Axis SSL for a non-trusted Certificate - Dev, Testing, only.</title><content type='html'>The problem is the Entrust 2048 SSL certificates which were recently issued, every platform I use normally has no trouble accepting them (no imported certificates required!), but deploying on the IBM WebSphere 6.1 JDK/Server is nothing but pain. &lt;br /&gt;&lt;br /&gt;My errors without an import - "No trusted certificate found":&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;00000026 WSX509TrustMa E   CWPKI0022E: SSL HANDSHAKE FAILURE:  &lt;br /&gt;A signer with SubjectDN "blah" was sent from target host:port "blah:443".  &lt;br /&gt;The signer may need to be added to local trust store&lt;br /&gt;"../base_v61/profiles/was61profile1/config/cells/CellName/nodes/NodeName/trust.p12" located in &lt;br /&gt;SSL configuration alias "NodeDefaultSSLSettings". &lt;br /&gt;The extended error message from the SSL handshake exception is: &lt;br /&gt;"No trusted certificate found".&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My errors after attempting to import to trust.p12 - "End user tried to act as a CA"&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;WSX509TrustMa E   CWPKI0022E: SSL HANDSHAKE FAILURE:  &lt;br /&gt;A signer with SubjectDN "blah" was sent from target host:port "blah:443".  &lt;br /&gt;The signer may need to be added to local trust store &lt;br /&gt;"../base_v61/profiles/was61profile1/config/cells/CellName/nodes/NodeName/trust.p12"&lt;br /&gt;located in SSL configuration alias "NodeDefaultSSLSettings". &lt;br /&gt;The extended error message from the SSL handshake exception is: &lt;br /&gt;"End user tried to act as a CA".&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;No matter what I import or try, I keep seeing "End user tried to act as a CA". Well if that's the way it's going to be IBM-TrustManager, that's the way I'm going to play.&lt;br /&gt;&lt;br /&gt;My solution, though designed and tested on IBM runtimes is JDK independent.&lt;br /&gt;&lt;br /&gt;My first play was to switch to &lt;a href="http://xfire.codehaus.org/Client+API"&gt;xfire&lt;/a&gt;, which is just about the coolest/simplest SOAP implementor out there - and I know it uses the commons httpclient package. &lt;br /&gt;&lt;br /&gt;Use &lt;a href="http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/contrib/org/apache/commons/httpclient/contrib/ssl/EasyX509TrustManager.java?view=markup"&gt;Easy SSL TrustManager&lt;/a&gt; implementation, so &lt;a href="http://hc.apache.org/httpclient-3.x/sslguide.html"&gt;easy to override&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;EasySSLTrustManager is designed to accept self-signed certs, not those that are completely borked. So for me, it was required that I copy the httpclient contrib source and add a quick try/catch around the checkClientTrust and checkServerTrusted. This way I still see errors, but the ssl communications proceeds unhindered.&lt;br /&gt;&lt;br /&gt;Then I tried to do the same for an Axis client. There are a few misleading pages on the Axis wiki; which I completely disregarded in favour of control by AxisProperties.&lt;br /&gt;&lt;br /&gt;I'm running on Axis 1.4, but my stubs were generated years ago and I don't want to bother regenerating.&lt;br /&gt;&lt;br /&gt;Here's the great site that set me on the &lt;a href="http://alweb.homeip.net/dw0rm/dblog/?p=38"&gt;"Axis client even with self-signed SSL cert"&lt;/a&gt; path.&lt;br /&gt;&lt;br /&gt;My implementation, however, is much simpler, and reuses the EasySSLTrustManager :)&lt;br /&gt;&lt;br /&gt;We create a TrustAllSSLSocketFactory that implements Axis' SecureSocketFactory&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.security.SecureRandom;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;&lt;br /&gt;import javax.net.ssl.SSLContext;&lt;br /&gt;import javax.net.ssl.TrustManager;&lt;br /&gt;&lt;br /&gt;import org.apache.axis.components.net.JSSESocketFactory;&lt;br /&gt;import org.apache.axis.components.net.SecureSocketFactory;&lt;br /&gt;import org.apache.commons.httpclient.contrib.ssl.EasyX509TrustManager;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Custom SSL socket factory to ignore certificate errors.&lt;br /&gt;* &lt;br /&gt;* Based loosely on org.apache.axis.components.net.SunJSSESocketFactory&lt;br /&gt;* Praise to open source libraries.&lt;br /&gt;*/&lt;br /&gt;public class TrustAllSSLSocketFactory extends JSSESocketFactory implements&lt;br /&gt;SecureSocketFactory {&lt;br /&gt;/**&lt;br /&gt;* Constructor TrustAllSSLSocketFactory&lt;br /&gt;* @param attributes&lt;br /&gt;*/&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;public TrustAllSSLSocketFactory(Hashtable attributes) {&lt;br /&gt;super(attributes);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Init the SSL socket factory with our own Trust Manager.&lt;br /&gt;* &lt;br /&gt;* This overrides the parent class to provide our SocketFactory&lt;br /&gt;* implementation.&lt;br /&gt;* &lt;br /&gt;* @throws IOException&lt;br /&gt;*/&lt;br /&gt;protected void initFactory() throws IOException {&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;SSLContext context = getContext();&lt;br /&gt;sslFactory = context.getSocketFactory();&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;if (e instanceof IOException) {&lt;br /&gt;throw (IOException) e;&lt;br /&gt;}&lt;br /&gt;throw new IOException(e.getMessage());&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Gets a custom SSL Context with no keystore and a Trust All Manager.&lt;br /&gt;* &lt;br /&gt;* @return SSLContext &lt;br /&gt;* @throws Exception&lt;br /&gt;*/&lt;br /&gt;protected SSLContext getContext() throws Exception {&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;// congifure a local SSLContext to use created keystores&lt;br /&gt;SSLContext sslContext = SSLContext.getInstance("SSL");&lt;br /&gt;sslContext.init(null, new TrustManager[] { new EasyX509TrustManager(null) },&lt;br /&gt;new SecureRandom());&lt;br /&gt;&lt;br /&gt;return sslContext;&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;throw new Exception("Error creating context for SSLSocket!", e);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now we tell Axis about it's new SSL Socket Factory. &lt;br /&gt;&lt;br /&gt;I chose to do so in the WSProxy class initializing method, but it can exist any where before the call.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;public class SampleWSProxy implements SampleWS {&lt;br /&gt;private String _endpoint = null;&lt;br /&gt;private com.example.application.webservice.ISampleWS iSampleWS = null;&lt;br /&gt;&lt;br /&gt;public ISampleWSProxy() {&lt;br /&gt;_initISampleWSProxy();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private void _initISampleWSProxy() {&lt;br /&gt;try {&lt;br /&gt;// this Axis default class only works for self-signed certs,&lt;br /&gt;//  or certs loaded by custom keystore. NB. Has version for Sun JDK also.&lt;br /&gt;// AxisProperties.setProperty("axis.socketSecureFactory",&lt;br /&gt;// "org.apache.axis.components.net.IBMJSSESocketFactory");&lt;br /&gt;&lt;br /&gt;// this works for all certs - even when an exception is thrown&lt;br /&gt;// connection ignores the invalid cert and moves on :)&lt;br /&gt;AxisProperties.setProperty("axis.socketSecureFactory",&lt;br /&gt;"full.package.to.TrustAllSSLSocketFactory");&lt;br /&gt;&lt;br /&gt;String socketSecureFactory = AxisProperties&lt;br /&gt;.getProperty("axis.socketSecureFactory");&lt;br /&gt;System.out.println("axis.socketSecureFactory : " + socketSecureFactory);&lt;br /&gt;&lt;br /&gt;iSampleWS = (new ISampleWSServiceLocator())&lt;br /&gt;.getSampleWS();&lt;br /&gt;if (iSampleWS != null) {&lt;br /&gt;if (_endpoint != null) {&lt;br /&gt;((javax.xml.rpc.Stub) iSampleWS)._setProperty(&lt;br /&gt;"javax.xml.rpc.service.endpoint.address", _endpoint);&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;_endpoint = (String) ((javax.xml.rpc.Stub) iSampleWS)&lt;br /&gt;._getProperty("javax.xml.rpc.service.endpoint.address");&lt;br /&gt;}&lt;br /&gt;// Staging has a test/generic provisioning web service&lt;br /&gt;// with default username password as: admin&lt;br /&gt;// callers may/must override! :)&lt;br /&gt;((javax.xml.rpc.Stub) iSampleWS)._setProperty(&lt;br /&gt;javax.xml.rpc.Stub.USERNAME_PROPERTY, "admin");&lt;br /&gt;((javax.xml.rpc.Stub) iSampleWS)._setProperty(&lt;br /&gt;javax.xml.rpc.Stub.PASSWORD_PROPERTY, "admin");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;} catch (javax.xml.rpc.ServiceException serviceException) {&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;... end of _initISampleWSProxy .. followed by available web service methods ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4755867032181376432?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4755867032181376432' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4755867032181376432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4755867032181376432'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/10/axis-ssl-for-non-trusted-certificate.html' title='Axis SSL for a non-trusted Certificate - Dev, Testing, only.'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1354623080697345514</id><published>2009-10-07T14:46:00.001-04:00</published><updated>2009-10-07T15:00:55.809-04:00</updated><title type='text'>building on solaris - make can't find ar</title><content type='html'>Happens all the time while making apache, always have to google the solution!&lt;br /&gt;&lt;br /&gt;" ar: command not found "&lt;br /&gt;&lt;br /&gt;Solution:&lt;br /&gt;&lt;br /&gt;export PATH=$PATH:/usr/ccs/bin/&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;.. back on the path to win.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1354623080697345514?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1354623080697345514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1354623080697345514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1354623080697345514'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/10/building-on-solaris-make-cant-find-ar.html' title='building on solaris - make can&apos;t find ar'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1373934581204234217</id><published>2009-09-30T13:59:00.003-04:00</published><updated>2009-09-30T14:04:20.921-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>WebSphere Global Security OFF</title><content type='html'>This is a massive pain, WAS 6.1 is failing with my new SSL certs with larger (2048) size keys. No matter how perfectly configured my Node Default Trust Store looks with it's happy Signer Certificate, the SSL connection still fails.&lt;br /&gt;&lt;br /&gt;I changed a setting to do with SSL - I knew that was a bad idea! Server won't let me back in the console, time to turn off security.&lt;br /&gt;&lt;br /&gt;To disable global security either edit the security.xml file or use the wsadmin tool.&lt;br /&gt;&lt;br /&gt;$WAS_HOME\config\cells\cellname\security.xml&lt;br /&gt;&lt;br /&gt;Using WAS command-line client wsadmin (run with was user or root privileges):&lt;br /&gt;1. Open a connection to local WAS in offline mode&lt;br /&gt;wsadmin -conntype NONE&lt;br /&gt;&lt;br /&gt;2. Turn off global security&lt;br /&gt;wsadmin&gt; securityoff&lt;br /&gt;&lt;br /&gt;3. Save&lt;br /&gt;wsadmin&gt; $AdminConfig save&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1373934581204234217?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1373934581204234217' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1373934581204234217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1373934581204234217'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/09/websphere-global-security-off.html' title='WebSphere Global Security OFF'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4623688198406804998</id><published>2009-09-29T22:17:00.003-04:00</published><updated>2009-09-29T22:20:44.208-04:00</updated><title type='text'>under appreciated: the web front end</title><content type='html'>It should be the most important thing - it's what we see and interact with! Sadly, in my experience web front ends are treated like an afterthought. "Too many functional requirements to worry about the page view" &lt;br /&gt;&lt;br /&gt;Well, here's a master of the front end, and a brilliantly written article about &lt;a href="http://www.useragentman.com/blog/2009/09/20/font-face-in-depth"&gt;@font-face - embedding web fonts&lt;/a&gt;. I look forward to more from Mr DuLac!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4623688198406804998?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.useragentman.com/' title='under appreciated: the web front end'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4623688198406804998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4623688198406804998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4623688198406804998'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/09/under-appreciate-web-front-end.html' title='under appreciated: the web front end'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1090537986906558239</id><published>2009-09-21T14:51:00.003-04:00</published><updated>2009-09-21T14:58:05.981-04:00</updated><title type='text'>imagining dimensions and books</title><content type='html'>I love well visualized physics, but please note: this book/blog is *imagining up* the images and ideas that match the math of String/M-theory. And believe me, the Math-English translator is a bit iffy at the best of times ;) &lt;br /&gt;&lt;br /&gt;Anyway, please enjoy "Imagining the 10th Dimension" and be sure to listen to "But aren't there 11 dimensions".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/user/10thdim"&gt;You Tube Channel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;From the description, I am reminded of a fascinating victorian-era novella (I thought it was about physics!) called: &lt;a href="http://en.wikipedia.org/wiki/Flatland"&gt;Flatland: a romance of many dimensions&lt;/a&gt;. If you ever see it in the wild, pick it up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1090537986906558239?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1090537986906558239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1090537986906558239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1090537986906558239'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/09/imagining-dimensions-and-books.html' title='imagining dimensions and books'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6999441115163377540</id><published>2009-03-18T09:42:00.000-04:00</published><updated>2009-03-18T09:42:02.929-04:00</updated><title type='text'>watchmen - saving humanity</title><content type='html'>By now, I expect that you all have watched &lt;span style="font-style:italic;"&gt;The Watchmen&lt;/span&gt;. If not, stop wasting your time. Leave now. &lt;br /&gt;&lt;br /&gt;Also, if you can't handle tongue-in-cheek, adult discussion, stop reading, get of the internet.&lt;br /&gt;&lt;br /&gt;The question raised is; what are you prepared to do - to save all of us from ourselves?&lt;br /&gt;&lt;br /&gt;Many authors put forth that mankind is it's own worst enemy. We are destructive, flawed. Where are the would-be saviors? why aren't more "solutions" coming forward? Oh, right .. we're also apathetic.&lt;br /&gt;&lt;br /&gt;We dodge real solutions because of their immediate cost, without regard to indirect return. This applies to life choices, business decisions as well as the world environmental and economic situation.&lt;br /&gt;&lt;br /&gt;Let's run a hypothetical here. If we could fix the rampant environmental "Global Weirding", save the coral and retain biodiversity, prevent the sea level rise, etc. etc. But to do so, we had to immediately sacrifice six million people... Who would make that choice? it's only 0.001% of our population.&lt;br /&gt;&lt;br /&gt;And what if it were by volunteer efforts. Would enough step forward? There are about a million suicides a year, it might work.&lt;br /&gt;&lt;br /&gt;Then instead of all that, we say, lets get a handle on the population for the sake of the planet. Limit each human to beget one child - thus, each couple two. How would we *begin* to enforce this globally? &lt;br /&gt;&lt;br /&gt;Better to continue to war with other humans as an organic population check.&lt;br /&gt;&lt;br /&gt;And, which hypothetical suggestion do you think might raise the most outrage?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Post Scriptum. why are men so obsessed with penises - blue or otherwise?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6999441115163377540?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Watchmen' title='watchmen - saving humanity'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6999441115163377540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6999441115163377540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6999441115163377540'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/03/watchmen-saving-humanity.html' title='watchmen - saving humanity'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6586452680844592697</id><published>2009-03-17T21:30:00.003-04:00</published><updated>2009-03-17T21:48:18.632-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>crazy good or crazy bad? - you already know i mean both!</title><content type='html'>today was uncomfortably hot; my office is &lt;i&gt;reedeekerous&lt;/i&gt;! i have zee sniffles.. *pouts* .. and i went a wee bit crazy! &lt;br /&gt;&lt;br /&gt;Also, i felt left out because I don't own any green.  Well, hello world, &lt;a title="qwantz - dinosaur comics" href="http://www.qwantz.com/archive/001430.html"&gt;St Patrick's was originally celebrated with *BLUE*&lt;/a&gt;. The internets says so!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.qwantz.com/comics/comic2-1457.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 735px; height: 500px;" src="http://www.qwantz.com/comics/comic2-1457.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I'm busy doing the fiddly stuff at work. Not really busy per se.. just trying to finish so I can stop paying attention and meditate upon my upcoming vacation.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's been more than a year since my last round-the-world super-vacation (east eu, india, thailand and oz). I badly need some time to stop thinking and hit reset. Granted, I'm sniffling and fairly pathetic, but the day that I skip out on both drinking &amp;amp; my painting class to come home and nap is a sad day indeed!&lt;br /&gt;&lt;br /&gt;Also, if you already know all of the items on "&lt;a href="http://youshouldhaveseenthis.com/"&gt;the stuff you should have seen list&lt;/a&gt;" - I probably want to have sex with you. really. man, woman or other. nerds are hawt.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mows.com/mows/strip822.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 700px; height: 236px;" src="http://www.mows.com/mows/strip822.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;You already know I mean both!&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another random fact, throughout my life I have wondered why people say "toot sweet".. for the first time I saw it written; &lt;a href="http://www.phrases.org.uk/meanings/390125.html"&gt;tout de suite&lt;/a&gt;. How terrifically do we butcher french?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6586452680844592697?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6586452680844592697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6586452680844592697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6586452680844592697'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/03/crazy-good-or-crazy-bad-you-already.html' title='crazy good or crazy bad? - you already know i mean both!'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4442555281365053328</id><published>2009-03-12T19:57:00.004-04:00</published><updated>2009-10-23T09:06:50.069-04:00</updated><title type='text'>last.fm concerts in your calendar</title><content type='html'>Cool and simple; loading &lt;a href="http://www.last.fm/home/eventrecs"&gt;last.fm Toronto concerts&lt;/a&gt; into &lt;a href="http://www.google.com/calendar/embed?src=syberchic%40gmail.com&amp;ctz=America/New_York "&gt;my google calendar&lt;/a&gt;. How awesome is ical now we have the tools?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4442555281365053328?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.last.fm/home/eventrecs' title='last.fm concerts in your calendar'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4442555281365053328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4442555281365053328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4442555281365053328'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/03/lastfm-concerts-in-your-calendar.html' title='last.fm concerts in your calendar'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8111534974144669851</id><published>2009-03-06T11:28:00.005-05:00</published><updated>2009-03-07T18:38:51.519-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>things that are weird for me</title><content type='html'>People asking me to do something, and immediately offering a vague back-scratch in return. &lt;br /&gt;&lt;br /&gt;This feels shady.&lt;br /&gt;&lt;br /&gt;If someone asks a favour, I will think about whether I can do it - considering how much personal time and effort is required, in addition to literal capability. If I can, I will always say yes. I assume if future-me asks a similar weighted favour, it is thus more likely to be a yes. &lt;br /&gt;&lt;br /&gt;I assume other people are like me. They mostly aren't.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8111534974144669851?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8111534974144669851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8111534974144669851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8111534974144669851'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/03/things-that-are-weird-for-me.html' title='things that are weird for me'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6649828709009188316</id><published>2009-03-01T13:13:00.002-05:00</published><updated>2009-03-07T18:39:11.307-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Among the Inept, Researchers Discover, Ignorance Is Bliss  - New York Times</title><content type='html'>&lt;a href="http://query.nytimes.com/gst/fullpage.html?res=9E03EFD61E3AF93BA25752C0A9669C8B63&amp;amp;sec=&amp;amp;spon=&amp;amp;pagewanted=all"&gt;Incompetent individuals are less able to recognize competence in themselves or others. &lt;/a&gt; Published by the New York Times.&lt;br /&gt;&lt;br /&gt;The findings, the psychologists said, support Thomas Jefferson's assertion that "he who knows best knows how little he knows."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6649828709009188316?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://query.nytimes.com/gst/fullpage.html?res=9E03EFD61E3AF93BA25752C0A9669C8B63&amp;sec=&amp;spon=&amp;pagewanted=all' title='Among the Inept, Researchers Discover, Ignorance Is Bliss  - New York Times'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6649828709009188316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6649828709009188316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6649828709009188316'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/03/among-inept-researchers-discover.html' title='Among the Inept, Researchers Discover, Ignorance Is Bliss  - New York Times'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7280546967230273849</id><published>2009-02-03T13:40:00.005-05:00</published><updated>2009-03-07T18:39:21.781-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>what kind of transactional?</title><content type='html'>An an article of transactions. Human perception is too often way off course. &lt;br /&gt;&lt;br /&gt;While I love the spring based transaction manager - simply configure by method name wildcard matches! (not really that simple, but close) - I heartily dislike the lack of thought surrounding transaction management in a "set once, and forget" situation like this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7280546967230273849?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ibm.com/developerworks/java/library/j-ts1.html' title='what kind of transactional?'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7280546967230273849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7280546967230273849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7280546967230273849'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/02/what-kind-of-transactional.html' title='what kind of transactional?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7820717762141729373</id><published>2009-02-01T22:29:00.004-05:00</published><updated>2009-03-07T18:39:36.611-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>time to shake it up?</title><content type='html'>There's no question I've been having a fantastic time recently. I couldn't be more excited about how my oil painting is progressing - and the anatomy for artists study is invaluable... and lexulous (srabulous) is back on facebook! &lt;br /&gt;&lt;br /&gt;And that's just my personal life. My working life never slows down - we have a great product on a flexible core component set, and it looks like this year will see even wider adoption. &lt;br /&gt;&lt;br /&gt;I credit the success during expansion to a couple of changes; one process, the second design. The design is relatively obvious, but I'm sure I could have implemented it more elegantly, implementation of multi-version services through a single stable public model - while working on the core private implementations without affecting clients. &lt;br /&gt;&lt;br /&gt;The process change has been enforcing of the maven build/release - even in the DEV environment. No release goes out without a unique version. Even during the quiet of December, it was worth the extra few minutes - for my sanity's sake :)&lt;br /&gt;&lt;br /&gt;It's always a hard call when it comes to staying the current course or finding something new. I'm trying to think about what's best for my career. On the one hand, my current team are awesome and the boys next door make me laugh, the technology is slowly coming up to date (previously JDK 1.4 - now JDK 6), however it's a strong focus on integration and back-end services - rather than full application design. &lt;br /&gt;&lt;br /&gt;I guess I want it all! From back end design to fancy web 2.0 front end stuff :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7820717762141729373?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7820717762141729373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7820717762141729373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7820717762141729373'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2009/02/time-to-shake-it-up.html' title='time to shake it up?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2309909257854561903</id><published>2008-12-29T15:41:00.001-05:00</published><updated>2009-03-07T18:39:47.781-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Asperger Test (AQ Test) - Pie Palace</title><content type='html'>OK, so I'm a 38/50 where "Scores over 32 are generally taken to indicate Asperger's Syndrome or high-functioning autism, with more than 34 an "extreme" score."&lt;br /&gt;&lt;br /&gt;Now tell me, dear audience, what is the polite way to tell a friend he should take the test? &lt;br /&gt;&lt;br /&gt;We've already established I'm more than a little socially awkward, and sure to phrase it poorly :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.piepalace.ca/blog/asperger-test-aq-test"&gt;Asperger Test (AQ Test) - Pie Palace&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2309909257854561903?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.piepalace.ca/blog/asperger-test-aq-test' title='Asperger Test (AQ Test) - Pie Palace'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2309909257854561903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2309909257854561903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2309909257854561903'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/12/asperger-test-aq-test-pie-palace.html' title='Asperger Test (AQ Test) - Pie Palace'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7493488091458719810</id><published>2008-11-16T17:27:00.004-05:00</published><updated>2009-03-07T18:39:57.635-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><title type='text'>processing input</title><content type='html'>For the first time, I will admit to being a pop-culture addict. On the premise of "research" I'm beginning to see the art in everything - but mainly comics recently ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7493488091458719810?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jilliantamaki.com/sketchbook/2008/10/idea-generation.html' title='processing input'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7493488091458719810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7493488091458719810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7493488091458719810'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/11/processing-input.html' title='processing input'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1879735957525781560</id><published>2008-08-21T20:19:00.004-04:00</published><updated>2009-03-07T18:40:06.883-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>what we brag about</title><content type='html'>You can tell so much about people from the things they brag about .. and how long ago it happened. Like someone in their late 20s talking about something they did in school/university.. I barely remember that time of my life.&lt;br /&gt;&lt;br /&gt;Anyway, this got me thinking about the things I brag about. Most of the things I'm truly proud of are work-related, or general nerd or programming related. &lt;br /&gt;&lt;br /&gt;Or my impressive occasional binge drinking bouts. &lt;br /&gt;&lt;br /&gt;I hardly every speak of the things that truly make me happy. Like my artistic endeavors and my love of travel. What must people think of me?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1879735957525781560?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1879735957525781560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1879735957525781560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1879735957525781560'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/08/what-we-brag-about.html' title='what we brag about'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6937685146114812578</id><published>2008-08-10T10:51:00.003-04:00</published><updated>2009-03-07T18:41:45.598-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>summer of art and rainfall</title><content type='html'>Taking on two 3 hour classes per week (Foundation Drawing II and Abstract Painting) has been fantastic and tiring. I have barely had time to think, except to plan how I can spend more time doing art, and wondering if I will ever be any good :)&lt;br /&gt;&lt;br /&gt;Due to constraints at my current client (i.e. they are still using JDK 1.4.2) and a whole host of other reasons, most of my work is completely straightforward. The most complex of my tasks are those that involve people, and there's only one way to get used to that.. patience and practice. I've been in several senior roles, but the personalities in this mix are something else again. Lucky I don't mind apologizing and starting over when I get a bit too intense. &lt;br /&gt;&lt;br /&gt;This is what I miss about Australia, it was OK to be direct. Eventually my edge will wear off.. but frankly, my edge is the reason I'm so damn excellent. C'est la vie.&lt;br /&gt;&lt;br /&gt;This summer it hit home that I'm permanently on this planet, in this city, doing my thing and no one else influences my decisions. And I'm finally truly single. I spent such a long time wondering why I was, in fact, I still do, but I at least I appreciate it now. &lt;br /&gt;&lt;br /&gt;At the time I thought it was my biggest mistake, but at the same time, I don't see how it could have gone any other way. Maybe other people would work it, but I don't do relationships where I'm at the end of the list of todo items.. and I couldn't connect when he only let me in on the thoughts that had been tried, tested and sanitized.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6937685146114812578?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6937685146114812578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6937685146114812578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6937685146114812578'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/08/summer-of-art-and-rainfall.html' title='summer of art and rainfall'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4387845279964381011</id><published>2008-05-04T13:55:00.004-04:00</published><updated>2009-03-07T18:40:17.048-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>tagging gone mad</title><content type='html'>ROTFL.. well I just let tagcow at my flickr archive. It's an interesting concept of semantically tagging images. Presumably they have some object/facial recognition software behind this - although they don't specify what/how. &lt;br /&gt;&lt;br /&gt;I was allowed to upload a couple of photos and identify the people in them (I was in a hurry to see the result, so I only did two: syber and frobozz).&lt;br /&gt;&lt;br /&gt;What I ended up with is hilarious, sometimes obvious and more than occasionally wrong.. my brother-in-law is tagged as frobozz multiple times.&lt;br /&gt;&lt;br /&gt;Who wants to be tagged as a lady?? "&lt;a target="_blank" href="http://flickr.com/search/?s=int&amp;w=35409286%40N00&amp;q=lady+syber&amp;m=tags"&gt;lady syber"&lt;/a&gt; (which includes one of my german housemate - does she look like me?)&lt;br /&gt;&lt;br /&gt;Especially &lt;a target="_blank" href="http://flickr.com/photos/syberchic/1451026562/"&gt;this classic&lt;/a&gt;, me holding some pig crackling and checking out my freely lymphing scraped knee. &lt;br /&gt;&lt;br /&gt;A brilliant summary here; two of my friends drinking becomes "&lt;a target="_blank" href="http://flickr.com/photos/syberchic/1451021866/"&gt;two men bar&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;This one is by far my favorite: &lt;a target="_blank" href="http://flickr.com/photos/syberchic/488143736/"&gt;frobozz faster easier together accerating hpc man sitting front servers floor mouth wire keyboard lap&lt;/a&gt;. Not only did it pick up *all* the text in the image (a tiny OCR error on accelerating), and identify the objects correctly, but it noticed the "mouth wire"!!! I didn't even see that!&lt;br /&gt;&lt;br /&gt;So, the verdict on tagcow. Good idea. "A" for effort. &lt;span style="font-weight:bold;"&gt;Fail &lt;/span&gt;for tagging every freaking photo with &lt;span style="font-style:italic;"&gt;useless information&lt;/span&gt; like "guy", "woman", "sitting". &lt;br /&gt;&lt;br /&gt;And what the hell is up with the &lt;a href="http://flickr.com/photos/syberchic/563327527/"&gt;typing errors&lt;/a&gt;? Is this really an automated system, or is it a bunch of low-wage outsourced workers typing like mad?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4387845279964381011?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tagcow.com/' title='tagging gone mad'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4387845279964381011' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4387845279964381011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4387845279964381011'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/05/tagging-gone-mad.html' title='tagging gone mad'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5483784458021845389</id><published>2008-05-03T08:26:00.004-04:00</published><updated>2009-03-07T18:40:26.537-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Schmap Australia Second Edition: Photo Inclusion</title><content type='html'>I'd like to share some happy news. One of my Australian photos - Brighton Beach (looking north to the city centre) - was selected for inclusion in the &lt;a href="www.schmap.com/australia/water/p=141497/i=141497_4.jpg"&gt;Schmap Australia Guide&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;This is obviously a great way to promote their guide, and obtain free media, however, I still think it's cool =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5483784458021845389?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5483784458021845389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5483784458021845389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5483784458021845389'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/05/schmap-australia-second-edition-photo.html' title='Schmap Australia Second Edition: Photo Inclusion'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3350342611877582436</id><published>2008-04-09T08:39:00.004-04:00</published><updated>2008-04-09T08:47:51.835-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Browser Options</title><content type='html'>It's good to see that with IE8, software developers are finally recognizing the value of choice.&lt;br /&gt;&lt;br /&gt;Long gone are the days when anyone bothers complaining about browser implementations anymore.. We know there's always going to be workarounds, it's kind of like a &lt;a href="http://quirksmode.org/"&gt;treasure&lt;/a&gt; hunt for the coolest hacks now ;). &lt;br /&gt;&lt;br /&gt;What a hit &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1419"&gt;IE Tab&lt;/a&gt; is with Firefox users.. way behind the game as usual, but with IE8, Microsoft have give us IE7 mode! &lt;br /&gt;&lt;br /&gt;Of course that doesn't help me access my company SAP Portal, which only works in IE6 (not Netscape, Safari, Firefox, not IE7, and nothing seems to work in IE8!).&lt;br /&gt;&lt;br /&gt;It's been around for a while now, and it will probably be some time before I can let go of "&lt;a href="http://tredosoft.com/Multiple_IE"&gt;Multiple IEs&lt;/a&gt;". And life was good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3350342611877582436?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tredosoft.com/Multiple_IE' title='Browser Options'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3350342611877582436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3350342611877582436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3350342611877582436'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/04/browser-options.html' title='Browser Options'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4299026693929921173</id><published>2008-02-27T21:25:00.007-05:00</published><updated>2008-03-18T22:05:34.243-04:00</updated><title type='text'>the internet is wonderful (as in, still fills me with wonder)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I think &lt;a style="font-family: verdana;" href="http://friendfeed.com/"&gt; friend feed&lt;/a&gt; is fabulous. &lt;span style="font-weight: bold; color: rgb(255, 204, 102);"&gt;I suggest you sign up to it immediately so I can stop asking you how you are, and simply read your feed&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I stumbled upon it today - it's an aggregator of internet lives. As most of my life is online, &lt;a style="font-family: verdana;" href="http://friendfeed.com/syberchic"&gt;it is my life&lt;/a&gt;. Cutest thing: i can have &lt;a href="http://friendfeed.com/settings/imaginary"&gt;imaginary friends &lt;/a&gt;:)&lt;br /&gt;&lt;br /&gt;The other site that popped into my life today is Google's recent acquisition; GrandCentral. "snipped--removed-my-account-sick-of-wrong-numbers!--"&lt;br /&gt;&lt;br /&gt;I picked a random US number. What the hey! They don't have Canada (an irritatingly common omission), and many family/friends are in Australia, so it's just another international number. What's great (aside from magical online voicemail bizo; I don't enjoy talking on the phone) is the ability to direct the call to one or more variable numbers.&lt;br /&gt;&lt;br /&gt;I'm terribly excited about the current WebSphere Portal SSO implementation I'm assigned to. The requirements are to build "sample" porlets to demonstrate capabilities. Do you know what that means?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;No interface niceties, pure code&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Also, the WebSphere Portal V6 is pretty excellent in terms of configuring rules for personalization, etc. It's no wonder I was at the office til after 7 tinkering with it ;)&lt;br /&gt;&lt;br /&gt;As a result, it was so damn cold when I left, my face went numb in minutes. My nose started running, but I couldn't feel it until it hit my mouth. *ewrweurwerughghhghhhh*&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4299026693929921173?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://friendfeed.com/syberchic' title='the internet is wonderful (as in, still fills me with wonder)'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4299026693929921173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4299026693929921173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4299026693929921173'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/02/internet-is-wonderful-as-in-still-fills.html' title='the internet is wonderful (as in, still fills me with wonder)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6087408437677434464</id><published>2008-02-10T21:32:00.001-05:00</published><updated>2008-02-22T19:41:55.290-05:00</updated><title type='text'>pure blue sky, pure winter cold</title><content type='html'>The sky is clear, and the air is frozen. Ah Toronto, I'm back from Australia's summer and just when I was starting to like (well maybe not like, but, get used to!) the snow, you went and froze all that melt water and turned the pavements into a giant skating course.&lt;br /&gt;&lt;br /&gt;Although, I would like to note, there are brilliant Torontonians out there who hate wading through/jumping over the slush puddles on street corners.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/mr_kevino/2254190904/sizes/m/in/pool-89872566@N00/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://farm3.static.flickr.com/2076/2254190904_6622dd2db7.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6087408437677434464?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6087408437677434464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6087408437677434464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6087408437677434464'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2008/02/pure-blue-sky-pure-winter-cold.html' title='pure blue sky, pure winter cold'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2076/2254190904_6622dd2db7_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8391873684092393006</id><published>2007-12-06T01:07:00.001-05:00</published><updated>2007-12-06T01:12:03.846-05:00</updated><title type='text'>Enterprise 2.0 - tried selling any reality lately?</title><content type='html'>Bex Huff on what Enterprise 2.0 should mean. Stop trying to be everything to everyone, and &lt;span style="font-size:130%;"&gt;let everyone at everything&lt;/span&gt;.. See what survives.&lt;br /&gt;&lt;br /&gt;Too long have we been trying to force people to use information and functions the way a few UI/business analysts tell us to. Allow software to evolve, create a 2.0 approach to your business.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bexhuff.com/node/391"&gt;read more on bex' blog&lt;/a&gt; | &lt;a href="http://digg.com/programming/Enterprise_2_0_tried_selling_any_reality_lately"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8391873684092393006?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8391873684092393006' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8391873684092393006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8391873684092393006'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/12/enterprise-20-tried-selling-any-reality.html' title='Enterprise 2.0 - tried selling any reality lately?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8418324028396917281</id><published>2007-11-21T15:04:00.001-05:00</published><updated>2009-03-07T18:40:59.037-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='life'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Rands In Repose: The Nerd Handbook</title><content type='html'>Consider the Nerd. Where would we be without him(her)(me)? This handbook is your user guide. &lt;br /&gt;&lt;br /&gt;Now all I need is a guide to finding one for myself ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8418324028396917281?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html' title='Rands In Repose: The Nerd Handbook'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8418324028396917281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8418324028396917281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8418324028396917281'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/11/rands-in-repose-nerd-handbook.html' title='Rands In Repose: The Nerd Handbook'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-6627901466334839975</id><published>2007-11-16T10:49:00.000-05:00</published><updated>2007-11-16T10:51:10.114-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><title type='text'>how lovely (nobodyhere)</title><content type='html'>"I'd like to&lt;br /&gt;apologize for all&lt;br /&gt;this."&lt;br /&gt;&lt;br /&gt;It thinks like me - except realized into a site that's &lt;a href="http://www.nobodyhere.com/justme/toes.here"&gt;beautiful and funny and bizarre (nobodyhere)&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-6627901466334839975?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nobodyhere.com/justme/me.here' title='how lovely (nobodyhere)'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=6627901466334839975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6627901466334839975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/6627901466334839975'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/11/how-lovely-nobodyhere.html' title='how lovely (nobodyhere)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2989608813133951508</id><published>2007-11-08T11:35:00.000-05:00</published><updated>2007-11-08T11:36:20.892-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><title type='text'>Every Day is a Great Day With Pascal</title><content type='html'>Do you need cheering up ? Or to send a cheery message?&lt;br /&gt;&lt;br /&gt;Spread the Good Day message : &lt;a href="http://www.coldhardflash.com/2007/11/every-day-is-great-day-with-pascal.html"&gt;Cold Hard Flash: Every Day is a Great Day With Pascal: Flash animation news and links&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2989608813133951508?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.coldhardflash.com/2007/11/every-day-is-great-day-with-pascal.html' title='Every Day is a Great Day With Pascal'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2989608813133951508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2989608813133951508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2989608813133951508'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/11/every-day-is-great-day-with-pascal.html' title='Every Day is a Great Day With Pascal'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2053238167013834351</id><published>2007-11-05T13:41:00.000-05:00</published><updated>2007-11-05T13:42:51.688-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>RAD deployed applications</title><content type='html'>Because I always forget the path:&lt;br /&gt;&lt;br /&gt;[workspace]\.metadata\.plugins\org.eclipse.wst.server.core\tmp[0-9]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2053238167013834351?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2053238167013834351' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2053238167013834351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2053238167013834351'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/11/rad-deployed-applications.html' title='RAD deployed applications'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7032020469806920388</id><published>2007-11-04T12:53:00.000-05:00</published><updated>2007-12-06T01:14:12.361-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='life'/><title type='text'>The Art of Happiness - Dalai Lama has nuthin on Dan Gilbert</title><content type='html'>Incredible research which points to the fact that happiness is produced, regardless of circumstances. Or perhaps, in spite of, in his examples.&lt;br /&gt;&lt;br /&gt;I propose that much unhappiness comes from wondering why, as successful people, we aren't happier than we are!?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ted.com/talks/view/id/97"&gt;TED | Talks | Dan Gilbert: Why are we happy? Why aren't we happy? (video)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"tis nothing good or bad, but thinking makes it so" -- shakespeare&lt;br /&gt;&lt;br /&gt;Geeze I love graphs :)&lt;br /&gt;&lt;br /&gt;No offense to the Dalai Lama - in fact, they are both talking about the same thing. I attended his recent talk in Toronto.. he's a delightful, cheeky, charming speaker. His proposals are almost too obvious.&lt;br /&gt;&lt;br /&gt;Find peace within yourself and you will be able to intellectually find peace with those you don't like. Teach children kindness and compassion in school and they will grow up to be better people.&lt;br /&gt;&lt;br /&gt;*sigh* Too easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7032020469806920388?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ted.com/talks/view/id/97' title='The Art of Happiness - Dalai Lama has nuthin on Dan Gilbert'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7032020469806920388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7032020469806920388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7032020469806920388'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/11/art-of-happiness-dalai-lama-has-nuthin.html' title='The Art of Happiness - Dalai Lama has nuthin on Dan Gilbert'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4558907593995301009</id><published>2007-10-31T09:58:00.001-04:00</published><updated>2009-03-07T18:41:34.616-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>What is the Google Collections Library?</title><content type='html'>Generic collections (commons extreme makeover by google) &lt;a href="http://www.javalobby.org/articles/google-collections/"&gt;What is the Google Collections Library?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An excellent article, and something we should all remember; "write less code, have less to test"!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4558907593995301009?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.javalobby.org/articles/google-collections/' title='What is the Google Collections Library?'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4558907593995301009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4558907593995301009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4558907593995301009'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/10/what-is-google-collections-library.html' title='What is the Google Collections Library?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-4160117000772716202</id><published>2007-10-27T21:03:00.000-04:00</published><updated>2007-10-27T21:14:33.861-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>A week of content management</title><content type='html'>An exhausting week of training lays behind me. I'm only just recovering!&lt;br /&gt;&lt;br /&gt;Oracle made another acquisition, added to their Fusion Middleware line (which to me, is "apps that do stuff, with nothing in common"). Stellent content server has been Universal Content management, and we were lucky enough to have a week with a trainer who had been working with the product for a decade.&lt;br /&gt;&lt;br /&gt;The product looks smooth, the core architecture is true SOA. That is, SOA from the start, not services slapped on top of an application. Features seem to be strongly influenced by necessity. The main complaint in the class was: admin interface is ugly, and things aren't where I expect.&lt;br /&gt;&lt;br /&gt;For me it seemed fairly obvious :) But no bragging, because liking an interface that was so obviously programmer-designed, isn't something to be proud of! ;)&lt;br /&gt;&lt;br /&gt;I cruised through the week.. and hacked through the product after finishing all the exercises early.. and the verdict is; I can't wait to get out into the field!&lt;br /&gt;&lt;br /&gt;I love being in the office, I like people and having my own cube.. I'm also a junkie for meeting new people and solving their problems.&lt;br /&gt;&lt;br /&gt;I like the sound of that: syber, your friendly problem-solving junkie. Show me your issues!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-4160117000772716202?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/products/content-management/ucm/index.html' title='A week of content management'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=4160117000772716202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4160117000772716202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/4160117000772716202'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/10/week-of-content-management.html' title='A week of content management'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1515401627932991218</id><published>2007-10-11T12:49:00.002-04:00</published><updated>2009-03-07T18:41:13.279-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>Note to self. synchronized singleton access</title><content type='html'>So, what's the best thread safe singleton instantiation.. I must look this up sometime.&lt;br /&gt;&lt;br /&gt;Here's what we have now.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public static SingletonObject getInstance() {&lt;br /&gt; if (instance == null) {&lt;br /&gt;  synchronized (SingletonObject.class) {&lt;br /&gt;                        // might have been preempted just after first check &lt;br /&gt;                        // but before the synchronized statement was executed&lt;br /&gt;   if (instance == null) {&lt;br /&gt;    instance = new SingletonObject();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; return instance;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1515401627932991218?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1515401627932991218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1515401627932991218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1515401627932991218'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/10/note-to-self-synchronized-singleton.html' title='Note to self. synchronized singleton access'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1650242710709820853</id><published>2007-09-12T19:31:00.000-04:00</published><updated>2007-10-27T21:15:26.400-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Struts2 panic and WebSphere fiddling</title><content type='html'>Absolute panic overcame me yesterday. &lt;br /&gt;&lt;br /&gt;I'm about to wrap up a grueling rewrite of several ancient and poorly written (circa 2000) java apps, plus two truly hideous Net.Data apps.. which, to alleviate the pain and tedium, I decided to rewrite in Struts2. Not something I have a boatload of experience with, but I like to jump in the deep end ;)&lt;br /&gt;&lt;br /&gt;The Net.Data apps were several pages in a single file. Back and forth with functions and HTML, several forms per page, with variables floating in and out everywhere. No scope, no state, no layers. &lt;br /&gt;&lt;br /&gt;So chuffed by my rejuvenated Struts2 elegance, I deployed to WebSphere ND 6.1 - to find that every single action was 404. JSPs served, so I knew it was working, just not actions.&lt;br /&gt;&lt;br /&gt;I even tried changing the extension to html! lol - it was nearly 8pm and I really wasn't thinking ;)&lt;br /&gt;&lt;br /&gt;When I eventually got smart, i.e. googled it, I found a simple (somewhat dodgy) fix from IBM: &lt;a href="http://www-1.ibm.com/support/docview.wss?uid=swg1PK31377"&gt;Add a Web Container property called com.ibm.ws.webcontainer.invokeFiltersCompatibility&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1650242710709820853?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nabble.com/-S2--Websphere-6.1-Showcase-application%2C-Response-already-committed-warning-in-logs-tf3468980.html#a9831115' title='Struts2 panic and WebSphere fiddling'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1650242710709820853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1650242710709820853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1650242710709820853'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/09/struts2-panic-and-websphere-fiddling.html' title='Struts2 panic and WebSphere fiddling'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1499289183256004002</id><published>2007-08-21T22:22:00.000-04:00</published><updated>2007-10-27T21:16:43.884-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='practice'/><title type='text'>Wanting to do things correctly</title><content type='html'>I wonder sometimes whether I am excessively correct about my approach to my work. After years of experience, &lt;span style="font-weight:bold;font-style:italic;"&gt;I believe it is much faster for me to do things correctly&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Do it right up front, and making adjustments later does not make you want to rip people's limbs off. &lt;br /&gt;&lt;br /&gt;I'm convinced of it, but is that just the obsessive-compulsiveness talking? &lt;br /&gt;&lt;br /&gt;For example, I refuse to update code that isn't formatted correctly. Unused imports bug the hell out of me. Missing javadoc, doctypes. I must fix them.&lt;br /&gt;&lt;br /&gt;Sometimes its only a few keystrokes of effort (Cntrl-Shift-F or O), but sometimes it's a lot more. Many people I work with seem to be quite OK with misaligned braces.&lt;br /&gt;&lt;br /&gt;I can only hope that those who come after me appreciate alignment ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1499289183256004002?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1499289183256004002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1499289183256004002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1499289183256004002'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/08/wanting-to-do-things-correctly.html' title='Wanting to do things correctly'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8105747248008030689</id><published>2007-06-28T16:07:00.000-04:00</published><updated>2007-06-28T16:18:59.268-04:00</updated><title type='text'>Maintaining composure and optimism</title><content type='html'>After all these years in the industry, the people far outshadow the technology when it comes to influencing daily job satisfaction.&lt;br /&gt;&lt;br /&gt;After dealing with an argumentative, finger-pointing, badly smelling individual who refuses to live in the same reality as the rest of the team; I went home yesterday with a ripping headache and totally dispirited. &lt;br /&gt;&lt;br /&gt;Today, I have *chocolates* for the assistance I gave a colleague outside my department, and my manager telling me I deserve a bonus.&lt;br /&gt;&lt;br /&gt;Yay! Like dory said in Finding Nemo, "just keep on swimming".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8105747248008030689?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8105747248008030689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8105747248008030689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8105747248008030689'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/06/maintaining-composure-and-optimism.html' title='Maintaining composure and optimism'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1489153767433548377</id><published>2007-06-22T17:40:00.000-04:00</published><updated>2007-06-22T17:42:59.745-04:00</updated><title type='text'>HTML from history</title><content type='html'>Found in a production application. Client shall remain nameless. How far haven't we come?&lt;br /&gt;&lt;br /&gt;&amp;lt;meta equiv="Content-Type" content="text/html; charset=windows-1252"&amp;gt;&lt;br /&gt;&amp;lt;meta name="Generator" content="Microsoft Word 97"&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt; -- removed -- &amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;META NAME="Template"&lt;br /&gt;    CONTENT="C:\Program Files\Microsoft Office\Office\html.dot"&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1489153767433548377?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1489153767433548377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1489153767433548377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1489153767433548377'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/06/html-from-history.html' title='HTML from history'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3482095933158069808</id><published>2007-04-25T12:27:00.000-04:00</published><updated>2007-04-25T12:30:20.656-04:00</updated><title type='text'>tnsnames.ora - both handy and annoying when lost!</title><content type='html'>I have become so accustomed to have SIDs configured in tnsnames.ora - never having to remember anything.&lt;br /&gt;&lt;br /&gt;After migrating to a new laptop yesterday, I lost all my connection information (doh!) and have had to resort back to the SQL Plus connect string. How beautiful it is:&lt;br /&gt;&lt;br /&gt;sqlplus user/password@//10.10.10.10:1521/sid&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3482095933158069808?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3482095933158069808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3482095933158069808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3482095933158069808'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/04/tnsnamesora-both-handy-and-annoying.html' title='tnsnames.ora - both handy and annoying when lost!'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3393173432221394092</id><published>2007-04-23T16:02:00.000-04:00</published><updated>2007-04-25T12:35:43.014-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>select random</title><content type='html'>And they call SQL a "standard" ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Select a random row with MySQL:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELECT column FROM table&lt;br /&gt;ORDER BY RAND()&lt;br /&gt;LIMIT 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Select a random row with PostgreSQL:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELECT column FROM table&lt;br /&gt;ORDER BY RANDOM()&lt;br /&gt;LIMIT 1&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Select a random row with Microsoft SQL Server:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELECT TOP 1 column FROM table&lt;br /&gt;ORDER BY NEWID()&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Select a random row with IBM DB2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELECT column FROM table&lt;br /&gt;ORDER BY RAND()&lt;br /&gt;FETCH FIRST 1 ROWS ONLY&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Select a random record with Oracle:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SELECT column FROM&lt;br /&gt;( SELECT column FROM table&lt;br /&gt;ORDER BY dbms_random.value )&lt;br /&gt;WHERE rownum = 1&lt;br /&gt;&lt;br /&gt;Note. I'm not complaining too seriously, in my work I mostly use Oracle (occasionally DB/2 but that can't be helped). I am aware of the wealth of functionality available at Oracle over say, MySQl, which mostly excuses the differing syntax.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3393173432221394092?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3393173432221394092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3393173432221394092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3393173432221394092'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/04/select-random.html' title='select random'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5834682261803670108</id><published>2007-03-06T11:18:00.000-05:00</published><updated>2007-10-27T21:15:41.393-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><title type='text'>Hard, Soft, Weak and Phantom</title><content type='html'>The title sounds so exciting until I explain I'm referring to Java references. I was asked to explain weak references in an interview. I'm so careful with my words I said I couldn't explain it well enough. &lt;br /&gt;&lt;br /&gt;The sum total my knowledge is that I can create a WeakHashMap whereby the &lt;span style="font-weight:bold;"&gt;keys&lt;/span&gt; are weakly referenced, and thus objects are able to be garbage collected. I gather it might be useful for a caching, but I've always used third party caching implementations. And quite frankly, performance issues I encounter are generally latency, not memory problems. &lt;br /&gt;&lt;br /&gt;Pardon the expression, but I thought this explanation was rather weak, so I passed.&lt;br /&gt;&lt;br /&gt;Naturally I wish to rectify this abysmal lack of understanding, and I found a &lt;a href="http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html"&gt;rather nice summary of the reference types here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Soft references were previously unknown to me, although if the following is true they seem more useful that Weak; "in practice softly reachable objects are generally retained as long as memory is in plentiful supply".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5834682261803670108?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html' title='Hard, Soft, Weak and Phantom'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5834682261803670108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5834682261803670108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5834682261803670108'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/03/hard-soft-weak-and-phantom.html' title='Hard, Soft, Weak and Phantom'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8011212318149807680</id><published>2007-03-04T14:29:00.000-05:00</published><updated>2007-03-04T14:42:40.114-05:00</updated><title type='text'>Routine which is not "a rut"</title><content type='html'>There was a time, many years ago, when it was possible to predict my location and activities to the hour. Even weekends. &lt;br /&gt;&lt;br /&gt;When I had just started working at Sausage Software, newly moved to Melbourne and I was (unbeknownst to myself at a conscious level) quite happy. Happiness that comes from doing what you love, feeling secure and feeling that many doors are open.&lt;br /&gt;&lt;br /&gt;Compared to the stress of final year engineering, too busy to have a job and often running out of money to the point where food became a luxury.. it was much easier to be happy. The intervening years have spoiled me to the point where the simple things are no longer appreciated as much.&lt;br /&gt;&lt;br /&gt;I welcome the idea of a predictable pattern of work, play, sleep, etc. I have learned the correct balance in the past year. I hope :)&lt;br /&gt;&lt;br /&gt;Routine only becomes a rut if you don't enjoy it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8011212318149807680?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8011212318149807680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8011212318149807680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8011212318149807680'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/03/routine-which-is-not-rut.html' title='Routine which is not &quot;a rut&quot;'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-8448699044263741226</id><published>2007-03-02T19:21:00.000-05:00</published><updated>2007-03-02T19:25:55.989-05:00</updated><title type='text'>the revolution is here</title><content type='html'>It's winter, evening, Toronto. I have arrived.&lt;br /&gt;&lt;br /&gt;Actually I arrived here at the start of the week, and possibly already have a job. This would be nice, it's important to keep busy and stay out of trouble ;)&lt;br /&gt;&lt;br /&gt;Now it's time to catch up with everyone.. though after being put through the wringer all week - recruiters and interviews - I think the phone will be off the hook for a little while first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-8448699044263741226?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=8448699044263741226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8448699044263741226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/8448699044263741226'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/03/revolution-is-here.html' title='the revolution is here'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7788985993533851299</id><published>2007-02-12T05:19:00.000-05:00</published><updated>2007-10-27T21:18:16.561-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><title type='text'>new zealand photos</title><content type='html'>Photos from the past few days are &lt;a href="http://www.flickr.com/photos/syberchic/sets/72157594531382773/"&gt;online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My obvious favorite is the &lt;a href="http://www.flickr.com/photos/syberchic/387764928/in/set-72157594531382773/"&gt;squished car&lt;/a&gt; after the incident with the branch ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7788985993533851299?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.flickr.com/photos/syberchic/sets/72157594531382773/' title='new zealand photos'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7788985993533851299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7788985993533851299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7788985993533851299'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/02/new-zealand-photos.html' title='new zealand photos'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1629891258478080422</id><published>2007-02-08T14:32:00.000-05:00</published><updated>2007-02-08T14:33:37.783-05:00</updated><title type='text'>The best kind of accident</title><content type='html'>I had an accident last night.. a rain storm came up suddenly and wind knocked a large branch out of a tree on top of my car. Luckily the branch landed mostly horizontally, severely bowing the roof and bonnet - so the worst of it was a shower of glass. Completely unhurt, except for a hundred little red spots on my arms and knees :)&lt;br /&gt;&lt;br /&gt;The car is no good, and I declined the insurance so my excess is large. Anyone who knows me, will know that I am simply happy to be alive. Money comes and goes.&lt;br /&gt;&lt;br /&gt;The true heroes of this tale are the many locals who stopped to offer help, and one incredible local farmer who stayed with me until the police arrived.. calming me down, keeping me dry and doing all the things I would have done if I hadn't fallen to pieces; cleaning the branch off the highway and pulling the car completely off the road.&lt;br /&gt;&lt;br /&gt;Then the police officer himself, granted he is probably used to seeing this sort of thing, was fabulous. He loaded all my luggage and drove me all the way back to Waitomo Caves village! Not to mention, he turned out to be a really charming guy.&lt;br /&gt;&lt;br /&gt;Thank you to the locals of Waitomo and Te Kuiti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1629891258478080422?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1629891258478080422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1629891258478080422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1629891258478080422'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/02/best-kind-of-accident.html' title='The best kind of accident'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2628343197527542377</id><published>2007-02-07T20:54:00.000-05:00</published><updated>2007-10-27T21:19:09.418-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caves'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><title type='text'>green glowing butts</title><content type='html'>The fascinating enzyme 'luciferase', sometimes used my genetic researchers to pinpoint gene activity, is also responsible for the spellbinding spectacle on the roof of the Waitomo Caves. &lt;br /&gt;&lt;br /&gt;I spent this morning floating down a stream in a raft looking at the glowing worms above... feeling like I was outside looking at a starlit sky, except for the edges of the roof when I could almost touch them.&lt;br /&gt;&lt;br /&gt;Which is somewhat gross, as their feeding trap is strings of mucous which snare insects to be reeled in. Somewhat like fishing with a spiderweb.&lt;br /&gt;&lt;br /&gt;The second cave I went through was less glow-wormy, more limestone formations. The forms were beautiful, but I have been to so many caves now, the highlight for me was actually a ~1000 year old skeleton of the now extinct moa. &lt;br /&gt;&lt;br /&gt;The entire region is shaped by the former seabed limestone layers, which are so perfect and even it looks like fortifications in many places. Then a sheep runs in front of it, and spoils my imaginings ;)&lt;br /&gt;&lt;br /&gt;A fascinating change from the thermal wonders and boiling mud of Roturua. I cannot wait to show photos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2628343197527542377?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2628343197527542377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2628343197527542377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2628343197527542377'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/02/green-glowing-butts.html' title='green glowing butts'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1465612343009339893</id><published>2007-02-04T13:53:00.000-05:00</published><updated>2007-10-27T21:19:26.890-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='nz'/><title type='text'>wandering around nz</title><content type='html'>Today is my 5th day in New Zealand and it's such an incredible country - amazing natural sights and all crammed into such a small place!&lt;br /&gt;&lt;br /&gt;I have seen amazing rainforest and my first full day was a 6 hour hike to the Pinnacles on the Coromandel Pennisula.. then fell asleep (like the dead!) camping next to a rushing stream. I drove up the coast, it's all rocky, so I headed west to the Bay of Plenty and have visited 3 incredible beaches and 3 waterfalls in the last couple of days :D&lt;br /&gt;&lt;br /&gt;I have been around Tauranga for two nights, hoping to go swimming with dolphins today, but the weather is too rough.. :( ..hopefully I will have another chance up north.&lt;br /&gt;&lt;br /&gt;Yesterday I went to Rotorua and did some hiking there, around the "buried village". This was one of the first Maori/European villages preserved from the 1860s by a massive eruption. Followed by a walk down the waterfall and a cappuccino at the tea room :)&lt;br /&gt;&lt;br /&gt;Today I'm off to a volcanic park called Hell's Gate!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1465612343009339893?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1465612343009339893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1465612343009339893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1465612343009339893'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/02/wandering-around-nz.html' title='wandering around nz'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-3340054592502677452</id><published>2007-01-30T19:07:00.000-05:00</published><updated>2007-01-30T19:12:04.027-05:00</updated><title type='text'>it doesn't get better than this</title><content type='html'>Less than 24 hours before I get on the plane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-3340054592502677452?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=3340054592502677452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3340054592502677452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/3340054592502677452'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/01/it-doesnt-get-better-than-this.html' title='it doesn&apos;t get better than this'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5859415881367623255</id><published>2007-01-22T02:54:00.000-05:00</published><updated>2007-10-27T21:19:53.904-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reference'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>what are you reading? words, words, words</title><content type='html'>I am fascinated by the way language shapes people's thinking. Differences in languages fascinate me, and I love to learn about the history of my own language.&lt;br /&gt;&lt;br /&gt;I have found a most excellent assortment of essays on words at &lt;a href="http://www.drbilllong.com/Words/Words.html"&gt;Dr Bill Long's site&lt;/a&gt;.  This was the only site that came up in Google to give me the origin of the original phrase; "Give him an inch and he'll take an Ell", where an &lt;a href="http://www.m-w.com/cgi-bin/dictionary?va=ell"&gt;ell is a unit of length&lt;/a&gt; approximately 45". A saying is obviously more effective when exaggerated :)&lt;br /&gt;&lt;br /&gt;Another one of my favorite sites is the source of my &lt;a href="http://www.phrases.org.uk/"&gt;phrase a week.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We may &lt;a href="http://www.phrases.org.uk/meanings/you%20are%20what%20you%20eat.html"&gt;be what we eat&lt;/a&gt;, but we are usually judged by what we say ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5859415881367623255?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.drbilllong.com/More2006/Insults.html' title='what are you reading? words, words, words'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5859415881367623255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5859415881367623255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5859415881367623255'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/01/what-are-you-reading-words-words-words.html' title='what are you reading? words, words, words'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2029377862771774734</id><published>2007-01-03T04:34:00.000-05:00</published><updated>2007-01-03T04:47:06.184-05:00</updated><title type='text'>i'll take you to a sidestreet..</title><content type='html'>Everything is all loose ends at the moment, a seemingly endless list of things to do. I must start writing things down before I start to fray.&lt;br /&gt;&lt;br /&gt;It's always a surprise to me to find people will miss me when I leave a place. I can't remember being much other than excited for people when I find out they are leaving..&lt;br /&gt;&lt;br /&gt;Does that make me:&lt;br /&gt;a) an asshole who doesn't give a damn,&lt;br /&gt;b) too stuffed full of buddhist non-attachment propaganda to react normally,&lt;br /&gt;c) someone who's sincerely happy for a friend, as there's always email/chat,&lt;br /&gt;d) all of the above and worse!&lt;br /&gt;&lt;br /&gt;Life seems much shorter and more enjoyable when you turn yours upside-down every so often.&lt;br /&gt;&lt;br /&gt;Q. When was time travel invented? A. Yes.&lt;br /&gt;-- (from tai of eastpole)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2029377862771774734?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://syberchic.net/lyrics/lyric.html?id=310' title='i&apos;ll take you to a sidestreet..'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2029377862771774734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2029377862771774734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2029377862771774734'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2007/01/ill-take-you-to-sidestreet.html' title='i&apos;ll take you to a sidestreet..'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-727084355505860617</id><published>2006-12-29T02:01:00.000-05:00</published><updated>2006-12-29T02:11:20.931-05:00</updated><title type='text'>thinking about what matters</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I can always count on being with my family to remind me what really matters. Here are a group of people who don't talk about other people, no filler.. we all talk about what is next for us and what is changing.&lt;br /&gt;&lt;br /&gt;Perhaps because, in my family, everything is always changing :)&lt;br /&gt;&lt;br /&gt;Not as drastically as my life is about to change, yet in interesting ways. My sister is seeking to live more frugally at the same time as reducing her ecological footprint. She's such a model citizen - so I gave her a bicycle for Christmas ;) She gave me a superb bracelet made from glass pieces picked up from the beach.. and my younger brother a 24 CD holder made from scrap PCB material.&lt;br /&gt;&lt;br /&gt;She makes me feel guilty. Probably this will make me improve myself. And this is how the world changes; one breath at a time.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-727084355505860617?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=727084355505860617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/727084355505860617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/727084355505860617'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/12/thinking-about-what-matters.html' title='thinking about what matters'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-2528995826146987817</id><published>2006-12-16T16:40:00.000-05:00</published><updated>2007-10-27T21:20:21.076-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>a happy time of year</title><content type='html'>Christmas for the last 6 years is the time when everyone else goes off to spend time with family and I hang about working late and enjoy getting stuff done without looming deadlines. This year, I'm still enjoying getting work done without deadlines - but I'm also in the crowd that's going off to see family. I can't imagine anything more exciting than wrapping up a bunch of toys and books for my gorgeous nephews and home-made Christmas cards.&lt;br /&gt;&lt;br /&gt;I may not be the sweetest person year round ;) .. but I love my family and I love doing stuff for them.&lt;br /&gt;&lt;br /&gt;Work is allowing me to do things for others also. Our business influence has been diverted by other happenings, and we've turned to the task of beefing up test coverage. This is an ancient but robust design with EJB-CMP persistence and a long user transaction scope. Tests have consisted of either developers constructing objects or cactus based tests. Not good - developers tend to create only sensible objects and container tests are enough extra work that the tests are not often run.&lt;br /&gt;&lt;br /&gt;I've simplified with a wonderful library called XStream. At any point during a transaction I can export my entire state to XML and save into a test resources folder. Unit tests can now run - without dummy test data being setup, no dependencies on environment and outside the container - with a full and accurate representation of a user transaction!&lt;br /&gt;&lt;br /&gt;The beautiful side effect is that support staff can do the same thing with client transactions in production :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-2528995826146987817?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=2528995826146987817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2528995826146987817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/2528995826146987817'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/12/happy-time-of-year.html' title='a happy time of year'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-5406631842501328591</id><published>2006-11-26T05:27:00.000-05:00</published><updated>2006-11-26T05:48:19.024-05:00</updated><title type='text'>the year that was - violence and bigotry</title><content type='html'>I just watched the final of 60 minutes, including a montage of clips from the past year. So much antagonism between cultures and beliefs.&lt;br /&gt;&lt;br /&gt;I can understand from an anthropological and historical point-of-view that we punish those who don't conform. They damage our community and values. In a time of pure survival this would have been dangerous..  today, our natures are all wrong. So damaging it makes me question the positives of belief, yet I believe religion  will ultimately be better than the atheist view - people need something higher. In fact, we deserve it :)&lt;br /&gt;&lt;br /&gt;There is no need for cultures to clash in the western world, yet it exists.&lt;br /&gt;&lt;br /&gt;However, in resource poor areas (Africa and the mid-east) I can only see this becoming worse.&lt;br /&gt;&lt;br /&gt;Why isn't there a religious edict about tolerance of other beliefs??! (And why do I watch TV?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-5406631842501328591?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=5406631842501328591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5406631842501328591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/5406631842501328591'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/11/year-that-was-violence-and-bigotry.html' title='the year that was - violence and bigotry'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-7825119332419103660</id><published>2006-11-04T07:42:00.000-05:00</published><updated>2006-11-04T07:50:23.514-05:00</updated><title type='text'>which is worse - drugs or sex?</title><content type='html'>I'm deeply disturbed that a man of influence in that arrogant and confused country, the United States, will admit to buying drugs, and not to sex with a man.&lt;br /&gt;&lt;br /&gt;If God gave man free will, and you can't use it to find good, then at least use it to cause least harm. In my moral universe, consenting - even paid for - sex is not likely as damaging as drugs.&lt;br /&gt;&lt;br /&gt;I believe, literal interpretations of the Bible have caused more damage than good throughout history.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-7825119332419103660?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=7825119332419103660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7825119332419103660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/7825119332419103660'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/11/which-is-worse-drugs-or-sex.html' title='which is worse - drugs or sex?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-1567129394654993752</id><published>2006-11-03T20:17:00.000-05:00</published><updated>2006-11-03T20:25:38.064-05:00</updated><title type='text'>a change is as good as a holiday ;)</title><content type='html'>I love the new blogger! I'm a sucker for "beta" anything ;) I don't need a holiday right now, but change is always good .. even when it's bad.. kinda like pizza.&lt;br /&gt;&lt;br /&gt;Poor blogger and their "unplanned outages".&lt;br /&gt;&lt;br /&gt;Isn't it terrible that we let the money managers get away with not paying for core system maintenance - until there is an outage? Systems developers and admins of the world have got to put their foot down - force the "business" to make time and budget for core support, or the business will suffer.&lt;br /&gt;&lt;br /&gt;Just because we can't say when, how and what will happen - they force us to back down. We are left sheepishly looking at our hands .. saying quietly that there will come a time when A Bad Thing will happen.&lt;br /&gt;&lt;br /&gt;To top it off, we're the ones left feeling guilty when it does happen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-1567129394654993752?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=1567129394654993752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1567129394654993752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/1567129394654993752'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/11/change-is-as-good-as-holiday.html' title='a change is as good as a holiday ;)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-116151733764626895</id><published>2006-10-22T07:37:00.000-04:00</published><updated>2007-10-27T21:20:53.842-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caves'/><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='tasmania'/><title type='text'>back to civilisation</title><content type='html'>What a weekend! I'm so exhausted my eyes can barely focus! But so happy.&lt;br /&gt;&lt;br /&gt;I explored caves, mazes and farms. I love my nephews.. I love being a kid with them.&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/syberchic/Random/photo#4988675705287868434"&gt;&lt;img src="http://lh5.google.com/syberchic/RTtWH3FOABI/AAAAAAAAAS0/MbFpBwIcp7A/s288/wicked_cave_tassie.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:66%; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/syberchic/Random"&gt;random&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;And now with even more photos ! &lt;a href="http://picasaweb.google.com/syberchic/2006Oct_Tassie_family"&gt;Family in Tassie album&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-116151733764626895?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=116151733764626895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/116151733764626895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/116151733764626895'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/10/back-to-civilisation.html' title='back to civilisation'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-116055915355337490</id><published>2006-10-11T05:12:00.000-04:00</published><updated>2006-11-03T20:12:16.599-05:00</updated><title type='text'>every instant second a suspension of forever</title><content type='html'>I have not been doing enough thinking recently. My work has elements of challenge, but not nearly enough. My friends are sweet and wonderful, none of them throws out harsh gritty baits (like I do). How am I supposed to progress when my life is a breeze? Did I ever really want this?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;every instant second a suspension of forever&lt;br /&gt;a frail continuous sequence spanning over lives&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I have been learning - meeting interesting people and doing new things. Though for that last few weeks I felt dissociated, aware of what's going on, but not having any emotion attached to it. Fantastic that I seem to have achieved some kind of buddhist ideal, but &lt;span style="font-style:italic;"&gt;I don't think I like being calm&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Honestly, I think the truth is that I don't like being alone. At least when you're intent on destroying yourself in fun ways there's a thousand people who are right there with you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-116055915355337490?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://syberchic.net/lyrics/lyric.html?id=306' title='every instant second a suspension of forever'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=116055915355337490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/116055915355337490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/116055915355337490'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/10/every-instant-second-suspension-of.html' title='every instant second a suspension of forever'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115939699403575622</id><published>2006-09-27T18:33:00.000-04:00</published><updated>2006-11-03T20:12:16.535-05:00</updated><title type='text'>My day</title><content type='html'>So far it's been a pretty excellent birthday, I'm awake and I have full use of my faculties. I'm going to be late for work because I'm treating myself to a leisurely morning including toasted wholemeal muffins and my necessary double shot espresso. I say it everyday, but today I mean it even more, thank god for coffee.&lt;br /&gt;&lt;br /&gt;I've learnt much in the last year, rather than done too much. I've finally admitted to myself that people - family particularly - are the most important thing to me. I have learnt so much about my flaws, and by slowing down and looking at them, I can attempt to compensate for, or even correct them.&lt;br /&gt;&lt;br /&gt;I'm sure the people who know me would appreciate that. I have a mouth faster than reason, somedays when I intend to say, "hey how are you" what comes out has the same impact as "your mama sucks dogs". I wish I were exaggerating.&lt;br /&gt;&lt;br /&gt;My childhood of extreme shyness and never speaking left me way behind the eightball on expressing myself as I intended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115939699403575622?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115939699403575622' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115939699403575622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115939699403575622'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/09/my-day.html' title='My day'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115785881684389486</id><published>2006-09-09T23:25:00.000-04:00</published><updated>2006-11-03T20:12:16.475-05:00</updated><title type='text'>red!</title><content type='html'>i went red.. pity it never lasts like this.. but thanks to digital + internet, everything can last forever:&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/syberchic/Red20060910/photo#4972956128230178834"&gt;&lt;img src="http://lh3.google.com/syberchic/RQN9QDLDABI/AAAAAAAAASo/2JZjGxHoI6c/PICT0580.JPG?imgmax=288"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:66%; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/syberchic/Red20060910"&gt;red 20060910&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115785881684389486?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115785881684389486' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115785881684389486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115785881684389486'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/09/red.html' title='red!'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115762854105430270</id><published>2006-09-07T07:26:00.000-04:00</published><updated>2006-11-03T20:12:16.413-05:00</updated><title type='text'>learn something new every day</title><content type='html'>Well I do *try* to learn something new every day, but rarely is it so useful;&lt;br /&gt;&lt;br /&gt;http://www.lifehacker.com/software/life-hacks/keep-headphone-wires-from-getting-tangled-152499.php&lt;br /&gt;&lt;br /&gt;reading new scientist (blogs) isn't such a waste of time after all ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115762854105430270?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115762854105430270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115762854105430270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115762854105430270'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/09/learn-something-new-every-day.html' title='learn something new every day'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115727400890690905</id><published>2006-09-03T04:53:00.000-04:00</published><updated>2006-11-03T20:12:16.350-05:00</updated><title type='text'>outgeeked by mum</title><content type='html'>my mum has never shied away from technology, which I've always thought was cool.. until now.&lt;br /&gt;&lt;br /&gt;she's got a cooler phone than me!! (&lt;a href="http://www.three.com.au/index.cfm?pid=2204&amp;pageid=3111"&gt;the new 3G motorola handset&lt;/a&gt;) and I'm a tad jealous.&lt;br /&gt;&lt;br /&gt;this is worse than when I was a 19 year old and she was going out every Friday night, and I was at home painting or on irc - lucky I'm such entertaining company, cause the denizens of the internet are a little lacking :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115727400890690905?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115727400890690905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115727400890690905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115727400890690905'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/09/outgeeked-by-mum.html' title='outgeeked by mum'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115585272912880178</id><published>2006-08-17T18:02:00.000-04:00</published><updated>2006-11-03T20:12:16.276-05:00</updated><title type='text'>i got the message and the message is clear</title><content type='html'>People who are making robots or suggesting pets to keep the elderly company are wasting their time..&lt;br /&gt;&lt;br /&gt;Soon it will not be an issue and all elderly will be computer savvy - they will spend their twilight years playing computer games and chatting to other old fogues. No mobility required! &lt;br /&gt;&lt;br /&gt;My mother is nearly 60 and happily whiles away her days pottering in the garden, reading the occasional novel and playing 5-or-more, bejeweled and Settlers I!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115585272912880178?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://syberchic.net/lyrics/lyric.html?id=305' title='i got the message and the message is clear'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115585272912880178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115585272912880178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115585272912880178'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/08/i-got-message-and-message-is-clear.html' title='i got the message and the message is clear'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115536976872143852</id><published>2006-08-12T04:00:00.000-04:00</published><updated>2006-11-03T20:12:16.214-05:00</updated><title type='text'>melbourne is diversity</title><content type='html'>This city is awesome. Our mayor is chinese-australian and our deputy major is *flaming*.&lt;br /&gt;&lt;br /&gt;Sydney might have the mardi gras, but we got the culture.&lt;br /&gt;&lt;br /&gt;I just wish this diversity was reflected in our Federal parliament. Aren't we all sick of looking at the tired old white guy with crazy brows?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115536976872143852?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115536976872143852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115536976872143852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115536976872143852'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/08/melbourne-is-diversity.html' title='melbourne is diversity'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115534964687192314</id><published>2006-08-11T22:24:00.000-04:00</published><updated>2006-11-03T20:12:16.153-05:00</updated><title type='text'>new iPod and neat iTunes companion</title><content type='html'>Just in time for my new video ipod (black of course!) I have discovered the yahoo (konfabulator) widget &lt;a href="http://www.widgetgallery.com/view.php?widget=33155"&gt;iTunes Companion&lt;/a&gt; - super-duper. It updates cover art - all the albums I've bought and ripped have been updated like magic! Highly recommended and please donate to mister Knut August Johansen - clearly he is a genius.&lt;br /&gt;&lt;br /&gt;I've been chatting to my super-awesome mountie friend from Van, and it makes me miss Canada so badly. My boy is way up north in Ontario this weekend - playing survivorman and getting drunk with his buddies.  I'm here.. which ain't bad. It's just far.&lt;br /&gt;&lt;br /&gt;Upgrading from J2EE v!.crap to v3 was more painful that I first imagined.. 1.1 CMP had to be completely redone for EJB 2.0. The beautiful old-style architecture we had, simple Value Object/DTO access to the data, was based on the Value Object being extended by the Bean object. Ha! that makes all the data fields part of the EJB and completely breaks the 2.0 spec. &lt;br /&gt;&lt;br /&gt;Why didn't they see that coming in 2001? ;P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115534964687192314?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115534964687192314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115534964687192314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115534964687192314'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/08/new-ipod-and-neat-itunes-companion.html' title='new iPod and neat iTunes companion'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115426099898832640</id><published>2006-07-30T07:57:00.000-04:00</published><updated>2006-11-03T20:12:16.094-05:00</updated><title type='text'>Umoonasaurus and Opallionectes</title><content type='html'>I think it's wicked that they have fossils made up of opal (&lt;a href="http://www.abc.net.au/science/news/stories/s1698381.htm"&gt;abc science news&lt;/a&gt;). Coober Pedy (SA) is probably the only place in the world where animals are "opalised". That alone is worth the trip to Adelaide!&lt;br /&gt;&lt;br /&gt;Nothing further to report. I am back on my lonesome - and feeling it.&lt;br /&gt;&lt;br /&gt;Some pictures &lt;a href="http://flickr.com/photos/syberchic/sets"&gt;from frobozz' visit are on flikr&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115426099898832640?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.abc.net.au/science/news/stories/s1698381.htm' title='Umoonasaurus and Opallionectes'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115426099898832640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115426099898832640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115426099898832640'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/07/umoonasaurus-and-opallionectes.html' title='Umoonasaurus and Opallionectes'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115201518320368539</id><published>2006-07-04T08:13:00.000-04:00</published><updated>2006-11-03T20:12:16.035-05:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/hello/47/3226/640/04-07-06_1724.jpg'&gt;&lt;img border='0' style='border:1px solid #660066; margin:2px' src='http://photos1.blogger.com/hello/47/3226/400/04-07-06_1724.jpg'&gt;&lt;/a&gt;&lt;br /&gt;sunset from camberwell safeway&amp;nbsp;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115201518320368539?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115201518320368539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115201518320368539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115201518320368539'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/07/sunset-from-camberwell-safeway.html' title=''/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115158310038082315</id><published>2006-06-29T08:06:00.000-04:00</published><updated>2006-11-03T20:12:15.961-05:00</updated><title type='text'>you'll never guess  the best place to watch the sunset</title><content type='html'>If there were an award for "Best view from a grocery store" or "Best place to watch the sunset in Melbourne", Safeway/Target Camberwell would almost certainly win both categories.&lt;br /&gt;&lt;br /&gt;Many times I have walked home (the store is between me and the train station) and seen a row of people watching the sun set while leaning on the railing out front of the shops. &lt;br /&gt;&lt;br /&gt;Tonight was spectacular, the city glowed with the cresent moon and the first star of the evening directly above. Heartstopping. Everyone I passed smiled at me - though perhaps that's because I was smiling first ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115158310038082315?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115158310038082315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115158310038082315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115158310038082315'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/youll-never-guess-best-place-to-watch.html' title='you&apos;ll never guess  the best place to watch the sunset'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115131402233057840</id><published>2006-06-26T05:21:00.000-04:00</published><updated>2006-11-03T20:12:15.899-05:00</updated><title type='text'>i might just be hooked</title><content type='html'>It's created by a group called Mind Candy - how could I not get hooked? I love candy - i love puzzles!&lt;br /&gt;&lt;br /&gt;I received my USB coffee warmer today - perfect accessory for the funky absent minded programmer whose coffee goes cold every time she gets on a roll/get interrupted/wanders off to chat ;)&lt;br /&gt;&lt;br /&gt;In the box was also this weird little card; #027 Bar Open. "cool! they know where my favorite local jazz bar is?!? Awesome targeted marketing!"&lt;br /&gt;&lt;br /&gt;Not so much. &lt;br /&gt;&lt;br /&gt;It's a diabolical mega puzzle, with a online controller and puzzle cards of different levels. Of course, they game me the easy one. Teasing! Solved it, solved the freebies and now I'm jonesin' for more.&lt;br /&gt;&lt;br /&gt;mmm.. mind candy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115131402233057840?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mindcandypuzzles.com/' title='i might just be hooked'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115131402233057840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115131402233057840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115131402233057840'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/i-might-just-be-hooked.html' title='i might just be hooked'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115122024262562343</id><published>2006-06-25T03:18:00.000-04:00</published><updated>2006-11-03T20:12:15.837-05:00</updated><title type='text'>google dream job super awesomeness</title><content type='html'>one of my favorite people in the entire universe - &lt;a href="http://glenmurphy.com/blog/"&gt;glentron!&lt;/a&gt; - has been working at google for a while now, and since his blog showed up in blogger.com's "blogs we've noticed recently" i though everyone i know should know that glen is still super awesome..&lt;br /&gt;&lt;br /&gt;he made that thing that synchronizes my firefox thingers!!! i never have to lose a bookmark again.. or wait til i get home from the office to look up that whatever! &lt;br /&gt;&lt;br /&gt;i love him more than ever now! useful people deserve prizes! and lots of good sex. however, as i am in australia, i think i will just send him some candy.. :) &lt;br /&gt;&lt;br /&gt;i always miss cherry ripes when i'm away ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115122024262562343?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://glenmurphy.com/blog/' title='google dream job super awesomeness'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115122024262562343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115122024262562343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115122024262562343'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/google-dream-job-super-awesomeness.html' title='google dream job super awesomeness'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115089378995287270</id><published>2006-06-21T08:31:00.000-04:00</published><updated>2006-11-03T20:12:15.776-05:00</updated><title type='text'>boundin'</title><content type='html'>I love pixar. So nice to know there are Jackalopes around!&lt;br /&gt;&lt;br /&gt;Good and cute things may seem stupid to most people. Those people can take their superciliousness and pretend to be cool elsewhere. &lt;br /&gt;&lt;br /&gt;Simple goodness makes people happy.. and that's what life is really about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115089378995287270?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115089378995287270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115089378995287270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115089378995287270'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/boundin.html' title='boundin&apos;'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115037543244389310</id><published>2006-06-15T08:34:00.000-04:00</published><updated>2006-11-03T20:12:15.714-05:00</updated><title type='text'>there are no stupid questions, only stupid people</title><content type='html'>I know that it's completely uncharitable and unfair.. but I have a cold, I'm not in vegas and people on forums complaining about eclipse not working like RAD make me want to squirt lemon juice into their eyes.&lt;br /&gt;&lt;br /&gt;WebSphere Studio -&gt; RAD is a sore association for me. It's *not* the real server - how many times have the bugs come out once deployed to the integration or test server??&lt;br /&gt;&lt;br /&gt;Maybe.. (unlikely).. the products aren't bad per se, but they are often associated with big-bad-ugly projects. EARs with &gt;five utility/framework/EJB projects - what the fuck is the framework this time? - .. countless EJBs, layers, validations, rules, redirections and some laughable (if one wasn't working on them) attempts at implementing patterns which ended up like jigsaw puzzles!&lt;br /&gt;&lt;br /&gt;I think I feel better now. &lt;br /&gt;&lt;br /&gt;Did I ever say how much I love being a developer? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115037543244389310?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jboss.org/index.html?module=bb&amp;op=viewforum&amp;f=231' title='there are no stupid questions, only stupid people'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115037543244389310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115037543244389310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115037543244389310'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/there-are-no-stupid-questions-only.html' title='there are no stupid questions, only stupid people'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-115009552137637863</id><published>2006-06-12T02:42:00.000-04:00</published><updated>2006-11-03T20:12:15.650-05:00</updated><title type='text'>vegas and the grand canyon :)</title><content type='html'>I dislike the idea of vegas, I can't understand why people go there. Except for right now! &lt;br /&gt;&lt;br /&gt;JBoss world is there - with it's preponderance of hot java geeks - and my own hot geek is going to Vegas for Cisco Networkers this coming week too. Then onto the Grand Canyon - a destination high on my list of "must sees".&lt;br /&gt;&lt;br /&gt;This is about the only time I'd want to be there and I'm stuck in frozen Melbourne. Why can't I have everything my way?&lt;br /&gt;&lt;br /&gt;It isn't so bad, I'm playing with Seam. Being a weekend thing, I can barely keep up with the commits coming through - someone needs to send Gavin King on vacation! Working from CVS means staying in line with EJB3/appserver requirements du jour. e.g. NoSuchMethodError this week;  http://www.jboss.org/index.html?module=bb&amp;op=viewtopic&amp;t=84602&lt;br /&gt;&lt;br /&gt;I have randomly popped the EJB3 Alpha8 jars into the AS lib directory.. and moved out some other random ones. My apps are working again - yay :) but I feel like I will be punished for violating the appserver with this brutal surgery, so strong is the drill to not fuck with the appserver lib directory.&lt;br /&gt;&lt;br /&gt;Coding is more fun when you break the big stuff :]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-115009552137637863?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=115009552137637863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115009552137637863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/115009552137637863'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/vegas-and-grand-canyon.html' title='vegas and the grand canyon :)'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-114949530579253109</id><published>2006-06-05T04:02:00.000-04:00</published><updated>2006-11-03T20:12:15.589-05:00</updated><title type='text'>did they not feel feel canadian enough?</title><content type='html'>Seems the youth of Toronto are just as disenfranchised and attention seeking as any other easily misled group, but even understanding the urge of youth to stand up against the perceived injustices of the world, &lt;span style="font-weight:bold;"&gt;nothing makes sense about setting bombs in Canada&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;True, Toronto is the least Canadian part of Canada (as the biggest city), it always gets the ribbing of being too big, too rude, too american ;P Perhaps, but I'v always considered us safer and more reasonable than most of the world. &lt;br /&gt;&lt;br /&gt;These were local guys, from the GTA and surrounds, probably in mid/lower class (speculation) neighbourhoods. How did things get so wrong for them? Do they not understand what it is to be Canadian? People around the world would give up a limb to be in their place! I'm sure Canadian Muslims have no grudge against Torontonians - or do they, sections of them, and we have no idea?&lt;br /&gt;&lt;br /&gt;With only a couple of weeks until Canada Day, I'm extra sad to hear about this. I hope everyone is thinking about how we can share the great things about being Canadian with everyone. &lt;br /&gt;&lt;br /&gt;Exploding things is cool, but Canadians dying is so not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-114949530579253109?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.cbc.ca/news/background/cdnsecurity/antiterror-sweep.html' title='did they not feel feel canadian enough?'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=114949530579253109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114949530579253109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114949530579253109'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/06/did-they-not-feel-feel-canadian-enough.html' title='did they not feel feel canadian enough?'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-114819120489328572</id><published>2006-05-21T02:00:00.000-04:00</published><updated>2006-11-03T20:12:15.410-05:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/hello/47/3226/640/01_clo_syber.jpg'&gt;&lt;img border='0' style='border:1px solid #660066; margin:2px' src='http://photos1.blogger.com/hello/47/3226/400/01_clo_syber.jpg'&gt;&lt;/a&gt;&lt;br /&gt;The beautiful and sweet clothilde and the drunk but super-happy syber!&amp;nbsp;&lt;a href='http://picasa.google.com/blogger/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbp.gif' alt='Posted by Picasa' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-114819120489328572?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=114819120489328572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114819120489328572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114819120489328572'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/05/beautiful-and-sweet-clothilde-and.html' title=''/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-114819247311492741</id><published>2006-05-21T01:52:00.000-04:00</published><updated>2006-11-03T20:12:15.472-05:00</updated><title type='text'>IBM - too often the enemy within ranks</title><content type='html'>Friday was such an interesting day.. and night. I got my Victorian driving license (and sadly had my Canadian one punched and invalidated), arrived at work happy and bouncy as a spring lamb (before they become tasty dinner!), and found everyone stuck, looking for the reason behind the crypto initialization exception.&lt;br /&gt;&lt;br /&gt;My first thought - after a quick mental check that it wasn't my fault - was what the hell are we using security for? Then I got all excited, finally something interesting!?&lt;br /&gt;&lt;br /&gt;I replicated the actions, got the stack, slightly more descriptive than the others (possibly because I saw the original) and traced it back to the IBM JCE jars. Google led me straight to the answer: "IBM JCE Certification expires on May 18, 2006" .. uh what was the date Friday? hahahah! Nice work. IBM is sometimes (too often) a developers worst enemy!&lt;br /&gt;&lt;br /&gt;With the project winding down, still a week until systest (perhaps less), we're all feeling pretty good.. and went out for lunch. I had a glass of wine and mellowed out for once. Not that my life is stressful, but apparently I'm "edgy" &lt;code&gt;;)&lt;/code&gt; I'd say I'm easily excitable. It's all apt.&lt;br /&gt;&lt;br /&gt;Went out with an old friend to another old friend's birthday drinks. Had a fabulous time, but once again I found myself wondering why I let myself get led astray into bad habits? Drinking is OK, but not getting smashed, forgetting my reason and smoking. It's not me. It's me trying to be what other people want.&lt;br /&gt;&lt;br /&gt;What do you do when your friends are bad for your health?&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Folks don't change, they just reveal&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-114819247311492741?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www-1.ibm.com/support/docview.wss?uid=swg21237180' title='IBM - too often the enemy within ranks'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=114819247311492741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114819247311492741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114819247311492741'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/05/ibm-too-often-enemy-within-ranks.html' title='IBM - too often the enemy within ranks'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-114725652408380927</id><published>2006-05-10T06:20:00.000-04:00</published><updated>2006-11-03T20:12:15.349-05:00</updated><title type='text'>statement: what is wrong with middle america.</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;Teller: I haven't decided yet if I'm going to see The Da Vinci Code. I want to see it, but if I do I'll feel like I'm. . . supporting. You know?&lt;br /&gt;Bank AVP: . . . Supporting?&lt;br /&gt;Teller: The Devil!&lt;br /&gt;&lt;br /&gt;Long pause&lt;br /&gt;&lt;br /&gt;Bank AVP: Tom Hanks is the devil?&lt;br /&gt;&lt;br /&gt;48 Clifty Kirkmansville Road&lt;br /&gt;Clifty, Kentucky&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-114725652408380927?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.overheardintheoffice.com/' title='statement: what is wrong with middle america.'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=114725652408380927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114725652408380927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114725652408380927'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/05/statement-what-is-wrong-with-middle.html' title='statement: what is wrong with middle america.'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10437474.post-114699842012457719</id><published>2006-05-07T06:10:00.000-04:00</published><updated>2006-11-03T20:12:15.287-05:00</updated><title type='text'>winter settles on melbourne</title><content type='html'>The leaves of the massive tree in my yard have mostly fallen, I'm using a little ceramic heater and wearing fluffy flannelette pyjamas (hello kitty ones, of course) and winter is definitely here.&lt;br /&gt;&lt;br /&gt;I've decided something is missing in my life recently (aside from the tall, dark and handsome one). My mission in coming to Australia was to sort myself out, to stop being a workaholic and balance myself.&lt;br /&gt;&lt;br /&gt;Ha. What a doomed idea. I love my work. Recently I find myself - instead of coding on a Saturday morning - *shopping* and wondering why the fashion is for tatty looking lacy messy clothes, instead of the sharp, clean styles I prefer. &lt;br /&gt;&lt;br /&gt;I'm becoming the kind of person I don't like - or more accurately; respect.&lt;br /&gt;&lt;br /&gt;Instead of staying up last night coding, I was downloading music from musicmp3.ru - entire CDs for around $1.&lt;br /&gt;&lt;br /&gt;At first I thought, right on! All the music I actually want - including the European stuff that itunes stores Canada and Australia don't let me buy - and at affordable prices. I signed on for $29 credit.. (Yes, I take risks on the internet, but I investigated first and it "felt" legit.. It's strange that I'll use my credit card online, but I'd rather stab myself than give my real phone number).. anyway, I sucked down some compliations that I would normally never have paid for; Cafe Del Mar's, MOS, Buddha Bar. And some new stuff, that I would have paid for; Gnarls Barkly, Gotan Project, Zero 7, Ladytron and Pendulum.&lt;br /&gt;&lt;br /&gt;I was _pretty happy indeed_ .. then I thought, Heavens to Murgatroid, this doesn't feel ethical.. or right at all. Isn't the point of paying for music that &lt;strong&gt;at least a homeopathic trace of the money goes to the artist?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;But how is it right that I pay $17 for the same music that costs me $10 in Canada - even with conversion, it's not in any way equivalent.&lt;br /&gt;&lt;br /&gt;All this copy-control and DRM bullshit, when I just want to listen to the music I paid for. I can see the point, but don't agree at all. I can't listen to my Cat Empire CD because I can't move it to my ipod - and I will not be caught carrying a CD - like some renegade from the 90s. &lt;br /&gt;&lt;br /&gt;Also, I can't listen to any bought music at work because iTunes is unable to negociate the corporate proxy. &lt;br /&gt;&lt;br /&gt;*Sigh* rant over. Summary, I am dubious about whether it's right or wrong to buy from musicmp3.ru - but cheap, good music feels so right!&lt;br /&gt;&lt;br /&gt;BTW. Google Talk is the only non-browser application which gets through the corp proxy. Good for google.&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10437474-114699842012457719?l=blog.sbeynon.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10437474&amp;postID=114699842012457719' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114699842012457719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10437474/posts/default/114699842012457719'/><link rel='alternate' type='text/html' href='http://blog.sbeynon.net/2006/05/winter-settles-on-melbourne.html' title='winter settles on melbourne'/><author><name>syber</name><uri>http://www.blogger.com/profile/00788136007504042980</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_GcYsoth_Qc4/TLo93tu1u8I/AAAAAAAAEIo/bQRJj7aWsvY/S220/IMG00273-20100131-0128.jpg'/></author><thr:total>1</thr:total></entry></feed>
