<?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-36470398</id><updated>2026-02-03T18:17:30.280+02:00</updated><category term="Open Source"/><category term="Microsoft"/><category term="Solaris"/><category term="Security"/><category term="UNIX"/><category term="Internet"/><category term="Sun"/><category term="Virtualization"/><category term="Networking"/><category term="Digital Forensics"/><category term="Linux"/><category term="Scripting"/><category term="Software Development"/><category term="Enterprise"/><category term="BOFH"/><category term="BSD"/><category term="OpenVMS"/><category term="Debugging"/><category term="Hardware"/><category term="Databases"/><category term="Oracle"/><category term="OpenSolaris"/><category term="AIX"/><category term="Clustering"/><category term="Cryptology"/><category term="Backup"/><category term="Cisco"/><category term="HP-UX"/><category term="Malware analysis"/><category term="IBM"/><category term="Mainframe"/><category term="Graphics"/><category term="HPC"/><category term="QNX"/><category term="AI"/><category term="Mac"/><category term="Media"/><category term="Tru64"/><category term="AWK"/><category term="Agents"/><category term="CloudComputing"/><category term="DB2"/><category term="Data Mining"/><category term="Documentation"/><category term="Elisp"/><category term="Emacs"/><category term="GTD"/><category term="GenAI"/><category term="HP"/><category term="Java"/><category term="LDAP"/><category term="MCP"/><category term="MVS"/><category term="MacOS"/><category term="OS/2"/><category term="OS/390"/><category term="Perl"/><category term="Reverse Engineering"/><category term="Revision Control"/><category term="SCE"/><category term="SmartCloud"/><category term="Vim"/><category term="Vulnerability Assessment"/><category term="WebOS"/><category term="z/OS"/><title type='text'>Cloud Architecture and Technology Blog</title><subtitle type='html'>Cloud, Security, Digital Forensics, UNIX</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.boreas.ro/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>345</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-36470398.post-7714938861684112703</id><published>2025-06-08T09:50:00.003+03:00</published><updated>2025-06-08T09:54:54.569+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Agents"/><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="MCP"/><title type='text'>MCP Gateway: The Missing Proxy for AI Tools</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span style=&quot;background-color: white; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em;&quot;&gt;AI agents and tool integration are exciting — until you actually try to connect them. Different authentication systems (or none), fragmented documentation, and incompatible protocols quickly turn what should be simple integrations into debugging nightmares.&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b0f0&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;I&#39;ve recently released&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://github.com/IBM/mcp-context-forge&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;ContextForge MCP Gateway&lt;/a&gt;&amp;nbsp;as Open Source to solve this problem by sitting between your AI clients and tool servers, giving you an open source, clean, secure endpoint for everything — and supports both REST and MCP upstream and downstream protocols. If you find it useful or interesting, leave a star on GitHub!&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md me&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2478px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*B-A9A7KsKC3vobLqFPnA8Q.gif 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*B-A9A7KsKC3vobLqFPnA8Q.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*B-A9A7KsKC3vobLqFPnA8Q.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*B-A9A7KsKC3vobLqFPnA8Q.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*B-A9A7KsKC3vobLqFPnA8Q.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*B-A9A7KsKC3vobLqFPnA8Q.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*B-A9A7KsKC3vobLqFPnA8Q.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*B-A9A7KsKC3vobLqFPnA8Q.gif 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;439&quot; loading=&quot;eager&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*B-A9A7KsKC3vobLqFPnA8Q.gif&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3410&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;The MCP Integration Problem&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;eb8e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://modelcontextprotocol.io/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Model Context Protocol&lt;/a&gt;&amp;nbsp;promises to standardize how AI models call external tools, but the reality is messy. The ecosystem now has over 15,000 MCP-compatible servers, but they’re anything but uniform:&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;66d6&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Transport chaos and incomplete implementations&lt;/span&gt;: Some servers only support&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#stdio&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;STDIO&lt;/a&gt;, others stream over&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://modelcontextprotocol.io/docs/concepts/transports#server-sent-events-sse&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Server-Sent Events&lt;/a&gt;, and a few expose&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Streamable HTTP&lt;/a&gt;&amp;nbsp;endpoints. They can’t talk to each other without custom adapters. And while the MCP specification evolves (now deprecating SSE) — MCP clients and servers are slow to catch up.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;7c85&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Security gaps&lt;/span&gt;: Many test servers skip authentication entirely or use weak schemes. Depending on what the client supports, you’ll want to either use a&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;stdio&lt;/code&gt;&amp;nbsp;wrapper, SSE + Bearer JWT auth, or full flown OAuth.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d6c3&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Writing new MCP Servers&lt;/span&gt;: Your existing API endpoints aren’t yet available as MCP Servers. You have to write new servers, and test them.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;528d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Everything lives somewhere different&lt;/span&gt;: Your prompt library runs on Server A, the vector database on Server B, and your custom tools on Server C. Managing URLs, keys, and retry logic across all of them becomes a full-time job.&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;370e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;How MCP Gateway Fixes This&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6de5&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Instead of handling retry logic and managing multiple MCP servers directly in your agent or client application, MCP Gateway centralizes all that complexity. You can create multiple virtual servers for different clients or use cases, each with their own tool configurations and access controls.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8172&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://ibm.github.io/mcp-context-forge/using/mcpgateway-wrapper/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;MCP Gateway Wrapper&lt;/a&gt;&amp;nbsp;allows you to connect to the gateway securely, using a JWT token, while exposing a local STDIO server.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;ab5a&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The gateway acts as a smart proxy that normalizes everything behind a single endpoint:&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md nx&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 3806px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*IEBA7zdnU96QnoZthLtBFg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*IEBA7zdnU96QnoZthLtBFg.png 640w, https://miro.medium.com/v2/resize:fit:720/1*IEBA7zdnU96QnoZthLtBFg.png 720w, https://miro.medium.com/v2/resize:fit:750/1*IEBA7zdnU96QnoZthLtBFg.png 750w, https://miro.medium.com/v2/resize:fit:786/1*IEBA7zdnU96QnoZthLtBFg.png 786w, https://miro.medium.com/v2/resize:fit:828/1*IEBA7zdnU96QnoZthLtBFg.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*IEBA7zdnU96QnoZthLtBFg.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*IEBA7zdnU96QnoZthLtBFg.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;187&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*IEBA7zdnU96QnoZthLtBFg.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;858b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;One Consistent Interface&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;293c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The gateway converts STDIO, SSE, and HTTP into consistent HTTPS+JSON-RPC, so your clients only need to know one protocol.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;da35&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;And your MCP Clients — Agents such as Langchain, Autogen, Crew.AI — or Visual Studio code plugins (ex: Microsoft Copilot) can connect over SSE + JWT Auth, or via STDIO locally (using&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;mcpgateway-wrapper&lt;/code&gt;&amp;nbsp;to connect securely to the Gateway).&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c5c6&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Complete Tool Discovery and Debugging&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;e146&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The gateway automatically discovers all connected servers and presents every tool, prompt, and resource in one catalog.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9551&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Tools can be enabled, disabled and tested — and JSON Schema and tool description easily viewed.&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md ny&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1440px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*byfjvc5cs9I7bU4VdfMJ5Q.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*byfjvc5cs9I7bU4VdfMJ5Q.png 640w, https://miro.medium.com/v2/resize:fit:720/1*byfjvc5cs9I7bU4VdfMJ5Q.png 720w, https://miro.medium.com/v2/resize:fit:750/1*byfjvc5cs9I7bU4VdfMJ5Q.png 750w, https://miro.medium.com/v2/resize:fit:786/1*byfjvc5cs9I7bU4VdfMJ5Q.png 786w, https://miro.medium.com/v2/resize:fit:828/1*byfjvc5cs9I7bU4VdfMJ5Q.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*byfjvc5cs9I7bU4VdfMJ5Q.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*byfjvc5cs9I7bU4VdfMJ5Q.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;617&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*byfjvc5cs9I7bU4VdfMJ5Q.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aec9&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Non-MCP API Support&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9a40&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Wrap any REST API endpoint and expose it as a fully-typed MCP tool with automatic retries and schema validation.&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5f48&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Built-in Observability&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;341e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Every API call is timed and logged, so you can track performance and debug issues without external monitoring tools. Both per-tool, per server and aggregated metrics are available.&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md nz&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 3741px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*5BqlQb5Mk5X0SdkC-qUYSw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*5BqlQb5Mk5X0SdkC-qUYSw.png 640w, https://miro.medium.com/v2/resize:fit:720/1*5BqlQb5Mk5X0SdkC-qUYSw.png 720w, https://miro.medium.com/v2/resize:fit:750/1*5BqlQb5Mk5X0SdkC-qUYSw.png 750w, https://miro.medium.com/v2/resize:fit:786/1*5BqlQb5Mk5X0SdkC-qUYSw.png 786w, https://miro.medium.com/v2/resize:fit:828/1*5BqlQb5Mk5X0SdkC-qUYSw.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*5BqlQb5Mk5X0SdkC-qUYSw.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*5BqlQb5Mk5X0SdkC-qUYSw.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;125&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*5BqlQb5Mk5X0SdkC-qUYSw.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;6308&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Getting Started&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;2c23&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;The gateway ships as a single Docker container or pip package with no external dependencies-just a local SQLite database.&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c6de&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Docker / Podman&lt;/h1&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;fe3a&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;docker run -d &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;--name&lt;/span&gt; mcpgateway \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  -&lt;span class=&quot;hljs-selector-tag&quot; style=&quot;box-sizing: inherit; color: #aa0d91;&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;4444&lt;/span&gt;:&lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;4444&lt;/span&gt; \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  -e HOST=&lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;0.0&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;0.0&lt;/span&gt; \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  -e JWT_SECRET_KEY=your-secret-key \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  -e BASIC_AUTH_USER=admin \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  -e BASIC_AUTH_PASSWORD=your-password \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  ghcr.io/ibm/mcp-context-forge:v0.&lt;span class=&quot;hljs-number&quot; style=&quot;box-sizing: inherit; color: #1c00cf;&quot;&gt;1.0&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b885&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Python Package&lt;/h1&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c72d&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;pip install mcp-contextforge-gateway&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;BASIC_AUTH_PASSWORD=password mcpgateway &lt;span class=&quot;hljs-comment&quot; style=&quot;box-sizing: inherit; color: #007400;&quot;&gt;--host 127.0.0.1 --port 4444&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;119e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Once running, you’ll have access to&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;http://localhost:4444/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;http://localhost:4444&lt;/a&gt;&amp;nbsp;with:&lt;/p&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;eb64&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 2.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Admin Dashboard&lt;/span&gt;&amp;nbsp;(&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/admin&lt;/code&gt;) - Manage servers and tools through a web interface.&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;8608&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;API Documentation&lt;/span&gt;&amp;nbsp;(&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/docs&lt;/code&gt;- and&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/redoc&lt;/code&gt;) Interactive Swagger documentation.&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;dcf7&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Version, Health and Configuration&amp;nbsp;&lt;/span&gt;(&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/version&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/health)&lt;/code&gt;&amp;nbsp;— get version, configuration and debugging information. Requires auth (login to admin page first, or use as API to retrieve JSON).&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;4103&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;JSON-RPC Endpoint&lt;/span&gt;&amp;nbsp;(&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/rpc&lt;/code&gt;) - RPC Endpoint.&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;43bc&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Metrics&lt;/span&gt;&amp;nbsp;(&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;/metrics&lt;/code&gt;) - Performance and usage statistics.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5729&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Detailed deployment across Containers, Docker, Compose, Kubernetes, OpenShift, Minikube, Helm, Code Engine, AWS and Azure is available through the&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://ibm.github.io/mcp-context-forge/deployment/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;project documentation page&lt;/a&gt;.&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1c28&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Integration with VS Code and GitHub Copilot&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;3b27&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;One of the most practical applications is connecting MCP Gateway to GitHub Copilot in VS Code. This gives Copilot access to all your tools through a single, secure connection.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;d91e&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Generate a JWT token and test it:&lt;/p&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1687&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;python -m mcpgateway.utils.create_jwt_token \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  --username admin --exp 0 --secret my-test-key&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;curl -s -H &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;Authorization: Bearer &lt;span class=&quot;hljs-variable&quot; style=&quot;box-sizing: inherit; color: #3f6e74;&quot;&gt;$MCPGATEWAY_BEARER_TOKEN&lt;/span&gt;&quot;&lt;/span&gt; \&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;     http://localhost:4444/version | jq&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;21df&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Spin up a couple of MCP Servers:&lt;/p&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;990b&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;pip install uvenv&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;npx -y supergateway --stdio &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;uvenv run mcp-server-git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;caf0&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Add the MCP Servers to your gateway, under “Gateways”.&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md oq&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 3328px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*MnMcfRMQVrhbDudkGB9Yag.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*MnMcfRMQVrhbDudkGB9Yag.png 640w, https://miro.medium.com/v2/resize:fit:720/1*MnMcfRMQVrhbDudkGB9Yag.png 720w, https://miro.medium.com/v2/resize:fit:750/1*MnMcfRMQVrhbDudkGB9Yag.png 750w, https://miro.medium.com/v2/resize:fit:786/1*MnMcfRMQVrhbDudkGB9Yag.png 786w, https://miro.medium.com/v2/resize:fit:828/1*MnMcfRMQVrhbDudkGB9Yag.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*MnMcfRMQVrhbDudkGB9Yag.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*MnMcfRMQVrhbDudkGB9Yag.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;347&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*MnMcfRMQVrhbDudkGB9Yag.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;db70&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Now, create a Virtual Server under the Servers Catalog tab, adding just the tools you want to share with your MCP Clients.&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md or&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 2770px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*1FV2R2oUifdM8WUuAqN3PQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*1FV2R2oUifdM8WUuAqN3PQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*1FV2R2oUifdM8WUuAqN3PQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*1FV2R2oUifdM8WUuAqN3PQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*1FV2R2oUifdM8WUuAqN3PQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*1FV2R2oUifdM8WUuAqN3PQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*1FV2R2oUifdM8WUuAqN3PQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*1FV2R2oUifdM8WUuAqN3PQ.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;414&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*1FV2R2oUifdM8WUuAqN3PQ.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;b7ba&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Then, enable MCP support in VS Code by adding&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;&quot;chat.mcp.enabled&quot;: true&lt;/code&gt;&amp;nbsp;to your GitHub Copilot Chat&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;settings.json&lt;/code&gt;. Then add a&amp;nbsp;&lt;code class=&quot;cx nt nu nv nw b&quot; style=&quot;background-color: #f2f2f2; box-sizing: inherit; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; font-size: 15px; padding: 2px 4px;&quot;&gt;mcp&lt;/code&gt;&amp;nbsp;configuration block as described in VS Code the&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://code.visualstudio.com/docs/copilot/chat/mcp-servers&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;documentation&lt;/a&gt;:&lt;/p&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f846&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;servers&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;    &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;gateway&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;      &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;sse&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;,&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;      &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;http://localhost:4444/servers/1/sse&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;,&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;      &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;headers&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;{&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;        &lt;span class=&quot;hljs-attr&quot; style=&quot;box-sizing: inherit; color: #836c28;&quot;&gt;&quot;Authorization&quot;&lt;/span&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;box-sizing: inherit; color: #c41a16;&quot;&gt;&quot;Bearer YOUR_JWT_TOKEN&quot;&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;      &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;}&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;    &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;}&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;  &lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;}&lt;/span&gt;&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;span class=&quot;hljs-punctuation&quot; style=&quot;box-sizing: inherit;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;71e7&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Press Ctrl + Alt + I to open Copilot Chat, and click on Tools. You’ll see all your gateway-managed tools available in the Tools panel:&lt;/p&gt;&lt;figure class=&quot;mf mg mh mi mj mk mc md paragraph-image&quot; style=&quot;background-color: white; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; margin: 56px auto 0px;&quot;&gt;&lt;div class=&quot;ml mm ee mn bh mo&quot; role=&quot;button&quot; style=&quot;box-sizing: inherit; cursor: zoom-in; position: relative; width: 680px; z-index: auto;&quot; tabindex=&quot;0&quot;&gt;&lt;div class=&quot;mc md os&quot; style=&quot;box-sizing: inherit; margin-left: auto; margin-right: auto; max-width: 1437px;&quot;&gt;&lt;picture style=&quot;box-sizing: inherit;&quot;&gt;&lt;source sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 1400w&quot; style=&quot;box-sizing: inherit;&quot; type=&quot;image/webp&quot;&gt;&lt;/source&gt;&lt;source data-testid=&quot;og&quot; sizes=&quot;(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px&quot; srcset=&quot;https://miro.medium.com/v2/resize:fit:640/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 640w, https://miro.medium.com/v2/resize:fit:720/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 720w, https://miro.medium.com/v2/resize:fit:750/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 750w, https://miro.medium.com/v2/resize:fit:786/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 786w, https://miro.medium.com/v2/resize:fit:828/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*AEu9Vm7ttSGNhDq8Pc7V9w.png 1400w&quot; style=&quot;box-sizing: inherit;&quot;&gt;&lt;/source&gt;&lt;img alt=&quot;&quot; class=&quot;bh kl mp c&quot; height=&quot;107&quot; loading=&quot;lazy&quot; role=&quot;presentation&quot; src=&quot;https://miro.medium.com/v2/resize:fit:1400/1*AEu9Vm7ttSGNhDq8Pc7V9w.png&quot; style=&quot;box-sizing: inherit; height: auto; max-width: 100%; vertical-align: middle; width: 680px;&quot; width=&quot;700&quot; /&gt;&lt;/picture&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f2d2&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Troubleshooting&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;aebf&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;You can use MCP Inspector to access the Global Tools catalog:&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;http://localhost:4444/tools,.&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;http://localhost:4444/tools&lt;/a&gt;&amp;nbsp;— then each of the individual virtual servers you’ve created. Ex:&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;http://localhost:4444/servers/1/sse&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;http://localhost:4444/servers/1/sse&lt;/a&gt;&lt;/p&gt;&lt;pre class=&quot;mf mg mh mi mj oa nw ob bp oc bb bk&quot; style=&quot;background: rgb(249, 249, 249); border-radius: 4px; border: 1px solid rgb(229, 229, 229); box-sizing: inherit; color: #242424; font-family: source-code-pro, Menlo, Monaco, &amp;quot;Courier New&amp;quot;, Courier, monospace; margin: 56px 0px 0px; overflow-x: auto; padding: 32px;&quot;&gt;&lt;span class=&quot;od mr fr nw b bg oe of m og oh&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5cc8&quot; style=&quot;box-sizing: inherit; display: block; font-size: 14px; letter-spacing: -0.022em; line-height: 1.4; margin-bottom: -0.2em; margin-top: -0.2em; min-width: fit-content;&quot;&gt;npx @modelcontextprotocol/inspector&lt;/span&gt;&lt;/pre&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;40a1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Real-World Impact&lt;/h1&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;785d&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 0.94em 0px -0.46em; word-break: break-word;&quot;&gt;Instead of maintaining separate connections to a dozen different tool servers, each with its own authentication, error handling, and monitoring, you manage one gateway instance. When you need to add a new tool, you register it with the gateway rather than updating every client.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9a1c&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;This architectural change becomes more valuable as your tool ecosystem grows. Whether you’re building a personal AI assistant or deploying enterprise-scale automation, MCP Gateway eliminates the integration overhead that typically consumes more time than the actual feature work.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f8c1&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The gateway is production-ready with Kubernetes support, Helm charts, and comprehensive monitoring. You can start with the simple Docker setup and scale up as needed.&lt;/p&gt;&lt;h1 class=&quot;mq mr fr bf ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;f96b&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: sohne, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; letter-spacing: -0.016em; line-height: 30px; margin: 1.95em 0px -0.28em;&quot;&gt;Try It Out&lt;/h1&gt;&lt;ul class=&quot;&quot; style=&quot;background-color: white; box-sizing: inherit; color: rgba(0, 0, 0, 0.8); font-family: medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, Oxygen, Ubuntu, Cantarell, &amp;quot;Open Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, sans-serif; list-style: none none; margin: 0px; padding: 0px;&quot;&gt;&lt;li class=&quot;ld le fr lf b lg no li lj lk np lm ln lo nq lq lr ls nr lu lv lw ns ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;1e02&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 0.94em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Source code&lt;/span&gt;:&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://github.com/IBM/mcp-context-forge&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9b44&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Documentation&lt;/span&gt;:&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://ibm.github.io/mcp-context-forge/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;Project docs&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;ld le fr lf b lg ol li lj lk om lm ln lo on lq lr ls oo lu lv lw op ly lz ma oi oj ok bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;5ae8&quot; style=&quot;box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; list-style-type: disc; margin-bottom: -0.46em; margin-left: 30px; margin-top: 1.14em; padding-left: 0px;&quot;&gt;&lt;span class=&quot;lf fs&quot; style=&quot;box-sizing: inherit; font-weight: 700;&quot;&gt;Package&lt;/span&gt;:&amp;nbsp;&lt;a class=&quot;ag mb&quot; href=&quot;https://pypi.org/project/mcp-contextforge-gateway/&quot; rel=&quot;noopener ugc nofollow&quot; style=&quot;-webkit-tap-highlight-color: transparent; box-sizing: inherit;&quot; target=&quot;_blank&quot;&gt;PyPI listing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;9657&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;The Model Context Protocol represents an important step toward standardized AI tool integration, but the implementation reality is still fragmented and the protocol and MCP ecosystem is going to evolve over time. MCP Gateway helps bridge that gap, turning different MCP servers into a unified, secure, and observable system.&lt;/p&gt;&lt;p class=&quot;pw-post-body-paragraph ld le fr lf b lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma fk bk&quot; data-selectable-paragraph=&quot;&quot; id=&quot;c454&quot; style=&quot;background-color: white; box-sizing: inherit; color: #242424; font-family: source-serif-pro, Georgia, Cambria, &amp;quot;Times New Roman&amp;quot;, Times, serif; font-size: 20px; letter-spacing: -0.003em; line-height: 32px; margin: 2.14em 0px -0.46em; word-break: break-word;&quot;&gt;Give it a try-you’ll spend less time on plumbing and more time building the AI experiences that matter.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/7714938861684112703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/7714938861684112703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7714938861684112703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7714938861684112703'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2025/06/mcp-gateway-missing-proxy-for-ai-tools.html' title='MCP Gateway: The Missing Proxy for AI Tools'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-314605374356449282</id><published>2023-09-09T09:49:00.006+03:00</published><updated>2023-09-09T09:49:47.823+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><title type='text'>Understand GenAI Large Language Model limitations, and how Retrieval Augmented Generation can help</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;3514&quot;&gt;Add context from private data and documents to GenAI LLMs to reduce hallucinations and increase performance through Retrieval Augmented Generation.&lt;/h3&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;b2e2&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;482&quot; data-image-id=&quot;1*k34NYOsRRbmLU8t6BkfQkA.png&quot; data-is-featured=&quot;true&quot; data-width=&quot;3161&quot; src=&quot;https://cdn-images-1.medium.com/max/960/1*k34NYOsRRbmLU8t6BkfQkA.png&quot; /&gt;&lt;figcaption class=&quot;imageCaption&quot;&gt;Use Cases for Large Language&amp;nbsp;Models&lt;/figcaption&gt;&lt;/figure&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;932e&quot;&gt;Key use cases for Large Language Models&amp;nbsp;include:&lt;/h4&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;ea98&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Generation&lt;/strong&gt;: LLMs can be used to generate text, translate languages, write different kinds of creative content, and answer your questions in an informative way. For example, LLMs can be used to generate realistic dialogue for chatbots, write news articles, or even create poems.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b287&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Summarization&lt;/strong&gt;: LLMs can be used to summarize text, extract the main points of an article or document, and create a shorter version that is still accurate and informative. For example, LLMs can be used to summarize research papers, news articles, or even books.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;a025&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Classification&lt;/strong&gt;: LLMs can be used to classify text, identify the topic of a document, and determine whether it is positive or negative, factual or opinion, etc. For example, LLMs can be used to classify customer reviews, social media posts, or even medical records.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;0853&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Extraction&lt;/strong&gt;: LLMs can be used to extract information from text, identify specific entities or keywords, and create a table or list of the extracted information. For example, LLMs can be used to extract contact information from a business card, product information from a website, or even scientific data from a research paper.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;646f&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Q&amp;amp;A:&lt;/strong&gt; LLMs can be used to answer questions in an informative way, even if they are open ended, challenging, or strange. For example, LLMs can be used to answer questions about a particular topic, provide customer support, or even generate creative text formats of text content.&lt;/li&gt;&lt;/ul&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;b31e&quot;&gt;While Generative AI Large Language Models often seem like a panacea, they suffer from a number of key&amp;nbsp;issues:&lt;/h4&gt;&lt;ol class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;4102&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Hallucinations&lt;/strong&gt;: models will ‘make stuff up’ if they don’t know an answer. They also suffer from a lack of &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;contextual understanding&lt;/strong&gt;. Techniques like &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://www.w3schools.com/gen_ai/chatgpt-4/chatgpt-4_few_shot.php&quot; href=&quot;https://www.w3schools.com/gen_ai/chatgpt-4/chatgpt-4_few_shot.php&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;few-shot&lt;/a&gt; prompting can help.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;aa88&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Inference Performance&lt;/strong&gt;: even the faster models are slower than a dial-up modem, or a fast typist! They also suffer from &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;latency or &lt;/strong&gt;time to first token. For most queries, expect 10–20 second response times from most models, and even with streaming, you’ll end up waiting a few seconds for the first token to be generated!&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;89a9&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Inference Cost: &lt;/strong&gt;LLMs are expensive to run! Some of the top 180B parameter models may need as many as 5xA100 GPUs to run, while even quantized versions of 70B LLAMA would take up a whole GPU! That’s one query at a time. The costs add up. For example, a dedicated A100 might cost as much as $20K a month with a cloud provider! A brute force approach is going to be expensive.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;bb0e&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Stale training data:&lt;/strong&gt; even top models haven’t been trained on ‘recent’ data, and have a cut-off date. Remember, a model doesn’t ‘have access to the internet’. While certain ‘plugins’ do offer ‘internet search’, it’s just a form of RAG, where ‘top 10 internet search query results’ are fed into the prompt as context, for example.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;8ca1&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Use with private data&lt;/strong&gt;: LLMs haven’t been trained on *your* private data, and as such, cannot answer questions based on our dataset, unless that data is inject through fine tuning or prompt engineering.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;1bac&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Token limits / context window size:&lt;/strong&gt; Models are limited by the TOKEN_LIMIT, and most models can process, at best, a few pages of total input/output. You can’t feed a model and entire document, and ask for a summary or extract facts from the document. You need to chunk documents into pages first, and perform multiple queries.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;37b5&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;They only support text:&lt;/strong&gt; while this sounds obvious (from the name), it also means you can’t just feed a PDF file or WORD document to a LLM. You first need to convert that data to text, and chunk it to fit in the token limit, alongside your prompt and some room for output. Conversions aren’t perfect. What happens to your images, or tables, or metadata? It also means models can only output text. Formatting the text to output HTML or DOCX or other rich text formats requires a lot of heavy lifting in our pipeline.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;e493&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Lack of transparency / explainability:&lt;/strong&gt; why did the model generate a particular answer? Techniques such as RAG can help, as you are able to point at the ‘context’ that generated a particular answer, and even display the context. While the LLM answer may not necessarily be correct, you can display the source content that helped generate that answer.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;3a44&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Potential bias, hate, abuse, harm, ethical concerns, &lt;/strong&gt;etc: sometimes, answers generated by an LLM can be outright harmful. Using the RAG pattern, in addition to HARM filters can help mitigate some of these issues.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;e88e&quot;&gt;&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;Training and fine tuning costs: &lt;/strong&gt;to put it in perspective, &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/pdf/2307.09288.pdf&quot; href=&quot;https://arxiv.org/pdf/2307.09288.pdf&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;a 70B model like LLAMA2&lt;/a&gt; might need ~2048 A100 GPUs for a month to train, adding up to $20–40M training cost, not to mention what it takes to download and store the data. The: “Training Hardware &amp;amp; Carbon Footprint” section from the &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/pdf/2307.09288.pdf&quot; href=&quot;https://arxiv.org/pdf/2307.09288.pdf&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;LLAMA2 paper&lt;/a&gt; suggests a total of 3311616 GPU hours was used to train LLAMA2 (7/13/34 and 70B)!&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;9f3b&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;It helps to think of of Large Language Models (LLMs) like mathematical functions, or your phone’s autocomplete:&lt;/strong&gt;&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;235d&quot;&gt;&lt;em class=&quot;markup--em markup--p-em&quot;&gt;f(x) = x’&lt;/em&gt;&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;e22c&quot;&gt;Where the input (x) and the output (x’) are strings. The model starts by looking at the input, then will ‘autocomplete’ the output.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;9a8b&quot;&gt;For example, f(“What is Kubernetes”) = “Kubernetes, often abbreviated as K8s, is an open-source platform designed to automate deploying, scaling, and operating application containers.”&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;445a&quot;&gt;Most chat interfaces will also provide a default system prompt. For &lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://replicate.com/blog/how-to-prompt-llama&quot; href=&quot;https://replicate.com/blog/how-to-prompt-llama&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;LLAMA2&lt;/a&gt;, this is: “&lt;code class=&quot;markup--code markup--li-code&quot;&gt;You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature. If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don&#39;t know the answer to a question, please don&#39;t share false information.&quot;&lt;/code&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;ab8b&quot;&gt;Depending on the model and interface, there may be ‘hidden’ inputs to your model. Many Chat interfaces will include a conversational memory, where they insert a moving window of your previous prompts into the current prompt, as context. It would look something like this: “Below are a series of dialogues between a user and a AI assistant…. [dialogues] [new content]“&lt;/li&gt;&lt;/ul&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;a0c8&quot;&gt;The inputs to a model are a little more complex&amp;nbsp;though:&lt;/h4&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;2e7a&quot;&gt;&lt;em class=&quot;markup--em markup--p-em&quot;&gt;f(training_data, model_parameters, input_string) = output_string&lt;/em&gt;&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;faf8&quot;&gt;training_data represents the data it was trained (different models will provide different answers). While not an ‘input’ as such, the data the model was trained (and how it was trained) on plays a key factor in the output.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;7405&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task&quot; href=&quot;https://huggingface.co/docs/api-inference/detailed_parameters#text-generation-task&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;model_parameters&lt;/a&gt; represent things like “temperature”, “repetition penalty”, “min tokens” or “max tokens”, “top_p”, “top_k”, and other such values.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b8cc&quot;&gt;input_string is the combination of &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;prompt&lt;/strong&gt; and &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;context&lt;/strong&gt; you give to the model. Ex: “What is Kubernetes” or “Summarize the following document: ${DOCUMENT}”&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;933c&quot;&gt;the ‘&lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;prompt&lt;/strong&gt;’ is usually an optional instruction like “summarize”, “extract”, “translate”, “classify” etc. but more complex prompts are usually used. “Be a helpful assistant that responds to my question.. etc.”&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;577e&quot;&gt;The function can process a maximum of &lt;strong class=&quot;markup--strong markup--li-strong&quot;&gt;TOKEN_LIMIT&lt;/strong&gt; (total input and output), usually ~4096 tokens (~3000 words in English, fewer in say.. Japanese). Models with larger TOKEN_LIMITS exist, though they usually don’t perform as well above the 4096 token limit. This means, in practice, you can’t feed a whole whitepaper to an LLM and ask it to ‘summarize this document’, for example.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;1287&quot;&gt;What Large Language Models DON’T&amp;nbsp;DO&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;4e20&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Learn&lt;/strong&gt;: A model will not ‘learn’ from interactions (unless specifically trained/fine-tuned).&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;c7bb&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Remember&lt;/strong&gt;: A model doesn’t remember previous prompts. In fact, it’s all done with prompt trickery: previous prompts are injected. The API does a LOT of of filtering and heavy lifting!&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;263b&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Reason:&lt;/strong&gt; Think of LLMs like your phone’s autocomplete, it doesn’t reason, or do math.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;7d36&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Use your data:&lt;/strong&gt; LLMs don’t provide responses based on YOUR data (databases or files), unless it’s include in the training dataset, or the prompt (ex: RAG).&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;912d&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Use the Internet:&lt;/strong&gt; A LLM doesn’t have the capacity to ‘search the internet’, or make API calls.&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;98e2&quot;&gt;In fact, a model does not perform &lt;em class=&quot;markup--em markup--li-em&quot;&gt;any&lt;/em&gt; activity other than converting one string of text into another string of text.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b238&quot;&gt;Any 3rd party data not in the model will need to be injected into prompts (RAG)&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;d834&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Adding a LLM to your software architecture:&lt;/strong&gt;&lt;/p&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;7504&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;2089&quot; data-image-id=&quot;1*aUD4euAjDnRreb9hTcjghA.png&quot; data-width=&quot;3420&quot; src=&quot;https://cdn-images-1.medium.com/max/960/1*aUD4euAjDnRreb9hTcjghA.png&quot; /&gt;&lt;figcaption class=&quot;imageCaption&quot;&gt;A LLM is much much slower than a Faxmodem!&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;8e1e&quot;&gt;Believe it or not, LLMs are &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;much slower &lt;/strong&gt;than even a faxmodem! At WPM = ((BPS / 10) / 5) * 60, a 9600 baud modem will generate 11520 words / minute.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;d4b6&quot;&gt;At an average 30 tokens / second (20 words) for LLAMA-70B, you’re getting 1200 words / minute!&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;b228&quot;&gt;Large models (70B) such as LLAMA2 can be painfully slow. Smaller models (20B, 13B, 7B) are faster, and require less GPU to run. Quantized models are also faster, but provide lower quality responses.&lt;/p&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;d6e0&quot;&gt;Quantize your model for faster inference&lt;/h4&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;f6b8&quot;&gt;You can &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https://huggingface.co/docs/transformers/main/main_classes/quantization&quot; href=&quot;https://huggingface.co/docs/transformers/main/main_classes/quantization&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;load and quantize your model&lt;/a&gt; in 8, 4, 3 or even 2 bits, sacrificing quality for faster inference speed.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;c0da&quot;&gt;This is always a tradeoff, as you’re sacfificing model output quality for faster inferencing. Since a quantized model needs less GPU VRAM to run in, this helps you run large models on commodity hardware.&lt;/p&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;8847&quot;&gt;Reducing model hallucinations:&lt;/h4&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;fe12&quot;&gt;LLMs lack context from private data — leading to hallucinations when asked domain or company-specific questions. RAG can help reduce hallucinations by ‘injecting’ context into prompts. Papers:&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;acb0&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://www.pinecone.io/learn/retrieval-augmented-generation/&quot; href=&quot;https://www.pinecone.io/learn/retrieval-augmented-generation/&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Retrieval Augmented GFeneration as a mechanism to reduce hallucinations&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;0f79&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/abs/2104.07567&quot; href=&quot;https://arxiv.org/abs/2104.07567&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Retrieval Augmentation Reduces Hallucination in Conversation&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;6d58&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/abs/2308.06394&quot; href=&quot;https://arxiv.org/abs/2308.06394&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Detecting and Preventing Hallucinations in Large Vision Language Models&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;2846&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/abs/2201.11903&quot; href=&quot;https://arxiv.org/abs/2201.11903&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Chain-of-Thought Prompting Elicits Reasoning in Large Language Models&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b173&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/abs/2305.10601&quot; href=&quot;https://arxiv.org/abs/2305.10601&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Tree of Thoughts: Deliberate Problem Solving with Large Language Models&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;8969&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://arxiv.org/abs/2308.11764&quot; href=&quot;https://arxiv.org/abs/2308.11764&quot; rel=&quot;noopener noreferrer noopener noopener&quot; target=&quot;_blank&quot;&gt;Halo: Estimation and Reduction of Hallucinations in Open-Source Weak Large Language Models&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;cb8c&quot;&gt;Retrieval Augmented Generation and the importance of Vector Databases&lt;/h3&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;ab2e&quot;&gt;A vector database is a specialized database designed to store and query vector embeddings efficiently. Vector embeddings are numerical representations of text, images, audio, or other data. They are used in a variety of machine learning applications, such as natural language processing, image recognition, and recommendation systems.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;d2bf&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Near Vector search or how to Search for “Sky” and find “Blue”:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;bb31&quot;&gt;Finding the most similar documents to a given document&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;e7e2&quot;&gt;Finding documents that contain a specific keyword or phrase&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;b64b&quot;&gt;Clustering documents together based on their similarity&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;6712&quot;&gt;Ranking documents for a search query&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;02c3&quot;&gt;Popular vector databases include ChormaDB, Weaviate, Milvus.&lt;/p&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;1ad0&quot;&gt;&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;Advantages of using a VectorDB with your LLM, in a Retrieval Augmented Generation Pattern:&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;d770&quot;&gt;Insert your data into prompts every time&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;0b8d&quot;&gt;Cheap, and can work with vast amounts of data&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;5417&quot;&gt;While LLMs are SLOW, Vector Databases are FAST!&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;d241&quot;&gt;Can help overcome model limitations (such as token limits) — as you’re only feeding ‘top search results’ to the LLM, instead of whole documents.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;0c80&quot;&gt;Reduce hallucinations by providing context.&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;6160&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;487&quot; data-image-id=&quot;1*kzn4Bat9LXgoE_cmYpjmHg.png&quot; data-width=&quot;1009&quot; src=&quot;https://cdn-images-1.medium.com/max/960/1*kzn4Bat9LXgoE_cmYpjmHg.png&quot; /&gt;&lt;/figure&gt;&lt;h4 class=&quot;graf graf--h4&quot; name=&quot;f01b&quot;&gt;&lt;strong class=&quot;markup--strong markup--h4-strong&quot;&gt;Loading Documents into your Vector Databases:&lt;/strong&gt;&lt;/h4&gt;&lt;p class=&quot;graf graf--p&quot; name=&quot;8693&quot;&gt;Loading data into your vector database typically requires you to convert documents to text, split the text into chunks, then vectorize those chunks using an embedding model. &lt;a class=&quot;markup--anchor markup--p-anchor&quot; data-href=&quot;https://www.sbert.net/&quot; href=&quot;https://www.sbert.net/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SentenceTransformers&lt;/a&gt; offers a number of pre-trained models, such as &lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt;all-mpnet-base-v2&lt;/strong&gt; or&lt;strong class=&quot;markup--strong markup--p-strong&quot;&gt; all-MiniLM-L12-v2&lt;/strong&gt; that perform well for English text.&lt;/p&gt;&lt;figure class=&quot;graf graf--figure&quot; name=&quot;f312&quot;&gt;&lt;img class=&quot;graf-image&quot; data-height=&quot;592&quot; data-image-id=&quot;1*dlyUqmzR11QOgmr4DQAvWg.png&quot; data-width=&quot;893&quot; src=&quot;https://cdn-images-1.medium.com/max/960/1*dlyUqmzR11QOgmr4DQAvWg.png&quot; /&gt;&lt;/figure&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;f816&quot;&gt;Scaling factor for RAG: what to consider:&lt;/h3&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;242a&quot;&gt;Vector Database: consider sharding and High Availability&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;3234&quot;&gt;Fine Tuning: collecting data to be used for fine tuning&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;f599&quot;&gt;Governance and Model Benchmarking: how are you testing your model performance over time, with different prompts, one-shot, and various parameters&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;9d36&quot;&gt;Chain of Reasoning and Agents&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;c610&quot;&gt;Caching embeddings and responses&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;d349&quot;&gt;Personalization and Conversational Memory Database&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;2901&quot;&gt;Streaming Responses and optimizing performance. A fine tuned 13B model may perform better than a poor 70B one!&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;96d5&quot;&gt;Calling 3rd party functions or APIs for reasoning or other type of data (ex: LLMs are terrible at reasoning and prediction, consider calling other models)&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;fd47&quot;&gt;Fallback techniques: fallback to a different model, or default answers&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;8e48&quot;&gt;API scaling techniques, rate limiting, etc.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;e703&quot;&gt;Async, streaming and parallelization, multiprocessing, GPU acceleration (including embeddings), generating your API using OpenAPI, etc.&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;da73&quot;&gt;Retraining your embedding model&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;1af1&quot;&gt;RAG Talk from Shipitcon can be found on GitHub and&amp;nbsp;YouTube:&lt;/h3&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;1ef4&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation&quot; href=&quot;https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://github.com/crivetimihai/shipitcon-scaling-retrieval-augmented-generation&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;9158&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://www.youtube.com/watch?v=lL4DPcxljH8&quot; href=&quot;https://www.youtube.com/watch?v=lL4DPcxljH8&quot; rel=&quot;nofollow noopener noopener&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=lL4DPcxljH8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;graf graf--h3&quot; name=&quot;8707&quot;&gt;Social media&lt;/h3&gt;&lt;ul class=&quot;postList&quot;&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;c6c3&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://twitter.com/CrivetiMihai&quot; href=&quot;https://twitter.com/CrivetiMihai&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://twitter.com/CrivetiMihai&lt;/a&gt; — follow for more LLM content&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;1c5f&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://youtube.com/CrivetiMihai&quot; href=&quot;https://youtube.com/CrivetiMihai&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://youtube.com/CrivetiMihai&lt;/a&gt; — more LLM videos to follow&lt;/li&gt;&lt;li class=&quot;graf graf--li&quot; name=&quot;231d&quot;&gt;&lt;a class=&quot;markup--anchor markup--li-anchor&quot; data-href=&quot;https://www.linkedin.com/in/crivetimihai/&quot; href=&quot;https://www.linkedin.com/in/crivetimihai/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://www.linkedin.com/in/crivetimihai/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/314605374356449282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/314605374356449282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/314605374356449282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/314605374356449282'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2023/09/understand-genai-large-language-model.html' title='Understand GenAI Large Language Model limitations, and how Retrieval Augmented Generation can help'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-2570924132581825036</id><published>2018-09-24T22:44:00.000+03:00</published><updated>2019-10-19T22:10:30.866+03:00</updated><title type='text'>Data Science environment with Docker and Jupyter on the IBM Mainframe</title><content type='html'>&lt;h3 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; line-height: 28px; margin: 2.4rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Guide to getting started with Docker, Python and Jupyter Notebook on zLinux.&lt;/h3&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Here, I&#39;m using Red Hat Enterprise Linux 7.5 to build and deploy Jupyter notebook in an Ubuntu container. I will go over the steps used to build and run a Docker container.&lt;/div&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Oh, and in case you&#39;re wondering: why would anyone do this - check out this snippet from the&amp;nbsp;&lt;a href=&quot;https://developer.ibm.com/mainframe/2017/07/17/ibm-z-software-z14-announcement/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;z14 announcement:&lt;/a&gt;&amp;nbsp;&quot;Microservices can be built on z14 with Node.js, Java, Go, Swift, Python, Scala, Groovy, Kotlin,&amp;nbsp;Ruby, COBOL, PL/I,&amp;nbsp;and more.&amp;nbsp;They can be deployed in Docker containers where a single z14 can scale out to&amp;nbsp;&lt;span style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; font-weight: 600; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;2 million Docker containers&lt;/span&gt;&quot;.&lt;/div&gt;
&lt;div class=&quot;slate-resizable-image-embed slate-image-embed__resize-full-width&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;color: rgba(0 , 0 , 0 , 0.9); font-size: 24px;&quot;&gt;A few basic commands:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Establish the OS release and version. We&#39;re running on RHEL 7.5 for s390x.&lt;/div&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;[cmihai@rh74s390x ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;7.5&lt;/span&gt; (Maipo)

