diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/404.md b/404.md old mode 100644 new mode 100755 index 1cea9647e8e25..493cf183da783 --- a/404.md +++ b/404.md @@ -3,6 +3,6 @@ layout: page title: 404 - Page not found --- -Sorry, we can't find that page that you're looking for. You can try take for a look by going [back to the homepage]({{ site.baseurl }}/). +Sorry, we can't find that page that you're looking for. You can try again by going [back to the homepage]({{ site.baseurl }}/). -[Constructocat by https://github.com/jasoncostello]({{ site.baseurl }}/) \ No newline at end of file +[Constructocat by https://github.com/jasoncostello]({{ site.baseurl }}/) diff --git a/CNAME b/CNAME old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 index 282d03683ca98..40e6030143cb3 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 Barry Clark +Copyright (c) 2015 Barry Clark Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 05a30d3c3e70e..5d9e420eaf6dd --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> March, 2016: If you're on an old version of Jekyll Now and run into a) build warnings or b) syntax highlighting issues caused by [Jekyll 3 and GitHub Pages updates](https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0), just :sparkles:[update your _config.yml](https://github.com/barryclark/jekyll-now/pull/445/files):sparkles: and you'll be set! + # Jekyll Now **Jekyll** is a static site generator that's perfect for GitHub hosted blogs ([Jekyll Repository](https://github.com/jekyll/jekyll)) @@ -6,7 +8,7 @@ - You don't need to touch the command line - You don't need to install/configure ruby, rvm/rbenv, ruby gems :relaxed: -- You don't need to install runtime dependancies like markdown processors, Pygments, etc +- You don't need to install runtime dependencies like markdown processors, Pygments, etc - If you're on Windows, this will make setting up Jekyll a lot easier - It's easy to try out, you can just delete your forked repository if you don't like it @@ -37,7 +39,7 @@ Making a change to _config.yml (or any file in your repository) will force GitHu > 3. Clone down your repository and make updates locally, then push them to your GitHub repository. ![_config.yml](/images/config.png "_config.yml") - + ### Step 3) Publish your first blog post Edit `/_posts/2014-3-3-Hello-World.md` to publish your first blog post. This [Markdown Cheatsheet](http://www.jekyllnow.com/Markdown-Style-Guide/) might come in handy. @@ -48,10 +50,10 @@ Edit `/_posts/2014-3-3-Hello-World.md` to publish your first blog post. This [Ma ## Local Development -1. Install Jekyll and plug-ins in one fell swoop. `gem install github-pages` This mirrors the plug-ins used by GitHub Pages on your local machine including Jekyll, Sass, Gemoji, etc. -2. Clone down your fork `git clone git@github.com:yourusername/yourusername.github.io.git` +1. Install Jekyll and plug-ins in one fell swoop. `gem install github-pages` This mirrors the plug-ins used by GitHub Pages on your local machine including Jekyll, Sass, etc. +2. Clone down your fork `git clone https://github.com/yourusername/yourusername.github.io.git` 3. Serve the site and watch for markup/sass changes `jekyll serve` -4. View your website at http://0.0.0.0:4000 +4. View your website at http://127.0.0.1:4000/ 5. Commit any changes and push everything to the master branch of your GitHub user repository. GitHub Pages will then rebuild and serve your website. ## Moar! @@ -78,9 +80,8 @@ It covers: ✓ Google Analytics integration ✓ SVG social icons for your footer ✓ 3 http requests, including your avatar -✓ Emoji in blog posts! :sparkling_heart: :sparkling_heart: :sparkling_heart: -✘ No installing dependancies +✘ No installing dependencies ✘ No need to set up local development ✘ No configuring plugins ✘ No need to spend time on theming @@ -104,9 +105,16 @@ You can use the [Quick Start](https://github.com/barryclark/jekyll-now#quick-sta ## Credits - [Jekyll](https://github.com/jekyll/jekyll) - Thanks to its creators, contributors and maintainers. -- [SVG icons](https://github.com/neilorangepeel/Free-Social-Icons) - Thanks, Neil Orange Peel. They're beautiful. +- [SVG icons](https://github.com/neilorangepeel/Free-Social-Icons) - Thanks, Neil Orange Peel. They're beautiful. - [Solarized Light Pygments](https://gist.github.com/edwardhotchkiss/2005058) - Thanks, Edward. - [Joel Glovier](http://joelglovier.com/writing/) - Great Jekyll articles. I used Joel's feed.xml in this repository. - [David Furnes](https://github.com/dfurnes), [Jon Uy](https://github.com/jonuy), [Luke Patton](https://github.com/lkpttn) - Thanks for the design/code reviews. -- [Bart Kiers](https://github.com/bkiers), [Florian Simon](https://github.com/vermluh), [Henry Stanley](https://github.com/henryaj), [Hun Jae Lee](https://github.com/hunjaelee), [Javier Cejudo](https://github.com/javiercejudo), [Peter Etelej](https://github.com/etelej) - Thanks for your [fantastic contributions](https://github.com/barryclark/jekyll-now/commits/master) to the project! +- [Bart Kiers](https://github.com/bkiers), [Florian Simon](https://github.com/vermluh), [Henry Stanley](https://github.com/henryaj), [Hun Jae Lee](https://github.com/hunjaelee), [Javier Cejudo](https://github.com/javiercejudo), [Peter Etelej](https://github.com/etelej), [Ben Abbott](https://github.com/jaminscript), [Ray Nicholus](https://github.com/rnicholus), [Erin Grand](https://github.com/eringrand), [Léo Colombaro](https://github.com/LeoColomb), [Dean Attali](https://github.com/daattali), [Clayton Errington](https://github.com/cjerrington), [Colton Fitzgerald](https://github.com/coltonfitzgerald), [Trace Mayer](https://github.com/sunnankar) - Thanks for your [fantastic contributions](https://github.com/barryclark/jekyll-now/commits/master) to the project! + +## Contributing + +Issues and Pull Requests are greatly appreciated. If you've never contributed to an open source project before I'm more than happy to walk you through how to create a pull request. + +You can start by [opening an issue](https://github.com/barryclark/jekyll-now/issues/new) describing the problem that you're looking to resolve and we'll go from there. +I want to keep Jekyll Now as minimal as possible. Every line of code should be one that's useful to 90% of the people using it. Please bear that in mind when submitting feature requests. If it's not something that most people will use, it probably won't get merged. :guardsman: diff --git a/_attachments/2012-01-29-arm-2.html b/_attachments/2012-01-29-arm-2.html new file mode 100755 index 0000000000000..8eb044056755e --- /dev/null +++ b/_attachments/2012-01-29-arm-2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: arm +date: 2012-01-29 22:16:10.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-01-29-arm.html b/_attachments/2012-01-29-arm.html new file mode 100755 index 0000000000000..3f18f680d92ed --- /dev/null +++ b/_attachments/2012-01-29-arm.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: arm +date: 2012-01-29 22:15:08.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-06-omap1-2.html b/_attachments/2012-02-06-omap1-2.html new file mode 100755 index 0000000000000..5f6de3d64d013 --- /dev/null +++ b/_attachments/2012-02-06-omap1-2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: omap4 +date: 2012-02-06 22:32:26.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-06-omap1.html b/_attachments/2012-02-06-omap1.html new file mode 100755 index 0000000000000..22f84089e2461 --- /dev/null +++ b/_attachments/2012-02-06-omap1.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: OMAP4 +date: 2012-02-06 22:31:51.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-06-omap2.html b/_attachments/2012-02-06-omap2.html new file mode 100755 index 0000000000000..6f21815f2eded --- /dev/null +++ b/_attachments/2012-02-06-omap2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: omap4 +date: 2012-02-06 22:31:56.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-arm-3.html b/_attachments/2012-02-09-arm-3.html new file mode 100755 index 0000000000000..b0cd248afb0fe --- /dev/null +++ b/_attachments/2012-02-09-arm-3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: arm +date: 2012-02-09 22:47:58.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-omap1-3.html b/_attachments/2012-02-09-omap1-3.html new file mode 100755 index 0000000000000..8bd2739f9dac4 --- /dev/null +++ b/_attachments/2012-02-09-omap1-3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: omap1 +date: 2012-02-09 22:48:03.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-omap2-2.html b/_attachments/2012-02-09-omap2-2.html new file mode 100755 index 0000000000000..2ef405e7e108a --- /dev/null +++ b/_attachments/2012-02-09-omap2-2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: omap2 +date: 2012-02-09 22:48:04.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-pandaboard.html b/_attachments/2012-02-09-pandaboard.html new file mode 100755 index 0000000000000..9da041b730a32 --- /dev/null +++ b/_attachments/2012-02-09-pandaboard.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: Pandaboard +date: 2012-02-09 22:48:08.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-testing.html b/_attachments/2012-02-09-testing.html new file mode 100755 index 0000000000000..73b286b7a209c --- /dev/null +++ b/_attachments/2012-02-09-testing.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: testing +date: 2012-02-09 22:48:10.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-09-video2.html b/_attachments/2012-02-09-video2.html new file mode 100755 index 0000000000000..6bf5c1ab1aa06 --- /dev/null +++ b/_attachments/2012-02-09-video2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: video2 +date: 2012-02-09 22:48:17.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-arm-4.html b/_attachments/2012-02-21-arm-4.html new file mode 100755 index 0000000000000..118584249139c --- /dev/null +++ b/_attachments/2012-02-21-arm-4.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: arm +date: 2012-02-21 22:14:59.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-down.html b/_attachments/2012-02-21-down.html new file mode 100755 index 0000000000000..d2b1d9c0b2b46 --- /dev/null +++ b/_attachments/2012-02-21-down.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: down +date: 2012-02-21 22:19:18.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-up.html b/_attachments/2012-02-21-up.html new file mode 100755 index 0000000000000..ae94dce04b574 --- /dev/null +++ b/_attachments/2012-02-21-up.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: up +date: 2012-02-21 22:19:21.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-video.html b/_attachments/2012-02-21-video.html new file mode 100755 index 0000000000000..a50e3561b670d --- /dev/null +++ b/_attachments/2012-02-21-video.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: video +date: 2012-02-21 22:19:23.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-video1.html b/_attachments/2012-02-21-video1.html new file mode 100755 index 0000000000000..aec7cf6b463dd --- /dev/null +++ b/_attachments/2012-02-21-video1.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: video1 +date: 2012-02-21 22:19:26.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-web1.html b/_attachments/2012-02-21-web1.html new file mode 100755 index 0000000000000..6b683abad503a --- /dev/null +++ b/_attachments/2012-02-21-web1.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: web1 +date: 2012-02-21 22:19:28.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-web2.html b/_attachments/2012-02-21-web2.html new file mode 100755 index 0000000000000..1679a1948c42e --- /dev/null +++ b/_attachments/2012-02-21-web2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: web2 +date: 2012-02-21 22:19:31.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-web3.html b/_attachments/2012-02-21-web3.html new file mode 100755 index 0000000000000..ee6396ecd42cb --- /dev/null +++ b/_attachments/2012-02-21-web3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: web3 +date: 2012-02-21 22:19:34.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-web4.html b/_attachments/2012-02-21-web4.html new file mode 100755 index 0000000000000..9ae89ab2a9ebc --- /dev/null +++ b/_attachments/2012-02-21-web4.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: web4 +date: 2012-02-21 22:19:36.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webd1.html b/_attachments/2012-02-21-webd1.html new file mode 100755 index 0000000000000..ca4c71b700a4c --- /dev/null +++ b/_attachments/2012-02-21-webd1.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webD1 +date: 2012-02-21 22:19:38.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webd2.html b/_attachments/2012-02-21-webd2.html new file mode 100755 index 0000000000000..020fd68cfa609 --- /dev/null +++ b/_attachments/2012-02-21-webd2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webD2 +date: 2012-02-21 22:19:40.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webd3.html b/_attachments/2012-02-21-webd3.html new file mode 100755 index 0000000000000..47b6e91b2df12 --- /dev/null +++ b/_attachments/2012-02-21-webd3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webD3 +date: 2012-02-21 22:19:43.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webd4.html b/_attachments/2012-02-21-webd4.html new file mode 100755 index 0000000000000..038bb4a7801e7 --- /dev/null +++ b/_attachments/2012-02-21-webd4.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webD4 +date: 2012-02-21 22:19:46.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webdbar1.html b/_attachments/2012-02-21-webdbar1.html new file mode 100755 index 0000000000000..0db1b0b504246 --- /dev/null +++ b/_attachments/2012-02-21-webdbar1.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webdbar1 +date: 2012-02-21 22:19:48.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webdbar2.html b/_attachments/2012-02-21-webdbar2.html new file mode 100755 index 0000000000000..186ef1ecb6e63 --- /dev/null +++ b/_attachments/2012-02-21-webdbar2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webdbar2 +date: 2012-02-21 22:19:50.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webdbar3.html b/_attachments/2012-02-21-webdbar3.html new file mode 100755 index 0000000000000..df841c2c9e980 --- /dev/null +++ b/_attachments/2012-02-21-webdbar3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webdbar3 +date: 2012-02-21 22:19:52.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2012-02-21-webdbar4.html b/_attachments/2012-02-21-webdbar4.html new file mode 100755 index 0000000000000..b5d5a0ab5f9aa --- /dev/null +++ b/_attachments/2012-02-21-webdbar4.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: webdbar4 +date: 2012-02-21 22:19:16.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2014-01-05-17092006002.html b/_attachments/2014-01-05-17092006002.html new file mode 100755 index 0000000000000..e8778c2448bbc --- /dev/null +++ b/_attachments/2014-01-05-17092006002.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: 17092006(002) +date: 2014-01-05 21:39:04.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2014-01-05-cropped-17092006002-jpg.html b/_attachments/2014-01-05-cropped-17092006002-jpg.html new file mode 100755 index 0000000000000..8e1f0addd7a6b --- /dev/null +++ b/_attachments/2014-01-05-cropped-17092006002-jpg.html @@ -0,0 +1,16 @@ +--- +layout: attachment +title: cropped-17092006002.jpg +date: 2014-01-05 21:39:43.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: + _wp_attachment_context: custom-header + _wp_attachment_custom_header_last_used_pub/mystique: '1388954384' + _wp_attachment_is_custom_header: pub/mystique +author: +--- +

http://sisteming.files.wordpress.com/2014/01/cropped-17092006002.jpg

diff --git a/_attachments/2014-01-05-nfljyxbavd.html b/_attachments/2014-01-05-nfljyxbavd.html new file mode 100755 index 0000000000000..31f5c3239a019 --- /dev/null +++ b/_attachments/2014-01-05-nfljyxbavd.html @@ -0,0 +1,15 @@ +--- +layout: attachment +title: nfljyxbavd +date: 2014-01-05 21:33:04.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: + _wp_attachment_context: custom-background + _wp_attachment_is_custom_background: pub/mystique +author: +--- + diff --git a/_attachments/2014-05-25-wpid-wpid-pixel-pumper-jpg.html b/_attachments/2014-05-25-wpid-wpid-pixel-pumper-jpg.html new file mode 100755 index 0000000000000..83e1cc94f7955 --- /dev/null +++ b/_attachments/2014-05-25-wpid-wpid-pixel-pumper-jpg.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: wpid-wpid-pixel-pumper.jpg +date: 2014-05-25 22:38:19.000000000 +01:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-2.html b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-2.html new file mode 100755 index 0000000000000..d875b5fd76cae --- /dev/null +++ b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-2.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: wpid-Schermata-2014-11-06-alle-23.33.07.png +date: 2014-11-07 00:34:15.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-3.html b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-3.html new file mode 100755 index 0000000000000..39814db25aa2a --- /dev/null +++ b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png-3.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: wpid-Schermata-2014-11-06-alle-23.33.07.png +date: 2014-11-07 00:35:26.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png.html b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png.html new file mode 100755 index 0000000000000..78e3a274865e5 --- /dev/null +++ b/_attachments/2014-11-07-wpid-schermata-2014-11-06-alle-23-33-07-png.html @@ -0,0 +1,13 @@ +--- +layout: attachment +title: wpid-Schermata-2014-11-06-alle-23.33.07.png +date: 2014-11-07 00:33:44.000000000 +00:00 +categories: [] +tags: [] +status: inherit +type: attachment +published: false +meta: {} +author: +--- + diff --git a/_config.yml b/_config.yml old mode 100644 new mode 100755 index cdb46a3119c80..26df24681b33d --- a/_config.yml +++ b/_config.yml @@ -3,68 +3,75 @@ # # Name of your site (displayed in the header) -name: Your Name +name: SistemIng. # Short bio or description (displayed in the header) -description: Web Developer from Somewhere +description: My blog about systems, databases, smartphones and other fun stuff # URL of your avatar or profile pic (you could use your GitHub profile pic) -avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png +avatar: /images/sisteming-logo.jpeg # # Flags below are optional # # Includes an icon in the footer for each username you enter -footer-links: + +footer-links: dribbble: - email: + email: mbonezzi@archlinux.us facebook: flickr: - github: barryclark/jekyll-now - instagram: - linkedin: + github: sisteming + instagram: + linkedin: marcobonezzi pinterest: - rss: # just type anything here for a working RSS icon, make sure you set the "url" above! - twitter: jekyllrb + rss: feed.xml + twitter: marcobonezzi stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers" + favicon: images/favicon.ico + # Your disqus shortname, entering this will enable commenting on posts -disqus: +disqus: sisteminggithubio # Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking -google_analytics: +google_analytics: UA-56573660-1 # Your website URL (e.g. http://barryclark.github.io or http://www.barryclark.co) # Used for Sitemap.xml and your RSS feed -url: - -# If you're hosting your site at a Project repository on GitHub pages -# (http://yourusername.github.io/repository-name) -# and NOT your User repository (http://yourusername.github.io) -# then add in the baseurl here, like this: "/repository-name" -baseurl: "" +url: http://sisteming.github.io -# -# !! You don't need to change any of the configuration flags below !! -# markdown: kramdown -highlighter: pygments + +#permalink: /:title/ +permalink: /:year/:month/:day/:title/ + permalink: /:title/ # The release of Jekyll Now that you're using -version: v1.0.0 +version: v1.2.0 + +# Jekyll 3 now only supports Kramdown for Markdown +kramdown: + # Use GitHub flavored markdown, including triple backtick fenced code blocks + input: GFM + # Jekyll 3 and GitHub Pages now only support rouge for syntax highlighting + syntax_highlighter: rouge + syntax_highlighter_opts: + # Use existing pygments syntax highlighting css + css_class: 'highlight' # Set the Sass partials directory, as we're using @imports sass: - sass_dir: _scss style: :expanded # You might prefer to minify using :compressed + # Use the following plug-ins gems: - - jemoji # Emoji please! - jekyll-sitemap # Create a sitemap using the official Jekyll sitemap gem + - jekyll-feed # Create an Atom feed using the official Jekyll feed gem # Exclude these files from your production _site exclude: diff --git a/_includes/analytics.html b/_includes/analytics.html old mode 100644 new mode 100755 index d8cdc0ec09cb5..5f346aee620c1 --- a/_includes/analytics.html +++ b/_includes/analytics.html @@ -5,9 +5,12 @@ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); - + ga('create', '{{ site.google_analytics }}', 'auto'); - ga('send', 'pageview'); + ga('send', 'pageview', { + 'page': '{{ site.baseurl }}{{ page.url }}', + 'title': '{{ page.title | replace: "'", "\\'" }}' + }); {% endif %} diff --git a/_includes/disqus.html b/_includes/disqus.html old mode 100644 new mode 100755 index 453eef5cb1c91..c4b4d2394f04a --- a/_includes/disqus.html +++ b/_includes/disqus.html @@ -2,8 +2,8 @@
+ + +

+ + + + +
+If you liked this post, you can + + share it with your followers +or + + follow me on Twitter! \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html old mode 100644 new mode 100755 index a69e73413e3ad..5e3ae51040c4b --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,14 +1,9 @@ - - - - {% if page.title %}{{ page.title }} – {% endif %}{{ site.name }} – {{ site.description }} - - + {% include meta.html %} @@ -24,16 +20,20 @@
- + +

{{ site.name }}

{{ site.description }}

- +
@@ -47,10 +47,14 @@

{{ site.name }}

{% include svg-icons.html %} +
+
+
{% include analytics.html %} + diff --git a/_layouts/page.html b/_layouts/page.html old mode 100644 new mode 100755 index cff536080625b..c8f0164980270 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -3,7 +3,7 @@ ---
- +

{{ page.title }}

diff --git a/_layouts/post.html b/_layouts/post.html old mode 100644 new mode 100755 index a84a4fe7444aa..f6ce6fc88d97e --- a/_layouts/post.html +++ b/_layouts/post.html @@ -1,5 +1,6 @@ --- layout: default +comments: true ---
@@ -8,10 +9,19 @@

{{ page.title }}

{{ content }}
+ + -- +
+ + {% include twitter_plug.html %} +
Written on {{ page.date | date: "%B %e, %Y" }} +
- {% include disqus.html disqus_identifier=page.disqus_identifier %} -
\ No newline at end of file +
+ + {% include disqus.html %} + diff --git a/_layouts/presentation.html b/_layouts/presentation.html new file mode 100755 index 0000000000000..99771158f1b59 --- /dev/null +++ b/_layouts/presentation.html @@ -0,0 +1,60 @@ + + + + {{ page.title | strip_html }} + + + + + + + + + + \ No newline at end of file diff --git a/_pages/2011-12-30-about.html b/_pages/2011-12-30-about.html new file mode 100755 index 0000000000000..ead06851f87f5 --- /dev/null +++ b/_pages/2011-12-30-about.html @@ -0,0 +1,21 @@ +--- +layout: page +title: About +date: 2011-12-30 15:52:01.000000000 +00:00 +categories: [] +tags: [] +status: publish +type: page +published: true +meta: + _wp_page_template: default + _edit_last: '30428231' +author: +--- +

My name is Marco Bonezzi, I'm a Msc. who likes the world of open source, Linux and having fun with databases.

+ + +As of today (and for the last 5+years) I'm working in MongoDB, as a Manager in Technical Services. It has been lots of fun in MongoDB and growing from an individual contributor role to a role where I try to help more people as we grow our teams.

+ +

In October 2011 I finished my Master Degree focused in Embedded Systems and Computer Networks. I enjoyed using FPGAs, Xilinx and programming in VHDL, but I prefer using embedded Linux in ARM platforms. In fact, my Master Thesis was about Low Power in multicore ARM architecture and I also did a project with an ARM embedded board and MythTV.

+

I'm also interested in Archlinux, smartphones, embedded Linux and most of the open source projects.

diff --git a/_posts/.2015-03-23-Docker on OSX.md.swp b/_posts/.2015-03-23-Docker on OSX.md.swp new file mode 100755 index 0000000000000..f8db4ffc010e1 Binary files /dev/null and b/_posts/.2015-03-23-Docker on OSX.md.swp differ diff --git a/_posts/2011-12-30-hello-world.html b/_posts/2011-12-30-hello-world.html new file mode 100755 index 0000000000000..7da093ecdb7cd --- /dev/null +++ b/_posts/2011-12-30-hello-world.html @@ -0,0 +1,23 @@ +--- +layout: post +title: My first post +date: 2011-12-30 15:52:01.000000000 +00:00 +categories: +- Personale +tags: +- Wordpress +status: publish +type: post +published: true +meta: {} +author: +--- +

Ok, lets start this...

+

How do you start a blog? Hello? Who are talking to in your first blog post?

+

I imagine that this can be funny after some time blogging, when you read back your early times blogging.

+

Ok, so maybe I can talk about me, or may be better of what I'm doing here right now...

+

Its from several years ago that I'm in the so called blogosphere, but always as a visitor, or at least commenting some posts, thats all.. I always had the idea of writing my own blog, but the problem was the topis to write about.

+

One of my proposals for the new year was to create my own blog, and try to write something about the things I like, like mobile phones, Linux, power management, embedded boards like pandaboard, or may be something related to my professional life, like interesting queries or configuration of mysql databases, interesting features or tricks with Oracle ( you know, someone prefere to pay...) or maybe about technologies I never heard before.

+

I know it could be difficult to write about this differents subjects, but if this blog would be like my online image, I'm sorry but it is as it is... :)

+

Ok, as a first post I think its done. While writing this, I got the subject for my next post, the real first blog post: my recent masther thesis. The subject?

+

After the ads ;)

diff --git a/_posts/2012-01-29-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-i.html b/_posts/2012-01-29-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-i.html new file mode 100755 index 0000000000000..9dc35d087a109 --- /dev/null +++ b/_posts/2012-01-29-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-i.html @@ -0,0 +1,41 @@ +--- +layout: post +title: Low Power Techniques in multicore systems based in ARM architecture (Part I) +date: 2012-01-29 22:42:09.000000000 +00:00 +categories: +- Embedded +- Linux +tags: +- arm +- embedded +- linux +- master +- omap +- pandaboard +status: publish +type: post +published: true +meta: + _edit_last: '30428231' +author: +--- +

Hi all,

+

This is my second post, and as I promised, I'll talk about my Master Thesis about Low Power Techniques in multicore systems based in ARM architecture.

+

This thesis was the end of a Master Degree started two years ago, when I became (finally!) a Computer Science Engineer and I was looking for a good job opportunity. As this opportunity was a little lazy to came, I decided to start a Master Degree, with Embedded and Reconfigurable Systems as mayor and Computer Networks and Technologies as minor specializations.

+

I decide to study Embedded Systems because it was the most interesting path for me, and I was a little curious about embedded systems, FPGAs and this kind of devices.

+

In the differente subjects we've worked more with VHDL and FPGAs, Xilinx, PowerPC, but most of all related to VHDL - FPGAs. Even if I liked the different subjects and labs, I was more interested in Embedded Linux, so finally, when I had to choose the subject for the thesis, I was sure that Embedded Linux would be a great subject to study. Two main reasons were that I would have to write my thesis while working  in very different area, and so I'll have to write and prepare it by myself at home in my free time.

+

During the master degree, I discovered the world of embedded Linux with beagleboard or gumstix, and also played with a beagleboard like board called IGEPv2, based in an OMAP3 chip.

+

While I was struggling myself to decide the final subject of the thesis, I suddenly had THE idea: buying a Pandaboard and doing something related with low power and power management in Linux. The pandaboard development board has an OMAP4 chip, with two ARM Cortex A9 processor, so I thought it could be a good idea to study and to do some research about power management on a dual core ARM board.

+ + +

+

If you don't know what a pandaboard is... Well... I now it's embarrassing but you can check it here: www.pandaboard.org :)

+

So once I bought the Pandaboard and after some days got it at home, I started to play with it, trying and choosing the best distribution for my needs. I tried first with Debian, but after some time I realized that Ubuntu for ARM was doing a good job, and would contain more recent packages and kernel, so I installed Ubuntu ARM 10.04.

+

Now the last version is 11.10, but I did my developments and research on 10.10. (https://wiki.ubuntu.com/ARM/OMAP).

+

Once I had the system working, with HDMI, wireless connection, usb mouse and keyboard, I began to study and find how can I retrieve power management information from the system and also interact with it.

+

If you dont' know it, there is a great project sponsored by IBM, Canonical, ARM, Samsung, Texas Instruments or Freescale, called Linaro (www.linaro.org), and its mission is to create a common ecosystem for ARM based systems, in order to organize and merge the different projects and work done for all ARM embedded devices. With this, they said that manufacturers could achieve faster time to market, and also would mean easier work for developers and integrators of this products.

+

So the great about Linaro are the Linaro Working Groups, different Teams that work with a different mission to achieve the proposal of Linaro Foundation. Thera are several Working Groups, for UX / Design, for Kernel related work, for Graphics section and the one I've most appreciated, the Power Management Working Group (WG).

+

I spend some weeks in research  different posibilities to manage power consumption in Linux and most specifically in Embedded Linux, but most of them were designed  for systems with only one processor. One day I came back to Linaro Power Management Group and found a new technique designed in particular for multicore systems, and so I decided to try it on my Pandaboard.

+

In my next post, I'll cover the different techniques I found for power management in Linux and the one I choosed to test and to study more in detail, with the different results obtained during the research.

+

Thanks for your time reading here! :)

+

MB

diff --git a/_posts/2012-01-29-low-power.html b/_posts/2012-01-29-low-power.html new file mode 100755 index 0000000000000..30787bba412b5 --- /dev/null +++ b/_posts/2012-01-29-low-power.html @@ -0,0 +1,14 @@ +--- +layout: post +title: Low Power +date: 2012-01-29 21:56:29.000000000 +00:00 +categories: [] +tags: [] +status: draft +type: post +published: false +meta: + _edit_last: '30428231' +author: +--- + diff --git a/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-ii.html b/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-ii.html new file mode 100755 index 0000000000000..9d3190cbc37db --- /dev/null +++ b/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-ii.html @@ -0,0 +1,52 @@ +--- +layout: post +title: Low Power Techniques in multicore systems based in ARM architecture (Part II) +date: 2012-02-20 21:46:00.000000000 +00:00 +categories: +- Embedded +- Linux +- Pandaboard +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '30428231' + publicize_results: a:1:{s:7:"twitter";a:1:{i:88527114;a:2:{s:7:"user_id";s:12:"marcobonezzi";s:7:"post_id";s:18:"171712231501856769";}}} + _wpas_done_twitter: '1' +author: +--- +

Hello my friends! :)

+

In the previous post I introduced a little the idea about low power techniques in multicore systems based in ARM architecture but, what are those techniques? Well, we can divide them in two groups, those techniques from general Linux power management (and working in actual embedded devices) and those developed and implemented for recent multicore embedded devices.

+

As Linux Power Management techniques the most relevant are:

+ +

Most of them, are really good for classical embedded devices, where there's only one processor or core, but what would happen with those techniques with multicore embedded devices like Pandaboard and its OMAP4 chip?

+

The OMAP4 chip is based in two ARM Cortex A9 Processors, so it can balance the use of both CPU to achieve the best performance / power saving ratio:

+ + +

+ + +

+

As you can imagine, power management using two cores in embedded devices is very different from the usual power management on laptops or pcs: here you usually have a big constraint to your product, battery life.

+

So some months ago, there was an important development activity looking for differents power management techniques for multicore ARM systems, and most of them were developed and supported by Linaro Power Management Group, who is doing such a great job trying to simplify one of the most common problems for all kind of embedded devices.

+

The most interesting power management techniques developed for multicore systems are:

+ +

I'd based my studies  in CPUHotplug, a cool technique that gives you the possibility of switching of one of the cores of the processor by a simple echo command from the terminal like this

+

$ echo 1 > /sys/devices/system/cpu/cpu1/online

+

The most important advantages of this techniques are the lower consumption obtained using only one of the cores, and an easier condition to enter in processors low power modes. Of course there are some performance issue, but we are looking for a good low power environments and techniques, so we would look to performance effects later on.

+

In the next post, we'll see the testing environment and several tests done with the pandaboard using CPU Hotplug, so stay tuned     ;)

+

MB

diff --git a/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-iii.html b/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-iii.html new file mode 100755 index 0000000000000..f0d365e6a3911 --- /dev/null +++ b/_posts/2012-02-20-low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-iii.html @@ -0,0 +1,70 @@ +--- +layout: post +title: Low Power Techniques in multicore systems based in ARM architecture (Part III) +date: 2012-02-20 21:50:58.000000000 +00:00 +categories: +- Embedded +- Linux +- Pandaboard +tags: +- arm +- embedded +- linux +- master +- omap +- pandaboard +status: publish +type: post +published: true +meta: + _edit_last: '30428231' + publicize_results: a:1:{s:7:"twitter";a:1:{i:88527114;a:2:{s:7:"user_id";s:12:"marcobonezzi";s:7:"post_id";s:18:"171712395213930496";}}} + _wpas_done_twitter: '1' +author: +--- +

Ok so I promised to show you the test I've done with pandaboard to test CPU HotPlug technique right? So come on... I've talk before about Pandaboard development board, and if you didn't hear about it before, now it's a good time. Pandaboard ships with an OMAP4 4430 chip, with dual core ARM Cortex A9  processor @1GHz, 1 GB low power RAM and Bluetooth 2.1, Ethernet, Wireless, HDMI... as you can see, great connectivity and great details for such a little device.

+

+

Pandaboard development board

+

For the tests, I set up two different scenarios, one playing video file on SD card and the good one with  an Apache Web Server on Pandaboard, and running several loads with JMeter to see how it performs. As OS I used Ubuntu 11.04 with kernel 2.6.38-1208-omap4, and to measure the power consumption, I had to use a multimeter (with USB connection, what a great idea!!) because at the moment it seemed impossible to get voltage or power values directly from the board.

+

+

Test Environment with PandaBoard and Digital Multimeter

+

Here you can see the results of playing the same video file, using 2 cores and using only 1 core, after having the second core disabled by CPU Hotplug. As you can see, power consumption is lower, but not as much as to prefer to use 1 core instead of two, and specially for playing video.

+

+

Power consumption results for video playing test with 1 and 2 cores

+

+

Maximum Power consumption during video playing

+

The next tests are more interesting. These are the tests done with Apache Web Server and JMeter load testbench. In the next images, you can see the power consumption of the Pandaboard using 1 or 2 cores, with different threads values: 5, 10, 25 and 50. Those are threads or connections opened on Apache Web Server. For the application used for the tests, GLPI (www.glpi.org), there was also a MySQL on Pandaboard, but as the configuration was the same for all the tests, the important part is the load behaviour on Apache.

+

+

Jmeter test with 5 threads / connections using 1 and 2 cores

+

+

Jmeter test with 10 threads / connections using 1 and 2 cores

+

+

Jmeter test with 25 threads / connections using 1 and 2 cores

+

+

Jmeter test with 50 threads / connections using 1 and 2 cores

+

As you can see in the graphics, using only 1 core power consumption on Pandaboard was near half of the power consumption when using 2 cores, even if for a higher number of threads, HTTP requests delay was higher. After doing this test I reach the following conclusion / question: It's better to do the job with less power but more time, or faster but with more power consumption? When I was thinking about it and about the behaviour or CPU HotPlug, I realized that I could try to use it in a dynamic behaviour, so instead of processing all jobs with 1 or 2 cores, it would be possible to enable or disable the second core of ARM Cortex A9 processor using the system load. With this "dynamic" core management, we can enable the second core when system load is too high for only 1 core, and even if the power consumption would raise, the results of doing this could be interesting. The following test are showing this particular behaviour, and you can see how the yellow line which represents Dynamic Core Management, performs compared to the same system load with 1 and 2 cores.

