<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss" xmlns:media="http://search.yahoo.com/mrss/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Tony's blog</title>
	<atom:link href="https://tgeorgiev.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://tgeorgiev.com</link>
	<description></description>
	<lastBuildDate>Sat, 25 Apr 2020 11:23:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="tgeorgiev.com" path="/?rsscloud=notify" port="80" protocol="http-post" registerProcedure=""/>
<image>
		<url>https://secure.gravatar.com/blavatar/427415ab98bf95db65da2b5f9156c0c884a68eb9e8d1193216e40e46863d6197?s=96&amp;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Tony's Blog 2.0</title>
		<link>https://tgeorgiev.com</link>
	</image>
	<atom:link href="https://tgeorgiev.com/osd.xml" rel="search" title="Tony's Blog 2.0" type="application/opensearchdescription+xml"/>
	<atom:link href="https://tgeorgiev.com/?pushpress=hub" rel="hub"/>
	<item>
		<title>How vRO 8.1 delivered thousands of integrations overnight</title>
		<link>https://tgeorgiev.com/2020/04/15/how-vro-8-1-delivered-thousands-of-integrations-overnight/</link>
					<comments>https://tgeorgiev.com/2020/04/15/how-vro-8-1-delivered-thousands-of-integrations-overnight/#comments</comments>
		
		<dc:creator><![CDATA[Tony Georgiev]]></dc:creator>
		<pubDate>Wed, 15 Apr 2020 13:20:14 +0000</pubDate>
				<category><![CDATA[vco]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[vro]]></category>
		<category><![CDATA[vCO]]></category>
		<guid isPermaLink="false">http://tgeorgiev.com/?p=711</guid>

					<description><![CDATA[vRealize Orchestrator 8.1 was recently released and it comes with quite a lot of new features and improvements. In this post I will cover the support for multi-language (polyglot) development. Polyglot is the ability to execute vRO scripts in multiple languages and runtimes, specifically Node.js, Python and PowerShell / PowerCLI. Now we can finally write [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>vRealize Orchestrator 8.1 was <a href="https://blogs.vmware.com/management/2020/04/whats-new-in-vrealize-orchestrator-8-1.html">recently released</a> and it comes with quite a lot of new features and improvements. In this post I will cover the support for multi-language (polyglot) development.</p>
<p><img data-attachment-id="720" data-permalink="https://tgeorgiev.com/2020/04/15/how-vro-8-1-delivered-thousands-of-integrations-overnight/vro-lnds/" data-orig-file="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png" data-orig-size="1280,640" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="vro-lnds" data-image-description="" data-image-caption="" data-medium-file="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=300" data-large-file="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=1000" class="alignnone size-full wp-image-720" src="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=1000" alt="vro-lnds"   srcset="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png 1280w, https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=150&amp;h=75 150w, https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=300&amp;h=150 300w, https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=768&amp;h=384 768w, https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png?w=1024&amp;h=512 1024w" sizes="(max-width: 1280px) 100vw, 1280px" /></p>
<p>Polyglot is the ability to execute vRO scripts in multiple languages and runtimes, specifically Node.js, Python and PowerShell / PowerCLI. Now we can finally write JavaScript using modern constructs such as let/const, arrow functions, Promises, async/await, etc. Or the ones that prefer Python or PowerShell can finally put JS aside. Really nice stuff, but we can do a lot more&#8230;</p>
<p><span id="more-711"></span></p>
<p>So, did vRO really deliver this huge amount of integrations? Well, not directly, but as with the plugin mechanism in vRO, the multi language feature enables power users of the platform to write their own extensions and integrations. And in my opinion, it is much easier. Why? For one, you don&#8217;t need to learn the specifics of vRO, the script integration layer is so thin, that you can bring your already written scripts very easily. For another, whether it will be forums, blogs or publicly available modules, you have an enormous community support of those languages. Say you want to integrate with some AWS service, e.g. S3. What would you do if you don&#8217;t have a plugin for that? Just google it <a href="https://www.google.com/search?q=%22How+to+Upload+a+file+to+Amazon+S3+with+Node.js%22">&#8220;How to Upload a file to Amazon S3 with Node.js&#8221;</a> You will find hundreds of hits. All of those basically tell you how to download the AWS SDK and provide samples with couple of lines of code. What about Azure and Cosmos DB? Same thing &#8211; <a href="https://www.google.com/search?q=Node.js+with+Azure+Cosmos+DB">Node.js with Azure Cosmos DB</a>! And the list goes on and on for the hundreds of thousands of <a href="https://www.npmjs.com/">Node (npm)</a>, <a href="https://pypi.org/">Python (PyPI)</a>, <a href="https://www.powershellgallery.com/">PowerShell (PSGallery)</a> and in house developed packages and modules, all at your disposal. You can use the tools of the ecosystem, develop and test how you are used to and once ready, import it in vRO.</p>
<p>As it shifts a bit from the traditional vRO script (ECMAScript 5.1), I have prepared a <a href="https://github.com/tgeorgiev/vro-polyglot-scripts">GitHub repository with template-like samples</a> to make it easier for developers to start using and extending, feel free to clone it and provide feedback!</p>
<p>Happy (Java|Python|PowerShell)Scripting!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tgeorgiev.com/2020/04/15/how-vro-8-1-delivered-thousands-of-integrations-overnight/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		
		<media:content medium="image" url="https://2.gravatar.com/avatar/b03f4af681d5f006e9be6aa7c2ef5b8dd8fa8e0460ceb1b88c4862e590a9e3f9?s=96&amp;d=identicon&amp;r=G">
			<media:title type="html">maverix7</media:title>
		</media:content>

		<media:content medium="image" url="https://tgeorgiev.com/wp-content/uploads/2020/04/vro-lnds.png">
			<media:title type="html">vro-lnds</media:title>
		</media:content>
	</item>
		<item>
		<title>How does AWS Lambda invoke your Node.js function</title>
		<link>https://tgeorgiev.com/2020/02/23/how-does-aws-lambda-invoke-your-node-js-function/</link>
					<comments>https://tgeorgiev.com/2020/02/23/how-does-aws-lambda-invoke-your-node-js-function/#respond</comments>
		
		<dc:creator><![CDATA[Tony Georgiev]]></dc:creator>
		<pubDate>Sun, 23 Feb 2020 22:21:19 +0000</pubDate>
				<category><![CDATA[aws]]></category>
		<category><![CDATA[javascript]]></category>
		<guid isPermaLink="false">http://tgeorgiev.com/?p=701</guid>

					<description><![CDATA[Have you ever wondered how AWS Lambda invokes your custom Node.js function, purely in the context of JavaScript? Me neither, but after looking at the all possible ways you can define your function it sparked my interest to find out. So in Lambda, let&#8217;s have our function defined as File: myIndex.js When requested to run [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Have you ever wondered how AWS Lambda invokes your custom Node.js function, purely in the context of JavaScript? Me neither, but after looking at the all possible ways you can define your function it sparked my interest to find out.</p>
<p>So in Lambda, let&#8217;s have our function defined as</p>
<pre class="brush: jscript; title: ; notranslate">
exports.myHandler = function(event, context) {
  console.log("Event: " + JSON.stringify(event))
  return 'this is the result';
}
</pre>
<p><em>File: myIndex.js</em></p>
<p><span id="more-701"></span></p>
<p>When requested to run this function in the Node.js runtime, node is invoked. But is it called directly on your function? No, there is wrapped that deals with the internals of Lambda.</p>
<p>Very roughly this wrapper does something like</p>
<pre class="brush: jscript; title: ; notranslate">
...
// somewhere we construct event and context

const task = require('./task/myIndex');
const result = task.myHandler(event, context);
...
</pre>
<p><em>File: wrapper.js</em></p>
<p>OK, but Lambda allows me to name my file and my handler anyway I like, how is this handled? This is where the handler property comes in hand. It is a property on the function definition that is used to specify the</p>
<blockquote><p>The module-name.export value in your function. For example, &#8220;index.handler&#8221; calls exports.handler in index.js</p></blockquote>
<p>In our example, our handler should be &#8220;myIndex.myHandler&#8221;.</p>
<p>And how would the wrapping code handle any handler names &#8211;</p>
<pre class="brush: jscript; title: ; notranslate">
...
// somewhere we construct event and context

const [fileName, handlerName] = handler.split('.');
// i.e. fileName = handler.split('.')[0]; handlerName = handler.split('.')[1];
const task = require('./task/' + fileName);
const result = task[handlerName](event, context);
...
</pre>
<p><em>File: wrapper.js</em></p>
<p>That is nice, but what is even nicer is that Lambda allows us to define our function in three main formats:</p>
<h4>1. Synchronous function that returns the result directly</h4>
<pre class="brush: jscript; title: ; notranslate">
exports.myHandler = function(event, context) {
  return 'this is the result';
}
</pre>
<h4>
2. Synchronous/Asynchronous function that returns a promise</h4>
<pre class="brush: jscript; title: ; notranslate">
exports.myHandler = function(event, context) {
  return new Promise((res, rej) =&amp;gt; {
    // do any asynchronous operations if needed...
    res('this is the result');
  });
}
</pre>
<p>also</p>
<pre class="brush: jscript; title: ; notranslate">
exports.myHandler = async function(event, context) {
  // do any asynchronous operations if needed...
  return 'this is the result';
}
</pre>
<h4>
3. Synchronous/Asynchronous function that uses a callback</h4>
<pre class="brush: jscript; title: ; notranslate">
exports.myHandler = async function(event, context, callback) {
  // do any asynchronous operations if needed...
  // first argument is for error if any
  callback(null, 'this is the result');
}
</pre>
<p>All of those are covered in detail in <a href="https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html">AWS Lambda Function Handler in Node.js</a><br />
That is really nice because it allows for different coding styles, not enforcing any single once specifically.  And it is quite easy to handle, to be honest:</p>
<pre class="brush: jscript; title: ; notranslate">
...
// somewhere we construct event and context
// somewhere we define how the wrapper treats the results and errors via a callback

const [fileName, handlerName] = handler.split('.');
// i.e. fileName = handler.split('.')[0]; handlerName = handler.split('.')[1];
const task = require('./task/' + fileName);
const result = task[handlerName](event, context, callback);

if (result) {
  if (isPromise(result)) {
     // case 2.
     // the result is a promise, i.e. an object with a function then and/or catch
     result.then(res =&amp;gt; callback(null, res)).catch(err =&amp;gt; callback(err));
  } else {
    // case 1.
    // the result from the synchronous function invocation
    callback(null, result);
  }
} else {
  // case 3
  // the passed callback as a third optional argument will be used when the function is ready to return the result/error
}
</pre>
<p><em>File: wrapper.js</em></p>
<p>Of course there are also other interesting things like how the event and context are constructed, how the result and error are processed. In this post we have covered only the actual function invocation.</p>
<p>Note that actual implementation used by Lambda may be different as this is based only on my findings from some reverse engineering/imagination.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tgeorgiev.com/2020/02/23/how-does-aws-lambda-invoke-your-node-js-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content medium="image" url="https://2.gravatar.com/avatar/b03f4af681d5f006e9be6aa7c2ef5b8dd8fa8e0460ceb1b88c4862e590a9e3f9?s=96&amp;d=identicon&amp;r=G">
			<media:title type="html">maverix7</media:title>
		</media:content>
	</item>
		<item>
		<title>Word Chain Leaderboard</title>
		<link>https://tgeorgiev.com/2017/11/01/word-chain-leaderboard/</link>
					<comments>https://tgeorgiev.com/2017/11/01/word-chain-leaderboard/#respond</comments>
		
		<dc:creator><![CDATA[Tony Georgiev]]></dc:creator>
		<pubDate>Wed, 01 Nov 2017 21:50:50 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://tgeorgiev.com/?p=686</guid>

					<description><![CDATA[Recently the Alexa Word Chain game got an upgrade &#8211; a global leaderboard where everyone that makes a good game in competitive mode can enter and compete against other players. The leaderboard can be found here http://word-chain.com/ I am very curious how this will turn out, will the GUI fit as a nice addition to the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Recently the Alexa Word Chain game got an upgrade &#8211; a global leaderboard where everyone that makes a good game in competitive mode can enter and compete against other players. The leaderboard can be found here <a href="http://word-chain.com/">http://word-chain.com/</a></p>
<p>I am very curious how this will turn out, will the GUI fit as a nice addition to the VUI of Alexa, or will it be too much of overhead for the Alexa users. Time will tell.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tgeorgiev.com/2017/11/01/word-chain-leaderboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content medium="image" url="https://2.gravatar.com/avatar/b03f4af681d5f006e9be6aa7c2ef5b8dd8fa8e0460ceb1b88c4862e590a9e3f9?s=96&amp;d=identicon&amp;r=G">
			<media:title type="html">maverix7</media:title>
		</media:content>
	</item>
		<item>
		<title>Good Vibe – better with 3rd party integrations</title>
		<link>https://tgeorgiev.com/2017/05/28/good-vibe-better-with-3rd-party-integrations/</link>
					<comments>https://tgeorgiev.com/2017/05/28/good-vibe-better-with-3rd-party-integrations/#respond</comments>
		
		<dc:creator><![CDATA[Tony Georgiev]]></dc:creator>
		<pubDate>Sun, 28 May 2017 19:47:54 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://tgeorgiev.com/?p=648</guid>

					<description><![CDATA[A recent new feature in Good Vibe, called Web Text-2-Speech allows it&#8217;s users to link the response of their commands to web content. This can be anything from a file or wikipedia article, to news item or weather report. Unfortunately not all sites are supported, the content of the website needs to be structured with [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A recent new feature in Good Vibe, called Web Text-2-Speech allows it&#8217;s users to link the response of their commands to web content. This can be anything from a file or wikipedia article, to news item or weather report. Unfortunately not all sites are supported, the content of the website needs to be structured with main article sections, in order for a proper parsing of the site. Behind the scenes it is using a mix of custom code and the great tool <a href="https://github.com/ageitgey/node-unfluff">https://github.com/ageitgey/node-unfluff</a> for parsing the content.</p>
<p>To give more insights I am starting to write up integration tutorials. By popular demand of Good Vibe&#8217;s users we are starting with <a href="https://alexavibe.com/integrations/dropbox">Dropbox</a> and <a href="https://alexavibe.com/integrations/itextpad">iTextPad</a></p>
<p>Can&#8217;t wait to see what other uses people will find!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tgeorgiev.com/2017/05/28/good-vibe-better-with-3rd-party-integrations/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content medium="image" url="https://2.gravatar.com/avatar/b03f4af681d5f006e9be6aa7c2ef5b8dd8fa8e0460ceb1b88c4862e590a9e3f9?s=96&amp;d=identicon&amp;r=G">
			<media:title type="html">maverix7</media:title>
		</media:content>
	</item>
		<item>
		<title>Word Chain</title>
		<link>https://tgeorgiev.com/2017/05/15/word-chain/</link>
					<comments>https://tgeorgiev.com/2017/05/15/word-chain/#respond</comments>
		
		<dc:creator><![CDATA[Tony Georgiev]]></dc:creator>
		<pubDate>Mon, 15 May 2017 23:27:49 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[alexa]]></category>
		<guid isPermaLink="false">http://tgeorgiev.com/?p=569</guid>

					<description><![CDATA[While developing my other Alexa skill, Good Vibe, it got me thinking how a classical word game that we have played in our childhood can fit nicely with Alexa&#8217;s VUI. This is how the idea of Word Chain was born. Word Chain is a game where players take turns in coming up with words, from a specific category, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>While developing my other Alexa skill, <a href="https://tgeorgiev.com/2017/03/05/good-vibe/">Good Vibe</a>, it got me thinking how a classical word game that we have played in our childhood can fit nicely with Alexa&#8217;s VUI. This is how the idea of Word Chain was born.</p>
<p><img data-attachment-id="604" data-permalink="https://tgeorgiev.com/2017/05/15/word-chain/logo-512/" data-orig-file="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png" data-orig-size="512,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="logo-512" data-image-description="" data-image-caption="" data-medium-file="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=300" data-large-file="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=512" class="aligncenter size-medium wp-image-604" src="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=300&#038;h=300" alt="logo-512" width="300" height="300" srcset="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=300 300w, https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=150 150w, https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png 512w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p><span id="more-569"></span>Word Chain is a game where players take turns in coming up with words, from a specific category, that begin with the letter that the previous word ended. It&#8217;s a fun way to build up and refresh your vocabulary.</p>
<p>Alexa can be a referee, validating the words are correct and not used, and it can be a fully qualified player that can play with us to build the longest word chain, or competing with us, depending on the mode.</p>
<p>The whole skill was really fun to implement. The stuff are typical programming 101 and string manipulation algorithms. Most effort I have spent on making the word selection picking more smart, meaning that Alexa will try to select such words so that the next player is left with enough choices that can continue the game in a direction that will last longer and build a longer word chain. So I think this is where the game shines.</p>
<p>In case you want to try it out, here are links to it:</p>
<p><a href="https://www.amazon.com/tgeorgiev-Word-Chain/dp/B071RT4ZCZ">https://www.amazon.com/tgeorgiev-Word-Chain/dp/B071RT4ZCZ</a> (for the US store)<br />
<a href="https://www.amazon.co.uk/tgeorgiev-Word-Chain/dp/B071RT4ZCZ">https://www.amazon.co.uk/tgeorgiev-Word-Chain/dp/B071RT4ZCZ</a> (for the UK store)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tgeorgiev.com/2017/05/15/word-chain/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		
		<media:content medium="image" url="https://2.gravatar.com/avatar/b03f4af681d5f006e9be6aa7c2ef5b8dd8fa8e0460ceb1b88c4862e590a9e3f9?s=96&amp;d=identicon&amp;r=G">
			<media:title type="html">maverix7</media:title>
		</media:content>

		<media:content medium="image" url="https://tgeorgiev.com/wp-content/uploads/2017/05/logo-512.png?w=600">
			<media:title type="html">logo-512</media:title>
		</media:content>
	</item>
	</channel>
</rss>