[cmihai@rh74s390x ~]$ uname -a
Linux rh74s390x.novalocal &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;3.10&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt;-&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;693.17&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;1&lt;/span&gt;.el7.s390x &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;#1 SMP Sun Jan 14 10:38:29 EST 2018 s390x s390x s390x GNU/Linux&lt;/span&gt;

[cmihai@rh74s390x ~]$ docker --version
Docker version &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;17.05&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt;-ce, build &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;89658&lt;/span&gt;be

&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Setup regular user access,&amp;nbsp;sudo&amp;nbsp;and SSH keys&lt;/h2&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Create a regular user account&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;useradd cmihai
passwd cmihai
usermod &lt;span class=&quot;hljs-_&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-a&lt;/span&gt;G wheel cmihai
su - cmihai
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Add your SSH public key to&amp;nbsp;authorized_hosts&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;mkdir -p ~/.ssh
&lt;span class=&quot;hljs-built_in&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;YOURKEYHERE&quot;&lt;/span&gt; &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Log in as your new user, and forward port 9000:&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;ssh -L &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;9000&lt;/span&gt;&lt;span class=&quot;hljs-symbol&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #720059; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;:https://www&lt;/span&gt;.linkedin.com/redir/invalid-link-page?url=&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;127&lt;/span&gt;%&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;2&lt;/span&gt;e&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt;%&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;2&lt;/span&gt;e&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt;%&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;2&lt;/span&gt;e1%&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;3&lt;/span&gt;A900&lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;0&lt;/span&gt; -i cmihai.pem cmihai@myzLinux
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Setup docker&lt;/h2&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Create the Docker group&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;sudo groupadd docker
sudo usermod &lt;span class=&quot;hljs-_&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-a&lt;/span&gt;G docker cmihai
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Start Docker&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;sudo systemctl enable docker
sudo systemctl restart docker.service
sudo systemctl status docker.service
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Test docker&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;docker run s390x/hello-world
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Let’s run a simple Ubuntu interactive shell:&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;s390x&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ubuntu&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;hostname&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;s390x&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ubuntu&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;interactive&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;tty&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;s390x/ubuntu&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;/bin/bash&lt;/span&gt;
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Building a Docker container for Jupyter Notebook&lt;/h2&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Create a Dockerfile from the s390x/ubuntu base image.&lt;/div&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;FROM s390x/ubuntu
MAINTAINER Mihai Criveti

