<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6053747786603248705</id><updated>2026-02-24T09:29:05.065+01:00</updated><category term="Cloud"/><category term="ESB"/><category term="devoxx"/><category term="security"/><category term="devoxx08"/><category term="devoxx09"/><category term="personal"/><title type='text'>Blog of Guy Crets</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>149</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-7794247299532301204</id><published>2021-04-04T17:39:00.000+02:00</published><updated>2021-04-04T17:39:00.524+02:00</updated><title type='text'>CentOS on WSL2</title><content type='html'>&lt;p&gt;The&amp;nbsp;&lt;a href=&quot;https://www.centos.org/about/&quot; target=&quot;_blank&quot;&gt;CentOS&lt;/a&gt;&amp;nbsp;Linux distribution is a stable, predictable, manageable and reproducible platform derived from the sources of Red Hat Enterprise Linux (RHEL). The CenOS distribution is quite popular in my professional life.&lt;/p&gt;&lt;p&gt;Having switched to &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/wsl/&quot; target=&quot;_blank&quot;&gt;WLS2&lt;/a&gt;&amp;nbsp;- Windows Subsystem Layer - on my local machine, I was lacking CentOS. According to the docs, WLS2 can &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro&quot; target=&quot;_blank&quot;&gt;import&lt;/a&gt; whatever Linux distro one prefers.&amp;nbsp;&lt;/p&gt;&lt;p&gt;But I found&amp;nbsp;&lt;a href=&quot;https://wsldl-pg.github.io/docs/&quot; target=&quot;_blank&quot;&gt;WSLDL&lt;/a&gt;&amp;nbsp;the more trivial option. With support for &lt;a href=&quot;https://wsldl-pg.github.io/docs/Using-wsldl/&quot; target=&quot;_blank&quot;&gt;many distros&lt;/a&gt;. For CentOS, simply download&amp;nbsp;&lt;a href=&quot;https://github.com/mishamosher/CentOS-WSL&quot; target=&quot;_blank&quot;&gt;CentOS-WSL&lt;/a&gt;&amp;nbsp;and off one goes.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://wsldl-pg.github.io/docs/asset/wsldl-logo.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;200&quot; data-original-width=&quot;200&quot; src=&quot;https://wsldl-pg.github.io/docs/asset/wsldl-logo.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/7794247299532301204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/7794247299532301204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7794247299532301204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7794247299532301204'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2021/04/centos-on-wsl2.html' title='CentOS on WSL2'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-728640738134371746</id><published>2021-02-15T09:11:00.011+01:00</published><updated>2021-02-15T09:11:00.810+01:00</updated><title type='text'>Take Apigee X for a spin</title><content type='html'>&lt;div class=&quot;separator&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMG8fe9eU_LyKwm3dekw38NULpZTGU1Eg9lxfXx5FDaAiJICLAxL_nShAolukAB4D23FcV1kJbmZL1VUzPhbJ05ZiPI_rLhDwCzOB0T8wnyGlX-v7YKUA7qA9F0QAFQaZY455S00yRrEY/&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img data-original-height=&quot;88&quot; data-original-width=&quot;238&quot; height=&quot;74&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMG8fe9eU_LyKwm3dekw38NULpZTGU1Eg9lxfXx5FDaAiJICLAxL_nShAolukAB4D23FcV1kJbmZL1VUzPhbJ05ZiPI_rLhDwCzOB0T8wnyGlX-v7YKUA7qA9F0QAFQaZY455S00yRrEY/w200-h74/image.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;https://cloud.google.com/blog/products/api-management/apigee-x-google-clouds-more-powerful-api-management-platform&quot; target=&quot;_blank&quot;&gt;Apigee X&lt;/a&gt;&amp;nbsp;is the latest product version of Google&#39;s Apigee API Management platform. Adding a 4 product version next to &lt;a href=&quot;https://docs.apigee.com/api-platform/get-started/get-started&quot; target=&quot;_blank&quot;&gt;Apigee Edge&lt;/a&gt; (SAAS),&amp;nbsp;&lt;a href=&quot;https://docs.apigee.com/private-cloud/v4.50.00/overview&quot; target=&quot;_blank&quot;&gt;Apigee for Private Cloud&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;https://cloud.google.com/apigee/hybrid&quot; target=&quot;_blank&quot;&gt;Apigee Hybrid&lt;/a&gt;. Apigee X is best described as a version of Apigee Hybrid that is (almost) fully managed by Google.&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;There is a free evaluation version available. One only needs a (free) Google Cloud account. Took it for a spin on a snowy Sunday afternoon.&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot;&gt;The suggested way to get started with Apigee X is the &lt;a href=&quot;https://apigee.google.com/setup/eval?pli=1&quot; target=&quot;_blank&quot;&gt;Apigee Evaluation Setup&lt;/a&gt;. But if you want to experiment with API proxies that are publicly available, &lt;a href=&quot;https://community.apigee.com/questions/89856/what-activities-should-be-done-for-installing-apig.html&quot; target=&quot;_blank&quot;&gt;better&lt;/a&gt; use the&amp;nbsp;&lt;a href=&quot;http://apigee-ngsaas-trial-install.sh&quot;&gt;apigee-ngsaas-trial-install.sh&lt;/a&gt; &lt;a href=&quot;https://github.com/apigee/ahr/blob/main/bin/apigee-ngsaas-trial-install.sh&quot; target=&quot;_blank&quot;&gt;script&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;Create a Google Cloud project and assign the Apigee Organization Admin role to yourself.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvIsO06tJ5SI0lo9cINVBQ5C8oPakQUY0N1jq6xZ1OQWg-C7_1TqNoRQA11T8mYNPg-ORNCRUSjJcq_9C4GskvjAhNLq5Um5U1CbbSJbK9-DakBOnYN_8K2dJ3NOThNJulZKaxzWN63s/&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;604&quot; data-original-width=&quot;602&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvIsO06tJ5SI0lo9cINVBQ5C8oPakQUY0N1jq6xZ1OQWg-C7_1TqNoRQA11T8mYNPg-ORNCRUSjJcq_9C4GskvjAhNLq5Um5U1CbbSJbK9-DakBOnYN_8K2dJ3NOThNJulZKaxzWN63s/&quot; width=&quot;239&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Then simply start the script.&amp;nbsp;One attention point when using the Cloud Shell terminal: the script takes a long time to execute, causing your shell to close. I solved this by restarting the script after the organization was provisioned. Then opening the Apigee &lt;a href=&quot;https://apigee.google.com/edge&quot; target=&quot;_blank&quot;&gt;console&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;&lt;p&gt;Configured an API proxy &quot;httpbin&quot; pointing to &lt;a href=&quot;http://httpbin.org&quot;&gt;http://httpbin.org/&lt;/a&gt;&amp;nbsp;for my project (apigee-x-2021 with LB IP 34.117.205.203).. And invoke the API proxy:&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;curl -k -v&amp;nbsp;https://apigee-x-2021-eval.apigee.net/httpbin/uuid \&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; --resolve &quot;apigee-x-2021-eval.apigee.net:443:34.117.205.203&quot;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;div style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style=&quot;text-align: left;&quot;&gt;There are limited costs related to the use of this Apigee X eval.&amp;nbsp;A number of objects are created by the script on GCP to expose the API proxies publicly. Estimated cost for these components is €0,07/hour. The Apigee X trial itself is of course free.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://cloud.google.com/apigee/docs/api-platform/get-started/configure-service-networking&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;656&quot; data-original-width=&quot;800&quot; height=&quot;328&quot; src=&quot;https://cloud.google.com/apigee/docs/api-platform/images/ng-saas/arch-apigee-level2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;2 VM instance (apigee-envoy-xxxxx)&lt;/li&gt;&lt;li&gt;Instance group (apigee-envoy-europe-west1)&lt;/li&gt;&lt;li&gt;Instance template (apigee-envoy-europe-west1)&lt;/li&gt;&lt;li&gt;Forwarding rule (apigee-envoy-https-lb-rule)&lt;/li&gt;&lt;li&gt;Load balancer (apigee-envoy-proxy-map)&lt;/li&gt;&lt;li&gt;With backend (apigee-envoy-backend)&lt;/li&gt;&lt;li&gt;Target proxy (apigee-envoy-https-proxy)&lt;/li&gt;&lt;li&gt;SSL cert (apigee-ssl-cert)&lt;/li&gt;&lt;li&gt;Static IP address (lb-ipv4-vip-1)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/728640738134371746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/728640738134371746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/728640738134371746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/728640738134371746'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2021/02/take-apigee-x-for-spin.html' title='Take Apigee X for a spin'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMG8fe9eU_LyKwm3dekw38NULpZTGU1Eg9lxfXx5FDaAiJICLAxL_nShAolukAB4D23FcV1kJbmZL1VUzPhbJ05ZiPI_rLhDwCzOB0T8wnyGlX-v7YKUA7qA9F0QAFQaZY455S00yRrEY/s72-w200-h74-c/image.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-1608442212974755674</id><published>2021-02-13T19:52:00.002+01:00</published><updated>2021-02-14T11:22:50.267+01:00</updated><title type='text'>From WS-Security to API Message Security?</title><content type='html'>&lt;p style=&quot;text-align: left;&quot;&gt;API Management - and application integration in general - go hand in hand with good security practices. It is crucial to protect the message exchanges between all the systems we link together. This article focuses on the integrity of API requests and responses. Where we still lack a broadly accepted approach or standard.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;From XML Signature to WS-Security&lt;/h3&gt;&lt;p&gt;The &lt;a href=&quot;https://www.w3.org/TR/xml/&quot; target=&quot;_blank&quot;&gt;XML spec&lt;/a&gt; (&lt;a href=&quot;https://www.w3.org/TR/1998/REC-xml-19980210&quot; target=&quot;_blank&quot;&gt;1998&lt;/a&gt;) was created with a lot of &lt;a href=&quot;https://en.wikipedia.org/wiki/XML#Related_specifications&quot; target=&quot;_blank&quot;&gt;related specifications&lt;/a&gt; such as XPath (1999). On the security side, &lt;a href=&quot;https://www.w3.org/TR/xmldsig-core/&quot; target=&quot;_blank&quot;&gt;XML Signature&lt;/a&gt;&amp;nbsp;(&lt;a href=&quot;https://www.w3.org/TR/2002/REC-xmldsig-core-20020212/&quot; target=&quot;_blank&quot;&gt;2002&lt;/a&gt;) and &lt;a href=&quot;https://en.wikipedia.org/wiki/XML_Encryption&quot; target=&quot;_blank&quot;&gt;XML Encryption&lt;/a&gt; were rapidly available. These standards were the foundation for &lt;a href=&quot;https://en.wikipedia.org/wiki/WS-Security&quot; target=&quot;_blank&quot;&gt;WS-Security&lt;/a&gt;, with it&#39;s most relevant use case, the &lt;a href=&quot;http://docs.oasis-open.org/wss-m/wss/v1.1.1/os/wss-x509TokenProfile-v1.1.1-os.html&quot; target=&quot;_blank&quot;&gt;X509 Token Profile&lt;/a&gt; (&lt;a href=&quot;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0.pdf&quot; target=&quot;_blank&quot;&gt;2004&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;XML Signatures have some great features:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Embedded within the XML document itself (detached also supported)&lt;/li&gt;&lt;li&gt;Normalization of the message before calculating the hash, the &quot;&lt;a href=&quot;https://www.w3.org/TR/xml-exc-c14n/&quot; target=&quot;_blank&quot;&gt;canonicalization&lt;/a&gt;&quot; or C14N&lt;/li&gt;&lt;li&gt;Specific parts of the XML message can be signed&lt;/li&gt;&lt;li&gt;Multiple signatures of parts of single XML document&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;BTW, best book ever on WS-Security and related remains &quot;Securing Web Services with WS-Security: Demystifying WS-Security, WS-Policy, SAML, XML Signature, and XML Encryption&quot;.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;JSON Message Level Security&lt;/h3&gt;&lt;p&gt;On the JSON side, we have the&amp;nbsp;&lt;span style=&quot;font-size: 1em;&quot;&gt;JSON Web Signature (JWS)&lt;/span&gt;&amp;nbsp;spec (&lt;a href=&quot;https://tools.ietf.org/html/rfc7515&quot; target=&quot;_blank&quot;&gt;RFC7515&lt;/a&gt;, 2015). JWS is the basis for&amp;nbsp;&lt;u&gt;J&lt;/u&gt;SON &lt;u&gt;W&lt;/u&gt;eb &lt;u&gt;T&lt;/u&gt;okens (&lt;a href=&quot;https://tools.ietf.org/html/rfc7519&quot; target=&quot;_blank&quot;&gt;RFC7519&lt;/a&gt;). Although a JSON canonicalization standard exists - albeit not very popular - with&amp;nbsp;&lt;u&gt;J&lt;/u&gt;SON&amp;nbsp;&lt;u&gt;C&lt;/u&gt;anonicalization&amp;nbsp;&lt;u&gt;S&lt;/u&gt;cheme (&lt;a href=&quot;https://tools.ietf.org/html/rfc8785&quot; target=&quot;_blank&quot;&gt;RFC8785&lt;/a&gt;), the JWT spec opted to base64 encode the message, turning JSON into non-JSON.&lt;/p&gt;&lt;p&gt;JWT or jot tokens are well supported and very useful for JWT tokens, e.g. the identity tokens of OpenID Connect.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;API Message Level Security?&lt;/h3&gt;&lt;p&gt;In the API world, SSL/TLS is the foundation for secure exchange of information. There is no tendency whatsoever to apply protection on the request or response level. A bit weird, where 15+ years ago we went through great lengths to protect XML messages while going over multiple network hops. In the API world, we seem to believe that there is only a single network hop between client app and back-end API? No API Management or other components along the road?&amp;nbsp;&lt;/p&gt;&lt;p&gt;There is no standard (approach) yet to provide message level protection of our API requests and responses. Where &quot;message body&quot; is the resource representation of and API responses or the request body with HTTP POST, PUT or PATCH verbs.&lt;/p&gt;&lt;p&gt;The draft HTTP signatures RFC is an important step for message level API security. Where HTTP headers are being signed. And where the body can be included in that signature by adding the hash of the body as a Digest header cf.&amp;nbsp;&lt;a href=&quot;https://tools.ietf.org/html/rfc3230&quot; target=&quot;_blank&quot;&gt;RFC3230&lt;/a&gt;,&amp;nbsp;&lt;/p&gt;&lt;p&gt;The Signing HTTP RFC has difficulty getting &quot;finished&quot;.&amp;nbsp;The &quot;old&quot;&amp;nbsp;&lt;a href=&quot;https://tools.ietf.org/html/draft-cavage-http-signatures-12&quot; target=&quot;_blank&quot;&gt;Signing HTTP Messages&lt;/a&gt;&amp;nbsp;draft RFC is now being succeeded by the new draft&amp;nbsp;&lt;a href=&quot;https://tools.ietf.org/html/draft-ietf-httpbis-message-signatures-01&quot; target=&quot;_blank&quot;&gt;Signing HTTP Messages&lt;/a&gt;&amp;nbsp;RFC. A lot of &lt;a href=&quot;https://greenbytes.de/tech/webdav/draft-ietf-httpbis-message-signatures-01.html#wg-discuss&quot; target=&quot;_blank&quot;&gt;topics for discussion&lt;/a&gt; remain. With an important one missing: reference to&amp;nbsp;&lt;a href=&quot;https://tools.ietf.org/html/rfc7517#section-5&quot; target=&quot;_blank&quot;&gt;JWKS&lt;/a&gt;&amp;nbsp;or X509 client certs (&lt;a href=&quot;https://tools.ietf.org/html/rfc7517#page-9&quot; target=&quot;_blank&quot;&gt;x5c&lt;/a&gt;) for signature verification.&lt;/p&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Where is the &quot;API Security&quot; spec?&lt;/h3&gt;&lt;p&gt;But where is the overarching approach? Where HTTP signing includes the message body, with canonicalization based on the content-type: JSON C14N, XML C14N or other? Where is the successor of &lt;a href=&quot;https://en.wikipedia.org/wiki/WS-Security&quot; target=&quot;_blank&quot;&gt;WS-Security&lt;/a&gt; in the API world?&lt;/p&gt;&lt;p&gt;And as a nice extra: where is the successor of&amp;nbsp;&lt;a href=&quot;the http://docs.oasis-open.org/wss-m/wss/v1.1.1/os/wss-x509TokenProfile-v1.1.1-os.html&quot; target=&quot;_blank&quot;&gt;Web Services Security X.509 Certificate Token Profile&lt;/a&gt;&amp;nbsp;so we can continue using X509 client certs as alternative for&amp;nbsp;&lt;a href=&quot;https://tools.ietf.org/html/rfc7517#section-5&quot; target=&quot;_blank&quot;&gt;JWKS&lt;/a&gt;?&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/1608442212974755674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/1608442212974755674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1608442212974755674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1608442212974755674'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2021/02/from-ws-security-to-api-message-security.html' title='From WS-Security to API Message Security?'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-4263834308163846040</id><published>2021-01-30T15:31:00.000+01:00</published><updated>2021-01-30T15:31:23.681+01:00</updated><title type='text'>Cloud Ready Containers with WSL2</title><content type='html'>&lt;p&gt;RedHat &lt;a href=&quot;https://www.openshift.com/&quot; target=&quot;_blank&quot;&gt;OpenShift&lt;/a&gt; is a popular, enhanced and extended version of Kubernetes. Available on numerous platforms, also locally as &lt;a href=&quot;https://developers.redhat.com/products/codeready-containers&quot; target=&quot;_blank&quot;&gt;Cloud Ready Containers&lt;/a&gt; (CRC).&lt;/p&gt;&lt;p&gt;Have been fighting a bit to get the combination of CRC with &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/wsl/&quot; target=&quot;_blank&quot;&gt;WSL2&lt;/a&gt; working on my Windows machine. Wasn&#39;t able to reach the OpenShift cluster form my WSL2 Linux machines.&lt;/p&gt;&lt;p&gt;Big thanks to colleague &lt;a href=&quot;https://www.linkedin.com/in/stefaandg&quot; target=&quot;_blank&quot;&gt;Stefaan De Geyter&lt;/a&gt; of sister company &lt;a href=&quot;https://www.flowfactor.be/&quot; target=&quot;_blank&quot;&gt;FlowFactor&lt;/a&gt; for hinting me the &lt;a href=&quot;https://docs.microsoft.com/en-us/powershell/module/nettcpip/set-netipinterface&quot; target=&quot;_blank&quot;&gt;Set-NetIPInterface&lt;/a&gt; command. The&amp;nbsp;&lt;span style=&quot;font-family: courier;&quot;&gt;Set-NetIPInterface -Forwarding Enabled &lt;/span&gt;command allows &lt;a href=&quot;https://github.com/microsoft/WSL/issues/4288&quot; target=&quot;_blank&quot;&gt;WSL2 to interact with the CRC&lt;/a&gt; VM.&lt;/p&gt;&lt;p&gt;Execute the below commands from PowerShell as Administrator:&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Get-NetIPInterface | where {$_.InterfaceAlias -eq &#39;vEthernet (Default Switch)&#39;} | Set-NetIPInterface -Forwarding Enabled&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Get-NetIPInterface | where {$_.InterfaceAlias -eq &#39;&lt;i&gt;vEthernet (WSL)&lt;/i&gt;&#39;} | Set-NetIPInterface -Forwarding Enabled&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;To double check that forwarding is enabled:&lt;/p&gt;&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Get-NetIPInterface | select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;One drawback: after wake-up or reboot, need to enable forwarding again, a &lt;a href=&quot;https://techcommunity.microsoft.com/t5/itops-talk-blog/windows-subsystem-for-linux-2-addressing-traffic-routing-issues/ba-p/1764074&quot; target=&quot;_blank&quot;&gt;known issue&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As such one can &lt;a href=&quot;https://docs.openshift.com/container-platform/4.6/cli_reference/openshift_cli/getting-started-cli.html&quot; target=&quot;_blank&quot;&gt;install&lt;/a&gt; the OpenShift&amp;nbsp;&lt;a href=&quot;https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz&quot; target=&quot;_blank&quot;&gt;command line tools&lt;/a&gt;&amp;nbsp;on WSL2 Linux instances and happily &quot;oc&quot; against the the local CRC cluster.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/4263834308163846040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/4263834308163846040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/4263834308163846040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/4263834308163846040'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2021/01/cloud-ready-containers-with-wsl2.html' title='Cloud Ready Containers with WSL2'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-7984151201826400062</id><published>2019-01-15T13:55:00.000+01:00</published><updated>2019-01-15T13:55:57.382+01:00</updated><title type='text'>Service Mesh - Event Mesh??</title><content type='html'>Service Meshes and &lt;a href=&quot;https://istio.io/docs/concepts/what-is-istio/&quot; target=&quot;_blank&quot;&gt;Istio&lt;/a&gt; in particular are the next step in modern software platforms. They further standardize the runtime platform and help abstract the underlying layers.&lt;br /&gt;
&lt;br /&gt;
Now&amp;nbsp;&lt;a href=&quot;https://www.thoughtworks.com/radar/techniques/service-mesh&quot;&gt;service meshes&lt;/a&gt; strongly focus on synchronous request/reply (request driven) interactions. Their &lt;a href=&quot;https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc&quot; target=&quot;_blank&quot;&gt;data plane&lt;/a&gt; is based on advanced usage of proxies, &lt;a href=&quot;https://www.envoyproxy.io/&quot; target=&quot;_blank&quot;&gt;Envoy&lt;/a&gt; in case of Istio. Primarily protocols are HTTP 1.1 and 2.0, with some gRPC.&lt;br /&gt;
&lt;br /&gt;
But a micro services architecture also requires &lt;a href=&quot;https://microservices.io/patterns/data/event-driven-architecture.html&quot; target=&quot;_blank&quot;&gt;event driven&lt;/a&gt; communication. Some question/idea that came up: why not use a messaging solution (&lt;a href=&quot;https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern&quot; target=&quot;_blank&quot;&gt;pub/sub&lt;/a&gt; and/or queuing) as the data plane of a service mesh?&lt;br /&gt;
&lt;br /&gt;
Multiple types of messaging systems exist: compliant with the&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Java_Message_Service&quot; target=&quot;_blank&quot;&gt;JMS&lt;/a&gt;&amp;nbsp;API, compliant with the &lt;a href=&quot;https://www.amqp.org/&quot; target=&quot;_blank&quot;&gt;AMQP&lt;/a&gt;&amp;nbsp;protocol or modern incarnations such as &lt;a href=&quot;https://kafka.apache.org/intro&quot; target=&quot;_blank&quot;&gt;Kafka&lt;/a&gt; or &lt;a href=&quot;https://nats.io/&quot; target=&quot;_blank&quot;&gt;NATS&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgynUhGslgP9OwzKwva5IajKGHc8ewj2p2vSfC9iWDPQ9achnrz2Npxtd89CQgyVXxfbgHBersU5zMfyqwUHDFikZvpA7IEh-2kaRSObGlISDZxElQ9bv2zr4tFsfCqYB02cCPayGB8gdA/s1600/event-mesh.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;442&quot; data-original-width=&quot;737&quot; height=&quot;191&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgynUhGslgP9OwzKwva5IajKGHc8ewj2p2vSfC9iWDPQ9achnrz2Npxtd89CQgyVXxfbgHBersU5zMfyqwUHDFikZvpA7IEh-2kaRSObGlISDZxElQ9bv2zr4tFsfCqYB02cCPayGB8gdA/s320/event-mesh.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Event Mesh (source: Solace.com)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
While searching around, couldn&#39;t find much support for such &quot;event mesh&quot;. &lt;a href=&quot;https://solace.com/&quot; target=&quot;_blank&quot;&gt;Solace&lt;/a&gt; is a lesser known vendor of messaging solutions that talks about its&amp;nbsp;&lt;a href=&quot;https://solace.com/what-is-an-event-mesh&quot; target=&quot;_blank&quot;&gt;event&amp;nbsp;mesh&lt;/a&gt;&amp;nbsp;in its &lt;a href=&quot;https://solace.com/blog/event-mesh&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; and positions it as an&amp;nbsp;&lt;a href=&quot;https://try.solace.com/lp-event-mesh/&quot; target=&quot;_blank&quot;&gt;offering&lt;/a&gt;.&amp;nbsp;But couldn&#39;t find information on how to use Solace&#39;s product as a data plane for in a service mesh such as Istio or Linkerd.&lt;br /&gt;
&lt;br /&gt;
Strange that no other vendors or initiatives talk about using a &lt;a href=&quot;https://en.wikipedia.org/wiki/Message-oriented_middleware&quot; target=&quot;_blank&quot;&gt;Message Oriented Middleware&lt;/a&gt;&amp;nbsp;(MOM) as the data plan of a service mesh. It is common practice in the integration world to switch from http to messaging inbound. And leverage light weight integration platform as &lt;a href=&quot;https://istio.io/docs/tasks/traffic-management/ingress/&quot; target=&quot;_blank&quot;&gt;ingress&lt;/a&gt; for a service mesh?</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/7984151201826400062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/7984151201826400062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7984151201826400062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7984151201826400062'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2019/01/service-mesh-event-mesh.html' title='Service Mesh - Event Mesh??'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgynUhGslgP9OwzKwva5IajKGHc8ewj2p2vSfC9iWDPQ9achnrz2Npxtd89CQgyVXxfbgHBersU5zMfyqwUHDFikZvpA7IEh-2kaRSObGlISDZxElQ9bv2zr4tFsfCqYB02cCPayGB8gdA/s72-c/event-mesh.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-3317271906083082532</id><published>2018-09-21T11:15:00.000+02:00</published><updated>2018-09-22T12:40:35.826+02:00</updated><title type='text'>Kubernetes in Action</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYxhX-MeWoeWYFcK4m5FSr5_tXpFSf42h_L0cWp2SIJfcfmLcldusclGwRYXVgeaUovpAUF01K9YhGkBiABLwJaCiRnmxepROm5tC_feNN_iEZdOFurKioMSdkhStr9_2VHhADaXGhSk/s1600/Kubernetes_in_Action.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;499&quot; data-original-width=&quot;399&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYxhX-MeWoeWYFcK4m5FSr5_tXpFSf42h_L0cWp2SIJfcfmLcldusclGwRYXVgeaUovpAUF01K9YhGkBiABLwJaCiRnmxepROm5tC_feNN_iEZdOFurKioMSdkhStr9_2VHhADaXGhSk/s320/Kubernetes_in_Action.jpg&quot; width=&quot;255&quot; /&gt;&lt;/a&gt;Kubernetes is becoming a very popular platform to manage containers. There is a consensus in the &lt;a href=&quot;https://www.i8c.be/&quot;&gt;i8c&lt;/a&gt; team that the book &lt;a href=&quot;https://www.manning.com/books/kubernetes-in-action&quot;&gt;Kubernetes in Action&lt;/a&gt; is really a great way to dive into the matter. By reading the book, one also grasps the complexities of Kubernetes.&lt;br /&gt;
&lt;br /&gt;
Interesting to see how all the big names&lt;br /&gt;
Google, Amazon, Microsoft, IBM, Pivotal, Redhat&amp;nbsp; support the Kubernetes platform in their respective clouds and on-premise. The list of &lt;a href=&quot;https://landscape.cncf.io/grouping=landscape&amp;amp;landscape=kubernetes-certified-service-provider&quot;&gt;Kubernetes Certified Service Providers&lt;/a&gt; is extensive.&lt;br /&gt;
&lt;br /&gt;
Also integration platforms are being containerized, e.g. &lt;a href=&quot;https://www.tibco.com/resources/datasheet/tibco-businessworks-container-edition&quot;&gt;TIBCO BusinessWorks Container Edition&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href=&quot;https://www.ibm.com/support/knowledgecenter/en/SSTTDS_11.0.0/com.ibm.etools.mft.doc/bz91300_.htm&quot;&gt;IBM AppConenct Enterprise&lt;/a&gt;. But other vendors in the integration space are taking this direction as well: multiple lighter-weight integration engines running a limited number of integration flows. Whereby containers can run distributed on-premise and in different clouds.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/3317271906083082532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/3317271906083082532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3317271906083082532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3317271906083082532'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2018/09/kubernetes-in-action.html' title='Kubernetes in Action'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhYxhX-MeWoeWYFcK4m5FSr5_tXpFSf42h_L0cWp2SIJfcfmLcldusclGwRYXVgeaUovpAUF01K9YhGkBiABLwJaCiRnmxepROm5tC_feNN_iEZdOFurKioMSdkhStr9_2VHhADaXGhSk/s72-c/Kubernetes_in_Action.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-2079917260012034762</id><published>2018-09-18T09:00:00.000+02:00</published><updated>2018-09-18T09:00:04.959+02:00</updated><title type='text'>Marrying API management with Istio</title><content type='html'>&lt;a href=&quot;https://istio.io/&quot;&gt;Istio&lt;/a&gt; is a service mesh on top of Kubernetes. Istio &lt;a href=&quot;https://istio.io/docs/concepts/what-is-istio/&quot;&gt;assists&lt;/a&gt; with the securing, managing and monitoring the communication between microservices.&lt;br /&gt;
&lt;br /&gt;
The two main drivers behind Istio,&amp;nbsp;IBM and Google (Apigee) both have a strong API Management solution. IBM comes with API Connect, Google with Apigee. Now both IBM and Google are definitely going to bring their API Managemet solution together with Istio.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqkpQN4n0hkEvRQLnFck879myNQqFL3vieai74tuz3tsgs7ETVyvz-EdXS-di88oLmN0OJcsLtaJziGDKPO4C7ODygvUYSJEU3VvvMBMIbQUAei2e5D69hk_re79ULhfaQpm0Q_Krfdw/s1600/Apigee+Istio+Adapter.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;112&quot; data-original-width=&quot;889&quot; height=&quot;40&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqkpQN4n0hkEvRQLnFck879myNQqFL3vieai74tuz3tsgs7ETVyvz-EdXS-di88oLmN0OJcsLtaJziGDKPO4C7ODygvUYSJEU3VvvMBMIbQUAei2e5D69hk_re79ULhfaQpm0Q_Krfdw/s320/Apigee+Istio+Adapter.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;Apigee has already released a &quot;&lt;a href=&quot;https://docs.apigee.com/api-platform/istio-adapter/concepts&quot;&gt;Apigee Adapter for Istio&lt;/a&gt;&quot; that we successfully &lt;a href=&quot;https://community.apigee.com/questions/59768/apigee-with-istio.html&quot;&gt;took it for a spin&lt;/a&gt;&lt;span id=&quot;goog_425043987&quot;&gt;&lt;/span&gt;&lt;a href=&quot;https://www.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_425043988&quot;&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
IBM is &lt;a href=&quot;https://developer.ibm.com/apiconnect/2018/07/25/api-connect-istio-side-side-perspective-get-white-paper/&quot;&gt;releasing papers&lt;/a&gt;&amp;nbsp;describing API + Microservices Management as the perfect marriage.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjP3inU8jVTsxKLCky11kTJK-AElOieqX02x_JuEZXex7WX512TRYvulq0H4tRgXShcjFkcrje1Ro8yiGyv6AFtrqiWqVYWkZs8reboRRRJI_r9ZRxBavPVTQgbWm7bHT3HRdMVFmY28o/s1600/IBM+API+and+Microservices+mgt+perfect+marriage.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;74&quot; data-original-width=&quot;1600&quot; height=&quot;27&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjP3inU8jVTsxKLCky11kTJK-AElOieqX02x_JuEZXex7WX512TRYvulq0H4tRgXShcjFkcrje1Ro8yiGyv6AFtrqiWqVYWkZs8reboRRRJI_r9ZRxBavPVTQgbWm7bHT3HRdMVFmY28o/s640/IBM+API+and+Microservices+mgt+perfect+marriage.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
A topic to closely monitor as it brings enterprise API Management and Micro Services together!</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/2079917260012034762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/2079917260012034762' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2079917260012034762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2079917260012034762'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2018/09/marrying-api-management-with-istio.html' title='Marrying API management with Istio'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTqkpQN4n0hkEvRQLnFck879myNQqFL3vieai74tuz3tsgs7ETVyvz-EdXS-di88oLmN0OJcsLtaJziGDKPO4C7ODygvUYSJEU3VvvMBMIbQUAei2e5D69hk_re79ULhfaQpm0Q_Krfdw/s72-c/Apigee+Istio+Adapter.PNG" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-3710920287520502356</id><published>2018-09-15T14:20:00.000+02:00</published><updated>2018-09-15T14:27:47.385+02:00</updated><title type='text'>Apigee API Mgt ~ SAP API Mgt</title><content type='html'>API Management is booming. The &lt;a href=&quot;https://www.i8c.be/&quot;&gt;i8c&lt;/a&gt; team works with many API Management solutions. Personally I&#39;m more involved with IBM&#39;s &lt;a href=&quot;https://developer.ibm.com/apiconnect/&quot;&gt;API Connect&lt;/a&gt; and Google&#39;s &lt;a href=&quot;https://apigee.com/api-management/&quot;&gt;Apigee&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
SAP&#39;s API Management is an &lt;a href=&quot;https://apigee.com/about/partner-story/sap&quot;&gt;OEM version&lt;/a&gt; of Apigee. By subscribing to the free openSAP training &quot;&lt;a href=&quot;https://open.sap.com/courses/cp8&quot;&gt;SAP Cloud Platform API Management&lt;/a&gt;&quot;, I got triggered to actually put my hands on SAP&#39;s API Management solution.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Although both products are fundamentally identical, they definitely look different, see screenshots below. But there are other differences as well:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;SAP focuses (of course) on exposing SAP back-end systems and the use of &lt;a href=&quot;https://www.odata.org/&quot;&gt;OData&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;https://www.sap.com/community/topic/gateway.html&quot;&gt;SAP Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SAP comes with the concept of Templates, a number of preset policies that can be copied into an API proxy&lt;/li&gt;
&lt;li&gt;SAP renamed Edge Management UI to API Portal&lt;/li&gt;
&lt;li&gt;Apigee is also available on-premise with their &lt;a href=&quot;https://docs.apigee.com/private-cloud/versions&quot;&gt;Edge for Private Cloud&lt;/a&gt;, SAP API Mgt isn&#39;t&lt;/li&gt;
&lt;li&gt;SAP integrates with its &lt;a href=&quot;https://api.sap.com/&quot;&gt;API Business Hub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Apigee seems much cheaper: &lt;a href=&quot;https://cloudplatform.sap.com/pricing.html&quot;&gt;SAP charges&lt;/a&gt; €150 for 1 million API calls, &lt;a href=&quot;https://apigee.com/api-management/#/pricing&quot;&gt;Apigee charges&lt;/a&gt; $500 for 15 million API calls (per month, Sept 2018)&lt;/li&gt;
&lt;/ul&gt;
Looking forward to learn more about SAP&#39;s API management during the &lt;a href=&quot;https://open.sap.com/courses/cp8&quot;&gt;free openSAP training&lt;/a&gt;. And also curious to see if SAP will go its own way yes or no. For now, they are still very similar on the inside but looking different on the outside.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2PjZj5ztbpmuHljXdCgK__-77vY4eEVWsF5_YH0zh3heelDU1iMynu-lSUPj2okOM7yuyBO5JUjYDKuuh1_VgTTHWK8PZJAGGOPT8PnoGUdTe3JStrihXGWT3UjNumzg0cvx1wjsQ7LE/s1600/SAP_API_Mgt_Develop.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;1600&quot; height=&quot;302&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2PjZj5ztbpmuHljXdCgK__-77vY4eEVWsF5_YH0zh3heelDU1iMynu-lSUPj2okOM7yuyBO5JUjYDKuuh1_VgTTHWK8PZJAGGOPT8PnoGUdTe3JStrihXGWT3UjNumzg0cvx1wjsQ7LE/s640/SAP_API_Mgt_Develop.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdKv-RHiRv7JIZZnnuYtUqjHU1gXO9TAPMYrWPWOlww1Yt6ZkX20DYDvw2Qgzmjhz07rviAS3KBthytwBbIPcA1A_7rOiV9jBSyrJZeMWFUd2LcFjNOZuJkr2ymxVYV8gy0FCpXoW3k0g/s1600/Apigee_Develop.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1398&quot; data-original-width=&quot;1600&quot; height=&quot;558&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdKv-RHiRv7JIZZnnuYtUqjHU1gXO9TAPMYrWPWOlww1Yt6ZkX20DYDvw2Qgzmjhz07rviAS3KBthytwBbIPcA1A_7rOiV9jBSyrJZeMWFUd2LcFjNOZuJkr2ymxVYV8gy0FCpXoW3k0g/s640/Apigee_Develop.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/3710920287520502356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/3710920287520502356' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3710920287520502356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3710920287520502356'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2018/09/apigee-api-mgt-sap-api-mgt.html' title='Apigee API Mgt ~ SAP API Mgt'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2PjZj5ztbpmuHljXdCgK__-77vY4eEVWsF5_YH0zh3heelDU1iMynu-lSUPj2okOM7yuyBO5JUjYDKuuh1_VgTTHWK8PZJAGGOPT8PnoGUdTe3JStrihXGWT3UjNumzg0cvx1wjsQ7LE/s72-c/SAP_API_Mgt_Develop.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-2780258264324837342</id><published>2017-11-04T17:10:00.002+01:00</published><updated>2017-11-04T17:10:25.596+01:00</updated><title type='text'>MoCA for better connectivity</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwtOJgA5ByqPzgnKlDznPm9FxJcLcGHnOQa7dIAADmSoGF8Q3amw5DSAUMXpvmS60lsyFh_DB6Ogo-5E4KX0T9c2dLePc-Egz91weP0BRhTJnqlc4GmVVAb46ivLmInotAYkdNzrgnV4/s1600/IMG_20171104_142214.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwtOJgA5ByqPzgnKlDznPm9FxJcLcGHnOQa7dIAADmSoGF8Q3amw5DSAUMXpvmS60lsyFh_DB6Ogo-5E4KX0T9c2dLePc-Egz91weP0BRhTJnqlc4GmVVAb46ivLmInotAYkdNzrgnV4/s320/IMG_20171104_142214.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;At our 20 year old house, there was no UTP cabling and is almost impossible to install it., Quite a pitty. Solution was wireless and&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Broadband_over_power_lines&quot;&gt;broadband over power line&lt;/a&gt;, with Netgear Powerline AV500.&lt;br /&gt;
&lt;br /&gt;
But with COAX for TV in almost every room, installed &lt;a href=&quot;http://www.mocalliance.org/&quot;&gt;MoCA&lt;/a&gt; adapters. And now very good and stable Internet connectivity.&lt;br /&gt;
&lt;br /&gt;
Should have done this way earlier!</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/2780258264324837342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/2780258264324837342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2780258264324837342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2780258264324837342'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/11/moca-for-better-connectivity.html' title='MoCA for better connectivity'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBwtOJgA5ByqPzgnKlDznPm9FxJcLcGHnOQa7dIAADmSoGF8Q3amw5DSAUMXpvmS60lsyFh_DB6Ogo-5E4KX0T9c2dLePc-Egz91weP0BRhTJnqlc4GmVVAb46ivLmInotAYkdNzrgnV4/s72-c/IMG_20171104_142214.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-5723867904482382128</id><published>2017-03-20T10:21:00.002+01:00</published><updated>2017-03-20T10:21:33.140+01:00</updated><title type='text'>SAP + Google: how about Apigee API Management?</title><content type='html'>SAP and Google have announced a &lt;a href=&quot;https://blog.google/topics/google-cloud/google-cloud-and-sap-forge-partnership-develop-enterprise-solutions/&quot;&gt;partnership&lt;/a&gt;. First impression is that SAP will leverage the &lt;a href=&quot;https://cloud.google.com/&quot;&gt;Google Cloud Platform&lt;/a&gt;&amp;nbsp;as an underpinning for its&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGS2COBcoz_gCP8fam-Ow08Vijgw8WAqCV0mhMyinwf2J4DkpYn5WyEPNRqlg-9VE284imF-kh2AXTO-fJYceIzRIfWvQbMIm8ORYHyoHmAfPdYPrkq0Z14yVeJHU2jjm19jUJYmYEYHQ/s1600/SAP-Google_Infographic_T.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGS2COBcoz_gCP8fam-Ow08Vijgw8WAqCV0mhMyinwf2J4DkpYn5WyEPNRqlg-9VE284imF-kh2AXTO-fJYceIzRIfWvQbMIm8ORYHyoHmAfPdYPrkq0Z14yVeJHU2jjm19jUJYmYEYHQ/s320/SAP-Google_Infographic_T.jpg&quot; width=&quot;213&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
As Google has just &lt;a href=&quot;https://cloudplatform.googleblog.com/2016/09/Google-to-acquire-apigee.html&quot;&gt;acquired&lt;/a&gt; the API Management solution &lt;a href=&quot;https://apigee.com/&quot;&gt;Apigee&lt;/a&gt;&amp;nbsp;and SAP is an &lt;a href=&quot;https://apigee.com/about/press-release/apigee-announces-partnership-sap&quot;&gt;OEM&lt;/a&gt;&amp;nbsp;customer of Apigee, what impact will this have on SAP&#39;s API Management offering?&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBlTyS8iqx2YzQUEqQ5KJ4P3HmNFri9ImvOkhusmB4DvxWc0FWN-fcxeSHtyIR_LnDdjWmy_nVk1j4HLilfB956IJALkJ6KN0XiWyKIGuw9rS58k_e93T7DWsu9ONtQX4fxq8-9cnM_K4/s1600/Apigee.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBlTyS8iqx2YzQUEqQ5KJ4P3HmNFri9ImvOkhusmB4DvxWc0FWN-fcxeSHtyIR_LnDdjWmy_nVk1j4HLilfB956IJALkJ6KN0XiWyKIGuw9rS58k_e93T7DWsu9ONtQX4fxq8-9cnM_K4/s1600/Apigee.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
And 2nd question: will SAP Cloud Integration also become available on Google&#39;s cloud platform?&lt;br /&gt;
&lt;br /&gt;
Interesting times.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/5723867904482382128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/5723867904482382128' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/5723867904482382128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/5723867904482382128'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/03/sap-google-how-about-apigee-api.html' title='SAP + Google: how about Apigee API Management?'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGS2COBcoz_gCP8fam-Ow08Vijgw8WAqCV0mhMyinwf2J4DkpYn5WyEPNRqlg-9VE284imF-kh2AXTO-fJYceIzRIfWvQbMIm8ORYHyoHmAfPdYPrkq0Z14yVeJHU2jjm19jUJYmYEYHQ/s72-c/SAP-Google_Infographic_T.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-8518319749166172427</id><published>2017-03-14T21:42:00.003+01:00</published><updated>2017-03-20T10:21:46.000+01:00</updated><title type='text'>Capturing HTTP requests in an cloud world</title><content type='html'>While integrating with Salesforce, had an issue getting the authentication right. What is that cloud integration platform actually sending to Salesforce? How to get a look into the message on the wire?&lt;br /&gt;
&lt;br /&gt;
Simple but efficient solution, pick one of the many &lt;a href=&quot;https://lornajane.net/posts/2013/endpoints-for-http-testing&quot;&gt;free HTTP endpoints&lt;/a&gt;. Point to the temporary URL, send the message and get all the info on HTTP headers and payload. So trivial and easy.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrcjPPmLzUTzPp0jexkTcxf6eM-4dSIL0jzlN_T-WZNQVMvOfis7XlxpBBipbSllHG1NdJU8FK6DYkt_NLHccD6HDhRcMUuq_dgE7epeiwgJWmtngUCw3Bhww1nxPSJoVcLksvi5rEIP8/s1600/Requestbin0.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrcjPPmLzUTzPp0jexkTcxf6eM-4dSIL0jzlN_T-WZNQVMvOfis7XlxpBBipbSllHG1NdJU8FK6DYkt_NLHccD6HDhRcMUuq_dgE7epeiwgJWmtngUCw3Bhww1nxPSJoVcLksvi5rEIP8/s400/Requestbin0.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYuKsKacPBWHvo49AwNf90V49OzoxFFfuj-py_u7vy9o4XaVyrG5kKrVAipGTRomxLjA8muDjjG9QuTwFwNU1Fx4uWQCkj752nKH7zr9tNlI41fy7sGjR_sATQ6gmMGAw-QI94ImKXGE8/s1600/Requestbin2.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;260&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYuKsKacPBWHvo49AwNf90V49OzoxFFfuj-py_u7vy9o4XaVyrG5kKrVAipGTRomxLjA8muDjjG9QuTwFwNU1Fx4uWQCkj752nKH7zr9tNlI41fy7sGjR_sATQ6gmMGAw-QI94ImKXGE8/s400/Requestbin2.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZ1MlOU6HzCJEBCqp9ja1GEqxGJKiqzILfoKPixHfmiLAxiwx5dxuxxzhgk-6VZTAwC8vzEKShDdBhT6zqqqyq8hsKWlHzdQpQcNGg8zTaej8tCgplZIvJjP5S74jrYere0ej-1KDNfs/s1600/Requestbin1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;464&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZ1MlOU6HzCJEBCqp9ja1GEqxGJKiqzILfoKPixHfmiLAxiwx5dxuxxzhgk-6VZTAwC8vzEKShDdBhT6zqqqyq8hsKWlHzdQpQcNGg8zTaej8tCgplZIvJjP5S74jrYere0ej-1KDNfs/s640/Requestbin1.PNG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/8518319749166172427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/8518319749166172427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/8518319749166172427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/8518319749166172427'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/03/capturing-http-requests-in-cloud-world.html' title='Capturing HTTP requests in an cloud world'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrcjPPmLzUTzPp0jexkTcxf6eM-4dSIL0jzlN_T-WZNQVMvOfis7XlxpBBipbSllHG1NdJU8FK6DYkt_NLHccD6HDhRcMUuq_dgE7epeiwgJWmtngUCw3Bhww1nxPSJoVcLksvi5rEIP8/s72-c/Requestbin0.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-2670117270660838627</id><published>2017-02-20T12:35:00.002+01:00</published><updated>2017-02-20T12:37:18.575+01:00</updated><title type='text'>The legal side of integration </title><content type='html'>Very interesting &lt;a href=&quot;http://www.computerweekly.com/news/450413224/High-Court-rules-for-SAP-against-Diageo-in-indirect-licensing-case&quot;&gt;news&lt;/a&gt; in the &lt;a href=&quot;http://www.computerworld.com/article/3171676/cloud-computing/sap-license-fees-are-due-even-for-indirect-users-uk-court-says.html&quot;&gt;press&lt;/a&gt; the last couple of days. The Salesforce system of the beverages company&amp;nbsp;&lt;a href=&quot;http://www.diageo.com/&quot;&gt;Diageo&lt;/a&gt;&amp;nbsp;allows a large group of users to access data in back-end systems, including SAP ERP. Because of the named user license model of SAP, British court has ruled that a fee must be paid for each user of the Salesforce system. A little known aspect of integration: legal! Actually, the integration between Salesforce and the on-premise SAP and Oracle systems was handled by &lt;a href=&quot;https://en.wikipedia.org/wiki/SAP_NetWeaver_Process_Integration&quot;&gt;SAP PI&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/2670117270660838627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/2670117270660838627' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2670117270660838627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2670117270660838627'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/02/the-lega-side-of-integration.html' title='The legal side of integration '/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-3873440985622384374</id><published>2017-02-15T17:42:00.000+01:00</published><updated>2017-02-15T17:42:00.227+01:00</updated><title type='text'>Interview by AdeptEvents</title><content type='html'>Regularly I give public workshops on the topic of Application Integration in Belgium via &lt;a href=&quot;https://sai.be/&quot;&gt;SAI&lt;/a&gt; and in the Netherlands via &lt;a href=&quot;http://adeptevents.nl/&quot;&gt;AdeptEvents&lt;/a&gt;. A &lt;a href=&quot;http://www.adeptevents.nl/iot&quot;&gt;video interview&lt;/a&gt; about my workshop and the topic of application integration has just been released by AdeptEvents. Enjoy!&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFdNQI5-rJ9Ef3mpXaoXZ7S0WEv2axeFh3EuGaXeu3OWUf-xWHImUXarjokKTHgAM8H5NDxphw-u9322l5wTNbxGGhaOsCW6ABKdFhM614Mff-oXjwbu1l5vfKYmKQMA_DStzMJwWl2YY/s1600/Crets_Guy_DSC_0447_w1024-768x512.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFdNQI5-rJ9Ef3mpXaoXZ7S0WEv2axeFh3EuGaXeu3OWUf-xWHImUXarjokKTHgAM8H5NDxphw-u9322l5wTNbxGGhaOsCW6ABKdFhM614Mff-oXjwbu1l5vfKYmKQMA_DStzMJwWl2YY/s320/Crets_Guy_DSC_0447_w1024-768x512.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/3873440985622384374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/3873440985622384374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3873440985622384374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3873440985622384374'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/02/interview-by-adeptevents.html' title='Interview by AdeptEvents'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFdNQI5-rJ9Ef3mpXaoXZ7S0WEv2axeFh3EuGaXeu3OWUf-xWHImUXarjokKTHgAM8H5NDxphw-u9322l5wTNbxGGhaOsCW6ABKdFhM614Mff-oXjwbu1l5vfKYmKQMA_DStzMJwWl2YY/s72-c/Crets_Guy_DSC_0447_w1024-768x512.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-2837485726549682553</id><published>2017-02-11T16:50:00.003+01:00</published><updated>2017-02-11T16:50:26.211+01:00</updated><title type='text'>IBM Watson Customer Engagement</title><content type='html'>A few weeks ago, attended a big IBM training event about IBM&#39;s e-commerce offering. During the conference, a new brand name was released: &quot;&lt;a href=&quot;https://www.ibm.com/watson/customer-engagement/&quot;&gt;Watson Customer Engagement&lt;/a&gt;&quot;. My primary interest were the B2B integration solution of IBM, that are part of this suite and fall under the category &quot;&lt;a href=&quot;https://www.ibm.com/watson/supply-chain/&quot;&gt;Watson Supply Chain&lt;/a&gt;&quot;.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3UW7SS-Y3QJz88prXz0gLfCzJMtFzvjPAI7FZFEvJalSxo0hoTisEIri6F0IDLKy07oMJiXlgU-eX4om5NDt3YAxDJIP4rA5EvlgPZ0Y3GzORWXG_38G9ZuL1n73tsc4WRarB3goSdNY/s1600/photo_1483982660933.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3UW7SS-Y3QJz88prXz0gLfCzJMtFzvjPAI7FZFEvJalSxo0hoTisEIri6F0IDLKy07oMJiXlgU-eX4om5NDt3YAxDJIP4rA5EvlgPZ0Y3GzORWXG_38G9ZuL1n73tsc4WRarB3goSdNY/s320/photo_1483982660933.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
IBM has an extensive range of products that are part of it&#39;s Watson Customer Engagement offering: obviously e-commerce or &quot;Digital Commerce&quot;, but also Order Mangement, procurement, digital marketing, customer experience analytics and much more. There is even a specific product to have an overview of all available stock across all warehouses and stores.&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
My focus was rather on IBM&#39;s offerings for &lt;a href=&quot;https://www.ibm.com/us-en/marketplace/collections/b2b-integration&quot;&gt;B2B integration&lt;/a&gt; and &lt;a href=&quot;https://www.ibm.com/us-en/marketplace/collections/managed-file-transfer&quot;&gt;Managed File Transfer&lt;/a&gt; (MFT). &lt;a href=&quot;https://www.ibm.com/us-en/marketplace/b2b-gateway-software&quot;&gt;Sterling B2B Integrator&lt;/a&gt; is the core product on which the &lt;a href=&quot;https://www.ibm.com/us-en/marketplace/secure-file-gateway&quot;&gt;Sterling File Gateway&lt;/a&gt; builds further to provide a user-friendly Managed File Transfer solution.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7jg5l_k72bDohnC2mlCli4m1orGujm_jkWkicK4HM3Mq6D03J2E6Sppcrd-yV9F6a2WxhrFdIEeeSOwk3FvMghp44ROc9e3bncMBs7r5WxJOTnL-jcu520XGdFTdvZF4Ab2oKEKiXVs8/s1600/IMG_20170110_131933.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7jg5l_k72bDohnC2mlCli4m1orGujm_jkWkicK4HM3Mq6D03J2E6Sppcrd-yV9F6a2WxhrFdIEeeSOwk3FvMghp44ROc9e3bncMBs7r5WxJOTnL-jcu520XGdFTdvZF4Ab2oKEKiXVs8/s320/IMG_20170110_131933.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Maybe not well known, but IBM also has a very extensive B2B integration network called the &lt;a href=&quot;https://www.ibm.com/us-en/marketplace/b2b-collaboration-software&quot;&gt;IBM B2B Collaboration Network&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;div&gt;
Everyone of the &lt;a href=&quot;http://integrationdesigners.com/&quot;&gt;IntegrationDesigners&lt;/a&gt;&amp;nbsp;team (IBM integration team of the&amp;nbsp;&lt;a href=&quot;https://cronos-groep.be/&quot;&gt;Cronos&lt;/a&gt;&amp;nbsp;group) gets his turn to attend events and conferences. Already had the IBM cloud conference in Madrid in October 2016 and now this conference in Las Vegas, Nevada.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Trip to Las Vegas was quite a hell: snow on the road to Brussels airport, more than an hour wait in the plane before take-off in Brussels, very late arrival in New York because of snow, missed connecting flight, long queue to re-book to another flight, just-in-time to get on the last plane to Las Vegas, long wait in the plane to be de-iced, ... Such 28 hour trip is pretty tiring.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-MW8QEsnVfpnjT9Rk3XEuG2GFb-BqV5hmr32K3pXfRoAEoRqRTwpAlY1QAvAdsTusde68dzLXYRcqS1niK_OdLNaZH41zZb_HI4pnZVkr53IPR2qJTy-Et54NIYJk6B6H2cbot_whI9w/s1600/IMG_20170107_215316.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-MW8QEsnVfpnjT9Rk3XEuG2GFb-BqV5hmr32K3pXfRoAEoRqRTwpAlY1QAvAdsTusde68dzLXYRcqS1niK_OdLNaZH41zZb_HI4pnZVkr53IPR2qJTy-Et54NIYJk6B6H2cbot_whI9w/s320/IMG_20170107_215316.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
By: Guy&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/2837485726549682553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/2837485726549682553' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2837485726549682553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2837485726549682553'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2017/02/ibm-watson-customer-engagement.html' title='IBM Watson Customer Engagement'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3UW7SS-Y3QJz88prXz0gLfCzJMtFzvjPAI7FZFEvJalSxo0hoTisEIri6F0IDLKy07oMJiXlgU-eX4om5NDt3YAxDJIP4rA5EvlgPZ0Y3GzORWXG_38G9ZuL1n73tsc4WRarB3goSdNY/s72-c/photo_1483982660933.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-7249141158979108353</id><published>2016-11-13T15:35:00.004+01:00</published><updated>2016-11-13T16:33:56.810+01:00</updated><title type='text'>Remote Service API Design </title><content type='html'>With the longer weekend (Friday Nov 11 is a public holiday in Belgium, to remember the end of WW I) took some time to watch some sessions from the Devoxx conference that has just finished. The talks are already available on Youtube! Great content: &lt;a href=&quot;https://www.youtube.com/watch?v=AFOUetAYuiQ&quot;&gt;Microservices&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=9iaqAcbS2vU&quot;&gt;Reactive&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=DKJ0w30M0vg&quot;&gt;Netty&lt;/a&gt;, &lt;a href=&quot;https://www.youtube.com/watch?v=ElilYxUOjOQ&quot;&gt;Kafka&lt;/a&gt; messaging, &lt;a href=&quot;https://www.youtube.com/watch?v=3OohD03k-y0&quot;&gt;Docker&lt;/a&gt;, ... With this conference almost in my backyard, will have to free up some time next year to attend again myself.&lt;br /&gt;
&lt;br /&gt;
One talk immediately drew my attention: &quot;&lt;a href=&quot;https://www.youtube.com/watch?v=JG00rfoWVeU&quot;&gt;Effective Service API Design&lt;/a&gt;&quot; by &lt;a href=&quot;https://en.wikipedia.org/wiki/Elliotte_Rusty_Harold&quot;&gt;Elliott Rusty Harold&lt;/a&gt;. I know Elliott an XML guru. Remember being at the speaker&#39;s table with him at &lt;a href=&quot;http://xml.coverpages.org/XMLDevConEuropeSpring2001-Program.html&quot;&gt;XML DevCon&lt;/a&gt; in London back in 2001 where I presented &quot;Understanding SOAP&quot;.&lt;br /&gt;
&lt;br /&gt;
Some thinks I picked up:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&quot;Contract first&quot; &amp;gt;&amp;gt; &quot;Documentation first&quot;&lt;/li&gt;
&lt;li&gt;Start small (MVP Minimum Viable Product, YAGNE You Ain&#39;t Gonna Need It)&lt;/li&gt;
&lt;li&gt;Leverage the URL, not everything&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Prefer idempotency&lt;/li&gt;
&lt;li&gt;Use standards: UTF-8, standard data/date formats, standard decimals with 2 digits&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Avoid required data elements&lt;/li&gt;
&lt;li&gt;Deprecation policy, how long to keep the old API, 2 year notice is good&lt;/li&gt;
&lt;li&gt;Plan for versioning: easier &lt;u&gt;without schema&#39;s&lt;/u&gt; but with optional fields&lt;/li&gt;
&lt;li&gt;No assumption about use of client code/library, developers will often not use those&amp;nbsp;&lt;/li&gt;
&lt;li&gt;If you build client code/library, develop it by hand and do not generate it&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Authentication and authorization remain a challenge&lt;/li&gt;
&lt;li&gt;Performance!&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Although a good talk, would have hoped for some more specific guidelines.&lt;br /&gt;
&lt;ul class=&quot;channels-browse-content-grid branded-page-gutter-padding grid-lockups-container&quot; id=&quot;channels-browse-content-grid&quot; style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: Roboto, arial, sans-serif; font-size: 0px; list-style: none; margin: 0px -15px 0px 0px; padding: 15px 15px 0px;&quot;&gt;&amp;nbsp;
&lt;li class=&quot;channels-content-item yt-shelf-grid-item&quot; style=&quot;background: transparent; border: 0px; display: inline-block; margin: 0px 10px 20px 0px; padding: 0px; vertical-align: top; width: 196px; word-wrap: break-word;&quot;&gt;&lt;div class=&quot;yt-lockup clearfix  yt-lockup-video yt-lockup-grid vve-check&quot; data-context-item-id=&quot;JG00rfoWVeU&quot; data-visibility-tracking=&quot;CBMQlDUiEwjw-oC9v6PQAhXUNhYKHS7vAnUomxxA5avZ0N-VzbYk&quot; style=&quot;background: transparent; border: 0px; color: #767676; font-size: 11px; line-height: 1.3em; margin: 0px; padding: 0px; position: relative;&quot;&gt;
&lt;div class=&quot;yt-lockup-dismissable&quot; style=&quot;background: transparent; border: 0px; margin: 0px; padding: 0px;&quot;&gt;
&lt;div class=&quot;yt-lockup-thumbnail&quot; style=&quot;background: transparent; border: 0px; line-height: 0; margin: 0px 0px 4px; padding: 0px; position: relative;&quot;&gt;
&lt;span class=&quot; spf-link  ux-thumb-wrap contains-addto&quot; style=&quot;background: transparent; border: 0px; display: block; height: 110.5px; margin: 0px; overflow: hidden; padding: 0px; position: relative; width: 196px;&quot;&gt;&lt;a aria-hidden=&quot;true&quot; class=&quot;yt-uix-sessionlink&quot; data-sessionlink=&quot;ei=OTAnWLD6OdTtWK7ei6gH&amp;amp;feature=c4-videos-u&amp;amp;ved=CEwQlx4iEwjw-oC9v6PQAhXUNhYKHS7vAnUomxw&quot; href=&quot;https://www.youtube.com/watch?v=JG00rfoWVeU&quot; style=&quot;background: transparent; border: 0px; color: #167ac6; cursor: pointer; margin: 0px; padding: 0px; text-decoration: none;&quot;&gt;&lt;span class=&quot;video-thumb  yt-thumb yt-thumb-196&quot; style=&quot;background: rgb(241, 241, 241); border: 0px; display: inline-block; font-size: 0px; margin: 0px; overflow: hidden; padding: 0px; position: relative; vertical-align: middle; width: 196px;&quot;&gt;&lt;span class=&quot;yt-thumb-default&quot; style=&quot;background: transparent; border: 0px; display: block; height: auto; margin: 0px; padding: 0px 0px 110.25px;&quot;&gt;&lt;span class=&quot;yt-thumb-clip&quot; style=&quot;background: transparent; border: 0px; bottom: -100px; left: -100px; margin: 0px; padding: 0px; position: absolute; right: -100px; text-align: center; top: -100px; white-space: nowrap; word-break: normal;&quot;&gt;&lt;img alt=&quot;&quot; aria-hidden=&quot;true&quot; data-ytimg=&quot;1&quot; src=&quot;https://i.ytimg.com/vi/JG00rfoWVeU/hqdefault.jpg?custom=true&amp;amp;w=336&amp;amp;h=188&amp;amp;stc=true&amp;amp;jpg444=true&amp;amp;jpgq=90&amp;amp;sp=68&amp;amp;sigh=kqNTK_NdV4vy3Jv5liWI3sWVgX8&quot; style=&quot;background: transparent; border: 0px; display: inline-block; font-size: 13px; margin: 0px; outline: none; padding: 0px; vertical-align: middle;&quot; width=&quot;196&quot; /&gt;&amp;nbsp;&lt;span class=&quot;vertical-align&quot; style=&quot;background: transparent; border: 0px; display: inline-block; height: 310.25px; margin: 0px; padding: 0px; vertical-align: middle;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;video-time&quot; style=&quot;background: rgb(0 , 0 , 0); border: 0px; bottom: 2px; color: rgb(255 , 255 , 255); display: inline-block; height: 14px; line-height: 14px; margin: 0px; opacity: 0.75; padding: 0px 4px; position: absolute; right: 2px; vertical-align: top;&quot;&gt;&lt;span aria-label=&quot;1 hour&quot; style=&quot;background: transparent; border: 0px; margin: 0px; padding: 0px;&quot;&gt;1:00:41&lt;/span&gt;&lt;/span&gt;&lt;button class=&quot;yt-uix-button yt-uix-button-size-small yt-uix-button-default yt-uix-button-empty yt-uix-button-has-icon no-icon-markup addto-button video-actions spf-nolink hide-until-delayloaded addto-watch-later-button yt-uix-tooltip&quot; data-video-ids=&quot;JG00rfoWVeU&quot; role=&quot;button&quot; style=&quot;background: rgb(248, 248, 248); border-color: rgb(211, 211, 211); border-radius: 2px; border-style: solid; border-width: 1px; bottom: 2px; box-shadow: rgba(0, 0, 0, 0.0470588) 0px 1px 0px; color: #333333; cursor: pointer; font-family: Roboto, arial, sans-serif; font-size: 11px; height: 22px; margin: 0px; outline: 0px; padding: 0px; position: absolute; right: -60px; vertical-align: middle; white-space: nowrap; width: 22px; word-wrap: normal;&quot; title=&quot;Watch Later&quot; type=&quot;button&quot;&gt;&lt;/button&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;yt-lockup-content&quot; style=&quot;background: transparent; border: 0px; margin: 0px; overflow: hidden; padding: 0px; position: relative;&quot;&gt;
&lt;h3 class=&quot;yt-lockup-title &quot; style=&quot;background: transparent; border: 0px; font-size: 13px; font-weight: 500; margin: 0px 0px 1px; max-width: 196px; padding: 0px;&quot;&gt;
&lt;a aria-describedby=&quot;description-id-156670&quot; class=&quot;yt-uix-sessionlink yt-uix-tile-link  spf-link  yt-ui-ellipsis yt-ui-ellipsis-2&quot; data-sessionlink=&quot;ei=OTAnWLD6OdTtWK7ei6gH&amp;amp;feature=c4-videos-u&amp;amp;ved=CEwQlx4iEwjw-oC9v6PQAhXUNhYKHS7vAnUomxw&quot; dir=&quot;ltr&quot; href=&quot;https://www.youtube.com/watch?v=JG00rfoWVeU&quot; style=&quot;-webkit-box-orient: vertical; -webkit-line-clamp: 2; background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 0px; color: #167ac6; cursor: pointer; display: -webkit-box; line-height: 1.3em; margin: 0px; max-height: 2.6em; overflow: hidden; padding: 0px; position: relative; text-decoration: none; text-overflow: ellipsis; word-wrap: break-word;&quot; title=&quot;Effective Service API Design by Elliotte Rusty Harold&quot;&gt;Effective Service API Design by Elliotte Rusty Harold&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
At the start of the presentation, Elliott clearly makes the difference between the local &quot;library API&quot; (e.g. the JDBC API with the java.sql package) and &quot;Remote API&quot; or &quot;Service API&quot;. Great definition by the way: &lt;i&gt;a network service (almost always a server) by which programs communicate with a bundle of funcitonality provided by code owned by somone else, running on their computer (not yours)&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Thanks to the Devoxx team and &lt;a href=&quot;https://www.linkedin.com/in/stephanjanssen&quot;&gt;Stephan Janssen&lt;/a&gt; to publish this great content for free!&lt;br /&gt;
&lt;br /&gt;
&lt;ul class=&quot;channels-browse-content-grid branded-page-gutter-padding grid-lockups-container&quot; id=&quot;channels-browse-content-grid&quot; style=&quot;background: rgb(255, 255, 255); border: 0px; font-family: Roboto, arial, sans-serif; font-size: 0px; list-style: none; margin: 0px -15px 0px 0px; padding: 15px 15px 0px;&quot;&gt;
&lt;li class=&quot;channels-content-item yt-shelf-grid-item&quot; style=&quot;background: transparent; border: 0px; display: inline-block; margin: 0px 10px 20px 0px; padding: 0px; vertical-align: top; width: 196px; word-wrap: break-word;&quot;&gt;&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/7249141158979108353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/7249141158979108353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7249141158979108353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7249141158979108353'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2016/11/remote-service-api-design.html' title='Remote Service API Design '/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-4264192860556917180</id><published>2016-11-13T13:22:00.002+01:00</published><updated>2016-11-13T14:21:05.729+01:00</updated><title type='text'>Reactive programming, the old way</title><content type='html'>&lt;a href=&quot;http://www.reactivemanifesto.org/&quot;&gt;Reactive&lt;/a&gt; programming is the new hit: applications work with a non-blocking, asynchronous programming model. Use of multi-threading is none or very limited. The reactive program responds to messages or events that come in via callbacks. These messages must be handled as quickly as possible, never blocking themselves while being processed.&lt;br /&gt;
&lt;br /&gt;
Made me think of a fun project I was involved with in 1999 and 2000: &quot;GSL&quot;, the Generic Service Layer&quot; at Rabobank. We developed an integration layer (by Gartner defined as a &quot;Super API&quot;) based on the message passing product &lt;a href=&quot;http://www.netweave.com/&quot;&gt;Netweave&lt;/a&gt;. And this product was completely based on callbacks and a reactive programming model.&lt;br /&gt;
&lt;br /&gt;
Pre-dating XML and with maximum message buffer size of 32K on CICS, we defined our own message format. The messages had a tree structure in a proprietary, textual format. The GSL API allowed the creation, sending, receiving and parsing messages.&lt;br /&gt;
&lt;br /&gt;
All the main platforms were supported: IBM CICS, Tandem (Guardian), AIX Windows NT and AIX. Communication was supported in all directions. So yes, a COBOL CICS program could invoke an ActiveX component on Windows. Code was written in C (and bit of C++). Most often the IBM mainframe and Tandem would be the actual servers.&lt;br /&gt;
&lt;br /&gt;
An old code snippet from those days. This piece of C code writes a buffer back to a client application.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;void loclSend(client_t * pClient, size_t szBuf, char * pBuf)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; NWDS_ERRNO &amp;nbsp; &amp;nbsp; &amp;nbsp;retcode &amp;nbsp;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; NWDS_CALL_BACK &amp;nbsp;complete ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; /* write data to client process */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; complete.procedure = loclSendComplete ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; complete.context &amp;nbsp; = (NWDS_CONTEXT) pClient ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; retcode = nwds_ipc_write(pClient-&amp;gt;hLocl&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,(NWDS_SIZE) szBuf&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,(void *) &amp;nbsp; &amp;nbsp;pBuf&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,NULL&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ,&amp;amp;complete) ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; if ((retcode == NWDS_PENDING) ||&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (retcode == NWDS_SUCCESSFUL))&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; lcTraceHdr(&#39;I&#39;, &#39;S&#39;, pBuf, szBuf) ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; if (retcode != NWDS_PENDING)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; loclSleepCallback(&amp;amp;complete,retcode) ;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The write of the buffer is executed with &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;ndws_ipc_write&lt;/span&gt;. This write could return immediately, whereby &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;NDWS_SUCCESSFUL&lt;/span&gt; would be returned. But most often, the return code would be &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;NWDS_PENDING&lt;/span&gt;. Then the callback function &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;loclSendComplete&lt;/span&gt; would be registered and executed when the write was finished. The &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;complete.procedure&lt;/span&gt; element contains a pointer to the &lt;span style=&quot;font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;&quot;&gt;loclSendComplete()&lt;/span&gt; function.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/4264192860556917180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/4264192860556917180' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/4264192860556917180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/4264192860556917180'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2016/11/reactive-programming-old-way.html' title='Reactive programming, the old way'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-7703687840871706250</id><published>2016-10-22T14:37:00.002+02:00</published><updated>2016-10-22T14:37:26.217+02:00</updated><title type='text'>IT Compass</title><content type='html'>During a meeting, the terms &quot;north&quot; and &quot;south&quot; popped up again while discussing network zoning and DMZ. North is the &quot;outside&quot;, typically the Internet. South are the internal, trusted systems.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8V4NP7q1T-w8T6XyLuE_30zLHcQSlDYjqzhUYEaPJmhBnS-cm8smiqdmq3ple1iG6xlTT3WNk9N10DpCGR7ops8N6vICwkSNe1nl2bh_3uyjYMgYNi0FjuTXIElbdFsdXXTx_c-bAP40/s1600/end-to-end-security-with-palo-alto-networks-onur-kasap-engineer-palo-alto-networks-54-638.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8V4NP7q1T-w8T6XyLuE_30zLHcQSlDYjqzhUYEaPJmhBnS-cm8smiqdmq3ple1iG6xlTT3WNk9N10DpCGR7ops8N6vICwkSNe1nl2bh_3uyjYMgYNi0FjuTXIElbdFsdXXTx_c-bAP40/s320/end-to-end-security-with-palo-alto-networks-onur-kasap-engineer-palo-alto-networks-54-638.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;North-South in networking (from PaloAlto networking)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
How would IT people in South-Africa think about this, where the north is &quot;hot&quot; and very south Antarctica cold? Maybe also good fit: freezing in the data center, hot and dangerous on the Internet.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/7703687840871706250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/7703687840871706250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7703687840871706250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/7703687840871706250'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2016/10/it-compass.html' title='IT Compass'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8V4NP7q1T-w8T6XyLuE_30zLHcQSlDYjqzhUYEaPJmhBnS-cm8smiqdmq3ple1iG6xlTT3WNk9N10DpCGR7ops8N6vICwkSNe1nl2bh_3uyjYMgYNi0FjuTXIElbdFsdXXTx_c-bAP40/s72-c/end-to-end-security-with-palo-alto-networks-onur-kasap-engineer-palo-alto-networks-54-638.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-6472593626788191559</id><published>2016-10-15T13:35:00.003+02:00</published><updated>2016-10-16T15:23:41.811+02:00</updated><title type='text'>Unikernel: microservices without an OS</title><content type='html'>As I continue to spend lots of time on the road and in traffic jams, podcasts are an efficient way to keep up-to-date in the fast moving IT world. Just finished listening &lt;a href=&quot;http://www.se-radio.net/2016/10/se-radio-episode-271-idit-levine-on-unikernelsl/&quot;&gt;SE-Radio Episode 271: Idit Levine on Unikernels&lt;/a&gt;. Very interesting.&lt;br /&gt;
&lt;br /&gt;
Had never heard of &lt;a href=&quot;https://en.wikipedia.org/wiki/Unikernel&quot;&gt;Unikernel&lt;/a&gt;. Actually this is hardly a real OS: no multi-tasking, no security, no memory management. Memory directly mapped to the underlying hardware and some device drivers.&lt;br /&gt;
&lt;br /&gt;
Unikernels become most relevant when used on top of a virtualization layer. A single application is combined with the Unikernel to become a super light-weight runtime unit. A fine alternative for microservices running in a container.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifkMpUPDpccw5W02O0ii6soFvYJ9JW6touOYuNAnH-qRzkHRvbRfV-CghhYsEwR6F426LsLdwZj6c4xFSqxb3epRm1SvKyokJdSAD-4B9EpDlfwiXNzwJSz4aadRmTNYoOxWzQQ9OKScE/s1600/Unikernel.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;171&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifkMpUPDpccw5W02O0ii6soFvYJ9JW6touOYuNAnH-qRzkHRvbRfV-CghhYsEwR6F426LsLdwZj6c4xFSqxb3epRm1SvKyokJdSAD-4B9EpDlfwiXNzwJSz4aadRmTNYoOxWzQQ9OKScE/s400/Unikernel.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Unikernels are also a nice fit with &lt;a href=&quot;http://martinfowler.com/articles/serverless.html&quot;&gt;server-less architectures&lt;/a&gt;: the Unikernel App is super-fast to start. So Unikernel Apps as a more efficient&amp;nbsp;&lt;a href=&quot;https://en.wikipedia.org/wiki/Function_as_a_Service&quot;&gt;Function-As-A-Service&lt;/a&gt;&amp;nbsp;approach.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
When mapping this to my own world of integration, the Unikernel App could be a nice mechanism to handle all the async events going on in an integration environment. An incoming message or API call starts the Unikernel App which handles the message: transformation, routing, logging, forwarding...&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Incredible at which pace the IT world keeps moving.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/6472593626788191559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/6472593626788191559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/6472593626788191559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/6472593626788191559'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2016/10/unikernel-microservices-without-os.html' title='Unikernel: microservices without an OS'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifkMpUPDpccw5W02O0ii6soFvYJ9JW6touOYuNAnH-qRzkHRvbRfV-CghhYsEwR6F426LsLdwZj6c4xFSqxb3epRm1SvKyokJdSAD-4B9EpDlfwiXNzwJSz4aadRmTNYoOxWzQQ9OKScE/s72-c/Unikernel.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-2765653927214512214</id><published>2016-10-09T14:35:00.000+02:00</published><updated>2016-10-16T14:56:44.274+02:00</updated><title type='text'>Event-driven Microservices</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
A few weekends ago, I decided that it was time to catch up on Microservices. Hadn&#39;t been following the topic for a longer while. Starting point is often &lt;a href=&quot;http://safari.oreilly.com/&quot;&gt;Safari&lt;/a&gt;: but instead of reading, I ended up watching the video tutorial &quot;&lt;a href=&quot;http://shop.oreilly.com/product/0636920047551.do&quot;&gt;Event-Driven Microservices&lt;/a&gt;&quot;. By the way, the first part is freely accessible without a Safari subscription.&lt;br /&gt;
&lt;br /&gt;
The video course is presented by &lt;a href=&quot;https://plainoldobjects.com/&quot;&gt;Chris Richardson&lt;/a&gt;. I know Chris as a speaker at earlier &lt;a href=&quot;https://devoxx.be/&quot;&gt;Devoxx&lt;/a&gt; conferences. Very interesting is his approach to address the topic based on patterns, documented at &lt;a href=&quot;http://microservices.io/&quot;&gt;microservices.io&lt;/a&gt;.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhhdoh-TrNe7_VfaGgmD5nFI27F_avDQjCEGu51YQbUTSsnP6dLZVJXZA096VZQ3INyic4ycA5vpN6w8gt8Qwp_aAVfn5CkU1CVUoTifAS_A-Ay9Xa7uTOoqS0euATRiuryQE38vUJ5iM/s1600/PatternsRelatedToMicroservices.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;274&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhhdoh-TrNe7_VfaGgmD5nFI27F_avDQjCEGu51YQbUTSsnP6dLZVJXZA096VZQ3INyic4ycA5vpN6w8gt8Qwp_aAVfn5CkU1CVUoTifAS_A-Ay9Xa7uTOoqS0euATRiuryQE38vUJ5iM/s320/PatternsRelatedToMicroservices.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Microservices patterns (from Microservices.io, by Chris Richardson)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
What was new to me and most interesting was the part about&amp;nbsp;&lt;a href=&quot;http://martinfowler.com/eaaDev/EventSourcing.html&quot;&gt;Event-Sourcing&lt;/a&gt;: instead of storing the state of each object as a database row, the sequence of changes is recorded and maintained. This an approach to tackle the issue of distributed transactions that do not fit with a Microservices architecture. This is also the topic Richardson personally focuses on as his latest &lt;a href=&quot;http://eventuate.io/&quot;&gt;startup&lt;/a&gt; is all about &lt;a href=&quot;http://eventuate.io/whyeventsourcing.html&quot;&gt;Event Sourcing&lt;/a&gt;.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://eventuate.io/i/storingevents.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://eventuate.io/i/storingevents.png&quot; height=&quot;163&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;List of events represents state (Source eventuate.io)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZvqARRtsmTEzg1yiCsDf8ANh2DYCM6Ep0iWOdVlJOqGdQHgiBTv1mbBE3S1f8Y7RQ9WIR4FpxKdslyPuMxjheFATbnVEpxe5Rl5DyL7iCooZOHFMJs0rKLxrurXf5m8wna-Khze32lbY/s1600/requestflow.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;140&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZvqARRtsmTEzg1yiCsDf8ANh2DYCM6Ep0iWOdVlJOqGdQHgiBTv1mbBE3S1f8Y7RQ9WIR4FpxKdslyPuMxjheFATbnVEpxe5Rl5DyL7iCooZOHFMJs0rKLxrurXf5m8wna-Khze32lbY/s320/requestflow.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Handling request by rebuilding state from list of events (Source: eventuate.io)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Of course one needs to remain critical about Microservices:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;We&#39;ve been successfully building 3-tier web and mobile apps, why do it all different now?&lt;/li&gt;
&lt;li&gt;How heterogeneous will all these microservices be? &amp;nbsp;&lt;/li&gt;
&lt;li&gt;Not every organisation is like LinkedIn or Netflix&lt;/li&gt;
&lt;li&gt;Transactions that are eventually consistent are not trivial&lt;/li&gt;
&lt;li&gt;What will be the next thing after Microservices?&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
After 4h 47minutes, I understood that Microservices is as well a domain that is in full flux.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/2765653927214512214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/2765653927214512214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2765653927214512214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/2765653927214512214'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2016/10/event-driven-microservices.html' title='Event-driven Microservices'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhhdoh-TrNe7_VfaGgmD5nFI27F_avDQjCEGu51YQbUTSsnP6dLZVJXZA096VZQ3INyic4ycA5vpN6w8gt8Qwp_aAVfn5CkU1CVUoTifAS_A-Ay9Xa7uTOoqS0euATRiuryQE38vUJ5iM/s72-c/PatternsRelatedToMicroservices.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-5402039263612155807</id><published>2015-10-22T18:08:00.004+02:00</published><updated>2015-10-22T18:08:53.520+02:00</updated><title type='text'>Nexus 6 battery life: incredible</title><content type='html'>After the upgrade of my Nexus 6 to Android 6, battery life has increased in an unbelievable manner. When getting home from work, battery is&amp;nbsp;now around 50%. With lengthy phone calls, USB in the car, hotspot in the once in a while. Simply amazing.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/5402039263612155807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/5402039263612155807' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/5402039263612155807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/5402039263612155807'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2015/10/nexus-6-battery-life-incredible.html' title='Nexus 6 battery life: incredible'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-3075997143810256517</id><published>2015-08-17T13:20:00.000+02:00</published><updated>2015-08-17T13:20:58.828+02:00</updated><title type='text'>Incompatible Metering info (CallerInformation) in SAP WS </title><content type='html'>The support of SAP systems for SOAP Web Services is pretty good.&amp;nbsp;I have e.g. been successfully using WS-RM and SAP-RM to have reliable, one-way communication.&lt;br /&gt;
&lt;br /&gt;
During a project I needed to make a call from an SAP ECC 6 system towards an external web service. This external web service was secured&amp;nbsp;with WS-Security X509 Token profile. So the payload had to be digitally signed. With no integration platform yet available, I intended to make a direct call from the SAP back)end system. But this really proofed to be impossible. Getting keys and certificates into an SAP system is always a challenge, but configuration of the WS-Security in SAP’s SOAManager is actually quite trivial.&lt;br /&gt;
&lt;br /&gt;
But things did not work out: a real showstopper became&amp;nbsp;the Metering info that was present in each and every outbound call. As of Support Pack 17 of&amp;nbsp;SAP NetWeaver 7.0,&amp;nbsp;the element &amp;lt;CallerInformation&amp;gt; is present in the SOAP header of each outbound SOAP request. Purpose of this element is to gather service metering and transfer it to the service provider.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  &amp;lt;CallerInformation wsu:Id=&quot;part-CallerInformation-2&quot; 
     xmlns=&quot;http://www.sap.com/webas/712/soap/features/runtime/metering/&quot;&amp;gt;
    &amp;lt;m:Type xmlns:m=&quot;http://www.sap.com/webas/712/soap/features/runtime/metering/&quot;&amp;gt;SA&amp;lt;/m:Type&amp;gt;
    &amp;lt;m:App xmlns:m=&quot;http://www.sap.com/webas/712/soap/features/runtime/metering/&quot;/&amp;gt;
    &amp;lt;m:Component xmlns:m=&quot;http://www.sap.com/webas/712/soap/features/runtime/metering/&quot;/&amp;gt;
  &amp;lt;/CallerInformation&amp;gt;
&amp;lt;/soap-env:Header&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
And the bad news is: you cannot get rid of this Metering information,&amp;nbsp;as clearly documented by SAP Support (SAP note&amp;nbsp;1239428). The only workaround is to forward the information in the URL of the HTTP call. But in my case, the well secured web service rightfully&amp;nbsp;refused to accept the web service call with all these extra parameters in the URL.&lt;br /&gt;
&lt;br /&gt;
So&amp;nbsp;SAP has implemented an proprietary and incompatible “feature”. Why can’t it be switched off?&lt;br /&gt;
Is this a trick of SAP to enforce the use of SAP PI/PO? Obviously any ESB can remove this ugly SOAP header.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/3075997143810256517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/3075997143810256517' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3075997143810256517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3075997143810256517'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2015/08/incompatible-metering-info.html' title='Incompatible Metering info (CallerInformation) in SAP WS '/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-3468520136264464697</id><published>2015-01-02T10:38:00.000+01:00</published><updated>2015-01-02T10:38:02.627+01:00</updated><title type='text'>Best wishes for 2015</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHa1yCrMxr0lDW9rToCFborBUka9Go8O_Ixtfz685bUAfBEeLSgu1MLh7xrGv8oGpLR0tk3yNYFtD0mbGDbCA7KZK-DFcqbP7md4e6L0pL3VKVdJ9rMF8_hPcpobyOsWbEW0bSAvR6rgU/s1600/nieuwjaarswensen2015.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHa1yCrMxr0lDW9rToCFborBUka9Go8O_Ixtfz685bUAfBEeLSgu1MLh7xrGv8oGpLR0tk3yNYFtD0mbGDbCA7KZK-DFcqbP7md4e6L0pL3VKVdJ9rMF8_hPcpobyOsWbEW0bSAvR6rgU/s1600/nieuwjaarswensen2015.jpg&quot; height=&quot;265&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/3468520136264464697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/3468520136264464697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3468520136264464697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/3468520136264464697'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2015/01/best-wishes-for-2015.html' title='Best wishes for 2015'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHa1yCrMxr0lDW9rToCFborBUka9Go8O_Ixtfz685bUAfBEeLSgu1MLh7xrGv8oGpLR0tk3yNYFtD0mbGDbCA7KZK-DFcqbP7md4e6L0pL3VKVdJ9rMF8_hPcpobyOsWbEW0bSAvR6rgU/s72-c/nieuwjaarswensen2015.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-1290996443605602088</id><published>2014-12-31T10:11:00.000+01:00</published><updated>2014-12-31T10:11:00.515+01:00</updated><title type='text'>Devops (3): Chef (and some fun cooking)</title><content type='html'>After having looked into &lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;, it became clear that &lt;a href=&quot;http://puppetlabs.com/&quot;&gt;Puppet&lt;/a&gt; and &lt;a href=&quot;https://www.chef.io/&quot;&gt;Chef&lt;/a&gt; are &quot;the&quot; tools to do the&amp;nbsp;structured and repeatable configuration of machines. I picked the recent book &quot;&lt;a href=&quot;http://shop.oreilly.com/product/0636920032397.do#&quot;&gt;Learning Chef&lt;/a&gt;&quot; to learn and experiment a bit.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvBQ8R7W0_70JS1T6IZS2dVBt1ZCEJ7njJJTpyyiJ77zNx8CpcUmWAR42o6VWu-I4wvIJp8Sa5kNY7LJeYe4ZvijDNMIKDj1g2ff9n6BGrX7wKcVhNIMzC29O6nOlKXJOSVC0NzQtun4/s1600/learning_chef.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvBQ8R7W0_70JS1T6IZS2dVBt1ZCEJ7njJJTpyyiJ77zNx8CpcUmWAR42o6VWu-I4wvIJp8Sa5kNY7LJeYe4ZvijDNMIKDj1g2ff9n6BGrX7wKcVhNIMzC29O6nOlKXJOSVC0NzQtun4/s1600/learning_chef.jpg&quot; height=&quot;320&quot; width=&quot;243&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;strong&gt;Tools&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The book uses the recent &lt;a href=&quot;https://downloads.chef.io/chef-dk/&quot;&gt;Chef Development Kit&lt;/a&gt;&amp;nbsp;which should gradually replace the tool called &lt;a href=&quot;https://docs.chef.io/knife.html&quot;&gt;Knife&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The tool &quot;Chef&quot; uses the&amp;nbsp;the &lt;a href=&quot;https://docs.chef.io/dsl_recipe.html&quot;&gt;Recipe DSL&lt;/a&gt; to write &lt;a href=&quot;http://docs.chef.io/recipes.html&quot;&gt;recipes&lt;/a&gt;&amp;nbsp;(Domain Specific Language, based on the Ruby programming language) &lt;/li&gt;
&lt;li&gt;VirtualBox is used for running the VM&#39;s that are going to be cooked and baked&lt;/li&gt;
&lt;li&gt;Complemented with our good friend &lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt; (see previous DevOps blog)(actually kitchen-vagrant)&lt;/li&gt;
&lt;li&gt;Finally the tool &lt;a href=&quot;https://docs.chef.io/kitchen.html&quot;&gt;kitchen&lt;/a&gt;&amp;nbsp;is used &amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
The focus op Chef really lies on getting the software on the machine installed, configured, and up and running. On the target machine, a Chef Client is installed that will retrieve (new and updated) recipes from a Chef Server. So the Chef clients each pull the recipes from the Chef Server.&lt;br /&gt;
Note: the tool &lt;a href=&quot;http://www.ansible.com/&quot;&gt;Ansible&lt;/a&gt; does the opposite, pushing configuration data to the machines.&lt;br /&gt;
&lt;br /&gt;
Many cookbooks or recipes can be downloaded from the &lt;a href=&quot;https://supermarket.chef.io/cookbooks&quot;&gt;Chef Supermarket&lt;/a&gt; and others.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Finally&lt;/strong&gt;&lt;br /&gt;
After spending some time look around in the world of DevOps and its tools, I have a few general Observations:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Devops is strongly focused on Linux&lt;/li&gt;
&lt;li&gt;Diverse programming&amp;nbsp;languages such as Ruby and Erlang are used&lt;/li&gt;
&lt;li&gt;This is a domain in full flux, new initiatives and companies pop up, things evolve rapidly&lt;/li&gt;
&lt;li&gt;First time I see the file format YAML actually being used&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/1290996443605602088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/1290996443605602088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1290996443605602088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1290996443605602088'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2014/12/devops-3-chef-and-some-fun-cooking.html' title='Devops (3): Chef (and some fun cooking)'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFvBQ8R7W0_70JS1T6IZS2dVBt1ZCEJ7njJJTpyyiJ77zNx8CpcUmWAR42o6VWu-I4wvIJp8Sa5kNY7LJeYe4ZvijDNMIKDj1g2ff9n6BGrX7wKcVhNIMzC29O6nOlKXJOSVC0NzQtun4/s72-c/learning_chef.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-6914435076202084196</id><published>2014-12-30T10:03:00.000+01:00</published><updated>2014-12-30T10:03:00.406+01:00</updated><title type='text'>Devops (2): Vagrant</title><content type='html'>&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSQl2ISleKmV6GrTVA_QTjTC0JfoKgZ_qwK0wF96IjRlZ4AfO0OPOF_v9dFRgrhvPFMnkvU8NiTUj8N23CmixOzXS0XWuPIrFh6dwJYyOIOiMm6jCwAbwHIE8dbGtLzM7lpOu0jVMfGxA/s1600/vagrant-logo.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSQl2ISleKmV6GrTVA_QTjTC0JfoKgZ_qwK0wF96IjRlZ4AfO0OPOF_v9dFRgrhvPFMnkvU8NiTUj8N23CmixOzXS0XWuPIrFh6dwJYyOIOiMm6jCwAbwHIE8dbGtLzM7lpOu0jVMfGxA/s1600/vagrant-logo.jpg&quot; height=&quot;87&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;After looking a bit into &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;, I went on to look into &lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;, another well-known tool to provision and configure virtual machines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To learn about Vagrant, I read the book &quot;&lt;a href=&quot;http://shop.oreilly.com/product/0636920026358.do&quot;&gt;Vagrant: Up and Running&lt;/a&gt;&quot;. This O&#39;Reilly book is well-written and the examples all work. While doing the exercises on a Windows Server 2012R2 VM, I hardly encountered any problems. Starting the Ubuntu VM with the &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;vagrant up&lt;/span&gt; command and removing it with &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;&quot;&gt;vagrant destory&lt;/span&gt;.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDpXUSXvRljlvw5Q9AeeS_CK33AX1R6jJo_tpTNTw_iZdsVZdx0-rvqkXj_KEiTvBG5cRdLmjIyYwC8iDR659PsZMlgPECTJk3PxmwiPUFXclYkqCRGRE8IZkEG2A4SvDV_OgReDdR8EQ/s1600/Vagrant-Up-and-Running.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDpXUSXvRljlvw5Q9AeeS_CK33AX1R6jJo_tpTNTw_iZdsVZdx0-rvqkXj_KEiTvBG5cRdLmjIyYwC8iDR659PsZMlgPECTJk3PxmwiPUFXclYkqCRGRE8IZkEG2A4SvDV_OgReDdR8EQ/s1600/Vagrant-Up-and-Running.jpg&quot; height=&quot;320&quot; width=&quot;243&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The Vagrant command line tool allows to create a Virtual Machine in a reproducible and neutral manner. Vagrant was initially developed around the the free VM product &lt;a href=&quot;https://www.virtualbox.org/&quot;&gt;Oracle VirtualBox&lt;/a&gt;. But Vagrant now comes with many &lt;a href=&quot;https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins&quot;&gt;other providers&lt;/a&gt;, e.g. AWS, Rackspace, IBM SoftLayer and Microsoft Azure. Support for VMWare however is not free ($79).&lt;br /&gt;
&lt;br /&gt;
Vagrant focuses on the creation of Virtual Machines in a neutral manner. Contrary to Docker, it uses an actual Virtualization solution to provision the virtual machines. This allows Vagrant to support multiple Operating Systems in parallel. And offers support for automating the creation of Windows based virtual machines.&lt;br /&gt;
&lt;br /&gt;
When Vagrant is used in combination with Oracle VirtualBox, Vagrant will use the &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;VBoxManage.exe&lt;/span&gt; of VirtualBox. To create machines with a cloud provider, the respective Vagrant provider will leverage the API and tools of the specific Infrastructure-As-A-Service solution. Vagrant configure all sorts of attributes of the virtual machine, incl. e.g. networking (and port forwarding).&lt;br /&gt;
&lt;br /&gt;
For the actual provisioning of the machines, Vagrant supports many options, including command line. But most often, Vagrant will be used in combination with Chef or Puppet. E.g. the &lt;a href=&quot;https://downloads.chef.io/chef-dk/&quot;&gt;Chef development kit&lt;/a&gt; uses Vagrant as its default &quot;driver&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Boxes &lt;/span&gt;&lt;br /&gt;
Vagrant does not start from an ISO image, but from an already prepared &quot;box&quot;. The more such box is pre-configured, the fewer configuration needs to be done afterwards. Vagrant uses its own software format to package the virtual machines that are taken as a starting point (compare to &lt;a href=&quot;http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html&quot;&gt;Amazon Machine Images&lt;/a&gt;). &lt;a href=&quot;http://www.vagrantbox.es/&quot;&gt;Vagrantbox.es&lt;/a&gt; and many others make pre-packaged Vagrant boxes available,&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Windows specific&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://vagrantmanager.com/&quot;&gt;VagrantManager&lt;/a&gt; makes Vagrant accessible&amp;nbsp;from the Windows (or iOS) Taskbar&amp;nbsp;&lt;/li&gt;
&lt;li&gt;The company&amp;nbsp;&lt;a href=&quot;http://modern.ie/&quot;&gt;modern.IE&lt;/a&gt; makes Windows boxes with&amp;nbsp;all sorts of IE versions&amp;nbsp;&lt;a href=&quot;http://blog.syntaxc4.net/post/2014/09/03/windows-boxes-for-vagrant-courtesy-of-modern-ie.aspx&quot;&gt;available&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Interesting &lt;a href=&quot;http://www.hurryupandwait.io/blog/in-search-of-a-light-weight-windows-vagrant-box&quot;&gt;blog&lt;/a&gt; on how to create Variant Windows boxes&lt;/li&gt;
&lt;li&gt;Vagrant can directly access the command line of Linux boxes&amp;nbsp;over SSH (secure shell). For Windows boxes&amp;nbsp;this cal also be arranged wen cygwin (or other SSH server) is installed. But Vagrant&amp;nbsp;can&amp;nbsp;also &lt;a href=&quot;https://www.vagrantup.com/blog/feature-preview-vagrant-1-6-windows.html&quot;&gt;use WinRM&lt;/a&gt;&amp;nbsp;to access the Windows command line&lt;/li&gt;
&lt;li&gt;Where the installation of software on Linux boxes leverages apt-get or yum to install software packages,&amp;nbsp;&lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatery&lt;/a&gt; wants to bring a similar solution to the Microsoft world; many &lt;a href=&quot;https://chocolatey.org/packages&quot;&gt;packages&lt;/a&gt; are available for quick and easy installation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boxstarter.org/&quot;&gt;Boxstarter&lt;/a&gt; leverages &lt;a href=&quot;https://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; packages to automate the installation of software and create repeatable, scripted Windows environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Vagrant and Integration Tools&lt;/span&gt;&lt;br /&gt;
In my own domain of Application Integration and SOA, I expect that both vendors and customers will pickup&amp;nbsp;tools such as Vagrant for creating and provisioning&amp;nbsp;(virtual) machines. Combined with Chef or Puppet&amp;nbsp;to actually install and configure the&amp;nbsp;software on these machines.</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/6914435076202084196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/6914435076202084196' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/6914435076202084196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/6914435076202084196'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2014/12/devops-2-vagrant.html' title='Devops (2): Vagrant'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSQl2ISleKmV6GrTVA_QTjTC0JfoKgZ_qwK0wF96IjRlZ4AfO0OPOF_v9dFRgrhvPFMnkvU8NiTUj8N23CmixOzXS0XWuPIrFh6dwJYyOIOiMm6jCwAbwHIE8dbGtLzM7lpOu0jVMfGxA/s72-c/vagrant-logo.jpg" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053747786603248705.post-1063630735383818498</id><published>2014-12-29T17:03:00.002+01:00</published><updated>2014-12-29T17:05:23.943+01:00</updated><title type='text'>Devops and Docker</title><content type='html'>The holiday period between Christmas and New Year is an ideal period to catch up on some reading and experimenting. &lt;a href=&quot;http://en.wikipedia.org/wiki/DevOps&quot;&gt;Devops&lt;/a&gt; and tools such as &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt;, &lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;, &lt;a href=&quot;https://www.chef.io/&quot;&gt;Chef&lt;/a&gt;, &lt;a href=&quot;http://puppetlabs.com/&quot;&gt;Puppet&lt;/a&gt; and &lt;a href=&quot;http://www.ansible.com/&quot;&gt;Ansible&lt;/a&gt; were on my radar for a while. So finally some time to dive into this topics.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Nested VMs &lt;/span&gt;&lt;br /&gt;
Not to mess up my machine, I use VMWare workstation to spin up some test machines. As these Devops tools are all about creating and provisioning virtual machines, one must enable &quot;&lt;a href=&quot;https://communities.vmware.com/docs/DOC-8970&quot;&gt;Nested VMs&lt;/a&gt;&quot; support. This allows one virtual machine to run in another.&lt;span style=&quot;font-size: large;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpgyH35sMeCMPsCM-td19fQqIvYHKu0oLOoDNNgoHHRbNtumFU6KtsIfqgZsK_7fqNwRmJSg2DsJVBRPepsvqfylj67cJVBSnzHJ6CQxJ0tR19ifXhQ2p6CbGmSmFtweny7a0EzA09U4/s1600/vm-in-vm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpgyH35sMeCMPsCM-td19fQqIvYHKu0oLOoDNNgoHHRbNtumFU6KtsIfqgZsK_7fqNwRmJSg2DsJVBRPepsvqfylj67cJVBSnzHJ6CQxJ0tR19ifXhQ2p6CbGmSmFtweny7a0EzA09U4/s1600/vm-in-vm.png&quot; height=&quot;125&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Docker&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ9KZZHWvglDws4qCXqwLOP1u5VsMlgkdmHw5d70aUHAmlUpi4gPf9Eb-ZKvw7Bpnb7RYG3LxGDWThrp3T85hAM9ndXzSExiwtTLQ5bOZG_AXrhcLfpV42uFWhUPVzBxaUzzyc31zZSJo/s1600/docker_small_h.png&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ9KZZHWvglDws4qCXqwLOP1u5VsMlgkdmHw5d70aUHAmlUpi4gPf9Eb-ZKvw7Bpnb7RYG3LxGDWThrp3T85hAM9ndXzSExiwtTLQ5bOZG_AXrhcLfpV42uFWhUPVzBxaUzzyc31zZSJo/s1600/docker_small_h.png&quot; height=&quot;68&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Docker_%28software%29&quot;&gt;Docker&lt;/a&gt; appeared on my radar while learning about Micro Services. &lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker &lt;/a&gt;focuses on the creation of light-weight containers in which applications are configured in an automated manner. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaJGdiBdHbQiMwF7Gpr6Kyv-Mr8wwft-pMnZDC-dwfJyj5xLjjdYawoGAut9NfJGU8_rDYZaDar3AkRlwe6tCTwRxrWk2P-DsSpnmdNcGTkrdZaKbSmG3YKvoCmq2VBybcSid2x6Zf7zU/s1600/Docker-Engine.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaJGdiBdHbQiMwF7Gpr6Kyv-Mr8wwft-pMnZDC-dwfJyj5xLjjdYawoGAut9NfJGU8_rDYZaDar3AkRlwe6tCTwRxrWk2P-DsSpnmdNcGTkrdZaKbSmG3YKvoCmq2VBybcSid2x6Zf7zU/s1600/Docker-Engine.png&quot; height=&quot;158&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
The &lt;a href=&quot;https://linuxcontainers.org/&quot;&gt;Linux Containers&lt;/a&gt; are very small by leveraging OS level virtualization of Linux. Is it some &quot;chroot on rocks&quot;. The &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Chroot&quot;&gt;chroot&lt;/a&gt;&lt;/span&gt; system call on Unix/Linux changes the root directory for a program and all of its children.&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt; chroot&lt;/span&gt; allows programs - e.g. a web server - to run in a more protected mode. The OS level virtualization can limit all the resources used by child processes: CPU, memory, disk space, ... Because containers are so light-weight, many of them can be run on a single machine. This mechanism allows each application to run in its own container, its own virtualized OS.&lt;br /&gt;
&lt;br /&gt;
To have a quick try of Docker, there is a great &lt;a href=&quot;https://www.docker.com/tryit/&quot;&gt;Online Tutorial&lt;/a&gt; consisting of 10 steps. Recommended!&lt;br /&gt;
&lt;br /&gt;
As there aren&#39;t any books available on Docker, I watched the brand new &lt;a href=&quot;http://www.informit.com/store/docker-containers-livelessons-9780134096131&quot;&gt;training material&lt;/a&gt; of &lt;a href=&quot;http://www.informit.com/livelessons&quot;&gt;LiveLessons&lt;/a&gt;. As I couldn&#39;t find the text material, had to type over the instructions from the paused video. After wasting some time trying to get access the Fedora Atomic container on the Fedora 21 host, decided to switch to another topic, Vagrant. If I have some more time, I&#39;ll come back and retry with &lt;a href=&quot;http://www.redhat.com/en/technologies/linux-platforms/enterprise-linux&quot;&gt;RHEL&lt;/a&gt; as used in the video training. Or switch to Windows and take a look &lt;a href=&quot;http://boot2docker.io/&quot;&gt;boot2docker&lt;/a&gt;.



&lt;!-- Blogger automated replacement: &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaJGdiBdHbQiMwF7Gpr6Kyv-Mr8wwft-pMnZDC-dwfJyj5xLjjdYawoGAut9NfJGU8_rDYZaDar3AkRlwe6tCTwRxrWk2P-DsSpnmdNcGTkrdZaKbSmG3YKvoCmq2VBybcSid2x6Zf7zU/s1600/Docker-Engine.png&quot; with &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaJGdiBdHbQiMwF7Gpr6Kyv-Mr8wwft-pMnZDC-dwfJyj5xLjjdYawoGAut9NfJGU8_rDYZaDar3AkRlwe6tCTwRxrWk2P-DsSpnmdNcGTkrdZaKbSmG3YKvoCmq2VBybcSid2x6Zf7zU/s1600/Docker-Engine.png&quot; --&gt;&lt;!-- Blogger automated replacement: &quot;https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F2.bp.blogspot.com%2F-1ep1ZnQ7J4U%2FVKFqsRuBGTI%2FAAAAAAAAAEc%2FMbzWKcDrxsc%2Fs1600%2FDocker-Engine.png&amp;amp;container=blogger&amp;amp;gadget=a&amp;amp;rewriteMime=image%2F*&quot; with &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaJGdiBdHbQiMwF7Gpr6Kyv-Mr8wwft-pMnZDC-dwfJyj5xLjjdYawoGAut9NfJGU8_rDYZaDar3AkRlwe6tCTwRxrWk2P-DsSpnmdNcGTkrdZaKbSmG3YKvoCmq2VBybcSid2x6Zf7zU/s1600/Docker-Engine.png&quot; --&gt;</content><link rel='replies' type='application/atom+xml' href='http://guycrets.blogspot.com/feeds/1063630735383818498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6053747786603248705/1063630735383818498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1063630735383818498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053747786603248705/posts/default/1063630735383818498'/><link rel='alternate' type='text/html' href='http://guycrets.blogspot.com/2014/12/the-holiday-period-between-christmas.html' title='Devops and Docker'/><author><name>Guy Crets</name><uri>http://www.blogger.com/profile/09918138395697636042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkpgyH35sMeCMPsCM-td19fQqIvYHKu0oLOoDNNgoHHRbNtumFU6KtsIfqgZsK_7fqNwRmJSg2DsJVBRPepsvqfylj67cJVBSnzHJ6CQxJ0tR19ifXhQ2p6CbGmSmFtweny7a0EzA09U4/s72-c/vm-in-vm.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>