{"componentChunkName":"component---src-templates-blog-list-jsx","path":"/blog/17/","result":{"data":{"prismic":{"allFeaturedblogs":{"edges":[{"node":{"featured_blogs_enabled":true,"heading":[{"type":"paragraph","text":"Featured posts","spans":[]}],"featured_blog_1":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":395},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/6d8d81b1-971a-4313-b033-b4e125cb14a0_MondoDB-blog-header-790x395.PNG?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing DigitalOcean Managed MongoDB – a fully managed, database as a service for modern apps","spans":[]}],"blog_post_date":"2021-06-29","blog_post_content":[{"type":"paragraph","text":"MongoDB is one of the most popular databases, and it’s ideal for apps that evolve rapidly and need to handle huge volumes of data and traffic. It offers advantages like flexible document schemas, code-native data access, change-friendly design, and easy horizontal scale-out.","spans":[{"start":22,"end":44,"type":"hyperlink","data":{"link_type":"Web","url":"https://db-engines.com/en/ranking","target":"_blank"}}]},{"type":"paragraph","text":"However, building and maintaining MongoDB clusters from the ground up can be a huge undertaking. Developers often complain that they have to spend their valuable time and resources on database management. Well, we’ve been listening and have some great news: accessing and managing MongoDB on DigitalOcean just got a lot simpler!","spans":[]},{"type":"paragraph","text":"We are excited to announce that DigitalOcean Managed MongoDB is now in General Availability. Managed MongoDB is a fully managed, database as a service (DBaaS) offering from DigitalOcean, built in partnership with and certified by MongoDB Inc. It provides you all the technical capabilities that make MongoDB so beloved in the developer community. Together we have ensured that you will get access to all the latest releases of the MongoDB document database as they become available.","spans":[{"start":32,"end":91,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases-mongodb/"}},{"start":230,"end":241,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/","target":"_blank"}}]},{"type":"paragraph","text":"Managed MongoDB simplifies the MongoDB administration. Developers of all skill levels, even those who do not have prior experience in databases, can spin up MongoDB clusters in just a few minutes. We handle the provisioning, managing, scaling, updates, backups, and security of your MongoDB clusters, allowing you to offload the complex, time consuming –yet critical – database administration tasks to us. This empowers you to focus on what really matters: building awesome apps.","spans":[]},{"type":"embed","oembed":{"height":113,"width":200,"embed_url":"https://www.youtube.com/watch?v=NvHQSV7jnKA","type":"video","version":"1.0","title":"Create a MongoDB Database on DigitalOcean","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","provider_name":"YouTube","provider_url":"https://www.youtube.com/","cache_age":null,"thumbnail_url":"https://i.ytimg.com/vi/NvHQSV7jnKA/hqdefault.jpg","thumbnail_width":480,"thumbnail_height":360,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/NvHQSV7jnKA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"heading2","text":"Benefits of Managed MongoDB","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"list-item","text":"Easy set up and maintenance: We create the database clusters for you. Simply choose the cluster configuration (e.g., memory, disk size, number of nodes, etc.), and the data center in which you want to host the database. Follow a few simple steps and your database cluster will be up and running in a matter of minutes. You can spin up clusters using the cloud control panel, CLI, or API.\n\n","spans":[{"start":0,"end":28,"type":"strong"}]},{"type":"list-item","text":"Automatic daily backups with point in time recovery: Data is one of the most important assets of an app, so it’s critical to backup your database. We take backups of your entire clusters automatically on a daily basis, for free. We also provide a point in time recovery for 7 days, that way if things go wrong due to human error, machine error, or some combination of both, you can easily restore the database as it was at any point in the previous 7 days. \n\n","spans":[{"start":0,"end":52,"type":"strong"}]},{"type":"list-item","text":"Automatic updates and access to latest MongoDB releases: You get access to MongoDB 4.4. This is the latest release of MongoDB and comes packed with numerous enhancements like hedged reads, rust, and swift drivers. Since we have developed Managed MongoDB in partnership with MongoDB Inc, you will always get access to new releases as they become available. With Managed MongoDB, the updates happen automatically. Just select a date and time for the updates and we take care of the rest. This makes it easy to stay up to date with MongoDB releases without disrupting your business.\n\n","spans":[{"start":0,"end":56,"type":"strong"},{"start":148,"end":169,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mongodb.com/new","target":"_blank"}}]},{"type":"list-item","text":"High availability with automated failover: If your database goes down, it can take down the entire app, leading to bad customer experiences. With Managed MongoDB, you can easily minimize the downtime for your database and make it highly available with standby nodes. Standby nodes add redundancy, so if for example the primary node fails, the standby node is immediately promoted to primary and begins serving requests while we provision a replacement standby node in the background.\n\n","spans":[{"start":0,"end":42,"type":"strong"}]},{"type":"list-item","text":"Scale up easily to handle traffic spikes: As your app gains traction and the usage grows, it’s important to have a database that can keep up with the increased demand. With Managed MongoDB, you can easily scale up the size of database nodes when needed.\n\n","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Secure by default: Since data is critical, it also needs to be secure. We encrypt data at rest with LUKS and in transit with SSL. When you create a new cluster, it’s placed in a VPC network by default that provides a more secure connection between resources. You can also restrict access to your nodes to prevent brute-force password and denial-of-service attacks.","spans":[{"start":0,"end":18,"type":"strong"},{"start":178,"end":189,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/networking/vpc/"}}]},{"type":"heading2","text":"The need for Managed Databases","spans":[]},{"type":"paragraph","text":"DigitalOcean’s mission is to simplify cloud computing so developers, startups, and SMBs can spend more time building software that changes the world. While databases are a critical component to any application, building, maintaining, and scaling them can be complex and time consuming. For developers that are building apps for their business, database administration is often not a core focus area. But it’s quite common to find developers that write the code and then also roll up their sleeves to maintain databases. Such users would rather offload the tedious database administration and focus their limited time and energy on building and enhancing their apps. ","spans":[]},{"type":"paragraph","text":"With this in mind, we introduced Managed Databases a couple of years ago and are excited to add Managed MongoDB to our portfolio. With this release, DigitalOcean Managed Databases now supports the following engines:","spans":[{"start":33,"end":50,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/managed-databases/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/87745cc1-1c5f-4463-b104-104b7fc30dc7_managed-databases-logos.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":849,"height":104}},{"type":"paragraph","text":"Managed MongoDB launch comes on the heels of DigitalOcean App Platform, a modern, reimagined PaaS (Platform as a Service) that we released a few months ago. App Platform makes it very easy to build, deploy, and scale apps and static sites. You can deploy code by simply pointing to your GitHub and GitLab repos, and App Platform will do all the heavy lifting of managing infrastructure, app runtimes, and dependencies. App Platform, along with Managed Databases, helps fulfill DigitalOcean’s mission by empowering developers, startups, and SMBs to focus more on their apps, and less on the underlying infrastructure and databases.","spans":[{"start":45,"end":70,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"heading2","text":"How Managed MongoDB works","spans":[]},{"type":"paragraph","text":"DigitalOcean provides you with various compute options to build your apps like:","spans":[]},{"type":"list-item","text":"Droplets: On-demand, Linux virtual machines suitable for production business applications and personal passion projects.","spans":[{"start":0,"end":8,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/droplets/"}}]},{"type":"list-item","text":"DigitalOcean Kubernetes: Managed Kubernetes with automatic scaling, upgrades, and a free control plane.","spans":[{"start":0,"end":23,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/kubernetes/"}}]},{"type":"list-item","text":"DigitalOcean App Platform: A fully managed Platform as a Service.","spans":[{"start":0,"end":25,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/app-platform/"}}]},{"type":"paragraph","text":"No matter which compute option you choose to build your apps, you can easily add Managed MongoDB to it. In addition to this, Managed MongoDB also integrates with the Node.js 1-Click App from DigitalOcean Marketplace making it a lot easier to build Node.js apps.","spans":[{"start":166,"end":215,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/apps/nodejs"}}]},{"type":"heading2","text":"Simple, predictable pricing","spans":[]},{"type":"paragraph","text":"Just like all DigitalOcean products, Managed MongoDB provides simple, predictable pricing that allows you to control costs and prevent any surprise bills. You can spin up a database cluster for just $15/month, or a highly available three-node replica set for $45/month. Click here for more information.","spans":[{"start":270,"end":301,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/#managed-databases"}}]},{"type":"heading2","text":"Regional availability","spans":[]},{"type":"paragraph","text":"Managed MongoDB is currently available in the following regions:","spans":[]},{"type":"list-item","text":"NYC3 (New York, USA)","spans":[]},{"type":"list-item","text":"FRA1 (Frankfurt, Germany)","spans":[]},{"type":"list-item","text":"AMS3 (Amsterdam, Netherlands)","spans":[]},{"type":"paragraph","text":"We will be making Managed Mongo available in other regions soon. Please check out the release notes for most up to date information on regional availability.","spans":[{"start":86,"end":99,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/docs/release-notes/"}}]},{"type":"heading2","text":"Join us at deploy, DigitalOcean’s virtual user conference","spans":[]},{"type":"paragraph","text":"Today we have deploy, DigitalOcean’s signature user conference, which focuses on celebrating, educating, and connecting awesome builders from all over the world.","spans":[{"start":14,"end":20,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/home"}}]},{"type":"paragraph","text":"Check out the keynote session from DigitalOcean's CEO, Yancey Spruill, in which he talks about where we're headed as a company and shares some exciting product updates. His keynote will be followed by sessions from community members, engineers, customers, and other experts that are building technologies and businesses powered by the cloud. With live Q&A and an active Discord server, there’s ample opportunity to engage and learn something new. Click here to attend the deploy conference.","spans":[{"start":14,"end":69,"type":"hyperlink","data":{"link_type":"Web","url":"https://deploy.digitalocean.com/agenda/session/552806"}},{"start":347,"end":384,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy-discord"}},{"start":461,"end":489,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/deploy"}}]},{"type":"paragraph","text":"We are also launching a hackathon for DigitalOcean Managed MongoDB. Learn how you can participate, submit an app and get a t-shirt.","spans":[{"start":24,"end":66,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/mongodb-hackathon"}}]},{"type":"paragraph","text":"We hope you will give Managed MongoDB a try. Here are some sample datasets and sample apps that you can use to kick the tires. Check out the docs and let us know what you think!","spans":[{"start":22,"end":43,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/databases/new?engine=mongodb"}},{"start":59,"end":90,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/do-community/mongodb-resources","target":"_blank"}},{"start":141,"end":145,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/databases/mongodb/"}}]},{"type":"paragraph","text":"If you’d like to have a conversation about using DigitalOcean and Managed MongoDB in your business, please feel free to contact our sales team.","spans":[{"start":120,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/contact/sales/"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"André Bearfield","spans":[]},{"type":"paragraph","text":"Director of Product Management","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"André Bearfield","author_image":{"dimensions":{"width":553,"height":547},"alt":"André Bearfield","copyright":null,"url":"https://images.prismic.io/www-static/fdc7c85186f0a850b04083e1d4306bd1c19772e8_andre-bearfield.png?auto=compress,format"},"_meta":{"uid":"andre-bearfield"}},"_meta":{"uid":"introducing-digitalocean-managed-mongodb"}},"featured_blog_2":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":"Droplet Console","copyright":null,"url":"https://images.prismic.io/www-static/710499ae-78cc-4179-afc1-15793637b200_DODX3727-790x400-logo-2.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Securely connect to Droplets with SSH key pairs using a new Droplet Console","spans":[]}],"blog_post_date":"2021-08-10","blog_post_content":[{"type":"paragraph","text":"The famous author Ken Blanchard once said, “Feedback is the breakfast of champions.\" This is something we truly believe at DigitalOcean, and we always strive to enhance our products based on customer feedback.","spans":[]},{"type":"paragraph","text":"With this goal in mind, we are excited to introduce a new Droplet Console that will make it much easier to connect to your Droplets securely. The new Droplet Console provides one-click SSH access to your Droplets through a native-like SSH/Terminal experience. It also eliminates the need for a password or manual configuration of SSH keys. Starting today, we’re pleased to announce that the new Droplet Console is now available to all Droplet users.","spans":[]},{"type":"heading2","text":"Why you should be using Secure Shell (SSH) ","spans":[]},{"type":"paragraph","text":"Password-based security is notoriously insecure due to password fatigue and the overuse of passwords such as ‘123456’. Secure Shell or SSH is a network communication protocol that solves this by using passwordless solutions for encryption, enabling two computers to communicate and securely share data. At a high level, SSH works by creating cryptographic key pairs consisting of a public and private key, which are computer generated and stored separately to ensure their security. ","spans":[{"start":80,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://cybernews.com/best-password-managers/most-common-passwords/"}}]},{"type":"paragraph","text":"SSH has become the default encryption protocol for many industries, but it was difficult to use SSH keys with DigitalOcean’s current Recovery (VNC) console, which is why we developed our new Droplet Console. The new Droplet Console is backed by an agent that security supervises the key pair, while also providing one-click SSH access to our users. You can see the full list of features below.","spans":[]},{"type":"heading2","text":"The new Droplet Console: More time saving, less time wasting ","spans":[]},{"type":"paragraph","text":"The new Droplet Console is for everyone who is looking to build fast, secure apps and avoid hassles with SSH access & usability issues.","spans":[]},{"type":"paragraph","text":"In addition to easier SSH access, the new Droplet Console comes with:","spans":[]},{"type":"list-item","text":"Copy/paste text: Instead of typing lengthy key pairs and text manually, you can use copy/paste to save time. ","spans":[{"start":0,"end":17,"type":"strong"}]},{"type":"list-item","text":"Multi-color support: Multi-color support makes the console more useful and intuitive, and breaks the conventional standard appearance which is black text on a white background. ","spans":[{"start":0,"end":41,"type":"strong"}]},{"type":"list-item","text":"Multi-language support: DigitalOcean’s new Droplet Console supports multiple languages, meaning you can now type and view any content in any language that is supported by UTF-8","spans":[{"start":0,"end":24,"type":"strong"}]},{"type":"list-item","text":"OS/images supported: Linux distributions (Ubuntu(16.04 - 20.04), Fedora (32 & 33), Debian (9), CentOS (7.6 & 8.3), CentOS 8 Stream, Rocky Linux and Marketplace images.","spans":[{"start":0,"end":20,"type":"strong"},{"start":148,"end":159,"type":"hyperlink","data":{"link_type":"Web","url":"https://marketplace.digitalocean.com/"}}]},{"type":"paragraph","text":"The new Droplet Console is available by default on any new Droplets you spin up. You can also enable it manually on older Droplets. Click here to learn more!","spans":[{"start":132,"end":157,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.digitalocean.com/products/droplets/how-to/connect-with-console/"}}]},{"type":"paragraph","text":"Check out this short walkthrough video that shows the new Droplet Console in action: ","spans":[]},{"type":"embed","oembed":{"type":"video","embed_url":"https://www.youtube.com/watch?v=Qt7QihVuxiE","title":"Access Your Droplet Terminal Through the Web Console","provider_name":"YouTube","thumbnail_url":"https://i.ytimg.com/vi/Qt7QihVuxiE/hqdefault.jpg","provider_url":"https://www.youtube.com/","author_name":"DigitalOcean","author_url":"https://www.youtube.com/c/Digitalocean","height":113,"width":200,"version":"1.0","thumbnail_height":360,"thumbnail_width":480,"html":"<iframe width=\"200\" height=\"113\" src=\"https://www.youtube.com/embed/Qt7QihVuxiE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"}},{"type":"paragraph","text":"We hope you’re excited about the new Droplet Console. You’re welcome to spin some Droplets up right now, and try out the new Droplet Console – why wait?","spans":[{"start":72,"end":103,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new"}}]},{"type":"paragraph","text":"Happy coding!","spans":[]},{"type":"paragraph","text":"Harsh Banwait, Senior Product Manager","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Harsh Banwait","author_image":{"dimensions":{"width":600,"height":399},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/e83ff690-b20c-4d88-a2b6-57e562558cd6_download.png?auto=compress,format"},"_meta":{"uid":"harsh-banwait"}},"_meta":{"uid":"new-droplet-console-ssh-support"}},"featured_blog_3":{"__typename":"PRISMIC_Blog","_linkType":"Link.document","blog_header_image":{"dimensions":{"width":790,"height":400},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/588e28d3-d41e-480b-937b-8c3b19201f6e_DODX3568-790x400-Blog.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"How to scale your SaaS product without breaking the bank","spans":[]}],"blog_post_date":"2021-06-22","blog_post_content":[{"type":"paragraph","text":"These days, if you are in the business of software, chances are you are delivering or plan to deliver your services using a Software-as-a-Service (SaaS) model. A combination of internet-based delivery, subscription-based pricing, and low-friction product experiences have made SaaS solutions valuable tools for their users, and an excellent vehicle for software builders looking to distribute their products.","spans":[]},{"type":"paragraph","text":"These factors have made SaaS solutions ubiquitous; SaaS is the largest segment in the public cloud market, and is used to provide functionality ranging from personal finance apps for consumers, to productivity software for businesses, and even tools and services for software developers themselves to compose their applications and simplify their workflows. It is also not uncommon to find micro-SaaS applications being built for specific industries such as retail, job functions such as accounting or marketing, or tasks such as event management. ","spans":[]},{"type":"paragraph","text":"The best thing about this SaaS wave has been that it has allowed a new generation of software builders to build and monetize applications and participate in the digital economy. Previously, you had to be a big company with lots of resources, name recognition and distribution networks to successfully sell software products. Now, irrespective of whether you are a single person working on a passion project, a small team of developers in a startup, or a small and medium-sized business (SMB), the SaaS model enables you to express your ideas in the form of software and deliver them to customers anywhere in the world.","spans":[]},{"type":"heading2","text":"The unique challenges of building SaaS solutions","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Despite the opportunities that come with the widespread adoption of SaaS products, software builders still have to answer key questions in their journey to building successful SaaS products. Understanding what customers to target, features to prioritize, how to price your product, and how to acquire customers are all critical questions to figure out while you are also doing the important job of actually building and operating the product. ","spans":[]},{"type":"paragraph","text":"Writing the code, testing, deployment, monitoring the usage in production, and ensuring that your apps are able to handle the additional demand when customer base and usage grows are all essential and time-consuming tasks.","spans":[]},{"type":"paragraph","text":"Additionally, being able to test multiple ideas, pivot, and double down on the ideas that actually work is critical in early stages of SaaS development. Once growth comes, it is equally important to scale up without compromising on performance or reliability. Needless to say, all of this needs to be economically viable as well, since not everyone has the resources of large SaaS providers like Salesforce or Adobe.","spans":[]},{"type":"heading2","text":"Cloud Computing enables builders but also poses challenges","spans":[]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Fortunately, for the act of building and operating your apps, cloud computing can help take some load off your shoulders. Unless you have the scale and resources of Facebook, chances are you are not going to set up your own data centers to host the computing infrastructure that powers your SaaS company. Public cloud infrastructure providers can bring great value to SaaS builders by providing on-demand computing services with usage-based pricing. However, just like how the legacy software companies weren't built for the SaaS model, the early (and big) cloud computing services were not optimized for the unique needs of small SaaS building teams. ","spans":[]},{"type":"paragraph","text":"Smaller SaaS teams face challenges with large cloud computing providers, including:","spans":[]},{"type":"heading4","text":"Too many technology options","spans":[]},{"type":"paragraph","text":"There are just too many options for tech stacks on which to build your SaaS - programming languages, application development frameworks, libraries, runtime environments, architectural patterns, and deployment models - and the list is growing by the day.","spans":[]},{"type":"heading4","text":"Complexity of cloud computing services","spans":[]},{"type":"paragraph","text":"Even when you have decided on a technology stack, there is a lot of cloud vendor-specific terminology you need to learn and heavy lifting you need to do to build on the cloud, not all of which contributes to making your SaaS applications successful.","spans":[]},{"type":"heading4","text":"Unpredictable costs","spans":[]},{"type":"paragraph","text":"The experimentation necessary in early stages of SaaS development, as well as the scaling of applications required during the growth phase, call for affordable and predictable pricing from your cloud provider. The last thing SaaS teams want is surprising and indecipherable bills from your cloud provider. Unfortunately, smaller businesses often experience unpredictable costs with cloud providers who are busy serving only the large enterprises.","spans":[]},{"type":"heading2","text":"DigitalOcean provides a simple, cost effective solution for SaaS builders","spans":[]},{"type":"paragraph","text":"Fortunately, at DigitalOcean we have a laser focus on small software development teams, who are trying to build the next generation of applications. Today, DigitalOcean customers are already building SaaS applications which serve all kinds of customers.","spans":[{"start":191,"end":217,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/solutions/saas/"}}]},{"type":"paragraph","text":"We believe SaaS builders should focus on building apps that power their business, and not spend their valuable time on managing infrastructure. That is exactly what we have been able to enable through our intuitive products that are built for scale and reliability.","spans":[{"start":205,"end":223,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/"}}]},{"type":"list-item","text":"Vidazoo is an advertising technology company specializing in video streaming and serving. It serves video ads to thousands of websites and handles close to 10 billion requests per day. \n\n“We are as much a data company as an adtech company. Our business relies on speedy and accurate data processing at massive scale. DigitalOcean provides us the perfect set of tools to operate our SaaS business profitably, while not making us feel the need to become full time system administrators. We plan to move a lot of our apps to DigitalOcean App Platform and other fully managed products.” - Roman Svichar, CTO of Vidazoo","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://vidazoo.com/"}},{"start":187,"end":583,"type":"em"}]},{"type":"paragraph","text":"We believe in meeting customers where they are. If they already have an understanding of cloud infrastructure technologies, they should be able to leverage that knowledge and get started with our products without any further ramp up.","spans":[]},{"type":"list-item","text":"Whatfix is an enterprise SaaS provider that offers a digital adoption platform to businesses. The company helps enterprises gain the full value of their investments in enterprise applications by providing real-time, interactive, and contextual guidance to users of those applications. \n\n“What we really love about the DigitalOcean platform is the ease of use. We feel like we know infrastructure and can handle most of the configuration and management. What we needed from a cloud was not bells and whistles but efficiency and reliability. DigitalOcean provides us a platform to build our apps and then gets out of the way. Just how we like it.” - Achyuth Krishna, Director of Engineering of Whatfix","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://whatfix.com/blog/driving-the-future-now-were-excited-to-announce-our-90-million-series-d-funding/"}},{"start":287,"end":648,"type":"em"}]},{"type":"paragraph","text":"We understand that scaling while maintaining reliability of applications and profitability of business is important, so we provide robust solutions which minimize downtime.","spans":[]},{"type":"list-item","text":"Centra is a SaaS-based e-commerce platform for global direct-to-consumer and wholesale e-commerce brands. Centra provides a powerful e-commerce backend that lets brands build pixel-perfect, custom designed, online flagship stores. \n\n“How do we enable our customers to create differentiated online experiences? How do we ensure their e-commerce apps stay up and running at all times? How do we scale on-demand when traffic grows or new customers come in? These are the questions that we ask ourselves every day. Thankfully, we have a partner in DigitalOcean that provides just the platform to answer those questions enabling us to guarantee 99.9% uptime for our clients.” - Martin Jensen, CEO of Centra","spans":[{"start":0,"end":6,"type":"hyperlink","data":{"link_type":"Web","url":"https://centra.com/"}},{"start":233,"end":673,"type":"em"}]},{"type":"paragraph","text":"These are just a few examples of SaaS businesses finding success on DigitalOcean. We are constantly amazed by the creativity and innovation that software builders are utilizing our platform for. If you are interested in learning more about product updates, technical deep-dives and best practices for building SaaS products and businesses, please contact us to learn how we can help you get started. ","spans":[{"start":340,"end":357,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"Come build with DigitalOcean!","spans":[]},{"type":"paragraph","text":"Looking to migrate your SaaS to DigitalOcean? Leverage free infrastructure credits, robust training, and technical support to ensure a worry-free migration.","spans":[{"start":0,"end":156,"type":"strong"},{"start":0,"end":156,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/migrate/?utmmedium=blog","target":"_blank"}}]},{"type":"paragraph","text":"","spans":[]},{"type":"paragraph","text":"Raman Sharma","spans":[]},{"type":"paragraph","text":"Vice President, Product & Programs Marketing","spans":[]}],"tags":[{"tag1":{"__typename":"PRISMIC_Tag","tag":"Developer Relations","_linkType":"Link.document","_meta":{"uid":"developer-relations"}}}],"author":{"__typename":"PRISMIC_Author","author_name":"Raman Sharma","author_image":{"dimensions":{"width":512,"height":512},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/497b4b14-d192-493a-8b66-7ae176ba99f3_raman.png?auto=compress,format"},"_meta":{"uid":"raman-sharma"}},"_meta":{"uid":"how-to-scale-your-saas-product-without-breaking-the-bank"}}}}]}}},"pageContext":{"limit":12,"skip":192,"numPages":33,"currentPage":17,"data":[{"node":{"author":{"_linkType":"Link.document","author_name":"Olivia Melman","author_image":{"dimensions":{"width":188,"height":188},"alt":"Olivia Melman","copyright":null,"url":"https://images.prismic.io/www-static/97e5d587f18906403012119062c207ae04ec0d5e_olivia_melman-c8621a2d.png?auto=compress,format"},"_meta":{"uid":"olivia_melman"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Sailors on a ship illustration","copyright":null,"url":"https://images.prismic.io/www-static/24c68c1a5ba18ce7d3bb8689635b64b15c1995bc_turninggreatemployeesintogreatinterviewers_blog_pat.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"How to Turn Great Employees into Great Interviewers","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"As a follow up to our last post on candidate experience, this post will explore how we’re impacting employees and candidates with our approach to optimizing the interview experience.","spans":[{"start":0,"end":182,"type":"em"},{"start":18,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/people-first-hiring-experience/"}}]},{"type":"heading3","text":"Good Interviewers Aren’t Born; They’re Made","spans":[]},{"type":"paragraph","text":"In early September, we launched the DigitalOcean Sailor Certification Program, which consisted of a two-hour interactive training session on DO’s hiring processes and best practices for interviews.  With our rapid growth comes rapid hiring, and we’ve recognized that the best way to scale, bring in amazing talent, keep the bar high, and continue to optimize for culture add is to have a consistent approach to how we hire.","spans":[]},{"type":"paragraph","text":"Here are some of the things that were top of mind for us as we built out the interviewer training program:","spans":[]},{"type":"heading4","text":"Establishing a Process","spans":[]},{"type":"paragraph","text":"How could we ensure that interviewers, managers, and even recruiters were following a consistent process that mirrored the efficiency of DO’s daily workflow and ensured timely, repeatable, and scalable hiring decisions?  As a starting point, we worked closely with our executives to agree upon shared expectations for each stage within the recruitment process. This informed our creation of the DigitalOcean Recruiting Coordinates (because everything here must have a nautical pun), which is a playbook for all things hiring. This document quickly became the required pre-read for the Sailor Program itself.","spans":[]},{"type":"heading4","text":"Minimizing Unconscious Bias","spans":[]},{"type":"paragraph","text":"We needed to coach and educate interviewers on ways to minimize unconscious bias, fairly evaluate candidates, and foster meaningful interview discussions to ultimately make excellent hiring decisions.  Fortunately, our Talent Development team hosts Unconscious Bias training at team offsites and implemented a standalone training for all new hires in April of last year. In 2017 alone, the team hosted 22 sessions with roughly 200 attendees. During the Sailor Program, we discuss ways to minimize unconscious bias in the interview process and put these learnings into practice with mock interview activities. Often, the best way to minimize bias in the interview process is to ensure a consistent set of thoughtful interview questions and an equally consistent framework for measuring candidate aptitude, making sure we are fairly evaluating candidates on relevant and meaningful attributes.   One of the many follow up resources to the Sailor Program is a living and breathing question bank housed on Google Drive with questions vetted and approved by the People team.","spans":[]},{"type":"heading4","text":"Providing a Great Candidate Experience","spans":[]},{"type":"paragraph","text":"If you read my first post, you’ll know how passionate we are about providing candidates with a positive and meaningful experience as they explore joining DO. We think we have one of the best company cultures and employee experiences around, and we want that to be reflected in the interview process as well so candidates know what to expect (and get excited!). By improving the techniques and consistency of our approach to interviewing, we hope to create a more predictable and comfortable environment for our candidates.","spans":[]},{"type":"heading3","text":"Program Logistics","spans":[]},{"type":"paragraph","text":"We’ve also tailored the program content for different populations to ensure we’re offering relevant best practices for each employee group (Remote, In-Office, Managers, Individual Contributors, and a blended \"Refresh Program\" for experienced interviewers). We’re requiring that all DO interviewers get “Sailor Certified” in order to conduct interviews moving forward.  By completing the Sailor Program, our employees will be able to more quickly and effectively assess talent, make great hires, and maintain the positive candidate experience we’ve always strived for.  Upon completion of the program, participants gain access to a dedicated Slack channel, in which certified sailors share success stories, interview wins, and relevant articles. Our Brand Design team even got involved in helping us make a dedicated Sailor Sammy, which, backed by popular demand, we had printed on sailor hats to garnish the heads and desks of our certified interviewers.","spans":[]},{"type":"paragraph","text":"New \"Sailor Certified\" DO Employees","spans":[{"start":0,"end":35,"type":"em"}]},{"type":"image","url":"https://images.prismic.io/www-static/aabd0802d2d18af3c8ce994f07b5b6b5eec06bd4_img_1992.jpeg?auto=compress,format","alt":"Sailor Certified &quot;Sharks&quot;","copyright":null,"dimensions":{"width":1600,"height":1200}},{"type":"paragraph","text":"In less than 4 months, we’ve put exactly 200 interviewers through the Sailor Program, and the internal reaction to the program has been overwhelmingly positive. We distribute a survey following each session to all participants. Here’s a snapshot of our results:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/0be9377dccaf30500ca732ea882d428041d5ad4b_imagelikeembed.png?auto=compress,format","alt":"Slide","copyright":null,"dimensions":{"width":1200,"height":742}},{"type":"paragraph","text":"Folks are proud to demonstrate new interview techniques and share success stories with their fellow interviewers in Slack:","spans":[]},{"type":"paragraph","text":"“The STAR concept was one of my top takeaways from the training. Simple concept, but having it put explicitly was enlightening for me.” Cole Tuininga, Senior Engineer","spans":[{"start":0,"end":166,"type":"em"}]},{"type":"paragraph","text":"“I'll be looking to redo our interview questions for support interviews, based on the advice given in the training.” Jarland Donnell, Team Lead, Customer Support","spans":[{"start":0,"end":161,"type":"em"}]},{"type":"paragraph","text":"“I have been conducting interviews at DO since we were a single-digit number of engineers, and I learned quite a bit throughout the Sailor Program. Lots of takeaways on things to improve on going forward. ” Vaibhav Bhembre, Senior Software Engineer & Tech Lead, Spaces","spans":[{"start":0,"end":268,"type":"em"}]},{"type":"paragraph","text":"We’ve evolved the program for 2018 based on feedback and with scalability in mind to best accommodate our continuous growth, and ensure new interviewers can get up to speed quickly. The program now consists of two modules: the first is a self-paced e-learning course, and the second, an instructor-led session with an even larger emphasis on practice in the classroom.","spans":[]},{"type":"paragraph","text":"I’m thrilled to sit with a team that works tirelessly behind the scenes to ensure that anyone who interacts with DO—as a candidate, an employee or in the community at large—walks away with a positive experience. If you’re interested in becoming part of the DigitalOcean family, I encourage you to check out our open positions.  Questions, thoughts, and feedback are always welcomed, so feel free to leave a comment below.","spans":[{"start":307,"end":325,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/?gh_src=n4trdo1"}}]},{"type":"heading3","text":"View Open Positions at DigitalOcean","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/?gh_src=n4trdo1"}}]},{"type":"paragraph","text":"Olivia joined DigitalOcean in March 2017 as the People team’s  first Program Manager.  She is heavily focused on automation and collaboration within the full-cycle recruitment process, strengthening external partnerships to promote DO’s employment brand, and leveraging data to drive Recruiting strategy.","spans":[{"start":0,"end":304,"type":"em"}]}],"blog_post_date":"2018-01-30","tags":[{"tag1":{"tag":"Culture","_linkType":"Link.document","_meta":{"uid":"culture"}}}],"_meta":{"uid":"turning-great-employees-into-great-interviewers"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"John Gannon","author_image":{"dimensions":{"width":188,"height":188},"alt":"John Gannon","copyright":null,"url":"https://images.prismic.io/www-static/c168397537fa6de301e8f96c1d3aa74bdd6b8e4b_john_gannon-02f76ff8.png?auto=compress,format"},"_meta":{"uid":"john_gannon"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Singapore skyline illustration","copyright":null,"url":"https://images.prismic.io/www-static/98bd78d1be624b651993e370ce45ae9a7de221a7_singapore_spaces_blog_preview.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Spaces Now Available in Singapore (SGP1)","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"We’re excited to announce that Spaces is now available in our Singapore datacenter, giving developers and businesses global reach to affordable and scalable object storage. Since our initial launch in September, Spaces has grown in popularity with both existing and new customers—over one billion objects have been stored in Spaces—and it's no wonder; object storage is critical to delivering web assets, backing up data and even storing mission critical event logs in the cloud. Hosting storage close to your applications and customers will improve their overall experience.","spans":[{"start":31,"end":37,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-spaces-object-storage/"}},{"start":405,"end":420,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/importance-off-site-backups"}}]},{"type":"paragraph","text":"Here's what some customers have said about Spaces:","spans":[]},{"type":"preformatted","text":"Wow so far so amazing @digitalocean spaces 😍 easy to set up with #nodejs plus the UI is beautiful #happy\n— Codemzy (@codemzy) January 23, 2018","spans":[{"start":22,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean?ref_src=twsrc%5Etfw"}},{"start":65,"end":72,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/nodejs?src=hash&amp;ref_src=twsrc%5Etfw"}},{"start":98,"end":104,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/hashtag/happy?src=hash&amp;ref_src=twsrc%5Etfw"}},{"start":126,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/codemzy/status/955804457186586624?ref_src=twsrc%5Etfw"}}]},{"type":"preformatted","text":"Digital Ocean Spaces are actually neat, S3 API included.\n— Vollzeitkänguru (@MacYET) November 22, 2017","spans":[{"start":85,"end":102,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/MacYET/status/933402718844092416?ref_src=twsrc%5Etfw"}}]},{"type":"image","url":"https://images.prismic.io/www-static/7c497abd9df2cd3fc4d4dcbdeb5d0236a73935eb_image--1-.png?auto=compress,format","alt":"comment","copyright":null,"dimensions":{"width":797,"height":116}},{"type":"heading3","text":"What's New and Upcoming with Spaces","spans":[]},{"type":"paragraph","text":"Over the past four months, we’ve expanded into Europe by making Spaces available in AMS3, added CORS support, and an upgraded upload experience to the Control Panel.","spans":[]},{"type":"paragraph","text":"We’re currently working on other features and capabilities which will come out soon, including:","spans":[]},{"type":"list-item","text":"Launching the ability to use a custom domain with a Space and hosting static websites (sign up to take part in the Private Beta for these features),","spans":[{"start":87,"end":127,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/2mZ7qWC"}}]},{"type":"list-item","text":"v4 pre-signed URL support, which allows more ecosystem tools and libraries to work with Spaces, and","spans":[]},{"type":"list-item","text":"Lifecycle delete via the API (to schedule deletion of objects).","spans":[{"start":25,"end":28,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/spaces/"}}]},{"type":"paragraph","text":"Spaces will launch in SFO2 by early Q2 2018, with Frankfurt and London to follow later in the year.","spans":[]},{"type":"heading4","text":"Create a Space in SGP1 today!","spans":[{"start":0,"end":29,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/spaces/new?regionSlug=sgp1"}}]}],"blog_post_date":"2018-01-25","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"spaces-available-in-sgp1"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Geoff Hickey","author_image":null,"_meta":{"uid":"geoff_hickey"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/2aebccc9-23d0-4c4d-9598-460b0a28833a_go-libvirt_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Open Source at DigitalOcean: Extending go-libvirt with Code Generation","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Back in November 2016, DigitalOcean released go-libvirt, an open source project containing a pure Go interface to libvirt. Using go-libvirt, developers could manage virtual machines leveraging all the power of libvirt’s extensive API without leaving the comfortable environment of Go. But there was a catch.","spans":[{"start":23,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-go-qemu-and-go-libvirt/"}}]},{"type":"paragraph","text":"While the libvirt library has close to 400 API calls, initial versions of go-libvirt implemented only a handful of those calls. But go-libvirt is open source, so you can just add your own implementations for the routines you need, right?","spans":[]},{"type":"paragraph","text":"Well, yes you could. But go-libvirt talks to libvirt by exchanging XDR-encoded buffers using an RPC mechanism based on the venerable ONC RPC (or Sun RPC), so you would first have to familiarize yourself with those RPCs. Then, you would have to locate the argument and return value structures in the libvirt protocol definition file, and write code to marshal and unmarshal them on send and receive. By that time you might be asking yourself, “Why don’t I just give up and use CGO?” But hang on. Tedious, repetitive work; that sounds like what we invented computers for. Maybe they can help?","spans":[]},{"type":"paragraph","text":"This is the tale of how we used code generation to extend go-libvirt to cover every one of the libvirt API calls, and how we made it more resilient to future changes in the libvirt API.","spans":[]},{"type":"heading3","text":"Sun RPC and the Missing Toolchain","spans":[]},{"type":"paragraph","text":"If you’re working with Sun RPC in C, you write a protocol file describing the messages you want to exchange and feed it to a utility called “rpcgen”. The output of rpcgen includes header files and stubs for both client and server. The stubs contain generated code to marshal and unmarshal the message bodies for each of the messages. This is exactly how libvirt works— the protocol files are right there in the libvirt source repo (look for source files ending in .x), and during the build they get processed by rpcgen into .c and .h files.","spans":[{"start":411,"end":430,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/libvirt/libvirt"}}]},{"type":"paragraph","text":"If rpcgen could output Go code we’d be all set, but it doesn’t. Sun RPC isn’t a popular option for native Go programs, and although there are libraries for handling its on-the-wire data representation—XDR—there aren’t any libraries around for parsing its protocol files into Go.","spans":[]},{"type":"paragraph","text":"Time to roll up our sleeves!","spans":[]},{"type":"heading3","text":"Learning the Language","spans":[]},{"type":"paragraph","text":"Sun RPC protocol files look a lot like a collection of C declarations. We could throw a parser together with regexes and custom code, but when the source files start getting complex that path often ends in tears. The protocol files we need to parse definitely meet the complexity threshold: like C, data types can be nested inside other data types, and this is exactly the kind of thing that regexes are ill-equipped to handle. To be reliable we’ll want a real stateful parser. We could write one, but there’s a better way.","spans":[]},{"type":"paragraph","text":"Parser generators have been around since the 1970s, and Go includes a port of one of the oldest, yacc, in `golang.org/x/tools/cmd/goyacc`. Using goyacc to generate our parser means we don’t have to write the state machine that makes up the bulk of the parser by hand (and yes, it also means our code generator is itself generated). With a generated parser we’re left with three pieces of code to write: the language grammar, which is consumed by the parser generator to build the parser state machine, the actions, which run when the parser identifies a bit of grammar, and the lexer.","spans":[]},{"type":"paragraph","text":"The grammar definition lives in its own file, `sunrpc.y`, and goyacc uses the same syntax for the contents of this file as yacc did before it. Luckily, some of the documentation for Sun RPC includes grammar definitions in exactly the format goyacc expects, and we used that as a starting point for writing the grammar. ","spans":[{"start":152,"end":218,"type":"hyperlink","data":{"link_type":"Web","url":"https://docs.oracle.com/cd/E26502_01/html/E35597/rpcproto-24229.html#scrolltoc"}}]},{"type":"paragraph","text":"The actions are simply Go code mixed in with the grammar. When the parser identifies an element of the grammar, it will execute any actions defined at that point in the grammar file. In our case, the actions build an internal representation of the protocol file that we’ll use later to output our generated Go code.","spans":[]},{"type":"paragraph","text":"The actions are simply Go code mixed in with the grammar. When the parser identifies an element of the grammar, it will execute any actions defined at that point in the grammar file. In our case, the actions build an internal representation of the protocol file that we’ll use later to output our generated Go code.","spans":[]},{"type":"heading3","text":"Alexa, Where’s My Lexer?","spans":[]},{"type":"paragraph","text":"That leaves the lexer, also called a tokenizer. The lexer is called by the parser, and each time it’s called it returns the next token in the input stream, where a token is a unit of the grammar. For our grammar, if the input stream looks like this:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/7d467eb0-0778-4d15-9fce-0cd1e2f7e493_Screen-Shot-2017-12-12-at-6.02.33-PM.png?auto=compress,format","alt":"remote string max","copyright":null,"dimensions":{"width":1600,"height":68}},{"type":"paragraph","text":"The lexer will return the token CONST, then IDENTIFIER, =, CONSTANT, and ;. That matches one of the valid forms of `const_definition` from our grammar file (`const_ident` is elsewhere defined as `IDENTIFIER`):","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/bd5817d6-a217-4d71-85bb-4033ca81b3c0_Screen-Shot-2017-12-12-at-6.10.29-PM.png?auto=compress,format","alt":"identifier","copyright":null,"dimensions":{"width":1600,"height":660}},{"type":"paragraph","text":"The Go code inside the braces after the grammar is the action the parser will execute when it sees this sequence of tokens. So the parser will call `AddConst()`, passing in the value of the second and fourth tokens, in this case the const_ident and the CONSTANT. The resulting call will be `AddConst(“REMOTE_STRING_MAX”, “4194304”)`, because in our grammar the value of any token is the original string.","spans":[]},{"type":"paragraph","text":"If you’re familiar with yacc, at this point you might be wondering, “Where’s the Go port of lex? Is there a golex?” The answer is no; lex isn’t part of the standard library. (To get an idea of why this might be so, and an excellent introduction to lexers in general, you might want to see this talk by Rob Pike, from back in the early days of Go, in 2011.)","spans":[{"start":289,"end":310,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=HxaD_trXwRE"}}]},{"type":"paragraph","text":"So instead we have a handwritten lexer, `lvlexer.go`. It’s pretty straightforward, about 330 lines long, and uses no regular expressions. To work with the parser, the lexer has to satisfy an interface consisting of two functions: `Lex()` and `Error()`.","spans":[]},{"type":"heading3","text":"Generating the Output","spans":[]},{"type":"paragraph","text":"The actions, as well as the code that drives the parser, are found in `generate.go`, which gets compiled together with the lexer and the parser into a standalone binary. The generator calls the parser, and when the parser has finished its work the generator has an internal representation of the protocol file, and we need to tie everything together and output some Go code.","spans":[]},{"type":"paragraph","text":"Up until now we’ve been talking about libvirt and Sun RPC, because libvirt is using many of the pieces that make up Sun RPC. But if you look at `remote_protocol.x` in the libvirt sources, you’ll notice something surprising: the procedure definitions, which would describe the argument and return types for each RPC procedure, are missing. There is an enum containing procedure numbers, but nothing that resembles a function prototype.","spans":[]},{"type":"paragraph","text":"This is where libvirt departs from Sun RPC. Rather than use rpcgen to build the procedure stubs for client and server, they have implemented their own method for calling remote routines (have a look at libvirt’s `callFull()` in `remote_driver.c` if you’re curious). ","spans":[]},{"type":"paragraph","text":"So instead of a procedure definition in the protocol file, the procedure, its arguments, and it’s return values are associated by name. All arguments and return values in libvirt are structures. We can start from the `remote_procedure` enum in the protocol file. For the procedure `REMOTE_NODE_ALLOC_PAGES`, we have a procedure number of 347. To find the arguments structure we convert this to lowercase and add `_args`; for return we add `_ret`. We can apply this pattern to every procedure in the protocol file. If a procedure doesn’t take arguments or return values, the corresponding struct will be missing.","spans":[]},{"type":"paragraph","text":"This gives us enough information to generate the Go client functions for each procedure. We’ll drop the `remote_` prefix, since it’s common to every procedure, and we’ll convert the names to camel case so they look natural in Go. For `REMOTE_NODE_ALLOC_PAGES`, that means our generated Go routine would look like this:","spans":[]},{"type":"paragraph","text":"![NodeAllocPages](https://assets.digitalocean.com/ghost/2018/01/Screen-Shot-2017-12-14-at-5.25.31-PM.png)","spans":[]},{"type":"paragraph","text":"That’s not a bad start, but it forces the caller to construct the arguments structure and decode the return structure. Putting all the arguments into a structure makes the function awkward to use, and doesn’t match the libvirt documentation for `virNodeAllowPages`. We can do better.","spans":[]},{"type":"heading3","text":"API, Deconstructed","spans":[]},{"type":"paragraph","text":"Because we used a real parser to process the protocol definition, our generator has full type information available. In fact for every struct definition in the protocol, we have our own Go struct containing all the type information for the struct’s elements. So the generator can replace the struct in the arguments for our generated function with a list of its contents, simply by doing this:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/e6cb83f5-6b71-473e-8fed-48670b8e76f2_Screen-Shot-2017-12-14-at-5.41.42-PM.png?auto=compress,format","alt":"gen.procs","copyright":null,"dimensions":{"width":1518,"height":96}},{"type":"paragraph","text":"Gen.Procs is an array of generated procedures, and Args is an array of arguments. With that statement we set the arguments for a generated function to the array of members in the corresponding arguments structure. We do the same thing for the return values, and then our generated NodeAllocPages looks like this:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/013e00f3-805a-42e0-a80a-1dfcfeb5d880_Screen-Shot-2017-12-14-at-5.47.04-PM.png?auto=compress,format","alt":"func (l *Libvirt)","copyright":null,"dimensions":{"width":1460,"height":478}},{"type":"paragraph","text":"This is very close to the libvirt documentation; the Go version just omits two size arguments since slices carry size information with them.","spans":[{"start":8,"end":47,"type":"hyperlink","data":{"link_type":"Web","url":"https://libvirt.org/html/libvirt-libvirt-host.html#virNodeAllocPages"}}]},{"type":"heading3","text":"Templates","spans":[]},{"type":"paragraph","text":"The last step in our code generator is to iterate through all the type information we’ve collected and build the actual Go files. We use Go’s `text/template` library with a couple of fairly simple template files to do this. The generated procedures are output to `libvirt.gen.go`, and some constants to a separate file, `internal/constants/constants.gen.go`. We even generate comments so that godoc has something to work with.","spans":[]},{"type":"heading3","text":"Go, Generate","spans":[]},{"type":"paragraph","text":"Code generation is exactly what the `go generate` command was created for. If you’ve never explored this part of the Go toolchain before, there’s an excellent introduction in the Go blog. The generate command is intended to be run separately from `go build`, and much less often - typically the generated code for a project only needs to be re-created when an external dependency changes. To rebuild the generated files for a particular version of libvirt, you simply set an environment variable `LIBVIRT_SOURCE` with the path to the libvirt sources, and run `go generate ./…` from the go-libvirt directory. That command will descend through the go-libvirt sources executing generate instructions embedded in the source files.","spans":[{"start":149,"end":186,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.golang.org/generate"}}]},{"type":"heading3","text":"That’s It!","spans":[]},{"type":"paragraph","text":"We hope you enjoyed this brief tour of the code generator for go-libvirt. There’s still work to be done on the project, but with these changes it should be much more useful to a wider audience.","spans":[]},{"type":"paragraph","text":"The go-libvirt project is hosted on GitHub, and pull requests are welcome!","spans":[{"start":4,"end":42,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/go-libvirt"}}]},{"type":"paragraph","text":"Geoff Hickey is a Senior Engineer at DigitalOcean, where he works on hypervisors and the code that surrounds them. In his spare time he teaches machines to make things out of wood and then shamelessly takes credit for their work. As a result, he views the rise of machine learning with some trepidation.","spans":[{"start":0,"end":303,"type":"em"}]}],"blog_post_date":"2018-01-23","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"extending-go-libvirt-with-code-generation"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Ben Schaechter","author_image":{"dimensions":{"width":250,"height":250},"alt":"Ben Schaechter","copyright":null,"url":"https://images.prismic.io/www-static/27dfbed4bc6fa68e0e2818d9c0f6065c21505b36_d9e56499ba79cfdd200bb4a6220f15f1.png?auto=compress,format"},"_meta":{"uid":"ben_schaechter"}},"blog_header_image":{"dimensions":{"width":1568,"height":836},"alt":"stack illustration","copyright":null,"url":"https://images.prismic.io/www-static/8f3cf146215e893ee72cafadd73a1b3d716555a9_kickingoffnewyear-dropletspricing-blog2-1.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Kicking Off the New Year with New Droplet Plans","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"July 10, 2018 UPDATE: In order to provide a transition period, 1st Generation Droplet plans will continue to be available via the API using the legacy size slugs. We will provide additional notice before their removal.","spans":[{"start":0,"end":20,"type":"strong"}]},{"type":"paragraph","text":"May 31, 2018 UPDATE: We’ve updated our plans. Get the latest details here.","spans":[{"start":0,"end":19,"type":"strong"},{"start":46,"end":73,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/choosing-the-right-droplet-for-your-application"}}]},{"type":"paragraph","text":"Last week, we shared our 2018 roadmap preview and today, we’re excited to announce the first of many new updates for developers: new Droplet plans. We know that price-to-performance is an important consideration when choosing where to host your application, whether it be a small side project or a large business. That is why we’re upgrading resources across our plans and introducing new plans to give you even more flexibility to choose the right Droplet for your application.","spans":[{"start":25,"end":45,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/2018-whats-shipping-next-on-digitalocean/"}},{"start":129,"end":146,"type":"strong"}]},{"type":"paragraph","text":"We have updates to share across all three classes of Droplet plans: Standard, High CPU, and High Memory Droplets. These updates are available immediately through the Cloud Control Panel and API in the majority of our datacenters. Here are the full details of the updated plans:","spans":[]},{"type":"heading3","text":"Standard Droplets","spans":[]},{"type":"paragraph","text":"Standard Droplet plans have always offered a healthy balance of CPU, memory, and SSD storage to get blogs, web applications, and databases off the ground. With today’s changes, we have 14 brand new Standard Plans to ensure that these applications can grow and scale as your projects grow.","spans":[{"start":198,"end":212,"type":"strong"}]},{"type":"paragraph","text":"These updated plans are listed below, with some before and after looks at how resources have changed at various monthly price points:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/079b6092317abf87d915f2652666c0e6c6b1cb28_standard-plans-table.png?auto=compress,format","alt":"Standard Plans Table","copyright":null,"dimensions":{"width":1288,"height":1600}},{"type":"paragraph","text":"These updated Standard Droplets offer more resources for either the same or a lower price than our previous generation.","spans":[]},{"type":"paragraph","text":"We’ve also introduced three flexible plans, all priced at $15 with varying sets of CPU and memory combinations to give you resource flexibility without worrying about price.","spans":[]},{"type":"paragraph","text":"Finally, all original “first generation” Standard Droplet Plans are still available via the API. This will ensure any applications you host that are hard-coded for those plans aren’t negatively impacted. We intend to fully deprecate those plans on July 1, 2018 and will send more updates throughout the year. [See: July 10, 2018 update.]","spans":[]},{"type":"heading3","text":"Optimized Droplets","spans":[]},{"type":"paragraph","text":"High CPU Plans were released just six months ago and we’re excited to make our first upgrades to these plans which are great for CI/CD, batch processing, and other compute-intensive workloads. We’re also renaming High CPU Droplets  “Optimized Droplets”. These Droplets are powered by dedicated resources from best-in-class Broadwell and Skylake CPUs, but now come with additional memory and local SSD disk for the same price. In the future, we’ll be looking to boost performance not only for CPU but also for memory and disk performance. The updates are shown below:","spans":[{"start":0,"end":14,"type":"strong"}]},{"type":"image","url":"https://images.prismic.io/www-static/4a0df1a28108a24d03b996924f9a70ecc86f5b54_performance-plans-table-2.png?auto=compress,format","alt":"Optimized Droplet Plan Pricing Table","copyright":null,"dimensions":{"width":1500,"height":780}},{"type":"paragraph","text":"Competitively, these plans line up well with similar offerings from other providers in the market. Below you can see that DigitalOcean’s Optimized Droplets are priced competitively from a price-to-performance perspective:","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/5f80950ac9a17571bbc1a0a695f8a438ec5f1ec5_performance-plans-table-2--2-.png?auto=compress,format","alt":"Performance Plans Comparison Table","copyright":null,"dimensions":{"width":1500,"height":932}},{"type":"paragraph","text":"High Memory Plans are being deprecated as a result of the upgrades made to Standard Plans, which come with ample amounts of RAM and SSD storage at competitive price points. The API will support High Memory Droplets created until July 1, 2018, but we recommend transitioning over to the new Standard Droplet Plans before then. (If you have an active High Memory Droplet, it will simply continue to be charged at the same rate for the duration that it remains active.)","spans":[{"start":0,"end":17,"type":"strong"}]},{"type":"heading3","text":"Coming Soon: Per-Second Billing","spans":[]},{"type":"paragraph","text":"We’re working hard at making continuous improvements to our billing system in order to align with changes in customer Droplet usage behavior. We’re happy to share that starting later this year, Droplets will be billed by the second instead of by the hour. This means that you’ll only be charged for exactly the amount of time you use your instance to the second. We understand it is important for customers scaling instances up and down regularly to have the best rate available and we’re happy to get this update shipped for you. Keep an eye out for a future announcement specifically on billing improvements.","spans":[]},{"type":"heading3","text":"Looking Ahead","spans":[]},{"type":"paragraph","text":"We understand that price-to-performance ratios are of utmost consideration when you’re choosing a hosting provider and we’re committed to being a price-to-performance leader in the market. As we continue to find ways to optimize our infrastructure we plan on passing those benefits on to you, our customers.","spans":[]},{"type":"heading3","text":"Additional Information & Helpful Links","spans":[]},{"type":"list-item","text":"DigitalOcean Pricing Plans","spans":[{"start":0,"end":26,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/pricing/"}}]},{"type":"list-item","text":"Frequently Asked Questions for New Pricing Plans","spans":[{"start":0,"end":48,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/new-droplet-plans-frequently-asked-questions"}}]},{"type":"list-item","text":"Choosing the Right Droplet for Your Application","spans":[{"start":0,"end":47,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/choosing-the-right-droplet-for-your-application"}}]},{"type":"paragraph","text":"Ben Schaechter","spans":[]},{"type":"paragraph","text":"Senior Product Manager, Droplet","spans":[]}],"blog_post_date":"2018-01-16","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}},{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"new-droplet-plans"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Hollie Haggans","author_image":{"dimensions":{"width":400,"height":400},"alt":"Hollie Haggans","copyright":null,"url":"https://images.prismic.io/www-static/7793109e3fed5f875dc50b8866c8e631bd51d5b5_0bfbced-1.jpg?auto=compress,format"},"_meta":{"uid":"hollie_haggans"}},"blog_header_image":{"dimensions":{"width":1500,"height":800},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/aad9e02a46d845625cadb57d1006373a36251380_deepend_blogsize.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"The Deep End Podcast Ep. 12: Empowering People & AI with Unbabel","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"What interesting challenges does a platform that leverages both human translations and artificial intelligence face? For Unbabel, an AI-powered human translation platform, it’s paying equal amounts of attention to the humans driving the business and to the technology underlying the platform.","spans":[{"start":121,"end":128,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.unbabel.com/"}}]},{"type":"paragraph","text":"In this episode, Marcelo Lebre, Unbabel’s VP of Engineering, discusses how the startup is growing and adapting on both the technical side and the people side, and shares insights into how their stack supports their scaling service.","spans":[]},{"type":"paragraph","text":"Subscribe to the The Deep End Podcast on iTunes, and listen to the latest episode on SoundCloud below:","spans":[{"start":17,"end":47,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.google.com/url?q=https://itunes.apple.com/us/podcast/the-deep-end-podcast-by-digitalocean/id1238518419?mt%3D2&amp;sa=D&amp;ust=1515098984068000&amp;usg=AFQjCNH3nSy_ALB5aUIiKt0otKyITr8RkQ"}}]},{"type":"paragraph","text":"Hollie Haggans heads up Global Partnerships for DigitalOcean’s Hatch program. She is passionate about startups and cold brew coffee. Get in touch with questions at hatch@digitalocean.com.","spans":[{"start":0,"end":187,"type":"em"},{"start":63,"end":76,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/hatch/"}},{"start":164,"end":186,"type":"hyperlink","data":{"link_type":"Web","url":"mailto:hatch@digitalocean.com"}}]}],"blog_post_date":"2018-01-11","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"deep-end-podcast-unbabel"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Priya Chakravarthi","author_image":{"dimensions":{"width":200,"height":200},"alt":"Priya Chakravarthi","copyright":null,"url":"https://images.prismic.io/www-static/a764a7c4d900d2e77bbd3a25ad5b2a348063df40_image.png?auto=compress,format"},"_meta":{"uid":"priya_chakravarthi"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Buildings illustration","copyright":null,"url":"https://images.prismic.io/www-static/b8d9443810e722690233cd99b95cbc2adecc0f15_blockstorage_ams_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Block Storage Now Available in AMS3","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today, we're excited to share that Block Storage is available to Droplets in the AMS3 datacenter. With Block Storage, you can scale your storage independently of your compute and have more control over how you grow your infrastructure, enabling you to build and scale larger applications more easily. Block Storage has been a key part of our overall focus on strengthening the foundation of our platform to increase performance and enable our customers to scale.","spans":[{"start":35,"end":48,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/storage/"}}]},{"type":"paragraph","text":"We've seen incredible engagement since our launch in July 2016. Users have created Block Storage volumes in SFO2, NYC1, NYC3, FRA1, SGP1, TOR1, BLR1, and LON1 to scale databases, take backups, store media, and much more. AMS3 is our ninth datacenter with Block Storage.","spans":[]},{"type":"paragraph","text":"Thanks to everyone who has given us feedback and used Block Storage so far. Please keep it coming. You can create your first Block Storage volume in AMS3 today!","spans":[{"start":107,"end":153,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new?distro=ubuntu&amp;distroImage=ubuntu-16-04-x64&amp;size=2gb&amp;region=ams3"}}]},{"type":"paragraph","text":"— DigitalOcean Storage Team","spans":[]}],"blog_post_date":"2018-01-09","tags":[{"tag1":{"tag":"Product Updates","_linkType":"Link.document","_meta":{"uid":"product-updates"}}}],"_meta":{"uid":"block-storage-in-ams3"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Shiven Ramji","author_image":{"dimensions":{"width":170,"height":170},"alt":"Shiven Ramji","copyright":null,"url":"https://images.prismic.io/www-static/79c5726c75adb45644613d2371026b1bb789a415_shiven_ramji-090ac31e.png?auto=compress,format"},"_meta":{"uid":"shiven_ramji"}},"blog_header_image":{"dimensions":{"width":1000,"height":533},"alt":"rocket illustration","copyright":null,"url":"https://images.prismic.io/www-static/137efc25534148473a8476ffdd9870e59e3f2c1e_endofyearblogpost2017_blog_pat.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"2018: What's Shipping Next on DigitalOcean","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Before we kick off the year with a preview of all the things we plan to bring to our customers in 2018, let’s take a moment to review all that we accomplished in the last twelve months. 2017 was an exciting build year for DigitalOcean teams. I started about a year ago as the Head of Product and the journey to date has been nothing short of amazing. In 2017, we shipped more products and features than ever before. We introduced Load Balancers, Monitoring and Alerts, Cloud Firewalls and Spaces. We extended the availability of Block Storage to Singapore (SGP1), Toronto (TOR1), Bangalore (BLR1), London (LON1), and New York (NYC3). In the summer, we introduced High CPU Droplets that deliver the best price to performance for production applications in the market. We also announced upgrades to our network, connecting all of our datacenters to create a DigitalOcean network backbone that is scalable, reliable, and performant. Above all, we welcomed our 1,000,000th user to the platform.","spans":[{"start":430,"end":444,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/load-balancers-simplifying-high-availability/"}},{"start":446,"end":467,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-monitoring/"}},{"start":469,"end":484,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/cloud-firewalls-secure-droplets-by-default/"}},{"start":489,"end":495,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-spaces-object-storage/"}},{"start":663,"end":680,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/introducing-high-cpu-droplets/"}},{"start":785,"end":808,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/whats-new-with-the-digitalocean-network/"}},{"start":944,"end":973,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/1-million-users/"}}]},{"type":"paragraph","text":"All of the significant products mentioned above and the hundreds of features we launched are the direct result of our teams listening to feedback from our developer community. We are incredibly grateful that they continue to support us and elevate us to new heights and milestones. It is your love and feedback that drives the 400+ \"sharks\" (our employees) to come to work every day and deliver the products and services you rely on to keep your applications running in the cloud. (If you want to be a part of this amazing journey, join us—we’re hiring!)","spans":[{"start":540,"end":553,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/"}}]},{"type":"image","url":"https://images.prismic.io/www-static/6af5efe48815c9b03294e65587435b13b15ec010_2017-yearinreview-inforgraphic-2.png?auto=compress,format","alt":"2017 Achievements Infographic","copyright":null,"dimensions":{"width":600,"height":1595}},{"type":"heading3","text":"2018 Product Horizon","spans":[]},{"type":"paragraph","text":"The Product team’s mission in 2018 is to make it simple for businesses to scale their applications in production. We have invested a ton in our core platform, and the roadmap for this year builds on those new strengths to give developers a simple, elegant, and secure platform to develop, deploy, and scale any application in the cloud. We are also in the discovery process of adding additional features and services that make it easy for businesses to work and grow with us. With that context, here is a preview of what’s shipping this year:","spans":[]},{"type":"heading4","text":"Droplets in More Shapes and Sizes","spans":[]},{"type":"paragraph","text":"Developers have been asking for new Droplet plans to meet their resource and scalability needs. We will be announcing the availability of new plans and plan classes throughout the year. The new plans will provide more choices for your production workloads and add new capabilities for data, AI, and ML use cases such as dedicated CPUs and the availability of GPUs. We are currently doing discovery work on Machine Learning and you can share your insights by completing this survey.","spans":[{"start":435,"end":480,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/XRqcG6Ni/"}}]},{"type":"paragraph","text":"Another frequently requested feature from our customers is the ability to allow custom images on your Droplets. We are exploring ways to enable this, and you can help us by providing your input here.","spans":[{"start":173,"end":198,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/xSMuugBK"}}]},{"type":"heading4","text":"Deployment with Containers","spans":[]},{"type":"paragraph","text":"We have a lot of customers who use the Docker 1-click application on our platform to run and manually operate their containerized applications. We have received many requests from you to make this simple, similar to all of the products and services that we already offer. We also believe that we can do a lot more to take away the operational complexity of managing containers and have plans to support the easy deployment and management of applications using Containers to our platform. You can sign up for early access here.","spans":[{"start":39,"end":65,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/one-click-apps/docker/"}},{"start":508,"end":525,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/aX2TfSDM"}}]},{"type":"heading4","text":"Security and Privacy by Design","spans":[]},{"type":"paragraph","text":"Developers shouldn’t need to be security experts in order to have a safe application running, and we want to help make their applications and networks secure by design. We will be introducing virtual network capabilities (commonly known as Virtual Private Cloud or VPC) that will allow you to launch and operate your cloud resources in a logically isolated environment. Our goal is to make these new capabilities available to our customers with minimal interruption while building a scalable, resilient network architecture for our datacenters. We will also look to add additional security updates with our VPC releases to Cloud Firewalls and Load Balancers.","spans":[]},{"type":"paragraph","text":"In May, the General Data Protection Regulation (GDPR) will replace the existing EU Data Protection Directive. Our teams are working hard to make all of our services compliant by then and will share relevant updates to our Data Processing Agreement when ready. We will also share relevant updates and tools as appropriate to help our customers also be compliant with the new regulations.","spans":[{"start":12,"end":46,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/security/gdpr/"}}]},{"type":"heading4","text":"Spaces in More Regions with More Features","spans":[]},{"type":"paragraph","text":"We will be expanding Spaces to SFO2 and SGP1 and tuning our service to increase performance and reliability. In addition to that, we plan to add new features throughout the year such as object versioning, bucket policies (for granular permissions) and lifecycle deletion. We will soon be previewing the static sites feature with select customers and giving everyone the ability to view their bandwidth usage.","spans":[]},{"type":"heading4","text":"Developer Experience","spans":[]},{"type":"paragraph","text":"At DigitalOcean, we care deeply about improving your developer experience. We want to continue to rapidly add new capabilities while holding the bar high for the simplicity and ease of use you have come to love and expect from us. To that end, we will be introducing a new Control Panel experience in Q1 specifically designed to help you more easily manage all of the infrastructure needed to run your applications. Get early access to the new experience by completing this quick survey, and we'll send an invitation when it's available.","spans":[{"start":458,"end":486,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/6oH0ELJm/"}}]},{"type":"paragraph","text":"We also recognize that the developer experience extends further than the Control Panel. Success means providing you with the interfaces and information you need to quickly and easily create, operate, and scale your infrastructure, applications, and teams. In 2018, we are focused on decreasing friction during onboarding, improving the API experience, extending the capabilities of our Monitoring service, and making our documentation and tutorials even easier to access. All with an eye toward helping you focus on what matters the most: your applications.","spans":[]},{"type":"heading4","text":"Marketplace","spans":[]},{"type":"paragraph","text":"The Open Source Software ecosystem has led to an explosion in tool choices for developers making their workflows ever more difficult. We, as members and supporters of the Open Source Software model, believe that we can bring the community together, remove friction for developers, and create a sustainable model for monetization for Open Source tools and services. There is a large community of partners in the ecosystem who keep reaching out to us to enable them on our platform and make them available to our developer community.","spans":[]},{"type":"paragraph","text":"This year, we are exploring ways we can enable partners to provide their tools and services through our platform so that our customers can quickly discover, install, integrate, and operate them with their application atop of the core platform we have built. To help us navigate this complex ecosystem and do this well, we recently hired Nick Wade from Atlassian. Nick brings a wealth of knowledge from his experience building and running the Atlassian Marketplace business. We’d love to hear from you (developers and partners alike) on your specific needs, and you can do so by answering a few questions here.","spans":[{"start":337,"end":346,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.linkedin.com/in/wadenick/"}},{"start":578,"end":608,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.getfeedback.com/r/gcG7fxiX"}}]},{"type":"heading3","text":"Give Us Your Feedback","spans":[]},{"type":"paragraph","text":"The themes above are just a preview of what we are thinking about this year. It is not an exhaustive list of updates and features we plan to release. I hope you are just as excited about these as we are!","spans":[]},{"type":"paragraph","text":"Let's keep the dialogue going. Do you have ideas about what we should do next? Share your thoughts with us in the comments below.","spans":[]},{"type":"paragraph","text":"Happy Coding,","spans":[]},{"type":"paragraph","text":"💙 Shiv,\nVP, Product","spans":[]}],"blog_post_date":"2018-01-07","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"2018-whats-shipping-next-on-digitalocean"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Josh Feinblum","author_image":{"dimensions":{"width":170,"height":170},"alt":"Josh Feinblum","copyright":null,"url":"https://images.prismic.io/www-static/c4c133b1c9fcb9c2688f1feeb95690fbe53b2e6b_41049-0-4.jpg?auto=compress,format"},"_meta":{"uid":"josh_feinblum"}},"blog_header_image":null,"blog_headline":[{"type":"heading1","text":"A Message About Intel Security Findings","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Update Tuesday, April 17th, 2018:","spans":[{"start":0,"end":33,"type":"em"}]},{"type":"paragraph","text":"Today we’re excited to share that we have completed the reboot process in our NYC2 datacenter, wrapping up our Spectre and Meltdown mitigation efforts. Rebooting activity across our fleet of 12 datacenters is now complete!","spans":[]},{"type":"paragraph","text":"If you experience any issues with a Droplet that was rebooted during these mitigation efforts, please refer to this Community article we posted to help you troubleshoot.","spans":[{"start":116,"end":133,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/questions/having-application-issues-after-spectre-meltdown-reboots"}}]},{"type":"paragraph","text":"We appreciate your patience and understanding throughout the duration of this necessary maintenance.","spans":[]},{"type":"paragraph","text":"Update Thursday, April 12, 2018:","spans":[{"start":0,"end":32,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today we have successfully completed reboot activity for all customer hypervisors in our AMS2 datacenter.","spans":[]},{"type":"paragraph","text":"We anticipate completing the reboot process in our NYC2 datacenter early next week. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"The completion of reboots in our NYC2 datacenter will also mark the completion of reboots for our entire fleet, and we will share an update here as soon as this on-going maintenance is finished.","spans":[]},{"type":"paragraph","text":"Update Tuesday, April 3, 2018:","spans":[{"start":0,"end":30,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today we have successfully completed reboot activity for all customer hypervisors in our SFO1 datacenter.","spans":[]},{"type":"paragraph","text":"Next week, we are continuing reboots, with maintenance in our AMS2 and NYC2 regions. The reboot process for our entire fleet will continue over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"We will continue to share progress updates here and alert our users to the completion of reboots in each of our regions as information becomes available.","spans":[]},{"type":"paragraph","text":"Update Wednesday, March 28, 2018:","spans":[{"start":0,"end":33,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today we have successfully completed reboot activity for all customer hypervisors in our SGP1 and FRA1 datacenters.","spans":[]},{"type":"paragraph","text":"We are continuing reboots in our SFO1 region, and we expect that maintenance to be completed early next week. The reboot process for our entire fleet will continue over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"We will continue to share progress updates here and alert our users to the completion of reboots in each of our regions as information becomes available.","spans":[]},{"type":"paragraph","text":"Update Friday, March 23, 2018:","spans":[{"start":0,"end":30,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today we have successfully completed reboot activity for all customer hypervisors in our LON1 datacenter.","spans":[]},{"type":"paragraph","text":"Reboots in SGP1 are well underway, and next week we will also conduct them in the FRA1 and SFO1 datacenters. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"The reboot process for our entire fleet will continue over the coming weeks. We will share progress updates here and alert our users to the completion of reboots in each of our regions as information becomes available.","spans":[]},{"type":"paragraph","text":"Update Wednesday, March 21, 2018:","spans":[{"start":0,"end":33,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today we have successfully completed reboot activity for all customer hypervisors in our NYC3 datacenter.","spans":[]},{"type":"paragraph","text":"Reboots in SGP1 and LON1 are currently underway and we continue to coordinate reboots for our other datacenters. The reboot process for our entire fleet will continue over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"We will continue to share progress updates here and alert our users to the completion of reboots in each of our regions as information becomes available.","spans":[]},{"type":"paragraph","text":"Update Monday, March 12, 2018:","spans":[{"start":0,"end":30,"type":"em"}]},{"type":"paragraph","text":"We’re happy to share that today, we have successfully completed reboot activity for all customer hypervisors in our AMS3 datacenter.","spans":[]},{"type":"paragraph","text":"We continue to coordinate reboots for our other datacenters, with SGP1 planned for the next maintenance window, and the reboot process for our entire fleet will continue over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"We will continue to share progress updates here to alert our users to the completion of reboots in each of our regions, or if new information becomes available as we work through our rebooting schedule.","spans":[]},{"type":"paragraph","text":"Update Thursday, March 1, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"Last week, we began rebooting Droplets in our SFO2 and BLR1 datacenters. We’re happy to share that today we successfully completed reboot activity for all customer hypervisors in the SFO2 and BLR1 datacenters. This week, we also started and finished rebooting activity in TOR1, and we are continuing to reboot Droplets in our NYC3 datacenter.","spans":[]},{"type":"paragraph","text":"The reboot process for our entire fleet will continue over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled reboots.","spans":[]},{"type":"paragraph","text":"We will continue to share progress updates here to alert our users to the completion of reboots in each of our regions, or if new information becomes available as we work through our rebooting schedule.","spans":[]},{"type":"paragraph","text":"Update Friday, February 16, 2018:","spans":[{"start":0,"end":33,"type":"em"}]},{"type":"paragraph","text":"Last week, we began rebooting Droplets in our NYC1 datacenter. We’re happy to share that we have successfully completed reboot activity for all customer hypervisors in this datacenter.","spans":[]},{"type":"paragraph","text":"Reboots in our NYC3 datacenter are underway, and next week we will also begin reboot maintenance in the BLR1 and SFO2 datacenters. We anticipate activity lasting for two days in BLR1 (Tuesday 2/20 and Wednesday 2/21) and three business days in SFO2 (Wednesday 2/21 through Monday, 02/26). We will continue the reboot process for our entire fleet over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled rebooting.","spans":[]},{"type":"paragraph","text":"Moving forward, we will share progress updates here to alert our users to the completion of reboots in each of our regions, or if new information becomes available as we work through our rebooting schedule.","spans":[]},{"type":"paragraph","text":"Update Friday, February 9, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"This week we began rebooting Droplets in our NYC1 datacenter. The maintenance is going well and we will continue the reboot process for our entire fleet over the coming weeks. Users can expect email notifications about the maintenance window for their impacted Droplets at least 24 hours ahead of the scheduled rebooting.","spans":[]},{"type":"paragraph","text":"While these rebooting efforts are necessary to apply the patches that mitigate the Spectre and Meltdown vulnerabilities within DigitalOcean’s infrastructure, users should also apply patches in their Droplets to achieve complete protection. To ensure your Droplets are as secure as possible, we recommend that you follow this tutorial to protect against the Meltdown and Spectre vulnerabilities. We also recommend taking a backup or snapshot of critical data before making changes to a production system.","spans":[{"start":313,"end":333,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}},{"start":413,"end":457,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/digitalocean-backups-and-snapshots-explained"}}]},{"type":"paragraph","text":"Mitigating the risks presented by Spectre and Meltdown is a top priority for our engineering team and we are working hard to minimize disruption during this necessary maintenance. During this process we will communicate with you in the following ways:","spans":[]},{"type":"list-item","text":"Status page updates related to the scheduled maintenance and separate status reports if issues arise","spans":[{"start":0,"end":19,"type":"hyperlink","data":{"link_type":"Web","url":"https://status.digitalocean.com/"}}]},{"type":"list-item","text":"Email notifications, including a list of affected Droplets, to all affected customers at least 24 hours ahead of scheduled maintenance windows","spans":[]},{"type":"list-item","text":"Blog updates as new information becomes available","spans":[]},{"type":"paragraph","text":"Update Friday, February 2, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"This week, our engineering and infrastructure teams completed the preparation and testing necessary to begin our planned reboots on Monday, February 5th.","spans":[]},{"type":"paragraph","text":"The reboots will be done on a rolling basis and will affect all Droplets in all regions. We will be starting reboots in the NYC1 region and have notified all customers who will be affected on Monday and Tuesday by email. We will continue to notify affected customers at least 24 hours in advance as we reboot their physical machines and the Droplets on them. These reboots are necessary in order to apply the patches that mitigate the Spectre and Meltdown vulnerabilities within DigitalOcean’s infrastructure.","spans":[]},{"type":"paragraph","text":"In some cases, patching inside Droplets may be more critical than others. We encourage users to determine the best course of action and strongly recommend you follow the steps outlined in this article to improve your security and ensure your Droplet is running an updated kernel. We also recommend taking a backup or snapshot of critical data before making changes to a production system.","spans":[{"start":159,"end":200,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}},{"start":298,"end":342,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/digitalocean-backups-and-snapshots-explained"}}]},{"type":"paragraph","text":"If your distribution is not included in the list of patched versions below, we highly recommend you move your data to a new Droplet running a version that is receiving security updates. To simplify the act of patching, we have recently updated Droplets to utilize a GrubLoader, which allows Droplets that use our in-control panel legacy system to boot into internally installed kernels. On certain legacy Droplets, this may cause issues if the kernel is not upgraded.","spans":[{"start":256,"end":276,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-update-a-digitalocean-server-s-kernel"}},{"start":458,"end":466,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}}]},{"type":"paragraph","text":"Meltdown distribution updates to date: CentOS 6 & 7, RancherOS, CoreOS, Debian 7, 8 & 9, Fedora 27 Atomic, Ubuntu 14.04, 16.04 & 17.10 base images have been updated. Fedora 26 & 27 have updates available, but users will have to manually update as Fedora does not have updated Cloud Images. Our Ubuntu 16.04 1-Click images have been refreshed to include the latest patches and updates.","spans":[{"start":0,"end":37,"type":"strong"}]},{"type":"paragraph","text":"Spectre distribution updates to date: At this time only Ubuntu and CentOS have released kernel updates to address Spectre Variant 1 and they have been included in our CentOS 6 & 7 base images. Both kernels include Spectre Variant 2 fixes, however, they are not enabled on our Cloud Platform at this time.","spans":[{"start":0,"end":36,"type":"strong"}]},{"type":"paragraph","text":"We will work as hard as possible to minimize disruption during these reboots. During this process we will communicate with you in the following ways:","spans":[]},{"type":"list-item","text":"Status page updates related to the scheduled maintenance and separate status reports if issues arise","spans":[{"start":0,"end":19,"type":"hyperlink","data":{"link_type":"Web","url":"https://status.digitalocean.com/"}}]},{"type":"list-item","text":"Email notifications, including a list of affected Droplets, to all affected customers at least 24 hours ahead of scheduled maintenance windows","spans":[]},{"type":"list-item","text":"Blog updates as new information becomes available","spans":[]},{"type":"paragraph","text":"Update Friday, January 26, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"This week our engineering team completed testing of our candidate kernel with all of our major subsystems and tested the fixes that will be deployed across our fleet.","spans":[]},{"type":"paragraph","text":"We are ready to begin our planned reboots which will affect all Droplets in all regions, and have notified affected customers by email. During the course of this maintenance, we will reboot physical machines and the Droplets on them.","spans":[]},{"type":"paragraph","text":"In some cases patching inside Droplets may be more critical than others. We encourage users to determine the best course of action and we strongly recommend you follow the steps outlined in this article to improve your security and ensure your Droplet is running an updated kernel.  We also recommend taking a backup or snapshot of critical data before making changes to a production system.","spans":[{"start":190,"end":202,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}},{"start":310,"end":328,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/digitalocean-backups-and-snapshots-explained"}}]},{"type":"paragraph","text":"If your distribution is not included in the list of patched versions listed in our January 19th update, we highly recommend you move your data to a new Droplet running a version that is receiving security updates.  To simplify the act of patching, we have recently updated Droplets to utilize a GrubLoader. On certain legacy Droplets, this may cause issues if the kernel is not upgraded.","spans":[{"start":295,"end":305,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-update-a-digitalocean-server-s-kernel"}},{"start":378,"end":386,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}}]},{"type":"paragraph","text":"We will be starting reboots in NYC1 as early as Wednesday, January 31st and we will be communicating with customers in the following ways:","spans":[]},{"type":"list-item","text":"Email notifications, including a list of affected Droplets, will be sent to all affected customers at least 24 hours ahead of scheduled maintenance windows.","spans":[]},{"type":"list-item","text":"We will be using our status page to communicate about any reboot-related incidents.","spans":[{"start":21,"end":32,"type":"hyperlink","data":{"link_type":"Web","url":"https://status.digitalocean.com/"}}]},{"type":"list-item","text":"We will continue to share updates on this blog as we have them.","spans":[]},{"type":"paragraph","text":"Update Friday, January 19, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"Over the past week, our engineering team has identified and begun formal testing on a set of kernel patches that begin to mitigate all three variants. We are validating this candidate kernel with all of our major subsystems and starting to plan and test this initial round of fixes to deploy across our fleet.","spans":[]},{"type":"paragraph","text":"We anticipate a robust testing phase over the next week to ensure these changes will not negatively impact our customers, continuing our approach of taking careful, well-informed steps towards long term resolution, rather than a string of one-off mitigation efforts.","spans":[]},{"type":"paragraph","text":"We plan to provide our next update on Friday, January 26th. If we determine that we are able to initiate reboots sooner, we will provide an update here and e-mail affected customers directly with at least 24 hours advance notice.","spans":[]},{"type":"paragraph","text":"In the meantime, we encourage you to ensure your servers are as secure as possible. For more information about protecting your Droplets, you can reference this tutorial.","spans":[{"start":155,"end":168,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}}]},{"type":"paragraph","text":"Meltdown distribution updates to date: CentOS 6 & 7, RancherOS, CoreOS, Debian 7, 8 & 9, Fedora 27 Atomic, Ubuntu 14.04, 16.04 & 17.10 base images have been updated. Fedora 26 & 27 have updates available, but users will have to manually update as Fedora does not have updated Cloud Images. Our Ubuntu 16.04 1-Click images have been refreshed to include the latest patches and updates.","spans":[{"start":0,"end":37,"type":"strong"}]},{"type":"paragraph","text":"Spectre distribution updates to date: At this time only CentOS 6 and CentOS 7 have released kernel updates to address Spectre Variant 1 and have been included in our our CentOS 6 & 7 base images.","spans":[{"start":0,"end":36,"type":"strong"}]},{"type":"paragraph","text":"Update Friday, January 12, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"Our engineering team continues to procure and test patches as they become available and we have a significant amount of resources dedicated to this task. While numerous patches have been rolled out for Meltdown, mitigations for Spectre are still sparse and raw. Unfortunately, many distributions have not been able to roll out a full set of patches to address all 3 variants of the exploits. We will continue preliminary testing through the week of January 15th. These tests will have no customer impact, and will be focused on getting machines up and running in these new environments.","spans":[]},{"type":"paragraph","text":"Intel released a microcode update this week, unfortunately the update was determined to cause stability issues for other Intel customers, and has since been pulled back. DigitalOcean did not apply this microcode to our fleet, and we are awaiting the release of new a microcode. Once we have the final microcode in hand, we will begin performance/regression testing to validate the update in our environment.","spans":[]},{"type":"paragraph","text":"As we have previously mentioned, fleet wide reboots will take place following successful testing and validation. We will communicate the reboot schedule to customers in advance of any action. In the meantime, we expect to share another update here on Friday 1/19. For more information about protecting your Droplets, you can reference this tutorial.","spans":[{"start":335,"end":348,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}}]},{"type":"paragraph","text":"Meltdown distribution updates to date: CentOS 6 & 7, RancherOS, CoreOS, Debian 7, 8 & 9, Fedora 27 Atomic, Ubuntu 14.04, 16.04 & 17.10 base images have been updated. Fedora 26 & 27 have updates available, but users will have to manually update as Fedora does not have updated Cloud Images.","spans":[{"start":0,"end":38,"type":"strong"}]},{"type":"paragraph","text":"Update Tuesday, January 9, 2018:","spans":[{"start":0,"end":31,"type":"em"}]},{"type":"paragraph","text":"As the ongoing security vulnerability developments evolve there are still many unknowns. Like many other cloud service providers we are participating in Linux kernel working groups, coordinating with Intel and other hardware vendors, and doing our own exhaustive research. The goal is to protect the security of our users' data and provide a long term solution instead of offering a cascade of short term fixes. That said, here is our approach based on what we know today.","spans":[]},{"type":"paragraph","text":"As mitigations for vulnerabilities are released, our engineering team is diligently and methodically testing each one to ensure that our customers have stability and performance when the patches are applied. We will continue this testing process for all new patches. It is difficult to estimate the timeframe we’ll need to create, debug and test them, as new patches are being rolled out sporadically, but we anticipate that the testing phase will last for at least another week. We plan to share another update this Friday, January 12th. As mentioned in our last post, we will alert customers in advance of any reboots that need to take place.","spans":[]},{"type":"paragraph","text":"In the meantime, we encourage you to track the patches being released on your distributions and we’ve compiled a list of distribution patches released thus far, which we will update as they become available. It’s important to note that updated distributions do have various fixes, but none have remediations for all three vulnerabilities. In order to help our users protect themselves as the patches become available, we have changed all Droplets to utilize our Grubloader kernel, ensuring that Droplet kernels can be upgraded by the user, without DigitalOcean involvement.","spans":[{"start":462,"end":479,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-update-a-digitalocean-server-s-kernel"}}]},{"type":"paragraph","text":"Meltdown distribution updates to date:\nCentOS 7, RancherOS, CoreOS, Debian 9, Fedora 27 Atomic","spans":[{"start":0,"end":38,"type":"strong"}]},{"type":"paragraph","text":"We’ve also authored this tutorial to help you apply patches. This, too, will be updated as more information and patch releases become available.","spans":[{"start":25,"end":33,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-protect-your-server-against-the-meltdown-and-spectre-vulnerabilities"}}]},{"type":"paragraph","text":"Update Friday, January 5, 2018:","spans":[{"start":0,"end":30,"type":"em"}]},{"type":"paragraph","text":"Our engineering team continues to remain in close coordination with Intel, Canonical, and our other vendors. We are currently awaiting patches that, once applied, should mitigate the security vulnerabilities. We expect to have those patches on Tuesday, January 9th, and will begin formal testing as soon as they are received.","spans":[]},{"type":"paragraph","text":"In the interim, as patches become available on the Linux kernel list and microcode updates become available from Intel and other vendors, we are doing ad-hoc testing to understand potential performance implications and evaluate stability concerns so we can execute our mitigation as smoothly as possible.","spans":[]},{"type":"paragraph","text":"The scope of work is extensive; everything from the kernel to compilers and emulation systems must be patched and tested. We will be devoting all of our available engineering resources to this effort, but the set of changes is so significant that we cannot yet estimate the time frame needed to complete validation. The security of our customers and the reliability of our services are important to us and it is critical that we take the time to validate before we roll out changes.","spans":[]},{"type":"paragraph","text":"We expect to post another update on Tuesday, January 9th, once we have received the patches and testing is underway. We will share updates here sooner if additional information becomes available. We appreciate your patience!","spans":[]},{"type":"paragraph","text":"Update Thursday, January 4, 2018:","spans":[{"start":0,"end":32,"type":"em"}]},{"type":"paragraph","text":"Our engineering team continues to coordinate closely with Intel to determine the exact scope and impact of the Meltdown and Spectre security vulnerabilities. It is our current understanding that DigitalOcean is not vulnerable to the Meltdown (Variant 3) exploit because of our usage of KVM virtualization. However, we will still be taking the necessary steps to protect our customers from the impact of the Spectre (Variants 1 and 2) exploits.","spans":[]},{"type":"paragraph","text":"We will be obtaining the patches necessary to mitigate the vulnerabilities and once our engineering team has validated them, we will be rebooting our entire fleet of Droplets. DigitalOcean users will also need to upgrade their own kernels, and we will be working closely with them to ensure that this process goes as smoothly as possible. Every customer will receive advanced notification before we initiate the reboots.","spans":[]},{"type":"paragraph","text":"Original post Wednesday, January 3, 2018:","spans":[{"start":0,"end":40,"type":"em"}]},{"type":"paragraph","text":"Earlier this week, we became aware of a potential security flaw impacting Intel hardware used by DigitalOcean and many other cloud service providers. Since learning of this issue, we have been actively investigating and tracking Linux kernel activity and our development team has been working diligently to obtain as much information as possible from Intel. Unfortunately, the strict embargo placed by Intel has significantly limited our ability to establish a comprehensive understanding of the potential impact.","spans":[]},{"type":"paragraph","text":"Based on our investigation and the information we have received thus far, we believe that it may be necessary to reboot impacted customer Droplets. If reboots are determined to be the correct course of action for DigitalOcean users, we will schedule the urgent maintenance and notify impacted customers in advance.","spans":[]},{"type":"paragraph","text":"We are continuing to monitor this situation and work with Intel to obtain more details. We’ll share updates in this blog post as additional information becomes available to us.","spans":[]},{"type":"paragraph","text":"You can read Intel’s initial statement here.","spans":[{"start":39,"end":43,"type":"hyperlink","data":{"link_type":"Web","url":"https://newsroom.intel.com/news/intel-responds-to-security-research-findings/"}}]},{"type":"paragraph","text":"Josh Feinblum leads security and compliance for DigitalOcean and serves as Chief Security Officer. Prior to DigitalOcean, he was the head of security at Rapid7 and started several security programs across hyper-growth, technology-oriented healthcare companies. He is deeply involved in the security community and has more than 14 years of experience managing security teams, overseeing major clients at large managed service providers, and starting privacy and security related programs across commercial and federal financial service firms.","spans":[{"start":0,"end":541,"type":"em"}]}],"blog_post_date":"2018-01-03","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}},{"tag1":{"tag":"Trust & Security","_linkType":"Link.document","_meta":{"uid":"trust-security"}}}],"_meta":{"uid":"a-message-about-intel-security-findings"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Ryan Quinn","author_image":{"dimensions":{"width":240,"height":240},"alt":"Ryan Quinn","copyright":null,"url":"https://images.prismic.io/www-static/f9ea432b5990fac0de17b009eb0c7b3f2dc6885b_pasted-image-at-2017_09_15-10_25-am.png?auto=compress,format"},"_meta":{"uid":"ryan_quinn"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"waves illustration with the word currents","copyright":null,"url":"https://images.prismic.io/www-static/46f6503e2a60d5a17286285d3596eef8db19d91f_currets_blog_header--1-.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"DigitalOcean Currents: December 2017","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"In September we shared the results of the first DigitalOcean Currents survey and now we’re back with some fresh data and key insights for the coming year.  Technology moves quickly, so by sharing our latest findings each quarter we hope to provide some insight on what is important to developers and what trends are taking hold in the industry.","spans":[{"start":42,"end":76,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/currents-developer-report/"}}]},{"type":"paragraph","text":"Among other findings we learned that:","spans":[]},{"type":"list-item","text":"Linux continues to dominate the server ecosystem. 89 percent of respondents report it as their preferred server operating system.","spans":[]},{"type":"list-item","text":"Almost half of our respondents (46 percent) reported they would be likely to look for a new job in 2018.","spans":[]},{"type":"list-item","text":"Among those job seekers work environment and culture was the most important factor when choosing a new employer.","spans":[]},{"type":"heading4","text":"Methodology","spans":[]},{"type":"paragraph","text":"In November we reached out to our followers on social media, subscribers to Infrastructure as a Newsletter, and the members of several technology-focused Reddit communities. We asked what was important to them, what challenges they faced in 2017, and what they are looking forward to in the year to come.  We offered each participant a $5 gift card to our online store for their participation.  We expected the results to reflect the view of our developer community and did not ask directly about any services we provide or about cloud hosts in general.","spans":[{"start":76,"end":106,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/newsletter"}}]},{"type":"heading3","text":"AI & Machine Learning Will Continue To Be Hot Topics in 2018","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/db1cd08160b9dc219032a6d41ec78e9f543286f6_pasted-image-0.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"AI/ML is already an incredibly hot topic among developers with new applications, for these new technologies appear almost daily. We found that while only 17% had worked with these technologies in 2017, 73% of those who had yet to dive into these areas were planning to learn more about AI/ML in 2018.  Anticipating this interest, DigitalOcean has started creating new content to help developers to learn about AI/ML along with a Machine Learning one-click application image to allow them to try out these tools quickly.","spans":[{"start":364,"end":415,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tags/machine-learning?type=tutorials"}},{"start":429,"end":473,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/one-click-apps/machine-learning/"}}]},{"type":"heading3","text":"Many Don’t Believe They Can Benefit From Continuous Integration","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/6a348ecd86d015473041b8d461175cfa87f2b6f0_pasted-image-0-2.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"Over the last couple of years, automation in the form of continuous integration and development has become very popular because of its ability to create a seamless DevOps process, from writing code to deploying it to production. 42% of our respondents report using these workflows already. Of those that are not already using CI/CD, 46% do not believe that these methods are needed for their workflow and 38% have plans to implement CI/CD in the future.","spans":[]},{"type":"heading3","text":"Let's Encrypt is Dominating the SSL Certificate Market","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/f07f80956f228daa355a9dfb4859e17889da8270_pasted-image-0-3.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"Since launching in 2016, Let's Encrypt, which provides free SSL certificates, has become tremendously popular with a massive 67% of our respondents reporting that it was their provider of choice.  The next most popular provider was Comodo at 8%.","spans":[{"start":25,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tags/let-s-encrypt?type=tutorials"}}]},{"type":"paragraph","text":"In order to bring you the most recent information, DigitalOcean Currents will be shared every quarter, highlighting the latest trends among developers.","spans":[]},{"type":"paragraph","text":"If you would like to be among the first to receive Currents each quarter, sign up here. You’ll receive the latest report each time it is released, can share your ideas on what topics we should cover, and can choose to be among those asked to share your views and experiences in our next survey.","spans":[{"start":74,"end":86,"type":"strong"},{"start":74,"end":86,"type":"hyperlink","data":{"link_type":"Web","url":"http://do.co/getcurrents"}}]},{"type":"paragraph","text":"Read more about these and other findings in the full report. Download the full currents report here.","spans":[{"start":61,"end":100,"type":"strong"},{"start":61,"end":100,"type":"hyperlink","data":{"link_type":"Web","url":"https://do.co/currents-report"}}]}],"blog_post_date":"2017-12-19","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"currents-dec-2017"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Karl Alomar","author_image":{"dimensions":{"width":188,"height":188},"alt":"Karl Alomar","copyright":null,"url":"https://images.prismic.io/www-static/7548e1efc55e084d8c6c372ac20fac8b28bb2a40_karl_alomar-dca53f51.png?auto=compress,format"},"_meta":{"uid":"karl_alomar"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"illustration of people with chat boxes above them","copyright":null,"url":"https://images.prismic.io/www-static/db8829ec7c30444e24c0a8f9eb72a60f84509c3d_scaling_teams_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Scaling Teams and Cultures","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Scaling an idea into a business is an exciting, challenging endeavor. Any founder will tell you that building a business is a complex process, with hurdles that evolve as you grow. But it’s not just the ever-changing market landscape that presents challenges; from building a team to fostering a culture, there are internal nuances to navigate at every step of your organization’s journey.","spans":[]},{"type":"paragraph","text":"In a few short years, DigitalOcean has grown from a founding team of five to a well-funded startup with over 400 employees. We’re not just a startup anymore, but, as with any high growth company, the journey hasn’t been without growing pains. In Berlin, I had the opportunity to share some organizational constructs and cultural considerations through different stages of growth along with the lessons learned from my vantage point as DigitalOcean’s COO with the entrepreneurs at The Family.","spans":[{"start":480,"end":490,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.thefamily.co"}}]},{"type":"paragraph","text":"In the video below, I navigate the phases of growth in a competitive, evolving market, and share our experiences. I’m sure you can relate to the anecdotes I share, and I’d love to continue the conversation started in Berlin in the comments section.","spans":[]},{"type":"paragraph","text":"Karl Alomar is a serial entrepreneur with extensive experience in developing high growth businesses. He is responsible for driving the day-to-day business and people operations, and manages DigitalOcean's international footprint—along with all procurement and global operations activities—as the company continues to build out its hardware and datacenter infrastructure internationally. Prior to DigitalOcean, he was the co-founder and senior partner of China Export Finance, Ltd, where he helped the business to grow from inception to more than $125M of annual revenue within four years. He received his MBA from Columbia Business School in New York and a Bachelor's in Electrical and Electronic Engineering from Imperial College London.","spans":[{"start":0,"end":738,"type":"em"}]}],"blog_post_date":"2017-12-19","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"scaling-teams-and-culture"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Danny Arango","author_image":{"dimensions":{"width":639,"height":532},"alt":"Danny Arango","copyright":null,"url":"https://images.prismic.io/www-static/2a71f76a56ff0dd23e1c0d72a7ab688e434c23fe_13912913_10104133684160610_7874376075980757732_n-1.jpg?auto=compress,format"},"_meta":{"uid":"danny_arango"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Illustration of people wearing shirts with one letter on them standing together they spell out interns","copyright":null,"url":"https://images.prismic.io/www-static/46d70b47b1b2af3007c2472ff03b7e213733ec8e_interns_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Meet the Minnows: Stories from DigitalOcean's Inaugural Intern Program","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"This is the second installment in a two-part series about DigitalOcean’s first internship program. In this post, we share more stories from interns in our inaugural class. (Read the first installment here.)","spans":[{"start":0,"end":206,"type":"em"},{"start":173,"end":205,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/interns/"}}]},{"type":"heading4","text":"Alisha KC, Cloud Engineering Team intern","spans":[]},{"type":"paragraph","text":"During my internship, I worked on an event error monitoring system which is used internally by the teams at DO. I owned many parts of the product from data discovery and data collection to metrics presentation. My manager always supported and encouraged me to make my own decisions about the project while teaching me how to use new tools and navigate the codebase. My service tracks event information as it progresses across the cloud with the help of some information from DO’s datastore. It then stores the metrics in the Prometheus server. These metrics are then visualized in a dashboard in various ways, using Grafana, allowing users to quickly and easily recognize different relationships between the events. The service provides better insight into event processing failures and paves the way for additional metrics collection.","spans":[]},{"type":"paragraph","text":"My manager was conscious in making sure that I was using tools and technologies that are recognizable in the real world instead of using just DO’s  internal tools. I got the opportunity to learn and work with the Go programming language, protocol buffers, Prometheus, SQL, and Grafana, among others. Working with so many technologies in such a short period of time has given me the confidence to pick up and try new technologies that I was previously nervous to use.","spans":[]},{"type":"heading4","text":"Anand Vyas, SWE-NET (Cloud Engineering-Networking) Team intern","spans":[]},{"type":"paragraph","text":"My team and I worked on a project for isolating private customer networks that involves building overlay tunnels. The design requires more active control of the network using SDN, as opposed to legacy network infrastructure like traditional routers and switches. I worked on the ping responder in IPv6. Because Echo requests and NS (Neighbor Solicitation) messages both use ICMP in IPv6, I've laid the foundation for an IPv6 Neighbor Discovery service as well. With this added control, we can eliminate excess traffic from traversing our physical network by creating a service the responds to ARPs and pings closer to the requesting Droplets.","spans":[]},{"type":"paragraph","text":"A challenge for me was having to learn the Go programming language from scratch. It is quite different from the programming languages I had experience in. It was difficult to adapt at first, but now I feel quite comfortable using it and can also see a lot of benefits in its design. Also, learning the technical details of software-based networking and having a deep understanding of the project's architecture and how each part functions was a challenge I had to overcome for the success of this project.","spans":[]},{"type":"paragraph","text":"DO wasn’t afraid to entrust the responsibility of such a complex project to an intern. Everyone has a singular goal: the success of the project(s) at hand. And they will do anything and everything to achieve that. All in all, the team has been very supportive and they sincerely cared about my growth. This makes me feel very fortunate to have been a part of this amazing team.","spans":[]},{"type":"heading4","text":"Jordan Shea, Frontend Infrastructure Team intern","spans":[]},{"type":"paragraph","text":"I was placed in the Frontend Infrastructure team under Phil Tobias. Unlike me, Phil is a remote employee working out of California, so I was initially unsure about how we would collaborate effectively. But DO has seemingly mastered remote work, because I don’t think I could’ve asked for a better or more supportive manager.","spans":[]},{"type":"paragraph","text":"With the guidance of Phil and my DigitalOcean mentor, Iheanyi, I was able to construct a timeline that would map out the milestones for my internship project: the ChatOps system. The ChatOps system would serve as an alternative means for DO users to spin up or destroy Droplets through the use of a Slackbot named Sammy (Sammy the Shark is DO’s mascot). For Slack and other similar applications, bots can be called upon to perform special commands, such as reminding a user about a meeting or for silly things like posting GIFs. The hope was that by the end of my internship, I would have a working product that could be inherited by another team and eventually deployed to the public. I didn’t want to create something that would simply be put to the side, but rather something that would have real value to a customer. Whether it be managing Droplets, searching through community articles to answer user questions, or providing the user access to speed tests, I wanted the ChatOps system to be the jack of all trades.","spans":[]},{"type":"paragraph","text":"The ChatOps system served as a creative catalyst for me, and it gave me the chance to see the evolution of something that I had built from the ground up. Furthermore, it inspired me to design other Slackbots for DigitalOcean, such as creating a Daily Stand-up bot for the Frontend Infrastructure team. For both of these products, I can say the most enjoyable experience was seeing my team members get excited when they saw the requested features or improvements implemented the very next day. For me, that was the most valuable part of my internship: feeling the joy and support from the consumers that you code for.","spans":[]},{"type":"heading4","text":"Andrew Rouditchenko, Compute Engineering Team intern","spans":[]},{"type":"paragraph","text":"As DigitalOcean scales to support new customers and products, we need reliable tools to monitor our internal services. On the Compute Team, a subset of us focus on our fleet of hypervisor services. Hypervisors manage all kinds of Droplet events, including creates, destroys, and resizing. We collect and monitor tons of aggregated information about our hypervisors that allow us to ensure their health. While we previously had a method to survey hypervisor performance across the board, we lacked the tools to provide introspection to specific hypervisors. Given a problem with a hypervisor, it took specific domain knowledge to gain access to it and retrieve helpful information.","spans":[]},{"type":"paragraph","text":"During my internship, I was responsible for improving our services and creating new tools to make this information more readily available. My new tools provide a straightforward way for engineers to observe the status of events and Droplet configuration on any hypervisor. This functionality reduces the time it takes to debug hypervisor problems. The new interfaces will help engineers transition our services to new internal architectures. These tools provide immediate value to our team, and they leave a framework for future extensions. It will be straightforward to expose this information in a GUI so that support teams can also benefit from it.","spans":[]},{"type":"paragraph","text":"When I applied for this internship, I sought a technical and applied experience at a fast-paced company. This internship was a great fit for me as I was able to get an in-depth experience on an engineering team and learn more about my excitement for industry and research. From each conversation I’ve had with people on my team, I’ve been able to sample the kinds of exciting challenges that each person solves. In particular, I was able to speak with several engineers with research backgrounds. These conversations have been instrumental in helping me shape my career goals and decide what experiences I need to pursue in the future to reach them.","spans":[]},{"type":"heading4","text":"Kevin Wei, Demand Generation and User Growth (Marketing) Team intern","spans":[]},{"type":"paragraph","text":"I’ve always been interested in tech startups and the VC scene. As a VC-backed startup, DigitalOcean was a perfect opportunity for me to get a look inside what it’s like to work for a late-stage startup. Additionally, DigitalOcean competes against large market incumbents, so it’s been very enlightening to see DO’s strategy and differentiation strategy as an “upstart” in the cloud infrastructure market.","spans":[]},{"type":"paragraph","text":"I was definitely interested in working on the business side of a startup to get a handle for strategy, business models, and scaling. I think working in marketing here has definitely given me that experience, since I’ve been able to work on nitty-gritty details of user acquisition and help with community projects as well as remember marketing’s broader goals of market positioning and business strategy. My team—David, Hollie, Michelle, Andy, Mitch, and countless others—were always very willing to help me learn new things and understand how my projects would be useful for the organization as a whole.","spans":[]},{"type":"paragraph","text":"Unlike other interns, I worked on a large variety of projects. The bulk of my work was with Hatch, our startup success program. I streamlined various parts of the Hatch process (such as onboarding and communications) and I  worked on a lot of other projects such as our net neutrality activism. Interning at DO has given me a lot of experience with both Excel and Google Sheets. I’ve been using spreadsheets non-stop for various things, learning to script in both VBA (for Excel) and Google Scripts (for Google Sheets), and this is definitely a skill that will be very useful for me going forward.","spans":[]},{"type":"heading4","text":"Sasha Krutiy, Data Team intern","spans":[]},{"type":"paragraph","text":"I was on a search to find an internship that would allow me to  accomplish a few things, like working alongside people who are good at—and love—what they do, being able to use new software or technologies, and working on something notable. I sought an environment that would give me the chance to see what the industry is really like, expose me to the type of work that I would want to do for my career, and the type of people I would work with.","spans":[]},{"type":"paragraph","text":"At DO, I met a lot of people who enjoy what they do, and are always willing to help me in any way possible, whether it is by giving me an overview of something I don’t know much about, helping me with an issue I may be stuck on, or just helping me find the right resources. I feel as if I’ve gained a lot from the people alone, whether it be tips on using a certain tool or learning more about how to better work with others. In addition, I  got the opportunity to use and in turn, learn, new tools that I had only heard of before. From starting to pick up a new coding language (Python), to figuring out how to write an automation script (Ansible), I definitely have many more much needed skills under my belt.","spans":[]},{"type":"paragraph","text":"Having one big project for the entire duration of my internship taught me the importance of pushing through no matter what. I am now less intimidated by bigger projects, those that will take at least a few weeks to complete. This was an amazing opportunity because I received help from a passionate and intelligent group of people and I  also given the chance to create something that has the potential to be of use to a sizable customer base.","spans":[]},{"type":"paragraph","text":"Interested in becoming one of our interns? Apply for a spot in our 2018 intern class.","spans":[{"start":43,"end":84,"type":"strong"},{"start":43,"end":84,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/#summer-engineering-interns-2018"}}]},{"type":"paragraph","text":"Danny Arango is a Senior Tech Recruiter at DigitalOcean. He’s passionate about building diverse teams and finding the right fit for the right people at the right time. He’s also a raging Arsenal fan (both in the positive and negative sense) and will debate anyone on the merits of 1994 being the best year in hip hop history. Follow Danny on Twitter @ElPibe627.","spans":[{"start":0,"end":361,"type":"em"},{"start":350,"end":360,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.twitter.com/ELPibe627"}}]}],"blog_post_date":"2017-12-12","tags":[{"tag1":{"tag":"Culture","_linkType":"Link.document","_meta":{"uid":"culture"}}}],"_meta":{"uid":"interns-part-2"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Alejandro (Alex) Jaimes","author_image":{"dimensions":{"width":1600,"height":1067},"alt":"Alejandro (Alex) Jaimes","copyright":null,"url":"https://images.prismic.io/www-static/2ef201f3af242c6dface5c525637e5d45cac7050_ldv_20150519_0485.jpg?auto=compress,format"},"_meta":{"uid":"alejandro_alex_jaimes"}},"blog_header_image":{"dimensions":{"width":785,"height":418},"alt":"AI letters illustration","copyright":null,"url":"https://images.prismic.io/www-static/00c473ae5146ad0b8a9257482741784cfd64d74e_ai_3_blog_kasia.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"AI in Practice","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"This is the final installment in a three-part series on artificial intelligence by DigitalOcean’s Head of R&D, Alejandro (Alex) Jaimes. Read the first post about the state of AI, and the second installment about how data and models feed computing.","spans":[{"start":0,"end":247,"type":"em"},{"start":162,"end":177,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/the-state-of-ai/"}},{"start":212,"end":246,"type":"hyperlink","data":{"link_type":"Web","url":"https://blog.digitalocean.com/how-data-and-models-feed-computing/"}}]},{"type":"paragraph","text":"So what does AI as a service mean for hobbyists, professional developers, engineering teams, the open source community, and companies today?","spans":[{"start":134,"end":139,"type":"em"}]},{"type":"paragraph","text":"Starting an AI (or machine learning) project can be a daunting task at any level, and the steps should be different depending on the context. It’s important to note that sophisticated algorithms are not a requirement for AI and more often than not solutions may be simple. Even the most basic machine learning algorithm can do a decent job for some problems and once a process is set up, more sophisticated iterations are possible.","spans":[]},{"type":"paragraph","text":"An alternative is starting with sophisticated algorithms—as long as there’s a good understanding of what those algorithms do and it’s “easy” to get them up and running. You don’t want to start your first iteration setting a large number of parameters you don’t understand.","spans":[]},{"type":"paragraph","text":"There are some exceptions, and arguably, choices that depend on many factors, including level of expertise, but in general, it’s feasible to start small, build, and iterate quickly—you want to build an initial solution that demonstrates value. Even if it’s imperfect, setting up a process, and obtaining data, gets you off the ground. It’s imperative, however, to ask the right questions, focus on the solution, and the needs of who will be using whatever you build, and be resourceful and creative in combining data, models, and open source frameworks. Here’s how that applies to different players in the tech space:","spans":[]},{"type":"list-item","text":"Hobbyists have the most flexibility and can perhaps dream up the wildest ideas, albeit with very limited resources. In many ways, this puts them in the best position to explore; a perfect scenario for an iterative approach, focused initially on a proof of concept, starting with simpler algorithms and existing models and datasets. Start small and experiment—a lot. There are a ton of open source tools and datasets for machine learning. Many city governments, for example (NYC and SF are prime examples) have open data initiatives that can be leveraged.","spans":[{"start":0,"end":9,"type":"strong"}]},{"type":"list-item","text":"Professional developers and engineering teams should focus on solving very specific problems. In many “first” cases, these could evolve around cost saving, speed, efficiency, or specific product features. The “how”, however, can follow the process outlined above for hobbyists. To start, treat the project like any other, by figuring out what is needed in terms of data and other resources, defining clear metrics, working closely with your product team to ask the right questions and focusing strongly on how the solution will be used- that’s the most critical issue because it will determine what algorithms and data are required. In many cases, answers to the questions might point to simple solutions that may not initially need AI, but that will enable it later. A change in an interface, for example, can significantly impact what users do and that could make the AI problem you are trying to solve a lot easier.","spans":[{"start":0,"end":45,"type":"strong"}]},{"type":"list-item","text":"The open source community has never played a more critical role, and there’s no doubt that’s one of the reasons AI is having such an impact. Important initiatives towards the future include working on tools for cleaning, processing, and handling data, as well as tools for exchanging models and repurposing them, as well as packaging task-specific models for specific application domains so they can be easily implemented as services.","spans":[{"start":0,"end":25,"type":"strong"}]},{"type":"list-item","text":"Companies need to focus on processes to enable access to data, constant updating of models, and experimentation. The field is evolving quickly, so making AI part of the cultural fabric of the company is what’s really most critical. Algorithms will change, hardware will evolve, but the processes that enable AI have a clear path. In addition to data and experimentation, the focus should be, on one hand, on improving productivity and using AI as an enabler, and on the other hand, in having a workforce that evolves with it. That requires a strong Human-Centered perspective and a strategy that helps employees be more efficient and focused on customer needs. Internally, this means empowering developers and engineers to have flexibility in choosing the tools they use, and setting up programs to keep them constantly in the loop on product and user needs, not in AI or other “silos”.","spans":[{"start":0,"end":9,"type":"strong"}]},{"type":"heading2","text":"The Future","spans":[]},{"type":"paragraph","text":"The field is evolving extremely quickly and one could argue that most of the research being published consists mainly of experimentation, on either applying known deep learning architectures to new problems or tweaking parameters. It’s clear, however, that efforts—and progress—are being made n areas such as transfer learning, reinforcement learning, and unsupervised learning, among others. In terms of hardware, it’s too early to say, but it’s very positive to see new developments in the space.","spans":[]},{"type":"paragraph","text":"Perhaps more important than advancements in algorithms, we can expect advances in how AI augments human abilities. There will be a much tighter integration between humans and machines than what computing has created thus far. For hobbyists, professional developers, engineering teams, the open source community and companies, this really translates to having a strong human-centered focus.","spans":[]},{"type":"heading2","text":"Conclusion","spans":[]},{"type":"paragraph","text":"I’ve referred to AI throughout this series, but most of my examples relate to machine learning. One of the key differences between the two is that true AI applications will have an even stronger focus on user interaction and experience. At the end of the day, it’s the applications we build that will make a difference, AI or not. How “smart” the system is, or what algorithms it uses, won’t matter.","spans":[]},{"type":"paragraph","text":"Try your hand at Machine Learning with the DigitalOcean Machine Learning One-Click application.","spans":[{"start":43,"end":82,"type":"strong"},{"start":43,"end":82,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/products/one-click-apps/machine-learning/"}}]},{"type":"paragraph","text":"*Alejandro (Alex) Jaimes is Head of R&D at DigitalOcean. Alex enjoys scuba diving and started coding in Assembly when he was 12. In spite of his fear of heights, he's climbed a peak or two, gone paragliding, and ridden a bull in a rodeo. He's been a startup CTO and advisor, and has held leadership positions at Yahoo, Telefonica, IDIAP, FujiXerox, and IBM TJ Watson, among others. He holds a Ph.D. from Columbia University.","spans":[]},{"type":"paragraph","text":"Learn more by visiting his personal website or LinkedIn profile. Find him on Twitter: @tinybigdata.*","spans":[{"start":27,"end":43,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.alexjaimes.com/"}},{"start":47,"end":63,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.linkedin.com/in/alexjaimes/"}},{"start":86,"end":98,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.twitter.com/tinybigdata"}}]}],"blog_post_date":"2017-12-05","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"ai-in-practice"}}}]}}}