&lt;span class=&quot;hljs-meta&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;# ADD AND RUN&lt;/span&gt;
RUN apt-&lt;span class=&quot;hljs-keyword&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;get&lt;/span&gt; update \
    &amp;amp;&amp;amp; apt-&lt;span class=&quot;hljs-keyword&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;get&lt;/span&gt; install -y python3 python3-pip \
    &amp;amp;&amp;amp; pip3 install jupyter \
    &amp;amp;&amp;amp; apt-&lt;span class=&quot;hljs-keyword&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;get&lt;/span&gt; clean

&lt;span class=&quot;hljs-meta&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;# COMMAND and ENTRYPOINT:&lt;/span&gt;
CMD [&lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;jupyter&quot;&lt;/span&gt;,&lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;notebook&quot;&lt;/span&gt;,&lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;--allow-root&quot;&lt;/span&gt;,&lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;--ip=0.0.0.0&quot;&lt;/span&gt;,&lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;--port=9000&quot;&lt;/span&gt;]

&lt;span class=&quot;hljs-meta&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #0073b1; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;# NETWORK&lt;/span&gt;
EXPOSE &lt;span class=&quot;hljs-number&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;9000&lt;/span&gt;
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Build the container:&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;docker build . --tag &lt;span class=&quot;hljs-string&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #e61e89; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&quot;cmihai/jupyter-lite:v1&quot;&lt;/span&gt; &lt;span class=&quot;hljs-_&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-f&lt;/span&gt; Dockerfile
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Run your new container:&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;run&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;jupyter&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;hostname&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;jupyter&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;9000:9000&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;cmihai/jupyter&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;lite:v1&lt;/span&gt;
&lt;/pre&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 3.2rem 0px 2.8rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Connect to Jupyter Notebook&lt;/h2&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;a href=&quot;http://localhost:9000/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;http://localhost:9000&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.9); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 32px; margin: 2.8rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
You can now install depedencies directly from Jupyter:&lt;/h2&gt;
&lt;pre spellcheck=&quot;false&quot; style=&quot;background: rgb(230, 233, 236); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.85); font-size: 16px; line-height: 1.6rem; margin-top: 3.2rem; outline: 0px; overflow-x: auto; padding: 3.2rem; vertical-align: baseline;&quot;&gt;!apt-get &lt;span class=&quot;hljs-keyword&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #17afb8; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;hljs-comment&quot; style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; color: #9b9ea2; font-style: italic; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;--yes zlib1g-dev libjpeg-dev&lt;/span&gt;
&lt;/pre&gt;
&lt;div class=&quot;slate-resizable-image-embed slate-image-embed__resize-full-width&quot; style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; position: relative; vertical-align: baseline;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; font-weight: 600; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Potential next steps:&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin: 3.2rem 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
&lt;li style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Consider setting up persistence for your notebooks (ex: VOLUME [&quot;/notebooks&quot;] in Dockerfile)&lt;/li&gt;
&lt;li style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Setup Docker Compose and build multi-tiered applications specifications - such as connecting your Jupyter Notebook to PostgreSQL, Redis, Spark, etc.&lt;/li&gt;
&lt;li style=&quot;background: 0px 0px; border: 0px; box-sizing: inherit; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Set up other programming languages or kernels (Java, R) even Zeppelin Notebook&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
For an interactive tutorial of using Docker for Data Science, check out:&amp;nbsp;&lt;a href=&quot;https://github.com/crivetimihai/docker-data-science&quot; rel=&quot;nofollow noopener&quot; style=&quot;background: 0px 0px transparent; border: 0px; box-sizing: inherit; color: #665ed0; margin: 0px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; touch-action: manipulation; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;https://github.com/crivetimihai/docker-data-science&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.75); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; line-height: 3.2rem; margin-bottom: 3.2rem; margin-top: 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
To see the original article, check out&amp;nbsp;&lt;a href=&quot;https://www.linkedin.com/pulse/data-science-environment-docker-jupyter-ibm-mainframe-mihai-criveti/&quot;&gt;https://www.linkedin.com/pulse/data-science-environment-docker-jupyter-ibm-mainframe-mihai-criveti/&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/2570924132581825036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/2570924132581825036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2570924132581825036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2570924132581825036'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2018/09/data-science-environment-with-docker.html' title='Data Science environment with Docker and Jupyter on the IBM Mainframe'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-4162344195269604332</id><published>2018-08-13T10:29:00.000+03:00</published><updated>2018-08-13T10:29:19.750+03:00</updated><title type='text'>Learn Cloud Native, Docker, K8s &amp; Istio with free courses and IBM Badges</title><content type='html'>&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Microservices are the building blocks for cloud native architecture. Learn how to create and use containers with Docker, manage and orchestrate Containers with Kubernetes and secure and connect microservices with Istio.&lt;/div&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,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e1B3/yOsGpXdM5pfZbTESQloqyZFpBGUgBJQAseeQBlOR9kOtNW6z4M/n/NmyS/f+ri8bUmFExuwj33ptATJCMhOUfk5lpk4OHsfzkT/a2A330NcI1t6JbtUzzdTAtqyzbThtNhKQAm0PAKHfGQFcER60etry65//YPyUz7fGbLZxxzvu+KYsuUxSecai8ZK7K3wumv6dfZFWBW6Bu3VXd2P94q34aAKV+ncevUvm96O9WeoKSgBJaAEmoxAlbf38pDTD23W5cs3VFyydnNFzy+/iXiLyqJsh0pR9MneZO0RNyOkKg9CVSvcbXTv4A2O6Of/fOzArKdP7ul/MsvHtl7SRCoNx0WXSQf1Nsyk1tS6KAEl0GIIHBK0vOxX2GfLzvB5n+4ITfxid2jI7gPR/H2FkVYIYN5IhE2ajgxJnvhJTh+ZUuP8PlwAUfzUCodP1zrVJAeS5Y9QFcWdRogNmgs7tvEU9u7kXdO/q29pr47eVxGstlFItbdqkpZKj0yS9Zf0KKWWQgkoASWgBOISOCRoyTnZ3LvDvqJoj937Iz0wjG/FOdmH9HCIK7YcPl3vX7jqqncazKodWeQj0+OEe/ruZ75Nwi3dqghJknAtl1wv12LAHszOsg52auvZhvZqB4f28oktSlCNFSQ0KAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAEloASUgBJQAkpACSgBJdA8Cfx/xbczhxxUu28AAAAASUVORK5CYII=&quot; /&gt; &lt;/h3&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Prerequisites:&lt;/h3&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
You should have a good understanding of Linux and some basic concepts such as Version Control (preferably using Git). If you need a refresher, check out these 2 free resources:&lt;/div&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Optional:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.katacoda.com/courses/git&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Learn Git Version Control&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda if you&#39;ve never used Version Control.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Optional:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.edx.org/course/introduction-linux-linuxfoundationx-lfs101x-1&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Take up Introduction to Linux&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;by The Linux Foundation on edX.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Get started learning containers with Docker&lt;/h3&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Find out what containers are, how they differ from Virtual Machines and what are the benefits of using containers. Install Docker CE on your machine, search for and run container from the Docker Hub, build your first Docker container from a Dockerfile and publish it to a Docker Registry.&lt;/div&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Learn&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.katacoda.com/courses/docker&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Docker &amp;amp; Containers using Interactive Browser-Based Scenarios&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;on Katakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Test your knowledge and collect the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://developer.ibm.com/courses/all/docker-essentials-extend-your-apps-with-containers/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Docker essentials: Extend your apps with containers&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;badge on developerWorks.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Optional:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/crivetimihai/docker-data-science&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Try my interactive Docker for Data Science&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;course.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Learn container orchestration with Kubernetes&lt;/h3&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Kubernetes is a platform for managing containerized workloads and services. Learn about the key Kubernetes components and architecture:&lt;/div&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Join&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.edx.org/course/introduction-to-kubernetes&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Introduction to Kubernetes&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;by The Linux Foundation on edX.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Collect the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/kubernetes-course/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Container &amp;amp; Kubernetes Essentials with IBM Cloud&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;badge.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.katacoda.com/courses/kubernetes&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Kubernetes Introduction&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Cloud Native, Microservices, 12-factor and Istio&lt;/h3&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Learn about essential cloud-native technologies, the twelve-factor app methodology, microservices, and Istio : an intelligent service mesh for microservices. Istio helps you to connect, secure, control, and observe services.&lt;/div&gt;
&lt;div class=&quot;slate-resizable-image-embed slate-image-embed__resize-left&quot; style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; clear: both; color: rgba(0, 0, 0, 0.74902); float: left; font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 32px 0px 0px; max-width: 432px; orphans: auto; outline: 0px; padding: 0px; position: relative; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;img data-li-src=&quot;https://media.licdn.com/dms/image/C4E12AQG1uZ8pTrkTFw/article-inline_image-shrink_1000_1488/0?e=1539820800&amp;amp;v=beta&amp;amp;t=iep6ECA5J9xLQk0L0trR1Jlai_-YmRfPI6q00v1qnjk&quot; data-media-urn=&quot;urn:li:digitalmediaAsset:C4E12AQG1uZ8pTrkTFw&quot; src=&quot;https://media.licdn.com/dms/image/C4E12AQG1uZ8pTrkTFw/article-inline_image-shrink_1000_1488/0?e=1539820800&amp;amp;v=beta&amp;amp;t=iep6ECA5J9xLQk0L0trR1Jlai_-YmRfPI6q00v1qnjk&quot; style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; height: auto; margin: 0px; max-width: 100%; outline: 0px; padding: 0px; vertical-align: baseline;&quot; /&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;br style=&quot;box-sizing: inherit;&quot; /&gt;&lt;/div&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/get-started-with-microservices-istio-and-ibm-cloud-container-service/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Getting started with Microservices with Istio and IBM Cloud Kubernetes Service&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;badge.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://cognitiveclass.ai/courses/beyond-the-basics-istio-and-ibm-cloud-kubernetes-service/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Beyond the Basics: Istio and IBM Cloud Kubernetes Service&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;badge and also collect the badge for completing the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://cognitiveclass.ai/learn/containers-k8s-and-istio-on-ibm-cloud/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Containers, microservices, Kubernetes, and Istio on the Cloud&lt;/a&gt;Learning Path.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.katacoda.com/courses/istio&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Istio&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;course on Katakoda - use the Istio service mesh to connect, manage, and secure microservices.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Optional: Pursue the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youracclaim.com/badges/c8e27e68-40c0-493c-a876-2419caefae43&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Cloud Garage Method Explorer&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;and&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youracclaim.com/badges/1c871d65-34ff-4365-b14a-84d920a36ba7&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Cloud Garage Method Advocate&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;badges and learn about key practices such as IBM Design Thinking, Agile, DevOps used in developing and managing Cloud Native applications.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Advanced Courses &amp;amp; Next Steps:&lt;/h3&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.katacoda.com/courses/debugging-troubleshooting&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Debugging and Troubleshooting Containers&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.katacoda.com/courses/docker-production&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Learn Docker in Production&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.katacoda.com/courses/docker-security&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Learn Docker Security&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.katacoda.com/courses/docker-orchestration&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Learn Docker Orchestration / Swarm Mode&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Katakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.katacoda.com/courses/containers-without-docker&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Running Containers without Docker&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on Kotakoda.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.edx.org/course/configuration-management-for-containerized-delivery-0&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Configuration Management for Containerized Delivery&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;on edX.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
For IBMers:&lt;/h3&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
For IBM-ers who have access to YourLearning courses and Safari Books Online:&lt;/div&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete the&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youracclaim.com/badges/6907a9b7-f51f-4554-822d-32eb2e12d347&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Cloud Private Consultant Bootcamp&lt;/a&gt;, which includes 15+ hours of self-paced learning on Kubernetes, Helm, Docker, Microservices (IBM Garage Method), Cloud Foundry, and introduction to IBM Cloud Private.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Complete other courses and certifications from the ICp series:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youracclaim.com/badges/5e001810-78c7-407b-89ff-b4a3da7be98f&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Cloud Private - Continuous Integration/Continuous Delivery Pipelines&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 28px; margin: 2.4rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
Books:&lt;/h3&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Read up on Docker on Safari Books online:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920036142.do&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Docker: Up &amp;amp; Running&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;,&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920035671.do&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Using Docker&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Check out:&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920043874.do&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Kubernetes: Up &amp;amp; Running&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;and&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920064947.do&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Kubernetes Cookbook&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; caret-color: rgba(0, 0, 0, 0.901961); color: rgba(0, 0, 0, 0.901961); font-family: -apple-system, system-ui, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, &amp;quot;Fira Sans&amp;quot;, Ubuntu, Oxygen, &amp;quot;Oxygen Sans&amp;quot;, Cantarell, &amp;quot;Droid Sans&amp;quot;, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Lucida Grande&amp;quot;, Helvetica, Arial, sans-serif; font-size: 24px; font-style: normal; font-variant-caps: normal; font-weight: 600; letter-spacing: normal; line-height: 32px; margin: 2.8rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;strong style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 24.000001907348633px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Next Steps:&lt;/strong&gt;&lt;/h2&gt;
&lt;ol style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: decimal; margin: 0px 0px 3.2rem; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Find and join a Docker or Kubernetes community at&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.meetup.com/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;meetup.com&lt;/a&gt;. Attend a few presentations, talk to people!&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Capstone project: find an application you like, create a Docker container for it and publish it on Docker Hub.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
For additional Learning Paths, check out my&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Learn Cloud and AI with IBM Badges&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;article.&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
This article was originally published on &lt;a href=&quot;https://www.linkedin.com/pulse/cloud-native-docker-k8s-istio-mihai-criveti/&quot;&gt;https://www.linkedin.com/pulse/cloud-native-docker-k8s-istio-mihai-criveti/&lt;/a&gt; &lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/4162344195269604332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/4162344195269604332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4162344195269604332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4162344195269604332'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2018/08/learn-cloud-native-docker-k8s-istio.html' title='Learn Cloud Native, Docker, K8s &amp; Istio with free courses and IBM Badges'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-521856015524549660</id><published>2018-08-01T21:49:00.000+03:00</published><updated>2018-08-01T21:49:26.596+03:00</updated><title type='text'>Learn Cloud and AI with IBM Badges</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/AVvXsEh6jofBMIUgyxD-CdAfb-p61opNqZA8NLxui-GDfyvFcF9wDZ2p1TC8PhW5t0L-LDmVtB4f4tJAadBDp8DapKRZgraMszIFG_2iRe1I9Ak2W08v15r0fMZBBFqf2KJFBT3xihHf/s1600/mihai-criveti-badges.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;838&quot; data-original-width=&quot;1600&quot; height=&quot;167&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jofBMIUgyxD-CdAfb-p61opNqZA8NLxui-GDfyvFcF9wDZ2p1TC8PhW5t0L-LDmVtB4f4tJAadBDp8DapKRZgraMszIFG_2iRe1I9Ak2W08v15r0fMZBBFqf2KJFBT3xihHf/s320/mihai-criveti-badges.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&amp;nbsp;Life-long learning doesn&#39;t have to cost a fortune. I&#39;ve put together a free &#39;summer study plan&#39; that covers Cloud Native, Docker / Kubernetes, Data Science, Big Data, Blockchain and IoT - and best of all - it&#39;s free. Completing the courses will earn you badges on&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://www.youracclaim.com/user/mihai-criveti&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Acclaim&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;that can be easily shared on social media.&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;strong style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;My favourite IBM sites for free courses and badges include:&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: disc; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://developer.ibm.com/courses/badges/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;developerWorks Courses&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;for courses and badges on Blockchain, IBM Cloud / Bluemix, Node-Red, Chatbots, Raspberry Pi, API Connect, Streaming, Docker and Kubernetes. I&#39;ve completed the entire set - and I can say by far &#39; Cloud App Developer V2&#39; is my favourite. 21 hours of self-paced hands-on training. The labs are excellent - and highlight the twelve-factor app methodology.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://cognitiveclass.ai/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Data Science and Cognitive Computing Courses on CognitiveClass.AI&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;for learning paths on Containers, Kubernetes and IStio, Big Data, Python, R, Deep Learning, Analytics, Hadoop and Spark. I found &quot;Applied Data Science with Python&quot; to be a fun and exciting course. All the courses have hands-on labs, with tools deployed and available on the cloud through IBM Cloud, Data Science Experience or CogntiveClass Labs!&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://labs.cognitiveclass.ai/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;CognitiveClass Labs&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- comes in support of the courses available on CogntiveClass.AI - providing access to data science tools such as OpenRefine, Jupyter Notebook/Lab, RStudio, Zeppelin Notebook, SeaHorse and more.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.watson-academy.info/local/staticpage/view.php?page=badges&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Watson Academy&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;for courses and badges such as &quot;Watson and Cloud Platform&quot;, &quot;Watson Assistant&quot;, &quot;Watson Discovery Service&quot; or &quot;Watson Knowledge Studio&quot;.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.ibm.com/cloud/garage/category/courses&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Garage Courses&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;for &quot;Garage Method Explorer&quot; and &quot;Garage Method Advocate&quot;- an excellent series on DevOps, Agile, CI/CD, practices and tools.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.iot-academy.info/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Watson IOT Academy&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- courses and badges on Watson IOT offerings.&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W8877c01e0b3f_4ed5_9fa5_b8268c46f433/page/Welcome%20to%20IBM%20Analytics%20Product%20Skills%20Validation%20Digital%20Badge%20Program&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;IBM Analytics Product Skills Validation&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- various analytics badges and courses - that usually build on top of existing learning paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;strong style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; font-weight: 700; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Additional free resources:&lt;/strong&gt;&lt;/div&gt;
&lt;ul style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; list-style-type: disc; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.katacoda.com/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Katakoda&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;provides interactive scenario driven labs and excellent courses on topics such as Docker, Kubernetes, Prometheus, Git, Jenkins, Istio, Machine Learning, Tensorflow and more. I highly recommend taking some of the courses here!&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;https://www.edx.org/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;https://www.edx.org&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- you can &#39;audit&#39; courses for free, but verified certificates usually cost money. Worth taking a look for courses such as&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS158x+1T2018/course/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Introduction to Kubernetes&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;from the Linux Foundation or&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://courses.edx.org/courses/course-v1:Microsoft+DAT256x+2T2018/course/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;Essential Math for Machine Learning: Python Edition&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; font-size: 20px; margin: 2.4rem 0px 2.4rem 3.2rem; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.fast.ai/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;http://www.fast.ai&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- free courses on Deep Learning, Computational Linear Algebra.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
If you want to try something hands-on, respond to&lt;a href=&quot;https://developer.ibm.com/callforcode/&quot; rel=&quot;nofollow noopener&quot; style=&quot;background-color: transparent; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: #665ed0; font-size: 20px; font-weight: 400; margin: 0px; padding: 0px; text-decoration: none; vertical-align: baseline; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;IBM&#39;s Call for Code&lt;/a&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;- and build an application to tackle natural disasters (hurricanes, earthquakes, floods, extreme weather, etc).&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
This article was originally published on LinkedIn: &lt;a href=&quot;https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/&quot;&gt;https://www.linkedin.com/pulse/learn-cloud-ai-ibm-badges-mihai-criveti/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: initial initial; border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.74902); font-family: &amp;quot;Source Serif Pro&amp;quot;, serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; line-height: 3.2rem; margin: 3.2rem 0px; orphans: auto; outline: 0px; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; vertical-align: baseline; white-space: normal; widows: auto; word-spacing: 0px;&quot;&gt;
&amp;nbsp;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/521856015524549660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/521856015524549660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/521856015524549660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/521856015524549660'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2018/08/learn-cloud-and-ai-with-ibm-badges.html' title='Learn Cloud and AI with IBM Badges'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6jofBMIUgyxD-CdAfb-p61opNqZA8NLxui-GDfyvFcF9wDZ2p1TC8PhW5t0L-LDmVtB4f4tJAadBDp8DapKRZgraMszIFG_2iRe1I9Ak2W08v15r0fMZBBFqf2KJFBT3xihHf/s72-c/mihai-criveti-badges.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-8762621617908368044</id><published>2014-11-13T12:38:00.002+02:00</published><updated>2014-11-13T12:38:40.569+02:00</updated><title type='text'>Microsoft released .NET Core as open source. Find out what&#39;s inside!</title><content type='html'>Microsoft &lt;a class=&quot;xref&quot; href=&quot;http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx&quot; target=&quot;_blank&quot;&gt;announced that .NET Core will be open source&lt;/a&gt;, including the runtime and the framework libraries.&lt;br /&gt;
There are several open source &lt;a class=&quot;xref&quot; href=&quot;https://github.com/dotnet/home&quot; target=&quot;_blank&quot;&gt;Microsoft .NET projects on GitHub&lt;/a&gt; and &lt;a class=&quot;xref&quot; href=&quot;https://www.codeplex.com/&quot; target=&quot;_blank&quot;&gt;CodePlex&lt;/a&gt;:&lt;br /&gt;
&lt;div class=&quot;body&quot;&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;ul class=&quot;ul&quot; id=&quot;topic_gvg_32n_bq__ul_arj_l2n_bq&quot;&gt;
&lt;li class=&quot;li&quot;&gt;&lt;a class=&quot;xref&quot; href=&quot;https://github.com/dotnet/corefx&quot; target=&quot;_blank&quot;&gt;.NET Core 5 (corefx)&lt;/a&gt; - foundational libraries that make up the .NET Core development stack;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;&lt;a class=&quot;xref&quot; href=&quot;https://github.com/dotnet/buildtools&quot; target=&quot;_blank&quot;&gt;.NET Core 5 buildtools&lt;/a&gt; - Build tools that are necessary for building the .NET Core project;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;&lt;a class=&quot;xref&quot; href=&quot;https://roslyn.codeplex.com/&quot; target=&quot;_blank&quot;&gt;.NET Compiler Platform (Roslyn)&lt;/a&gt; - open-source C# and Visual Basic compilers with rich code analysis APIs;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;&lt;a class=&quot;xref&quot; href=&quot;https://github.com/aspnet/EntityFramework&quot; target=&quot;_blank&quot;&gt;EntityFramework&lt;/a&gt; - Microsoft&#39;s recommended data access technology for new applications in .NET;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;&lt;a class=&quot;xref&quot; href=&quot;https://github.com/aspnet/home&quot; target=&quot;_blank&quot;&gt;ASP.NET vNext Home&lt;/a&gt; - The Home repository is the starting point for people to learn about ASP.NET vNext;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
So what&#39;s in this stuff, anyway? Let&#39;s dissect it using &lt;a class=&quot;xref&quot; href=&quot;http://www.dwheeler.com/sloccount/&quot; target=&quot;_blank&quot;&gt;sloccount&lt;/a&gt; and &lt;a class=&quot;xref&quot; href=&quot;http://cloc.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;cloc&lt;/a&gt; (count lines of code) and find out!&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;strong class=&quot;ph b&quot;&gt;Grab the code for Roslyn:&lt;/strong&gt;&lt;br /&gt;
&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ GIT_CURL_VERBOSE=1 git clone -v https://git01.codeplex.com/roslyn&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;br /&gt;
&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); color: #333333; font-family: courier, monospace; font-size: 14px; line-height: 20.8000011444092px; overflow: auto; padding: 5pt;&quot;&gt;Cloning into &#39;roslyn&#39;...
error: RPC failed; result=56, HTTP code = 200
GnuTLS recv error (-9): A TLS packet with unexpected length was received.&lt;/pre&gt;
&lt;br /&gt;
Whatever - no time to rebuild git against OpenSSL. Let&#39;s use a workaround:&lt;br /&gt;
&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;mkdir roslyn; cd roslyn; git init
$ git remote add origin https://git01.codeplex.com/roslyn
$ git checkout -B master origin/master&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;br /&gt;
Great. Now let&#39;s grab the .NET Core dev stack, libraries and build tools (github clones fine):&lt;br /&gt;
&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ git clone https://github.com/dotnet/corefx.git
$ git clone https://github.com/dotnet/buildtools.git&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;strong class=&quot;ph b&quot;&gt;Analyze the .NET Core 5 (corefx) and buildtools&lt;/strong&gt;&lt;br /&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;cloc --xsl=1 --xml corefx/ buildtools/&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;tablenoborder&quot;&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot; class=&quot;table&quot; frame=&quot;border&quot; id=&quot;topic_gvg_32n_bq__table_yjz_pln_bq&quot; rules=&quot;all&quot; summary=&quot;&quot;&gt;
                
                
                
                
                
                &lt;thead align=&quot;left&quot; class=&quot;thead&quot;&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;th class=&quot;entry&quot; id=&quot;d41e128&quot; valign=&quot;top&quot;&gt;Language&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e131&quot; valign=&quot;top&quot;&gt;Files&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e134&quot; valign=&quot;top&quot;&gt;Blank&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e137&quot; valign=&quot;top&quot;&gt;Comment&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e140&quot; valign=&quot;top&quot;&gt;Code&lt;/th&gt;

                    &lt;/tr&gt;
