<?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-297400855948402004</id><updated>2012-01-30T11:59:46.298-08:00</updated><category term='kettle'/><category term='charts'/><category term='reports'/><category term='Virtualization'/><category term='date dimension'/><title type='text'>Vasili Vrubleuski on Buisness Intelligence</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-695638969261704516</id><published>2011-02-25T08:35:00.000-08:00</published><updated>2011-02-25T08:43:00.430-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reports'/><title type='text'>Wrapping long text in Pentaho html reports in IE7</title><content type='html'>&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"&gt;&lt;/div&gt;&lt;div class="" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; To understand the issue just open pentaho demo report in IE7 and for comparation in FF of Chrome.&lt;br /&gt;&amp;nbsp;&amp;nbsp; The report is located in Steel Wheels/Reporting and is called "Order Status". It contain a long line of text which is not wrapped in IE7 and wrapped in other browsers.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Internet Explorer 7:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1_vwLXrAMd8/TWfbkUWCDUI/AAAAAAAAAUc/LABqBmspXPs/s1600/IE7+wrapping+small.GIF" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-1_vwLXrAMd8/TWfbkUWCDUI/AAAAAAAAAUc/LABqBmspXPs/s1600/IE7+wrapping+small.GIF" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; Firefox: &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vS3Ytr6p7to/TWfbwgX3IqI/AAAAAAAAAUk/kEl2GcucFek/s1600/FF+wrapping+small.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-vS3Ytr6p7to/TWfbwgX3IqI/AAAAAAAAAUk/kEl2GcucFek/s1600/FF+wrapping+small.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; There should be a dozen of ways to wrap this text, but I want to show how simple it can be resolved with CSS. &lt;/div&gt;&amp;nbsp;&amp;nbsp; Actually Pentaho report engine do a lot of things to wrap the long line: it sets &amp;lt;table&amp;gt; element with, &amp;lt;col&amp;gt; elements widths, it even wrap each line of data into span element. But IE7 just write it in single line.&lt;br /&gt;&amp;nbsp;&amp;nbsp; One promissing way to overcome this was to use &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;table-layout:fixed&lt;/span&gt; css style. But this not helps because pentaho also have fixed height of rows. And data just trancates without moving to the next line.&lt;br /&gt;&amp;nbsp;&amp;nbsp; My solution is to apply block style to all spans in the table:&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; table td span { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp; display:block;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: left;"&gt;&amp;nbsp;&amp;nbsp; It simple and it works like a charm. If you need you can empower the rule with more strict constraints to keep other tables save.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-695638969261704516?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/695638969261704516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2011/02/wrapping-long-text-in-pentaho-html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/695638969261704516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/695638969261704516'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2011/02/wrapping-long-text-in-pentaho-html.html' title='Wrapping long text in Pentaho html reports in IE7'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-1_vwLXrAMd8/TWfbkUWCDUI/AAAAAAAAAUc/LABqBmspXPs/s72-c/IE7+wrapping+small.GIF' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-4719184975105082526</id><published>2010-09-26T02:17:00.000-07:00</published><updated>2010-09-26T09:16:01.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='charts'/><title type='text'>Production quality charts in Pentaho</title><content type='html'>&amp;nbsp;&amp;nbsp; If you work with Pentaho via Firefox you probably upset with a quality of charts. Flash charts look just great. I'm talking here about JFree charts.&lt;b&gt; This issue affects Firefox only!&lt;/b&gt; IE works a bit better in this case.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; JFreeChart&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; JFreeChart have several advantages over Flash Charts. JFreeChart is a java library that produces images in various formats: gif, jpeg, png. As a result these charts can be incorporated into PDF, Excel and RTF reports. Second advantage comes from Apple - Adobe Flash war. Flash charts will not work on iPhone and iPad. So there are some reasons to use JFreeChart.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Blurred Charts&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; The case when charts in Pentaho are blurred is common enough. I designed a report with a chart in it with the latest Pentaho Report Designer 3.6.1, placed it on a dashboard, where it produced in HTML format, and added pdf export button. When I open my dashboard in Firefox the chart looks blurred. This is mainly concern to any text that is on the chart. Ok, you can understand these charts, but this is not a thing your customer will like. On the other hand charts exported to PDF looks very neat. Also when opened with Internet Explorer charts looks nice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; How to fix it?&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; The problem here is in the way Firefox scaling images. Chart images are usually in high quality, and their size can be twice larger then the place for a chart on html page. So Firefox forced to downscale these images. And here, for the blame of Firefox, it can't do that nice. Firefox just don't have a good image scaling algorithm. You can check &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=486918"&gt;a bug&lt;/a&gt;, which wasn't fixed at the time of this writing.&lt;br /&gt;But the good news is that Firefox have a "bad" images scaling algorithm that can correctly downscale our chart! I'll explain it:&lt;br /&gt;&amp;lt;img&amp;gt; HTML element have a property image-rendering. In Firefox this property can be set to any of 5 values: auto, inherit, optimizeSpeed, optimizeQuality, -moz-crisp-edges. Currently only two rendering algorithms are used. Bilinear resampling for values: auto and optimizeQuality. Nearest neighbor resampling for optimizeSpeed and -moz-crisp-edges values. And here is a trick: Nearest neighbor resampling works better to images with sharp edges. &lt;br /&gt;So all you need is just add following style for all chart images:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;style type="text/css"&amp;gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;img {&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; image-rendering: -moz-crisp-edges &lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;lt;/style&amp;gt;&lt;/div&gt;This is how looks blurred image(you will see blurring in Firefox only):&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.chart1 {    width: 221pt;     height: 185pt;}.chart2 {    width: 221pt;     height: 185pt;    image-rendering: -moz-crisp-edges;}&lt;/style&gt;&lt;br /&gt;&lt;div style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img class="chart1" src="http://3.bp.blogspot.com/_4bEDqOkLJC8/TJ8CO7r_fPI/AAAAAAAAATg/hSUJqtMMMfI/s1600/picture.png" /&gt;&lt;/div&gt;&lt;br /&gt;And here is how looks sharp image(for me it's looks even better then in IE):&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img class="chart2" src="http://3.bp.blogspot.com/_4bEDqOkLJC8/TJ8CO7r_fPI/AAAAAAAAATg/hSUJqtMMMfI/s1600/picture.png" /&gt;&lt;/div&gt;&lt;br /&gt;Sharp image can be rendered with problems if you changed zoom in a browser.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Why pentaho can't fix it?&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Ok, I don't know. May be it consider this bug as not important. But it is certainly a disadvantage, which may scare some potential customers. JasperReports don't have this issue, however I don't sure which way they overcome it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-4719184975105082526?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/4719184975105082526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/09/production-quality-charts-in-pentaho.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/4719184975105082526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/4719184975105082526'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/09/production-quality-charts-in-pentaho.html' title='Production quality charts in Pentaho'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4bEDqOkLJC8/TJ8CO7r_fPI/AAAAAAAAATg/hSUJqtMMMfI/s72-c/picture.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-2257337660465854109</id><published>2010-08-25T14:00:00.000-07:00</published><updated>2012-01-30T10:35:23.764-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kettle'/><title type='text'>Implementing while loop in Kettle</title><content type='html'>&amp;nbsp;&amp;nbsp; I ran into the problem of 'while' loops in Kettle when I was loading data from Yahoo Store API. Yahoo web service allows you to get up to 100 orders pre request. But it don't tell you how many orders it have at all. So I'm sending requests until I get a special response that there are no more orders there.&lt;br /&gt;&amp;nbsp;&amp;nbsp; There are several ways to implement loops in Kettle:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To use "Execute for every input row" flag in job or transformation.&lt;/li&gt;&lt;li&gt;To circle hops in a job.&lt;/li&gt;&lt;li&gt;To use "Repeat" flag in Start step of the job.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp; Every of these approaches have its strengths, weaknesses and area of applicability. Lets consider each of them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;Using "Execute for every input row" flag in job or transformation.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; This is the most safe, correct and native way to implement loops in Kettle, but to use it you need to know in advance how many times you want to run the job inside a loop. If you can get or calculate the number of iterations in advance - just use this approach. For more information about it I can sent you to Slawomir Chodnicki &lt;a href="http://type-exit.org/adventures-with-open-source-bi/2010/06/run-kettle-job-for-each-row/"&gt;blog article&lt;/a&gt; about it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;Circling hops in a job.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; This approach is not safe. When using it keep in mind that loop depth can't be too big. If you broke this rule you risk to get StackOverflowError. That is because Kettle use recursive method calls when running this kind of jobs. So if you believe your loop will not exceed say 10,000 or 100,000 iterations, depending on StackSize settings in your JVM you can run the loop in this way.&lt;br /&gt;&amp;nbsp;&amp;nbsp; For more information about StackOverflowError in Kettle see this JIRA issue(http://jira.pentaho.com/browse/PDI-1463). And more info about implementing this loop you can find in &lt;a href="http://type-exit.org/adventures-with-open-source-bi/2010/06/kettle-quick-hint-loops-in-kettle-jobs/"&gt;another article&lt;/a&gt; of Slawomir Chodnicki.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="font-size: large;"&gt; Using "Repeat" flag in Start step of the job.&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; I recommend this approach if you can't use both above. By checking 'Repeat' flag in Start step of a job you can easy make job running forever. More important question is how to stop it! Ok, The only way to do that in 'Out of the box' Kettle(even 4.0) is to use Abort step. It stops the job and writes an error message in log that job is finished with errors. But that may not be the case! I want my job to stop normal, successful, without errors. Why can't I do that? Why should I flood the log with ERROR messages when actually no errors occured? For that reason I implemented a simple plugin called 'Stop Job' that stops repeating job without writing error messages in log.&lt;br /&gt;&amp;nbsp;&amp;nbsp; You can use this plugin in the same way you use Abort step. And you can add a message which will be written to log with log level BASIC.&lt;br /&gt;&amp;nbsp; Be aware that when using Repeat flag, the job will repeat to run over and over even when one of it steps fails. To stop the job in this case use Abort job step as depicted at the image below.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_4bEDqOkLJC8/THVr76iPIQI/AAAAAAAAAS0/nE-Og8-XuX0/s1600/while-loop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4bEDqOkLJC8/THVr76iPIQI/AAAAAAAAAS0/nE-Og8-XuX0/s1600/while-loop.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Here is a &lt;a href="https://sites.google.com/site/enterprisereporting/StopJob.zip?attredirects=0&amp;amp;d=1"&gt;Stop Job&lt;/a&gt; plugin that you are free to use and modify.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-2257337660465854109?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/2257337660465854109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/08/implementing-while-loop-in-kettle.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/2257337660465854109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/2257337660465854109'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/08/implementing-while-loop-in-kettle.html' title='Implementing while loop in Kettle'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4bEDqOkLJC8/THVr76iPIQI/AAAAAAAAAS0/nE-Og8-XuX0/s72-c/while-loop.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-8696305289845013800</id><published>2010-07-22T13:47:00.000-07:00</published><updated>2012-01-30T10:36:30.947-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kettle'/><title type='text'>Running Kettle jobs from BI Server</title><content type='html'>&amp;nbsp; Most power of Pentaho comes from integration. BI Server is an integration point of multitude tools, technologies and projects. This is one of the secrets of Pentaho success. Pentaho provides access to database systems, allows developer to choose between data manipulation languages(SQL, MDX, MQL), allows to perform data analysis using WEKA data mining tool, suggests different ways for incorporating business logic, helps to perform some actions like sending e-mail based on business decisions and presents the results to user in form of charts and reports.&lt;br /&gt;&amp;nbsp;&amp;nbsp; PDI by itself is also a great consolidating tool. I won't praise it as much as BI server just to save your time, but when consider diversity of data sources and technologies Kettle is even more sociable then BI Server. Just have a look at Kettle &lt;a href="http://wiki.pentaho.com/display/EAI/Pentaho+Data+Integration+v3.2.+Steps"&gt;plugin list&lt;/a&gt; to get it. I believe it can run data to earth from any data source you want.&lt;br /&gt;&amp;nbsp;&amp;nbsp; And now imagine you tie these great tools together. You obtain fine-grained control over Kettle jobs. You can ask user for parameters before passing them to Kettle job. You can use Kettle job as a smart data source for your reports. Using java quartz lib you can schedule Kettle jobs to run with a second-precision (for comparison linux cron allows only minutes-precision).&lt;br /&gt;&amp;nbsp;&amp;nbsp; But many people abandon this power and run Kettle as a separate java process. I saw a lot of unanswered question on forums about running Kettle jobs in BI Server. Up to Kettle version 4.0 some bugs was in the way of using BI Server - PDI couple tied together in enterprise environment. An example is a call of System.gc() in every Kettle job. &lt;br /&gt;&amp;nbsp;&amp;nbsp; Below are some advices for those bold spirits who decide to integrate these tools.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_4bEDqOkLJC8/TEku75y7xvI/AAAAAAAAASs/ViS255gsT0w/s1600/kettle_int.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_4bEDqOkLJC8/TEku75y7xvI/AAAAAAAAASs/ViS255gsT0w/s1600/kettle_int.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Setting up Kettle repository&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; At first you need to show BI server where Kettle repository is. The easiest way to do it is to configure repository settings with Spoon tool. After that open User Home folder on you machine and find .kettle folder. You need to place .kettle to User Home folder of the machine where BI Server is running. &lt;br /&gt;&amp;nbsp;&amp;nbsp; Then open file pentaho-solutions\system\kettle\settings.xml. Use following settings to connect to DB-based kettle repository:&lt;br /&gt;&amp;nbsp; 1. &amp;lt;repository.type&amp;gt;rdbms&amp;lt;/repository.type&amp;gt; &lt;br /&gt;&amp;nbsp; 2. &amp;lt;repository.name&amp;gt;kettle_repo&amp;lt;/repository.name&amp;gt;&lt;br /&gt;&amp;nbsp; 3. &amp;lt;repository.userid&amp;gt;admin&amp;lt;/repository.userid&amp;gt;&lt;br /&gt;&amp;nbsp; 4. &amp;lt;repository.password&amp;gt;admin&amp;lt;/repository.password&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; admin/admin are default user name/password.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; That's it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Custom plugins. &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; If you have custom kettle plugins you need to put it in one of following places: &amp;lt;PATH&amp;gt;/plugins, &amp;lt;User Home&amp;gt;/.kettle/plugins, &amp;lt;pentaho-solutions&amp;gt;/system/kettle/plugins.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Running jobs&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; And now to run Kettle job just add an action like that to your action sequence:&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action-definition&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;component-name&amp;gt;KettleComponent&amp;lt;/component-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action-type&amp;gt;Pentaho Data Integration Job&amp;lt;/action-type&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action-inputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;kettle-logging-level type="string"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action-inputs&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action-resources/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;component-definition&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;directory&amp;gt;&amp;lt;![CDATA[job-dir]]&amp;gt;&amp;lt;/directory&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;job&amp;gt;&amp;lt;![CDATA[job-name]]&amp;gt;&amp;lt;/job&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/component-definition&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action-definition&amp;gt;&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; For start use 'detail' value for kettle-logging-level. It writes enough logs but don't floods log files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-8696305289845013800?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/8696305289845013800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/07/running-kettle-jobs-from-bi-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/8696305289845013800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/8696305289845013800'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/07/running-kettle-jobs-from-bi-server.html' title='Running Kettle jobs from BI Server'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4bEDqOkLJC8/TEku75y7xvI/AAAAAAAAASs/ViS255gsT0w/s72-c/kettle_int.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-2636554203933429850</id><published>2010-06-16T08:52:00.000-07:00</published><updated>2010-06-16T12:00:22.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='date dimension'/><title type='text'>Week number function in MySQL, MDX and Java</title><content type='html'>&lt;span style="font-size: large;"&gt;&amp;nbsp; Introduction&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  Vitually every data warehouse have a date dimension. Also almost every  buisness user require a weekly reports (along with daily, monthly and  other). At this point report developer often uses functions that return  week's number in a year. Trouble may arrise if you decide to use  together functions from different languages and technologies. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  In this article I'll compare week function in Java, JavaScript, MySQL  and MDX(Mondrian). You'll see that without proper attention the same  date could appear in different weeks when using different technologies  together. For example 1-st Jan 2010 could be 0-th week in MySQL, 1-st  week in Java, and 53-rd week somewhere else.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; If you  interested in aspects of generating date dimension I would recommend to  read &lt;a href="http://rpbouman.blogspot.com/2007/04/kettle-tip-using-java-locales-for-date.html"&gt;Roland  Bouman's article&lt;/a&gt; of this topic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;  Java: Calendar&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Java provides class &lt;a href="http://java.sun.com/javase/6/docs/api/java/util/Calendar.html"&gt;java.util.Calendar&lt;/a&gt;  for operating with dates. Calendar class have a constant WEEK_OF_MONTH  for getting week's number. Also Calendar have two properties for  configuring week's number calculations: &lt;b&gt;&lt;span style="font-family: inherit;"&gt;minimalDaysInFirstWeek  &lt;/span&gt;&lt;/b&gt;and &lt;b&gt;&lt;span style="font-family: inherit;"&gt;firstDayOfWeek&lt;/span&gt;&lt;/b&gt;.  Default values for these properties are locale-dependent.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Details: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;firstDayOfWeek &lt;/span&gt;&lt;span style="font-family: inherit;"&gt;- first day of a week&lt;/span&gt;(Sunday, Monday,.. Saturday). &lt;b&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;minimalDaysInFirstWeek &lt;/span&gt;&lt;b&gt;&lt;span style="font-family: inherit;"&gt;-  &lt;/span&gt;&lt;/b&gt;minimal number of days in first week that are also in this year.&lt;/li&gt;&lt;li&gt;first week have number 1. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;  Example:&lt;br /&gt;&lt;blockquote&gt;java.util.Calendar calendar = java.util.Calendar.getInstance();&lt;br /&gt;java.util.Date date = (new java.text.SimpleDateFormat("yyyy-MM-dd")).parse("2010-12-31");&lt;br /&gt;calendar.setTime(date);&lt;br /&gt;int week = calendar.get(java.util.Calendar.WEEK_OF_YEAR);&lt;br /&gt;System.out.println(week);&amp;nbsp; // prints: 52&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; MySQL: WEEK&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; MySQL have a &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week"&gt;WEEK  &lt;/a&gt;function. It also allows user to change calculation algorithm, but  it's not as generic as in Java. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; In MySQL user can  choose between two main approaches for determining the first week of the  year:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It is the first week that starts in this year. Read  as: Sunday or Monday in this year. (American approach)&lt;/li&gt;&lt;li&gt;It is the week that contain January 1-st, if more that 3 days of  this week are in the new year. (European approach) &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://bugs.mysql.com/bug.php?id=1178"&gt;This  discussion&lt;/a&gt; may help to understand that.&lt;br /&gt;&amp;nbsp;&amp;nbsp; If a date falls in the last week of the previous           year, MySQL may return &lt;code class="literal"&gt;0 &lt;/code&gt;&lt;code class="literal" style="font-family: inherit;"&gt;in certain configurations.&lt;/code&gt;&lt;code class="literal"&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; Example:&lt;br /&gt;&lt;blockquote&gt;select WEEK(STR_TO_DATE('Dec 31, 2009','%M %d,%Y')) ; - 52&lt;br /&gt;select WEEK(STR_TO_DATE('Jan 1, 2010','%M %d,%Y')) ; - 0&lt;br /&gt;&lt;br /&gt;select WEEK(STR_TO_DATE('Dec 31, 2009','%M %d,%Y'), 3) ; - 53&lt;br /&gt;select WEEK(STR_TO_DATE('Jan 1, 2010','%M %d,%Y'), 3) ; - 53 &lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; MDX: DatePart&lt;/span&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp; MDX uses VisualBasic's  function: &lt;a href="http://www.w3schools.com/vbscript/func_datepart.asp"&gt;DatePart&lt;/a&gt;.  It allows setting first day of week to any day you like. And for first week of  the year it provides following options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use system setting&lt;/li&gt;&lt;li&gt;Start with the week in which January 1 occurs (default)&lt;/li&gt;&lt;li&gt;Start with the week that has at least four days in the new year&lt;/li&gt;&lt;li&gt;Start with the first full week of the new year &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; JavaScript&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; JavaScript don't  have a standard function for week number. So be careful when writing  your own, or using functions provided with JavaScript libraries and when  you want to use it together with Java's , MySQL's or MDX's functions. &lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; How to use them together?&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; The straightest approach is to avoid using them together. You may pre-generate  date dimension with help of Java for example. And when later you need to  determine week's number by date you may use either Java or date  dimension's table. &lt;br /&gt;&amp;nbsp;&amp;nbsp; However if you still need to use week  number functions from a mix of technologies, be sure that you understand  how each function works, and configure them properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-2636554203933429850?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/2636554203933429850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/06/week-number-function-in-mysql-mdx-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/2636554203933429850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/2636554203933429850'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/06/week-number-function-in-mysql-mdx-and.html' title='Week number function in MySQL, MDX and Java'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-8373513882435802881</id><published>2010-05-15T13:52:00.000-07:00</published><updated>2012-01-30T11:51:15.607-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><title type='text'>Virtual development environment: Part II</title><content type='html'>&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; My &lt;b&gt;&lt;a href="http://vrubleuski.blogspot.com/2010/04/development-environment-for-open-source.html"&gt;previous post&lt;/a&gt;&lt;/b&gt;  describes some alternatives of using virtualization. In this post I'll  dig deeper into details of using virtual machines. &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; Virtualization in software development process&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; Windows host runs several virtual guests with Ubuntu. Virtual guests run as services. One of guests , let say Project 1, is configured to start 1-2 minutes later after Window start. So I have it always running and available at any time. Other guest machines which I don't use are turned off to save memory but ready to be started at any time. Guest machines have a static IP address; run SSH server, Samba server, MySQL server and Apache Tomcat with my web application. Have a look at the schema below for more clear picture of my configuration. &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial,Helvetica,sans-serif; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_4bEDqOkLJC8/S-8Id5ytCHI/AAAAAAAAAR8/qcoDO9BfEFU/s1600/Diagram_1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="Virtual Development Environment" border="0" src="http://2.bp.blogspot.com/_4bEDqOkLJC8/S-8Id5ytCHI/AAAAAAAAAR8/qcoDO9BfEFU/s1600/Diagram_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;My web application for Project 1 is always available for HTTP access, as well as I can connect to it with remote debugger at any time. All files of the web application are shared to windows host with samba server. &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;Virtual Network&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; VMWare provides several ways to setup virtual network. I've choose one based on NAT. It hides your virtual machines from outside world behind the virtual NAT. However you can setup port forwarding to open your web application for outer world. &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; I won't tell in this article about network setup process and static IP address configuration on the guest machine. There are a lot of resources on these topics. And if you are not familiar with Linux yet it would be cruel from my side to steal a wonderful trip over Linux tutorials, blogs, and first steps in command line by replacing exciting discoveries with a several predefined instructions ;).&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp; SSH, Putty and Samba&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; Setting up an SSH Server on your guest is like opening a door to your development environment and to the Linux world. &lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; There are two nice tools for Windows OS: Putty and WinSCP, They allow you to connect to the guest by SSH protocol. With Putty you can run any command on guest, and with WinSCP you can navigate guest's machine file system, and transfer files.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; While WinSCP gives you a lot of power working on Linux, it has some issues. One example is that WinSCP always copy remote file to local temp folder before opening it. As a result it's impossible to use TortoiseSVN over WinSCP. If you feel inconveniences using WinSCP then try Samba.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; Samba opens Linux file system for Windows networks. When you'll additionally map this Linux shared folder as network drive you would have a seamless access to you virtual machine and will be able to use your favorite Windows tools for work with Linux files.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&amp;nbsp; Issues or "A cat in gloves catches no mice"&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; One of the most interest issues I had with VMWare was so called "95% issue". A problem starting a virtual machine because it's hangs at 95 %. When I have read all 10 pages of VMware support forum, seeing lots of requests for help with a common answer from VMWare: "Your platform is not supported" My first intention was to stop using VMWare and switch to Sun's VirtualBox. Many people said that the issue was resolved with disk drivers. I was experimenting with them but with no luck. And only when I start recollecting all changes I made to computer recently, I come to solution. It was a WideCap tool conflicting with VMWare Server. After WideCap's uninstallation "95% issue" was resolved.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; Also I had an issue in using TortoiseSVN on drives shared with Samba, however it's resolving by security settings in Samba configuration.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/297400855948402004-8373513882435802881?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/8373513882435802881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/05/development-environment-for-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/8373513882435802881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/8373513882435802881'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/05/development-environment-for-open-source.html' title='Virtual development environment: Part II'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4bEDqOkLJC8/S-8Id5ytCHI/AAAAAAAAAR8/qcoDO9BfEFU/s72-c/Diagram_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-297400855948402004.post-3027913033083354720</id><published>2010-04-09T06:05:00.000-07:00</published><updated>2012-01-30T11:50:15.723-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Virtualization'/><title type='text'>Virtual development environment: Part I</title><content type='html'>&lt;div style="color: black; font-family: Arial,Helvetica,sans-serif;"&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; In the first post I'll share my experience of using virtualization platforms in software development process.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-size: large;"&gt;Why to use virtualization? &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; I've started to work with several open source and custom projects at the same time. This forced me to think about optimizing my computer for more comfortable and fast work. And especially to get rid of the mess that I had on my local MySQL server: It had around 30 database schemas. And it was difficult to find one of them that I need for the project. Below are main issues that I was solving:&lt;/div&gt;&lt;ul style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;Work with several project simultaneously.&lt;/li&gt;&lt;li&gt;Explore multiple open source projects and compare different versions. I'm  trying to keep track of new features that appear in every version of Pentaho BI Server, Jasper Server and BIRT.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Keep separate databases for every project. It helps to get rid of multiple schemas mess on the same database server.&lt;/li&gt;&lt;li&gt;Learning other operation systems, testing software in different envieronments.&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&amp;nbsp; How to use virtualization?&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; Initially I thought about virtual development environment as a separate virtual machine for every project. With a standard set of tools installed like: SVN, Java, Eclipse, Tomcat. But after trying to work with virualization platforms I have come to decision that it's better to virtualize only server part without GUI.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; Now I open all GUI tools on my host machine. And virtual machines play the role of GUI-less servers. So typical virtual machine is running Linux, MySql and a Tomcat with web application.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; One reason is that you will tend to move all programs like browser and mail client either to the guest machine or to the host. Because it's not convenient to switch often back and forth for copy-pasting. It's easier to use a single machine where you have a Browser, Mail Client, Instant Messangers and IDE.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; Another reason is that almost all virtualization platforms don't allow to use graphics-accelerator card on guest machine. And when you run your favorite IDE on machine without graphics-accelerator it looks quite poor. And most probably you will not like working with it. Fonts are less clear and everything other looks less attractive.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&amp;nbsp; Which virtual platform to choose?&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; When choosing virtualization platform I have considered following options:&lt;/div&gt;&lt;ul style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;VMware(Player, Server, Worstation, ESXi) &lt;/li&gt;&lt;li&gt;VirtualPC&lt;/li&gt;&lt;li&gt;VirtualBox&lt;/li&gt;&lt;li&gt;Xen &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; I've chosen VMware Server. Because it's free and widespread. One thing I like most about VMware Server is that it's running as a windows service, and you never see it neither on taskbar nor in system tray. My guest machines is configured to run after Windows is started. So they never catch my eye, however are always available via virtual network.&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xen and VMware ESXi are more complicated to setup and use. And  also I don't sure if they will help with graphics-accelerator issue.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;&amp;nbsp; The results.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here is a final configuration that I use:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;Host machine&lt;/b&gt;:&amp;nbsp;&lt;/div&gt;&lt;ul style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;OS: Windows Vista Home Premium 64-bit. Windows was preinstalled on my notebook and I'm not yet ready to change it for Linux.&lt;/li&gt;&lt;li&gt;Software:&amp;nbsp; VMware Server 2.0.2&lt;/li&gt;&lt;li&gt;RAM Total: 4 Gb&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;RAM used by Windows Vista: 2Gb. But I need to admit that Windows releases some of allocated memory when other applications require. Up to 500Mb I suppose.&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;Guest machine:&lt;/b&gt;&lt;/div&gt;&lt;ul style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;li&gt;OS:&lt;b&gt; &lt;/b&gt;Ubuntu Server 9.10 32-bit.&lt;/li&gt;&lt;li&gt;Software: Java, SSH server, MySQL, Glassfish, Pentaho&lt;/li&gt;&lt;li&gt;RAM used by Ubuntu Server: less then 50 Mb.&lt;/li&gt;&lt;li&gt;RAM total used when Glassfish is in debug mode: up to 1 Gb - 1.2 Gb.&lt;/li&gt;&lt;li&gt;VMI support.&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&lt;span style="font-size: small;"&gt;&amp;nbsp; Now I use only one always-running guest machine. But VMware Server is smart enough to allocate only as much RAM on host machine as guest's Ubuntu actually use. As a result I'm able to run 2-3 virtual machines on my host. Some of then with GUI. Ubuntu Desktop use about 150Mb.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; I have found my virtual development &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: small; line-height: 115%;"&gt;environment&lt;/span&gt;&lt;span style="font-size: small;"&gt;  worth the time that I spend on it. However I still need to prove and check the advantages, because I'm working in this&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: small; line-height: 115%;"&gt; environment&lt;/span&gt;&lt;span style="font-size: small;"&gt; for only two month.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; In the next post I plan to share the issues and their solutions that I found while setting up virtual machines.&lt;/div&gt;&lt;div style="font-family: Arial,Helvetica,sans-serif;"&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/297400855948402004-3027913033083354720?l=vrubleuski.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vrubleuski.blogspot.com/feeds/3027913033083354720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vrubleuski.blogspot.com/2010/04/development-environment-for-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/3027913033083354720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/297400855948402004/posts/default/3027913033083354720'/><link rel='alternate' type='text/html' href='http://vrubleuski.blogspot.com/2010/04/development-environment-for-open-source.html' title='Virtual development environment: Part I'/><author><name>Vasili</name><uri>http://www.blogger.com/profile/06621553172450153857</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4bEDqOkLJC8/S8dqhOVDFqI/AAAAAAAAAQY/PEgtaqvLZM8/S220/Vasili+Vrubleuski3.jpg'/></author><thr:total>0</thr:total></entry></feed>
