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

<channel>
	<title>The AppsLab &#187; Anthony</title>
	<atom:link href="http://theappslab.com/author/anthonyslai/feed/" rel="self" type="application/rss+xml" />
	<link>http://theappslab.com</link>
	<description>Driving Innovation</description>
	<lastBuildDate>Thu, 24 May 2012 14:26:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Anthony&#8217;s Last Day</title>
		<link>http://theappslab.com/2011/09/09/anthonys-last-day/</link>
		<comments>http://theappslab.com/2011/09/09/anthonys-last-day/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 14:15:27 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://theappslab.com/?p=9245</guid>
		<description><![CDATA[Editorial note: This post is by Anthony, in case it&#8217;s not obvious. Contrary to appearances, this is a team blog. Today will be my last day at Oracle. In retrospect of my 11 years at Oracle, it has been a fun and enjoyable experience. One of the things I want to do in my life [...]]]></description>
			<content:encoded><![CDATA[<p><em>Editorial note: This post is by Anthony, in case it&#8217;s not obvious. Contrary to appearances, this is a team blog.</em></p>
<p>Today will be my last day at Oracle.</p>
<p>In retrospect of my 11 years at Oracle, it has been a fun and enjoyable experience.</p>
<p>One of the things I want to do in my life is to learn and try out new things, and I think I am blessed in Oracle, as it provides me the opportunity to do so. At the time when I started at Oracle in Financials, building web applications using Java was new, and I jumped into projects using Oracle Applications Framework right away and worked on release 12. You will be surprised how little I need to know about Oracle Forms even 11 years ago. I took on a relatively complex module called the Funds Checker, which is responsible to ensure there are funds available in accounts before money can be withdrawn. This is an important requirement for Public Sector and Federal, and software vendors can not sell software to these sectors without it. Funds Check requires high scalability to process potentially millions of transactions from Subledgers and General Ledger, and APIs and performance considerations from the start is critical and essential.</p>
<p>I then worked on building Oracle Intercompany for R12 from scratch, and that was a great experience for me, as I got to know inside out in how to build and maintain an application. Recently, I learned from a friend of mine that she is working as a consultant on an implementation project for Intercompany on R12. It gave me a funny feeling when someone told you they only start using what you built 7 years later. With my past achievements, I eventually led a team of about 20 developers in the Budgetary Control project for Fusion as a Senior Dev Manager. At leisure, I also maintained a server and provide development tools for product managers and developers that can help ease their day-to-day tasks.</p>
<p>In 2007, I had a feeling that I am not learning as much as I used to anymore. Web 2.0, Social Web were booming that time, and I want to get my hands on them. The timing was interesting as Jake approached me and told me about AppsLab. I still remember the day when he told me about it in my office. The thought of being in an innovative tank is nothing I can resist, so I shifted gear.</p>
<p>In these past couple years in the AppsLab, the experience is invaluable. We built <a href="http://theappslab.com/2009/05/12/whats-new-in-connect-40/">Connect</a>, and <a href="http://theappslab.com/2007/11/12/lets-mix/">Mix</a>. We built <a href="http://theappslab.com/2010/08/09/webcenter-mobile-integrations/">mobile applications</a>, <a href="http://theappslab.com/2010/06/22/share-to-webcenter-chrome-extension/">browser extensions</a>, javascript, and ruby libraries, <a href="http://theappslab.com/2008/05/24/implementing-oracle-sso-in-a-generic-java-container-it-is-not-as-easy-as-you-think/">SSO integration in Java</a>, file sharing, etc.. We uses technologies like jQuery, HTML5, Shindig, Rails as our development tools. I find it amazing on how 4 people can achieve when we have the passion on the technologies and the work we do. I loved the team and the work. I agree with Rich completely that every company should have such a team to do innovations. It is truly an amazing experience to me. Kudos to Jake for telling me about it and bringing me on board.</p>
<p>During my adventure at Oracle, I met lots of good people, and I value our friendship. On the other hand, I was approached by a great opportunity recently, and my mind tells me that I should do a big move. It is time to say goodbye. I will be working on a SaaS product, focusing on the social and mobile platform. It should be fun.</p>
<p>Please stay in touch. You can find me on <a href="http://twitter.com/anthonyslai">Twitter</a>, <a href="http://www.linkedin.com/in/anthonyslai">LinkedIn</a>, <a href="https://www.facebook.com/anthonyslai">Facebook</a>, and <a href="https://profiles.google.com/115132151883630403967">Google+</a>.<strong>Possibly Related  Posts:</strong>
<ul class="similar-posts">
<li><a href="http://theappslab.com/2007/06/04/why-ruby-on-rails-is-the-perfect-framework-for-building-next-generation-enterprise-apps/" rel="bookmark" title="4 June 2007">Why Ruby on Rails is the perfect framework for building next generation Enterprise Apps</a></li>
<li><a href="http://theappslab.com/2011/12/14/the-scoop-on-webcenter-evangelism/" rel="bookmark" title="14 December 2011">The Scoop on WebCenter Evangelism</a></li>
<li><a href="http://theappslab.com/2008/01/17/meeting-marian/" rel="bookmark" title="17 January 2008">Meeting Marian</a></li>
<li><a href="http://theappslab.com/2011/08/19/the-final-countdown/" rel="bookmark" title="19 August 2011">The Final Countdown</a></li>
<li><a href="http://theappslab.com/2009/09/29/were-joining-webcenter/" rel="bookmark" title="29 September 2009">We&#8217;re Joining WebCenter</a></li>
</ul>
<p><!-- Similar Posts took 28.984 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://theappslab.com/2011/09/09/anthonys-last-day/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Opensocial with SSO for corporate users</title>
		<link>http://theappslab.com/2008/05/30/opensocial-with-sso-for-corporate-users/</link>
		<comments>http://theappslab.com/2008/05/30/opensocial-with-sso-for-corporate-users/#comments</comments>
		<pubDate>Fri, 30 May 2008 11:22:58 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[Open ID]]></category>
		<category><![CDATA[opensocial]]></category>
		<category><![CDATA[sso]]></category>

		<guid isPermaLink="false">http://theappslab.com/?p=857</guid>
		<description><![CDATA[We work in Oracle, and we &#8220;eat our dog food&#8221; to use the Oracle Single Sign On.  As we work towards providing Opensocial capabilities to our internal networking site (Connect), we find that Opensocial fits very well with SSO within the corporate domain. So, how does SSO help opensocial apps?  Well, if the backend of [...]]]></description>
			<content:encoded><![CDATA[<p>We work in Oracle, and we &#8220;eat our dog food&#8221; to use the <a href="http://www.oracle.com/technology/products/id_mgmt/esso/index.html">Oracle Single Sign On</a>.  As we work towards providing <a href="http://code.google.com/apis/opensocial/">Opensocial</a> capabilities to our internal networking site (Connect), we find that <a href="http://code.google.com/apis/opensocial/">Opensocial</a> fits very well with SSO within the corporate domain.</p>
<p>So, how does SSO help opensocial apps?  Well, if the backend of the opensocial app is also SSO enabled, it gives hugh benefits.  Every employees has a single-sign on account, and once the user logs on into Connect, he/she is authenticated across all services.  Every time when an open social app requests data from its own backend, Connect acts as a proxy and forward the request along with the user credentials to the backend server, and the user is already authenticated.  The SSO account basically serves as an <a href="http://openid.net/">Open ID</a>, and there is even no need for an <a href="http://oauth.net/">OAuth</a> token exchange.  I personally find this very cool and it really leverages the power of SSO.  This gives users much better user experience, less hassle in signing on again and again through the OAuth service if you require security, and it saves users time and key strokes.</p>
<p>For the backend servers that support open social apps, SSO serves as the authentication mechanism.  Such backend service no longer needs to worry about adding additional layers of security as long as they verify the request is legitimate and do come from a server it trusts.</p>
<p>Not only that, for  open social apps, normally they need to keep a mapping between the user id of the opensocial site and their own internal ids.  In addition, there is no mechanism of knowing the true identity of their friends other than knowing their user ids of the opensocial site and their names.  With SSO, the picture flips around.  By using the single-sign on user id, it is globally unique across all sites, and you can even use <a href="http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol">LDAP</a> to look up more details regarding to a particular user.  There is no need for a user id mapping, and you know the true identity of the user.  If you have data currently exists that is related to the user, you can also choose to present these additional information to him/her as well.  Google is trying to identify users through the <a href="http://code.google.com/apis/socialgraph/ ">Social Graph API </a>over the convoluted Internet, but we get this for free and in a very simple elegant manner within the firewall.<strong>Possibly Related  Posts:</strong>
<ul class="similar-posts">
<li><a href="http://theappslab.com/2008/08/25/deploy-opensocial-locally-with-a-sample-network/" rel="bookmark" title="25 August 2008">Deploy OpenSocial Locally with a Sample Network</a></li>
<li><a href="http://theappslab.com/2008/04/17/opensocializing-our-apps/" rel="bookmark" title="17 April 2008">OpenSocial&#8217;izing Our Apps</a></li>
<li><a href="http://theappslab.com/2008/12/05/now-were-a-social-network/" rel="bookmark" title="5 December 2008">Now We&#8217;re a Social Network</a></li>
<li><a href="http://theappslab.com/2008/08/05/another-call-for-opensocial-app-thoughts/" rel="bookmark" title="5 August 2008">Another Call for OpenSocial App Thoughts</a></li>
<li><a href="http://theappslab.com/2008/07/28/what-opensocial-apps-do-you-want/" rel="bookmark" title="28 July 2008">What OpenSocial Apps Do You Want?</a></li>
</ul>
<p><!-- Similar Posts took 24.968 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://theappslab.com/2008/05/30/opensocial-with-sso-for-corporate-users/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Implementing Oracle SSO in a generic java container?  It is not as easy as you think.</title>
		<link>http://theappslab.com/2008/05/24/implementing-oracle-sso-in-a-generic-java-container-it-is-not-as-easy-as-you-think/</link>
		<comments>http://theappslab.com/2008/05/24/implementing-oracle-sso-in-a-generic-java-container-it-is-not-as-easy-as-you-think/#comments</comments>
		<pubDate>Sat, 24 May 2008 10:04:37 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mod_osso]]></category>
		<category><![CDATA[sso]]></category>

		<guid isPermaLink="false">http://theappslab.com/?p=851</guid>
		<description><![CDATA[Recently Rich and I got a chance to implement the mod_osso for any generic java container. The current mod_osso module only works in Oracle iAS, but we would like to use Oracle single sign-on in virtually everywhere. We can then use it for development, testing, or even production when we don&#8217;t need a relatively heavy [...]]]></description>
			<content:encoded><![CDATA[<p>Recently Rich and I got a chance to implement the mod_osso for any generic java container.  The current mod_osso module only works in <a href="http://www.oracle.com/appserver/index.html">Oracle iAS</a>, but we would like to use Oracle <a href="www.oracle.com/technology/products/id_mgmt/esso/index.html ">single sign-on</a> in virtually everywhere.  We can then use it for development, testing, or even production when we don&#8217;t need a relatively heavy Oracle iAS solution every time.  Our implementation uses a filter to intercept the request and response, and interacts with the SSO server in specific conditions.</p>
<p>We know the basics about communicating with a single sign-on server. Simply put, authenticate if your apps ask you to, keep users logged in if the their sessions are not timed out, and log them out if the users want to.   Simple, eh?</p>
<p>After we started testing the code we have written, funny issues just keep coming up when we debug it.  Ok, the page does show up.  Why?  No idea.  Ok, now java throws up with illegal state exceptions?  Ok, the redirection request to SSO server takes forever and never completes?  As we dig into it a bit more, issues will come up, and we need careful analysis to figure out what is really wrong.</p>
<p>For the HttpServletRequest, it only allows read, not write.  For the HttpServletResponse, it only allows write, not read.  However, in order to set user credentials and pass the information to your app, and to be able to intercept the response and redirect to Single sign-on server, you need write access to the request object and read access to the response object.  One way is to use wrappers around these objects and overwrite the functions.  The key thing is you need to make sure you implemented all the functions that you need to overwrite and implement these functions appropriately.  The problem is that you would never know what you don&#8217;t know, as you only know what you know.</p>
<p>Caveats:</p>
<p>1.  You can not allow your app to actually output anything to the outputstream, as the response would considered to be committed and you would not be able to modify it when you receive it at your filter.  An illegalstateexception would be thrown.  There are all sorts of ways an app can possibly output to the outputstream, and you basically needs to be able to capture them all.</p>
<p>2.  After you can avoid users from outputting to the response, your redirection request to the sso server may hang or takes a long time to respond.  One potential reason which took some time to figure out is that somewhere some place has called response.getOutputStream() or response.getWriter().  If these functions are called, java would think that there is a possibility the app would be writing to the stream, so it will not close the response, waiting for the data which would never arrive, and your browser would just hangs there forever.  In addition, you also need to set the content length to 0 to ensure java knows that it is safe to send out the response.</p>
<p>The caveat list can be very long, and the above is just to give you a taste of it.  These things are not mentioned in javadocs, and you can only realize them as you run into them.  Even you know quite a lot about security, networking, java, filter, apps, java containers, and all the concepts required to implement SSO, it is just not enough.  A lot have to do with trial-and-error and your patience in executing it through.  I guess that is why employers ask whether you have experience on this, and experience on that?<strong>Possibly Related  Posts:</strong>
<ul class="similar-posts">
<li><a href="http://theappslab.com/2008/05/30/opensocial-with-sso-for-corporate-users/" rel="bookmark" title="30 May 2008">Opensocial with SSO for corporate users</a></li>
<li><a href="http://theappslab.com/2011/08/23/a-java-me-phone-like-no-other/" rel="bookmark" title="23 August 2011">A Java ME Phone Like No Other</a></li>
<li><a href="http://theappslab.com/2009/01/08/mix-adds-account-merge/" rel="bookmark" title="8 January 2009">Mix Adds Account Merge</a></li>
<li><a href="http://theappslab.com/2008/03/03/mix-gets-a-plug-at-google/" rel="bookmark" title="3 March 2008">Mix Gets a Plug at Google</a></li>
<li><a href="http://theappslab.com/2008/02/27/jruby-on-rails-oracle-sso-integration/" rel="bookmark" title="27 February 2008">JRuby on Rails: Oracle SSO Integration</a></li>
</ul>
<p><!-- Similar Posts took 44.530 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://theappslab.com/2008/05/24/implementing-oracle-sso-in-a-generic-java-container-it-is-not-as-easy-as-you-think/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Anthony got tagged!</title>
		<link>http://theappslab.com/2008/01/24/anthony-got-tagged/</link>
		<comments>http://theappslab.com/2008/01/24/anthony-got-tagged/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 23:33:43 +0000</pubDate>
		<dc:creator>Anthony</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://theappslab.com/2008/01/24/anthony-got-tagged/</guid>
		<description><![CDATA[Got tagged by Rich Manalang and David Haimes, better write my 8 things. Yes, it is a bit late, hope people consider late is better than never. 1. I have joined Oracle over 7 years, reaching my 8th year anniversary. Studied in UC Berkeley for my Bachelor and Stanford for my Master degree. 2. I [...]]]></description>
			<content:encoded><![CDATA[<p>Got tagged by Rich Manalang and David Haimes, better write my 8 things.  Yes, it is a bit late, hope people consider late is better than never.</p>
<p>1.  I have joined Oracle over 7 years, reaching my 8th year anniversary.  Studied in UC Berkeley for my Bachelor and Stanford for my Master degree.</p>
<p>2.  I love table-tennis, table-tennis, and&#8230; table-tennis.  Started playing when I was 5, I was a school team member for my elementary school, middle school, high school, and college even since 10, non-stop.  Although I got beaten up badly by a girl from the US Olympics team 2 years ago, I am still proud of my skills.</p>
<p>3.  Solving riddles and algorithm questions is my favorite.  Check out http://www.ocf.berkeley.edu/~wwu/riddles/intro.shtml if you like some fun as well.</p>
<p>4.  I have a brother living in Cupertino, and I got 2 nephews.  They are cute and smart, and I enjoy the good times with them.  Recently I taught them how to play Starcraft, and my goal is to have them better than the Korean professionals out there and get the winning prizes and plaques.</p>
<p>5.  I decided to go back to the snow mountains and snowboard this year, and have been there for about 5 times.  Started out not able to move, to leave falling, then to traversing.  I can now handle greens, working on blues.   My 5-year-old nephew joined the Kirkland Jet team this year.  It is funny to think that while I am struggling in easy terrains, my little nephew is actually racing down the double black diamonds slopes with other Kirkwood team members.  He asked me couple times to race with him, and my answer was always, &#8220;wait till you grow up&#8221;.</p>
<p>6.  I like to travel, been in China, Thailand, Macau, 8 European countries, Hawaii, and Las Vegas.  My friends somehow are more interested in going to Las Vegas these days, so I went there 2 years in a row.</p>
<p>7.  I started using mac since last year, got a mini-mac last year and a macbook pro this year.  Have both Ubuntu and Windows VMs installed, working great.  Now my Windows-mobile PDA is syncing with Leopard.  Not sure how Windows can compete with Mac and Linux.</p>
<p>8.  Last but not least, joined the fun cool Oracle Appslab team last year.  It is enjoyable to work in ruby and RoR.  Thought they were good programming language and good framework originally, and after I doing some hands-on work, now think they are even much better than I imagined.  Yukihiro and David, you guys rock!<strong>Possibly Related  Posts:</strong>
<ul class="similar-posts">
<li><a href="http://theappslab.com/2011/08/22/thanks-and-good-luck-rich/" rel="bookmark" title="22 August 2011">Thanks and Good Luck Rich</a></li>
<li><a href="http://theappslab.com/2008/10/01/adventures-in-bad-design/" rel="bookmark" title="1 October 2008">Adventures in Bad Design</a></li>
<li><a href="http://theappslab.com/2011/09/09/farewell-anthony-2/" rel="bookmark" title="9 September 2011">Farewell Anthony</a></li>
<li><a href="http://theappslab.com/2007/12/14/welcome-anthony/" rel="bookmark" title="14 December 2007">Welcome Anthony</a></li>
<li><a href="http://theappslab.com/2011/12/14/the-scoop-on-webcenter-evangelism/" rel="bookmark" title="14 December 2011">The Scoop on WebCenter Evangelism</a></li>
</ul>
<p><!-- Similar Posts took 40.167 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://theappslab.com/2008/01/24/anthony-got-tagged/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