&lt;/thead&gt;

                &lt;tbody class=&quot;tbody&quot;&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;C#&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;565&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;17312&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;24750&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;104192&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;XML&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;2&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;7&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;4456&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;MSBuild scripts&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;15&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;54&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;90&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;1820&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;SKILL&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;2&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;11&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;52&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;Visual Basic&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;17&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;43&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;ASP.Net&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;6&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;32&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;C/C++ Header&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;5&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;7&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;DOS Batch&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;5&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e128 &quot; valign=&quot;top&quot;&gt;Total&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e131 &quot; valign=&quot;top&quot;&gt;593&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e134 &quot; valign=&quot;top&quot;&gt;17399&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e137 &quot; valign=&quot;top&quot;&gt;24849&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e140 &quot; valign=&quot;top&quot;&gt;110607&lt;/td&gt;

                    &lt;/tr&gt;
&lt;/tbody&gt;

            &lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;strong class=&quot;ph b&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong class=&quot;ph b&quot;&gt;Analyze Roslyn&lt;/strong&gt;&lt;br /&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;cloc --xsl=1 --xml roslyn/Src&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;div class=&quot;tablenoborder&quot;&gt;
&lt;table border=&quot;1&quot; cellpadding=&quot;4&quot; cellspacing=&quot;0&quot; class=&quot;table&quot; frame=&quot;border&quot; id=&quot;topic_gvg_32n_bq__table_f3j_3tn_bq&quot; rules=&quot;all&quot; summary=&quot;&quot;&gt;
                
                
                
                
                
                &lt;thead align=&quot;left&quot; class=&quot;thead&quot;&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;th class=&quot;entry&quot; id=&quot;d41e346&quot; valign=&quot;top&quot;&gt;Language&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e349&quot; valign=&quot;top&quot;&gt;Files&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e352&quot; valign=&quot;top&quot;&gt;Blank&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e355&quot; valign=&quot;top&quot;&gt;Comment&lt;/th&gt;

                        &lt;th class=&quot;entry&quot; id=&quot;d41e358&quot; valign=&quot;top&quot;&gt;Code&lt;/th&gt;

                    &lt;/tr&gt;
