{"id":24950,"date":"2017-06-21T17:25:07","date_gmt":"2017-06-21T14:25:07","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=24950"},"modified":"2017-09-27T18:54:18","modified_gmt":"2017-09-27T15:54:18","slug":"advanced-real-time-debugging-with-bluemix-live-sync","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/","title":{"rendered":"Real-Time Debugging in Production with Bluemix Live Sync"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Detecting_production_issues\" >Detecting production issues<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Live_code_syncronization\" >Live code syncronization<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Debugging_in_practice\" >Debugging in practice<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Conclusions\" >Conclusions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Related_video\" >Related video<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#Related_slides\" >Related slides<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#More_from_CF_Summit\" >More from CF Summit:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#About_the_speaker\" >About the speaker<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Detecting_production_issues\"><\/span>Detecting production issues<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>No matter what language is being used or what application is being developed, there&#8217;s one thing developers commonly experience. It&#8217;s reproducing bugs in production, according to Eugene Melnikov, IoT Engineer at Altoros.<\/p>\n<blockquote><p><i>&#8220;Sometimes, it&#8217;s easier to find aliens in space than investigate an issue in a production environment.&#8221; \u2014Eugene Melnikov, Altoros<\/i><\/p><\/blockquote>\n<p>To identify and reproduce a bug, a developer commonly tries out either of these efforts (or all of them at a time):<\/p>\n<ul>\n<li><strong>Redeployment.<\/strong> There could be no issue and you just forgot to deploy.<\/li>\n<li><strong>ENV variables.<\/strong> There could be some missing environment variables.<\/li>\n<li><strong>Logs.<\/strong> You can check the logs or add more logs if you find nothing.<\/li>\n<li><strong>Foreign code.<\/strong> There may be issues with transition dependencies or different versions of dependencies in the local and production environments.<\/l>\n<li><strong>Production database.<\/strong> It could be a data storage issue, so you may try to use the production database.<\/li>\n<li><strong>SSH.<\/strong> Finally, if the bug still cannot be detected within a local environment, you may connect to production and try reproducing the issue there.<\/li>\n<\/ul>\n<p>So, it takes a while to find the roots of a problem. Ideally, the process of investigating bugs should be carried out in the environment with same dependencies, buildpacks, and ENV variables.<\/p>\n<p>Prior to the event, Eugene had investigated Facebook and Chromium bug trackers. In his words, it usually takes &#8220;up to 3 days to reproduce and assign an issue to an appropriate team. Of course, I understand that there is a queue of issues, but just imagine: 3 day just to reproduce an issue!&#8221;<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-1.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-1.jpg\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs Eugene Melnikov 1\" width=\"640\" class=\"aligncenter size-full wp-image-25279\" \/><\/a><\/p>\n<blockquote><p><em>&#8220;The ideal investigation process should be in the production environment or really close to it.&#8221;<br \/>\n\u2014Eugene Melnikov, Altoros<\/em><\/p><\/blockquote>\n<p>However, according to Eugene, there is no vital necessity to stub or run something on localhost, while what one really may need is an advanced debugger. At <a href=\"https:\/\/www.altoros.com\/blog\/top-100-quotes-from-the-cloud-foundry-summit-silicon-valley-2017\/\">Cloud Foundry Summit 2017<\/a>, he described how IBM&#8217;s Bluemix Live Sync may be used as an alternative to the above-mentioned scenarios.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Live_code_syncronization\"><\/span>Live code syncronization<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><a href=\"https:\/\/cloud.ibm.com\/docs\/develop\/bluemixlive.html\" target=\"_blank\">Bluemix Live Sync<\/a> was designed to aid developers in building and debugging Node.js apps running on the IBM Bluemix platform. The tool enables developers to automatically synchronize the code with a web IDE workspace and deploy it to a running Bluemix app in real time. The in-built debugger allows for reproducing and fixing bugs right in the production deployment.<\/p>\n<p>&#8220;When you change the code in the web IDE or your own IDE, it uploads the changes to the workspace,&#8221; explained Eugene. If you are satisfied with the result, all the changes can be applied immediately with a click of a button.<\/p>\n<p>As an example, Eugene delivered a story of a customer who had a meeting with an investor in 5 minutes and called for urgent assistance, because his simple web prototype wasn&#8217;t working properly. The meeting was eventually cancelled, because redeploymemt would take at least 10 minutes.<\/p>\n<p><p>Another story involved Eugene looking for a bug all night long\u2014until he found that the issue was with secret keys in the production environment.<\/p>\n<p>With Bluemix Live Sync, the both problems could have been solved much faster. Of course, debugging in production is risky and needs to be carefully covered with tests later on, but when an app is already operating online and some of its functionality gets broken, speed really matters. Or, when you are creating a prototype\/POC, this approach may be really handy.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-overview.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-overview.png\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs overview\" width=\"640\" class=\"aligncenter size-full wp-image-24960\" \/><\/a><small>A workflow of Bluemix Live Sync<\/small><\/center><\/p>\n<p>What makes Bluemix Live Sync work is <a href=\"http:\/\/wiki.eclipse.org\/Orion\" target=\"_blank\">Eclipse Orion Web IDE<\/a> behind it; the IDE is integrated into IBM Bluemix Continuous Delivery service. As Eugene noted, the Orion IDE supports a Chrome debugger and also provides a web shell and logs.<\/p>\n<p>The main features of Bluemix Live Sync include <em>Live Edit<\/em> and <em>Live Debug<\/em>. <\/p>\n<p><b>Live Edit<\/b> allows for introducing changes to a Node.js app and checking if they work in real time\u2014right in the browser. With an app in the Live Edit mode, one is able to shell into the environment and debug the app. There are two major options to establish the debugging process. One uses Live Edit to propagate changes in a cloud-based project workspace to a  running application or switches to the Live Edit mode, thus instantly debugging the running app.<\/p>\n<p>With <b>Live Debug<\/b>, a user can dynamically edit code, insert breakpoints, step through code, restart the runtime, etc. Live Debug includes three major features: application runtime control, debugging via node-inspector, and shell access.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-debug-clients.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-debug-clients.png\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs debug clients\" width=\"640\" class=\"aligncenter size-full wp-image-24982\" \/><\/a><small>A Node Inspector view<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Debugging_in_practice\"><\/span>Debugging in practice<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Demonstrating a workspace, Eugene enumerated the main features of the editor:<\/p>\n<ul>\n<li>Hotkeys<\/li>\n<li>Drag-and-drop file upload<\/li>\n<li>Split mode to manage multiple files<\/li>\n<li>Integration with Git<\/li>\n<li>ESLint directives<\/li>\n<\/ul>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-editor.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-editor.png\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs editor\" width=\"640\" class=\"aligncenter size-full wp-image-24964\" \/><\/a><small>Eclipse Orion Web IDE editor view<\/small><\/center><\/p>\n<p>To get started, one needs to create a <a href=\"https:\/\/www.ibm.com\/cloud\/garage\/tutorials\/tutorial_toolchain_flow?task=2\" target=\"_blank\">toolchain<\/a>. As Eugene emphasized, you&#8217;d better create a custom toolchain rather than use pre-existing ones to avoid having tools that are not going to be exploited.<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-3.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-3.jpg\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs Eugene Melnikov 3\" width=\"640\" class=\"aligncenter size-full wp-image-25282\" \/><\/a><\/p>\n<p>On creating a toolchain and configuring the deployment, a developer will have the following utilities installed by default:<\/p>\n<ul>\n<li><strong>Devconsole<\/strong> to restart applications and get access to shell or inspector<\/li>\n<li><strong>Shell<\/strong> for your container<\/li>\n<li><strong>Inspector<\/strong> for Node.js<\/li>\n<li><strong>Proxy\/Noproxy<\/strong> enabled by devconsole<\/li>\n<li><strong>Hc<\/strong> integration with Bluemix Health Center<\/li>\n<li><strong>Trace<\/strong> for setting up logs<\/li>\n<\/ul>\n<p>To enable these utilities, an ENV variable needs to be set from the CLI or put into <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">manifest.yml<\/code>.<\/p>\n<p>Using debugger, developers can redeploy, open or stop the app, check logs, and view the application dashboard. Alternatively, developers have the option to view and fix issues through the web shell. However, before using a shell or a debugger, developers have to enter credentials or provide a one-time passcode, because the sources are secured. The passcode can de generated online on the go.<\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-2.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-Eugene-Melnikov-2.jpg\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs Eugene Melnikov 2\" width=\"640\" class=\"aligncenter size-full wp-image-25295\" \/><\/a><\/p>\n<blockquote><p><em>&#8220;Nobody can access your web shell and nobody can debug your application without your permission.&#8221; \u2014Eugene Melnikov, Altoros<\/em><\/p><\/blockquote>\n<p>Different debugging clients are available depending on the Node.js version being used:<\/p>\n<ul>\n<li>The Node Inspector<\/li>\n<li>Chrome Developer Tools<\/li>\n<li>Visual Studio<\/li>\n<li>JetBrains WebStorm<\/li>\n<\/ul>\n<p>Eugene pointed out that it was possible to synchronize workspaces without a web IDE previously\u2014by using the Bluemix CLI. However, this functionality was removed with Bluemix&#8217;s transition from JazzHub to toolchains. He explained that once this feature gets reintroduced, developers would no longer need a web IDE.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-shell.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs-shell.png\" alt=\"CF Summit 2017 Silicon Valley Bluemix Live Edit Sync Nodejs shell\" width=\"640\" class=\"aligncenter size-full wp-image-24979\" \/><\/a><small>A web shell view<\/small><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Conclusions\"><\/span>Conclusions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>At the end, Eugene summed up the pros and cons of using Bluemix Live Sync for debugging. In addition to being fast and easy to use, the tool allows for debugging right in a production environment without redeploying the app. However, Bluemix Live Sync is currently supported by only two buildpacks: Node.js SDK and Liberty for Java. For other languages, developers will have to create SSH tunnels using the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">cf ssh<\/code> command.<\/p>\n<p>What can also cause some inconvenience is the tool&#8217;s availability only on the web\u2014in case you prefer to work in a local IDE. However, it seems to be temporary, since the Bluemix team is working on addressing this.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/cloud-foundry-summit-2017-eugene-melnikov-how-to-develop-and-debug-a-nodejs-app-with-bluemix-live-sync-without-redeployment.jpg\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/cloud-foundry-summit-2017-eugene-melnikov-how-to-develop-and-debug-a-nodejs-app-with-bluemix-live-sync-without-redeployment.jpg\" alt=\"cloud-foundry-summit-2017-eugene-melnikov-how-to-develop-and-debug-a-nodejs-app-with-bluemix-live-sync-without-redeployment\" width=\"640\" class=\"aligncenter size-full wp-image-25324\" \/><\/a><\/center><\/p>\n<p>To get started with the product, check out <a href=\"https:\/\/cloud.ibm.com\/docs\/develop\/bluemixlive.html\" target=\"_blank\">Bluemix Live Sync docs<\/a>, IBM&#8217;s <a href=\"https:\/\/www.ibm.com\/cloud\/garage\/tutorials\/tutorial_toolchain_flow?task=2\" target=\"_blank\">toolchain how-to<\/a>, and this <a href=\"https:\/\/console.bluemix.net\/docs\/services\/ContinuousDelivery\/web_ide.html#web_ide\" target=\"_blank\">Orion Web IDE tutorial<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_video\"><\/span>Related video<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/h5Id3yikkNg\" frameborder=\"0\" allowfullscreen><\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Related_slides\"><\/span>Related slides<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><center><iframe loading=\"lazy\" src=\"\/\/www.slideshare.net\/slideshow\/embed_code\/key\/AgzuNSdLTONjqQ\" width=\"595\" height=\"485\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\" style=\"border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;\" allowfullscreen> <\/iframe><\/center><\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"More_from_CF_Summit\"><\/span>More from CF Summit:<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/top-100-quotes-from-the-cloud-foundry-summit-silicon-valley-2017\/\">Top 100 Quotes from Cloud Foundry Summit Silicon Valley 2017<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/from-hybrid-to-multi-cloud-seeking-order-amidst-enterprise-it-chaos\/\">From Hybrid to Multi-Cloud: Seeking Order Amidst Enterprise IT Chaos<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/which-of-the-new-cloud-foundry-features-save-devops-time-most\/\">Which of the New Cloud Foundry Features Save DevOps Time Most?<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/over-engineering-when-microservices-are-too-micro\/\">Over-Engineering: When Microservices Are Too \u201cMicro\u201d<\/a><\/li>\n<\/ul>\n<hr\/>\n<h3><span class=\"ez-toc-section\" id=\"About_the_speaker\"><\/span>About the speaker<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div>\n<div style=\"float: right;\"><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Melnikov-altoros-bio.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/Eugene-Melnikov-altoros-bio.png\" alt=\"Eugene Melnikov, altoros bio\" width=\"150\" height=\"150\" class=\"aligncenter size-full wp-image-24958\" \/><\/a><\/div>\n<div style=\"width: 600px;\"><small><b>Eugene Melnikov<\/b> is a senior software engineer at Altoros. He mainly specializes in Ruby and Ruby-based frameworks, as well as in JavaScript development, including Node.js, jQuery, and AngularJS. Working at Altoros, Eugene has also designed and implemented a variety of SQL and NoSQL database solutions. He recently became engaged in creating data-driven software for IoT applications. Check out Eugene&#8217;s <a href=\"https:\/\/github.com\/melnikaite\">GitHub profile<\/a>.<\/small><\/div>\n<\/div>\n<hr\/>\n<p><center><small>This post was written by <a href=\"https:\/\/www.altoros.com\/blog\/author\/carlo\/\">Carlo Gutierrez<\/a>, <a href=\"https:\/\/www.altoros.com\/blog\/author\/eugene-melnikov\/\">Eugene Melnikov<\/a>, <a href=\"https:\/\/www.altoros.com\/blog\/author\/carlo\/\">Alex Khizhniak<\/a>, and <a href=\"https:\/\/www.altoros.com\/blog\/author\/sophie.turol\/\">Sophie Turol<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Detecting production issues<\/p>\n<p>No matter what language is being used or what application is being developed, there&#8217;s one thing developers commonly experience. It&#8217;s reproducing bugs in production, according to Eugene Melnikov, IoT Engineer at Altoros.<\/p>\n<p>&#8220;Sometimes, it&#8217;s easier to find aliens in space than investigate an issue in a production environment.&#8221; \u2014Eugene [&#8230;]<\/p>\n","protected":false},"author":32,"featured_media":25306,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[208,873,187],"class_list":["post-24950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cf-summit","tag-cloud-native","tag-ibm-bluemix"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Real-Time Debugging in Production with Bluemix Live Sync | Altoros<\/title>\n<meta name=\"description\" content=\"This article describes how Bluemix Live Sync may help Node.js engineers to troubleshoot bugs in production without redeployment.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Real-Time Debugging in Production with Bluemix Live Sync | Altoros\" \/>\n<meta property=\"og:description\" content=\"Detecting production issues No matter what language is being used or what application is being developed, there&#8217;s one thing developers commonly experience. It&#8217;s reproducing bugs in production, according to Eugene Melnikov, IoT Engineer at Altoros. &#8220;Sometimes, it&#8217;s easier to find aliens in space than investigate an issue in a production environment.&#8221; \u2014Eugene [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-21T14:25:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-09-27T15:54:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Carlo Gutierrez\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlo Gutierrez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/\",\"name\":\"Real-Time Debugging in Production with Bluemix Live Sync | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif\",\"datePublished\":\"2017-06-21T14:25:07+00:00\",\"dateModified\":\"2017-09-27T15:54:18+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Real-Time Debugging in Production with Bluemix Live Sync\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442\",\"name\":\"Carlo Gutierrez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg\",\"caption\":\"Carlo Gutierrez\"},\"description\":\"Carlo Gutierrez is a Technical Writer at Altoros. As part of the editorial team, his focus has been on emerging technologies such as Cloud Foundry, Kubernetes, blockchain, and the Internet of Things. Prior to Altoros, he primarily wrote about enterprise and consumer technology. Carlo has over 12 years of experience in the publishing industry. Previously, he served as an Editor for PC World Philippines and Questex Asia, as well as a Designer for Tropa Entertainment.\",\"url\":\"https:\/\/www.altoros.com\/blog\/author\/carlo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Real-Time Debugging in Production with Bluemix Live Sync | Altoros","description":"This article describes how Bluemix Live Sync may help Node.js engineers to troubleshoot bugs in production without redeployment.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/","og_locale":"en_US","og_type":"article","og_title":"Real-Time Debugging in Production with Bluemix Live Sync | Altoros","og_description":"Detecting production issues No matter what language is being used or what application is being developed, there&#8217;s one thing developers commonly experience. It&#8217;s reproducing bugs in production, according to Eugene Melnikov, IoT Engineer at Altoros. &#8220;Sometimes, it&#8217;s easier to find aliens in space than investigate an issue in a production environment.&#8221; \u2014Eugene [...]","og_url":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/","og_site_name":"Altoros","article_published_time":"2017-06-21T14:25:07+00:00","article_modified_time":"2017-09-27T15:54:18+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif","type":"image\/gif"}],"author":"Carlo Gutierrez","twitter_misc":{"Written by":"Carlo Gutierrez","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/","url":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/","name":"Real-Time Debugging in Production with Bluemix Live Sync | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif","datePublished":"2017-06-21T14:25:07+00:00","dateModified":"2017-09-27T15:54:18+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2017\/06\/CF-Summit-2017-Silicon-Valley-Bluemix-Live-Edit-Sync-Nodejs.gif","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/advanced-real-time-debugging-with-bluemix-live-sync\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Real-Time Debugging in Production with Bluemix Live Sync"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/833e109f77de753b2b472dca0236b442","name":"Carlo Gutierrez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2021\/02\/CG_portrait-2-96x96.jpg","caption":"Carlo Gutierrez"},"description":"Carlo Gutierrez is a Technical Writer at Altoros. As part of the editorial team, his focus has been on emerging technologies such as Cloud Foundry, Kubernetes, blockchain, and the Internet of Things. Prior to Altoros, he primarily wrote about enterprise and consumer technology. Carlo has over 12 years of experience in the publishing industry. Previously, he served as an Editor for PC World Philippines and Questex Asia, as well as a Designer for Tropa Entertainment.","url":"https:\/\/www.altoros.com\/blog\/author\/carlo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/24950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=24950"}],"version-history":[{"count":92,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/24950\/revisions"}],"predecessor-version":[{"id":26106,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/24950\/revisions\/26106"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/25306"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=24950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=24950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=24950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}