<?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-6943879080620983015</id><updated>2012-01-27T13:34:33.973+02:00</updated><category term='plsql'/><category term='linux'/><category term='plsql oracle'/><category term='javafx'/><category term='xml'/><category term='subquery'/><category term='Javascript MaskFormatter formatmask FormattedTextField'/><category term='derived table'/><category term='javascript'/><category term='mysql'/><category term='cache'/><category term='initialize'/><category term='php'/><category term='dynamic'/><category term='javascript number formatter decimalformat numbermask'/><category term='connect by'/><category term='PL/SQL'/><category term='order by'/><category term='jsp'/><category term='hierarchical queries'/><category term='applet'/><category term='getElementsByTagName'/><category term='oracle'/><category term='location'/><category term='DOM'/><category term='oracle hierarchical queries'/><category term='css'/><category term='oracle recursive query'/><category term='connect by start with'/><category term='optimization'/><category term='script'/><category term='servlet'/><category term='hierarchical queries with where clause'/><category term='wrapping source code'/><category term='oracle recursive queries'/><category term='limit'/><title type='text'>Code of Our Lives</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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>65</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-8136718692051993800</id><published>2012-01-27T13:03:00.004+02:00</published><updated>2012-01-27T13:34:33.978+02:00</updated><title type='text'>Building a Menu Bar with Formspider</title><content type='html'>&lt;span style="background-color: white; color: #362a36; display: inline ! important; float: none; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;a href="http://goo.gl/QnaWm"&gt;This tutorial&lt;/a&gt; explains how to build and use&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: white; color: #362a36; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 13px; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; margin: 0px; orphans: 2; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;menu ba&lt;/span&gt;&lt;span style="background-color: white; color: #362a36; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 13px; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; margin: 0px; orphans: 2; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;r&lt;/span&gt;&lt;span style="background-color: white; color: #362a36; display: inline ! important; float: none; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;in a Formspider application.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8136718692051993800?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8136718692051993800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8136718692051993800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8136718692051993800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8136718692051993800'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2012/01/building-menu-bar-with-formspider.html' title='Building a Menu Bar with Formspider'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-461528613372451134</id><published>2012-01-06T18:30:00.001+02:00</published><updated>2012-01-06T18:30:15.037+02:00</updated><title type='text'>Web Session Management in PL/SQL with Formspider</title><content type='html'>This tutorial explains how to benefit from web session variables with PL/SQL in a Formspider application. You will discover how to define, store and destroy session variables. &lt;a href="http://goo.gl/a99G8"&gt;Click here to continue reading&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-461528613372451134?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/461528613372451134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=461528613372451134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/461528613372451134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/461528613372451134'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2012/01/web-session-management-in-plsql-with.html' title='Web Session Management in PL/SQL with Formspider'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6789596084826693627</id><published>2012-01-04T18:20:00.003+02:00</published><updated>2012-01-04T18:20:55.715+02:00</updated><title type='text'>Is Foursqaure in trouble?</title><content type='html'>&lt;span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;When Forrester CEO George Colony, thrashed Foursquare as nonsense, Fred Wilson&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://goo.gl/eMBsP" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #21759b; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify; text-decoration: underline; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;" target="_blank"&gt;posted his talk on his web site&lt;/a&gt;&lt;span style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline !important; float: none; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;and commented that “it shows he doesn’t use the product and has no idea what they are about and where they are headed”, when I asked him about his take on Mr. Colony’s view.&lt;/span&gt;&lt;br /&gt;&lt;div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;"&gt;However, Mr. Colony might have a point, although he was unnecessarily harsh making it. After several months spending time on Foursquare, I sadly realized that I can get better value out of other web sites.&lt;/div&gt;&lt;div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: justify; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;"&gt;There were three ways that I hoped to get value.&lt;/div&gt;&lt;div style="background-color: white; border-width: 0px; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; margin: 0px 0px 10px; orphans: 2; padding: 0px; text-align: justify; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;a href="http://goo.gl/pqCU3"&gt;Click here&lt;/a&gt; to continue reading the article. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6789596084826693627?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6789596084826693627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6789596084826693627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6789596084826693627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6789596084826693627'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2012/01/is-foursqaure-in-trouble.html' title='Is Foursqaure in trouble?'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-1747255128626279291</id><published>2011-12-22T18:18:00.002+02:00</published><updated>2011-12-22T18:36:39.577+02:00</updated><title type='text'>Amazing Charts with PL/SQL</title><content type='html'>&lt;a href="http://www.theformspider.com/"&gt;Formspider&lt;/a&gt;, the Web 2.0 for PL/SQL developers, enables you to create gorgeous charts declaratively. Creating charts has never been easier for PL/SQL developers. Moreover, Formspider charts are implemented 100% in JavaScript. There is no Flash at all. So the charts you create with Formspider, work perfectly on mobile devices that do not support Flash, as well. Make sure you check out &lt;a href="http://goo.gl/7pIy8"&gt;the demo&lt;/a&gt; and &lt;a href="http://goo.gl/MPjQD"&gt;the tutorial&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1747255128626279291?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1747255128626279291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1747255128626279291' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1747255128626279291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1747255128626279291'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/12/amazing-charts-with-plsql.html' title='Amazing Charts with PL/SQL'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-5357444566892337037</id><published>2011-12-19T14:47:00.003+02:00</published><updated>2011-12-19T14:47:09.517+02:00</updated><title type='text'>Managing Screen Navigation in Formspider Applications</title><content type='html'>&lt;a href="http://goo.gl/jJllv"&gt;Click here&lt;/a&gt; to find out how we manage screen navigation in Formspider, the Web 2.0 framework for PL/SQL developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-5357444566892337037?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/5357444566892337037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=5357444566892337037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5357444566892337037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5357444566892337037'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/12/managing-screen-navigation-in.html' title='Managing Screen Navigation in Formspider Applications'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-8726961134953824721</id><published>2011-12-13T12:15:00.002+02:00</published><updated>2011-12-14T06:57:08.721+02:00</updated><title type='text'>Data Types and Format Masks in Formspider</title><content type='html'>Formspider enables PL/SQL Developers build Web 2.0 applications just as easily as they were creating Forms applications. &lt;a href="http://goo.gl/u4L3V"&gt;Click here&lt;/a&gt; to find out how we handle data types and format masks in Formspider.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8726961134953824721?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8726961134953824721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8726961134953824721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8726961134953824721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8726961134953824721'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/12/data-types-and-format-masks-in.html' title='Data Types and Format Masks in Formspider'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-680294781163820691</id><published>2011-11-23T15:00:00.001+02:00</published><updated>2011-11-23T15:02:10.313+02:00</updated><title type='text'>Formspider surpasses 300 Installations</title><content type='html'>Our product Formspider, the Web 2.0 framework for Oracle PL/SQL developers has surpassed 300 installations worldwide. &lt;a href="http://theformspider.com/blog/2011/11/22/300-installations/"&gt;Read more about Formspider here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-680294781163820691?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/680294781163820691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=680294781163820691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/680294781163820691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/680294781163820691'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/11/formspider-surpasses-300-installations.html' title='Formspider surpasses 300 Installations'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-8109185748536162082</id><published>2011-11-04T09:30:00.000+02:00</published><updated>2011-12-13T12:11:08.509+02:00</updated><title type='text'>Apple’s strategy leaked in a video…from 1988</title><content type='html'>&lt;br /&gt;&lt;div class="p1"&gt;I cannot help but &lt;a href="http://goo.gl/Z7hyp"&gt;share this video&lt;/a&gt; made by Apple…in 1988. The vision was always there. Now they are executing.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8109185748536162082?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8109185748536162082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8109185748536162082' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8109185748536162082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8109185748536162082'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/11/apples-strategy-leaked-in-videofrom.html' title='Apple’s strategy leaked in a video…from 1988'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-9149507028521546061</id><published>2011-10-17T07:59:00.001+02:00</published><updated>2011-10-17T07:59:09.294+02:00</updated><title type='text'>Siri; The Artificial Intelligence Revolution has begun</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial; font-size: 14px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;In her interview with Fred Wilson, Carlota Perez, who inspired him greatly in forming his investment strategy, talks about five technological revolutions:&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;1) The Industrial Revolution (Machines and Canals)&lt;br /&gt;2) Railways and The Steam Engine&lt;br /&gt;3) Heavy Engineering using Cheap Steal&lt;br /&gt;4) The Automobile, The Assembly Line and Mass Production of Electrical Appliances&lt;br /&gt;5) The Information Revolution&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;On October 4 2011, with the introduction of Siri in iPhone 4S, a new technological revolution has begun.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://goo.gl/t8IFY"&gt;Continue reading at Yalim's Lodge&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-9149507028521546061?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/9149507028521546061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=9149507028521546061' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9149507028521546061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9149507028521546061'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/10/siri-artificial-intelligence-revolution.html' title='Siri; The Artificial Intelligence Revolution has begun'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-306259327673610928</id><published>2011-10-07T12:58:00.002+02:00</published><updated>2011-10-07T12:58:51.397+02:00</updated><title type='text'>Steve Jobs’ best is yet to come</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Did you really think that he left the stage without &lt;a href="http://goo.gl/b1RSp"&gt;one more thing&lt;/a&gt;?&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-306259327673610928?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/306259327673610928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=306259327673610928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/306259327673610928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/306259327673610928'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/10/steve-jobs-best-is-yet-to-come.html' title='Steve Jobs’ best is yet to come'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-4447437416349100959</id><published>2011-09-15T16:40:00.002+02:00</published><updated>2011-09-15T16:40:20.070+02:00</updated><title type='text'>On Wearing a Suit</title><content type='html'>&lt;br /&gt;&lt;div class="p1"&gt;Here are &lt;a href="http://gerger.co/yalimslodge/2011/09/15/on-wearing-a-suit/"&gt;five reasons&lt;/a&gt; why it might be a good idea wearing a suit to a business meeting with people you’ve never met before. Continue reading at &lt;a href="http://gerger.co/yalimslodge/2011/09/15/on-wearing-a-suit/"&gt;Yalim's Lodge&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4447437416349100959?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4447437416349100959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4447437416349100959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4447437416349100959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4447437416349100959'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/09/on-wearing-suit.html' title='On Wearing a Suit'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6614496800720707873</id><published>2011-09-12T13:44:00.001+02:00</published><updated>2011-09-12T22:35:36.009+02:00</updated><title type='text'>Don't Require a Credit Card for Trials</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;I ran into&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;a question at StackExchange. It came from a founder of a B2B Internet startup, who is tired of following up with unqualified leads. He believes that the low barrier free trial his company is offering is the culprit for their low quality. As a solution, he is contemplating asking for credit card information before the beginning of the free trial and automatically charging his users when the trial ends. He is asking the SE community if this is a good idea.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; font-size: 14px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;div dir="ltr" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Hmmm…Let me be really clear:&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; font-size: 14px; font-style: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;div style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;Only porn sites should do this.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-weight: inherit;"&gt;&lt;div style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial; line-height: 20px;"&gt;Continue reading at &lt;a href="http://goo.gl/2Zb9J"&gt;Yalim's Lodge&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; color: black; font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: 20px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6614496800720707873?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6614496800720707873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6614496800720707873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6614496800720707873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6614496800720707873'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/09/dont-require-credit-card-for-trials.html' title='Don&apos;t Require a Credit Card for Trials'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6264155779938651362</id><published>2011-09-05T07:33:00.002+02:00</published><updated>2011-09-05T07:34:36.000+02:00</updated><title type='text'>The Star Trek Secret to Happiness</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial; font-size: 14px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;For people who glance at blog posts for 10 seconds and move on to the next one: The Star Trek secret to happiness in life, is to never let McCoy to the bridge.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; margin-bottom: 10px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;strong style="font-weight: bold;"&gt;What the heck does that mean?&amp;nbsp;&lt;/strong&gt;Interested? Good. &lt;a href="http://goo.gl/oB9uc"&gt;Read on&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6264155779938651362?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6264155779938651362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6264155779938651362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6264155779938651362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6264155779938651362'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/09/star-trek-secret-to-happiness.html' title='The Star Trek Secret to Happiness'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6936495281163462920</id><published>2011-08-25T22:57:00.000+02:00</published><updated>2011-08-25T22:57:26.877+02:00</updated><title type='text'>Steve Jobs lighted our way</title><content type='html'>        &lt;br /&gt;&lt;div class="p1"&gt;My father lives as if it is 1975.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;b&gt;He refuses to interact with a computer. &lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt; To put things in perspective, every member of the family owns at least one computer and presented the advantages of owning one to him repeatedly. He never even touched a computer and seemed genuinely offended by the presence of one.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Continue reading the story&amp;nbsp;&lt;a href="http://goo.gl/XaZp9"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6936495281163462920?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6936495281163462920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6936495281163462920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6936495281163462920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6936495281163462920'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/08/steve-jobs-lighted-our-way.html' title='Steve Jobs lighted our way'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-8476381476630111274</id><published>2011-08-24T19:57:00.000+02:00</published><updated>2011-08-24T19:57:18.183+02:00</updated><title type='text'>How we build Web 2.0 apps with PL/SQL</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: arial, sans-serif; font-size: 13px; line-height: 19px; white-space: nowrap;"&gt;           &lt;/span&gt;&lt;br /&gt;&lt;div class="p1"&gt;PL/SQL has never run on client machines and never will. This unchangeable, indisputable fact that seems like&amp;nbsp;the most obvious disadvantage of PL/SQL is in an ironic way its biggest advantage. This very fact is the reason Oracle Forms was a platform independent application development framework.&amp;nbsp;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Continue reading &lt;a href="http://goo.gl/McN4K"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8476381476630111274?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8476381476630111274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8476381476630111274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8476381476630111274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8476381476630111274'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/08/how-we-build-web-20-apps-with-plsql.html' title='How we build Web 2.0 apps with PL/SQL'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-7894930189729996712</id><published>2011-08-20T09:39:00.000+02:00</published><updated>2011-08-20T09:39:23.641+02:00</updated><title type='text'>Free advice to the remaining PC Makers</title><content type='html'>        &lt;br /&gt;&lt;div class="p1"&gt;I’ve prepared a list of the shortcomings of PC-Laptops (for lack of a better term) that made me jump ship and buy a MacBook Air. The items in the list will seem as clear as daylight to you. That’s because you are a consumer not an executive in the PC business. Continue reading at &lt;a href="http://goo.gl/Ojxo9"&gt;Yalim's Lodge&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-7894930189729996712?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/7894930189729996712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=7894930189729996712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7894930189729996712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7894930189729996712'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/08/free-advice-to-remaining-pc-makers.html' title='Free advice to the remaining PC Makers'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2664245039016305399</id><published>2011-08-20T09:37:00.000+02:00</published><updated>2011-08-20T09:37:12.302+02:00</updated><title type='text'>-1 for Google +1 Part 2</title><content type='html'>        &lt;br /&gt;&lt;div class="p1"&gt;My blog post &lt;a href="http://goo.gl/oZuII"&gt;&lt;span class="s1"&gt;-1 for Google +1&lt;/span&gt;&lt;/a&gt;, in which I argued that no one is using +1 because there is no benefit a user gets from +1’ing anything, &amp;nbsp;generated a lot of comments here at this blog and at Hacker News. I would like to thank everyone who contributed. The comments really helped me to form a better opinion. In this post, I want to do a round up of the discussion we had. It seems to me that it all boils down to these three points:&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Continue reading at &lt;a href="http://goo.gl/EOMMk"&gt;Yalim's Lodge&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2664245039016305399?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2664245039016305399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2664245039016305399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2664245039016305399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2664245039016305399'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/08/1-for-google-1-part-2.html' title='-1 for Google +1 Part 2'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-151215011787326350</id><published>2011-08-20T09:35:00.000+02:00</published><updated>2011-08-20T09:35:12.006+02:00</updated><title type='text'>-1 for Google +1</title><content type='html'>        &lt;br /&gt;&lt;div class="p1"&gt;While I was browsing through news stories at MSNBC.com, I could not help but notice the vast difference between the number of people recommended a story on Facebook and +1’ed it on Google. Here are some examples:...&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p1"&gt;Continue reading at &lt;a href="http://goo.gl/oZuII"&gt;Yalim's Lodge&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-151215011787326350?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/151215011787326350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=151215011787326350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/151215011787326350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/151215011787326350'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/08/1-for-google-1.html' title='-1 for Google +1'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6381177797663583496</id><published>2011-07-18T15:49:00.001+02:00</published><updated>2011-07-18T15:50:58.888+02:00</updated><title type='text'>Seedcamp Event Guidelines for Newbies</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 14px; line-height: 20px; text-align: justify;"&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Last week I participated as a mentor at Seedcamp Ljubljana. For those who don’t know’ Seedcamp is an early stage micro seed investment fund and mentoring programme. They organize daily events across Europe where mentors and startups get together.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;This was my first time at a Seedcamp event or any event regarding startups. I am literally blown away. The buzz around the place is incredible. Everybody is candid, supportive and unpretentious. They are willing to help and probably more importantly receive help.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;The other incredible thing is that none of this buzz and excitement is about money. Yes, Seedcamp wants to invest in companies and eventually make money off of these investments but overall at a Seedcamp event, money takes a back seat to the culture of collaboration. The power of community, collaboration and willingness to receive help are the lessons I am taking home with me from Seedcamp Ljubljana.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Over the next few days, I will write about the startups I’ve met and my two cents that I shared with them.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Having my feedback in a written form will help the startups. During the day, they were swamped with feedback often not in a very organized manner. We were jumping from topic to topic and I caught myself changing positions in the middle of arguments, all expected because we were in the middle of a 45 minute brainstorming bonanza. They were taking notes but given the tempo of&lt;br /&gt;the day the notes might be difficult to comprehend in the aftermath.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;This exercise will help me as well. I want to stay in touch with the startups I connected with. However, most of the thinking I have done with them is bound to be forgotten in the coming weeks. If I write it all down, the blog posts will quickly remind me the discussions we had. I am also curious if my two cents will be any good to the people I talked to. In the future, I want to compare the current state of the startups with the blog posts I wrote and have a good laugh with them.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;img alt=":-)" class="wp-smiley" src="http://gerger.co/yalimslodge/wp-includes/images/smilies/icon_smile.gif" style="border-style: none; border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px; max-height: 12px; max-width: 680px; padding: 0px; vertical-align: baseline;" /&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Before I start talking about each startup, there is some generic feedback I would like to give to Seedcamp, mentors and the startups. So here we go…&lt;/div&gt;&lt;h2 style="border-width: 0px; color: #111111; font-family: inherit; font-size: 2em; font-style: inherit; font-weight: normal; margin: 0px 0px 0.75em; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;To Seedcamp&lt;/b&gt;&lt;/h2&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Inform the mentors&lt;/b&gt;&lt;br /&gt;The PDF that Seedcamp sent prior to the event was great. It had every information I needed to get to know the startups. However, I wish they told me which startups I am to work with in advance so that I could focus on them more. With 25 startups attending, it was difficult for me to do due diligence on all of them to hold a 45 minute discussion. Had I known the five I will talk to, I could focus on them and be better prepared.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;It is a small issue but, I’d rather a web page instead of a PDF. Web pages are more mobile friendly and the links on a PDF are not clickable unless specifically made so. I was mostly reading the PDF on an iPad or an iPhone and going back and forth between pages and the browser made working with the information more difficult.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Mentor the mentors&lt;/b&gt;&lt;br /&gt;I think Seedcamp can be a little more active in showing mentors how to mentor the right way. Most of the ones I talked to, including me, were doing this the first time. Maybe some guidelines about how the 45 minute meeting should be structured can be helpful. A video or a set of videos of high quality mentoring sessions can’t hurt either.&lt;br /&gt;Additionally, if I’d knew who the other two mentors in my group were in advance, I could contact them prior to the event and we could get organized a little better. As it turned out, I was extremely lucky and ended up with two great mentors who I really enjoyed spending the day with but if we had a little heads up, I am sure we as a group could use it.&lt;/div&gt;&lt;h2 style="border-width: 0px; color: #111111; font-family: inherit; font-size: 2em; font-style: inherit; font-weight: normal; margin: 0px 0px 0.75em; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;To Mentors&lt;/b&gt;&lt;/h2&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Do your homework&lt;/b&gt;&lt;br /&gt;The startups are there to receive feedback, not to explain what they do for 45 minutes. I think mentors should do their homework and understand the business as well as they can prior to the meeting. I think it is completely OK and valuable to have the startups explain what they do, but the meeting should not turn into an interview about what they do. Every mentor simply must go over the booklet Seedcamp provids and visit the web sites of the startups. I understand that this is a little overwhelming right now because there are 25 of them and a mentor does not know which startups she will talk to but do the best you can.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Avoid Feature Suggestion Fest&lt;/b&gt;&lt;br /&gt;The startups are also not there to hear your feature ideas. They probably thought them all. Members of the startups are usually software developers and given that they have been thinking about the problem longer than you have, it is very likely that they thought of the very cool feature you just came up with. In other words, don’t just suggest a feature because you think it will make you look cool. Please remember that we are talking about two people shops here and their time is very valuable. Working on features that don’t bring in customers will hurt them. Since most of the entrepreneurs are software developers they are already more eager about feature development than they should. If you really want to recommend that they should implement a feature, try to tie it to a business case and explain why you think it is important from a business perspective.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Skip the “Atta Boy!”. Play the devils advocate&lt;/b&gt;&lt;br /&gt;Try not to turn the meeting to a feel good event. Having a positive attitude and wishing them well is certainly the correct behavior. However, patronizing them, giving them false sense of hope and not telling them what you think will eventually hurt them. Most startups fail. The entrepreneurs you meet at Seedcamp will most likely fail. It is better if they hear the cold reality about their errors now than after spending a year of their lives. If you have legitimate worries about their work, tell them openly and honestly. This doesn’t mean you have to be rude or mean to them. If you can’t tell someone how concerned you are about their well being without starting a fight, maybe you should not be mentoring. You will be surprised how well the entrepreneurs receive constructive criticism. It is what they are there for. Play the devils advocate. Openly tell them that you are doing so. Try to corner them, force them to come up with numbers, facts and justifications. If they are well prepared, they will easily tackle all of your challenges. If they are not, they will be grateful to go through this experience now in front of you as opposed to in front of someone they are asking a million dollars from. Don’t think they will hate you. On the contrary, they will thank you. The entrepreneur I worried about the most turned out to be the guy I hanged out with the most after the event was over.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Introduce yourself&lt;/b&gt;&lt;br /&gt;Probably the best thing we did as a mentor group was to introduce ourselves to the entrepreneurs. This way the entrepreneurs have an idea of who you are and what kind of help they can expect from you. This also helps you build credibility in their eyes and you stop being the jackass who just entered the room and started talking shit about their beloved company.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Take notes during the pitches&lt;/b&gt;&lt;br /&gt;At the beginning of the day each startup gives a five minute presentation to introduce itself. Mentors should take notes during these presentations. Some of the questions I had were answered during the pitches and I had some new questions. Write them down so that you can bring them up during your meeting with the startup. Otherwise you will just forget them.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Talk to everyone&lt;/b&gt;&lt;br /&gt;Just because a startup wasn’t in your schedule, doesn’t mean that you should ignore them. Be proactive, go and talk to them. Don’t be shy. You are there to give your two cents and the more you give the better. I pulled every entrepreneur I can get my hands on to a corner and talked to them about their business. Some of the best conversations I held were during these side meetings.&lt;/div&gt;&lt;h2 style="border-width: 0px; color: #111111; font-family: inherit; font-size: 2em; font-style: inherit; font-weight: normal; margin: 0px 0px 0.75em; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;To Startups&lt;/b&gt;&lt;/h2&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Make your software more accessible to mentors&lt;/b&gt;&lt;br /&gt;I made an effort to use the software of the 25 startups before I showed up at the event. Unfortunately, most of the startups were in private beta. I had to ask for an invite. Since the event was only a day away, I wasn’t able to access most of the sites. Maybe it is my fault that I waited until the last day. However, I feel like the startups could be more proactive and send invitations to mentors. I think Seedcamp can actively participate in this and make sure that every mentor has access to the software the startup has developed prior to the event. The few sites that I was able to use, helped me a lot in forming an opinion.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;No video during the pitch&lt;/b&gt;&lt;br /&gt;Some startups showed a one or two minute video during their pitch. The presenter stopped talking, pointed us to the screen and together we all watched a video. Don’t ever do this. This is a terrible way of pitching. We are there to listen to you, to engage with you, to get amazed by you, to get interested in you. We are not there to watch a video.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Talk to everyone&lt;/b&gt;&lt;br /&gt;Similar to mentors, you should also make a conscious effort to talk to everyone. Go over the bio of the mentors. Start with the ones you think are most interesting. Don’t be shy. Go even talk to other startups. Share experiences.&lt;/div&gt;&lt;h2 style="border-width: 0px; color: #111111; font-family: inherit; font-size: 2em; font-style: inherit; font-weight: normal; margin: 0px 0px 0.75em; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;To Everyone&lt;/b&gt;&lt;/h2&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Follow Up&lt;/b&gt;&lt;br /&gt;Don’t let it all end with the event. Mentors should continue to work with the startups they are most connected with. Try their software and provide feedback, explore business opportunities, help spread the word, be available to be approached by the entrepreneurs and encourage them to do so. Startups should pick the mentors who they think can provide the best input in the long run and stick with them. They should find ways to engage the mentors with their product and company. Simply bring in the mentors to solve actual business problems you have, have meetings, discussion or whatever. If you are doing it by the book, you need an advisory board, remember?&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;img alt=":-)" class="wp-smiley" src="http://gerger.co/yalimslodge/wp-includes/images/smilies/icon_smile.gif" style="border-style: none; border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px; max-height: 12px; max-width: 680px; padding: 0px; vertical-align: baseline;" /&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Provide feedback&lt;/b&gt;&lt;br /&gt;Just because an event is over, it shouldn’t be all forgotten and back to business as usual again. Take the time, provide written feedback to all the participants. The discussions in the meetings will be forgotten but the comments you make in written form will stay. This way they will be more beneficial to past, current and future participants of Seedcamp events.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Enjoy it&lt;/b&gt;&lt;br /&gt;Take it all seriously, prepare well but don’t be uptight, defensive or cocky. Everyone is there with the best intentions. The meetings are only half of the story. The day continues until very late at night. The line between the entrepreneurs and mentors blur after the meetings are over. In the evening, entrepreneurs were giving me trash about my company.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;img alt=":-)" class="wp-smiley" src="http://gerger.co/yalimslodge/wp-includes/images/smilies/icon_smile.gif" style="border-style: none; border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px; max-height: 12px; max-width: 680px; padding: 0px; vertical-align: baseline;" /&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;It was awesome. My final advice is that enjoy the event while you can, seize the moment because it only lasts for one day.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Yalim K. Gerger&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6381177797663583496?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6381177797663583496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6381177797663583496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6381177797663583496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6381177797663583496'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/07/seedcamp-event-guidelines-for-newbies.html' title='Seedcamp Event Guidelines for Newbies'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2100618144373454249</id><published>2011-06-10T08:37:00.003+02:00</published><updated>2011-06-10T08:39:13.764+02:00</updated><title type='text'>Let’s meet at Oracle OpenWorld</title><content type='html'>This year, Formspider team applied to present at the Oracle OpenWorld via Oracle Mix. We submitted the presentation “Forms Modernization: The PL/SQL Way”.&lt;br /&gt;&lt;br /&gt;We believe Oracle Forms modernization is an important topic for many Oracle customers. We would like to share our experience and knowledge in how organizations can protect their Forms and PL/SQL investment. If you are interested in seeing this presentation at Oracle OpenWorld please vote for it on the&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://goo.gl/8ypOj" style="color: #42413c; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;Oracle Suggest-A-Session page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Admittedly, the process to vote is a little tedious. If you don’t have an Oracle account, you have to sign up and then vote for at least three presentations in order for your vote to be valid. However, we promise the presentation will be totally worth your effort. :-)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://goo.gl/8ypOj" style="color: #42413c; margin: 0px; padding: 0px; text-decoration: underline;"&gt;Vote for Forms Modernization: The PL/SQL Way now&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2100618144373454249?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2100618144373454249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2100618144373454249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2100618144373454249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2100618144373454249'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/06/lets-meet-at-oracle-openworld.html' title='Let’s meet at Oracle OpenWorld'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-4411416740562437856</id><published>2011-05-27T23:22:00.000+02:00</published><updated>2011-05-27T23:22:15.354+02:00</updated><title type='text'>JavaScript vs. JavaFX</title><content type='html'>We built the XML Editor for the Formspider IDE in Java, because the original Formspider IDE was a Java Application. When we were preparing the Formspider Online IDE for the Web, we also had to move the XML Editor to the Web. In one of the brilliant moments of my career I told the team “Hey, we have a working editor in Java. Why don’t we convert it to JavaFX and be done with it?” This should be simple right? Right…After months of work, we finally got the editor working in JavaFX. The fact that we converted from Java to JavaFX, did not help as much as we hoped it would.&lt;br /&gt;&lt;br /&gt;We went live with the Formspider Online IDE and started observing user behavior. Something was not right. People were signing up but not really doing anything. A quick investigation revealed that we were having problems with the XML Editor. It was failing for more than 50% of our users. Some people didn’t have Java on their machines, some had the open SDK that did not support JavaFX and some had problems we could not figure out.&lt;br /&gt;&lt;br /&gt;Formspider IDE was not a joyride for the lucky few who was able to run the editor either. On average, a user had to wait about two minutes before the IDE was ready for input. The 1.5 MB jar was downloaded quickly enough but it took ages for the computer to install the jar and getting it ready to run. The security alert that kept popping up was also very annoying from the user’s perspective.The state we were in with the Online IDE was clearly unacceptable.&lt;br /&gt;&lt;br /&gt;JavaScript came to the rescue. We were actually smart enough to sponsor a coding contest for a JavaScript editor while we were working on the JavaFX one. The team of Bilal Gültekin and Bahattin Tozyılmaz were the winners. In the picture below you see Bilal receiving their bounty, a teddy bear filled with $2600 dollars. We are also looking forward to host both Bilal and Bahattin as our interns this summer.&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/-c2RxBzZxgvU/TeAV92xmK8I/AAAAAAAAARs/itXl2OxTgxo/s1600/bilal.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-c2RxBzZxgvU/TeAV92xmK8I/AAAAAAAAARs/itXl2OxTgxo/s320/bilal.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;After the contest was over, Öskan took over the code base for the XML Editor in JavaScript and prepared it for production use. After several weeks of work, the editor was ready for beta testing. However, the problem was so severe that even a partially working editor written in JavaScript was better than a thoroughly tested editor written in JavaFX. So we skipped the beta pretty quickly. We were already annoying pretty much every user, how much worse could we really get?&lt;br /&gt;&lt;br /&gt;After a few quick iterations, we were incredibly happy with the results. Now our new XML Editor written entirely in JavaScript loads instantly and runs for our every user. Most importantly, our users started to engage with the Online IDE. I see them creating panels, text fields and windows everyday.&lt;br /&gt;&lt;br /&gt;If you used the Formspider Online IDE before and you did not have a pleasant experience at all, I apologize and kindly invite you &lt;a href="http://goo.gl/afm5a"&gt;to give it another try&lt;/a&gt;. If this is going to be your first time with the Online IDE, nevermind… &lt;a href="http://goo.gl/afm5a"&gt;It all works just fine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4411416740562437856?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4411416740562437856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4411416740562437856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4411416740562437856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4411416740562437856'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/05/javascript-vs-javafx.html' title='JavaScript vs. JavaFX'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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/-c2RxBzZxgvU/TeAV92xmK8I/AAAAAAAAARs/itXl2OxTgxo/s72-c/bilal.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-55848675638244408</id><published>2011-04-20T13:14:00.001+02:00</published><updated>2011-05-28T17:07:37.837+02:00</updated><title type='text'>Hoşgeldin</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 14px; line-height: 20px;"&gt;Bir stüdyoda kaydettiğim ilk bestem.&lt;/span&gt;&lt;br /&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" height="81" width="100%"&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="src" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F13901161&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700" /&gt;&lt;embed type="application/x-shockwave-flash" width="100%" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F13901161&amp;amp;show_comments=true&amp;amp;auto_play=false&amp;amp;color=ff7700" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 14px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Şarkıyı aşağıdaki linkten indirebilirsiniz.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;a href="http://goo.gl/OSmXq" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #21759b; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;" target="_blank"&gt;http://goo.gl/OSmXq&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Eğer şarkıyı beğendiyseniz, paylaşırsanız çok sevinirim. Yok eğer beğenmediyseniz, yine de paylaşın. Belki arkadaşlarınızın zevki sizinkinden farklıdır.&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;&lt;b style="font-weight: bold;"&gt;Hoşgeldin&lt;/b&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;gerçek mi cesaret mi&lt;br /&gt;yalnızlık mı esaret mi&lt;br /&gt;kemiğe dayandığında&lt;br /&gt;mutsuzluk mu ihanet mi&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;çocuk mu çocukluk mu&lt;br /&gt;oyun mu huysuzluk mu&lt;br /&gt;kemiğe dayandığında&lt;br /&gt;ölüm mü yoksulluk mu&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;gönlümü buldum&lt;br /&gt;orda bir taht kurdum&lt;br /&gt;onu oturttum&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;kalbimde değilsin&lt;br /&gt;kalbime en yakın yerdesin&lt;br /&gt;hoşgeldin&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;korkmak mı sığınak mı&lt;br /&gt;yağmur mu sağanak mı&lt;br /&gt;kemiğe dayandığında&lt;br /&gt;kırmak mı kırılmak mı&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;yollar mı duvarlar mı&lt;br /&gt;sırlar mı anılar mı&lt;br /&gt;kemiğe dayandığında&lt;br /&gt;değişmek mi inkar mı&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;hassas mıyım yoksa hasta mı&lt;br /&gt;sarhoş muyum yoksa bir hoş mu&lt;br /&gt;elime dayandığında&lt;br /&gt;başıboş musun, başın boş mu?&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Söz-Müzik: Yalım K. Gerger&lt;br /&gt;Düzenleme: Hasan Çakırsoy&lt;/div&gt;&lt;/div&gt;&lt;div style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Bana kendimi hep evimde hissettiren Stüdyo Smart’a ve Serdar Kılıç’a sonsuz teşekkürlerle.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-55848675638244408?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/55848675638244408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=55848675638244408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/55848675638244408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/55848675638244408'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/04/hosgeldin.html' title='Hoşgeldin'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-4125586758555324263</id><published>2011-04-18T23:05:00.001+02:00</published><updated>2011-04-18T23:05:15.408+02:00</updated><title type='text'>My First StackExchange Question</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 14px; line-height: 20px; text-align: justify;"&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;I have always wondered why people bother giving advice to other companies. &amp;nbsp;Now I know…&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;I have a product proposal for StackExchange. Let me describe the business problem first:&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;My company has recently launched a product. Obviously, we needed a place to answer user questions. We hate old fashioned forums as much as anybody on this site. So, we wanted to integrate a Q&amp;amp;A site to our domain. We tried a few SO clones, picked one and after some effort it was all up and running.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Our product is new and has only a handful users. However, it is a software product that is used by programmers. Every question about our product is a perfect fit for SO. However, it is not mainstream enough, so nobody would ever ask a question about it on SO.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;In short, my business problem is that my company ended up, installing and maintaining its own Q&amp;amp;A site. We don’t want to do that. This is not our line of business. We don’t care. We just want to take something and plug it in. We want somebody else do all the hard work for us.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;So, this got me thinking…We are not the only company in this situation. There are many small business, start-ups with products out there that fit into one of the SE sites be it software, photography or cooking. Wouldn’t it be nice if SE provided a widget/plugin or whatever, that I could just add to my site and have my own Q&amp;amp;A site for my product? The questions would be tagged with my product name. All SE users could easily login. It would just be a mini-SE site running on the small business web site. The questions would certainly enrich the related SE site, since they would be on topic. Any abuse or low quality input, can also be moderated just like any other stuff on the SE network. Small businesses would not have to hassle with installing and maintaining open source alternatives. Both the start-ups and SE community users would benefit from the exposure on the SE sites. Start-ups could reach the passionate users in the area they are in and the SE users would be informed about new products about a topic they are deeply interested in.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;I think this product/feature would make the Internet a better place. My guess is that SE is already working on something like this.&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Now below this line I am full of my self:&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;If this doesn’t lend me an offer for SE Product Director, nothing will.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;img alt=":-)" class="wp-smiley" src="http://gerger.co/yalimslodge/wp-includes/images/smilies/icon_smile.gif" style="border-style: none; border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px; max-height: 12px; max-width: 680px; padding: 0px; vertical-align: baseline;" /&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;You may follow the conversation on StackOverflow Meta from the URL below:&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;&lt;a href="http://meta.stackoverflow.com/questions/87627/mini-se-plugin-for-small-products" style="border-width: 0px; color: #21759b; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px; padding: 0px; text-decoration: underline; vertical-align: baseline;"&gt;http://meta.stackoverflow.com/questions/87627/mini-se-plugin-for-small-products&lt;/a&gt;&lt;/div&gt;&lt;div style="border-width: 0px; font-family: inherit; font-size: 14px; font-style: inherit; font-weight: inherit; margin: 0px 0px 10px; padding: 0px; vertical-align: baseline;"&gt;Yalım K. Gerger &lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4125586758555324263?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4125586758555324263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4125586758555324263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4125586758555324263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4125586758555324263'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/04/my-first-stackexchange-question.html' title='My First StackExchange Question'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-7620539536583629814</id><published>2011-03-23T21:05:00.000+02:00</published><updated>2011-03-23T21:05:22.444+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='dynamic'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='servlet'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Caching Dynamically Generated Scripts</title><content type='html'>If static JavaScript or CSS files are served from the application server, we take it for granted that they are going to be cached by the browsers. However, dynamically generated content (Javascript and CSS in particular) could also be cached as if it is static and sent from the server only when it is changed. &lt;b&gt;Nevertheless, application servers provide no support for this at all&lt;/b&gt;. So, the responsibility rests on the shoulders of the server-side code which generates dynamic content.&lt;br /&gt;&lt;br /&gt;I looked all over the Internet but was unable to find a solution, so I wrote my own code. It's written for a Java Servlet but the same logic can be applied to other languages too. The servlet below sends a piece of JavaScript to the client that it builds dynamically and adds the necessary headers to the response so that the browser can cache it.&lt;br /&gt;&lt;br /&gt;Here's the code that gets the job done:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;public class TestServlet extends HttpServlet {&lt;br /&gt;    private static final String CONTENT_TYPE = "application/x-javascript";&lt;br /&gt;&lt;br /&gt;    public void init(ServletConfig config) throws ServletException {&lt;br /&gt;        super.init(config);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void doGet(HttpServletRequest request, &lt;br /&gt;                      HttpServletResponse response) throws ServletException, IOException {&lt;br /&gt;        &lt;br /&gt;        Calendar c1 = Calendar.getInstance();&lt;br /&gt;        c1.clear();&lt;br /&gt;        c1.set(2011,2,22,13,12);&lt;br /&gt;        long lastModifiedDate = c1.getTimeInMillis();&lt;br /&gt;        &lt;br /&gt;        response.setContentType(CONTENT_TYPE);&lt;br /&gt;        response.addDateHeader("Last-Modified",lastModifiedDate);&lt;br /&gt;        &lt;br /&gt;        PrintWriter out = response.getWriter();&lt;br /&gt;    &lt;br /&gt;        long lastFetchedDate = request.getDateHeader("If-Modified-Since");&lt;br /&gt;        boolean notModified = false;&lt;br /&gt;        if (lastFetchedDate&amp;gt;-1){&lt;br /&gt;            if (lastModifiedDate&amp;lt;=lastFetchedDate){&lt;br /&gt;                response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);&lt;br /&gt;                notModified = true;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if (!notModified){&lt;br /&gt;            System.out.println("test");&lt;br /&gt;            out.println("var test = {};");&lt;br /&gt;            out.println("test['a']='b';");&lt;br /&gt;            out.println("alert(test['a']);");&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void doPost(HttpServletRequest request, &lt;br /&gt;                       HttpServletResponse response) throws ServletException, IOException {&lt;br /&gt;        doGet(request, response);&lt;br /&gt;    }&lt;br /&gt;}&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;&amp;nbsp;&lt;/pre&gt;To keep the example simple, I used a static date for the last modified date.&lt;br /&gt;&lt;br /&gt;Here is how you can include this servlet in an html document as a javascript file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;    &amp;lt;head&amp;gt;&lt;br /&gt;    &amp;lt;script type="text/javascript" src="http://localhost/test/testservlet"&amp;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;    &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When you run this from an application server, the first time you access the page you will see the message "test" in application server console, meaning that the servlet did the necessary work and generated the JavaScript code. The next time you access the page, the JavaScript will already be cached by the browser. Therefore, even the alert still pops up when the page is accessed, you will not the see message "test" in the server console. Since the dynamically created JavaScript is already cached in the browser and the headers were set up correctly, the server did not bother to generate the code all over again and responded much faster just like it would if the JavaScript was actually in a static file.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;M. Serdar Biçer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-7620539536583629814?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/7620539536583629814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=7620539536583629814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7620539536583629814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7620539536583629814'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/03/caching-dynamically-generated-scripts.html' title='Caching Dynamically Generated Scripts'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-5910460065742533347</id><published>2011-03-22T13:45:00.002+02:00</published><updated>2011-03-25T09:13:36.074+02:00</updated><title type='text'>True Cross Browser Web Applications</title><content type='html'>Having a truly cross browser web application is like being truly happy. The moment you get there, someone is going to bring you up to date and ruin everything. And like happiness, you will never attain it if you chase it. And like happiness, it is a byproduct of devoting yourself to something that you are passionate about.&lt;br /&gt;&lt;br /&gt;Developers tend to believe that the moment they start using a JavaScript library that works across browsers, they are immune to the problem. Nothing can be further from the truth. If you use such a library, this only means that the code inside the library is compatible with many different browsers. It does not automatically follow that any new line of code you will write for your application is going to work the same way across browsers. This is a hugely misunderstood concept. &lt;br /&gt;&lt;br /&gt;With your first line of Javascript or HTML you are in cross browser hell. Let me repeat this. With your first line of Javascript or HTML you are in cross browser hell. Virtually in every project browser compatibility of the application is the responsibility of the development team. Ensuring that web applications work in all the major browser brands and their versions is an  important, time consuming and difficult task. Most teams just give up and let it all flap in the breeze. Even the smallest attempt for browser compatibility crashes and burns with the first update to Firefox or Chrome and the team is back to square one again. I’ve seen IT departments that force their users to use one particular browser to access their applications. This is ridiculous and yet it is happening every day. How can it not happen? There are many nuances that needs to be mastered for true browser compatibility. Development teams are not focused on technical details of browsers and their implementations of JavaScript and HTML. They are focused on implementing business rules in code and delivering applications and rightfully so. That’s what they are supposed to do. They should not be punished because a few industry giants could not get their act together and created the worst standards in the most important platform ever created: the web browser. It is a classic example but I’ve got to repeat it here at the risk of being banal. Can you imagine that some TV sets working with some shows but not with others? Can you imagine watching House M.D. on a Sony but having to switch  to a Samsung to watch Entourage?&lt;br /&gt;&lt;br /&gt;In Formspider, browser compatibility is our responsibility. You can focus on what you are passionate about; building the best health care system, HR software or public finance application. Browser compatibility will be the byproduct of using Formspider. We take care of the platform problems. This is our job. It is what we do everyday. &lt;br /&gt;&lt;br /&gt;Formspider applications are truly happy. It is not just the Formspider JavaScript library that works across browsers. Every application that you develop with Formspider works across browsers by default, because you only code in PL/SQL. Formspider has a very simple intuitive XML notation that helps you design your screens. It eliminates the need to be an HTML/DOM expert. We test Formspider with every major browser out there so that you can focus on your business problems knowing that once you code them all in PL/SQL, they will work on any platform.&lt;br /&gt;&lt;br /&gt;Platform independence was one of the greatest benefits of Oracle Forms. The principle is up and alive in Formspider.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-5910460065742533347?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/5910460065742533347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=5910460065742533347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5910460065742533347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5910460065742533347'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/03/true-cross-browser-web-applications.html' title='True Cross Browser Web Applications'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-83845266043917129</id><published>2011-03-12T17:20:00.002+02:00</published><updated>2011-03-12T17:20:20.955+02:00</updated><title type='text'>Aloha ICSSP 2011</title><content type='html'>We are thrilled to announce that our team member M. Serdar Biçer will present his paper “Defect Prediction Using Social Network Analysis on Issue Repositories” at the International Conference on Software and Systems Process, ICSSP 2011. His work is one of the 18 papers accepted to the conference world wide. We congratulate him for his amazing success. Serdar, enjoy your trip to Hawaii!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-83845266043917129?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/83845266043917129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=83845266043917129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/83845266043917129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/83845266043917129'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/03/aloha-icssp-2011.html' title='Aloha ICSSP 2011'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-4256600455262224124</id><published>2011-02-24T18:34:00.002+02:00</published><updated>2011-02-24T18:34:51.914+02:00</updated><title type='text'>Demos and Videos</title><content type='html'>We are happy to announce that we added a new demo page to our web site where we show off mini applications built with Formspider. Each application highlights something cool about the framework. There are six mini apps already and we will add more every day. You can run the apps and look at the PL/SQL code behind them too. &lt;a href="http://www.theformspider.com/demos.php"&gt;Go to our demo page&lt;/a&gt; and see how we build amazing Web 2.0 apps with just PL/SQL. &lt;br /&gt;&lt;br /&gt;We also revamped our Learning Center. It now includes short videos that will guide you through your first applications with Formspider. &lt;a href="http://theformspider.com/learningcenter/learning-center/videos/"&gt;Watch and see&lt;/a&gt; how incredibly fun and easy it is to build web apps with just PL/SQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4256600455262224124?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4256600455262224124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4256600455262224124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4256600455262224124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4256600455262224124'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/demos-and-videos.html' title='Demos and Videos'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-4326900323145780367</id><published>2011-02-24T10:16:00.000+02:00</published><updated>2011-02-24T10:16:17.788+02:00</updated><title type='text'>Our Story</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span id="internal-source-marker_0.9265198893845081" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;When I founded Gerger, I had enough of management that intervenes instead of making it possible for me to work, company procedures that are written by drones with no heart or even a liver, policies that are specifically designed to kill the buzz around anything that may be remotely enjoyable to work on, office hours that start at dawn and end only when the boss leaves the building at midnight because this is the way he likes it, vacation days as if I am in prison and endless meetings that make me wish to have a seizure so that I can get out.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I decided to throw away everything I’ve been thought about how a company is supposed to be and start building my own the way I dreamed it.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Gerger, there is no management. We are 17 colleagues who work together. We respect each others knowledge and intelligence and are willing to be subordinates when one of us has merits to lead. I cannot think of an instance where I said “Sorry, company policy.” We have no office hours. Anyone can enter the office or leave it at any time they like. We don’t count the days we work, why would we count the days we don’t work? We enjoy our time with friends and family without counting down the clock. Yesterday, we cut a meeting in the middle because some of us felt sleepy. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;That’s not all though. It only gets worse. Every week, we play basketball and soccer together. We play Age of Empires on Tuesdays and Counter on Fridays. We are very very spoiled. We only fly business or first class where available. Sorry, company policy.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Gerger, &amp;nbsp;we hate the commonplace, the banal, the ordinary. The run-of-the-mill has no place here.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Gerger, we treat software as a form of art. We hire the best software artists. The very best. We challenge them, set them free and stay out of their way.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At Gerger, we succeed.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yalım K. Gerger &lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4326900323145780367?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4326900323145780367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4326900323145780367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4326900323145780367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4326900323145780367'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/our-story.html' title='Our Story'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2041044248760310711</id><published>2011-02-23T01:12:00.000+02:00</published><updated>2011-02-23T01:12:23.755+02:00</updated><title type='text'>Aman Hiçbir Şeyden Geri Kalmayayım</title><content type='html'>Bir Tumblr'ım eksikti. Ona da başladık. E hadi bakalım hayırlısı. &lt;a href="http://yalimgerger.tumblr.com/"&gt;http://yalimgerger.tumblr.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2041044248760310711?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2041044248760310711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2041044248760310711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2041044248760310711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2041044248760310711'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/aman-hicbir-seyden-geri-kalmayaym.html' title='Aman Hiçbir Şeyden Geri Kalmayayım'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-1681988700406066159</id><published>2011-02-21T23:18:00.003+02:00</published><updated>2011-02-23T23:59:34.621+02:00</updated><title type='text'>İlk Yarışmacılarımızı Ağırladık</title><content type='html'>Birkaç ay önce Projekent bünyesinde bir yazılım yarışmasına sponsor olmuştuk. Yarışmanın konusu JavaScript ile yazılacak bir XML Editörü idi. Katılacak arkadaşlardan da en önemli isteğimiz, mutlaka arada bir ofisimize uğramaları ve bizden geri besleme almalarıydı. Bunun nedenlerini de açıklamıştık.&lt;br /&gt;&lt;br /&gt;Geçen günlerde çiçeği burnunda ilk yarışmacılarımız teşrif ettiler: Mert ile Mustafa. İkisi de cin gibi maaşallah. Henüz kodu yazmaya başlamamışlar ama kafalarında bayağı iyi bir plan yapmışlar. Önce Serdar’ın masasında başladık sohpete, baktık hararetleniyor, içeri geçtik. Mert aldı eline kalemi, geçti tahtanın başına...Allaaaaah...yazıyor çiziyor. Kırk yıllık yazılımcı gibi toplantıyı sürüklüyor. Annesi görse gurur duyardı. Harikaydı.&lt;br /&gt;&lt;br /&gt;Mustafa da az değil. Arka planda kalıyor, düşünüyor, bütün seçenekleri değerlendiriyor, bize alternatifler sunuyor. Şu olur, bu olmaz diyor. Mert’in bir gözü hep onda. Oluru alınca Mustafa’dan devam ediyor. Şimdiden çok iyi bir takım olmuşlar.&lt;br /&gt;&lt;br /&gt;Fikirler uçuşuyor, heyecan artıyor, sorunlar çıkıyor, herkes bir an susuyor...Allah sıkıştık derken, birden bir çözüm geliyor Mustafa’dan ve proje kurtuluyor...yaşasın devam ediyoruz. Sonuçta hem onlar için hem de bizim için çok zevkli ve faydalı bir toplantı oluyor. Onlar bizim ne istediğimizi çok iyi anladı. Biz de onların soruları sayesinde kafamızda bazı şeyleri daha da netleştirdik.&lt;br /&gt;&lt;br /&gt;Onları uğurladıktan sonra, Öskan’da da, Serdar’da da, bende de aynı intiba. Bu çocuklar yaman. Bunlar yapar.&lt;br /&gt;&lt;br /&gt;İyi ki geldiniz Mert ile Mustafa. Ne iyi ettiniz de bu yarışmaya katıldınız. Size çok teşekkür ederiz. İkinizi de en kısa zamanda tekrar bekliyoruz.&lt;br /&gt;&lt;br /&gt;Eeee diğer yarışmacılar. Nereledesiniz? Twitter’dan mesaj atıyorsunuz, soru soruyorsunuz, takip ediyorsunuz eyvallah...ama bir ofise de gelin yahu. Bir tanışalım, konuşalım. Neler yapmışsınız görelim, bir feedback verelim...&lt;br /&gt;&lt;br /&gt;Bir afferim diyelim.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1681988700406066159?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1681988700406066159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1681988700406066159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1681988700406066159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1681988700406066159'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/ilk-yarsmaclarmz-agrladk.html' title='İlk Yarışmacılarımızı Ağırladık'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-9128125326864075754</id><published>2011-02-17T18:27:00.016+02:00</published><updated>2011-03-10T11:50:39.875+02:00</updated><title type='text'>Google Maps Api v3 Location Search with jQuery Autocomplete Plugin</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;When I needed Google Maps style auto complete in my application, I looked into a lot of JavaScript libraries but I couldn’t find a useful solution. Since I’m new to JQuery, at first I couldn’t realize how it simple all this was. &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;With JQuery auto complete plug-in we can pull data from local or remote sources. In this example , I used &lt;b&gt;google.maps.Geocoder&lt;/b&gt; as the remote data source.&lt;br /&gt;&lt;br /&gt;For those who are not familiar with the term, geocoding is the process of converting addresses like ("1600 Amphitheatre Parkway, Mountain View, CA”) into geographic coordinates (latitude and longitude values). &lt;br /&gt;&lt;br /&gt;There are two different geocode requests in this example:&lt;br /&gt;&lt;br /&gt;1. I used first geocoding request to convert user address into latitude and longitude values,&lt;br /&gt;2. The second request is the &lt;b&gt;Reverse Geocoding&lt;/b&gt;, to convert search results into human readable format.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Reverse Geocoding often returns more than one result. I think it is best to fetch all these results and serve all of them to the user instead of showing only one result.&lt;br /&gt;&lt;br /&gt;After getting search results for a given keyword, the map’s viewport is adjusted to the selected search result using &lt;b&gt;map.fitBounds(bounds)&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Let’s examine the script;&lt;br /&gt;&lt;br /&gt;First initialize the map with basic options;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;var mapOptions = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;zoom : 10,&lt;br /&gt;&amp;nbsp;&amp;nbsp;mapTypeId: google.maps.MapTypeId.ROADMAP,&lt;br /&gt;&amp;nbsp;&amp;nbsp;center: new google.maps.LatLng(41.06000,28.98700)&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var map = new google.maps.Map(document.getElementById("map"),mapOptions);&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Then create a google Geocoder object;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;var geocoder = new google.maps.Geocoder();&lt;div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Bind the auto complete event to the search input box,&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;$(function() { $("#searchbox").autocomplete({ source: function(request, response) {&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;In source event I created a callback function that process the geocoder results;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;pre class="code"&gt;geocoder.geocode( {'address': request.term }, function(results, status) { if (status == google.maps.GeocoderStatus.OK) {&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;My first geocoder request takes address as a paramete, and the callback functions processes the returning result object if geocoder status is OK. Then using the returning location which usually has one string, I prepare a Google Maps &lt;b&gt;LatLng&lt;/b&gt; object to get a list of search results with reverse geocoding;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;var lat = results[0].geometry.location.lat();&lt;br /&gt;var lng = results[0].geometry.location.lng();&lt;br /&gt;var latlng = new google.maps.LatLng(lat, lng);&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;This is the second and the last request to google geocoder with latlng;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;geocoder.geocode({'latLng': latlng}, function(results1, status1) {&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;This request also have a callback function that generates label, value and bounds &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;if (status1 == google.maps.GeocoderStatus.OK) {&lt;br /&gt;if (results1[1]) {&lt;br /&gt;             response($.map(results1, function(loc) {&lt;br /&gt;        return {&lt;br /&gt;         label: loc.formatted_address,&lt;br /&gt;         value: loc.formatted_address,&lt;br /&gt;         bounds: loc.geometry.bounds&lt;br /&gt;}&lt;br /&gt;               }));&lt;br /&gt;          }&lt;br /&gt;    }&lt;br /&gt; });&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Finally, when the user selects an option from search results, to navigate the map to that place, I wrote the following code in the auto complete &lt;b&gt;select &lt;/b&gt;event;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;select: function(event,ui){&lt;br /&gt;var bounds = ui.item.bounds;&lt;br /&gt;  map.fitBounds(bounds);&lt;br /&gt; } &lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Here is the full demonstration of my auto complete example; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="code"&gt;&amp;lt;!DOCTYPE PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"&amp;gt;&amp;lt;/script&amp;gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/&amp;gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;h1&amp;gt;Google Maps Autocomplete Search Sample&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;div align="left"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;input type="text" value="" id="searchbox" style=" width:800px;height:30px; font-size:15px;"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;div align="left" id="map" style="width:800px; height: 600px; margin-top: 10px;"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;var mapOptions = {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp;zoom: 10,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp;mapTypeId: google.maps.MapTypeId.ROADMAP,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp;center: new google.maps.LatLng(41.06000,28.98700)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;var map = new google.maps.Map(document.getElementById("map"),mapOptions);&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;var geocoder = new google.maps.Geocoder();&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;$(function() {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$("#searchbox").autocomplete({&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;source: function(request, response) {&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (geocoder == null){&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;geocoder = new google.maps.Geocoder();&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} &lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;geocoder.geocode( {'address': request.term }, function(results, status) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;if (status == google.maps.GeocoderStatus.OK) {&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;var searchLoc = results[0].geometry.location;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;var lat = results[0].geometry.location.lat();&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;var lng = results[0].geometry.location.lng();&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;var latlng = new google.maps.LatLng(lat, lng);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;var bounds = results[0].geometry.bounds;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;geocoder.geocode({'latLng': latlng}, function(results1, status1) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (status1 == google.maps.GeocoderStatus.OK) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (results1[1]) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp;response($.map(results1, function(loc) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;label&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;: loc.formatted_address,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;value&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;: loc.formatted_address,&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bounds &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;: loc.geometry.bounds&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;},&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;select: function(event,ui){&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;var pos = ui.item.position;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;var lct = ui.item.locType;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;var bounds = ui.item.bounds;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;if (bounds){&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;map.fitBounds(bounds);&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;});&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-_MeHfGensB0/TV1K2s3RokI/AAAAAAAAAN8/CHjRiKKqVFs/s400/mapsautocompsearch.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Aziz Ünsal&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-9128125326864075754?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/9128125326864075754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=9128125326864075754' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9128125326864075754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9128125326864075754'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/google-maps-api-v3-location-search-with.html' title='Google Maps Api v3 Location Search with jQuery Autocomplete Plugin'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://3.bp.blogspot.com/-_MeHfGensB0/TV1K2s3RokI/AAAAAAAAAN8/CHjRiKKqVFs/s72-c/mapsautocompsearch.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-8408667149508676526</id><published>2011-02-17T17:20:00.003+02:00</published><updated>2011-02-17T23:40:13.745+02:00</updated><title type='text'>What Problem Domain Does Formspider Address?</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;br /&gt;&lt;span id="internal-source-marker_0.9207573046442121" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Formspider addresses the same problem that Oracle Forms was built for, some twenty years ago: Enabling PL/SQL Developers build great enterprise applications with just PL/SQL.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;At its height, Forms was great for that. Its only programming language was PL/SQL. The applications built with it ran on any platform. For example, I built applications that run on Windows. To this date, I still don’t know a single Windows API. I wrote in PL/SQL, using Forms PL/SQL API’s and Forms took care of the rest. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Since PL/SQL cannot really run anywhere but in the database, some brilliant engineers at Oracle had to convert all the PL/SQL code I wrote as a teenager, &amp;nbsp;to C, C++ or whatever so that my applications can run in Windows. I still don’t know what they have done. I never needed to know. I never cared. My focus was on implementing business requirements in PL/SQL and deliver results to my clients. Forms took care of the rest. That was the beauty of Oracle Forms. &amp;nbsp;Applications built in Oracle Forms are platform agnostic. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I don’t want to be one of those old guys who tell stories, hell I am only 35, but one day, a new Oracle Forms version came out and whola!. All of our Forms applications were now running in browsers. All the old applications were upgraded to the new version with virtually no refactoring. I even remember a Forms Developer version that had two run buttons: One for running the application on Desktop and one for running it in a browser. The same code base could be deployed in different platforms. This was ten years ago.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Not everything was peachy in Forms. It had a lot of problems. Its application model was outdated. Its layout capabilities were just sad. In the browser it ran as a Java Applet which is just awful, etc...etc..etc...&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However the idea of platform agnostic application development using one programming language across all the application layers was brilliant 20 years ago and it still is. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Formspider is built around these principles. Formspider is a platform agnostic application development tool that uses one programming language across all layers. That programming language is PL/SQL.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In Formspider, we got rid of the shortcomings that prepared Oracle Forms’ demise. We use a modern development model with view and model layers separated. You can design your user interfaces in different layouts. We deploy applications built with Formspider as DHTML/JavaScript applications. They are all 100% AJAX by default.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However, we kept all the beauty of Oracle Forms which made it so successful. PL/SQL Developers can build applications for any platform without knowing the API’s of that particular platform. Today, Formspider deploys Java Desktop and Web 2.0 Applications. Tomorrow, we will deploy to other platforms be it iOS, Mobile Web, Flash or whatever. Our only programming language is PL/SQL across the board. There is no need to learn any other programming language. Developers can spend their energy on solving problems instead of learning new ways to fight the same problems. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We also kept Formspider simple, intuitive and fun. The beauty of a platform is not in how complex it is. Its beauty is in making it possible for developers to create complex things. Formspider is as simple as a pen. The developer writes the story.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;Yalım K. Gerger&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8408667149508676526?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8408667149508676526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8408667149508676526' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8408667149508676526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8408667149508676526'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/what-problem-domain-does-formspider.html' title='What Problem Domain Does Formspider Address?'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6586261238154728033</id><published>2011-02-16T19:38:00.002+02:00</published><updated>2011-02-16T19:38:47.635+02:00</updated><title type='text'>Formspider Available for Local Installation</title><content type='html'>We just made Formspider available for downloading and installing locally. This was important as there was quite a bit of interest in the local installation. The team tested the hell out of the installer but please, please, pretty please let us know if you run into any issues. Giving feedback is incredibly easy. If the installer fails, it will ask your permission to send us the installation log. It collects no personal information and asks for an optional email address to get back to you when the problem is fixed.&lt;br /&gt;&lt;br /&gt;The Installer currently supports Windows only. We are going to support other platforms but in the meantime, if you need Formspider installed to a different OS, contact us at contact@theformpider.com. We’d be happy to guide you through it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6586261238154728033?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6586261238154728033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6586261238154728033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6586261238154728033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6586261238154728033'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/formspider-available-for-local.html' title='Formspider Available for Local Installation'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2924016910136290035</id><published>2011-02-15T15:08:00.002+02:00</published><updated>2011-02-15T17:15:38.924+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PL/SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='wrapping source code'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Wrapping PL/SQL Source Code and a Strange Bug (PLS-00753)</title><content type='html'>&lt;div&gt;&lt;br /&gt;Wrapping process makes PL/SQL source code unreadable. Developers can wrap package specifications, package bodies, functions, procedures, type specifications and type bodies. Unfortunately triggers cannot be wrapped. To wrap the trigger code you need to place your source code to a package or procedure and call it from the trigger.&lt;br /&gt;&lt;br /&gt;There are two ways to wrap PL/SQL source code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Wrapping PL/SQL source code with wrap utility&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Wrap utility takes two parameters. First one (&lt;i&gt;iname&lt;/i&gt;) is the PL/SQL source code file and the second one (&lt;i&gt;oname&lt;/i&gt;) is the output file that will hold the wrapped code.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;wrap iname=example_input_file.sql oname=example_output_file.plb&lt;/pre&gt;&lt;br /&gt;This is an easy way to wrap source code because you do not need to handle DDLs bigger than 32767 bytes. But this way, you need to save DDLs into different files and execute the wrap command frmo the command prompt for each file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Wrapping PL/SQL source code with DBMSL_DDL package&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The DBMS_DDL package contains an overloaded wrap API to wrap PL/SQL source code.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;dbms_ddl.wrap(ddl varchar2, lb pls_integer, ub, pls_integer) return varchar2;&lt;br /&gt;&lt;br /&gt;dbms_ddl.wrap(ddl dbms_sql.varchar2s, lb pls_integer, ub, pls_integer) return dbms_sql.varchar2s;&lt;br /&gt;&lt;br /&gt;dbms_ddl.wrap(ddl dbms_sql.varchar2a, lb pls_integer, ub, pls_integer) return dbms_sql.varchar2a;&lt;/pre&gt;&lt;br /&gt;In this method of wrapping, developers need to handle CLOB values that are bigger than 32767 bytes. They need to convert CLOB values to either &lt;i&gt;dbms_sql.varchar2s&lt;/i&gt; or &lt;i&gt;dbms_sql.varchar2a&lt;/i&gt; format.&lt;br /&gt;&lt;br /&gt;We wrapped all our source code the second way in Oracle 10.0.2.1. We liked the ability ti generate all the encoded scripts automatically in PL/SQL. The encoded scripts run just fine from SQLPlus or similar tool. However, when we run the scripts using JDBC, we have faced a problem. Some packages started to give the following error mesagge:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;PLS-00753: malformed or corrupted wrapped unit&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First, we tried to solve the problem with changing character encoding but this did not help us. Then we started again to investigate the problem and we found a really interesting statement in the following forum thread. &lt;a href="http://kr.forums.oracle.com/forums/thread.jspa?threadID=864095"&gt;site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;“&lt;i&gt;This only happens if the last character of the wrapped code is at the end of a line.&lt;/i&gt;” &lt;br /&gt;&lt;br /&gt;We looked over all our uncompiled packages and verified the problem. Then we found an odd solution to this strange bug. We started to break down the last character of the wrapped code to next line. It does not mess up the wrapped code and works just fine in different oracle 10g versions.&lt;br /&gt;&lt;br /&gt;Here is the function which extracts the DDL of the specified object in &lt;i&gt;dbms_sql.varchar2a&lt;/i&gt; format and then wraps the source code using the &lt;i&gt;dbms_ddl.wrap&lt;/i&gt; utility. We used &lt;i&gt;dbms_sql.varchar2a&lt;/i&gt; due to the length of our object DDLs. At the end, there is a code block which converts &lt;i&gt;dbms_sql.varchar2a&lt;/i&gt; to CLOB. It breaks down the last character of the wrapped code to the next line if the last character of the wrapped code is at the end of the line.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;function extractCodeWrapped(in_objectType_cd varchar2, in_objectName_tx varchar2)&lt;br /&gt;return  clob&lt;br /&gt;is&lt;br /&gt; v_ddl_index_nr number;&lt;br /&gt; v_cur_pos_nr number;&lt;br /&gt; v_next_pos_nr number;&lt;br /&gt; &lt;br /&gt; v_ddl_2a dbms_sql.varchar2a;&lt;br /&gt; v_wrapped_ddl_2a dbms_sql.varchar2a;&lt;br /&gt; &lt;br /&gt; v_wrapped_ddl_cl clob;&lt;br /&gt; &lt;br /&gt; cursor cur_objectDDL is&lt;br /&gt;   select -1 line, 'create or replace'||chr(10) text from dual&lt;br /&gt;   union all&lt;br /&gt;   select line, text&lt;br /&gt;   from user_source&lt;br /&gt;   where type = in_objectType_cd&lt;br /&gt;   and name = in_objectName_tx&lt;br /&gt;   order by line;&lt;br /&gt;   &lt;br /&gt;begin&lt;br /&gt; dbms_lob.createtemporary(v_wrapped_ddl_cl,true);&lt;br /&gt;&lt;br /&gt; -- extract DDL of the object&lt;br /&gt; v_ddl_index_nr := 1;&lt;br /&gt; for rec in cur_objectDDL loop&lt;br /&gt;   v_ddl_2a(v_ddl_index_nr) := rec.text;&lt;br /&gt;   v_ddl_index_nr := v_ddl_index_nr + 1;&lt;br /&gt; end loop;&lt;br /&gt; &lt;br /&gt; -- wrap source code of the object&lt;br /&gt; v_wrapped_ddl_2a := dbms_ddl.wrap(v_ddl_2a,1,v_ddl_2a.count);&lt;br /&gt; &lt;br /&gt; -- Convert dbms_sql.varchar2a to CLOB&lt;br /&gt; for i in 1..v_wrapped_ddl_2a.count loop&lt;br /&gt;   &lt;br /&gt;   -- if it is the last line check the last character. If the last character is&lt;br /&gt;   -- at the end of line, break down it to next line.&lt;br /&gt;   if i = v_wrapped_ddl_2a.count then&lt;br /&gt;     -- find the positions of line feeds (chr(10)) at the line&lt;br /&gt;     v_cur_pos_nr := 0;&lt;br /&gt;     v_next_pos_nr := 0;&lt;br /&gt;     loop&lt;br /&gt;       v_cur_pos_nr := instr(v_wrapped_ddl_2a(i), chr(10), v_cur_pos_nr+1);&lt;br /&gt;       v_next_pos_nr := instr(v_wrapped_ddl_2a(i), chr(10), v_cur_pos_nr+1);&lt;br /&gt;       &lt;br /&gt;       exit when v_cur_pos_nr = 0 or v_next_pos_nr = (length(v_wrapped_ddl_2a(i))-1) &lt;br /&gt;              or v_next_pos_nr = length(v_wrapped_ddl_2a(i));&lt;br /&gt;     end loop;&lt;br /&gt;     -- if the line length is 74, the last character is at the end of line.&lt;br /&gt;     if (length(v_wrapped_ddl_2a(i)) - v_cur_pos_nr) = 74 then&lt;br /&gt;       -- append the line as two lines; first one is until last character and &lt;br /&gt;       -- second one is only last character&lt;br /&gt;       dbms_lob.writeappend(v_wrapped_ddl_cl, v_cur_pos_nr, substr(v_wrapped_ddl_2a(i), 1, v_cur_pos_nr));&lt;br /&gt;       dbms_lob.writeappend(v_wrapped_ddl_cl, 71, substr(v_wrapped_ddl_2a(i), v_cur_pos_nr+1, 71));&lt;br /&gt;       dbms_lob.writeappend(v_wrapped_ddl_cl, 1, chr(10));&lt;br /&gt;       dbms_lob.writeappend(v_wrapped_ddl_cl, 2, substr(v_wrapped_ddl_2a(i), v_cur_pos_nr+72, 1)||chr(10));&lt;br /&gt;     else&lt;br /&gt;       -- otherwise append the line directly&lt;br /&gt;       dbms_lob.writeappend(v_wrapped_ddl_cl, length(v_wrapped_ddl_2a(i)),v_wrapped_ddl_2a(i));&lt;br /&gt;     end if;&lt;br /&gt;   else&lt;br /&gt;     -- if it is not last line append the line directly&lt;br /&gt;     dbms_lob.writeappend(v_wrapped_ddl_cl, length(v_wrapped_ddl_2a(i)),v_wrapped_ddl_2a(i));&lt;br /&gt;   end if;&lt;br /&gt; &lt;br /&gt; end loop;&lt;br /&gt; -- add '/' character end of object wrap&lt;br /&gt; dbms_lob.writeappend(v_wrapped_ddl_cl,3,'/'||chr(10)||chr(10));&lt;br /&gt; &lt;br /&gt; -- return wrapped source code&lt;br /&gt; return v_wrapped_ddl_cl;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;Here is sample code which calls the function:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;declare&lt;br /&gt; v_objectType_cd varchar2(200) := 'PROCEDURE';&lt;br /&gt; v_objectName_tx varchar2(255) := 'TEST_PROCEDURE';&lt;br /&gt; &lt;br /&gt; v_wrapped_ddl_cl clob;&lt;br /&gt;begin&lt;br /&gt; v_wrapped_ddl_cl := extractCodeWrapped(v_objectType_cd, v_objectName_tx);&lt;br /&gt; dbms_output.put_line(v_wrapped_ddl_cl);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;Samet Basaran&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2924016910136290035?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2924016910136290035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2924016910136290035' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2924016910136290035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2924016910136290035'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/wrapping-plsql-source-code-and-strange.html' title='Wrapping PL/SQL Source Code and a Strange Bug (PLS-00753)'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6834882444686079296</id><published>2011-02-15T14:50:00.001+02:00</published><updated>2011-02-15T14:56:48.347+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hierarchical queries with where clause'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle hierarchical queries'/><category scheme='http://www.blogger.com/atom/ns#' term='hierarchical queries'/><category scheme='http://www.blogger.com/atom/ns#' term='connect by start with'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle recursive query'/><category scheme='http://www.blogger.com/atom/ns#' term='connect by'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle recursive queries'/><title type='text'>Using Where Clause with Hierarchical Queries</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span id="internal-source-marker_0.8180575005244464" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Using where clause in hierarchical queries may be confusing. Oracle first evaluates the joins in the query if there are any. Then, next step, selects rows in hierarchical order. Finally, applies remaining where clause conditions. In other words, rows are filtered by where clause after evaluating the hierarchy. Lets show this with an example on HR schema:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SQL&amp;gt; select level, e.employee_id, e.manager_id, e.department_id, e.first_name, e.last_name&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;2 &amp;nbsp;from employees e, departments d, jobs j&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;3 &amp;nbsp;where e.department_id = d.department_id&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;4 &amp;nbsp;and e.job_id = j.job_id&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;5 &amp;nbsp;and d.department_id = 100&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;6 &amp;nbsp;start with e.manager_id is null&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;7 &amp;nbsp;connect by prior e.employee_id = e.manager_id;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LEVEL EMPLOYEE_ID MANAGER_ID DEPARTMENT_ID FIRST_NAME &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LAST_NAME&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;---------- ----------- ---------- ------------- -------------------- -------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;101 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Nancy &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Greenberg&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;109 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Daniel &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Faviet&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;110 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Chen&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;111 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Ismael &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sciarra&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;112 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Jose Manuel &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Urman&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;113 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Luis &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Popp&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;6 rows selected.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As you can see first row begins with level 3.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;However, in my experience, most of the time when I wrote hierarchical queries, I needed the evaluation of the hierarchy to be performed after the where clause. In this case, I recommend inner queries with NO_MERGE hint. Using NO_MERGE hint will prevent Oracle SQL Optimizer to merge the inner query with the hierarchical one. Of course, to prevent merge, developers should be careful about not passing any references from inner query to the outer (hierarchical) one:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;SQL&amp;gt; select level, e2.*&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;2 &amp;nbsp;from (select /*+ NO_MERGE */ e.employee_id, e.manager_id, e.department_id, e.first_name, e.last_name&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;3 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from employees e, departments d, jobs j&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;4 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where e.department_id = d.department_id&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and e.job_id = j.job_id&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;6 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;and d.department_id = 100) e2&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;7 &amp;nbsp;start with e2.employee_id = 108 &amp;nbsp;--I know the root employee of my query&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;8 &amp;nbsp;connect by prior e2.employee_id = e2.manager_id;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LEVEL EMPLOYEE_ID MANAGER_ID DEPARTMENT_ID FIRST_NAME &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LAST_NAME&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;---------- ----------- ---------- ------------- -------------------- -------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;101 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Nancy &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Greenberg&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;109 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Daniel &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Faviet&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;110 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 John &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Chen&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;111 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Ismael &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sciarra&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;112 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Jose Manuel &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Urman&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;113 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;108 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100 Luis &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Popp&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 9pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;6 rows selected.&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Same result except level values. This is because SQL Optimizer first evaluated inner query (joins and other where clause filters) and then evaluated the hierarchy. Furthermore, if you compare SQL plans of the two queries, you will see a full table access for the first one while second one has no full table access.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Uğur Koçak&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6834882444686079296?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6834882444686079296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6834882444686079296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6834882444686079296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6834882444686079296'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/using-where-clause-with-hierarchical.html' title='Using Where Clause with Hierarchical Queries'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6648171032168518842</id><published>2011-02-15T12:08:00.051+02:00</published><updated>2011-02-15T13:23:21.027+02:00</updated><title type='text'>Running ant javac inside Eclipse</title><content type='html'>You may often want to use javac task in your ant build files. In order to execute javac tasks inside Eclipse,&amp;nbsp;you need to do a little bit of work. Below are the steps I follow to get javac executed succesfully. I hope it&amp;nbsp;helps.&lt;br /&gt;&lt;br /&gt;1. Define build.compiler property in your ant build file.&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;project basedir="."  default="compile"  name="Test Builder"&amp;gt;&lt;br /&gt;   &amp;lt;property name="build" location="C:\Users\Administrator\Desktop\build"/&amp;gt;&lt;br /&gt;   &lt;b&gt;&amp;lt;property &amp;nbsp;value="org.eclipse.jdt.core.JDTCompilerAdapter" name="build.compiler"/&amp;gt;&lt;/b&gt;&lt;br /&gt;   &amp;lt;target name="compile" &amp;gt;&lt;br /&gt;     &amp;lt;javac srcdir="." destdir="${build}" target="1.5" source="1.5" debug="true"&amp;gt;&lt;br /&gt;   &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. You should have a file named org.eclipse.jdt.core_{version}.jar located at plugins directory under your&lt;br /&gt;Eclipse distribution. Extract this file into a desired location. You should see "jdtCompilerAdapter.jar"&lt;br /&gt;at the extracted location.&lt;br /&gt;&lt;br /&gt;3. Select Run-&amp;gt;External Tools-&amp;gt;External Tools Configuration from the Eclipse menu.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a- Open the Classpath tab. Click on the Add External Jar button and select the jdtCompilerAdapter.jar file&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;that you obtained from step 2.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mXR0BRmmXI0/TVpMJM1ipTI/AAAAAAAAAN0/8CXLa9QpN-M/s1600/ext_tools_classpath.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="401" src="http://2.bp.blogspot.com/-mXR0BRmmXI0/TVpMJM1ipTI/AAAAAAAAAN0/8CXLa9QpN-M/s640/ext_tools_classpath.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;b- Open the JRE tab. Make sure to check "Run in the same JRE as the workspace" box.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cmYkvkE6YGM/TVpMO14pPII/AAAAAAAAAN4/TtikA3ugjWs/s1600/ext_tools_jre.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="408" src="http://3.bp.blogspot.com/-cmYkvkE6YGM/TVpMO14pPII/AAAAAAAAAN4/TtikA3ugjWs/s640/ext_tools_jre.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6648171032168518842?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6648171032168518842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6648171032168518842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6648171032168518842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6648171032168518842'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/running-ant-javac-inside-eclipse.html' title='Running ant javac inside Eclipse'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://2.bp.blogspot.com/-mXR0BRmmXI0/TVpMJM1ipTI/AAAAAAAAAN0/8CXLa9QpN-M/s72-c/ext_tools_classpath.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-1295916586614067241</id><published>2011-02-14T13:58:00.002+02:00</published><updated>2011-02-14T18:39:46.822+02:00</updated><title type='text'>My ODTUG</title><content type='html'>Tonight I received an email from Mike Riley, president of ODTUG, asking me several questions regarding the ODTUG Kaleidoscope Conference between June 26-30. I have the honor of being one of the presenters in the conference. Below are my answers to his questions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What’s the best thing about Kscope conferences?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Kscope has a very special place in my heart even though this is going to be the first time I will be presenting or even attending. In early 00’s I was just a young developer at Dulcian. Every year around spring time, a breeze of excitement surrounded the company. Paul would gather us in the conference room and we’d start planning his presentation for ODTUG. (We always referred to the conference as ODTUG. Still today, I have no idea when people started calling it Kscope.) It was, (and still is) the conference where Dulcian made its big announcements. The entire company would come together to complete “an important milestone in the company vision” just in time for ODTUG. &lt;br /&gt;“Do you think we can finish this by ODTUG?” &lt;br /&gt;“This feature is important for ODTUG”&lt;br /&gt;“If this doesn’t make it to ODTUG, we are screwed.” &lt;br /&gt;&lt;br /&gt;In my head, I created this imaginary crowd of important mysterious experts, who never called, never emailed, never visited us for 364 days in the year but looked forward to what we have to show on June 26th. I waited for the judgement day to come with incredible tension and worried like crazy that during the five minute demo, these mysterious experts would uncover the bugs I did not fix or discover a weakness in my architecture that I have not seen. That would be the end of me. Sometimes I’d get angry with these mysterious god like experts because they seemed to never care how hard I worked. They were mean and cruel because the smallest bug or the tiniest glitch was enough to ruin an otherwise perfect presentation. I felt like I should be appreciated for my heroic efforts. But what if it all worked? Picturing a marvellous demo was enough to get me out of my depressing mood. I’d fantasize about the mysterious gods heaping praise on me, insisting Paul that they must meet this brilliant young talent. I’d dream that they invite me to the next ODTUG. I’d dream that I speak to them and be accepted as one of them at such a young age. The youngest god ever.  &lt;br /&gt;&lt;br /&gt;Paul disappeared from the face of the earth during ODTUG. I treated every email, every phone call, every instant message from him like a sneak peak to heaven. He was up there talking to gods and sending messages back to me.   &lt;br /&gt;&lt;br /&gt;I interrogated him for every little detail when he came back. I never cared about the pens, the t-shirts or other goodies he brought back. I never took one home. All I cared was the stories.Those I took to the heart. Did he talk to an important Oracle executive? Are they buying into our vision? Is it really happening this time around? How was the presentation? Did the gods like it? What was their response? I asked all these questions and many more only because I could not dare to ask the one question I really wanted to ask: “Did my name come up at all?”&lt;br /&gt;&lt;br /&gt;Years passed. I moved back to Istanbul. I got married. My son was born. I grew up just when I thought I was done with growing up. Along the years I’ve met several ODTUG members. I had the honor of working together with John Jeunnette and David Wendelken. Gods turned into mortals. Mortals turned into colleagues. Colleagues into peers. Peers into friends.&lt;br /&gt;&lt;br /&gt;Still, when that time of the year comes, I can’t help having butterflies in my stomach. Even when I know, it is not a conference of gods but friends. Even when I know it is not the judgement day but a day to share. Even when I don’t pull an all nighter anymore to fix that little bug which will convince Oracle to follow our vision.&lt;br /&gt;&lt;br /&gt;So the best thing about Kscope Mike, is that it makes me have butterflies in my stomach, regardless of whether I am speaking, attending or waiting for someone to come back.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Who do you most look forward to seeing a presentation from at Kscope and why?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the most selfish, egoistic, megalomaniac and narcissistic way that anyone can possibly imagine, I am looking forward to seeing a presentation from myself. I’ve been waiting for this moment since the first day I found out about ODTUG and I have never submitted a paper until this year. You accepted my first abstract.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Your all time favorite Kscope moment is…&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;My all time Kscope moments are the days when Paul came back from the conference to the office with pens, t-shirts and stories.&lt;br /&gt;&lt;br /&gt;I will be presenting “World Class Web Development with PL/SQL” on June 28 at 11:15 AM. I am looking forward to meeting all my friends and being accepted as one.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1295916586614067241?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1295916586614067241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1295916586614067241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1295916586614067241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1295916586614067241'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/my-odtug.html' title='My ODTUG'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-7873094638639512097</id><published>2011-02-11T16:11:00.005+02:00</published><updated>2011-02-14T14:15:39.998+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='limit'/><category scheme='http://www.blogger.com/atom/ns#' term='derived table'/><category scheme='http://www.blogger.com/atom/ns#' term='location'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='order by'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='subquery'/><title type='text'>Query optimization in MySQL with Subqueries</title><content type='html'>Recently I had to fetch data from several tables using ORDER BY and LIMIT statements in MySQL. The problem with LIMIT statement is that it's applied in the last step after all the rows are fetched. I needed to fetch rows that fit in boundaries specified by x1,y1,x2,y2 as well as information about the writer of these entries. Tables used in the process were:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;CREATE TABLE `location` (&lt;br /&gt;  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `name` varchar(255) DEFAULT NULL,&lt;br /&gt;  `lat` double NOT NULL,&lt;br /&gt;  `lng` double NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `idx_latLng` (`lat`,`lng`),&lt;br /&gt;  KEY `idx_lat` (`lat`),&lt;br /&gt;  KEY `idx_lng` (`lng`)&lt;br /&gt;) ENGINE=InnoDB&lt;br /&gt;&lt;br /&gt;CREATE TABLE `user` (&lt;br /&gt;  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `fullName` varchar(255) DEFAULT NULL,&lt;br /&gt;  `gender` varchar(1) DEFAULT NULL,&lt;br /&gt;  `birthdate` date DEFAULT NULL,&lt;br /&gt;  `email` varchar(255) DEFAULT NULL,&lt;br /&gt;  `username` varchar(255) DEFAULT NULL,&lt;br /&gt;  `password` varchar(255) DEFAULT NULL,&lt;br /&gt;  `language` varchar(3) DEFAULT 'en',&lt;br /&gt;  `createdate` datetime NOT NULL,&lt;br /&gt;  `lastaccessdate` datetime NOT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  UNIQUE KEY `email_uk` (`email`),&lt;br /&gt;  UNIQUE KEY `userName_uk` (`username`)&lt;br /&gt;) ENGINE=InnoDB&lt;br /&gt;&lt;br /&gt;CREATE TABLE `entry` (&lt;br /&gt;  `id` int(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;  `content` text NOT NULL,&lt;br /&gt;  `title` varchar(4000) DEFAULT NULL,&lt;br /&gt;  `location` int(11) NOT NULL,&lt;br /&gt;  `user` int(11) NOT NULL,&lt;br /&gt;  `createdate` datetime NOT NULL,&lt;br /&gt;  `lastmodifieddate` datetime DEFAULT NULL,&lt;br /&gt;  PRIMARY KEY (`id`),&lt;br /&gt;  KEY `entry_user_fk` (`user`),&lt;br /&gt;  KEY `entry_location_fk` (`location`),&lt;br /&gt;  KEY `idx_createdate` (`createdate`),&lt;br /&gt;  CONSTRAINT `entry_location_fk` FOREIGN KEY (`location`) REFERENCES `location` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,&lt;br /&gt;  CONSTRAINT `entry_user_fk` FOREIGN KEY (`user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE&lt;br /&gt;) ENGINE=InnoDB&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Location table has ~250 records, entry table has ~13K records, and user table has ~50 records. This is auto-generated test data that we've used for development purposes.&lt;br /&gt;&lt;br /&gt;The initial query was:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;select e.*, u.*, l.*&lt;br /&gt;from entry e, user u, location l&lt;br /&gt;where e.user = u.id and e.location = l.id and ((l.lat between x1 and x2) and (l.lng between y1 and y2))&lt;br /&gt;order by e.id desc&lt;br /&gt;limit 0,10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It took ~1.5 second to complete. It is not very very bad but it must be improved. Then I decided to use location as a derived table:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;select e.*, u.*, l.*&lt;br /&gt;from entry e, user u, (select l2.* from location l2 where (l2.lat between x1 and x2) and (l2.lng between y1 and y2)) l &lt;br /&gt;where e.user = u.id and l.id = e.location&lt;br /&gt;order by e.id desc&lt;br /&gt;limit 0,10&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This last one took ~1.5-2 seconds. The last change clearly didn't help very much!&lt;br /&gt;&lt;br /&gt;I only need 10 rows from thousands so why to join thousands of rows then limit to 10? LIMIT statement can be moved into a derived table too:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;select e.*, u.*, l.*&lt;br /&gt;from (&lt;br /&gt;    select * from e2 &lt;br /&gt;    where e2.location in (select l2.id from location l2 where (l2.lat between x1 and x2) and (l2.lng between y1 and y2))&lt;br /&gt;    order by e2.id desc&lt;br /&gt;    limit 0,10&lt;br /&gt;) e, user u, location l&lt;br /&gt;where e.user = u.id and l.id = e.location&lt;br /&gt;order by e.id desc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The last query took ~0.2 second to complete. Query times were obtained from MySQL profiler. Difference between queries can also be viewed using EXPLAIN statement:&lt;br /&gt;&lt;br /&gt;Query 1:&lt;br /&gt;&lt;pre&gt;+----+-------------+-------+--------+------------------------------------+--------------------+---------+--------------------+------+----------------------------------------------+&lt;br /&gt;| id | select_type | table | type   | possible_keys                      | key                | key_len | ref                | rows | Extra&lt;br /&gt;                             |&lt;br /&gt;+----+-------------+-------+--------+------------------------------------+--------------------+---------+--------------------+------+----------------------------------------------+&lt;br /&gt;|  1 | SIMPLE      | l     | range  | PRIMARY,idx_latLng,idx_lat,idx_lng | idx_latLng         | 16      | NULL               |   68 | Using where; Using temporary; Using filesort |&lt;br /&gt;|  1 | SIMPLE      | e     | ref    | entry_user_fk,entry_location_fk  | entry_location_fk | 4       | test.l.id |  149 |&lt;br /&gt;                             |&lt;br /&gt;|  1 | SIMPLE      | u     | eq_ref | PRIMARY                            | PRIMARY            | 4       | test.e.user     |    1 |&lt;br /&gt;                             |&lt;br /&gt;+----+-------------+-------+--------+------------------------------------+--------------------+---------+--------------------+------+----------------------------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Query 2:&lt;br /&gt;&lt;pre&gt;+----+-------------+------------+--------+-----------------------------------+--------------------+---------+----------------+------+---------------------------------+&lt;br /&gt;| id | select_type | table      | type   | possible_keys                     | key                | key_len | ref            | rows | Extra&lt;br /&gt;                |&lt;br /&gt;+----+-------------+------------+--------+-----------------------------------+--------------------+---------+----------------+------+---------------------------------+&lt;br /&gt;|  1 | PRIMARY     | &lt;derived2&gt; | ALL    | NULL                              | NULL               | NULL    | NULL           |   23 | Using temporary;&lt;br /&gt; Using filesort |&lt;br /&gt;|  1 | PRIMARY     | e          | ref    | entry_user_fk,entry_location_fk | entry_location_fk | 4       | l.id  |  149 |&lt;br /&gt;                |&lt;br /&gt;|  1 | PRIMARY     | u          | eq_ref | PRIMARY                           | PRIMARY            | 4       | test.e.user |    1 |&lt;br /&gt;                |&lt;br /&gt;|  2 | DERIVED     | l2        | ALL    | idx_latLng,idx_lat,idx_lng        | NULL               | NULL    | NULL           |  268 | Using where&lt;br /&gt;                |&lt;br /&gt;+----+-------------+------------+--------+-----------------------------------+--------------------+---------+----------------+------+---------------------------------+&lt;br /&gt;&lt;/derived2&gt;&lt;/pre&gt;&lt;br /&gt;Query 3:&lt;br /&gt;&lt;pre&gt;+----+--------------------+------------+-----------------+------------------------------------+---------+---------+---------------+------+----------------+&lt;br /&gt;| id | select_type        | table      | type            | possible_keys                      | key     | key_len | ref           | rows | Extra&lt;br /&gt;    |&lt;br /&gt;+----+--------------------+------------+-----------------+------------------------------------+---------+---------+---------------+------+----------------+&lt;br /&gt;|  1 | PRIMARY            | &lt;derived2&gt; | ALL             | NULL                               | NULL    | NULL    | NULL          |   10 | Using filesort |&lt;br /&gt;|  1 | PRIMARY            | u          | eq_ref          | PRIMARY                            | PRIMARY | 4       | e.id     |    1 |&lt;br /&gt;    |&lt;br /&gt;|  1 | PRIMARY            | l2        | eq_ref          | PRIMARY                            | PRIMARY | 4       | e.id |    1 |&lt;br /&gt;    |&lt;br /&gt;|  2 | DERIVED            | e2        | index           | NULL                               | PRIMARY | 4       | NULL          |   10 | Using where&lt;br /&gt;    |&lt;br /&gt;|  3 | DEPENDENT SUBQUERY | l          | unique_subquery | PRIMARY,idx_latLng,idx_lat,idx_lng | PRIMARY | 4       | func          |    1 | Using where&lt;br /&gt;    |&lt;br /&gt;+----+--------------------+------------+-----------------+------------------------------------+---------+---------+---------------+------+----------------+&lt;br /&gt;&lt;/pre&gt;M. Serdar Biçer &lt;a href="http://twitter.com/msbicer" target="_blank"&gt;@msbicer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-7873094638639512097?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/7873094638639512097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=7873094638639512097' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7873094638639512097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7873094638639512097'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/query-optimization-in-mysql-with.html' title='Query optimization in MySQL with Subqueries'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-5843133979385282371</id><published>2011-02-10T16:00:00.007+02:00</published><updated>2011-02-10T16:10:42.097+02:00</updated><title type='text'>Why ExtJS?</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span id="internal-source-marker_0.3197501553222537" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;One of the most interesting feedbacks I received from our beta users is the interest they have shown to the fact that we used ExtJS to render Formspider applications in browsers. This is particularly interesting because there is no mention of ExtJS on our web site. So they either recognized the look and feel or they analyzed the Formspider JS Library.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I never would have guessed that us using ExtJS is an interesting thing. However, this is the beauty of sharing your work. You get feedback and perspective which has been nothing short of amazing. So, thank you for looking, trying and commenting. Formspider has been out only a week or so but this has been an incredible experience already.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In order to feed the curious minds, I will try to explain the reason behind why we chose using ExtJS.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;First, let me tell you that we use ExtJS primarily for its UI Components. There are other interesting things that JS libraries do, but we do not use those aspects as much. ExtJS is only a part of our own Formspider JS Library. In some cases, we wrote our own components and layouts. We also wrote JavaScript to build a bridge between our PL/SQL API’s and ExtJS UI Components.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The decision to use ExtJS was made early in the development process, in 2008. We evaluated several available libraries at that time. For each library, we looked at the available UI components, documentation, support, community size etc...The number and quality of UI Components were critical for us. We did not have the time to build our own components. We wrote small test applications with several candidates. I clearly remember going to the &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;Wikipedia page&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; that lists available libraries and looking into each one. I also remember experimenting with YUI, Dojo and SmartClient. Ultimately we chose ExtJS because back in early 2008, in our humble opinion anyway, it was by far the most advanced library by any criteria. JQuery, which is huge right now, was not as big then. I don’t remember why exactly we eliminated it but I suspect it might be because it was lacking some important UI components which is why most frameworks were eliminated. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Looking back, I think using ExtJS was one of the best decisions we ever made. Our experience with the Sencha Team, the community and on a personal note my interactions with Adam Mishcon has been incredible. Back in 2008, ExtJS really stood out from the competition and it still does.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yalım K. Gerger &lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-5843133979385282371?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/5843133979385282371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=5843133979385282371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5843133979385282371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5843133979385282371'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/why-extjs.html' title='Why ExtJS?'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2023916479036038234</id><published>2011-02-07T19:02:00.000+02:00</published><updated>2011-02-07T19:02:17.690+02:00</updated><title type='text'>Formspider vs. APEX</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span id="internal-source-marker_0.09352455101907253" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Today, I got asked the &lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span id="internal-source-marker_0.09352455101907253" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;inevitable &lt;/span&gt;&lt;/span&gt;&lt;span id="internal-source-marker_0.09352455101907253" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;questions by one of our beta users.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Tahoma; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How is Formspider better than APEX? How is it worse?&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;”&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This is my response to him.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I would like to answer your second question first: How is Formspider worse than APEX?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Formspider is worse than APEX in a lot of aspects. Aside from the obvious political clout and marketing power imbalances, there are technical aspects that APEX is clearly better. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;For example, APEX is at version 4.0. We just launched our public beta. APEX is more robust and has more features. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;APEX is developed by Oracle. Formspider is the product of cooperation of two small companies, Dulcian and Gerger. We clearly cannot compete with Oracle in terms of development resources. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;APEX is free. Formspider, even though it is cheap, is not free. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;APEX has a large community around it. We virtually have none.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;There are many tutorials, books, workshops, training courses and what not out there if someone wants to learn APEX. As of today there are 6 (six) tutorials on our web site. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;If you want help in developing your APEX project, consultants will line up for you. With Formspider, it is us or no one. Not a great position to be if you are choosing a development platform for your company. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;To me, it is obvious that any reasonable PL/SQL Developer should be avoiding Formspider like the plague.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Thank God we are not looking for them.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We are looking for PL/SQL Developers who worked with many web frameworks out there but had this little uncomfortable feeling that didn’t go away while using them, developers who searched for an alternative, or even tried to build mini frameworks of their own, attempted to include JavaScript libraries to their applications and wondered why the heck do they have to do all this work, when even ten years ago Oracle Forms let them build great applications with just PL/SQL. We are looking for PL/SQL Developers who want not only their Forms back, but want it better adapted to the needs of our time. We are searching for unreasonable people. We are looking for the crazy, the visionary, the dreamer.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Thank God we are looking for them in the PL/SQL Community.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Now, back to the first question. How is Formspider better? &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I have noticed that you registered to our beta program. Thank you very much. Now that you have the opportunity to try out the framework, I would like to let you find the answer of this question yourself. The entire team is looking forward to your feedback.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Regards. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yalım K. Gerger&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2023916479036038234?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2023916479036038234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2023916479036038234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2023916479036038234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2023916479036038234'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/formspider-vs-apex.html' title='Formspider vs. APEX'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-5458193366142524451</id><published>2011-02-04T13:45:00.002+02:00</published><updated>2011-02-04T23:57:44.338+02:00</updated><title type='text'>Projekent  Yarışması Katılımcılarından Bir Soru</title><content type='html'>Öncelikle iyi günler. Projekentte açtığınız programlama projesi hakkında biraz daha bilgi alabilmek için bu maili yazıyorum.&lt;br /&gt;&lt;br /&gt;Takım arkadaşım ile birlikte istediğiniz xml editörü hakkında düşünceler geliştirmekteyiz şu an. Açıkçası bu yarışma öncesinde ikimiz de XML schema standartı konusunda bilgi sahibi değildik. Daha da kötüsü bu standartın derinliğini yeni fark ediyoruz. Burada size şunu danışma gereği duyduk: Editörün tam bir xsd doğrulama desteği sunması şart mı? Yoksa xsd dosyası sadece auto-complete amaçlı mı kullanılacak?&lt;br /&gt;&lt;br /&gt;Eğer doğrulama editör içinde yapılacaksa, bu doğrulama full-xsd mi olmalı, yoksa bazı eksiklere izin verir miydiniz? Mesela &lt;xs:selector&gt; ve &lt;xs:key&gt; ile gerçekten karışık doğrulamalar yaptırılabiliyor. Bizim için daha da kötü olansa, bu doğrulamaların xpath kullanıyor olması. Düzenlemenin sürdüğü bir dosyada xpath kullanamıyoruz.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Selam,&lt;br /&gt;&lt;br /&gt;Çok iyi bir soru gerçekten. Şimdi bakıyorum da yarışma sayfasındaki yazıda bu konunun altını daha iyi çizebilirmişim. Sadece şunu diyerek geçiştirmişim konuyu:&lt;br /&gt;&lt;br /&gt;“XSD’yi isterseniz Java servleti ile parse edebilirsiniz. “&lt;br /&gt;&lt;br /&gt;Karışıklığa meydan vermemek için sorduğun sorunun kesin ve net cevabını hemen yazmak istiyorum.&lt;br /&gt;&lt;br /&gt;Hiçbir şekilde, kesinlikle, asla, aman ha aman, sakın ha, never ever, XSD parser yazmayın.&lt;br /&gt;&lt;br /&gt;Hiçbir şekilde, kesinlikle, asla, aman ha aman, sakın ha, never ever, XSD parser yazmayın.&lt;br /&gt;&lt;br /&gt;Hiçbir şekilde, kesinlikle, asla, aman ha aman, sakın ha, never ever, XSD parser yazmayın.&lt;br /&gt;&lt;br /&gt;Eğer yazmaya başladıysanız derhal bırakın. Kodu silin. Hard diski yakın.&lt;br /&gt;&lt;br /&gt;Neden diye soracak olursan, bu sorunun cevabını zaten vermişsin. XSD doğrulama, bu yarışmanın amacını aşan, çok karışık ve çok uzun bir iş. Bunlardan daha da önemlisi, hatta çok ama çok ama çooook daha önemlisi XSD doğrulama ve parse etme zaten çözülmüş problemler. Diğer bir deyişle, tekerleği yeniden icat etmeye gerek yok. Java’da bu iş için kullanılan kütüphaneleri bir servlet yardımı ile çağırabilirsin. XSD parse eden JavaScript kütüphaneleri var mı bilmiyorum. Varsa onları da kullanabilirsin.&lt;br /&gt;&lt;br /&gt;Bu projenin ve genel olarak bütün yazılım projelerinin amacı, mevcut bilgi birikimini kullanıp, üzerine kendi katkını ekleyerek henüz yapılmamış olanı yapmaktır. Çorbaya kararında tuz ekme sanatıdır yazılım mühendisliği. Az ekersen tadı olmaz, çok ekersen tadı kaçar.&lt;/xs:key&gt;&lt;/xs:selector&gt;&lt;br /&gt;&lt;br /&gt;&lt;xs:selector&gt;&lt;xs:key&gt;Hepinize başarılar.&amp;nbsp;&lt;/xs:key&gt;&lt;/xs:selector&gt;&lt;br /&gt;&lt;br /&gt;&lt;xs:selector&gt;&lt;xs:key&gt;Yalım K. Gerger &lt;/xs:key&gt;&lt;/xs:selector&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-5458193366142524451?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/5458193366142524451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=5458193366142524451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5458193366142524451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5458193366142524451'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/projekent-yarsmas-katlmclarndan-bir.html' title='Projekent  Yarışması Katılımcılarından Bir Soru'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-8771600686691414226</id><published>2011-02-03T16:04:00.001+02:00</published><updated>2011-02-03T16:21:51.417+02:00</updated><title type='text'>Open Letter to PL/SQL Developers</title><content type='html'>I am happy to announce that we officially launched the public beta program for Formspider, our rich Internet application development framework for PL/SQL Developers. If you are a PL/SQL Developer who is interested in new ideas and technologies, make sure you check out our web site &lt;a href="http://www.theformspider.com/" target="_blank"&gt;http://www.theformspider.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Formspider aims to fill the gap left by the demise of Oracle Forms. Coding in Formspider is 100% PL/SQL. There is no need to know Java or JavaScript. Every application is 100% AJAX by default. Applications built with Formspider run as DHTML/JavaScript applications in the browser. All Formspider applications run in IE, Firefox and Chrome smoothly without any extra effort. It has a cool IDE, charting, component based development... etc...etc...&lt;br /&gt;&lt;br /&gt;I could go on and on. However, none of this matters if our users don’t like what we have built. We will end up with a nice idea that turned out to be a failure. So above all features and functionalities, what matters most today is what you think of Formspider. We are in the beginning of what hopefully is going to be a long journey (we just launched our public beta after all). The faith of the journey is in the hands of our users. If you support us with feedback, ideas, criticism and candid reviews then we will do everything in our power to make you happy and successful.&lt;br /&gt;&lt;br /&gt;We believe PL/SQL deserves a more important role in web development and its potential is not being used well. We believe Oracle Forms was a great product for the challenges of its era and even though the times have changed, the underlying principles of sound application development have not. We believe the PL/SQL community deserves a powerful web framework that is second to none. We believe we are not the only people think that way. We invite you to think together.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8771600686691414226?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8771600686691414226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8771600686691414226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8771600686691414226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8771600686691414226'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/02/open-letter-to-plsql-developers.html' title='Open Letter to PL/SQL Developers'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-376204317588452587</id><published>2011-01-07T14:59:00.001+02:00</published><updated>2011-01-07T15:45:23.917+02:00</updated><title type='text'>Passing function parameters from JavaScript to JavaFX</title><content type='html'>Most of the time, you won't notice a delay while calling JavaFX functions from JavaScript. However, there are times you may have performance issues. Recently, we had such an issue in one of our projects: A JavaScript function was consuming a considerable amount of time. When we looked into the problem, we noticed that we were passing a big JavaScript String array to a JavaFX function as a parameter. Obviously, there was an issue about passing the array object. As an alternative, we concatenated the values in the String array and passed them to JavaFX as a single String object. And it worked! Our application ran much faster after this change.&lt;br /&gt;&lt;br /&gt;I have created a simple JavaFX application for testing purposes. The code has two different functions which take different parameters:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;import javafx.scene.*;&lt;br /&gt;&lt;br /&gt;// This function takes a String array as parameter&lt;br /&gt;function passStringArray(value: String[]){    &lt;br /&gt;        &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// This function takes a String as parameter&lt;br /&gt;function passString(value : String){&lt;br /&gt;    var stringArr = value.split(",");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And I call the JavaFX applet from JavaScript like this:&lt;br /&gt;&lt;pre class="code"&gt;function passStringArray(){&lt;br /&gt;  var stringArr = [];&lt;br /&gt;  //Create a String array of size 5000 for test purpose&lt;br /&gt;  for(i=0; i&lt;5000;i++){&lt;br /&gt;     stringArr.push(i + "");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  var t1 = new Date();  &lt;br /&gt;  var test = document.getElementById("test");  &lt;br /&gt;  //Pass the String array as parameter&lt;br /&gt;  test.script.passStringArray(stringArr);     &lt;br /&gt;  &lt;br /&gt;  //Output the measured time&lt;br /&gt;  document.getElementById("output").innerHTML = "Measured Time: " + (new Date()-t1) + " ms";&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function passString(){ &lt;br /&gt;  var stringArr = [];&lt;br /&gt;  //Create a String array of size 5000 for test purpose&lt;br /&gt;  for(i=0; i&lt;5000;i++){&lt;br /&gt;     stringArr.push(i + "");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  var joinedString = stringArr.join(',');&lt;br /&gt;  var t1 = new Date();&lt;br /&gt;  &lt;br /&gt;  var test = document.getElementById("test"); &lt;br /&gt;  //Pass the String as parameter&lt;br /&gt;  test.script.passString(joinedString);&lt;br /&gt;  &lt;br /&gt;  //Output the measured time&lt;br /&gt;  document.getElementById("output").innerHTML = "Measured Time: " + (new Date()-t1) + " ms";     &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;You can download all the files needed to test the application from &lt;a href="http://www.gergerconsulting.com/blog_files/ParameterPassingTest.zip"&gt;here&lt;/a&gt;. &lt;br /&gt;Follow these steps to test this application:&lt;br /&gt;1. Extract the package you downloaded.&lt;br /&gt;2. Run "Test.html" file in your browser.&lt;br /&gt;3. Click on the "Pass String Array" and "Pass String" buttons to see the performance difference.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yücel Ünlü&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-376204317588452587?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/376204317588452587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=376204317588452587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/376204317588452587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/376204317588452587'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/01/passing-function-parameters-from.html' title='Passing function parameters from JavaScript to JavaFX'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-6411105370505174379</id><published>2011-01-05T16:43:00.000+02:00</published><updated>2011-01-05T16:43:54.753+02:00</updated><title type='text'>Adding CLOB values to XML as CDATA</title><content type='html'>&lt;div&gt;Adding large CLOB values into an XML structure using XMLDOM package in PL/SQL is challenging because XMLDOM methods do not accept CLOB data type. &lt;br /&gt;&lt;br /&gt;The solution is to divide large CLOB values into multiple smaller chunks. The size of each chunk we create is 8000. We are not using the maximum length allowed for VARCHAR2 data type (32767 bytes) because we have a multi-lingual database and some characters are stored in 4 bytes. &lt;br /&gt;We are using CDATA nodes to store these chunks because our CLOB values generally contain data as XML and we don’t want to deal with escape characters. &lt;br /&gt;&lt;br /&gt;The following function takes a CLOB  and an XMLDOM.domNode as parameters and returns an XMLDOM.domNode which contains the CLOB value. If the length of the CLOB is bigger than the defined maximum length (8000 in our case), the method divides the CLOB into several chunks prior including it to the domNode.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;function addValueToXMLNode(in_parent_node xmldom.domNode, in_value_cl CLOB)&lt;br /&gt;return xmldom.domNode&lt;br /&gt;is&lt;br /&gt;  v_offset_nr         number;&lt;br /&gt;  v_left_nr           number;&lt;br /&gt;  v_partNo_nr         number;&lt;br /&gt;  v_buffer_tx         varchar2(32767);&lt;br /&gt;  v_maxdatalength_nr  number := 8000;&lt;br /&gt;  &lt;br /&gt;  v_parent_doc          xmldom.domDocument;&lt;br /&gt;  v_part_node           xmldom.domNode;&lt;br /&gt;  v_bufferedValue_cdata xmldom.DOMCDATASection;&lt;br /&gt;  v_temp_node           xmldom.domNode;&lt;br /&gt;  v_value_node          xmldom.domNode;&lt;br /&gt;  &lt;br /&gt;begin&lt;br /&gt;  -- get the owner document of the parent node&lt;br /&gt;  v_parent_doc := xmldom.getownerdocument(in_parent_node);&lt;br /&gt;    &lt;br /&gt;  -- create a new node named "value" and add it to the parent node &lt;br /&gt;  v_value_node := xmldom.makeNode(xmldom.createelement(v_parent_doc, 'value'));&lt;br /&gt;  v_temp_node:= xmldom.appendchild(in_parent_node, v_value_node);&lt;br /&gt;&lt;br /&gt;  -- get the length of CLOB value&lt;br /&gt;  v_left_nr := dbms_lob.getlength(in_value_cl);&lt;br /&gt;&lt;br /&gt;  -- if CLOB is bigger then the defined maximum value, &lt;br /&gt;  -- divide it, otherwise add it directly to the parent node&lt;br /&gt;  if v_left_nr &gt; v_maxdatalength_nr then&lt;br /&gt;    -- set multi part attribute to Yes&lt;br /&gt;    xmldom.setattribute(xmldom.makeelement(v_value_node), 'multiPart', 'Y');&lt;br /&gt;    &lt;br /&gt;    v_offset_nr := 1;&lt;br /&gt;    v_partNo_nr := 1;&lt;br /&gt;    loop&lt;br /&gt;      exit when v_left_nr &lt;= 0;&lt;br /&gt;    &lt;br /&gt;      if v_left_nr &gt; v_maxdatalength_nr then&lt;br /&gt;        v_buffer_tx := dbms_lob.substr(in_value_cl, v_maxdatalength_nr, v_offset_nr);&lt;br /&gt;        v_left_nr := v_left_nr - v_maxdatalength_nr;&lt;br /&gt;        v_offset_nr := v_offset_nr + v_maxdatalength_nr;&lt;br /&gt;      else&lt;br /&gt;        v_buffer_tx := dbms_lob.substr(in_value_cl, v_left_nr, v_offset_nr);&lt;br /&gt;        v_left_nr := 0;&lt;br /&gt;      end if;&lt;br /&gt;      -- create a node for each chunk and give it a number&lt;br /&gt;      v_part_node := xmldom.makenode(xmldom.createelement(v_parent_doc,'part'));&lt;br /&gt;      xmldom.setattribute(xmldom.makeelement(v_part_node), 'no', v_partNo_nr);&lt;br /&gt;      v_partNo_nr := v_partNo_nr + 1;&lt;br /&gt;      &lt;br /&gt;      -- create a CDATA node with buffered value and add it to the v_part_node&lt;br /&gt;      v_bufferedValue_cdata:=xmldom.createcdatasection(v_parent_doc,v_buffer_tx);&lt;br /&gt;      v_temp_node := xmldom.appendchild(v_part_node, xmldom.makeNode(v_bufferedValue_cdata));&lt;br /&gt;      -- add v_part_node to the value node&lt;br /&gt;      v_temp_node := xmldom.appendchild(v_value_node, v_part_node);&lt;br /&gt;    end loop;&lt;br /&gt;&lt;br /&gt;  else&lt;br /&gt;    -- set multi part attribute to No &lt;br /&gt;    xmldom.setattribute(xmldom.makeelement(v_value_node), 'multiPart', 'N');&lt;br /&gt;    -- create a CDATA node with buffered value and add it to the value node directly&lt;br /&gt;    v_bufferedValue_cdata:=xmldom.createcdatasection(v_parent_doc, to_char(in_value_cl));&lt;br /&gt;    v_temp_node := xmldom.appendchild(v_value_node, xmldom.makeNode(v_bufferedValue_cdata));&lt;br /&gt;  &lt;br /&gt;  end if;&lt;br /&gt;  &lt;br /&gt;  return in_parent_node;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As the next step, we need to extract the chunks from the XML and rebuild the CLOB..&lt;br /&gt;The following function accepts an XMLDOM.domElement as its input parameter, extracts the CLOB inside the domElement and returns it.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;function readValueFromXMLNode(in_parent_node  xmldom.domNode)&lt;br /&gt;return clob&lt;br /&gt;is&lt;br /&gt;  v_value_cl            clob;&lt;br /&gt;  v_multiPart_yn        varchar2(1);&lt;br /&gt;  &lt;br /&gt;  v_parent_doc          xmldom.domDocument;&lt;br /&gt;  v_part_node           xmldom.domNode;&lt;br /&gt;  v_children_nodeList   xmldom.domNodeList;&lt;br /&gt;  v_child_node          xmldom.domNode;&lt;br /&gt;  v_value_node          xmldom.domNode;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;  -- get owner document&lt;br /&gt;  v_parent_doc := xmldom.getownerdocument(in_parent_node);&lt;br /&gt;  &lt;br /&gt;  -- get value node&lt;br /&gt;  v_value_node := xmldom.getfirstchild(in_parent_node);&lt;br /&gt;  -- check if this is multipart value or not&lt;br /&gt;  v_multiPart_yn := xmldom.getAttribute(xmldom.makeelement(v_value_node), bdf_constant.attrmultipart);&lt;br /&gt;  if v_multiPart_yn = 'Y' then&lt;br /&gt;    -- get the list of the nodes that have the parts&lt;br /&gt;    v_children_nodeList := xmldom.getchildnodes(v_value_node);&lt;br /&gt;    -- empty clob value&lt;br /&gt;    v_value_cl := '';&lt;br /&gt;    -- read all values and append to clob&lt;br /&gt;    for index_nr in 0..xmldom.getlength(v_children_nodeList)-1 loop&lt;br /&gt;      v_child_node := xmldom.item(v_children_nodeList, index_nr);&lt;br /&gt;      &lt;br /&gt;      v_part_node := xmldom.getfirstchild(v_child_node);&lt;br /&gt;      v_value_cl := v_value_cl || xmldom.getnodevalue(v_part_node);&lt;br /&gt;    end loop;&lt;br /&gt;  &lt;br /&gt;  else&lt;br /&gt;   -- if it is not multi-part value, get the CDATA node and read the value&lt;br /&gt;    v_child_node := xmldom.getfirstchild(v_value_node);&lt;br /&gt;    v_value_cl := xmldom.getnodevalue(v_child_node);&lt;br /&gt;  end if;&lt;br /&gt;  &lt;br /&gt;  return v_value_cl;&lt;br /&gt;  &lt;br /&gt;end;&lt;/pre&gt;&lt;br /&gt;Here is sample code which calls both functions:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;declare&lt;br /&gt;  v_value_cl      clob;&lt;br /&gt;  v_returned_cl   clob;&lt;br /&gt;  v_parent_doc    xmldom.domDocument;&lt;br /&gt;  v_parent_node   xmldom.domNode;&lt;br /&gt;begin&lt;br /&gt;  -- create new xml document&lt;br /&gt;  v_parent_doc := xmldom.newdomdocument('&lt;parent/&gt;');&lt;br /&gt;  -- get parent noode&lt;br /&gt;  v_parent_node := xmldom.makenode(xmldom.getdocumentelement(v_parent_doc));&lt;br /&gt;  -- create sample clob value&lt;br /&gt;  v_value_cl :=&lt;br /&gt;'&amp;lt;root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sinop/fs_smt/bdf_ide_dev.xsd"&gt;&lt;br /&gt;  &amp;lt;mainframe title="Formspider" width="500" height="500" maximizeOnStartUp="Y" icon="/icons/mainframe/fs.png" resizable="Y" close="Y" minimize="Y" maximize="Y"&amp;gt;&lt;br /&gt;    &amp;lt;events&amp;gt;&lt;br /&gt;      &amp;lt;keyEvents&amp;gt;&amp;lt;/keyEvents&amp;gt;&lt;br /&gt;    &amp;lt;/events&amp;gt;&lt;br /&gt;  &amp;lt;/mainframe&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;';&lt;br /&gt;  -- add value to XML&lt;br /&gt;  v_parent_node := addValueToXMLNode(v_parent_node, v_value_cl);&lt;br /&gt;  -- read value from XML&lt;br /&gt;  v_returned_cl := readValueFromXMLNode(v_parent_node);&lt;br /&gt;  -- compare CLOB values&lt;br /&gt;  if dbms_lob.compare(v_value_cl,v_returned_cl) = 0 then&lt;br /&gt;    dbms_output.put_line('successful');&lt;br /&gt;  end if;&lt;br /&gt;  &lt;br /&gt;end;&lt;/pre&gt;&lt;br /&gt;Samet Basaran&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-6411105370505174379?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/6411105370505174379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=6411105370505174379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6411105370505174379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/6411105370505174379'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2011/01/adding-clob-values-to-xml-as-cdata.html' title='Adding CLOB values to XML as CDATA'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-546638445542721516</id><published>2010-12-31T14:13:00.004+02:00</published><updated>2010-12-31T18:52:42.907+02:00</updated><title type='text'>ProjeKent Yazılım Yarışmasına Neden Sponsor Olduk?</title><content type='html'>&lt;p&gt;Dün akşama doğru aşağıdaki epostayı aldım. ProjeKent kapsamında sponsor olduğumuz yazılım yarışmasına katılmayı düşünen iki değerli arkadaş kafalarındaki tereddütleri bizimle paylaşmışlar. Herşeyden önce birçok insan gibi amaaan bana ne ya diyip geçmedikleri ve canlarını sıkan noktaları bizle paylaştıkları için onlara çok teşekkür ederim.&lt;br /&gt;&lt;br /&gt;Yazdıkları epostayı sizinle paylaşmamın nedeni, benzer düşünceleri aklından geçirmiş, sırf bu yüzden yarışmaya katılmayan başka arkadaşlar da varsa, onların da  kafalarındaki soru işaretlerini kaldırmaya yardımcı olmak ve belki bir ümit yarışmaya katılmaya heveslendirmek.&lt;br /&gt;&lt;br /&gt;Aşağıdaki yazıda tabii ki arkadaşların gerçek isimlerini kullanmadım.  &lt;br /&gt;&lt;br /&gt;Merhaba Gerger Yazılım çalışanları,&lt;br /&gt;&lt;br /&gt;IEEE 'nin düzenlediği Projekent etkinliğindeki projenizle ilgileniyoruz, fakat proje açıklamasını incelediğimizde kafamızı karıştıran bir bölümle karşılaştık.&lt;br /&gt;&lt;br /&gt;“Diğer bir olmazsa olmaz ise kodlama sırasında bizimle temasa geçmeniz. Belirli aralıklarla kodunuzu bize göndermeniz ve bizden geri besleme almanız programınızın başarısı için çok önemli. Eğer bunu yapmazsanız ve sizinle ilk defa final günü karşılaşırsak emeklerinizin boşa gitme olasılığı çok yüksek. Bizimle lütfen Twitter’da @yalimgerger adresinden temasa geçin.”&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Projenin geliştirilmesi kısmında profesyonel olarak arz ve talep uyumunun kontrol edilmesi , kademelerin düzenli bir şekilde geçilmesi tabii ki çok önemli bir konu , ve başarılı bir işin çıkması için bizim de bu konuda aksi bir düşüncemiz yok , fakat bu iletişimlerde kodun müşteri olarak adlandırabileceğimiz "size"  gönderilmesi kısmı açıkçası çok da yarışmaya katılacak bir proje için güvenilir bir yöntem gibi gözükmemekte.&lt;br /&gt;Tüm istenilenleri gerçekleyen bir proje , size göre niçin yarışmanın son günü başarısız olarak addediliyor ? Siz yazılım projelerinizi kurumsal iş hayatınızda bu şekilde mi yürütüyorsunuz ?&lt;br /&gt;&lt;br /&gt;İyi çalışmalar&lt;br /&gt;&lt;br /&gt;Edi ile Büdü&lt;br /&gt;&lt;br /&gt;Sevgili Edi ile Büdü,&lt;br /&gt;&lt;br /&gt;Yazdıklarınız, yarışma ile ilgili bazı noktaları, özellikle de bu yarışmaya neden sponsor olduğumuzu iyi anlatamadığımızı bana fark ettirdi. Bana bu eksikliği giderme fırsatı verdiğiniz için teşekkür ederim.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Biz bu yarışmaya niye sponsor olduk?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sizi tanımak istiyoruz.&lt;/b&gt;&lt;br /&gt;Yazılım ile uğraşıyoruz. Siz yazılım öğreniyorsunuz. Ofisimiz İTÜ Maslak yerleşkesinde. Sizin fakülteden yürüyerek ondört dakika. Yine de birbirimizden hiç haberimiz yok. Biz o kapısına gelince güvenlik görevlisini geçemediğiniz, randevu alınmadan girilemeyen, olur ha girdiğinizde de sizi geldiğinize geleceğinize pişman eden şirketlerden değiliz. Biz sizi merak ediyoruz. Ne yapıyorsunuz, ne ediyorsunuz? Keyifler yerinde mi? Hikayeniz ne? Bilmek istiyoruz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Size öğretmek istiyoruz.&lt;/b&gt;&lt;br /&gt;Geldiğiniz yollardan geri dönüyoruz. O yolun ne kadar sıkıntılı, ne kadar karışık, ne kadar zor ve bir o kadar da zevkli, heyecanlı ve unutulmaz olduğunu biliyoruz. Yolun devamında ne var biliyoruz ve size anlatmak istiyoruz. Bakın burda Serdar abiniz JavaScript’e takla attırıyor. Öskan abiniz artık başka bir boyutta zaten, onu biz de anlamıyoruz. Beraber çalışırsanız, belki birşeyler kaparsınız diye umuyoruz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sizden öğrenmek istiyoruz.&lt;/b&gt;&lt;br /&gt;Aman sakın ha bizi ukala dümbeleği, bir köşe başını tutmuş, geleni geçeni hor gören, kötü insanlar sanmayın. Siz bizden daha zeki, daha yetenekli, daha yaratıcısınız. Sizin canavar gibi, fişek gibi çocuklar olduğunuzu biliyoruz. Bize biraz o enerjinizden, o delikanlılığınızdan verin istiyoruz. “Ya bak gördün mü JavaScript ile ne yapmış çocuk”,  “Ben hiç bilmiyordum bu tekniği vay be”, “Müthiş bir algoritma bu kırk yıl düşünsem aklıma gelmezdi valla helal olsun” demek istiyoruz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sizi takdir etmek istiyoruz.&lt;/b&gt;&lt;br /&gt;Maarifet iltifata tabiidir biliyoruz. Kolay değil bu sınavları kazanıp, buralar gelip, bu işleri yapmak, farkındayız. Ülkemizin, belki de dünyanın kültürü maalesef yermek, cesaretini kırmak, eksiklerini hatırlatmak, haddini bildirmek üzerine kurulu. Biz bunu sevmiyoruz. Biz size hayranız. Bıkmadan usanmadan ne kadar iyi, ne kadar farklı, ne kadar önemli olduğunuzu size hatırlatmak istiyoruz. Yarışmada bir ödül alın da, anneniz sizinle gurur duysun, bütün komşulara anlatsın istiyoruz. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sizle paylaşmak istiyoruz.&lt;/b&gt;&lt;br /&gt;Hayatta güzel ne varsa; bilgi, fikir, tecrübe, başarı, para, sağlık, şarkı, şiir, aşk, börtü böcek. Hepsi paylaştıkça artıyor. Saklayan, gizleyen kaybediyor. Birçok insan, hasis, cimri, art niyetli olduğu için değil, korktuğu için paylaşmıyor. Sömürülmekten, soyulmaktan, pişman olmaktan korkuyor. Belki ağızları yanmıştır, belki ağzı yanan biri öğütlemiştir, bilmiyoruz. Biz korkmayın, bendinize sığmayın taşın istiyoruz. Belki bu yarışma ağzınızda güzel bir tat bırakır, siz de başkalarına paylaşmayı öğütlersiniz diye umuyoruz.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Beraber eğlenmek istiyoruz.&lt;/b&gt;&lt;br /&gt;Biz işimizi çok seviyoruz. Bizim için problem çözmek bir eğlence. Sizin için de öyle olmalı ki, yazılım yarışmasına katılmak istiyorsunuz. Beraber oynayalım istiyoruz. Organizasyona bir espri katması için küçük bir para ödülü de koyduk. Ancak bu ödülün, yılbaşında ailenizle tombala oynarken çinkonun beş lira olmasından bir farkı yok. Zaten yarışma demek bile yanlış aslında. Bir oyun bu. Birinci, ikinci, üçüncü seçmiyoruz. Katılanlara gücümüz yettiğince bir afferim demek istiyoruz.&lt;br /&gt;&lt;br /&gt;Kısacası sevgili Edi ve sevgili Büdü; bu oyun bittikten sonra “ Ya ne iyi etmişiz de katılmışız, seneye olsa da yine katılsak ya çok güzeldi ” demenizi istiyoruz. Biz de “Ya ne iyi ettik de bu işi yaptık. Keşke daha önce yapsaydık. Seneye daha güzel bişi yapalım” demek istiyoruz.&lt;br /&gt;&lt;br /&gt;Daha da kısacası sevgili Edi ve sevgili Büdü: Sizi seviyoruz. En kısa zamanda ofisimize bekliyoruz.&lt;br /&gt;&lt;br /&gt;İyi seneler.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-546638445542721516?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/546638445542721516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=546638445542721516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/546638445542721516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/546638445542721516'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/12/projekent-yazlm-yarsmasna-neden-sponsor.html' title='ProjeKent Yazılım Yarışmasına Neden Sponsor Olduk?'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-1953751642831078956</id><published>2010-12-16T12:37:00.005+02:00</published><updated>2010-12-17T15:07:29.672+02:00</updated><title type='text'>Coding Challenge</title><content type='html'>The IEEE branch in the Istanbul Technical Unitversity (ITU) is organizing an event called &lt;a href="http://www.projekent.org/"&gt;ProjeKent&lt;/a&gt; which aims to connect the students with the R&amp;amp;D companies around the country. To help them achieve their goal, we are sponsoring a coding challenge in the event.&lt;br /&gt;&lt;br /&gt;If you are interested feel free to participate. I don't think the  participation is limited to any group or anything. Their web site is in  Turkish but if you are interested just contact me from Twitter  @yalimgerger and I will do my best to make sure you are in.&lt;br /&gt;&lt;br /&gt;The challenge is to write an XML Editor in JavaScript. Below is a half baked specification of what we need. The Turkish text is right below the English one.&lt;br /&gt;&lt;br /&gt;So the story is that we wrote an XML editor in Java and then, big surprise , we needed to run it over the Web. We didn't really want to throw all that work in Java away and at one of the brilliant(!) moments in my career I said "Why don't we do it with JavaFX?".&amp;nbsp; We got to reuse a lot of the code and I am still trying to convince Yucel to write a blog post about his experience, but overall when all is said and done I think we kind of wish that we did it all in JavaScript and be done with it.&lt;br /&gt;&lt;br /&gt;While we were brainstorming about what we could give ProjeKent as a coding challenge, I think it was Ugur who connected the dots and said, "How about an XML Editor?"&lt;br /&gt;&lt;br /&gt;Bottom line, we really want this to happen. But in order for this XML Editor to be somewhat useful to us, there are a few features it must have which I will list shortly. There are also a few optional features that we'd like to see. You don't have to implement them, but if you have the time to add new stuff, we'd prefer you start with these features.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Must Haves&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;Basically, the editor must be a one page web app i.e. 100% AJAX. No page reloads or anything. You may go back to the server only using AJAX.&lt;br /&gt;&lt;br /&gt;The Editor must be able to work with any XSD and help the user to write XML with Intellisense based on this XSD. You may parse the XSD using a Servlet.&lt;br /&gt;&lt;br /&gt;The Editor must use Intellisense to help users write tags and attributes. I mean, if it doesn't even do that, what is the point?&lt;br /&gt;&lt;a href="https://lh4.googleusercontent.com/4bqltb1m8BXk03o-_uQvcfhewSCzI-uHG37qrVNT0SMwrT9D18UKNzSA3zkw6mt5EETKa6uoBIRozJoda1dUjs2Dm-xfLQmSudpOBqD8BfUy6mYeJQ" imageanchor="1" style="clear: left;"&gt;&lt;img border="0" height="405px;" src="https://lh4.googleusercontent.com/4bqltb1m8BXk03o-_uQvcfhewSCzI-uHG37qrVNT0SMwrT9D18UKNzSA3zkw6mt5EETKa6uoBIRozJoda1dUjs2Dm-xfLQmSudpOBqD8BfUy6mYeJQ" width="376px;" /&gt;&lt;/a&gt;&lt;br /&gt;Since we have naive hopes for actually using the code you will write, the code must be written&amp;amp;designed nicely, with comments and everything.&lt;br /&gt;&lt;br /&gt;If you think using a Javascript library will help you, then you may use one that has a free license. The only paid library you may use is ExtJS (and no we are not going to reimburse you if you buy a license from them).&lt;br /&gt;&lt;br /&gt;You also must contact us during the development of the XML Editor, should you choose to participate. Unless you get periodic feedback from us, you are coding in a vacuum and you will definitely fail. Let me put this another way. If I don't already know who you are before the day we choose the winners, you have already lost. You may contact me from Twitter @yalimgerger.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nice to Haves&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Performance really matters. If I need to go to lunch everytime Intellisense is working you have a problem.&lt;br /&gt;&lt;br /&gt;It would be cool if the closing tag shows up automatically if the user closes the opening tag.&lt;br /&gt;&lt;br /&gt;The more cross-browser support, the better. I'd start with Chrome, FF 2.0 and IE7+.&lt;br /&gt;&lt;br /&gt;Along with a nicely commented and designed code, wouldn't it be nice if you'd provided a document which outlines the design, the features you implemented and at what degree etc... etc...&lt;br /&gt;&lt;br /&gt;Auto indent would also be very nice. Hard to read all these tags written inside each other otherwise.&lt;br /&gt;&lt;br /&gt;That's all for now. Please feel free to contact me @yalimgerger if you have any questions, comments. Follow this blog or @yalimgerger for updates on the subject. Best of luck to all the participants.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Oh one last thing. I almost forgot...As with all the challenges, there is a small reward for the winners. We are going to distribute up to 6000 Turkish Liras (about $4000) among the winners. Let me be precise what I mean by this: If all we receive is useless crap, no one is going to get a dime. But if you rock and everyone else sucks, you will get all the money.&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-color: transparent; margin: 0px;"&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span id="internal-source-marker_0.15564940916374326" style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Merhaba,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yarışma sayfamıza hoşgeldiniz. Bu sayfada İTÜ IEEE Projekent için hazırladığımız yarışmanın detaylarını anlatacağız. Sayfayı okuduktan sonra sormak istediğiniz birşeyler varsa Twitter’da @yalimgerger adresinden bana ulaşabilirisiniz. Hepinize başarılar.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Konu:&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yarışmanın konusu JavaScript ile yazılacak bir XML Editörü. Yazdığı programı beğendiğimiz katılımcılar arasında toplam altı bin liraya kadar ödül dağıtacağız. &amp;nbsp;Bu şu demek; eğer doğru düzgün çalışmayan programlardan başka bişi katılmazsa kimseye kuruş yok. :-) Yok eğer müthiş bir editör yazıp bize küçük dilimizi yutturursanız bütün ödül sizin.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ayrıca şunu da belirteyim. Bu yarışmayı laf ola beri gele açmadık. JavaScript ile yazılmış bir XML editörüne gerçekten ihtiyacımız var. Şu anda bir projemizde JavaFX ile yazılmış bir editör kullanıyoruz ve bunu JavaScript ile yazılmış bir editör ile değiştirmek istiyoruz.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Bu yüzden XML Editörde bazı özelliklere ihtiyacımız var. Bunların hepsini yapmanızı beklemiyoruz ama editörünüze yeni özellikler eklerken bu listeden seçmenizi istiyoruz. Birkaç tane de olmazsa olmaz özellik var tabii. Onları da aşağıda belirttim. Zaten bazı temel özellikler de bulunmazsa yapacağınız XML editörünün herhangi bir text editöründen farkı kalmaz.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;XML Editör’ün olmazsa olmaz özellikleri&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editör one page bir web application olmalı. Diğer bir deyişle 100% AJAX ile çalışmalı. Kullanımı sırasında web sayfası yeniden yüklenmemeli. Sunucuya sadece AJAX ile erişebilirsiniz. &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editör kendisine verilen herhangi bir XSD ile çalışabilmeli. Herhangi bir XSD’yi parse edip intelliSense için kullanabilmeli. XSD’yi isterseniz Java servleti ile parse edebilirsiniz.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Intellisense demişken; editör, kullanıcı tag ve attribute yazmaya başladığında intellisense ile ona şekil 1-A daki gibi yardım etmeli. Olayın bütün esprisi bu zaten.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="https://lh4.googleusercontent.com/4bqltb1m8BXk03o-_uQvcfhewSCzI-uHG37qrVNT0SMwrT9D18UKNzSA3zkw6mt5EETKa6uoBIRozJoda1dUjs2Dm-xfLQmSudpOBqD8BfUy6mYeJQ" imageanchor="1" style="clear: left;"&gt;&lt;img border="0" height="405px;" src="https://lh4.googleusercontent.com/4bqltb1m8BXk03o-_uQvcfhewSCzI-uHG37qrVNT0SMwrT9D18UKNzSA3zkw6mt5EETKa6uoBIRozJoda1dUjs2Dm-xfLQmSudpOBqD8BfUy6mYeJQ" width="376px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Eğer programınız ödüllendirilirse, yazdığınız kod bizim tarafımızdan kullanılacak, bakımı yapılacak, geliştirilmeye devam edilecek, debug edilecek demektir. O yüzden kodunuzun düzenli yazılmış olması, içinde bol bol açıklama olması (ortalama olarak on satır kod yazıp hiçbir açıklama yazmadıysanız bir sorun var diye düşünün) çok önemli.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yukarda da belirttiğim gibi editörü Javascript ile yazmanız gerek. İşinizi kolaylaştıracağını düşünüyorsanız lisans ücreti olmayan Javascript kütüphanelerini kullanabilirsiniz. Lisans ücreti olan kütüphanelerden sadece ExtJS’i kullanabilirsiniz. Diğer ücretli JavaScript kütüphanelerini kullanmayın lütfen.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Diğer bir olmazsa olmaz ise kodlama sırasında bizimle temasa geçmeniz. Belirli aralıklarla kodunuzu bize göndermeniz ve bizden geri besleme almanız programınızın başarısı için çok önemli. &amp;nbsp;Eğer bunu yapmazsanız ve sizinle ilk defa final günü karşılaşırsak emeklerinizin boşa gitme olasılığı çok yüksek. Bizimle lütfen Twitter’da @yalimgerger adresinden temasa geçin. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;XML Editörde olsa çok iyi olacak özellikler&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editörün performansı çok önemli. Intellisense çalışırken uygulama çok duraklıyorsa, olur olmaz takılıyorsa, 10 satırdan büyük XML yazarken hantallaşıyorsa kafadan eksi puanı alırsınız, benden söylemesi.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editör, kullanıcı açılış tagini kapattığında kapanış tagini de otomatik olarak eklerse ne de güzel olur.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Editörünüz ne kadar çok browserda çalışırsa o kadar makbul. Sırf IE8 de çalışıp, Chrome ve Firefox da patlayan editörler bize çok iş çıkaracak demektir. Önceliği IE7+, Chrome ve Firefox 2.0+ ya vermenizi tavsiye ederim.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Kodunuzun içindeki açıklamaların yanında bir de projenizi özetleyen bir döküman verirseniz (hangi kütüphaneler kullanıldı, kod ve akış hakkında genel bilgi ve önemli ayrıntılar, neleri yapabiliyor neleri yapamıyor vs...) yeme de yanında yat.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;İç içe yazılan tagleri auto indent yapan bir editör de hem kullanıcıların hem de bizlerin çok hoşuna gider.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Şimdilik bu kadar. Eğer yeterince açıklayamadığım bir yer varsa veya kafanızda bir soru işareti kalmışsa &amp;nbsp;lütfen Twitter’da @yalimgerger adresinden bana ulaşın.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Herkese başarılar.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Yalım K. Gerger&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1953751642831078956?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1953751642831078956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1953751642831078956' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1953751642831078956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1953751642831078956'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/12/coding-challenge.html' title='Coding Challenge'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-1314646624639786837</id><published>2010-10-28T16:05:00.000+02:00</published><updated>2010-10-28T16:05:06.580+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Installing Oracle 10g R2 Using Oracle Public Yum Repository on 64 Bit Oracle Enterprise Linux</title><content type='html'>&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;There are a lot of documents about installing Oracle database on Linux systems on the Internet. Most of them are quite complex and the remaining ones do not include Oracle Public Yum Repository installation. Below is a concise document that should get the job done.&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;span style="color: black;"&gt;&lt;b&gt;Preinstallation Tasks&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;1. Verify Kernel Version&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To start with, your system must be running kernel version &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;2.6.9-11.EL &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;or later.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To verify whether the required kernel is installed, enter the following command:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# uname -r  &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;or to get more detailed information execute &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# cat /proc/version&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;2. Install Missing Packages&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Additionally,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;the following packages (or later versions) must be already installed in your system:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="code"&gt;binutils-2.15.92.0.2-10.EL4&lt;br /&gt;compat-db-4.1.25-9&lt;br /&gt;control-center-2.8.0-12&lt;br /&gt;gcc-3.4.3-9.EL4&lt;br /&gt;gcc-c++-3.4.3-9.EL4&lt;br /&gt;glibc-2.3.4-2&lt;br /&gt;glibc-common-2.3.4-2&lt;br /&gt;gnome-libs-1.4.1.2.90-44.1&lt;br /&gt;libstdc++-3.4.3-9.EL4&lt;br /&gt;libstdc++-devel-3.4.3-9.EL4&lt;br /&gt;make-3.80-5&lt;br /&gt;pdksh-5.2.14-30&lt;br /&gt;sysstat-5.0.5-1&lt;br /&gt;xscreensaver-4.18-5.rhel4.2&lt;br /&gt;&lt;/pre&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Missing packages can be found in the RPM search sites like &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;&lt;span lang="zxx"&gt;&lt;u&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;http&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;://&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;rpm&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;pbone&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;net&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Frpm.pbone.net%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNFRbL9fVCLIUUaumxMuPiX3V3mtvQ"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, but installing these packages individually may require too much time and effort. The fast alternative to install all the packages is to use Oracle validated RPMs.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;span style="color: black;"&gt;The Oracle validated RPMs automatize the install of the various components required to setup the Oracle database. They install all required packages and also configure a lot of Linux configuration files and create users.&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="color: black;"&gt; There are a few steps you need to take before installing Oracle validated RPMs. &lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Go to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;yum.repos.d&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;folder&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;by typing&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# cd /etc/yum.repos.d&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Execute command&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# wget&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;&lt;span lang="zxx"&gt;&lt;u&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;http&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;://&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;public&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;-&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;yum&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;oracle&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;com&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;/&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;public&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;-&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;yum&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;-&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;el&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;5.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2Fpublic-yum-el5.repo&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNEj3vGn1ycr5YSZuRM_wdyKvcTJkw"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;repo&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Next,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;enable the appropriate repository by editing the yum configuration file. To achieve this, o&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;pen  the yum configuration file in a text editor.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; Locate  the section in the file for the repository you plan to update from,  e.g. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;[el5_u5_base]&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. Change  [el5_u5_base] and  [ol5_u5_base] entries’ &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;enabled&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;  &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;property  from &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;  to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;1.&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;   &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;  &lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The final configuration file should look like something like this:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;[el5_u5_base]&lt;br /&gt;name=Enterprise Linux $releasever U5 - $basearch - base&lt;br /&gt;baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/$basearch/&lt;br /&gt;gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5&lt;br /&gt;gpgcheck=1&lt;br /&gt;&lt;b&gt;enabled=1&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;[ol5_u5_base]&lt;br /&gt;name=Oracle Linux $releasever - U5 - x86_64 - base&lt;br /&gt;baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/5/base/x86_64/&lt;br /&gt;gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5&lt;br /&gt;gpgcheck=1&lt;br /&gt;&lt;b&gt;enabled=1&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Save and exit from the editor.&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Run;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# yum clean all&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To upgrade all recommended packages associated with the Unbreakable Enterprise Kernel, use the following yum command:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;# yum install oracle-linux&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Reboot your system to run the newly installed Unbreakable Enterprise Kernel.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For detailed information about &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Public Yum Server&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;please refer to  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;&lt;span lang="zxx"&gt;&lt;u&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;http&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;://&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;public&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;-&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;yum&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;oracle&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;com&lt;/span&gt;&lt;/a&gt;&lt;a href="http://www.google.com/url?q=http%3A%2F%2Fpublic-yum.oracle.com%2F&amp;amp;sa=D&amp;amp;sntz=1&amp;amp;usg=AFQjCNHcF4eKa0Ypxbl0th4Eiw_XOlktkg"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Next, download the proper version of Oracle validated RPM from &lt;a href="http://www.blogger.com/goog_989167616"&gt;h&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;&lt;span lang="zxx"&gt;&lt;u&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;ttp&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;://&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;oss&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;.&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;oracle&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;.&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;com&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;/&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;el&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;5/&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;oracle&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;-&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://www.blogger.com/goog_989167616"&gt;validated&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;a href="http://oss.oracle.com/el5/oracle-validated/"&gt;/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;. I used oracle-validated-1.0.0-22.el5.x86_64.rpm for EL5 64bit Linux. Select the proper RPM for your Linux distro’s kernel and architecture and run:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;yum install ./oracle-validated-1.0.0-22.el5.x86_64.rpm&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Other than installing required packages, this  command &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;configures required kernel parameters, the&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;/etc/security/limits.conf&lt;b&gt;&amp;nbsp;&lt;/b&gt;file and &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;creates required user and groups.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Go to &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;/etc/sysctl.conf&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; file and do required changes  (just read the instructions in the file, it is easy) and after editing  this file re-run&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;#sysctl-p.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;3. Disable SELinux&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;br /&gt;Due to two internal bugs in the Oracle Database (Bug 6140224, Bug 6079461), SELinux has to be disabled on RHEL/OEL 5 to work with Oracle database 10.2.&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;To permanently disable SELinux go to /etc/selinux/ folder and edit the config file. Change SELINUX = enforcing to permissive or disabled&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;4. Create Directories&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Create the directories in which the Oracle software will be installed:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;# mkdir -p /u01/app/oracle/product/10.1.0/db_1&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Set the ownership:&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;# chown -R oracle.oinstall /u01&lt;/b&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Create oraInventory under /u01/app/oracle&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border-style: none; font-style: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;5. Modify Oracle User's Bash Profile&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Add the following lines to the /home/oracle/.bash_profile file&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE&lt;br /&gt;ORACLE_HOME=$ORACLE_BASE/product/10.2/db_1; export ORACLE_HOME&lt;br /&gt;ORACLE_SID=ORCL; export ORACLE_SID&lt;br /&gt;ORACLE_TERM=xterm; export ORACLE_TERM&lt;br /&gt;PATH=/usr/sbin:$PATH; export PATH&lt;br /&gt;PATH=$ORACLE_HOME/bin:$PATH; export PATH&lt;br /&gt;LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH&lt;br /&gt;CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;This completes the preinstallation tasks.&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;Install the Oracle Database&lt;/b&gt;&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border-bottom-style: none; border-bottom-width: medium; border-color: initial; border-left-style: none; border-left-width: medium; border-right-style: none; border-right-width: medium; border-top-style: none; border-top-width: medium; font-style: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in; text-decoration: none; widows: 2;"&gt;&lt;div style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-weight: normal;"&gt;Download the Oracle database setup and then run:&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;$ gunzip 10201_database_linux_x86_64.cpio.gz&lt;/b&gt;&lt;br /&gt;&lt;b&gt;$ cpio -idmv &amp;lt; 10201_database_linux_x86_64.cpio&lt;/b&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; margin-right: 0.28in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="LEFT" lang="tr-TR" style="border-bottom-style: none; border-bottom-width: medium; border-color: initial; border-left-style: none; border-left-width: medium; border-right-style: none; border-right-width: medium; border-top-style: none; border-top-width: medium; margin-bottom: 0in; orphans: 2; padding-bottom: 0in; padding-left: 0in; padding-right: 0in; padding-top: 0in; widows: 2;"&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Now you are ready to run the installer&lt;br /&gt;Login as the oracle user and run:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;b&gt;# ./runInstaller&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 115%;"&gt;&lt;b&gt;Post Installation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; line-height: 115%;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit; line-height: 115%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;After installing Oracle 10g R2 execute:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;$ lsnrctl&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;LSNRCTL&amp;gt; &lt;b&gt;start&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;LSNRCTL&amp;gt; &lt;b&gt;exit&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;$ sqlplus sys/sys as sysdba&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; font-style: normal; font-weight: normal; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; text-decoration: none; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;SQL&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; startup&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At this point your Oracle database should be up and running.&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;&lt;span style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div align="LEFT" lang="tr-TR" style="border: medium none; line-height: 115%; margin-bottom: 0in; orphans: 2; padding: 0in; widows: 2;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;Aziz Ünsal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1314646624639786837?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1314646624639786837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1314646624639786837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1314646624639786837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1314646624639786837'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/10/installing-oracle-10g-r2-using-oracle.html' title='Installing Oracle 10g R2 Using Oracle Public Yum Repository on 64 Bit Oracle Enterprise Linux'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-7996498845914664658</id><published>2010-10-26T10:21:00.007+02:00</published><updated>2010-10-26T10:36:22.984+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plsql oracle'/><title type='text'>How to get DDL from Oracle dictionary programmatically</title><content type='html'>While you are happily developing PL/SQL with your favorite tool be it TOAD, SQL Navigator or SQL Developer, all of a sudden your boss comes and tells you that you have to extract all stored programs in your Oracle Database Schema and save them to the file system. Since you have 45678457 PL/SQL packages out there you know you have to automate this process. You know Oracle saves these stored programs somewhere, but how do you get them back? As most of the time, Oracle has a built-in solution for this need as well: the &lt;a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_metada.htm"&gt;DBMS_METADATA&lt;/a&gt;. package in the SYS schema.&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;pre class="oac_no_warn" style="font-family: monospace; font-size: 12px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;DBMS_METADATA.GET_DDL (&lt;br /&gt;object_type     IN VARCHAR2,&lt;br /&gt;name            IN VARCHAR2,&lt;br /&gt;schema          IN VARCHAR2 DEFAULT NULL,&lt;br /&gt;version         IN VARCHAR2 DEFAULT 'COMPATIBLE',&lt;br /&gt;model           IN VARCHAR2 DEFAULT 'ORACLE',&lt;br /&gt;transform       IN VARCHAR2 DEFAULT 'DDL')&lt;br /&gt;RETURN CLOB;&lt;/pre&gt;&lt;span style="font-family: Times,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;The function works as advertised but there are some tricks that you might need to know.&lt;br /&gt;&lt;br /&gt;First of all, the resulting DDL script is schema specific. When you extract the DDL of a package named "Package1" in schema HR, the generated DDL starts with;&lt;br /&gt;&lt;pre class="code"&gt;CREATE OR REPLACE PACKAGE "HR"."Package1" .&amp;nbsp;&lt;br /&gt;&lt;/pre&gt;This is not always desired. Here is a small trick that removes schema name,&lt;br /&gt;&lt;pre class="code"&gt;select replace(dbms_metadata.get_ddl('PACKAGE','PACKAGE1'),'"'||user||'"."PACKAGE1"','PACKAGE1') from dual&lt;/pre&gt;Below is a function that removes schema name from DDL scripts;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;CREATE OR REPLACE&lt;br /&gt;FUNCTION GETDDL ( in_object_type_tx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp; VARCHAR2,&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; in_name_tx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IN&amp;nbsp; VARCHAR2&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; ) return clob&amp;nbsp; is&lt;br /&gt;&amp;nbsp; v_username_tx varchar2(255);&lt;br /&gt;&amp;nbsp; v_cl clob;&lt;br /&gt;&amp;nbsp; v_number_nr number;&lt;br /&gt;begin&lt;br /&gt;&amp;nbsp; select user into v_username_tx from dual;&lt;br /&gt;&amp;nbsp; v_cl := dbms_metadata.get_ddl(in_object_type_tx,in_name_tx,v_username_tx);&lt;br /&gt;&amp;nbsp; -- remove schema name...&lt;br /&gt;&amp;nbsp; v_cl := replace(v_cl,upper('"'||v_username_tx||'"."'||in_name_tx||'"'),upper(in_name_tx));&lt;br /&gt;&amp;nbsp; return v_cl;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;Another trick that you should remember is that, Oracle stores all object types and object names in upper case. If you do not use upper case you will get an error even though object name you provide seems correct.This tip may seem obvious to PL/SQL Developers but not so much if you are primarily a Java Developer who happens to maintain some PL/SQL code.&lt;br /&gt;&lt;br /&gt;Final advice is about the object_type input parameter of the GET_DDL function. As you can guess, the valid values for this input parameter are the object types that are available in Oracle. The most commonly used ones are; &lt;br /&gt;&lt;blockquote&gt;FUNCTION&lt;br /&gt;INDEX&lt;br /&gt;PACKAGE&lt;br /&gt;PACKAGE_BODY&lt;br /&gt;PROCEDURE&lt;br /&gt;SEQUENCE&lt;br /&gt;TABLE&lt;br /&gt;TRIGGER&lt;br /&gt;TYPE&lt;br /&gt;VIEW&lt;/blockquote&gt;&lt;br /&gt;Well, the problem is, when you extract 'PACKAGE', resulting DDL&amp;nbsp; includes the package specification and the package body. However, if you need to extract only the package specification, the types above will not get the job done.&lt;br /&gt;&lt;br /&gt;There is another object type that is not well documented; 'PACKAGE_SPEC'. If you need to extract only Package specification, you should use 'PACKAGE_SPEC' as object type.&lt;br /&gt;&lt;br /&gt;Serkan Kasapbaşı&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-7996498845914664658?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/7996498845914664658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=7996498845914664658' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7996498845914664658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/7996498845914664658'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/10/how-to-get-ddl-from-oracle-dictionary.html' title='How to get DDL from Oracle dictionary programmatically'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-1943322431287782466</id><published>2010-10-21T14:00:00.007+02:00</published><updated>2011-02-16T15:47:27.771+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript MaskFormatter formatmask FormattedTextField'/><title type='text'>FormattedTextField (with MaskFormatter) on Javascript</title><content type='html'>While working on the &lt;a href="http://www.theformspider.com" target="_blank"&gt;Formspider&lt;/a&gt; framework (which has both Java and JavaScript renderers), we needed to implement a FormattedTextField component. It was easy to implement on Java side by using JFormattedTextField with a MaskFormatter. For JavaScript renderer we implemented a new MaskFormatter class as similar as possible to java.&lt;br /&gt;&lt;br /&gt;Here is the source code that also includes an example:&lt;br /&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/JavascriptMaskFormatter.rar"&gt; JavascriptMaskFormatter.rar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In &lt;i&gt;handlers.js&lt;/i&gt;, you can see event handlers for key inputs (including navigation keys), paste operation and validation on blur.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;(###) ###-##-##&lt;/b&gt;&lt;/i&gt; mask is used in the example. Available masks are { &lt;b&gt;&lt;i&gt;# U L A ? * H&lt;/i&gt;&lt;/b&gt; }. See &lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/text/MaskFormatter.html" target="_blank"&gt;Java MaskFormatter page&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;Tested on IE8, FF3 and Chrome6.&lt;br /&gt;&lt;br /&gt;Öskan Şavlı&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1943322431287782466?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1943322431287782466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1943322431287782466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1943322431287782466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1943322431287782466'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/10/formattedtextfield-with-maskformatter.html' title='FormattedTextField (with MaskFormatter) on Javascript'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-8152740336226791961</id><published>2010-09-16T13:20:00.007+03:00</published><updated>2010-09-17T12:03:46.405+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plsql'/><category scheme='http://www.blogger.com/atom/ns#' term='getElementsByTagName'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Be Careful When Using xmlDom.getElementsByTagName</title><content type='html'>&lt;div&gt;If you are working with PL/SQL XML DOM API, searching for elements using xmldom.getElementsByTagName may dramatically affect the performance of your code, especially if you are dealing with big XML Documents. Instead of searching for the same element over and over again, you should cache the node returned by xmldom.getElementsByTagName API and use the cached reference in subsequent DOM operations. &lt;br /&gt;&lt;br /&gt;In the code below, new elements are added to an XML Document. We get the parent node with  xmldom.getElementsByTagName API. In the first example, we get the parent node each time when a new node is added. The code executes in 0.27 seconds. In the second example, we find the parent node only once and reuse it. The same operation now takes only 0.05 seconds.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/test_xml.sql"&gt;package test_xml&lt;/a&gt;&lt;br /&gt;&lt;pre class="code"&gt;exec test_xml.initxml;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;select test_xml.getxmltype from dual&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- add new action elements (slow way)&lt;br /&gt;declare&lt;br /&gt;  v_doc_xml xmldom.domdocument;&lt;br /&gt;  &lt;br /&gt;  v_newActionElement_xml xmldom.domelement;&lt;br /&gt;  v_newActionNode_xml    xmldom.domnode;&lt;br /&gt;  &lt;br /&gt;  v_newActionCount_nr number := 1000;&lt;br /&gt;begin&lt;br /&gt;  v_doc_xml := test_xml.getxml;&lt;br /&gt;  &lt;br /&gt;  for i in 1..v_newActionCount_nr loop&lt;br /&gt;    v_newActionElement_xml := xmldom.createelement(v_doc_xml, 'action');&lt;br /&gt;    xmldom.setAttribute(v_newActionElement_xml, 'atrib1', 'a');&lt;br /&gt;    -- find actions node using xmldom.getElementsByTagName&lt;br /&gt;    -- it is executed 1000 times&lt;br /&gt;    v_newActionNode_xml := xmldom.appendchild(&lt;span style="background-color: #FFFF00"&gt;xmlDom.item(xmldom.getelementsbytagname(v_doc_xml, 'actions'),0)&lt;/span&gt;,&lt;br /&gt;                                              xmldom.makeNode(v_newActionElement_xml));&lt;br /&gt;  end loop;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;-- add new action elements (fast way)&lt;br /&gt;declare&lt;br /&gt;  v_doc_xml xmldom.domdocument;&lt;br /&gt;  v_actionsnode_xml xmldom.domnode;&lt;br /&gt;  &lt;br /&gt;  v_newActionElement_xml xmldom.domelement;&lt;br /&gt;  v_newActionNode_xml    xmldom.domnode;&lt;br /&gt;  &lt;br /&gt;  v_newActionCount_nr number := 1000;  ---TODO bu degiskenin ismini degistir&lt;br /&gt;begin&lt;br /&gt;  v_doc_xml := test_xml.getxml;&lt;br /&gt;  &lt;br /&gt;  -- find actions node using xmldom.getElementsByTagName&lt;br /&gt;  -- it is executed once only&lt;br /&gt;  &lt;span style="background-color: #FFFF00"&gt;v_actionsnode_xml := xmlDom.item(xmldom.getelementsbytagname(v_doc_xml, 'actions'),0);&lt;/span&gt;&lt;br /&gt;  for i in 1..v_newActionCount_nr loop&lt;br /&gt;    v_newActionElement_xml := xmldom.createelement(v_doc_xml, 'action');&lt;br /&gt;    xmldom.setAttribute(v_newActionElement_xml, 'atrib2', 'b');&lt;br /&gt;    v_newActionNode_xml := xmldom.appendchild(&lt;span style="background-color: #FFFF00"&gt;v_actionsnode_xml&lt;/span&gt;, xmldom.makeNode(v_newActionElement_xml));&lt;br /&gt;  end loop;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;select test_xml.getxmltype from dual&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Uğur Koçak&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-8152740336226791961?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/8152740336226791961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=8152740336226791961' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8152740336226791961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/8152740336226791961'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/09/be-careful-when-using.html' title='Be Careful When Using xmlDom.getElementsByTagName'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-5895437435323509640</id><published>2010-08-16T09:35:00.001+02:00</published><updated>2010-08-16T09:36:15.484+02:00</updated><title type='text'>Using Code Optimization Software to reduce the size of JavaFX Applications</title><content type='html'>You may increase the efficiency of your Java applications by applying some optimization methods on the Java byte-code. Shrinking and obfuscation are commonly used for this purpose. Shrinking is the process of removing unused classes, methods and fields, resulting in the processed byte-code having smaller size. Obfuscation is primarily used to make the code harder to debug and reverse-engineer. As an additional feature, obfuscation also reduces the size of the byte-code, since this process replaces the identifers in class files with shorter ones.&lt;br /&gt;&lt;br /&gt;Reduction in the size of byte-code often implies an improvement in load time. Applet developers could especially benefit from such optimizations, since the transfer of compiled code accross a network is an important bottleneck. &lt;br /&gt;&lt;br /&gt;In this article, I will show the use of optimization methods on a sample JavaFX application. I will use ProGuard 4.5 as the optimization tool. I choosed this tool, because it is available under the GPL free licence, easy to use and has a few more additional features than the other options out there. For more information about ProGuard, please see &lt;a href="http://proguard.sourceforge.net/"&gt;http://proguard.sourceforge.net/&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Here is the JavaFX code:&lt;br /&gt;&lt;pre class="code"&gt;package test;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javafx.stage.Stage;&lt;br /&gt;import javafx.scene.Scene;&lt;br /&gt;import javafx.scene.text.Text;&lt;br /&gt;import javafx.scene.text.Font;&lt;br /&gt;import java.applet.Applet;&lt;br /&gt;import javafx.scene.layout.VBox;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Concat;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Cvs;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Delete;&lt;br /&gt;import org.apache.tools.ant.taskdefs.GZip;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Length;&lt;br /&gt;import org.apache.tools.ant.taskdefs.Move;&lt;br /&gt;import org.apache.tools.ant.taskdefs.SendEmail;&lt;br /&gt;import org.apache.tools.ant.types.resources.selectors.Date;&lt;br /&gt;&lt;br /&gt;// Create some random objects which reference the Ant.jar&lt;br /&gt;var objList = new java.util.ArrayList();&lt;br /&gt;objList.add(new Concat());&lt;br /&gt;objList.add(new Move());&lt;br /&gt;objList.add(new Cvs());&lt;br /&gt;objList.add(new Delete());&lt;br /&gt;objList.add(new GZip());&lt;br /&gt;objList.add(new Length());&lt;br /&gt;objList.add(new SendEmail());&lt;br /&gt;objList.add(new Date());&lt;br /&gt;&lt;br /&gt;for(obj in objList){&lt;br /&gt;println(obj);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var startTime = FX.getArgument("startTime");&lt;br /&gt;var loadTime = 0.0;&lt;br /&gt;&lt;br /&gt;try { &lt;br /&gt;var endTime = java.lang.System.currentTimeMillis();&lt;br /&gt;var startTimeL = Long.parseLong(startTime.toString());&lt;br /&gt;loadTime = (endTime - startTimeL);&lt;br /&gt;} catch (e : java.lang.Exception) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Stage {&lt;br /&gt;scene: Scene {&lt;br /&gt;width: 400&lt;br /&gt;height: 250 &lt;br /&gt;content: [&lt;br /&gt;Text { content: "Load Time: {loadTime} ms"&lt;br /&gt;y: 150 x: 100 font: Font { size: 25 } }&lt;br /&gt;]&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The only task this code carries out is to create some random objects referencing the &lt;a href="http://ant.apache.org/"&gt;Ant library&lt;/a&gt;. This may not mean much for an applet, but the purpose of this example is to demonstrate the difference between the load times of optimized and non-optimized byte code. Now, since we have references to ant.jar file from JavaFX code, we may expect a faster loading time after making some optimizations on ant.jar. Here are the steps to follow:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the ProGuard distribution and extract it to a location on your computer.&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Run proguardgui.bat which resides in ${PROGUARD_HOME}\bin directory. This will open ProGuard in graphical mode. (When you click the buttons in the menu on the left side, appropriate pages will be opened to allow you make configurations.)&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Input/Output configuration: As input, we need to add the ant.jar file, since this is the one we want to process. We also need to specify the output path to which the ProGuard will generate the final jar. In the libraries section, ProGuard allows us to specify referenced libraries. Java runtime library is added in this section by default, so we don't need to make further changes here.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_aPCqcqMGbCc/TGJYQvZLSvI/AAAAAAAAANA/wv3syuebAy8/s1600/input_output.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="417" ox="true" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/TGJYQvZLSvI/AAAAAAAAANA/wv3syuebAy8/s640/input_output.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Shrinking configuration: We may specify which classes to shrink or keep at this page. In our case, we should keep the classes that is referenced from JavaFX. Down at the page, the section titled “Keep additional classes and class members” allows us to do that.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/TGJacK-wJLI/AAAAAAAAANI/ymTXiMlwHLg/s1600/shrinking.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="579" ox="true" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/TGJacK-wJLI/AAAAAAAAANI/ymTXiMlwHLg/s640/shrinking.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Obfuscation configuration: Similar to the shrinking step, we should keep the JavaFX referenced classes from being obfuscated.&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;I did not make any changes in Optimization Page. Finally, I had to check “Ignore warnings about possibly erronous input” box in Information Page, since ProGuard could not produce the output jar without this option checked. In our example, this change does not cause any problems, however you should be careful with this option when you are working on your own projects.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_aPCqcqMGbCc/TGJavBhOoQI/AAAAAAAAANQ/YRzF38HUWoE/s1600/information.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="466" ox="true" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/TGJavBhOoQI/AAAAAAAAANQ/YRzF38HUWoE/s640/information.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Now that we made the necessary configurations, we are ready to process the file. Clicking on the Process button on the Process page will produce the output jar for us.&lt;/li&gt;&lt;/ol&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Let's compare the size's of the original (input) ant.jar file, and the processed (output) ant.jar file:&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Original:&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.476 KB&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Processed:&lt;/strong&gt; 300 KB&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;As you can see, there is a significant reduction in the size of jar file. &lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;You can download the source code and binaries from &lt;a href="http://www.gergerconsulting.com/blog_files/OptimizationExample.zip"&gt;here&lt;/a&gt;.&amp;nbsp;When you extract the downloaded package, you &amp;nbsp;will see two folders named as &lt;strong&gt;optimized_test&lt;/strong&gt; and &lt;strong&gt;nonoptimized_test&lt;/strong&gt;. You can compare the load times by opening Main.html files in these folders. Please note that, you should clear the Java cache between consecutive executions of the JavaFX application. Otherwise, the results will not be healthy. &lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;Below are my results of load time comparison :&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="2" style="border-bottom: black 1px solid; border-collapse: collapse; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;Internet Explorer 8.0&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;Google Chrome 5.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;Non-Optimized&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;1045 ms&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;1250 ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;Optimized&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;776 ms&lt;/td&gt;&lt;td style="border-bottom: black 1px solid; border-left: black 1px solid; border-right: black 1px solid; border-top: black 1px solid;"&gt;958 ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;My system properties are: &lt;br /&gt;Processor: Intel Core 2 Duo T9550 2.67GHz &lt;br /&gt;Operating System: Windows 7 Ultimate 32 bit&lt;br /&gt;Memory: 3 GB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yücel Ünlü&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-5895437435323509640?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/5895437435323509640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=5895437435323509640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5895437435323509640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/5895437435323509640'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/08/using-code-optimization-software-to.html' title='Using Code Optimization Software to reduce the size of JavaFX Applications'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://2.bp.blogspot.com/_aPCqcqMGbCc/TGJYQvZLSvI/AAAAAAAAANA/wv3syuebAy8/s72-c/input_output.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-4923509829440166106</id><published>2010-08-11T10:16:00.002+02:00</published><updated>2010-08-11T10:17:43.845+02:00</updated><title type='text'>Loading JavaFX Application Resources</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;As you might already know, JavaFX allows you to use your existing Swing components in your applets. All you have to do is to add a few lines of JavaFX code. However, you may run into unexpected problems because of Java Web Start security model. We had such an issue in one of our projects, when we tried to transform a custom swing component into a JavaFX widget. The problem was that the resources such as button icons were not being loaded correctly. When I investigated the code, I noticed that I was using ClassLoader.getSystemClassLoader calls to load resources. However, Java Web Start uses a user-level classloader to load the application resources instead of the system classloader. I got rid of the problem by replacing ClassLoader.getSystemClassLoader calls with this.getClass().getClassLoader().&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;You may find more information about this issue at &lt;a href="http://download.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/faq.html#211"&gt;http://download.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/faq.html#211&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I hope this tip saves some time for you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yücel Ünlü&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-4923509829440166106?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/4923509829440166106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=4923509829440166106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4923509829440166106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/4923509829440166106'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/08/loading-javafx-application-resources.html' title='Loading JavaFX Application Resources'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-2975567986143247843</id><published>2010-07-26T10:32:00.000+03:00</published><updated>2010-07-26T10:32:06.929+03:00</updated><title type='text'>Team Coding Installation for Oracle PL/SQL</title><content type='html'>&lt;div style="text-align: justify;"&gt;If you write a lot of PL/SQL code, you must have thought of it at least once. It is probably when your teammate accidentally overwrote the same package that you saved seconds ago. Yes, I am talking about Team Coding.&lt;br /&gt;&lt;br /&gt;If you are using SQL Navigator or TOAD for Oracle,  you are just couple of clicks away to refine your PL/SQL development experience. In this article, I will outline the steps to install Team Coding to your Oracle Database to use with SQL Navigator. If you are using TOAD for Oracle, then I recommend you reading this &lt;a href="http://toadworld.com/Default.aspx?tabid=67&amp;amp;EntryID=136"&gt;article&lt;/a&gt; instead.&lt;/div&gt;&lt;br /&gt;Now that you are still with me...&lt;br /&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;First things first, I haven't tried these installation steps on all possible versions of Oracle or SQL Navigator, but I believe they would work for most of them. In the office, we are using Oracle DB versions 10.2.0.1.0 and 10.2.0.4 and SQL Navigator version 5.1.&lt;br /&gt;&lt;br /&gt;Here are the steps you need to follow:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Using SQL Navigator, connect to Oracle DB as SYS user or a user that has SYSTEM privileges&lt;/li&gt;&lt;li&gt;From the menubar, select Tools-&amp;gt;Server-Side Installation Wizard. Just click Next in the first screen.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If they are not already selected, select "Base SQLNAV Repository" , "Explain Plan Support" , "Team Coding Support"  and click Next.&lt;br /&gt;&lt;/li&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5496737910809769698" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/TEhWAcU9NuI/AAAAAAAAALw/aEhMl_HRXNg/s400/2.jpg" style="cursor: pointer; display: block; height: 244px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;li&gt;In the next screen, you are asked for user credentials and TNS connection name. Once you provide the information and click connect, all available tablespaces will be filled to the tablespace combobox. You should choose the tablespace that holds the Database objects that are going to be versioned. In our environment, we use the "USERS" tablespace for development, so I picked "USERS" and clicked Next.&lt;br /&gt;&lt;/li&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5496738563367738114" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/TEhWmbS5mwI/AAAAAAAAAMA/iQpJG3iQLeM/s400/3.jpg" style="cursor: pointer; display: block; height: 243px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;li&gt;In this step, type a password for  the SQLNAV user that the installation scripts will create. Click Next.&lt;br /&gt;&lt;/li&gt;&lt;a href="http://2.bp.blogspot.com/_aPCqcqMGbCc/TElHUtdYCUI/AAAAAAAAAMg/duV4NJ-jsU0/s1600/Capture.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5497003241308162370" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/TElHUtdYCUI/AAAAAAAAAMg/duV4NJ-jsU0/s400/Capture.JPG" style="cursor: pointer; display: block; height: 245px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;li&gt;Do not change the defaults in the next three screens in the Wizard and just click Next to let installation create necessary roles to handle team  coding configuration.&lt;br /&gt;&lt;/li&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5496740631146828546" src="http://4.bp.blogspot.com/_aPCqcqMGbCc/TEhYeyX2kwI/AAAAAAAAAMI/Ejzko_8UezA/s400/4.jpg" style="cursor: pointer; display: block; height: 241px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;li&gt;Click the Install button, and go get a cup of coffee.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Connect to Oracle using the SQLNAV  user and password you typed at step 5.&lt;/li&gt;&lt;li&gt;From menubar, select Team Coding  -&amp;gt; Status. You should see that "Team Coding" is  installed but not yet enabled, and all your permissions are checked.&lt;/li&gt;&lt;a href="http://3.bp.blogspot.com/_aPCqcqMGbCc/TElNtZcWSLI/AAAAAAAAAMo/FGZMgnPHSlA/s1600/GW278H407.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5497010262501640370" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/TElNtZcWSLI/AAAAAAAAAMo/FGZMgnPHSlA/s400/GW278H407.jpg" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 273px;" /&gt;&lt;/a&gt;&lt;li&gt;Click Settings, and select &lt;u&gt;only&lt;/u&gt; "Enable Team Coding" and  click OK. Now you should see that Team Coding is enabled.&lt;/li&gt;&lt;/ol&gt;&lt;div style="margin-bottom: 0cm;"&gt;This completes the installation of Team Coding.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;To see Team Coding in action, open a PL/SQL package that is covered by Team Coding and attempt to modify it in the editor. It won't work. This is because you haven't checked out the package yet. Click the small icon in the toolbar&amp;nbsp; to check out the package. Now you should be able to edit it. When you done coding, simply check in the package, so that it becomes available to other developers for editing.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_aPCqcqMGbCc/TE05X5xzAKI/AAAAAAAAAMw/bmob01Fyt3s/s1600/tools.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/TE05X5xzAKI/AAAAAAAAAMw/bmob01Fyt3s/s320/tools.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;One thing that we realized after using Team Coding is that, it uses OS user to log you in, and it fails to protect packages if two separate developers use the same OS user, like "Administrator". So Team Coding works better if every developer logs in to his computer with a uniqure OS user.&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;This is obviously not a source code versioning system. It is merely a locking mechanism that prevents accidental overwrites. Later, I will post another tutorial to integrate Team Coding with CVS.&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0cm;"&gt;Serkan Kasapbaşı&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2975567986143247843?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2975567986143247843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2975567986143247843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2975567986143247843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2975567986143247843'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/07/team-coding-installation-for-oracle.html' title='Team Coding Installation for Oracle PL/SQL'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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/_aPCqcqMGbCc/TEhWAcU9NuI/AAAAAAAAALw/aEhMl_HRXNg/s72-c/2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-3538707052615087115</id><published>2010-07-16T18:42:00.012+03:00</published><updated>2011-02-11T16:04:21.199+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript number formatter decimalformat numbermask'/><title type='text'>JavaScript DecimalFormat</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;We needed to implement a number formatter in JavaScript for &lt;a href="http://www.theformspider.com/"&gt;Formspider&lt;/a&gt;, our Web 2.0 framework for PL/SQL developers. The applications developed with the framework can run on both Java and JavaScript from the same code base. Since we used the DecimalFormat on Java side, we needed the same functionality for the Javascript environment as well. The Javascipt code below implements Java's DecimalFormat in JavaScript.&lt;br /&gt;It is implemented to fulfill our basic needs such as prefix, suffix, comma separation, min/max digits and percentage(%) values.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Here is the source code:&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;a href="https://gist.github.com/822382"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;b&gt;DecimalFormat.js&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;u&gt;Examples:&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;var df = new DecimalFormat("$#,#00.00#");&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;df.format(1);&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; //$01.00&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;df.format(12345.6789);&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; //$12,345.679&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;df.formatBack("$1,234.00");&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; //1234&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;For detailed information you can visit &lt;u&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;u&gt;&lt;b&gt;&lt;a href="http://download.oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/java/text/DecimalFormat.html"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Java DecimalFormat&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; description page.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Öskan Şavlı&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-3538707052615087115?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/3538707052615087115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=3538707052615087115' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3538707052615087115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3538707052615087115'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/07/javascript-decimalformat.html' title='JavaScript DecimalFormat'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-994369551680017523</id><published>2010-07-14T11:20:00.019+03:00</published><updated>2010-07-14T13:36:14.425+03:00</updated><title type='text'>Creating Oracle to SQL Server Database Link Programmatically(32-Bit Win)</title><content type='html'>&lt;p&gt;This article describes how to create a heterogeneos connection between Oracle to SQLServer programmatically using Java.&lt;br /&gt;&lt;p&gt;Please read the Article &lt;a href="http://gergerconsulting.blogspot.com/2010/07/creating-oracle-to-sqlserver-database.html"&gt;Creating Oracle to SQL Server Database Link&lt;/a&gt; to create this connection manually.&lt;br /&gt;&lt;br /&gt;You can download the source code for this tutorial from &lt;a href="http://www.gergerconsulting.com/w409/w409.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 1: Create Windows Script (vbs) File to Create Data Source (ODBC)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Create a file of type .vbs (for Example odbcScript.vbs) with the code below.&lt;br /&gt;&lt;br /&gt;This script expects six input parameters that are represent by WScript.Arguments.Item(i) in the script. Below is the list of six parameters you need to supply.&lt;br /&gt;&lt;br /&gt;DataSourceName:  The Name of the Datasource Connection (ODBC) you want create.&lt;br /&gt;&lt;br /&gt;DatabaseName: Name of the SQL Server Database&lt;br /&gt;&lt;br /&gt;LastUser: SQL Server User Name&lt;br /&gt;&lt;br /&gt;Password: Password of the SQL Server User&lt;br /&gt;&lt;br /&gt;Server: Name of the Server Computer that runs the SQL Server&lt;br /&gt;&lt;br /&gt;sComputer = Name of the Host machine where you run this code&lt;br /&gt;&lt;br /&gt;The Script:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;'Constants&lt;br /&gt;&lt;br /&gt;Const HKEY_CLASSES_ROOT = &amp;amp;H80000000&lt;br /&gt;&lt;br /&gt;Const HKEY_CURRENT_USER = &amp;amp;H80000001&lt;br /&gt;&lt;br /&gt;Const HKEY_LOCAL_MACHINE = &amp;amp;H80000002&lt;br /&gt;&lt;br /&gt;Const HKEY_USERS = &amp;amp;H80000003&lt;br /&gt;&lt;br /&gt;Const HKEY_CURRENT_CONFIG = &amp;amp;H80000005&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Variables&lt;br /&gt;&lt;br /&gt;On Error resume next&lt;br /&gt;&lt;br /&gt;Dim DataSourceName&lt;br /&gt;&lt;br /&gt;Dim DatabaseName&lt;br /&gt;&lt;br /&gt;Dim Description&lt;br /&gt;&lt;br /&gt;Dim DriverPath&lt;br /&gt;&lt;br /&gt;Dim LastUser&lt;br /&gt;&lt;br /&gt;Dim Password&lt;br /&gt;&lt;br /&gt;Dim Server&lt;br /&gt;&lt;br /&gt;Dim Trusted_connection&lt;br /&gt;&lt;br /&gt;Dim DriverName&lt;br /&gt;&lt;br /&gt;Dim InputFile&lt;br /&gt;&lt;br /&gt;Dim iFSO&lt;br /&gt;&lt;br /&gt;Dim ifile&lt;br /&gt;&lt;br /&gt;Dim sComputer&lt;br /&gt;&lt;br /&gt;Dim sPath&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Value assignment&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DataSourceName = WScript.Arguments.Item(0)&lt;br /&gt;&lt;br /&gt;DatabaseName = WScript.Arguments.Item(1)&lt;br /&gt;&lt;br /&gt;DriverPath = "C:\WINNT\System32\sqlsrv32.dll"&lt;br /&gt;&lt;br /&gt;LastUser = WScript.Arguments.Item(2)&lt;br /&gt;&lt;br /&gt;Password = WScript.Arguments.Item(3)&lt;br /&gt;&lt;br /&gt;Server = WScript.Arguments.Item(4)&lt;br /&gt;&lt;br /&gt;Description="ODBC DSN for the Database:" &amp;amp; DatabaseName&lt;br /&gt;&lt;br /&gt;DriverName="SQL Server"&lt;br /&gt;&lt;br /&gt;'InputFile="c:\pclist.txt"&lt;br /&gt;&lt;br /&gt;'Set iFSO = CreateObject("Scripting.FilesyStemObject")&lt;br /&gt;&lt;br /&gt;'Set ifile = iFSO.OpenTextFile(inputfile) &lt;br /&gt;&lt;br /&gt;sPath  = "SOFTWARE\ODBC\ODBC.INI\" &amp;amp; DataSourceName&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Read and loop through the input file&lt;br /&gt;&lt;br /&gt;'Do until ifile.AtEndOfLine&lt;br /&gt;&lt;br /&gt;'sComputer = ifile.ReadLine&lt;br /&gt;&lt;br /&gt;sComputer = WScript.Arguments.Item(5)&lt;br /&gt;&lt;br /&gt;If (0 = CreateRegKey(sComputer, HKEY_LOCAL_MACHINE, sPath)) Then&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Database", DatabaseName&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Description", Description&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Driver", DriverPath&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "LastUser",LastUser&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Password",Password&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE, sPath, "Server",Server&lt;br /&gt;&lt;br /&gt;'Else&lt;br /&gt;&lt;br /&gt;'Exit Do&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'Write in "ODBC Data Sources" Key to allow ODBC Manager list &amp;amp; manage the new DSN&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue sComputer, HKEY_LOCAL_MACHINE,  "SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", DataSourceName , DriverName&lt;br /&gt;&lt;br /&gt;'Loop&lt;br /&gt;&lt;br /&gt;'ifile.Close&lt;br /&gt;&lt;br /&gt;Set ifile = Nothing&lt;br /&gt;&lt;br /&gt;Set iFSO = Nothing&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Create RegKey Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function CreateRegKey (sComputer, hTree, sKey)&lt;br /&gt;&lt;br /&gt;Dim oRegistry&lt;br /&gt;&lt;br /&gt;Dim lResult&lt;br /&gt;&lt;br /&gt;Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" &amp;amp; sComputer &amp;amp; "/root/default:StdRegProv")&lt;br /&gt;&lt;br /&gt;lResult = oRegistry.CreateKey(hTree, sPath)&lt;br /&gt;&lt;br /&gt;If (lResult = 0) And (Err.Number = 0) Then&lt;br /&gt;&lt;br /&gt;CreateRegKey = 0&lt;br /&gt;&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;CreateRegKey = 1&lt;br /&gt;&lt;br /&gt;msgbox("Create Key " &amp;amp; sKey &amp;amp; " Failed")&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Set oRegistry = Nothing&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'set RegKey Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function SetRegKeyStrValue (sComputer, hTree, sKey, sValueName, sValue)&lt;br /&gt;&lt;br /&gt;Dim oRegistry&lt;br /&gt;&lt;br /&gt;Dim lResult&lt;br /&gt;&lt;br /&gt;Set oRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}//" &amp;amp; sComputer &amp;amp; "/root/default:StdRegProv")&lt;br /&gt;&lt;br /&gt;lResult = oRegistry.SetStringValue(hTree,   sKey,  sValueName,  sValue)&lt;br /&gt;&lt;br /&gt;If (lResult = 0) And (Err.Number = 0) Then&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue = 0&lt;br /&gt;&lt;br /&gt;Else&lt;br /&gt;&lt;br /&gt;SetRegKeyStrValue = 1&lt;br /&gt;&lt;br /&gt;msgbox("Set Value for " &amp;amp; sKey &amp;amp; " Failed")&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Set oRegistry = Nothing&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;- You can run this script with java code below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public void doODBCStep()&lt;br /&gt; throws IOException&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;&lt;br /&gt;    String absolutePath = "c:\\odbcScript.vbs";&lt;br /&gt;    String dataSourceName = "ibexLink"; // Database Source (ODBC) Name&lt;br /&gt;    String databaseName = "ibex"; // SQL Server Database Name&lt;br /&gt;    String user = "sa"; // SQL Server User&lt;br /&gt;    String password = "123456"; // SQL Server Password&lt;br /&gt;    String server = "denizli";   // SQL Server&lt;br /&gt;    String host = "192.168.1.112"; // Host where you run this code&lt;br /&gt;    Runtime load = Runtime.getRuntime();&lt;br /&gt;    load.exec("wscript.exe " + "\""+ absolutePath +"\"" + " " + "\""+ dataSourceName+"\"" + " " + "\""+ databaseName+"\"" + " " + "\""+ user+"\""&lt;br /&gt;                    + " " + "\""+ password +"\"" + " " + "\""+ server +"\"" + " " + "\""+ host +"\"");&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 2: Edit Oracle Files&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 2.1: Edit tnsnames.ora file&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public void setTnsnames(File file)&lt;br /&gt;  throws FileNotFoundException, IOException&lt;br /&gt;&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;     String oracleHost = "192.168.1.112"; // Oracle Host&lt;br /&gt;     String oraclePort = "1521"; //Oracle Port&lt;br /&gt;     String newEntry = "ibexLink.world = \n" +&lt;br /&gt;     "  (DESCRIPTION = \n" +&lt;br /&gt;     "    (ADDRESS = (PROTOCOL = TCP)(HOST = " + oracleHost + ")(PORT = "+ oraclePort +")) \n" +&lt;br /&gt;     "    (CONNECT_DATA = \n" +&lt;br /&gt;     "      (SID = " + "ibexLink) \n" +&lt;br /&gt;     "    ) \n" +&lt;br /&gt;     "    (HS = OK) \n" +&lt;br /&gt;     "  )";&lt;br /&gt;&lt;br /&gt;    this.setContents(file,getContents(file)+ newEntry);&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 2.2: Edit listener.ora file&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public void setListener(File file)&lt;br /&gt;    throws FileNotFoundException, IOException&lt;br /&gt;   {&lt;br /&gt;      String oracleHome = "C:\\oraclexe\\app\\oracle\\product\\10.2.0\\server"; // Oracle Home&lt;br /&gt;      String newEntry = " (SID_DESC =\n" +&lt;br /&gt;     "      (SID_NAME = " + "ibexLink) \n" +&lt;br /&gt;     "      (ORACLE_HOME =  " +oracleHome + ") \n "    + &lt;br /&gt;     "      (PROGRAM = hsodbc)\n" +&lt;br /&gt;     "    )   ";&lt;br /&gt;&lt;br /&gt;      String currentContent = this.getContents(file);&lt;br /&gt;      int equationStringIndex = currentContent.indexOf("=");&lt;br /&gt;      int indexofSIDLIST = currentContent.substring(equationStringIndex+1).indexOf("=");&lt;br /&gt;      int copyIndex = indexofSIDLIST +  equationStringIndex + 1;&lt;br /&gt;      String parseF = currentContent.substring(0,copyIndex+1);&lt;br /&gt;      String parseL = currentContent.substring(copyIndex +1);&lt;br /&gt;      this.setContents(file,parseF+newEntry+parseL);&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 2.3: Create new  inithsodbc.ora file&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public void setInitHsOdbc(File fromFile, File toFile)&lt;br /&gt;    throws FileNotFoundException, IOException&lt;br /&gt;   {&lt;br /&gt;     String newEntry1 = " HS_FDS_CONNECT_INFO = " + "ibexLink"+ "  ";&lt;br /&gt;     String newEntry2 = " HS_FDS_TRACE_LEVEL = off ";&lt;br /&gt;     this.copy(fromFile,toFile);&lt;br /&gt;&lt;br /&gt;     try {&lt;br /&gt;       BufferedWriter out = new BufferedWriter(new FileWriter(toFile));&lt;br /&gt;       out.write(newEntry1);&lt;br /&gt;       out.newLine();&lt;br /&gt;       out.write(newEntry2);&lt;br /&gt;       out.close();&lt;br /&gt;     }&lt;br /&gt;     catch(Exception ex)&lt;br /&gt;     {&lt;br /&gt;       System.out.println("EX: " + ex);&lt;br /&gt;     }&lt;br /&gt;   }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 2.4: getContents, setContents and copy Methods&lt;/font&gt;&lt;br /&gt;Below is the code of the utility files used in the Article.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public String getContents(File aFile) {&lt;br /&gt;&lt;br /&gt;   StringBuilder contents = new StringBuilder();&lt;br /&gt;    try {&lt;br /&gt;      BufferedReader input =  new BufferedReader(new FileReader(aFile));&lt;br /&gt;      try {&lt;br /&gt;        String line = null; //not declared within while loop&lt;br /&gt;        while (( line = input.readLine()) != null){&lt;br /&gt;          contents.append(line);&lt;br /&gt;          contents.append(System.getProperty("line.separator"));&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      finally {&lt;br /&gt;        input.close();&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    catch (IOException ex){&lt;br /&gt;      ex.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;    return contents.toString();&lt;br /&gt;  } &lt;br /&gt;&lt;br /&gt; public void setContents(File aFile, String aContents)&lt;br /&gt;   throws FileNotFoundException, IOException {&lt;br /&gt;    try {&lt;br /&gt;       BufferedWriter out = new BufferedWriter(new FileWriter(aFile));&lt;br /&gt;       out.write(aContents);&lt;br /&gt;       out.close();&lt;br /&gt;       }&lt;br /&gt;    catch(Exception ex)&lt;br /&gt;    {&lt;br /&gt;      System.out.println("EX: " + ex);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt; public void copy(File fromFile, File toFile)&lt;br /&gt;   throws IOException {&lt;br /&gt;    FileInputStream from = null;&lt;br /&gt;    FileOutputStream to = null;&lt;br /&gt;    try {&lt;br /&gt;      from = new FileInputStream(fromFile);&lt;br /&gt;      to = new FileOutputStream(toFile);&lt;br /&gt;      byte[] buffer = new byte[4096];&lt;br /&gt;      int bytesRead;&lt;br /&gt;      while ((bytesRead = from.read(buffer)) != -1)&lt;br /&gt;        to.write(buffer, 0, bytesRead); // write&lt;br /&gt;    } finally {&lt;br /&gt;      if (from != null)&lt;br /&gt;        try {&lt;br /&gt;          from.close();&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;          ;&lt;br /&gt;        }&lt;br /&gt;      if (to != null)&lt;br /&gt;        try {&lt;br /&gt;          to.close();&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;          System.out.println(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 3: Create Link&lt;/font&gt;&lt;br /&gt;The Java code below creates an Oracle Database link to the SQL Server Database.&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; private void createHSLink()&lt;br /&gt;  throws ClassNotFoundException, SQLException&lt;br /&gt; {&lt;br /&gt;   String OracleHost = "192.168.1.112";&lt;br /&gt;   String OraclePort = "1521";&lt;br /&gt;   String OracleSID  = "XE";&lt;br /&gt;   String user = "system";&lt;br /&gt;   String password = "sys";&lt;br /&gt;  &lt;br /&gt;   Class.forName("oracle.jdbc.driver.OracleDriver");&lt;br /&gt;   Connection cc = DriverManager.getConnection("jdbc:oracle:thin:@"+OracleHost+":"+OraclePort+":"+OracleSID, user, password);&lt;br /&gt;   Statement oracleStmt = cc.createStatement();&lt;br /&gt; &lt;br /&gt;   String SQLUser = "sa";&lt;br /&gt;   String SQLUserPassword = "123456";&lt;br /&gt;&lt;br /&gt;   try&lt;br /&gt;   {&lt;br /&gt;    String sql = "begin execute immediate('create public database link ibexLink connect to " + SQLUser + " identified by " + SQLUserPassword + " using ''ibexLink.world" + "'''); end;";&lt;br /&gt;    System.out.println(sql);&lt;br /&gt;    oracleStmt.executeUpdate(sql);&lt;br /&gt;   }&lt;br /&gt;   catch (SQLException e)&lt;br /&gt;    {&lt;br /&gt;      System.out.println("oracle connection error : " + e);&lt;br /&gt;    }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;"&gt;Step 4: Restart Service Oracle Listener&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt; public void cmdListener(String oraHome)&lt;br /&gt;   throws IOException, InterruptedException&lt;br /&gt;   {&lt;br /&gt;     Runtime load = Runtime.getRuntime();&lt;br /&gt;     Process pro = load.exec(oraHome + "\\bin\\LSNRCTL.EXE" + " " + "reload");&lt;br /&gt;     ProcessOutput po = new ProcessOutput(pro.getInputStream());&lt;br /&gt;     po.start();&lt;br /&gt;     int i;&lt;br /&gt;     i = pro.waitFor();&lt;br /&gt;  } &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.gergerconsulting.com/w409/odbcScript.vbs"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;H. Kutay Çilingiroğlu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-994369551680017523?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/994369551680017523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=994369551680017523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/994369551680017523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/994369551680017523'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/07/creating-oracle-to-sql-server-database.html' title='Creating Oracle to SQL Server Database Link Programmatically(32-Bit Win)'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-3469344731509586109</id><published>2010-07-08T11:36:00.017+03:00</published><updated>2010-07-08T16:29:13.892+03:00</updated><title type='text'>Creating Oracle to SQLServer Database Link (32-Bit Win)</title><content type='html'>&lt;p&gt;Oracle Heterogeneous Services let you create a database link from Oracle to SQL Server. This method may be preferred over using a JDBC connection because it is significantly faster. Below is the list of steps you need to follow to establish a link from Oracle Database to an SQL Server so that you can query it from your Oracle Database.   &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 1: Creating Data Source (ODBC)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open &lt;span style="font-weight:bold;"&gt;Start Menu&lt;/span&gt; and select &lt;span style="font-weight:bold;"&gt;Programs/Administrative Tools/DataSources/Data Sources(ODBC).&lt;/span&gt; Go to &lt;span style="font-weight:bold;"&gt;System DSN&lt;/span&gt; tab. Click the &lt;span style="font-weight:bold;"&gt;Add&lt;/span&gt; button to create a new Data Source&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_aPCqcqMGbCc/TDWRx0w15UI/AAAAAAAAAKo/S3EzTSJkqUk/s1600/ODBCScreen1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 327px;" src="http://4.bp.blogspot.com/_aPCqcqMGbCc/TDWRx0w15UI/AAAAAAAAAKo/S3EzTSJkqUk/s400/ODBCScreen1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5491455605811307842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select &lt;span style="font-weight:bold;"&gt;SQL Server&lt;/span&gt; from the driver list and click &lt;span style="font-weight:bold;"&gt;Finish.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_aPCqcqMGbCc/TDWTdk2dypI/AAAAAAAAAKw/5GKRo_TrTus/s1600/ODBCScreen2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 292px;" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/TDWTdk2dypI/AAAAAAAAAKw/5GKRo_TrTus/s400/ODBCScreen2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491457456965798546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;Create a New Data Source to SQL Server&lt;/span&gt; Dialog will show up.&lt;br /&gt;&lt;br /&gt;Enter a name for the new Datasource (ibexLink in our example).&lt;br /&gt;&lt;br /&gt;Optionally enter a description for your Datasource.&lt;br /&gt;&lt;br /&gt;Select the server which you want to connect to from the list. The list displays all the computers in your network that have SQL Server installed.&lt;br /&gt;&lt;br /&gt;Click &lt;span style="font-weight:bold;"&gt;Next&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aPCqcqMGbCc/TDWUfC-R-tI/AAAAAAAAAK4/tEr_YHfeD00/s1600/ODBCScreen3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 277px;" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/TDWUfC-R-tI/AAAAAAAAAK4/tEr_YHfeD00/s400/ODBCScreen3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491458581743139538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Select radio button &lt;span style="font-weight:bold;"&gt;With Sql Server authentication using a login ID and password entered by the user&lt;/span&gt;. Then fill in the Login ID and Password to connect to the  SQL Server. Click &lt;span style="font-weight:bold;"&gt;Next&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_aPCqcqMGbCc/TDWVNyA37mI/AAAAAAAAALA/JX4ZA-fsyh0/s1600/ODBCScreen4.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 279px;" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/TDWVNyA37mI/AAAAAAAAALA/JX4ZA-fsyh0/s400/ODBCScreen4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491459384644464226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check the box &lt;span style="font-weight:bold;"&gt;Change the default database to:&lt;/span&gt;. Select the SQL Server database that you want to connect to from the list. Click &lt;span style="font-weight:bold;"&gt;Next.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_aPCqcqMGbCc/TDWXbcF7MbI/AAAAAAAAALI/GMUWQqBzBZM/s1600/ODBCScreen5.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 276px;" src="http://4.bp.blogspot.com/_aPCqcqMGbCc/TDWXbcF7MbI/AAAAAAAAALI/GMUWQqBzBZM/s400/ODBCScreen5.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491461818301493682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Uncheck the box &lt;span style="font-weight:bold;"&gt;Perform translation for character data&lt;/span&gt;. This check box is there for multilingual support and does not work correctly if the ODBC Driver cannot convert between code page used by the SQL Server and Unicode on the client computer. For more information about this topic please refer to the Help file of the ODBC Datasource Administrator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aPCqcqMGbCc/TDWXpwpqXHI/AAAAAAAAALQ/CEofsRHDuIM/s1600/ODBCScreen6.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 276px;" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/TDWXpwpqXHI/AAAAAAAAALQ/CEofsRHDuIM/s400/ODBCScreen6.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491462064338263154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click &lt;span style="font-weight:bold;"&gt;Test Data Source.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_aPCqcqMGbCc/TDWX0Ue6UPI/AAAAAAAAALY/-zX_pnPA2jI/s1600/ODBCScreen7.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 369px; height: 378px;" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/TDWX0Ue6UPI/AAAAAAAAALY/-zX_pnPA2jI/s400/ODBCScreen7.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5491462245755539698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click &lt;span style="font-weight:bold;"&gt;OK.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 2: Edit tnsnames.ora file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open the file tnsnames.ora located in your [Oracle Home]\network\admin folder.&lt;br /&gt;&lt;br /&gt;Add SQL Server Datasource connection information to the tnsnames.ora file. In the entry, use your Oracle Database Server port as the port number. The SID must be the same ODBC name you specified in step one. We also must set the HS parameter to OK to indicate that we are connecting to a heterogenous server. The TNS Entry for the example we used in this tutorial is below. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; ibexLink.world =&lt;br /&gt;&lt;br /&gt;(DESCRIPTION =&lt;br /&gt;&lt;br /&gt;    (ADDRESS = (PROTOCOL = tcp)(HOST = LOCALHOST)(PORT = 1521))&lt;br /&gt;&lt;br /&gt;    (CONNECT_DATA =&lt;br /&gt;&lt;br /&gt;      (SID = ibexLink)&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;    (HS = OK)&lt;br /&gt;&lt;br /&gt; )&lt;br /&gt;&lt;br /&gt;Save the tnsnames.ora file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 3: Edit listener.ora file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open the file listener.ora located in your [Oracle Home]\network\admin folder. Add a new entry to "SID_LIST_LISTENER". Use the ODBC name in step one as the SID_NAME. Enter your Oracle Home Directory. The value for the PROGRAM parameter is hsodbc. When all done, the entry to the listener.ora file for the example we are using for this tutorial looks like the following:&lt;br /&gt;&lt;br /&gt; (SID_DESC =&lt;br /&gt;&lt;br /&gt;      (SID_NAME=ibexLink) &lt;br /&gt;&lt;br /&gt;      (ORACLE_HOME = C:\oracle\product\10.2.0\db_2) &lt;br /&gt;&lt;br /&gt;      (PROGRAM = hsodbc)&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;Save the listener.ora file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 4: Create new  inithsodbc.ora file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open folder [Oracle Home]\db_2\hs\admin. Create a copy of the inithsodbc.ora file and  rename it as init[odbc name].ora. For the example we are using in this tutorial the file name is initibexLink.ora. Open this new file and change the text. In the example used here, the text changed from&lt;br /&gt;&lt;br /&gt;HS_FDS_CONNECT_INFO = &lt;odbc data_source_name&gt;&lt;br /&gt;&lt;br /&gt;HS_FDS_TRACE_LEVEL = &lt;trace_level&gt;&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;HS_FDS_CONNECT_INFO = ibexLink  &lt;br /&gt;&lt;br /&gt;HS_FDS_TRACE_LEVEL = off&lt;br /&gt;&lt;br /&gt;Save the file.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 5: Connect Oracle Server as sysdba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; Run the script below to create a database link to the SQL Server.&lt;br /&gt;&lt;br /&gt; create public database link [LINK_NAME] connect to [USER] identified by [PASSWORD] using 'ibexLink.world';&lt;br /&gt;&lt;br /&gt; Use SQL Server username and password for [USER] and [PASSWORD].&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Step 6: Restart Service Oracle Listener&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; -------------------------- &lt;br /&gt;&lt;br /&gt; Now, you can query SQL Server data from Oracle with queries in the following format:&lt;br /&gt;&lt;br /&gt;  Select *&lt;br /&gt;&lt;br /&gt;  from   [TABLE_NAME]@[[LINK_NAME];&lt;br /&gt;&lt;br /&gt;&lt;p&gt;H. Kutay Çilingiroğlu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-3469344731509586109?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/3469344731509586109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=3469344731509586109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3469344731509586109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3469344731509586109'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/07/creating-oracle-to-sqlserver-database.html' title='Creating Oracle to SQLServer Database Link (32-Bit Win)'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://4.bp.blogspot.com/_aPCqcqMGbCc/TDWRx0w15UI/AAAAAAAAAKo/S3EzTSJkqUk/s72-c/ODBCScreen1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-3603520131146314084</id><published>2010-07-07T10:38:00.017+03:00</published><updated>2010-07-08T15:53:32.093+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='applet'/><category scheme='http://www.blogger.com/atom/ns#' term='DOM'/><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><category scheme='http://www.blogger.com/atom/ns#' term='initialize'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Applet initialization problem</title><content type='html'>&lt;p&gt;DOM manipulations in a web application may cause the applets in the application to reinitialize. Sometimes this can be annoying because the reinitialization causes the applet to lose its state.&lt;/p&gt;&lt;p&gt;I ran into this problem recently in a project when we incorporated a JavaFX widget into our DHTML/JavaScript application. I have not been able to find much information about this issue on the web and ended up doing a lot of JavaScript debugging. So in the hope of saving others some valuable time, here are the three scenarios we observed which causes the reinitialization problem:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;br /&gt;&lt;li style="color:#333"&gt;Changing the display style of an applet or a parent of the applet to any value other than "none" causes the applet to reinitialize in Firefox and Chrome. This change does not cause any problems in IE. Cross browser support was essential to us so I ended up changing the visibility or width&amp;amp;height attributes of the applet to hide it instead of setting its style.&lt;/li&gt;&lt;br /&gt;&lt;li style="color:#333"&gt;Reinserting an applet or a parent of the applet to any position in the DOM tree causes the applet to reinitialize in IE, Firefox, and Chrome. In IE it's reinitialized both when removing from and inserting into the DOM tree.&lt;/li&gt;&lt;br /&gt;&lt;li style="color:#333"&gt;Changing overflow style of a parent of the applet causes the applet to reinitialize. This behavior is only observable in Firefox.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div style="color:#333"&gt;It's best to avoid these three DOM operations on an applet or a DOM element which contains an applet at any depth. While there is an easy workaround for the first issue, there is no quick fix for the other two. Fortunately, I was able to fix the JavaScript code to make it all work in the end.&lt;p&gt;You can download the source code which demonstrates these issues from &lt;a href="http://www.gergerconsulting.com/blog_files/InitializeTest.zip" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color:#333;"&gt;M. Serdar Biçer&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-3603520131146314084?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/3603520131146314084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=3603520131146314084' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3603520131146314084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3603520131146314084'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2010/07/applet-initialization-problem.html' title='Applet initialization problem'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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-6943879080620983015.post-3002198794562219734</id><published>2007-04-13T15:10:00.001+02:00</published><updated>2010-08-13T10:59:27.194+02:00</updated><title type='text'>An ADF Faces ProgressIndicator Example for File Upload</title><content type='html'>This post demonstrates how an ADF Faces ProgressIndicator can be used to display the progress of a file upload.&lt;br /&gt;&lt;br /&gt;The sample application is built in JDeveloper 10.1.3.2. &lt;a href="http://www.gergerconsulting.com/blog_files/ProgressIndicatorSample.zip"&gt;You can download the sample workspace from here&lt;/a&gt;. The workspace does not need a database connection to run.&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Sample Application&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The sample application consists of one page that allows the user to upload files to the server. When the upload starts, a progress indicator displays the current status of the upload operation. The uploaded files are not stored anywhere.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_aPCqcqMGbCc/Rh9tU9Fx5MI/AAAAAAAAAEg/vHCISFP7leI/s1600-h/progress1.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5052877513696601282" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/Rh9tU9Fx5MI/AAAAAAAAAEg/vHCISFP7leI/s320/progress1.gif" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/Rh9tktFx5NI/AAAAAAAAAEo/VpWupM9GbUA/s1600-h/progress2.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5052877784279540946" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/Rh9tktFx5NI/AAAAAAAAAEo/VpWupM9GbUA/s320/progress2.gif" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Controlling the progressIndicator&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;f:view&amp;gt;&lt;br /&gt;&amp;lt;afh:html&amp;gt;&lt;br /&gt;&amp;lt;afh:head title="FileUpload"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type"&lt;br /&gt;content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;&amp;lt;afh:script source="progressIndicator.js"/&amp;gt;&lt;br /&gt;&amp;lt;/afh:head&amp;gt;    &lt;br /&gt;&amp;lt;afh:body onload="deactivateProgressIndicators();"&amp;gt;&lt;br /&gt;&amp;lt;af:messages/&amp;gt; &lt;br /&gt;&amp;lt;af:form usesUpload="true"&amp;gt;&lt;br /&gt;&amp;lt;af:inputHidden id="fileUploadStatus" value="#{MyFileUploadBean.fileUploadStatus}"/&amp;gt;&lt;br /&gt;&amp;lt;af:panelBox&amp;gt; &lt;br /&gt;&amp;lt;af:inputFile valueChangeListener="#{MyFileUploadBean.fileUploaded}"/&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="start upload"&lt;br /&gt;id="startButton"&lt;br /&gt;actionListener="#{MyFileUploadBean.doUpload}"&lt;br /&gt;onclick="reactivateProgressIndicators();"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelBox&amp;gt;&lt;br /&gt;&amp;lt;af:panelBox id="panelBox" inlineStyle="display:none"&amp;gt;&lt;br /&gt;&amp;lt;af:panelHeader text="File is being uploaded"/&amp;gt;&lt;br /&gt;&amp;lt;af:progressIndicator id="progressIndicator"&lt;br /&gt;value="#{MyProgressRangeModel}"&lt;br /&gt;partialTriggers="pollid"&amp;gt;&lt;br /&gt;&amp;lt;af:outputFormatted styleUsage="instruction" &lt;br /&gt;value="Task status not known"&lt;br /&gt;rendered="#{MyProgressRangeModel.value == -1}"/&amp;gt;&lt;br /&gt;&amp;lt;af:outputFormatted styleUsage="instruction" &lt;br /&gt;value="#{MyProgressRangeModel.value} of #{MyProgressRangeModel.maximum} Completed"&lt;br /&gt;rendered="#{MyProgressRangeModel.value &amp;gt; -1}"/&amp;gt;        &lt;br /&gt;&amp;lt;/af:progressIndicator&amp;gt;&lt;br /&gt;&amp;lt;af:poll id="pollid" interval="1000"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelBox&amp;gt;&lt;br /&gt;&amp;lt;/af:form&amp;gt;&lt;br /&gt;&amp;lt;/afh:body&amp;gt;&lt;br /&gt;&amp;lt;/afh:html&amp;gt;&lt;br /&gt;&amp;lt;/f:view&amp;gt;&lt;/pre&gt;The fileUpload.jsp page contains a &lt;code&gt;&amp;lt;af:progressIndicator/&amp;gt;&lt;/code&gt; tag and a &lt;code&gt;&amp;lt;af:poll/&amp;gt;&lt;/code&gt; tag. The poll tag is used as a timer by the progressIndicator to check the status of the file upload periodically using partial page rendering (PPR). However, this operation is not necessary if the user is not uploading any files. If the polling is not deactivated, the progressIndicator is going to perform PPR even if there is no file being uploaded. This constant PPR creates an undesired effect on the page.&lt;br /&gt;&lt;br /&gt;At client side, a PollManager object is used to regulate the poll objects on the page. The PollManager provides two methods to activate and deactivate the poll objects; &lt;code&gt;reactivateAll()&lt;/code&gt; and &lt;code&gt;deactivateAll()&lt;/code&gt;. Using these two methods the PPR can be started when file upload begins and stopped when it ends. Below is the JavaScript code that accomplishes these tasks;&lt;br /&gt;&lt;pre class="code"&gt;function deactivateProgressIndicators()&lt;br /&gt;{&lt;br /&gt;if (self._pollManager)&lt;br /&gt;{&lt;br /&gt;if (document.getElementById('fileUploadStatus').value=='noUpload')&lt;br /&gt;{&lt;br /&gt;_pollManager.deactivateAll();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function reactivateProgressIndicators()&lt;br /&gt;{&lt;br /&gt;if (self._pollManager)&lt;br /&gt;{&lt;br /&gt;document.getElementById('panelBox').style.display='';&lt;br /&gt;document.getElementById('fileUploadStatus').value='uploading';&lt;br /&gt;_pollManager.reactivateAll();&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Server Side Code&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The MyFileUploadBean and MyProgressRangeModel beans handle the file upload and progressIndicator server side operations respectively.   &lt;br /&gt;&lt;br /&gt;You can find a detailed explanation of the ProgressRangeModel and how it is used with the progressIndicator at &lt;a href="http://groundside.com/blog/DuncanMills.php?title=the_progress_indicator&amp;amp;more=1&amp;amp;c=1&amp;amp;tb=1&amp;amp;pb=1" target="_blank"&gt;Duncan Mills blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Below is the source code for the MyFileUploadBean and the MyProgressRangeModel classes in the sample application.&lt;br /&gt;&lt;pre class="code"&gt;public class MyFileUploadBean&lt;br /&gt;{&lt;br /&gt;private UploadedFile file;&lt;br /&gt;private long sizeOfFile;&lt;br /&gt;private int availableBytes;&lt;br /&gt;private String fileUploadStatus = "noUpload";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public MyFileUploadBean() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void fileUploaded(ValueChangeEvent valueChangeEvent)&lt;br /&gt;{&lt;br /&gt;file = (UploadedFile)valueChangeEvent.getNewValue();&lt;br /&gt;if(file != null)&lt;br /&gt;{&lt;br /&gt;sizeOfFile = file.getLength();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void doUpload(ActionEvent actionEvent)&lt;br /&gt;{ &lt;br /&gt;if(file != null)&lt;br /&gt;{&lt;br /&gt;InputStream is;&lt;br /&gt;OutputStream os;&lt;br /&gt;FacesContext fctx = FacesContext.getCurrentInstance();&lt;br /&gt;FacesMessage message = new FacesMessage("succesfully uploaded file" + &lt;br /&gt;" " + file.getFilename() + " (" + &lt;br /&gt;file.getLength() + " bytes)");&lt;br /&gt;fctx.addMessage(actionEvent.getComponent().getClientId(fctx), &lt;br /&gt;message);&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;is = file.getInputStream();&lt;br /&gt;int data;&lt;br /&gt;getMyRangeModel().setMaximumBytes(sizeOfFile);&lt;br /&gt;while((data = is.read()) != -1)&lt;br /&gt;{&lt;br /&gt;availableBytes = is.available();&lt;br /&gt;getMyRangeModel().setAvailableBytes(availableBytes);          &lt;br /&gt;if(availableBytes == 0)&lt;br /&gt;{&lt;br /&gt;setFileUploadStatus("noUpload");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;is.close();&lt;br /&gt;}&lt;br /&gt;catch (IOException e)&lt;br /&gt;{&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private MyProgressRangeModel getMyRangeModel()&lt;br /&gt;{&lt;br /&gt;FacesContext fctx = FacesContext.getCurrentInstance();&lt;br /&gt;MyProgressRangeModel rangeModel = (MyProgressRangeModel) fctx.getApplication()&lt;br /&gt;.createValueBinding("#{MyProgressRangeModel}").getValue(fctx);&lt;br /&gt;return rangeModel;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setFileUploadStatus(String fileUploadStatus) {&lt;br /&gt;this.fileUploadStatus = fileUploadStatus;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getFileUploadStatus() {&lt;br /&gt;return fileUploadStatus;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;pre class="code"&gt;public class MyProgressRangeModel extends oracle.adf.view.faces.model.BoundedRangeModel&lt;br /&gt;{&lt;br /&gt;private long availableBytes;&lt;br /&gt;private long maximumBytes;&lt;br /&gt;&lt;br /&gt;public MyProgressRangeModel()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public long getMaximum()&lt;br /&gt;{ &lt;br /&gt;long result;&lt;br /&gt;long maxByte = getMaximumBytes();&lt;br /&gt;if(maxByte==0)&lt;br /&gt;result=-1;&lt;br /&gt;else&lt;br /&gt;result = maxByte;&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public long getValue()&lt;br /&gt;{&lt;br /&gt;long result;&lt;br /&gt;long availableByte = getMaximumBytes() - getAvailableBytes();&lt;br /&gt;if(availableByte == 0 || availableByte==getMaximumBytes())&lt;br /&gt;result=-1;&lt;br /&gt;else&lt;br /&gt;result = availableByte;&lt;br /&gt;return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setAvailableBytes(long availableBytes)&lt;br /&gt;{&lt;br /&gt;this.availableBytes = availableBytes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public long getAvailableBytes()&lt;br /&gt;{&lt;br /&gt;return availableBytes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setMaximumBytes(long maximumBytes)&lt;br /&gt;{&lt;br /&gt;this.maximumBytes = maximumBytes;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public long getMaximumBytes()&lt;br /&gt;{&lt;br /&gt;return maximumBytes;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-3002198794562219734?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/3002198794562219734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=3002198794562219734' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3002198794562219734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/3002198794562219734'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/04/adf-faces-progressindicator-example-for.html' title='An ADF Faces ProgressIndicator Example for File Upload'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://2.bp.blogspot.com/_aPCqcqMGbCc/Rh9tU9Fx5MI/AAAAAAAAAEg/vHCISFP7leI/s72-c/progress1.gif' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-1227976500827178033</id><published>2007-04-04T09:31:00.001+02:00</published><updated>2010-08-13T10:56:59.610+02:00</updated><title type='text'>A Custom ShowDetailFrame that does not require a WebCenter License</title><content type='html'>This post demonstrates a custom showDetailFrame that is built using regular ADF Faces components. Hence no additional license is needed to use it. (You need a WebCenter license if you use the new showDetailFrame component. The issue is explained in &lt;a href="http://forums.oracle.com/forums/thread.jspa?forumID=83&amp;amp;threadID=469836"&gt;this OTN thread&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;The sample application is built in 10.1.3.2. It does not require a database connection to run. &lt;a href="http://www.gergerconsulting.com/blog_files/CustomShowDetailFrameWS.zip"&gt;You can download the workspace from here&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Sample Application&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The application contains a page built with custom ShowDetailFrame and another page built with the original component.&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/RhNp3oq5xvI/AAAAAAAAAEQ/DFrVusQL2B8/s1600-h/custom.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5049496011743545074" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/RhNp3oq5xvI/AAAAAAAAAEQ/DFrVusQL2B8/s320/custom.gif" style="display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;Custom ShowDetailFrame&lt;/td&gt; &lt;td&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/RhNp3oq5xwI/AAAAAAAAAEY/0U3kEAugysM/s1600-h/original.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5049496011743545090" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/RhNp3oq5xwI/AAAAAAAAAEY/0U3kEAugysM/s320/original.gif" style="display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;Original ShowDetailFrame&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Below is the JSP and the JavaScript code of the custom showDetailFrame.&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;f:view&amp;gt;&lt;br /&gt;&amp;lt;afh:html&amp;gt;&lt;br /&gt;&amp;lt;afh:head title="Show Custom Detail Frame"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="customFrame.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/afh:head&amp;gt;&lt;br /&gt;&amp;lt;afh:body onload="onLoad();"&amp;gt;&lt;br /&gt;&amp;lt;af:form&amp;gt;&lt;br /&gt;&amp;lt;af:inputHidden id="frameStatus" value="#{processScope.frameStatus}"/&amp;gt;&lt;br /&gt;&amp;lt;af:panelForm rows="2" maxColumns="1"&amp;gt;&lt;br /&gt;&amp;lt;af:panelBox  width="400"&amp;gt;&lt;br /&gt;&amp;lt;af:panelHorizontal halign="left"&amp;gt;&lt;br /&gt;&amp;lt;af:commandLink onclick="minimize();" id="minimizer"&lt;br /&gt;partialSubmit="true" immediate="true"&lt;br /&gt;inlineStyle="#{processScope.frameStatus == 'minimized' ? 'display: none;' : ''}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{'minimized'}" to="#{processScope.frameStatus}"/&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/minimize.gif"&lt;br /&gt;id="minimizeObj" /&amp;gt;&lt;br /&gt;&amp;lt;/af:commandLink&amp;gt;&lt;br /&gt;&amp;lt;af:commandLink onclick="maximize();" id="maximizer"&lt;br /&gt;partialSubmit="true" immediate="true"&lt;br /&gt;inlineStyle="#{processScope.frameStatus == 'minimized' ? '' : 'display: none;'}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{'maximized'}" to="#{processScope.frameStatus}"/&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/expand.gif" id="extendObj"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandLink&amp;gt;           &lt;br /&gt;&amp;lt;af:outputLabel value="Custom showDetailFrame"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelHorizontal&amp;gt;&lt;br /&gt;&amp;lt;/af:panelBox&amp;gt;&lt;br /&gt;&amp;lt;afh:tableLayout width="400" id ="frameTableLayout"&lt;br /&gt;inlineStyle="border: 1px solid #D2D8B0; border-top: 0; height:200.0px;"&lt;br /&gt;#{processScope.frameStatus == 'minimized' ? ' display: none;' : ''}"&amp;gt;&lt;br /&gt;&amp;lt;afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:cellFormat halign="center"&amp;gt;&lt;br /&gt;&amp;lt;af:goLink destination="http://www.gergerconsulting.com"&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/GC.gif" shortDesc="Gerger Consulting"/&amp;gt;&lt;br /&gt;&amp;lt;/af:goLink&amp;gt;&lt;br /&gt;&amp;lt;/afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;/afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;af:inputText label="Required Field" required="true" value="#{processScope.requiredField1}"&lt;br /&gt;columns="10" maximumLength="10"/&amp;gt;&lt;br /&gt;&amp;lt;/afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;/afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;/afh:tableLayout&amp;gt;&lt;br /&gt;&amp;lt;/af:panelForm&amp;gt;&lt;br /&gt;&amp;lt;af:panelForm rows="1" maxColumns="1"&amp;gt;&lt;br /&gt;&amp;lt;af:objectSpacer width="10" height="10"/&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Go To The Next Page" action="goPage1"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelForm&amp;gt;&lt;br /&gt;&amp;lt;/af:form&amp;gt;&lt;br /&gt;&amp;lt;/afh:body&amp;gt;&lt;br /&gt;&amp;lt;/afh:html&amp;gt;&lt;br /&gt;&amp;lt;/f:view&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="code"&gt;function minimize(){&lt;br /&gt;var frameStatus=document.getElementById('frameStatus');&lt;br /&gt;frameStatus.value='minimized';&lt;br /&gt;var minimizer=document.getElementById('minimizer');&lt;br /&gt;minimizer.style.display='none';&lt;br /&gt;var maximizer=document.getElementById('maximizer');&lt;br /&gt;maximizer.style.display='';&lt;br /&gt;var frameTableLayout=document.getElementById('frameTableLayout');&lt;br /&gt;frameTableLayout.style.display='none';&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function maximize(){&lt;br /&gt;var frameStatus=document.getElementById('frameStatus');&lt;br /&gt;frameStatus.value='maximized';&lt;br /&gt;var minimizer=document.getElementById('minimizer');&lt;br /&gt;minimizer.style.display='';&lt;br /&gt;var maximizer=document.getElementById('maximizer');&lt;br /&gt;maximizer.style.display='none';&lt;br /&gt;var frameTableLayout=document.getElementById('frameTableLayout');&lt;br /&gt;frameTableLayout.style.display='';  &lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onLoad(){&lt;br /&gt;var frameStatus=document.getElementById('frameStatus');&lt;br /&gt;if (frameStatus.value=='maximized' || frameStatus.value=='')&lt;br /&gt;{&lt;br /&gt;maximize();&lt;br /&gt;}&lt;br /&gt;else if (frameStatus.value=='minimized')&lt;br /&gt;{&lt;br /&gt;minimize();&lt;br /&gt;}&lt;br /&gt;return true;&lt;br /&gt;}&lt;/pre&gt;The original showDetailFrame component is not Back/Forward Button friendly. The custom showDetailFrame shown in this sample application preserves its state even though the page is viewed using the Back/Forward buttons.&lt;br /&gt;&lt;br /&gt;If this behavior is not important or not desired, use the following JSP below;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;f:view&amp;gt;&lt;br /&gt;&amp;lt;afh:html&amp;gt;&lt;br /&gt;&amp;lt;afh:head title="Show Custom Detail Frame"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="customFrame.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/afh:head&amp;gt;&lt;br /&gt;&amp;lt;afh:body onload="onLoad();"&amp;gt;&lt;br /&gt;&amp;lt;af:form&amp;gt;&lt;br /&gt;&amp;lt;af:inputHidden id="frameStatus" value="#{processScope.frameStatus}"/&amp;gt;&lt;br /&gt;&amp;lt;af:panelForm rows="2" maxColumns="1"&amp;gt;&lt;br /&gt;&amp;lt;af:panelBox  width="400"&amp;gt;&lt;br /&gt;&amp;lt;af:panelHorizontal halign="left"&amp;gt;&lt;br /&gt;&amp;lt;af:commandLink onclick="minimize(); return false;" id="minimizer"&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/minimize.gif"&lt;br /&gt;id="minimizeObj" /&amp;gt;&lt;br /&gt;&amp;lt;/af:commandLink&amp;gt;&lt;br /&gt;&amp;lt;af:commandLink onclick="maximize(); return false;" id="maximizer"&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/expand.gif" id="extendObj"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandLink&amp;gt;&lt;br /&gt;&amp;lt;af:outputLabel value="Custom showDetailFrame"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelHorizontal&amp;gt;&lt;br /&gt;&amp;lt;/af:panelBox&amp;gt;&lt;br /&gt;&amp;lt;afh:tableLayout width="400" id ="frameTableLayout"&lt;br /&gt;inlineStyle="border: 1px solid #D2D8B0; border-top: 0; height:200.0px;"&amp;gt;&lt;br /&gt;&amp;lt;afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:cellFormat halign="center"&amp;gt;&lt;br /&gt;&amp;lt;af:goLink destination="http://www.gergerconsulting.com"&amp;gt;&lt;br /&gt;&amp;lt;af:objectImage source="/GC.gif" shortDesc="Gerger Consulting"/&amp;gt;&lt;br /&gt;&amp;lt;/af:goLink&amp;gt;&lt;br /&gt;&amp;lt;/afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;/afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;af:inputText label="Required Field" required="true" value="#{processScope.requiredField1}"&lt;br /&gt;columns="10" maximumLength="10"/&amp;gt;&lt;br /&gt;&amp;lt;/afh:cellFormat&amp;gt;&lt;br /&gt;&amp;lt;/afh:rowLayout&amp;gt;&lt;br /&gt;&amp;lt;/afh:tableLayout&amp;gt;&lt;br /&gt;&amp;lt;/af:panelForm&amp;gt;&lt;br /&gt;&amp;lt;af:panelForm rows="1" maxColumns="1"&amp;gt;&lt;br /&gt;&amp;lt;af:objectSpacer width="10" height="10"/&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Go To The Next Page" action="goPage1"/&amp;gt;&lt;br /&gt;&amp;lt;/af:panelForm&amp;gt;&lt;br /&gt;&amp;lt;/af:form&amp;gt;&lt;br /&gt;&amp;lt;/afh:body&amp;gt;&lt;br /&gt;&amp;lt;/afh:html&amp;gt;&lt;br /&gt;&amp;lt;/f:view&amp;gt;&lt;/pre&gt;The modified custom showDetailFrame will not support the following scenario;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;br /&gt;Run the customShowDetailFrame page&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Click the “Go To The Next Page” button&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Click the Back Button&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Minimize the frame&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Click Forward Button&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;Click the “Go To The Previous Page” button&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The frame will appear as maximized even though it was minimized in step 4.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-1227976500827178033?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/1227976500827178033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=1227976500827178033' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1227976500827178033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/1227976500827178033'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/04/custom-showdetailframe-that-does-not.html' title='A Custom ShowDetailFrame that does not require a WebCenter License'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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/_aPCqcqMGbCc/RhNp3oq5xvI/AAAAAAAAAEQ/DFrVusQL2B8/s72-c/custom.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-343336659121967981</id><published>2007-03-14T15:05:00.000+02:00</published><updated>2007-03-14T15:16:51.465+02:00</updated><title type='text'>A Programmatic SelectOneChoice Example</title><content type='html'>&lt;p&gt;This sample application demonstrates how to add/delete selectitems in a selectOneChoice component programmatically. &lt;a href="http://www.gergerconsulting.com/blog_files/ProgrammaticLOV.zip"&gt;The JDeveloper 10.1.3.2 workspace can be downloaded from here&lt;/a&gt;. The sample application does not need a database connection to run.&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Sample Application&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The application displays a list box and an input field. The user can add new items to the list box by typing a new value to the input field and clicking the  “Add Item to List” button. Pressing the  “Remove Selected Item From List” button will remove the current selected value from the list box.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aPCqcqMGbCc/Rffwh-SkgbI/AAAAAAAAAEE/PZzBxD8YDUg/s1600-h/programmaticlov.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/Rffwh-SkgbI/AAAAAAAAAEE/PZzBxD8YDUg/s320/programmaticlov.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5041762774311797170" /&gt;&lt;/a&gt;&lt;p&gt;Below is the source code for the JSP Page and the managed bean used to provide the functionality.&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;h:panelGrid columns="2" cellpadding="10" cellspacing="15"&amp;gt;&lt;br /&gt;  &amp;lt;af:inputText label="New Item Name"&lt;br /&gt;                binding="#{MyTestBean.newItemNameComponent}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;af:selectOneChoice label="List"&lt;br /&gt;                      binding="#{MyTestBean.myTestListComponent}"&amp;gt;&lt;br /&gt;    &amp;lt;f:selectItems value="#{MyTestBean.listOfItems}"/&amp;gt;&lt;br /&gt;  &amp;lt;/af:selectOneChoice&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;af:commandButton text="Add Item To List"&lt;br /&gt;                    actionListener="#{MyTestBean.addNewItemToList}"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;af:commandButton text="Remove Selected Item From List"&lt;br /&gt;                    actionListener="#{MyTestBean.removeItemFromList}"&lt;br /&gt;                    disabled="#{empty MyTestBean.listOfItems}"/&amp;gt;&lt;br /&gt;&amp;lt;/h:panelGrid&amp;gt;&lt;/pre&gt;&lt;pre class="code"&gt;public void addNewItemToList(ActionEvent actionEvent)&lt;br /&gt;{&lt;br /&gt;  String value = (String)newItemNameComponent.getValue();&lt;br /&gt;  if(value != null &amp;&amp; !value.equals(""))&lt;br /&gt;  {&lt;br /&gt;    SelectItem si = new SelectItem();&lt;br /&gt;    si.setLabel(value);&lt;br /&gt;    si.setValue(value);&lt;br /&gt;    listOfItems.add(si);&lt;br /&gt;    myTestListComponent.setValue(value);&lt;br /&gt;    newItemNameComponent.setValue("");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void removeItemFromList(ActionEvent actionEvent)&lt;br /&gt;{&lt;br /&gt;  String removedValue = (String)myTestListComponent.getValue();&lt;br /&gt;  if(removedValue != null &amp;&amp; !removedValue.equals(""))&lt;br /&gt;  {&lt;br /&gt;    for(int i = 0; i &lt; listOfItems.size(); i++)&lt;br /&gt;    {&lt;br /&gt;      SelectItem si = (SelectItem)listOfItems.get(i);&lt;br /&gt;      if(si.getValue().equals(removedValue))&lt;br /&gt;      {&lt;br /&gt;        myTestListComponent.setValue(null);&lt;br /&gt;        listOfItems.remove(i);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-343336659121967981?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/343336659121967981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=343336659121967981' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/343336659121967981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/343336659121967981'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/03/programmatic-selectonechoice-example.html' title='A Programmatic SelectOneChoice Example'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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/_aPCqcqMGbCc/Rffwh-SkgbI/AAAAAAAAAEE/PZzBxD8YDUg/s72-c/programmaticlov.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-2057806692582373351</id><published>2007-03-02T13:25:00.000+02:00</published><updated>2007-03-02T13:56:35.982+02:00</updated><title type='text'>Online Diagram Drawing</title><content type='html'>&lt;p&gt;This post demonstrates a simple online diagramming tool developed with FLEX. &lt;a href="http://www.gergerconsulting.com/blog_files/flex/FlexDrawing.zip"&gt;You can download the FLEX Project from here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;FLEX and other RIA technologies such as Laszlo enable us to develop online diagramming /drawing tools that are just as rich as their desktop counterparts.&lt;br /&gt;&lt;br /&gt;Currently, we are building an online survey tool that lets its users specify the flow of a survey in a diagram. The sample application below is a small subset of this diagramming tool.&lt;/p&gt;&lt;br /&gt;&lt;iframe src="http://www.gergerconsulting.com/blog_files/flex/FlexDrawing/FlexDrawing.html" width="100%" height="500" frameborder="0" scrolling="no" style="border: 0px solid black;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2057806692582373351?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2057806692582373351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2057806692582373351' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2057806692582373351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2057806692582373351'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/03/online-diagram-drawing.html' title='Online Diagram Drawing'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-9038448301193497163</id><published>2007-02-28T18:01:00.000+02:00</published><updated>2007-03-01T14:36:38.280+02:00</updated><title type='text'>Filtering Nodes in an ADF Faces Tree Component</title><content type='html'>&lt;p&gt;This post describes a method to filter nodes in an ADF Faces Tree. &lt;a href="http://www.gergerconsulting.com/blog_files/AdfTreeFilterWS.zip"&gt;You can download the sample application from here&lt;/a&gt;. The application is developed in JDeveloper 10.1.3.2.0 and requires a connection to the HR schema.&lt;/p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Sample Application&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the sample application, Regions are the root nodes of the tree. Countries appear as child nodes under the Region they belong.&lt;br /&gt;&lt;br /&gt;Each Region node in the tree has an inputText component. The value entered into the inputText is used to filter the countries in the Region.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_aPCqcqMGbCc/ReWxzxTWjtI/AAAAAAAAAD4/1onvU33KIp4/s1600-h/treefilter.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/ReWxzxTWjtI/AAAAAAAAAD4/1onvU33KIp4/s320/treefilter.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5036627261249720018" /&gt;&lt;/a&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Building the Sample Application&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Please refer to the post “&lt;a href="http://gergerconsulting.blogspot.com/2007/01/adf-tree-component-example.html"&gt;ADF Faces Tree Example&lt;/a&gt;” in this blog for more information on how to build a JSF page with an ADF Faces Tree Component.&lt;br /&gt;&lt;br /&gt;Once you create your page with the tree component follow the steps below to implement the filter functionality.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a HashMap object and its accessor methods in the ApplicationModuleImpl class. This object is going to store the Region-Filter Value pairs entered by the user.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;private HashMap filters = new HashMap();&lt;br /&gt;&lt;br /&gt;public void setFilters(HashMap filters)&lt;br /&gt;{&lt;br /&gt;  this.filters = filters;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public HashMap getFilters()&lt;br /&gt;{&lt;br /&gt;  return filters;&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Override the executeQueryForCollection method of the CountriesView;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;protected void executeQueryForCollection(Object qc, Object[] params, int i)&lt;br /&gt;{&lt;br /&gt;  HashMap fMap = ((AppModuleImpl)getApplicationModule()).getFilters();&lt;br /&gt;  QueryCollection queryCol = (QueryCollection)qc;&lt;br /&gt;  Object[] values = queryCol.getRowFilter().getParamValues();&lt;br /&gt;  String filter = (String)fMap.get(values[0].toString());&lt;br /&gt;  if (filter == null)&lt;br /&gt;    this.setWhereClause(null);&lt;br /&gt;  else&lt;br /&gt;    this.setWhereClause("upper(country_name) like upper('%" + filter + "%')");&lt;br /&gt;  super.executeQueryForCollection(qc, params, i);&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a request scope bean named TreeBean&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;package com.gerger.view;&lt;br /&gt;&lt;br /&gt;import com.gerger.model.AppModuleImpl;&lt;br /&gt;import javax.faces.context.FacesContext;&lt;br /&gt;import oracle.adf.view.faces.component.core.data.CoreTree;&lt;br /&gt;import oracle.adf.view.faces.component.core.input.CoreInputText;&lt;br /&gt;import oracle.adf.view.faces.event.DisclosureEvent;&lt;br /&gt;import oracle.jbo.ApplicationModule;&lt;br /&gt;import oracle.jbo.domain.Number;&lt;br /&gt;import oracle.jbo.uicli.binding.JUCtrlHierNodeBinding;&lt;br /&gt;import oracle.jbo.uicli.binding.JUFormBinding;&lt;br /&gt;&lt;br /&gt;public class TreeBean&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  private CoreInputText treeFilter;&lt;br /&gt;&lt;br /&gt;  public TreeBean()&lt;br /&gt;  {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void treeDisclosureListener(DisclosureEvent disclosureEvent)&lt;br /&gt;  {&lt;br /&gt;    CoreTree tree = (CoreTree)disclosureEvent.getComponent();&lt;br /&gt;    int rowIndex = tree.getRowIndex();&lt;br /&gt;    String attrName = ((JUCtrlHierNodeBinding)tree.getRowData(rowIndex)).getAttributeNames()[1];&lt;br /&gt;    if (attrName.equals("RegionName"))&lt;br /&gt;    {&lt;br /&gt;      String filterValue = (String)getTreeFilter().getValue();&lt;br /&gt;      Number regionId = (Number)((JUCtrlHierNodeBinding)tree.getRowData(rowIndex))&lt;br /&gt;              .getAttribute("RegionId");&lt;br /&gt;      ((AppModuleImpl)getAppModule()).getFilters().put(regionId.toString(), filterValue);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setTreeFilter(CoreInputText treeFilter)&lt;br /&gt;  {&lt;br /&gt;    this.treeFilter = treeFilter;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public CoreInputText getTreeFilter()&lt;br /&gt;  {&lt;br /&gt;    return treeFilter;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public ApplicationModule getAppModule()&lt;br /&gt;  {&lt;br /&gt;    FacesContext fctx = FacesContext.getCurrentInstance();&lt;br /&gt;    ApplicationModule appModule = ((JUFormBinding) fctx.getApplication()&lt;br /&gt;            .createValueBinding("#{bindings}").getValue(fctx))&lt;br /&gt;            .findDataControl("AppModuleDataControl").getApplicationModule();&lt;br /&gt;    return appModule;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;The treeDisclosureListener detects the expand/collapse events of the tree nodes. If the node that fired the event is a Region then the value in the inputText component is added to the HashMap object that stores Region-Filter Value pairs.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Modify the nodeStamp facet so that the tree nodes display the corresponding stamp for each region or city.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add an inputText component to the nodeStamp facet of the tree.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pressing the enter key while the cursor is in an inputText, applies the filter criteria to the child nodes of the active Region node and expands it. This is accomplished by executing the same JavasScript that runs when a tree node is expanded. Below the final text of the JSP page;&lt;/p&gt;&lt;pre class="code"&gt;&amp;lt;%@ page contentType="text/html;charset=windows-1252"%&amp;gt;&amp;lt;%@&lt;br /&gt;taglib uri="http://java.sun.com/jsf/html" prefix="h"%&amp;gt;&amp;lt;%@&lt;br /&gt;taglib uri="http://java.sun.com/jsf/core" prefix="f"%&amp;gt;&amp;lt;%@&lt;br /&gt;taglib uri="http://xmlns.oracle.com/adf/faces" prefix="af"%&amp;gt;&amp;lt;%@&lt;br /&gt;taglib uri="http://xmlns.oracle.com/adf/faces/html" prefix="afh"%&amp;gt;&lt;br /&gt;&amp;lt;f:view&amp;gt;&lt;br /&gt;  &amp;lt;afh:html&amp;gt;&lt;br /&gt;    &amp;lt;afh:head title="ADF - Filter For Af:Tree Component"&amp;gt;&lt;br /&gt;      &amp;lt;meta http-equiv="Content-Type"&lt;br /&gt;            content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;      &amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;      .in { width: 25px; border: 1px solid black; margin-left: 5px;&lt;br /&gt;              font-family: sans-serif;}&lt;br /&gt;      .h { font-weight: bold; }&lt;br /&gt;      &amp;lt;/style&amp;gt;&lt;br /&gt;    &amp;lt;afh:script text="&lt;br /&gt;function releaseFilter(e, obj)&lt;br /&gt;{&lt;br /&gt;  var keynum = (window.event) ? window.event.keyCode : ((e.which) ? e.which : 0);&lt;br /&gt;  if (keynum == 13)&lt;br /&gt;  {&lt;br /&gt;    var objName = obj.name;&lt;br /&gt;    var index = objName.substring(objName.indexOf(':') + 1, objName.lastIndexOf(':'));&lt;br /&gt;    _adftreetree.treeState.action('show', index, obj);&lt;br /&gt;    return false;&lt;br /&gt;  }&lt;br /&gt;}"/&amp;gt;&lt;br /&gt;    &amp;lt;/afh:head&amp;gt;&lt;br /&gt;    &amp;lt;afh:body&amp;gt;&lt;br /&gt;      &amp;lt;af:messages/&amp;gt;&lt;br /&gt;      &amp;lt;af:form&amp;gt;&lt;br /&gt;        &amp;lt;af:tree value="#{bindings.RegionsView.treeModel}" var="node"&lt;br /&gt;                 id="tree"&lt;br /&gt;                 disclosureListener="#{myTreeBean.treeDisclosureListener}"&amp;gt;&lt;br /&gt;          &amp;lt;f:facet name="nodeStamp"&amp;gt;&lt;br /&gt;            &amp;lt;h:panelGrid columns="2" cellpadding="0" cellspacing="0"&amp;gt;&lt;br /&gt;              &amp;lt;af:outputText value="#{node.RegionName}" styleClass="h"&lt;br /&gt;                      rendered="#{node.RegionName != null}"/&amp;gt;&lt;br /&gt;              &amp;lt;af:outputText value="#{node.CountryName}"&lt;br /&gt;                      rendered="#{node.RegionName == null}"/&amp;gt;&lt;br /&gt;              &amp;lt;af:inputText styleClass="in" maximumLength="3"&lt;br /&gt;                      rendered="#{node.RegionName != null}"&lt;br /&gt;                      onkeydown="releaseFilter(event, this);"&lt;br /&gt;                      binding="#{myTreeBean.treeFilter}"/&amp;gt;&lt;br /&gt;            &amp;lt;/h:panelGrid&amp;gt;&lt;br /&gt;          &amp;lt;/f:facet&amp;gt;&lt;br /&gt;        &amp;lt;/af:tree&amp;gt;&lt;br /&gt;      &amp;lt;/af:form&amp;gt;&lt;br /&gt;    &amp;lt;/afh:body&amp;gt;&lt;br /&gt;  &amp;lt;/afh:html&amp;gt;&lt;br /&gt;&amp;lt;/f:view&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-9038448301193497163?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/9038448301193497163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=9038448301193497163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9038448301193497163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/9038448301193497163'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/02/filtering-nodes-of-adf-faces-tree.html' title='Filtering Nodes in an ADF Faces Tree Component'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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/_aPCqcqMGbCc/ReWxzxTWjtI/AAAAAAAAAD4/1onvU33KIp4/s72-c/treefilter.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-2414681941089167921</id><published>2007-02-12T16:50:00.002+02:00</published><updated>2010-08-13T10:54:35.822+02:00</updated><title type='text'>Referencing processScope values for Back button compatibility</title><content type='html'>Events initiated by JSF Components placed inside a switcher tag might be overlooked by the framework, if the scope of the value referenced in the facetName attribute of the switcher is not set correctly.&lt;br /&gt;&lt;br /&gt;In this post, we are going to demonstrate how to use the ADF processScope to solve this problem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/ProcessScopeSample.zip"&gt;You can download the sample application from here&lt;/a&gt;. The application is a JDeveloper 10.1.3.2 workspace. It does not need a database connection to run.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Sample Application&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The sample application contains 3 pages. Each page attempts to perform the same tasks.&lt;br /&gt;&lt;br /&gt;“Button 1” is displayed when the application is run the first time. Clicking “Button 1” hides it and displays “Button 2” with a timestamp (System.currentTimeInMilis()) next to it, indicating the time the “Button 1” is pressed.&lt;br /&gt;&lt;br /&gt;Pressing “Button 2” performs a similar action; “Button 2” is hidden and only a timestamp is displayed, showing the time “Button 2” is pressed.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_aPCqcqMGbCc/RdBnIOLBRqI/AAAAAAAAADs/ULsUsPu8fqM/s1600-h/look3.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5030634174713775778" src="http://4.bp.blogspot.com/_aPCqcqMGbCc/RdBnIOLBRqI/AAAAAAAAADs/ULsUsPu8fqM/s320/look3.gif" style="display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;&lt;br /&gt;All three pages utilize the same bean, named MyBean, to provide their functionality.&lt;br /&gt;&lt;pre class="code"&gt;import javax.faces.event.ActionEvent;&lt;br /&gt;&lt;br /&gt;public class MyBean&lt;br /&gt;{&lt;br /&gt;public MyBean()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;Object screenState = 0;&lt;br /&gt;String clickDate;&lt;br /&gt;&lt;br /&gt;public void doButton1Click(ActionEvent actionEvent)&lt;br /&gt;{&lt;br /&gt;String text = Long.toString(System.currentTimeMillis());&lt;br /&gt;System.out.println("button 1 clicked at:" + text);&lt;br /&gt;this.setClickDate(text);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void doButton2Click(ActionEvent actionEvent)&lt;br /&gt;{&lt;br /&gt;String text = Long.toString(System.currentTimeMillis());&lt;br /&gt;System.out.println("button 2 clicked at:" + text);&lt;br /&gt;this.setClickDate(text);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setClickDate(String clickDate)&lt;br /&gt;{&lt;br /&gt;this.clickDate = clickDate;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getClickDate()&lt;br /&gt;{&lt;br /&gt;return clickDate;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setScreenState(Object screenState)&lt;br /&gt;{&lt;br /&gt;this.screenState = screenState;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Object getScreenState()&lt;br /&gt;{&lt;br /&gt;return screenState;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The three pages differ only in the scope of the value referenced in the facetName attribute of the switcher tag, which is used to determine which commandButton should be displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Request Scope Page&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;af:switcher facetName="#{MyBeanRequestScopeInstance.screenState}"&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="0"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 1"&lt;br /&gt;actionListener="#{MyBeanRequestScopeInstance.doButton1Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{MyBeanRequestScopeInstance.screenState+1}"&lt;br /&gt;to="#{MyBeanRequestScopeInstance.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="1"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 2"&lt;br /&gt;actionListener="#{MyBeanRequestScopeInstance.doButton2Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{MyBeanRequestScopeInstance.screenState+1}"&lt;br /&gt;to="#{MyBeanRequestScopeInstance.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;/af:switcher&amp;gt;&lt;br /&gt;&amp;lt;af:outputLabel value="#{MyBeanRequestScopeInstance.clickDate}"/&amp;gt;&lt;/pre&gt;In this page, the switcher tag uses a request scope instance of MyBean. The value for the facetName attribute is bound to the screenState property of the bean. Clicking “Button 1” works correctly and renders “Button 2” with a timestamp next to it. However, clicking “Button 2”, does not execute its actionListener. The application renders “Button 1” which is not the desired result.&lt;br /&gt;&lt;br /&gt;The MyBean instance used to render “Button 2” was discarded once the request was completed. Clicking “Button 2” invokes a new request. Therefore a new instance of MyBean is created. This resets the value of its screenState attribute to "0". Based on this value of screenState, the framework erroneously concludes that “Button 2” was not rendered to the user agent. Consequently, any events initiated by “Button 2” are not detected by the framework.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wiki.java.net/bin/view/Projects/WhyActionListneterOnTheAjaxCommandLinkAndCommandButtonIsNotInvokedIfRenderedAttributeRefersToRequestScopeBean"&gt;A step by step explanation of why this implementation does not work can be found here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The post in this URL discusses the rendered attribute of JSF Components. However, the same principles can be applied in this context as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Session Scope Page&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;af:switcher facetName="#{MyBeanSessionScopeInstance.screenState}"&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="0"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 1"&lt;br /&gt;actionListener="#{MyBeanSessionScopeInstance.doButton1Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{MyBeanSessionScopeInstance.screenState+1}"&lt;br /&gt;to="#{MyBeanSessionScopeInstance.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="1"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 2"&lt;br /&gt;actionListener="#{MyBeanSessionScopeInstance.doButton2Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{MyBeanSessionScopeInstance.screenState+1}"&lt;br /&gt;to="#{MyBeanSessionScopeInstance.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;/af:switcher&amp;gt;&lt;br /&gt;&amp;lt;af:outputLabel value="#{MyBeanSessionScopeInstance.clickDate}"/&amp;gt;&lt;/pre&gt;In this page, the switcher tag references a session scope instance of MyBean. This page performs the tasks described earlier in this post successfully, unless the browser’s Back button is clicked. Neither “Button 1”, nor “Button 2” works after clicking the browser’s Back button.&lt;br /&gt;&lt;br /&gt;Clicking “Button 1” renders “Button 2” with a timestamp showing T1. Clicking the Back button and then pressing “Button 1” once more, renders “Button 2” again which seems like the correct behavior at first. However, the timestamp next to the “Button 2” is still showing the value T1. If the actionListener of “Button 1” executed we would have seen a different value.&lt;br /&gt;&lt;br /&gt;Clicking the Back button does not update the screenState in the session scope instance of MyBean. Identical to the problem with the request scope page, the screen the user actually sees, and the framework thinks the user sees, are not the same after the user clicks the Back button. Therefore, the button press event that occurs after using the Back button is not recognized by the framework.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Process Scope Page&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="code"&gt;&amp;lt;af:switcher facetName="#{processScope.screenState==null ? 0 : processScope.screenState}"&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="0"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 1"&lt;br /&gt;actionListener="#{MyBeanSessionScopeInstance.doButton1Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{processScope.screenState+1}"&lt;br /&gt;to="#{processScope.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="1"&amp;gt;&lt;br /&gt;&amp;lt;af:commandButton text="Button 2"&lt;br /&gt;actionListener="#{MyBeanSessionScopeInstance.doButton2Click}"&amp;gt;&lt;br /&gt;&amp;lt;af:setActionListener from="#{processScope.screenState+1}"&lt;br /&gt;to="#{processScope.screenState}"/&amp;gt;&lt;br /&gt;&amp;lt;/af:commandButton&amp;gt;&lt;br /&gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;f:facet name="2"&amp;gt;&amp;lt;/f:facet&amp;gt;&lt;br /&gt;&amp;lt;/af:switcher&amp;gt;&lt;br /&gt;&amp;lt;af:outputLabel value="#{MyBeanSessionScopeInstance.clickDate}"/&amp;gt;&lt;/pre&gt;In this page, the switcher’s facetName attribute references the screenState value which is placed in the processScope. Oracle JDeveloper online documentation states that “clicking on the browser's Back button automatically resets processScope to its original state”. Accordingly, the buttons on this page work correctly even after the Back button is clicked.&lt;br /&gt;&lt;br /&gt;Yalım K. Gerger&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6943879080620983015-2414681941089167921?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/2414681941089167921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=2414681941089167921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2414681941089167921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/2414681941089167921'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/02/referencing-processscope-values-for.html' title='Referencing processScope values for Back button compatibility'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://4.bp.blogspot.com/_aPCqcqMGbCc/RdBnIOLBRqI/AAAAAAAAADs/ULsUsPu8fqM/s72-c/look3.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-766382058110824445</id><published>2007-02-03T16:01:00.000+02:00</published><updated>2007-02-27T16:07:29.372+02:00</updated><title type='text'>Using FLEX in ADF / JSF Applications</title><content type='html'>&lt;p&gt;JDeveloper 11g is going to introduce JSF components with built-in rich client capabilities. However 11g is not out yet. This does not mean that you cannot incorporate rich client components to your application today. One of the alternatives is to embed FLEX components into ADF/JSF applications. (FLEX is a Rich Internet Application technology developed by Adobe)&lt;br /&gt;In this post we are going to demonstrate how to achieve this.&lt;br /&gt;&lt;br /&gt;The sample application is fairly straightforward. It contains two input boxes, and two buttons. One of the input boxes is implemented in JSF and the other in FLEX. The application which is a JDeveloper 10.1.3.1 workspace, demonstrates how these two components can pass information to each other. Communication between the two technologies is a critical requirement if both technologies are used in the same application. There are two buttons on the screen to start the communication between the two input boxes. The “from JSF to FLEX” button assigns the value of the JSF Component to its FLEX counterpart, and the “from FLEX to JSF” button does the opposite.&lt;/p&gt;&lt;a href="http://4.bp.blogspot.com/_aPCqcqMGbCc/Rcb8G8P8_9I/AAAAAAAAADU/arhhzdPo3_A/s1600-h/begin.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5027983230188191698" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_aPCqcqMGbCc/Rcb8G8P8_9I/AAAAAAAAADU/arhhzdPo3_A/s320/begin.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/FlexBox_jdev.zip"&gt;You can download the sample application from here&lt;/a&gt;. As mentioned above, the application is a JDeveloper 10.1.3.1 workspace. It does not need a database connection to run.&lt;br /&gt;&lt;br /&gt;The instructions below describe the steps to build the sample application. If you are not familiar with FLEX, links to various FLEX resources can be found at the end of this post.&lt;br /&gt;&lt;br /&gt;The development process consists of building two separate applications. First, the FLEX Input Box must be built using FLEX Builder. Then, a JDeveloper workspace will be built with a JSF Input Box in it. The FLEX Input Box will be incorporated to the JDeveloper workspace so that it can communicate with the JSF InputBox.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/flex/FlexBox_flex.zip"&gt;You can download the FLEX InputBox project from here&lt;/a&gt;. You need FLEX Builder 2 to open it.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Developing the FLEX Input Box&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a new FLEX project (File &amp;gt; New &amp;gt; Flex Project).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Select 'Basic' from the dialog that appears. Click Next.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Enter the name of your project. (FlexBox in our case). Click Next.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Click Finish on the next screen.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The wizard creates a FlexBox.mxml file. Flex Builder help defines MXML as; “...an XML language that you use to lay out the user-interface for Adobe Flex applications. You also use MXML to declaratively define non visual aspects of an application, such as access to server-side data sources and data bindings between user-interface components and server-side data sources...”&lt;br /&gt;In other words, this is the point where a FLEX application starts to execute.&lt;/p&gt;&lt;a href="http://2.bp.blogspot.com/_aPCqcqMGbCc/Rcb-jcP8_-I/AAAAAAAAADg/Y7aH3AZBXto/s1600-h/flexeditor.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5027985918837719010" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_aPCqcqMGbCc/Rcb-jcP8_-I/AAAAAAAAADg/Y7aH3AZBXto/s320/flexeditor.gif" border="0" /&gt;&lt;/a&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Add the following tag inside the mx:Application tag.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;mx:TextInput id="myTextBox" width="200" fontsize="13"&lt;br /&gt;        fontfamily="Arial"/&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add the script tag inside the mx:Application tag. This is where the ActionScript code is going to reside.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;mx:Script&amp;gt;&lt;br /&gt;  &amp;lt;![CDATA[&lt;br /&gt;  ]]&amp;gt;&lt;br /&gt;&amp;lt;/mx:Script&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Modify the mx:Application tag and add the creationComplete attribute. The creationComplete attribute specifies the code that will execute when the FLEX Object is created in client's web browser.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"&lt;br /&gt;  layout="absolute" creationComplete="initApp();"&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;In the initApp() function the external JavaScript functions are coupled with their corresponding ActionScript counterparts. This is done by using the ExternalInterface class. The addCallback method in this class is utilized to provide access to ActionScript methods from within JavaScript. The call method, which is not used in our application, handles access to JavaScript functions from within FLEX.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;public function initApp():void {&lt;br /&gt;  ExternalInterface.addCallback("fromJsfToFlex",&lt;br /&gt;          setMyTextBoxValue);&lt;br /&gt;  ExternalInterface.addCallback("fromFlexToJsf",&lt;br /&gt;          getMyTextBoxValue);&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add the setMyTextBoxValue and getMyTextBoxValue function inside the mx:Script tag.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;public function setMyTextBoxValue(text:String):void {&lt;br /&gt;  myTextBox.text = text;&lt;br /&gt;}&lt;br /&gt;public function getMyTextBoxValue():String {&lt;br /&gt;  return myTextBox.text;&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Click on the MXML file on the navigation tree. Execute the MXML in order to generate the SWF file by selecting Run -&gt; Run FlexBox (or whatever you named your project).&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The SWF file is under &amp;lt;installation&amp;gt;\FlexBox\bin. This folder contains six files that are of interest to us. Below is their description:&lt;br /&gt;&lt;br /&gt;FlexBox.swf: This is the compiled version of our FlexBox application.&lt;br /&gt;&lt;br /&gt;AC_OETags.js: The FLEX Help defines the file as; " a file that provides methods for Flash Player version detection and embedding your Flex application. You call methods in this file from your wrapper"&lt;br /&gt;&lt;br /&gt;History.js, history.swf, history.htm: These files are used to support the back button on the browser.&lt;br /&gt;&lt;br /&gt;FlexBox.html: This HTML file is automatically generated and contains the wrapper so that the SWF file can run in client’s browser. Normally this file contains code to support Flash Player installation and different browsers. We separated some of these functionalities to two new JavaScript files (versionDetect.js and globalVars.js) to simplify the code in the JSP page.&lt;br /&gt;&lt;br /&gt;This completes the development of the FLEX Input Box.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Development of the JDeveloper Workspace&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a new ADF/JSF Application.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Copy the following files from the FLEX project’s bin folder to the public_html folder of the ViewController project in the JDeveloper workspace&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;versionDetect.js&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;globalVars.js&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;AC_OETags.js&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;history.js&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;history.swf&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;history.htm&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;playerProductInstall.swf&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;FlexBox.swf&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Add a page to the workspace. Then add the following code to the page&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;h:form id="jsfForm"&amp;gt;&lt;br /&gt;  &amp;lt;h:panelGrid columns="3" cellpadding="0"&amp;gt;&lt;br /&gt;    &amp;lt;af:outputText value="JSF Component"/&amp;gt;&lt;br /&gt;    &amp;lt;af:objectSpacer/&amp;gt;&lt;br /&gt;    &amp;lt;af:outputText value="FLEX Component"/&amp;gt;&lt;br /&gt;    &amp;lt;af:inputText id="jsfBox"/&amp;gt;&lt;br /&gt;    &amp;lt;h:panelGrid columns="1"&amp;gt;&lt;br /&gt;      &amp;lt;af:commandButton text="&amp;gt;&amp;gt; From JSF to FLEX &amp;gt;&amp;gt;"&lt;br /&gt;              blocking="true"&lt;br /&gt;              onclick="setFlexComponentValue();"/&amp;gt;&lt;br /&gt;      &amp;lt;af:commandButton text="&amp;lt;&amp;lt; From FLEX to JSF &amp;lt;&amp;lt;"&lt;br /&gt;              blocking="true"&lt;br /&gt;              onclick="getFlexComponentValue();"/&amp;gt;&lt;br /&gt;    &amp;lt;/h:panelGrid&amp;gt;&lt;br /&gt;    &amp;lt;h:panelGroup&amp;gt;&lt;br /&gt;      &amp;lt;!-- FlexBox --&amp;gt;&lt;br /&gt;    &amp;lt;/h:panelGroup&amp;gt;&lt;br /&gt;  &amp;lt;/h:panelGrid&amp;gt;&lt;br /&gt;&amp;lt;/h:form&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;The command buttons have calls to getFlexComponentValue() and setFlexComponentValue() on their onclick event.&lt;br /&gt;The blocking attribute is set to true to avoid the submission of the HTML form when the buttons are clicked.&lt;br /&gt;Include the necessary JavaScript files under the &amp;lt;af:head&amp;gt; tag.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;afh:head title="flexBox"&amp;gt;&lt;br /&gt;  &amp;lt;meta http-equiv="Content-Type"&lt;br /&gt;          content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;  &amp;lt;afh:script source="AC_OETags.js"/&amp;gt;&lt;br /&gt;  &amp;lt;afh:script source="globalVars.js"/&amp;gt;&lt;br /&gt;&amp;lt;/afh:head&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Place the HTML that runs the SWF File inside the &lt;?xml:namespace prefix = afh /&gt;&lt;afh:cellformat&gt;tag, where it says &amp;lt;!-- Flex Box --&amp;gt;. Use the &amp;lt;f:verbatim&amp;gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;afh:script source="history.js"/&amp;gt;&lt;br /&gt;&amp;lt;afh:script source="versionDetect.js"/&amp;gt;&lt;br /&gt;&amp;lt;f:verbatim&amp;gt;&lt;br /&gt;  &amp;lt;noscript&amp;gt;&lt;br /&gt;    &amp;lt;object id="FlexBox" width="200" height="25"&lt;br /&gt;      classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"&amp;gt;&lt;br /&gt;      &amp;lt;param name="movie" value="FlexBox.swf"/&amp;gt;&lt;br /&gt;      &amp;lt;param name="quality" value="high"/&amp;gt;&lt;br /&gt;      &amp;lt;param name="bgcolor" value="#869ca7"/&amp;gt;&lt;br /&gt;      &amp;lt;param name="allowScriptAccess" value="sameDomain"/&amp;gt;&lt;br /&gt;    &amp;lt;/object&amp;gt;&lt;br /&gt;  &amp;lt;/noscript&amp;gt;&lt;br /&gt;  &amp;lt;iframe name="_history" src="history.htm" frameborder="0"&lt;br /&gt;          scrolling="no" width="22" height="0"/&amp;gt;&lt;br /&gt;&amp;lt;/f:verbatim&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Preparing the JavaScript code&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Create a JavaScript file (myJScript.js) which will hold the code for getFlexComponentValue, setFlexComponentValue methods and a helper method called getMyApp(). The JavaScript file also contains an if statement to prevent the Internet Explorer from throwing an exception when the page is loaded.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;if (navigator.appName.indexOf ("Microsoft") != -1) {&lt;br /&gt;  window.FlexBox = new Object();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getMyApp(frmName, appName) {&lt;br /&gt;  if (navigator.appName.indexOf('Microsoft') != -1) {&lt;br /&gt;    var formName = window[frmName];&lt;br /&gt;    return formName[appName];&lt;br /&gt;  }&lt;br /&gt;  else {&lt;br /&gt;    return document[appName];&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function setFlexComponentValue() {&lt;br /&gt;  var myApp = getMyApp('jsfForm', 'FlexBox');&lt;br /&gt;  var fieldValue = &lt;br /&gt;          document.getElementById('jsfForm:jsfBox').value;&lt;br /&gt;  var paramStr = '&amp;lt;invoke returntype="javascript"'&lt;br /&gt;          + ' name="fromJsfToFlex"&amp;gt;&amp;lt;arguments&amp;gt;'&lt;br /&gt;          + '&amp;lt;string&amp;gt;' + fieldValue + '&amp;lt;/string&amp;gt;'&lt;br /&gt;          + '&amp;lt;/arguments&amp;gt;&amp;lt;/invoke&amp;gt;';&lt;br /&gt;  myApp.CallFunction(paramStr);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function getFlexComponentValue() {&lt;br /&gt;  var myApp = getMyApp('jsfForm', 'FlexBox');&lt;br /&gt;  var paramStr = '&amp;lt;invoke returntype="javascript"'&lt;br /&gt;          + ' name="fromFlexToJsf"&amp;gt;';&lt;br /&gt;  var value = myApp.CallFunction(paramStr);&lt;br /&gt;  value = value.substring(1, value.length - 1);&lt;br /&gt;  document.getElementById('jsfForm:jsfBox').value = value;&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add the new JavaScript file inside the &amp;lt;afh:head&amp;gt; tag.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class="code"&gt;&amp;lt;afh:head title="flexBox"&amp;gt;&lt;br /&gt;  &amp;lt;meta http-equiv="Content-Type"&lt;br /&gt;          content="text/html; charset=windows-1252"/&amp;gt;&lt;br /&gt;  &amp;lt;afh:script source="AC_OETags.js"/&amp;gt;&lt;br /&gt;  &amp;lt;afh:script source="globalVars.js"/&amp;gt;&lt;br /&gt;  &amp;lt;afh:script source="myJScript.js"/&amp;gt;&lt;br /&gt;&amp;lt;/afh:head&amp;gt;&lt;/pre&gt;&lt;p&gt;This completes the development of the JDeveloper workspace.&lt;br /&gt;&lt;br /&gt;We implemented this technique to replace the ADF Faces Shuttle Component with a FLEX Shuttle Component in one of our ADF Faces applications.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;&lt;em&gt;Links&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.adobe.com/products/flex/"&gt;Adobe Flex Site&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flex.org"&gt;flex.org&lt;/a&gt; &lt;p&gt;&lt;/p&gt;&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/6943879080620983015-766382058110824445?l=gergerconsulting.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gergerconsulting.blogspot.com/feeds/766382058110824445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6943879080620983015&amp;postID=766382058110824445' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/766382058110824445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6943879080620983015/posts/default/766382058110824445'/><link rel='alternate' type='text/html' href='http://gergerconsulting.blogspot.com/2007/02/using-flex-in-adf-jsf-applications.html' title='Using FLEX in ADF / JSF Applications'/><author><name>Gerger</name><uri>http://www.blogger.com/profile/17583607349097506453</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://4.bp.blogspot.com/_aPCqcqMGbCc/Rcb8G8P8_9I/AAAAAAAAADU/arhhzdPo3_A/s72-c/begin.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6943879080620983015.post-6947626518817839980</id><published>2007-01-15T10:57:00.004+02:00</published><updated>2010-08-13T10:55:15.097+02:00</updated><title type='text'>ADF Faces Tree Component Example</title><content type='html'>There are a number of questions on OTN regarding the Tree Component. We hope this post will be helpful in answering some of them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gergerconsulting.com/blog_files/TreeSample.zip"&gt;You can download the sample application from here&lt;/a&gt;. The application is developed in JDeveloper 10.1.3.1.0 and uses the HR schema.&lt;br /&gt;&lt;br /&gt;The sample application contains four simple examples on how to use the ADF Faces tree component;&lt;br /&gt;&lt;br /&gt;1) How to set the focus of the tree to the node that is clicked.&lt;br /&gt;&lt;br /&gt;2) How to detect the type of the node that is clicked.&lt;br /&gt;&lt;br /&gt;3) How to use the polymorphic restriction functionality.&lt;br /&gt;&lt;br /&gt;4) How to change the tree state in a managed bean.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 180%;"&gt;&lt;b&gt;&lt;i&gt;Sample Application&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The application contains a tree that is showing the regions, countries and locations in a hierarchical order.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_aPCqcqMGbCc/Ra8_bcP8_5I/AAAAAAAAACg/zfPkYsgYoi4/s1600-h/tree.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5021301850213515154" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/Ra8_bcP8_5I/AAAAAAAAACg/zfPkYsgYoi4/s320/tree.gif" style="cursor: pointer;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;b&gt;&lt;i&gt;Polymorphic Restriction &lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;This hierarchy is altered only for the Americas region to showcase the polymorphic restriction capability of the tree binding. Polymorphic Restriction is used if the nodes from the same Data Collection Definition should have different child nodes. In the sample tree, Americas is divided into two "subregions"; North America and South America. The countries in the Americas region appear under the appropriate subregion node.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/RatMq8P8_uI/AAAAAAAAAAg/vC936VIpNrY/s1600-h/AmericasNode.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5020190510245805794" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/RatMq8P8_uI/AAAAAAAAAAg/vC936VIpNrY/s320/AmericasNode.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To achieve this, the necessary viewobjects are created using JDeveloper's Business Components Generation Wizard. Since the HR schema does not have the notion of a subregion, a viewobject is created for subregions using the following query;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_aPCqcqMGbCc/RatNIcP8_vI/AAAAAAAAAAs/vlZhTAUuArA/s1600-h/subRegionQuery.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5020191017051946738" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/RatNIcP8_vI/AAAAAAAAAAs/vlZhTAUuArA/s320/subRegionQuery.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The CountriesView viewobject is edited so that the countries in Americas can be linked to either North or South America. &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_aPCqcqMGbCc/RatN68P8_xI/AAAAAAAAABE/XsRq1ef9haw/s1600-h/countriesViewQuery.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5020191884635340562" src="http://1.bp.blogspot.com/_aPCqcqMGbCc/RatN68P8_xI/AAAAAAAAABE/XsRq1ef9haw/s400/countriesViewQuery.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Similarly, a new column named hassubregion_yn is added to the RegionsView SQL query to indicate which regions have a subregion. (At a later stage this column is going to be used in the polymorphic restriction section as the discriminator column.) &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_aPCqcqMGbCc/RatOKcP8_yI/AAAAAAAAABM/G9Z_zVPnqMs/s1600-h/RegionViewQuery.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5020192150923312930" src="http://3.bp.blogspot.com/_aPCqcqMGbCc/RatOKcP8_yI/AAAAAAAAABM/G9Z_zVPnqMs/s400/RegionViewQuery.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The viewlinks between the Regions-SubRegions and SubRegions-Countries