&lt;/thead&gt;

                &lt;tbody class=&quot;tbody&quot;&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;C#&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;4138&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;186147&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;131956&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;1173792&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;Visual Basic&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;1767&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;178277&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;140738&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;981301&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;XML&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;4&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;1870&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;1920&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;12451&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;MSBuild scripts&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;74&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;216&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;10066&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;C/C++ Header&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;15&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;1607&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;428&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;7361&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;SKILL&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;33&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;888&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;4954&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;C++&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;12&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;322&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;186&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;1698&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;XSD&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;3&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;74&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;217&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;401&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;ASP.Net&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;44&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;4&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;351&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;XAML&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;3&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;3&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;1&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;128&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;DOS Batch&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;6&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;22&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;11&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;79&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;PowerShell&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;3&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;7&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;0&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;13&lt;/td&gt;

                    &lt;/tr&gt;
&lt;tr class=&quot;row&quot;&gt;
                        &lt;td class=&quot;entry&quot; headers=&quot;d41e346 &quot; valign=&quot;top&quot;&gt;Total&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e349 &quot; valign=&quot;top&quot;&gt;6102&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e352 &quot; valign=&quot;top&quot;&gt;369221&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e355 &quot; valign=&quot;top&quot;&gt;275673&lt;/td&gt;

                        &lt;td class=&quot;entry&quot; headers=&quot;d41e358 &quot; valign=&quot;top&quot;&gt;2192595&lt;/td&gt;

                    &lt;/tr&gt;
&lt;/tbody&gt;

            &lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); overflow: auto; padding: 5pt;&quot;&gt;&lt;span style=&quot;color: #ff7f24; font-family: courier, monospace;&quot;&gt;&lt;span style=&quot;font-size: 14px; line-height: 20.8000011444092px;&quot;&gt;$ sloccount roslyn/Src&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;/pre&gt;
