{"componentChunkName":"component---src-templates-blog-list-jsx","path":"/blog/22/","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":252,"numPages":33,"currentPage":22,"data":[{"node":{"author":{"_linkType":"Link.document","author_name":"Bryan Liles","author_image":null,"_meta":{"uid":"bryan_liles"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/c883d3cf-14fb-4648-8d30-cbd199bcea48_doctl.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing doctl: the Command Line Interface to DigitalOcean","spans":[]}],"blog_post_content":[{"type":"heading3","text":"Why a CLI utility?","spans":[]},{"type":"paragraph","text":"When DigitalOcean entered the market four years ago, our team spent an extraordinary amount of time designing a web user interface that was easy to use and inviting for developers. Simple and elegant design is something we have always strived for as a company. Over time, as the amount of functionality has increased, the ease of use has remained.","spans":[]},{"type":"paragraph","text":"That goal goes beyond just the web interface; we've sought to build an API that is just as easy to use. When we released version 1 of our API, a few popular tools emerged. Tugboat, which allowed you to manage your DigitalOcean resources from the comfort of your command line, was a particular favorite. Late last year, we deprecated V1 and released DigitalOcean API V2. With API V2 came a plethora of improvements and an enhanced developer's portal which provides information on every API endpoint along with usage examples and guides.","spans":[{"start":172,"end":179,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/pearkes/tugboat"}},{"start":349,"end":368,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2"}},{"start":430,"end":448,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/"}}]},{"type":"paragraph","text":"As developers ourselves, we spend a lot of our time in a terminal. So we have decided to upgrade that experience as well with an official command line interface (CLI) tool entitled `doctl`. `doctl` provides an accessible interface to our API, taking full advantage of improvements introduced in API V2 and support for newer DigitalOcean features like Floating IPs. It allows us to deliver more complex features and workflows as well.","spans":[{"start":351,"end":363,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean"}}]},{"type":"heading3","text":"Installation and usage","spans":[]},{"type":"paragraph","text":"`doctl` is available as a precompiled binary for Linux, Mac OS X, and Windows. You can download the release on GitHub.","spans":[{"start":96,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/doctl/releases/"}}]},{"type":"paragraph","text":"Getting started with `doctl` is easy. To retrieve your DigitalOcean access token and save it locally, just run:","spans":[]},{"type":"paragraph","text":"    ```[php]{`doctl auth login`}```","spans":[]},{"type":"paragraph","text":"You can view your account settings with:","spans":[]},{"type":"paragraph","text":"   ```[php]{`doctl account get`}```","spans":[]},{"type":"paragraph","text":"As an example of what `doctl` can do, we can create a Debian 8 Droplet in NYC1 with a public SSH key installed for the root user in one line:","spans":[]},{"type":"paragraph","text":"    ```[php]{`doctl compute droplet create webserver01 --region nyc1 --image debian-8-x64 --size 4gb --ssh-keys 1234 --wait`}```","spans":[]},{"type":"paragraph","text":"`doctl` can also configure the output. By default, it will be displayed in a table. If you wanted to use the output programmatically, JSON might be a better choice. For instance, you could list all of your Droplets in NYC3 as JSON using:","spans":[]},{"type":"paragraph","text":"    ```[php]{`doctl compute droplet list --region nyc3 --output json`}```","spans":[]},{"type":"paragraph","text":"To learn about all the features available, check out the full tutorial over on our community site.","spans":[{"start":53,"end":97,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean-command-line-client"}}]},{"type":"heading3","text":"Simple and powerful","spans":[]},{"type":"paragraph","text":"`doctl` is not only an interface to the DigitalOcean V2 API. It also simplifies more complex workflows. Previously, when using the API to snapshot a Droplet, you'd have to separately retrieve the action ID and continuously query the action endpoint to know the status of the snapshot. Now `doctl` can handle that for you. Using the `--wait` flag, it can snapshot a Droplet and block until the action completes. The same concept applies to other activities which don't complete instantaneously, like Droplet creates.","spans":[]},{"type":"paragraph","text":"`doctl` also simplifies activities which do not have an API endpoint. If you create a Droplet and don't assign the IP address in DNS, `doctl` allows you to SSH to your Droplet by name.","spans":[]},{"type":"paragraph","text":"    ```[php]{`doctl compute ssh <droplet name>`}```","spans":[]},{"type":"paragraph","text":"By default, it assumes you are using the `root` user. If you want to SSH as a specific user, you can do that as well:","spans":[]},{"type":"paragraph","text":"    ```[php]{`doctl compute ssh <user>@<droplet name>`}```","spans":[]},{"type":"heading3","text":"Contribute","spans":[]},{"type":"paragraph","text":"Like much of our internal tooling, `doctl` is written in Go. It is completely open source and available on GitHub. We're excited to be able to share this with our community and look forward to collaborating on building a tool we hope you'll love. Check out the contribution guidelines, and dive into the code.","spans":[{"start":94,"end":113,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/doctl/"}},{"start":257,"end":284,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/doctl/blob/master/CONTRIBUTING.md"}}]},{"type":"paragraph","text":"What else you would like to see from `doctl`? Let us know in the comments.","spans":[]}],"blog_post_date":"2016-03-28","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"introducing-doctl"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":null,"blog_headline":[{"type":"heading1","text":"Update on the March 24, 2016 DNS Outage","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Yesterday, DigitalOcean's DNS infrastructure was unavailable for two hours and four minutes. During this time we were only able to respond to a small fraction of the DNS requests sent to ns1, ns2, and ns3.digitalocean.com. We know how much you rely on DigitalOcean, and we take the availability and reliability of our services very seriously. We would like to apologize and share more details about our DNS system in general, this specific attack, and what we are doing to make our systems more resilient from here on.","spans":[{"start":166,"end":169,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Domain_Name_System"}}]},{"type":"heading2","text":"Some background","spans":[]},{"type":"paragraph","text":"The resolvers which compose our authoritative DNS infrastructure are fronted by a well-known DDoS mitigation company. The service they offer uses anycast to move traffic from clients all across the world to DigitalOcean's nearest datacenter. We then have authoritative resolvers in all of our facilities to process and respond to DNS queries. One of the most significant advantages to this approach is it allows for simple load distribution across our global footprint and makes it easy to add more resolvers to deal with increased capacity needs.","spans":[{"start":146,"end":153,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Anycast"}}]},{"type":"heading2","text":"The incident","spans":[]},{"type":"paragraph","text":"At 2:34 pm UTC (10:34 am EDT) on March 24, 2016, we began to receive alerts from our monitoring system that all the resolvers were failing to respond to DNS queries. As we investigated the issue, we noticed that the resolvers were receiving orders of magnitude more queries than normal. Although there was significantly more capacity available than is required during typical peak operation, it was still not enough to answer this unusually large quantity of inbound queries. We started to take a closer look  at the queries which were being sent to the resolvers in an attempt to differentiate normal traffic from that of a bad actor. The traffic patterns and source IP addresses matched what we would expect — just at much larger volumes than normal. You can see uncached (the yellow line) and cached traffic (the green line) below.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/7021c1cd69e69f37e271338c8536ca9dba0c7f5d_image01.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1886,"height":1190}},{"type":"paragraph","text":"At this point, our DDoS mitigation provider was engaged. All of our DNS traffic flows through their network, which has numerous protections in place to both identify and mitigate attacks. However, neither of us were able to find anything abnormal about this traffic beyond its volume at that point.","spans":[]},{"type":"paragraph","text":"Our DNS daemon was configured to empty the queue of unanswered queries at a certain threshold to ensure the daemon would be able to answer future inbound queries. This inadvertently caused cache invalidation. We rolled out a new configuration that solved this issue, but the caches failed to repopulate. Although the system can withstand all the resolvers losing their query caches under normal conditions, the vastly increased number of queries made it impossible for the resolvers to rebuild their cache. This all took place while the resolvers were already under abnormally high load, causing them further stress.","spans":[]},{"type":"paragraph","text":"At this point, we further engaged with our DDoS mitigation provider to help identify the source and types of traffic and recognized a higher-than-normal percentage of queries for PTR records. We began blocking them to allow us to respond to other queries. They were also able to reduce the number of queries reaching our resolvers by blocking some autonomous system numbers (ASNs) from which the most significant volumes of traffic were originating. Finally, we increased the TTL for cached DNS records, which is the length of time for which the edge caches responses before allowing new queries to hit the origin resolvers.  As we looked through the traffic to find patterns, it became clear that the attacker knew a large number of domains managed with our DNS infrastructure. All of our public subnets are available via ARIN, which means it's possible to find domains which are hosted on our service, infer they are using our DNS, and then send large volumes of legitimate-looking queries. Although the ASN blocking certainly prevented some legitimate DNS lookups from being answered, it almost immediately allowed the system to begin answering most queries.","spans":[{"start":348,"end":373,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Autonomous_system_(Internet)"}}]},{"type":"paragraph","text":"The service began responding to queries with normal latencies starting at 4:40 pm UTC (12:40 pm EDT). Caches began to repopulate and query volume returned to normal levels. At 5:30 pm UTC (1:30 pm EDT), the vast majority of traffic ingressing to our resolvers was clean. In the first graph below, it's possible to see the dramatic increase in query cache hit rate as the service begins to recover.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/8eef2a4c1fdb6a094823ab50b19765cb7c6a7fa9_image02.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1094,"height":472}},{"type":"paragraph","text":"The graph below shows SERVFAILs in green, 50th percentile latencies between the edge and our resolvers in blue, and 90th percentile latencies in yellow.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/b0db6aabe0d8ae40a9fbc08c1c11a98f935390de_image03.png?auto=compress,format","alt":null,"copyright":null,"dimensions":{"width":1764,"height":236}},{"type":"paragraph","text":"At 7:22 pm UTC (3:22 pm EDT), the majority of the filtering was removed.","spans":[]},{"type":"heading2","text":"Future measures","spans":[]},{"type":"paragraph","text":"There are a number of pieces of infrastructure we are reviewing and improving. Most notably, we will be building better means of moving DNS traffic around within our infrastructure. One of the things which caused this incident to span two hours was the lack of control we had over the traffic which was reaching our network. Although we'll continue to work with the DDoS mitigation provider, we will also be improving our own DNS network by creating means to internally move, rate limit, and shape traffic in order to continue to respond to most requests even while under attack. We already have robust tooling in place for mitigating attacks on the Droplet network and will extend that to support DNS as well.","spans":[]},{"type":"paragraph","text":"We will be decoupling the provisioning of additional capacity from the DDoS mitigation provider entirely. External communications with our DDoS mitigation provider meant that we had a fairly constant back-and-forth during the incident, making it harder for us to test mitigation techniques on our own. They transparently send through requests to the resolvers, which means our ability to provision more resolver capacity is dependent upon the provider's speed of response. This caused adding additional nodes to the pool to take much longer than is ideal, which subsequently slowed our return to normal operation. We're planning to change how we present our network to the proxies run by our DDoS mitigation provider to make dynamically changing the capacity of the pool easier.","spans":[]},{"type":"heading2","text":"In Conclusion","spans":[]},{"type":"paragraph","text":"First and foremost, we know that our service is critical in the success of your projects and businesses. All of us at DigitalOcean would like to apologize for the impact of this outage. We will continue to analyze this incident, hone our internal communications, and take steps to improve the reliability and resilience of the systems which power DigitalOcean.","spans":[]}],"blog_post_date":"2016-03-23","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"update-on-the-march-24-2016-dns-outage"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"DO is coming to india","copyright":null,"url":"https://images.prismic.io/www-static/fe06d0c8-d583-42c6-8b4c-2a3643f04681_hero.jpg?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Announcing the Home of our Next Data Center: Bangalore, India","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Tomorrow morning, India Standard Time, our COO Karl will announce our newest data center region at SURGE conference in Bangalore, India's central tech hub and the place where we plan to power up our next facility this summer.","spans":[{"start":99,"end":104,"type":"hyperlink","data":{"link_type":"Web","url":"https://surgeconf.com/"}}]},{"type":"paragraph","text":"Developers throughout India and the neighboring regions have been with us since the very beginning of DigitalOcean and as early as June 2013 have been urging us to come to India. We are proud to already have amazing Indian startups like KartRocket, NoBroker.in, and Flipkart among our customers today. For two years in a row, we have sponsored GopherConIndia and have had the pleasure to meet Indian developers there.","spans":[{"start":164,"end":177,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4135044-india-datacenter"}},{"start":237,"end":247,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.kartrocket.com/"}},{"start":249,"end":260,"type":"hyperlink","data":{"link_type":"Web","url":"http://nobroker.in/"}},{"start":266,"end":274,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.flipkart.com/"}},{"start":344,"end":358,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean/status/701038995845713920"}}]},{"type":"image","url":"https://images.prismic.io/www-static/367db1a410786cd84c448e76f9681e1491ff45e6_gophercon.jpg?auto=compress,format","alt":"GopherConIndia","copyright":null,"dimensions":{"width":563,"height":422}},{"type":"paragraph","text":"Look at what we spotted at GopherConIndia just last week – a Hacktoberfest 2015 T-shirt! And it wasn't the only one.","spans":[{"start":0,"end":116,"type":"em"},{"start":27,"end":41,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.gophercon.in/"}}]},{"type":"paragraph","text":"We are inspired by the entrepreneurial energy and the incredible pace of innovation here. The number of software developers throughout India will grow to over 5 million by the year 2018. Last year there were thousands of startups throughout India, and the number is projected to triple by 2020!","spans":[]},{"type":"paragraph","text":"By opening a new data center in the region, we're hoping to further facilitate innovation and collaboration for developer teams. The data center will be equipped with our most up-to-date hardware and network architecture, and it will be among the first to have access to our newest products coming out this year.","spans":[]},{"type":"paragraph","text":"We are truly excited to be coming to India, and look forward to hearing feedback on how we can best serve the community. If you are at SURGE, make sure to drop by our developers' lounge. If not, reach out to us in the comments or on Twitter any time. And remember to subscribe to the request on UserVoice in order to get updated when the data center launches!","spans":[{"start":233,"end":240,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/digitalocean"}},{"start":280,"end":304,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/4135044-india-datacenter"}}]}],"blog_post_date":"2016-02-21","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"announcing-the-home-of-our-next-datacenter"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Stephanie Morillo","author_image":{"dimensions":{"width":188,"height":188},"alt":"Stephanie Morillo","copyright":null,"url":"https://images.prismic.io/www-static/88c5ec7b08345ce34cc82af6a32619bee69b1dae_stephanie_morillo-abc491ab.png?auto=compress,format"},"_meta":{"uid":"stephanie_morillo"}},"blog_header_image":{"dimensions":{"width":2000,"height":1066},"alt":"ships sailing into the sun with the words 'A year in 2015 community' illustration","copyright":null,"url":"https://images.prismic.io/www-static/0f480f262c566d6e85afd5f1fe60447aed6ea541_blogillustration_holiday.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Thank You For 2015","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"This holiday season, we want to thank all of the people and groups in the developer community who have joined us in this journey. No matter how many Droplets continue to be deployed, what we care about most is the vibrant community of people that continue to display their passions across the community spectrum. We couldn't have done it without you!","spans":[]},{"type":"heading3","text":"Users","spans":[]},{"type":"paragraph","text":"A lot happened in 2015. We opened datacenters in Frankfurt (hallo!) and Toronto (hello!), made new operating systems and applications available, added features like Floating IPs, Team Accounts, and more. One of the biggest and hardest accomplishments was the migration of 3,500 servers to version 1.5 of our codebase which affected users across 4 datacenters. It was a team effort for us but through all of it we have our users to thank. And thank you for telling us how we can improve.","spans":[]},{"type":"heading3","text":"Collaborators","spans":[]},{"type":"paragraph","text":"A heartfelt thanks goes out to all of the people who built on version 2 of our API! Our community wrote API libraries covering many popular programming languages, adding support for more integrations. Special thanks to:","spans":[{"start":104,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/libraries/"}}]},{"type":"list-item","text":"Antoine for working on the PHP wrapper,","spans":[{"start":0,"end":7,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/toin0u"}},{"start":27,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/toin0u/DigitalOceanV2"}}]},{"type":"list-item","text":"Jeevanandam for his work on the Java wrapper,","spans":[]},{"type":"list-item","text":"Matt's work on Node, and many others as well.","spans":[{"start":0,"end":6,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/matt-major"}},{"start":15,"end":19,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/matt-major/do-wrapper"}},{"start":30,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/projects/?type=api+wrappers"}}]},{"type":"paragraph","text":"Many open source projects also built or improved integrations using new features in the API this year, thanks to awesome work from contributors like Paul Stack with Terraform and Forrest Alvarez with Salt.","spans":[{"start":149,"end":159,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/stack72/status/674299715920482305"}},{"start":165,"end":174,"type":"hyperlink","data":{"link_type":"Web","url":"https://terraform.io/"}},{"start":179,"end":194,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/failvarez/status/657319318732996609"}},{"start":200,"end":204,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/saltstack/salt"}}]},{"type":"paragraph","text":"Also, big thanks to Prometheus for creating an excellent set of building blocks for a monitoring system. And last but not least, Brad Rydzewski and the community around Drone for tirelessly taking our feedback and improving the tool we use for Continuous Integration.","spans":[{"start":20,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"http://prometheus.io/docs/introduction/overview/"}},{"start":129,"end":143,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/bradrydzewski"}},{"start":169,"end":174,"type":"hyperlink","data":{"link_type":"Web","url":"http://docs.drone.io/"}}]},{"type":"heading3","text":"Authors","spans":[]},{"type":"paragraph","text":"Thanks to over 90 incredibly talented authors — including representatives from the MySQL, DEIS, and Sandstorm teams — we added over 140 new community-written tutorials to our growing library. These articles and tutorials help countless users learn to use up-and-coming technologies. In addition, thank you to the community users who share resources and answer technical questions in the Q&A section (a very special shout-out goes out to Adam Robertson, Jonathan Tittle, and Woet).Thank you all for lending your expertise to help others!","spans":[{"start":83,"end":88,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.mysql.com/"}},{"start":90,"end":94,"type":"hyperlink","data":{"link_type":"Web","url":"http://deis.io/"}},{"start":100,"end":109,"type":"hyperlink","data":{"link_type":"Web","url":"https://sandstorm.io/"}},{"start":171,"end":190,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/"}},{"start":387,"end":398,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/questions"}},{"start":437,"end":451,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/users/sierracircle"}},{"start":453,"end":468,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/users/jtittle"}},{"start":474,"end":478,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/users/woet"}}]},{"type":"image","url":"https://images.prismic.io/www-static/fa4d290c49b887713e8fbfad510af85ed5811a0b_nylatino.jpg?auto=compress,format","alt":"NY Latino Tech Meetup, Hosted at DO","copyright":null,"dimensions":{"width":1024,"height":768}},{"type":"paragraph","text":"Source: Tweet from @nycforward","spans":[{"start":0,"end":30,"type":"em"},{"start":8,"end":30,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/nycforward/status/675104356069416964"}}]},{"type":"heading3","text":"Local Meetup Groups","spans":[]},{"type":"paragraph","text":"We plugged into the greater developer community this year by hosting over 75 tech events at our space, including events for groups like:","spans":[]},{"type":"list-item","text":"Manhattan.js,","spans":[{"start":0,"end":12,"type":"hyperlink","data":{"link_type":"Web","url":"http://manhattanjs.com/"}}]},{"type":"list-item","text":"Women Who Code","spans":[{"start":0,"end":14,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.womenwhocode.com/"}}]},{"type":"list-item","text":"Meteor","spans":[{"start":0,"end":6,"type":"hyperlink","data":{"link_type":"Web","url":"http://meteor.meetup.com/"}}]},{"type":"list-item","text":"Write the Docs","spans":[{"start":0,"end":14,"type":"hyperlink","data":{"link_type":"Web","url":"http://conf.writethedocs.org/meetups.html"}}]},{"type":"paragraph","text":"Additionally, we were delighted to host a number of technical talks by:","spans":[{"start":52,"end":67,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/playlist?list=PLseEp7p6EwiaoVfqAS71e91DM1ilpujNy"}}]},{"type":"list-item","text":"Joe Stein on Apache Mesos","spans":[{"start":0,"end":9,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/allthingshadoop"}},{"start":13,"end":25,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=dyLtK4FhCZE&amp;index=4&amp;list=PLseEp7p6EwiaoVfqAS71e91DM1ilpujNy"}}]},{"type":"list-item","text":"George Neville-Neal on the history of FreeBSD","spans":[{"start":0,"end":19,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/gvnn3"}},{"start":27,"end":45,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=wwbO4eTieQY&amp;list=PLseEp7p6EwiaoVfqAS71e91DM1ilpujNy&amp;index=1"}}]},{"type":"list-item","text":"Dave Cheney on dependency management in Go","spans":[{"start":0,"end":11,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/davecheney"}},{"start":15,"end":42,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.youtube.com/watch?v=c3dW80eO88I&amp;index=5&amp;list=PLseEp7p6EwiaoVfqAS71e91DM1ilpujNy"}}]},{"type":"paragraph","text":"Furthermore, we were honored to have #WOCinTech Chat use our office as the location for a set of freely available stock photos featuring women of color in technical roles. Thank you to all of these individuals and groups for creating amazing experiences for technologists!","spans":[{"start":37,"end":52,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.wocintechchat.com/"}},{"start":90,"end":126,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.wocintechchat.com/blog/wocintechphotos"}}]},{"type":"image","url":"https://images.prismic.io/www-static/3f7e19f027877a6d7048134a6324a044f0b03ebd_wocstock.jpg?auto=compress,format","alt":"A photo from the WOCinTech Chat stock photos gallery","copyright":null,"dimensions":{"width":640,"height":427}},{"type":"paragraph","text":"Photo credit: #WOCinTech Chat","spans":[{"start":0,"end":29,"type":"em"},{"start":0,"end":29,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.flickr.com/photos/wocintechchat/"}}]},{"type":"heading3","text":"And You!","spans":[]},{"type":"paragraph","text":"Thank you all for inspiring us and for continuing to demonstrate what makes tech such an amazing community to be a part of. From the coder just getting started to seasoned developers, we are incredibly grateful for our community and all that they build, create, and share. As always, we will continue to support you and show our gratitude. We can't wait to see what you create in 2016 and we'll be here with you all of the way!","spans":[{"start":266,"end":271,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/search?f=images&amp;vertical=default&amp;q=%23hacktoberfest&amp;src=typd"}}]},{"type":"paragraph","text":"by Stephanie Morillo","spans":[{"start":3,"end":20,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/radiomorillo"}}]}],"blog_post_date":"2015-12-22","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"thank_you_for_2015"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Tim Vogler","author_image":null,"_meta":{"uid":"tim_vogler"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Connect the dots with internet peering at IX points text on graphic of lines","copyright":null,"url":"https://images.prismic.io/www-static/1496c49ab95fa5d92a10923bad9947a663f85289_hero-2.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Connect the Dots with Internet Peering at IX Points","spans":[]}],"blog_post_content":[{"type":"preformatted","text":"This post by DigitalOcean network administrator Tim Vogler explains what IX points are, why they're integral to the medium-sized networks of the Internet, how DigitalOcean uses them, and how you can encourage your local networks (such as your ISP) to be good neighbors.","spans":[]},{"type":"paragraph","text":"All over the world, IX points connect the dots of the Internet.","spans":[]},{"type":"paragraph","text":"IX points, short for Internet Exchange points, are where companies, schools, internet service providers (ISPs) and other organizations connect their traffic directly to each other over a single Local Area Network (LAN).","spans":[]},{"type":"paragraph","text":"Some notable IXs include LINX in the UK, AMS-IX in the Netherlands, and NYIIX in New York City, to name a few. DE-CIX in Germany hits peak traffic at 4.7 Tbps each day with an average of 2.78 Tbps and the next biggest IX, AMS-IX, is no slouch with 4.27 Tbps peak and 2.49 Tbps average. That's a whole lot of cat videos being pushed.","spans":[]},{"type":"paragraph","text":"Cat video throughput is a whimsical way to measure traffic, but the Internet actually relies on these direct connections between providers. Let's imagine, for a moment, what would happen if nobody used IX points.","spans":[]},{"type":"paragraph","text":"If nobody used IX points, most Internet traffic would go through ISPs on the public Internet.","spans":[]},{"type":"paragraph","text":"The routing protocol that connects different networks together to form the Internet is called BGP, or the Border Gateway Protocol. This protocol handles the giant web-like structure of the Internet and its 500,000+ routes. While necessary for the Internet to work, BGP does have its shortcomings. It leaves out the latency of a route when deciding where to send traffic, and it is also heavily tuned by engineers, who occasionally make mistakes.","spans":[{"start":106,"end":129,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Border_Gateway_Protocol"}}]},{"type":"paragraph","text":"BGP's main decision-making mechanism is path length. For BGP, this means the fewer networks along the path from origin to destination, the better. Instead of counting router hops (number of physical devices in the path) it counts how many autonomous systems (or an organization's network) it crosses to reach the end network. Some examples of autonomous systems include ISPs and large networked enterprises such as AT&T, DigitalOcean, CloudFlare, and NTT.","spans":[{"start":343,"end":361,"type":"em"},{"start":343,"end":361,"type":"hyperlink","data":{"link_type":"Web","url":"https://en.wikipedia.org/wiki/Autonomous_system_(Internet)"}}]},{"type":"paragraph","text":"Here's an example of a route that takes a very convoluted path to reach its end point. (A route is the path traffic takes from start to end):","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/f4f4a92fd18e69c0653573828f566569b6788b9c_route.png?auto=compress,format","alt":"Route","copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"Here's a text copy of the same route:","spans":[]},{"type":"preformatted","text":"    89.32.120.0/22      *[BGP/170] 00:46:26, MED 1000, localpref 100\n    AS path: **4637 3356 5588 48095** I, validation-state:unverified\n","spans":[]},{"type":"paragraph","text":"The interesting part here is the list of providers after \"AS path,\" which is four different providers including the start and end points. So, traffic on this route needs to pass through two intermediary providers before reaching the end user's ISP. Each hop can introduce latency or packet loss.","spans":[]},{"type":"paragraph","text":"How can we address this issue? You might have guessed by the title of this post: IX points, of course!","spans":[]},{"type":"paragraph","text":"IX points send data over self-contained layer 2 networks (that use fast layer 2 switching) instead, shortening the routes data needs to travel, and thus reducing the cost and latency of sending data over the Internet.","spans":[]},{"type":"paragraph","text":"Here's another route showing a direct connection between DigitalOcean and CloudFlare, unencumbered by middleman networks:","spans":[]},{"type":"preformatted","text":"    103.31.5.0/24      *[BGP/170] 2w6d 18:21:37, MED 200, localpref 100\n    AS path: **13335**\n","spans":[]},{"type":"paragraph","text":"As you can see, the traffic hops directly to Cloudflare's network without having to wade through the depths of the public Internet.","spans":[]},{"type":"paragraph","text":"IX points provide a better user experience because traffic follows a shorter, faster path that's easier to control and provide network consistency on. In fact, the more IX points, the better the Internet functions.","spans":[]},{"type":"paragraph","text":"Setting up a peering relationship on an exchange is extremely simple. You'll need to contact the organization that runs the IX to get a LAN connection and IP address. Once you have that, it's as simple as sending an email with your interface details and asking politely to peer.","spans":[]},{"type":"paragraph","text":"With our newest datacenter in Toronto, for example, all it took was an email with our ASN and an IP address to set up a peering relationship with Cloudflare. We send a lot of traffic their direction, so the mutual benefits made it a no-brainer.","spans":[]},{"type":"paragraph","text":"It'd be great if the entire Internet was fueled by IX points. Achieving 100% peering isn't realistic, considering that there are 300 IXs worldwide, you need to be close enough to plug a cable in, and someone has to pay for the switching equipment (usually fueled by membership fees).","spans":[]},{"type":"paragraph","text":"However, connecting any sizable network to its neighbors can help make the Internet better for everyone. If you have access to an IX, reach out to the other members to set up some sessions and connect those dots.","spans":[]},{"type":"paragraph","text":"by Tim Vogler","spans":[]}],"blog_post_date":"2015-12-09","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"connect-the-dots-with-internet-peering-at-ix-points"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Stephanie Morillo","author_image":{"dimensions":{"width":188,"height":188},"alt":"Stephanie Morillo","copyright":null,"url":"https://images.prismic.io/www-static/88c5ec7b08345ce34cc82af6a32619bee69b1dae_stephanie_morillo-abc491ab.png?auto=compress,format"},"_meta":{"uid":"stephanie_morillo"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"hacktoberfest desk with laptops","copyright":null,"url":"https://images.prismic.io/www-static/8600b580-faa3-4dcf-8adf-f8ba56f36577_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"31 Days, 4 Pull Requests, 1000s of Stories: Looking Back at Hacktoberfest","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"When we completed our first Hacktoberfest in 2014, we had 768 participants, and happily sent out T-shirts across the globe. We were eager to see what 2015 would bring, but we could never have expected the huge response we received this year!","spans":[]},{"type":"paragraph","text":"This year, we partnered with GitHub to lay down the challenge: submit four pull requests on GitHub to an open source project, and we'll send you a free limited edition T-shirt.","spans":[{"start":92,"end":98,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/blog/2067-hacktoberfest-contribute-to-open-source-in-october"}}]},{"type":"paragraph","text":"As Hacktoberfest wound down and the numbers and stories began trickling — and then pouring — in, we were overwhelmed by the results that we saw. 14,419 people signed up. 5,708 people created four pull requests. And 1,060 went above and beyond, submitting over 10 each in the month of October.","spans":[]},{"type":"paragraph","text":"We were blown away by the stories people shared about their Hacktoberfest experience. Here are just some of our favorite ones from around the world:","spans":[]},{"type":"paragraph","text":"Developer from Krakow, Poland:","spans":[]},{"type":"preformatted","text":"\"I always wanted to contribute to open source projects, but haven't had the courage to do so. Hacktoberfest encouraged me to just start doing it, so I started by writing documentation for Ember.js - my currently favourite Javascript framework. I'm glad I did that and I feel like I'm part of a worldwide developer community.\"","spans":[]},{"type":"paragraph","text":"Developer from Merelbeke, Belgium:","spans":[]},{"type":"preformatted","text":"\"It was my first time using git so everything was new for me. I had a hard time figuring everything out but at the end I finally managed to become a git-pro. Most of my contributions were bug patches to existing projects and I found the layout of Github so nice that I started using Github for writing documentation about my own projects.\"","spans":[]},{"type":"paragraph","text":"Developer from Mountain View, United States:","spans":[]},{"type":"preformatted","text":"\"This was my first time contributing to open source, despite having wanted to for ages. Thanks for giving me the final push that I needed! I created substantial documentation for two projects, and enjoyed working on one of them so much that I've reached out to the maintainer about how I can help move the project forward!\"","spans":[]},{"type":"paragraph","text":"Developer from Curitiba, Brazil:","spans":[]},{"type":"preformatted","text":"\"I always wanted to start contributing to open source but wasn't able to due to being in a company that had restrictions regarding intellectual property produced by me. I changed jobs and decided it was time to start but I had no idea where to begin! My first contribution was a small bug fix in September 31th, after reading about Hacktoberfest I had extra motivation to keep going. I closed up the month with 5 opened pull requests, three of them merged, now that I've seen first hand that contributing is not as scary as it first seemed I plan to continue contributing!\"","spans":[]},{"type":"paragraph","text":"Developer from Charleston, United States:","spans":[]},{"type":"preformatted","text":"\"I recently joined an aerospace club at my school, and we used GitHub to collaborate on the code for our Arduino-controlled space balloon. My first pull request ended up flying over 100,000 feet!\"","spans":[]},{"type":"paragraph","text":"Some schools even got their students involved:","spans":[]},{"type":"paragraph","text":"Educator from Cedar City, United States","spans":[]},{"type":"preformatted","text":"\"When we found out about the Hacktoberfest opportunity we got our entire C++ programming class to participate. Not only do I assist in the high school classes, but I am also a programming student myself. In order to keep the high schoolers on track to get 4 pull requests I created repositories they felt comfortable contributing to and still felt accomplished.\"","spans":[]},{"type":"paragraph","text":"Students from Cedar City, United States","spans":[]},{"type":"preformatted","text":"\"Our class was encouraged to take on Hacktoberfest. With teamwork and help from our instructors, we accomplished this task.\"","spans":[]},{"type":"paragraph","text":"and","spans":[]},{"type":"preformatted","text":"\"Our whole C++ programming class completed the challenge of doing 4 pull requests, it  was amazing [and] I can't believe we all did it!\"","spans":[]},{"type":"paragraph","text":"Hacktoberfest has been an exciting and humbling experience for us. It's exciting to see just how much it's grown, and a humbling reminder of the true size and scope of the open source ecosystem.","spans":[]},{"type":"paragraph","text":"96 countries that participated in Hacktoberfest 2015","spans":[{"start":0,"end":52,"type":"em"}]},{"type":"image","url":"https://images.prismic.io/www-static/7308577b0755ed500288326fc1014ce45ce2c9cc_map.png?auto=compress,format","alt":"Global contributions","copyright":null,"dimensions":{"width":784,"height":418}},{"type":"paragraph","text":"We are so grateful to everyone who joined in for Hacktoberfest this year. A big thank you to the maintainers of all featured projects — we look forward to working with you again. We can't wait to see what next year will bring!","spans":[]},{"type":"paragraph","text":"If you would like to get involved, or if you have ideas about how to make the next Hacktoberfest even better, get in touch!","spans":[{"start":110,"end":122,"type":"hyperlink","data":{"link_type":"Web","url":"mailto:hacktoberfest@digitalocean.com"}}]},{"type":"paragraph","text":"Hacktoberfest T-shirts are in the mail as of 11.24! :)","spans":[]}],"blog_post_date":"2015-12-01","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"looking-back-at-hacktoberfest"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Jessica Aflak Marucci","author_image":null,"_meta":{"uid":"jessica_aflak_marucci"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Inside DO: Employee-First Office Design","copyright":null,"url":"https://images.prismic.io/www-static/f04216c7-9f22-4abe-bba8-be9887e637fa_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Inside DO: Employee-First Office Design","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"I'm Jess, Director of Employee Experience, and I designed DigitalOcean's office.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/c7b8f9758dc903026599ff83552c8254dd16808b_jessica_aflak-marucci.png?auto=compress,format","alt":"Jessica Aflak Marucci","copyright":null,"dimensions":{"width":188,"height":188}},{"type":"paragraph","text":"Before the contractors could start construction, and before our architect RA-DA could draw up blueprints, we needed architectural requirements.","spans":[{"start":74,"end":79,"type":"hyperlink","data":{"link_type":"Web","url":"http://ra-da.com/"}}]},{"type":"paragraph","text":"My hope was to design a space where we could do our best work. When employees are comfortable at the office, they're free to concentrate on moving the business forward.","spans":[]},{"type":"paragraph","text":"I knew our office needed two things:","spans":[]},{"type":"list-item","text":"To keep 200 (and counting!) employees happy and productive","spans":[]},{"type":"list-item","text":"To fit DigitalOcean's personality","spans":[]},{"type":"paragraph","text":"In this post, I'll give you a behind-the-scenes look at how I turned those two priorities into a design for DigitalOcean's office.","spans":[]},{"type":"heading2","text":"Employee Wants and Needs","spans":[]},{"type":"paragraph","text":"I approached the first stage of research with this philosophy: accommodate everyone. Listening to our employees puts them first.","spans":[]},{"type":"paragraph","text":"This meant working with our introverts and our extroverts, our chatty types and our quiet-lovers, and most of all, the employees who cared about their workspace.","spans":[]},{"type":"paragraph","text":"Not everyone has strong feelings about offices. With that in mind, I invited employees to opt in to a group discussion about our architect's initial survey. By making this optional but open to everyone, employees who were highly invested in the new office design could identify themselves.","spans":[]},{"type":"paragraph","text":"At our first meeting, we showed these self-selected contributors dozens of concept pictures. We asked questions like how many private offices we needed, and whether we wanted bike storage and showers. Brainstorming over these concrete details, without trying to decide immediately, got everyone thinking creatively.","spans":[]},{"type":"paragraph","text":"I ended the meeting without making any decisions, so everyone would have time to mull over our options and collect ideas on a group Pinterest board. That shared board is how we found our lunchroom picnic tables, chalkboard wall, and a couch everyone liked.","spans":[]},{"type":"paragraph","text":"Then, we had a follow-up meeting where our employee stakeholders identified three key features we wanted for the new office.","spans":[]},{"type":"list-item","text":"Open floor plan","spans":[]},{"type":"list-item","text":"Lockdown room for heads-down work","spans":[]},{"type":"list-item","text":"Natural light for all","spans":[]},{"type":"paragraph","text":"This last requirement became a guiding light for the general office layout: our desks would line the perimeter so we get to enjoy the windows all day, instead of blocking them with conference rooms and private offices. Meeting rooms would go in the middle.","spans":[]},{"type":"paragraph","text":"With these principles, the number and use case for each room fell into place. I gave my architect RA-DA our list of requirements so she could make three designs to choose from.","spans":[]},{"type":"paragraph","text":"Going through this process with my coworkers also taught me so much about our personalities and how physical spaces affect our work.","spans":[]},{"type":"heading2","text":"Offices with Personality","spans":[]},{"type":"paragraph","text":"Next, I researched how to make our office feel unique to our company culture. I went on a fact-finding survey to San Francisco, hotbed of tech startups.","spans":[]},{"type":"paragraph","text":"I toured 11 offices in 2 days. Twilio was my favorite stop because the heart of the company showed through. They framed a pizza box holding the founders' first notes for the company plan. They celebrated the present just as much as the past with movie posters for each feature release, signed by all employees.","spans":[]},{"type":"paragraph","text":"DigitalOcean doesn't have a pizza box or movie posters, but I knew I wanted to make our culture shine in our space. I decided on two themes to start with, one serious and one fun.","spans":[]},{"type":"list-item","text":"Simplicity","spans":[]},{"type":"list-item","text":"Undersea Theme (since we are DigitalOcean)","spans":[{"start":36,"end":41,"type":"strong"}]},{"type":"paragraph","text":"For simplicity, I chose light finishes and clean lines. I wanted a carpet reminiscent of the ocean, but instead of a complicated print, I went with wide stripes of ocean blues.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/12e1cbfcf4154d2cd305b76e09aceeedbae46203_do_beach.jpg?auto=compress,format","alt":"The Beach, showing DigitalOcean's ocean-blue carpet","copyright":null,"dimensions":{"width":1500,"height":1000}},{"type":"paragraph","text":"Our mascot Sammy the Shark is just the first part of our ocean theme. I asked our illustrators to create themed decals for each conference room, like Treasure Chest, Iceberg, and Jazz Walrus.","spans":[]},{"type":"paragraph","text":"Then it was back to SoHo, where we picked the final office layout and moved on to finishes and furnishings.","spans":[]},{"type":"heading2","text":"Don't Shush Me","spans":[]},{"type":"paragraph","text":"Let's talk about noise. A little under half of our workers (40%) were seeking a silent office. 60%, on the other hand, wanted to chat without getting shushed, or just preferred to work with a bit of bustle in the background.","spans":[]},{"type":"paragraph","text":"For the quiet-lovers I installed noise-dampening panels between desks and added sound-soaking fluffy rugs to conference rooms. These accommodations make the main floor friendlier for chatting, since the noise doesn't travel.","spans":[]},{"type":"paragraph","text":"I also created the lockdown room, called The Cove, with darkened windows as a no-talking, no-eating zone, and big enough that employees can come in any time and find a seat. Instead of shushing coworkers, they can head to The Cove for some quality heads-down time to code, put together financial reports, or write a technical article.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/1f25deb6a2074b8ec3ea97c38c97890eb24cce63_do_lockdown.jpg?auto=compress,format","alt":"The Cove, DigitalOcean's lockdown room","copyright":null,"dimensions":{"width":1500,"height":1000}},{"type":"heading2","text":"Community Spaces, Private Spaces","spans":[]},{"type":"paragraph","text":"DO employees like to wander away from their desks. This helps us find a new place to focus, or encounter someone to collaborate with.","spans":[]},{"type":"paragraph","text":"The beanbags are a prime place to get some solo breakout time with your feet up.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/7f4866a27c9c57dff14cf58d0738a83854ac0890_do_beanbags.jpg?auto=compress,format","alt":"Beanbags","copyright":null,"dimensions":{"width":1500,"height":1000}},{"type":"paragraph","text":"After hours, folks like to hang out on the sectional couches in the middle of the office, a central social area that helps different teams find each other.","spans":[]},{"type":"paragraph","text":"On the other hand, sometimes we need privacy; spaces where employees can be heard without feeling overheard. In an open office, that's not a given.","spans":[{"start":98,"end":102,"type":"em"}]},{"type":"paragraph","text":"So, I built lots of smaller 2- or 5-person meeting rooms. Wood inner walls and glass outer walls let employees see out while having a solid wall at their backs, so they don't feel like someone is behind them even in the central area of a big office. The meeting rooms each have a unique feel separate from the main office floor, boxing the world out for a truly private chat.","spans":[]},{"type":"heading2","text":"Healthy Work Around the Clock","spans":[]},{"type":"paragraph","text":"Our support team works around the clock, and many employees prefer nonstandard hours. Regardless of start time, the place where people spend eight hours every day should promote mental and physical health.","spans":[]},{"type":"paragraph","text":"To accommodate our all-hours workforce, we stock the office with beverages, snacks, and breakfast foods so employees never have to work hungry.","spans":[]},{"type":"paragraph","text":"Office plants make people happier and improve air quality, in addition to being another top employee request.","spans":[]},{"type":"paragraph","text":"For the workstations themselves, we opted for adjustable sit-stand desks, and we let employees test and vote on their preferred chairs and monitors. Choosing physically flexible workstations lets us accommodate employees of all body types and builds.","spans":[]},{"type":"paragraph","text":"We also opted to use a mobile app to manage access to our floors. You might forget to bring a key fob to your late-night coding session, but you'll probably have your cell phone handy.","spans":[]},{"type":"paragraph","text":"Paying attention to the psychology and ergonomics of our space helps us take breaks from the stress of startup life.","spans":[]},{"type":"heading2","text":"Remote Life: It's Not 2000 Any More","spans":[]},{"type":"paragraph","text":"With 45% of our employees working remotely (give or take as we keep hiring), our physical space needed to aid, not detract, in bringing our remote and HQ workers together.","spans":[{"start":68,"end":74,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/company/careers/"}}]},{"type":"paragraph","text":"Videoconferencing is the most important interface between our physical office and our far-flung employees. Every meeting room comes with a TV and a Chromebox with the appropriate software already installed, so it takes just a few clicks to join a remote meeting.","spans":[]},{"type":"paragraph","text":"We have cameras and screens installed in social areas of the office as well, like our Support department, lunchroom, and presentation space, where remote employees can see and be seen.","spans":[]},{"type":"paragraph","text":"This also informed my decision to create two single-person phone booths, where an HQ employee can meet with remote coworkers or other business partners privately. Sometimes employees take their laptops into the booths instead of using the TVs, but just having those dedicated spaces for HQ-remote communication makes a big difference.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/7d87831972372ef01274002e426fbbe66d6671e0_do_phone_booth.jpg?auto=compress,format","alt":"Phone booth for remote meetings","copyright":null,"dimensions":{"width":1000,"height":1500}},{"type":"heading2","text":"Putting It All Together","spans":[]},{"type":"paragraph","text":"If you're ever tasked with designing an office, your architect will become your most trusted advisor. Many office architects are experienced in designing for older companies, so make sure you work with a professional who thinks outside the box, and gets the startup mentality.","spans":[]},{"type":"paragraph","text":"At a high level, these questions can help you design your new office to put employees first:","spans":[]},{"type":"list-item","text":"Have you actually asked them? It's essential to brainstorm with your most important stakeholders.","spans":[]},{"type":"list-item","text":"What type of people will be at the office all day? Will you have visitors? How do different teams work together?","spans":[]},{"type":"list-item","text":"What does your space need to accomplish?","spans":[]},{"type":"list-item","text":"How you can physically express your company's personality and values in the office?","spans":[]},{"type":"list-item","text":"In the end, who approves the blueprints?","spans":[]},{"type":"paragraph","text":"After you've learned more about construction than you ever expected, and that day finally comes when you move into the new office, you'll get to see your coworkers living, meeting, and making awesome things in the space you designed. That, and a well-earned vacation, makes it all worth it.","spans":[]},{"type":"paragraph","text":"Good luck!","spans":[]},{"type":"paragraph","text":"by Jessica Aflak Marucci, as interviewed by Sharon Campbell","spans":[{"start":3,"end":24,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/TheFirstLadyy"}},{"start":44,"end":59,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/captainshar"}}]}],"blog_post_date":"2015-11-18","tags":[{"tag1":{"tag":"Culture","_linkType":"Link.document","_meta":{"uid":"culture"}}}],"_meta":{"uid":"inside-do-employee-first-office-design"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Luca Salvatore","author_image":{"dimensions":{"width":250,"height":250},"alt":"Luca Salvatore","copyright":null,"url":"https://images.prismic.io/www-static/fd8fb2a54e8e54d882c33bccac82b22a684d920e_9bb2be860884302b74920173da25866a.jpg?auto=compress,format"},"_meta":{"uid":"luca_salvatore"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":null,"copyright":null,"url":"https://images.prismic.io/www-static/b654ce2f-b279-40ab-b1a7-b7fe43a28fae_ZeroTouchProvisioning-blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Zero Touch Provisioning: How to Build a Network Without Touching Anything","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Last month, we proudly launched our 11th datacenter in Toronto, Canada. Building new datacenters is becoming a pretty common occurrence for us; we launched three last year, two this year, and there are plenty more coming in the near future.","spans":[{"start":23,"end":62,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/introducing-our-new-canadian-datacenter-tor1/"}},{"start":111,"end":117,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/introducing-our-new-european-region-frankfurt/"}},{"start":118,"end":124,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/introducing-our-london-region/"}},{"start":125,"end":135,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/announcing-nyc3-with-ipv6-support/"}},{"start":136,"end":142,"type":"hyperlink","data":{"link_type":"Web","url":"https://assets.digitalocean.com/blog/static/we-re-excited-to-announce-our-singapore-datacenter-sgp1/"}}]},{"type":"paragraph","text":"This means that building a DC has become a repeatable task, and repeatable tasks are tasks that are begging for automation. This blog is the story of how we have built our last few datacenters without needing to manually log in to the majority of our devices.","spans":[]},{"type":"heading2","text":"The Slow Way","spans":[]},{"type":"paragraph","text":"There is a fair amount of effort that goes into building a network in a brand new location, not to mention the tight timeline. It's critical that the network is up and running early in the build process; without it, there's no connectivity and our platform engineers can't come in and build the hypervisors.","spans":[]},{"type":"paragraph","text":"In any new deployment, there are typically around 50 new switches to configure. Most switches have an identical configuration (except for some unique things, like the management IP address), and the new switches will almost always need their software updated to our standard version.","spans":[]},{"type":"paragraph","text":"In our early days, deploying a new network meant logging into every switch via the console port, pasting a config from a template, and then upgrading the software. With so many switches to build, it was time consuming and — let's face it — pretty boring. The whole process was in need of a total overhaul.","spans":[]},{"type":"heading2","text":"Not Touching Anything… Almost","spans":[]},{"type":"paragraph","text":"For our automated network deployment to work, we have to address a chicken and egg problem: there needs to be some form of networking already in place so the new switches can download their updated code and grab their configuration template.","spans":[]},{"type":"paragraph","text":"As a result, a small part of the network still does need to be built by hand. This is typically a small-ish firewall connected to what we call our \"out of band\" (OOB) internet link, plus a few switches to provide connectivity to the management ports of our switches. These devices have a very basic configuration, so it's easy to copy and paste it and get some initial connectivity.","spans":[]},{"type":"paragraph","text":"Additionally, we need to know the MAC address of each switch, which is printed on the side of the chassis. Fortunately, we have a fantastic datacenter team that flies all over the world to do all the physical labor involved with deploying a new location. These folks have racking and stacking down to a fine art, and part of their process is to note down the MAC address of each switch they are racking into a file for use later on.","spans":[{"start":130,"end":155,"type":"hyperlink","data":{"link_type":"Web","url":"https://instagram.com/p/yxB1Tos8F-/"}}]},{"type":"heading2","text":"The Fast Way, aka Zero Touch Provisioning","spans":[]},{"type":"paragraph","text":"The actual automation of the building process is known as Zero Touch Provisioning (ZTP). Most major networking vendors have some form of ZTP support, and the process is pretty simple. There are a few specific configurations needed on the ZTP server to make everything work.","spans":[]},{"type":"heading3","text":"Setting Up DHCP","spans":[]},{"type":"paragraph","text":"First, we need a DHCP server. We use good old ISC DHCP running on a Ubuntu server, and configure it to give the switch the information it needs once it boots up. This is the top of our dhcpd.conf file:","spans":[{"start":185,"end":195,"type":"strong"}]},{"type":"preformatted","text":"    option ztp-file-server code 150 = { ip-address };","spans":[]},{"type":"preformatted","text":"    option space ZTP;","spans":[]},{"type":"preformatted","text":"    option ZTP.image-file-name code 0 = text;","spans":[]},{"type":"preformatted","text":"    option ZTP.config-file-name code 1 = text;","spans":[]},{"type":"preformatted","text":"    option ZTP.image-file-type code 2 = text;","spans":[]},{"type":"preformatted","text":"    option ZTP.transfer-mode code 3 = text;","spans":[]},{"type":"preformatted","text":"    option ZTP-encap code 43 = encapsulate ZTP;","spans":[]},{"type":"preformatted","text":"    option ztp-file-server 10.126.1.1;","spans":[]},{"type":"preformatted","text":"    option ZTP.image-file-name \"/software/switch-image-file.tgz\";","spans":[]},{"type":"preformatted","text":"    option ZTP.transfer-mode \"http\";","spans":[]},{"type":"paragraph","text":"This basically tells a switch what it needs to know to grab its template and where to grab its updated software.","spans":[]},{"type":"paragraph","text":"The next bit of the dhcpd.conf file looks similar to this:","spans":[{"start":20,"end":30,"type":"strong"}]},{"type":"preformatted","text":"         group {","spans":[]},{"type":"preformatted","text":"            host tor1-spine1 {","spans":[]},{"type":"preformatted","text":"            hardware ethernet               5C:45:27:23:2F:01;","spans":[]},{"type":"preformatted","text":"            fixed-address                   10.200.72.138;","spans":[]},{"type":"preformatted","text":"            option routers                  10.200.72.129;","spans":[]},{"type":"preformatted","text":"            option subnet-mask              255.255.255.192;","spans":[]},{"type":"preformatted","text":"            option ZTP.config-file-name \"/tor1-spine1.config\";","spans":[]},{"type":"preformatted","text":"            }","spans":[]},{"type":"preformatted","text":"    }","spans":[]},{"type":"paragraph","text":"This is where the MAC address from the side of the switches' chassis comes into play. We need each switch to pull down the correct configuration template, so the MAC address is used to identify the switch. The `dhcpd.conf` file will have an entry like the one above for every single switch that we want to ZTP.","spans":[]},{"type":"paragraph","text":"Because creating a entry for 50 or so switches would be pretty annoying, we also automate this using simple Python script which spits out the appropriate `dhcpd.conf` file containing all the correct MAC addresses and IP addresses.","spans":[]},{"type":"heading3","text":"Configuration Templates","spans":[]},{"type":"paragraph","text":"For this process to be fully automated, each new switch needs to have a configuration template ready to go. To make this happen, we use the Jinja2 templating software and some Python, which makes it easy to create a whole bunch of templates quickly. We create a template for every device that is going to be deployed and upload the templates to the ZTP server.","spans":[]},{"type":"heading2","text":"Voila!","spans":[]},{"type":"paragraph","text":"The switch boots up and sends out a DHCP request, which the OOB firewall relays to the ZTP server. The switch then grabs its config template, downloads its software, and that's it!","spans":[]},{"type":"paragraph","text":"Here is the console output from a real Juniper QFX switch going through the process:","spans":[]},{"type":"preformatted","text":"root>","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: DHCP Client Bound interfaces:","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: DHCP Client Unbound interfaces: irb.0  vme.0  et-0/0/0.0  e","spans":[]},{"type":"preformatted","text":"    t-0/0/1.0  et-0/0/2.0  et-0/0/3.0  et-0/0/4.0  et-0/0/5.0  et-0/0/6.0  et-0/0/7","spans":[]},{"type":"preformatted","text":"    .0  et-0/0/8.0  et-0/0/9.0  et-0/0/10.0  et-0/0/11.0  et-0/0/12.0  et-0/0/13.0","spans":[]},{"type":"preformatted","text":"     et-0/0/14.0  et-0/0/15.0  et-0/0/16.0  et-0/0/17.0  et-0/0/18.0  et-0/0/19.0","spans":[]},{"type":"preformatted","text":"    et-0/0/20.0  et-0/0/21.0  et-0/0/22.0  et-0/0/23.0  et-0/1/0.0  et-0/1/1.0  et-","spans":[]},{"type":"preformatted","text":"    0/1/2.0  et-0/1/3.0  et-0/2/0.0  et-0/2/1.0","spans":[]},{"type":"preformatted","text":"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: No DHCP Client in bound state, reset all enabled DHCP clients","spans":[]},{"type":"preformatted","text":"    ","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: DHCP Options for client interface vme.0:","spans":[]},{"type":"preformatted","text":"    ConfigFile: /nyc3-spine3.config","spans":[]},{"type":"preformatted","text":"    ImageFile: /jinstall-qfx-5-13.2X51-D35.3-domestic-signed.tgz","spans":[]},{"type":"preformatted","text":"    Gateway: 10.198.73.129","spans":[]},{"type":"preformatted","text":"    File Server: 10.1.2.3","spans":[]},{"type":"preformatted","text":"    Options state: All options set","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: DHCP Client Bound interfaces: vme.0","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Active on client interface: vme.0","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Interface::   \"vme\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Server::      \"10.1.2.3\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Image File:: \"jinstall-qfx-5-13.2X51-D35.3-domestic-signed","spans":[]},{"type":"preformatted","text":"    .tgz\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Config File:: \"nyc3-spine3.config\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Gateway::     \"10.198.73.129\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Protocol::    \"http\"","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Start fetching nyc3-a1-spine3.config file from server 10.1.2.3 through vme using http","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: File nyc3-spine3.config fetched from server 10.1.2.3 through vme","spans":[]},{"type":"preformatted","text":"    Auto Image Upgrade: Start fetching jinstall-qfx-5-13.2X51-D35.3-domestic-signed","spans":[]},{"type":"preformatted","text":"    .tgz file from server 10.1.2.3 through vme using http","spans":[]},{"type":"preformatted","text":"    ","spans":[]},{"type":"preformatted","text":"    WARNING!!! On successful image installation, system will reboot automatically","spans":[]},{"type":"paragraph","text":"With the old process, it would take a full day of work to build 50 switches. With the new process, it takes 5 minutes, and the longest part is just waiting for the switch to reboot for its software update.","spans":[]},{"type":"paragraph","text":"Instead of manually logging into each device, we now set up a ZTP server, upload the configuration templates, then sit back and watch the network build itself.","spans":[]},{"type":"paragraph","text":"by Luca Salvatore","spans":[{"start":3,"end":17,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/_LucaNet"}}]}],"blog_post_date":"2015-10-21","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"zero-touch-provisioning-how-to-build-a-network-without-touching-anything"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Luca Salvatore","author_image":{"dimensions":{"width":250,"height":250},"alt":"Luca Salvatore","copyright":null,"url":"https://images.prismic.io/www-static/fd8fb2a54e8e54d882c33bccac82b22a684d920e_9bb2be860884302b74920173da25866a.jpg?auto=compress,format"},"_meta":{"uid":"luca_salvatore"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Floating IPs illustration letters","copyright":null,"url":"https://images.prismic.io/www-static/3f964a6a976e625cdda27221a7b22d764fbdcacd_hero.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Floating IPs: Start Architecting Your Applications for High Availability","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"High Availability is key to any production environment. It grants developers peace of mind knowing their application is architected to withstand failure scenarios.","spans":[]},{"type":"paragraph","text":"Today, we are excited to announce Floating IPs. A Floating IP is an IP address that can be instantly moved from one Droplet to another Droplet in the same datacenter.","spans":[{"start":34,"end":46,"type":"strong"}]},{"type":"paragraph","text":"Part of a highly available infrastructure is being able to immediately point an IP address to a redundant server. This is now possible with the addition of Floating IPs.","spans":[]},{"type":"heading2","text":"How It Works","spans":[]},{"type":"paragraph","text":"Single points of failure can be the downfall of any application. With Floating IPs, customers can associate an IP address with a different Droplet, with minimal downtime. This makes it possible to set up a standby Droplet, ready to receive your production traffic at a moment's notice.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/MDliOWQwNTgtMjFkMy00YzJkLTkxOWQtZjYyMDg4Y2NlMjk3_ha-diagram-animated.gif?auto=compress,format","alt":"Traffic is switched to another load balancer using the floating IP","copyright":null,"dimensions":{"width":1200,"height":577}},{"type":"paragraph","text":"Floating IPs are free to use. However, due to the shortage of IPv4 addresses available, if you reserve an address but don't assign it to a Droplet,  we charge $0.006 per hour for each unassigned, reserved IP. (You can relinquish unused IPs from the control panel.) To keep billing simple, you will not be charged unless you accrue $1 or more.","spans":[{"start":118,"end":146,"type":"em"}]},{"type":"paragraph","text":"Automatic Failover","spans":[{"start":0,"end":18,"type":"strong"}]},{"type":"paragraph","text":"With a bit of scripting, you're able to set up redundant load balancers that automatically fail over. If the primary load balancer goes offline, your traffic can be redirected to the secondary one with minimal application downtime.","spans":[{"start":14,"end":23,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-set-up-highly-available-web-servers-with-keepalived-and-floating-ips-on-ubuntu-14-04"}}]},{"type":"paragraph","text":"Smooth Upgrades","spans":[{"start":0,"end":15,"type":"strong"}]},{"type":"paragraph","text":"Floating IPs aren't just for failover situations. You can also use them for application upgrades. For example, you can spin up a new Droplet, run the upgrades on the new Droplet, and then switch the flow of traffic to the new Droplet.","spans":[]},{"type":"heading2","text":"Getting Started","spans":[]},{"type":"paragraph","text":"Our Ruby and Go wrappers have been updated to support Floating IPs. You can also check out our API documentation.","spans":[{"start":4,"end":8,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/droplet_kit"}},{"start":13,"end":15,"type":"hyperlink","data":{"link_type":"Web","url":"https://github.com/digitalocean/godo"}},{"start":95,"end":112,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/v2/"}}]},{"type":"paragraph","text":"The easiest way to start using Floating IPs is to read our Floating IPs on DigitalOcean tutorial. It covers everything you need to know about Floating IPs, and includes links to further guides that will step you through creating your own high availability setup.","spans":[{"start":59,"end":87,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-use-floating-ips-on-digitalocean"}}]},{"type":"paragraph","text":"Floating IPs is our first step in addressing high availability, and you can expect more in the near future.","spans":[]},{"type":"paragraph","text":"by Brooke McKim","spans":[{"start":3,"end":15,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/brookemckim"}}]}],"blog_post_date":"2015-10-19","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}},{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"floating-ips-start-architecting-your-applications-for-high-availability"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Stephanie Morillo","author_image":{"dimensions":{"width":188,"height":188},"alt":"Stephanie Morillo","copyright":null,"url":"https://images.prismic.io/www-static/88c5ec7b08345ce34cc82af6a32619bee69b1dae_stephanie_morillo-abc491ab.png?auto=compress,format"},"_meta":{"uid":"stephanie_morillo"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"illustration of a tee shirt with hacktoberfest 2015 graphic on it","copyright":null,"url":"https://images.prismic.io/www-static/827e96c005aa8b811d64c6e505be4c947dc61c41_hero-1.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Hacktoberfest is Back!","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"We're excited to announce the start of the second annual Hacktoberfest, a month-long celebration of open source software! This year, GitHub joins us as a partner in our quest to give you a cool shirt for your open source contributions.","spans":[]},{"type":"paragraph","text":"For this year's Hacktoberfest, we encourage everyone to contribute to open source software by making meaningful contributions to the projects you use and love. We've changed the minimum contributions from 50 commits to 4 pull requests. That's right: to participate, just make 4 pull requests to any open source projects of your choice (can be more than one!). The purpose of this is to shift focus to the types of contributions being made, whether you're fixing bugs, creating new features, or updating documentation.","spans":[{"start":271,"end":319,"type":"strong"}]},{"type":"paragraph","text":"We will also sponsor and host jQuery's Developer Summit in New York City, a three-day event where members of underrepresented groups will contribute to open source projects run by the jQuery Foundation, and NYC Women Who Go's Meetup with the Bridge Foundry.","spans":[{"start":30,"end":55,"type":"hyperlink","data":{"link_type":"Web","url":"http://events.jquery.org/2015/developer-summit/"}},{"start":207,"end":232,"type":"hyperlink","data":{"link_type":"Web","url":"http://www.meetup.com/NYC-Women-Who-Go/events/224977872/"}}]},{"type":"paragraph","text":"Additionally, we have chosen 31 awesome open source projects to highlight for each day in October, inviting participants to check out, use, and contribute to them. (You aren't limited to only these projects — use them as a reference point if you don't know where to begin!) We've split them out by programming language to make it easier for you to find one that piques your interest.","spans":[{"start":29,"end":60,"type":"hyperlink","data":{"link_type":"Web","url":"https://hacktoberfest.digitalocean.com/#projects"}}]},{"type":"paragraph","text":"To participate in Hacktoberfest, sign up on the Hacktoberfest website and open four pull requests on any GitHub-hosted open source project (or projects) of your choosing in the month of October. You will win a limited-edition Hacktoberfest T-shirt featuring GitHub's Octocat and our very own Sammy the Shark.","spans":[{"start":33,"end":69,"type":"hyperlink","data":{"link_type":"Web","url":"https://hacktoberfest.digitalocean.com/"}}]},{"type":"paragraph","text":"We'll send you reminders throughout the month along with our top open source project picks. What projects will you contribute to? Let us know on Twitter using the #Hacktoberfest hashtag, or tell us in the comments below!","spans":[]},{"type":"paragraph","text":"Sign up here for Hacktoberfest!","spans":[{"start":0,"end":31,"type":"hyperlink","data":{"link_type":"Web","url":"https://hacktoberfest.digitalocean.com/"}}]},{"type":"paragraph","text":"Happy Hacking!","spans":[]},{"type":"paragraph","text":"by Stephanie Morillo","spans":[{"start":3,"end":20,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/radiomorillo"}}]}],"blog_post_date":"2015-09-30","tags":[{"tag1":{"tag":"Community","_linkType":"Link.document","_meta":{"uid":"community"}}}],"_meta":{"uid":"hacktoberfest-is-back"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"DigitalOcean","author_image":{"dimensions":{"width":600,"height":600},"alt":"Sammy avatar","copyright":null,"url":"https://images.prismic.io/www-static/a10e3c2eb15b74ee43f872be3044313423b1c9a9_sammy_avatar.png?auto=compress,format"},"_meta":{"uid":"digitalocean"}},"blog_header_image":{"dimensions":{"width":750,"height":420},"alt":"city skyline with sunset and text 'Introducing TOR1'","copyright":null,"url":"https://images.prismic.io/www-static/780c928cbe5e8daa734e4b316f4b9a25c025a593_tor1_blog.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Introducing Our New Canadian Datacenter: TOR1","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Today, we're excited to announce the launch of our first Canadian datacenter in beautiful Toronto!","spans":[]},{"type":"paragraph","text":"It's hard to deny that the Canadian startup ecosystem has been booming. There are nearly half a million software developers throughout Canada, and we at DigitalOcean have always felt lots of love from the Canadian developer community. Today we're excited to send some love back their way as we proudly open the doors to our Canadian datacenter, TOR1. Universe, a platform for people to discover and create events based in Toronto, is already a DigitalOcean customer. We are excited to help them expand their business in Canada.","spans":[{"start":351,"end":359,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.universe.com/home"}}]},{"type":"paragraph","text":"This was a highly requested location. Each hypervisor comes equipped with 40GbE networking and the latest model of SSDs.","spans":[{"start":11,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://digitalocean.uservoice.com/forums/136585-digitalocean/suggestions/3554083-canadian-datacenter"}}]},{"type":"paragraph","text":"Because all of these Droplets will be physically in Canada, if your business needs to keep data in the Great White North, you'll now be able to do that. DigitalOcean is committed to upholding the highest standards in privacy and security, and TOR1 enables us to extend those protections to our customers' customers.","spans":[]},{"type":"paragraph","text":"To celebrate the TOR1 launch with our friends in Canada, we'll be hosting events throughout October. Save the dates for your cities: Toronto (Oct 13-15), Vancouver (Oct 20-22), and Montreal (Oct 28 - 29). The official event details will be added to this post soon.","spans":[]},{"type":"paragraph","text":"Head over to the Droplet create page or use the API to spin up a maple-flavored Droplet in TOR1 today!","spans":[{"start":17,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://cloud.digitalocean.com/droplets/new"}},{"start":40,"end":51,"type":"hyperlink","data":{"link_type":"Web","url":"https://developers.digitalocean.com/documentation/v2/#create-a-new-droplet"}}]}],"blog_post_date":"2015-09-22","tags":[{"tag1":{"tag":"News","_linkType":"Link.document","_meta":{"uid":"news"}}}],"_meta":{"uid":"introducing-our-new-canadian-datacenter-tor1"}}},{"node":{"author":{"_linkType":"Link.document","author_name":"Jay Gordon","author_image":null,"_meta":{"uid":"jay_gordon"}},"blog_header_image":{"dimensions":{"width":784,"height":418},"alt":"Banishing your sysadmin fears illustration with developer on computer","copyright":null,"url":"https://images.prismic.io/www-static/94f6484de6d04ed9fc8489ce1603727070dc40e0_hero-1.png?auto=compress,format"},"blog_headline":[{"type":"heading1","text":"Inside DO: Banishing Your Sysadmin Fears","spans":[]}],"blog_post_content":[{"type":"paragraph","text":"Jay Gordon, TechOps Engineer at DigitalOcean, shares his theory of the sysadmin mindset.","spans":[]},{"type":"image","url":"https://images.prismic.io/www-static/ce03ec5f2b014ddec5b7526847260515fdfeae59_jay_gordon.png?auto=compress,format","alt":"Jay Gordon","copyright":null,"dimensions":{"width":188,"height":188}},{"type":"heading2","text":"My life as a sysadmin used to be filled with fear.","spans":[]},{"type":"paragraph","text":"I was afraid I would do something terribly wrong with the systems I was running; something that would take a long time and a lot of money to fix.","spans":[]},{"type":"paragraph","text":"For example, if I upgraded my Linux kernel, would my services fail to boot? Would it take intense troubleshooting to correct while our production system was out of action for hours? Getting a new server up meant spending hours with my host: waiting for credentials, waiting for restoration from a traditional backup service, and then finally working with engineering staff to bring the application back online.","spans":[]},{"type":"paragraph","text":"Even worse, the longer I took to restore a failed system, the more my coworkers subjected me to increasing blame and shame. I was afraid, my team experienced internal strife, and my company lost money. These are just not cool things to have directed at you day after day, simply for trying to get work done. Fear is not a motivator, and fear is not a way to run a business.","spans":[]},{"type":"heading2","text":"You can fail. It's okay.","spans":[]},{"type":"paragraph","text":"Fear of failure should not stop you using Linux. The answer is not to stop failing. It's to encourage it.","spans":[]},{"type":"preformatted","text":"\"I must not fear. Fear is the mind-killer.\"—Frank Herbert","spans":[]},{"type":"paragraph","text":"Encourage failure? What kind of crazy are you talking about?","spans":[]},{"type":"paragraph","text":"When failure is cheap, it's not a problem if your new code doesn't deploy the way you thought.","spans":[]},{"type":"paragraph","text":"It's not a problem if your new custom-compiled version of MySQL doesn't start the way you thought.","spans":[]},{"type":"paragraph","text":"It's not a problem if your WordPress upgrade failed.","spans":[]},{"type":"heading2","text":"Snapshots Are Your Friends","spans":[]},{"type":"paragraph","text":"I want to share a development workflow that makes failure cheap in terms of both time and money.","spans":[{"start":81,"end":85,"type":"em"},{"start":90,"end":95,"type":"em"}]},{"type":"paragraph","text":"Let's say you're about to test an upgrade to your application.","spans":[]},{"type":"o-list-item","text":"Snapshot the server running your old, working version of the app","spans":[]},{"type":"o-list-item","text":"Create a staging environment from the snapshot","spans":[]},{"type":"o-list-item","text":"Test your new app on the staging server","spans":[]},{"type":"o-list-item","text":"Deploy to your live production server","spans":[]},{"type":"o-list-item","text":"Did it fail? Restore quickly to your working snapshot","spans":[]},{"type":"o-list-item","text":"Continue troubleshooting on the staging server at your leisure","spans":[]},{"type":"paragraph","text":"With this workflow, you can fail often and still return to operation quickly without having to rebuild everything. This workflow requires on-demand snapshots, which become possible with a responsive cloud host.","spans":[]},{"type":"paragraph","text":"A quick failure/restoration cycle also lets you meet a low Recovery Point Objective (RPO) — i.e., a recent restoration point for your data — and Recovery Time Objective (RTO) — i.e., the amount of time to restore service.","spans":[{"start":59,"end":89,"type":"em"},{"start":145,"end":174,"type":"em"}]},{"type":"paragraph","text":"A workflow that uses lots of snapshots becomes cost effective in the cloud, where typical server costs are minimal (pennies for hours of service). You can iterate through software troubleshooting without the costs of the hardware and people traditionally needed to set up new staging or restored server environments. With cloud hosting, the only sysadmin you need to get from zero to 88 MPH on your application is you.","spans":[]},{"type":"paragraph","text":"Failure is okay, as long as you have a plan. Using tools to help you move, fail, and recover should be part of your planning. If you fail often but cheaply, you'll have the time, money and most importantly, the confidence to fail, learn, and eventually prosper as a developer and sysadmin.","spans":[]},{"type":"paragraph","text":"Here are a few resources to learn more about snapshot-level backups.","spans":[]},{"type":"list-item","text":"VPS-Level Backups","spans":[{"start":0,"end":17,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-backup-strategy-for-your-vps#vps-level-backups"}}]},{"type":"list-item","text":"Whether you run MySQL or PostgreSQL, back up your relational databases before taking the snapshot","spans":[{"start":16,"end":21,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-backup-mysql-databases-on-an-ubuntu-vps"}},{"start":25,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.digitalocean.com/community/tutorials/how-to-backup-postgresql-databases-on-an-ubuntu-vps"}}]},{"type":"paragraph","text":"by Jay Gordon","spans":[{"start":3,"end":13,"type":"hyperlink","data":{"link_type":"Web","url":"https://twitter.com/jaydestro"}}]}],"blog_post_date":"2015-09-08","tags":[{"tag1":{"tag":"Engineering","_linkType":"Link.document","_meta":{"uid":"engineering"}}}],"_meta":{"uid":"inside-do-banishing-your-sysadmin-fears"}}}]}}}