+

+

Jmeter test with 5 threads / connections using 1 and 2 cores and Dynamic Core Management

+

+

Jmeter test with 10 threads / connections using 1 and 2 cores and Dynamic Core Management

+

+

Jmeter test with 25 threads / connections using 1 and 2 cores and Dynamic Core Management

+

+

Jmeter test with 50 threads / connections using 1 and 2 cores and Dynamic Core Management

+

As you can see, using a medium system load, the power consumption obtained using our script for Dynamic Core Management performs as the 1 core execution for lower loads, but as the 2 core execution when system load becomes higher. The benefit here could be in medium or more detailed system loads, when power consumption could be lower then using 2 cores, but with better performance than using only 1 core. In terms of Maximum Power Consumption, you can see how it goes in the four scenarios tested, and is very interesting to see how for the test with a higher number of threads, the use of our script enabling the second core has a higher power consumption than the same case with 2 cores.

+

+

Maximum Power consumption for 5 threads

+

+

Maximum Power consumption for 10 threads

+

+

Maximum Power consumption for 25 threads

+

+

Maximum Power consumption for 50 threads

+

After this last result, where power consumption using the script that enables the second core is higher than using 2 cores, I was curious of such behaviour, so I decided to test and measure only the period when CPU Hotplug enables (CPU UP) and disables (CPU Down) the second core. After doing those tests, I realized that as the studies showed, the use of CPU HotPlug technique was not free in terms of power consumption, and here you can see how the power consumption behaves during the process of CPU up and CPU down.

+

+

Maximum Power activating the second core with CPU Hotplug

+

+

Maximum Power disabling the second core with CPU Hotplug

+

After all these test and the research done about CPU Hotplug, the conclusion is that could be a interesting technique for embedded devices, when idle time and battery saving are really important (Are you thinking on mobile phones?? Yes, they meet those conditions).

+

But for other scenarios this technique is not the best as we have seen, and there are different studies about a "low power scheduler" for ARM multicore systems or similar techniques without the power consumption overhead present in CPU HotPlug activating and disabling the second core. Examples of those techniques are sched_mc and CPU Set developed by Linaro Power Management Working Group.

+

The most interesting thing is not only the grow of ARM based systems, and not only on embedded devices, but also how ARM processors performance is increasing thinking also in power management, essential for embedded devices.

diff --git a/_posts/2012-05-27-141.html b/_posts/2012-05-27-141.html new file mode 100755 index 0000000000000..b61ead008494a --- /dev/null +++ b/_posts/2012-05-27-141.html @@ -0,0 +1,87 @@ +--- +layout: post +title: Oracle Database Silent Installation +date: 2012-05-27 21:46:56.000000000 +01:00 +categories: +- 11g +- Database +- Oracle +tags: +- '11.2' +- database +- database response +- installation +- oracle +- oracle database +- response file +- silent +status: publish +type: post +published: true +meta: + _edit_last: '30428231' + tagazine-media: a:7:{s:7:"primary";s:0:"";s:6:"images";a:0:{}s:6:"videos";a:0:{}s:11:"image_count";s:1:"0";s:6:"author";s:8:"30428231";s:7:"blog_id";s:8:"30961676";s:9:"mod_stamp";s:19:"2012-05-27 + 20:46:56";} + publicize_results: a:1:{s:7:"twitter";a:1:{i:88527114;a:2:{s:7:"user_id";s:12:"marcobonezzi";s:7:"post_id";s:18:"206849012232495104";}}} + _wpas_done_twitter: '1' + _wpas_skip_1096740: '1' +author: +--- +

Hi all!

+

Last weeks have been a little busy, and from several tasks I had to do, there was an Oracle Database installation.

+

There was a funny discussion about the version to install, where people recommended installing 10g only because was the version they worked with or because the how to they use it's only for 10g.

+

At the end, we decided to install last version, 11.2, as the main use for this database would be a huge quantity of data in a data warehouse like use, and I had to install it.

+

I thought that it would be easy, as you have the possibility of doing remote X from the server (yes, it was a server so we only had remote access), and you know the most "boring" part of installing Oracle Database it's the steps previous to installation, you know, kernel parameters, directories, users, permissions..

+

But when I talked to my colleague and he told me that the server was installed without any X server package, and that they don't install it as a policy, I had to deal with a silent installation using only command line, so after some look on the internet, I found the process really straight forward, and in a few hours I had the software installed, the database created, and both the listener and enterprise manager console configured. And most important thing: the team waiting for the database happy for having it ready! :)

+

Ok, you maybe like to know which are the steps or how difficult is an Oracle Database silent installation using response files? You have some examples and templates of response files in the directory response, where you have extracted the database software, so you only need to copy it and modify it to fit your needs.

+

Here you are some examples on how my installation went:

+

Software installation:

+

./runInstaller -silent \
+-responseFile /home/oracle/install/database/response/db_install.rsp \
+oracle.install.option=INSTALL_DB_SWONLY \
+oracle.install.db.InstallEdition=EE \
+security_updates_via_myoraclesupport=false \
+decline_security_updates=true \
+oracle.install.db.DBA_GROUP=dba \
+oracle.install.db.OPER_GROUP=oper \
+ORACLE_BASE="/oracle/app/oracle" \
+ORACLE_HOME="/oracle/app/oracle/product/11.2.0/dbhome_1"
+

+

When you have your response files ready, you only have to input the previous command, specifying the Oracle BASE and Oracle Home environment variables, and other options as groups or type of Database Installation, from the path when you have the oracle software extracted.

+

When it finish the installation, the next step would be configuring the listener for the database. In this case, I used a almost default listener configuration, using the following command.

+

netca /silent /responsefile /oracle/netca.rsp
+

+

When your listener is ready, you can create your database with a command like this, when you specify the DB name, in this case TESTDB, the template or model for the new database and other data as the type of storage (Filesystem or ASM) and passwords.

+

dbca -silent -createDatabase -gdbName TESTDB -templateName Data_Warehouse.dbc \
+-datafileDestination /oracle/oradata -sysPassword myPWD -systemPassword myPWD
+-storageType FS \
+

+

The most tricky part from the installation was Enterprise Manager or DB console configuration, as it was needed by the team who is going to use the database created.

+

It's important to have all Oracle environment variables like ORACLE_HOME, ORACLE_UNQ_NAME or ORACLE_BASE set to ensure that dbconsole configuration would be executed successfully:

+


+emca dbcontrol db -repos recreate -ORACLE_HOSTNAME gsc-analitics -SID TESTDB -PORT 1521 -ORACLE_HOME $ORACLE_HOME -DBDNMP_PWD sys

+STARTED EMCA at May 17, 2012 12:48:46 PM
+EM Configuration Assistant, Version 11.2.0.0.2 Production
+Copyright (c) 2003, 2005, Oracle. All rights reserved.

+

Enter the following information:
+Listener ORACLE_HOME [ /oracle/product/11.2.0/db ]:
+Password for SYS user:
+Password for DBSNMP user:
+Password for SYSMAN user:
+Email address for notifications (optional):
+Outgoing Mail (SMTP) server for notifications (optional):
+-----------------------------------------------------------------

+

You have specified the following settings

+

Database ORACLE_HOME ................ /oracle/product/11.2.0/db

+

Local hostname ................ gsc-analitics
+Listener ORACLE_HOME ................ /oracle/product/11.2.0/db
+Listener port number ................ 1521
+Database SID ................ TESTDB
+Email address for notifications ...............
+Outgoing Mail (SMTP) server for notifications ...............

+

-----------------------------------------------------------------
+Do you wish to continue? [yes(Y)/no(N)]: Y

+

With this simple steps, you have installed your Oracle Database software, created a new database, configured a listener and also Enterprise Manager for the new database.

+

And all without using X forwarding, only by command line. In fact, I'll have to think which way yo go for my next Oracle Database installation, as the response files method seems pretty fast, and very useful in case of many or similar database creation / installation.

+

I hope this steps would be useful to someone and please feel free to post any comment or improvement! :)

+

MB

diff --git a/_posts/2012-12-15-jolla-sailfish-blackberry-10-for-a-great-2013.html b/_posts/2012-12-15-jolla-sailfish-blackberry-10-for-a-great-2013.html new file mode 100755 index 0000000000000..5d3c4b041f6e2 --- /dev/null +++ b/_posts/2012-12-15-jolla-sailfish-blackberry-10-for-a-great-2013.html @@ -0,0 +1,63 @@ +--- +layout: post +title: Jolla, Sailfish, Blackberry 10.. for a great 2013 +date: 2012-12-15 21:27:27.000000000 +00:00 +categories: +- BB10 +- Jolla +- Linux +- Mobile +tags: [] +status: publish +type: post +published: true +meta: + _edit_last: '30428231' + _oembed_71cf482c81aba654e9e14524c125acba: "{{unknown}}" + _oembed_a5792f8526928f028d805a96a864bad4: "{{unknown}}" + _oembed_e03516b02057d3601b40d23e31cd7ef3: "{{unknown}}" + publicize_twitter_user: marcobonezzi + _wpas_done_1096740: '1' + _publicize_done_external: a:1:{s:7:"twitter";a:1:{i:88527114;b:1;}} + tagazine-media: a:7:{s:7:"primary";s:69:"http://r.phonedog.com/shared/images/2012/11/175102-sailfishosdemo.jpg";s:6:"images";a:1:{s:69:"http://r.phonedog.com/shared/images/2012/11/175102-sailfishosdemo.jpg";a:6:{s:8:"file_url";s:69:"http://r.phonedog.com/shared/images/2012/11/175102-sailfishosdemo.jpg";s:5:"width";i:550;s:6:"height";i:390;s:4:"type";s:5:"image";s:4:"area";i:214500;s:9:"file_path";s:0:"";}}s:6:"videos";a:0:{}s:11:"image_count";i:1;s:6:"author";s:8:"30428231";s:7:"blog_id";s:8:"30961676";s:9:"mod_stamp";s:19:"2012-12-15 + 20:27:27";} + _oembed_55928eba0ea229f51adfd8b7f4b348ea: "{{unknown}}" + _oembed_e82d794b124a04b6106505f0af5f5e29: "{{unknown}}" + _oembed_ef9ae4423f2f6e73427445670a74c442: "{{unknown}}" + _oembed_ad6b836b858d993c32c8e99208950cc7: "{{unknown}}" + _oembed_12c0e118f44fbb396962a16fb0924876: "{{unknown}}" + _oembed_05ba6f509e5ce845df33c9781357e8a1: "{{unknown}}" + _oembed_c9d94bc49ab9faa8f2e52a4664ba7b99: "{{unknown}}" + _oembed_e81f8d0e3899a57b07d32e85f469d3d2: "{{unknown}}" + _oembed_57bba0e5e83b0773d3708607a2cf1ac8: "{{unknown}}" + _oembed_2dee671148e0a33c92c7b5d014f10b39: "{{unknown}}" + _oembed_2684b8cfdcd524c5cb604b648eb68862: "{{unknown}}" + _oembed_01612193f1aebabe81c35a3e021ee053: "{{unknown}}" + _oembed_b9892a16fc0c009cb5cdee361969bdba: "{{unknown}}" + _oembed_e20995fc7c152dc176bdba1e8de20312: "{{unknown}}" + _oembed_b56007befe04d81bb3d6e2ef824aa2fb: "{{unknown}}" + _oembed_cd6c61fce1ef5bcd1fae840b4f38b4f8: "{{unknown}}" + _oembed_1cb46a559d5d660a6e0b1413ea21375a: "{{unknown}}" + _oembed_549d3cb4b93130590b2b27a241452256: "{{unknown}}" + _oembed_3edc3fb4e08af65ed611514117883171: "{{unknown}}" + _oembed_64ba88e894c5cfa9ca095525b78df48a: "{{unknown}}" + _oembed_9730beb9e536c2a5ab84466193e5909c: "{{unknown}}" +author: +--- +

+

Hello people,

+

Most of you already know that there are two companies trying to play a different game, and one of them is a finnish startup from formers exployee from nokia.

+

I´m talking about Jolla and also about Blackberry with its Blackberry 10 OS..

+

I´ve always have been a fan of linux for the desktop, and I´ve entered the world of mobile phones blogs at the times of Nokia 6600, then with the 6680 and so on... I had of course the nokia n900 with its Maemo OS that was epic for the time, and of course I have the last great nokia, the n9 with its Meego Harmattan OS that after one year continues to receive great reviews or comments.

+

I know that both iOS and Android are doing well, but I´m kind of bored to see al that people with iphones or androids out there. I have to admit that I do like new nokia´s lumias, specially the 920, but I think WP8 suffer the same problem of the previouos platforms.

+

For me those OS doesn´t offer all the control to the user, and I think an important feature that they haven´t been able to meet until the moment is multitasking, a needed feature at least for me at the time to choose a phone (that should be smart by its name;)).

+

I hope we will have more options in 2013 in terms of mobiles OS and I like the idea to have two proper Linux mobile OS, with Blackberry 10 and SailfishOS from Jolla.

+

These are some interesting videos of what I´m talking about, if you haven´t already heard of them.

+

I can only say... what a nice 2013 we will have in terms of mobile phones :D

+

Article about Jolla in Il sole 24 ore:

+

http://www.ilsole24ore.com/art/tecnologie/2012-12-07/sailfish-parvenu-sfida-android-174623.shtml?uuid=AbReU69G

+

Article on BBC about new Blackberry 10:

+

http://www.bbc.co.uk/news/technology-20087221

+