&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;background-color: #f3f5f7; border: 1pt solid rgb(174, 189, 204); color: #333333; font-family: courier, monospace; font-size: 14px; line-height: 20.8000011444092px; overflow: auto; padding: 5pt;&quot;&gt;Total Physical Source Lines of Code (SLOC)                = 1,205,824
Development Effort Estimate, Person-Year (Person-Month) = 343.86 (4,126.29)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 4.93 (59.14)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 69.78
Total Estimated Cost to Develop                           = $ 46,450,431
 (average salary = $56,286/year, overhead = 2.40).&lt;/pre&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class=&quot;p&quot;&gt;
&lt;strong class=&quot;ph b&quot;&gt;So - what have we learned?&lt;/strong&gt;&lt;/div&gt;
&lt;ul class=&quot;ul&quot; id=&quot;topic_gvg_32n_bq__ul_o2k_5tn_bq&quot;&gt;
&lt;li class=&quot;li&quot;&gt;sloccount COCOMO estimates are just that - estimates;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;We have over one million lines of C# to play around with;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;Porting this thing will likely depend on Mono and will require quite a lot of work;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;It still doesn&#39;t make up an ecosystem - there&#39;s work to be done here to turn this into a cross-platform .NET environment;&lt;/li&gt;
&lt;li class=&quot;li&quot;&gt;Microsoft is most likely pushing for the clouds - this open source seems consistent with their &lt;a class=&quot;xref&quot; href=&quot;http://www.theregister.co.uk/2014/10/16/windows_containers_deep_dive/&quot; target=&quot;_blank&quot;&gt;recent partnership with Docker&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul class=&quot;ul&quot; id=&quot;topic_gvg_32n_bq__ul_o2k_5tn_bq&quot;&gt;

        &lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/8762621617908368044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/8762621617908368044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8762621617908368044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8762621617908368044'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2014/11/microsoft-released-net-core-as-open.html' title='Microsoft released .NET Core as open source. Find out what&#39;s inside!'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-6613010806908297312</id><published>2013-02-21T06:04:00.004+02:00</published><updated>2013-02-21T06:04:53.275+02:00</updated><title type='text'>Set up a highly available firewall and load balancer in the IBM cloud</title><content type='html'>&lt;a href=&quot;http://www.ibm.com/developerworks/cloud/library/cl-setupfirewalloncloud/index.html&quot;&gt;http://www.ibm.com/developerworks/cloud/library/cl-setupfirewalloncloud/index.html&lt;/a&gt;&lt;br /&gt;
