<?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-4353699967472160771</id><updated>2012-02-21T11:56:44.369-08:00</updated><category term='ForMySon'/><category term='Anime'/><category term='Mobile'/><category term='Life'/><category term='Performance'/><category term='General'/><category term='Technology'/><category term='Family'/><category term='TouchingMoment'/><category term='Work'/><category term='Photography'/><category term='Faith'/><category term='Home'/><category term='Security'/><category term='Movies'/><category term='Jokes'/><category term='Cloud'/><title type='text'>Things I Want to Remember</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default?start-index=101&amp;max-results=100'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>225</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6077789976318562828</id><published>2012-02-21T09:05:00.000-08:00</published><updated>2012-02-21T09:15:13.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>What You May Not Know about Amazon Web Services Security</title><content type='html'>&lt;br /&gt;I have started some early experiments in building applications using free tier services in Amazon EC2. I studied Amazon's security white paper, but wondered what I should know, and what I may not know about amazon web services (AWS) security.&amp;nbsp; I've done some research:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Identity&lt;/b&gt; - AWS's identity is based on email address and a pair of credentials (secret key and access key). In earlier AWS implementation, they allow 2 identities for the same email address if you have 2 different passwords. My email address / identity falls in this category.&amp;nbsp; AWS has made changes to prevent multiple identities now.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;How to hack identities http://www.youtube.com/watch?v=9IxM9_8ucZM&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Data and Storage&lt;/b&gt; - S3 by default is world readable.&lt;/li&gt;&lt;li&gt;API -all AWS apis are signed with HMAC-SHA1 signature with private key. However, by design, AWS does not expose any security-related api (e.g. unused ports, vulnerability findings)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;b&gt;Environment&lt;/b&gt; - AWS will protect data/stack below the hypervisor, not above.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What about security tools for AWS?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Rootkit&lt;/b&gt;. Contrary to public knowledge, many security subject matter experts believe that hypervisor rootkits (e.g. Blue Pill, Subvirt) are not really practical or applicable for AWS&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Cloud data encryption&lt;/b&gt;. If you are using NoSQL data in the cloud, there are emerging data encryption products, e.g. Gazzang ezNcrypt. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;TO BE UPDATED &lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6077789976318562828?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6077789976318562828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/what-you-may-not-know-about-amazon-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6077789976318562828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6077789976318562828'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/what-you-may-not-know-about-amazon-web.html' title='What You May Not Know about Amazon Web Services Security'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3596165569558109306</id><published>2012-02-21T08:49:00.000-08:00</published><updated>2012-02-21T08:49:11.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ForMySon'/><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Why I Am Happy About Saving $1</title><content type='html'>I enjoy saving small amount money after bargains.&amp;nbsp; I feel like a victory if I can save a dollar or two when buying blu-ray movies, say, return a movie to Best Buy (retail) store, and re-order the same movie from amazon just because I can save $1. In reality, the gasoline and effort I consumed may be more expensive than the savings I earn.&lt;br /&gt;&lt;br /&gt;Why am I so happy about such a small little thing?&lt;br /&gt;&lt;br /&gt;It's perhaps the self-esteem that I have (or want to have), such that I make a big deal (e.g. 30% savings from a $7 dollar movie). I probably won't get that at work, or for other episodes in my family life. But it has such a big impact that I enjoy it - small, little things.&lt;br /&gt;&lt;br /&gt;In Chinese subculture, we often describe this is a trait of a "small man" - a personality trait of an anti-hero, who always enjoys small little things in life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3596165569558109306?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3596165569558109306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/why-i-am-happy-about-saving-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3596165569558109306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3596165569558109306'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/why-i-am-happy-about-saving-1.html' title='Why I Am Happy About Saving $1'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8278170102078170563</id><published>2012-02-13T00:45:00.000-08:00</published><updated>2012-02-13T08:26:03.945-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>Starting with Amazon EC2 Development/Hosting</title><content type='html'>I need to start a new initiative to define cloud security strategy and build cloud security tools/solutions. I read a couple of cloud security books in the market but most of them cover high level concepts. There are some gaps in the actual implementation, particularly with Amazon AWS/EC2 hosting services.&lt;br /&gt;&lt;br /&gt;The vision of cloud application security is for developers to write cloud-ready applications without worrying specific cloud security controls that need to be in place. For example, if a developer needs to upload a picture to the AMZ S3 storage, he/she should not even worry if they have to encrypt/decrypt (which depends on a strong key management infrastructure) the picture, and which cloud database to use.&amp;nbsp; Thus, a cloud storage proxy will be handy if it will detect the data type, and determine if encryption is needed before storing it.&lt;br /&gt;&lt;br /&gt;Here are a few cloud security features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Access management&lt;/b&gt; - a simple, automated way to provision user identities in AMZ IAM, and all the ssh setup (with public/private keys) in each instance of the target cluster.&amp;nbsp; Tools, e.g. CloudBerry (http://blog.cloudberrylab.com/2010/09/how-to-manage-amazon-identity-and.html), 2-factor authentication via ylastic (http://ylastic.com/). &lt;/li&gt;&lt;li&gt;&lt;b&gt;Audit logging&lt;/b&gt; - log all IAM and system changes.&amp;nbsp; Tools, e.g. splunk adapter for AMZ (http://serverfault.com/questions/304642/using-ubuntu-cloud-init-to-setup-logging-to-splunk), flume server with rsyslog re-directing syslog to a central server (http://www.sharethrough.com/2011/02/configuring-clouderas-flume-with-an-s3-sink-on-ec2/), scribe server on EC2 (http://stackoverflow.com/questions/6462873/anyone-have-details-steps-for-installing-facebooks-scribe-on-an-ec2-instance)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Vulnerability management&lt;/b&gt; - scan by whitehat, appscan etc. Need to notify AMZ first. You can also use different vulnerability scanners (e.g. nexus)&lt;/li&gt;&lt;li&gt;Anti-virus scanning&lt;/li&gt;&lt;li&gt;&lt;b&gt;Data security &lt;/b&gt;- you can use S3 storage with encryption, your own encryption/decryption with your own key management infrastructure but store using S3 (or dynamo), encryption proxy service, e.g. https://forums.aws.amazon.com/thread.jspa?threadID=76866&lt;/li&gt;&lt;li&gt;Forensics&lt;/li&gt;&lt;li&gt;Key management / storage&lt;/li&gt;&lt;li&gt;Patch management and security update&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;List of Amazon EC2 Tools&lt;/b&gt;&lt;br /&gt;S3 backup tools http://jeremy.zawodny.com/blog/archives/007641.html&lt;br /&gt;S3 tools http://www.aboutonlinetips.com/amazon-s3-tools/&lt;br /&gt;Developer tools http://aws.typepad.com/aws/developer_tools/&lt;br /&gt;Security tools http://www.globalindustrynews.com/news/secludit-to-deploy-detection-tool-for-amazon-ec2-i.html and http://www.thewhir.com/web-hosting-news/security-firm-secludit-releases-detection-tool-for-amazon-ec2&lt;br /&gt;Monitoring http://elastic-security.com/2011/08/04/monitoring-tool-amazon-ec2-plugins-for-nagios/&lt;br /&gt;Bitnami&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;http://gigaom.com/2009/11/06/10-top-open-source-resources-for-cloud-computing/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8278170102078170563?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8278170102078170563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/starting-with-amazon-ec2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8278170102078170563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8278170102078170563'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/starting-with-amazon-ec2.html' title='Starting with Amazon EC2 Development/Hosting'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8132864302605313901</id><published>2012-02-04T23:38:00.000-08:00</published><updated>2012-02-04T23:38:31.807-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Rewatchnig Movies</title><content type='html'>There are a few movies I watched a few years back, and thought I liked them, but I don't really like them at all when re-watched.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bad Experience&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Serendipity&lt;/b&gt;.&amp;nbsp; The actress Katie was quite surprised to learn that most male fans like this movie than her Underworld movies.&amp;nbsp; I thought I like it a lot since it's a very romantic movie.&amp;nbsp; I recently bought the bluray movie, and rewatched it.&amp;nbsp; I actually dislike the female character - the way she treated relationship, her perspective about fate, her casual relationship about sex and love, etc.&amp;nbsp; The entire plot development is weak, though my brain tends to re-create a different romantic story from my memory fragments. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Crouching Tiger.&lt;/b&gt;&amp;nbsp; When I heard that Ang's movie got Academy Award, I was thrilled to watch this movie.&amp;nbsp; Many local Chinese reviewers criticize that this movie is not really a good wuxia movie.&amp;nbsp; In 2000, I found the movie too slow and a bit boring.&amp;nbsp;&amp;nbsp; 11+ years later, I forgot about&amp;nbsp; my first impression entirely and re-watched the bluray movie.&amp;nbsp; I find the prelude very boring. The plot development is unattractive and weak.&amp;nbsp; The fight scenes, however, are intriguing - I feel like it's a product demo for non-Chinese. I do like most of the background music, particularly Ma's cello.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Good Experience&lt;/b&gt;&lt;br /&gt;&lt;br /&gt; There are a few movies that I re-watch many times over the years, and each time I have a different perspective.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;My Sassy Girl&lt;/b&gt;.&amp;nbsp; Every time I am depressed, I love re-watching this movie My Sassy Girl.&amp;nbsp; Each time I have a different emotional experience.&amp;nbsp; I tend to catch different details too.&lt;/li&gt;&lt;li&gt;&lt;b&gt;When Harry Meets Sally.&lt;/b&gt;&amp;nbsp; It's probably 10+ years ago since I watched this movie.&amp;nbsp;&amp;nbsp; I feel like understanding your spouse or your friend is a challenging journey.&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/4353699967472160771-8132864302605313901?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8132864302605313901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/rewatchnig-movies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8132864302605313901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8132864302605313901'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/02/rewatchnig-movies.html' title='Rewatchnig Movies'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2464755127792067499</id><published>2012-01-13T08:28:00.000-08:00</published><updated>2012-01-13T09:15:23.751-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>jQuery Mobile glitch - Disappearing option value</title><content type='html'>I spent almost a few days to debug a jQuery Mobile feature, and finally validate that it's likely a bug.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OBJECTIVE&lt;/b&gt; &lt;br /&gt;What I want to achieve is to do a quick fill (data entry) by "bulk push" a specific option of each of the items in the same page (e.g. select all option 2 for all questions), and I can also change some options in some of the items at will.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;WHAT'S THE PROBLEM&lt;/b&gt;&lt;br /&gt;jQueryMobile allows you to "check" an option by setting the property value (aka attribute value for jQueryMobile 1.6 or before), and refresh the radio button (or object). However, if you manually change the radio button again, and inspect the radio button value, you'll notice the radio button value has not been changed internally - unless you explicitly refresh the radio button value again.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Example&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span class="whitespace"&gt;&lt;/span&gt;&lt;span class="xml-text"&gt;$('input:radio[name=radio-choice-1]').val("radio-choice-1");&lt;/span&gt;&lt;br /&gt;&lt;span class="whitespace"&gt;&lt;/span&gt;&lt;span class="xml-text"&gt;$("#radio-choice-1").prop("checked", true).checkboxradio("refresh");&lt;/span&gt;&lt;span class="xml-text"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="xml-text"&gt;this will set the value of a radio button (with the name radio-choice-1) to "radio-choice-1", which should be the same (in functionality) as pushing the first radio button manually on the screen. Of course, you need to refresh the screen object by '.checkboxradio("refresh")'.&lt;/span&gt;&lt;br /&gt;&lt;span class="xml-text"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="xml-text"&gt;However, if you check another radio button (e.g. radio-choice-3) manually from the screen, and inspect the value of the radio button by "&lt;/span&gt;&lt;span class="xml-text"&gt;$('input:radio[name=radio-choice-1]:checked').val()", you'll find the radio button value is still "radio-choice-1" not "radio-choice-3".&amp;nbsp; You won't have the problem if you don't set the radio button value property programmatically.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Discussion&lt;/i&gt;&lt;br /&gt;This does not make sense since I have to refresh each radio button even after I change the value from the UI (not programmatically)?&amp;nbsp; I don't have to do that before I programmatically set the radio button value, and refresh the radio button!&amp;nbsp; It looks like selecting or pushing a radio button does NOT necessarily change the property or attribute of the radio button value, in the same way you do that programmatically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Full Code Example&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="xml-doctype"&gt;You select "Set Choice 1" and then "What's up - pet" to inspect the value. You should see option 1 value is displayed.&amp;nbsp; Then you check another radio button, and select "What's up - pet" again, you'll notice the internal value is not changed, despite the new radio button is checked.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can cut-n-paste the following codes to http://jsfiddle.net/.&amp;nbsp; (Please note that due to encoding issue in blogspot, some of the HTML syntax may be stripped out, or not behaving normally as in my original codes).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;meta name="apple-mobile-web-app-capable" content="yes" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;link href="http://code.jquery.com/mobile/latest/jquery.mobile.min.css" rel="stylesheet" type="text/css" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src="http://code.jquery.com/jquery-1.6.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies").find("input[type='radio']").bind("change", function(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert('you have changed option 2 in MOVIES ' + $('input[name=movies1]:checked').val());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function whatsuppet() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ans = $('input:radio[name=radio-choice-1]:checked').val();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ans2 = $('input:radio[name=movies1]:checked').val();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(ans + "&amp;nbsp; " + ans2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function whatsupmovie() {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ans = $('input:radio[name=movies1]:checked').val();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(ans);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function cleanup() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-1").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-2").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-3").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-4").prop("checked", false).checkboxradio("refresh"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2a").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2b").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2c").prop("checked", false).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2d").prop("checked", false).checkboxradio("refresh");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function refreshme() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-1").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-2").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-3").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-4").checkboxradio("refresh"); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2a").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2b").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2c").checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2d").checkboxradio("refresh");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function setfoo1() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cleanup();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=radio-choice-1]').val("radio-choice-1");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-1").prop("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=movies1]').val("Serendipity");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2a").prop("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whatsuppet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function setfoo2() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cleanup();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=radio-choice-1]').val("radio-choice-2");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-2").attr("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=movies1]').val("TrumanShow");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2b").attr("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whatsuppet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function setfoo3() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cleanup();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=radio-choice-1]').val("radio-choice-3");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-3").prop("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=movies1]').val("Inception");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2c").prop("checked", true).checkboxradio("refresh");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whatsuppet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function setfoo4() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cleanup();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=radio-choice-1]').val("radio-choice-4");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#radio-choice-4").prop("checked", true).checkboxradio("refresh");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $('input:radio[name=movies1]').val("9");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#movies2d").prop("checked", true).checkboxradio("refresh");&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; whatsuppet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div data-role="page" id="tasks" data-title="Tasks"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div data-role="header" data-position="fixed"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h1&amp;gt;Title&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div data-role="content"&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;fieldset data-role="controlgroup" id="pets"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;legend&amp;gt;Choose a pet to ADOPT:&amp;lt;/legend&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="radio-choice-1" id="radio-choice-1" value="choice-1" checked="true" /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="radio-choice-1"&amp;gt;Cat&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="radio-choice-1" id="radio-choice-2" value="choice-2"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="radio-choice-2"&amp;gt;Dog&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="radio-choice-1" id="radio-choice-3" value="choice-3"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="radio-choice-3"&amp;gt;Hamster&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="radio-choice-1" id="radio-choice-4" value="choice-4"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="radio-choice-4"&amp;gt;Lizard&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;/fieldset&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;p /&amp;gt;&lt;br /&gt;&amp;lt;fieldset data-role="controlgroup" id="movies"&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;legend&amp;gt;Choose a movie you HATE:&amp;lt;/legend&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="movies1" id="movies2a" value="Serendipity" checked="true" /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="movies2a"&amp;gt;Serendipity&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="movies1" id="movies2b" value="TrumanShow"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="movies2b"&amp;gt;Truman Show&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="movies1" id="movies2c" value="Inception"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="movies2c"&amp;gt;Inception&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="radio" name="movies1" id="movies2d" value="9"&amp;nbsp; /&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;label for="movies2d"&amp;gt;9&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;/fieldset&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="whatsuppet();" value="What's up - pet"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="whatsupmovie();" value="What's up - movie"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="setfoo1();" value="Set choice 1"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="setfoo2();" value="Set choice 2"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="setfoo3();" value="Set choice 3"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="setfoo4();" value="Set choice 4"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="cleanup();" value="Clean up"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type="button" onClick="refreshme();" value="Refresh me"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2464755127792067499?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2464755127792067499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/jquery-mobile-glitch-disappearing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2464755127792067499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2464755127792067499'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/jquery-mobile-glitch-disappearing.html' title='jQuery Mobile glitch - Disappearing option value'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3787941172935148945</id><published>2012-01-06T11:54:00.000-08:00</published><updated>2012-01-06T11:54:26.272-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Anime'/><title type='text'>My Favorite Anime in 2011</title><content type='html'>Here're a few 2011 anime programs I remembered:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Gundam AGE&lt;/b&gt; - the first Gundam robotics series that cover 3 generations. It is intended to reclaim the young generation and create a demand for models franchise for the next 10 years. I got mixed feelings:&amp;nbsp; the visual quality is decent; the storyline is a bit interesting but lame sometimes. I hope I don't see aliens (Gundam 00 movie has aliens. It sucks!)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Fate/ZERO&lt;/b&gt; - a prequel for a popular video game saga Fate/Stay Night.&amp;nbsp; The storyline is more complex than the original Fate/Stay Night.&amp;nbsp; The visual/audio is great but the pace is too slow.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Steins Gate&lt;/b&gt; - I am always fascinated by time travel.&amp;nbsp; This story plot is intriguing since you do time travel using your microwave oven (but not too convincing too).&amp;nbsp; I don't like the male protagonist's voice or character - does he have a split personality? &lt;/li&gt;&lt;li&gt;&lt;b&gt;Blood C&lt;/b&gt; - another incarnation of Blood+. The story plot is so weak that I only discover how the vampire thingy is related to the female protagonist in episode 12 (out of a 13-episode season).&amp;nbsp; The entire show is slow, and the characters are poorly developed.&amp;nbsp; I don't like the art style (Gundam Seed art is much stylistic). Blood+ is much better.&lt;/li&gt;&lt;/ul&gt;2011 anime is the least impressed for me.&amp;nbsp; There are many chicks anime (as expected for Japanese anime).&amp;nbsp; At least I can recall Full Metal Alchemist Brotherhood, Macross Frontier movies or Gundam 00 for 2010.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;What I would have loved to see in 2011 (and perhaps in 2012) are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Shin Mazinger sequel&lt;/li&gt;&lt;li&gt;True Gundam Seed movie&amp;nbsp; (sequel to the Destiny arc)&lt;/li&gt;&lt;li&gt;Evangelion movies 3 and 4&lt;/li&gt;&lt;li&gt;Gundam Unicorn OVA episodes 5 and 6&lt;/li&gt;&lt;li&gt;Full Metal Panic sequel (covering the finale?)&lt;/li&gt;&lt;li&gt;Blood C movie &lt;/li&gt;&lt;/ul&gt;What I don't like or anticipate in 2012:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Yet another Full Metal Alchemist movie&lt;/li&gt;&lt;li&gt;Remake any sister anime other than Mazinger or getta robots&lt;/li&gt;&lt;li&gt;&amp;nbsp;Add aliens to Gundam series&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/4353699967472160771-3787941172935148945?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3787941172935148945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/my-favorite-anime-in-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3787941172935148945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3787941172935148945'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/my-favorite-anime-in-2011.html' title='My Favorite Anime in 2011'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2008552422577049673</id><published>2012-01-05T17:24:00.000-08:00</published><updated>2012-01-05T17:24:46.576-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Cross-domain policy and api calls in JavaScript: solutions and issues</title><content type='html'>I'm struggling with cross-domain calls when writing JavaScript with my HTML 5 / jQuery Mobile application.&amp;nbsp;&amp;nbsp; There are a few options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rename your own laptop or desktop machines, e.g. edit /etc/hosts and rename 127.0.0.1 with FQDN so that you cheat your Web browser that any calls are from the same origin. [does this solve my cross-domain problem?]&lt;/li&gt;&lt;li&gt;Use JSONP - your browser uses HTTP GET to serialize data in plain text.&amp;nbsp; This gets around the cross-domain policy security protection (or restriction).&amp;nbsp; There are a few solution variants, e.g. JSONP plugin for jQuery, Yahoo JSONP, PHP proxy.&amp;nbsp; [i have security concerns about JSON]&lt;/li&gt;&lt;li&gt;Facebook has a JSONP like proxy [do i trust facebook?]&lt;/li&gt;&lt;li&gt;Deploy a shell (e.g. empty .war file) to a host with FQDN. Write and test on that machine.&amp;nbsp; Then retrofit your source codes to source control system. [very cumbersome]&lt;/li&gt;&lt;/ul&gt;Cross-domain policy is a security protection and control mechanism.&amp;nbsp; Cross-site request forgery is a common way to send (or steal) data from your browser and local storage to a remote malicious site.&amp;nbsp; Another example is cross-frame attack (e.g. transfer data between iFrames).&amp;nbsp; One possible mitigation is to create a token (e.g. nonce) in your browser (from the server side) so that it makes CSRF more difficult.&lt;br /&gt;&lt;br /&gt;One colleague suggests CORS (cross-domain access control in HTML 5), but I also found one interesting article that warns of the CSRF or Man-in-the-middle attacks.&amp;nbsp; The emergence of CORS from HTML 5 specification is to make life much easier for making cross-domain api calls in JavaScript.&amp;nbsp; I'm sure some young engineers don't quite agree that security is a concern for cross-domain api call issues. &lt;br /&gt; &lt;br /&gt;http://shreeraj.blogspot.com/2011/11/csrf-with-json-leveraging-xhr-and-cors_28.html&lt;br /&gt;&lt;br /&gt;I'm still learning the issues and solutions. I'll update this blog entry when I have more experience. &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/4353699967472160771-2008552422577049673?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2008552422577049673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/cross-domain-policy-and-api-calls-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2008552422577049673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2008552422577049673'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2012/01/cross-domain-policy-and-api-calls-in.html' title='Cross-domain policy and api calls in JavaScript: solutions and issues'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3699100525040311034</id><published>2011-12-28T22:24:00.001-08:00</published><updated>2012-01-13T16:00:32.238-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Looking for jQuery Mobile Listview Full Example with Add/Change/Delete Rows</title><content type='html'>I'm looking for full example source codes. After 2 weeks' research and prototyping, here's what I learn:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a listview dynamically via AJAX call (cross-domain or same domain)&lt;/li&gt;&lt;li&gt;Add a sparkline (dynamic or real-time graph in a row)&lt;/li&gt;&lt;li&gt;Add colorful solid bullet in a row (a visual way to show status)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Examples&lt;br /&gt;In your bullet list, add this color solid bullet&lt;br /&gt;&lt;br /&gt;Code snippet:&lt;span style="color: yellow;"&gt;■ &lt;/span&gt;&lt;span style="color: red;"&gt;■ &lt;/span&gt;&lt;span style="color: yellow;"&gt;■ &lt;/span&gt;&lt;span style="color: red;"&gt;■ &lt;/span&gt;&lt;span style="color: green;"&gt;■ &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Visual example&lt;br /&gt;"&lt;span style="color: yellow;"&gt;■ &lt;/span&gt;&lt;span style="color: red;"&gt;■ &lt;/span&gt;&lt;span style="color: yellow;"&gt;■ &lt;/span&gt;&lt;span style="color: red;"&gt;■ &lt;/span&gt;&lt;span style="color: green;"&gt;■ &lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;http://www.mobjectify.com/tutorials/HTML_5_mobile_web_app_from_start_to_finish/&lt;br /&gt;&lt;br /&gt;http://www.packtpub.com/article/jquery-mobile-organizing-information-with-list-views&lt;br /&gt;&lt;br /&gt;http://omarello.com/2010/10/mobile-web-apps-with-jquery-mobile-and-grails/&lt;br /&gt;(sample codes @ http://omarello.com/wp-content/uploads/2010/10/expenses-mobile.zip) &lt;br /&gt;&lt;br /&gt;http://mobile.tutsplus.com/tutorials/mobile-web-apps/build-a-contacts-application-with-jquery-mobile-the-android-sdk-part-1/&lt;br /&gt;&lt;br /&gt;This has an add listview example:&lt;br /&gt;http://msdn.microsoft.com/en-us/scriptjunkie/hh144955&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A similar listview:&lt;/b&gt; &lt;br /&gt;http://msdn.microsoft.com/en-us/scriptjunkie/hh377172 &lt;br /&gt;&lt;br /&gt;&lt;b&gt;List of tutorials&lt;/b&gt;&lt;br /&gt;http://miamicoder.com/2011/interesting-jquery-mobile-tutorials/&lt;br /&gt;survey http://mobile.tutsplus.com/tutorials/mobile-web-apps/build-a-jquery-mobile-survey-app-app-logic-interface/&lt;br /&gt;http://web.dtuts.com/tutorials/how-to-write-a-simple-application-on-jquery-mobile/ &lt;br /&gt;http://css.dzone.com/articles/building-jquery-mobile-0&lt;br /&gt;http://jsfiddle.net/olli/kuLN2/ &lt;br /&gt;http://www.elated.com/articles/jquery-mobile-what-can-it-do-for-you/&lt;br /&gt;http://mobile.tutsplus.com/tutorials/mobile-web-apps/jquery-mobile-forms/&lt;br /&gt;&lt;br /&gt;very useful code snippets&lt;br /&gt;http://obsforandroid.wordpress.com/category/gsoc11/jquery/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tech notes&lt;/b&gt;&lt;br /&gt;this discusses parameter passing techniques&lt;br /&gt;http://www.a2zdotnet.com/View.aspx?Id=196&lt;br /&gt;http://forum.jquery.com/topic/passing-parameters-between-pages&lt;br /&gt;http://andymatthews.net/code/jquerymobile/ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dynamic generated listview&lt;/b&gt;&lt;br /&gt;http://forum.jquery.com/topic/dynamically-generated-listview&lt;br /&gt;&lt;br /&gt;&lt;b&gt;json and jsonp to resolve cross-domain policy restriction&lt;/b&gt;&lt;br /&gt;http://api.jquery.com/jQuery.getJSON/ and JSONP proxy solution&lt;br /&gt;http://www.ibm.com/developerworks/library/wa-aj-jsonp1/&lt;br /&gt;W3C CORS specification &lt;br /&gt;Facebook cross-domain solution&lt;br /&gt;Yahoo has a JSON proxy&lt;br /&gt;modify your /etc/hosts or 127.0.0.1 (localhost) hostname so that you have the same domain name&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Where to look for icons&lt;/b&gt;&lt;br /&gt;http://www.iconarchive.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3699100525040311034?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3699100525040311034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/looking-for-jquery-mobile-listview-full.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3699100525040311034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3699100525040311034'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/looking-for-jquery-mobile-listview-full.html' title='Looking for jQuery Mobile Listview Full Example with Add/Change/Delete Rows'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-450308784398772181</id><published>2011-12-26T10:59:00.000-08:00</published><updated>2011-12-26T11:02:26.062-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Looking for Tomcat/JBoss LDAP Integration</title><content type='html'>I'm looking for how to add LDAP (e.g. Active Directory) authentication to tomcat or jboss.&lt;br /&gt;http://blog.mc-thias.org/?title=tomcat_ldap_authentication&amp;amp;more=1&amp;amp;c=1&amp;amp;tb=1&amp;amp;pb=1&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Edit server.xml under &lt;code&gt;&lt;code class="codespan"&gt;CATALINA_HOME/conf/server.xml&lt;/code&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;specify in the "realm" tag with classname org.apache.catalina.realm.JNDIRealm&amp;nbsp;&lt;/li&gt;&lt;li&gt;add your uid string to "connectionname", e.g. uid=bindingproxyname,ou=profile,dc=domain,dc=com&amp;nbsp;&lt;/li&gt;&lt;li&gt;specify your ldap server, e.g. connectionurl="ldap://ldap.domain.com:389"&amp;nbsp;&lt;/li&gt;&lt;li&gt;and your rolebase details, e.g. rolebase="ou=group,dc=domain,dc=com" rolename="cn" rolesearch="memberUid={1}" userpattern="uid={0},ou=people,dc=domain,dc=com"&lt;/li&gt;&lt;/ul&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;realm classname="org.apache.catalina.realm.JNDIRealm" connectionname="uid=bindingproxyname,ou=profile,dc=domain,dc=com" connectionpassword="bindingproxypasswd" connectionurl="ldap://ldap.domain.com:389" debug="99" rolebase="ou=group,dc=domain,dc=com" rolename="cn" rolesearch="memberUid={1}" userpattern="uid={0},ou=people,dc=domain,dc=com"&gt; &lt;/realm&gt;&lt;/code&gt;&lt;/pre&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;How do i verify the ldap contents? by ldapsearch, e.g../ldapsearch -u myuserid -h myldapservername -b "OU=XXX,OU=Servers,DC=XXX,DC=mydomain,DC=com" -s one "dn" -x | grep "^dn:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-450308784398772181?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/450308784398772181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/looking-for-tomcatjboss-ldap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/450308784398772181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/450308784398772181'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/looking-for-tomcatjboss-ldap.html' title='Looking for Tomcat/JBoss LDAP Integration'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3424763141156421018</id><published>2011-12-23T17:15:00.000-08:00</published><updated>2011-12-23T17:15:43.387-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Interview Questions for Application Security</title><content type='html'>If you're preparing for a job interview (either conduct, or attend), or you just want to refresh your security concepts:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Application Security&lt;/b&gt;&lt;br /&gt;http://www.webappsec.org/documents/web_security_interview_question.shtml&lt;br /&gt;http://it.toolbox.com/blogs/managing-infosec/interview-questions-for-your-next-security-engineer-18472&lt;br /&gt;http://www.coolinterview.com/type.asp?iType=678&lt;br /&gt;http://www.secgeeks.com/security_interview_questions.html&lt;br /&gt;http://6hacker66.blogspot.com/2011/09/interview-questions.html &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Network Security&lt;/b&gt;&lt;br /&gt;http://www.geekinterview.com/Interview-Questions/Networking/Networks-and-Security&lt;br /&gt;http://www.techinterviews.com/security-interview-questions-for-network-admin&lt;br /&gt;http://www.bestsampleresume.com/interview/networks-and-security-interview-questions.html&lt;br /&gt;http://www.glassdoor.com/Interview/network-security-devices-interview-questions-SRCH_II1095.0,24.htm &lt;br /&gt; http://interviews.slashdot.org/story/03/05/30/1148235/fyodor-answers-your-network-security-questions&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/4353699967472160771-3424763141156421018?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3424763141156421018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/interview-questions-for-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3424763141156421018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3424763141156421018'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/interview-questions-for-application.html' title='Interview Questions for Application Security'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5523506014609617695</id><published>2011-12-22T23:36:00.000-08:00</published><updated>2011-12-22T23:36:28.138-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Cloud Security @ AWS-EC2 - A Primer</title><content type='html'>I embark on a project to define security best practices, app design / deployment patterns on Web 2.0 apps on Amazon Web services (EC2+).&amp;nbsp; My colleague shares with me a few areas to familiarize with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Security model (e.g. compared to Windows 7 and Linux security model,&amp;nbsp; fine-grained permission)&lt;/li&gt;&lt;li&gt;Super-account and subaccount identity design &lt;/li&gt;&lt;li&gt;Network security administration and design&lt;/li&gt;&lt;li&gt;Storage security &lt;/li&gt;&lt;li&gt;Reliability (HA/DR) - database centric approach&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Resources &lt;/b&gt;&lt;br /&gt;Here're a few links to start with:&lt;br /&gt;&lt;br /&gt;official aws security paper&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=9&amp;amp;sqi=2&amp;amp;ved=0CGQQFjAI&amp;amp;url=http%3A%2F%2Fs3.amazonaws.com%2Faws_blog%2FAWS_Security_Whitepaper_2008_09.pdf&amp;amp;ei=mCz0TvmYIIaQiQKpyKHSDg&amp;amp;usg=AFQjCNHXTVWE91jbtVV8oDRw4zvgBT34Yw&lt;br /&gt;&lt;br /&gt;http://support.rightscale.com/12-Guides/Dashboard_Users_Guide/Clouds/AWS_Region/EC2_Security_Groups/Concepts/About_EC2_Security_Groups&lt;br /&gt;&lt;br /&gt;security groups http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=15&amp;amp;sqi=2&amp;amp;ved=0CJMBEBYwDg&amp;amp;url=http%3A%2F%2Fsupport.rightscale.com%2F12-Guides%2FDashboard_Users_Guide%2FClouds%2FAWS_Region%2FEC2_Security_Groups%2FConcepts%2FAbout_EC2_Security_Groups&amp;amp;ei=rin0TurbFuXmiALrwNGYDQ&amp;amp;usg=AFQjCNEX3KWIjTileJBoS0dgRcw2WewYRA&lt;br /&gt;&lt;br /&gt;http://newtech.about.com/od/cloudcomputing/a/How-To-Setup-Amazon-Identity-And-Access-Management-Iam-With-S3-And-Cloudfront.htm&lt;br /&gt;&lt;br /&gt;http://clouddb.info/2009/05/17/using-and-managing-aws-part-3-aws-security/&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Cloud Security Tools&lt;/b&gt;&lt;br /&gt;https://www.corecloudinspect.com/microsite/why-core-inspect.html&lt;br /&gt;&lt;br /&gt;http://elastic-security.com/category/internals/ &lt;br /&gt;&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=22&amp;amp;ved=0CHQQFjABOBQ&amp;amp;url=http%3A%2F%2Fwww.dome9.com%2Fwp-content%2Fuploads%2F2011%2F10%2FWP_SecuringAWS_Dome9_FINAL.pdf&amp;amp;ei=Ji70TsfFMcSsiQL4y83IDg&amp;amp;usg=AFQjCNFKzbtI2mBt0WJjesUr7pagsF_cmQ&lt;br /&gt;&lt;br /&gt;http://www.ciphercloud.com/ciphercloud-extends-cloud-data-encryption-capabilities.php&lt;br /&gt;&lt;br /&gt;http://blog.cloudflare.com/?tag=dns&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Known Cloud Security Attacks&lt;/b&gt;K&lt;b&gt;&lt;/b&gt;&lt;br /&gt;XML signature wrapping (rewriting)&lt;br /&gt;http://www.csoonline.com/article/692547/researchers-demo-cloud-security-issue-with-amazon-aws-attack&lt;br /&gt;http://www.pcworld.com/businesscenter/article/242405/widely_used_encryption_standard_is_insecure_say_experts.html&lt;br /&gt; http://searchcloudsecurity.techtarget.com/news/2240103444/Researchers-uncover-AWS-security-vulnerabilities&lt;br /&gt;&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/4353699967472160771-5523506014609617695?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5523506014609617695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/cloud-security-aws-ec2-primer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5523506014609617695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5523506014609617695'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/cloud-security-aws-ec2-primer.html' title='Cloud Security @ AWS-EC2 - A Primer'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8319872836715353174</id><published>2011-12-15T10:32:00.000-08:00</published><updated>2011-12-15T10:32:20.928-08: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'>Is Facebook Connect Authentication Secure?</title><content type='html'>A colleague of mine asked me if it's secure to use Facebook to login and then access your bank account, or your tax preparation software. I'll tempt to say no, but determine to do some research first.&lt;br /&gt;&lt;br /&gt;Facebook allows a user to re-use Facebook login (aka single sign-on) to another application, which does not necessarily run on Facebook platform. First, you need to set up and register a Facebook application first, and then configure it to allow single sign-on with another application. In effect, this is a 3-legged OAuth authentication set-up.&lt;br /&gt;&lt;br /&gt;Next, your third party application (e.g. banking, tax preparation software) web pages need to add Facebook Connect JavaScript api for login. In effect, you access your third party application (e.g. banking account), but use Facebook login.&amp;nbsp; How it actually works behind the scene is:&amp;nbsp; Facebook Connect JavaScript will present a login form (I hope it's in HTTPS, though the default Facebook has been HTTP).&amp;nbsp; Facebook Connect will capture your cookies and send to the third party application.&lt;br /&gt;&lt;br /&gt;What's wrong with this security model? I can see a few threats which may or may not be valid:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;I Hate Cookies.&lt;/b&gt;&amp;nbsp; It's a poor practice to play with cookies, particularly with JavaScript.&amp;nbsp; A Man-in-the-Middle attack will capture the cookies and playback attacks.&amp;nbsp; Stealing cookies will also mean that your privacy data, session key, session information and personal/business data could be stolen.&amp;nbsp; A Cross-site Scripting, if a hacker knows you're using Facebook Connect JavaScript and banking application, may be able to steal your privacy data.&lt;/li&gt;&lt;li&gt;&lt;b&gt;JavaScript May Mutate&lt;/b&gt;.&amp;nbsp; A DOM-based cross-site scripting attack can modify your Web pages contents, or JavaScript on the fly, without attacking your server-side Web pages.&amp;nbsp; An email lure or phishing can trigger such DOM-based cross-site scripting, particularly from mobile devices (you see, sometimes careless clicking from a long list of email messages may yield that).&amp;nbsp; Anyway, your Facebook Connect JavaScript (e.g. how they subscribe, how they connect)&amp;nbsp; is so visible.&amp;nbsp; A malicious hacker can create a fake Website with an iFrame that looks exactly like your banking application, and perform a cross-frame attack (e.g. present a Facebook-like login using JavaScript).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Technology Limitation&lt;/b&gt;.&amp;nbsp; 3-legged OAuth 1.x (don't think 2.x has resolved that issue) has an inherent weakness of man-in-the-middle attacks.&amp;nbsp; You can google the story about Twitter and OAuth a few years back.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Compliance Concerns&lt;/b&gt;.&amp;nbsp; It may not be compliant with government bodies to use Facebook Connect JavaScript to access banking or sensitive IRS data, despite some innovative products want to pilot that in early 2012.&amp;nbsp; It is possible that these companies can get around with certain interpretation of the compliance and regulatory requirements (I'm not a legal expert). It's best to check with your attorney and legal counsel.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/&lt;br /&gt;http://www.slideshare.net/prateek.dayal/facebook-connect-tutorial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8319872836715353174?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8319872836715353174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/is-facebook-connect-authentication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8319872836715353174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8319872836715353174'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/is-facebook-connect-authentication.html' title='Is Facebook Connect Authentication Secure?'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5149069343933473833</id><published>2011-12-11T16:36:00.001-08:00</published><updated>2011-12-11T16:41:04.207-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Cross-site Scripting Filter Code Sample</title><content type='html'>After writing Jersey for JAX-WS REST Web services, you should add XSS prevention. A couple of things to do:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add a servlet filter http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/. Please note the comments that describe how to handle case sensitivity (e.g. value = value.replaceAll(”(?i)script”, “”);)&lt;/li&gt;&lt;li&gt;Consider URL encoding or clean the escape characters. Remember Apache's StringEscapeUtils.escapeHtml is NOT sufficient (the article assumes it's ok, but it's not)&lt;/li&gt;&lt;/ul&gt;You may want to take a look of OWASP's XSS prevention article that describes what escape or special characters to clean. Not all laundry list in public articles are comprehensive enough.&lt;br /&gt;https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet&lt;br /&gt; &lt;br /&gt;HP Fortify team has recently presented a few cases regarding reflected XSS vulnerabilities, and explains that different browser and platform implementation will behave differently. Refer to https://www.owasp.org/images/5/56/AbrahamKang-DOMBasedXSS.pptx for details.&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5149069343933473833?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5149069343933473833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/cross-site-scripting-filter-code-sample.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5149069343933473833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5149069343933473833'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/cross-site-scripting-filter-code-sample.html' title='Cross-site Scripting Filter Code Sample'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6634703562435937883</id><published>2011-12-10T14:36:00.001-08:00</published><updated>2011-12-16T08:24:30.006-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Revisit Jersey-Spring-JPA-Hibernate again</title><content type='html'>Need to do some development with REST Web services using Jersey. My last touch was March 2011. Didn't realize again the Jersey world has changed.&amp;nbsp; Now it's Jersey 1.10 (it was Jersey 1.0.2), Spring 3.0.5. Looks like my old codes are not compatible (Eclipse Indigo flags errors)...&lt;br /&gt;&lt;br /&gt;Dec 14, 2011 update - still resolving the dependencies issues. can compile but different types of errors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's Changed&lt;/b&gt;&lt;br /&gt;The version of dependencies need to be matched. This is usually the key challenge - finding the right combination of version compatibility usually takes the longest time, e.g. Spring 2.5.x to 3.0.5 is not compatible with Jersey 1.8 to 1.10 unless you exclude the spring, spring-core, spring-web, spring-beans and spring-context when using jersey-spring. In Jersey 1.0.2, you would include spring and spring-test with jersey-spring 1.0.2.&amp;nbsp; Even with Spring 3.0.x, you'll notice some forums discuss the incompatibility with Hibernate 3.6.0 (e.g. https://jira.springsource.org/browse/SPR-7701).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Known List of Compatible Dependencies&lt;/b&gt;&lt;br /&gt;In my early experiment, I find these dependencies work well when doing a "maven clean install" (need to further validate once I build complete REST web services):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Spring 3.0.5.RELEASE&lt;/li&gt;&lt;li&gt;Hibernate 3.6.8.Final (hibernate-entitymanager)&lt;/li&gt;&lt;li&gt;Jersey 1.10 (jersey-server, jersey-client)&lt;/li&gt;&lt;li&gt;Jersey-Spring 1.10&lt;/li&gt;&lt;li&gt;MySQL Connector 5.1.6&lt;/li&gt;&lt;li&gt;commons-dbcp&amp;nbsp; 1.2.2 &lt;/li&gt;&lt;li&gt;commons-logging 1.0.4&lt;/li&gt;&lt;li&gt;cglib-nodep 2.1_3&lt;/li&gt;&lt;/ul&gt;Hibernate entity manager needs to exclude asm, asm-attrs and cglib. &lt;br /&gt;Jersey-Spring to exclude spring, spring-web, spring-core, spring-beans, spring-context.&lt;br /&gt;&lt;br /&gt;I realize NOT to include persistence api since hibernate will include it transitively.&lt;br /&gt;&lt;br /&gt;I'm using the maven repository url http://download.java.net/maven/2/ with id maven2-repository.java.net. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Known (but Unknown to me) Compatibility Issues&lt;/b&gt;&lt;br /&gt;Hibernate won't execute query with Spring 3.x due to compatibility issues.&amp;nbsp; You encounter the error &lt;br /&gt;&lt;pre&gt;java.lang.NoSuchFieldError: NONE&lt;/pre&gt;What this means is that Spring 3.5 uses JPA 2.0 which conflicts with &lt;code&gt;hibernate-commons-annotations&lt;/code&gt; which uses transitively JPA 1.0. Resolution - just use hibernateentitymanager.&lt;br /&gt;&lt;br /&gt;http://stackoverflow.com/questions/5727463/java-lang-nosuchfielderror-none-in-hibernate-with-spring-3-maven-jpa-c3p0 &lt;br /&gt;http://community.jboss.org/wiki/HibernateCompatibilityMatrix&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resource&lt;/b&gt;&lt;br /&gt;I couldn't find any blog, wiki or article that shows the latest compatible set of pom.xml dependencies. I'll revise this blog when the errors are completely resolved. Here're a few pointers:&lt;br /&gt;&lt;br /&gt;tutorial&lt;br /&gt;http://www.mkyong.com/webservices/jax-rs/jersey-spring-integration-example/&lt;br /&gt;this is outdated, but i like this a lot&lt;br /&gt;http://persistentdesigns.com/wp/jersey-spring-and-jpa/&lt;br /&gt;&lt;br /&gt;search for pom.xml and latest versions&lt;br /&gt;http://search.maven.org/#browse&lt;br /&gt;&lt;br /&gt;sun's wiki but suspect it's also obsolete&lt;br /&gt;http://wikis.sun.com/display/Jersey/Main&lt;br /&gt;http://jersey.java.net/nonav/documentation/latest/chapter_deps.html &lt;br /&gt;&lt;br /&gt;spring pom.xml dependencies?&lt;br /&gt;http://forum.springsource.org/showthread.php?109649-pom.xml-for-org.springframework.security.oauth-references-outdated-dependencies&lt;br /&gt;&lt;br /&gt;Jersey 1.5 tutorial&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;ved=0CDMQFjAC&amp;amp;url=http%3A%2F%2Fmatthewturland.com%2Fslides%2Fjersey%2F&amp;amp;ei=aW7nTpbpD4SiiQKBtu2ZBw&amp;amp;usg=AFQjCNFPCO0y2QJmzufGzXYFc0ngixLIuQ&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/4353699967472160771-6634703562435937883?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6634703562435937883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/revisit-jersey-spring-jpa-hibernate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6634703562435937883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6634703562435937883'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/revisit-jersey-spring-jpa-hibernate.html' title='Revisit Jersey-Spring-JPA-Hibernate again'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-7550894209811978711</id><published>2011-12-08T08:36:00.001-08:00</published><updated>2011-12-08T09:29:28.287-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Mobile device management - what the heck</title><content type='html'>You may easily find these mobile device management (MDM) vendors from internet search:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mobile Iron&lt;/li&gt;&lt;li&gt;Sybase Afaria&lt;/li&gt;&lt;li&gt;Airwatch&lt;/li&gt;&lt;li&gt;Tangoe&lt;/li&gt;&lt;li&gt;RIM's Blackberry Mobile Fusion&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Sophos Mobile Control? &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;MDM is a neat product concept - you can remotely refresh the mobile device, if it runs "rogue", or is exploited.&amp;nbsp; &lt;b&gt;Mobile Iron&lt;/b&gt;, just like any startup trying to standardize and normalize their architecture in the cloud, tries very hard to learn how to define and migrate to a multi-tenancy cloud application architecture.&amp;nbsp; Maintaining and selling appliances may not be scalable and maintainable as their business accelerates, particularly when your business is global 24x7x365.&amp;nbsp; The challenge is to stop customizing schema for each client (e.g. add custom data fields using a field/value pair in a database table), simplify their architecture stack and optimize their efficiency.&lt;br /&gt;&lt;br /&gt;MDM tends to address enterprise users need, more than mobile applications, e.g.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Provision user accounts&lt;/li&gt;&lt;li&gt;Set up emails&lt;/li&gt;&lt;li&gt;Network access to internal resources&lt;/li&gt;&lt;li&gt;Reinforce network security policies&lt;/li&gt;&lt;li&gt;Manage different mobile devices differently! (e.g. management profiles, configurations)&lt;/li&gt;&lt;li&gt;Integrate with Active Directory or other enterprise solutions&lt;/li&gt;&lt;li&gt;Identify which mobile device needs a patch (e.g. for security update) &lt;/li&gt;&lt;/ul&gt;More specific to mobile applications, not necessarily enterprise management: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Device information monitoring, e.g. if the mobile device is jailbroken, what device IMEI number is &lt;/li&gt;&lt;/ul&gt;Examples of mobile device management policies may include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Complete lock-down, e.g. no right to add new applications&lt;/li&gt;&lt;li&gt;Purchase restricted&lt;/li&gt;&lt;li&gt;Pre-configured settings&lt;/li&gt;&lt;li&gt;Restrict call/messaging/roaming&lt;/li&gt;&lt;li&gt;Pre-installed applications&lt;/li&gt;&lt;li&gt;Restricted sync - prevent external backup of sensitive company data&lt;/li&gt;&lt;li&gt;Enable secure access, e.g. VPN connectivity&lt;/li&gt;&lt;li&gt;Enable "dedicated corporate container" - encrypt sensitive company data, but this may require on-application such as Good or Accellion, or your custom crypto technology. This prevents compromised device contents to be copied remotely&lt;/li&gt;&lt;li&gt;Enable access to private cloud&lt;/li&gt;&lt;li&gt;Limit or restrict access to personal cloud, if needed&lt;/li&gt;&lt;li&gt;Create a whitelist of allowed location-based service applications&lt;/li&gt;&lt;li&gt;Enable virtual desktop application, e.g. Citrix&lt;/li&gt;&lt;li&gt;Work with users, e.g. diagnosis, repair&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;http://www.computerworld.com/s/article/9222484/Mobile_device_management_what_you_should_know&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/4353699967472160771-7550894209811978711?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/7550894209811978711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/mobile-device-management-what-heck.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7550894209811978711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7550894209811978711'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/mobile-device-management-what-heck.html' title='Mobile device management - what the heck'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1211202977077211937</id><published>2011-12-07T22:23:00.001-08:00</published><updated>2011-12-10T14:40:19.924-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Detecting and Mitigating DDOS or Botnet</title><content type='html'>I went to Radware reception event today. Radware is one notable Distributed Denial of Service (DDOS) vendor who claims to have a mitigation solution.&amp;nbsp; Arbor is another competing solution. I asked Radware's Vice President to explain how the DDOS technology works, and how does Arbor differentiate from theirs.&lt;br /&gt;&lt;br /&gt;I don't really understand the gist of DDOS attack details. Here's my layman's summary.&amp;nbsp; Please bear with me for any misunderstanding, and perhaps correct me with details.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDOS Challenges&lt;/b&gt;&lt;br /&gt;Malicious network attacks from Botnet or DDOS usually take over a victim's computer to launch attacks.&amp;nbsp; A variety of techniques includes slow attack or launching mass number of SYN flood or DOS attacks. The challenge is that you couldn't tell they come from the real hacker's IP address, or the victim's.&amp;nbsp; Some well-known DDOS attacks using tools like LOIC (Low Orbit Ion Canon) or #RefRef will exhibit their network signature, but in real life, you may not find any network signature from DDOS attack.&amp;nbsp; If the DDOS attack comes with massive number of network packets, which causes system resource depletion, then you may easily notice this is a DDOS. However, if the DDOS attack is slow, disperse and does not have a consistent pattern, then you will have a hard time to detect this is a DDOS attack.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDOS Detection&lt;/b&gt;&lt;br /&gt;So how does Radware detect and mitigate DDOS or botnet?&amp;nbsp; Radware will take a baseline when the system is normal.&amp;nbsp; It has a learning engine (artificial intelligence) that creates signature from network packets.&amp;nbsp; If the incoming network traffic demonstrates certain (suspicious) pattern, it will send a 302 request to the sender. If the sender is a bot, then it will not reply.&amp;nbsp; Thus, Radware is capable of flagging this is a DDOS attack. This is the DDOS detection phase.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDOS Mitigation&lt;/b&gt;&lt;br /&gt;For DDOS mitigation, Radware can isolate or re-route some of the network traffic so that it can "scrub" the network contents.&amp;nbsp; With Cavium chip (custom industry-strength SSL hardware chip that can decrypt 254-bit encryption speedily, assuming you have the private key), Radware can decrypt the Layer 7 content to examine if the incoming network traffic has a DDOS signature, or demonstrates suspicious DDOS attack.&amp;nbsp; An example of this mitigation is Hong Kong Stock Exchange DDOS attack (Aug 14, 2011), which Radware re-directs the incoming network traffic (botnet/DDOS attacks) for scrubbing (decrypt contents, examine signature and block contents), while leaving the "good guys" (non-DDOS, normal stock trading requests) in the fat pipe.&amp;nbsp; Radware also engages the upstream and downstream service providers who carry the network traffic to trace and isolate the source of DDOS attacks, and even scrub them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What about Mobile DDOS&lt;/b&gt;&lt;br /&gt;Radware can distinguish network traffic from native mobile devices, mobile browsers or non-mobile network traffic. This suggests that Radware can also identify if the DDOS attacks are from mobile devices or not.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Arbor - How It Works&lt;/b&gt;&lt;br /&gt;Arbor and Juniper Networks are another two reputable DDOS solution competitors.&amp;nbsp; However, Juniper Networks seems to be a traditional network provider but does not have compelling DDOS solution similar to Radware or Arbor (according to the Radware person I spoke to, which may not be true).&lt;br /&gt;&lt;br /&gt;Arbor uses netflow (&lt;cite&gt;ftp://ftp.tik.ee.ethz.ch/pub/students/2003-So/SA-2003-35.pdf&lt;/cite&gt;)&amp;nbsp; to detect and identify DDOS. It does not use (or create) signature for DDOS, as in Radware.&amp;nbsp; It "copies" the flow into a special area, notifies the DMZ (demilitarized zone), but does not have mitigation measure. This could be a challenge if your company has a limited network bandwidth because copying to DMZ will throttle your network.&lt;br /&gt;&lt;br /&gt;Radware thinks it could be complementary to use both Arbor and Radware together in real life, since Arbor is better in detecting DDOS, and Radware is better in mitigating the DDOS attack. Well, this is of course not official.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Post-blog Notes&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My co-worker says you can add an optional 302 detection module in Arbor&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;I search internet and find some other DDOS detection and mitigation solutions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDOS prevention toolkit&lt;/b&gt;&lt;br /&gt;http://www.topwebhosts.org/tools/apf-bfd-ddos-rootkit.php&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Riverhead detector&lt;/b&gt;&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=3&amp;amp;ved=0CF4QFjAC&amp;amp;url=https%3A%2F%2Fwebspace.utexas.edu%2Faam426%2Fwww%2FTech_Note_Detection_8-03.pdf&amp;amp;ei=fV3gTvXfFYTO2AWUpJH2Ag&amp;amp;usg=AFQjCNEfJ6d9EQwm3XIbKCvauk7XnclH6g&lt;br /&gt;&lt;br /&gt;&lt;b&gt;LADS&lt;/b&gt;&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CFMQFjAB&amp;amp;url=http%3A%2F%2Fwww2.research.att.com%2F~duffield%2Fpapers%2FSDSVZ-lads.pdf&amp;amp;ei=fV3gTvXfFYTO2AWUpJH2Ag&amp;amp;usg=AFQjCNGOEM52zpENI5plB8l8ktYweAHIXQ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cisco Traffic Anomaly Detector&lt;/b&gt;&lt;br /&gt;http://www.cisco.com/en/US/docs/interfaces_modules/services_modules/anomaly_detector/v6.0/configuration/guide/Intro.html&lt;br /&gt;&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/4353699967472160771-1211202977077211937?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1211202977077211937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/detecting-and-mitigating-ddos-or-botnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1211202977077211937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1211202977077211937'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/12/detecting-and-mitigating-ddos-or-botnet.html' title='Detecting and Mitigating DDOS or Botnet'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3510417113457298314</id><published>2011-11-19T14:28:00.001-08:00</published><updated>2011-12-16T08:23:27.556-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>What the Heck - Location based Security</title><content type='html'>This will be a long article. let me start with a few linkshttp://www.informationweek.com/blog/smb/229214024http://www.sbir.gov/sbirsearch/detail/286602&lt;br /&gt;&lt;br /&gt;Location-based Security Tools&lt;br /&gt;&lt;br /&gt;http://www.networkworld.com/community/node/43155&lt;br /&gt;Trapeze LA-200E appliance&lt;br /&gt;&lt;br /&gt;LocPriS&lt;br /&gt;http://swansea.academia.edu/RashidMehmood/Papers/630579/LocPriS_a_security_and_privacy_preserving_location_based_services_development_framework&lt;br /&gt;http://code.google.com/p/locpris/issues/searchtips&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=21&amp;amp;ved=0CB0QFjAAOBQ&amp;amp;url=http%3A%2F%2Fwww-cs-students.stanford.edu%2F~dbfaria%2Ffiles%2Ffaria-dissertation.pdf&amp;amp;ei=V5zITp6oMYSaiQLp--nMDw&amp;amp;usg=AFQjCNEQxHxWxrtj1YegkQkGafBvSMpWVQ&lt;br /&gt;&lt;br /&gt;Framework&lt;br /&gt;http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5644999&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=48&amp;amp;ved=0CFIQFjAHOCg&amp;amp;url=http%3A%2F%2Fwww.ece.ubc.ca%2F~vincentw%2FC%2FSWLc04.pdf&amp;amp;ei=1ZzITu66DIShiALp-qXCDw&amp;amp;usg=AFQjCNFYcCMUfrxgx3DCADDfUOcXrngWmg&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/4353699967472160771-3510417113457298314?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3510417113457298314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/what-hack-location-based-security.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3510417113457298314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3510417113457298314'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/what-hack-location-based-security.html' title='What the Heck - Location based Security'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6494323856193542859</id><published>2011-11-16T23:43:00.001-08:00</published><updated>2011-11-22T09:00:12.568-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Ubuntu on Acer Aspire One 722 Netbook with USB Flash Drive</title><content type='html'>If you run into netbook deals, consider buying a dirt cheap netbook where you can use it for Linux or for security penetration testing.&lt;br /&gt;&lt;br /&gt;This article shows you how to install Ubuntu on Acer Aspire One 722 netbook (I bought it for US$199++).&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=1811178&lt;br /&gt;&lt;br /&gt;Although the installation procedure appears to be simple, your Linux may freeze. After some research, I notice that Acer has incompatible drivers that cause hardware panic (freeze). One quick fix is to apply the latest BIOS firmware, but I still see freeze. But I find out if you plug in the power supply, and boot into Linux with USB drive, you should be okay.  then you can unplug, and go anywhere.&lt;br /&gt;&lt;br /&gt;If your Acer freezes, you need to reboot into Windows, perform a proper shut down, plug in the power supply, and reboot into Linux with USB flash. I read from amazon customer review that in earlier BIOS, the windows partition was corrupted when your Acer is frozen. I don't have any proof, but it's safer to reboot into windows first to make sure your netbook is okay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6494323856193542859?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6494323856193542859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/ubuntu-on-acer-aspire-one-722-netbook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6494323856193542859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6494323856193542859'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/ubuntu-on-acer-aspire-one-722-netbook.html' title='Ubuntu on Acer Aspire One 722 Netbook with USB Flash Drive'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2824676380375838791</id><published>2011-11-15T10:17:00.001-08:00</published><updated>2011-11-15T10:20:12.163-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Hybrid Cloud Players</title><content type='html'>Riverbed Cloud Solution identifies a few public and private cloud solutions (aka content delivery network) in 2011:&lt;br /&gt;&lt;br /&gt;Public&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cloud Steelhead&lt;/li&gt;&lt;li&gt;Whitewater&lt;/li&gt;&lt;li&gt;Zeus&lt;/li&gt;&lt;li&gt;Aptimize&lt;/li&gt;&lt;li&gt;Akamai&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Private&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Steelhead&lt;/li&gt;&lt;li&gt;Steelhead QoS&lt;/li&gt;&lt;li&gt;Virtual Steelhead&lt;/li&gt;&lt;li&gt;Steelhead Mobile&lt;/li&gt;&lt;li&gt;Cascade&lt;/li&gt;&lt;li&gt;Shark&lt;/li&gt;&lt;/ul&gt;It's good to know what the new cloud (CDN) players are in 2011. &lt;br /&gt;Why Steelhead is mentioned a few times under Private cloud?&amp;nbsp; It's because Steelhead is offered by Riverbed. http://www.riverbed.com/us/products/steelhead_appliance/&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/4353699967472160771-2824676380375838791?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2824676380375838791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/hybrid-cloud-players.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2824676380375838791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2824676380375838791'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/hybrid-cloud-players.html' title='Hybrid Cloud Players'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3838956817705877053</id><published>2011-11-14T22:00:00.001-08:00</published><updated>2011-11-19T14:17:42.244-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Want to be a Hacker</title><content type='html'>I wanna be an ethical hacker. How do I get started?http://ehsandipatel.blogspot.com/search/label/Ethical%20Hacking&lt;br /&gt;&lt;br /&gt;To learn to be an ethical hacker, you need tools for the trade. There are a few open source penetration testing kits (Linux distribution):&lt;br /&gt;http://www.darknet.org.uk/2006/03/10-best-security-live-cd-distros-pen-test-forensics-recovery/&lt;br /&gt;&lt;br /&gt;How to create a mobile pen test toolkit?&amp;nbsp; I bought a ~US$200 netbook (Acer Aspire One 722), a 32GB USB thumb drive and a thumb size bluetooth USB adapter. Download the Linux iso image and use &lt;a class="external" href="http://unetbootin.sourceforge.net/" rel="nofollow"&gt;http://unetbootin.sourceforge.net/&lt;/a&gt; to create a bootable USB drive (aka "live cd" on a USB flash drive).&amp;nbsp; You boot up your security toolkit from your netbook when needed, but you can use your netbook for normal office work or leisure using Windows 7.&lt;br /&gt;&lt;br /&gt;10 Security Pen Testing Toolkit:&lt;br /&gt;1. Backtrack&lt;br /&gt;2. Operator&lt;br /&gt;3. PHLACK&lt;br /&gt;4. Auditor&lt;br /&gt;5. L.A.S. Linux&lt;br /&gt;6. Knoppix STD&lt;br /&gt;7. Helix&lt;br /&gt;8. F.I.R.E.&lt;br /&gt;9. nUbuntu&lt;br /&gt;10. Insert Rescue Security Toolkit&lt;br /&gt;&lt;br /&gt;There are other new toolkits, e.g.&lt;br /&gt;&lt;a href="http://arudius.sourceforge.net/"&gt;Arudius&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.k-lug.org/%7Ekessler/projects.html"&gt;The Gentoo Forensic Toolkit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/anonym-os/"&gt;Anonym-OS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Old ones:&lt;br /&gt;&lt;a href="http://www.knopper.net/knoppix-mirrors/index-en.html"&gt;Get Knoppix Here&lt;/a&gt;&lt;br /&gt;Other Useful Resources:&lt;br /&gt;&lt;a href="http://www.securitydistro.com/"&gt;SecurityDistros&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.frozentech.com/content/livecd.php?pick=All&amp;amp;showonly=security"&gt;FrozenTech LiveCD List&lt;/a&gt;&lt;br /&gt;&lt;a href="http://distrowatch.com/"&gt;DistroWatch&lt;/a&gt;&lt;br /&gt;Others to consider (Out of date or very new):&lt;br /&gt;&lt;a href="http://slackpen.secureslack.org/"&gt;SlackPen&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.thepacketmaster.com/"&gt;ThePacketMaster&lt;/a&gt;&lt;br /&gt;&lt;a href="http://trinux.sourceforge.net/"&gt;Trinux&lt;/a&gt;&lt;br /&gt;&lt;a href="https://sourceforge.net/projects/warlinux/"&gt;WarLinux&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.networksecuritytoolkit.org/nst/"&gt;Network Security Toolkit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://hysteria.sk/marko/bw2/"&gt;BrutalWare&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kcpentrix.net/Site/"&gt;KCPentrix&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.projectplanb.org/"&gt;Plan-B&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pentoo.ch/-PENTOO-.html"&gt;PENToo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you have a powerful Swiss Knife kit, but you don't want to try out with live production systems. Else you'll be arrested or sued.&amp;nbsp; You can set up your playground by using near real systems at home, say, using VMWare images below, e.g. http://bailey.st/blog/2010/09/14/pentest-lab-vulnerable-servers-applications-list/&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;UltimateLAMP&amp;nbsp; http://ronaldbradford.com/tmp/UltimateLAMP-0.2.zip&lt;/li&gt;&lt;li&gt;webgoat http://www.owasp.org&lt;/li&gt;&lt;li&gt;Holynix http://pynstrom.net/index.php?page=holynix.php&lt;/li&gt;&lt;li&gt;WackoPicko&amp;nbsp; http://cs.ucsb.edu/~adoupe/static/black-box-scanners-dimva2010.pdf&lt;/li&gt;&lt;li&gt;https://github.com/adamdoupe/WackoPicko&lt;/li&gt;&lt;li&gt;De-ICE PenTest LiveCDs http://de-ice.net/hackerpedia/index.php/De-ICE.net_PenTest_Disks&lt;/li&gt;&lt;li&gt;Metasploitable http://blog.metasploit.com/2010/05/introducing-metasploitable.html&lt;/li&gt;&lt;li&gt;Owaspbwa http://code.google.com/p/owaspbwa/&lt;/li&gt;&lt;li&gt;Web Security Dojo http://www.mavensecurity.com/web_security_dojo/&lt;/li&gt;&lt;li&gt;Lampsecurity http://sourceforge.net/projects/lampsecurity/files/&lt;/li&gt;&lt;li&gt;Damn Vulnerable Web App (DVWA) www.dvwa.co.uk&lt;/li&gt;&lt;li&gt;Hacking-Lab&amp;nbsp; http://www.hacking-lab.com/hl_livecd/&lt;/li&gt;&lt;li&gt;Moth&amp;nbsp; http://www.bonsai-sec.com/en/research/moth.php&lt;/li&gt;&lt;li&gt;Exploit kb vulnerable web app http://sourceforge.net/projects/exploitcoilvuln/&lt;/li&gt;&lt;li&gt;Gruyere http://google-gruyere.appspot.com/&lt;/li&gt;&lt;li&gt;Damn Vulnerable Linux (DVL) http://www.damnvulnerablelinux.org&lt;/li&gt;&lt;li&gt;pWnOS http://www.krash.in/bond00/pWnOS%20v1.0.zip&lt;/li&gt;&lt;li&gt;Virtual Hacking Lab http://sourceforge.net/projects/virtualhacking/files/&lt;/li&gt;&lt;li&gt;Badstore&amp;nbsp; http://www.badstore.net/&lt;/li&gt;&lt;li&gt;BodgeIt Store http://code.google.com/p/bodgeit/&lt;/li&gt;&lt;li&gt;Hackademic Challenges www.hackademic.eu&lt;/li&gt;&lt;li&gt;OWASP Vicnum Project https://sourceforge.net/projects/vicnum/&lt;/li&gt;&lt;li&gt;Stanford SecuriBench http://suif.stanford.edu/~livshits/securibench/&lt;/li&gt;&lt;li&gt;Kioptrix&amp;nbsp; http://www.kioptrix.com/blog/?page_id=135&lt;/li&gt;&lt;li&gt;hackxor http://hackxor.sourceforge.net&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;More Resources about Hackinghttp://vishnuvalentino.comhttp://carnal0wnage.attackresearch.com/2011/11/common-mobile-app-vulnerabilities.htmlSearch the keywords backtrack tutorial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3838956817705877053?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3838956817705877053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/want-to-be-hacker.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3838956817705877053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3838956817705877053'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/11/want-to-be-hacker.html' title='Want to be a Hacker'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6676832180336295829</id><published>2011-10-20T11:32:00.000-07:00</published><updated>2011-10-20T11:32:56.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>Please Listen to the Aircraft Announcement</title><content type='html'>I was on a Southwest flight to San Diego this week.&amp;nbsp; As usual, I didn't pay attention to the announcement while the aircraft took off.&amp;nbsp; By chance, I caught the announcement from the air steward that:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;You'll notice a "Call Attendant" button. Don't press it. Otherwise, your luggage will be ejected out of the aircraft.&lt;/div&gt;&lt;br /&gt;I began to pay attention, since this is weird.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;If you're lucky to land safely in San Diego, ...&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Oh my, what a day to start with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6676832180336295829?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6676832180336295829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/10/please-listen-to-aircraft-announcement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6676832180336295829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6676832180336295829'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/10/please-listen-to-aircraft-announcement.html' title='Please Listen to the Aircraft Announcement'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2987884405621733611</id><published>2011-10-10T22:16:00.001-07:00</published><updated>2011-12-22T22:33:06.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Mobile app security - what's new</title><content type='html'>&lt;b&gt;Code review - decompile binaries, examine local storage, extract iOS phone app, etc&lt;/b&gt;http://www.isecpartners.com/storage/docs/presentations/Secure_Development_on_iOS.pdf&lt;br /&gt;&lt;br /&gt;&lt;b&gt;iOS app security - parametize SQL, denial of service etc&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://www.isecpartners.com/storage/docs/presentations/Secure_Development_on_iOS.pdf&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Websecurity - test js security&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://blog.websecurify.com/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Top 10 mobile app security vulnerabilities&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://www.veracode.com/blog/2010/12/mobile-app-top-10-list/http://www.veracode.com/products/mobile-application-security.html&lt;br /&gt;&lt;br /&gt;http://labs.securitycompass.com/articles/common-mobile-application-security-pitfalls/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Android security&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://www.blackhat.com/presentations/bh-usa-09/BURNS/BHUSA09-Burns-AndroidSurgery-PAPER.pdf&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mobile app security testing&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=6&amp;amp;ved=0CGYQFjAF&amp;amp;url=http%3A%2F%2Fwww.mcafee.com%2Fus%2Fresources%2Fwhite-papers%2Ffoundstone%2Fwp-mobile-app-security-testing.pdf&amp;amp;rct=j&amp;amp;q=mobile%20application%20security&amp;amp;ei=7m-kTpfxGuSQiQL5-72AAQ&amp;amp;usg=AFQjCNE4jSY5XT1PcXUIkbCCpXgIMIN7Ag&lt;br /&gt;&lt;br /&gt;http://blog.infostretch.com/mobile-application-security-testing-–-part-i&lt;br /&gt;&lt;br /&gt;http://pentestmag.com/category/articles/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code review case study&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://blog.denimgroup.com/denim_group/2011/08/mobile-application-security-code-reviews-bsides-last-vegas-materials-online.html&lt;br /&gt;&lt;br /&gt;http://www.ehacking.net/2011/09/owasp-goatdroid-android-mobile.htmlhttp://clubhack.com/2009/files/Gursev_Kalra__Mobile_Application_Security_Testing.pdf&lt;br /&gt;&lt;br /&gt;&lt;b&gt;General mobile app security resources&lt;/b&gt;&lt;br /&gt;http://www.extendcode.com/Resources/article-mobile-application-security.aspx&lt;br /&gt;&lt;br /&gt;http://www.csoonline.com/article/679818/8-security-questions-to-ask-before-building-mobile-applications&lt;br /&gt;&lt;br /&gt;http://www.linkedin.com/groups/Mobile-Application-Security-3829637&lt;br /&gt;&lt;br /&gt;https://www.owasp.org/index.php/OWASP_Mobile_Security_Projecthttp://www.matasano.com/research/mobile/http://palisade.plynt.com/issues/2009Apr/mobile-application-security-testing/&lt;br /&gt;&lt;br /&gt;http://www.ibm.com/developerworks/xml/tutorials/x-jquerymobilesecuritytut/index.html&lt;br /&gt;&lt;br /&gt;http://nsd.org.in/web/nsd-specialty-groups/mobile-application-security/&lt;br /&gt;&lt;br /&gt;http://www.hteinkmin.com/article-on-mobile-application-security.html&lt;br /&gt;&lt;br /&gt;http://www.plaveb.com/blog/how-developers-ensure-secure-mobile-application-development&lt;br /&gt;&lt;br /&gt;http://news.yahoo.com/mobile-apps-android-ios-flunk-security-test-172853198.html&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IOS security&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://www.nulledscripts.it/2011/03/30/mobile-application-security.html&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Android security&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://hakers.info/site/2011/10/android-penetration-testing-pentesting-android-apps&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Wifi security&amp;nbsp;&lt;/b&gt;&lt;br /&gt;http://triwinet.com/wifi-security-test/.php&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mobile security framework&amp;nbsp;&lt;/b&gt;&lt;br /&gt;https://buildsecurityin.us-cert.gov/swa/presentations_032011/DanCornell-MobileAppSecOverview.pdf&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mobile security pen testing tutorial&lt;/b&gt;&lt;br /&gt;http://labs.securitycompass.com/category/mobile/&lt;br /&gt;http://labs.securitycompass.com/mobile/mobile-security-presentations-from-toorcon-and-misti/&lt;br /&gt;http://securitycompass.com/conferences/downloads/pentesting_android_iphone.pdf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Penetration test tools&amp;nbsp;&lt;/b&gt;&lt;br /&gt;https://addons.mozilla.org/en-US/firefox/collections/Anonymous-4764404/wapt/&lt;br /&gt;&lt;br /&gt;http://security.stackexchange.com/questions/2307/pen-test-cell-phones&lt;br /&gt;&lt;br /&gt;http://geeknizer.com/iphone-pen-testing/&lt;br /&gt;&lt;br /&gt;&lt;b&gt;General Purpose Web Security Testing Tools&lt;/b&gt;&lt;br /&gt;http://www.softwareqatest.com/qatweb1.html#SECURITY&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2987884405621733611?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2987884405621733611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/10/mobile-app-security-whats-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2987884405621733611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2987884405621733611'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/10/mobile-app-security-whats-new.html' title='Mobile app security - what&apos;s new'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-9195081380509332483</id><published>2011-09-29T14:06:00.001-07:00</published><updated>2011-09-29T14:06:34.591-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>How to Go to Hell</title><content type='html'>&lt;h6 class="uiStreamMessage" data-ft="{&amp;quot;type&amp;quot;:1}" style="font-family: Arial,Helvetica,sans-serif; font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;span class="messageBody translationEligibleUserMessage" data-ft="{&amp;quot;type&amp;quot;:3}"&gt;I download (free) Dragon Go voice recognition search application on my iPad. I spoke the words "amazon kindle", and it shows me the amazon page to buy. I asked "show me how to go to hell", and it displayed a (Google) map driving to Detroit.&lt;/span&gt;&lt;/span&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-9195081380509332483?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/9195081380509332483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/how-to-go-to-hell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9195081380509332483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9195081380509332483'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/how-to-go-to-hell.html' title='How to Go to Hell'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1310731412696221367</id><published>2011-09-19T11:11:00.000-07:00</published><updated>2011-09-19T11:11:04.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>SMS Gateway Provider</title><content type='html'>I'm conducting some tests on a few SMS gateway providers, which push SMS texts to the carriers, which then deliver the actual SMS to mobile handsets.&lt;br /&gt;&lt;br /&gt;Before this project, I have no prior knowledge of how SMS works.&lt;br /&gt;&lt;br /&gt;Here're a few interesting data points I learn:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Average response time 0.1 to 0.2 sec&lt;/b&gt;.&amp;nbsp; Simple SMS send (e.g. a plain text message in SMS) can take 0.1 to 2 sec from the client to the SMS gateway.&amp;nbsp; The end-to-end user experience may vary from 2 to 5 seconds, or more.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Average 40 TPS&lt;/b&gt;:&amp;nbsp; A reasonable SMS gateway throughput would be&lt;b&gt; 40 to 60 TPS&lt;/b&gt; (transactions per second), i.e.&amp;nbsp; an SMS gateway vendor can push 40 to 60 SMS texts (actually a mix of simple text and binary message [such as jpg]) to a local carrier.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Optimal throughput&lt;/b&gt;.&amp;nbsp; Despite SMS vendors may complete &amp;gt; 60 TPS, the average response time may take &amp;gt; 2 sec to send an SMS message under load.&amp;nbsp; Thus, a stepwise load test can tell a better picture of scalability throughput.&amp;nbsp; I would expect a reasonable optimal throughput would be: 40 TPS or less per single server instance.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Bulk Send&lt;/b&gt;.&amp;nbsp; SMS vendors tend to publish (if they are willing) larger TPS such as 200 TPS since they use bulk send. In other words, you can put a list of SMS simple texts in one single file (e.g. for marketing promotion messages). In one SMS vendor I tested, I notice 0.7 to 10 seconds to complete a send with 1,000 SMS messages per batch, or even 5,000 SMS messages per batch.&lt;/li&gt;&lt;/ul&gt;When testing SMS gateway vendor performance and scalability, you may want to include test scenarios:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Transaction mix of simple text, binary message, vcard, encoded text. If you can't replicate all message types, include at least simple text and binary message (e.g. jpg).&amp;nbsp; &lt;/li&gt;&lt;li&gt;Bulk send of messages in 1000, 2000, 3000, 4000 and 5000 messages per batch&lt;/li&gt;&lt;/ul&gt;Beware of constraints and limits for each SMS provider, e.g.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Some SMS vendors place an arbitrary max TPS per tenant, e.g. 30 TPS per service provider&lt;/li&gt;&lt;li&gt;Some SMS vendors have max number of characters for message type, e.g. 160 characters for simple text&lt;/li&gt;&lt;li&gt;Some SMS vendors have max number of bulk send messages, e.g. minimum 10 messages per bulk send&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Although the norm is to use SMPP protocol (this format looks like a telex or fax to me), it's very common to use HTTP REST web service, e.g. HTTP GET or HTTP POST. &amp;nbsp;&amp;nbsp; Sending SOAP versus sending REST may have 20% difference in performance per simple text message.&amp;nbsp; This may be rationalized by the SOAP payload marshal/unmarshal overhead. &lt;br /&gt;&lt;br /&gt;This link depicts a higher comparison (remark: not technical) of different SMS vendors:&lt;br /&gt;http://www.developershome.com/sms/smsGatewayProvComp.asp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1310731412696221367?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1310731412696221367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/sms-gateway-provider.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1310731412696221367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1310731412696221367'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/sms-gateway-provider.html' title='SMS Gateway Provider'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1525814546787110387</id><published>2011-09-15T15:55:00.001-07:00</published><updated>2011-09-15T15:55:42.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Using SOAPUI for performance testing</title><content type='html'>some interesting discussion about load http://www.myhomepageindia.com/index.php/2009/11/02/performance-testing-web-service-using-soapui.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1525814546787110387?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1525814546787110387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/using-soapui-for-performance-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1525814546787110387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1525814546787110387'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/using-soapui-for-performance-testing.html' title='Using SOAPUI for performance testing'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5509871916907591360</id><published>2011-09-09T11:32:00.000-07:00</published><updated>2011-09-09T11:32:53.735-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>What's New about Mobile UI Framework</title><content type='html'>I am piloting jQueryMobile to build HTML 5 applications as a UI framework.&amp;nbsp; Brian LeRoux from Nitobi shares his experience and recommendation:&lt;br /&gt;&lt;br /&gt;PhoneGap uses xui from the start. Brian is looking into chrome.js recently. But he recommends tyring zepto.js.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5509871916907591360?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5509871916907591360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/whats-new-about-mobile-ui-framework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5509871916907591360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5509871916907591360'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/whats-new-about-mobile-ui-framework.html' title='What&apos;s New about Mobile UI Framework'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8739369383141554342</id><published>2011-09-09T10:48:00.000-07:00</published><updated>2011-09-09T11:34:52.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>What's Cool about PhoneGap</title><content type='html'>Nitobi's Chief Architect (Brian LeRoux) shares an interesting session on PhoneGap. They download iOS applications from app store periodically, and de-compile the codes to see if the market uses PhoneGap to build. As of Sep 9, 2011, 5% iOS applications use PhoneGap, ~15,000 users and 33,216 applications created. &lt;br /&gt;&lt;br /&gt;PhoneGap is a framework that builds native mobile applications without using iOS SDK or Android.&lt;br /&gt;https://build.phonegap.com/.&amp;nbsp; You only maintain one single code base, and can deploy to multiple phone platforms and handsets.&lt;br /&gt;&lt;br /&gt;You can check out more cool stuff from http://github.com/phonegap&lt;br /&gt;&lt;br /&gt;3 years ago Apple rejects PhoneGap.&amp;nbsp; You need to rename plist in order to be compliant with Appstore submission principles (so that you won't be rejected).&lt;br /&gt;&lt;br /&gt;Startup overhead for PhoneGap. Brian benchmarks it for 1-2 sec (10kb footprint).&amp;nbsp; This means your iOS starts up a PhoneGap application in 1 sec with no contents. The rest of the performance overhead is your applications.&lt;br /&gt;&lt;br /&gt;If you need help, try google group or IRC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8739369383141554342?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8739369383141554342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/whats-cool-about-phonegap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8739369383141554342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8739369383141554342'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/whats-cool-about-phonegap.html' title='What&apos;s Cool about PhoneGap'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5899634285608819292</id><published>2011-09-09T06:53:00.000-07:00</published><updated>2011-09-09T06:53:00.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Kill a Watt</title><content type='html'>I bought a gadget Kill-a-Watt to measure my electricity usage of household appliance. I saw this gadget at Frys store a few years ago, and finally got the motivation to buy one.&lt;br /&gt;&lt;br /&gt;My surprisesmare:&lt;br /&gt;&lt;br /&gt;Hot water heater - $70 / year&lt;br /&gt;Micro-USB charger (e.g. Kindle, Bluetooth headset) - $7 / year&lt;br /&gt;Sony Hifi home theater set (Idle, plugged in but not used) - $50 / year&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5899634285608819292?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5899634285608819292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/kill-watt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5899634285608819292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5899634285608819292'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/kill-watt.html' title='Kill a Watt'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3332529387640737298</id><published>2011-09-08T17:14:00.000-07:00</published><updated>2011-11-21T10:26:35.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>A Few Mobile Performance Tools</title><content type='html'>JDrop (http://jdrop.org/) - store JSON data (performance data from mobile device) in the cloud&lt;br /&gt;&lt;br /&gt;pcap (http://pcapperf.appspot.com/) - (profiling) you capture the actual network/data traffic from a mobile device in PCAP format, and import into pcap in order to generate a HAR file (performance data in waterfall chart format)&lt;br /&gt;&lt;br /&gt;A long list of mobile performance testing tools http://www.softwareqatest.com/qatweb1.html&amp;nbsp;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3332529387640737298?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3332529387640737298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/few-mobile-performance-tools.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3332529387640737298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3332529387640737298'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/few-mobile-performance-tools.html' title='A Few Mobile Performance Tools'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8163029949970539573</id><published>2011-09-07T16:14:00.000-07:00</published><updated>2011-09-07T16:14:55.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>32 Old Family Video Tapes Digitized</title><content type='html'>I finally digitized 32 hours of video tapes into Quicktime MOV format in 3 days over the past long weekend.&amp;nbsp; They are the memory from my son's birth to recent years.&amp;nbsp; My Sony PC-115 camcorder is very sick, and I'm not sure when it stops functioning.&lt;br /&gt;&lt;br /&gt;I'm very pleased for the achievement, and am surprised I have the patience for the conversion. (I had another great achievement to scan thousands of photos manually last year).&lt;br /&gt;&lt;br /&gt;A few years back, I used a firewire adapter to capture the old videos in .avi format using Windows Movie (and also Nero) on a Windows laptop. The quality is marginally acceptable.&amp;nbsp; I now switch to Quicktime on a Macbook. The quality seems to be sharper with more vibrant color, and rightly exposed (when the camcorder LCD screen shows overexposed).&lt;br /&gt;&lt;br /&gt;However, I can't play back Quicktime MOV files on my Samsung LED TV. I convert the MOV files into MP4 using MKVTOOLS, but the MP4 (or MKV) files can't play on my htc wildfire S Android cell phone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8163029949970539573?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8163029949970539573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/32-old-family-video-tapes-digitized.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8163029949970539573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8163029949970539573'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/32-old-family-video-tapes-digitized.html' title='32 Old Family Video Tapes Digitized'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5731621576345347493</id><published>2011-09-03T07:21:00.001-07:00</published><updated>2011-09-03T07:22:29.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>How to Hack Your Kindle 3</title><content type='html'>http://www.mobileread.com/forums/showthread.php?t=128704&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5731621576345347493?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5731621576345347493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/how-to-hack-your-kindle-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5731621576345347493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5731621576345347493'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/how-to-hack-your-kindle-3.html' title='How to Hack Your Kindle 3'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1708451411633864439</id><published>2011-09-01T11:30:00.001-07:00</published><updated>2011-09-01T11:31:13.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Writing JavaScript and jQuery Mobile on the Fly</title><content type='html'>Not confident about writing JavaScript on the fly?Try http://jsfiddle.net/gpHNb/26/ to see the actual result right away. Good if you're using jQuery mobile too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1708451411633864439?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1708451411633864439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/not-confident-about-writing-javascript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1708451411633864439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1708451411633864439'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/not-confident-about-writing-javascript.html' title='Writing JavaScript and jQuery Mobile on the Fly'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-554106724800150592</id><published>2011-09-01T08:26:00.000-07:00</published><updated>2011-09-01T08:26:29.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Read a Book in 20 Years</title><content type='html'>I have a bad habit of collecting books instead of reading books.  At first, I tried to read the first few pages, particularly the Preface, and the first chapter.  Books (and movies) are placed on the shelf for years, and if they are lucky enough to be re-sold.&lt;br /&gt;&lt;br /&gt;I had the honor yesterday that I read a book called Visual Dictionary almost page by page after 20 years. I probably read a few pages when I first purchased it.  For dictionaries, I tried to read from A to Z when I was in 13 or 14 (which I always stop in the middle of A section.&lt;br /&gt;&lt;br /&gt;Most people may not have the problem I had. But this is a big deal for me. And I feel great - being able to do something even after 20 years.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-554106724800150592?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/554106724800150592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/read-book-in-20-years.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/554106724800150592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/554106724800150592'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/09/read-book-in-20-years.html' title='Read a Book in 20 Years'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1658423342709461146</id><published>2011-08-31T08:44:00.001-07:00</published><updated>2011-08-31T08:44:55.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Google Market Problem on Android Tablet</title><content type='html'>i found an article describing how to resolve the google market issue.  http://www.slatedroid.com/wiki/index.php/Fix_Market_For_Slates&lt;br /&gt;&lt;br /&gt;I need an android id...&lt;br /&gt;&lt;br /&gt;The symptom is: Google market starts, showing the message "downloading..." and then "download unsuccessful".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1658423342709461146?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1658423342709461146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/google-market-problem-on-android-tablet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1658423342709461146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1658423342709461146'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/google-market-problem-on-android-tablet.html' title='Google Market Problem on Android Tablet'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2877590354066309997</id><published>2011-08-30T13:41:00.000-07:00</published><updated>2011-08-30T13:42:59.914-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Top 25 Security Products in 2011</title><content type='html'>CRN (http://www.crn.com/slide-shows/security/231600449/25-hot-security-products-to-watch.htm?pgno=2) identifies top 25 security products to watch:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Astaro security gateway - unified threat management&lt;/li&gt;&lt;li&gt;BeyondTrust PowerBroker database - monitor privileged user database access&lt;/li&gt;&lt;li&gt;Checkpoint 21400 - consolidate several appliances (vpn, firewall, mobile access, IPS, anti-virus, anti-spam, etc)&lt;/li&gt;&lt;li&gt;Checkpiont 61000 - scalability with 70 million concurrent connections and 600,000 sessions per second&lt;/li&gt;&lt;li&gt;Checkpoint R75.20 - comprehensive SSL inspection technology, new URL Filtering Software Blade that provides granular control for web  surfing in real-time and uniquely integrates with Application Control  for unified enforcement of web controls&lt;/li&gt;&lt;li&gt;Fortinet FortiWeb 4.0 MR3 - improve bandwidth utilization and user response times, as well as the overall performance of application delivery&lt;/li&gt;&lt;li&gt;Kaspersky Internet Security 2012- what's new, e.g. cloud based protection&lt;/li&gt;&lt;li&gt;McAfee Mobile Security&lt;/li&gt;&lt;li&gt;M86 MailMarshal Email Content Manager - emails&lt;/li&gt;&lt;li&gt; M86 Security Reporter - virtual appliance&lt;/li&gt;&lt;li&gt;M86 Secure Web Gateway - comprehensive, multi-layered Web security and reporting capabilities  designed to increase productivity, address compliance guidelines and  control bandwidth&lt;/li&gt;&lt;li&gt;PacketSure DLP - comprehensive data loss prevention &lt;/li&gt;&lt;li&gt;Palo Alto network 5060 - protect data centers, large enterprise Internet gateways, and service  provider environments where traffic demands dictate predictable firewall  and threat prevention throughput&lt;/li&gt;&lt;li&gt;Palo Alto Networks GlobalProtect -&amp;nbsp; ties application-, user-, and content-based policies to roaming users through a persistent thin client&lt;/li&gt;&lt;li&gt;RSA NetWitness Panorama - collect and analyze log information along with content of network  capture to give users a powerful advantage during an overall security  investigation&lt;/li&gt;&lt;li&gt;RSA Authentication Manager Express - provides multi-factor authentication optimized for SMBs&lt;/li&gt;&lt;li&gt;Skybox Network Assurance - take the network context – the network devices and settings, access  paths, and policies – into account when looking for network security  gaps or considering if an attacker can exploit vulnerabilities&lt;/li&gt;&lt;li&gt;Sophos Mobile Control&amp;nbsp; - central configure mobile device security settings and enforce them&lt;/li&gt;&lt;li&gt;Sophos SafeGuard Enterprise - provides multi-layered, centrally managed endpoint data security  combining encryption and data loss prevention (DLP) on laptops,  desktops, and removable media&lt;/li&gt;&lt;li&gt;Symantec Endpoint Protection&amp;nbsp; - offers comprehensive defense against all types of attacks for both physical and virtual system&lt;/li&gt;&lt;li&gt;Symantec Endpoint Protection 12 Small Business Edition&lt;/li&gt;&lt;li&gt;Total Defense Internet Security Suite Plus&lt;/li&gt;&lt;li&gt;Trend Micro Mobile Security - extends protection beyond traditional PCs to secure mobile devices and data&lt;/li&gt;&lt;li&gt;Tripwire Enterprise -configuration control and file integrity monitoring solution offers  comprehensive compliance policy management that protects critical  infrastructure, detects changes in real time and corrects noncompliant  configurations&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/4353699967472160771-2877590354066309997?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2877590354066309997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/top-25-security-products-in-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2877590354066309997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2877590354066309997'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/top-25-security-products-in-2011.html' title='Top 25 Security Products in 2011'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6510698302139634258</id><published>2011-08-25T17:00:00.000-07:00</published><updated>2011-08-25T17:04:25.827-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>A Spy Story of Printers</title><content type='html'>A church friend of mine shared with me an innovative story of how spies could capture information from a printer. Back in the old days of daisy wheel printers, you could bring a big dish-like magnet outside a target location (e.g. outside an embassy) to capture sound wave signature (sorry, I'm illiterate about physics) generated by daisy wheel printers.&amp;nbsp; Early design of daisy wheel printer yields different sound wave length signatures since typists don't use the same force for every letter or number.&amp;nbsp; You can actually reverse engineer the actual letter or number typed by inferring from the sound wave signature. To add to the complexity, a daisy wheel design was supposed to find the shortest distance to turn the wheel left or right for the hammer to hit/print the letter/number.&amp;nbsp; These clues could help you map the sound wave signature to the right letter/number.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;As a result, the government agency asked my friend to modify the daisy wheel printer so that the typewriter inside had a coating that absorbed the sound (making this more difficult to capture the signature), and the daisy wheel to randomly turn to the next letter/number (instead of the shortest distance).&amp;nbsp; A year later, they came to my friend for assistance again. The government agency customized the "motherboard" but ran into several unknown "system crashes". They asked my friend some peripheral questions with some unrelated items so that they could resolve the issues.&amp;nbsp; When my friend asked specific questions, they wouldn't tell a thing.&lt;br /&gt;&lt;br /&gt;My friend is indeed a smart scientist (he had a patent invention for foldable keyboard).&amp;nbsp; This story sounds like a scene with Q in a James Bond movie to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6510698302139634258?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6510698302139634258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/spy-story-of-printers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6510698302139634258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6510698302139634258'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/spy-story-of-printers.html' title='A Spy Story of Printers'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6651983327894089861</id><published>2011-08-25T16:41:00.000-07:00</published><updated>2011-08-25T16:44:37.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Mobile Security Penetration Testing</title><content type='html'>I attended a Core Security (Core Impact v12, http://www.coresecurity.com/content/core-impact-overview) webcast about penetration testing for mobile this morning.&amp;nbsp; My recent experience with penetration testing is to use IBM Watchfire AppScan, Cenzic Hailstorm or some open source application scanning or proxy tools to look for vulnerabilities. That startup product opens my eyes with a demo of the following scenarios:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scenario #1:&amp;nbsp; How to Exploit a Mobile Device&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Start with one email address, say, from searching linkedin, facebook or even sniff from a wifi access point&lt;/li&gt;&lt;li&gt;Scan for your local wifi access point, SMS gateway or SMTP gateway, and hack into it to launch a man-in-the-middle attack (of course, with some expensive sniffing or hacking tools)&lt;/li&gt;&lt;li&gt;Once you notice the mobile user sends a request, intercept it, and reply with a manipulated email that lures him/her to click&lt;/li&gt;&lt;li&gt;Upon clicking, he/she may install a trojan or script that steals their identities or privacy data&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&lt;b&gt;Scenario #2:&amp;nbsp; Exploit Using a Victim&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Once you access a wifi subnet, scan for hosts with open ports. Then look for system information that you can exploit with metasploit&lt;/li&gt;&lt;li&gt;With a known port, break into the port and install your Python scripts (trojan!)&lt;/li&gt;&lt;li&gt;From your exploited script, you can launch scan or attack just like within a "vpn" (this sounds like a botnet to me)&lt;/li&gt;&lt;/ul&gt;These scenarios are fairly high level, and I was not familiar with the approach or details at all.&amp;nbsp; Without a powerful (and expensive) hacking/pen testing tool, I (yes, my assumptions) need to use a mixture of hacking or pen testing tools to achieve the same result. Even so, I wouldn't know how to connect the dots. These scenarios are excellent examples of how vulnerable most of our mobile devices/applications are today.&lt;br /&gt;&lt;br /&gt;In real life scenarios, the hacking and pen testing would be more difficult, and won't be that dramatic as depicted here.&amp;nbsp; I don't think I know a bit, or can perform any of the above tasks.&amp;nbsp; But I'm very impressed by the product manager (speaker).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6651983327894089861?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6651983327894089861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/mobile-security-penetration-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6651983327894089861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6651983327894089861'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/mobile-security-penetration-testing.html' title='Mobile Security Penetration Testing'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8531304628181462578</id><published>2011-08-25T10:50:00.000-07:00</published><updated>2011-08-25T10:50:21.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Playing with Android tablet - refresh ROMs</title><content type='html'>I bought a 7" android tablet (aka aPad) a year ago for US$200. It has the best features that time, including multi-point gesture, camera and memory card support.&amp;nbsp; It ran Android 2.1 (a bit old now), and the Android market is not working for some unknown reasons.&lt;br /&gt;&lt;br /&gt;I was unfortunate to get US$99 HP Touchpad recently. All my orders got canceled. Hate it.&lt;br /&gt;&lt;br /&gt;I determine to refresh my 7" aPad to Android 2.3.x or perhaps 3.0 this coming weekend.&lt;br /&gt;http://www.androidtablets.net/forum/telechips-tcc8902-development/13471-haipad-m701-latest-firmaware-android-2-3-2g-samsung-micron-4g.html&lt;br /&gt;&lt;br /&gt;I'll update if this is successful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8531304628181462578?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8531304628181462578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/playing-with-android-tablet-refresh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8531304628181462578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8531304628181462578'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/playing-with-android-tablet-refresh.html' title='Playing with Android tablet - refresh ROMs'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4698705610045951126</id><published>2011-08-21T22:21:00.000-07:00</published><updated>2011-08-21T22:21:21.006-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Some Airline Domain Knowledge</title><content type='html'>I used to work in an airline. I uncovered some of my oldest notes about airline. See if you know these:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Crew&lt;/strong&gt;&lt;br /&gt;2 types of Crew - cabin crew and cockpit crew.\&lt;br /&gt;&lt;br /&gt;Cockpit crew categories&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Captain CN&lt;/li&gt;&lt;li&gt;First officer FO&lt;/li&gt;&lt;li&gt;First engineer FE&lt;/li&gt;&lt;li&gt;Second officer SO&lt;/li&gt;&lt;/ol&gt;Cabin crew categories&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Chief purser CP&lt;/li&gt;&lt;li&gt;Senior purser SP&lt;/li&gt;&lt;li&gt;Purser PR&lt;/li&gt;&lt;li&gt;Purser in first class PF&lt;/li&gt;&lt;li&gt;Junior purser FJ&lt;/li&gt;&lt;li&gt;Junior C/A bar BC&lt;/li&gt;&lt;li&gt;Junior C/A EY&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Heavy cabin crew&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Chief purser CP&lt;/li&gt;&lt;li&gt;Senior purser SP&lt;/li&gt;&lt;li&gt;Purser PR&lt;/li&gt;&lt;li&gt;Purser in first class&lt;/li&gt;&lt;li&gt;Junior purser JF&lt;/li&gt;&lt;li&gt;Junior C/A bar JB&lt;/li&gt;&lt;li&gt;Junior C/A JR&lt;/li&gt;&lt;/ol&gt;Seniority of crew&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Senior check S&lt;/li&gt;&lt;li&gt;Check C&lt;/li&gt;&lt;li&gt;Training or instructor T&lt;/li&gt;&lt;li&gt;Senior E&lt;/li&gt;&lt;li&gt;Normal line N&lt;/li&gt;&lt;li&gt;Under conversion training V&lt;/li&gt;&lt;li&gt;Probationary P&lt;/li&gt;&lt;li&gt;On probation L&lt;/li&gt;&lt;li&gt;Under command training D&lt;/li&gt;&lt;li&gt;Under induction training I&lt;/li&gt;&lt;li&gt;Familiarization X&lt;/li&gt;&lt;/ol&gt;Crew administration includes license info, address info, language info, visa info and medical info&lt;br /&gt;&lt;br /&gt;Personal info of crew&lt;br /&gt;&lt;ul&gt;&lt;li&gt;crew id, employee reference no, crew ICAO no, mailbox no&lt;/li&gt;&lt;li&gt;crew type (CO/CA), status, crew category&lt;/li&gt;&lt;li&gt;name, sex, nationality, country&lt;/li&gt;&lt;li&gt;training info&lt;/li&gt;&lt;li&gt;Base port, travel document details&lt;/li&gt;&lt;li&gt;Non-swap period details&lt;/li&gt;&lt;/ul&gt;Flight types&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Normal flight - normal schedule flight, extra sector, re-routed flight, rescheduled flight, aircraft type change, charter flight&lt;/li&gt;&lt;li&gt;Ferry flight - delivery flight, one-engine inoperative, position flight, diversion of ferry flight&lt;/li&gt;&lt;li&gt;Diversion flight - diversion of normal flight, technical stop&lt;/li&gt;&lt;li&gt;Special flight - spare engine pod carriage, spare engine carriage, landing gear extended, return flight (including flight returns to ramp), diversion of special flights, flight to destination or alternate with fuel dumped, flight returns to origin with fuel dumped&lt;/li&gt;&lt;li&gt;Cancellation - flight cancelled: general, due diversion, due re-route&lt;/li&gt;&lt;li&gt;Others - training flight, test flight&lt;/li&gt;&lt;/ol&gt;Flight change types - sector change, aircraft type change, schedule flight time change, telex time update, actual flight time update&lt;br /&gt;&lt;br /&gt;A crew roster includes&lt;br /&gt;&lt;ul&gt;&lt;li&gt;roster date&lt;/li&gt;&lt;li&gt;crew class&lt;/li&gt;&lt;li&gt;last 12 months block-hours total&lt;/li&gt;&lt;li&gt;monthly and weekly totals&lt;/li&gt;&lt;li&gt;a series of pattern code and pattern daily totals&lt;/li&gt;&lt;li&gt;a series of training / qualification details, if any&lt;/li&gt;&lt;li&gt;exception indicators&lt;/li&gt;&lt;/ul&gt;Mutual exchange duty details of crew includes reference no, swap month, approval, crew involved and a series of duties exchanged&lt;br /&gt;&lt;br /&gt;Basic flight pattern includes (basis for crew assignment):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;effective period&lt;/li&gt;&lt;li&gt;Pattern frequency for the period in terms of week day, number indicator&lt;/li&gt;&lt;li&gt;List of crew requirement&lt;/li&gt;&lt;li&gt;one or more flight sector&lt;/li&gt;&lt;li&gt;one or more ground duty code&lt;/li&gt;&lt;li&gt;processing indicators&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-4698705610045951126?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4698705610045951126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/some-airline-domain-knowledge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4698705610045951126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4698705610045951126'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/some-airline-domain-knowledge.html' title='Some Airline Domain Knowledge'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5128672824301369294</id><published>2011-08-19T16:39:00.000-07:00</published><updated>2011-08-19T16:39:27.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Apple appstore code signing issue resolved</title><content type='html'>My co-workers have been struggling for months to automate code signing before publishing an iOS app to Apple appstore. We have been manually building, re-compiling, and signing apps. We heard that eBay implements an automated build and deploy process, and why not us?&lt;br /&gt;&lt;br /&gt;Apple documentation says one thing but we can't use it as said.&amp;nbsp; Now with iOS 4.2 SDK, we can add a file called entitlement.plist, then we start code signing with the build automation without manual intervention.&lt;br /&gt;&lt;br /&gt;I have not tried out myself yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5128672824301369294?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5128672824301369294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/apple-appstore-code-signing-issue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5128672824301369294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5128672824301369294'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/apple-appstore-code-signing-issue.html' title='Apple appstore code signing issue resolved'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-9064005330296496819</id><published>2011-08-10T15:29:00.000-07:00</published><updated>2011-08-10T15:56:48.289-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>How to Read Throughput and Performance Numbers</title><content type='html'>About a year ago, I was a performance architect for a cloud-based small business financial service application.&amp;nbsp; The Web application can sustain a total of 35,000 REST api calls per second.&amp;nbsp; A friend asks if this is mediocre or extremely well in the field.&amp;nbsp; What does this number means?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sample Scenario&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Domain:&amp;nbsp; Small business accounting application with business data hosted in a private cloud&lt;/li&gt;&lt;li&gt;Population:&amp;nbsp; 68,000 customer base (active) with 1% concurrent users (assuming 20% buffer for growth)&lt;/li&gt;&lt;li&gt;Infrastructure:&amp;nbsp; 1 load balancer, 2 JBoss app servers and 4 Oracle database servers (each server has 16GB memory with 8-core 2.66GHz xeon processor)&lt;/li&gt;&lt;li&gt;We measure the throughput by simulating 816 concurrent users (1% of 68,000 plus 20% growth factor)&lt;/li&gt;&lt;/ul&gt;Each user logins and accesses the landing page.&amp;nbsp; There are 41 REST api calls on the landing page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scalability Test Findings&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The test objective is to verify if the application can sustain 33,456 calls/sec (816 users x 41 calls per page)&lt;/li&gt;&lt;li&gt;Test results show 140,000+ calls per second can be sustained with 260 concurrent users and 1.1 sec response time [@90 percentile].&amp;nbsp; (Remark:&amp;nbsp; our objective is to verify the # of calls per sec, not the concurrent users. The performance engineer changes the execution method by generating the # of concurrent requests, but tuning down the # of users due to technical issues).&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;How Good or How Bad?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;35,000 REST read api calls/sec is mediocre for 2 to 4 high-end app server instances.&amp;nbsp; Of course, we can't assess good or bad based on the number alone since we need to consider the # of app servers, and the complexity of the read api calls.&amp;nbsp;&amp;nbsp; For example, if we have 35,000 reads/sec with 100 servers and 20 seconds response time per call, this would be an extremely poor design/implementation. &lt;/li&gt;&lt;li&gt;Database benchmarking reports show that 100,000 to 2.5M reads/sec is an achievable range, e.g.&lt;/li&gt;&lt;/ul&gt;http://www.orafaq.com/forum/t/145633/2/ mentions 135,580 reads per sec on an oracle server (not the capacity but one case study)&lt;br /&gt;http://www.dbms2.com/2011/04/04/the-mongodb-story/ mongo db 100,000 reads/sec on 8-12 cores, 16-64GB memory machine&lt;br /&gt;http://forums.mysql.com/read.php?25,235889,235889 claims mysql can achieve 950,000 reads per sec on a single node&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Please note that this REST read api/sec is not identical to transactions per second.&amp;nbsp; For financial sector, one transaction per second (TPS) is likely to include multiple reads or REST api calls. 20 to 100 TPS is rather common, compared to 10,000 to 35,000 calls / sec.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some Extreme Numbers&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Facebook has 13M queries/sec with 4 ms reads and 5 ms writes response time running from their 30,000 servers http://highscalability.com/blog/2010/11/4/facebook-at-13-million-queries-per-second-recommends-minimiz.html and http://www.datacenterknowledge.com/archives/2009/10/13/facebook-now-has-30000-servers/&lt;/li&gt;&lt;li&gt;New Relic processes 180,000+ requests/sec with 9 MySQL cluster (+ app servers) for website performance monitoring (heartbeats and data collection) http://highscalability.com/blog/2011/7/18/new-relic-architecture-collecting-20-billion-metrics-a-day.html&lt;/li&gt;&lt;li&gt; Twitter handles 1.6B queries/day (or 11,574 search queries/sec) http://en.wikipedia.org/wiki/Twitter&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Appearance versus Reality&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is the reality (in production) close to the ideal (projected or simulated capacity, as found in performance and scalability test)?&amp;nbsp; My past project now has significantly shrinked the throughput to 1.1M reads/day (or 13.3 reads/sec) as the number of users decrease drastically after 1 year.&amp;nbsp; This number reflects the actual usage, not the capacity.&lt;/li&gt;&lt;li&gt;Inferring from Facebook statistics above, they handle 433 queries/sec per server instance&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-9064005330296496819?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/9064005330296496819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/how-to-read-throughput-and-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9064005330296496819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9064005330296496819'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/08/how-to-read-throughput-and-performance.html' title='How to Read Throughput and Performance Numbers'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3606907172734398700</id><published>2011-07-26T10:29:00.000-07:00</published><updated>2011-07-26T10:29:41.537-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>How to Install Android Apps with a 32Mb Android Phone</title><content type='html'>Just bought an Android 2.3 phone (htc Wildfire S) with 512Mb internal memory. However, with the system apps, I only have 50-120Mb left.&amp;nbsp; After installing two to three apps, I have 32Mb left.&amp;nbsp; With Android 2.3, you can move installed apps to SD card (say, you have 16Gb SD card). However, most existing Android apps don't support apps2sd, which means that those legacy apps can't be moved to SD card.&lt;br /&gt;&lt;br /&gt;Here's a get-around. I'll try out soon.&lt;br /&gt;http://www.bongizmo.com/blog/moving-all-android-apps-to-sdcard-apps2sd-froyo/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3606907172734398700?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3606907172734398700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/07/how-to-install-android-apps-with-32mb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3606907172734398700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3606907172734398700'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/07/how-to-install-android-apps-with-32mb.html' title='How to Install Android Apps with a 32Mb Android Phone'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-393179879143110869</id><published>2011-07-08T08:41:00.000-07:00</published><updated>2011-07-08T08:41:23.066-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>How to Deal with an Aggressive Waiter</title><content type='html'>Yesterday is my son's birthday. I went to a local American restaurant for dinner.&amp;nbsp;&amp;nbsp; The receptionist waiter was very aggressive.&amp;nbsp; He seemed very bored by playing with you (unilaterally), say, gave you the menu but suddenly took it back a few times.&amp;nbsp;&amp;nbsp; While he was seating us, he came up with a few idiosyncratic jokes that we were not ready for them.&lt;br /&gt;&lt;br /&gt;He introduced the waitress' name a couple of times - Kendle.&amp;nbsp; I got a bad ear and repeated Kindle to him twice: "You meant Kindle as in Amazon Kindle?"&amp;nbsp; He was caught by surprise that his customer fought back to his jokes.&amp;nbsp; The name Kendle has nothing to do with Amazon Kindle. What the heck. He backed off since he's sensing his customer began to speak nonsense.&amp;nbsp; He did not know how to respond.&amp;nbsp; He did not want to speak to a crazy customer. He silently left.&lt;br /&gt;&lt;br /&gt;My family were very amused by the way I sent him back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-393179879143110869?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/393179879143110869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/07/how-to-deal-with-aggressive-waiter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/393179879143110869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/393179879143110869'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/07/how-to-deal-with-aggressive-waiter.html' title='How to Deal with an Aggressive Waiter'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4075620255125357813</id><published>2011-06-16T15:53:00.000-07:00</published><updated>2011-06-16T15:53:05.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>dTrace for Linux download</title><content type='html'>ftp://crisp.dyndns-server.com/pub/release/website/dtrace/&lt;br /&gt;&lt;br /&gt;I happen to attend O'Reilly Velocity Conference 2011, and listen to a session delivered by Bryan Cantrill, one of the authors of dTrace. He's very young and energetic (lots of foul language, not to expect from him).&amp;nbsp; His speech is tuned in probably four quad-core speed.&amp;nbsp; I find it breath-taking to understand what Robinson Project is about (real time world map contest).&amp;nbsp; If you don't know he's one of the authors of dTrace, you wouldn't expect he's so amazing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-4075620255125357813?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4075620255125357813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/dtrace-for-linux-download.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4075620255125357813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4075620255125357813'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/dtrace-for-linux-download.html' title='dTrace for Linux download'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3941448255533227988</id><published>2011-06-14T06:55:00.000-07:00</published><updated>2011-06-14T06:55:24.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='TouchingMoment'/><title type='text'>Losing a Good Friend</title><content type='html'>I had a trustworthy friend in South Korea from work. I was consulting for several financial clients in Service Oriented Architecture in Seoul between 2003 and 2005.&amp;nbsp; Since 2007, there were lots of shake-ups, and I learned that my friend Seonghoon had left the company. I sent him an email but he did not reply.&amp;nbsp; The following year, I sent another email but without reply. I wondered whether he held grumble against the company.&lt;br /&gt;&lt;br /&gt;Finally, I had contact with my previous Seoul office. An ex-colleague told me Seonghoon has passed away. He was struggling with cancer for some time. I was so shocked and depressed. I did miss Seonghoon. I should have kept in touch more frequently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3941448255533227988?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3941448255533227988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/losing-good-friend.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3941448255533227988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3941448255533227988'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/losing-good-friend.html' title='Losing a Good Friend'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3423187021211337005</id><published>2011-06-08T14:15:00.000-07:00</published><updated>2011-06-09T09:08:36.174-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Rundeck - Can it be the Cloud Execution Engine?</title><content type='html'>I love CenterRun (N1 Service Provisioning System), which is a cool application provisioning tool which can be used for multiple purposes, from provisioning, configuration management to remote execution.&amp;nbsp; Recently, I evaluated BMC Blade and Rundeck.&lt;br /&gt;&lt;br /&gt;Rundeck (http://rundeck.org) is really interestingly simple.&amp;nbsp; It uses SSH for remote execution, and has a simple HTML front-end. You can define simple steps as workflow too.&lt;br /&gt;&lt;br /&gt;Here're some simple commands to get started:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="c"&gt;# Add the Rundeck repo&lt;/span&gt;&lt;br /&gt;sudo rpm &lt;span class="argument"&gt;-Uvh&lt;/span&gt; http&lt;span class="other"&gt;:&lt;/span&gt;&lt;span class="other"&gt;/&lt;/span&gt;&lt;span class="other"&gt;/&lt;/span&gt;rundeck&lt;span class="other"&gt;.&lt;/span&gt;org&lt;span class="other"&gt;/&lt;/span&gt;latest&lt;span class="other"&gt;.&lt;/span&gt;rpm&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Install Rundeck&lt;/span&gt;&lt;br /&gt;sudo yum install rundeck&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Create a "rundeck" user on the remote host&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## The remote host being the host that you'll be using your &lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## Rundeck server to affect&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Install the rundeck pub key on the remote host&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## /home/rundeck/.ssh/rundeck.id_rsa.pub&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## Double check that you can ssh to that host as "rundeck" &lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## without a password&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Start the rundeck daemon&lt;/span&gt;&lt;br /&gt;sudo &lt;span class="other"&gt;/&lt;/span&gt;etc&lt;span class="other"&gt;/&lt;/span&gt;init&lt;span class="other"&gt;.&lt;/span&gt;d&lt;span class="other"&gt;/&lt;/span&gt;rundeckd start&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Point your browser to http://:4440/user/login&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## user: admin&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## passwd: admin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Add a project&lt;/span&gt;&lt;br /&gt;rd&lt;span class="argument"&gt;-project&lt;/span&gt; &lt;span class="argument"&gt;-p&lt;/span&gt; nonproduction &lt;span class="other"&gt;-&lt;/span&gt;&lt;span class="argument"&gt;-action&lt;/span&gt; create&lt;/pre&gt;&lt;pre&gt;&lt;span class="c"&gt;# Add your remote host&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## edit /var/rundeck/projects/nonproduction/etc/resources.xml&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## Add an additional node line similar to&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="c"&gt;# Test&lt;/span&gt;&lt;br /&gt;&lt;span class="c"&gt;## As the rundeck user on the Rundeck server run:&lt;/span&gt;&lt;br /&gt;dispatch &lt;span class="argument"&gt;-I&lt;/span&gt; name&lt;span class="other"&gt;=&lt;/span&gt;examplenode &lt;span class="argument"&gt;-p&lt;/span&gt; nonproduction &lt;span class="other"&gt;-&lt;/span&gt;&lt;span class="argument"&gt;-noqueue&lt;/span&gt; &lt;span class="other"&gt;-&lt;/span&gt;&lt;span class="other"&gt;-&lt;/span&gt; hostname&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Source: http://bustleandflurry.com/test&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;http://groups.google.com/group/rundeck-discuss/browse_thread/thread/da677ba99e4eb4dd/307899572feda5fd?lnk=raot&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;you can try out deploying selenium to test out the concept&lt;/pre&gt;&lt;pre&gt;http://www.skillrack.com/tutorial/11_Integrating_Selenium_environment_with_Maven &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3423187021211337005?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3423187021211337005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/rundeck-can-it-be-cloud-execution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3423187021211337005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3423187021211337005'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/06/rundeck-can-it-be-cloud-execution.html' title='Rundeck - Can it be the Cloud Execution Engine?'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8892106146219402139</id><published>2011-05-26T10:16:00.000-07:00</published><updated>2011-05-26T13:50:18.008-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Testing REST Web Services with curl</title><content type='html'>I built REST web services with JAX-RS (Jersey), Spring and Hibernate using maven template.&amp;nbsp; I find curl is a quick way to generate client tests.&lt;br /&gt;http://stackoverflow.com/questions/1087185/http-testing-tool-easily-send-post-get-put&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Assumptions&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Your local web server set-up assumes:&lt;br /&gt;&lt;br /&gt;http://localhost:8080/PiggyBank02/x/&amp;nbsp; with the context "/x/*" defined in your web.xml&lt;br /&gt;and by defining the REST api (under /services/...) in your codes:&lt;br /&gt;&lt;br /&gt;@Path("/services")&lt;br /&gt;@Component&lt;br /&gt;@Scope("request")&lt;br /&gt;public class RestDemo {&lt;br /&gt;&lt;br /&gt;Thus, you invoke the REST Web service by "http://localhost:8080/PiggyBank02/x/services/..."&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example 1:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To test @PUT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;curl -v -X PUT -HContent-type:application/xml -H"Accept: application/xml" --data-binary "&lt;account&gt;&lt;accountnumber&gt;1&lt;/accountnumber&gt;&lt;username&gt;Johanan&lt;/username&gt;&lt;updatedate&gt;05/25/2011&lt;/updatedate&gt;&lt;currentbalance&gt;23.6&lt;/currentbalance&gt;&lt;/account&gt;" http://localhost:8080/PiggyBank02/x/services/update&lt;br /&gt;&lt;br /&gt;Assuming your code writes:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("/{bar}")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @PUT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Consumes("application/xml")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public JAXBElement&lt;masteraccount&gt; demo2(@PathParam("bar") String action, JAXBElement&lt;masteraccount&gt; account) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("*** Inserting username=" + account.getValue().getUserName().toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return account;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/masteraccount&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example 2:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To test @POST&lt;br /&gt;&lt;br /&gt;curl -v -X POST -HContent-type:application/xml -H"Accept: application/xml" --data-binary "&lt;account&gt;&lt;accountnumber&gt;1&lt;/accountnumber&gt;&lt;username&gt;Johanan&lt;/username&gt;&lt;updatedate&gt;05/25/2011&lt;/updatedate&gt;&lt;currentbalance&gt;23.6&lt;/currentbalance&gt;&lt;/account&gt;" http://localhost:8080/PiggyBank02/x/services/demo2a/insert&lt;br /&gt;&lt;br /&gt;Assuming your code writes:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("/demo2a/{bar}")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @POST&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Consumes("application/xml")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Response demo2a(@PathParam("bar") String action, JAXBElement&lt;masteraccount&gt; account) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (action.equals("insert")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("*** Inserting username=" + account.getValue().getUserName().toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (action.equals("update")) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("*** Updating username=" + account.getValue().getUserName().toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("*** ignored due to invalid request");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // sample actions&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; URI uri = uriInfo.getAbsolutePathBuilder().&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path(account.getValue().getUserName().toString()).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return Response.created(uri).build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/masteraccount&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;masteraccount&gt;Example 3:&lt;/masteraccount&gt;&lt;/b&gt;&lt;br /&gt;&lt;masteraccount&gt; &lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt; To test @DELETE&lt;/masteraccount&gt;&lt;br /&gt;&lt;br /&gt;&lt;masteraccount&gt;curl -v -X DELETE -HContent-type:application/xml -H"Accept: application/xml" --data-binary "&lt;account&gt;&lt;accountnumber&gt;11&lt;/accountnumber&gt;&lt;username&gt;Johanan&lt;/username&gt;&lt;updatedate&gt;05/24/2011&lt;/updatedate&gt;&lt;currentbalance&gt;388.3&lt;/currentbalance&gt;&lt;/account&gt;" http://localhost:8080/PiggyBank02/x/services/delete&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt; &lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;Assuming your code writes:&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("/delete")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @DELETE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Consumes("application/xml")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Response deleteAccount(JAXBElement&lt;masteraccount&gt; account) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MasterAccount ac = new MasterAccount();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ac.setAccountNumber(account.getValue().getAccountNumber());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ac.setUserName(account.getValue().getUserName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ac.setUpdateDate(account.getValue().getUpdateDate());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ac.setCurrentBalance(account.getValue().getCurrentBalance());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; masterAccountDAO.delete(ac);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("@DELETE *** Deleting username="&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; + account.getValue().getUserName().toString());&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; URI uri = uriInfo.getAbsolutePathBuilder()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .path(account.getValue().getUserName().toString()).build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Response.ok().build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception ex) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Response.notModified().build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/masteraccount&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;b&gt;&lt;masteraccount&gt;Example 4:&lt;/masteraccount&gt;&lt;/b&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;To delete by id&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;curl -v -X DELETE -HContent-type:application/xml -H"Accept: application/xml" http://localhost:8080/PiggyBank02/x/services/delete/9&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;Assuming your code writes:&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&lt;br /&gt;&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Path("/delete/{acNumber}")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @DELETE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @Consumes("application/xml")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Response deleteAccountByNumber(@PathParam("acNumber") String accountNumber) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MasterAccount ac = new MasterAccount();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ac.setAccountNumber(Long.valueOf(accountNumber));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; masterAccountDAO.delete(ac);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("@DELETE by accountNumber *** Deleting username="&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; + accountNumber);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Response.ok().build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception ex) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Response.notModified().build();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/masteraccount&gt;&lt;br /&gt;&lt;masteraccount&gt; &lt;/masteraccount&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8892106146219402139?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8892106146219402139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/testing-rest-web-services-with-curl.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8892106146219402139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8892106146219402139'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/testing-rest-web-services-with-curl.html' title='Testing REST Web Services with curl'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2164185904510537658</id><published>2011-05-25T14:17:00.000-07:00</published><updated>2011-05-25T14:17:59.893-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>How CDN Content Delivery Network is Configured</title><content type='html'>With CDN setup, you are supposed to access your web contents faster using your nearest geographical locations.&amp;nbsp; However, I went to a couple of technical presentation but got the impression that CDN setup is a mystery (no information).&amp;nbsp; &lt;br /&gt;&lt;br /&gt;From this link&lt;br /&gt;http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html, it looks like once you purchased for CDN service, it'll be a simple DNS and Apache configuration to point to the CDN server:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Update your DNS CNAME to refer to your CDN server FQDN&amp;nbsp;&lt;/li&gt;&lt;li&gt;Instruct your apache web to pull both your original server and CDN server - this will allow you to upload&amp;nbsp; and map files to your CDN server (e.g. in your apache httpd.conf, specify your CDN server under ServerName and ServerAlias of the &lt;virtualhost&gt; block)&lt;/virtualhost&gt;&lt;/li&gt;&lt;li&gt;Configure your app to upload files to the CDN server&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/4353699967472160771-2164185904510537658?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2164185904510537658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/how-cdn-content-delivery-network-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2164185904510537658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2164185904510537658'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/how-cdn-content-delivery-network-is.html' title='How CDN Content Delivery Network is Configured'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2816371501126507565</id><published>2011-05-24T11:59:00.000-07:00</published><updated>2011-05-24T11:59:17.810-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>JAX-RS: Difference between RESTeasy and Jersey</title><content type='html'>My colleague Vijay shared with me 2 differences between JBoss RESTasy and Oracle Jersey that matter to him:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;RESTeasy has a proprietary @Form that binds form parameters (e.g. [BuildVersion]&amp;amp;[BuildVersion]... in the HTTP body) to Java objects. If you are handling form contents, you will save considerable efforts to bind the @formparam to Java objects&lt;/li&gt;&lt;li&gt;RESTeasy's proprietary cache for the URL or query&lt;/li&gt;&lt;/ul&gt;From what I read from Internet, RESTeasy is easier for EJB 3.0 and SEAM integration, whereas Jersey is easier for Spring and JSON integration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2816371501126507565?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2816371501126507565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/jax-rs-difference-between-resteasy-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2816371501126507565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2816371501126507565'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/jax-rs-difference-between-resteasy-and.html' title='JAX-RS: Difference between RESTeasy and Jersey'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-341803731900558582</id><published>2011-05-12T09:48:00.000-07:00</published><updated>2011-05-13T13:21:26.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Simple Spring-Hibernate-REST Tutorial</title><content type='html'>I want to write a simple backend application to expose (cloud) data as REST web service api (REST-RS) using Spring-Hibernate-Maven.&lt;br /&gt;&lt;br /&gt;Pre-requisites&lt;br /&gt;&lt;ul&gt;&lt;li&gt;MySQL database (e.g. default setup)&lt;/li&gt;&lt;li&gt;Maven 3.0 to create application templates for eclipse&lt;/li&gt;&lt;li&gt;Tomcat app server for deployment (we can set up jetty plugin in maven too)&lt;/li&gt;&lt;/ul&gt;Creating an Application Template with maven&lt;br /&gt;&lt;ul&gt;&lt;li&gt;create a basic maven template for web app&lt;/li&gt;&lt;/ul&gt;e.g.&lt;br /&gt;mvn archetype:generate --batch-mode -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.twoturningpoints -DartifactId=Hib3&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Update pom.xml to include dependencies (e.g. jar files you need for Spring, Hibernate, Java EE persistence / JPA)&lt;/li&gt;&lt;/ul&gt;e.g. add these to your pom.xml&lt;br /&gt;&lt;repositories&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;repository&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;id&gt;JBoss repository&lt;/id&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;url&gt;http://repository.jboss.com/maven2/&lt;/url&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/repository&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;repository&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;id&gt;JavaEE repository&lt;/id&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/repository&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/repositories&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependencies&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;junit&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;junit&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;3.8.1&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;scope&gt;test&lt;/scope&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;mysql&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;mysql-connector-java&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;5.1.9&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;!-- Hibernate core --&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;hibernate&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;hibernate3&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;3.2.3.GA&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;!-- Hibernate annotation --&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;hibernate-annotations&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;hibernate-annotations&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;3.3.0.GA&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;hibernate-commons-annotations&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;hibernate-commons-annotations&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;3.0.0.GA&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;!-- Hibernate library dependecy start --&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;dom4j&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;dom4j&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;1.6.1&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;commons-logging&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;commons-logging&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;1.1.1&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;commons-collections&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;commons-collections&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;3.2.1&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;cglib&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;cglib&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;2.2&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;!-- Hibernate library dependecy end --&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;javaee&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;javaee-api&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;5&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;scope&gt;provided&lt;/scope&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;javax.transaction&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;jta&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;1.1&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dependency&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;groupid&gt;javax.persistence&lt;/groupid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;artifactid&gt;persistence-api&lt;/artifactid&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;version&gt;1.0&lt;/version&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependency&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/dependencies&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add Hibernate template (pretty standard)&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;public class HibernateUtil {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private static final SessionFactory sessionFactory = buildSessionFactory();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private static SessionFactory buildSessionFactory() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Create the SessionFactory from hibernate.cfg.xml&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return new AnnotationConfiguration().configure()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.buildSessionFactory();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} catch (Throwable ex) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Make sure you log the exception, as it might be swallowed&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.err.println("Initial SessionFactory creation failed." + ex);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;throw new ExceptionInInitializerError(ex);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static SessionFactory getSessionFactory() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return sessionFactory;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static void shutdown() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Close caches and connection pools&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;getSessionFactory().close();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Update hibernate.cfg.xml under resources&lt;/li&gt;&lt;/ul&gt;e.g. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"-//Hibernate/Hibernate Configuration DTD 3.0//EN"&lt;br /&gt;"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;&lt;br /&gt;&lt;hibernate-configuration&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;session-factory&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.bytecode.use_reflection_optimizer"&gt;false&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.connection.password"&gt;&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost/yourdatabase&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="show_sql"&gt;true&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="format_sql"&gt;true&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="hbm2ddl.auto"&gt;create&lt;/property&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;mapping class="com.twoturningpoints.BankTransaction"&gt;&lt;/mapping&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/session-factory&gt;&lt;/hibernate-configuration&gt; &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;run "mvn eclipse:eclipse" and "mvn clean install"&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;To run from maven without deploying&lt;/li&gt;&lt;/ul&gt;e.g.&lt;br /&gt;mvn clean compile exec:java -Dexec.mainClass=com.twoturningpoints.App&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-341803731900558582?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/341803731900558582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/simple-spring-hibernate-rest-tutorial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/341803731900558582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/341803731900558582'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/simple-spring-hibernate-rest-tutorial.html' title='Simple Spring-Hibernate-REST Tutorial'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4662251785712234487</id><published>2011-05-10T22:26:00.000-07:00</published><updated>2011-05-10T22:32:07.533-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ForMySon'/><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><title type='text'>Story about Giant Finger Nail Cutter</title><content type='html'>It's Mother Day's last weekend. It reminds me of a story about finger nail cutter.&lt;br /&gt;&lt;br /&gt;I was about to leave for a flight to study in Scotland. My mom was very nervous if I forgot to bring essential personal items.&amp;nbsp; She never traveled aboard, and didn't know if I can get anything. She wanted me to take her new giant size finger nail cutter with me.&amp;nbsp; We had a gentle fight, just like you bargained in the Chinese market.&lt;br /&gt;&lt;br /&gt;I was so reluctant, partly because of the (giant and perhaps embarrassing) size, and also I had already packed.&amp;nbsp; I finally took hers. Without my notice, my (ex-)girl friend quietly placed a second finger nail cutter (backup!) in my luggage.&amp;nbsp; When I unpacked my luggage, I found 2 giant size finger nail cutters. &lt;br /&gt;&lt;br /&gt;In retrospect (23 years later), I really loved my mom being so thoughtful.&amp;nbsp; My heart feels warm whenever I recall the story.&amp;nbsp; I begin to like those giant size finger nail cutters, although it's quite rare to find them.&amp;nbsp; And I miss my mom a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-4662251785712234487?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4662251785712234487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/story-about-finger-nail-cutter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4662251785712234487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4662251785712234487'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/story-about-finger-nail-cutter.html' title='Story about Giant Finger Nail Cutter'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-18435052191381759</id><published>2011-05-10T10:01:00.001-07:00</published><updated>2011-05-27T22:11:09.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Onboarding with Spring-Hibernate-REST (Jersey)</title><content type='html'>these tutorials show you how to create a maven-eclipse template:&lt;br /&gt;&lt;br /&gt;http://persistentdesigns.com/wp/jersey-spring-and-jpa/&lt;br /&gt;http://javapulutan.blogspot.com/2009/08/maven-2-jpa-and-spring-3-first-attempt.html&lt;br /&gt;http://blogs.oracle.com/enterprisetechtips/entry/jersey_and_spring&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this article provides good examples of returning different responses or xml payload types:&lt;br /&gt;&lt;br /&gt;http://java.dzone.com/articles/xml-bindings-jaxb-and-jax-rs?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.webtide.com/resources/maven.jsp&lt;br /&gt;&lt;br /&gt;http://java-x.blogspot.com/2007/04/native-queries-with-hibernate.html&lt;br /&gt;&lt;br /&gt;http://glassfish.java.net/javaee5/persistence/persistence-example.html&lt;br /&gt;&lt;br /&gt;http://www.roseindia.net/maven2/JPA-example.shtml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-18435052191381759?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/18435052191381759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/onboarding-with-spring-hibernate-rest.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/18435052191381759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/18435052191381759'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/onboarding-with-spring-hibernate-rest.html' title='Onboarding with Spring-Hibernate-REST (Jersey)'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8074858755474808247</id><published>2011-05-08T12:02:00.000-07:00</published><updated>2011-05-09T09:29:46.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Install OpenLDAP on Linux</title><content type='html'>&lt;b&gt;To install openldap on ubuntu:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;http://ubuntuforums.org/showthread.php?t=900920&lt;br /&gt;http://www.howtoforge.com/install-and-configure-openldap-on-ubuntu-karmic-koala&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To install openldap on redhat or centos&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;http://mayank03.wordpress.com/2010/02/11/install-and-configure-openldap/&lt;br /&gt;&lt;br /&gt;PS. I can't add 3 dc components, e.g. dc=corp,dc=xxx,dc=net but i can do 2 dc, e.g.&lt;br /&gt;&lt;br /&gt;dn: dc=xxx,dc=net&lt;br /&gt;dc: xxx&lt;br /&gt;objectClass: top&lt;br /&gt;objectClass: domain&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Remark&lt;/b&gt;&lt;br /&gt;http://www.cyberciti.biz/faq/howto-delete-remove-software-using-apt-get-command/&lt;br /&gt;in case you need to clean up packages&lt;br /&gt;&lt;br /&gt;http://tldp.org/HOWTO/LDAP-HOWTO/utilities.html&lt;br /&gt;useful ldap commands&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8074858755474808247?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8074858755474808247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/install-openldap-on-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8074858755474808247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8074858755474808247'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/install-openldap-on-linux.html' title='Install OpenLDAP on Linux'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2586895197106126380</id><published>2011-05-08T12:00:00.000-07:00</published><updated>2011-05-21T14:55:02.090-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Installing mysql on Linux/Mac</title><content type='html'>On CentOS or Redhat Linux:&lt;br /&gt;&lt;br /&gt;yum install mysql &lt;br /&gt;yum install mysql-server &lt;br /&gt;yum install mysql-devel &lt;br /&gt;chgrp -R mysql /var/lib/mysql &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(it's already been set up in my Linux)&lt;br /&gt;&lt;br /&gt;chmod -R 770 /var/lib/mysql &lt;br /&gt;service mysqld start&lt;br /&gt;&lt;br /&gt;(no, i need to use "/sbin/services mysqld start")&lt;br /&gt;&lt;br /&gt;/usr/bin/mysqladmin -u root password 'new-password'&lt;br /&gt;&lt;br /&gt;http://forums.mysql.com/read.php?11,153632&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To install on Mac&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There is a dmg to install, which will install to /usr/local/mysql.&lt;br /&gt;There is a built-in user id _mysqld&lt;br /&gt;&lt;br /&gt;sudo mysqld_safe&lt;br /&gt;this will restart your mysql automatically&lt;br /&gt;&lt;br /&gt;To remove from automatic restart, you need to turn off the mysql in /etc/hostconfig, e.g.&lt;br /&gt;MYSQLCOM=-NO-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MySQL 5.x on Ubuntu&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;By default, mysql port 3306 is blocked. So you need to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Disable iptables&amp;nbsp;&lt;/li&gt;&lt;li&gt;Open port 3306 in mysql my.conf&lt;/li&gt;&lt;li&gt;Restart mysql &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To disable iptables, flush it by "sudo iptables -F"&lt;br /&gt;&lt;br /&gt;To open port 3306 in mysql, edit /etc/mysql/my.conf and change the entry "bind-address = 127.0.0.1" to "bind-address = 0.0.0.0" (allow port 3306 to be accessed remotely by any ip address"&lt;br /&gt;&lt;br /&gt;To restart mysql on ubuntu, sudo /usr/sbin/service mysql restart&lt;br /&gt;&lt;br /&gt;You need to create a non-root mysql user to access remotely, e.g.&lt;br /&gt;&lt;code&gt;grant all on *.* to 'userid'@'%' identified by 'password' with grant options;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2586895197106126380?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2586895197106126380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/installing-mysql-on-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2586895197106126380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2586895197106126380'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/installing-mysql-on-linux.html' title='Installing mysql on Linux/Mac'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2245316597994599906</id><published>2011-05-02T11:14:00.000-07:00</published><updated>2011-05-02T11:16:06.755-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ForMySon'/><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>What Makes a Difference</title><content type='html'>Here's what I learned from Sing Tao radio this morning.&amp;nbsp; A famous Chinese writer Hu Shih (胡適) once wrote:&lt;br /&gt;&lt;br /&gt;How you spend your time after your 8-hour work makes a difference.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some couples or parents (especially myself) stop learning.&amp;nbsp; There are lots of chores after work.&amp;nbsp; I find my sofa and TV (oh my beloved HD movies!) very comfortable after a long day of stress.&amp;nbsp; Indeed, my day starts after I return home from office.&amp;nbsp; That's quite an enlightenment for me - this sounds very familiar, doesn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2245316597994599906?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2245316597994599906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/what-makes-difference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2245316597994599906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2245316597994599906'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/05/what-makes-difference.html' title='What Makes a Difference'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6133713528622614712</id><published>2011-04-28T09:45:00.000-07:00</published><updated>2011-04-28T10:33:28.496-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Install java on Synology NAS via ipkg</title><content type='html'>you can install java or other popular packages on Synology NAS (practically busybox):&lt;br /&gt;&lt;br /&gt;1. install ipkg&lt;br /&gt;http://forum.synology.com/wiki/index.php/How_to_Install_Bootstrap &lt;br /&gt;&lt;br /&gt;2. install jamvm&lt;br /&gt;&lt;br /&gt;You can also install tomcat&lt;br /&gt;http://www.openfsg.com/index.php/Install_Tomcat&lt;br /&gt;&lt;br /&gt;Appendix&lt;br /&gt;&lt;br /&gt;http://www.dpembo.ukfsn.org/2008/08/28/java-compiler-vm-on-the-nslu2/&lt;br /&gt;To start with you need to install the following packages with ipkg:&lt;br /&gt;&lt;pre&gt;ipkg install classpath&lt;br /&gt;ipkg install jamvm&lt;br /&gt;ipkg install jikes&lt;br /&gt;ipkg install zlib&lt;br /&gt;ipkg install file&lt;/pre&gt;Once these have installed then you are almost ready to go.&amp;nbsp; Being a  java developer, I was used to using javac and java to compile and  execute programs, so jikes and jamvm didn’t sit well with me!&amp;nbsp; To get  around this I created a symbolic link and a shell script in /opt/bin&lt;br /&gt;These are as follows:&lt;br /&gt;&lt;b&gt;/opt/bin/java&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;ln -s /opt/bin/jamvm /opt/bin/java&lt;/pre&gt;&lt;b&gt;/opt/bin/javac&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;/opt/bin/jikes -classpath /opt/share/jamvm/classes.zip:/opt/share/classpath/glibj.zip $*&lt;/pre&gt;Remember to change the permissions on the shells scripts to add the execute flag!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6133713528622614712?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6133713528622614712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/install-java-on-synology-nas-via-ipkg.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6133713528622614712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6133713528622614712'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/install-java-on-synology-nas-via-ipkg.html' title='Install java on Synology NAS via ipkg'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5641079794328369777</id><published>2011-04-26T15:46:00.000-07:00</published><updated>2011-05-01T00:50:26.542-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>SSL Certificate for Synology NAS</title><content type='html'>http://forum.synology.com/enu/viewtopic.php?f=36&amp;amp;t=21704&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I bought a few network storage appliances from Synology a while ago. Pretty neat. However, when i configure them with SSL, they have a self-signed certificate from Synology, which web browsers will treat them as suspicious Certificate Authority (e.g. malicious website).&lt;br /&gt;&lt;br /&gt;This wiki link explains how to get a free SSL certificate. i have not tried that yet but it's attractive.&lt;br /&gt;&lt;br /&gt;to install startcom SSL using java keytool &lt;br /&gt;https://forum.startcom.org/viewtopic.php?t=1390&lt;br /&gt;&lt;br /&gt;restore (regenerate synology keys)&lt;br /&gt;http://forum.synology.com/wiki/index.php/How_to_generate_custom_SSL_certificates&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5641079794328369777?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5641079794328369777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/ssl-certificate-for-synology-nas.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5641079794328369777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5641079794328369777'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/ssl-certificate-for-synology-nas.html' title='SSL Certificate for Synology NAS'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8814767222781840800</id><published>2011-04-14T11:54:00.000-07:00</published><updated>2011-04-14T13:11:17.087-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>ROI for Joining a Startup</title><content type='html'>An ex-colleague recommended me to join a startup at least once in your life time.&amp;nbsp; After exploring a few serious opportunities, here's what I find:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DILEMMA&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;There are success stories that young engineers get $1M+ after their startup go IPO (or being acquired). Should we jump on the bandwagon of promising startups?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RECOMMENDATION&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you have a stable job with high compensation (e.g. &amp;gt; $150K with bonus), joining a startup with the aspiration to get $1M after IPO may not be your best choice. This blog depicts the rationale with a scenario for illustration.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SCENARIO&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A promising startup with a target (typical) asset value of US$200M with 50 employees (example only) could easily "burn" $16M expenses (example only) per year (assuming $120K-$140K compensation per person per year). If it's doing extremely well, they may generate $10M (example only) gross revenue annually.&amp;nbsp; If the startup already got seed funding, A, B and C round funding, it may have already issued 10M+ shares.&amp;nbsp; The startup could show off how much funding they get, e.g. B round gets $20M. All these highlights sound attractive and very tempting - you could become a millionaire if you join the startup with lots of funding and promising revenue.&lt;br /&gt;&lt;br /&gt;Say, if you join this startup in their third year with $120K pay after C round funding, and you are awarded 20,000 shares option @ 15% discount (with estimated share value $1 per share), do you think you can be a millionaire after the startup flies (e.g. IPO or being acquired)?&lt;br /&gt;&lt;br /&gt;Nope, I doubt it.&amp;nbsp; Your $120K is your base salary. Most startup does not have bonus and much employee benefits.&amp;nbsp; With your 20,000 shares out of 10M shares (after C round funding) could yield $6K (example only) if the value is appreciated to $2@ from $1 estimated value. Mind you that some startups don't want to disclose the total number of shares issued, and thus you can't assess your potential value from share options easily.&amp;nbsp; But in some cases, a successful acquisition could yield $0 value since the purchase price only covers the debt from the previous rounds of funding, and deficit from operating expenses.&amp;nbsp;&amp;nbsp; This is the case for my wife's company.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CALCULATING YOUR OPPORTUNITY COST&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here's how I would calculate my opportunity cost from a pure compensation perspective (not from a career development perspective):&lt;br /&gt;&lt;br /&gt;Base compensation package:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $x1 (e.g. $120,000)&lt;br /&gt;Potential value from share options&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $x2 (e.g. $6,000)&lt;br /&gt;Number of years the startup expects success:&amp;nbsp;&amp;nbsp; y years (e.g. 5 years)&lt;br /&gt;(or the expected time the startup could go IPO or being acquired)&lt;br /&gt;&lt;br /&gt;By the end of y years, you'll have $x1 * y years + $x2.&amp;nbsp; Say, if your current compensation is $140,000 base plus 15% bonus and benefits, you'll probably get $805K by end of year 5 (not considering pay raise or inflation).&amp;nbsp; Your startup compensation could be $600K salary plus share option gain $6,000 (not including the additional share options you may get over the years).&amp;nbsp; If you're not one of the founders, and if your startup goes IPO or being acquired, you may get extra bonus from share options such as $120K (assuming you're top performer).&amp;nbsp; Thus, your total take-home package in 5 years' time is $726K in the best case.&amp;nbsp; If you're unlucky, you'll then get $600K base pay.&amp;nbsp; In such a case, is it a good bet to join the startup?&amp;nbsp; Please bear in mind, financial factor is only one of the consideration (e.g. career development, value system, morale), not the only one.&lt;br /&gt;&lt;br /&gt;What about if you're one of the founders who may get 0.3% to 0.5% equity holding?&amp;nbsp; For a $200M asset, this will correspond to $600K to $1M if IPO or acquired.&amp;nbsp; Since the successful rate of startup is extremely low (1% perhaps), it's unlikely that you can get $1M easily in 2 to 5 years.&amp;nbsp; If your current total (not base) compensation is $100K to $120K more than the startup offer (e.g. your current pay is $160K with 20% bonus, and your startup offer is $120K), you'd better stay with your current job over a 5-year period.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8814767222781840800?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8814767222781840800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/roi-for-joining-startup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8814767222781840800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8814767222781840800'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/roi-for-joining-startup.html' title='ROI for Joining a Startup'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3493968847862545466</id><published>2011-04-04T08:59:00.000-07:00</published><updated>2011-04-04T08:59:16.913-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Capturing Happy Moments with High Definition Home Video</title><content type='html'>I have a fancy Sony HD camcorder but it saves video files in .mts format (technically AVCHD).&amp;nbsp; I can capture happy moments (my son has a honors recital after taking Certificate of Merits piano level 8 recently).&amp;nbsp; It does not play on typical Windows or mac laptop unless you install players such as VLC or Sony's own camcorder tool, or editing tools like Adobe Premiere Elements 9.&lt;br /&gt;What can you do with your happy moments video clips?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Share and post them in youtube or facebook&lt;/li&gt;&lt;li&gt;Distribute in small iPhone format (mp4 h.264 format), ~30MB size for ~2 minutes video&lt;/li&gt;&lt;li&gt;Store in your iPad like a slide show or video show&lt;/li&gt;&lt;li&gt;Extract the audio track in .mp3, or use it as ringtone&lt;/li&gt;&lt;li&gt;Store them in a USB thumb drive to replay back on your big home TV&lt;/li&gt;&lt;/ul&gt;I google and couldn't find any free tools from Internet. That's disappointing.&amp;nbsp; I used Premiere Elements 9 on macbook pro but it took me almost 5 hours to convert .mts to .mp4 (it has a funny file extension which I'm not sure it can be played on Windows or mac). By chance, I can use &lt;b&gt;MKVTools&lt;/b&gt; (on mac) to import .mts (practically h.264) into .mp4 or .mkv, and use &lt;b&gt;Handbrake&lt;/b&gt; (on mac) to shrink it to iPhone/iPad format for sharing. Wow, now I can store these video clips (.mkv) in a USB thumb drive and play them back on my Samsung TV.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3493968847862545466?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3493968847862545466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/capturing-happy-moments-with-high.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3493968847862545466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3493968847862545466'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/04/capturing-happy-moments-with-high.html' title='Capturing Happy Moments with High Definition Home Video'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5594966615182386765</id><published>2011-03-31T10:42:00.000-07:00</published><updated>2011-04-20T14:22:55.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Automated Unit Test or Stress Tools for Android</title><content type='html'>Android SDK has Monkey for stress test.&lt;br /&gt;MonkeyRunner&lt;br /&gt;Robotium &lt;br /&gt;Robolectric&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;http://java-mines.blogspot.com/2010/12/monkeyrunner-testing-on-android.html&lt;br /&gt;http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=9&amp;amp;ved=0CFkQFjAI&amp;amp;url=http%3A%2F%2Fwww.lntinfotech.com%2FBrochure%2FAndroid_Test_Automation_Framework.pdf&amp;amp;rct=j&amp;amp;q=android%20testing%20tools%20framework&amp;amp;ei=F7yUTfbbJ7CK0QGOtYGKDA&amp;amp;usg=AFQjCNFC5oIoJeuzHDsyy-6QeS-QhovWeg&amp;amp;cad=rja &lt;br /&gt;&lt;br /&gt;http://www.slideshare.net/tylerschultz/robolectric-android-unit-testing-framework&lt;br /&gt;&lt;br /&gt;Robotium http://blog.codecentric.de/en/2011/03/android-testing-in-brief/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5594966615182386765?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5594966615182386765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/automated-unit-test-or-ttress-tools-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5594966615182386765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5594966615182386765'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/automated-unit-test-or-ttress-tools-for.html' title='Automated Unit Test or Stress Tools for Android'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-7916374594249646518</id><published>2011-03-30T00:09:00.000-07:00</published><updated>2011-03-30T19:08:56.193-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>How to Automate Screenshots as Test Output for iPhone/iPad</title><content type='html'>There are at least 2 approaches how you can capture screenshots from your iPhone/iPad unit tests.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp; Screenshot capture background tasks&lt;br /&gt;http://stackoverflow.com/questions/1360552/automate-screenshots-on-iphone-simulator/1579182#1579182&lt;br /&gt;http://www.curioustimes.de/iphonesimulatorcropper/index.html &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp; Automated unit test with screen capture feature&lt;br /&gt;http://www.kaomte.com/blog/?p=46&lt;br /&gt;&lt;a href="http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting" target="_blank"&gt;http://code.google.com/p/&lt;wbr&gt;&lt;/wbr&gt;google-toolbox-for-mac/wiki/&lt;wbr&gt;&lt;/wbr&gt;iPhoneUnitTesting&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Use case scenario&lt;/b&gt;&lt;br /&gt;You have a code base that is customized for different companies with their custom logos and custom fields. This is a typical private label (or white label) business.&amp;nbsp; Each custom build app needs to be submitted to appstore individually. This requires proof of unit tests with screenshots.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How it works&lt;/b&gt;&lt;br /&gt;How do I automatically take screen shots of the iOS simulator while running automated unit test?&lt;br /&gt;This article uses a tool called iOS simulator cropper. your test script will output a tag using NSLog indicating the screen shot should be taken.&amp;nbsp; You write a python script to read the tail of the NSLog, and captures the iOS simulator screenshots.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Variations&lt;/b&gt;&lt;br /&gt;You could invoke the screencapture command line utility to capture the  screen at certain points in your testing. &amp;nbsp;The most straight-forward  option would be to capture the entire screen. &amp;nbsp;Here's a bit of  AppleScript that will bring the Simulator to the front, hide all other  applications, and take a full-screen capture:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;tell application "iPhone Simulator"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;activate&lt;br /&gt;end tell&lt;br /&gt;&lt;br /&gt;tell application "System Events"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tell process "iOS Simulator"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tell menu bar 1&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tell menu bar item "iOS Simulator"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tell menu "iOS Simulator"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;click menu item "Hide Others"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end tell&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end tell&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end tell&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;end tell&lt;br /&gt;end tell&lt;br /&gt;&lt;br /&gt;do shell script "screencapture -m /tmp/screencapture.png"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reference&lt;/b&gt;&lt;br /&gt;http://dlinsin.blogspot.com/2011/01/ui-test-automation-with-instruments.html&lt;br /&gt;&lt;br /&gt;Thanks to Ranch iPhone google group members for their input.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-7916374594249646518?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/7916374594249646518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/how-to-automate-screenshots-as-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7916374594249646518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7916374594249646518'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/how-to-automate-screenshots-as-test.html' title='How to Automate Screenshots as Test Output for iPhone/iPad'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-548411657370365184</id><published>2011-03-29T11:13:00.000-07:00</published><updated>2011-04-06T16:38:22.598-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Google core-plot SDK Learning Experience</title><content type='html'>I have recent experience in learning core-plot for iOS application development to plot graphs for iPhone/iPad.&amp;nbsp; My learning curve is long and slow because most learning materials are either outdated or incomplete.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;INSTALLATION&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Once you download the latest core-plot SDK from google, follow the installation instructions under http://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications or http://code.google.com/p/core-plot/w/list&lt;/li&gt;&lt;li&gt;http://www.switchonthecode.com/tutorials/using-core-plot-in-an-iphone-application is a good write-up, with more details and helpful than the google instructions&lt;/li&gt;&lt;/ul&gt;(1) Drag and drop core-plot project to your existing (target) project. I find using Right Click at the current project, and select Add Files option is better.&amp;nbsp; Don't copy physical files.&amp;nbsp; Older XCode allows reverse subfolders but XCode 4.2 does not.&lt;br /&gt;(2) Under Target Project's Build Phases option, add core-plot as dependencies. If you don't see any dependencies listed, you may want to restart XCode, or retry drag-and-drop step above.&amp;nbsp; I find a bug in XCode 4.2 where the list of dependencies does not show consistently &lt;br /&gt;(3) Specify header search path with the core-plot framework subfolder&lt;br /&gt;(4) Add linker flag with the value -ObjC -all_load -lCorePlot-CocoaTouch. Make sure the last value CorePlat-CocoaTouch must match the core-plot project name. Some wikis use CorePlot but my project does not compile due to 386 architecture errors.&lt;br /&gt;(5) I choose GCC 4.2 compiler. Some wikis use LLVM GCC 4.2 for C/C++ compiler option. It looks like both will work.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Some tricky steps not elaborated in the installation instructions.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;(1) Make sure you do NOT copy the files to your project because you'll encounter file location reference issues during compilation if you copy the physical files.&lt;br /&gt;(2) Add -ObjC -all_load -lCorePlot-CocoaTouch to "Other Linker Flags" where the last "-l" name must match your core-plot project name.&lt;br /&gt;(3) specify Header search paths to the path of your core-plot framework subfolder, e.g. ../core-plot/framework/** if your core-plot and your project share the same parent folder. this is better than specifying the absolute path.&amp;nbsp; Some wikis say enter the user header search path but their screen sets N to "Use user search paths" - this is inaccurate and that's why i use header search path.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;LEARNING POINTS&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Core-plot plot space and axis title disappearing - a common problem is some graph areas are either clipped or the axis title disappears.&lt;/li&gt;&lt;/ul&gt;You need to understand how the plot space, padding space are axis title offset/location are computed.&amp;nbsp; The main cause for clipped graph or disappearing axis title is due to the location or offset values outside the plot space.&lt;br /&gt;&lt;br /&gt;For an iPhone screen, the graph size will be automatically computed and rendered based on the data points.&amp;nbsp; The plot space will be overlayed with the padding.&amp;nbsp; The padding space denotes the pixel.&amp;nbsp; It's safe to assume 20 for padding space, except that if you use a tab view controller, you need to assign more padding space (e.g. 60).&lt;br /&gt;&lt;br /&gt;In order to view the entire x-axis and y-axis title (caption), you want to display data from (0, 0) because the x.titleLocation and y.titleLocation values refer to the relative (0, 0) point. For example, if your x.titleLocation = CPDecimalFromFloat(5.0f);&lt;br /&gt;&lt;br /&gt;Example 1:&lt;br /&gt;you have 10 data points for x and y.&lt;br /&gt;Your Y data set ranges from 150 to 600, and X data set ranges from 0 to 9 (10 data points).&lt;br /&gt;Your second data line (one data point) has a y-value of 160.&lt;br /&gt;You may want to define a plot range with x (-3 to +3) and y (-120 to +720) so that you can see the x-axis and y-axis labels&lt;br /&gt;&lt;br /&gt;Then your x.titleLocation should be 5 (i.e. (10 - 0)/2 = 5, meaning your x.title will be in the middle), and y.titleLocation should be something like the mid-point plus the offset yAxisStart (e.g. 225 + 150 = 375 where 225 is the mid-point of your intended displayable data range [ (600 - 150)/2 = 225 and 150 is your yAxisStart ] because the titleLocation starts from (0, 0). If you set y.titleLocation = 225, then the y-axis won't be shown.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double xAxisStart = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double xAxisLength = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double maxY = [[mySamples valueForKeyPath:@"@max.Y_VAL"] doubleValue];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double minY = [[mySamples valueForKeyPath:@"@min.Y_VAL"] doubleValue];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double minY1 = [[curSamples valueForKeyPath:@"@min.Y_VAL"] doubleValue];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double yAxisStart = minY;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (minY &amp;gt; minY1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yAxisStart = minY1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double yAxisLength = maxY - yAxisStart;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double idealInterval = yAxisLength / 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(xAxisStart - 3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; length:CPDecimalFromDouble(xAxisLength + 3)];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromDouble(yAxisStart - idealInterval*3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; length:CPDecimalFromDouble(yAxisLength + idealInterval*3)];&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYAxisSet *axisSet = (CPXYAxisSet *)graph.axisSet;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYAxis *x = axisSet.xAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.majorIntervalLength = CPDecimalFromString(@"5");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.title = @"Last 10 Builds";&amp;nbsp; // X-Axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.titleOffset = -1 * yAxisStart;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.titleLocation = CPDecimalFromFloat((xAxisLength - xAxisStart)/2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYAxis *y = axisSet.yAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.majorIntervalLength = CPDecimalFromString(@"50");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.title = @"# Issues";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.titleOffset = 40.0f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.titleLocation = CPDecimalFromFloat((yAxisLength - yAxisStart)/2 + yAxisStart);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp; CPXYGraph *graph = [[CPXYGraph alloc] initWithFrame:self.view.bounds]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graph.paddingTop = 10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graph.paddingRight = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graph.paddingLeft = 20;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; graph.paddingBottom = 60;&lt;br /&gt;&lt;br /&gt;To specify the axis title location, the location value actually corresponds to the data points value. Say, x-axis has 10 data points, and x-axis title location = 5.0f will be shown in the middle of the axis since 5 out of 10 (data points) denotes the middle.&lt;br /&gt;&lt;br /&gt;The axis title offset will be the pixel offset relative to the axis starting / anchor point.&amp;nbsp; 20 (pixels) may be an appropriate value for small x-axis value (caption or axis major interval, e.g. 1 liner text with value 5.0), and 30 (pixels) may be good for small y-axis value (3 digits on Y-axis such as 125.0).&lt;br /&gt;&lt;br /&gt;Example:&amp;nbsp; (x-axis has 10 data points, y-axis has range from 30 to 140)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYAxis *x = axisSet.xAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.majorIntervalLength = CPDecimalFromString(@"5");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.title = @"Last 10 Builds";&amp;nbsp; // X-Axis&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.titleOffset = 20.0f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x.titleLocation = CPDecimalFromFloat(5.0f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPXYAxis *y = axisSet.yAxis;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.majorIntervalLength = CPDecimalFromString(@"25");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.orthogonalCoordinateDecimal = CPDecimalFromString(@"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.title = @"# Issues";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.titleOffset = 30.0f;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y.titleLocation = CPDecimalFromFloat(50.0f);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The axis majorIntervalLength is for clarity in the display (not to overwhelm users with fine-grained details), and is not related to the plot space and size.&amp;nbsp; The orthogonalCoordinateDecimal is used if you want slanted label (e.g. 5 = 5 degree).&lt;br /&gt;&lt;br /&gt;You can consider applying a theme. Take a look at the example app from core-plot. Customize a copy of the theme file (e.g. XYGraphTheme.m and .h).&amp;nbsp; Remember to include the theme file's .h in the header.&amp;nbsp; The benefit is that you can change the background color easily by updating the theme without changing your business logic.&amp;nbsp; A word of caution is that the theme file may alter your plot space positioning (e.g. shrink).&amp;nbsp; Example:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; CPTheme *theme = [[XYGraphTheme alloc] init] ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [graph applyTheme:theme];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [theme release];&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-548411657370365184?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/548411657370365184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/google-core-plot-sdk-learning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/548411657370365184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/548411657370365184'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/google-core-plot-sdk-learning.html' title='Google core-plot SDK Learning Experience'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3287274807093818381</id><published>2011-03-29T09:35:00.000-07:00</published><updated>2011-03-29T09:35:05.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>How to Distribute Your iOS App Without AppStore</title><content type='html'>Typically you pay US$99 per year to Apple AppStore for a certificate, then you submit (build, deploy) your app to AppStore. Upon approval, voila, end-users can download your app via AppStore. However, if you want to deploy your iOS apps internally, or distribute to a control group of beta testers, life could be difficult.&lt;br /&gt;&lt;br /&gt;You can of course purchase tools such as TestFlight or Hockey. Here's an alternative:&lt;br /&gt;&lt;br /&gt;http://nachbaur.com/blog/building-ios-apps-for-over-the-air-adhoc-distribution&lt;br /&gt;&lt;br /&gt;http://stackoverflow.com/questions/1004443/can-i-develop-an-iphone-application-that-my-company-can-use-for-internal-employee&lt;br /&gt;&lt;br /&gt;http://iphonecto.com/2009/09/09/deploying-internal-enterprise-application-iphone/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3287274807093818381?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3287274807093818381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/how-to-distribute-your-ios-app-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3287274807093818381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3287274807093818381'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/how-to-distribute-your-ios-app-without.html' title='How to Distribute Your iOS App Without AppStore'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1288825797077287813</id><published>2011-03-28T23:18:00.001-07:00</published><updated>2011-03-28T23:18:43.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Anime'/><title type='text'>Full Metal Panic Novel Summary</title><content type='html'>http://forums.animesuki.com/showpost.php?p=594231&amp;amp;postcount=7&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1288825797077287813?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1288825797077287813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/full-metal-panic-novel-summary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1288825797077287813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1288825797077287813'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/full-metal-panic-novel-summary.html' title='Full Metal Panic Novel Summary'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8658779310597377181</id><published>2011-03-28T17:59:00.000-07:00</published><updated>2011-03-30T10:21:57.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>Mobile Application Lifecycle Management</title><content type='html'>As a novice mobile developer, I'm interested to know which tools can help me to be productive, and what other challenges I'll encounter during various application development stages. I wrote a short mobile application lifecycle management paper recently to discuss how to address these challenges, and recommend some best practices, and a few pilot projects/solutions. Here is a summary:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-y7szo4Rbp4Q/TZEv2BwkeUI/AAAAAAAAAKk/QawT13vZ9nY/s1600/MobileLifecycleMgt.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://1.bp.blogspot.com/-y7szo4Rbp4Q/TZEv2BwkeUI/AAAAAAAAAKk/QawT13vZ9nY/s400/MobileLifecycleMgt.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;WHAT'S NEW&lt;/b&gt;&lt;br /&gt;Mobile application lifecycle management is NOT a re-brand of application lifecycle management because:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mobile app development requires in-depth network (e.g. bandwidth optimization in codes, bandwidth simulation) and mobile deployment knowledge, which is very different from traditional application lifecycle management. Traditional Java/.NET app may not care about these areas&lt;/li&gt;&lt;li&gt;Build/deployment is very specific to the appstore, e.g. AppStore has very unique application submission rules, which traditional application lifecycle management don't care, or don't have such constraints. These rules dictate or influence the way you write mobile app, and how you deploy&lt;/li&gt;&lt;li&gt;Diagnostic and troubleshooting paradigm is very different for mobile app.&amp;nbsp; In traditional application lifecycle management, you have JVM or kernel level troubleshooting on the server side.&amp;nbsp; In mobile app, the diagnostic approach is very challenging due to the diversity of devices, and also feasibility (e.g. you won't be able to remote control the mobile device, or emit diagnostic information remotely).&lt;/li&gt;&lt;li&gt;Performance monitoring and analysis in traditional application lifecycle management can rely on JVM or CLR-centric performance tools (e.g. CA Introscope, dynaTrace). But mobile app performance is not mature to have end-to-end or front-end monitoring yet.&amp;nbsp; Most performance areas in mobile app are focused on memory management (due to the footprint).&lt;/li&gt;&lt;li&gt;User provisioning, mobile component merging, re-use and upgrade are unique device management issues for build/deployment/support, and not prominant in application lifecycle management.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;PROTOTYPING&lt;/b&gt;&lt;br /&gt;Prototypes (and pictures) speak stronger than words.&amp;nbsp; Many product managers, XD developers or architects like to build a quick prototype to show a strawman of the next release.&amp;nbsp; Ideally, they would like a prototyping tool that can render both iOS, Android and Blackberry platform.&amp;nbsp; This could be a HTML 5 application that uploads hand-drawn pictures of the prototype, or a native iPhone application that creates sequence of screen shots and UI object/layout.&lt;br /&gt;&lt;br /&gt;If you embed api for each navigation flow (e.g. screen) to generate a test case, you can easily drive a test-driven development model by creating an artifact of the prototype, as well as a suite of test-driven api framework.&lt;br /&gt;&lt;br /&gt;The prototyping lifecycle consists of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Wireframe&lt;/b&gt;, e.g. a set of storyboard or navigation workflow of the application.&amp;nbsp; http://iphoneized.com/2009/11/21-prototyping-mockup-wireframing-tools-iphone-app-development/ lists some prototyping tools, and http://mashable.com/2010/08/11/cross-platform-mobile-development-tools/ identifies 5 cross-platform mobile prototyping tools.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Test-driven api development&lt;/b&gt;, e.g. a list of REST web service that each navigation workflow will use&lt;/li&gt;&lt;li&gt;&lt;b&gt;Test case management&lt;/b&gt;, e.g. a set of test cases (or user stories) that corresponds to the wireframe.&amp;nbsp; Microfocus's SilkCentral Test Case Manager provides SOAP api to define test cases.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;DESIGN / DEVELOPMENT&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Apart from cross-platform mobile development tools (e.g. http://mashable.com/2010/08/11/cross-platform-mobile-development-tools/), mobile developers may opt to build native applications (e.g. Objective C using XCode for iPhone/iPad), or HTML5-based applications that can run across different platforms.&amp;nbsp; However, HTML5 is still evolving, and there are lots of browser compatibility issues which could be barriers.&amp;nbsp;&amp;nbsp; As an alternative, you may use jQuery mobile framework (http://jquerymobile.com/) , or HTML5-friendly framework such as Sencha (http://www.sencha.com/).&lt;br /&gt;&lt;br /&gt;One specific challenge during development stage is device detection.&amp;nbsp; How do we know which device, and which resolution should be used.&amp;nbsp; You can have lots of IF-THEN JavaScript in the HTML codes to handle different resolution or device types. However, there are some device types which cannot be easily detected without additional help.&amp;nbsp; There are device detection tools which emit the device information in the header, and transmit back to the server, e.g. http://detectmobilebrowsers.mobi/ and http://mobiforge.com/developing/story/lightweight-device-detection-php.&lt;br /&gt;&lt;br /&gt;Another challenge is which open source or third-party frameworks to use.&amp;nbsp; You may have lots of internal mobile codes for re-use.&amp;nbsp; If you're using third party frameworks or open source mobile projects, you need to make sure the licensing arrangement, and the logistics of how to incorporate them into your build process.&amp;nbsp; Mobiforge and Google core-plot are examples.&lt;br /&gt;&lt;br /&gt;Security is one important aspect that is ever changing.&amp;nbsp; Although Apple appstore has rigid application submission process, this does not mean that iPhone applications are hacker-free.&amp;nbsp; Flash-based Android codes could be exposed to Cross-site Flash attacks.&amp;nbsp;&amp;nbsp;&amp;nbsp; Privacy is another security-related issue.&amp;nbsp; Even Open security standard OAuth 1.0 has known vulnerabilities (http://blog.oauth.net/2009/04/22/acknowledgement-of-the-oauth-security-issue/).&amp;nbsp; Misuse or poor implementation of OAuth and OpenID (for single sign-on) could lead to security issues.&lt;br /&gt;&lt;br /&gt;Once you have these development challenges sorted out, you may want to make best use of marketing data and analytics.&amp;nbsp; This is particularly important to know the user behavior or to get user feedback.&lt;br /&gt;&lt;br /&gt;Under the design / development stages, the challenges are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HTML 5 support and browser compatibility issues&lt;/li&gt;&lt;li&gt;Device detection approach&lt;/li&gt;&lt;li&gt;Use of mobile framework, third-party or open source components, e.g. http://mobiforge.com&lt;/li&gt;&lt;li&gt;Security and privacy issues, e.g. OAuth's session fixation issues&lt;/li&gt;&lt;li&gt;Use of marketing data for analytics and user feedback&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;TESTING&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Mobile testing is an emerging area as testing tools are fragmented.&amp;nbsp; Android platform has a built-in monkey testing framework, but iOS platform does not (note: not completely true. It has some limited automation capability using XCode and JavaScript).&amp;nbsp; Automated unit testing tools such as FoneMonkey (http://www.gorillalogic.com/fonemonkey) for iPhone/iPad testing is emerging.&amp;nbsp; How do we integrate with the SCM build process for iPhone/iPad pre-flight testing?&lt;br /&gt;&lt;br /&gt;An ideal scenario would be:&amp;nbsp; using self-service, you provision x number of MacOS VM instances, each will run a set of automated unit test (e.g. using FoneMonkey with XCode).&amp;nbsp; The SCM build script administered by Hudson server will check out the source codes from your SCM system (e.g. Perforce), and inserts a few pre-flight tests using TestFlight (http://testflightapp.com/) and AppScanner (http://www.chimpstudios.com/appscanner/) to screen out any private api, chatty network service calls or privacy violation api.&amp;nbsp; This will save lots of iterative repair efforts if rejected by Apple Appstore.&lt;br /&gt;&lt;br /&gt;Using TestFlight or similar tools, you can also simplify the pre-flight and beta testing. You don't need to mess with certificates and beta code deployment to a large number of beta testers locally or globally.&amp;nbsp; With cloud sourcing capability, you can invite your beta testers by email, and they can download the beta applications via a mouse click from the Web (in lieu of complicate certificate management logistics).&lt;br /&gt;&lt;br /&gt;To realistically simulate real life user environment, you may opt to deploy and test on different devices.&amp;nbsp; deviceAnywhere (http://www.deviceanywhere.com/) is a good tool to remote control, deploying and testing to different mobile devices.&amp;nbsp; However, the automation scripting could take a learning curve, and the rental cost could be a barrier too.&amp;nbsp;&amp;nbsp; For global applications, you may want to simulate your network bandwidth during testing.&amp;nbsp; Shunra has an interesting network bandwidth simulation appliance (http://www.shunra.com/ve-desktop-professional) though it's fairly expensive.&lt;br /&gt;&lt;br /&gt;Sometimes, test environment issues could create noise to your test result.&amp;nbsp; For example, network signal could be weak in your testing environment, which may not be a real network bandwidth problem.&amp;nbsp; You may need to install network signal booster.&lt;br /&gt;&lt;br /&gt;Scalability test is still maturing.&amp;nbsp; There are lots of application performance monitoring and diagnostic tools (e.g. CA Wily Introscope, JProbe, OPNET Panorama) but they are more suitable for server-side. dynaTrace (http://www.dynatrace.com) can provide an end-to-end performance monitoring, debugging/trace and diagnostics from a web browser to the server back-end.&amp;nbsp; However, you can benefit this if you use IE or Firefox browser on Windows, not on any mobile platform - you can still use a browser to diagnose a HTML application though.&lt;br /&gt;&lt;br /&gt;There are performance monitoring challenges not yet resolved nicely.&amp;nbsp; How could you generate a load to mimic mobile devices?&amp;nbsp; You can probably use a network proxy or sniffing tool to capture network traffic generated from a mobile device, and then replicate them on a massive load.&amp;nbsp; I have not found a good commercial or open source tool yet.&lt;br /&gt;&lt;br /&gt;In a nutshell, mobile testing may include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Automated unit test that can be integrated in your build (aka continuous integration). Ideally, you want to provision a VM instance, and then kicks off a series of unit tests and pre-flight tests (e.g. to detect private api, chatty network calls or security issues).&lt;/li&gt;&lt;li&gt;Device test, e.g. deviceAnywhere&lt;/li&gt;&lt;li&gt;Bandwidth simulation, e.g. Shunra&lt;/li&gt;&lt;li&gt;Pre-flight and beta testing, e.g. TestFlight for iOS&lt;/li&gt;&lt;li&gt;Handling test environment issues, e.g. use network signal booster for weak signals&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&lt;b&gt;BUILD / DEPLOYMENT&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The last lifecycle stage is the build and deployment processes.&amp;nbsp; This assumes a typical SCM build process that manages source codes, build (e.g. Maven) and deployment (e.g. what about code signing and submission to Apple AppStore?).&lt;br /&gt;&lt;br /&gt;A few challenges may arise:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How do you push software updates to the mobile devices?&amp;nbsp; and the frequency of updates.&amp;nbsp; Apple AppStore is a specific instance where end-users are notified to download an update.&amp;nbsp; However, enterprise applications that are not delivered via AppStore will face the challenge.&amp;nbsp; What about component level update (instead of a big band update)? This will be complicate if your application has lots of third party or open source components that need updates too.&lt;/li&gt;&lt;li&gt;Device management, e.g. how to administer a large list of mobile devices centrally?&amp;nbsp; how to reset id/password on devices, or to re-provision them?&amp;nbsp; Distributed mobile device management vendors (e.g. http://www.mobileiron.com/solutions/mobile-device-management)&amp;nbsp; are emerging using Cloud and Software as a Service.&lt;/li&gt;&lt;li&gt;Diagnostics and Customer Care, e.g. how to diagnose faulty mobile device remotely or centrally, how to manage customer support and post-sales for mobile products if the mobile device does not contain any footprint to upload diagnostic information remotely &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/4353699967472160771-8658779310597377181?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8658779310597377181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/mobile-application-lifecycle-management.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8658779310597377181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8658779310597377181'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/mobile-application-lifecycle-management.html' title='Mobile Application Lifecycle Management'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-y7szo4Rbp4Q/TZEv2BwkeUI/AAAAAAAAAKk/QawT13vZ9nY/s72-c/MobileLifecycleMgt.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1943458071952354894</id><published>2011-03-28T16:56:00.000-07:00</published><updated>2011-03-28T16:56:36.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Which Korean Film to Watch</title><content type='html'>I heard so much good things about Korean movies and TV drama, and want to know which film I should watch.&amp;nbsp; I couldn't find a good list from wikipedia. I accidentally found the link http://koreanfilm.org/.&lt;br /&gt;&lt;br /&gt;For example, The Man from Nowhere is the top 2010 grossing film in South Korea.&amp;nbsp; I got the blu ray movie from WalMart at US$10+.&amp;nbsp; http://koreanfilm.org/kfilm10.html has a review.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1943458071952354894?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1943458071952354894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/which-korean-film-to-watch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1943458071952354894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1943458071952354894'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/which-korean-film-to-watch.html' title='Which Korean Film to Watch'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-7544026042919527035</id><published>2011-03-25T14:12:00.000-07:00</published><updated>2011-03-25T14:12:34.593-07: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'>What Happens When Your Security Guru Has Been Hacked</title><content type='html'>I always trust security gurus such as RSA who are much smarter than me in security.&amp;nbsp; Recently, I read about RSA being hacked (http://www.networkworld.com/news/2011/031811-rsa-hack-faq.html), and Mozilla acknowledges SSL certificate theft (http://www.computerworld.com/s/article/9215077/Mozilla_regrets_keeping_quiet_on_SSL_certificate_theft?source=CTWNLE_nlt_pm_2011-03-25).&lt;br /&gt;&lt;br /&gt;There is no public evidence that RSA secrets were stolen, or your business data will be endangered due to the RSA token problem.&amp;nbsp; US Department of Homeland Security has joined the investigation.&amp;nbsp; However, the notion that even RSA is hacked is scarry. Just like BlackHat conference a few years back show that you can hack SSL certificate not by decryption but by injecting a malicious common name.&lt;br /&gt;&lt;br /&gt;What happens if Web browsers such as Mozilla are compromised?&amp;nbsp; All my credentials are being watched or captured indirectly by the hackers while their SSL certificates are compromised.&amp;nbsp; Who can I trust?&amp;nbsp; My security gurus, can I continue to trust you?&lt;br /&gt;&lt;br /&gt;Earlier on, I was so embarassed by clicking a stalker watch link in facebook, which I believe a trusted friend is sharing a facebook tool that detects who's stalking you.&amp;nbsp; Upon clicking the link, I was re-directed to user registration, which I suspect something's wrong. But it's too late. That suspicious stalker watch propagates the link using my identity to all my friends under facebook.&amp;nbsp;&amp;nbsp; I cannot even trust myself anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-7544026042919527035?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/7544026042919527035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/what-happens-when-your-security-guru.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7544026042919527035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7544026042919527035'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/what-happens-when-your-security-guru.html' title='What Happens When Your Security Guru Has Been Hacked'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1145225783971722789</id><published>2011-03-25T11:28:00.000-07:00</published><updated>2011-04-11T14:24:05.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>iOS 4.2 / iPhone Programming Learning Experience</title><content type='html'>Here're a few learning points while programming iOS 4.2 for the past 2 weeks:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;TableView to show a disclosure button &lt;/b&gt;(button to show detail view)&lt;/li&gt;&lt;/ul&gt;From iOS 3, the implementation method is obsolete.&amp;nbsp; My class textbook still uses the old one (textbook suggests adding the line "return UITableViewCellAccessoryDetailDisclosureButton" but XCode 4.2 suggests "return UITableViewCellAccessoryDetailDisclosureButton"), and XCode 4.2 gives a deprecation warning.&lt;br /&gt;&lt;br /&gt;Resolution:&lt;br /&gt;&lt;br /&gt;Remove the implementation method from your view controller:&lt;br /&gt;&lt;br /&gt;- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return UITableViewCellAccessoryDetailDisclosureButton;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //return UITableViewCellAccessoryDisclosureIndicator;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Under the method cellForRowAtIndexPath of your view controller:&lt;br /&gt;&lt;br /&gt;// handle accessory type for IOS 4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;How to show programmatic UI objects or a graph in your current view controller&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Assume you cut-and-paste a graph demo or a few programmatic UI objects, and want to display in your current view controller.&amp;nbsp; Your sample codes may use a navigation or tab view controller, which references the display in another xib screen. Thus, you won't see your desired screen after build/run.&lt;br /&gt;&lt;br /&gt;Lesson learned:&amp;nbsp; how to reference the UI object in your current view (self.view) by addSubview.&lt;br /&gt;&lt;br /&gt;Symptom: runtime crash, no build error. system dump complains invalid selector in your view.&lt;br /&gt;&lt;br /&gt;Existing:&lt;br /&gt;&lt;br /&gt;(barChart is defined in the .h file as CPXYGraph *barChart;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; barChart = [[CPXYGraph alloc] initWithFrame:CGRectZero]; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPGraphHostingView *hostingView = (CPGraphHostingView *)self.view;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostingView.hostedGraph = barChart;&lt;br /&gt;&lt;br /&gt;Resolution:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPGraphHostingView *hostingView = [[CPGraphHostingView alloc] initWithFrame:self.view.bounds];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [self.view addSubview:hostingView];&lt;br /&gt;&lt;br /&gt;* hide keyboard when done&lt;br /&gt;&lt;br /&gt;By default, your data entry field (UITextField) will show a virtual keyboard but it won't hide or disappear when done (e.g. return, done).&amp;nbsp; One easy way to hide the keyboard is:&lt;br /&gt;1. connect your UITextField via Interface Builder first&lt;br /&gt;2. add this method to hide the virtual keyboard&lt;br /&gt;&lt;br /&gt;- (void)touchesEnded: (NSSet *)touches withEvent: (UIEvent *)event {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (UIView* view in self.view.subviews) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ([view isKindOfClass:[UITextField class]])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [view resignFirstResponder];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Combining TabBarViewController, NavigationViewController and TableViewController&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;I want to create a tab bar view controller that has a few tabs (max 5 tabs allowed by Apple by default), one of which is a table view controller.&amp;nbsp; This is one of my least understood item, and there are not good public materials with complete examples.&lt;br /&gt;&lt;br /&gt;How it works?&amp;nbsp; Your root (or top) view controller must be a tab bar view controller, not a navigation view controller (an important concept).&amp;nbsp; Each tab can reference to a UIViewController, navigation view controller or even a table view controller.&amp;nbsp; If your tab view controller directly points to a table view controller, then you won't be able to navigate to a detail view (without a navigation view controller - this is another important concept).&lt;br /&gt;&lt;br /&gt;So in your tab view controller, each tab references to a UIViewController or NavigationViewController. &amp;nbsp; In your navigation view controller, you attach a table view controller.&amp;nbsp; In your table view controller, you can navigate to a detail view controller.&amp;nbsp; What a layered approach.&amp;nbsp; http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/CombiningViewControllers/CombiningViewControllers.html explains very well with snippets of codes and Interface Builder instructions, but I don't fully understand how it works since I'm using XCode (iOS 4.2 SDK)'s tabbarviewcontroller template.&lt;br /&gt;&lt;br /&gt;There are at least 2 approaches that I learn from ranch-iphone email alias:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For detail views from tab bar, I just present the detail view as a model controller. (ie: presentModal).&lt;/li&gt;&lt;li&gt;&amp;nbsp;Put your table view controller under a navigation view controller, which is referenced by the tab view controller. Your table view controller can push the detail view to the tab bar controller. (This is the approach depicted above).&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;How do I do that using Interface Builder with tab bar view controller template?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a navigation view controller without xib&lt;/li&gt;&lt;li&gt;Create a table view controller.&lt;/li&gt;&lt;li&gt;Create a detail view (UI view controller)&lt;/li&gt;&lt;li&gt;From MainWindow.xib, drag a navigation view controller under the existing tab bar view controller.&amp;nbsp; Update the class name to be your navigation view controller (from attribute window). But don't add or update the xib name yet.&lt;/li&gt;&lt;li&gt;From MainWindow.xib, drag a table view controller under the navigation view controller under the previous navigation view controller (which parent is tab bar view controller). Make sure you update the class name to reflect the table view controller class you created earlier (don't add or update the xib name yet).&lt;/li&gt;&lt;li&gt;From your table view controller .m file, push the detail view in the method didSelectRowAtIndexPath, something like:&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; detailViewController.custFirstName = [currentCustomer firstName];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; detailViewController.myBalance = [currentCustomer balance];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [self.navigationController pushViewController:detailViewController animated:YES];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [detailViewController release];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; detailViewController = nil; &lt;br /&gt;&lt;br /&gt;I previously misunderstand the view hierarchy concept, and attempt to add the navigation controller programmatically to the viewcontrollers array, something like (which is overly complicate):&lt;br /&gt;&lt;br /&gt;MyNavViewController *navViewController = [[[MyNavViewController alloc] init] autorelease];&lt;br /&gt;NSArray *viewControllers = [[self tabBarController] viewControllers];&lt;br /&gt;[viewControllers insertObject:navViewController];&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;but i don't have a complete example how to add a table view controller to the navigation view controller, and the insertObject syntax does not work.&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=LBnPfAtswgw (Elizabeth/O'Reilly Books) shows a good example but it uses XCode 3.x which you'll find some functions or Interface Builder behavior are changed in iOS 4.x.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Convert data between NSInteger, NSNumber, int, double&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;When I use core-plot library, the graphic function uses an array of NSNumber but not int or double.&amp;nbsp; I try to debug by writing the numbers to NSLog but I often get the pointer address, not the data contents.&lt;br /&gt;&lt;br /&gt;Example 1:&amp;nbsp; the array dataSet contains a pointer to NSNumber.&amp;nbsp; To print the data contents, you need to use "intValue" to return the integer value, and cast it to "int" for NSLog to print out.&lt;br /&gt;&lt;br /&gt;NSNumber *foo1 = (NSNumber *)[dataSet objectAtIndex:j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSLog(@"...dataSet[%d]=%d", i, (int)[foo1 intValue]);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example 2: initialize a NSNumber with a NSInteger, you need to cast the data contents into NSInteger. Remember not to use a (NSInteger *).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSNumber *foo = [[[NSNumber alloc] autorelease] initWithInteger:(NSInteger)(random() % 600)];&lt;br /&gt;&lt;br /&gt;Example 3: to add a double to NSDictionary which expects a NSNumber value. Use a NSNumber with a function "numberWithDouble" to convert a double x to NSNumber.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSDictionary *curSample = [NSDictionary &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dictionaryWithObjectsAndKeys:[NSNumber numberWithDouble:x], &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X_VAL, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [NSNumber numberWithDouble:y1], &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Y_VAL, nil];&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Array assignment and copy - don't release an array pointer unless it's a copy&lt;/li&gt;&lt;/ul&gt;Example:&lt;br /&gt;&lt;br /&gt;NSMutableArray *tmpDataSet = [[NSMutableArray alloc] initWithCapacity:10];&lt;br /&gt;NSNumber *foo2 = [[[NSNumber alloc] autorelease] initWithInteger:(NSInteger)(random() % 1200)];[tmpDataSet insertObject:foo2 atIndex:9];&lt;br /&gt;dataSet = tmpDataSet; // this will crash at run time &lt;br /&gt;//dataSet = [tmpDataSet copy];&lt;br /&gt;[tmpDataSet release];&amp;nbsp; // don't release tmpDataSet unless dataSet is a mutable copy of tmpDataSet &lt;br /&gt;&lt;br /&gt;I'd assume that once you "copy" tmpDataSet to dataSet, you can release the tmp data set tmpDataSet.&amp;nbsp; No, in fact dataSet and tmpDataSet share the same pointer to the same data content. If tmpDataSet is released, so is the data content and the pointer address (which is also dataSet).&amp;nbsp; To remediate the issue, you a=can make a mutable copy of tmpDataSet, and then you can release tmpDataSet without impacting dataSet.&lt;br /&gt;During execution&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1145225783971722789?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1145225783971722789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/ios-42-iphone-programming-learning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1145225783971722789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1145225783971722789'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/ios-42-iphone-programming-learning.html' title='iOS 4.2 / iPhone Programming Learning Experience'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2299717399795384878</id><published>2011-03-25T08:00:00.000-07:00</published><updated>2011-03-25T08:00:10.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Defect Density - Knowing the Health of Your System</title><content type='html'>How do you know if your software has more bugs than other competitors?&lt;br /&gt;In quality engineering, there's a metric called defect density which measures the number of bugs per thousand line of codes. Say, if an accounting software has 1 million line of codes, and the security defects total 10,000, then the defect density for security is 10,000/1,000,000, which is 0.1%.&lt;br /&gt;&lt;br /&gt;Is 0.1% within normal range of financial services software, or C++-based desktop application?&lt;br /&gt;&lt;br /&gt;Take a look at the statistis published for defect density by domain or application type&lt;br /&gt;http://docs.google.com/viewer?a=v&amp;amp;q=cache:kTZMTfPc8NwJ:www.softrel.com/Current%2520defect%2520density%2520statistics.pdf+defect+per+kloc+by+application+type+domain&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESgu_mzQEgfrk0I0aZJN7715MdlI5TlzRckgjRvcZCGuXz599qI55Dp47dvHBTtAXCoC-0BIEGBWnihVFIAfq51VA595-DlmuVEImFhA3PaGil1yffg3YOL03tZu4f9vm6DrSHmD&amp;amp;sig=AHIEtbTD256BhbORoyGYItIkVb6mhBiHuw&lt;br /&gt;&lt;br /&gt;Client-server or multi-tasking applications have a defect density around 0.4 in a 2007 survey.&amp;nbsp; Applications related to monetary risks has 0.476. World class applications have 0.011 average.&lt;br /&gt;&lt;br /&gt;If you are using static code analysis tools such as Fortify, Fortify has different severity levels (e.g. hot for priority 1 critical issues).&amp;nbsp; The counting formula will be tricky since there are lots of false positives.&amp;nbsp; In this case, you may want to count only the "Hot" or P1 items (ideally after the triage).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2299717399795384878?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2299717399795384878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/defect-density-knowing-health-of-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2299717399795384878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2299717399795384878'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/defect-density-knowing-health-of-your.html' title='Defect Density - Knowing the Health of Your System'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1230235674527452278</id><published>2011-03-21T22:12:00.000-07:00</published><updated>2011-03-21T22:12:03.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>What Have I Found After Re-watching the Same Movie</title><content type='html'>I often re-watch the same movie twice or more if I really like it, or I don't really remember what I saw before.&amp;nbsp; Here're the movies that I watched more than once:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;My Sassy Girl&lt;/b&gt; (Korean) - I love the twists, and the happy ending. It's so depressing and sad to watch it. I love to recall the details.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Love Concerto&lt;/b&gt; (Korean) - I don't fully understand the subtlety in the details, which motivates me to re-watch once after the other. It's one of my favorite movies when I'm depressed.&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/4353699967472160771-1230235674527452278?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1230235674527452278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/what-have-i-found-after-re-watching.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1230235674527452278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1230235674527452278'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/what-have-i-found-after-re-watching.html' title='What Have I Found After Re-watching the Same Movie'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2197085747683276022</id><published>2011-03-17T09:14:00.001-07:00</published><updated>2011-03-21T15:48:05.169-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>iOS Programming Learning Resources</title><content type='html'>parsing json&lt;br /&gt;http://www.xprogress.com/post-44-how-to-parse-json-files-on-iphone-in-objective-c-into-nsarray-and-nsdictionary/&lt;br /&gt;&lt;br /&gt;http://www.iphonedevx.com/?p=56&lt;br /&gt;&lt;br /&gt;Tab view icons&lt;br /&gt;http://blog.twg.ca/2009/09/free-iphone-toolbar-icons/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2197085747683276022?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2197085747683276022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/ios-programming-learning-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2197085747683276022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2197085747683276022'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/ios-programming-learning-resources.html' title='iOS Programming Learning Resources'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5551823276374821950</id><published>2011-03-17T07:57:00.000-07:00</published><updated>2011-03-17T07:57:11.631-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Tsunami and Nuclear Disaster in Japan</title><content type='html'>March 11 marked the 9.0 quake caused by Tsunami, and the nuclear disaster in Japan. My heart is very heavy every day when I heard stories about the cooling efforts for nuclear reactors are getting out of control.&lt;br /&gt;&lt;br /&gt;Pray that the nuclear disaster will soon get controlled and the damage is limited.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5551823276374821950?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5551823276374821950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/tsunami-and-nuclear-disaster-in-japan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5551823276374821950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5551823276374821950'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/tsunami-and-nuclear-disaster-in-japan.html' title='Tsunami and Nuclear Disaster in Japan'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6971401823363368399</id><published>2011-03-14T09:06:00.000-07:00</published><updated>2011-03-14T17:09:13.161-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><title type='text'>First iPhone Program - is it that easy?</title><content type='html'>I took an iPhone class 3 weeks ago and determined to write my first iPhone program without help. I want to be able to write iPhone program without copying codes from the textbook.&amp;nbsp; That's not easy.&amp;nbsp; My instructor spent 3 months learning the basics.&lt;br /&gt;&lt;br /&gt;In my first iPhone program, I'd like to create a simple form where I can click a button, stretch a slider which will show a numeric value in a separate data field.&amp;nbsp; This is better than just printing a hello world.&lt;br /&gt;&lt;br /&gt;Using Xcode 4.2, I've at least 2 ways to create my first iPhone program:&lt;br /&gt;1.&amp;nbsp; Window program&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Create a new window program. XCode will generate a delegate.&amp;nbsp;&amp;nbsp; You can create your form in the default MainWindow with the button and slider controls.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Window program is simpler to create because you just need to define your UI controls in the only form MainWindow.xib, and your business logic in the delegate.m. You don't need to worry about how to create a UIView, or differentiate which is a view controller or delegate. &lt;/li&gt;&lt;li&gt;The trick is that you need to connect the UISlider value change event (not the Touch Up Inside event) to the UISlider control.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;In your delegate implementation, customize your IBAction event for the UISlider with the return type UISlider, not id, e.g. (IBAction)&amp;nbsp;sliderValueChanged:(UISlider&amp;nbsp;*)sender, not (id)sender.&amp;nbsp;&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;2. UIViewController&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;Create a view controller (view-based app, not window app).&amp;nbsp; This will create a new view controller (not UIView) and the associated (new) xib on top of the existing set of delegate, MainWindow.xib.&amp;nbsp;&amp;nbsp; It sets the view controller to root view controller.&lt;/li&gt;&lt;li&gt;However, you need to connect the MainWindow.xib to the new view controller xib so that Xcode knows the root view controller (default screen) is the new view controller xib.&amp;nbsp; Otherwise, you'll see a blank page. I find that many textbooks assume you understand that process well (i.e. you need to connect the IBOutlet, UI controls to the relevant file owner in the Interface Builder), and I can't find much instruction.&lt;/li&gt;&lt;li&gt;Similar to the previous approach, you define your button and slider in the new view controller xib, and the business logic in the view controller .m file.&lt;/li&gt;&lt;li&gt;Some textbooks won't use this approach, as a view controller could be too complex for the first iPhone program.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Deep Dive - Understanding the First iPhone Program&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;View Controller&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Once you create a new ViewController from XCode, you'll see the basic template of XXXAppDelegate and MainWindow, in addition to new XXXViewController files (XXX is the program name you created).&lt;/li&gt;&lt;li&gt;The didFinishLaunchingWithOptions in the XXXAppDelegate.m contains instructions which to initialize or load once the program is started.&amp;nbsp; By default, it will add your view controller as a subview, e.g. [window addSubview:viewController.view];.&amp;nbsp; You may want to check the Window object shows Outlet connection from rootViewController to your XXXViewController.&amp;nbsp; From Interface Builder, select MainWindow.xib and click control over the Window object (under Objects).&amp;nbsp; You should see the connection (if not, you can create the connection here).&lt;/li&gt;&lt;li&gt;Edit the XXXViewController.h, add the instance variables.&amp;nbsp; You can add the UI controls with&amp;nbsp; IBOutlet statement (which allows you to connect them from the Interface Builder with the UI objects in the xib / UI form) and the property statements.&amp;nbsp; The property statement denotes setter/getter for the UI control.&lt;/li&gt;&lt;/ul&gt;Example:&lt;br /&gt;&lt;br /&gt;This program will show a button and a slider on the screen with the form XXXViewController.xib.&amp;nbsp; You need to connect the IOOutlet and IBAction with the UI controls of the xib in the Interface Builder:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Click control key over the File Owner item of the file XXXViewController.xib&lt;/li&gt;&lt;li&gt;Outlets: connect myTextField and mySlider IBOutlets with the screen objects&lt;/li&gt;&lt;li&gt;Received actions: connect the IBAction methods with the actual actions you desire (button changed, touch up inside).&lt;/li&gt;&lt;li&gt;Verify your root view controller is connected to your XXXViewController:&amp;nbsp; click control key over the item XXX App Delegate in the file MainWindow.xib.&amp;nbsp; Make sure the viewController from the Outlet is connected to the XXXViewController, and the window too. (I find this item is not explained well in textbooks).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;XXXViewController.h:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#import &lt;uikit uikit.h=""&gt;&lt;br /&gt;&lt;br /&gt;@interface XXXViewController : UIViewController {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IBOutlet UISlider *mySlider;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IBOutlet UITextField *myTextField;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@property (nonatomic, retain) IBOutlet UISlider *mySlider;&lt;br /&gt;@property (nonatomic, retain) IBOutlet UITextField *myTextField;&lt;br /&gt;&lt;br /&gt;- (IBAction) sliderValueChanged:(id)sender;&lt;br /&gt;- (IBAction) changeButtonPressed:(id)sender;&lt;br /&gt;&lt;br /&gt;@end&lt;/uikit&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;XXXViewController.m:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#import "XXXViewController.h"&lt;br /&gt;&lt;br /&gt;@implementation XXXViewController&lt;br /&gt;&lt;br /&gt;@synthesize mySlider, myTextField;&lt;br /&gt;&lt;br /&gt;- (IBAction) sliderValueChanged:(UISlider *)sender {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myTextField.text = [NSString stringWithFormat:@" %.1f", [sender value]];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (IBAction) changeButtonPressed:(id)sender {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)dealloc&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [mySlider release];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [myTextField release];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [super dealloc];&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You also edit the attribute of mySlider object for min=0, max=100. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Is iPhone Programming Really Easy?&lt;/b&gt;&lt;br /&gt;I heard stories of 13 years old genius writing games for AppStore that sells over 1M copies. But I don't think iPhone programming is easy to start with.&amp;nbsp; The Objective C notation is odd, and it takes time to be familiar with.&lt;br /&gt;&lt;br /&gt;I can understand the interface and implementation portions fairly easily, and also the property / synthesize (it's aka setter/getter). But I find the process of connecting objects using the Interface Builder&amp;nbsp; not very intuitive - you need to know which object to connect with (e.g. file owner), which is hard for me.&lt;br /&gt;&lt;br /&gt;Once you get over the initial learning curve, I was told that iPhone programming is easy because the UI framework is very tight and simple.&amp;nbsp; Sometimes, limited choice and rigid structure makes implementation simple, and development fast. I'll verify that in my next programming exercises.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resource&lt;/b&gt;&lt;br /&gt;How to use UISlider&lt;br /&gt;http://www.xprogress.com/post-35-uislider-tutorial-example-how-to-use-slider-in-iphone-sdk-xcode/ &lt;br /&gt;&lt;br /&gt;How to use UISwitch&lt;br /&gt;http://www.xprogress.com/post-30-uiswitch-tutorial-example-how-to-use-the-switch-in-xcode-for-iphone-sample-included/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6971401823363368399?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6971401823363368399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/first-iphone-program-is-it-that-easy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6971401823363368399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6971401823363368399'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/first-iphone-program-is-it-that-easy.html' title='First iPhone Program - is it that easy?'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2517465228312093537</id><published>2011-03-07T10:11:00.000-08:00</published><updated>2011-03-08T22:51:51.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Flex 4 - I'm Back</title><content type='html'>For some reasons, I'm back to Flex. A few years back, I got on board with Flex 2. Now Flex 4 has a number of changes (e.g. Spark control replacing the old mx).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My New Learning Experience in Flex 4&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I write a RSS feed reader that shows the list of news items, summary and also opens a new window of contents. I can't embed the web page contents as I can't find a UI control that can render HTML page content.&lt;/li&gt;&lt;li&gt;I mimic a menu navigation workflow based on Quickbooks Connected Service (Web Access, which is the Flex version).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Observation&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;HTTP Service binding to Data Grid&lt;/b&gt;. I like the drag-and-drop binding to connect a HTTP service (e.g. RSS feed, REST api) to a data grid. However, it generates the intermediary codes that I can't customize to parameterize the URI. I end up writing the HTTP service from scratch, which is even simplier.&lt;/li&gt;&lt;li&gt;&lt;b&gt;From Spark (Flex 4) to Halo (Flex 3)&lt;/b&gt;.&amp;nbsp; Flex 4 rewrites the UI control layer with spark components.&amp;nbsp; Not all Flex 3 components have a replacement.&amp;nbsp; I don't seem to get rid of all mx (Halo) controls such as ViewStack (for navigating pages).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Page navigation&lt;/b&gt;.&amp;nbsp; One learning barrier is that Flex does not navigate between Web pages like typical HTML page.&amp;nbsp; It uses viewstacks and states. Viewstack acts like a view controller with each mxml as a view. You can also create tabs for page navigation, with UI controls stored in states.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Things to Try Out, &lt;/b&gt;if I have time...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Page navigation control in data grid.&amp;nbsp;&amp;nbsp; This could be tricky for large volume result set (data provider), which the UI programming side seems to be easy.&amp;nbsp; A variation will be fetch 25 rows at a time (which needs lots&amp;nbsp; of time to customize)&lt;/li&gt;&lt;li&gt;Add / Change / Delete rows in data grid.&amp;nbsp; This is not off-the-shelf.&lt;/li&gt;&lt;li&gt;Complete end-to-end program with database CRUD Web service.&amp;nbsp; Lots of back-end work and database setup.&lt;/li&gt;&lt;li&gt;Processing JSON instead of XML in HTTPService.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;http://sujitreddyg.wordpress.com/2009/10/06/building-flex-application-for-lcds-data-management-services-using-flash-builder-4/&lt;br /&gt;&lt;br /&gt;http://www.javabeat.net/articles/253-invoking-soap-and-restful-web-services-using-flex-40-1.html&lt;br /&gt;&lt;br /&gt;What's new in Flex 4&lt;br /&gt;http://www.adobe.com/devnet/flex/articles/flex3and4_differences.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2517465228312093537?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2517465228312093537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/flex-4-im-back.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2517465228312093537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2517465228312093537'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/flex-4-im-back.html' title='Flex 4 - I&apos;m Back'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-9060798777659372500</id><published>2011-03-01T18:34:00.000-08:00</published><updated>2011-03-01T18:39:19.187-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>Security Vulnerability Cost - $1 trillion globally per year (2010)</title><content type='html'>According to Britain's Office of Cyber Security and Information Assurance, cyber crime costs UK $43.5 billion per year, and $1 trillion globally per year.&lt;br /&gt;&lt;br /&gt;Source:&lt;br /&gt;http://news.yahoo.com/s/nm/20110217/tc_nm/us_britain_security_cyber&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-9060798777659372500?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/9060798777659372500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/security-vulnerability-cost.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9060798777659372500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9060798777659372500'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/security-vulnerability-cost.html' title='Security Vulnerability Cost - $1 trillion globally per year (2010)'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2337301471698455303</id><published>2011-03-01T18:31:00.000-08:00</published><updated>2011-03-01T18:31:45.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Max Number of Schema per Database Instances</title><content type='html'>Many cloud service providers host business data for numerous small (and large) companies.&amp;nbsp; As startup, they just clone an existing customer schema and deploy, though they want to multi-tenancy is the ultimate goal.&lt;br /&gt;&lt;br /&gt;Most database has a cap on the number of schemas (or databases) per database instance.&amp;nbsp; Each schema consists of multiple tables.&amp;nbsp; My DBA colleague reports 32,000 schemas on Oracle 10g running on a high end server (though the official pitch is "depending on hardware and storage").&amp;nbsp; I couldn't find a solid cap number for MySQL.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Sample scenario:&amp;nbsp; I can host 32,000 companies on a single Oracle database instance in my cloud hosting website, even though I may run 3 Apache Web servers and 2 Tomcat servers (say, this configuration may be able to support 240 concurrent transaction users, or 2,000 simultaneous user logging in, or 24,000 SQL read requests per sec [these numbers are fictitious, as we know the throughput is dependent on the application design and infrastructure configuration]). However, if I need to host 32,001 companies, I need to host 2 database instances, assuming my application business logic knows which database instance to fetch data.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2337301471698455303?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2337301471698455303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/max-number-of-schema-per-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2337301471698455303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2337301471698455303'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/03/max-number-of-schema-per-database.html' title='Max Number of Schema per Database Instances'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-327920427244216279</id><published>2011-02-20T23:34:00.000-08:00</published><updated>2011-03-21T22:06:49.790-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Movies Watched in 2011 Q1</title><content type='html'>I stocked up a number of blu-ray movies purchased at discounts last Thanksgiving.&amp;nbsp; I usually watch 2 to 3 movies every week:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Fantastic Mr. Fox&lt;/b&gt; - The plot is crooked (farmers are evil, thieves are protagonists), and the vocal artists are obviously good actors but not necessarily good vocal artists.&amp;nbsp; After watching the Making of video, I begin to appreciate that's quite an impressive movie that is based on a children's novel.&amp;nbsp; Good for family.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Green Zone&lt;/b&gt; - A war theme framed with the fictitious destructive weapon in Iraq.&amp;nbsp; I'm never a fan of war or political thriller movie.&amp;nbsp; I would have thought it's another Bourne sequel. What a good surprise.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Get Smart&lt;/b&gt; - It's a double dose of comedy comparable to Mr Bean. Hilarious and fun.&amp;nbsp; I find my favorite quote that why your boss does not promote you.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Legion&lt;/b&gt; - A distortion of the popular fallen angel theme where Gabriel is the bad guy. Not too bad for a plot twist for a $5 movie.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Constantine&lt;/b&gt; - Another distortion of the popular fallen angel theme for a $5 movie.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Body of Lies&lt;/b&gt; - I don't usually like Dicapio and Crowe. After watching this movie, I continue to dislike Crowe, but I begin to appreciate Dicapio's acting skills.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Dances with Wolves&lt;/b&gt; - it takes lots of patience to watch a 4-hour movie.&amp;nbsp; With today's filming practice, the pace of the movie with almost no action will probably drive people away.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Swordfish&lt;/b&gt; - Another neurotic and crazy movie from John Trovata that you won't forget.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Firewall&lt;/b&gt; - You won't believe a VP Security from a big conservative bank can code these days, and can make a scanner with an iPod touch.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Expendables&lt;/b&gt; - Stallone has the talent to bring in every action star you can remember, and tell a story that is profitable.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Apocalypse Now&lt;/b&gt; - If you read the book Heart of Darkness, and can't sleep due to the nightmare it creates, don't watch this film.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Inception&lt;/b&gt; - Don't try to watch or understand this film from streaming or video on demand.&amp;nbsp; I watched it via Amazon video streaming. After watching the blu-ray movie, I feel like it's a new movie.&amp;nbsp; I need loseless HD audio and subtitle.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Salt &lt;/b&gt;- Good plot twist about who's the actual spy.&amp;nbsp; It's a smart choice to choose a heroine instead of casting Tom Cruise.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Journey to the center of earth&lt;/b&gt; - I did not read the original story book. My son told me twice that he won't watch it ('cos it's for kids?) but he ended up watching with me. This is certainly entertaining for family.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Inkheart&lt;/b&gt; - it's quite charming for a family movie. The plot (find my wife) is perhaps too simple but it's pleasant.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Avatar&lt;/b&gt; - the extended edition adds a contextual introduction.&amp;nbsp; The visual effect is awesome even for a re-watch.&lt;/li&gt;&lt;li&gt;&lt;b&gt;The Bank Job&lt;/b&gt; - you find the worst elements in this British-made Hollywood film: sex, curse words, violence, etc (these seem to be Statham's formula).&amp;nbsp; I did not find any spoiler or warning in the film review, and regret to watch it.&amp;nbsp; I thought it's based on a true story.&amp;nbsp; I'll avoid Statham's film in future.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Shoot'em Up&lt;/b&gt; - you won't miss any scenes in the film that the protagonist won't use his gun to shoot.&amp;nbsp; You won't miss the plot even if you skip to the end. &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/4353699967472160771-327920427244216279?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/327920427244216279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/movies-watched-in-2011-q1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/327920427244216279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/327920427244216279'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/movies-watched-in-2011-q1.html' title='Movies Watched in 2011 Q1'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2752098615191028520</id><published>2011-02-17T07:39:00.000-08:00</published><updated>2011-02-17T07:41:35.436-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ForMySon'/><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Faith'/><title type='text'>Lost and Found - 2</title><content type='html'>I lost my gift card yesterday at BestBuy store. The saleslady forgot to return it to me, and I got used to walking away from the purchase immediately without checking my gift card or credit card. I called the store's customer relationship, and they could re-issue me the gift card. Though the gift card has a small value(~$20), I am very pleased.&lt;br /&gt;&lt;br /&gt;Earlier I lost the scarf my wife hand-knitted for me. I exhausted every means to find it without success.&amp;nbsp; Finally, I found it in my company's "lost and found" section in an envelope. I was over-joyed.&lt;br /&gt;&lt;br /&gt;I lost my faith many years ago since I went to college.&amp;nbsp; The "enlightenment" of existentialism, modernism and de-constructionism had been destructive. But I found it again on my way to a chapel on Sunday.&amp;nbsp; Sheera Maesterton (a very old Scottish lady who retired from years of overseas missions) called me, "are you a lost sheep?"&amp;nbsp; Over the next 2 decades in my life, I still have faith in God despite numerous shaky periods, and despite that I don't fully understand the science of faith.&lt;br /&gt;&lt;br /&gt;I wish all who lost their faith in their life journey could pause and ponder if they are a lost sheep.&amp;nbsp; The "lost and found" experience is amazing, and could change your life again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2752098615191028520?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2752098615191028520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/lost-and-found-2.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2752098615191028520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2752098615191028520'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/lost-and-found-2.html' title='Lost and Found - 2'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-491005726884052234</id><published>2011-02-16T21:36:00.000-08:00</published><updated>2011-03-04T14:40:46.370-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Splashy HTML5, CSS3 and jQuery Examples</title><content type='html'>I want to create a User Interface in plain HTML or jQuery with visual impact.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;These demos inspire me a lot:&lt;br /&gt;http://www.noupe.com/jquery/50-amazing-jquery-examples-part1.html&lt;br /&gt;&lt;a href="http://www.1stwebdesigner.com/freebies/drag-drop-jquery-plugins/" target="_blank"&gt;http://www.1stwebdesigner.com/&lt;wbr&gt;&lt;/wbr&gt;freebies/drag-drop-jquery-&lt;wbr&gt;&lt;/wbr&gt;plugins/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;http://www.smartclient.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-491005726884052234?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/491005726884052234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/splashy-html5-css3-and-jquery-examples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/491005726884052234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/491005726884052234'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/splashy-html5-css3-and-jquery-examples.html' title='Splashy HTML5, CSS3 and jQuery Examples'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-1559194793025155769</id><published>2011-02-15T00:08:00.000-08:00</published><updated>2011-02-15T00:10:11.316-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>GWT, jQuery, PHP - Which is Easier for Startup UI Projects?</title><content type='html'>GWT and jQuery share similar Ajax UI framework. For a startup who needs quick development and results, which is more suitable in terms of ease of use, rich functionality, and shorter learning curve?&lt;br /&gt;&lt;br /&gt;http://forum.jquery.com/topic/jquery-vs-gwt has an excellent summary table of feature comparison.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-1559194793025155769?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/1559194793025155769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/gwt-jquery-php-which-is-easier-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1559194793025155769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/1559194793025155769'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/gwt-jquery-php-which-is-easier-for.html' title='GWT, jQuery, PHP - Which is Easier for Startup UI Projects?'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4498229283112896071</id><published>2011-02-13T16:20:00.000-08:00</published><updated>2011-03-21T21:56:10.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Which Movies Would I Like to Watch or Buy in 2011</title><content type='html'>&lt;b&gt;To Watch&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;King's speech&lt;/li&gt;&lt;li&gt;Black Swan&lt;/li&gt;&lt;li&gt;Up in the air&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;To Buy&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Star Wars set&lt;/li&gt;&lt;li&gt;Lord of the Rings extended edition&lt;/li&gt;&lt;li&gt;Deja Vu&lt;/li&gt;&lt;li&gt;Baraka&lt;/li&gt;&lt;li&gt;Tomb raider&lt;/li&gt;&lt;li&gt;Time traveler's wife&lt;/li&gt;&lt;li&gt;Star Trek&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/4353699967472160771-4498229283112896071?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4498229283112896071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/which-movies-would-i-like-to-watch-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4498229283112896071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4498229283112896071'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/which-movies-would-i-like-to-watch-or.html' title='Which Movies Would I Like to Watch or Buy in 2011'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2443293405859656142</id><published>2011-02-11T10:29:00.000-08:00</published><updated>2011-02-11T10:29:29.414-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Fraud! My Credit Card was Stolen</title><content type='html'>I was greedy to purchase amazon gift card $20 for $10 from Living Social via credit card.&amp;nbsp; I got another similar deal of Barnes and Noble $20 gift card for $10 from Groupon.&amp;nbsp; Today, my bank called me for fraud charges (ranging from small amount to a big ticket item).&lt;br /&gt;&lt;br /&gt;A colleague told me there are fraud cases with Living Social. (I found one news article from http://www.businessinsider.com/was-livingsocials-big-deal-a-big-bust-2011-1).&lt;br /&gt;&lt;br /&gt;Sigh. I felt very bad since this is the first fraud experience.&amp;nbsp; Some social networking startups don't have the security quality to protect consumers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2443293405859656142?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2443293405859656142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/fraud-my-credit-card-was-stolen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2443293405859656142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2443293405859656142'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/fraud-my-credit-card-was-stolen.html' title='Fraud! My Credit Card was Stolen'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3601090620424187527</id><published>2011-02-09T22:56:00.000-08:00</published><updated>2011-02-09T23:00:08.026-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Why I Like Watching the Same Movie Multiple Times</title><content type='html'>I did not like watch the same movie more than once.&amp;nbsp; My friend Winnie once told me despite the fact that she watched the movie Sleepless in Seattle so many times. Each time she watched, she burst into tears.&amp;nbsp; Children tend to watch the same movie numerous times without being bored.&amp;nbsp; My son watched Tom and Jerry cartoon at least 10 times. These're stunning to me.&lt;br /&gt;&lt;br /&gt;I began to watch some movies a few times when I became extremely depressed.&amp;nbsp; (I only have a few titles, fortunately, e.g. My Sassy Girl, Winter Sonata). The other occasion is after I invested into a blu ray movie, I tended to watch some good titles at least twice, probably because I did not remember those details, or because the action scenes are excellent.&lt;br /&gt;&lt;br /&gt;My wife never likes to watch movies twice. She enjoys movies with a story you can't predict the development.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Which movies I may want more than once?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Inception&lt;/b&gt;:&amp;nbsp; I couldn't follow which level of sleep. It's so confusing.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Gone with the Wind&lt;/b&gt;:&amp;nbsp; it's too long (sometimes boring since the pace is slow) that I was never able to finish the entire movie in one go. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Planet Earth&lt;/b&gt;:&amp;nbsp; I never remember where I stopped, and where I should resume.&amp;nbsp; Most episodes are alike to me.&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/4353699967472160771-3601090620424187527?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3601090620424187527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/why-i-like-watching-same-movie-multiple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3601090620424187527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3601090620424187527'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/why-i-like-watching-same-movie-multiple.html' title='Why I Like Watching the Same Movie Multiple Times'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5577113663639402544</id><published>2011-02-08T00:28:00.000-08:00</published><updated>2011-02-08T00:29:19.606-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Concurrency Design - Deadlock Prevention for Real-time Trading App</title><content type='html'>Multi-threading using "synchronized" is a mechanism in Java (or C#) to handle concurrency. With the keyword "synchronized", the block within (e.g. statement, instance) will be locked to prevent deadlock by protecting the owner.&amp;nbsp; There are some design techniques that I recently learn for deadlock prevention:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lock ordering - same lock order for each thread&lt;/li&gt;&lt;li&gt;Lock timeout - put a timeout on lock attempts&lt;/li&gt;&lt;li&gt;Deadlock detection - use a hashmap or graph to capture the state of a thread taking the lock&lt;/li&gt;&lt;li&gt;Database level deadlock prevention, e.g. should we do a commit after each transaction request?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Use Cases&lt;/b&gt;&lt;br /&gt;If you are designing a trading system, hedge fund or real-time application&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Excellent Articles &lt;/b&gt;&lt;br /&gt;http://tutorials.jenkov.com/java-concurrency/deadlock-prevention.html &lt;br /&gt;http://code.hammerpig.com/simple-multithreading-java.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5577113663639402544?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5577113663639402544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/concurrency-design-deadlock-prevention.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5577113663639402544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5577113663639402544'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/concurrency-design-deadlock-prevention.html' title='Concurrency Design - Deadlock Prevention for Real-time Trading App'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-230954845345875629</id><published>2011-02-04T18:48:00.000-08:00</published><updated>2011-02-04T18:52:35.298-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>Why You're Not Promoted</title><content type='html'>From the movie "Get Smart", Steve Carrell is not promoted because:&lt;br /&gt;&lt;br /&gt;Boss: I'm afraid I can't promote you&lt;br /&gt;Employee: What?&lt;br /&gt;Boss: I can't afford to give up my best analyst...(the in-depth analysis) go way beyond raw data.&lt;br /&gt;Employee: so to be clear, you're not promoting me because I do such a great job.&lt;br /&gt;...&lt;br /&gt;Boss: I'm very proud of you. I need where you are&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-230954845345875629?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/230954845345875629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/why-youre-not-promoted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/230954845345875629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/230954845345875629'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/why-youre-not-promoted.html' title='Why You&apos;re Not Promoted'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6145178457668903343</id><published>2011-02-02T09:42:00.000-08:00</published><updated>2011-02-02T09:42:56.770-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>High 4</title><content type='html'>Upon completing a critical milestone (a hellish project!), employees (distributed teams) greeted each other with high 5 via Instant Messaging.&amp;nbsp; However, an employee only wanted to say "High 4."&amp;nbsp; Manager asks him why. He replied that he would save one finger later with his "High 4" - his middle finger.&lt;br /&gt;&lt;br /&gt;PS. Sorry for those who don't have the "culture background" about high 5 or middle finger.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6145178457668903343?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6145178457668903343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/high-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6145178457668903343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6145178457668903343'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/high-4.html' title='High 4'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6088869511758223297</id><published>2011-02-02T09:37:00.001-08:00</published><updated>2011-02-02T09:37:59.006-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Cheatsheet for Work</title><content type='html'>http://www.java2s.com/Code/Oracle/SQLPlus/Timecommand.htm&lt;br /&gt;or select your topics under http://www.java2s.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6088869511758223297?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6088869511758223297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/cheatsheet-for-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6088869511758223297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6088869511758223297'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/cheatsheet-for-work.html' title='Cheatsheet for Work'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4253796572530018727</id><published>2011-02-02T08:50:00.001-08:00</published><updated>2011-02-02T08:50:26.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>SQL:  Use of NVL is Evil</title><content type='html'>I'm practicing SQL fundamentals for my Oracle OCA examination, and learn from my colleague about NVL:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;(Accidentally, we stumbled upon the fact that NVL does *&lt;b&gt;not&lt;/b&gt;* allow short-circuiting. i.e., &lt;b&gt;NVL an IF loop that just goes on processing every ELSE irrespective of the fact first IF matched&lt;/b&gt;. Just by removing this from our WHERE clauses got us almost 3x boost over large data set).&lt;/span&gt;  &lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Since NVL is ANSI-SQL, it holds irrespective of the database you would use. So, while &lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow;"&gt;this is safe to use in SELECT, it’s dangerous to use in WHERE clause, particularly for large tables.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;CASE is the new entrant in ANSI-SQL, and is the safest bet!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Proof –&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol start="1" style="margin-top: 0in;" type="1"&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Create a function that just      sleeps 1 sec, and return 1&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Run “NVL(1,      Sleep_one_sec)” 1000 times&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Compare the time with CASE. NVL      executes the “else” part irrespective of value; CASE does not.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;create&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;or&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;replace&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;function&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: olive; font-family: Courier; font-size: 10pt;"&gt;one_sec_sleep&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;return&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: red; font-family: Courier; font-size: 10pt;"&gt;number&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;as&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;begin&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;dbms_lock.sleep&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;);&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;return&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;/&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;-- use NVL&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;declare&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: olive; font-family: Courier; font-size: 10pt;"&gt;t&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: red; font-family: Courier; font-size: 10pt;"&gt;number&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;begin&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;for&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; i &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;..&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;20&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 0.5in;"&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;select&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;nvl(&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;,&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;one_sec_sleep&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;)&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;into&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: olive; font-family: Courier; font-size: 10pt;"&gt;t&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt; dual&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: blue; font-family: Courier; font-size: 10pt;"&gt;; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;/&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Elapsed: &lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow;"&gt;00:00:20.03&lt;/span&gt; &lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;-- use CASE &lt;br /&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;declare&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: olive; font-family: Courier; font-size: 10pt;"&gt;t&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: red; font-family: Courier; font-size: 10pt;"&gt;number&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;u&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;begin&lt;/span&gt;&lt;/u&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;for&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; i &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;in&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;..&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;20&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;select&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;(case&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;when&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;is&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;null&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;then&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: olive; font-family: Courier; font-size: 10pt;"&gt;one_sec_sleep&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;else&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: maroon; font-family: Courier; font-size: 10pt;"&gt;1&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end)&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;into&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: olive; font-family: Courier; font-size: 10pt;"&gt;t&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; dual&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt; &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;loop;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;end;&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: black; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="background: none repeat scroll 0% 0% white; color: blue; font-family: Courier; font-size: 10pt;"&gt;/&lt;/span&gt;&lt;span style="color: blue; font-family: Courier; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Elapsed: &lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow;"&gt;00:00:00.00&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-4253796572530018727?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4253796572530018727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/sql-use-of-nvl-is-evil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4253796572530018727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4253796572530018727'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/02/sql-use-of-nvl-is-evil.html' title='SQL:  Use of NVL is Evil'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-2930532516168251694</id><published>2011-01-31T15:40:00.000-08:00</published><updated>2011-01-31T15:40:25.522-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Troubleshooting My SMTP Server</title><content type='html'>I switched to AT&amp;amp;T from Comcast for Internet access not by my choice due to expired promotion offer.&amp;nbsp; My SMTP email server stops to work, and I can't send outgoing emails.&amp;nbsp; Merde.&lt;br /&gt;&lt;br /&gt;I studied Synology forum for troubleshooting hints without lucks:&lt;br /&gt;&lt;br /&gt;1. Enable logging&lt;br /&gt;%vi /volume1/@appstore/MailStation/roundcubemail/config/main.inc.php&lt;br /&gt;edit:&lt;br /&gt;$rcmail_config['imap_debug'] = true;&lt;br /&gt;$rcmail_config['smtp_debug'] = true;&lt;br /&gt;&lt;br /&gt;refresh server config (just in case)&lt;br /&gt;%/usr/syno/mailstation/sbin/postfix reload&lt;br /&gt;&lt;br /&gt;2. enable authorized smtp relay&lt;br /&gt;(proved to be irrelevant, though the symptom is Relay Access Denied while doing HELO commands directly after telnet &lt;hostname&gt; 25)&lt;/hostname&gt;&lt;br /&gt;&lt;br /&gt;(Extracted from http://forum.synology.com/enu/viewtopic.php?f=132&amp;amp;t=22826#p93285)&lt;br /&gt;&lt;br /&gt;I added this to the main.cf located /usr/syno/mailstation/etc&lt;br /&gt;&lt;br /&gt;smtp_sasl_auth_enable = yes&lt;br /&gt;smtp_sasl_password_maps = hash:/usr/syno/mailstation/etc/sasl_passwd&lt;br /&gt;smtp_sasl_security_options =&lt;br /&gt;&lt;br /&gt;Then I created a password file  here /usr/syno/mailstation/etc/&lt;br /&gt;&lt;br /&gt;cat &amp;gt; sasl_passwd&lt;br /&gt;asmtp.mail.dk &lt;a href="mailto:username@yousee.dk"&gt;username@yousee.dk&lt;/a&gt;:mypassword&lt;br /&gt;&lt;br /&gt;Pressed Ctrl+D to save the file.&lt;br /&gt;&lt;br /&gt;Then I  created a DB file by entering the following command (I was in this directory /usr/syno/mailstation/etc/)&lt;br /&gt;../sbin/postmap sasl_passwd&lt;br /&gt;&lt;br /&gt;Then I reloaded the postfix settings by entering the following command&lt;br /&gt;&lt;br /&gt;../sbin/postfix reload&lt;br /&gt;&lt;br /&gt;3. Check for any error messages in email&lt;br /&gt;&lt;br /&gt;Without Logging:&lt;br /&gt;&amp;nbsp;Check the contents under /var/logs/messages and&lt;br /&gt;each file under /volume1/@appstore/MailStation/postfix/defer&lt;br /&gt;&lt;br /&gt;With Logging:&lt;br /&gt;Under /volume1/@appstore/MailStation/roundcubemail/logs, check for the file 'errors', etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source&lt;/b&gt;&lt;br /&gt;http://forum.synology.com/enu/viewtopic.php?f=132&amp;amp;t=23638&lt;br /&gt;http://forum.synology.com/enu/viewtopic.php?f=132&amp;amp;t=22826#p93285&lt;br /&gt;http://forum.synology.com/enu/viewtopic.php?f=132&amp;amp;t=20364&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-2930532516168251694?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/2930532516168251694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/troubleshooting-my-smtp-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2930532516168251694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/2930532516168251694'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/troubleshooting-my-smtp-server.html' title='Troubleshooting My SMTP Server'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3666893881371742073</id><published>2011-01-28T23:08:00.000-08:00</published><updated>2011-01-28T23:08:17.991-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>$50 Gift Card</title><content type='html'>A friend sent me a restaurant gift card in return of a favor of $16.7. My wife noted the gift card has a label of $50 value, and thought we can have a nice dinner in the weekend. The waiter presented a bill of $57++. My wife intended to leave the gift card with another $10 note, but I thought I would use a credit card instead of the cash. The waiter came back with a bill after deducting the gift card balance $16.09...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3666893881371742073?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3666893881371742073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/50-gift-card.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3666893881371742073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3666893881371742073'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/50-gift-card.html' title='$50 Gift Card'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8426844909278306569</id><published>2011-01-28T13:57:00.000-08:00</published><updated>2011-01-28T13:57:46.872-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Security'/><title type='text'>10 Security Companies to Watch in 2011</title><content type='html'>CRN identifies 10 emerging security companies to watch:&lt;br /&gt;&lt;br /&gt;Avenda - vpn and wireless&lt;br /&gt;CipherTex - data security for virtualization&lt;br /&gt;CipherArk - vaulting data&lt;br /&gt;Delfigo - multi-factor DSGateway&lt;br /&gt;Logrhytm - log analysis&lt;br /&gt;Palo Alto networks - re-invent firewall&lt;br /&gt;Syferlock - invest a unique single password for SSO&lt;br /&gt;Tufin Technologies - integrated security lifecycle management&lt;br /&gt;Xceedium - extend access to third parties&lt;br /&gt;Zscaler - security policies via cloud&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.crn.com/slide-shows/security/229100204/2011-need-to-know-emerging-security-vendors.htm?pgno=1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8426844909278306569?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8426844909278306569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/10-security-companies-to-watch-in-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8426844909278306569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8426844909278306569'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/10-security-companies-to-watch-in-2011.html' title='10 Security Companies to Watch in 2011'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8665640756057441935</id><published>2011-01-28T08:38:00.000-08:00</published><updated>2011-01-28T08:38:56.123-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>切了幾片芒果</title><content type='html'>愛情是一個執着. 也是一個期望。&lt;br /&gt;但是它是雙向的.&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/4353699967472160771-8665640756057441935?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8665640756057441935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8665640756057441935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8665640756057441935'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/blog-post.html' title='切了幾片芒果'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6293824070470458383</id><published>2011-01-24T22:40:00.000-08:00</published><updated>2011-01-24T22:40:16.017-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Midlife Crisis</title><content type='html'>My wife told me she's experiencing a midlife crisis.&lt;br /&gt;&lt;br /&gt;From reading more about midlife crisis on the Internet, I realize men and women respond quite differently to our midlife crisis.&amp;nbsp; I have series of reflection on what I want to achieve in life. I regress in many ways without noticing them. &lt;br /&gt;&lt;br /&gt;How do others react to their midlife crisis?&amp;nbsp; Some lose their faith, and some become believers.&amp;nbsp; That reminds me of the Beatles' Imagine and existentialism - I find it very sad.&amp;nbsp; Some underwent a big life change, which could be very shocking to the family, e.g. Wikipedia cites a story about a woman left her husband and children after her mother died.&amp;nbsp; Years later, she was found to be a helper among orphans and homeless after her enlightenment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6293824070470458383?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6293824070470458383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/midlife-crisis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6293824070470458383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6293824070470458383'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/midlife-crisis.html' title='Midlife Crisis'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-5054817809492897118</id><published>2011-01-24T08:55:00.000-08:00</published><updated>2011-01-24T08:55:54.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Home'/><title type='text'>Digitize my Music</title><content type='html'>I'm so pleased to complete another home project. It took me 2-3 weeks to extract all my music cd collections into .mp3, and archive them in my network storage. My wife suggests Airport Express, which I can stream music from iPad (or iPhone) which is connected wirelessly with my hi fi receiver. That's very convenient for home consumption.&lt;br /&gt;&lt;br /&gt;I roughly have 800 CDs with a total of 7,000 songs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-5054817809492897118?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/5054817809492897118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/digitize-my-music.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5054817809492897118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/5054817809492897118'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/digitize-my-music.html' title='Digitize my Music'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-6154874402597516614</id><published>2011-01-11T09:44:00.000-08:00</published><updated>2011-01-11T09:44:57.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Web of Startup Companies</title><content type='html'>You can start your journey to discover which startup companies are in your neighborhood&lt;br /&gt;http://www.startuply.com/&lt;br /&gt;&lt;br /&gt;then ask yourself, which company would I be interested in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-6154874402597516614?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/6154874402597516614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/web-of-startup-companies.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6154874402597516614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/6154874402597516614'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/web-of-startup-companies.html' title='Web of Startup Companies'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-4614415297156271561</id><published>2011-01-07T11:12:00.000-08:00</published><updated>2011-01-07T11:13:14.303-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Oracle: How to Find High Watermark</title><content type='html'>Your Oracle table has lots of delete and load activities. Even if your table is empty, you find the SQL execution very slow - a forced full table scan is noted from your Oracle trace.&amp;nbsp; However, if you truncate your table, and re-execute your SQL, you don't see such slowness.&amp;nbsp; This may be due to a high watermark is set on your table.&lt;br /&gt;&lt;br /&gt;Remark - this is NOT an obvious symptom during performance troubleshooting or diagnosis&lt;br /&gt;&lt;br /&gt;Rationale - an internal watermark (~internal row counter) is set for your table for your delete and load activities.&lt;br /&gt;&lt;br /&gt;How to find your high water&lt;br /&gt;&lt;br /&gt;Example:&amp;nbsp; HR.JOBS is a table from the demo table if you install Oracle 11g where HR is the owner and JOBS is the table name&lt;br /&gt;&lt;br /&gt;High Watermark = Total blocks - Unused blocks - 1&lt;br /&gt;= 8 - 3 - 1&lt;br /&gt;= 4 blocks&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select blocks from dba_segments where owner=upper('HR') and segment_name = upper('JOBS');&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BLOCKS&lt;br /&gt;----------&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 8&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; analyze table hr.jobs estimate statistics;&lt;br /&gt;&lt;br /&gt;Table analyzed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select empty_blocks from dba_tables where owner=upper('HR') and table_name = upper('jobs');&lt;br /&gt;&lt;br /&gt;EMPTY_BLOCKS&lt;br /&gt;------------&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-4614415297156271561?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/4614415297156271561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/oracle-how-to-find-high-watermark.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4614415297156271561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/4614415297156271561'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/oracle-how-to-find-high-watermark.html' title='Oracle: How to Find High Watermark'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-9097101612969172171</id><published>2011-01-07T10:53:00.000-08:00</published><updated>2011-01-07T10:56:40.699-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>How to trace an Oracle session</title><content type='html'>I want to trace an Oracle sql execution.  Oracle AWR report gives me a snapshot but won't give me the details for specific SQL (AWR report shows top x SQL only).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Approach&lt;/b&gt;&lt;br /&gt;1. turn on trace&lt;br /&gt;2. execute your sql&lt;br /&gt;3. use tkprof utility to format the trace details into a readable format&lt;br /&gt;&lt;br /&gt;What most blogs or wiki does not explain clearly is what or which trace file .trc you should specify in the tkprof command.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Details&lt;/b&gt;&lt;br /&gt;1. Turn on trace&lt;br /&gt;&lt;ul&gt;&lt;li&gt;% sqlplus / as sysdba&lt;/li&gt;&lt;li&gt; SQL&amp;gt;alter session set sql_trace=true&lt;/li&gt;&lt;/ul&gt;Remark - you can also enable trace by "alter system trace_enabled=true"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica; font-size: 18pt;"&gt;&lt;/span&gt;  &lt;br /&gt;2. Execute your SQL&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica; font-size: 18pt;"&gt;&lt;/span&gt;  &lt;br /&gt;Please note that the trace details will be captured under your session id.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica; font-size: 18pt;"&gt;&lt;/span&gt;  &lt;br /&gt;&lt;span style="font-family: Helvetica; font-size: 18pt;"&gt;&lt;/span&gt;  &lt;br /&gt;3. Use tkprof to format trace output, e.g. "tkprof xxx.trc myoutput.txt"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Helvetica; font-size: 18pt;"&gt;&lt;/span&gt;  &lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you don't know where the file location for user_dump_dest (where the trace files are stored), you can use the following SQL command. The user_dump_dest file location is usually defined in the init.ora config file, and by default, it's under $ORACLE_HOME/diag/rdbms/&lt;sid&gt;sid/trace.&lt;/sid&gt;&lt;/li&gt;&lt;li&gt;The session trace file (from previous step) is usually the last .trc file under the user_dump_dest directory. However, if you system keeps on generating .trc, the last .trc file may not be the right file.&amp;nbsp; Here's a simple way to find out the right trace file for the session.&lt;/li&gt;&lt;/ul&gt;&lt;style&gt;@font-face {  font-family: "ＭＳ 明朝";}@font-face {  font-family: "Cambria Math";}p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault {  }div.WordSection1 { page: WordSection1; }&lt;/style&gt;     &lt;br /&gt;&lt;div class="MsoNormal" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;select s.sid, s.serial#, pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) || '_ora_' || p.spid || '.trc' AS trace_file FROM v$session s, v$process p, v$parameter pa WHERE pa.name = 'user_dump_dest' AND s.paddr = p.addr AND s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');&lt;/span&gt;&lt;/div&gt;&amp;nbsp;   &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exit the sqlplus, and invoke this command from a shell:&lt;/li&gt;&lt;/ul&gt;%tkprof orcl_ora_30488.trc mytraceoutput.txt&lt;br /&gt;&lt;br /&gt;Remark&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To make the format readable, before you execute any SQL, you can run these commands:&lt;/li&gt;&lt;/ul&gt;&lt;style&gt;@font-face {  font-family: "ＭＳ 明朝";}@font-face {  font-family: "Cambria Math";}p.MsoNormal, li.MsoNormal, div.MsoNormal { margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: "Times New Roman"; }.MsoChpDefault {  }div.WordSection1 { page: WordSection1; }&lt;/style&gt;     &lt;br /&gt;&lt;div class="MsoNormal" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: small;"&gt;set linesize 100&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; font-size: small;"&gt;column trace_file format a60&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can also specify the output format from tkprof too, e.g.&lt;br /&gt;&lt;br /&gt;&lt;pre class="CE"&gt;TKPROF ora53269.trc ora53269.prf SORT = (PRSDSK, EXEDSK, FCHDSK) PRINT = 10&lt;/pre&gt;&lt;pre class="CE"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="CE"&gt;TKPROF dlsun12_jane_fg_sqlplus_007.trc OUTPUTA.PRF&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4353699967472160771&amp;amp;postID=9097101612969172171" name="6483"&gt;&lt;/a&gt;EXPLAIN=scott/tiger TABLE=scott.temp_plan_table_a INSERT=STOREA.SQL SYS=NO&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=4353699967472160771&amp;amp;postID=9097101612969172171" name="6482"&gt;&lt;/a&gt;SORT=(EXECPU,FCHCPU) &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-9097101612969172171?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/9097101612969172171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/how-to-trace-oracle-session.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9097101612969172171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/9097101612969172171'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/how-to-trace-oracle-session.html' title='How to trace an Oracle session'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-8355598298048525775</id><published>2011-01-06T09:37:00.000-08:00</published><updated>2011-01-06T09:37:55.536-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jokes'/><title type='text'>VirginMiles: Motivating Myself to Walk More</title><content type='html'>My company motivates employees to walk more (using a pedometer) for better health. VirginMiles program manages this program with incentives up to $300 per year, if you walk more I'd guess.&lt;br /&gt;&lt;br /&gt;Upon self-registration, the program asks me to enter a motto (e.g. don't give it up). I entered:&lt;br /&gt;&lt;br /&gt;Get me $300 Faster&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-8355598298048525775?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/8355598298048525775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/virginmiles-motivating-myself-to-walk.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8355598298048525775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/8355598298048525775'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/virginmiles-motivating-myself-to-walk.html' title='VirginMiles: Motivating Myself to Walk More'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-3485062755364511140</id><published>2011-01-04T11:14:00.000-08:00</published><updated>2011-01-11T08:19:16.154-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Work'/><title type='text'>Weird Job Interview Questions in 2010</title><content type='html'>http://www.eweek.com/c/a/IT-Management/Google-Facebook-IBM-and-Others-Weird-Job-Interview-Questions-in-2010-612784/?kc=EWKNLCSM01042011STR1&lt;br /&gt;&lt;br /&gt;"How many basketball[s] can you fit in this room?"&lt;br /&gt;- Asked for a people analyst position at Google&lt;br /&gt;&lt;br /&gt;"Given the numbers 1 to 1,000, what is the minimum number of guesses needed to find a specific number if you are given the hint 'higher' or 'lower' for each guess you make."&lt;br /&gt;- Asked for a software engineer position at Facebook&lt;br /&gt;&lt;br /&gt;"If you had 5,623 participants in a tournament, how many games would need to be played to determine the winner?"&lt;br /&gt;- Asked for a manager position at Amazon.com&lt;br /&gt;&lt;br /&gt;"If you were shrunk to the size of a pencil and put in a blender, how would you get out?"&lt;br /&gt;- Asked for an analyst position at Goldman Sachs &lt;br /&gt;&lt;br /&gt;"How many ridges [are there] around a quarter?"&lt;br /&gt;- Asked for a project analyst position at Deloitte&lt;br /&gt;&lt;br /&gt;"Rate yourself on a scale of 1 to 10 how weird you are."&lt;br /&gt;- Asked for an operations analyst position at Capital One&lt;br /&gt;&lt;br /&gt;"If you could be any superhero, who would it be?"&lt;br /&gt;- Asked for a customer sales representative position at AT&amp;amp;T&lt;br /&gt;&lt;br /&gt;"There are three boxes, one contains only apples, one contains only oranges, and one contains both apples and oranges. The boxes have been incorrectly labeled such that no label identifies the actual contents of the box it labels. Opening just one box, and without looking in the box, you take out one piece of fruit. By looking at the fruit, how can you immediately label all of the boxes correctly?"&lt;br /&gt;- Asked for a software QA engineer position at Apple&lt;br /&gt;&lt;br /&gt;"How do you weigh an elephant without using a weigh machine?"&lt;br /&gt;- Asked for a software engineer position at IBM&lt;br /&gt;&lt;br /&gt;"You have 8 pennies, 7 weigh the same, one weighs less. You also have a judge's scale. Find the one that weighs less in less than 3 steps."&lt;br /&gt;- Asked for a systems validation engineer position at Intel&lt;br /&gt;&lt;br /&gt;"A train leaves San Antonio for [Houston] at 60 mph. Another train leaves [Houston] for San Antonio at 80 mph. [Houston] and San Antonio are 300 miles apart. If a bird leaves San Antonio at 100 mph, and turns around and flies back once it reaches the [Houston] train, and continues to fly between the two, how far will it have flown when they collide?"&lt;br /&gt;- Asked for a software engineer position at USAA&lt;br /&gt;&lt;br /&gt;"Out of 25 horses, pick the fastest 3 horses. In each race, only 5 horses can run at the same time. What is the minimum number of races required?"&lt;br /&gt;- Asked for a software developer position at Bloomberg LP Financial&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Glassdoor also publishes 25 interview questions:&lt;br /&gt;http://www.glassdoor.com/blog/top-25-oddball-interview-questions-2010/?utm_source=newsletter&amp;amp;utm_medium=email&amp;amp;utm_content=news-jan11u-top25&amp;amp;utm_campaign=news-jan11u&lt;br /&gt;&lt;blockquote&gt;1. “If you were shrunk to the size of a pencil and put in a blender, how would you get out?” – &lt;a href="http://www.glassdoor.com/Interview/Goldman-Sachs-Interview-RVW515514.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt;&lt;em&gt;Asked at &lt;strong&gt;Goldman Sachs.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Goldman-Sachs-Interview-Questions-E2800.htm"&gt;More Goldman Sachs interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;2. “How many ridges [are there] around a quarter?” – &lt;a href="http://www.glassdoor.com/Interview/Deloitte-Interview-RVW605296.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Deloitte&lt;/strong&gt;&lt;/em&gt;. &lt;a href="http://www.glassdoor.com/Interview/Deloitte-Interview-Questions-E2763.htm"&gt;More Deloitte interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;3. “What is the philosophy of Martial Arts?” – &lt;a href="http://www.glassdoor.com/Interview/Aflac-Interview-RVW552041.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Aflac&lt;/strong&gt;.&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Aflac-Interview-Questions-E1302.htm"&gt;More Aflac interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;span id="more-5961"&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;4. “Explain [to] me what has happened in this country during the last 10 years.” – &lt;a href="http://www.glassdoor.com/Interview/Boston-Consulting-Interview-RVW410282.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Boston Consulting.&lt;/strong&gt; &lt;/em&gt;&lt;a href="http://www.glassdoor.com/Interview/Boston-Consulting-Interview-Questions-E3879.htm"&gt;More Boston Consulting interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;5. “Rate yourself on a scale of 1 to 10 how weird you are.” – &lt;a href="http://www.glassdoor.com/Interview/Capital-One-Interview-RVW453054.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt;&lt;em&gt;Asked at &lt;strong&gt;Capital One&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/Capital-One-Interview-Questions-E3736.htm"&gt;More Capital One interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;6. “How many basketball[s] can you fit in this room” – &lt;a href="http://www.glassdoor.com/Interview/Google-Interview-RVW529787.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Google&lt;/strong&gt;.&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Google-Interview-Questions-E9079.htm"&gt;More Google interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;7. “Out of 25 horses, pick the fastest 3 horses. In each  race, only 5  horses can run at the same time. What is the minimum  number of races  required?” – &lt;a href="http://www.glassdoor.com/Interview/Bloomberg-L-P-Interview-RVW400050.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Bloomberg LP&lt;/strong&gt;.&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Bloomberg-L-P-Interview-Questions-E3096.htm"&gt;More Bloomberg LP interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;8. “If you could be any superhero, who would it be?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/AT-and-T-Interview-RVW546645.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at&amp;nbsp; &lt;strong&gt;AT&amp;amp;T&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/AT-and-T-Interview-Questions-E613.htm"&gt;More AT&amp;amp;T interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;9. “You have a birthday cake and have exactly 3 slices to cut it into 8 equal pieces. How do you do it?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/GD/Interview/BlackRock-Interview-Questions-E9331.htm?filter.jobTitleExact=Portfolio+Management+Group-Fixed+Income+Analyst"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Blackrock.&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://www.glassdoor.com/Interview/BlackRock-Interview-Questions-E9331.htm"&gt;More Blackrock interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;10. “Given the numbers 1 to 1000, what is the minimum  numbers guesses needed to find a specific number if you are given the  hint “higher” or “lower” for each guess you make.” – &lt;a href="http://www.glassdoor.com/Interview/Facebook-Interview-RVW370781.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt;&lt;em&gt;Asked at &lt;strong&gt;Facebook.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Facebook-Interview-Questions-E40772.htm"&gt;More Facebook interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;11. “If you had 5,623 participants in a tournament, how many games would need to be played to determine the winner?” – &lt;a href="http://www.glassdoor.com/Interview/Amazon-com-Interview-RVW446645.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Amazon&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/Amazon-com-Interview-Questions-E6036.htm"&gt;More Amazon interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;12. “An apple costs 20 cents, an orange costs 40 cents, and a grapefruit costs 60 cents, how much is a pear?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/Epic-Systems-Corporation-Interview-RVW415446.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Epic Systems&lt;/strong&gt;.&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Epic-Systems-Corporation-Interview-Questions-E35163.htm"&gt;More Epic Systems interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;13. “There are three boxes, one contains only apples, one  contains only oranges, and one contains both apples and oranges. The  boxes have been incorrectly labeled such that no label identifies the  actual contents of the box it labels. Opening just one box, and without  looking in the box, you take out one piece of fruit. By looking at the  fruit, how can you immediately label all of the boxes correctly?” – &lt;a href="http://www.glassdoor.com/Interview/Apple-Interview-RVW674756.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Apple.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Apple-Interview-Questions-E1138.htm"&gt;More Apple interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;14. “How many traffic lights in Manhattan?” – &lt;a href="http://www.glassdoor.com/Interview/Argus-Information-and-Advisory-Services-Interview-RVW407846.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Argus Information &amp;amp; Advisory Services&lt;/strong&gt;.&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Argus-Information-and-Advisory-Services-Interview-Questions-E108135.htm"&gt;More Argus Information &amp;amp; Advisory Services interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;15. “You are in a dark room with no light. You need  matching socks for your interview and you have 19 gray socks and 25  black socks. What are the chances you will get a matching pair? “ – &lt;a href="http://www.glassdoor.com/Interview/Eze-Castle-Interview-RVW404325.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Eze Castle&lt;/strong&gt;&lt;/em&gt;. &lt;a href="http://www.glassdoor.com/Interview/Eze-Castle-Interview-Questions-E15477.htm"&gt;More Eze Castle interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;16. “What do wood and alcohol have in common?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/Guardsmark-Interview-RVW391487.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Guardsmark&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/Guardsmark-Interview-Questions-E9138.htm"&gt;More Guardsmark interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;17. “How do you weigh an elephant without using a weigh machine?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/IBM-Interview-RVW474381.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;IBM.&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://www.glassdoor.com/Interview/IBM-Interview-Questions-E354.htm"&gt;More IBM interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;18. “You have 8 pennies, 7 weight the same, one weighs  less. You also have a judges scale. Find the one that weighs less in  less than 3 steps.” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/Intel-Corporation-Interview-RVW488633.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Intel.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/Intel-Corporation-Interview-Questions-E1519.htm"&gt;More Intel interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;19. “Why do you think only a small percentage of the population makes over $150K?” – &lt;a href="http://www.glassdoor.com/Interview/New-York-Life-Interview-RVW364498.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;New York Life.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/New-York-Life-Interview-Questions-E2915.htm"&gt;More New York Life interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;20. “You are in charge of 20 people, organize them to figure out how many bicycles were sold in your area last year.” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/Schlumberger-Interview-RVW420783.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Schlumberger&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/Schlumberger-Interview-Questions-E588.htm"&gt;More Schlumberger interview questions&lt;/a&gt;.&lt;/blockquote&gt;&lt;blockquote&gt;21. “How many bottles of beer are drank in the city over the week.” – &lt;a href="http://www.glassdoor.com/Interview/The-Nielsen-Company-Interview-RVW560366.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;The Nielsen Company&lt;/strong&gt;&lt;/em&gt;. &lt;a href="http://www.glassdoor.com/Interview/The-Nielsen-Company-Interview-Questions-E3776.htm"&gt;More The Nielsen Company interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;22. “What’s the square root of 2000?” – &lt;a href="http://www.glassdoor.com/Interview/UBS-Interview-RVW396678.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;UBS.&lt;/strong&gt;&lt;/em&gt; &lt;a href="http://www.glassdoor.com/Interview/UBS-Interview-Questions-E3419.htm"&gt;More UBS interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;23. “A train leaves San Antonio for Huston at 60mph.  Another train leaves Huston for San Antonio at 80mph. Huston and San  Antonio are 300 miles apart. If a bird leaves San Antonio at 100mph, and  turns around and flies back once it reaches the Huston train, and  continues to fly between the two, how far will it have flown when they  collide.”- &lt;a href="http://www.glassdoor.com/Interview/USAA-Interview-RVW483976.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;USAA&lt;/strong&gt;&lt;/em&gt;. &lt;a href="http://www.glassdoor.com/Interview/USAA-Interview-Questions-E3033.htm"&gt;More USAA interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;24. “How are M&amp;amp;M’s made?” – &lt;a href="http://www.glassdoor.com/Interview/U-S-Bank-Interview-RVW456652.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;US Bank&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/U-S-Bank-Interview-Questions-E8937.htm"&gt;More US Bank interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;blockquote&gt;25. “What would you do if you just inherit a pizzeria from your uncle?” –&amp;nbsp; &lt;a href="http://www.glassdoor.com/Interview/Volkswagen-Interview-RVW410669.htm"&gt;view answers&lt;br /&gt;&lt;/a&gt; &lt;em&gt;Asked at &lt;strong&gt;Volkswagen&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt; &lt;a href="http://www.glassdoor.com/Interview/Volkswagen-Interview-Questions-E3515.htm"&gt;More Volkswagen interview questions.&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-3485062755364511140?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/3485062755364511140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/weird-job-interview-questions-in-2010.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3485062755364511140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/3485062755364511140'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2011/01/weird-job-interview-questions-in-2010.html' title='Weird Job Interview Questions in 2010'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4353699967472160771.post-7200684242958957159</id><published>2010-12-30T10:51:00.000-08:00</published><updated>2010-12-30T22:47:33.702-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TouchingMoment'/><title type='text'>Love Poem</title><content type='html'>I think I would have been a very different loving person if I reached that maturity 2 decades ago.&amp;nbsp; This poem is very reflective:&amp;nbsp; http://www.azlovepoems.com/whatslove.shtml&lt;br /&gt;&lt;br /&gt;Love is a thing shared by two&lt;br /&gt;Love is what you feel for me and you&lt;br /&gt;Love is precious when its shared&lt;br /&gt;Love is danger when its dared&lt;br /&gt;&lt;br /&gt;Love wanders and searches for the one&lt;br /&gt;Love plays and just do it for fun&lt;br /&gt;Love lets you hear love songs to emote&lt;br /&gt;Love lets you make sweet poems &amp;amp; a quote&lt;br /&gt;&lt;br /&gt;Love makes the world go around&lt;br /&gt;Love makes us happy if the one we love&lt;br /&gt;is finally found&lt;br /&gt;Love turns the world upside down&lt;br /&gt;Love cheers us never with a frown&lt;br /&gt;&lt;br /&gt;Love makes you cry&lt;br /&gt;Love sacrifices and says goodbye&lt;br /&gt;Love has its own reason and time&lt;br /&gt;Love can make someone you love "mine"&lt;br /&gt;&lt;br /&gt;Love makes a person kiss&lt;br /&gt;Love makes a person miss&lt;br /&gt;Love is experienced by all&lt;br /&gt;Love conquers when you fall.&lt;br /&gt;&lt;br /&gt;Love can forgive if you repeat the same mistakes more than once. Love can make you feel being loved without explicitly telling. Love blossoms into creativity.&lt;br /&gt;And love is a feeling too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4353699967472160771-7200684242958957159?l=monkieblankie.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://monkieblankie.blogspot.com/feeds/7200684242958957159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://monkieblankie.blogspot.com/2010/12/lovers-or-companion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7200684242958957159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4353699967472160771/posts/default/7200684242958957159'/><link rel='alternate' type='text/html' href='http://monkieblankie.blogspot.com/2010/12/lovers-or-companion.html' title='Love Poem'/><author><name>monkieblankie</name><uri>http://www.blogger.com/profile/12746021095161047279</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