[youtube=http://www.youtube.com/watch?v=tRZxM9rNyZ4]

+

[youtube=http://www.youtube.com/watch?v=_c_BqnR_vAM]

+

[youtube=http://www.youtube.com/watch?v=fg2xZed84Jg]

diff --git a/_posts/2014-05-25-wordpress-com-blogging-tools.html b/_posts/2014-05-25-wordpress-com-blogging-tools.html new file mode 100755 index 0000000000000..f6fd5f92e7b89 --- /dev/null +++ b/_posts/2014-05-25-wordpress-com-blogging-tools.html @@ -0,0 +1,36 @@ +--- +layout: post +title: Wordpress.com blogging tools +date: 2014-05-25 22:15:34.000000000 +01:00 +categories: [] +tags: [] +status: publish +type: post +published: true +meta: {} +author: +--- +

Hi!

+

I know my blog has not been so in use since 2012… But recently I have been thinking about trying to write more on it.

+

One of the problems I had was that the interface on wordpress.com to edit / publish new posts is not so useful or simple, at least for me. I have been looking for editing tools for blogs and now I have found some interesting options to analyze here:

+

Mac OS X:

+ + +
+
+

+ +
+
Linux:
+
+
+ +
+
+
I will try them all to see which one is more complete, but for now on Mac OS X PixelPumper seems to be really nice. It has autocorrect options and the interface is easy to use.

diff --git a/_posts/2014-11-06-databases-data-small-data-big-data-.html b/_posts/2014-11-06-databases-data-small-data-big-data-.html new file mode 100755 index 0000000000000..5083cc376b403 --- /dev/null +++ b/_posts/2014-11-06-databases-data-small-data-big-data-.html @@ -0,0 +1,13 @@ +--- +layout: post +title: Databases, data, small data, big data... +date: 2014-11-06 15:24:28.000000000 +00:00 +categories: [] +tags: [] +status: draft +type: post +published: false +meta: {} +author: +--- +

diff --git a/_posts/2014-11-06-migrating-for-wordpress-to-jekyll.html b/_posts/2014-11-06-migrating-for-wordpress-to-jekyll.html new file mode 100755 index 0000000000000..c271fc983ae3c --- /dev/null +++ b/_posts/2014-11-06-migrating-for-wordpress-to-jekyll.html @@ -0,0 +1,36 @@ +--- +layout: post +title: Migrating from Wordpress to Jekyll +date: 2014-11-06 23:52:54.000000000 +00:00 +categories: [] +tags: [] +status: publish +type: post +published: true +meta: + _publicize_pending: '1' + _wpas_facebook_publicize_failure: O:13:"Keyring_Error":2:{s:16:" + publicize_facebook_url: https://facebook.com/ + _wpas_google_plus_publicize_failure: O:13:"Keyring_Error":2:{s:16:" + publicize_google_plus_url: '' + publicize_twitter_user: marcobonezzi + publicize_twitter_url: http://t.co/jbWVzIYfC2 + _wpas_done_1096740: '1' + _publicize_done_external: a:1:{s:7:"twitter";a:1:{i:88527114;b:1;}} + publicize_linkedin_url: https://www.linkedin.com/updates?discuss=&scope=114526573&stype=M&topic=5936269050358296576&type=U&a=ptTE + _wpas_done_3392241: '1' +author: +--- +

Untitled Blog Post Name +

Hi everyone!
+

I am looking at how to migrate my blog to Jekyll.

+
+

+

It looks like an easier and more agile alternative to wordpress, based on Markdown.

+

Apparently, you can use github pages for your blog (for free), and then you can just synchronize your local copy using git.

+

The idea is that you only need to care about the content, and not that much about plugins and other elements.

+

I will let you know how it goes, in the mean time, here are some useful links:

+
http://dottorblaster.it/2014/09/addio-wordpress-benvenuto-jekyll/
http://jekyllrb.com/docs/migrations/
http://blog.8thcolor.com/en/2014/05/migrate-from-wordpress/
http://www.multunus.com/blog/2014/02/migrated-back-wordpress-jekyll/
+

+

+
diff --git a/_posts/2014-11-09-First-Post.md b/_posts/2014-11-09-First-Post.md new file mode 100755 index 0000000000000..ac9f4bb6a84d8 --- /dev/null +++ b/_posts/2014-11-09-First-Post.md @@ -0,0 +1,11 @@ +--- +layout: post +title: New blog up and running using Jekyll +--- + +Hey! This is my first post on my new blog running on Jekyll! +Let's see if this is better than Wordpress. + +![jekyll]({{ site.baseurl }}/images/jekyll.jpeg) + +I will migrate soon my older posts from http://sisteming.wordpress.com to this new blog. Stay tuned! ;) diff --git a/_posts/2014-11-17-BlueMix.md b/_posts/2014-11-17-BlueMix.md new file mode 100755 index 0000000000000..18723dd5ca578 --- /dev/null +++ b/_posts/2014-11-17-BlueMix.md @@ -0,0 +1,40 @@ +--- +layout: post +date: 2014-11-17 19:24:00 +title: Using BlueMix for your code and applications +--- + +Hi my friends, + +Recently I have been working with a new Platform as a Service environment for some of my work related tasks. +This new environment was GAed in July 2014 and it is IBM's [BlueMix](https://ace.ng.bluemix.net/). + +## The idea revolution + +The idea is that this platform can enable you to develop and build your own ideas into something like a very cool application to be used and shown. + +One way of presenting this concept is that you don't need to care about the infrastructure, the servers or the storage you need for your idea. If you are working on an idea and you want to create a quick prototype, you want to be working with your code and your data for your idea. + +![BlueMix Platform as a Service]({{ site.baseurl }}/images/BlueMix/blueMixPaas.png) + +## How it works + +This is exactly what BlueMix does: it lets you take control of the application runtime you want to use from a wide selection like Node.js, Python, Ruby or Java, and then you just select the service that suits best your purpose. +From the services available, you can use several database options like MongoDB or Cloudant if you need NoSQL or just go with MySQL or SQLDB for traditional relational database. + +![BlueMix Catalog]({{ site.baseurl }}/images/BlueMix/blueMix.png) + +Another cool service is [DashDB](http://www.dashdb.com), really interesting for fast analytics and data synchronization from a NoSQL database in Cloudant as well. I will cover this one in detail in a future post. + +For now, I give you some pointers to start to look at, and keep coming back here for new posts on BlueMix used for databases and even for Internet of Things projects! ;) + +### Fore more details: + +[BlueMix](https://ace.ng.bluemix.net/) + +[DeveloperWorks tutorials for BlueMix](https://developer.ibm.com/bluemix/docs/articles/) + +[Develop an IoT application on BlueMix with Arduino and Rails](http://www.ibm.com/developerworks/data/library/techarticle/dm-1408-arduino-iot-app/index.html) + +[Build a sentiment analysis application with Node.js, Express, sentiment and Twitter](http://www.ibm.com/developerworks/library/wa-nodejs-app/) + \ No newline at end of file diff --git a/_posts/2014-11-17-Jekyll.md b/_posts/2014-11-17-Jekyll.md new file mode 100755 index 0000000000000..3a43d7817840d --- /dev/null +++ b/_posts/2014-11-17-Jekyll.md @@ -0,0 +1,18 @@ +--- +layout: post +title: Using Jekyll +--- + +Hi my friends! +Recently I have migrated my blog (this one you are reading from Wordpress.com to Jekyll + GitHub pages). + +I really like how easy is to modify your content, format or just to publish a new post on the blog. +With wordpress.com, one of the problems I had was to find an easy way to elaborate a post including content, images, formatting everything properly and so on. + +One option was to use wordpress.com web interface or else some 3rd party tools like the ones considered here +[Wordpress.com Blogging Tools](http://sisteming.github.io/2014/05/25/wordpress-com-blogging-tools/). + +With the new approach using Jekyll and hosted on GitHub pages, I can just open my favourite text editor (or a markdown editor to make it easier) and just generate my content, easily add links or images and just commit to my github to have it published on my blog. + +I am really liking this new way of blogging and I would like to thank [@dottorblaster](http://dottorblaster.it/2014/09/addio-wordpress-benvenuto-jekyll/) as thank to his blog, I discovered the Jekyll world ;) + diff --git a/_posts/2014-11-19-JollaTablet.md b/_posts/2014-11-19-JollaTablet.md new file mode 100755 index 0000000000000..641382680a76f --- /dev/null +++ b/_posts/2014-11-19-JollaTablet.md @@ -0,0 +1,37 @@ +--- +layout: post +date: 2014-11-19 21:24:00 +title: Jolla presents a crowdfunded tablet based on SailfishOS +--- + + + +What a day has been for Jolla! +Some days ago a countdown was published on jolla.com for today, at the time Marc Dillon was going to speak at Slush14. + +As a Jolla owner since the beginning, and following them since the Nokia N9 with Meego and the N900 with Maemo, I was waiting to see what could they announce. + +There were many rumours, a second phone, a phablet or a tablet... Well, in the end a tablet was! + +I saw yesterday presentation by Nokia and even if I'm happy to see them back without Microsoft around, the presentation and the tablet doesn't have much interest to me... + +That was not the case when Marc Dillon was on stage today. You can feel the passion he gives to each product, each presentation or each event. The presentation was really good, summarizing all what Jolla has done so far in the last year. And then, just presented a video where he presented the new Jolla tablet based on SailfishOS 2.0 + + + +The two real news of this presentation was: +* First tablet to be based on SailfishOS (I know about the dream of having a tablet with Meego...) +* First table to be crowdfunded by people, by the community supporting Jolla and SailfishOS. + +But not only this... Jolla met its target for the crowdfunded Jolla Tablet in less than 3 hours... + +You can check it here on indiegogo: **[http://t.co/4afEPtnecT](http://t.co/4afEPtnecT)** + +**Jolla Tablet website: [http://jolla.com/tablet](http://jolla.com/tablet)** + +You can also see first opinions in these articles: + +[The Jolla Tablet wants your help to revolutionize multitasking](http://www.theverge.com/2014/11/19/7245465/jolla-tablet-indiegogo-campaign-launch) +[Jolla wants you to fund and develop its new tablet (update: funded!)](http://www.engadget.com/2014/11/19/jolla-crowdfunded-tablet/) + +[Jolla pitches Sailfish OS tablet against fleet of Android slates](http://www.pcworld.com/article/2849752/jolla-pitches-sailfish-tablet-against-fleet-of-android-products.html) diff --git a/_posts/2014-11-23-LinkedinAndSlideshare.md b/_posts/2014-11-23-LinkedinAndSlideshare.md new file mode 100755 index 0000000000000..e83489f3d32f3 --- /dev/null +++ b/_posts/2014-11-23-LinkedinAndSlideshare.md @@ -0,0 +1,19 @@ +--- +layout: post +date: 2014-11-24 21:44:00 +title: Create your Professional Journey using Linkedin and Slideshare +--- + +Hi my friends! + +I hope you are all good and enjoying the last hours of the weekend! + +I was having a look on Linkedin and I saw that some of my contacts had this thing from Linkedin and Slideshare that shows your Professional Journey in a very nice visual way. + +Basically it is getting the information from your Linkedin profile and building a nice gesture based presentation that can be share, on Linkedin, Twitter or other social networks. + +Well, if you want to try go just go here: [Professional Journey with Linkedin and Slideshare](http://lnkd.in/daVcsMK) + +This is the result for me in case you are curious... + +
Professional Journey - Marco Bonezzi from Marco Bonezzi
\ No newline at end of file diff --git a/_posts/2014-12-02-KidsAndCode.md b/_posts/2014-12-02-KidsAndCode.md new file mode 100755 index 0000000000000..6210bbe9e4934 --- /dev/null +++ b/_posts/2014-12-02-KidsAndCode.md @@ -0,0 +1,71 @@ +--- +layout: post +date: 2014-12-02 22:44:00 +title: Kids and Code +--- + +Hi my friends! + +Yesterday I was attending a really cool presentation that wasn't about the same topics... +The topic was something actual, something real, and yes, something in the future... + +The topic of this presentation was on kids and code and how can we enable the actual kids to learn not only to program, but also to have fun and learn new skills that may become really useful for them in the near future! + +## **Fun and Learn** + +When I was at school some years ago (can't remember how many now!) we used to have a computer science class where we learnt to use and develop some programs or graphical solutions using Basic, Logo (the epic turtle!!!) or even Pascal. I was maybe 8 or 10 when we did this, but I remember that this was very useful when starting my first year of Computer Science. When we started to learn how to program, we started by using Pascal to then go to C. + +But back from the past to our kids now. What if the actual kids can start to play with all the technology they have available? What if they can have fun while they learn? Well, this is what it is all about! :) + +Kids can start from even 4 years to grow their skills and knowledge in programming or computer science. It does not matter if they will use this for a job in the future or not, the important part of this learning process is that they will learn while having fun and these skills may increase their curiosity and their skills. + +There are different initiatives around the world, where parents or mentors can help to teach the kids how to code or how to use devices like Raspberry Pi or Arduino. + +## **Technologies** + +![HTML]({{ site.baseurl }}/images/HTML.jpg) + + +These are some of the technologies that kids can start to use: + +- Scratch +- HTML +- Raspberry Pi +- Python +- Node.js +- Arduino + +The presentation I attended was about enabling kids to learn to code and have fun and presenting also the possibility to use a platform like Bluemix to build and deploy their projects. This is really cool. + +I also got to know some useful resources that you may find useful for you or your kids! + +[CoderDojo](https://coderdojo.com/) + +[http://hourofcode.com](http://hourofcode.com) + +[IBM Academy of Technology YouTube channel](https://www.youtube.com/playlist?list=PLPoDFbU5X41maWZeui-Sk-MFCjlGTMOU9) + +This is an example of CoderDojo activities for kids hoping that you will enjoy it! + + + +Kids can now go from developing and building applications on their Raspberry Pi or Arduino, to deploy applications using a PaaS platform like Bluemix where they can use a wide variety of technology like NodeRed or Internet of Things Foundation to build the new great app they have in their mind. + +## **Kids have the future in their hands** + +Kids have the power and the key for the future. We used to play with Lego to build houses or cars. Now kids can play with code to build the world! + +Before... + +![Lego bricks]({{ site.baseurl }}/images/Lego_Color_Bricks.jpg) + + +Now... + + +![Code blocks]({{ site.baseurl }}/images/blocks.jpg) + + + + + diff --git a/_posts/2014-12-03-What is Docker and why everyone likes it?.md b/_posts/2014-12-03-What is Docker and why everyone likes it?.md new file mode 100755 index 0000000000000..b6006bd4e67aa --- /dev/null +++ b/_posts/2014-12-03-What is Docker and why everyone likes it?.md @@ -0,0 +1,40 @@ +--- +layout: post +date: 2014-12-03 10:44:00 +title: What is Docker and why everyone likes it? +--- + +If you are interested in the IT industry, I am pretty sure you heard about Cloud, about virtualization, stacks and similar terminology. If you follow the IT industry, there is a good probability that you may also heard about Docker. + +![Docker]({{ site.baseurl }}/images/docker-logo.jpeg) + +## **What is Docker?** + +What is Docker? From their own definition at [https://www.docker.com/company/aboutus/](https://www.docker.com/company/aboutus/) + + +*...Docker is an open platform for building, shipping and running distributed applications. Docker provides a platform that enables any application to be created and run as a collection of consistent, low-overhead Docker containers that work across virtually any infrastructure.* + +That sounds cool isn't it? + +![Docker containers]({{ site.baseurl }}/images/docker.png) + + +## **Who is using it?** + +Nowadays we hear that more and more companies are starting to use it or to integrate with Docker and its container world. Companies like VMware, IBM, Yelp, Spotify, ebay and others are looking at this project and trying to integrate it accross different solutions. + +But what are the use cases for Docker? How can it help? +Well, again, the docker website is the best source to get some information on this: + +[https://www.docker.com/resources/usecases/](https://www.docker.com/resources/usecases/) + +## **I want to know more!!** + +If you want to know more about Docker, why not watch this video from Twitter University, where dotCloud founder and CTO Solomon Hykes gives a detailed presentation on it? Enjoy! + + + +Other references: + +[https://gigaom.com/2014/06/10/why-companies-like-google-spotify-and-red-hat-are-embracing-dockers-open-source-containers/](https://gigaom.com/2014/06/10/why-companies-like-google-spotify-and-red-hat-are-embracing-dockers-open-source-containers/) diff --git a/_posts/2014-12-05-Docker containers arriving to BlueMix.md b/_posts/2014-12-05-Docker containers arriving to BlueMix.md new file mode 100755 index 0000000000000..508aa289da142 --- /dev/null +++ b/_posts/2014-12-05-Docker containers arriving to BlueMix.md @@ -0,0 +1,32 @@ +--- +layout: post +date: 2014-12-05 14:58:00 +title: Docker containers arriving to Bluemix! +--- + +Hello my friends! + +Just two days ago I was posting a blog about Docker, what it is and why many companies seem to like it: + +[What is Docker and why everyone likes it](http://sisteming.github.io/2014/12/03/What%20is%20Docker%20and%20why%20everyone%20likes%20it%3F/) + +Well, there are more fresh news... Just today, at DockerCon Europe, Docker and IBM announced the container service on Bluemix, based on Docker! + +![DockerBluemix]({{ site.baseurl }}/images/dockerBluemix2.jpeg) + +The idea, based on the service description on BlueMix, is the following: + + +***The IBM Containers Service enables you to run Docker containers in a hosted cloud environment, on IBM Bluemix. Port your existing applications to IBM Bluemix and make them publically accessible by using containers. A private registry is provided where trusted images can be uploaded, stored and retrieved.*** + + +For more details on how to start using this, just head over to this article by Jason McGee on DeveloperWorks or have a look at the video linked below: + +[Bluemix Launches IBM Containers Beta Based on Docker](https://developer.ibm.com/bluemix/2014/12/04/ibm-containers-beta-docker/) + + + + +Other references: + +[http://www.businesscloudnews.com/2014/12/05/ibm-docker-partner-to-bring-containers-to-enterprises-hybrid-clouds/](http://www.businesscloudnews.com/2014/12/05/ibm-docker-partner-to-bring-containers-to-enterprises-hybrid-clouds/) diff --git a/_posts/2014-12-09-How to start using Bluemix?.md b/_posts/2014-12-09-How to start using Bluemix?.md new file mode 100755 index 0000000000000..f044dffacb7c7 --- /dev/null +++ b/_posts/2014-12-09-How to start using Bluemix?.md @@ -0,0 +1,53 @@ +--- +layout: post +date: 2014-12-09 11:58:00 +title: How to start using Bluemix? +--- + + +Hi again my friends! + +Two weeks ago I was lucky enough to go back home (@Madrid) for work, and stay there for few days. +This was a great experience not just because of being at home and spending some time with my family. Also because of the opportunity to go back to where I started my career in IT some years ago: IBM in Madrid. While being there, I even had some time to meet my former manager and some colleagues to remember nice past situations. + +## **Brother's questions** + +But back to the track and to the original point of this blog now! +When I speak to my brother, I often encourage him to look at Bluemix, to try it and play around with it. He is very curious and interested in IT even if he is still at school. +So what happened when I was there at home? Well, he just told me: Marco, now that you are here, please show me [Bluemix](https://console.ng.bluemix.net/) and what can I do with it?! + +## **Where to start?** + +Then my question was: what to show to someone that has never used Bluemix or a similar platform? In turned out to be easier than what I expected. + +I did the following: + +- Showed him the main page and what he could do with it. +- Login with my account to show him the catalog of services and application runtime available. +- Showed him the use of boilerplates for an easy start on Bluemix (like the one for Internet of Things foundation) +- Accessed to some of the services I had deployed like Cloudant, NodeRed or dashDB to show him how you can easily access each management console to manage your service. + +![Boilerplates]({{ site.baseurl }}/images/Boilerplate.png) + +![Data services]({{ site.baseurl }}/images/datamgmt.png) + +![Internet of Things Foundation]({{ site.baseurl }}/images/iot.png) + + +## **Results** + +After few minutes showing him how he could use Bluemix and in particular, what HE could do with it, he really looked interested and just when I left his room he was already creating his own account. + +Many times we spoke about creating application or how to build an idea. Now with Bluemix this is easier as he does not have to think about infrastructure, servers or operating systems, he can just go and build his ideas on the top of it. + +These are some of the links I showed to him: + +[What is this Bluemix thing?](http://www.ibm.com/developerworks/websphere/library/techarticles/1410_reinitz/1410_reinitz1.html) + +[Translate Twitter with Watson](http://www.ibm.com/developerworks/cloud/library/cl-watson-translatetwitter-app/index.html]) + +[Analyzing Twitter profiles with Node.js](http://www.ibm.com/developerworks/web/library/wa-twitter-wordcloud-app/index.html) + +I hope he will now start to use it and I really look forward to hear from him saying: + + *Hey Marco, you were right, I already got an app for my idea built thanks to Bluemix!* \ No newline at end of file diff --git a/_posts/2014-12-10-How I met dashDB.md b/_posts/2014-12-10-How I met dashDB.md new file mode 100755 index 0000000000000..a1c4ce1043037 --- /dev/null +++ b/_posts/2014-12-10-How I met dashDB.md @@ -0,0 +1,112 @@ +--- +layout: post +date: 2014-12-10 12:00:00 +title: How I met dashDB +--- + +Good morning my friends! +It is cold this time here in Ireland, so I thought about remembering a warmer time, like last month in Las Vegas for the Insight 2014 conference! + +I was lucky to attend this conference (and fly over to Las Vegas) and this was a great time and a great opportunity to learn about new products while at the same time getting to meet a lot of interesting people. + +During the week, I had to present a Lab Session I prepared about databases...datawarehouses...on cloud...on Bluemix... + +## **Situation** + +Wait a moment. Cloud? Datawarehouse? Analytics? This sounds cool! +Well, honestly, it is. + +During the IM general session, there was an announcement about a new product in the datawarehouse world, aiming to meet the needs of customers willing to have an hybrid approach for their Analytics. After the general session, the name of the product I was doing the presentation about was out there: **dashDB!** + +![dashDB Announcement]({{ site.baseurl }}/images/dashdb-announce.jpg) + + +## **What is dashDB?** + +Probably some of you may have heard about dashDB and asked yourself: what is this exactly? I will try to help. + +Now more than ever Data is an extremely important resource. It is not just about the data, but mostly what you can do with this data, what you can learn from it, what you can visualize from it. + +One of the ideas of dashDB is to offer the flexibility of the Cloud for a solution to just load and work with our data and visualize and extract the most meaningful insights for our business, for our case. + +dashDB offers the ease of use with simple menus where we can load our data, query it and work with it, with some other features that make it a great product. The technology behind it is using in-database analytics processing combined with in-memory columnar database technology that can speed up massively your analytic workloads. + +Going to a lower level, dashDB runs on top of Softlater, and you can actually use and try dashDB from [BlueMix](http://www.bluemix.net) and use it as a building block for your application. But it can also be used on its own to speed up your analytic processing by using the service on the Cloud. + +![dashDB]({{ site.baseurl }}/images/dashdbdesc.png) + +Remember, this is not just about going to the Cloud and moving everything there. This is about hybrid Cloud and giving YOU the possibility to chose the best approach for your application or your business. You may already have your datawarehouse on premises, but just imagine how useful could be to rapidly deploy and use a service like this and not having to wait to get the infrastructure ready... + +## **Who is this for?** + +When a new product or new service comes to the market, one of the frequent questions is who is this for or who can benefit from this. dashDB has been developed with different user cases in mind and for this it can suit different needs and it will be evolving and adding more useful features. + +#### - *IT professionals* + +It can be useful when they need to build a solution without worrying about the underlaying infrastructure. Servers, OS, patches, you name it, you can just deploy and use with dashDB. + +#### - *Business analysts* + +The idea of dashDB is to offer something easy to use, where users with little experience could load and get useful insights from their data without waiting for DBAs or for other departments for a report. Just go and get the insight you need from your data. + +#### - *Application developers, idea creators* + +With dashDB, an user willing to build a new application using smart analytics on a particular set of data, can just load or merge data from different sources and extract the right data analysis he needs. This can also be used as service for your application running on Bluemix so your queries and analytic processing will definitely benefit from this. And you can also just synchronize data coming from a NoSQL database used in your application. This can be really useful if you think of mobile apps, systems of engagement or things like Internet of Things data stored in a NoSQL database! + +#### - *Data Scientists* + +Load and get insights from your data. This is something always useful but then what? With dashDB, users have R capabilities ready to use out of the box. Integrated RStudio environment and R runtime will be of a great help for data scientists willing to apply statistical analysis or visualize their data. + +## **My favourites** + +From my experience using dashDB, I already have some favourites features that in my opinion are key for dashDB: + +- Data synchronization with Cloudant +- R runtime environment ready to use + +#### *Data synchronization with Cloudant* + +dashDB offers data synchronization from Cloudant (available from dashDB on Bluemix and on cloudant.com). This will seamlessly discover the JSON documents in our Cloudant database and automatically create the table structures to store the data coming from Cloudant. This might sound complicate, but it is all easily done in 3 or 4 mouse clicks, try it! + +Once the tables are created, the data will start to be synchronized automatically and more important, this will be a continuous feed into you datawarehouse. + +![Cloudant Sync]({{ site.baseurl }}/images/cloudantsync.png) + +#### *R runtime environment ready to use* + +The included R capabilities can be really useful to get useful insights from the data we have. And thanks to the R library for dashDB, we can benefit from in-database analytics functions that would not have to get the data out from the database and will speed up the processing of this analysis. + +![R plot]({{ site.baseurl }}/images/Rexample.png) + + +With this, we can build our own R scripts to get a nice plot showing the insights that we just need from the data. + +#### *Easier with an example* + +These two features are my favourites, but imagine: how could you use them together? + +One easy use case I always think of is the following: you build a Node.js application, running on Bluemix. Using Node.js different API's (like Twitter) you store the JSON data coming from these API's in a Cloudant database. Now that you have your information (like tweets for a particular topic) stored in a NoSQL, JSON database in Cloudant, you can use the Cloudant sync option in dashDB to synchronize this data to your datawarehouse. With this option, you will have all the data coming from your tweets in a relational datawarehouse, easier to query and visualize. At this point, just go and use the R capabilities of dashDB to build an R script that will generate a plot showing statistical data (countries, number of retweets) from the tweets you analized for a particular topic. What do you think? + +## **DIY: Do it yourself** + +That's enough talking for today. Stay tuned for a technical post in the near future about using dashDB. Now just go ahead and try this yourself to see how this may be useful for your situation! + +Visit [www.dashdb.com](http://www.dashdb.com) and start to see the potential of dashDB and if you have any question just feel free to leave a comment below! + +You can also get more information from the following links: + +[Learn more about dashDB, data warehousing and analytics power at your fingertips in the cloud](http://de.slideshare.net/cindyrussell129357/learn-more-about-dashdb-data-warehousing-and-analytics-power-at-your-fingertips-in-the-cloud) + +[dashDB is Here, and This Changes Everything for Data Warehousing on the Cloud](http://ibmdatawarehousing.wordpress.com/2014/10/27/warehouse-as-a-service-hensley/) + +[Introducing Data Warehousing and Analytics with Cloudant and dashDB](https://cloudant.com/blog/introducing-data-warehousing-and-analytics-with-cloudant-and-dashdb/) + +[IBM dashDB is here! Keeping data warehouse infrastructure out of your way](http://softwaretradecraft.com/ibm-dashdb-is-here-keeping-data-warehouse-infrastructure-out-of-your-way/) + +[5 Things to Know about dashDB](https://www.ibm.com/developerworks/community/blogs/5things/entry/5_things_to_know_about_dashdb_placeholder?lang=en) + +[Data Security in dashDB](https://ibmdatawarehousing.wordpress.com/2014/12/04/data-security-in-dashdb/) + + + + diff --git a/_posts/2014-3-3-Hello-World.md b/_posts/2014-3-3-Hello-World.md index c469524e3efa3..d4665b6d18e9e 100644 --- a/_posts/2014-3-3-Hello-World.md +++ b/_posts/2014-3-3-Hello-World.md @@ -3,7 +3,7 @@ layout: post title: You're up and running! --- -Next you can update your site name, avatar and other options using the _config.yml file in the root of your repository (shown below :point_down:). +Next you can update your site name, avatar and other options using the _config.yml file in the root of your repository (shown below). ![_config.yml]({{ site.baseurl }}/images/config.png) diff --git a/_posts/2015-01-12-About Internet of Things, Cloudant and dashDB.md b/_posts/2015-01-12-About Internet of Things, Cloudant and dashDB.md new file mode 100755 index 0000000000000..ef8b48b68be0d --- /dev/null +++ b/_posts/2015-01-12-About Internet of Things, Cloudant and dashDB.md @@ -0,0 +1,88 @@ +--- +layout: post +date: 2015-01-12 11:00:00 +title: About Internet of Things, Cloudant and dashDB +--- + +Happy New Year my friends! + +I hope you all had a relaxing holiday and enjoyed a good time with a lot of *FFF* moments: Family, Friends and Food (I let you decide the order you prefer!!!) + +I am back after a good break and revisiting the blog I know we left this with dashDB. +As we head into this new year, I am pretty sure that many cool things will come for dashDB, so in the meantime, I will go through one of the features I personally like the most about dashDB. + +## **Situation** + +We live in a world where lots of data are being generated every day. From traditional online services, to social media or connected services, it is all about data. And probably you already heard about IoT: Internet of Things. This will easily increase the amount of data we generate and have available to analyze. Just as a matter of fact, I bet the presence of wearable devices as Christmas gifts was important this year, with many other devices starting to go in the direction and generating for us more more data! + +I will go through some cool gadgets and sensors for IoT in a future post, but for now my question is: + +*How do we store all this data coming from devices, social media, sensors?* + +*How can we analyze this data to get insights on the information that is useful to us?* + +This is where the connection of Systems of Engagement to Systems of Record has a strategic importance. + +## **Connecting Systems of Engagement to Systems of Record** + +Systems of Engagements definition can be checked here: +[Systems of Engagement - Wikipedia](http://en.wikipedia.org/wiki/Systems_of_Engagement) + +Examples of these are social media platform, sensors, connected devices, wearables... + +Systems of Record instead are what we all know by traditional IT systems where we store data, like our loved databases! + +One example of connecting both kind of systems is offered by dashDB and Cloudant. We can have data coming from systems of engagements like sensors or social media platforms like Twitter stored into a JSON NoSQL database on Cloudant. Then this data can be seamlessly synchronized into a table inside our dashDB database to have the power of SQL (and R!) to analyze and visualize data coming from our NoSQL database. + + +#### *Internet of Things, Raspberry Pi and Cloudant* + +I will show you here how easy is to have our data synchronized from Cloudant into dashDB. + +As an example, I will use a NodeRed application deployed in BlueMix and using the Internet of Things foundation application ([Internet of Things Foundation - BlueMix](https://internetofthings.ibmcloud.com/)) + +![IoT]({{ site.baseurl }}/images/IOTfund.png) + +Basically, I have at home a RaspberryPi, running an agent and sending device information to the IoT platform on BlueMix. With this, I am able to retrieve the information from my device and work with it to for example store it in a JSON datastore on Cloudant. + +To do this step, I can easily use the following module on NodeRed, and it will store the information retrieved from my Raspberry Pi at home (CPU load or temperature) into my Cloudant database previously created. + +![NodeRed]({{ site.baseurl }}/images/nodered_model.png) + +#### *Connecting Cloudant to dashDB* + +Now that I am ready and storing my RaspberryPi data into Cloudant, we can go and connect dashDB to our Cloudant database. + +To do this, we just need to deploy a new dashDB service into our BlueMix dashboard by selecting dashDB from the catalog: + +![dashDB]({{ site.baseurl }}/images/dashdb_cat.png) + +Once the service is deployed, we just go to "Manage" -> "Sync from Cloudant". +The screen is very simple and we just have to include our Cloudant database API URL and our login details. In this case, my database has been given the read privilege for everybody (inside Cloudant), so I do not need to add those details. +We also select a table prefix that will be added to the table created inside dashDB and containing the data from Cloudant. + +Once all the information is ready, we just start to sync the database and we can see the information progress like this: + +![Cloudant Sync]({{ site.baseurl }}/images/cloudantsync2.png) + +This process will discover the document structure of the Cloudant datastore to create the necessary table structure inside our relational database in dashDB. +This just takes a few seconds and when is completed, we will receive the confirmation that the data sync from Cloudant is in progress - and currently working! + +![Cloudant Sync]({{ site.baseurl }}/images/cloudantsync1.png) + +This is it. Done. By these simple steps, we have now all the data from our Cloudant database synchronized seamlessly into dashDB ready to be analyzed or visualized to get the insights we need. And remember, this is a continuous replication, so any data added to the Cloudant database will be in sync in dashDB too! + +#### *Working with my data* + +Now I only have to go to "Manage" -> "Work with Tables" in dashDB to access the table created during this process. The table name will start by iot_* as it was the table prefix I selected during the setup. + +After a quick look at the table and its data, I am all set to run a quick query to verify the information I need about my Raspberry Pi CPU load and temperature! + +![Query Cloudant data]({{ site.baseurl }}/images/dashdb_querydata.png) + + +This is it for today my friends! + +I hope you enjoyed this quick view on dashDB and how to synchronize data from Cloudant! + +Feel free to add any question on the comments below or just add me on Twitter! [@marcobonezzi](https://twitter.com/marcobonezzi) \ No newline at end of file diff --git a/_posts/2015-02-02-Raspberry Pi 2 is here!.md b/_posts/2015-02-02-Raspberry Pi 2 is here!.md new file mode 100755 index 0000000000000..e0df3b1cab84a --- /dev/null +++ b/_posts/2015-02-02-Raspberry Pi 2 is here!.md @@ -0,0 +1,61 @@ +--- +layout: post +date: 2015-02-02 15:45:00 +title: Raspberry Pi 2 is here! +--- + +Hello my friends! + +Wow, I personally didn't expect it, but today a new Raspberry Pi has been launched! +And no, it's not just an improvement like the B+ model... this is something more.. + +### Raspberry Pi 2 + +What is new? + +The specifications: + +- 900 MHz quad-core ARM Cortex-A7 CPU +- 1GB LPDDR2 SDRAM +- Full compatibility with Raspberry Pi (cases and accesories!) + +You can have a look at the full specifications here: + +[Raspberry Pi 2, Model B](http://docs-europe.electrocomponents.com/webdocs/138e/0900766b8138e68d.pdf) + + + +![Raspberry Pi 2]({{ site.baseurl }}/images/pi_board_big.jpg) + +The specifications are great right? What about the price? +A key point for the original Raspberry Pi was the price. + +So is the price still good enough for this new Raspberry Pi? Absolutely... + +35... **35$**. What? For the new Raspberry Pi 2. Yes, you read right. +Like they say... *shut up and take my money!!!* :) + +Interested in getting one? You can try one of these two sites for Europe: + +[Pimoroni Shop](http://shop.pimoroni.com/products/raspberry-pi-2-with-pibow) + +[RS Components](http://uk.rs-online.com/web/p/processor-microcontroller-development-kits/832-6274/) + + +I will try to get one soon to play a bit and see how good it is compared to the original. + +Expect also a technical comparison between its ARM Cortex A7 (quad core) and the ARM Cortex A9 (dual core) that powered the Pandaboard that I used [here](http://sisteming.github.io/2012/02/20/low-power-techniques-in-multicore-systems-based-in-arm-architecture-part-iii/) + +As a last note, it seems that Microsoft is trying hard to change their image... and there will be a Windows 10 version to run on the new Raspberry Pi 2!!! A move to try to avoid Linux spreading? Maybe... But fair play to MS! + +Anyone ordering one? Feel free to comment with what use you could make of it! + + +More info: + +[Turbocharged Raspberry Pi 2 unleashed](http://www.theregister.co.uk/2015/02/02/raspberry_pi_model_2/) + +[Raspberry Pi 2 unveiled with faster processor and more memory](http://www.bbc.co.uk/news/technology-31088908) + +[Raspberry Pi 2 announced with substantial hardware upgrades](http://www.engadget.com/2015/02/02/raspberry-pi-2/) + diff --git a/_posts/2015-03-25-Running Docker on OSX.md b/_posts/2015-03-25-Running Docker on OSX.md new file mode 100755 index 0000000000000..532b8062ed5aa --- /dev/null +++ b/_posts/2015-03-25-Running Docker on OSX.md @@ -0,0 +1,96 @@ +--- +layout: post +date: 2015-03-25 21:45:00 +title: Running Docker on OS X +--- + +Hello my friends! + +I know it has been quite a long time since the last entry in here! +These have been busy months with travels and changes... more on that in a future post! ;) + +Today I want to talk about Docker... + +Yes, probably most of you are already aware of it. And fewer maybe already did something with it. Oh, and is there anyone who does not know it yet?? + +## Docker? What is that? + +So you haven't heard about Docker yet? Not too bad... +It also happens with some colleagues, I was recently in a conversation and mentioned Docker and some of them did not know what I was talking about... + +To get yourself up to date and know something more on Docker, have a look at my previous post which also contains useful links and video! + +**[What is Docker and why everyone likes it?](http://sisteming.github.io/2014/12/03/What%20is%20Docker%20and%20why%20everyone%20likes%20it%3F/)** + +**[Docker containers arriving to Bluemix!](http://sisteming.github.io/2014/12/05/Docker%20containers%20arriving%20to%20BlueMix/)** + +There is also a great book on Docker which I recommend to buy, it is definitely worth it: + +**[The Docker Book](http://www.dockerbook.com/)** + + +## Ok ok, I want to try it!! + +Feeling ready to try it? In that case, get ready to use your command line and have some fun! +Depending on the OS you're using there will be different instructions. +In my case, I use OS X on my Macbook so I had to look for some nice tutorials to set up the environment! + +First I found a really good guide with lots of details on Docker and how to get it working on OS X. Recently, I found a way that looks easier than the first, so I will let you choose your preferred option! + +#### The hard way + +This guide will show you very interesting details on Docker like how it works, how it works on Linux, how it is on OS X and all the required steps to get it to work on OS X using Virtualbox and boot2docker. + +I have to say that it's not as hard as it could seem and this will give you more details on some interesting points of docker on your local machine. + +[How to use docker on OS X - The missing guide](http://viget.com/extend/how-to-use-docker-on-os-x-the-missing-guide) + +#### The easiest way + +I recently came accross to [kitematic](https://kitematic.com/), a project that claims to be the easiest way to use Docker on your Mac! + +![kitematic]({{ site.baseurl }}/images/kitematic.png) + +Well, I can tell you they must be pretty good given that know it is also part of Docker itself! + +From a quick try, it looks like it will do the following tasks for you just by opening the app + + -Install Docker and VirtualBox + -Start Docker VM + +Once the Docker VM is started, you will get a nice app showing your containers and some recommended already defined images. + +![kitematic App]({{ site.baseurl }}/images/kitematicApp.png) + +This seems too easy right? + +![kitematic New container]({{ site.baseurl }}/images/kitematicNewC.png){: .center-image} + +Well, you just select 'Create' on the image you want to use and in seconds (literally!) your new container will be created from the chosen image. + +![kitematic container created]({{ site.baseurl }}/images/kitematic_cont.png) + +This is cool, isn't it? + +## Is there future for Docker? + +When I first heard about containers and Docker, my initial thought was that this may be something more to play around or for Dev environments. +Recently Docker is getting more and more attention. But the definitive spark that got me more insterested about it was when I heard that a client was using it for their development environment for DB2! + +### Enterprise Docker? + +Last month, I was lucky enough to attend IBM conference about Cloud and lots of other stuff, IBM Interconnect. + +It was indeed interesting to see how different products and projects are going to use Docker as base for cloud or virtualized environment. + +But it was even cooler when I spotted a Docker booth at the Expo! I definitely went to speak with them and it was great to hear some of their plans. And... of course to get a Docker t-shirt and some stickers too! + +![Docker booth]({{ site.baseurl }}/images/dockerbooth.jpeg) + +![Docker sticker]({{ site.baseurl }}/images/dockersticker.png) + +What do you think about Docker? Are you using it? Have you tried it? + +Feel free to drop a comment with your thoughts below, I will be happy to discuss! + + diff --git a/_posts/2015-04-10-MongoDB on BlueMix.md b/_posts/2015-04-10-MongoDB on BlueMix.md new file mode 100644 index 0000000000000..924356f0b4c49 --- /dev/null +++ b/_posts/2015-04-10-MongoDB on BlueMix.md @@ -0,0 +1,57 @@ +--- +layout: post +date: 2015-04-01 21:45:00 +title: MongoDB on BlueMix +--- + +Hi my friends! + +For some reasons that I will explain in a future post, I have been looking at MongoDB and I was curious about its availability on BlueMix. + +## MongoDB on BlueMix? Why not? + +The progress of MongoDB in the last few years has been very successful. As a sign of this, it is getting more and more used, specially for modern web applications with Node.js, Python, Angular.js or even the so popular now *MEAN* framework. + +On the other side, BlueMix is also getting popular and more and more services are being added each month. It is interesting to see how many services are being implemented not only from IBM but also from the community or third parties. + +This is the case for MongoDB on BlueMix, where we have two possible alternatives to use. + + +## MongoDB NoSQL database (community) + +Many applications developed on BlueMix are using MongoDB. For simple applications deployed within BlueMix, this service from the community +can be used. + +![MongoDB service details]({{ site.baseurl }}/images/mongodb_community.png) + +Once we bind the service to our application, we are able to connect the application to our new MongoDB database. Whether we use Node.js, Java or Ruby, we can find the instructions to connect to our MongoDB database from [Getting started with MongoDB service](https://www.ng.bluemix.net/docs/#services/MongoDB/index.html#MongoDB) + +![Getting Started with MongoDB]({{ site.baseurl }}/images/gettingstarted.png) + +## MongoLab (third party) + +According to the BlueMix service description, MongoLab is a fully-managed cloud database service featuring highly-available MongoDB databases, automated backups, web-based tools, 24/7 monitoring, and expert support. + +![Mongolab service]({{ site.baseurl }}/images/mongolab.png) + +From the service console on mongolab, we can easily see our mongodb databases, collections, and create even more just with few clicks. + +![Mongolab Console details]({{ site.baseurl }}/images/mongolab_detail.png) + +You can also use your own mongodb client and connect from your local machine to your mongodb instance running on MongoLab! + +![Mongolab Connection details]({{ site.baseurl }}/images/mongolab_detail2.png) + +### Getting your hards dirty + +Why don't you try yourself to see what could suit you better? + +Here is an interesting article that will show you how to build a real-time poll application with Node.js, Express, AngularJS and MongoDB. And yes, all on Bluemix! + +[Build a real-time polls application with Node.js, Express, AngularJS, and MongoDB](https://www.ibm.com/developerworks/library/wa-nodejs-polling-app/) + +Have you already used one of the services and have a preference? Or have you implemented the application in the tutorial above? +Feel free to drop me a comment below! + + + diff --git a/_posts/2015-11-28-Simple-git-guide.md b/_posts/2015-11-28-Simple-git-guide.md new file mode 100644 index 0000000000000..341c72dd3923b --- /dev/null +++ b/_posts/2015-11-28-Simple-git-guide.md @@ -0,0 +1,39 @@ +--- +layout: post +date: 2015-11-28 11:45:00 +title: Simple git guide +--- + +Hello again! + +As you know, this blog is powered by [Jekyll](https://jekyllrb.com/) and [github pages](https://pages.github.com/): + +[First post](http://sisteming.github.io/2014/11/09/First-Post/) + +[Using Jekyll](http://sisteming.github.io/2014/11/17/Jekyll/) + + + +Thanks again to [@dottorblaster](https://twitter.com/dottorblaster) for showing [how cool your blog can be with this](http://dottorblaster.it/2014/09/addio-wordpress-benvenuto-jekyll/). + +The beauty of this system is that each post is written in markdown and can easily done from a simple text editor, using something like Sublime Text, or with a dedicated markdown client like 'MacDown' for Mac. + +Other than this, the coolest thing is that you commit and push your files to your git repo to publish your new post! + +So as nerds that most of us are, why don't we do this using git command line? You could even create a script to do all the required steps for you ;) + +Looking more into git, I found this awesome guide to git, really simple to follow: + +[http://rogerdudler.github.io/git-guide/](http://rogerdudler.github.io/git-guide/) + +![simple git guide]({{ site.baseurl }}/images/gitguide.png) + + +All the credit goes to his creator: [Roger Dudler](https://twitter.com/rogerdudler) + +Thanks Roger! + + +Have fun guys! + +Marco \ No newline at end of file diff --git a/_posts/2015-11-28-quick-update.md b/_posts/2015-11-28-quick-update.md new file mode 100644 index 0000000000000..68e5e21fde727 --- /dev/null +++ b/_posts/2015-11-28-quick-update.md @@ -0,0 +1,37 @@ +--- +layout: post +date: 2015-11-28 10:45:00 +title: Quick update! +--- + +Hello, my dear my friends! + +I know it has been so long since my last post on this blog. At least 7 months, which is definitely not good. + +But you know, life is life and things happened... This year won't be on my best years list for sure. There have been ups and downs, but for now the downs are a majority. + +But let's keep this positive. If you check my [last post](http://sisteming.github.io/2015/04/01/MongoDB%20on%20BlueMix/), I mentioned this: + + +> For some reasons that I will explain in a future post, I have been looking at MongoDB and I was curious about its availability on BlueMix. + + +Well, I think the time has arrived to explain this. + +As you know, in the past, some of my recent posts here were related to IBM cloud technologies like Bluemix, dashDB or Cloudant. If you see my previous post, I was exploring the MongoDB service on Bluemix... (hint hint ;)) + +That's one of the positive sides of this year: I changed from working with IBM and being involved in Bluemix and the IM solutions in IBM, to working for MongoDB, **THE** noSQL open-source database. + +![MongoDB]({{ site.baseurl }}/images/mongodb-logo-rgb.jpeg) + +Working for MongoDB is being a great experience so far, both for the size of the company, the way things work and specially for the kind of work we do in our team: helping clients to be successful deploying MongoDB. + +This involves lots of log analysis, infrastructure review, dealing with code, Linux, performance... All things I always liked. + +So yeah, that's it. You're now up to date! + +Keep looking at the blog for new and fresh posts in the near future! + +Take care guys! + +Marco diff --git a/_posts/2020-10-24-Hello-World-Part-2_.md b/_posts/2020-10-24-Hello-World-Part-2_.md new file mode 100644 index 0000000000000..538362bededd8 --- /dev/null +++ b/_posts/2020-10-24-Hello-World-Part-2_.md @@ -0,0 +1,30 @@ +--- +layout: post +date: 2020-10-24 09:00:00 +title: Hello World - Part 2 +--- + +Hello World! + +It's not the first post here right? That's why this feels like part 2. + +## Looking back to 2016 + +Yesterday, for some strange reason, an email from 2016 from my dear colleague Eoin Brazil came up on my inbox. Looking at it in the evening, it was one of the great emails he used to send with interesting reads and articles. + +Going through it, I spotted that he also listed a talk I did back then in 2016 on containers, docker, swarm and of course, MongoDB. Looking at the slides made me remember not only the effort put on that talk but also a bit of those times 4 years ago. + +If you're curious, here is a link to that talk: [The rise of containers: from development to production using Docker](http://sisteming.github.io/containers/#1) (actually hosted on github pages). + +## Back to 2020 and beyond: next steps + +I realised I miss a bit doing those type of talks so here is my plan: + +1. Collect all the past talks I did on Docker, Kubernetes and MongoDB and use this blog as their home. +2. Try to come back here to share more of my own thoughts or experiences with MongoDB, Realm but also other aspects that I find important nowadays: productivity, time management, leadership. + +I hope it really won't be another 5 years to the next post! + +See you soon! + +Marco \ No newline at end of file diff --git a/_sass/_highlights.scss b/_sass/_highlights.scss new file mode 100644 index 0000000000000..57c7b72f07617 --- /dev/null +++ b/_sass/_highlights.scss @@ -0,0 +1,84 @@ + +.highlight { + background-color: #efefef; + padding: 7px 7px 7px 10px; + border: 1px solid #ddd; + -moz-box-shadow: 3px 3px rgba(0,0,0,0.1); + -webkit-box-shadow: 3px 3px rgba(0,0,0,0.1); + box-shadow: 3px 3px rgba(0,0,0,0.1); + margin: 20px 0 20px 0; + overflow: scroll; +} + +code { + font-family:'Bitstream Vera Sans Mono','Courier', monospace; +} + +.highlight .c { color: #586E75 } /* Comment */ +.highlight .err { color: #93A1A1 } /* Error */ +.highlight .g { color: #93A1A1 } /* Generic */ +.highlight .k { color: #859900 } /* Keyword */ +.highlight .l { color: #93A1A1 } /* Literal */ +.highlight .n { color: #93A1A1 } /* Name */ +.highlight .o { color: #859900 } /* Operator */ +.highlight .x { color: #CB4B16 } /* Other */ +.highlight .p { color: #93A1A1 } /* Punctuation */ +.highlight .cm { color: #586E75 } /* Comment.Multiline */ +.highlight .cp { color: #859900 } /* Comment.Preproc */ +.highlight .c1 { color: #586E75 } /* Comment.Single */ +.highlight .cs { color: #859900 } /* Comment.Special */ +.highlight .gd { color: #2AA198 } /* Generic.Deleted */ +.highlight .ge { color: #93A1A1; font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #DC322F } /* Generic.Error */ +.highlight .gh { color: #CB4B16 } /* Generic.Heading */ +.highlight .gi { color: #859900 } /* Generic.Inserted */ +.highlight .go { color: #93A1A1 } /* Generic.Output */ +.highlight .gp { color: #93A1A1 } /* Generic.Prompt */ +.highlight .gs { color: #93A1A1; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #CB4B16 } /* Generic.Subheading */ +.highlight .gt { color: #93A1A1 } /* Generic.Traceback */ +.highlight .kc { color: #CB4B16 } /* Keyword.Constant */ +.highlight .kd { color: #268BD2 } /* Keyword.Declaration */ +.highlight .kn { color: #859900 } /* Keyword.Namespace */ +.highlight .kp { color: #859900 } /* Keyword.Pseudo */ +.highlight .kr { color: #268BD2 } /* Keyword.Reserved */ +.highlight .kt { color: #DC322F } /* Keyword.Type */ +.highlight .ld { color: #93A1A1 } /* Literal.Date */ +.highlight .m { color: #2AA198 } /* Literal.Number */ +.highlight .s { color: #2AA198 } /* Literal.String */ +.highlight .na { color: #93A1A1 } /* Name.Attribute */ +.highlight .nb { color: #B58900 } /* Name.Builtin */ +.highlight .nc { color: #268BD2 } /* Name.Class */ +.highlight .no { color: #CB4B16 } /* Name.Constant */ +.highlight .nd { color: #268BD2 } /* Name.Decorator */ +.highlight .ni { color: #CB4B16 } /* Name.Entity */ +.highlight .ne { color: #CB4B16 } /* Name.Exception */ +.highlight .nf { color: #268BD2 } /* Name.Function */ +.highlight .nl { color: #93A1A1 } /* Name.Label */ +.highlight .nn { color: #93A1A1 } /* Name.Namespace */ +.highlight .nx { color: #555 } /* Name.Other */ +.highlight .py { color: #93A1A1 } /* Name.Property */ +.highlight .nt { color: #268BD2 } /* Name.Tag */ +.highlight .nv { color: #268BD2 } /* Name.Variable */ +.highlight .ow { color: #859900 } /* Operator.Word */ +.highlight .w { color: #93A1A1 } /* Text.Whitespace */ +.highlight .mf { color: #2AA198 } /* Literal.Number.Float */ +.highlight .mh { color: #2AA198 } /* Literal.Number.Hex */ +.highlight .mi { color: #2AA198 } /* Literal.Number.Integer */ +.highlight .mo { color: #2AA198 } /* Literal.Number.Oct */ +.highlight .sb { color: #586E75 } /* Literal.String.Backtick */ +.highlight .sc { color: #2AA198 } /* Literal.String.Char */ +.highlight .sd { color: #93A1A1 } /* Literal.String.Doc */ +.highlight .s2 { color: #2AA198 } /* Literal.String.Double */ +.highlight .se { color: #CB4B16 } /* Literal.String.Escape */ +.highlight .sh { color: #93A1A1 } /* Literal.String.Heredoc */ +.highlight .si { color: #2AA198 } /* Literal.String.Interpol */ +.highlight .sx { color: #2AA198 } /* Literal.String.Other */ +.highlight .sr { color: #DC322F } /* Literal.String.Regex */ +.highlight .s1 { color: #2AA198 } /* Literal.String.Single */ +.highlight .ss { color: #2AA198 } /* Literal.String.Symbol */ +.highlight .bp { color: #268BD2 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #268BD2 } /* Name.Variable.Class */ +.highlight .vg { color: #268BD2 } /* Name.Variable.Global */ +.highlight .vi { color: #268BD2 } /* Name.Variable.Instance */ +.highlight .il { color: #2AA198 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_scss/_reset.scss b/_sass/_reset.scss old mode 100644 new mode 100755 similarity index 89% rename from _scss/_reset.scss rename to _sass/_reset.scss index fcf2bf0b65582..120eebf95c9d3 --- a/_scss/_reset.scss +++ b/_sass/_reset.scss @@ -12,8 +12,8 @@ b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; @@ -24,7 +24,7 @@ time, mark, audio, video { vertical-align: baseline; } // HTML5 display-role reset for older browsers -article, aside, details, figcaption, figure, +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } diff --git a/_sass/_svg-icons.scss b/_sass/_svg-icons.scss new file mode 100644 index 0000000000000..c517b73c7efbe --- /dev/null +++ b/_sass/_svg-icons.scss @@ -0,0 +1,20 @@ +.svg-icon { + width: 40px; + height: 40px; + display: inline-block; + + &.dribbble { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPjxwYXRoIGQ9Ik0wLjIyNDU4MDY4OCwzMCBDMC4yMjQ1ODA2ODgsMTMuNDMxNDU2NyAxMy40NTQ5NDEsMCAyOS43NzU0MTkzLDAgQzQ2LjA5NTg5NzYsMCA1OS4zMjYyNTc5LDEzLjQzMTQ1NjcgNTkuMzI2MjU3OSwzMCBDNTkuMzI2MjU3OSw0Ni41Njg1NDMzIDQ2LjA5NTg5NzYsNjAgMjkuNzc1NDE5Myw2MCBDMTMuNDU0OTQxLDYwIDAuMjI0NTgwNjg4LDQ2LjU2ODU0MzMgMC4yMjQ1ODA2ODgsMzAgWiBNMC4yMjQ1ODA2ODgsMzAiIGZpbGw9IiNFQTRDODkiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD48cGF0aCBkPSJNNDYuODIwMTQwMiwyOS44MzA2MzA3IEM0Ni44MjAxNDAyLDMwLjk5MTA2NjIgNDYuNzAzOTM4MSwzMi4xNDk4OTIgNDYuNDc1Njk1OCwzMy4yNzk0NzczIEM0Ni4yNTMxMzQ4LDM0LjM4MjIzNjMgNDUuOTIzNDg4MSwzNS40NjQ4NzU3IDQ1LjQ5MTY0NDQsMzYuNDk5ODMxNCBDNDUuMDY5NzA5OSwzNy41MTY0NzgzIDQ0LjU0NjM3MSwzOC40OTYxNzIgNDMuOTM0ODQwMiwzOS40MDk4MDYyIEM0My4zMzI0MjU4LDQwLjMxNzY3MjcgNDIuNjM4NDUwMiw0MS4xNjk0MDUzIDQxLjg3NjEwMSw0MS45NDU4MjM0IEM0MS4xMTIxMDAzLDQyLjcxODg4ODEgNDAuMjcxNDY4Myw0My40MjI0NzI5IDM5LjM3ODkxMiw0NC4wMzc1MzEyIEMzOC40NzczMDUzLDQ0LjY1NDkzNjcgMzcuNTEyMjc5Niw0NS4xODYyMzAxIDM2LjUxMTcxMjgsNDUuNjE3MTkzNCBDMzUuNDkyMjUyNSw0Ni4wNTM5MjQ0IDM0LjQyNDg5NzUsNDYuMzg4NTgxNSAzMy4zNDExNTk0LDQ2LjYxNDQ1ODMgQzMyLjIyODYxODUsNDYuODQ3MTA4OCAzMS4wODQ2MzIzLDQ2Ljk2NTg4MTkgMjkuOTQxNTcwOSw0Ni45NjU4ODE5IEMyOC43OTc2NTA4LDQ2Ljk2NTg4MTkgMjcuNjUzNzMwNyw0Ni44NDcxMDg4IDI2LjU0Mjc3NTIsNDYuNjE0NDU4MyBDMjUuNDU3Mzg1NSw0Ni4zODg1ODE1IDI0LjM5MDA5NjcsNDYuMDUzOTI0NCAyMy4zNzE0MjkxLDQ1LjYxNzE5MzQgQzIyLjM3MDkyODQsNDUuMTg2MjMwMSAyMS40MDQ5Nzc4LDQ0LjY1NDkzNjcgMjAuNTAzMzcxMSw0NC4wMzc1MzEyIEMxOS42MTA4MTQ4LDQzLjQyMjU0IDE4Ljc3MDE4MjgsNDIuNzE4ODg4MSAxOC4wMDc4MzM2LDQxLjk0NTgyMzQgQzE3LjI0NDY5MTcsNDEuMTY5NDA1MyAxNi41NTA3MTYxLDQwLjMxNzY3MjcgMTUuOTQ3NDQyOSwzOS40MDk4MDYyIEMxNS4zMzkyMTUxLDM4LjQ5NjE3MiAxNC44MTUwMTc1LDM3LjUxNjQxMTIgMTQuMzkxNDMxNCwzNi40OTk4MzE0IEMxMy45NTk1MjE2LDM1LjQ2NDg3NTcgMTMuNjI5MDgyMywzNC4zODIxNjkyIDEzLjQwNTcyODUsMzMuMjc5NDc3MyBDMTMuMTc5OTMwNCwzMi4xNDk4OTIgMTMuMDY0NTIxMSwzMC45OTEwNjYyIDEzLjA2NDUyMTEsMjkuODMwNjMwNyBDMTMuMDY0NTIxMSwyOC42NjkzMjM1IDEzLjE3OTg2NDQsMjcuNTA4MDE2MiAxMy40MDU3OTQ1LDI2LjM4MDkxMjMgQzEzLjYyOTE0ODMsMjUuMjc4MTUzMyAxMy45NTk1ODc3LDI0LjE5MzgzNzMgMTQuMzkxNDk3NSwyMy4xNjA1NTgyIEMxNC44MTUwODM1LDIyLjE0MzE3MzYgMTUuMzM5MjgxMiwyMS4xNjI2MDggMTUuOTQ3NTA5LDIwLjI0ODkwNjggQzE2LjU1MDc4MjIsMTkuMzQwMzAyNSAxNy4yNDQ3NTc3LDE4LjQ5MDE3OTUgMTguMDA3ODk5NiwxNy43MTI4ODk2IEMxOC43NzAyNDg4LDE2LjkzOTc1NzggMTkuNjEwODgwOCwxNi4yMzc4NDk2IDIwLjUwMzQzNzEsMTUuNjIzNzMwMyBDMjEuNDA1MDQzOCwxNS4wMDM3MDkyIDIyLjM3MDk5NDQsMTQuNDcyNDgyOCAyMy4zNzE0OTUxLDE0LjA0MDcxNDcgQzI0LjM5MDE2MjcsMTMuNjAzMDQ0OSAyNS40NTczODU1LDEzLjI2NzU4MjkgMjYuNTQyODQxMywxMy4wNDMzODI4IEMyNy42NTM3OTY3LDEyLjgxMjQ3NiAyOC43OTc3MTY5LDEyLjY5NTMxMjUgMjkuOTQxNjM3LDEyLjY5NTMxMjUgQzMxLjA4NDY5ODMsMTIuNjk1MzEyNSAzMi4yMjg2MTg1LDEyLjgxMjQ3NiAzMy4zNDEyMjU1LDEzLjA0MzM4MjggQzM0LjQyNDk2MzYsMTMuMjY3NjUgMzUuNDkyMjUyNSwxMy42MDMxMTIgMzYuNTExNzc4OSwxNC4wNDA3MTQ3IEMzNy41MTIyNzk2LDE0LjQ3MjQxNTggMzguNDc3MzcxNCwxNS4wMDM3MDkyIDM5LjM3ODk3ODEsMTUuNjIzNzMwMyBDNDAuMjcxNTM0NCwxNi4yMzc4NDk2IDQxLjExMjIzMjQsMTYuOTM5NzU3OCA0MS44NzYxNjcxLDE3LjcxMjg4OTYgQzQyLjYzODUxNjMsMTguNDkwMTc5NSA0My4zMzI0OTE4LDE5LjM0MDMwMjUgNDMuOTM0OTA2MiwyMC4yNDg5MDY4IEM0NC41NDYzNzEsMjEuMTYyNjA4IDQ1LjA2OTcwOTksMjIuMTQzMjQwNyA0NS40OTE2NDQ0LDIzLjE2MDU1ODIgQzQ1LjkyMzQ4ODEsMjQuMTkzODM3MyA0Ni4yNTMxMzQ4LDI1LjI3ODE1MzMgNDYuNDc1Njk1OCwyNi4zODA5MTIzIEM0Ni43MDM5MzgxLDI3LjUwODAxNjIgNDYuODIwMTQwMiwyOC42NjkzMjM1IDQ2LjgyMDE0MDIsMjkuODMwNjMwNyBaIE0yMy43OTE3MTIsMTYuNTk1MTA3OSBDMTkuNzcyMjY5LDE4LjUyMjAzNTYgMTYuNzcyMzUyMywyMi4yODIwNjY0IDE1LjgzNjkyMjEsMjYuODEzNTUyMyBDMTYuMjE2OTA3NiwyNi44MTY5MDU2IDIyLjIyMzM0NzEsMjYuODkzODk2OCAyOS4xNDM3NDY4LDI1LjAyNzE5NCBDMjYuNjQ5MDY4MSwyMC41Mjc0OTcxIDIzLjk4Mzc1MjcsMTYuODU1Mzg5MyAyMy43OTE3MTIsMTYuNTk1MTA3OSBaIE0zMC4zMzc5Mzk3LDI3LjI4MDQ2MjcgQzIyLjkxNjQ2MzgsMjkuNTM2MDc4OCAxNS43OTQ5MDcsMjkuMzczNzgwMSAxNS41Mzk0NDc0LDI5LjM2Mzc4NzMgQzE1LjUzNTI4NTUsMjkuNTIxMDU2MSAxNS41Mjc4ODY2LDI5LjY3MzI5NDkgMTUuNTI3ODg2NiwyOS44MzA2MzA3IEMxNS41Mjc4ODY2LDMzLjU4OTc4OTYgMTYuOTI0ODIyMSwzNy4wMTY4Mzk5IDE5LjIyMDkyMDEsMzkuNjA4MTE5MSBDMTkuMjE1OTY1NCwzOS42MDA1NDA2IDIzLjE2MDQyODgsMzIuNDk2Mjg1NiAzMC45Mzg3Njg2LDI5Ljk0Mjc2NDMgQzMxLjEyNjY0NzQsMjkuODc5MTg2MiAzMS4zMTc4OTUzLDI5LjgyMjI0NzUgMzEuNTA3NDI1NiwyOS43NjcwNTI2IEMzMS4xNDU2NzMsMjguOTM1NDM5NiAzMC43NTA4MjM3LDI4LjEwMjA4MjkgMzAuMzM3OTM5NywyNy4yODA0NjI3IFogTTM5LjQ2MDU2NCwxOC44NDgzMDk2IEMzNi45MjI5NDU0LDE2LjU3NjY2NDkgMzMuNTkwOTM3OCwxNS4xOTg3MzU4IDI5Ljk0MTU3MDksMTUuMTk4NzM1OCBDMjguNzcwNDMzNSwxNS4xOTg3MzU4IDI3LjYzMzkxMjIsMTUuMzQyNjU4NSAyNi41NDUyMTk1LDE1LjYwODcwNzYgQzI2Ljc2MTEwODMsMTUuOTAzMjU5NSAyOS40Njg1MDQ5LDE5LjU0OTQ4IDMxLjkzMzUyMTksMjQuMTQ0NDc3IEMzNy4zNzIxNjMyLDIyLjA3NDU2NTUgMzkuNDI1MDg5LDE4LjkwMTgyNzkgMzkuNDYwNTY0LDE4Ljg0ODMwOTYgWiBNMzIuNDg5ODI1NCwzMi4xOTE3NDA5IEMzMi40NTc3MTk2LDMyLjIwMjUzODUgMzIuNDI1NjEzNywzMi4yMTE4NjA2IDMyLjM5NDIzNDUsMzIuMjIzNTMgQzIzLjg4OTkyNDgsMzUuMjMzMzIxNiAyMS4xMTI3MjcyLDQxLjI5ODkxNTEgMjEuMDgyNjc5Myw0MS4zNjUxMjg2IEMyMy41Mjk2NDYyLDQzLjI5Njk5MzIgMjYuNTk4Nzk1Myw0NC40NjI1MjU2IDI5Ljk0MTU3MDksNDQuNDYyNTI1NiBDMzEuOTM3NjE3OCw0NC40NjI1MjU2IDMzLjgzODkzMjUsNDQuMDQ5OTM4MyAzNS41Njg4MTc3LDQzLjMwMjg5NSBDMzUuMzU1MzczMSw0Mi4wMjQ0MjQyIDM0LjUxODA0NDIsMzcuNTQzMTcwNCAzMi40ODk4MjU0LDMyLjE5MTc0MDkgWiBNMzcuOTk2MDQ3Niw0MS45NjU4NzYgQzQxLjIzMjQ2NDMsMzkuNzQ4Njg4NSA0My41MzEwMDY1LDM2LjIyNzk0NzYgNDQuMTcyMTk5LDMyLjE0OTgyNDkgQzQzLjg3NTUxNywzMi4wNTI3ODExIDM5Ljg0MjkyNzcsMzAuNzU2NzM5MSAzNS4xOTA1NDk4LDMxLjUxMzk3NjMgQzM3LjA4MTE2MjUsMzYuNzg4NDgxNiAzNy44NDkzMjUxLDQxLjA4NDAzMDkgMzcuOTk2MDQ3Niw0MS45NjU4NzYgWiBNMzMuMDQyODkxOSwyNi4zMjQ5MTI2IEMzMy4zNzc0MjcxLDI3LjAyMjcyOTggMzMuNzAxMzkyNSwyNy43MzI5NTQxIDM0LjAwMDUxODgsMjguNDQ2NzMyOSBDMzQuMTA2ODc3NywyOC43MDI3ODkyIDM0LjIxMDcyNjMsMjguOTUzODE1NiAzNC4zMTIwNjQ2LDI5LjIwNDc3NDkgQzM5LjI2MzU2ODcsMjguNTcyMjEyNSA0NC4xNDE3NDQ2LDI5LjYzNjQ3NTkgNDQuMzUwMzAwNiwyOS42Nzk5MzQ0IEM0NC4zMTczMzYsMjYuMjExMTAyMyA0My4wOTUwNjcsMjMuMDI3NTAwMSA0MS4wNzI2NjE2LDIwLjUzNTA3NTUgQzQxLjA0NTQ0NDMsMjAuNTc0MzA4OSAzOC43MzM2ODk4LDIzLjk2NTQxMiAzMy4wNDI4OTE5LDI2LjMyNDkxMjYgWiBNMzMuMDQyODkxOSwyNi4zMjQ5MTI2IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPjxwYXRoIGQ9Ik01OS4zMjYyNTc5LDMwIEM1OS4zMjYyNTc5LDQ2LjU2ODU0MzMgNDYuMDk1ODk3Niw2MCAyOS43NzU0MTkzLDYwIEMyMy43MjI1NDA1LDYwIDE4LjA5NDcwNTEsNTguMTUyNTEzNCAxMy40MDkzMjQ0LDU0Ljk4Mjc3NTQgTDQ3LjI2OTU0NTgsNS44MTk0MTEwMyBDNTQuNTgxNDQzOCwxMS4yODA2NTAzIDU5LjMyNjI1NzksMjAuMDc3Nzk3MyA1OS4zMjYyNTc5LDMwIFogTTU5LjMyNjI1NzksMzAiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPjwvc3ZnPgo=); } + &.email { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjIyNDU4MDY4OCwzMCBDMC4yMjQ1ODA2ODgsMTMuNDMxNDU2NyAxMy40NTQ5NDEsMCAyOS43NzU0MTkzLDAgQzQ2LjA5NTg5NzYsMCA1OS4zMjYyNTc5LDEzLjQzMTQ1NjcgNTkuMzI2MjU3OSwzMCBDNTkuMzI2MjU3OSw0Ni41Njg1NDMzIDQ2LjA5NTg5NzYsNjAgMjkuNzc1NDE5Myw2MCBDMTMuNDU0OTQxLDYwIDAuMjI0NTgwNjg4LDQ2LjU2ODU0MzMgMC4yMjQ1ODA2ODgsMzAgWiBNMC4yMjQ1ODA2ODgsMzAiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMzUuMDM4NDMyNCwzMS42Mzg0MDA2IEw0Ny4yMTMxMTQ4LDQwLjU3NjQyNjQgTDQ3LjIxMzExNDgsMjAgTDM1LjAzODQzMjQsMzEuNjM4NDAwNiBaIE0xMy43NzA0OTE4LDIwIEwxMy43NzA0OTE4LDQwLjU3NjQyNjQgTDI1Ljk0NDkxMjksMzEuNjM3MTQ5MSBMMTMuNzcwNDkxOCwyMCBaIE0zMC40OTE4MDMzLDM1Ljk4NDQ4OTEgTDI3LjU4NTEwMzcsMzMuMjA2NTIxNyBMMTMuNzcwNDkxOCw0MiBMNDcuMjEzMTE0OCw0MiBMMzMuMzk4MTc2MiwzMy4yMDY1MjE3IEwzMC40OTE4MDMzLDM1Ljk4NDQ4OTEgWiBNNDYuMjA5ODM2MSwyMCBMMTQuNzczNzcwNSwyMCBMMzAuNDkxODAzMywzMi40NTQ5MzA0IEw0Ni4yMDk4MzYxLDIwIFogTTQ2LjIwOTgzNjEsMjAiIGlkPSJTaGFwZSIgZmlsbD0iIzMzMzMzMyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik01OS4zMjYyNTc5LDMwIEM1OS4zMjYyNTc5LDQ2LjU2ODU0MzMgNDYuMDk1ODk3Niw2MCAyOS43NzU0MTkzLDYwIEMyMy43MjI1NDA1LDYwIDE4LjA5NDcwNTEsNTguMTUyNTEzNCAxMy40MDkzMjQ0LDU0Ljk4Mjc3NTQgTDQ3LjI2OTU0NTgsNS44MTk0MTEwMyBDNTQuNTgxNDQzOCwxMS4yODA2NTAzIDU5LjMyNjI1NzksMjAuMDc3Nzk3MyA1OS4zMjYyNTc5LDMwIFogTTU5LjMyNjI1NzksMzAiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KPC9zdmc+); } + &.facebook { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjExMjI5MDM0NCwzMCBDMC4xMTIyOTAzNDQsMTMuNDMxNDU2NyAxMy4zNDI2NTA2LDAgMjkuNjYzMTI5LDAgQzQ1Ljk4MzYwNzMsMCA1OS4yMTM5Njc2LDEzLjQzMTQ1NjcgNTkuMjEzOTY3NiwzMCBDNTkuMjEzOTY3Niw0Ni41Njg1NDMzIDQ1Ljk4MzYwNzMsNjAgMjkuNjYzMTI5LDYwIEMxMy4zNDI2NTA2LDYwIDAuMTEyMjkwMzQ0LDQ2LjU2ODU0MzMgMC4xMTIyOTAzNDQsMzAgWiBNMC4xMTIyOTAzNDQsMzAiIGZpbGw9IiMzQjU5OTgiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCgk8cGF0aCBkPSJNMzIuMTM0MTQ1Nyw0Ni4zMTk2NzI5IEwzMi4xMzQxNDU3LDI5Ljk5ODA4OTEgTDM2LjU2NTc1NjUsMjkuOTk4MDg5MSBMMzcuMTUzMDQwNiwyNC4zNzM1ODA5IEwzMi4xMzQxNDU3LDI0LjM3MzU4MDkgTDMyLjE0MTY3NSwyMS41NTg0NjA0IEMzMi4xNDE2NzUsMjAuMDkxNTAyIDMyLjI3ODc3MDcsMTkuMzA1NDcyMiAzNC4zNTEyMDYsMTkuMzA1NDcyMiBMMzcuMTIxNjY4NiwxOS4zMDU0NzIyIEwzNy4xMjE2Njg2LDEzLjY4MDMyNzEgTDMyLjY4OTQzMDQsMTMuNjgwMzI3MSBDMjcuMzY1NTk5NSwxMy42ODAzMjcxIDI1LjQ5MTc0OSwxNi40MDg4MTg3IDI1LjQ5MTc0OSwyMC45OTcyODM1IEwyNS40OTE3NDksMjQuMzc0MjE3OSBMMjIuMTczMjE3MywyNC4zNzQyMTc5IEwyMi4xNzMyMTczLDI5Ljk5ODcyNiBMMjUuNDkxNzQ5LDI5Ljk5ODcyNiBMMjUuNDkxNzQ5LDQ2LjMxOTY3MjkgTDMyLjEzNDE0NTcsNDYuMzE5NjcyOSBaIE0zMi4xMzQxNDU3LDQ2LjMxOTY3MjkiIGlkPSJQYXRoIiBmaWxsPSIjRkZGRkZGIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQoJPHBhdGggZD0iTTU5LjIxMzk2NzYsMzAgQzU5LjIxMzk2NzYsNDYuNTY4NTQzMyA0NS45ODM2MDczLDYwIDI5LjY2MzEyOSw2MCBDMjMuNjEwMjUwMiw2MCAxNy45ODI0MTQ3LDU4LjE1MjUxMzQgMTMuMjk3MDM0MSw1NC45ODI3NzU0IEw0Ny4xNTcyNTU0LDUuODE5NDExMDMgQzU0LjQ2OTE1MzQsMTEuMjgwNjUwMyA1OS4yMTM5Njc2LDIwLjA3Nzc5NzMgNTkuMjEzOTY3NiwzMCBaIE01OS4yMTM5Njc2LDMwIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCjwvc3ZnPg==); } + &.flickr { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjMzNjg3MTAzMiwyOS41MDgxOTY3IEMwLjMzNjg3MTAzMiwxMy4yMTEyNjg5IDEzLjU2NzIzMTMsMCAyOS44ODc3MDk3LDAgQzQ2LjIwODE4OCwwIDU5LjQzODU0ODMsMTMuMjExMjY4OSA1OS40Mzg1NDgzLDI5LjUwODE5NjcgQzU5LjQzODU0ODMsNDUuODA1MTI0NiA0Ni4yMDgxODgsNTkuMDE2MzkzNCAyOS44ODc3MDk3LDU5LjAxNjM5MzQgQzEzLjU2NzIzMTMsNTkuMDE2MzkzNCAwLjMzNjg3MTAzMiw0NS44MDUxMjQ2IDAuMzM2ODcxMDMyLDI5LjUwODE5NjcgWiBNMC4zMzY4NzEwMzIsMjkuNTA4MTk2NyIgZmlsbD0iI0ZGMDA4NCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik0yMi40OTk5NzM1LDIzLjYwNjU1NzQgQzE4Ljk2Mzc2MzUsMjMuNjA2NTU3NCAxNi4wOTczMTgzLDI2LjQ2ODgwMTcgMTYuMDk3MzE4MywyOS45OTk5NDcyIEMxNi4wOTczMTgzLDMzLjUzMTE0NTUgMTguOTYzNzYzNSwzNi4zOTMzODk4IDIyLjQ5OTk3MzUsMzYuMzkzNDQyNiBDMjYuMDM2MjM2NSwzNi4zOTM0NDI2IDI4LjkwMjY4MTcsMzMuNTMxMTQ1NSAyOC45MDI2ODE3LDI5Ljk5OTk0NzIgQzI4LjkwMjY4MTcsMjYuNDY4ODAxNyAyNi4wMzYyODk0LDIzLjYwNjUwNDUgMjIuNDk5OTczNSwyMy42MDY1NTc0IFogTTIyLjQ5OTk3MzUsMjMuNjA2NTU3NCIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMzEuODU3NzY1NiwyOS45OTk5NDcyIEMzMS44NTc3NjU2LDMzLjUzMTE0NTUgMzQuNzI0MjEwOCwzNi4zOTM0NDI2IDM4LjI2MDQyMDgsMzYuMzkzNDQyNiBDNDEuNzk2NzM2NiwzNi4zOTM0NDI2IDQ0LjY2MzEyOSwzMy41MzExNDU1IDQ0LjY2MzEyOSwyOS45OTk5NDcyIEM0NC42NjMxMjksMjYuNDY4ODU0NSA0MS43OTY2ODM3LDIzLjYwNjU1NzQgMzguMjYwNDIwOCwyMy42MDY1NTc0IEMzNC43MjQxNTc5LDIzLjYwNjU1NzQgMzEuODU3NzY1NiwyNi40Njg4NTQ1IDMxLjg1Nzc2NTYsMjkuOTk5OTQ3MiBaIE0zMy44MjY0MDAxLDMwIEMzMy44MjY0MDAxLDI3LjU1NTQ2MDggMzUuODA4MDkwNCwyNS41NzM3NzA1IDM4LjI1MjYyOTYsMjUuNTczNzcwNSBDNDAuNjk3MTY4OCwyNS41NzM3NzA1IDQyLjY3ODg1OTEsMjcuNTU1NDYwOCA0Mi42Nzg4NTkxLDMwIEM0Mi42Nzg4NTkxLDMyLjQ0NDUzOTIgNDAuNjk3MTY4OCwzNC40MjYyMjk1IDM4LjI1MjYyOTYsMzQuNDI2MjI5NSBDMzUuODA4MDkwNCwzNC40MjYyMjk1IDMzLjgyNjQwMDEsMzIuNDQ0NTM5MiAzMy44MjY0MDAxLDMwIFogTTMzLjgyNjQwMDEsMzAiIGlkPSJQYXRoIiBmaWxsPSIjRkZGRkZGIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQogICAgPHBhdGggZD0iTTU5LjIxMzk2NzYsMjkuNjg1ODI1MiBDNTkuMjEzOTY3Niw0NS45ODI3NTMxIDQ1Ljk4MzYwNzMsNTkuMTk0MDIxOSAyOS42NjMxMjksNTkuMTk0MDIxOSBDMjMuNjEwMjUwMiw1OS4xOTQwMjE5IDE3Ljk4MjQxNDcsNTcuMzc2ODIyIDEzLjI5NzAzNDEsNTQuMjU5MDQ2OSBMNDcuMTU3MjU1NCw1LjkwMTYzOTM0IEM1NC40NjkxNTM0LDExLjI3MzM1MDEgNTkuMjEzOTY3NiwxOS45MjYyODE2IDU5LjIxMzk2NzYsMjkuNjg1ODI1MiBaIE01OS4yMTM5Njc2LDI5LjY4NTgyNTIiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KPC9zdmc+); } + &.github { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjMzNjg3MTAzMiwzMCBDMC4zMzY4NzEwMzIsMTMuNDMxNDU2NyAxMy41NjcyMzEzLDAgMjkuODg3NzA5NywwIEM0Ni4yMDgxODgsMCA1OS40Mzg1NDgzLDEzLjQzMTQ1NjcgNTkuNDM4NTQ4MywzMCBDNTkuNDM4NTQ4Myw0Ni41Njg1NDMzIDQ2LjIwODE4OCw2MCAyOS44ODc3MDk3LDYwIEMxMy41NjcyMzEzLDYwIDAuMzM2ODcxMDMyLDQ2LjU2ODU0MzMgMC4zMzY4NzEwMzIsMzAgWiBNMC4zMzY4NzEwMzIsMzAiIGlkPSJHaXRodWIiIGZpbGw9IiMzMzMzMzMiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMTguMjE4NDI0NSwzMS45MzU1NTY2IEMxOS42MDY4NTA2LDM0LjQ1MDc5MDIgMjIuMjg0NTI5NSwzNi4wMTU2NzY0IDI2LjgwMDcyODcsMzYuNDQ4NTE3MyBDMjYuMTU2MTAyMywzNi45MzY1MzM1IDI1LjM4MTc4NzcsMzcuODYzMDk4NCAyNS4yNzQ5ODU3LDM4LjkzNDI2MDcgQzI0LjQ2NDQzNDgsMzkuNDU3NDc0OSAyMi44MzQ3NTA2LDM5LjYyOTY2IDIxLjU2NzQzMDMsMzkuMjMxMDY1OSBDMTkuNzkxODQ2OSwzOC42NzE3MDIzIDE5LjExMTkzNzcsMzUuMTY0MjY0MiAxNi40NTMzMzA2LDM1LjY2MzY5NTkgQzE1Ljg3NzM2MjYsMzUuNzcyMTQ0IDE1Ljk5MTc5MzMsMzYuMTUwNzYwOSAxNi40ODk1NjcsMzYuNDcyMjk5OCBDMTcuMzAwMTE3OSwzNi45OTU1MTQxIDE4LjA2Mjk4OTQsMzcuNjUwMDA3NSAxOC42NTEzNTQxLDM5LjA0MzY2IEMxOS4xMDMzNTU0LDQwLjExMzg3MSAyMC4wNTMxMzA0LDQyLjAyNTk4MTMgMjMuMDU2OTM2OSw0Mi4wMjU5ODEzIEMyNC4yNDg5MjM2LDQyLjAyNTk4MTMgMjUuMDg0MjY3OSw0MS44ODMyODY1IDI1LjA4NDI2NzksNDEuODgzMjg2NSBDMjUuMDg0MjY3OSw0MS44ODMyODY1IDI1LjEwNzE1NCw0NC42MTQ0NjQ5IDI1LjEwNzE1NCw0NS42NzYxMTQyIEMyNS4xMDcxNTQsNDYuOTAwNDM1NSAyMy40NTA3NjkzLDQ3LjI0NTc1NjkgMjMuNDUwNzY5Myw0Ny44MzQ2MTA4IEMyMy40NTA3NjkzLDQ4LjA2NzY3OSAyMy45OTkwODMyLDQ4LjA4OTU1ODggMjQuNDM5NjQxNSw0OC4wODk1NTg4IEMyNS4zMTAyNjg1LDQ4LjA4OTU1ODggMjcuMTIyMDg4Myw0Ny4zNjQ2NjkzIDI3LjEyMjA4ODMsNDYuMDkxODMxNyBDMjcuMTIyMDg4Myw0NS4wODA2MDEyIDI3LjEzODI5OTMsNDEuNjgwNjU5OSAyNy4xMzgyOTkzLDQxLjA4NjA5ODIgQzI3LjEzODI5OTMsMzkuNzg1NjczIDI3LjgzNzI4MDMsMzkuMzczNzYwNyAyNy44MzcyODAzLDM5LjM3Mzc2MDcgQzI3LjgzNzI4MDMsMzkuMzczNzYwNyAyNy45MjQwNTcsNDYuMzE1Mzg2OSAyNy42NzA0MDIyLDQ3LjI0NTc1NjkgQzI3LjM3Mjg4MjMsNDguMzM5NzUwNCAyNi44MzYwMTE1LDQ4LjE4NDY4ODcgMjYuODM2MDExNSw0OC42NzI3MDQ5IEMyNi44MzYwMTE1LDQ5LjM5ODU0NTggMjkuMDE2ODcwNCw0OC44NTA1OTc4IDI5LjczOTY5MTEsNDcuMjU3MTcyNSBDMzAuMjk4NDk0NSw0Ni4wMTY2NzkxIDMwLjA1NDM3NTYsMzkuMjA3MjgzNCAzMC4wNTQzNzU2LDM5LjIwNzI4MzQgTDMwLjY1MDM2OSwzOS4xOTQ5MTY1IEMzMC42NTAzNjksMzkuMTk0OTE2NSAzMC42ODM3NDQ2LDQyLjMxMjMyMjIgMzAuNjYzNzE5Miw0My43MzczNjc1IEMzMC42NDI3NDAyLDQ1LjIxMjgzMTcgMzAuNTQyNjEzNCw0Ny4wNzkyNzk3IDMxLjQyMDg2OTIsNDcuOTU5MjMwOSBDMzEuOTk3NzkwNyw0OC41Mzc2MjA1IDMzLjg2ODczMyw0OS41NTI2NTYyIDMzLjg2ODczMyw0OC42MjUxNCBDMzMuODY4NzMzLDQ4LjA4NTc1MzYgMzIuODQzNjI0NSw0Ny42NDI0NDg1IDMyLjg0MzYyNDUsNDYuMTgzMTU2NCBMMzIuODQzNjI0NSwzOS40Njg4OTA1IEMzMy42NjE4MDQyLDM5LjQ2ODg5MDUgMzMuNTM4NzkxMSw0MS42NzY4NTQ3IDMzLjUzODc5MTEsNDEuNjc2ODU0NyBMMzMuNTk4ODY3Myw0NS43Nzg4NTQ0IEMzMy41OTg4NjczLDQ1Ljc3ODg1NDQgMzMuNDE4NjM4OSw0Ny4yNzMzNDQ2IDM1LjIxOTAxNTYsNDcuODk5Mjk5MSBDMzUuODU0MTA2MSw0OC4xMjA5NTE3IDM3LjIxMzkyNDUsNDguMTgwODgzNSAzNy4yNzc4MTUsNDcuODA4OTI1NyBDMzcuMzQxNzA1NSw0Ny40MzYwMTY3IDM1LjY0MDUwMjEsNDYuODgxNDA5NiAzNS42MjUyNDQ2LDQ1LjcyMzY3OTEgQzM1LjYxNTcwODgsNDUuMDE3ODE1NSAzNS42NTY3MTMxLDQ0LjYwNTkwMzIgMzUuNjU2NzEzMSw0MS41Mzc5NjUxIEMzNS42NTY3MTMxLDM4LjQ3MDAyNyAzNS4yNDM4MDg5LDM3LjMzNjA3OSAzMy44MDQ4NDI2LDM2LjQzMjM0NTMgQzM4LjI0NTcwODIsMzUuOTc2NjczMiA0MC45OTM5NTI3LDM0Ljg4MDY4MiA0Mi4zMzM3NDU4LDMxLjk0NTA2OTUgQzQyLjQzODM2MTksMzEuOTQ4NDk2NiA0Mi44NzkxNDkxLDMwLjU3Mzc3NDIgNDIuODIxOTgzNSwzMC41NzQyNDgyIEM0My4xMjIzNjQyLDI5LjQ2NTk4NTMgNDMuMjg0NDc0NCwyOC4xNTUwOTU3IDQzLjMxNjg5NjQsMjYuNjAyNTc2NCBDNDMuMzA5MjY3NywyMi4zOTMwNzk5IDQxLjI4OTU2NTQsMjAuOTA0Mjk3NSA0MC45MDE0NTQ2LDIwLjIwNTA5MyBDNDEuNDczNjA4MiwxNy4wMTgyNDI1IDQwLjgwNjA5NTYsMTUuNTY3NTEyMSA0MC40OTYxNzkxLDE1LjA2OTk4MjkgQzM5LjM1MTg3MTksMTQuNjYzNzc4NCAzNi41MTQ5NDM1LDE2LjExNDUwODggMzQuOTY1MzYwOCwxNy4xMzcxNTQ4IEMzMi40MzgzNDksMTYuMzk5ODk4NCAyNy4wOTgyNDg2LDE2LjQ3MTI0NTggMjUuMDk1NzEwOSwxNy4zMjc0MTQ2IEMyMS40MDA1NTIyLDE0LjY4NzU2MDggMTkuNDQ1Njk0LDE1LjA5MTg2MjggMTkuNDQ1Njk0LDE1LjA5MTg2MjggQzE5LjQ0NTY5NCwxNS4wOTE4NjI4IDE4LjE4MjE4ODEsMTcuMzUxMTk3IDE5LjExMTkzNzcsMjAuNjU2OTU5OCBDMTcuODk2MTExMywyMi4yMDI4MjAxIDE2Ljk5MDIwMTQsMjMuMjk2ODEzNiAxNi45OTAyMDE0LDI2LjE5NjM3MTggQzE2Ljk5MDIwMTQsMjcuODI5NzUxNiAxNy4xODI4MjY0LDI5LjI5MTg5NzYgMTcuNjE3NjYzMiwzMC41Njg1NDA0IEMxNy41NjQzNTc3LDMwLjU2ODQwOTMgMTguMjAwODQ5MywzMS45MzU5Nzc3IDE4LjIxODQyNDUsMzEuOTM1NTU2NiBaIE0xOC4yMTg0MjQ1LDMxLjkzNTU1NjYiIGlkPSJQYXRoIiBmaWxsPSIjRkZGRkZGIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQogICAgPHBhdGggZD0iTTU5LjQzODU0ODMsMzAgQzU5LjQzODU0ODMsNDYuNTY4NTQzMyA0Ni4yMDgxODgsNjAgMjkuODg3NzA5Nyw2MCBDMjMuODM0ODMwOCw2MCAxOC4yMDY5OTU0LDU4LjE1MjUxMzQgMTMuNTIxNjE0OCw1NC45ODI3NzU0IEw0Ny4zODE4MzYxLDUuODE5NDExMDMgQzU0LjY5MzczNDEsMTEuMjgwNjUwMyA1OS40Mzg1NDgzLDIwLjA3Nzc5NzMgNTkuNDM4NTQ4MywzMCBaIE01OS40Mzg1NDgzLDMwIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCjwvc3ZnPg==); } + &.instagram { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjc4NjAzMjQwOCwzMCBDMC43ODYwMzI0MDgsMTMuNDMxNDU2NyAxNC4wMTYzOTI3LDAgMzAuMzM2ODcxLDAgQzQ2LjY1NzM0OTQsMCA1OS44ODc3MDk3LDEzLjQzMTQ1NjcgNTkuODg3NzA5NywzMCBDNTkuODg3NzA5Nyw0Ni41Njg1NDMzIDQ2LjY1NzM0OTQsNjAgMzAuMzM2ODcxLDYwIEMxNC4wMTYzOTI3LDYwIDAuNzg2MDMyNDA4LDQ2LjU2ODU0MzMgMC43ODYwMzI0MDgsMzAgWiBNMC43ODYwMzI0MDgsMzAiIGZpbGw9IiM1MTdGQTQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNNDIuODI2OTIzMSw0NS4xNzE3OTE3IEM0NC4wNTQxMDkzLDQ0LjkwNzM3NzcgNDUuMDU2ODgzNCw0My44NjgwMTY5IDQ1LjI5Njc0MjYsNDIuNjE0NzcyNyBDNDUuMzIyNDg3Nyw0Mi40NzkyOTg2IDQ1LjM0MTM2NzUsNDIuMzQxNjQ2NCA0NS4zNjMyNTA5LDQyLjIwNTczNjcgTDQ1LjM2MzI1MDksMTcuNzk0MjYzMyBDNDUuMzQyMjI1NywxNy42NjA1MzE2IDQ1LjMyNDIwNDEsMTcuNTI2MzY0MyA0NS4yOTg0NTg5LDE3LjM5MzA2ODMgQzQ1LjAzNTQyOTEsMTYuMDI1Njk0NyA0My45MjQ1MjUzLDE0Ljk2NDU1MzYgNDIuNTYwNDYwNiwxNC43NzUwNjQxIEM0Mi41MDM4MjEzLDE0Ljc2NzY1ODggNDIuNDQ4NDY5MiwxNC43NTUwMjYxIDQyLjM5MjY4OCwxNC43NDUwMDcxIEwxOC4yODEwNTQxLDE0Ljc0NTAwNzEgQzE4LjEzNTU5MzksMTQuNzcxNTc5MiAxNy45ODkyNzU1LDE0Ljc5MTYxNzIgMTcuODQ1OTYwOCwxNC44MjQ3MjM0IEMxNi41MTQ1MDY3LDE1LjEzMjY5ODMgMTUuNTI5MzI1MSwxNi4yMjEyODI3IDE1LjMzOTY2OSwxNy41OTA4MzQzIEMxNS4zMzE5NDU1LDE3LjY0Nzg5OSAxNS4zMjAzNjAxLDE3LjcwNDUyOCAxNS4zMTA0OTEyLDE3Ljc2MTU5MjcgTDE1LjMxMDQ5MTIsNDIuMjM5NzE0MSBDMTUuMzM3OTUyNyw0Mi4zOTQ3OTA2IDE1LjM1OTgzNjEsNDIuNTUxMTczOSAxNS4zOTQxNjMsNDIuNzA1Mzc5MSBDMTUuNjg4NTE2LDQ0LjAyNzAxMzkgMTYuNzk5ODQ4OSw0NS4wNTE1NjM5IDE4LjEyMTg2MzEsNDUuMjI0MDY0NyBDMTguMTg1Nzk3LDQ1LjIzMTkwNTYgMTguMjUwMTU5OSw0NS4yNDQ1MzgzIDE4LjMxNDA5MzcsNDUuMjU0OTkyOSBMNDIuMzU5NjQ4NCw0NS4yNTQ5OTI5IEM0Mi41MTU4MzU3LDQ1LjIyNzk4NTIgNDIuNjcyNDUyMSw0NS4yMDU3NjkyIDQyLjgyNjkyMzEsNDUuMTcxNzkxNyBaIE0xOC41NjE2NzY0LDI3LjE5ODE2OTIgQzE4LjU2MTY3NjQsMzEuNzEzMjQ2MyAxOC41NjEyNDczLDM2LjIyODMyMzUgMTguNTYyMTA1NSw0MC43NDM0MDA2IEMxOC41NjIxMDU1LDQxLjM5Mjg5MjIgMTkuMTE2MDU1Niw0MS45NTEzNDE2IDE5Ljc1NTgyMjksNDEuOTUxMzQxNiBDMjYuODA4MjgxNyw0MS45NTE3NzcyIDMzLjg2MDMxMTQsNDEuOTUxNzc3MiA0MC45MTI3NzAxLDQxLjk1MTM0MTYgQzQxLjU1ODU0NDcsNDEuOTUxMzQxNiA0Mi4xMDk0OTEyLDQxLjM5Mzc2MzQgNDIuMTA5NDkxMiw0MC43Mzk0ODAxIEM0Mi4xMDk5MjAzLDM2LjIyOTYzMDMgNDIuMTA5NDkxMiwzMS43MjAyMTYxIDQyLjEwOTQ5MTIsMjcuMjEwODAxOCBMNDIuMTA5NDkxMiwyNy4xMTcxNDYxIEwzOS4yNDA2MjE3LDI3LjExNzE0NjEgQzM5LjY0NTY3ODksMjguNDMxMzc1NSAzOS43NzAxMTM5LDI5Ljc2ODI1NjUgMzkuNjExMzUyLDMxLjEzMDgzODQgQzM5LjQ1MTczMiwzMi40OTM4NTU5IDM5LjAxOTIxMzMsMzMuNzYyMzQ2NSAzOC4zMTQ2NTM5LDM0LjkzMzY5NjQgQzM3LjYwOTY2NTUsMzYuMTA2MzUzMiAzNi42OTU3MTIxLDM3LjA3Nzc1OTEgMzUuNTc2NjU1NywzNy44NTA5NjMzIEMzMi42NzYwMzM4LDM5Ljg1NjUwMjcgMjguODU3MTY3Nyw0MC4wMzI5MjM5IDI1Ljc3OTMzMzMsMzguMjc5MTY2IEMyNC4yMjM0NjcyLDM3LjM5MzU3NDkgMjMuMDAxODU5MSwzNi4xNTg2MjYyIDIyLjE1MDEyMzIsMzQuNTY3MzUwMSBDMjAuODc5NTk5NCwzMi4xOTI4NTA4IDIwLjY3NjY0MTYsMjkuNzAwNzM3MyAyMS40MjE5NjQyLDI3LjExNDk2ODEgQzIwLjQ3MDI1MTIsMjcuMTE1ODM5MyAxOS41MjI0MDAxLDI3LjExNTgzOTMgMTguNTYxNjc2NCwyNy4xMTU4MzkzIEwxOC41NjE2NzY0LDI3LjE5ODE2OTIgWiBNMjQuMjQ3NDk2LDI5LjkwNjM0NDMgQzI0LjE5OTQzODMsMzMuMzY1NTA3NiAyNi45MjcxMzg1LDM2LjEwNzY2IDMwLjE5NzIwMzUsMzYuMTc5MDk5OCBDMzMuNTk5ODU2MSwzNi4yNTMxNTMxIDM2LjM1MjAxNDIsMzMuNDkzMTQwNyAzNi40MjM2NzE2LDMwLjEzNjM0NTMgQzM2LjQ5NzA0NTMsMjYuNjc0NTY4NCAzMy43NDY2MDM1LDIzLjgxNTIzNzMgMzAuMzM3MDg1NiwyMy44MTc0MTU0IEMyNy4wMDM5NDQ5LDIzLjgxNTIzNzMgMjQuMjk0MjY2NCwyNi41Mzc3ODc1IDI0LjI0NzQ5NiwyOS45MDYzNDQzIFogTTQwLjk1NDM5MTUsMjIuNTY5ODM0IEM0MS41OTA3MjYxLDIyLjU1MzcxNjUgNDIuMTA5MDYyMSwyMi4wMDAwNTg3IDQyLjEwOTA2MjEsMjEuMzUzMTgwOCBDNDIuMTA5NDkxMiwyMC4zOTAwNTE1IDQyLjEwOTQ5MTIsMTkuNDI2NDg2NSA0Mi4xMDkwNjIxLDE4LjQ2MzM1NzIgQzQyLjEwOTA2MjEsMTcuNzcyNDgyOSA0MS41NzA1NTkxLDE3LjIyMjc0NTYgNDAuODkwODg2NywxNy4yMjIzMDk5IEMzOS45NDQ3NTE5LDE3LjIyMTg3NDMgMzguOTk4NjE3MSwxNy4yMjE0Mzg3IDM4LjA1MjA1MzIsMTcuMjIyMzA5OSBDMzcuMzc0MDk3MiwxNy4yMjMxODEyIDM2LjgzMzg3NzksMTcuNzc0MjI1MyAzNi44MzM0NDg4LDE4LjQ2NTA5OTYgQzM2LjgzMzAxOTcsMTkuNDE5OTUyNCAzNi44MzA0NDUyLDIwLjM3NDgwNTIgMzYuODM2ODgxNSwyMS4zMzAwOTM2IEMzNi44Mzc3Mzk2LDIxLjQ3MjUzNzQgMzYuODY0MzQzLDIxLjYyMDY0NDEgMzYuOTA4OTY3OSwyMS43NTU2ODI2IEMzNy4wNzg4ODYsMjIuMjY0MDM3MiAzNy41Mzc1NzksMjIuNTc1OTMyNSAzOC4wOTkyNTI3LDIyLjU3ODU0NjIgQzM4LjU1NTgwMDMsMjIuNTc5NDE3NCAzOS4wMTIzNDc5LDIyLjU3ODExMDYgMzkuNDY5MzI0NSwyMi41NzgxMTA2IEMzOS45NjM2MzE3LDIyLjU3MjQ0NzcgNDAuNDU5NjU1MiwyMi41ODIwMzEgNDAuOTU0MzkxNSwyMi41Njk4MzQgWiBNNDAuOTU0MzkxNSwyMi41Njk4MzQiIGlkPSJQYXRoIiBmaWxsPSIjRkZGRkZGIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQogICAgPHBhdGggZD0iTTU5Ljg4NzcwOTcsMzAgQzU5Ljg4NzcwOTcsNDYuNTY4NTQzMyA0Ni42NTczNDk0LDYwIDMwLjMzNjg3MSw2MCBDMjQuMjgzOTkyMiw2MCAxOC42NTYxNTY4LDU4LjE1MjUxMzQgMTMuOTcwNzc2MSw1NC45ODI3NzU0IEw0Ny44MzA5OTc1LDUuODE5NDExMDMgQzU1LjE0Mjg5NTUsMTEuMjgwNjUwMyA1OS44ODc3MDk3LDIwLjA3Nzc5NzMgNTkuODg3NzA5NywzMCBaIE01OS44ODc3MDk3LDMwIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCjwvc3ZnPg==); } + &.linkedin { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjQ0OTE2MTM3NiwzMCBDMC40NDkxNjEzNzYsMTMuNDMxNDU2NyAxMy42Nzk1MjE3LDAgMzAsMCBDNDYuMzIwNDc4MywwIDU5LjU1MDgzODYsMTMuNDMxNDU2NyA1OS41NTA4Mzg2LDMwIEM1OS41NTA4Mzg2LDQ2LjU2ODU0MzMgNDYuMzIwNDc4Myw2MCAzMCw2MCBDMTMuNjc5NTIxNyw2MCAwLjQ0OTE2MTM3Niw0Ni41Njg1NDMzIDAuNDQ5MTYxMzc2LDMwIFogTTAuNDQ5MTYxMzc2LDMwIiBmaWxsPSIjMDA3QkI2IiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQogICAgPHBhdGggZD0iTTIyLjQ2ODAzOTIsMjMuNzA5ODE0NCBMMTUuNzgwODM2NiwyMy43MDk4MTQ0IEwxNS43ODA4MzY2LDQ0LjEzNjk1MzcgTDIyLjQ2ODAzOTIsNDQuMTM2OTUzNyBMMjIuNDY4MDM5MiwyMy43MDk4MTQ0IFogTTIyLjQ2ODAzOTIsMjMuNzA5ODE0NCIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMjIuOTA4NDc1MywxNy4zOTA4NzYxIEMyMi44NjUwNzI3LDE1LjM4ODAwODEgMjEuNDU2MjkxNywxMy44NjI1MDQgMTkuMTY4NjQxOCwxMy44NjI1MDQgQzE2Ljg4MDk5MTgsMTMuODYyNTA0IDE1LjM4NTQwNTcsMTUuMzg4MDA4MSAxNS4zODU0MDU3LDE3LjM5MDg3NjEgQzE1LjM4NTQwNTcsMTkuMzUyMjU3OSAxNi44MzY3ODgsMjAuOTIxNjg4NiAxOS4wODE4MzY2LDIwLjkyMTY4ODYgTDE5LjEyNDU3MTQsMjAuOTIxNjg4NiBDMjEuNDU2MjkxNywyMC45MjE2ODg2IDIyLjkwODQ3NTMsMTkuMzUyMjU3OSAyMi45MDg0NzUzLDE3LjM5MDg3NjEgWiBNMjIuOTA4NDc1MywxNy4zOTA4NzYxIiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik00Ni41ODQ2NTAyLDMyLjQyNDY1NjMgQzQ2LjU4NDY1MDIsMjYuMTUwMzIyNiA0My4yODU2NTM0LDIzLjIzMDE0NTYgMzguODg1MTY1OCwyMy4yMzAxNDU2IEMzNS4zMzQ3MDExLDIzLjIzMDE0NTYgMzMuNzQ1MDk4MywyNS4yMTI4MTI4IDMyLjg1NzU0ODksMjYuNjAzNjg5NiBMMzIuODU3NTQ4OSwyMy43MTAzNTY3IEwyNi4xNjk1NDQ5LDIzLjcxMDM1NjcgQzI2LjI1NzY4NTYsMjUuNjI3MTMzOCAyNi4xNjk1NDQ5LDQ0LjEzNzQ5NiAyNi4xNjk1NDQ5LDQ0LjEzNzQ5NiBMMzIuODU3NTQ4OSw0NC4xMzc0OTYgTDMyLjg1NzU0ODksMzIuNzI5Mjk2MSBDMzIuODU3NTQ4OSwzMi4xMTg3OTYzIDMyLjkwMDk1MTQsMzEuNTA5Nzg3NyAzMy4wNzc3NjY5LDMxLjA3MjY4OTggQzMzLjU2MTA3MTMsMjkuODUzMDQ1OCAzNC42NjE0OTM3LDI4LjU5MDI4ODUgMzYuNTA4OTc0NywyOC41OTAyODg1IEMzOC45Mjk3NzAzLDI4LjU5MDI4ODUgMzkuODk3NDQ3NiwzMC40NjM0MTAxIDM5Ljg5NzQ0NzYsMzMuMjA4NDIyNiBMMzkuODk3NDQ3Niw0NC4xMzY5NTM3IEw0Ni41ODQzODMyLDQ0LjEzNjk1MzcgTDQ2LjU4NDY1MDIsMzIuNDI0NjU2MyBaIE00Ni41ODQ2NTAyLDMyLjQyNDY1NjMiIGlkPSJQYXRoIiBmaWxsPSIjRkZGRkZGIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQogICAgPHBhdGggZD0iTTU5LjU1MDgzODYsMzAgQzU5LjU1MDgzODYsNDYuNTY4NTQzMyA0Ni4zMjA0NzgzLDYwIDMwLDYwIEMyMy45NDcxMjEyLDYwIDE4LjMxOTI4NTgsNTguMTUyNTEzNCAxMy42MzM5MDUxLDU0Ljk4Mjc3NTQgTDQ3LjQ5NDEyNjQsNS44MTk0MTEwMyBDNTQuODA2MDI0NSwxMS4yODA2NTAzIDU5LjU1MDgzODYsMjAuMDc3Nzk3MyA1OS41NTA4Mzg2LDMwIFogTTU5LjU1MDgzODYsMzAiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KPC9zdmc+); } + &.pinterest { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjg4MzgzMzY3NSwzMCBDMC44ODM4MzM2NzUsMTMuNDMxNDU2NyAxMy45MDA4MDExLDAgMjkuOTU4MDQ1OSwwIEM0Ni4wMTUyOTA3LDAgNTkuMDMyMjU4MSwxMy40MzE0NTY3IDU5LjAzMjI1ODEsMzAgQzU5LjAzMjI1ODEsNDYuNTY4NTQzMyA0Ni4wMTUyOTA3LDYwIDI5Ljk1ODA0NTksNjAgQzEzLjkwMDgwMTEsNjAgMC44ODM4MzM2NzUsNDYuNTY4NTQzMyAwLjg4MzgzMzY3NSwzMCBaIE0wLjg4MzgzMzY3NSwzMCIgZmlsbD0iI0NCMjAyNyIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik0xNy41ODY5MTY1LDI1LjY1NjQ4OTQgQzE3LjU4NjkxNjUsMjguOTU5MDYxOCAxOC43OTg2ODUxLDMxLjg5NzE2OTggMjEuMzk3Njk0MSwzMi45OTIwNTU5IEMyMS44MjM4Njk2LDMzLjE3MTgzNTYgMjIuMjA1NjA4NywzMi45OTgyNDA1IDIyLjMyOTIwMzcsMzIuNTExMzYzOCBDMjIuNDE1MTgyOSwzMi4xNzQ0MTAxIDIyLjYxODU1NjYsMzEuMzI0MzQ4NSAyMi43MDkyODk0LDMwLjk3MDMzMzkgQzIyLjgzMzkxNzksMzAuNDg4Nzg4OCAyMi43ODU1NTQ2LDMwLjMxOTg4NTQgMjIuNDQxNjM4LDI5LjkwMDE4NjIgQzIxLjY5MjIxNCwyOC45ODgwNjU0IDIxLjIxMzMzNSwyNy44MDcyMzQ4IDIxLjIxMzMzNSwyNi4xMzQ2MjI0IEMyMS4yMTMzMzUsMjEuMjgyMDYzMSAyNC43MzE4NjYyLDE2LjkzNzkyIDMwLjM3NTQ4NzcsMTYuOTM3OTIgQzM1LjM3MjgxODgsMTYuOTM3OTIgMzguMTE4MzY0NCwyMC4wODg2NSAzOC4xMTgzNjQ0LDI0LjI5NjUxODggQzM4LjExODM2NDQsMjkuODMzMDA4NyAzNS43NDM4MTA2LDM0LjUwNTc4ODIgMzIuMjE4NjY1NiwzNC41MDU3ODgyIEMzMC4yNzE5NDA3LDM0LjUwNTc4ODIgMjguODE0NjM1NSwzMi44NDQ0Nzg3IDI5LjI4MTczMzcsMzAuODA2OTc1NCBDMjkuODQxMDExNSwyOC4zNzQ1MTEyIDMwLjkyNDQzMTQsMjUuNzQ5MjU4MyAzMC45MjQ0MzE0LDIzLjk5MzQ3MzggQzMwLjkyNDQzMTQsMjIuNDIxNzM0MiAzMC4xMDY4MDI4LDIxLjExMDgxMzkgMjguNDE0NzA4NCwyMS4xMTA4MTM5IEMyNi40MjQ1ODA2LDIxLjExMDgxMzkgMjQuODI1OTA1OCwyMy4yMzUxMTQ4IDI0LjgyNTkwNTgsMjYuMDgwODgwNCBDMjQuODI1OTA1OCwyNy44OTMzOTI1IDI1LjQxOTQ5MjYsMjkuMTE5MjIxNCAyNS40MTk0OTI2LDI5LjExOTIyMTQgQzI1LjQxOTQ5MjYsMjkuMTE5MjIxNCAyMy4zODI4NjE2LDM4LjAyMzExNTMgMjMuMDI1OTI0MiwzOS41ODI0ODU2IEMyMi4zMTQ5NDI4LDQyLjY4ODAwNDEgMjIuOTE5MDcwMyw0Ni40OTQ5NDA3IDIyLjk3MDEyMDQsNDYuODc5NDUxOCBDMjMuMDAwMDg5MSw0Ny4xMDcyMTU0IDIzLjI4Mzg2MTYsNDcuMTYxMzgzOSAyMy40MTI0MTcsNDYuOTg5MjgxNiBDMjMuNTk1OTQ5NCw0Ni43NDIxMTEyIDI1Ljk2NjE2MjksNDMuNzIyNzUwNCAyNi43NzIwMTA3LDQwLjcwNTczNTYgQzI2Ljk5OTk3OTUsMzkuODUxNDA4OCAyOC4wODA5MTkyLDM1LjQyNzcxOSAyOC4wODA5MTkyLDM1LjQyNzcxOSBDMjguNzI3NDE2MiwzNi43MDAyNTIzIDMwLjYxNzA5NzMsMzcuODIxMTU2NCAzMi42MjY2NTMyLDM3LjgyMTE1NjQgQzM4LjYwODgxNzYsMzcuODIxMTU2NCA0Mi42Njc0MDUyLDMyLjE5MzgxNjkgNDIuNjY3NDA1MiwyNC42NjE0MDk4IEM0Mi42Njc0MDUyLDE4Ljk2NTgyNjYgMzcuOTkyMDgyNSwxMy42NjEzNjU2IDMwLjg4NjE5NTUsMTMuNjYxMzY1NiBDMjIuMDQ0ODExMiwxMy42NjEzNjU2IDE3LjU4NjkxNjUsMjAuMjAyMTA1MyAxNy41ODY5MTY1LDI1LjY1NjQ4OTQgWiBNMTcuNTg2OTE2NSwyNS42NTY0ODk0IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik01OS4wMzIyNTgxLDMwIEM1OS4wMzIyNTgxLDQ2LjU2ODU0MzMgNDYuMDE1MjkwNyw2MCAyOS45NTgwNDU5LDYwIEMyNC4wMDI3OTQxLDYwIDE4LjQ2NTczMDIsNTguMTUyNTEzNCAxMy44NTU5MjAzLDU0Ljk4Mjc3NTQgTDQ3LjE3MDAwOSw1LjgxOTQxMTAzIEM1NC4zNjM5NzMyLDExLjI4MDY1MDMgNTkuMDMyMjU4MSwyMC4wNzc3OTczIDU5LjAzMjI1ODEsMzAgWiBNNTkuMDMyMjU4MSwzMCIgaWQ9InJlZmxlYyIgZmlsbC1vcGFjaXR5PSIwLjA4IiBmaWxsPSIjMDAwMDAwIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQo8L3N2Zz4=); } + &.rss { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLjExMjI5MDM0NCwzMCBDMC4xMTIyOTAzNDQsMTMuNDMxNDU2NyAxMy4zNDI2NTA2LDAgMjkuNjYzMTI5LDAgQzQ1Ljk4MzYwNzMsMCA1OS4yMTM5Njc2LDEzLjQzMTQ1NjcgNTkuMjEzOTY3NiwzMCBDNTkuMjEzOTY3Niw0Ni41Njg1NDMzIDQ1Ljk4MzYwNzMsNjAgMjkuNjYzMTI5LDYwIEMxMy4zNDI2NTA2LDYwIDAuMTEyMjkwMzQ0LDQ2LjU2ODU0MzMgMC4xMTIyOTAzNDQsMzAgWiBNMC4xMTIyOTAzNDQsMzAiIGZpbGw9IiNFMThGMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMjYuNTE0Nzc1NSwzOC43NTcxMjk2IEMyNi41MTQ3NzU1LDM2LjgxOTI5MzQgMjQuOTU3NTAyMSwzNS4yMjkxNjU2IDIzLjAyOTcwNDcsMzUuMjI5MTY1NiBDMjEuMTA5NDMzMSwzNS4yMjkxNjU2IDE5LjU0OTI3NzUsMzYuODE5MjkzNCAxOS41NDkyNzc1LDM4Ljc1NzEyOTYgQzE5LjU0OTI3NzUsNDAuNzA1MjA2OCAyMS4xMDk0MzMxLDQyLjI3NzYxNiAyMy4wMjk3MDQ3LDQyLjI3NzYxNiBDMjQuOTU3NDIyLDQyLjI3NzYxNiAyNi41MTQ2OTU0LDQwLjcwNTI4ODEgMjYuNTE0Nzc1NSwzOC43NTcxMjk2IFogTTM2LjgwNzU0MzMsNDIuMjcwMDU3MSBDMzYuODA3NTQzMywzMi42MDU1ODQ3IDI5LjA2MjY0OCwyNC43NDQyNzA1IDE5LjU0OTI3NzUsMjQuNzQ0MjcwNSBMMTkuNTQ5Mjc3NSwyOS44MzE4MDE3IEMyMi44MTI4OTg2LDI5LjgzMTgwMTcgMjUuODgxNzMwMywzMS4xMjcyMTQ1IDI4LjE5MjA2MDksMzMuNDc0MDQyOSBDMzAuNDk5OTg5NSwzNS44MTU5MTMzIDMxLjc3MzI4NTMsMzguOTQ1NDUxMyAzMS43NzMyODUzLDQyLjI3MDEzODQgTDM2LjgwNzU0MzMsNDIuMjcwMDU3MSBaIE00NS42ODcxNDgyLDQyLjI2NzUzNzUgQzQ1LjY4NzE0ODIsMjcuNjM0Njg3OCAzMy45NjA0MDE0LDE1LjcyMjM4NCAxOS41NDkyNzc1LDE1LjcyMjM4NCBMMTkuNTQ5Mjc3NSwyMC44MTIzNTM1IEMzMS4xODY5MTYsMjAuODEyMzUzNSA0MC42NjA0OTYsMzAuNDM4ODY5IDQwLjY2MDQ5Niw0Mi4yNjczNzQ5IEw0NS42ODcxNDgyLDQyLjI2NzUzNzUgWiBNNDUuNjg3MTQ4Miw0Mi4yNjc1Mzc1IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik01OS4yMTM5Njc2LDMwIEM1OS4yMTM5Njc2LDQ2LjU2ODU0MzMgNDUuOTgzNjA3Myw2MCAyOS42NjMxMjksNjAgQzIzLjYxMDI1MDIsNjAgMTcuOTgyNDE0Nyw1OC4xNTI1MTM0IDEzLjI5NzAzNDEsNTQuOTgyNzc1NCBMNDcuMTU3MjU1NCw1LjgxOTQxMTAzIEM1NC40NjkxNTM0LDExLjI4MDY1MDMgNTkuMjEzOTY3NiwyMC4wNzc3OTczIDU5LjIxMzk2NzYsMzAgWiBNNTkuMjEzOTY3NiwzMCIgaWQ9InJlZmxlYyIgZmlsbC1vcGFjaXR5PSIwLjA4IiBmaWxsPSIjMDAwMDAwIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+DQo8L3N2Zz4=); } + &.stackoverflow { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQogIDxwYXRoIGZpbGw9IiM5MTkxOTEiIGQ9Im03LjI5NDA3NSwyMy4xMTAxODhsMi4zODU4NjQsMC4wMjMyMzdsLTAuMDgzMTc3LDEwLjU1MjY3OWwxNS44NzgyMjEsMGwwLC0xMC41MTQ1MDVsMi41MTQwNSwwbDAsMTMuMDc3NDFsLTIwLjcwNzg0MywwbDAuMDEyODksLTEzLjEzODgxNWwtMC4wMDAwMDUsLTAuMDAwMDA2eiIvPg0KICA8cmVjdCBmaWxsPSIjOTE5MTkxIiB5PSIyOS4zNDg4NjIiIHg9IjExLjE4NDU4MiIgaGVpZ2h0PSIyLjYyODYyNiIgd2lkdGg9IjEyLjQzNzkzOCIvPg0KICA8cmVjdCBmaWxsPSIjYTc4YjY4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjUzOTU3MzM0MTAzMDQ3MTcsMC4wNTE3MjY2OTg0ODM5OTIwNCwtMC4wNTIwNzU4NjQ3ODAwMzI1MiwwLjUzNTk1NTUyNjQxMDg2NjUsMy42NjExNDE2NjQ4Njc4MzI1LDEuNDA2NzI1NTcyNzY2NjYxNCkgIiB5PSI0MS41MjQzNDciIHg9IjE4LjQ5MTI1IiBoZWlnaHQ9IjUuMDAzOTIzIiB3aWR0aD0iMjMuMDY2ODY0Ii8+DQogIDxyZWN0IGZpbGw9IiNjMTk2NTMiIHRyYW5zZm9ybT0ibWF0cml4KDAuNTIxNjk5ODY3NjIzODk1OCwwLjE0NjI1NTg2MDkyMjc4OTkyLC0wLjE0NzI0MzExOTMxNjAyNDIsMC41MTgyMDE4OTM4Mjc1NDE2LDMuNjYxMTQxNjY0ODY3ODMyNSwxLjQwNjcyNTU3Mjc2NjY2MTQpICIgeT0iMjcuNDM4NTE1IiB4PSIyNC45MDcwNzYiIGhlaWdodD0iNS4wMDM5MjMiIHdpZHRoPSIyMy4wNjY4NjQiLz4NCiAgPHJlY3QgZmlsbD0iI2Q0OGMyOCIgdHJhbnNmb3JtPSJtYXRyaXgoMC40NjQwMDkwMjQ0MjYxMjE2LDAuMjc4MzgzMDczOTI4ODQ3NSwtMC4yODAyNjIyMTkzMTUxMzUzLDAuNDYwODk3ODY1MDk5NzY5OTMsMy42NjExNDE2NjQ4Njc4MzI1LDEuNDA2NzI1NTcyNzY2NjYxNCkgIiB5PSI3LjQ2MTA5MiIgeD0iMzAuMDg5Mzk2IiBoZWlnaHQ9IjUuMDAzOTIzIiB3aWR0aD0iMjMuMDY2ODY0Ii8+DQogIDxyZWN0IGZpbGw9IiNmZTg5MDgiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzE1NzIyMjcwMDE0MzMwNCwwLjQzNzY5MzU2MDg5OTk2MDIsLTAuNDQwNjQ4MDg2MjAxOTY2NCwwLjMxMzYwNTM2NjYwNjg4NzM3LDMuNjYxMTQxNjY0ODY3ODMyNSwxLjQwNjcyNTU3Mjc2NjY2MTQpICIgeT0iLTIwLjM0MzgwMyIgeD0iMjguNDg4MzAzIiBoZWlnaHQ9IjUuMDAzOTIzIiB3aWR0aD0iMjMuMDY2ODY0Ii8+DQogIDxyZWN0IGZpbGw9IiNmZjdhMTUiIHRyYW5zZm9ybT0ibWF0cml4KDAuMDg5MzQwMjMwNDgyMTY3NiwwLjUzMTA4MjgzMzM4NDMxNzksLTAuNTM0NjY3NzU2MjgyMTI5OSwwLjA4ODc0MTIwODMxNTI0NTg1LDMuNjYxMTQxNjY0ODY3ODMyNSwxLjQwNjcyNTU3Mjc2NjY2MTQpICIgeT0iLTQ3LjA0NTkyNyIgeD0iMTQuMTU4MjAzIiBoZWlnaHQ9IjUuMDAzOTIzIiB3aWR0aD0iMjMuMDY2ODY0Ii8+DQo8L3N2Zz4NCg==); } + &.twitter { background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNjAgNjAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM6c2tldGNoPSJodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gvbnMiPg0KICAgIDxwYXRoIGQ9Ik0wLDMwIEMwLDEzLjQzMTQ1NjcgMTMuNDUwODY2MywwIDMwLjA0MzM1MjYsMCBDNDYuNjM1ODM4OSwwIDYwLjA4NjcwNTIsMTMuNDMxNDU2NyA2MC4wODY3MDUyLDMwIEM2MC4wODY3MDUyLDQ2LjU2ODU0MzMgNDYuNjM1ODM4OSw2MCAzMC4wNDMzNTI2LDYwIEMxMy40NTA4NjYzLDYwIDAsNDYuNTY4NTQzMyAwLDMwIFogTTAsMzAiIGZpbGw9IiM0MDk5RkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4NCiAgICA8cGF0aCBkPSJNMjkuMjk5NzY3NSwyMy44ODc5Nzc2IEwyOS4zNjI3MjA2LDI0LjkyNjA0NTMgTDI4LjMxMzUwMTYsMjQuNzk4OTM1IEMyNC40OTQzNDQ1LDI0LjMxMTY3ODcgMjEuMTU3ODI4MSwyMi42NTkyNDQ0IDE4LjMyNDkzNjgsMTkuODg0MDAyMyBMMTYuOTM5OTY3NywxOC41MDY5NzM3IEwxNi41ODMyMzMzLDE5LjUyMzg1NjMgQzE1LjgyNzc5NTYsMjEuNzkwNjU3MiAxNi4zMTA0MzYzLDI0LjE4NDU2ODQgMTcuODg0MjY0OCwyNS43OTQ2MzI1IEMxOC43MjM2NCwyNi42ODQ0MDQ4IDE4LjUzNDc4MDYsMjYuODExNTE1MiAxNy4wODY4NTg0LDI2LjI4MTg4ODggQzE2LjU4MzIzMzMsMjYuMTEyNDA4MyAxNi4xNDI1NjEzLDI1Ljk4NTI5OCAxNi4xMDA1OTI1LDI2LjA0ODg1MzIgQzE1Ljk1MzcwMTksMjYuMTk3MTQ4NiAxNi40NTczMjcsMjguMTI0OTg4NSAxNi44NTYwMzAyLDI4Ljg4NzY1MDUgQzE3LjQwMTYyNDEsMjkuOTQ2OTAzMyAxOC41MTM3OTYyLDMwLjk4NDk3MDkgMTkuNzMwODkwMiwzMS41OTkzMzc1IEwyMC43NTkxMjQ4LDMyLjA4NjU5MzggTDE5LjU0MjAzMDgsMzIuMTA3Nzc4OCBDMTguMzY2OTA1NSwzMi4xMDc3Nzg4IDE4LjMyNDkzNjgsMzIuMTI4OTYzOSAxOC40NTA4NDMxLDMyLjU3Mzg1IEMxOC44NzA1MzA3LDMzLjk1MDg3ODYgMjAuNTI4Mjk2NywzNS40MTI2NDc0IDIyLjM3NDkyMjEsMzYuMDQ4MTk5IEwyMy42NzU5NTM2LDM2LjQ5MzA4NTIgTDIyLjU0Mjc5NzEsMzcuMTcxMDA2OSBDMjAuODY0MDQ2NywzOC4xNDU1MTk0IDE4Ljg5MTUxNSwzOC42OTYzMzA5IDE2LjkxODk4MzMsMzguNzM4NzAxIEMxNS45NzQ2ODYyLDM4Ljc1OTg4NiAxNS4xOTgyNjQyLDM4Ljg0NDYyNjIgMTUuMTk4MjY0MiwzOC45MDgxODE0IEMxNS4xOTgyNjQyLDM5LjEyMDAzMTkgMTcuNzU4MzU4NSw0MC4zMDYzOTUgMTkuMjQ4MjQ5NSw0MC43NzI0NjYyIEMyMy43MTc5MjI0LDQyLjE0OTQ5NDggMjkuMDI2OTcwNSw0MS41NTYzMTMyIDMzLjAxNDAwMjcsMzkuMjA0NzcyMiBDMzUuODQ2ODk0LDM3LjUzMTE1MjggMzguNjc5Nzg1MywzNC4yMDUwOTkzIDQwLjAwMTgwMTIsMzAuOTg0OTcwOSBDNDAuNzE1MjcwMSwyOS4yNjg5ODE1IDQxLjQyODczOSwyNi4xMzM1OTM0IDQxLjQyODczOSwyNC42Mjk0NTQ1IEM0MS40Mjg3MzksMjMuNjU0OTQyIDQxLjQ5MTY5MjIsMjMuNTI3ODMxNyA0Mi42NjY4MTc0LDIyLjM2MjY1MzcgQzQzLjM1OTMwMiwyMS42ODQ3MzE5IDQ0LjAwOTgxNzgsMjAuOTQzMjU1IDQ0LjEzNTcyNCwyMC43MzE0MDQ0IEM0NC4zNDU1Njc4LDIwLjMyODg4ODQgNDQuMzI0NTgzNSwyMC4zMjg4ODg0IDQzLjI1NDM4MDEsMjAuNjg5MDM0MyBDNDEuNDcwNzA3OCwyMS4zMjQ1ODYgNDEuMjE4ODk1MiwyMS4yMzk4NDU4IDQyLjEwMDIzOTIsMjAuMjg2NTE4MyBDNDIuNzUwNzU1LDE5LjYwODU5NjUgNDMuNTI3MTc3LDE4LjM3OTg2MzQgNDMuNTI3MTc3LDE4LjAxOTcxNzQgQzQzLjUyNzE3NywxNy45NTYxNjIzIDQzLjIxMjQxMTMsMTguMDYyMDg3NiA0Mi44NTU2NzY5LDE4LjI1Mjc1MyBDNDIuNDc3OTU4LDE4LjQ2NDYwMzYgNDEuNjM4NTgyOCwxOC43ODIzNzk0IDQxLjAwOTA1MTQsMTguOTczMDQ0OSBMMzkuODc1ODk0OSwxOS4zMzMxOTA4IEwzOC44NDc2NjAzLDE4LjYzNDA4NCBDMzguMjgxMDgyLDE4LjI1Mjc1MyAzNy40ODM2NzU2LDE3LjgyOTA1MiAzNy4wNjM5ODgsMTcuNzAxOTQxNiBDMzUuOTkzNzg0NiwxNy40MDUzNTA5IDM0LjM1NzAwMywxNy40NDc3MjEgMzMuMzkxNzIxNSwxNy43ODY2ODE4IEMzMC43Njg2NzQsMTguNzQwMDA5MyAyOS4xMTA5MDgsMjEuMTk3NDc1NyAyOS4yOTk3Njc1LDIzLjg4Nzk3NzYgWiBNMjkuMjk5NzY3NSwyMy44ODc5Nzc2IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KICAgIDxwYXRoIGQ9Ik02MC4wODY3MDUyLDMwIEM2MC4wODY3MDUyLDQ2LjU2ODU0MzMgNDYuNjM1ODM4OSw2MCAzMC4wNDMzNTI2LDYwIEMyMy44ODk1OTI1LDYwIDE4LjE2Nzk1OTgsNTguMTUyNTEzNCAxMy40MDQ0ODk1LDU0Ljk4Mjc3NTQgTDQ3LjgyOTA0NzgsNS44MTk0MTEwMyBDNTUuMjYyODEwOCwxMS4yODA2NTAzIDYwLjA4NjcwNTIsMjAuMDc3Nzk3MyA2MC4wODY3MDUyLDMwIFogTTYwLjA4NjcwNTIsMzAiIGlkPSJyZWZsZWMiIGZpbGwtb3BhY2l0eT0iMC4wOCIgZmlsbD0iIzAwMDAwMCIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPg0KPC9zdmc+); } + &.youtube { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDYwIDYwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDx0aXRsZT5Zb3VUdWJlPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5DcmVhdGVkIHdpdGggU2tldGNoIChodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2gpPC9kZXNjcmlwdGlvbj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJZb3VUdWJlIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IllvdXR1YmUiIHNrZXRjaDp0eXBlPSJNU0xheWVyR3JvdXAiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTAuNDQ5MTYxMzc2LDMwIEMwLjQ0OTE2MTM3NiwxMy40MzE0NTY3IDEzLjY3OTUyMTcsMCAzMCwwIEM0Ni4zMjA0NzgzLDAgNTkuNTUwODM4NiwxMy40MzE0NTY3IDU5LjU1MDgzODYsMzAgQzU5LjU1MDgzODYsNDYuNTY4NTQzMyA0Ni4zMjA0NzgzLDYwIDMwLDYwIEMxMy42Nzk1MjE3LDYwIDAuNDQ5MTYxMzc2LDQ2LjU2ODU0MzMgMC40NDkxNjEzNzYsMzAgWiBNMC40NDkxNjEzNzYsMzAiIGlkPSJZb3VUdWJlIiBmaWxsPSIjQ0QzMzJEIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDMuMzA1NTgwMiwzMC40MjgzMTI1IEM0NC43MjMxODAyLDMxLjg2MjM1MTYgNDQuNzM4NTE1OCwzOC45NDE4NTM1IDQ0LjczODUxNTgsMzguOTgyNzU1OSBDNDQuNzM4NTE1OCwzOC45ODI3NTU5IDQ0LjcyNzAzMTYsNDYuMDk5MTEzMyA0My4zMDU1ODAyLDQ3LjUzODEzODcgQzQxLjg5Mzg2MjQsNDguOTY5MTQyNiAyOS45OTQzMjc5LDQ5IDI5Ljk5NDMyNzksNDkgQzI5Ljk5NDMyNzksNDkgMTguMDk2NDc0LDQ4Ljk2OTE0MjYgMTYuNjgxMDQ0OSw0Ny41MzgyMTA5IEMxNS4yNjU0NzU3LDQ2LjEwNDA5OTYgMTUuMjYxNTU0MiwzOS4wMzY0NDkyIDE1LjI2MTU1NDIsMzguOTgyNzU1OSBDMTUuMjYxNTU0MiwzOC45NDE5OTggMTUuMjY1NDA1NywzMS44NjIzNTE2IDE2LjY4MTA0NDksMzAuNDI4MzEyNSBDMTguMDk2NjE0MSwyOC45OTY0NDE0IDI5Ljk5NDMyNzksMjguOTc3MzYzMyAyOS45OTQzMjc5LDI4Ljk3ODQ0NzMgQzI5Ljk5NDMyNzksMjguOTc3MzYzMyA0MS44OTM4NjI0LDI4Ljk5NjQ0MTQgNDMuMzA1NTgwMiwzMC40MjgzMTI1IFogTTIyLjAzNjY3OTIsNDQuODgzODk0NSBMMjAuMDk4MzY4Myw0NC44ODM4OTQ1IEwyMC4wOTgzNjgzLDM0LjU5OTA1MDggTDE4LjA5NDUxMzMsMzQuNTk5MDUwOCBMMTguMDk0NTEzMywzMi44NTE1MjM0IEwyNC4wNDA0NjQyLDMyLjg1MTUyMzQgTDI0LjA0MDUzNDIsMzQuNTk5MDUwOCBMMjIuMDM2Njc5MiwzNC41OTkwNTA4IEwyMi4wMzY2NzkyLDQ0Ljg4Mzg5NDUgWiBNMjcuOTg4MzcyMiw0My45MDc3MzA1IEMyNy42NjgyODQ4LDQ0LjI2OTkyNTggMjcuMzQwMzU0NSw0NC41NDM1OTU3IDI2Ljk5NTE5NzksNDQuNzMwNzYzNyBDMjYuNjUxODYyLDQ0LjkyMTkwNjMgMjYuMzIwMDgwMyw0NS4wMTMzMjIzIDI1Ljk5NjA3MTQsNDUuMDEzMzIyMyBDMjUuNTk2Nzg1LDQ1LjAxMzMyMjMgMjUuMzAxNjk2OCw0NC44ODM5NjY4IDI1LjA5NzM2MTgsNDQuNjE3Mzc4OSBDMjQuODk4Njk5LDQ0LjM1MTUxMzcgMjQuNzk2NDYxNSw0My45NTg2MDU1IDI0Ljc5NjQ2MTUsNDMuNDI4MTAzNSBMMjQuNzk2NDYxNSwzNi4wMDYxMzQ4IEwyNi41MTQ5NjE4LDM2LjAwNjEzNDggTDI2LjUxNDk2MTgsNDIuODE1MDc0MiBDMjYuNTE0OTYxOCw0My4wMjYwMTc2IDI2LjU1MTU4NTIsNDMuMTc3MjY5NSAyNi42MjExMjA3LDQzLjI3MDc4MTIgQzI2LjY5NjMyODMsNDMuMzY2MzE2NCAyNi44MTM5NzE0LDQzLjQxMjEzMjggMjYuOTc0MDUwMSw0My40MTIxMzI4IEMyNy4wOTk0NjYxLDQzLjQxMjEzMjggMjcuMjYxNDM1Niw0My4zNDk0MDYzIDI3LjQ1NDI4NjMsNDMuMjI1MDM3MSBDMjcuNjQ5MDk3Nyw0My4wOTk1ODQgMjcuODI0NTgyMSw0Mi45NDIzMzQgMjcuOTg4NDQyMiw0Mi43NTAzMjQyIEwyNy45ODg0NDIyLDM2LjAwNjI3OTMgTDI5LjcwNjg3MjUsMzYuMDA2Mjc5MyBMMjkuNzA2ODAyNSw0NC44ODM5NjY4IEwyNy45ODgzNzIyLDQ0Ljg4Mzk2NjggTDI3Ljk4ODM3MjIsNDMuOTA3NzMwNSBaIE0zNC4zNzAzNzMsNDQuOTk2MjY3NiBDMzQuMDMyODQ5Miw0NC45OTYyNjc2IDMzLjczMzgzOTUsNDQuOTMzNzU3OCAzMy40NzE1MjMzLDQ0LjgwNDMzMDEgQzMzLjIwOTM0NzEsNDQuNjc1MDQ2OSAzMi45NjA0MDU4LDQ0LjQ3NTk1NTEgMzIuNzM2ODEzOCw0NC4yMDMzNjkxIEwzMi43MzY4MTM4LDQ0Ljg4Mzk2NjggTDMwLjk5OTE5NjUsNDQuODgzOTY2OCBMMzAuOTk5MTk2NSwzMi44NTE1MjM0IEwzMi43MzY4MTM4LDMyLjg1MTUyMzQgTDMyLjczNjgxMzgsMzYuNzI1NjExMyBDMzIuOTcwMTM5NCwzNi40NTY4NTU1IDMzLjIxNTA4OTIsMzYuMjQ4ODc1IDMzLjQ3MzU1NCwzNi4xMDk2OTE0IEMzMy43MzU3MzAyLDM1Ljk2ODQxMjEgMzQuMDAwMTQ3MiwzNS44OTg2NzU4IDM0LjI2NjEwNDcsMzUuODk4Njc1OCBDMzQuODExOTU0OSwzNS44OTg2NzU4IDM1LjIyNjY0NywzNi4wODc3OTQ5IDM1LjUxMjA3MTcsMzYuNDY0MDA5OCBDMzUuODAxMzQ3OCwzNi44NDMxMTUyIDM1Ljk0NDEzMDIsMzcuMzk3MzkyNiAzNS45NDQxMzAyLDM4LjEyMzg3ODkgTDM1Ljk0NDEzMDIsNDMuMDQ5ODY1MiBDMzUuOTQzOTkwMSw0My42Nzc3MDkgMzUuODA4ODQwNiw0NC4xNTk0MzE2IDM1LjUzOTAzMTYsNDQuNDk0ODg4NyBDMzUuMjcwOTczMyw0NC44MzExNDA2IDM0Ljg3OTUyOTcsNDQuOTk2MjY3NiAzNC4zNzAzNzMsNDQuOTk2MjY3NiBaIE0zOC42MTcwMTA1LDQyLjMzMDM4ODcgQzM4LjYxNzAxMDUsNDIuNzk4MTY0MSAzOC42NzMxMDExLDQzLjEyMTU1MjcgMzguNzg0NzkyMSw0My4zMDM2NjIxIEMzOC45MDA0NzQ1LDQzLjQ4Mzc0OCAzOS4wOTMzMjUyLDQzLjU3MjQ5MDIgMzkuMzY3MjY1Nyw0My41NzI0OTAyIEMzOS42NTI1NTA0LDQzLjU3MjQ5MDIgMzkuODUxMjgzMiw0My40OTU3NDQxIDM5Ljk2NTA3NSw0My4zNDI1NDEgQzQwLjA3Njk3Niw0My4xODkyNjU2IDQwLjEzNjcwNzksNDIuODUyOTQxNCA0MC4xMzY3MDc5LDQyLjMzMDM4ODcgTDQwLjEzNjcwNzksNDEuOTI1NDEyMSBMNDEuOTA1Mjc2Niw0MS45MjU0MTIxIEw0MS45MDUyNzY2LDQyLjM4MTI2MzcgQzQxLjkwNTI3NjYsNDMuMjkxODgyOCA0MS42OTEwNjgsNDMuOTc3NDY2OCA0MS4yNTcyNTg5LDQ0LjQ0MDE4MzYgQzQwLjgyOTE5MTksNDQuODk3OTg2MyA0MC4xODQ4ODU2LDQ1LjEyNTc2NzYgMzkuMzI4NjgxNiw0NS4xMjU3Njc2IEMzOC41NTkwOTkzLDQ1LjEyNTc2NzYgMzcuOTUxNTU2NSw0NC44ODM4OTQ1IDM3LjUwOTkwNDUsNDQuMzk0Mjk0OSBDMzcuMDY4MTEyNCw0My45MDc4MDI3IDM2Ljg0NDM4MDQsNDMuMjM2ODg4NyAzNi44NDQzODA0LDQyLjM4MTE5MTQgTDM2Ljg0NDM4MDQsMzguMzk0NTg1OSBDMzYuODQ0MzgwNCwzNy42MjczNDE4IDM3LjA4OTMzMDIsMzYuOTk2MzkwNiAzNy41NzUzNzg1LDM2LjUxMjcxNjggQzM4LjA2MTI4NjcsMzYuMDI4MTAzNSAzOC42ODYxOTU5LDM1Ljc4NjMwMjcgMzkuNDU3NzM4OSwzNS43ODYzMDI3IEM0MC4yNDQ1NDc1LDM1Ljc4NjMwMjcgNDAuODUwMTk5NiwzNi4wMTExMjExIDQxLjI3MjUyNDUsMzYuNDU5OTYyOSBDNDEuNjk0ODQ5NCwzNi45MDc3MjA3IDQxLjkwNTIwNjYsMzcuNTUyNjE5MSA0MS45MDUyMDY2LDM4LjM5NDU4NTkgTDQxLjkwNTIwNjYsNDAuNjU3NTExNyBMMzguNjE3MDEwNSw0MC42NTc1ODQgTDM4LjYxNzAxMDUsNDIuMzMwMzg4NyBaIE0zMy45OTIzMDQzLDM3LjUzODY3MTkgQzM0LjExMzY1ODgsMzcuNjkzODI2MiAzNC4xNzM1MzA4LDM3LjkyMTY3OTcgMzQuMTczNTMwOCwzOC4yMjEyOTMgTDM0LjE3MzUzMDgsNDIuODA1MDI5MyBDMzQuMTczNTMwOCw0My4wOTA1NTA4IDM0LjEyMTQzMTcsNDMuMjkxNTkzOCAzNC4wMjMyNTU2LDQzLjQxNjAzNTIgQzMzLjkyNDkzOTYsNDMuNTQzNDM5NSAzMy43NzA1MzMsNDMuNjA2MTY2IDMzLjU2MDMxNTgsNDMuNjA2MTY2IEMzMy40MTM4MjIxLDQzLjYwNjE2NiAzMy4yNzY5MjE5LDQzLjU3MjIwMTIgMzMuMTQ1NjIzNyw0My41MDk2MTkxIEMzMy4wMTI2NDUsNDMuNDQ3ODMyIDMyLjg3NTYwNDcsNDMuMzM5MzYxMyAzMi43MzY4MTM4LDQzLjE5NjEzMDkgTDMyLjczNjgxMzgsMzcuNjY1MTM2NyBDMzIuODU0Mzg2OSwzNy41NDI3MTg4IDMyLjk3MjAzMDEsMzcuNDUyMTY5OSAzMy4wOTE1NjM5LDM3LjM5NDM1NzQgQzMzLjIxMTIzNzgsMzcuMzM0NjY2IDMzLjMzMjY2MjQsMzcuMzA3NzgzMiAzMy40NTYwNDc2LDM3LjMwNzc4MzIgQzMzLjY4NzQxMjUsMzcuMzA3NzgzMiAzMy44NjY4ODgzLDM3LjM4NTM5NjUgMzMuOTkyMzA0MywzNy41Mzg2NzE5IFogTTM4Ljc5NDUyNTYsMzcuNTg0NDg4MyBDMzguNjc0OTkxOCwzNy43Mzk1NzAzIDM4LjYxNzE1MDYsMzguMDA4MzI2MiAzOC42MTcxNTA2LDM4LjM3OTYyNyBMMzguNjE3MTUwNiwzOS4yNzYyMjY2IEw0MC4xMzY5MTgsMzkuMjc2MjI2NiBMNDAuMTM2OTE4LDM4LjM3OTYyNyBDNDAuMTM2OTE4LDM4LjAwODM5ODQgNDAuMDc1MjI1NCwzNy43Mzk3ODcxIDM5Ljk1NTU1MTUsMzcuNTg0NDg4MyBDMzkuODM5ODY5MSwzNy40MTgyMDUxIDM5LjY0NTEyNzYsMzcuMzM5NjUyMyAzOS4zODQ3MDIxLDM3LjMzOTY1MjMgQzM5LjExMDkwMTcsMzcuMzM5NjUyMyAzOC45MTQxOTk1LDM3LjQxODIwNTEgMzguNzk0NTI1NiwzNy41ODQ0ODgzIFogTTM4Ljc5NDUyNTYsMzcuNTg0NDg4MyIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4xOTc4MzgsMTIgTDIxLjc5MTcyOTQsMjAuMDAzMDU2NiBMMjEuNzkxNzI5NCwyNS4yNTQ1MjczIEwyMy45NzEyMDg4LDI1LjI1NDUyNzMgTDIzLjk3MTIwODgsMTkuNzU1MjU3OCBMMjYuNTA3MjU4OSwxMiBMMjQuMjkxMjI2MSwxMiBMMjIuOTQ1MTkyNCwxNy4yOTgyMjY2IEwyMi44MDgyMjIyLDE3LjI5ODIyNjYgTDIxLjM5MjU4MywxMiBMMTkuMTk3ODM4LDEyIFogTTI5LjU0Njc5MzgsMTUuMjI5NDA2MyBDMzAuMzQ3MTE3MywxNS4yMjk0MDYzIDMxLjAwNDg2ODYsMTUuNDY2MTQ4NCAzMS41MTc4NzY3LDE1LjkzOTkyMTkgQzMyLjAyNjk2MzQsMTYuNDEyNjExMyAzMi4yODM1Mzc2LDE3LjAyMjYwNTUgMzIuMjgzNTM3NiwxNy43NjgwMjU0IEwzMi4yODM1Mzc2LDIyLjgxOTM5MjYgQzMyLjI4MzUzNzYsMjMuNjU1Mjg5MSAzMi4wMzI4NDU2LDI0LjMxMDE2MDIgMzEuNTMzMzUyNCwyNC43ODY4OTY1IEMzMS4wMjc5NzcsMjUuMjYyNTQ4OCAzMC4zMzk0ODQ1LDI1LjUwMTQ1OSAyOS40NTgxNDEzLDI1LjUwMTQ1OSBDMjguNjEzNDIxNCwyNS41MDE0NTkgMjcuOTM0NTkyNSwyNS4yNTQ1OTk2IDI3LjQyNTM2NTcsMjQuNzY1MTQ0NSBDMjYuOTIwMDYwMywyNC4yNzM0NDkyIDI2LjY2MzYyNjMsMjMuNjExNzEyOSAyNi42NjM2MjYzLDIyLjc4MDgwMjcgTDI2LjY2MzQ4NjIsMTcuNzEzMjQ4IEMyNi42NjM0ODYyLDE2Ljk1Mzk1MzEgMjYuOTIzODQxNywxNi4zNTA4OTY1IDI3LjQ0NjUxMzQsMTUuOTAzMDY2NCBDMjcuOTY3Mjk0NCwxNS40NTQyMjQ2IDI4LjY2OTIzMTksMTUuMjI5NDA2MyAyOS41NDY3OTM4LDE1LjIyOTQwNjMgWiBNMjkuNDU0MTQ5OCwyMy44MDc0ODA1IEMyOS43MTY1MzYsMjMuODA3NDgwNSAyOS45MjI4MzE3LDIzLjczMTk2MjkgMzAuMDc5MDU5LDIzLjU4MzYwMTYgQzMwLjIzMzQ2NTYsMjMuNDMyMjc3MyAzMC4zMTA2MzM5LDIzLjIyNjM5MjYgMzAuMzEwNjMzOSwyMi45NjU1ODU5IEwzMC4zMTA2MzM5LDE3LjYzODUyNTQgQzMwLjMxMDYzMzksMTcuNDI0NjkxNCAzMC4yMzE0MzQ5LDE3LjI1MjQ4MjQgMzAuMDczMzE2OSwxNy4xMjAwOTE4IEMyOS45MTUxOTg5LDE2Ljk4ODc4NTIgMjkuNzA4ODMzMiwxNi45MjQwMzUyIDI5LjQ1NDE0OTgsMTYuOTI0MDM1MiBDMjkuMjE2OTcyOCwxNi45MjQwMzUyIDI5LjAyNjA4MjgsMTYuOTg4Nzg1MiAyOC44Nzc1NTgzLDE3LjEyMDA5MTggQzI4LjczMDk5NDYsMTcuMjUyNDgyNCAyOC42NTU3ODcsMTcuNDI0NTQ2OSAyOC42NTU3ODcsMTcuNjM4NTI1NCBMMjguNjU1Nzg3LDIyLjk2NTY1ODIgQzI4LjY1NTcxNjksMjMuMjMzMzMwMSAyOC43MjcwNzMxLDIzLjQzOTI4NzEgMjguODYzOTczMywyMy41ODc1NzYyIEMyOS4wMDA5NDM2LDIzLjczNDg1MzUgMjkuMTk3NzE1NywyMy44MDc0ODA1IDI5LjQ1NDE0OTgsMjMuODA3NDgwNSBaIE0zNy40NDA2NDkxLDI1LjI1NDU5OTYgTDM3LjQ0MDY0OTEsMjQuMTc0ODc4OSBDMzcuMDg3NjQ5NiwyNC41NzE5MDYzIDM2LjcxNTUzMzEsMjQuODc3NTE3NiAzNi4zMjc3MzA5LDI1LjA4NDQxNDEgQzM1Ljk0MjAyOTQsMjUuMjkyMzk0NSAzNS41Njc4MTIyLDI1LjM5NjAyMzQgMzUuMjA1MTQ5MSwyNS4zOTYwMjM0IEMzNC43NTM5NzM3LDI1LjM5NjAyMzQgMzQuNDIwMjMxMiwyNS4yNDk2ODU1IDM0LjE5Mjc4NzgsMjQuOTU5MTA1NSBDMzMuOTY3MDk1LDI0LjY2NzUxMzcgMzMuODUzMzAzMywyNC4yMzE2Nzk3IDMzLjg1MzMwMzMsMjMuNjQ4NDIzOCBMMzMuODUzMzAzMywxNS40NzYxMjExIEwzNS43ODU3MzIxLDE1LjQ3NjEyMTEgTDM1Ljc4NTczMjEsMjIuOTcyNTk1NyBDMzUuNzg1NzMyMSwyMy4yMDQ0OTYxIDM1LjgzMDE5ODQsMjMuMzcxNjQ2NSAzNS45MTExNDgxLDIzLjQ3NTEzMDkgQzM1Ljk5MDIwNzEsMjMuNTc4NzU5OCAzNi4xMjMyNTU5LDIzLjYzMTM2OTEgMzYuMzA0NjIyNCwyMy42MzEzNjkxIEMzNi40NDUzNzQsMjMuNjMxMzY5MSAzNi42MjY3NDA1LDIzLjU2MTc3NzMgMzYuODQ0NTkwNSwyMy40MjU0MTIxIEMzNy4wNjA1NDk3LDIzLjI4ODEwNzQgMzcuMjYxMTczMiwyMy4xMTI3OTEgMzcuNDQwNTA5LDIyLjg5Nzk0NTMgTDM3LjQ0MDUwOSwxNS40NzYxMjExIEwzOS4zNzY5OTkzLDE1LjQ3NjEyMTEgTDM5LjM3Njk5OTMsMjUuMjU0NTk5NiBMMzcuNDQwNjQ5MSwyNS4yNTQ1OTk2IFogTTM3LjQ0MDY0OTEsMjUuMjU0NTk5NiIgaWQ9IlBhdGgiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01OS41NTA4Mzg2LDMwIEM1OS41NTA4Mzg2LDQ2LjU2ODU0MzMgNDYuMzIwNDc4Myw2MCAzMCw2MCBDMjMuOTQ3MTIxMiw2MCAxOC4zMTkyODU4LDU4LjE1MjUxMzQgMTMuNjMzOTA1MSw1NC45ODI3NzU0IEw0Ny40OTQxMjY0LDUuODE5NDExMDMgQzU0LjgwNjAyNDUsMTEuMjgwNjUwMyA1OS41NTA4Mzg2LDIwLjA3Nzc5NzMgNTkuNTUwODM4NiwzMCBaIE01OS41NTA4Mzg2LDMwIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+); } + &.googleplus { background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDYwIDYwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDx0aXRsZT5Hb29nbGUgKzwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlZCB3aXRoIFNrZXRjaCAoaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoKTwvZGVzY3JpcHRpb24+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBza2V0Y2g6dHlwZT0iTVNQYWdlIj4KICAgICAgICA8ZyBpZD0iR29vZ2xlLSsiIHNrZXRjaDp0eXBlPSJNU0FydGJvYXJkR3JvdXAiPgogICAgICAgICAgICA8ZyBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLjExMjI5MDM0NCwyOS41MDgxOTY3IEMwLjExMjI5MDM0NCwxMy4yMTEyNjg5IDEzLjM0MjY1MDYsMCAyOS42NjMxMjksMCBDNDUuOTgzNjA3MywwIDU5LjIxMzk2NzYsMTMuMjExMjY4OSA1OS4yMTM5Njc2LDI5LjUwODE5NjcgQzU5LjIxMzk2NzYsNDUuODA1MTI0NiA0NS45ODM2MDczLDU5LjAxNjM5MzQgMjkuNjYzMTI5LDU5LjAxNjM5MzQgQzEzLjM0MjY1MDYsNTkuMDE2MzkzNCAwLjExMjI5MDM0NCw0NS44MDUxMjQ2IDAuMTEyMjkwMzQ0LDI5LjUwODE5NjcgWiBNMC4xMTIyOTAzNDQsMjkuNTA4MTk2NyIgZmlsbD0iI0QzNDgzNiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTU4LjI5NTc2NzIsMjIuNzE1NzA0OSBMNTEuMzA3NTkxNSwyMi43MTU3MDQ5IEw1MS4zMDc1OTE1LDMwLjQ2OTIwNzkgTDQ4LjAxMzY2MjMsMzAuNDY5MjA3OSBMNDguMDEzNjYyMywyMi43MTU3MDQ5IEw0MC4zMjc4Njg5LDIyLjcxNTcwNDkgTDQwLjMyNzg2ODksMTkuNDg4NjU5IEw0OC4wMTM2NjIzLDE5LjQ4ODY1OSBMNDguMDEzNjYyMywxMS44MDMyNzg3IEw1MS4zMDc1OTE1LDExLjgwMzI3ODcgTDUxLjMwNzU5MTUsMTkuNDg4NjU5IEw1Ny4xNzUyNDk2LDE5LjQ4ODY1OSBDNTcuNjA4NjI1NiwyMC41MzUzODMzIDU3Ljk4MzUwNDMsMjEuNjEyNDcyNiA1OC4yOTU3NjcyLDIyLjcxNTcwNDkgWiBNNTguMjk1NzY3MiwyMi43MTU3MDQ5IiBpZD0iU2hhcGUiIGZpbGw9IiNGRkZGRkYiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjIzMDMzODgzLDQ4LjYwNTA4MTEgQzkuMDU2NjMyNTQsNDcuMjE3NTUzNiAxMC4zMzc4NjM5LDQ1Ljg1MzQgMTIuMjM1OTMwOCw0NC43MzIzODI4IEMxNi41MTg2MjMxLDQyLjExMjA5MjEgMjIuMjg2NjQyMSw0MS43NjYwMTU5IDI1LjQwNTgyODMsNDEuNTY4MjU4MSBDMjQuNDQwMzY1OSw0MC4zMzIyNzE5IDIzLjMyNjM3MDgsMzkuMDIyMTI2NSAyMy4zMjYzNzA4LDM2Ljg3MTUxMDUgQzIzLjMyNjM3MDgsMzUuNzA5NjgzNSAyMy42NzI5NDcxLDM1LjAxNzUzMTIgMjQuMDE5NTIzMywzNC4yMDE3ODAzIEMyMy4yNTIxMDQ1LDM0LjI3NTkzOTUgMjIuNTA5NDQxMSwzNC4zNTAwOTg2IDIxLjgxNjI4ODYsMzQuMzUwMDk4NiBDMTQuNTEzNDMxOSwzNC4zNTAwOTg2IDEwLjM3OTI3MjMsMjguOTExNzU5MyAxMC4zNzkyNzIzLDIzLjU0NzU3OTEgQzEwLjM3OTI3MjMsMjAuMzgzNDU0NCAxMS44Mzk4NDM3LDE2Ljg2ODMwOTYgMTQuNzg1NzQxOCwxNC4zMjQ2NSBDMTguNzIxODU3OCwxMS4wOTM3ODIgMjMuNDAwNjM3MiwxMC41NDI1MzIxIDI3LjExMzk1NDIsMTAuNTQyNTMyMSBMNDEuMjk4ODI1LDEwLjU0MjUzMjEgTDM2Ljg5MjM1NTUsMTMuMDE2OTc2NSBMMzIuNjM0NDE4NywxMy4wMTY5NzY1IEMzNC4yMTg3NjczLDE0LjMyNDY1IDM3LjUxMTI0MTcsMTcuMDc1OTU1MyAzNy41MTEyNDE3LDIyLjMxMTU5MjkgQzM3LjUxMTI0MTcsMjcuNDAzODU2MSAzNC42MTQ4NTQ0LDI5LjgwMTY2OTQgMzEuNzQzMjIyNiwzMi4wNzU4ODQgQzMwLjgyNzI3MTEsMzIuOTY1Nzk0MSAyOS44MTIyOTc4LDMzLjkyOTg2MzMgMjkuODEyMjk3OCwzNS40Mzc3NjY1IEMyOS44MTIyOTc4LDM2Ljk0NTY2OTcgMzAuODI3MjcxMSwzNy43ODYxNDAzIDMxLjU5NDY5LDM4LjQwNDEzMzQgTDM0LjA3MDIzNDYsNDAuMzMyMjcxOSBDMzcuMTE1MTU0NSw0Mi44NTM2ODM4IDM5Ljg2MzAwOTEsNDUuMjAyMDU3NiAzOS44NjMwMDkxLDQ5Ljk0ODI0NDcgQzM5Ljg2MzAwOTEsNTMuMDc4MTc5MiAzOC40MDAyNTI5LDU2LjIxOTY2MDMgMzUuNTUwMTgxMSw1OC42MzA1MzAyIEMzNC4wMTY3MDEyLDU4Ljg4MDE3NzUgMzIuNDQzNTc1Myw1OS4wMTE5NjcxIDMwLjg0MDQzMjQsNTkuMDE2MjgzOSBDMzMuNzM0NDYwMyw1Ny43NDg2MzExIDM1LjIzMzc0MDYsNTUuNDI5MjU1NiAzNS4yMzM3NDA2LDUyLjY0MjY5NDYgQzM1LjIzMzc0MDYsNDkuMTMyNDkzOCAzMi45ODA5OTUsNDcuMjc4NTE0NSAyNy43MzI4NDAzLDQzLjU0NTgzNjEgQzI3LjE4ODIyMDUsNDMuNDk2Mzk2NiAyNi44NDE2NDQyLDQzLjQ5NjM5NjYgMjYuMTQ4NDkxNyw0My40OTYzOTY2IEMyNS41Mjk2MDU2LDQzLjQ5NjM5NjYgMjEuODE2Mjg4Niw0My42MTk5OTUzIDE4LjkxOTkwMTQsNDQuNTg0MDY0NSBDMTcuNDA5ODE5MSw0NS4xMjc4OTg0IDEzLjAwMzM0OTcsNDYuNzg0MTIgMTMuMDAzMzQ5Nyw1MS42Nzg2MjU0IEMxMy4wMDMzNDk3LDUyLjIxMDUzODQgMTMuMDYwMDU2Myw1Mi43MjYyMzA4IDEzLjE3MDY5NTEsNTMuMjIyOTAwMSBDNS45MTIzMTMsNDcuODQ2Mjg5OCA5LjA1NjYzMjU5LDQ4LjYwNTA4MjQgOC4yMzAzMzg4Myw0OC42MDUwODExIFogTTMxLjQ0NjE1NzMsMjUuNDc1NzE3NiBDMzEuNDQ2MTU3MywyMC41MDcwNTMgMjguNTAwMjU5MiwxMi44MTE4MDI4IDIyLjc4MTc1MSwxMi44MTE4MDI4IEMyMC45OTkzNTg5LDEyLjgxMTgwMjggMTkuMDY4NDM0LDEzLjcwNjY1NjggMTcuOTU0NDM5LDE1LjA4MzU0NTUgQzE2Ljc5MDkzMywxNi41MjcxNzc0IDE2LjQ0NDM1NjcsMTguMzgxMTU2NyAxNi40NDQzNTY3LDIwLjE2MDk3NjkgQzE2LjQ0NDM1NjcsMjQuNzgzNTY1MyAxOS4xMTc5NDQ5LDMyLjQyMTk2MDEgMjUuMDU5MjUyMSwzMi40MjE5NjAxIEMyNi43NjczNzc5LDMyLjQyMTk2MDEgMjguNjI0MDM2NCwzMS41ODE0ODk1IDI5LjczODAzMTUsMzAuNDkzODIxNiBDMzEuMzIyMzgwMSwyOC45MTE3NTkzIDMxLjQ0NjE1NzMsMjYuNzExNzAzOCAzMS40NDYxNTczLDI1LjQ3NTcxNzYgWiBNMzEuNDQ2MTU3MywyNS40NzU3MTc2IiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiIgc2tldGNoOnR5cGU9Ik1TU2hhcGVHcm91cCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTU5LjI3OTM3MzcsMjkuNjg1ODI1MiBDNTkuMjc5MzczNyw0NS45ODI3NTMxIDQ2LjA0OTAxMzQsNTkuMTk0MDIxOSAyOS43Mjg1MzUxLDU5LjE5NDAyMTkgQzIzLjY3NTY1NjMsNTkuMTk0MDIxOSAxOC4wNDc4MjA4LDU3LjM3NjgyMiAxMy4zNjI0NDAyLDU0LjI1OTA0NjkgTDQ3LjIyMjY2MTUsNS45MDE2MzkzNCBDNTQuNTM0NTU5NSwxMS4yNzMzNTAxIDU5LjI3OTM3MzcsMTkuOTI2MjgxNiA1OS4yNzkzNzM3LDI5LjY4NTgyNTIgWiBNNTkuMjc5MzczNywyOS42ODU4MjUyIiBpZD0icmVmbGVjIiBmaWxsLW9wYWNpdHk9IjAuMDgiIGZpbGw9IiMwMDAwMDAiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+); } + +} diff --git a/_scss/_variables.scss b/_sass/_variables.scss old mode 100644 new mode 100755 similarity index 95% rename from _scss/_variables.scss rename to _sass/_variables.scss index 5ec339423a8db..e56c1c5a68e15 --- a/_scss/_variables.scss +++ b/_sass/_variables.scss @@ -4,7 +4,7 @@ // // Colors -$blue: #4183C4; +$blue: #4183C4; // Grays $black: #000; diff --git a/_scss/_highlights.scss b/_scss/_highlights.scss old mode 100644 new mode 100755 diff --git a/about.md b/about.md old mode 100644 new mode 100755 index db54e4dba16c6..8181b89006c57 --- a/about.md +++ b/about.md @@ -4,12 +4,17 @@ title: About permalink: /about/ --- -Some information about you! +Here I am supposed to write some information about me, right? +Well, it will be very short: -### More Information +*My name is Marco, I work in IT and I am mainly focused on databases and other technologies all around data. +I also love to play with smartphones and I like Linux and Open Source projects as well.* *In my own time I use to play with embedded devices like Raspberry Pi, Arduino or Pandaboard and do my own mini-projects.* -A place to include any other types of information that you'd like to include about yourself. +In this blog I am writing my own personal view on some aspects of IT or just on few things I may be working with. -### Contact me +If you are really looking for more info, just have a look at my Twitter profile and follow me: +[@marcobonezzi](http://twitter.com/marcobonezzi) -[email@domain.com](mailto:email@domain.com) \ No newline at end of file +### Other contact details + +[mbonezzi@archlinux.us](mailto:mbonezzi@archlinux.us) diff --git a/archive.md b/archive.md new file mode 100755 index 0000000000000..7186644d2f31a --- /dev/null +++ b/archive.md @@ -0,0 +1,10 @@ +--- +layout: page +title: Archive +--- + +## Blog Posts + +{% for post in site.posts %} + * {{ post.date | date_to_string }} » [ {{ post.title }} ]({{ post.url }}) +{% endfor %} \ No newline at end of file diff --git a/assets/175102-sailfishosdemo.jpg b/assets/175102-sailfishosdemo.jpg new file mode 100755 index 0000000000000..c52e11edbbdd9 Binary files /dev/null and b/assets/175102-sailfishosdemo.jpg differ diff --git a/assets/arm1.jpg?w=300 b/assets/arm1.jpg?w=300 new file mode 100755 index 0000000000000..9600c43a0b4e6 Binary files /dev/null and b/assets/arm1.jpg?w=300 differ diff --git a/assets/down1.jpg b/assets/down1.jpg new file mode 100755 index 0000000000000..dab6e3ee675dd Binary files /dev/null and b/assets/down1.jpg differ diff --git a/assets/omap11.jpg?w=300 b/assets/omap11.jpg?w=300 new file mode 100755 index 0000000000000..d61230ec38a3f Binary files /dev/null and b/assets/omap11.jpg?w=300 differ diff --git a/assets/omap2.jpg?w=300 b/assets/omap2.jpg?w=300 new file mode 100755 index 0000000000000..4cf94b3dada9a Binary files /dev/null and b/assets/omap2.jpg?w=300 differ diff --git a/assets/pandaboard.jpg?w=300 b/assets/pandaboard.jpg?w=300 new file mode 100755 index 0000000000000..ecb1d5d93118d Binary files /dev/null and b/assets/pandaboard.jpg?w=300 differ diff --git a/assets/testing.jpg b/assets/testing.jpg new file mode 100755 index 0000000000000..fa10679dda14d Binary files /dev/null and b/assets/testing.jpg differ diff --git a/assets/up1.jpg b/assets/up1.jpg new file mode 100755 index 0000000000000..a4dc834bbbef5 Binary files /dev/null and b/assets/up1.jpg differ diff --git a/assets/video11.jpg b/assets/video11.jpg new file mode 100755 index 0000000000000..f1bfa640e9fc1 Binary files /dev/null and b/assets/video11.jpg differ diff --git a/assets/video2.jpg b/assets/video2.jpg new file mode 100755 index 0000000000000..fef90a97a87e5 Binary files /dev/null and b/assets/video2.jpg differ diff --git a/assets/web11.jpg b/assets/web11.jpg new file mode 100755 index 0000000000000..22e03f540065d Binary files /dev/null and b/assets/web11.jpg differ diff --git a/assets/web21.jpg b/assets/web21.jpg new file mode 100755 index 0000000000000..dee82658adf55 Binary files /dev/null and b/assets/web21.jpg differ diff --git a/assets/web31.jpg b/assets/web31.jpg new file mode 100755 index 0000000000000..633b756418661 Binary files /dev/null and b/assets/web31.jpg differ diff --git a/assets/web41.jpg b/assets/web41.jpg new file mode 100755 index 0000000000000..95151237ac078 Binary files /dev/null and b/assets/web41.jpg differ diff --git a/assets/webd11.jpg b/assets/webd11.jpg new file mode 100755 index 0000000000000..01fbc9af7cce8 Binary files /dev/null and b/assets/webd11.jpg differ diff --git a/assets/webd21.jpg b/assets/webd21.jpg new file mode 100755 index 0000000000000..46f60c78ff5b7 Binary files /dev/null and b/assets/webd21.jpg differ diff --git a/assets/webd31.jpg b/assets/webd31.jpg new file mode 100755 index 0000000000000..aac3186e73a11 Binary files /dev/null and b/assets/webd31.jpg differ diff --git a/assets/webd41.jpg b/assets/webd41.jpg new file mode 100755 index 0000000000000..c7d4bcfc65375 Binary files /dev/null and b/assets/webd41.jpg differ diff --git a/assets/webdbar11.jpg b/assets/webdbar11.jpg new file mode 100755 index 0000000000000..20d75e8c8585f Binary files /dev/null and b/assets/webdbar11.jpg differ diff --git a/assets/webdbar21.jpg b/assets/webdbar21.jpg new file mode 100755 index 0000000000000..d8d42f51b5f84 Binary files /dev/null and b/assets/webdbar21.jpg differ diff --git a/assets/webdbar31.jpg b/assets/webdbar31.jpg new file mode 100755 index 0000000000000..a7e7b563b22b7 Binary files /dev/null and b/assets/webdbar31.jpg differ diff --git a/assets/webdbar41.jpg b/assets/webdbar41.jpg new file mode 100755 index 0000000000000..eefaf690150b5 Binary files /dev/null and b/assets/webdbar41.jpg differ diff --git a/assets/wpid-schermata-2014-11-06-alle-23-33-072.jpg b/assets/wpid-schermata-2014-11-06-alle-23-33-072.jpg new file mode 100755 index 0000000000000..040dc06426732 Binary files /dev/null and b/assets/wpid-schermata-2014-11-06-alle-23-33-072.jpg differ diff --git a/assets/wpid-wpid-pixel-pumper.jpg b/assets/wpid-wpid-pixel-pumper.jpg new file mode 100755 index 0000000000000..42d7d0a2036e9 Binary files /dev/null and b/assets/wpid-wpid-pixel-pumper.jpg differ diff --git a/containers.html b/containers.html new file mode 100644 index 0000000000000..5254c02f9b75a --- /dev/null +++ b/containers.html @@ -0,0 +1,925 @@ +--- +layout: presentation +title: The rise of containers from development to production using Docker +permalink: /containers/ +--- + + +class: center, middle, theBlackBackground +background-image: url(https://github.com/sisteming/sisteming.github.io/blob/master/img/cover2.jpg?raw=true) +background-position: center; +background-repeat: no-repeat; +background-size: contain; +# **The rise of containers: from development to production using Docker** + + +
+## Marco Bonezzi +
+### marco@mongodb.com / @marcobonezzi + +--- +class: middle, left +# **Agenda** + + +### 1. Why containers? + +### 2. Building our first application with Docker + +### 3. Multicontainer application with Docker compose + +### 4. Deploying Docker containers on AWS or other Cloud providers + +### 5. Container orchestration with Docker swarm + +### 6. Case Study: Deploying a MongoDB cluster using Docker containers and cgroups + + +--- +class: top, left + + + +# **About me** + + + + +### **Marco Bonezzi** (@marcobonezzi) + +### TSE at **MongoDB**, Dublin + +### **TSE**: *Helping customers to be successful with MongoDB* + +### Experience in distributed systems, high availability and database technologies. + + + + +### Fan of all things containerised! +--- +class: top, left + + + + + +# **How many of you have experience with containers?** + +### 1. Ever heard of containers and Docker? + +-- + +### 2. Deployed an application in a container using Docker? + +-- + +### 3. Used docker compose or docker swarm? + +-- + +### 4. Know the benefits of using microservices or containers for your organisation? + + +--- +class: top, left +# **What is a container and what do we mean by container?** + +### What is a container? +-- + +### How can containers help? + +-- + +### Why organisations use containers? + + + +--- +class: top, left +# **Containers are great!** + + + + + + +-- + + + + + +-- + + + + +
Different architectures in Development and Production
Co-located processes sharing resources +
Production != docker run my_new_shiny_cluster
+ +--- + +class: top, left +# **What is Docker?** + +### Noun: ***a person employed in a port to load an unload ships*** (from "what is docker" on Google) + +### Docker containers: + - Isolated process in userspace + - Application + dependancies + - Shared kernel and libraries + - Can run on any infrastructure (or Cloud provider) + + + +--- + +class: top, left +# **How can containers help?** + +### Ease of deployment + portability + +- Predefined patterns +- Replicate environments + +### Resource Control + +- Set resource limits + +### Orchestration + +- Decide where to deploy one or more containers based on rules / context + +### Create once, deploy everywhere + +--- +class: top, left +# **Resource separation with cgroups** + +### Running multiple containers on the same host? + +Defining resource limits for each container can be useful +
+ + +--- + +class: top, left +# **Why organisations use containers?** + +According to ***"The Docker Survey, 2016"***: + + + +--- + +class: top, left +# **Docker ecosystem** + + +### - Provisioning and managing Dockerized hosts +


+-- + + +### - Define multi-container applications in a single file +

+-- + + +### - Cluster of Docker hosts as a single Docker host + +--- + +class: top, left +# **Building our first application with Docker** + +We will start with something simple for our first app: + +- Python Flask +- MongoDB + +-- + +We will use: + +- 1 Container running python + flask +- 1 Container running MongoDB + +-- + +Steps we will follow for each: + +- **Dockerfile** (Define the image) + +-- + +- **docker build** (build the image) + +-- + +- **docker run** (run the image) + +--- +class: top, left +# **Building the python + Flask container** + +Simple Flask python application that will retrieve information from a database. + +```shell +├── app.py +│   ├── app.py +│   ├── index.html +│   ├── requirements.txt +│   ├── server.py +│   └── templates +│   └── index.html +├── my_app.dockerfile +├── server.py +2 directories, 7 files +``` + +--- + +class: top, left +# **Building the python + Flask container** + +- **Dockerfile** (Define the image) + + +```shell +# Set the base image to Ubuntu +FROM ubuntu +# File Author / Maintainer +MAINTAINER Marco Bonezzi +# Add the application resources URL +#RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list +# Update the sources list +RUN apt-get update && apt-get -y install +# Install basic applications +RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential +# Install Python and Basic Python Tools +RUN apt-get install -y python python-dev python-distribute python-pip +# Copy the application folder inside the container +ADD /my_app /my_app +# Get pip to download and install requirements: +RUN pip install -r /my_app/requirements.txt +# Expose ports +EXPOSE 80 +# Set the default directory where CMD will execute +WORKDIR /my_app +# Set the default command to execute +CMD python server.py +``` +--- + + +class: top, left +# **Building the python + Flask container** + +- **docker build** (build the image) + +```shell +docker build -t my_app -f my_app.dockerfile . +``` + + + +-- + +- **docker run** (run the image) + +```shell +docker run --name my_app -p 8080:80 -i -t my_app +``` + +--- + + +class: top, left +# **Building the MongoDB container** + +- **Dockerfile** (Define the image) + + +```shell +FROM ubuntu +MAINTAINER Marco Bonezzi "marco.bonezzi@10gen.com" +#CREATE GROUP AND USER FOR MONGODB +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +RUN groupadd -r mongodb && useradd -r -g mongodb mongodb +#UPDATE PACKAGES AND INSTALL NUMACTL +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates curl \ + numactl \ + gosu \ + wget \ + libcurl3 libpci3 libsensors4 libsnmp30 libwrap0 snmp \ + && rm -rf /var/lib/apt/lists/* + +# SETTING MONGODB VERSION TO WORK WITH +ENV MONGO_MAJOR 3.4 +ENV MONGO_VERSION 3.4.0-rc3 +RUN mkdir /tmp/mongodb +RUN cd /tmp/mongodb +WORKDIR /tmp/mongodb +``` + +--- + + +class: top, left +# **Building the MongoDB container** + +```shell +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-server_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-mongos_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-tools_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-shell_3.4.0~rc3_amd64.deb +# UPDATE REPOS AND INSTALL MONGODB WITH DEFINED VERSION +#RUN set -x \ +# && apt-get update +RUN dpkg -i /tmp/mongodb/mongodb-*.deb +RUN mv /etc/mongod.conf /etc/mongod.conf.orig + +# DATA DIRECTORY SETUP +RUN mkdir -p /data/db && chown -R mongodb:mongodb /data/db +# SETTING ENTRYPOINT +COPY docker-entrypoint.sh /entrypoint.sh +COPY mongod_wt.conf /etc/mongod.conf +RUN chown -R mongodb:mongodb /etc/mongod.conf + +ENTRYPOINT ["/entrypoint.sh"] + +# PORT TO BE EXPOSED (inside container, different on host) +EXPOSE 27017 +EXPOSE 27019 +# COMMAND TO RUN WHEN RUNNING THE CONTAINER +CMD ["-f", "/etc/mongod.conf"] +``` +--- + + +class: top, left +# **Building the MongoDB container** + +- **docker build** (build the image) + +```shell +docker build -f mongodb.3.4.0.docker -t mongodb . +``` + + + +-- + +- **docker run** (run the image) + +```shell +docker run -d --hostname mongo1 --name mongo -p 27017:27017 mongodb mongod +``` + + + +--- +class: top, left +# **Both containers now running...** + +- Python + Flask +```shell +docker run --name my_app -p 8080:80 -i -t my_app +[14/Nov/2016:22:54:43] ENGINE Bus STARTING +[14/Nov/2016:22:54:43] ENGINE Started monitor thread 'Autoreloader'. +[14/Nov/2016:22:54:43] ENGINE Started monitor thread '_TimeoutMonitor'. +[14/Nov/2016:22:54:43] ENGINE Serving on http://0.0.0.0 +[14/Nov/2016:22:54:43] ENGINE Bus STARTED +``` + +- MongoDB +```shell + docker run -d --hostname mongo1 --name mongo -p 27017:27017 mongodb mongod +9c0f550b10e30809af5362bf7d4c7d5e91619ac577bf6276147e9c780412122f +``` + +- Checking our containers running: + +```shell +docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +9c0f550b10e3 mongodb "/entrypoint.sh mongo" 36 seconds ago Up 35 seconds 0.0.0.0:27017->27017/tcp, 27019/tcp mongo +29e7c868f6ef my_app "/bin/sh -c 'python s" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp my_app +``` + +--- +class: top, left +# **How is the application connecting to the DB on a different container?** + +```python +app.config['MONGO_HOST'] = '192.168.0.101' +app.config['MONGO_PORT'] = 27017 +app.config['MONGO_DBNAME'] = 'flask_demo' +mongo = PyMongo(app, config_prefix='MONGO') +``` + +```shell +*docker ps --format '{{.Names}}\t\t{{.Command}}\t\t{{.Ports}}' + +my_app "/bin/sh -c 'python s" 0.0.0.0:8080->80/tcp +mongo "/entrypoint.sh mongo" 0.0.0.0:27017->27017/tcp, 27019/tcp +``` + + +--- +class: top, left +# **Multicontainer applications with Docker compose** + +- ### Define and run multi-container Docker applications + +- ### One (or multiple) Compose files to configure your application services + +- ### Deploy with a single command + +- ### Great for ease of deployment in development, testing or staging + +--- +class: top, left + +# **Compose: easy as a three-step process** + +### 1. Define your application environment with a Dockerfile (Done) + +### 2. Define the services for your app in a docker-compose.yml file + +### 3. Run *docker compose up* and it will start running your application based on multiple containers + +--- +class: top, left + +# **2. Define the services for your app in a docker-compose.yaml file** + +```yaml +version: '2' +services: + + my_app: + image: my_app + ports: + - 8080:80 + hostname: my_app + container_name: my_app + labels: + - "service=flask" + + mongodb: + image: mongodb + ports: + - 27017:27017 + hostname: mongod + container_name: mongod + labels: + - "service=mongodb" +``` + +--- +class: top, left + +# **3. Run *docker compose up* and it will start running your application based on multiple containers** + +```shell +$ docker-compose up +Creating my_app +Creating mongod +Attaching to mongod, my_app +my_app | [15/Nov/2016:22:38:38] ENGINE Bus STARTING +my_app | [15/Nov/2016:22:38:38] ENGINE Started monitor thread 'Autoreloader'. +my_app | [15/Nov/2016:22:38:38] ENGINE Started monitor thread '_TimeoutMonitor'. +my_app | [15/Nov/2016:22:38:38] ENGINE Serving on http://0.0.0.0 +my_app | [15/Nov/2016:22:38:38] ENGINE Bus STARTED +``` + +### Our app is now ready at *http://localhost:8080/users* + +--- +class: top, left +# Deploying Docker containers on AWS or other Cloud providers + + +### *How can we easily provision new hosts to be used with Docker?* + + + +## Docker machine + +- Provision new hosts + +- Select the instance configuration + +- Select the OS and install docker + +- Configure our docker client + +
+ +We are now ready to run docker containers on hour new dockerized host +--- +class: top, left + +# Deploying Docker containers on AWS or other Cloud providers + +### *How do we create a new host with Docker machine?* + +```shell +docker-machine create --driver amazonec2 --amazonec2-region eu-west-1 \ + --amazonec2-tags owner,marcob,expire-on,2016-12-15 \ + --amazonec2-root-size 80 --amazonec2-use-ebs-optimized-instance \ + --amazonec2-instance-type m3.2xlarge \ + marcob-swarm-nodeDub1 +``` + +-- +### *Where can we deploy to?* + +Multiple options: + +- VirtualBox +- Amazon AWS, Azure, Digital Ocean, Google Compute Engine +- Openstack, Rackspace, Softlayer +- Vmware (vCloud Air, Fusion, Sphere) + + +--- +class: top, left + +# Example of docker machine on AWS + + +```shell +$ docker-machine create --driver amazonec2 --amazonec2-region eu-west-1 \ + --amazonec2-tags owner,marcob,expire-on,2016-12-15 \ + --amazonec2-root-size 80 --amazonec2-use-ebs-optimized-instance \ + --amazonec2-instance-type m3.2xlarge \ + marcob-swarm-nodeDub1 + +Running pre-create checks... +Creating machine... +(marcob-swarm-nodeDub1) Launching instance... +Waiting for machine to be running, this may take a few minutes... +Detecting operating system of created instance... +Waiting for SSH to be available... +Detecting the provisioner... +Provisioning with ubuntu(systemd)... +Installing Docker... +Copying certs to the local machine directory... +Copying certs to the remote machine... +Setting Docker configuration on the remote daemon... +Checking connection to Docker... +Docker is up and running! +To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env marcob-swarm-nodeDub1 + +``` +--- +class: top, left +# Container orchestration with Docker swarm + +## What is Swarm and what do we use it for? + - Native clustering for Docker + + - Pool of Docker hosts managed as a single virtual Docker host + + - Managed with Docker standard API + + - Use: Scaling to multiple hosts + High availability + + +--- +class: top, left +# Introduction to Swarm mode + +### Starting with Docker v.1.12.0, we have a swarm mode in Docker Engine: + +- Natively manage cluster of Docker Engines + +- Deploy application services to a swarm + +- Some caveats compared to the original Docker swarm + +--- +class: top, left +# Key points on when to use Swarm mode + +### Service: tasks to execute on the workers node + +- **Replicated service**: swarm manager distributes specific # of replicas among nodes (scale) + +- **Global service**: one task per service on every available node + + +-- +class: top, left +### Load balancing + +- Ingress load balancing to expose services + +- Swarm manager distributes requests among services within the cluster + +- https://docs.docker.com/engine/swarm/key-concepts/ + +--- +class: top, left +# Infrastructure used for Docker Swarm + + + + +--- +class: top, left +# Configuring a Docker Swarm + + + +--- +class: top, left +# Orchestrating containers with Docker Swarm + +### Why Docker Swarm? + + + +### Evaluating Container Platforms at Scale +- 1000 EC2 instances in a cluster + +- What is their performance at scale? + +- Can they operate at scale? + +- What does it take to support them at scale? + +From: *https://medium.com/on-docker/evaluating-container-platforms-at-scale-5e7b44d93f2c#.hgbdyhfmp* + + +--- +class: top, left +# Multi-host networking with Swarm +### How can each container connect to other containers in different hosts? +- Swarm overlay container-to-container network +- Using the hostname defined in the Compose file + + + +--- +class: top, left +# Orchestrate containers deployment + +## Filters in Swarm to define deployment rules + +- Two categories: *node filters* and *container configuration filters* + + - **Node filters**: + - Based on characteristics of the Docker host (or Docker daemon) + + - **Container configuration filters**: + - Based on characteristics of containers, or on the availability of images on a host. + + +--- +class: top, left +# Orchestrate containers deployment + +## Labels in Swarm to define deployment rules + + +- Property defined for a given container (i.e. role=primary) + +- Can be used when defining filters: + +- Examples: + - **Contrainst filters**: mark each container with a specific label + + - **Affinity filters**: create attractions between containers (i.e. alter target node based on containers already running) + + +--- +class: top, left +# Case Study: Deploying a MongoDB cluster using Docker containers and cgroups + + + + + + + + + +
Replica Set: Redundancy and fault tolerance
Sharded cluster: Scalability +
+ +Best practices: +- High availability and resource colocation +- Single member of a replica set / server +- Shards as Replica Set + + +--- +class: top, left +# Combining all components for a successful solution + +- **Docker Engine and image**: + - Where and how the `mongod` process runs, including configuration and release to use + +- **Compose**: + - How containers combine together to deploy replica sets or clusters + +- **Docker Machine**: + - To get our AWS nodes setup and ready to run Docker containers + +- **Docker Swarm**: + - How we orchestrate containers for highly available deployments + + + +--- + +class: top, left +# Summary of our deployment + + + +--- + + +class: top, left +# Our dockerized MongoDB cluster + + + +--- + +class: top, left +# Docker image + +If we like, we can push our image to http://hub.docker.com: + +```shell +docker build -f mongodb.3.4.docker -t mongodb:3.4.0-rc3 . +docker tag mongodb:3.4.0-rc3 marcob/mongodb-3.4.0-rc3 +* docker push marcob/mongodb-3.4.0-rc3 +``` + +Once our image is published, running it on other hosts is as easy as: +```shell +docker run -d --hostname mongo1 --name mongo -p 27017:27017 marcob/mongodb-3.4.0-rc3 mongod +``` + +Now we can use this image for all our MongoDB deployments + + +--- +class: top, left +# Docker compose + +**We can define multiple files to address different areas:** + +Labels common to each replica set + +```yaml + mongodb_replset_1: + marcob/mongodb-3.4.0-rc3 + labels: + - "role=mongod" + - "replset=rs1" +``` +Options specific to each container + +```yaml +rs1a: + extends: + file: mdb_base.yaml + service: mongodb_replset_1 + ports: + - 27027:27027 + volumes: + - /mnt/data/rs1:/data + hostname: rs1a + container_name: rs1a + labels: + - "initialstate=primary" +* command: mongod --port 27027 --dbpath /data/ --logpath /data/mongodb/mongod_27027.log --logappend --replSet replset_1 --wiredTigerCacheSizeGB 16 +``` +--- +class: top, left +# Docker compose + +Filters to orchestrate each container deployment +```yaml +rs1a: + extends: + file: mdb_cgroup.yaml + service: rs1a + + environment: + - "affinity:replset!=rs1" + - "affinity:initialstate!=~primary" + - "constraint:node!=marcob-MDBW-swarm-master" +``` +-- + +And also cgroups limits for each container: + +```yaml + rs1a: + extends: + file: mdb_repl.yaml + service: rs1a + cpuset: "0" + mem_limit: "6442450944" + memswap_limit: "6442450944" +``` + +--- + +class: top, left +# Docker, cgroups and MongoDB + +When running any process inside a container, memory usage is a key point to understand + + + + +--- + +class: top, left +# Orchestrating MongoDB containers with Docker Swarm + +Each container tagged with 2 labels... + + +




+-- +...that can be used to orchestrate where we deploy each container: + +--- + +class: top, left +# Summary + +## Docker containers can be really useful: + +- **Speed**: testing and deploying patterns instead of single processes + - Build once, deploy everywhere + + +- **Control**: Resource control and utilization + - Key to success with containers + +- **Agility**: Microservices architectures + - Making change less expensive + +- **Flexibility**: Multi vendor cloud opportunities + - AWS, Azure, Google, IBM, CloudFoundry + +--- + +class: top, left +# How successful customers use MongoDB with Docker + + + +- **Case Studies:** + - www.mongodb.com/blog + +- **"Enabling Microservices - Containers & Orchestration Explained"** + - www.mongodb.com/collateral/microservices-containers-and-orchestration-explained +--- + +class: center, left + +# Now it's YOUR turn! +
+## You can actually try this at home: +# https://github.com/sisteming/mongodb-swarm +# https://github.com/sisteming/Dublin-masterclass +--- + + + +class: center, middle, theBlackBackground +background-image: url(https://github.com/sisteming/sisteming.github.io/blob/master/img/cover2.jpg?raw=true) +background-position: center; +background-repeat: no-repeat; +background-size: contain; + + +# Thank you! + +marco@mongodb.com + +@marcobonezzi diff --git a/default-presentation.html b/default-presentation.html new file mode 100755 index 0000000000000..b28c31141cd02 --- /dev/null +++ b/default-presentation.html @@ -0,0 +1,920 @@ + +--- +layout: presentation +title: Default Presentation +permalink: /default-presentation/ +--- + + +class: center, middle, theBlackBackground +background-image: url(http://github.com/img/cover2.jpg) +background-position: center; +background-repeat: no-repeat; +background-size: contain; +# **The rise of containers: from development to production using Docker** + + +
+## Marco Bonezzi +
+### marco@mongodb.com / @marcobonezzi + +--- +class: middle, left +# **Agenda** + + +### 1. Why containers? + +### 2. Building our first application with Docker + +### 3. Multicontainer application with Docker compose + +### 4. Deploying Docker containers on AWS or other Cloud providers + +### 5. Container orchestration with Docker swarm + +### 6. Case Study: Deploying a MongoDB cluster using Docker containers and cgroups + + +--- +class: top, left + + + +# **About me** + + + + +### **Marco Bonezzi** (@marcobonezzi) + +### TSE at **MongoDB**, Dublin + +### **TSE**: *Helping customers to be successful with MongoDB* + +### Experience in distributed systems, high availability and database technologies. + + + + +### Fan of all things containerised! +--- +class: top, left + + + + + +# **How many of you have experience with containers?** + +### 1. Ever heard of containers and Docker? + +-- + +### 2. Deployed an application in a container using Docker? + +-- + +### 3. Used docker compose or docker swarm? + +-- + +### 4. Know the benefits of using microservices or containers for your organisation? + + +--- +class: top, left +# **What is a container and what do we mean by container?** + +### What is a container? +-- + +### How can containers help? + +-- + +### Why organisations use containers? + + + +--- +class: top, left +# **Containers are great!** + + + + + + +-- + + + + + +-- + + + + +
Different architectures in Development and Production
Co-located processes sharing resources +
Production != docker run my_new_shiny_cluster
+ +--- + +class: top, left +# **What is Docker?** + +### Noun: ***a person employed in a port to load an unload ships*** (from "what is docker" on Google) + +### Docker containers: + - Isolated process in userspace + - Application + dependancies + - Shared kernel and libraries + - Can run on any infrastructure (or Cloud provider) + + + +--- + +class: top, left +# **How can containers help?** + +### Ease of deployment + portability + +- Predefined patterns +- Replicate environments + +### Resource Control + +- Set resource limits + +### Orchestration + +- Decide where to deploy one or more containers based on rules / context + +### Create once, deploy everywhere + +--- +class: top, left +# **Resource separation with cgroups** + +### Running multiple containers on the same host? + +Defining resource limits for each container can be useful +
+ + +--- + +class: top, left +# **Why organisations use containers?** + +According to ***"The Docker Survey, 2016"***: + + + +--- + +class: top, left +# **Docker ecosystem** + + +### - Provisioning and managing Dockerized hosts +


+-- + + +### - Define multi-container applications in a single file +

+-- + + +### - Cluster of Docker hosts as a single Docker host + +--- + +class: top, left +# **Building our first application with Docker** + +We will start with something simple for our first app: + +- Python Flask +- MongoDB + +-- + +We will use: + +- 1 Container running python + flask +- 1 Container running MongoDB + +-- + +Steps we will follow for each: + +- **Dockerfile** (Define the image) + +-- + +- **docker build** (build the image) + +-- + +- **docker run** (run the image) + +--- +class: top, left +# **Building the python + Flask container** + +Simple Flask python application that will retrieve information from a database. + +```shell +├── app.py +│   ├── app.py +│   ├── index.html +│   ├── requirements.txt +│   ├── server.py +│   └── templates +│   └── index.html +├── my_app.dockerfile +├── server.py + +2 directories, 7 files +``` + +--- + +class: top, left +# **Building the python + Flask container** + +- **Dockerfile** (Define the image) + + +```shell +# Set the base image to Ubuntu +FROM ubuntu +# File Author / Maintainer +MAINTAINER Marco Bonezzi +# Add the application resources URL +#RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sources.list +# Update the sources list +RUN apt-get update && apt-get -y install +# Install basic applications +RUN apt-get install -y tar git curl nano wget dialog net-tools build-essential +# Install Python and Basic Python Tools +RUN apt-get install -y python python-dev python-distribute python-pip +# Copy the application folder inside the container +ADD /my_app /my_app +# Get pip to download and install requirements: +RUN pip install -r /my_app/requirements.txt +# Expose ports +EXPOSE 80 +# Set the default directory where CMD will execute +WORKDIR /my_app +# Set the default command to execute +CMD python server.py +``` +--- + + +class: top, left +# **Building the python + Flask container** + +- **docker build** (build the image) + +```shell +docker build -t my_app -f my_app.dockerfile . +``` + + + +-- + +- **docker run** (run the image) + +```shell +docker run --name my_app -p 8080:80 -i -t my_app +``` + +--- + + +class: top, left +# **Building the MongoDB container** + +- **Dockerfile** (Define the image) + + +```shell +FROM ubuntu +MAINTAINER Marco Bonezzi "marco.bonezzi@10gen.com" +#CREATE GROUP AND USER FOR MONGODB +# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added +RUN groupadd -r mongodb && useradd -r -g mongodb mongodb +#UPDATE PACKAGES AND INSTALL NUMACTL +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates curl \ + numactl \ + gosu \ + wget \ + libcurl3 libpci3 libsensors4 libsnmp30 libwrap0 snmp \ + && rm -rf /var/lib/apt/lists/* + +# SETTING MONGODB VERSION TO WORK WITH +ENV MONGO_MAJOR 3.4 +ENV MONGO_VERSION 3.4.0-rc3 +RUN mkdir /tmp/mongodb +RUN cd /tmp/mongodb +WORKDIR /tmp/mongodb +``` + +--- + + +class: top, left +# **Building the MongoDB container** + +```shell +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-server_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-mongos_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-tools_3.4.0~rc3_amd64.deb +RUN wget https://repo.mongodb.com/apt/ubuntu/dists/xenial/mongodb-enterprise/testing/multiverse/binary-amd64/mongodb-enterprise-shell_3.4.0~rc3_amd64.deb +# UPDATE REPOS AND INSTALL MONGODB WITH DEFINED VERSION +#RUN set -x \ +# && apt-get update +RUN dpkg -i /tmp/mongodb/mongodb-*.deb +RUN mv /etc/mongod.conf /etc/mongod.conf.orig + +# DATA DIRECTORY SETUP +RUN mkdir -p /data/db && chown -R mongodb:mongodb /data/db +# SETTING ENTRYPOINT +COPY docker-entrypoint.sh /entrypoint.sh +COPY mongod_wt.conf /etc/mongod.conf +RUN chown -R mongodb:mongodb /etc/mongod.conf + +ENTRYPOINT ["/entrypoint.sh"] + +# PORT TO BE EXPOSED (inside container, different on host) +EXPOSE 27017 +EXPOSE 27019 +# COMMAND TO RUN WHEN RUNNING THE CONTAINER +CMD ["-f", "/etc/mongod.conf"] +``` +--- + + +class: top, left +# **Building the MongoDB container** + +- **docker build** (build the image) + +```shell +docker build -f mongodb.3.4.0.docker -t mongodb . +``` + + + +-- + +- **docker run** (run the image) + +```shell +docker run -d --hostname mongo1 --name mongo -p 27017:27017 mongodb mongod +``` + + + +--- +class: top, left +# **Both containers now running...** + +- Python + Flask +```shell +docker run --name my_app -p 8080:80 -i -t my_app +[14/Nov/2016:22:54:43] ENGINE Bus STARTING +[14/Nov/2016:22:54:43] ENGINE Started monitor thread 'Autoreloader'. +[14/Nov/2016:22:54:43] ENGINE Started monitor thread '_TimeoutMonitor'. +[14/Nov/2016:22:54:43] ENGINE Serving on http://0.0.0.0 +[14/Nov/2016:22:54:43] ENGINE Bus STARTED +``` + +- MongoDB +```shell + docker run -d --hostname mongo1 --name mongo -p 27017:27017 mongodb mongod +9c0f550b10e30809af5362bf7d4c7d5e91619ac577bf6276147e9c780412122f +``` + +- Checking our containers running: + +```shell +docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +9c0f550b10e3 mongodb "/entrypoint.sh mongo" 36 seconds ago Up 35 seconds 0.0.0.0:27017->27017/tcp, 27019/tcp mongo +29e7c868f6ef my_app "/bin/sh -c 'python s" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp my_app +``` + +--- +class: top, left +# **How is the application connecting to the DB on a different container?** + +```python +app.config['MONGO_HOST'] = '192.168.0.101' +app.config['MONGO_PORT'] = 27017 +app.config['MONGO_DBNAME'] = 'flask_demo' +mongo = PyMongo(app, config_prefix='MONGO') +``` + +```shell +*docker ps --format '{{.Names}}\t\t{{.Command}}\t\t{{.Ports}}' + +my_app "/bin/sh -c 'python s" 0.0.0.0:8080->80/tcp +mongo "/entrypoint.sh mongo" 0.0.0.0:27017->27017/tcp, 27019/tcp +``` + + +--- +class: top, left +# **Multicontainer applications with Docker compose** + +- ### Define and run multi-container Docker applications + +- ### One (or multiple) Compose files to configure your application services + +- ### Deploy with a single command + +- ### Great for ease of deployment in development, testing or staging + +--- +class: top, left + +# **Compose: easy as a three-step process** + +### 1. Define your application environment with a Dockerfile (Done) + +### 2. Define the services for your app in a docker-compose.yml file + +### 3. Run *docker compose up* and it will start running your application based on multiple containers + +--- +class: top, left + +# **2. Define the services for your app in a docker-compose.yaml file** + +```yaml +version: '2' +services: + + my_app: + image: my_app + ports: + - 8080:80 + hostname: my_app + container_name: my_app + labels: + - "service=flask" + + mongodb: + image: mongodb + ports: + - 27017:27017 + hostname: mongod + container_name: mongod + labels: + - "service=mongodb" +``` + +--- +class: top, left + +# **3. Run *docker compose up* and it will start running your application based on multiple containers** + +```shell +$ docker-compose up +Creating my_app +Creating mongod +Attaching to mongod, my_app +my_app | [15/Nov/2016:22:38:38] ENGINE Bus STARTING +my_app | [15/Nov/2016:22:38:38] ENGINE Started monitor thread 'Autoreloader'. +my_app | [15/Nov/2016:22:38:38] ENGINE Started monitor thread '_TimeoutMonitor'. +my_app | [15/Nov/2016:22:38:38] ENGINE Serving on http://0.0.0.0 +my_app | [15/Nov/2016:22:38:38] ENGINE Bus STARTED +``` + +### Our app is now ready at *http://localhost:8080/users* + +--- +class: top, left +# Deploying Docker containers on AWS or other Cloud providers + + +### *How can we easily provision new hosts to be used with Docker?* + + + +## Docker machine + +- Provision new hosts + +- Select the instance configuration + +- Select the OS and install docker + +- Configure our docker client + +
+ +We are now ready to run docker containers on hour new dockerized host +--- +class: top, left + +# Deploying Docker containers on AWS or other Cloud providers + +### *How do we create a new host with Docker machine?* + +```shell +docker-machine create --driver amazonec2 --amazonec2-region eu-west-1 \ + --amazonec2-tags owner,marcob,expire-on,2016-12-15 \ + --amazonec2-root-size 80 --amazonec2-use-ebs-optimized-instance \ + --amazonec2-instance-type m3.2xlarge \ + marcob-swarm-node-1 +``` + +-- +### *Where can we deploy to?* + +Multiple options: + +- VirtualBox +- Amazon AWS, Azure, Digital Ocean, Google Compute Engine +- Openstack, Rackspace, Softlayer +- Vmware (vCloud Air, Fusion, Sphere) + + +--- +class: top, left + +# Example of docker machine on AWS + + +```shell +$ docker-machine create --driver amazonec2 --amazonec2-region eu-west-1 \ + --amazonec2-tags owner,marcob,expire-on,2016-12-15 \ + --amazonec2-root-size 80 --amazonec2-use-ebs-optimized-instance \ + --amazonec2-instance-type m3.2xlarge \ + marcob-swarm-nodeDub1 + +Running pre-create checks... +Creating machine... +(marcob-swarm-nodeDub1) Launching instance... +Waiting for machine to be running, this may take a few minutes... +Detecting operating system of created instance... +Waiting for SSH to be available... +Detecting the provisioner... +Provisioning with ubuntu(systemd)... +Installing Docker... +Copying certs to the local machine directory... +Copying certs to the remote machine... +Setting Docker configuration on the remote daemon... +Checking connection to Docker... +Docker is up and running! +To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env marcob-swarm-nodeDub1 + +``` +--- +class: top, left +# Container orchestration with Docker swarm + +## What is Swarm and what do we use it for? + - Native clustering for Docker + + - Pool of Docker hosts managed as a single virtual Docker host + + - Managed with Docker standard API + + - Use: Scaling to multiple hosts + High availability + + +--- +class: top, left +# Introduction to Swarm mode + +### Starting with Docker v.1.12.0, we have a swarm mode in Docker Engine: + +- Natively manage cluster of Docker Engines + +- Deploy application services to a swarm + +- Some caveats compared to the original Docker swarm + +--- +class: top, left +# Key points on when to use Swarm mode + +### Service: tasks to execute on the workers node + +- **Replicated service**: swarm manager distributes specific # of replicas among nodes (scale) + +- **Global service**: one task per service on every available node + + +-- +class: top, left +### Load balancing + +- Ingress load balancing to expose services + +- Swarm manager distributes requests among services within the cluster + +- https://docs.docker.com/engine/swarm/key-concepts/ + +--- +class: top, left +# Infrastructure used for Docker Swarm + + + + +--- +class: top, left +# Configuring a Docker Swarm + + + +--- +class: top, left +# Orchestrating containers with Docker Swarm + +### Why Docker Swarm? + + + +### Evaluating Container Platforms at Scale +- 1000 EC2 instances in a cluster + +- What is their performance at scale? + +- Can they operate at scale? + +- What does it take to support them at scale? + +From: *https://medium.com/on-docker/evaluating-container-platforms-at-scale-5e7b44d93f2c#.hgbdyhfmp* + + +--- +class: top, left +# Multi-host networking with Swarm + ### How can each container connect to other containers in different hosts? - Swarm overlay container-to-container network + - Using the hostname defined in the Compose file + + + +--- +class: top, left +# Orchestrate containers deployment + +## Filters in Swarm to define deployment rules + +- Two categories: *node filters* and *container configuration filters* + + - **Node filters**: + - Based on characteristics of the Docker host (or Docker daemon) + + - **Container configuration filters**: + - Based on characteristics of containers, or on the availability of images on a host. + + +--- +class: top, left +# Orchestrate containers deployment + +## Labels in Swarm to define deployment rules + + +- Property defined for a given container (i.e. role=primary) + +- Can be used when defining filters: + +- Examples: + - **Contrainst filters**: mark each container with a specific label + + - **Affinity filters**: create attractions between containers (i.e. alter target node based on containers already running) + + +--- +class: top, left +# Case Study: Deploying a MongoDB cluster using Docker containers and cgroups + + + + + + + + + +
Replica Set: Redundancy and fault tolerance
Sharded cluster: Scalability +
+ +Best practices: +- High availability and resource colocation +- Single member of a replica set / server +- Shards as Replica Set + + +--- +class: top, left +# Combining all components for a successful solution + +- **Docker Engine and image**: + - Where and how the `mongod` process runs, including configuration and release to use + +- **Compose**: + - How containers combine together to deploy replica sets or clusters + +- **Docker Machine**: + - To get our AWS nodes setup and ready to run Docker containers + +- **Docker Swarm**: + - How we orchestrate containers for highly available deployments + + + +--- + +class: top, left +# Summary of our deployment + + + +--- + + +class: top, left +# Our dockerized MongoDB cluster + + + +--- + +class: top, left +# Docker image + +If we like, we can push our image to http://hub.docker.com: + +```shell +docker build -f mongodb.3.4.docker -t mongodb:3.4.0-rc3 . +docker tag mongodb:3.4.0-rc3 marcob/mongodb-3.4.0-rc3 +* docker push marcob/mongodb-3.4.0-rc3 +``` + +Once our image is published, running it on other hosts is as easy as: +```shell +docker run -d --hostname mongo1 --name mongo -p 27017:27017 marcob/mongodb-3.4.0-rc3 mongod +``` + +Now we can use this image for all our MongoDB deployments + + +--- +class: top, left +# Docker compose + +**We can define multiple files to address different areas:** + +Labels common to each replica set + +```yaml + mongodb_replset_1: + marcob/mongodb-3.4.0-rc3 + labels: + - "role=mongod" + - "replset=rs1" +``` +Options specific to each container + +```yaml +rs1a: + extends: + file: mdb_base.yaml + service: mongodb_replset_1 + ports: + - 27027:27027 + volumes: + - /mnt/data/rs1:/data + hostname: rs1a + container_name: rs1a + labels: + - "initialstate=primary" +* command: mongod --port 27027 --dbpath /data/ --logpath /data/mongodb/mongod_27027.log --logappend --replSet replset_1 --wiredTigerCacheSizeGB 16 +``` +--- +class: top, left +# Docker compose + +Filters to orchestrate each container deployment +```yaml +rs1a: + extends: + file: mdb_cgroup.yaml + service: rs1a + + environment: + - "affinity:replset!=rs1" + - "affinity:initialstate!=~primary" + - "constraint:node!=marcob-MDBW-swarm-master" +``` +-- + +And also cgroups limits for each container: + +```yaml + rs1a: + extends: + file: mdb_repl.yaml + service: rs1a + cpuset: "0" + mem_limit: "6442450944" + memswap_limit: "6442450944" +``` + +--- + +class: top, left +# Docker, cgroups and MongoDB + +When running any process inside a container, memory usage is a key point to understand + + + + +--- + +class: top, left +# Orchestrating MongoDB containers with Docker Swarm + +Each container tagged with 2 labels... + + +




+-- +...that can be used to orchestrate where we deploy each container: + +--- + +class: top, left +# Summary + +## Docker containers can be really useful: + +- **Speed**: testing and deploying patterns instead of single processes + - Build once, deploy everywhere + + + - **Control**: Resource control and utilization - Key to success with containers - **Agility**: Microservices architectures - Making change less expensive - **Flexibility**: Multi vendor cloud opportunities + - AWS, Azure, Google, IBM, CloudFoundry + +--- + +class: top, left +# How successful customers use MongoDB with Docker + + + +- **Case Studies:** + - www.mongodb.com/blog + +- **"Enabling Microservices - Containers & Orchestration Explained"** + - www.mongodb.com/collateral/microservices-containers-and-orchestration-explained +--- + +class: center, left + +# Now it's YOUR turn! +
+## You can actually try this at home: +# https://github.com/sisteming/mongodb-swarm +# https://github.com/sisteming/Dublin-masterclass +--- + + + +class: center, middle, theBlackBackground +background-image: url(http://github.com/img/cover2.jpg) +background-position: center; +background-repeat: no-repeat; +background-size: contain; + + +# Thank you! + +marco@mongodb.com + +@marcobonezzi diff --git a/feed.xml b/feed.xml old mode 100644 new mode 100755 index cd2321ba79f5d..055c4dda59aa5 --- a/feed.xml +++ b/feed.xml @@ -18,4 +18,4 @@ layout: null {% endfor %} - \ No newline at end of file + diff --git a/images/.directory b/images/.directory new file mode 100644 index 0000000000000..b83ca7e384790 --- /dev/null +++ b/images/.directory @@ -0,0 +1,4 @@ +[Dolphin] +PreviewsShown=true +Timestamp=2017,3,18,16,31,57 +Version=3 diff --git a/images/404.jpg b/images/404.jpg old mode 100644 new mode 100755 index 3e893ff089a9e..166a17ef05d5f Binary files a/images/404.jpg and b/images/404.jpg differ diff --git a/images/BlueMix/blueMix.png b/images/BlueMix/blueMix.png new file mode 100755 index 0000000000000..0797ea2bc6d01 Binary files /dev/null and b/images/BlueMix/blueMix.png differ diff --git a/images/BlueMix/blueMixPaas.png b/images/BlueMix/blueMixPaas.png new file mode 100755 index 0000000000000..6a2db2b99ef71 Binary files /dev/null and b/images/BlueMix/blueMixPaas.png differ diff --git a/images/Boilerplate.png b/images/Boilerplate.png new file mode 100755 index 0000000000000..6cf2911774876 Binary files /dev/null and b/images/Boilerplate.png differ diff --git a/images/HTML.jpg b/images/HTML.jpg new file mode 100755 index 0000000000000..fbf32aff7ae06 Binary files /dev/null and b/images/HTML.jpg differ diff --git a/images/IOTfund.png b/images/IOTfund.png new file mode 100755 index 0000000000000..226fb0f1ad009 Binary files /dev/null and b/images/IOTfund.png differ diff --git a/images/Lego_Color_Bricks.jpg b/images/Lego_Color_Bricks.jpg new file mode 100755 index 0000000000000..704387e5ef555 Binary files /dev/null and b/images/Lego_Color_Bricks.jpg differ diff --git a/images/Rexample.png b/images/Rexample.png new file mode 100755 index 0000000000000..c12a0016a8737 Binary files /dev/null and b/images/Rexample.png differ diff --git a/images/blocks.jpg b/images/blocks.jpg new file mode 100755 index 0000000000000..f84e39f6bfe1c Binary files /dev/null and b/images/blocks.jpg differ diff --git a/images/cloudantsync.png b/images/cloudantsync.png new file mode 100755 index 0000000000000..6a85cbd0913a7 Binary files /dev/null and b/images/cloudantsync.png differ diff --git a/images/cloudantsync1.png b/images/cloudantsync1.png new file mode 100755 index 0000000000000..5704d75e64278 Binary files /dev/null and b/images/cloudantsync1.png differ diff --git a/images/cloudantsync2.png b/images/cloudantsync2.png new file mode 100755 index 0000000000000..76656b8577fde Binary files /dev/null and b/images/cloudantsync2.png differ diff --git a/images/config.png b/images/config.png old mode 100644 new mode 100755 index 0010f915cd798..bdaa9c2f35e52 Binary files a/images/config.png and b/images/config.png differ diff --git a/images/dashdb-announce.jpg b/images/dashdb-announce.jpg new file mode 100755 index 0000000000000..69a44d0352949 Binary files /dev/null and b/images/dashdb-announce.jpg differ diff --git a/images/dashdb_cat.png b/images/dashdb_cat.png new file mode 100755 index 0000000000000..0f9cf1a037a72 Binary files /dev/null and b/images/dashdb_cat.png differ diff --git a/images/dashdb_querydata.png b/images/dashdb_querydata.png new file mode 100755 index 0000000000000..525341065cd70 Binary files /dev/null and b/images/dashdb_querydata.png differ diff --git a/images/dashdbdesc.png b/images/dashdbdesc.png new file mode 100755 index 0000000000000..1b2fdcd999d3b Binary files /dev/null and b/images/dashdbdesc.png differ diff --git a/images/datamgmt.png b/images/datamgmt.png new file mode 100755 index 0000000000000..a8964507e263d Binary files /dev/null and b/images/datamgmt.png differ diff --git a/images/docker-logo.jpeg b/images/docker-logo.jpeg new file mode 100755 index 0000000000000..afb56475d3143 Binary files /dev/null and b/images/docker-logo.jpeg differ diff --git a/images/docker-logo.png b/images/docker-logo.png new file mode 100755 index 0000000000000..1e2a79b0ef70c Binary files /dev/null and b/images/docker-logo.png differ diff --git a/images/docker.png b/images/docker.png new file mode 100755 index 0000000000000..948c0bb1cae03 Binary files /dev/null and b/images/docker.png differ diff --git a/images/dockerBluemix2.png b/images/dockerBluemix2.png new file mode 100755 index 0000000000000..3d20011297ea9 Binary files /dev/null and b/images/dockerBluemix2.png differ diff --git a/images/dockerbluemix.png b/images/dockerbluemix.png new file mode 100755 index 0000000000000..6cad3858342cd Binary files /dev/null and b/images/dockerbluemix.png differ diff --git a/images/dockerbooth.jpeg b/images/dockerbooth.jpeg new file mode 100755 index 0000000000000..86dde0b6dc06a Binary files /dev/null and b/images/dockerbooth.jpeg differ diff --git a/images/dockersticker.png b/images/dockersticker.png new file mode 100755 index 0000000000000..0137a27072bd5 Binary files /dev/null and b/images/dockersticker.png differ diff --git a/images/favicon.ico b/images/favicon.ico new file mode 100755 index 0000000000000..1fb8f54821b9e Binary files /dev/null and b/images/favicon.ico differ diff --git a/images/favicon.png b/images/favicon.png new file mode 100755 index 0000000000000..965c55129154c Binary files /dev/null and b/images/favicon.png differ diff --git a/images/first-post.png b/images/first-post.png old mode 100644 new mode 100755 index 0207022e522bb..e6edcc1832b8e Binary files a/images/first-post.png and b/images/first-post.png differ diff --git a/images/gettingstarted.png b/images/gettingstarted.png new file mode 100644 index 0000000000000..69d8e655f352b Binary files /dev/null and b/images/gettingstarted.png differ diff --git a/images/gitguide.png b/images/gitguide.png new file mode 100644 index 0000000000000..59f6323bfb9e0 Binary files /dev/null and b/images/gitguide.png differ diff --git a/images/iot.png b/images/iot.png new file mode 100755 index 0000000000000..68826f91784a6 Binary files /dev/null and b/images/iot.png differ diff --git a/images/jekyll-logo.png b/images/jekyll-logo.png old mode 100644 new mode 100755 index c386bda8718d8..66c09a6286a72 Binary files a/images/jekyll-logo.png and b/images/jekyll-logo.png differ diff --git a/images/jekyll-now-theme-screenshot.jpg b/images/jekyll-now-theme-screenshot.jpg old mode 100644 new mode 100755 index 81847a1b41043..fa73e7166e976 Binary files a/images/jekyll-now-theme-screenshot.jpg and b/images/jekyll-now-theme-screenshot.jpg differ diff --git a/images/jekyll.jpeg b/images/jekyll.jpeg new file mode 100755 index 0000000000000..8fbbde02c826c Binary files /dev/null and b/images/jekyll.jpeg differ diff --git a/images/jekyll.png b/images/jekyll.png new file mode 100755 index 0000000000000..6617e1ad2ef89 Binary files /dev/null and b/images/jekyll.png differ diff --git a/images/kitematic.png b/images/kitematic.png new file mode 100755 index 0000000000000..1ad5a67e0e87a Binary files /dev/null and b/images/kitematic.png differ diff --git a/images/kitematicApp.png b/images/kitematicApp.png new file mode 100755 index 0000000000000..11b0bdf08b907 Binary files /dev/null and b/images/kitematicApp.png differ diff --git a/images/kitematicNewC.png b/images/kitematicNewC.png new file mode 100755 index 0000000000000..7178f856eed5c Binary files /dev/null and b/images/kitematicNewC.png differ diff --git a/images/kitematic_cont.png b/images/kitematic_cont.png new file mode 100755 index 0000000000000..c012d7ccda0b1 Binary files /dev/null and b/images/kitematic_cont.png differ diff --git a/images/mongodb-logo-rgb.jpeg b/images/mongodb-logo-rgb.jpeg new file mode 100644 index 0000000000000..4c39bea5dfb0f Binary files /dev/null and b/images/mongodb-logo-rgb.jpeg differ diff --git a/images/mongodb_community.png b/images/mongodb_community.png new file mode 100644 index 0000000000000..6196317fb84bf Binary files /dev/null and b/images/mongodb_community.png differ diff --git a/images/mongolab.png b/images/mongolab.png new file mode 100644 index 0000000000000..e62901259323c Binary files /dev/null and b/images/mongolab.png differ diff --git a/images/mongolab_detail.png b/images/mongolab_detail.png new file mode 100644 index 0000000000000..26edda364f342 Binary files /dev/null and b/images/mongolab_detail.png differ diff --git a/images/mongolab_detail2.png b/images/mongolab_detail2.png new file mode 100644 index 0000000000000..ae702a828283b Binary files /dev/null and b/images/mongolab_detail2.png differ diff --git a/images/nodered_model.png b/images/nodered_model.png new file mode 100755 index 0000000000000..a2066c857c878 Binary files /dev/null and b/images/nodered_model.png differ diff --git a/images/pi_board_big.jpg b/images/pi_board_big.jpg new file mode 100755 index 0000000000000..7f2d29c083aa9 Binary files /dev/null and b/images/pi_board_big.jpg differ diff --git a/images/sisteming-logo.jpeg b/images/sisteming-logo.jpeg new file mode 100755 index 0000000000000..890ebf2702f24 Binary files /dev/null and b/images/sisteming-logo.jpeg differ diff --git a/images/sisteming-logo.png b/images/sisteming-logo.png new file mode 100755 index 0000000000000..c93a6b23a476d Binary files /dev/null and b/images/sisteming-logo.png differ diff --git a/images/step1.gif b/images/step1.gif old mode 100644 new mode 100755 index 6cfd490eb7831..cac698809a308 Binary files a/images/step1.gif and b/images/step1.gif differ diff --git a/img/balena.png b/img/balena.png new file mode 100644 index 0000000000000..00ecd053eabd2 Binary files /dev/null and b/img/balena.png differ diff --git a/img/cgroup-docker.png b/img/cgroup-docker.png new file mode 100644 index 0000000000000..b6e80ad99c496 Binary files /dev/null and b/img/cgroup-docker.png differ diff --git a/img/cgroup.png b/img/cgroup.png new file mode 100644 index 0000000000000..00276dad336f6 Binary files /dev/null and b/img/cgroup.png differ diff --git a/img/cluster.png b/img/cluster.png new file mode 100644 index 0000000000000..11d763fb054a9 Binary files /dev/null and b/img/cluster.png differ diff --git a/img/compose.png b/img/compose.png new file mode 100644 index 0000000000000..2c5a41826b472 Binary files /dev/null and b/img/compose.png differ diff --git a/img/container.png b/img/container.png new file mode 100644 index 0000000000000..f8a26d2d4bd56 Binary files /dev/null and b/img/container.png differ diff --git a/img/cover.jpg b/img/cover.jpg new file mode 100644 index 0000000000000..d634fdb666463 Binary files /dev/null and b/img/cover.jpg differ diff --git a/img/cover2.jpg b/img/cover2.jpg new file mode 100644 index 0000000000000..282427affc773 Binary files /dev/null and b/img/cover2.jpg differ diff --git a/img/customers.png b/img/customers.png new file mode 100644 index 0000000000000..41d70847603af Binary files /dev/null and b/img/customers.png differ diff --git a/img/dev.png b/img/dev.png new file mode 100644 index 0000000000000..5b7e7e4f49117 Binary files /dev/null and b/img/dev.png differ diff --git a/img/docker-intro.png b/img/docker-intro.png new file mode 100644 index 0000000000000..17afd590b703a Binary files /dev/null and b/img/docker-intro.png differ diff --git a/img/docker-machine.png b/img/docker-machine.png new file mode 100644 index 0000000000000..0e1ef6eb67a05 Binary files /dev/null and b/img/docker-machine.png differ diff --git a/img/engine.png b/img/engine.png new file mode 100644 index 0000000000000..dcb17241a0520 Binary files /dev/null and b/img/engine.png differ diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000000000..2d24861959908 Binary files /dev/null and b/img/logo.png differ diff --git a/img/machine.png b/img/machine.png new file mode 100644 index 0000000000000..c999c4701dc77 Binary files /dev/null and b/img/machine.png differ diff --git a/img/marcoBonezzi.png b/img/marcoBonezzi.png new file mode 100644 index 0000000000000..c877a1221d8c3 Binary files /dev/null and b/img/marcoBonezzi.png differ diff --git a/img/mdb_swarm.png b/img/mdb_swarm.png new file mode 100644 index 0000000000000..5bf8a1f7a0d1d Binary files /dev/null and b/img/mdb_swarm.png differ diff --git a/img/memory.png b/img/memory.png new file mode 100644 index 0000000000000..482acec9bd11f Binary files /dev/null and b/img/memory.png differ diff --git a/img/mongodb_arq.png b/img/mongodb_arq.png new file mode 100644 index 0000000000000..39eef68ee11f0 Binary files /dev/null and b/img/mongodb_arq.png differ diff --git a/img/prod.png b/img/prod.png new file mode 100644 index 0000000000000..ed61e6937b8d4 Binary files /dev/null and b/img/prod.png differ diff --git a/img/replicaset.png b/img/replicaset.png new file mode 100644 index 0000000000000..b36963f49e805 Binary files /dev/null and b/img/replicaset.png differ diff --git a/img/rs.png b/img/rs.png new file mode 100644 index 0000000000000..1aad1db77e886 Binary files /dev/null and b/img/rs.png differ diff --git a/img/swarm.png b/img/swarm.png new file mode 100644 index 0000000000000..70709a599ae4c Binary files /dev/null and b/img/swarm.png differ diff --git a/img/swarm_arq.png b/img/swarm_arq.png new file mode 100644 index 0000000000000..1ec8f430c538c Binary files /dev/null and b/img/swarm_arq.png differ diff --git a/img/swarm_arq_mdb.png b/img/swarm_arq_mdb.png new file mode 100644 index 0000000000000..c9a46c2976cfc Binary files /dev/null and b/img/swarm_arq_mdb.png differ diff --git a/img/swarm_comp.png b/img/swarm_comp.png new file mode 100644 index 0000000000000..214ff77940955 Binary files /dev/null and b/img/swarm_comp.png differ diff --git a/img/swarm_net.png b/img/swarm_net.png new file mode 100644 index 0000000000000..ad28991eea8b2 Binary files /dev/null and b/img/swarm_net.png differ diff --git a/img/swarm_steps.png b/img/swarm_steps.png new file mode 100644 index 0000000000000..77615e125cbe4 Binary files /dev/null and b/img/swarm_steps.png differ diff --git a/img/why.png b/img/why.png new file mode 100644 index 0000000000000..aa47b774c8aaf Binary files /dev/null and b/img/why.png differ diff --git a/import b/import new file mode 100755 index 0000000000000..1caffabddfff3 --- /dev/null +++ b/import @@ -0,0 +1,9 @@ +#!/Users/marcobon/.rvm/rubies/ruby-2.1.4/bin/ruby + +require "jekyll-import"; + +JekyllImport::Importers::WordpressDotCom.run({ + "source" => "/Users/marcobon/Downloads/wordpress.xml", + "no_fetch_images" => false, + "assets_folder" => "assets" + }) diff --git a/index.html b/index.html old mode 100644 new mode 100755 index 0e3e137dded24..60c7f4030fb3c --- a/index.html +++ b/index.html @@ -4,15 +4,16 @@
{% for post in site.posts %} -
- +
+

{{ post.title }}

- {{ post.content | truncatewords:40}} + {{ post.content | truncatewords:60}} + {{ post.excerpt }}
- + Read More
{% endfor %} -
\ No newline at end of file +
diff --git a/style.scss b/style.scss old mode 100755 new mode 100644 index 155e32c33ef41..86d1090201d31 --- a/style.scss +++ b/style.scss @@ -5,8 +5,8 @@ // IMPORTS // -@import "http://github.com/_reset"; -@import "http://github.com/_variables"; +@import "http://github.com/reset"; +@import "http://github.com/variables"; // Syntax highlighting @import is at the bottom of this file /**************/ @@ -18,7 +18,7 @@ html { } body { - background: $white; + background: $white; font: 18px/1.4 $helvetica; color: $darkGray; } @@ -34,7 +34,7 @@ h1, h2, h3, h4, h5, h6 { font-family: $helveticaNeue; color: $darkerGray; font-weight: bold; - + line-height: 1.7; margin: 1em 0 15px; padding: 0; @@ -43,23 +43,23 @@ h1, h2, h3, h4, h5, h6 { line-height: 1.4; } } - -h1 { + +h1 { font-size: 30px; a { color: inherit; } } -h2 { +h2 { font-size: 24px; } -h3 { +h3 { font-size: 20px; } -h4 { +h4 { font-size: 18px; color: $gray; } @@ -71,7 +71,7 @@ p { a { color: $blue; text-decoration: none; - cursor: pointer; + cursor: pointer; &:hover, &:active { color: $blue; } @@ -110,6 +110,11 @@ img { max-width: 100%; } +// Fixes images in popup boxes from Google Translate +.gmnoprint img { + max-width: none; +} + .date { font-style: italic; color: $gray; @@ -152,7 +157,7 @@ img { .masthead { padding: 20px 0; border-bottom: 1px solid $lightGray; - + @include mobile { text-align: center; } @@ -189,7 +194,7 @@ img { margin: 0; color: $darkGray; cursor: pointer; - font-family: $helveticaNeue; + font-family: $helveticaNeue; font-weight: 300; font-size: 28px; letter-spacing: 1px; @@ -199,7 +204,7 @@ img { margin: -5px 0 0 0; color: $gray; font-size: 16px; - + @include mobile { margin: 3px 0; } @@ -208,9 +213,9 @@ img { nav { float: right; margin-top: 23px; // @TODO: Vertically middle align - font-family: $helveticaNeue; + font-family: $helveticaNeue; font-size: 18px; - + @include mobile { float: none; margin-top: 9px; @@ -246,7 +251,7 @@ nav { border-bottom: none; } -.post { +.post { blockquote { margin: 1.8em .8em; border-left: 2px solid $gray; @@ -280,4 +285,5 @@ footer { // Settled on moving the import of syntax highlighting to the bottom of the CSS // ... Otherwise it really bloats up the top of the CSS file and makes it difficult to find the start -@import "http://github.com/_highlights"; \ No newline at end of file +@import "http://github.com/highlights"; +@import "http://github.com/svg-icons";