<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>technology on RomanT.net</title><link>https://www.romant.net/categories/technology/</link><description>Recent content in technology on RomanT.net</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International License.</copyright><lastBuildDate>Wed, 02 Jan 2019 15:03:09 +1100</lastBuildDate><atom:link href="https://www.romant.net/categories/technology/index.xml" rel="self" type="application/rss+xml"/><item><title>New Year&#39;s Start</title><link>https://www.romant.net/2019/01/new-years-start/</link><pubDate>Wed, 02 Jan 2019 15:03:09 +1100</pubDate><guid>https://www.romant.net/2019/01/new-years-start/</guid><description>
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/0.8.9/jquery.csv.min.js&#34;&gt;&lt;/script&gt;
&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js&#34;&gt;&lt;/script&gt;
&lt;canvas id=&#34;heart&#34; width=&#34;800&#34; height=&#34;500&#34;&gt;&lt;/canvas&gt;
&lt;script&gt;
var rawCSV = &#39;heart.csv&#39;
var data, labels, dataPoints;
var config;
function drawCanvas() {
config = {
type: &#39;line&#39;,
scaleFontColor: &#39;red&#39;,
data: {
labels: labels,
datasets: [{
label: &#39;Recorded HR Value&#39;,
pointStyle: &#34;circle&#34;,
data: dataPoints,
backgroundColor: &#34;rgba(255, 99, 132, 0.5)&#34;,
borderColor: &#34;rgba(255, 99, 132, 0.5)&#34;,
showLine: false,
lineTension: 0,
borderWidth: 0,
pointRadius: 7,
pointHoverRadius: 13,
}],
borderWidth: 1
},
options: {
responsive: true,
legend: {
display: true,
labels: {
fontColor: &#39;rgb(255, 99, 132)&#39;
},
position: &#34;bottom&#34;
},
hover: {
mode: &#39;index&#39;
},
scales: {
xAxes: [{
type: &#39;time&#39;,
time: {
displayFormats: {
second: &#39;HH:mm:ss&#39;,
minute: &#39;HH:mm:ss&#39;,
hour: &#39;HH:mm&#39;
}
},
display: true,
gridLines: {
display: false
},
ticks:
{
fontColor: &#34;#c6cddb&#34;
}
}],
yAxes: [{
display: true,
gridLines: {
color: &#39;#c6cddb5d&#39;
},
ticks:
{
fontColor: &#34;#c6cddb&#34;
}
}]
},
title: {
display: true,
text: &#39;First Day of Data From the Apple Watch in 2015&#39;,
fontColor: &#34;#c6cddb&#34;
}
}
};
var ctx = document.getElementById(&#39;heart&#39;).getContext(&#39;2d&#39;);
window.myLine = new Chart(ctx, config);
};
function obtainData() {
$.ajax({
type: &#34;GET&#34;,
url: rawCSV,
dataType: &#34;text&#34;,
success: function (response) {
data = $.csv.toObjects(response);
labels = _.map(data, &#39;endDate&#39;);
dataPoints = _.map(data, &#39;value&#39;);
drawCanvas();
}
});
};
$(document).ready(function () {
obtainData();
});
window.onload = function () {
};
&lt;/script&gt;
&lt;p&gt;According to the blog&amp;rsquo;s &lt;a href=&#34;https://www.romant.net/2007/04/in-the-beginning/&#34; target=&#34;_blank&#34;&gt;first post&lt;/a&gt; - I began in 2007. Vast majority of the published ( and those that died in draft form ) were a result of trying to fix things I came upon, and the associated learnings: be it automating WebSphere deployment 😜 or a GPS logger&amp;rsquo;s integration with Lightroom.&lt;/p&gt;
&lt;p&gt;Here are a few new things I learnt week.&lt;/p&gt;
&lt;h2 id=&#34;wordpress-migration&#34;&gt;Wordpress Migration&lt;/h2&gt;
&lt;p&gt;I killed my WP hosting sometime in early &amp;lsquo;18, and just archived the content. Upon a number of conversations early on with &lt;a href=&#34;https://twitter.com/grantorchard&#34; target=&#34;_blank&#34;&gt;Grant&lt;/a&gt; - I contemplated a conversion to Jekyll. But did not have the drive at the time to make the leap. So the WP archive to Jekyll &amp;lsquo;.md zip&amp;rsquo; sat there for ~6 months.&lt;/p&gt;
&lt;p&gt;A few days ago over lunch I had a quick perusal of static generators, and their associated ecosystem trajectories. Picked Hugo as the path forward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Good&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hugo&amp;rsquo;s build, and validation is ⚡️ FAST, and Go&amp;rsquo;s Templating Language reminds me of HandlebarsJS. Fact that Hugo has limited theming &amp;amp; customisations is a boon to focus and productivity&lt;/li&gt;
&lt;li&gt;Markdown everywhere 😍&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The &lt;del&gt;Broken&lt;/del&gt; Still In Limbo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hugo&amp;rsquo;s Customisation
&lt;ul&gt;
&lt;li&gt;Alebit limited in themes and out of the box iintegrations ( a matter of time ) means in some instances like SEO, when you hit roadblocks - you have to design or add them yourself. Plus I really should have got the redirects sorted out prior to changing the structure&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Authoring Experience
&lt;ul&gt;
&lt;li&gt;Should not have match the quality, and fidelity of what Medium.com has created - but it has set the standard of what is possible in the browser for content creation and curation&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Decisions on Image optimisation
&lt;ul&gt;
&lt;li&gt;ie. LQIP, Progressive JPEG re-encoding&lt;/li&gt;
&lt;li&gt;CDNs vs DAMs vs localised imagemagick&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;LD-JSON content extension and integration&lt;/li&gt;
&lt;li&gt;Figuring out when to stop.. do I really need to write a custom Hugo shortcode to display Apple Watch HR data ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;netlify&#34;&gt;Netlify&lt;/h2&gt;
&lt;p&gt;Immediately upon stumbling across &lt;a href=&#34;https://netlify.com&#34; target=&#34;_blank&#34;&gt;Netlify&lt;/a&gt;, they piqued my interest. They have some notable pedigree from Github, Docker, Serverless but most importantly I love the user experience of their product: a streamlined barebones application platform. They have thought through the &lt;a href=&#34;https://medium.com/netlify/how-netlifys-deploying-and-routing-infrastructure-works-c90adbde3b8d&#34; target=&#34;_blank&#34;&gt;landscape of customer demands&lt;/a&gt;, competitors&amp;rsquo; ability, and are now navigating accordingly. Just when you started to think that application hosting, and delivery is a done deal with same set of tools throughout, Netlify re-applies the pattern atop a highly optimising storage, and service coupling back-end to provide a very differentiated out of the box experience.&lt;/p&gt;
&lt;h2 id=&#34;tmux-kubernetes&#34;&gt;tmux &amp;amp; Kubernetes&lt;/h2&gt;
&lt;p&gt;After an immersive week of Kubernetes deployments, and some &lt;a href=&#34;http://wavefront.com&#34; target=&#34;_blank&#34;&gt;Wavefront&lt;/a&gt;, it was starting to be a pain to easily monitor the K8s state whilst trying to script several scaling and failover scenarios. Constant Terminal.app switching was inevitable. Jetisoning my love of &lt;code&gt;screen&lt;/code&gt; it was time to adjust.&lt;/p&gt;
&lt;p&gt;After a little bit of prodding tmux with panels for logs, hosts, deployments, services .. ugh ..&lt;/p&gt;
&lt;p&gt;or I could have just used &lt;a href=&#34;https://github.com/astefanutti/kubebox&#34; target=&#34;_blank&#34;&gt;kubebox&lt;/a&gt; 🤷‍♂️&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;kubebox.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;visualising-apple-health-data&#34;&gt;Visualising Apple Health Data&lt;/h2&gt;
&lt;h3 id=&#34;tl-dr-version&#34;&gt;TL;DR Version&lt;/h3&gt;
&lt;p&gt;Add &lt;a href=&#34;https://gist.github.com/romant/e7262a5b9e2f3b9e2bc0ac8c46a1282e&#34; target=&#34;_blank&#34;&gt;chart.html&lt;/a&gt; to your &lt;code&gt;layouts/shortcodes&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;Within your content use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chart&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;meh&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;800&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;500&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;keh&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;heart.csv&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;the-step-by-step&#34;&gt;The Step-by-Step&lt;/h3&gt;
&lt;p&gt;After a quite poor run with &lt;a href=&#34;https://twitter.com/james65535&#34; target=&#34;_blank&#34;&gt;James&lt;/a&gt;, I decided to see how I went on the trusty phone, since Apple ⌚ tracks all movement. Quickly realised this is an opportunity for a post-dinner mini project.&lt;/p&gt;
&lt;p&gt;Lets walk through how to create the headline graphic with &lt;a href=&#34;https://www.chartjs.org/&#34; target=&#34;_blank&#34;&gt;ChartJS&lt;/a&gt; in Hugo.&lt;/p&gt;
&lt;h3 id=&#34;get-the-data&#34;&gt;Get The Data&lt;/h3&gt;
&lt;p&gt;The team at &lt;a href=&#34;http://www.tdda.info/in-defence-of-xml-exporting-and-analysing-apple-health-data&#34; target=&#34;_blank&#34;&gt;Test-Driven Data Analysis&lt;/a&gt; does an excellent job of showing how you can get the data off the watch, but most importantly convert it from XML to something more usable.&lt;/p&gt;
&lt;p&gt;The fun starts once you have the CSVs.&lt;/p&gt;
&lt;p&gt;Listing the generated &lt;code&gt;apple_health_export&lt;/code&gt; at this point should present you with :&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;mf&#34;&gt;1.3&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xml&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;385&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;export_cda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xml&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;318&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ActiveEnergyBurned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;189&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BasalEnergyBurned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;140&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DistanceWalkingRunning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;89&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HeartRate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;72&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StepCount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AppleExerciseTime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mf&#34;&gt;7.9&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DistanceCycling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mf&#34;&gt;4.1&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FlightsClimbed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;397&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HeartRateVariabilitySDNN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;79&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SwimmingStrokeCount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;77&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DistanceSwimming&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RestingHeartRate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;62&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;WalkingHeartRateAverage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VO2Max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mf&#34;&gt;5.3&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;K&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;971&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BodyMass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;940&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UVExposure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;497&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csv&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;create-the-hugo-chart-js-layout-shortcode&#34;&gt;Create the Hugo Chart JS Layout Shortcode&lt;/h3&gt;
&lt;p&gt;The inside of HeartRate.csv looks like this the following, multipled by hundreds of thousands of rows. So pick a subsection.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&#34;left&#34;&gt;sourceName&lt;/th&gt;
&lt;th align=&#34;center&#34;&gt;endDate&lt;/th&gt;
&lt;th align=&#34;center&#34;&gt;more&lt;/th&gt;
&lt;th align=&#34;right&#34;&gt;value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Roman&amp;rsquo;s Apple Watch&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;2015-05-22 13:05:21 +1100&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;..&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&#34;left&#34;&gt;Roman&amp;rsquo;s Apple Watch&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;2015-05-22 13:43:56 +1100&lt;/td&gt;
&lt;td align=&#34;center&#34;&gt;..&lt;/td&gt;
&lt;td align=&#34;right&#34;&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Charts themselves are quite straight forward, but you will need to map the data first&lt;/p&gt;
&lt;p&gt;Recommended some dirty cut or awk magic, and cleanup if you&amp;rsquo;re going to be sharing / exporting, as naturally it does have your Watch&amp;rsquo;s identifier included.&lt;/p&gt;
&lt;p&gt;Using lodash, map it to distinct &lt;code&gt;dataPoints&lt;/code&gt;, and &lt;code&gt;labels&lt;/code&gt; Arrays for injestion by ChartJS.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toObjects&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;labels&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;endDate&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;dataPoints&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>How AWS taught SSD&#39;s to sprint the marathon with DynamoDB</title><link>https://www.romant.net/2012/07/how-aws-taught-ssds-to-sprint-the-marathon-with-dynamodb/</link><pubDate>Mon, 02 Jul 2012 19:18:45 +0000</pubDate><guid>https://www.romant.net/2012/07/how-aws-taught-ssds-to-sprint-the-marathon-with-dynamodb/</guid><description>&lt;p&gt;&lt;a href=&#34;https://twitter.com/bortoelnino&#34; target=&#34;_blank&#34;&gt;Graham&lt;/a&gt; spends a lot of his time tuning and finding the cause of performance issues on some of the largest WebSphere Portal installations. Inevitably during our recent conversation we turned the topic to SSD&amp;rsquo;s, and performance considerations of database workloads atop.&lt;/p&gt;
&lt;p&gt;Interestingly the most visible SSD proponent and database service is none other than Amazons AWS service DynamoDB. Launched earlier this year, a database service which can be scaled at the turn of the knob, whilst offering performance, availability and the NoSQL feature-set. Considering the whole premature klonking-out with small-block, highly-randomised IO that hits the SSD controllers, you&amp;rsquo;d think a very ambitious undertaking.&lt;/p&gt;
&lt;p&gt;SSD&amp;rsquo;s are great, but not a panacea for all workloads, &lt;em&gt;in their raw state&lt;/em&gt;; especially for write-skewed database workloads. One of the largest causes of headaches for SSD Controller manufacturers and those looking to optimize workloads on SSD&amp;rsquo;s is Write Amplification, otherwise known as the variable amount of operations or re-writes of the original size that have to occur before a write is actually processed / stored by the disk.&lt;/p&gt;
&lt;p&gt;The conversation reminded me of a post by &lt;a href=&#34;http://highscalability.com/blog/2012/5/14/dynamodb-talk-notes-and-the-ssd-hot-s3-cold-pattern.html&#34; target=&#34;_blank&#34;&gt;Todd Hoff&lt;/a&gt; who attended an AWS session of &amp;ldquo;DynamoDB for Developers&amp;rdquo;, and wrote :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Initially they ran into performance problems due to SSD garbage collections cycles&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is inevitable. In my &lt;a href=&#34;http://www.slideshare.net/tarnavski/ssd-101&#34; target=&#34;_blank&#34;&gt;VMUG talk&lt;/a&gt; from last week, I refer to the Controller, and rather its FTL (Flash Translation Layer) as the black box of the device, where all the secret sauce of the unit lives. This isn&amp;rsquo;t by mistake, as all the IP around the type of algorithms to use for wear levelling, garbage collection or any internal process resides within.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2012/07/flash-controller.png&#34;&gt;
&lt;figcaption&gt;• SSD controller&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;A single SSD within a single host, can cope with a lot of write-abuse, as given even a few minutes of &amp;lsquo;idle&amp;rsquo; time, can effectively &amp;ldquo;defragment&amp;rdquo; its block + page layouts, and thus provide a buffer for the next onslaught. Although en-masse, where AWS operates, this simply will not work. As you will have many thousands of users and transactions in the hundreds of millions (+speculation), the drive will not have time to rest and carry out the vital to its survival, levelling and Garbage Collection.&lt;/p&gt;
&lt;p&gt;As the folk over at Tintri have shown, when SSD&amp;rsquo;s are pummelled to a point of saturation OR effectively outside the boundary of when the internal algorithms perform cleanup, the performance or rather the predictability of said performance is significantly diminished. Below you can see latencies of nearly 300ms for an SSD device.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2012/07/tintri.png&#34;&gt;
&lt;figcaption&gt;• tintri latency - source: tintri blog&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;When you&amp;rsquo;re operating a on a significant scale, you can&amp;rsquo;t have &amp;ldquo;unknown&amp;rdquo; hold you back, so that&amp;rsquo;s why (+speculative mode) Amazon worked directly with the manufactures of their SSD suppliers to have a say in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When and how GC kicks in&lt;/li&gt;
&lt;li&gt;RAID design across individual cells (similar to vRAID within Violin)&lt;/li&gt;
&lt;li&gt;Granularity of block mapping
&lt;ul&gt;
&lt;li&gt;How blocks are read+cached+written, and aligned DIRECTLY for DynamoDB&amp;rsquo;s block-sized, in order to not necessarily alleviate, but minimise re-writes&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Locality of writes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The last being most interesting, and I believe an absolute &lt;em&gt;must&lt;/em&gt; for the future of SSD to have an enduring life in the enterprise. Applications, or rather file-systems and thus API&amp;rsquo;s should allow for the ability to direct or at least specify the inter-relationship of data being written. Simply dumping blocks and forgetting about them is simple, but has dire consequences for the life of the storage medium in this case. Surrounding writes, or data operations with meta about them allows for solutions such as DynamoDB to exist and flourish. This requires a very tight integration between the software and hardware. There&amp;rsquo;s a reason Apple is one of the largest NAND / SSD suppliers (direct to consumer) out there, and why they bought Anobit, the Flash-controller firm last year. Go ponder.&lt;/p&gt;</description></item><item><title>Measuring NAND Longevity</title><link>https://www.romant.net/2012/03/measuring-nand-longevity/</link><pubDate>Sat, 03 Mar 2012 10:13:11 +0000</pubDate><guid>https://www.romant.net/2012/03/measuring-nand-longevity/</guid><description>
&lt;p&gt;No secret that NAND/Flash/SSD drives are fundamentally different to their spinning cousins. Yet given the relative lack of high-visibility maturity of NAND technologies within the enterprise, adoption of standards has yet to proliferate. Specifically around the determination of failure rate.&lt;/p&gt;
&lt;p&gt;When we start looking at availability of mechanical drives or most components inside a server, we first refer to the MTBF.&lt;/p&gt;
&lt;figure&gt;
&lt;img style=&#34;background-color: silver; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);&#34; src=&#34;https://www.romant.net/images/2012/03/6e8c6ffd43a244835fb4c9b6a58d10c2.png&#34;&gt;
&lt;figcaption&gt;• My helpful screenshot&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The consumer-grade disks are generally rated at several thousand hours, whereas enterprise-grade drives typically see 1.3million+ hours of operation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Due to the differences between spinning and SSD disk, it isn&amp;rsquo;t always appropriate to use MTBF as a measurement of the drives availability.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The NAND memory cell within the SSD doesn&amp;rsquo;t act in the same fashion as a spinning-disk block-abstraction. It must first be erased, prior to a write being carried out; unlike the spinning medium where a simple overwrite is possible.&lt;/p&gt;
&lt;p&gt;The bits within a NAND cell are registered by electrons moving through a membrane/tunnel-oxide. It is responsible for keeping those electrons in check.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2012/03/floating-oxide.png&#34; alt=&#34;Program / Erase Cycle&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Gradually, over many program/erase operations the oxide starts to wear out. It is this event that should be avoided, as it will slowly start to cause single-bit errors, and cell locations that expect a 0 will be met with a friendly 1.&lt;/p&gt;
&lt;p&gt;For this reason, the Flash Transformation Layer, responsible for all the internals of NAND management &amp;amp; carries out wear-leveling operations which evenly spread the load across hopefully all NAND cells.&lt;/p&gt;
&lt;p&gt;Whilst looking at SSDs, there are SLC, MLC, and recently eMLC based flash memory. Difference being the amount of bits that are stored in the individual NAND cells. SLC has a single, whilst MLC/eMLC store two bits. In a lot of cases they&amp;rsquo;re actually exactly the same physical die, and what separates SLC from MLC/eMLC is the aforementioned FTL, amount of reserved space for the load balancing, and capability of the onboard ECC. This results in tunnel oxide in an SLC-rated drive having a typical life of around 100,000 program/erase cycles and 10,000 for MLC.&lt;/p&gt;
&lt;p&gt;Now that you can see, that -most- of the wear on the drive occurs during cells actually being written to, and not idle time, given lack of moving components. With nothing changing, the larger the drive coupled with better FLT, the longer the drive will endure.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2012/03/endurance-size.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;The reality check comes in the form of manufacturing processes, and as AnandTech points out, with the reduction in die size, results in extra sensitivity required to read each bit - there&amp;rsquo;s an inevitable hit in individual endurance of the cells. Yet the performance has been clearly increasing with each generation of die-size reduction, which is a result of the gain achieved in the controller power and thus any ECC coupled with greater reserved capacity on the disk has a net effect of - higher performance, and &lt;em&gt;total&lt;/em&gt; better longevity.&lt;/p&gt;
&lt;h2 id=&#34;nand-endurance&#34;&gt;NAND Endurance&lt;/h2&gt;
&lt;p&gt;Instead of looking at a mechanical, time-driven metric, the best way to calculate endurance of the drive is stress the oxide tunnel, and see how many times it can be trespassed, which translates to the amount of bits that can be written.&lt;/p&gt;
&lt;p&gt;A standard that only several manufacturers have started to adopt is the JESD218 which gives an Endurance Rating in Terabytes Written (TBW). It also nicely classes client vs enterprise workloads where something as simple as the Power on state is measured (among others… see references).&lt;/p&gt;
&lt;h3 id=&#34;client&#34;&gt;Client&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;40ºC&lt;/li&gt;
&lt;li&gt;8hrs/day&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;enterprise&#34;&gt;Enterprise&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;55ºC&lt;/li&gt;
&lt;li&gt;24hrs/day&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;based on a use scenario in which the SSDs are actively used for some period of time during which the SSDs are written to their endurance ratings&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Most importantly the standard is not using just time as a function by which to measure, but the actual endurance level. Therefore when you see a 20PB &amp;ldquo;TBW Enterprise&amp;rdquo; rating on a drive, you can quickly determine that the endurance of the drive over a 5 year period offers an ability to write 11 Terabytes per day [20*1024/(5*365)].&lt;/p&gt;
&lt;p&gt;Next time you&amp;rsquo;re picking a drive, be weary of the correct metric being used to show you how long the unit will actually last. Knowing that each application is different, with its own workload profile - you will be able to easily figure out how long the said drive will last.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&#34;http://storagecommunity.org/blogs/stephenfoskett/archive/2011/11/22/ssd-is-not-the-best-way-to-use-flash-memory-in-storage.aspx&#34; target=&#34;_blank&#34;&gt;SSD is Not the Best Way To Use Flash Memory in Storage&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&#34;http://www.anandtech.com/show/4043/micron-announces-clearnand-25nm-with-ecc&#34; target=&#34;_blank&#34;&gt;Micron&amp;rsquo;s ClearNAND: 25nm + ECC, Combats Increasing Error Rates&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&#34;www.jedec.org/sites/default/files/docs/JESD218.pdf&#34; target=&#34;_blank&#34;&gt;Solid-State Drive (SSD) Requirements and Endurance Test Method&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&#34;https://tech.ebu.ch/docs/techreview/trev_2011-Q3_ssd_poijes.pdf&#34; target=&#34;_blank&#34;&gt;SSDs heaven or hell? The pros and cons of using NAND flash memory&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>A prediction . . .</title><link>https://www.romant.net/2011/04/a-prediction-.-.-./</link><pubDate>Sat, 02 Apr 2011 18:34:37 +0000</pubDate><guid>https://www.romant.net/2011/04/a-prediction-.-.-./</guid><description>&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2011/04/foundation.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Amazon did a great job of not calling it &amp;lsquo;amazon cloud services&amp;rsquo; when it first launched, this way they stay away from having to define it [cloud]. Once we remember that &amp;lsquo;cloud&amp;rsquo; is really an abstraction of abstractions (even from definitions), we soon realise that apps written for tomorrows consumption don&amp;rsquo;t have to be tied to processor architecture or even a specific OS to run.&lt;/p&gt;
&lt;p&gt;Now AWS are going up the stack and developing their platform play atop the IaaS they already have. Most importantly not concentrating purely on a single facet as performance (like the freshly announced Australian startup OrionVM), but useability and management through an extensive set of API&amp;rsquo;s. The differentiator is a little further up from a mere hypervizor.&lt;/p&gt;
&lt;p&gt;Along the same path of execution in the past year we&amp;rsquo;ve seen VMware reach … up, and look to fill the gaps in Virtual Infrastructure Management+awareness solutions through vSM/Request-Manager for vCD, and more recently vCenter Operations.&lt;/p&gt;
&lt;p&gt;The wonderful thing about technology is that by focusing on the value-add, and services further up, you can actually replace the foundation without the need to take down and rebuild the whole offering; as Apple did with Rosetta in their migration away from PowerPC to Intel, shows us you can provide a platform which negates the tight-coupling of CPU &amp;gt; OS &amp;gt; App of the yesteryear. In the current incarnation of cloud deployments across all worthwhile platforms, we can see a single constant - base compute.&lt;/p&gt;
&lt;p&gt;&amp;hellip; just throwing this out there, but it is not only possible, but most probable that within 24 months, not only AWS but other players will launch an Atom or even ARM-based service publicly, which will do away with offering infrastructure services and concentrate from the get-go on platform; all through the same management interface.&lt;/p&gt;</description></item><item><title>PGP WDE vs. Lion Disk Encryption</title><link>https://www.romant.net/2011/03/pgp-wde-vs.-lion-disk-encryption/</link><pubDate>Sat, 05 Mar 2011 20:54:19 +0000</pubDate><guid>https://www.romant.net/2011/03/pgp-wde-vs.-lion-disk-encryption/</guid><description>&lt;p&gt;Beyond the veil of security, and sense of calm I get when leaving my laptop in the car or airport lobbies; the next most important thing to me is performance (after all, running my VMware lab on a laptop with a single drive isn&amp;rsquo;t exactly cheap). Thus mid last year I invested in a 240 GB OCZ Vertex 2 SSD drive, to run inside my i7 MBP. Encrypting your drive absolutely kills performance, so I did some very un-scientific tests today upon my upgrade to Lion that I wish to share. Below are several Xbench results for HDD performance only, covering &amp;lsquo;fresh&amp;rsquo; HDD, and encrypted. Within Snow Leopard (10.6) with PGP WDE, and in Lion (10.7) with the inbuilt Disk Encryption.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2011/03/p_fresh.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2011/03/p_enc.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;First up as you can see we have the fresh install, and nicely enough, with just an OS upgrade, there&amp;rsquo;s an increase in the disk throughput. More importantly though, is the encrypted performance. Averaging out PGP vs Lion, we witness a doubling of the MB/s capability within the latter. On the one hand, its a shame I have a license for PGP that I spent ~$175AUD, on the other, it served its purpose, and is now going to be replaced by something that comes free with the OS, and performs better. Symantec has a talent for buying dying horses.&lt;/p&gt;</description></item><item><title>Extending vShield</title><link>https://www.romant.net/2011/02/extending-vshield/</link><pubDate>Sun, 13 Feb 2011 11:45:28 +0000</pubDate><guid>https://www.romant.net/2011/02/extending-vshield/</guid><description>
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2011/02/stickman_puzzle.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;what&#34;&gt;What&lt;/h2&gt;
&lt;p&gt;At its core vShield Edge is a very lightweight appliance mostly based on LinuxFromScratch and the rest comes from VMware&amp;rsquo;s BlueLane acquisition.&lt;/p&gt;
&lt;p&gt;If you want to skip the verbosity, skip straight to &lt;a href=&#34;#how&#34;&gt;How&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We are hearing more about vShield recently, because it is a prerequisite component of vCloud Director. It facilitates the critical piece that makes virtual datacenters work; network connectivity. Unfortunately it is still a young product, and as such feature-poor.&lt;/p&gt;
&lt;p&gt;In the last two posts I covered two preludes. The first is how to bake your own NAT forwarding router and use it inplace of vShield within the App Network. Second being how to get inside the vSE appliance.&lt;/p&gt;
&lt;p&gt;… which is where we&amp;rsquo;ll start today.&lt;/p&gt;
&lt;h2 id=&#34;why&#34;&gt;Why&lt;/h2&gt;
&lt;p&gt;The unfortunate repercussion of &amp;lsquo;rolling-your-own&amp;rsquo; is that it simply doesn&amp;rsquo;t scale, and that&amp;rsquo;s what vCD + Cloud is all about. I simply can&amp;rsquo;t deploy my own NAT solution with every vApp, and have it integrate with vCloud API&amp;rsquo;s. So I started at the other end. Customizing vShield Edge itself.&lt;/p&gt;
&lt;p&gt;For this piece, I wanted to add only two extra features&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;DNS resolution
Simply put, this will allow for local DNS resolution within each vApp/Organization. More importantly can be made to work with the currently unused DNS Suffix, when creating networks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic DNS Registration
I have a dream… that one day, when you deploy a resource, it will be able to resolve and &amp;lsquo;see&amp;rsquo; others within the same vApp/Organization or vSE &amp;lsquo;Network Boundary&amp;rsquo;.&lt;/ol&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;how&#34;&gt;How&lt;/h2&gt;
&lt;h3 id=&#34;summary&#34;&gt;Summary&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Get inside vShield Manager&lt;/li&gt;
&lt;li&gt;Search for vShieldEdge.ovf&lt;/li&gt;
&lt;li&gt;Modify it until you&amp;rsquo;re satisfied&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You&amp;rsquo;re done&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/common/em/components/zones/vShield.ovf
/common/em/components/ni/ovf/vshield-ni-infra.ovf
/common/em/components/edge/vShieldEdge.ovf
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that the other vShield products are also available to you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Am not going to go through every command required to get this to work. If you&amp;rsquo;re stuck at any point whilst attempting this, feel free to drop me a line.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First, lets fix the &lt;code&gt;dhcpd.conf&lt;/code&gt; generating file - &lt;code&gt;/root/vSEdge/vse_dhcp_config.pl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Search for &lt;code&gt;&amp;quot;ad-hoc&amp;quot;&lt;/code&gt; and replace that line with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;include \&amp;#34;/etc/rndc.key\&amp;#34;;\nddns-update-style interim;\nddns-updates on;\nddns-domainname \&amp;#34;wcm.lab\&amp;#34;;\nddns-rev-domainname \&amp;#34;in-addr.arpa\&amp;#34;;\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will do several things for us:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setup trust between the dhcp and named daemons via the &lt;code&gt;rndc.key&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set the zone names and allow dhcpd to update them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;code&gt;bind/named&lt;/code&gt; itself - since we&amp;rsquo;re dealing with LinuxFromScratch, you can get the code from the LFS &lt;a href=&#34;http://www.linuxfromscratch.org/blfs/view/6.3/server/bind.html&#34; target=&#34;_blank&#34;&gt;project page&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Compiling &lt;code&gt;named&lt;/code&gt; is done via:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr --sysconfdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc --localstatedir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var --enable-threads --with-libtool --disable-shared &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can then find the executable in &lt;code&gt;./bin/named/named&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately I haven&amp;rsquo;t been able to figure out how to get it to work with the current libraries present within vShield, so you&amp;rsquo;ll also have to copy some libs across as well.&lt;/p&gt;
&lt;p&gt;On vShield:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ mkdir -p /var/named /named_libs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On your compiling machine:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ scp /lib/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;ld-2.5.so,ld-linux.so.2,libc.so.6,libnsl.so.1,libpthread.so.0&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; root@vse:/named_libraries&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once that is all set and done, you&amp;rsquo;re just left with having to configure named like on any other machine, which means you will require at the very least:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;named.conf&lt;/li&gt;
&lt;li&gt;named.ca&lt;/li&gt;
&lt;li&gt;rndc.conf + key&lt;/li&gt;
&lt;li&gt;zone files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will be using the ones I&amp;rsquo;ve prepared earlier for other projects.&lt;/p&gt;
&lt;p&gt;… and execute it using:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ /named_libs/ld-2.5.so --library-path /named_libs/ /usr/sbin/named -g -c /etc/named.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I wrapped the above and placed it into &lt;code&gt;/etc/inittab&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;After you&amp;rsquo;re done, you overwrite the &lt;code&gt;vShieldEdge.ovf&lt;/code&gt; within the manager VM, and have vSE Manager provision your own, custom vShield Edge appliance.&lt;/p&gt;
&lt;p&gt;The above is meant for those that like to get their fingers a little dirty trying to improve things, this sometimes will break expected functionality.&lt;/p&gt;
&lt;p&gt;Some gotchas, and debugging tips:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If for some reason vSE isn&amp;rsquo;t starting, and by looking at the console, you can see that &lt;code&gt;ifconfig&lt;/code&gt; doesn&amp;rsquo;t return any interfaces with an IP, run &lt;code&gt;/root/vSEdge/edge_configure.pl&lt;/code&gt; - this will nearly always tell you where you went wrong in your &lt;code&gt;vse_ script&lt;/code&gt; modifications&lt;/li&gt;
&lt;li&gt;To find linked libraries for any other packages you wish to inject, use &lt;code&gt;export LD_DEBUG=&amp;lt;type&amp;gt;&lt;/code&gt; before running a binary where the &lt;code&gt;&amp;lt;type&amp;gt;&lt;/code&gt; is referring to &lt;code&gt;[versions | files | libs]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t forget to disable/modify &lt;code&gt;iptables&lt;/code&gt;, otherwise you&amp;rsquo;ll have trouble getting inside vSE&lt;/li&gt;
&lt;li&gt;For anything else, there&amp;rsquo;s my contact page&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>By Example: Enabling SSH in vShield Edge</title><link>https://www.romant.net/2011/01/by-example-enabling-ssh-in-vshield-edge/</link><pubDate>Fri, 07 Jan 2011 21:54:10 +0000</pubDate><guid>https://www.romant.net/2011/01/by-example-enabling-ssh-in-vshield-edge/</guid><description>
&lt;p&gt;I wanted to learn more about how vShield Edge + Manager appliance works under the covers. By default, no inbound SSH capability exists. In the video I show you how you can enable it, so that you can extract the innards of the appliance, and hack away to create something beautiful.&lt;/p&gt;
&lt;p&gt;Initially started writing this as a static blog-post, unfortunately too many screenshots + and explanations would be required. Hence I simply recorded some of the steps.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
&lt;iframe src=&#34;//player.vimeo.com/video/18527859&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h1 id=&#34;caveats&#34;&gt;Caveats&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;There is no possibility that this is in any way supported by our VMware friends, please don&amp;rsquo;t raise SR&amp;rsquo;s on a vSE that you&amp;rsquo;ve Roman&amp;rsquo;ed up!&lt;/li&gt;
&lt;li&gt;In the last step, I replace the &lt;code&gt;root&lt;/code&gt; user password. Be sure to restore it from the backup immediately upon ssh&amp;rsquo;ing back in. As vCloud Director uses that password to interact with vSE, and will be unable to do so.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Exception: Error creating Edge VM</title><link>https://www.romant.net/2011/01/exception-error-creating-edge-vm/</link><pubDate>Thu, 06 Jan 2011 11:20:35 +0000</pubDate><guid>https://www.romant.net/2011/01/exception-error-creating-edge-vm/</guid><description>&lt;p&gt;Upon trying to create a NAT-Routed network within vCD, you can be faced with a&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Error creating Edge VM&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you look within the debug logs, the excerpt of the stack-trace will look something like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;vmware&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssdc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;util&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;LMException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;creating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Shield&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;network&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appliance&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;Thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;619&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Caused&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;by:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;vmware&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ssdc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;util&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;LMException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;creating&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Edge&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;17&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Caused&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;by:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;NullPointerException&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2011/01/Error-creating-Edge-VM.png&#34;&gt;
&lt;/figure&gt;
&lt;p&gt;The cause is a misconfigured ESX Host that is sitting in the same resource pool as others connected to the dVS against which vCD is trying to create the network group.&lt;/p&gt;
&lt;p&gt;Solution being to either remove the host, or alternatively verify that all hosts are connected EQUALLY to the dVS. This is where Host Profiles come in very handy.&lt;/p&gt;
&lt;p&gt;I apologise for the lack of a vCD screenshot, I fixed the problem before realising that it was one; at least there will always be logs. Once you do see this again, feel free to send in a screenie.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Related Local Files&lt;/strong&gt; - &lt;code&gt;logs/vcloud-container-debug.log&lt;/code&gt;&lt;/p&gt;</description></item><item><title>By Example - Networks in vCloud Director</title><link>https://www.romant.net/2011/01/by-example-networks-in-vcloud-director/</link><pubDate>Wed, 05 Jan 2011 17:31:08 +0000</pubDate><guid>https://www.romant.net/2011/01/by-example-networks-in-vcloud-director/</guid><description>
&lt;p&gt;In order to demonstrate to some customers, partners and colleagues that haven&amp;rsquo;t had a chance to enjoy vCloud Director yet, I&amp;rsquo;ve recently prepared some videos which demonstrate how you setup a network within an Organization on top of vCD. They&amp;rsquo;re designed to be completely self-sufficient, so the &amp;lsquo;intro&amp;rsquo; is re-used.&lt;/p&gt;
&lt;h4 id=&#34;direct-network&#34;&gt;Direct Network&lt;/h4&gt;
&lt;p&gt;This is by far the most … straight forward way of providing your VM&amp;rsquo;s with an outside connection.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
&lt;iframe src=&#34;//player.vimeo.com/video/18452797&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h4 id=&#34;routed-network&#34;&gt;Routed Network&lt;/h4&gt;
&lt;p&gt;The elegance of vShield Edge allows you to configure DHCP, Firewall, and NAT IP Mapping through an easy to click-through UI. Be it for your Organization or vApp. Here I&amp;rsquo;ll show you how to setup a NAT-Routed vShield backed internal network.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
&lt;iframe src=&#34;//player.vimeo.com/video/18452976&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;h4 id=&#34;custom-ish-vapp-network&#34;&gt;Custom&amp;rsquo;ish vApp Network&lt;/h4&gt;
&lt;p&gt;There are environments that have already invested a lot in customizing their own DHCP server rules, Dynamic DNS registrations, reverse lookups, firewalls… the list goes on. In essence, here I can show you how you can re-use your current soft-router, and have it used within the vCloud realm.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
&lt;iframe src=&#34;//player.vimeo.com/video/18453095&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;</description></item><item><title>vCloud Director Not Starting</title><link>https://www.romant.net/2010/12/vcloud-director-not-starting/</link><pubDate>Tue, 21 Dec 2010 14:26:23 +0000</pubDate><guid>https://www.romant.net/2010/12/vcloud-director-not-starting/</guid><description>&lt;p&gt;Attempted to bring up vCD and saw the following in &lt;code&gt;vcloud-container-debug.log&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Start&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Level&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Event&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dispatcher&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StartupUtils&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;starting&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;application:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Could&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;network&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;port:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;address:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;172&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;225&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;131&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;BindException&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Cannot&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;assign&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requested&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PlainSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;socketBind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Native&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PlainSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PlainSocketImpl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;365&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;One of these days I&amp;rsquo;ll allocate some static IP&amp;rsquo;s to my whole Fusion-bound vLab. Until then - I will put up with DHCP assigned IP&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;To fix, first stop vCD with &lt;code&gt;vmware-vcd stop&lt;/code&gt;, then modify &lt;code&gt;cloud-director/etc/global.properties&lt;/code&gt; to reflect the IP changes for:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vcloud.cell.ip.primary
consoleproxy.host.https
vcloud.cell.ips
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.. or anywhere you have the old address[es]. Some love from &lt;code&gt;sed&lt;/code&gt; will do the trick here&lt;/p&gt;</description></item><item><title>Unsupported element &#39;VirtualSystemCollection&#39; &#43; how to split an OVA</title><link>https://www.romant.net/2010/07/unsupported-element-virtualsystemcollection-how-to-split-an-ova/</link><pubDate>Sun, 11 Jul 2010 04:23:38 +0000</pubDate><guid>https://www.romant.net/2010/07/unsupported-element-virtualsystemcollection-how-to-split-an-ova/</guid><description>&lt;p&gt;A colleague recently stumbled upon this beautiful error when trying to import an OVA to an ESX and ESXi host:&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/07/unsupported_element.png&#34;&gt;
&lt;figcaption&gt;Unsupported element &#39;VirtualSystemCollection&#39;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The cause is that the packaged OVA is actually a vApp extract from vCenter, and standalone hosts (not under management of a vCenter) are not able to accomodate vApp.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&#34;http://www.vmware.com/products/cloud-os/application.html&#34; target=&#34;_blank&#34;&gt;VMware&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;vApps: Ensuring seamless application movement and choice between clouds&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It seems a single host isn&amp;rsquo;t &amp;ldquo;cloud&amp;rdquo;-enough. 😉&lt;/p&gt;
&lt;p&gt;An OVA that is extracted from vCenter which contains only a single VM is extremely close in its structure to the OVF apart from a tuple called … *drum roll* … &lt;code&gt;&amp;lt;VirtualSystem ovf:id=&amp;quot;cake&amp;quot;&amp;gt;&lt;/code&gt; in the single, and &lt;code&gt;&amp;lt;VirtualSystemCollection ovf:id=&amp;quot;cake&amp;quot;&amp;gt;&lt;/code&gt; in one that encompasses multiple machines. So a hosts ability is limited to not being able to parse this collection of machines and discriminate between their properties, that&amp;rsquo;s why you need to spend $ on vCenter!&lt;/p&gt;
&lt;p&gt;This is all great, but my colleague is now stuck half-way around the world with a set of machines that need to be deployed on a single host, and all of them are saved within this OVA.&lt;/p&gt;
&lt;p&gt;An OVA is just a wrapper for an OVF (think VMX) and some VMDK&amp;rsquo;s {anyone VM/OVconfused yet?}.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;$ tar tf cake.ova
cake.ovf
cake-disk1.vmdk
cake-disk2.vmdk
cake-disk3.vmdk
cake-disk4.vmdk
cake-disk5.vmdk
cake.mf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We can see there&amp;rsquo;s a collection of VMDK&amp;rsquo;s, the manifest which inside looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SHA1(cake.ovf)= 03AD765EC45B90E13BC22D0115088F08021F2AE5
SHA1(cake-disk1.vmdk)= 92BB519FD1926D4F3C170C727C037E2D5D79775B
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;… and more importantly the OVF, which describes the OVA motherload.&lt;/p&gt;
&lt;p&gt;My thoughts were at first to just create a VMX for each of the VMDKs and then I can go to bed. Unfortunately one of the machines has two disks, so the first issue is with figuring out how the OVF nests the &lt;code&gt;rasd&lt;/code&gt; - Resource Allocation Setting Data (as per the &lt;a href=&#34;http://www.dmtf.org/standards/published_documents/DSP0243_1.1.0.pdf&#34; target=&#34;_blank&#34;&gt;DMTF OVF Specification V1.1&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;http://linux.die.net/man/1/xmlindent&#34; target=&#34;_blank&#34;&gt;Mr. Pekka&lt;/a&gt; for writing &lt;code&gt;xmlindent&lt;/code&gt; or you could just use the &lt;a href=&#34;http://xmlindent.com/&#34; target=&#34;_blank&#34;&gt;online&lt;/a&gt; version&lt;/p&gt;
&lt;p&gt;I was quickly able to see to which VM disks 3+4 belonged to, and create the appropriate VMX skeleton. Now if only there was a parser…&lt;/p&gt;</description></item><item><title>Configuring NAT on ESX and ESXi</title><link>https://www.romant.net/2010/07/configuring-nat-on-esx-and-esxi/</link><pubDate>Sun, 11 Jul 2010 02:35:22 +0000</pubDate><guid>https://www.romant.net/2010/07/configuring-nat-on-esx-and-esxi/</guid><description>
&lt;p&gt;ESX doesn&amp;rsquo;t have NAT inbuilt, so here&amp;rsquo;s how to configure it with the help of a VMware appliance called &lt;a href=&#34;http://www.pfsense.com/&#34; target=&#34;_blank&#34;&gt;pfSense&lt;/a&gt; (an Open Source firewall/router).&lt;/p&gt;
&lt;p&gt;There are three components in this setup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Host&lt;/li&gt;
&lt;li&gt;router/pfSense&lt;/li&gt;
&lt;li&gt;NAT Client&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;host&#34;&gt;Host&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;A great read for beginners and those refreshing is the VMware Virtual Networking Concepts &lt;a href=&#34;http://www.vmware.com/files/pdf/virtual_networking_concepts.pdf&#34; target=&#34;_blank&#34;&gt;whitepaper&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now lets create a network that our NAT&amp;rsquo;ed VMs will be using.
&lt;img src=&#34;https://www.romant.net/images/2010/07/Step2.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;When prompted under Connection Type, select a &amp;lsquo;VM Network&amp;rsquo;, as this is for the typical traffic within the Virtual Machine (not IO or management of your machines).&lt;/p&gt;
&lt;p&gt;Lets create a vSwitch that doesn&amp;rsquo;t connect to anything, a dud, a blankie. This will be our NAT&amp;rsquo;ed environment. It&amp;rsquo;s quite important that you &lt;strong&gt;DON&amp;rsquo;T&lt;/strong&gt; connect a network card to this vSwitch to prevent any inadvertent DHCP leakage. Make sure you have nothing selected.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/07/Step3_121.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Give it a name to differentiate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/07/Step3_13.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;re done, click finish and you will have something two network available to your VMs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VM Network&lt;/li&gt;
&lt;li&gt;NAT Network&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/07/Step_last_summary_2.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Time to setup pfSense. Once you&amp;rsquo;ve downloaded and extracted it. You have the option of either copying it directly to your datastore and then adding directly to inventory, or importing via the &lt;a href=&#34;http://www.vmware.com/products/converter/&#34; target=&#34;_blank&#34;&gt;Standalone Converter&lt;/a&gt;. I find the latter is always faster.&lt;/p&gt;
&lt;h2 id=&#34;router-pfsense&#34;&gt;router/pfSense&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Incase you&amp;rsquo;re converting pfSense first (like I did whilst re-doing it for this post), I recommend you disable the network interfaces until you&amp;rsquo;ve finished setting up the host networks. We&amp;rsquo;ll enable these in a later step.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/07/pfsense_convert_precaution.png&#34;&gt;
&lt;figcaption&gt;Disabled interfaces&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Once the conversion is complete, time to configure our virtual router. pfSense is provided with two NICs out of the box. One for the WAN interface (which is your internal LAN), and one for &amp;lsquo;its&amp;rsquo; LAN - the one on which it will be servicing DHCP requests.&lt;/p&gt;
&lt;p&gt;Mark down the last 4 digits of the MAC address, these will help to validate the following step.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/07/Step_last.png&#34;&gt;
&lt;figcaption&gt;Configuring pfSense NICs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Start the pfSense VM. You will be guided through the mapping of the interfaces, and just to make sure - check to see the MAC addresses matching to the VM Network (in my case 67:3c) and NAT Network (67:46).&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/07/pfsense_config_2.png&#34;&gt;
&lt;/figure&gt;
&lt;p&gt;Upon following the wizard, and if you&amp;rsquo;ve followed everything accordingly (or rather I documented the steps properly) you will be shown the interfaces within pfSense, their mapping (WAN vs LAN) and IP addresses.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/07/pfsense_summary.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;nat-client-s&#34;&gt;NAT Client[s]&lt;/h2&gt;
&lt;p&gt;You are now ready to assign clients on this host to the NAT Network and have them pick up addresses dished out by your shiny new appliance.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/07/client_network.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;The whole setup takes just under 5 minutes from start to finish to complete.&lt;/p&gt;</description></item><item><title>VSI_NODE_net_tcpip_plumb when adding Ports</title><link>https://www.romant.net/2010/06/vsi_node_net_tcpip_plumb-when-adding-ports/</link><pubDate>Sat, 05 Jun 2010 08:50:32 +0000</pubDate><guid>https://www.romant.net/2010/06/vsi_node_net_tcpip_plumb-when-adding-ports/</guid><description>
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/06/VSI_NODE_net_tcpip_plumb.png&#34;&gt;
&lt;figcaption&gt;Exception when adding a network&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Adding a new port (i.e. a vMotion interface) to a vSwitch on vSphere/ESX leads to this lovely error message. If you check your &lt;code&gt;vpxd.log&lt;/code&gt; you&amp;rsquo;ll see something the image verbalised.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2010&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;04&lt;/span&gt; &lt;span class=&#34;nl&#34;&gt;15:30:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;52&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;411&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;03152&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;info&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;App&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VpxLRO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;];&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;task&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;54417&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;36589&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;NetworkSystem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;updateNetworkConfig&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fault&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PlatformConfigFault&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fault&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;PlatformConfigFault&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dynamicType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;,&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;faultCause&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vmodl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;MethodFault&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;SysinfoException: Node (VSI_NODE_net_tcpip_plumb) ; Status(bad0017)= Out of resources; Message= Instance(0): Input(4) if=0 portset=VMkernel macaddr=00:50:56:76:16:67 tsomss=65535 &amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;Error during the configuration of the host: SysinfoException: Node (VSI_NODE_net_tcpip_plumb) ; Status(bad0017)= Out of resources; Message= Instance(0): Input(4) if=0 portset=VMkernel macaddr=00:50:56:76:16:67 tsomss=65535 &amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Key here is the &lt;code&gt;Out of resources;&lt;/code&gt; message. The reason for this is none other than the default number of ports for the vSwitch on ESX is 24, and if you have VM&amp;rsquo;s or other interfaces using up ports (such as AppSpeed probes), you will quickly run out. Switch this easily by going to Configuration -&amp;gt; Networking -&amp;gt; Properties [for the vSwitch in question] and up the value up to and including your growth requirements for the future.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/06/step1_2-1.png&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/06/step3_4.png&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/06/step_final.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;note&#34;&gt;Note&lt;/h2&gt;
&lt;p&gt;After you setup a new host, set it to more ports than you require, as you&amp;rsquo;ll need to restart the host for the ports to be provisioned; best to do this immediately after installation.&lt;/p&gt;
&lt;p&gt;I think a better message would be to explicitly say &lt;em&gt;&amp;ldquo;Out of available ports on vSwitch - [blah]&amp;rdquo;&lt;/em&gt;; instead of the semi-cryptic one presented.&lt;/p&gt;</description></item><item><title>Creating bootable ISO : Linux, Solaris, Windows</title><link>https://www.romant.net/2010/05/creating-bootable-iso-linux-solaris-windows/</link><pubDate>Mon, 31 May 2010 12:44:54 +0000</pubDate><guid>https://www.romant.net/2010/05/creating-bootable-iso-linux-solaris-windows/</guid><description>
&lt;p&gt;Whenever you&amp;rsquo;re automating OS deployments, you will at one point require to build a custom ISO, with your own kickstart, jumpstart or an OEM folder with apps and instructions to boot.&lt;/p&gt;
&lt;p&gt;Here are three &lt;code&gt;mkisofs&lt;/code&gt; commands that you can use for each OS, and to ease your search a little.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You will require to be in the &lt;code&gt;root&lt;/code&gt; of each ISO directory
Remember the lone period &amp;ldquo;.&amp;rdquo; at end of each statement&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;linux&#34;&gt;Linux&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;mkisofs -q -V VOLUME_NAME -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -boot-info-table -R -J -T -o /LinuxISO.iso .&amp;lt;br /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;solaris&#34;&gt;Solaris&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;mkisofs -b boot/grub/stage2_eltorito -c .catalog -no-emul-boot -boot-load-size &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -boot-info-table -relaxed-filenames -l -ldots -r -N -d -D -V VOLUME_NAME -o /SolarisISO.iso .&amp;lt;br /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;windows&#34;&gt;Windows&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Bootable_NoEmulation.img&lt;/code&gt; normally lives in the [BOOT] folder. I tend to move it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;mkisofs -q -b Bootable_NoEmulation.img -no-emul-boot -boot-load-seg &lt;span class=&#34;m&#34;&gt;1984&lt;/span&gt; -boot-load-size &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -iso-level &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; -J -joliet-long -l -D -relaxed-filenames -N -V VOLUME_NAME -o /WindowsISO.iso .&amp;lt;br /&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Slipstream VMware Video Drivers into Windows</title><link>https://www.romant.net/2010/05/slipstream-vmware-video-drivers-into-windows/</link><pubDate>Sun, 09 May 2010 18:21:45 +0000</pubDate><guid>https://www.romant.net/2010/05/slipstream-vmware-video-drivers-into-windows/</guid><description>
&lt;p&gt;Am currently working on automating WebSphere Portal install on Windows. I do not want Windows restarting the first time it comes up, whether its for installing VMware Tools, or any of its drivers.&lt;/p&gt;
&lt;p&gt;What I require is to add the VMware Video drivers to the base Windows installation. This will work for XP/Windows 2003. You can easily integrate the drivers once you&amp;rsquo;ve found them with the use of nLite. The trick is in finding them.&lt;/p&gt;
&lt;p&gt;First thing you&amp;rsquo;ll need is the &lt;a href=&#34;http://blog.romant.net/vmware/where-to-find-http://blog.romant.net/vmware-tools-on-the-esx-host/&#34; target=&#34;_blank&#34;&gt;VMware Tools ISO&lt;/a&gt; that we discovered a couple posts back.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/05/exploded_iso.png&#34;&gt;
&lt;figcaption&gt;Exploded VMware Tools ISO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: I rename &lt;code&gt;VMware Tools[64].msi&lt;/code&gt; to &lt;code&gt;vtools[64].msi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The next step is to extract the &lt;code&gt;vtools64.msi&lt;/code&gt; which you can accomplish with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;msiexec /a vtools64.msi /qb TARGETDIR=c:\driver\
&lt;/code&gt;&lt;/pre&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/05/Screen-shot-2010-05-09-at-5.50.52-PM.png&#34;&gt;
&lt;figcaption&gt;Extracting VMware Tools&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;After a few seconds, you&amp;rsquo;re done. By navigating to the Common64\VMware\Drivers\Video folder, you will find the vmx_svga.inf that you need for nLite as well as the vmx_svga.sys which is the driver. When it comes to nLite - just point it to the directory.&lt;/p&gt;
&lt;h2 id=&#34;vmware-video-directory-listing&#34;&gt;VMware video directory listing&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;vmwogl32.dll
vmwogl64.dll
vmx_fb.dll
vmx_mode.dll
vmx_svga.cat
vmx_svga.inf
vmx_svga.sys
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>ESX 4.x kickstart and booting from SAN</title><link>https://www.romant.net/2010/05/esx-4.x-kickstart-and-booting-from-san/</link><pubDate>Sat, 08 May 2010 20:39:04 +0000</pubDate><guid>https://www.romant.net/2010/05/esx-4.x-kickstart-and-booting-from-san/</guid><description>&lt;p&gt;Kickstarts are wonderful. Simple and effective. The ability to automate the mundane installations for *nix all about. In my case, I need to automate the installation of hosts that will be booting from SAN.&lt;/p&gt;
&lt;p&gt;We have an admin that once installed a couple of ESX hosts atop other host&amp;rsquo;s boot LUNs. It&amp;rsquo;s pointless blaming the admin, as there&amp;rsquo;s a basic rule that must be followed at all times that will prevent this from happening.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; - Don&amp;rsquo;t let the host see boot LUNs for any other host than itself.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/05/Untitled.png&#34;&gt;
&lt;figcaption&gt;ESX Dedicated Boot LUNs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This can be accomplished with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LUN Masking (on the host HBA)&lt;/li&gt;
&lt;li&gt;SAN Zoning (on your fabric)&lt;/li&gt;
&lt;li&gt;Port Grouping (on your storage)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Horror story aside, lets have a look at a basic kickstart for the ESX. When you install ESX by hand, it creates a &lt;code&gt;ks.cfg&lt;/code&gt; file in root&amp;rsquo;s home. Inside you will find the host configuration at the time of install.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ASSUMPTION: You have already provisioned the necessary space on your array for your host, and have mapped the host access to that LUN.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After a few modifications and some cleanup, I ended up with the following&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;accepteula
keyboard us
auth --enablemd5 --enableshadow
&lt;span class=&#34;c1&#34;&gt;#this will work on all &amp;#39;fresh&amp;#39; LUNs. If you want to an&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#existing vmfs store, then add --overwritevmfs&lt;/span&gt;
clearpart --firstdisk
install cdrom
rootpw --iscrypted &lt;span class=&#34;nv&#34;&gt;$1$MoIxblff$td1t5Oe4Kq8KZqyByh5Bc1&lt;/span&gt;
timezone --utc &lt;span class=&#34;s1&#34;&gt;&amp;#39;Australia/Sydney&amp;#39;&lt;/span&gt;
network --addvmportgroup&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; --device&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vmnic0 --bootproto&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dhcp
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;/boot&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ext3 --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1100&lt;/span&gt; --onfirstdisk
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;none&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vmkcore --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;110&lt;/span&gt; --onfirstdisk
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;HOSTNAME_boot&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vmfs3 --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9232&lt;/span&gt; --grow --onfirstdisk
virtualdisk &lt;span class=&#34;s1&#34;&gt;&amp;#39;esxconsole&amp;#39;&lt;/span&gt; --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8232&lt;/span&gt; --onvmfs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;HOSTNAME_boot&amp;#39;&lt;/span&gt;
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;swap&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;swap --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1228&lt;/span&gt; --onvirtualdisk&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;esxconsole&amp;#39;&lt;/span&gt;
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;/var/log&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ext3 --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt; --onvirtualdisk&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;esxconsole&amp;#39;&lt;/span&gt;
part &lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; --fstype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ext3 --size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; --grow --onvirtualdisk&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;esxconsole&amp;#39;&lt;/span&gt;
%post --interpreter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;bash
&lt;span class=&#34;c1&#34;&gt;# ntp settings&lt;/span&gt;
esxcfg-firewall --enableService ntpClient
chkconfig ntpd on
cat &amp;gt; /etc/ntp.conf &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;# ---- ntp.conf ----
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;restrict default kod nomodify notrap nopeer noquery
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;restrict -6 default kod nomodify notrap nopeer noquery
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;#replace with your ntp server address
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;server x.x.x.x
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;hostname HOSTNAME
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;sed -i -e &amp;#34;s/PermitRootLogin.*/PermitRootLogin yes/g&amp;#34; /etc/ssh/sshd_config
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I set out to install onto the FIRST available drive. In my case, thats always LUN 0, and if by some accident there&amp;rsquo;s already a VMFS on it - installation will cease (you can accomplish a force through by adding &lt;code&gt;--overwritevmf&lt;/code&gt; to the &lt;code&gt;clearpart&lt;/code&gt; line.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/05/Screen-shot-2010-05-08-at-8.14.24-PM.png&#34;&gt;
&lt;figcaption&gt;ESX Kickstart Installation&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Once the setup completes you will be greeted with a &amp;ldquo;Press &amp;lt;enter&amp;gt; to reboot&amp;rdquo; - in a normal RedHat install you can get around this by adding &lt;code&gt;reboot --eject&lt;/code&gt; just before the &lt;code&gt;%post&lt;/code&gt; statement. Unfortunately this doesn&amp;rsquo;t seem to work for ESX. I&amp;rsquo;ll update the post once I find a way.&lt;/p&gt;
&lt;p&gt;You may notice that I keep referring to &lt;code&gt;HOSTNAME&lt;/code&gt; - that&amp;rsquo;s because the &lt;code&gt;ks.cfg&lt;/code&gt; is part of another script which puts together a custom ISO for each of our blades.&lt;/p&gt;</description></item><item><title>Where to find VMware tools on the ESX host</title><link>https://www.romant.net/2010/04/where-to-find-vmware-tools-on-the-esx-host/</link><pubDate>Wed, 28 Apr 2010 14:06:10 +0000</pubDate><guid>https://www.romant.net/2010/04/where-to-find-vmware-tools-on-the-esx-host/</guid><description>&lt;p&gt;Whenever you update your host, there&amp;rsquo;s a chance that VMware tools have been updated.&lt;/p&gt;
&lt;p&gt;To get them, head over to &amp;ldquo;/vmimages/tools-isoimages&amp;rdquo; on the host and you&amp;rsquo;ll be greeted with:&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/04/esxhost_vmware_tools_location.png&#34;&gt;
&lt;/figure&gt;
&lt;p&gt;If you&amp;rsquo;re just after the &lt;code&gt;rpm&lt;/code&gt; then rip open the ISO and you&amp;rsquo;re done.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/04/vmware_tools_iso.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;</description></item><item><title>Migrating vCenter as a Virtual Machine</title><link>https://www.romant.net/2010/01/migrating-vcenter-as-a-virtual-machine/</link><pubDate>Mon, 25 Jan 2010 21:40:57 +0000</pubDate><guid>https://www.romant.net/2010/01/migrating-vcenter-as-a-virtual-machine/</guid><description>
&lt;p&gt;The caveats of running vCenter within a VM has been written about to death. So I will mention only what I never found in those posts that is relevant to the environment within which I work:&lt;/p&gt;
&lt;h5 id=&#34;greater-virtual-performance-over-physical&#34;&gt;greater virtual performance over physical&lt;/h5&gt;
&lt;p&gt;Not every environment is large enough to dedicate a whole 8/12/40/96 GB of RAM Blade to a vCenter. Its simply a waste; the premise on which people dive into virtualisation is that green feeling, saving the environment or the saving the USD.&lt;/p&gt;
&lt;p&gt;So businesses tend to &amp;lsquo;donate&amp;rsquo; a physical box that will be the nucleus of their virtual offering. Yet this tends to be an underpowered, not-far from decommission door stopper.&lt;/p&gt;
&lt;p&gt;As a Virtual Machine, you&amp;rsquo;re able to utilize the benefit of prompt resizing of the hardware, and at the ability to easily place it on higher-powered machines.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the benefit, although what REALLY happens when you decide to move your vCenter around?&lt;/p&gt;
&lt;p&gt;vMotion Mission Statement:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Storage VMotion lets you relocate virtual machine disk files between and across shared storage locations while maintaining &lt;strong&gt;continuous service availability&lt;/strong&gt; and complete transaction integrity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To me, that reads - &amp;ldquo;stuff will happen while we move your data&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Unfortunately that isn&amp;rsquo;t always the case. Here&amp;rsquo;s the scenario.&lt;/p&gt;
&lt;p&gt;Host&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DS1&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DS2&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DS3&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;vCenter was living on DS1 (slow-LUN), and I wanted to put it across to DS2. Since vCenter is very important, it&amp;rsquo;s continuous service availability is crucial. Read: {perfect candidate for svMotion}.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/01/vsphere_reconnecting.jpg&#34;&gt;
&lt;figcaption&gt;The message that never went away&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;What happened next is counterintuitive to the credo. The vSphere client freezes, and no new connections can be made to vCenter. If you start monitoring the datastores (kudos to VMware) the VM is actually being transferred.&lt;/p&gt;
&lt;p&gt;Once the migration completed, the first time I had to reconnect the vSphere Client; I wasn&amp;rsquo;t happy with this outcome. So I attempted a DS2-&amp;gt;DS3 (both fast-LUNs). Not only did my connection to vCenter not drop this time, but the whole process was seamless and worked as advertised.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/01/Screen-shot-2010-01-25-at-9.21.31-PM.png&#34;&gt;
&lt;figcaption&gt;vCenter Migration&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I ended up moving the VM in which I house SQL Server (vCenterDB) in the same fashion to the faster LUNS, and everything proceeded to operate as designed.&lt;/p&gt;
&lt;p&gt;Lesson learnt: get decent storage.&lt;/p&gt;</description></item><item><title>Inconsistency in ESX consuming large LUNs</title><link>https://www.romant.net/2010/01/inconsistency-in-esx-consuming-large-luns/</link><pubDate>Sun, 24 Jan 2010 14:40:46 +0000</pubDate><guid>https://www.romant.net/2010/01/inconsistency-in-esx-consuming-large-luns/</guid><description>&lt;p&gt;… go with me here.&lt;/p&gt;
&lt;p&gt;You are going to have black caviar (highly recommended). You were provided with 50 grams; you figure you can fit at most 45 grams onto the piece of that delicious dark-rye. So what do you do? Do you disregard and thus throwout the 5 grams? … Well it&amp;rsquo;s not important what YOU would do, its important what VMware does!&lt;/p&gt;
&lt;p&gt;Mr. ESX tends to look at the excruciatingly expensive, sustenance-providing caviar, and throws out the majority that it can&amp;rsquo;t handle, and opts for the remains in the hard-to-reach crevices of the jar.&lt;/p&gt;
&lt;p&gt;What does this all mean for the geek?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a decrepit limit of 2TB minus 512 bytes for each LUN that you can present to ESX. Anything larger, it has no love for. So if you were to present it with a 4TB LUN, you would naïvely assume that you would get the bastardised version of 2TB and the rest would be lost in the ether. I guess that would be somewhat logical.&lt;/p&gt;
&lt;p&gt;Lets try it:&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/01/capacity_available.jpg&#34;&gt;
&lt;figcaption&gt;Capacity vs. Available Space&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;There you have it. Instead of actually using up as much as ESX&amp;rsquo;ly possible (~2TB) from a LUN that has been allocated, VMware chose to only pick up the left-overs (~500GB).&lt;/p&gt;</description></item><item><title>Re-Installing vCenter with new DSN credentials</title><link>https://www.romant.net/2010/01/re-installing-vcenter-with-new-dsn-credentials/</link><pubDate>Wed, 13 Jan 2010 12:57:56 +0000</pubDate><guid>https://www.romant.net/2010/01/re-installing-vcenter-with-new-dsn-credentials/</guid><description>&lt;p&gt;If you&amp;rsquo;re ever in a situation where you&amp;rsquo;ve moved the vCenter database, and have actually changed the login details for the database that the DSN points to, and you&amp;rsquo;re using SQL Server. Then upon re-installing vCenter, you will be greeted with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Database job [Past day stats rollupvcenter] was created by another user. Please use the same user to setup your DSN or remove the job. ODBC Error: [Microsoft][SQL Native Client][SQL Server]The specified @job_name (&amp;lsquo;Past Day stats rollupvcenter&amp;rsquo;) does not exist.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2010/01/vCenter_Install.png&#34;&gt;
&lt;figcaption&gt;Source: IDC 2010 SMO Analysis | repurposed&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;When vCenter is first installed, it schedules jobs with the help of the system DB - MSDB. What&amp;rsquo;s left to do, is just remove the jobs created by the previous dbo of your vCenter data. You achieve this by first listing what jobs are created on the SQL Server.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;job_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;originating_server_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start_step_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;category_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;owner_sid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_level_eventlog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_level_email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_level_netsend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_level_page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_email_operator_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_netsend_operator_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notify_page_operator_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete_level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date_created&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date_modified&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version_number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msdb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dbo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sysjobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2010/01/sql_server.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;As you can see, four scheduled operations exist. Thankfully you don&amp;rsquo;t have to worry about just clearing this table, as there&amp;rsquo;s a stored procedure that comes within MSDB → &lt;code&gt;sp_delete_job&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Run it for each of the jobs, and you&amp;rsquo;ll be ready to continue installing vCenter.&lt;/p&gt;</description></item><item><title>SOAP wrapper for LabManager written in PHP</title><link>https://www.romant.net/2009/09/soap-wrapper-for-labmanager-written-in-php/</link><pubDate>Wed, 30 Sep 2009 23:49:30 +0000</pubDate><guid>https://www.romant.net/2009/09/soap-wrapper-for-labmanager-written-in-php/</guid><description>&lt;p&gt;LabManager is a great product for when you have to deal with provisioning of images in a hands-off fashion from the IT team. If you&amp;rsquo;re already a vSphere shop, users don&amp;rsquo;t need access to a vSphere client and can manage the lifecycle of their machines through the browser (Windows only though for the console).&lt;/p&gt;
&lt;p&gt;For what I&amp;rsquo;m building, I needed access to the API provided by VMware, and unfortunately, it is only provided as a SOAP interface. The documentation is a given, although it is of quite a poor standard. Since case-sensitivity is a must, not to mention &lt;a href=&#34;http://twitter.com/romant/status/4496796125&#34; target=&#34;_blank&#34;&gt;correct parameters&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So how do we go about creating an easy to use PHP page which would consume the .NET WebService?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$namespace&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://vmware.com/labmanager&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$soap_dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$soap_dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$soap_dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;organizationname&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$soap_dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;workspacename&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cake&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$client&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;SoapClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://server_name/LabManager/SOAP/LabManager.asmx?wsdl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$header&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;SOAPHeader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AuthenticationHeader&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$soap_dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;__setSoapHeaders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;configurationType&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ListConfigurations&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;print_r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After using some of the methods, I decided to write a wrapper for the LabManager&amp;rsquo;s API, so I could use it within other applications we develop inhouse. You can then call this directly from the command line, and integrate it with your bash/perl - and not have to re-invent the wheel.&lt;/p&gt;
&lt;p&gt;As such - I present to you &lt;a href=&#34;http://code.google.com/p/phlabmanager&#34; target=&#34;_blank&#34;&gt;phLabManager&lt;/a&gt; - &amp;ldquo;Simple, lightweight wrapper for LabManager 4.0 SOAP API&amp;rdquo; written in PHP.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve grabbed the labmanager.php, you can write quite succinct calls directly to the methods, without worrying about the implementation. There&amp;rsquo;s an &lt;a href=&#34;http://code.google.com/p/phlabmanager/wiki/HowTo&#34; target=&#34;_blank&#34;&gt;example&lt;/a&gt; on usage available.&lt;/p&gt;
&lt;p&gt;I haven&amp;rsquo;t finished implementing all the methods, and in the coming days will endeavour to do so, alternatively - you can do it, and commit into the tree. It would be great to get some help in optimizing my rough implementation.&lt;/p&gt;</description></item><item><title>vSphere Client - Unexpected end of file has occurred</title><link>https://www.romant.net/2009/08/vsphere-client-unexpected-end-of-file-has-occurred/</link><pubDate>Sun, 23 Aug 2009 17:10:17 +0000</pubDate><guid>https://www.romant.net/2009/08/vsphere-client-unexpected-end-of-file-has-occurred/</guid><description>&lt;p&gt;In the unfortunate scenario that the machine you use to run your vSphere client ever crashes (unfortunately VMware doesn&amp;rsquo;t make an OSX Client), you may wish to start up the client, and click the performance tab. You may be greeted with the following when selecting the &amp;ldquo;Performance&amp;rdquo; tab:&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/08/vSphereClient_Unexpected.png&#34;&gt;
&lt;figcaption&gt;Unexpected end of file has occurred. The following elements are not closed&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;This is due to a file which hosts all the chart settings (an XML-based key value pair collection) becomes corrupt, and is actually cut off.&lt;/p&gt;
&lt;p&gt;Its quite easily found at : &lt;code&gt;c:\Documents and Settings\user_name\Application Data\VMware\server_name-charts.xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;From here, you have several choices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;revert to a backup&lt;/li&gt;
&lt;li&gt;delete it&lt;/li&gt;
&lt;li&gt;clear it (just place &lt;code&gt;&amp;lt;ChartSettings /&amp;gt;&lt;/code&gt; inside of it)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s all there is to it. Happy vSphere&amp;rsquo;ing&lt;/p&gt;</description></item><item><title>CLI Wizard for WebSphere Portal CumulativeFix Management</title><link>https://www.romant.net/2009/08/cli-wizard-for-websphere-portal-cumulativefix-management/</link><pubDate>Sat, 08 Aug 2009 22:40:00 +0000</pubDate><guid>https://www.romant.net/2009/08/cli-wizard-for-websphere-portal-cumulativefix-management/</guid><description>&lt;p&gt;The unfortunate side-effect of any enterprise-grade software is that it is difficult to manage. There are at least two reasons that I see for this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Training + certification revenue&lt;/li&gt;
&lt;li&gt;Tools that are clobbered together over years of being driven by big-customer requests/demands, and not a defined architectural vision.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One such example is installing and uninstalling cumulative fixes for WebSphere. My first step was to download the PUI, followed by its extraction and then I had to load the extremely cumbersome and slow Java GUI. Then to use it, I either dropped into X11 forwarding the session from my Mac, or for my unfortunate colleagues - they have to start a VNC session first and then use the client. Stupid (not the colleagues).&lt;/p&gt;
&lt;p&gt;So I came up with something that wrapped the &lt;code&gt;updatePortal.sh&lt;/code&gt; in between a purpose built interface, accessible from the command line. I bring you, the CLI Wizard for Portal CF&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;Lets disassemble the necessary steps first, and start with uninstalling.&lt;/p&gt;
&lt;p&gt;Portal places all the CF definitions into &lt;code&gt;PortalServer/version/PK{number}.efix&lt;/code&gt;, these are just xml files which describe the PK. What we need is the PK number and the description.&lt;/p&gt;
&lt;p&gt;After a few lines of bash, on a server with several CF&amp;rsquo;s installed the output will look similar to this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2009/07/PK_list_installed.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Not very useful though, yet. So we now allow for actually selecting one of the CF&amp;rsquo;s through the great bash &lt;code&gt;select&lt;/code&gt; statement.&lt;/p&gt;
&lt;p&gt;Having the PK number, we are easily able to cut/awk and pass this to the trusty &lt;code&gt;updatePortal.sh&lt;/code&gt; to do its uninstalling deed.&lt;/p&gt;
&lt;p&gt;The installation is much the same, although you must first obtain the PK jar. In the office we have a build server that spits them out in (in zips with the readme). So the script first of all gives a listing of available CF&amp;rsquo;s to install, and then when you choose the appropriate zip, it will download it and install.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&#34;http://blog.romant.net/wp-content/uploads/2009/08/cf_install.sh&#34; target=&#34;_blank&#34;&gt;download the complete script&lt;/a&gt;, and let me know if you have any issues. I thought of distributing this on Google Code, so others that deal with Portal can extend it, as Portal&amp;rsquo;s Java GUI leaves much to be desired.&lt;/p&gt;</description></item><item><title>How to virtualize your office - without their knowledge</title><link>https://www.romant.net/2009/07/how-to-virtualize-your-office-without-their-knowledge/</link><pubDate>Sat, 25 Jul 2009 19:46:29 +0000</pubDate><guid>https://www.romant.net/2009/07/how-to-virtualize-your-office-without-their-knowledge/</guid><description>&lt;p&gt;People complain that they don&amp;rsquo;t have enough machines, and when they need servers, they&amp;rsquo;re available. Two of the problems that were prevalent in my workplace. I set out to attempt to rectify this by firstly measuring the utilization rate on some of our busiest servers.&lt;/p&gt;
&lt;p&gt;Instead of installing and managing software that monitored CPU/Memory/HDD/Network utilization,  I merely converted the whole machine to a virtual one - and offered it as a replacement under the same IP to all the users. This was done with a quick P2V conversion of the server into a VMware image pushed to a dedicated IBM Blade server running ESX 4.0 - which had far more grunt than the originating server. A few tweaks on the DHCP server to assign the right IP to the new born, and we were away. NOTE: the usage shown is of the machine running on the Blade, not on its original hardware; I&amp;rsquo;ll come back to this later in the post.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/cpu.png&#34;&gt;
&lt;figcaption&gt;CPU Usage - 1 Machine&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/disk.png&#34;&gt;
&lt;figcaption&gt;Disk Usage - 1 Machine&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/memory.png&#34;&gt;
&lt;figcaption&gt;Memory Usage - 1 Machine&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Before I continue, I&amp;rsquo;ll just tell you more about the software stack that is deployed on this specific machine. There is WebSphere + AppServer as well as a local instance of DB2. Mostly as you can see, its Java based, so memory usage will be fairly straight forward as it all gets eaten up on app start, and the variations that we see are from DB2. (I could use a remote DB and alleviate the memory variation all-together, which is something I will be doing with all deployments from now on).&lt;/p&gt;
&lt;p&gt;Firstly now, the CPU Usage, throughout the day with constant use of the machine, averaged out to ~5%. Am certain this isn&amp;rsquo;t unheard of, for those that actual look at their data centres and the individual/un-optimized servers. Disk usage, aligns quite nicely with the Memory footprint, which once again points to DB2 doing its job.&lt;/p&gt;
&lt;p&gt;So what can I improve here? -  I can do several things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;remove local DB, and deploy into a contained VM cluster, or just point it at a dedicated machine (which will also be a VM)&lt;/li&gt;
&lt;li&gt;if I offload the DB, I can increase the heap size within WebSphere for increased startup time, and overall performance&lt;/li&gt;
&lt;li&gt;put &lt;strong&gt;&lt;em&gt;more&lt;/em&gt;&lt;/strong&gt; machines onto this single Blade&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Realising the first two points only after looking at the graphs (to write this post), I still haven&amp;rsquo;t implemented them. I did though - do the third.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/cpu_3.png&#34;&gt;
&lt;figcaption&gt;CPU Usage - 3 Machines&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/disk_3.png&#34;&gt;
&lt;figcaption&gt;Disk Usage - 3 Machines&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2009/07/memory_3.png&#34;&gt;
&lt;figcaption&gt;Memory Usage - 3 Machines&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Very quickly you realise that although there&amp;rsquo;s an abundance of processing power, there&amp;rsquo;s &lt;em&gt;just&lt;/em&gt; not enough RAM on the host blade. The ration of Ghz to Gbyte&amp;rsquo;s of RAM is about 3:1, instead it should be at the very least 1:1. Keep this a consideration next time have to put a new purchase order for more machines.&lt;/p&gt;
&lt;p&gt;In the beginning of the post, I mentioned that the current blade host although more powerful than the original home of this software stack, it is far more scalable, and that is one of the reasons why I wanted to transfer and consolidate the numerous x345&amp;rsquo;s we have onto several blades. Most of the x345&amp;rsquo;s that were hosting servers are now turned off, the remaining few, I&amp;rsquo;m building a storage cluster with, to act as a iSCSI target server for the ESX&amp;rsquo;ed Blades.&lt;/p&gt;
&lt;p&gt;What was satisfying was some people commenting on how fast the servers responded, little did they know that they were virtualized. Lesson: don&amp;rsquo;t buy 20 cheap and nasty servers, but a blade centre and start populating it as your budget permits.&lt;/p&gt;</description></item><item><title>VMWare Converter fails to publish a split-sparse image to ESX</title><link>https://www.romant.net/2009/04/vmware-converter-fails-to-publish-a-split-sparse-image-to-esx/</link><pubDate>Mon, 20 Apr 2009 14:38:05 +0000</pubDate><guid>https://www.romant.net/2009/04/vmware-converter-fails-to-publish-a-split-sparse-image-to-esx/</guid><description>&lt;pre&gt;&lt;code&gt;&amp;quot;FAILED: The object or item referred to could not be found&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;.. is the extremely helpful message that VMWare converter displays when it fails.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2009/04/vmware-conversion-status.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Digging deeper, within the logs we can see that there are multiple instances of&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Warning: failed to create directory&amp;#34;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Warning: failed to clone directory tree&amp;#34;&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The simple work-around is to convert the vmdk disk to a monolithic-sparse.&lt;/p&gt;
&lt;p&gt;You can do this by issuing:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ vmware-vdiskmanager -r original.vmdk -t 0 destination.vmdk&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will clone the disk image as well as modify it from being composed of 2GB files for the entirety of your VM to a single vmdk referred to as a &amp;lsquo;monolithic-sparse&amp;rsquo; (merely referring to the fact that it will increase in size automatically to encompass the the VM partition).&lt;/p&gt;
&lt;p&gt;After completing the cloning process, you should have no problems in restarting the conversion process, and it should complete as advertised.&lt;/p&gt;</description></item><item><title>Empty iPhone Emails - Solved</title><link>https://www.romant.net/2008/08/empty-iphone-emails-solved/</link><pubDate>Mon, 25 Aug 2008 21:51:28 +0000</pubDate><guid>https://www.romant.net/2008/08/empty-iphone-emails-solved/</guid><description>&lt;p&gt;iPhones Firmware update 2.1, seems to have gotten rid of the problem. If now only Apple would fix the damn &lt;a href=&#34;http://twitter.com/romant/statuses/918985782&#34; target=&#34;_blank&#34;&gt;calendar bug&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Have you recently sent an email from your beloved iPhone and have it delivered - empty? Then when you look at the sent on your phone you get the lovely: &amp;ldquo;This message has no content&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/08/img-0007.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;It was simple - the problem was my signature. Which constituted of a simple &amp;lsquo;•&amp;rsquo;. An elevated full-stop, also known as bullet-point.&lt;/p&gt;
&lt;p&gt;There appears to be a bug in the iPhone that is as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you send an email with a • as the LAST character, your sending bar at the bottom of Mail.app will continually say &amp;lsquo;Sending&amp;rsquo;, and the email will not even show up in your sent&lt;/li&gt;
&lt;li&gt;If you send an email with words, then • and then some more words - not a problem - it will be delivered&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If I didn&amp;rsquo;t know better, I&amp;rsquo;d say that upon Unicode conversion upon sending, the email becomes corrupt through a rogue parser.&lt;/p&gt;
&lt;p&gt;Quite an oversight on Apple&amp;rsquo;s behalf, and has only appeared since the 2.0.2 update.&lt;/p&gt;
&lt;p&gt;Moral of the story - don&amp;rsquo;t have a bullet point as the last character in your emails, let alone your signature.&lt;/p&gt;
&lt;p&gt;Have you noticed any strangeness in your iPhones behaviour?&lt;/p&gt;
&lt;p&gt;•&lt;/p&gt;</description></item><item><title>Paperless office - the story of the S510M</title><link>https://www.romant.net/2008/08/paperless-office-the-story-of-the-s510m/</link><pubDate>Sun, 24 Aug 2008 01:28:39 +0000</pubDate><guid>https://www.romant.net/2008/08/paperless-office-the-story-of-the-s510m/</guid><description>
&lt;p&gt;Going green? Or going neat? Get rid of that paper!&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/post-it.jpg&#34;&gt;
&lt;figcaption&gt;Paper stack. Source: flickr{bookgrl}&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Think of all the bills, invoices, warranty cards, tax refunds and bank statements that you file away, day after day. The problem here is that paper is bulky, and takes up a lot of physical space, especially if you’re an owner of a filing cabinet.&lt;/p&gt;
&lt;p&gt;My hope for this task was to achieve a state where I can be light on my feet, so should I require to move places or send off a tax returns, I can now do so within a few minutes and not hours, and perhaps even to save myself a bit of sanity&lt;/p&gt;
&lt;h2 id=&#34;goals&#34;&gt;Goals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;quick - no one wants to spend 5 minutes processing each document that comes in the mail&lt;/li&gt;
&lt;li&gt;searchable - putting in an account number of any kind, should bring up ALL the relevant document. So OCR here is a must&lt;/li&gt;
&lt;li&gt;manageable and easy - I don’t want to wade through hundred of folders to get the document that I want. Plus should I wish to group a set of files together for a submission, that should also be easily achieved&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What will you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;document scanner&lt;/li&gt;
&lt;li&gt;OCR software&lt;/li&gt;
&lt;li&gt;some time to plan-out your storage strategy&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;quick&#34;&gt;Quick&lt;/h3&gt;
&lt;p&gt;Speed is an important factor when deciding on picking the right document scanner. I looked at several brands, but being an Apple user, am unfortunately limited to a certain domain of equipment with drivers that will work with OSX. I went with a Fujitsu ScanSnap S510M. The ‘M’ n the model denoting ‘Mac’, so naturally the only difference between that and the non-mac version is that its white and comes with apple drivers. Fortunately for me and you, it competes very well against the competition such as Canon DR 2050C&lt;/p&gt;
&lt;h3 id=&#34;searchable&#34;&gt;Searchable&lt;/h3&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/yep-papers-devonthink-comparison.jpg&#34;&gt;
&lt;figcaption&gt;Yep Devon Papers software Comparison&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The ability to find a scanned document by varying characteristics such as tags and creation dates and not merely by the hierarchy of parent folders, I find quite a necessity. Several applications that I looked at, had each their good points and down-right annoying.&lt;/p&gt;
&lt;p&gt;DEVONthink Pro Office apart from the dated interface, lack of tagging ability {think folders}, &lt;strong&gt;$150 dollar price tag&lt;/strong&gt; - is quite a lot like Lightroom for your documents. It has a lot of nice features, such as word occurrence calculators, which helps you pick out the most unique descriptions for each document. Devon keeps a database that you must also backup, of all the structure and data that you enter about each of the documents, so not the most agile of concepts.&lt;/p&gt;
&lt;p&gt;Yep by Ironic Software is one of the more popular solutions. Thanks in-part to their clean design and ability to tag each document. It too relies on an database {XML-based plist} for the storage of its own meta-data. After spending quite a bit of time with Yep, I very much like the speed and almost ‘freshness’ of the app. Its drawbacks are also its strong points, it doesn’t have an OCR engine, which is great - since it leaves it up to you the user to figure out which one you wish to use. I tried both ABBY, and Acrobat; prefer the latter due to speed, and ability to do some compression with help of AppleScript before spitting out the resulting PDF.&lt;/p&gt;
&lt;p&gt;I did notice a few bugs on first use&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;by setting the ‘original document created’ field, the date doesn’t get saved to the file itself, and thus isn’t reflected in Finder’s ‘Info’.&lt;/li&gt;
&lt;li&gt;ability to create multiple smart collections of documents with the same name {screenshot below}&lt;/li&gt;
&lt;li&gt;when searching for tag occurrence within documents and you aggregate several tags together, an empty result-set is generated&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;I sent the above-mentioned issues to the developers, and I have yet to hear back from them. Will update this section when I get a reply.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Despite the technical flaws, am a big fan of the workflow that Yep presents, yet their testing practices leave much to be desired.&lt;/p&gt;
&lt;p&gt;Last but not least, Papers, an application that specializes in the storage and research of scientific papers. I would leave it at that, I didn’t find it useful for the task at hand, that’s not to say it isn’t good at what its designed for.&lt;/p&gt;
&lt;h3 id=&#34;manageable&#34;&gt;Manageable&lt;/h3&gt;
&lt;p&gt;Although tightly related with the previous section, manageability of your documents is something that will underpin how well you’re able to search for items once you get all those documents into some sort of a repository.&lt;/p&gt;
&lt;p&gt;Unfortunately all the applications I’ve looked at, keep their own database of the meta-data. This is unfortunate for two reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Switching cost&lt;/strong&gt; - between applications is increased, as you’re more likely to stay with an app once you’ve imported a copious number of documents and succumbed to the apps way of thinking.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;/strong&gt; - of not only the documents but also the database has to be thought of. This is where Devon makes it easy, by allowing you to place its database file into any location you desire, such as with your documents. What’s worse is that Yep doesn’t give you that freedom, and keeps its library within your Application Support folder. I received an email from ‘Ironic Support’ informs me that the only way to keep documents and data-store in one location, is if you keep all documents in your &lt;code&gt;Application Support/Yep&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;the-scanner&#34;&gt;The Scanner&lt;/h3&gt;
&lt;p&gt;An important consideration for this whole task is the scanner itself. So what are you looking for in a document scanner? It doesn’t really matter what I say here, as price inevitably dictates peoples choice. Personally I saw the time it takes me to collate, organise, and file my .. err files extremely wasteful. It ended up being about how much my time is worth to me in the long run.&lt;/p&gt;
&lt;p&gt;After doing some research the decision was between two models, the Fujitsu S310M and the S510M. The baby {given its diminutive size} of the two, S310M has one of the most attractive features in a document scanner, it can be powered merely off the USB ports on your laptop. So if you travel a lot, and its important to scan research papers {if not available in PDF-form already} or contacts, then you can’t go past the S310M. I chose to go with the S510M hoping that the extra $100 will result in a better quality scanning ‘head’ if I may call it that; so your choice should also depend on how many documents you’re going to be scanning. If you’re merely going to be doing a couple of pages a day, then grab the S310M alternatively if you are swamped with papers on a daily basis, or are going to be re-scanning your complete paper filing cabinet it might be an idea to go for the big brother S510M.&lt;/p&gt;
&lt;p&gt;The shots below are to allow you to see comparatively how big or small this document scanner really is. I didn&amp;rsquo;t want to use the metric system, nor the imperial system - to prevent confusion. So I picked a unit everyone is familiar with. So the scanner is about 1.3 iPhones tall, with a footprint of about 1.1 iPhones, with the length of just under 2.3 iPhones.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/08/Closed_Fujitsu_ScanSnap_S510M_t.jpg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/SIDE_Fujitsu_ScanSnap_S510M_t.jpg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/TOP_Fujitsu_ScanSnap_S510M_t.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Both scanners do duplex scanning, thus double sided documents are not a problem. What impressed me most is how well the paper feeder actually works. I’ve had the experience of working with a Canon DR 2050C and if you mis-align a page, or put something of obscure size, such as a shopping docket through - you were bound to get it jammed, not so with the S510M. I threw about a hundred sheets of A4, A5, dockets, scrunched receipts from the corner PC store, throughout the duration of the day and without a single twitch it generated a double-sided PDF for me; with the help of Acrobat 8.0 Professional and some AppleScript it OCR’ed and knocked out backgrounds for me too. In instances where I was a little eager and mis-aligned the paper, the software automatically corrected any skewing and rotated the page upright - nice!&lt;/p&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;When I first embarked on setting myself free from dependence on the myriad of documents, I was very hesitant to lay down the $&amp;rsquo;s for a scanner. Albeit since it arrived, it has been a blessing. As soon as I scan a document, back it up {on that in the next post}, I shred it. Hence to anyone that values their time, and ability to streamline some of the mundane tasks of paper management I couldn&amp;rsquo;t recommend the idea of a paperless office more.&lt;/p&gt;
&lt;p&gt;Have you made your office paperless?&lt;/p&gt;</description></item><item><title>Fantastic GPS Logger, a Field Report for BT-1000P</title><link>https://www.romant.net/2008/08/fantastic-gps-logger-a-field-report-for-bt-1000p/</link><pubDate>Fri, 15 Aug 2008 22:00:40 +0000</pubDate><guid>https://www.romant.net/2008/08/fantastic-gps-logger-a-field-report-for-bt-1000p/</guid><description>
&lt;p&gt;To add to the ever increasing arsenal of gadgets to never leave at home, comes the BT-1000P GPS Logger.&lt;/p&gt;
&lt;p&gt;Having recently purchased the unit, especially for the purpose tagging all the photos for an upcoming trip, I flew away extremely happy, witnessing the outstanding performance of this little device. You can see a screenshot of Google Earth displaying the track below; its the takeoff from Sydney towards Tokyo.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/google-earth-romant-net-bt-1000p-sydney-thumb.jpg&#34;&gt;
&lt;figcaption&gt;Generated using Google Earth and BT-1000P&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;What sets this unit apart from other loggers and GPS units on the market, is its ability to not only acquire a signal within the boundaries of an airplanes fuselage, but keep that sync as the airplane is banking. This latter achievement is the result of the -158dBm sensitivity rating of the unit.&lt;/p&gt;
&lt;h2 id=&#34;geotagging&#34;&gt;Geotagging&lt;/h2&gt;
&lt;p&gt;In order to couple the &lt;strong&gt;data off the unit&lt;/strong&gt; with your images, first of all you must make sure that the date+time is the same on both the unit, and your camera. Then based on the time of each point recorded and the time a photo was taken, the closest data point becomes the location of where the photo was taken.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s nothing you can do about the GPS, since its sync&amp;rsquo;ed with the satellites and stored in UTC. What is important though is to adjust the cameras time to the Time Zone of your location, this will save you much heartache later on when you have to adjust the times.&lt;/p&gt;
&lt;p&gt;For my needs, I thought I&amp;rsquo;d try out HoudahGeo, and GPSPhotoLinker. I very quickly dismissed HoudahGeo, because I was unable to try it &amp;lsquo;properly&amp;rsquo;. By which I mean use it unrestricted for a period of my journey. I don&amp;rsquo;t believe its possible to evaluate certain software unless you can actually try your complete workflow with the software, and see if it fits, HoudahGeo unfortunately provides you with a handicapped version.&lt;/p&gt;
&lt;p&gt;In comes GPSPhotoLinker, which is actually a free app, and gets the job done surprisingly well. What you&amp;rsquo;ll notice is that once you combine your photos with the exported data from the GPS, it will actually look up the City and Suburb data as well and embed that into the EXIF along with the GPS location. This is extremely useful for my Lightroom catalog where I can pick things based on the City as looked up by GPSPhotoLinker - brilliant! This is extremely helpful when you&amp;rsquo;re island-hopping, as is inevitable in Greece, or are merely in a new place.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/08/lightroom-screenshot-locations.jpg&#34;&gt;
&lt;figcaption&gt;Lightroom Screenshot Locations&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;As it stands, I think its a wonderful little unit that has served its purpose extremely well. I would highly recommend it, and will not be leaving the house without. It now lives at the top of my camera bag.&lt;/p&gt;</description></item><item><title>BT-1000P mini-review on a mac</title><link>https://www.romant.net/2008/06/bt-1000p-mini-review-on-a-mac/</link><pubDate>Thu, 12 Jun 2008 14:36:53 +0000</pubDate><guid>https://www.romant.net/2008/06/bt-1000p-mini-review-on-a-mac/</guid><description>
&lt;p&gt;Am soon going away on a little trip, over to Europe, through Tokyo. Wishing to record my trip, as well as have some data for geocoding the photos, I went on a quest to find a GPS unit that allowed me to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;log data to internal memory&lt;/li&gt;
&lt;li&gt;make sure there&amp;rsquo;s LOTS of memory&lt;/li&gt;
&lt;li&gt;and lots of battery&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/06/bt-1000p-4.jpg&#34;&gt;
&lt;/figure&gt;
&lt;p&gt;After looking at the Sony GPS-CS1, Wintec WBT-100 and GlobalSat DG-100, I concluded that the BT-1000P is by far the best unit for my needs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First of all, the GPS chip supports up to 51-channels, with sensitivity down to -158dBm, which allows me to get a satellite lock even at the university concrete monstrosity of a car-park.&lt;/li&gt;
&lt;li&gt;It has integrated bluetooth, so I can use it as a replacement for my ageing Holux-236.&lt;/li&gt;
&lt;li&gt;Most importantly, it can log around 200,000 points, with my current configuration of strings, only 122,398 (@5 second intervals, that&amp;rsquo;s 7 days of 24 hour logging before I have to clear it!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What pushed me to purchasing after looking at the specifications though is the battery.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The same as you find in most Nokia phones [BL-5C], which can be picked up cheaply off eBay&lt;/li&gt;
&lt;li&gt;Delivers a claimed 32 hrs of logging, although I was able to get 26 hours without any problems, before the little red battery starts to flash. Mind you - I didn&amp;rsquo;t fully charge it, and just started running it soon after receiving it in the post.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I needed the unit to work on a mac, which the BT-1000P doesn&amp;rsquo;t do out of the box. The good news is that there&amp;rsquo;s a project called &lt;a href=&#34;http://bt747.wiki.sourceforge.net/&#34; target=&#34;_blank&#34;&gt;bt747&lt;/a&gt; that lets you interact with the BT-1000P.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/06/bt-1000p-3.jpg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/06/bt-1000p-5.jpg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/06/bt-1000p-2.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Upon connecting the unit via USB the rest of the steps are quite simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the USB-&amp;gt;Serial &lt;a href=&#34;http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm&#34; target=&#34;_blank&#34;&gt;driver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download &lt;a href=&#34;http://bt747.wiki.sourceforge.net/&#34; target=&#34;_blank&#34;&gt;bt747&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Switch the BT-1000P to &amp;lsquo;LOG&amp;rsquo; mode&lt;/li&gt;
&lt;li&gt;Copy &lt;code&gt;RXTXcomm.jar&lt;/code&gt; and &lt;code&gt;librxtxSerial.jnilib&lt;/code&gt; into &lt;code&gt;/Library/Java/Extensions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;run_rxtx.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should get an extremely ugly GUI&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/06/bt747.jpg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/06/bt747_connected.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Just hit &amp;lsquo;Connect Port Nbr&amp;rsquo; and you&amp;rsquo;re ready to go. You should get something similar to: After this, all you have to do, is run around the block a few times with your unit in LOG mode. Come back home, run the app again then: Under the &amp;lsquo;File&amp;rsquo; tab, set the Output directory to a location that has world write access, then hit &amp;lsquo;Apply &amp;amp; Set the above values&amp;rsquo; Alternatively create a directory in your &lt;code&gt;/var&lt;/code&gt; and &lt;code&gt;sudo chmod 777 &amp;lt;directory&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Now -&amp;gt; &amp;lsquo;Log&amp;rsquo; tab&lt;/li&gt;
&lt;li&gt;Hit &amp;lsquo;Get Log&amp;rsquo; button {this might take a while, depending on how long your jog was}&lt;/li&gt;
&lt;li&gt;After its complete, feel free to select the output format, either CSV, GPX or KML.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/06/bt747_getting_log.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;If you chose to export a KML, and you have Google Earth installed, you should get a nice looking track. Unfortunately it is evident that the BT-1000P doesn&amp;rsquo;t filter its points prior to writing them out, resulting in data that isn&amp;rsquo;t representative being recorded, hence you can observe the spike.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/06/picture-3.jpg&#34;&gt;
&lt;figcaption&gt;BT-1000P Google Earth&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Now to get ready for my last exam tomorrow morning, and then to start packing for the trip. Once I&amp;rsquo;m back, will report on how the unit goes in the field, and I&amp;rsquo;ll include some geocoded images.&lt;/p&gt;
&lt;h3 id=&#34;update&#34;&gt;UPDATE&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/06/bt-1000p.jpg&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Upon the comment below by Benn, I remembered a feature that this unit has, that every time you take a photo on your camera - you can also hit the big red button on the tom of the unit. This marks the POI in the data stream. Merely allows you to come back for any manual intervention and find interesting parts easier.&lt;/p&gt;</description></item><item><title>Get Nightly WebKit without SVN</title><link>https://www.romant.net/2008/04/get-nightly-webkit-without-svn/</link><pubDate>Sun, 13 Apr 2008 18:59:22 +0000</pubDate><guid>https://www.romant.net/2008/04/get-nightly-webkit-without-svn/</guid><description>&lt;p&gt;&lt;img src=&#34;https://www.romant.net/images/2008/04/webkit-icon.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://blogs.computerworld.com/safari_is_about_to_get_crazy_fast&#34; target=&#34;_blank&#34;&gt;Everyone&lt;/a&gt; agrees that &lt;a href=&#34;http://www.webkit.org/&#34; target=&#34;_blank&#34;&gt;WebKit&lt;/a&gt; is the faster browser engine. Plus it&amp;rsquo;s my favourite browser/engine in OSX&lt;/p&gt;
&lt;p&gt;Problem is that it doesn&amp;rsquo;t update itself automatically - and every night there&amp;rsquo;s a beautiful new build that comes out - which I simply must have.&lt;/p&gt;
&lt;p&gt;So in order to save you time - here&amp;rsquo;s a little script that I put together this afternoon that will download the latest build at the push of a button.&lt;/p&gt;
&lt;p&gt;Initially I wrote it with wget, but realised not everyone will have it installed - hence here&amp;rsquo;s a version with curl&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# getWebKit.sh - Obtain the latest WebKit build&lt;/span&gt;
#
&lt;span class=&#34;c1&#34;&gt;# Created by Roman Tarnavski on 2008-04-13.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# For an updated version head to www.romant.net&lt;/span&gt;
#
#
&lt;span class=&#34;c1&#34;&gt;# Distributed under a Creative Commons Attribution 3.0 License&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# For more details on the license: http://creativecommons.org/licenses/by/3.0/&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;var_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/tmp/&amp;#34;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Downloading WebPage ...&amp;#34;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://nightly.webkit.org&amp;#34;&lt;/span&gt;
curl http://nightly.webkit.org/index.html -o &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;var_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;index.html &amp;gt; .get_webkit.log &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;nightly&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;var_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;index.html &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;.dmg&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt; -f &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Done&amp;#34;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$nightly&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; -f &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Getting WebKit ...&amp;#34;&lt;/span&gt;
curl &lt;span class=&#34;nv&#34;&gt;$location$nightly&lt;/span&gt; -o &lt;span class=&#34;nv&#34;&gt;$var_dir$filename&lt;/span&gt; &amp;gt;&amp;gt; .get_webkit.log &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Done&amp;#34;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Installing WebKit ...&amp;#34;&lt;/span&gt;
rm -rf /Applications/WebKit.app
hdiutil attach -quiet &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var_dir$filename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
cp -R /Volumes/WebKit/WebKit.app /Applications/
hdiutil detach -quiet /Volumes/WebKit
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Done&amp;#34;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#cleanup&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; rm &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;var_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;index.html &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm &lt;span class=&#34;nv&#34;&gt;$var_dir$filename&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let me know how you go&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description></item><item><title>File Backup Strategy</title><link>https://www.romant.net/2008/01/file-backup-strategy/</link><pubDate>Tue, 15 Jan 2008 14:56:04 +0000</pubDate><guid>https://www.romant.net/2008/01/file-backup-strategy/</guid><description>
&lt;p&gt;Photos are the most precious material possession anyone owns, and should be the first to be saved in the case of a fire.&lt;/p&gt;
&lt;p&gt;So how does one provide the appropriate backup solution to safeguard their cherished memories? My general approach to backing up the photos is by no means simple, yet it does the job.&lt;/p&gt;
&lt;p&gt;Just as a disclaimer - the main application that I use is unfortunately Windows only - although a similar setup can be achieved using rsync.&lt;/p&gt;
&lt;p&gt;Here goes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the images off the camera using Lightroom, which simply stores them in the yyyy-mm-dd format&lt;/li&gt;
&lt;li&gt;SyncBackSE then automatically mirrors the newly added images onto a separate hard drive in my T60’s expansion slot, for a pseudo RAID-1 solution&lt;/li&gt;
&lt;li&gt;When I&amp;rsquo;m at home there are two states for my laptop, either docked or free and about. In either case, my network drives get mounted. Once this occurs, the local SyncBackSE copies the images straight onto my server.&lt;/li&gt;
&lt;li&gt;The server&amp;rsquo;s two main backup drives are configured in a RAID-1, using Adaptec 1210SA adapter&lt;/li&gt;
&lt;li&gt;I then have another copy of SyncBackSE installed on the server, which once a week copies all the files from the RAID-1 drive, onto a third drive within the server. This gives me some time to recover shots if I did delete any.&lt;/li&gt;
&lt;li&gt;Once a month or there about – I also have an external drive which I merely copy manually and then store at a friends house.&lt;/li&gt;
&lt;li&gt;As mentioned in the previous step, a third drive is given 1 week of lead time prior to being updated. Now in order to solve the geographic problem of having all the backups under the one roof - I have a Site-to-Site VPN with a relative, for whom I purchased a 500GB drive, onto which I then backup once a week.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The great thing about this setup is that as soon as a file is added by me or I modify tags within Lightroom of a photo, the change is automatically replicated across 4 drives - just in case, and overall – each image exists in 8 places.&lt;/p&gt;
&lt;h2 id=&#34;pros&#34;&gt;Pros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Quick and automated backup solution&lt;/li&gt;
&lt;li&gt;When I’m travelling – I still utilize the complete backup cycle – by connecting via a VPN directly to the server using my laptop in an internet cafe – and provided they have enough UP bandwidth – I’m done uploading in 20-30 minutes, and my server then takes care of everything.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cons&#34;&gt;Cons&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;This occurs within a one physical domain (provided my laptop is at home at the time) - so should a fire occur, the complete setup is futile - as everything is burnt.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a finite amount of space available on my laptop, and although it wasn&amp;rsquo;t a problem when I shot JPEG with the 300D, now with the ease of RAW processing within Lightroom and ability to shoot it easily with my 40D - one days outing ends up being about 1-2 GB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Solution to the first problem is in the next step of my backup workflow, and to the second problem I’ll cover in a later post.&lt;/p&gt;
&lt;p&gt;In order to help distinguish between my drives, I have a naming scheme for them. I grab the names out of Greek mythology, sometimes even attempting to match the name to the task of the drive.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a diagram of a solution that works for me&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2008/01/backup-strategy.jpg&#34;&gt;
&lt;figcaption&gt;Backup Strategy&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;If anyone finds this useful/too-much – am interested to hear your opinions. Feel free to share how you do it – and any suggestions you may have.&lt;/p&gt;</description></item><item><title>Renaming a Project in TFS</title><link>https://www.romant.net/2007/12/renaming-a-project-in-tfs/</link><pubDate>Fri, 21 Dec 2007 11:11:33 +0000</pubDate><guid>https://www.romant.net/2007/12/renaming-a-project-in-tfs/</guid><description>&lt;p&gt;I’ve recently decided to try out Microsoft’s latest incarnation of Team Foundation Server; a document and code versioning, as well as defect tracking system for developers.&lt;/p&gt;
&lt;p&gt;Since TFS manages source code, as well as documents, it is an extremely convenient repository of data for your projects; yet - by putting all your eggs in the one basket, you may be unpleasantly surprised when you decide to rename your project. In Team Foundation Server 2005, this ‘feature’ was absent, if you were hoping to find it in 2008 – stop looking, there are too many &lt;a href=&#34;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2462725&amp;SiteID=1&#34;&gt;DB references&lt;/a&gt; to update. We can only hope that Microsoft will bring about a tool to do this as part of a service pack.&lt;/p&gt;</description></item><item><title>Music Everywhere</title><link>https://www.romant.net/2007/07/music-everywhere/</link><pubDate>Wed, 25 Jul 2007 00:54:31 +0000</pubDate><guid>https://www.romant.net/2007/07/music-everywhere/</guid><description>
&lt;p&gt;As with everything, it&amp;rsquo;s always about the amount of time and money you&amp;rsquo;re willing to put in, in order to get what you want.&lt;/p&gt;
&lt;p&gt;I like music, and as someone that has a few computers around the house, coupled with a Vista Media Centre - I want to be able to have access to mood altering music throughout.&lt;/p&gt;
&lt;p&gt;My music application of choice happens to be iTunes™. Understandably it isn&amp;rsquo;t everyone&amp;rsquo;s favourite, and I must admit - it does seem very sluggish on Windows™ compared to its OSX™ counterpart.&lt;/p&gt;
&lt;p&gt;The point of this post is to setup streaming of music to iTunes™ utilising mt-daapd [aka &lt;a href=&#34;http://www.fireflymediaserver.org/&#34; title=&#34;Firefly&#34; target=&#34;_blank&#34;&gt;Firefly&lt;/a&gt;], &lt;a href=&#34;http://www.ubuntu.com&#34; title=&#34;Ubuntu&#34; target=&#34;_blank&#34;&gt;Ubuntu&lt;/a&gt;, &lt;a href=&#34;http://www.vmware.com&#34; title=&#34;VMWare&#34; target=&#34;_blank&#34;&gt;VMWare&lt;/a&gt; and obviously the mp3&amp;rsquo;s themselves - hosted on a Windows™ share.&lt;/p&gt;
&lt;p&gt;Many people will have a &amp;lsquo;server&amp;rsquo; of some sort, be it for the hundred of gigabytes of family photos and videos, a common repository for house mates to exchange files or simply in my case - all of the above.&lt;/p&gt;
&lt;p&gt;I have a server that runs Windows™ 2003 Server. My laptop synchronizes with it every time I dock it, thus providing me with a cheap NAS-like solution for my photos, university lectures and assignments.&lt;/p&gt;
&lt;p&gt;Also, since Internet radio is something else I like to dabble in, and my ISP providing me a &lt;a href=&#34;http://www.internode.on.net/radio/&#34; title=&#34;nice list&#34; target=&#34;_blank&#34;&gt;nice list&lt;/a&gt; free from bandwidth charges - and ultimately wishing to purchase a Wi-Fi enabled radio streamer, I decided to enable streaming of music across my house.&lt;/p&gt;
&lt;p&gt;You might be asking your self - why am I running a VMWare Server + Linux in order to just stream music held on a Windows™ share? Well there are alternatives, and apps such as Tangerine that will run quite happily on Windows™ itself and serve music - but I do not want to run anything that isn&amp;rsquo;t necessary on the server itself - I prefer to leave it to virtual machines, as it allows for a much quicker re-deployment, coupled with the fact that I need a few other services to run on the VM for the network.&lt;/p&gt;
&lt;p&gt;So here&amp;rsquo;s a guide on how to get streaming mp3&amp;rsquo;s with the use of mt-daapd, linux and about 30 minutes of spare time.&lt;/p&gt;
&lt;p&gt;I will use names for usernames and server configurations that I have used, change as needed.&lt;/p&gt;
&lt;p&gt;On the Windows box&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a username &amp;ldquo;buntu&amp;rdquo; [assign a password]&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a directory which will host the root of your music. So if it&amp;rsquo;s present in H:\Backup\Files\Personal\Music, then share and make sure you share Music, thus it will be accessible via \quack\music [quack is the name of the server]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make sure the security as well as the sharing settings allow for &amp;ldquo;buntu&amp;rdquo; to have &amp;lsquo;read-only&amp;rsquo; access&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download + Install &lt;a href=&#34;http://www.vmware.com/download/server/&#34; target=&#34;_blank&#34;&gt;VMware Server&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download Ubuntu &lt;a href=&#34;http://releases.ubuntu.com/7.04/&#34; target=&#34;_blank&#34;&gt;Desktop/Server&lt;/a&gt; [or a distro of your choice - I will only run through Ubuntu, as it&amp;rsquo;s based on my farourite Debian, only prettier + more user friendly]&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I recommend you download the *alternate* ISO, &lt;em&gt;ubuntu-7.04-alternate-i386.iso&lt;/em&gt; as with VMWare server, you can get a &amp;ldquo;no screens found&amp;rdquo; error, and the &lt;em&gt;alternate&lt;/em&gt; install will merely remove the GUI whilst installing Ubuntu.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you&amp;rsquo;re creating the VM - 2 things.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When you&amp;rsquo;re going through the &amp;lsquo;New Virtual Machine Wizard&amp;rsquo; - make sure you select &amp;ldquo;Use Bridge Networking&amp;rdquo;, as that way you&amp;rsquo;re making it easier for your new virtual machine to have access to the current network and thus the network shares on another computer.&lt;/li&gt;
&lt;/ol&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2007/07/bridge.jpg&#34;&gt;
&lt;figcaption&gt;Use Bridge Network - Screenshot&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;Hard drive space allocation - if you&amp;rsquo;re going to be using this for something &lt;em&gt;other&lt;/em&gt; than just streaming, and have other services in mind for this VM - such as perhaps a dedicated development environment, you might consider giving it more than the default 8Gb.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On with it.&lt;/p&gt;
&lt;p&gt;Assign the ISO you download as the CD drive.&lt;/p&gt;
&lt;p&gt;As I mentioned above,&lt;/p&gt;
&lt;p&gt;Proceed through the menus and install Ubuntu, for most - just accept the defaults.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2007/07/installing.jpg&#34;&gt;
&lt;figcaption&gt;Installing Ubuntu - Screenshot&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3 id=&#34;optional&#34;&gt;Optional&lt;/h3&gt;
&lt;p&gt;In order to have the VM start when the host boots up, select the appropriate options after going to the VM Settings and under the Options tab - you will see - &amp;ldquo;Startup/Shutdown&amp;rdquo;, with the respective options being now open to you on the right hand side.&lt;/p&gt;
&lt;h3 id=&#34;then&#34;&gt;Then&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt-get install smbfs
mkdir /music
mount -t smbfs -o username=buntu //quack/music /music
password:`
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;The above should go through, if you have all the permissions set up correctly.&lt;/li&gt;
&lt;li&gt;Now you have to make sure it is mounted on boot. Edit the /etc/fstab and append the following:&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;note the space between the source and the mount point&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;//quack/music /music cifs username=buntu,password=music,user 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;a-quick-check&#34;&gt;A quick check:&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;mount /music
ls /music
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Should return no errors, and you will now have /music mounted each boot.&lt;/p&gt;
&lt;p&gt;Time to set up the streaming.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get install mt-daapd
/etc/init.d/mt-daapd start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now if you installed something with X, launch your browser of choice [firefox], and point to: &lt;a href=&#34;http://localhost:3689&#34; target=&#34;_blank&#34;&gt;http://localhost:3689&lt;/a&gt; (Default username:password -&amp;gt; admin:mt-daapd)&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;alternatively modify the &lt;code&gt;/etc/mt-daapd.conf&lt;/code&gt; manually&lt;/p&gt;
&lt;p&gt;Here you are able to specify any parameters as well as monitor who&amp;rsquo;s leeching [scratch] listening to your music.&lt;/p&gt;
&lt;p&gt;At the very least, I recommend you modify (under Configuration on the site):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Server Name [as per the file itself - &amp;lsquo;the stuff that comes up in iTunes&amp;rsquo;]&lt;/li&gt;
&lt;li&gt;Admin password [used to log into the the site]&lt;/li&gt;
&lt;li&gt;Music Folder, set it to &amp;lsquo;/music&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Hit &amp;lsquo;Save&amp;rsquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now on the status page, hit &amp;lsquo;Start Scan&amp;rsquo; - and you&amp;rsquo;ll see the little counter for &amp;lsquo;served&amp;rsquo; increase quite rapidly. Any iTunes™ instance on the network, will be able to see Quack under shared music.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&#34;https://www.romant.net/images/2007/07/itunes.jpg&#34;&gt;
&lt;figcaption&gt;iTunes Screenshot&lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>In the beginning</title><link>https://www.romant.net/2007/04/in-the-beginning/</link><pubDate>Sun, 22 Apr 2007 10:29:24 +0000</pubDate><guid>https://www.romant.net/2007/04/in-the-beginning/</guid><description>&lt;p&gt;After much heart-ache, I have decided to settle down with &lt;del&gt;Word-Press&lt;/del&gt; Hugo, hopefully this will be the start of a beautiful, long relationship.&lt;/p&gt;</description></item></channel></rss>