Summary:&amp;nbsp; Set up a highly available (Virtual Router Redundancy Protocol) firewall and load balancer (Linux Virtual Server IP Virtual Server) using Keepalived for Linux and the IBM SmartCloud Enterprise virtual IP and anti-collocation features.</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/6613010806908297312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/6613010806908297312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/6613010806908297312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/6613010806908297312'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2013/02/set-up-highly-available-firewall-and.html' title='Set up a highly available firewall and load balancer in the IBM cloud'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-1588761953210342866</id><published>2012-10-20T00:09:00.000+03:00</published><updated>2012-10-20T00:09:23.425+03:00</updated><title type='text'>QEMU and kpartx to perform bare metal recovery or forensics on cloud instances</title><content type='html'>Using qemu or kpartx to perform &quot;bare metal&quot; instance recovery or forensics on KVM cloud instances:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/cloud/library/cl-qemurecovery/index.html&quot;&gt;Use QEMU on IBM SmartCloud Enterprise to recover images after system disasters&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/1588761953210342866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/1588761953210342866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/1588761953210342866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/1588761953210342866'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2012/10/qemu-and-kpartx-to-perform-bare-metal.html' title='QEMU and kpartx to perform bare metal recovery or forensics on cloud instances'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-8302772907288521308</id><published>2011-12-11T17:24:00.001+02:00</published><updated>2011-12-11T17:27:16.002+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HP"/><category scheme="http://www.blogger.com/atom/ns#" term="WebOS"/><title type='text'>HP to Contribute webOS to Open Source</title><content type='html'>Looks like after killing their TouchPad tablet, HP open sources WebOS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.hp.com/hpinfo/newsroom/press/2011/111209xa.html?mtxs=rss-corp-news&quot;&gt;http://www.hp.com/hpinfo/newsroom/press/2011/111209xa.html?mtxs=rss-corp-news&lt;/a&gt;&lt;/li&gt;&lt;li&gt;http://developer.palm.com/blog/2011/12/open-source/&lt;/li&gt;&lt;li&gt;I wonder.. &lt;a href=&quot;https://github.com/hpwebos&quot;&gt;https://github.com/hpwebos&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Might mean the TouchPad will make a comback. We&#39;ll see.&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/8302772907288521308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/8302772907288521308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8302772907288521308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8302772907288521308'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/12/hp-to-contribute-webos-to-open-source.html' title='HP to Contribute webOS to Open Source'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-3120828866539207436</id><published>2011-12-11T14:26:00.001+02:00</published><updated>2011-12-11T14:26:35.349+02:00</updated><title type='text'>Review: 1Q84</title><content type='html'>&lt;br /&gt;      &lt;a style=&#39;float: left; padding-right: 20px&#39; href=&#39;http://www.goodreads.com/book/show/10357575&#39;&gt;&lt;img alt=&#39;1Q84&#39; border=&#39;0&#39; src=&#39;http://photo.goodreads.com/books/1316729331m/10357575.jpg&#39;/&gt;&lt;/a&gt;&lt;br /&gt;      &lt;a href=&#39;http://www.goodreads.com/book/show/10357575&#39;&gt;1Q84&lt;/a&gt; by &lt;a href=&#39;http://www.goodreads.com/author/show/3354&#39;&gt;Haruki Murakami&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;      My rating: &lt;a href=&#39;http://www.goodreads.com/review/show/227461074&#39;&gt;5 of 5 stars&lt;/a&gt;&lt;br /&gt;      &lt;br/&gt;&lt;br/&gt;&lt;br /&gt;      I can&#39;t quite put my finger on it, but this books keeps reminding me of things I&#39;ve forgotten or ignored.&lt;br /&gt;&lt;br /&gt;I must say I&#39;ve enjoyed Book 3 the most.&lt;br /&gt;&lt;br /&gt;Well, that&#39;s it. For now at least - I&#39;m out of Murakami :-(.&lt;br /&gt;      &lt;br/&gt;&lt;br/&gt;&lt;br /&gt;      &lt;a href=&#39;http://www.goodreads.com/review/show/227461074&#39;&gt;View all my reviews&lt;/a&gt;&lt;br /&gt;    </content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/3120828866539207436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/3120828866539207436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/3120828866539207436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/3120828866539207436'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/12/review-1q84.html' title='Review: 1Q84'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-792264627202599138</id><published>2011-10-25T12:15:00.002+03:00</published><updated>2011-10-25T12:25:20.099+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GTD"/><title type='text'>Review: Getting Things Done: The Art of Stress-Free Productivity</title><content type='html'>&lt;a style=&quot;float: left; padding-right: 20px&quot; href=&quot;http://www.goodreads.com/book/show/1633&quot;&gt;&lt;img alt=&quot;Getting Things Done: The Art of Stress-Free Productivity&quot; src=&quot;http://photo.goodreads.com/books/1312474060m/1633.jpg&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.goodreads.com/book/show/1633&quot;&gt;Getting Things Done: The Art of Stress-Free Productivity&lt;/a&gt; by &lt;a href=&quot;http://www.goodreads.com/author/show/1058&quot;&gt;David Allen&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;     My rating: &lt;a href=&quot;http://www.goodreads.com/review/show/107076331&quot;&gt;5 of 5 stars&lt;/a&gt;&lt;br /&gt;    &lt;br /&gt;     I&#39;ve been using the methods and techniques described in GTD along side mind mapping in practice for over 8 years (mostly due to tools like OneNote, Emacs ORG mode, XMind/Fremind, etc). Reading this book has definitely helped optimize my workflow and planning into something quite a bit more efficient.&lt;br /&gt;&lt;br /&gt;Right now I&#39;m still looking to overhaul my tooling, OneNote isn&#39;t available on UNIX-like system (though it mostly works with wine), and Emacs ORG mode isn&#39;t practical for pasting images, screenshots, video, audio, files, etc. and such for reference.&lt;br /&gt;&lt;br /&gt;It&#39;s tried a bunch of Java tools (Thinking Rock and GTD Free) but they&#39;re not very good for reference, note taking and reminders / calendar stuff. So far it&#39;s proving hard to beat the OneNote + Outlook + Project combo.&lt;br /&gt;&lt;br /&gt;One tool I&#39;ve been using for a while now (probably an year or so) along side OneNote is &lt;a href=&quot;http://getontracks.org/&quot;&gt;Tracks&lt;/a&gt; . It&#39;s a RoR webapp that covers most things in the GTD workflow. Although import/export isn&#39;t yet available as of version 2.0, it gets the job done. It&#39;s also available from &lt;a href=&quot;http://bitnami.org/stack/tracks&quot;&gt;Bitnami&lt;/a&gt;  as a pre-installed stack.&lt;br /&gt;&lt;br /&gt;If you&#39;re into GTD or just like to organize yourself with TODOS, tasks, projects and such, Tracks is worth a try.&lt;br /&gt;&lt;br /&gt;     &lt;a href=&quot;http://www.goodreads.com/review/show/107076331&quot;&gt;View all my reviews&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/792264627202599138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/792264627202599138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/792264627202599138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/792264627202599138'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/10/review-getting-things-done-art-of.html' title='Review: Getting Things Done: The Art of Stress-Free Productivity'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-1568649593436156792</id><published>2011-05-26T21:27:00.003+03:00</published><updated>2011-05-26T21:29:36.293+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWK"/><category scheme="http://www.blogger.com/atom/ns#" term="Perl"/><category scheme="http://www.blogger.com/atom/ns#" term="Scripting"/><title type='text'>Convert AWK to Perl using a2p</title><content type='html'>&lt;div class=&quot;body&quot;&gt;&lt;div class=&quot;abstract&quot;&gt;Automatic conversion of AWK scripts to perl.&lt;/div&gt;      &lt;div class=&quot;p&quot;&gt;&lt;br /&gt;A little &lt;span class=&quot;keyword cmdname&quot;&gt;awk&lt;/span&gt; script that numbers       lines:&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;strong class=&quot;ph b&quot;&gt;ls -la /usr | ./linum.pl&lt;br /&gt;  1 : total 240&lt;br /&gt;  2 : drwxr-xr-x+  12 root root  4096 2010-06-21 06:47 .&lt;br /&gt;  3 : drwxr-xr-x   22 root root  4096 2011-05-11 12:06 ..&lt;br /&gt;  4 : drwxr-xr-x+   2 root root 69632 2011-05-24 14:07 bin&lt;br /&gt;  5 : drwxr-xr-x+   2 root root  4096 2010-05-05 11:33 games&lt;br /&gt;  6 : drwxr-xr-x+   5 root root  4096 2010-06-21 06:47 i586-suse-linux&lt;br /&gt;  7 : drwxr-xr-x+  52 root root  4096 2011-05-13 04:17 include&lt;br /&gt;  8 : drwxr-xr-x+ 156 root root 69632 2011-05-24 14:07 lib&lt;br /&gt;  9 : drwxr-xr-x+  10 root root  4096 2010-06-21 06:47 local&lt;br /&gt; 10 : drwxr-xr-x+   2 root root 12288 2011-05-24 14:07 sbin&lt;br /&gt; 11 : drwxr-xr-x+ 213 root root  4096 2011-05-23 13:19 share&lt;/strong&gt;&lt;/pre&gt; Let&#39;s       convert this to &lt;span class=&quot;keyword cmdname&quot;&gt;perl&lt;/span&gt; using       &lt;span class=&quot;keyword cmdname&quot;&gt;a2p&lt;/span&gt;.&lt;pre class=&quot;pre codeblock&quot;&gt;echo &#39;{ printf(&quot;%5d : %s\n&quot;, NR, $0) }&#39; | a2p &amp;gt; linum.pl&lt;br /&gt;chmod +x linum.pl&lt;/pre&gt; Let&#39;s       try it       out:&lt;pre class=&quot;pre codeblock&quot;&gt;&lt;strong class=&quot;ph b&quot;&gt;ls -la /usr | ./linum.pl&lt;br /&gt;  1 : total 240&lt;br /&gt;  2 : drwxr-xr-x+  12 root root  4096 2010-06-21 06:47 .&lt;br /&gt;  3 : drwxr-xr-x   22 root root  4096 2011-05-11 12:06 ..&lt;br /&gt;  4 : drwxr-xr-x+   2 root root 69632 2011-05-24 14:07 bin&lt;br /&gt;  5 : drwxr-xr-x+   2 root root  4096 2010-05-05 11:33 games&lt;br /&gt;  6 : drwxr-xr-x+   5 root root  4096 2010-06-21 06:47 i586-suse-linux&lt;br /&gt;  7 : drwxr-xr-x+  52 root root  4096 2011-05-13 04:17 include&lt;br /&gt;  8 : drwxr-xr-x+ 156 root root 69632 2011-05-24 14:07 lib&lt;br /&gt;  9 : drwxr-xr-x+  10 root root  4096 2010-06-21 06:47 local&lt;br /&gt; 10 : drwxr-xr-x+   2 root root 12288 2011-05-24 14:07 sbin&lt;br /&gt; 11 : drwxr-xr-x+ 213 root root  4096 2011-05-23 13:19 share&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;The code block looks pretty good:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;while (&amp;lt;&amp;gt;) {&lt;br /&gt;chomp;      # strip record separator&lt;br /&gt;printf &quot;%5d : %s\n&quot;, $., $_;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;/div&gt;    &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/1568649593436156792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/1568649593436156792' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/1568649593436156792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/1568649593436156792'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/05/convert-akw-to-perl-using-a2p.html' title='Convert AWK to Perl using a2p'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-7630972261929085722</id><published>2011-05-26T13:35:00.002+03:00</published><updated>2011-05-26T13:37:52.969+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>NSA Operating Systems Security Configuration Guides</title><content type='html'>NSA published some rather interesting OS security guides:&lt;br /&gt;&lt;a href=&quot;http://www.nsa.gov/ia/guidance/security_configuration_guides/operating_systems.shtml&quot;&gt;http://www.nsa.gov/ia/guidance/security_configuration_guides/operating_systems.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The RHEL Security Guides are quite good.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a title=&quot;This link will open the Guide to the Secure Configuration of Red Hat Enterprise Linux 5. Click to view the legal notice and open the pdf file.&quot; href=&quot;http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf&quot;&gt;Guide   to the Secure Configuration of Red Hat Enterprise Linux   5 &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a title=&quot;This link will open the Hardening Tips for the Red Hat Enterprise Linux 5. Click to view the legal notice and open the pdf file.&quot; href=&quot;http://www.nsa.gov/ia/_files/factsheets/rhel5-pamphlet-i731.pdf&quot;&gt;Hardening   Tips for the Red Hat Enterprise Linux 5&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;I&#39;ve used these along with the &lt;a href=&quot;http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html&quot;&gt;&lt;em class=&quot;citetitle&quot; id=&quot;Title-6-Security_Guide&quot;&gt;Security Guide and the &lt;/em&gt;&lt;/a&gt;&lt;em class=&quot;citetitle&quot; id=&quot;Title-6-Security-Enhanced_Linux&quot;&gt;&lt;a href=&quot;http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/index.html&quot;&gt;Security-Enhanced Linux guides&lt;/a&gt; from RHEL.&lt;br /&gt;&lt;/em&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/7630972261929085722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/7630972261929085722' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7630972261929085722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7630972261929085722'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/05/nsa-operating-systems-security.html' title='NSA Operating Systems Security Configuration Guides'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-4259347367755734065</id><published>2011-05-20T16:58:00.002+03:00</published><updated>2011-05-20T17:05:31.269+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CloudComputing"/><category scheme="http://www.blogger.com/atom/ns#" term="IBM"/><category scheme="http://www.blogger.com/atom/ns#" term="SCE"/><category scheme="http://www.blogger.com/atom/ns#" term="SmartCloud"/><title type='text'>IBM SmartCloud Enterprise tips: LVM and FTPS</title><content type='html'>&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;a href=&quot;http://www.ibm.com/cloud-computing/us/en/&quot;&gt;IBM SmartCloud Enterprise&lt;/a&gt; tips:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Learn how to set up a 64-bit Linux® instance (starting             with a Bronze-level offering) with the Linux Logical Volume  Manager (LVM),             capture a private image and deploy a new instance as a  different offering (a             Platinum tier) and then grow the LVM volumes and file  systems to accommodate             the new physical volumes. This article also shows how to  configure and manage LVM across physical volumes using Linux LVM-type  partitions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/cloud/library/cl-cloudtip-lvmconfig/&quot;&gt;Configure the Linux LVM and file system to accommodate larger physical volume offerings&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Set up a Microsoft® Windows™ Server 2008 R2 on the IBM Cloud so that it can act             as a file server. This article details the steps to configure an FTPS and SMB file server using persistent storage;             this enables the cloud user to upload and download files to and from instances in the             cloud and facilitate data exchange:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.ibm.com/developerworks/cloud/library/cl-windowsfileserver/&quot;&gt;Configure an FTPS/SMB file server on a Windows Server 2008 R2 using persistent storage&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/4259347367755734065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/4259347367755734065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4259347367755734065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4259347367755734065'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2011/05/ibm-smartcloud-enterprise-tips-lvm-and.html' title='IBM SmartCloud Enterprise tips: LVM and FTPS'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-800860108548082065</id><published>2010-10-10T03:06:00.002+03:00</published><updated>2010-10-10T03:14:31.084+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><title type='text'>Microsoft Mathematics Add-In for Word and OneNote</title><content type='html'>Heh, this one is pretty awesome. Calculus and plotting in Microsoft Word :-). Best of all, it&#39;s a free add-on.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=ca620c50-1a56-49d2-90bd-b2e505b3bf09&quot;&gt;Microsoft Mathematics Add-In for Word and OneNote&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And while we&#39;re on the subject of educational software:&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://research.microsoft.com/en-us/downloads/b28c604a-ce3a-4327-833a-3c2f24aeadd6/&quot;&gt;Biology Add-in for Word&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://research.microsoft.com/en-us/projects/chem4word/&quot;&gt;Chemistry Add-in for Word&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can even grab the source code for this: &lt;a href=&quot;http://chem4word.codeplex.com/&quot;&gt;http://chem4word.codeplex.com/&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/800860108548082065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/800860108548082065' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/800860108548082065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/800860108548082065'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/10/microsoft-mathematics-add-in-for-word.html' title='Microsoft Mathematics Add-In for Word and OneNote'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-7901970057161523481</id><published>2010-10-02T14:11:00.005+03:00</published><updated>2010-10-06T21:34:34.646+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="MacOS"/><title type='text'>Mount hfsplus and hfs read write on Linux</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Times, serif; &quot;&gt;&lt;div&gt;&lt;h1 class=&quot;title&quot; style=&quot;text-align: center; &quot;&gt;Mount HFS+ rw on Linux (at your own risk...)&lt;/h1&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Install HFS+ support&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;&lt;/span&gt;aptitude install hfsplus hfsprogs hfsutils&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Keep an eye on your dmesg:&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;&lt;/span&gt;tail -f /var/log/messages&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Get an idea on what partition you&#39;d want to mount&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;cat /proc/partitions&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;See what filesystems are supported&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;cat /proc/filesystems&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Check for a hfsplus LKM&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;modprobe -l | grep hfsplus&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Load it&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;modprobe hfsplus&lt;br /&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Check to see if it&#39;s loaded&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;grep hfsplus /proc/partitions&lt;br /&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Mount the HFS+ partition. If it&#39;s journaled, we don&#39;t need -o force.&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;mount -t hfsplus -o force -o rw /dev/sda2 /mnt/test&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;Verify it&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;/dev/sda2 on /mnt/test type hfsplus (rw,force) touch /mnt/test/selftest ls -la /mnt/test/selftest&lt;br /&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;If we&#39;re not allowed to mount with the write option, check dmesg&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;# &lt;/span&gt;&lt;span style=&quot;color: rgb(255, 127, 36); &quot;&gt;If required, fsck, then remount.&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;/sbin/fsck.hfsplus -f /dev/sda2&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;# As an alternative, you can disable the journal on a MacOS:&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; font-family: courier, monospace; font-size: 14px; overflow-x: auto; overflow-y: auto; &quot;&gt;# GUI: hold option while clicking the menu in Disk Utility. CMD:&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px;&quot;&gt;diskutil list&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;src src-sh&quot; style=&quot;border-top-width: 1pt; border-right-width: 1pt; border-bottom-width: 1pt; border-left-width: 1pt; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(174, 189, 204); border-right-color: rgb(174, 189, 204); border-bottom-color: rgb(174, 189, 204); border-left-color: rgb(174, 189, 204); background-color: rgb(243, 245, 247); padding-top: 5pt; padding-right: 5pt; padding-bottom: 5pt; padding-left: 5pt; overflow-x: auto; overflow-y: auto; &quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 14px;&quot;&gt;sudo diskutil disableJournal /Volumes/Yourdisk&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/7901970057161523481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/7901970057161523481' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7901970057161523481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/7901970057161523481'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/10/niyb.html' title='Mount hfsplus and hfs read write on Linux'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-8838007521361717754</id><published>2010-08-24T22:29:00.004+03:00</published><updated>2010-08-24T22:36:00.109+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Clustering"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>ClusterSSH alternative, broadcasting to multiple terminals</title><content type='html'>Gnome &quot;Terminator&quot; is basically similar to ClusterSSH, dsh, kanif or such but runs all terminals in a single window you can split and such somewhat similar to screen.&lt;br /&gt;&lt;br /&gt;It&#39;s also a bit more configurable (eg: gnome-terminal).&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeyAukkFe-gS_lUrJawTi1bg8_1KDqA0GSyFQd3e83FccGXjZdLgyfq9_0o99Ls2wwa_4eL8M3xBCsueZxa4VVOeNU4oXQurZQV2Ryw-cbGVnyZei-Dk9qk1SVPH59IZUy-8Bg/s1600/GnomeTerminator.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 274px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeyAukkFe-gS_lUrJawTi1bg8_1KDqA0GSyFQd3e83FccGXjZdLgyfq9_0o99Ls2wwa_4eL8M3xBCsueZxa4VVOeNU4oXQurZQV2Ryw-cbGVnyZei-Dk9qk1SVPH59IZUy-8Bg/s400/GnomeTerminator.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5509062204205079586&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://freshmeat.net/projects/gnometerminator/?branch_id=70626&amp;release_id=268543&quot;&gt;http://freshmeat.net/projects/gnometerminator/?branch_id=70626&amp;release_id=268543&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/8838007521361717754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/8838007521361717754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8838007521361717754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/8838007521361717754'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/08/clusterssh-alternative-broadcasting-to.html' title='ClusterSSH alternative, broadcasting to multiple terminals'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeyAukkFe-gS_lUrJawTi1bg8_1KDqA0GSyFQd3e83FccGXjZdLgyfq9_0o99Ls2wwa_4eL8M3xBCsueZxa4VVOeNU4oXQurZQV2Ryw-cbGVnyZei-Dk9qk1SVPH59IZUy-8Bg/s72-c/GnomeTerminator.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-2090199104254140056</id><published>2010-08-13T13:50:00.003+03:00</published><updated>2010-08-13T13:54:10.422+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>ThinkPad fingerprint scanner - Linux PAM setup</title><content type='html'>Using fingerprint scanners for login is cool. Sure, it&#39;s insecure, but who cares about that :-). It&#39;s awesome!&lt;br /&gt;&lt;br /&gt;Do enroll more than one finger, and have a fallback mechanism though...&lt;br /&gt;&lt;br /&gt;# Install fingerprint software.&lt;br /&gt;# You can play around with fprint_demo to try it out...&lt;br /&gt;sudo aptitude install fprint-demo libpam-fprint libfprint&lt;br /&gt;&lt;br /&gt;# Enroll the index finder. See pam_fprint_enroll --help for details&lt;br /&gt;pam_fprint_enroll --enroll-finger 7&lt;br /&gt;&lt;br /&gt;# Edit your PAM configuration to enable fingerprint login&lt;br /&gt;# Fallback to password if it fails.&lt;br /&gt;&lt;br /&gt;# emacs /etc/pam.d/commond-auth&lt;br /&gt;# Add something like:&lt;br /&gt;&lt;br /&gt;# Fingerprint&lt;br /&gt;auth       sufficient   pam_fprint.so&lt;br /&gt;&lt;br /&gt;You could also require both, but that&#39;s just awkward :-). And if finger print scanning breaks, it&#39;s a PITA.</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/2090199104254140056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/2090199104254140056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2090199104254140056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2090199104254140056'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/08/thinkpad-fingerprint-scanner-linux-pam.html' title='ThinkPad fingerprint scanner - Linux PAM setup'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-4612377306371172958</id><published>2010-07-26T01:44:00.007+03:00</published><updated>2010-07-26T10:40:37.948+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Elisp"/><category scheme="http://www.blogger.com/atom/ns#" term="Emacs"/><title type='text'>Emacs: Different fonts in different modes</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsx6eTDPTYLXZHRkzxZrXX4S_-Mo1cwxoUGDh5tlQKJwq14urNXjSGxzD5r-zOaKEw3ZuuAOXv5u9y6fUadEtbRgu9cQgYcAWVZdpnIweUb6ELtNj3Nh11euin-w37FKJ-jByB/s1600/emacs-org-ditaa-buffer-face-mode.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsx6eTDPTYLXZHRkzxZrXX4S_-Mo1cwxoUGDh5tlQKJwq14urNXjSGxzD5r-zOaKEw3ZuuAOXv5u9y6fUadEtbRgu9cQgYcAWVZdpnIweUb6ELtNj3Nh11euin-w37FKJ-jByB/s400/emacs-org-ditaa-buffer-face-mode.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5497994046977936274&quot; /&gt;&lt;/a&gt;&lt;br /&gt;I love monospaced fonts (such as Terminus or Consolas / Inconsolata), but they can be harder to read when it comes to documentation or simple conversation.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, let&#39;s make Emacs use different fonts (monospaced and variable) depending on the mode we&#39;re in  (eg: Info and ERC should not be monospaced), and let&#39;s add some shortcuts to change font type /size easily. You can do something like this with a bit of elisp in your init.el / .emacs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;;; Insidious Black Magic Bits:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;;; Use variable width font faces in current buffer&lt;/div&gt;&lt;div&gt;(defun my-buffer-face-mode-variable ()&lt;/div&gt;&lt;div&gt;  &quot;Set font to a variable width (proportional) fonts in current buffer&quot;&lt;/div&gt;&lt;div&gt;  (interactive)&lt;/div&gt;&lt;div&gt;  (setq buffer-face-mode-face &#39;(:family &quot;DejaVu Sans&quot; :height 100 :width semi-condensed))&lt;/div&gt;&lt;div&gt;  (buffer-face-mode))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;;; Use monospaced font faces in current buffer&lt;/div&gt;&lt;div&gt;(defun my-buffer-face-mode-fixed ()&lt;/div&gt;&lt;div&gt;  &quot;Sets a fixed width (monospace) font in current buffer&quot;&lt;/div&gt;&lt;div&gt;  (interactive)&lt;/div&gt;&lt;div&gt;  (setq buffer-face-mode-face &#39;(:family &quot;Consolas&quot; :height 100))&lt;/div&gt;&lt;div&gt;  (buffer-face-mode))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;;; Set default font faces for Info and ERC modes&lt;/div&gt;&lt;div&gt;(add-hook &#39;erc-mode-hook &#39;my-buffer-face-mode-variable)&lt;/div&gt;&lt;div&gt;(add-hook &#39;Info-mode-hook &#39;my-buffer-face-mode-variable)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;;; Control + scroll to change font type&lt;/div&gt;&lt;div&gt;(global-set-key [C-mouse-4] &#39;my-buffer-face-mode-fixed)&lt;/div&gt;&lt;div&gt;(global-set-key [C-mouse-5] &#39;my-buffer-face-mode-variable)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;;; Shift + scroll to change font size&lt;/div&gt;&lt;div&gt;(global-set-key [S-mouse-4] &#39;text-scale-increase)&lt;/div&gt;&lt;div&gt;(global-set-key [S-mouse-5] &#39;text-scale-decrease)&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;And the results:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1RGHpaSE91HY67cyXYUPfvX2BExvrpN40L2zPXQ-0D_nu-UX85LrIi9-L8Mx7V-5Vy8OkkplmqIXVm7ZTPFL-iDY3DYX-_1EjSYEpSW2hDWryDGpGBeLn0aXmPCLl3it-1KQ/s1600/emacs-buffer-face-mode.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 250px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG1RGHpaSE91HY67cyXYUPfvX2BExvrpN40L2zPXQ-0D_nu-UX85LrIi9-L8Mx7V-5Vy8OkkplmqIXVm7ZTPFL-iDY3DYX-_1EjSYEpSW2hDWryDGpGBeLn0aXmPCLl3it-1KQ/s400/emacs-buffer-face-mode.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5497982214973955778&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that you can also Shift + Left Click on a window to set fonts / font sizes.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/4612377306371172958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/4612377306371172958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4612377306371172958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4612377306371172958'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/07/emacs-different-fonts-in-different.html' title='Emacs: Different fonts in different modes'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsx6eTDPTYLXZHRkzxZrXX4S_-Mo1cwxoUGDh5tlQKJwq14urNXjSGxzD5r-zOaKEw3ZuuAOXv5u9y6fUadEtbRgu9cQgYcAWVZdpnIweUb6ELtNj3Nh11euin-w37FKJ-jByB/s72-c/emacs-org-ditaa-buffer-face-mode.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-2679642157393837543</id><published>2010-07-18T22:56:00.004+03:00</published><updated>2010-07-18T23:43:50.497+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Revision Control"/><category scheme="http://www.blogger.com/atom/ns#" term="UNIX"/><title type='text'>Converting Perforce depots to Mercurial repositories with hg convert</title><content type='html'>&lt;div&gt;Converting Perforce to Mercurial repositories is fast (4-5 seconds for a 500MB repository with 300 revisions).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You&#39;ll also want to start p4d and log into P4V before, so it caches credentials.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Setup your p4 client:&lt;/div&gt;&lt;div&gt;export P4PORT=localhost:1666&lt;/div&gt;&lt;div&gt;export P4CLIENT=your_client_here&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Enable hg converter by adding to ~/.hgrc&lt;/div&gt;&lt;div&gt;[extensions]&lt;/div&gt;&lt;div&gt;hgext.convert=&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Start p4d&lt;/div&gt;&lt;div&gt;./p4d &amp;amp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Convert the depot:&lt;/div&gt;&lt;div&gt;You need to specify a revision. Look it up in the p4 client (depot-details-revision). @all might also work.&lt;/div&gt;&lt;div&gt;hg convert //depot/...@307 converted-perforce path/to/hg-repo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Look at the history&lt;/div&gt;&lt;div&gt;hg history&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Look at diffs and history with a graphical tool. This should give you a better idea of branches and such.&lt;/div&gt;&lt;div&gt;hgview&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;7. Clone your repository&lt;/div&gt;&lt;div&gt;hg clone /path/to/hg-repo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;8. Publish your repository via the web interface&lt;/div&gt;&lt;div&gt;hg serve&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;9. Browse around&lt;/div&gt;&lt;div&gt;http://localhost:8000/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Additional notes:&lt;/div&gt;&lt;div&gt;Keep an eye on:&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://mercurial.selenic.com/wiki/RepositoryConversion#Perforce&quot;&gt;http://mercurial.selenic.com/wiki/RepositoryConversion#Perforce&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://blog.boreas.ro/feeds/2679642157393837543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/2679642157393837543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2679642157393837543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2679642157393837543'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/07/converting-perforce-depots-to-mercurial.html' title='Converting Perforce depots to Mercurial repositories with hg convert'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-4494633831270262267</id><published>2010-07-11T07:26:00.003+03:00</published><updated>2010-07-11T07:30:46.825+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debugging"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Memory Scanner and Editor for Linux</title><content type='html'>If you&#39;re familiar with ArtMoney, MemEdit or &lt;a href=&quot;http://www.cheatengine.org/&quot;&gt;Cheat Engine&lt;/a&gt; on Windows, then you know what it&#39;s used for :-).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically, it lets you search for variables in the memory of  a running process, then refine the search further (eg: give higher, lower or fixed values). You can use this basically to cheat at games. Look for the health, money or mana values, refine the search, then freeze or set the value to whatever you want.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://taviso.decsystem.org/scanmem.html&quot;&gt;ScanMem&lt;/a&gt; is a simple commandline tool on Linux that lets you do the same. There are other uses, but this one is the most common...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/4494633831270262267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/4494633831270262267' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4494633831270262267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4494633831270262267'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/07/memory-scanner-and-editor-for-linux.html' title='Memory Scanner and Editor for Linux'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-5672847561671590853</id><published>2010-06-07T20:46:00.005+03:00</published><updated>2010-06-07T20:52:28.863+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Nautilus Location Bar - Fix Text Mode</title><content type='html'>Gnome keeps getting dumber and dumber all the time. First the &quot;Open in Terminal&quot; right click option was gone, now the address bar.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before at least you had a crayon button to toggle it. Now you need to type / and start typing or Ctrl-L to show it. Makes it a bit harder to copy/paste stuff to it.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here&#39;s how you fix it:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;gconftool-2 --type=Boolean --set /apps/nautilus/preferences/always_use_location_entry true&lt;/blockquote&gt;&lt;/div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNzi_RAqcgt8quNVp59QSoLJKiw_thLKo27R0E6d2WiHtoswkHuVENMke-2b99ggikaNGGhOTMAA_Cai9yVYvDYajupdnhjTedL2xP1CqPbhGk_WZGKC8cbKM77kCNh8YtobZ/s1600/Nautilus-Address-Bar.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 247px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNzi_RAqcgt8quNVp59QSoLJKiw_thLKo27R0E6d2WiHtoswkHuVENMke-2b99ggikaNGGhOTMAA_Cai9yVYvDYajupdnhjTedL2xP1CqPbhGk_WZGKC8cbKM77kCNh8YtobZ/s400/Nautilus-Address-Bar.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5480090743449939746&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/5672847561671590853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/5672847561671590853' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/5672847561671590853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/5672847561671590853'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/06/nautilus-location-bar-fix-text-mode.html' title='Nautilus Location Bar - Fix Text Mode'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNNzi_RAqcgt8quNVp59QSoLJKiw_thLKo27R0E6d2WiHtoswkHuVENMke-2b99ggikaNGGhOTMAA_Cai9yVYvDYajupdnhjTedL2xP1CqPbhGk_WZGKC8cbKM77kCNh8YtobZ/s72-c/Nautilus-Address-Bar.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-4193944724831948789</id><published>2010-05-21T22:50:00.005+03:00</published><updated>2010-05-21T23:45:23.246+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Vim"/><title type='text'>VIM: The Matrix Has You</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj8b744juBDzglRwp3TPxtXLoYkCzH3yR-EjO2lcHZxRvkGd-pb7Mguc7MhQgBqdGaoOr7nwYfb-j1qkhSJfNEnWME2WUPPPWk_V6etddbrwFvvDQi8WYfXOiR4ZMk_aGFabnM/s1600/vim-matrix.gif&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 265px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj8b744juBDzglRwp3TPxtXLoYkCzH3yR-EjO2lcHZxRvkGd-pb7Mguc7MhQgBqdGaoOr7nwYfb-j1qkhSJfNEnWME2WUPPPWk_V6etddbrwFvvDQi8WYfXOiR4ZMk_aGFabnM/s400/vim-matrix.gif&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5473827033272493922&quot; /&gt;&lt;/a&gt;&lt;br /&gt;(click for gif animation)&lt;div&gt;&lt;br /&gt;&lt;div&gt;This is pretty much the coolest thing I&#39;ve seen all day.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A &quot;Matrix&quot; screensaver for VIM. It&#39;s amazingly realistic too.&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=1189&quot;&gt;http://www.vim.org/scripts/script.php?script_id=1189&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/4193944724831948789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/4193944724831948789' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4193944724831948789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/4193944724831948789'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/05/vim-matrix-has-you.html' title='VIM: The Matrix Has You'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj8b744juBDzglRwp3TPxtXLoYkCzH3yR-EjO2lcHZxRvkGd-pb7Mguc7MhQgBqdGaoOr7nwYfb-j1qkhSJfNEnWME2WUPPPWk_V6etddbrwFvvDQi8WYfXOiR4ZMk_aGFabnM/s72-c/vim-matrix.gif" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-5958938583674248074</id><published>2010-04-06T13:27:00.004+03:00</published><updated>2010-04-07T22:59:17.729+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Open Source"/><category scheme="http://www.blogger.com/atom/ns#" term="UNIX"/><title type='text'>Share GNU screen sessions with a different user</title><content type='html'>Here&#39;s something cool you can do with screen. Share a screen session with multiple terminals. &quot;screen -x&quot;. Of course, this only works if you&#39;re using the same user.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let&#39;s say you want to do some cooperative debugging with another username. Simple:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Set screen setuid flag:&lt;/div&gt;&lt;div&gt;chmod +s screen&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Start a new screen sessions:&lt;/div&gt;&lt;div&gt;screen -S mihai&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Set multiuser&lt;/div&gt;&lt;div&gt;Ctrl-A&lt;/div&gt;&lt;div&gt;:multiuser on&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Add the user to join your session to the ACL list:&lt;/div&gt;&lt;div&gt;Ctrl-A&lt;/div&gt;&lt;div&gt;:acladd jimbo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. Now connect as jimbo and join cmihai&#39;s session (called mihai):&lt;/div&gt;&lt;div&gt;screen -x cmihai/mihai&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now you can share you screen session with that user :-).&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/5958938583674248074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/5958938583674248074' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/5958938583674248074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/5958938583674248074'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/04/share-gnu-screen-sessions-with.html' title='Share GNU screen sessions with a different user'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-36470398.post-2202235212499326607</id><published>2010-01-03T04:09:00.006+02:00</published><updated>2010-01-03T18:44:19.248+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="UNIX"/><title type='text'>Unpack functions and BSDProgress - progress bar for your archives.</title><content type='html'>&lt;pre&gt;A colored unpack script using bar:&lt;/pre&gt;&lt;pre&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqhicsTpGotWm-j-WRjzUKJIZ5wlhqVxDwTZFVArARGhOW9B82-cdnduI0Uy5n-cCPyOidFkJaprttLLKQ7gZTTK6MIHUQoc6vT8Dcah_KRdXV3Q9DIf-GDYlXX53mIh4QVjF/s1600-h/bar-gup-unpacking.png&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 400px; height: 228px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqhicsTpGotWm-j-WRjzUKJIZ5wlhqVxDwTZFVArARGhOW9B82-cdnduI0Uy5n-cCPyOidFkJaprttLLKQ7gZTTK6MIHUQoc6vT8Dcah_KRdXV3Q9DIf-GDYlXX53mIh4QVjF/s400/bar-gup-unpacking.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5422555279373894626&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;A little KSH93 function for your .profile. Now you can augomatically unpack most archives while watching the pretty progress bar.&lt;/pre&gt;&lt;pre&gt;You need bsdprogress (Solaris and Linux port of NetBSD&#39;s progress). With a bit work it also works on AIX.&lt;/pre&gt;&lt;pre&gt;I just re-wrote this for progress, so I didn&#39;t check the cpio and such yet.&lt;/pre&gt;&lt;pre&gt;# Mihai Criveti - Unpack function:&lt;br /&gt;&lt;span class=&quot;c&quot;&gt;# Progress Unpack - unpack using GNU tar and bsdprogress.&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;up&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$*&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;k&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;in&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gtar&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;xpif&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;gz&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gtar&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;zpixf&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tgz&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;zf&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gtar&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;ipxf&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;bz2&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gtar&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;jipxf&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tbz&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gtar&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;jipxf&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;gz&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gunzip&lt;/span&gt; -&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;bz2&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;progress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;bunzip&lt;/span&gt; -&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;uncompress&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; | &lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;gxvf&lt;/span&gt; - &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;cpio&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;cpio&lt;/span&gt; -&lt;span class=&quot;w&quot;&gt;icd&lt;/span&gt; &amp;lt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;uncompress&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;rar&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;unrar&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;       &lt;span class=&quot;s&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;*.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;zip&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;unzip&lt;/span&gt; &lt;span class=&quot;i&quot;&gt;$archive&lt;/span&gt; &lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;sc&quot;&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class=&quot;w&quot;&gt;esac&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;done&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;s&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;Let&#39;s say we want to unpack files that end in *bz2 (it will automagically detect .tar.bz2 or tbz2), *gz and a specific tar archive:&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;cmihai&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;@phobos&lt;/span&gt;&lt;span class=&quot;co&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;q&quot;&gt;/home/cmihai&lt;/span&gt;/&lt;span class=&quot;w&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;i&quot;&gt;$ up&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;g&lt;/span&gt;*&lt;span class=&quot;w&quot;&gt;bz2&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;c&lt;/span&gt;*&lt;span class=&quot;w&quot;&gt;gz&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;Python&lt;/span&gt;\&lt;span class=&quot;n&quot;&gt;-3.0&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;1.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;gnupg&lt;/span&gt;-&lt;span class=&quot;v&quot;&gt;1.4.10&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;bz2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;100&lt;/span&gt;% |**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**|  &lt;span class=&quot;n&quot;&gt;3330&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;296.95&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;/&lt;span class=&quot;q&quot;&gt;s    00:00&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;ETA&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;gnupg&lt;/span&gt;-&lt;span class=&quot;v&quot;&gt;2.0.14&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;bz2&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;100&lt;/span&gt;% |**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**|  &lt;span class=&quot;n&quot;&gt;3888&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;340.20&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;/&lt;span class=&quot;q&quot;&gt;s    00:00&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;ETA&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;ccache&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;2.4&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;gz&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;100&lt;/span&gt;% |**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**| &lt;span class=&quot;n&quot;&gt;86363&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;201.51&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;/&lt;span class=&quot;q&quot;&gt;s    00:00&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;ETA&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;w&quot;&gt;Python&lt;/span&gt;-&lt;span class=&quot;v&quot;&gt;3.0.1&lt;/span&gt;.&lt;span class=&quot;w&quot;&gt;tar&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;n&quot;&gt;91&lt;/span&gt;% |**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;***&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;**&lt;/span&gt;**&lt;span class=&quot;i&quot;&gt;*               |&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;43320&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;787.63&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;KB&lt;/span&gt;/&lt;span class=&quot;q&quot;&gt;s    05:00&lt;/span&gt; &lt;span class=&quot;w&quot;&gt;ETA&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;See: &lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot; white-space: normal;  font-family:Georgia, serif;&quot;&gt;&lt;a href=&quot;http://netbsd.gw.com/cgi-bin/man-cgi?progress++NetBSD-current&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:medium;&quot;&gt;http://netbsd.gw.com/cgi-bin/man-cgi?progress++NetBSD-current&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;w&quot;&gt;&lt;a href=&quot;http://mac.freshmeat.net/projects/bsdprogress/&quot;&gt;http://mac.freshmeat.net/projects/bsdprogress/&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;It builds fine on AIX (Makefile tweaks), Solaris and Linux. Native on NetBSD.&lt;/pre&gt;&lt;pre&gt;&lt;b&gt;Other versions:&lt;/b&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;http://clpbar.sourceforge.net/&quot;&gt;http://clpbar.sourceforge.net/&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;a href=&quot;http://freshmeat.net/projects/progress&quot;&gt;http://freshmeat.net/projects/progress&lt;/a&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=&quot;Apple-style-span&quot;   style=&quot; white-space: normal;  font-family:Georgia, serif;font-size:16px;&quot;&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.boreas.ro/feeds/2202235212499326607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/36470398/2202235212499326607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2202235212499326607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/36470398/posts/default/2202235212499326607'/><link rel='alternate' type='text/html' href='http://blog.boreas.ro/2010/01/unpack-functions-and-bsdprogress.html' title='Unpack functions and BSDProgress - progress bar for your archives.'/><author><name>cmihai</name><uri>http://www.blogger.com/profile/06014247302155057225</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUawHTH77TvY8n8TxnulNu5CkwNGnRgQPLdiwv3Ajy6PcSN-c8IkPtz_xCthFPrH4vqpJxaZVaNtGLU7UPfhyCi-iFd3jSBZNTi9Yy2fHld5vpsDzjH2XA3V_CQd1n6CY/s151/mihai.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqhicsTpGotWm-j-WRjzUKJIZ5wlhqVxDwTZFVArARGhOW9B82-cdnduI0Uy5n-cCPyOidFkJaprttLLKQ7gZTTK6MIHUQoc6vT8Dcah_KRdXV3Q9DIf-GDYlXX53mIh4QVjF/s72-c/bar-gup-unpacking.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>