diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..12eeaea
Binary files /dev/null and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 45c1505..247e2b5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-_site
-.sass-cache
-.jekyll-metadata
+_site/
+.sass-cache/
+.jekyll-cache/
\ No newline at end of file
diff --git a/.vscode/cSpell.json b/.vscode/cSpell.json
deleted file mode 100644
index ad5f04d..0000000
--- a/.vscode/cSpell.json
+++ /dev/null
@@ -1,15 +0,0 @@
-// cSpell Settings
-{
- // Version of the setting file. Always 0.1
- "version": "0.1",
- // language - current active spelling language
- "language": "en",
- // words - list of words to be always considered correct
- "words": [],
- // flagWords - list of words to be always considered incorrect
- // This is useful for offensive words and common spelling errors.
- // For example "hte" should be "the"
- "flagWords": [
- "hte"
- ]
-}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 125572f..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "cSpell.enabled": true,
- "cSpell.enabledLanguageIds": [
- "c",
- "cpp",
- "csharp",
- "go",
- "javascript",
- "javascriptreact",
- "json",
- "latex",
- "markdown",
- "php",
- "plaintext",
- "python",
- "text",
- "typescript",
- "typescriptreact",
- "yml"
- ]
-}
\ No newline at end of file
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..78efb7c
--- /dev/null
+++ b/404.html
@@ -0,0 +1,23 @@
+---
+layout: default
+title: Page Not Found
+description: Sorry – the page your looking for doesn't exist.
+featured_image: /images/demo/about.jpg
+---
+
+
+
+
+
+
+
+
+
+
Page not found.
+
Sorry – the page your looking for doesn't exist.
+
Perhaps you typed the URL incorrectly, or it may have moved.
+
+
\ No newline at end of file
diff --git a/CNAME b/CNAME
deleted file mode 100644
index 62994c4..0000000
--- a/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-gavindraper.com
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index c97366f..644e340 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,32 +1,8 @@
-source "https://rubygems.org"
-ruby RUBY_VERSION
+source 'https://rubygems.org'
-# Hello! This is where you manage which Jekyll version is used to run.
-# When you want to use a different version, change it below, save the
-# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
-#
-# bundle exec jekyll serve
-#
-# This will help ensure the proper Jekyll version is running.
-# Happy Jekylling!
-gem "jekyll", ">= 3.6.3"
+gem 'jekyll', '3.8.5'
-gem "jekyll-redirect-from"
-# This is the default theme for new Jekyll sites. You may change this to anything you like.
-gem "minima", "~> 2.0"
-
-# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
-# uncomment the line below. To upgrade, run `bundle update github-pages`.
-# gem "github-pages", group: :jekyll_plugins
-
-gem "jekyll-paginate"
-
-# If you have any plugins, put them here!
group :jekyll_plugins do
- gem "jekyll-feed", "~> 0.6"
-end
-
-# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
-gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
-
-gem "jekyll-plantuml"
+ gem 'jekyll-paginate'
+ gem 'jekyll-sitemap'
+end
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index bf73224..b38dd71 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,15 +1,15 @@
GEM
remote: https://rubygems.org/
specs:
- addressable (2.5.2)
- public_suffix (>= 2.0.2, < 4.0)
+ addressable (2.7.0)
+ public_suffix (>= 2.0.2, < 5.0)
colorator (1.1.0)
- concurrent-ruby (1.1.4)
+ concurrent-ruby (1.1.6)
em-websocket (0.5.1)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
eventmachine (1.2.7)
- ffi (1.9.25)
+ ffi (1.12.2)
forwardable-extended (2.6.0)
http_parser.rb (0.6.0)
i18n (0.9.5)
@@ -27,36 +27,28 @@ GEM
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
- jekyll-feed (0.11.0)
- jekyll (~> 3.3)
jekyll-paginate (1.1.0)
- jekyll-plantuml (1.3.3)
- jekyll (> 2.0)
- jekyll-redirect-from (0.14.0)
- jekyll (~> 3.3)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
- jekyll-watch (2.1.2)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-watch (2.2.1)
listen (~> 3.0)
kramdown (1.17.0)
- liquid (4.0.1)
- listen (3.1.5)
- rb-fsevent (~> 0.9, >= 0.9.4)
- rb-inotify (~> 0.9, >= 0.9.7)
- ruby_dep (~> 1.2)
+ liquid (4.0.3)
+ listen (3.2.1)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
- minima (2.1.1)
- jekyll (~> 3.3)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
- public_suffix (3.0.3)
- rb-fsevent (0.10.3)
- rb-inotify (0.10.0)
+ public_suffix (4.0.5)
+ rb-fsevent (0.10.4)
+ rb-inotify (0.10.1)
ffi (~> 1.0)
- rouge (3.3.0)
- ruby_dep (1.5.0)
- safe_yaml (1.0.4)
- sass (3.7.2)
+ rouge (3.19.0)
+ safe_yaml (1.0.5)
+ sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
@@ -66,16 +58,9 @@ PLATFORMS
ruby
DEPENDENCIES
- jekyll (>= 3.6.3)
- jekyll-feed (~> 0.6)
+ jekyll (= 3.8.5)
jekyll-paginate
- jekyll-plantuml
- jekyll-redirect-from
- minima (~> 2.0)
- tzinfo-data
-
-RUBY VERSION
- ruby 2.5.1p57
+ jekyll-sitemap
BUNDLED WITH
- 1.16.1
+ 2.1.4
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index e69de29..0000000
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index e8c3c2d..0000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 Parker Moore
-
-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 the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/Projects/index.html b/Projects/index.html
new file mode 100644
index 0000000..b9570a0
--- /dev/null
+++ b/Projects/index.html
@@ -0,0 +1,52 @@
+---
+layout: default
+title: Projects
+description: personal websites. Personal is the perfect theme for developers, designers and other creatives.
+featured_image: /images/hero-images/clean-desk.jpg
+---
+
+
+
+
+
+
+
+
+
+
Projects That Were Going To Change The World
+
Mostly unfinished, mostly broken, might find the odd gem ;)
+
+ {% include socials.html %}
+
+
+
+
+
+
+
+
+
+ {% for project in site.projects reversed %}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index b66b6a1..0000000
--- a/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-# gavindraper.com Blog #
-See a mistake? Send me a pull request :)
diff --git a/_LICENSE.md b/_LICENSE.md
new file mode 100644
index 0000000..8261d80
--- /dev/null
+++ b/_LICENSE.md
@@ -0,0 +1,45 @@
+# Personal by JekyllThemes.io – License
+
+This license grants you, the purchaser, an ongoing, non-exclusive, worldwide license to make use of the theme. Read the rest of this license for the details that apply to your use of the theme.
+
+---
+
+## Using the theme
+
+You are licensed to use the theme to create one single End Product for yourself or for one client (a “single application”), and the End Product can be distributed for Free.
+
+The End Product is a customised implementation of the theme. For example: the end product is the final website customised with your content.
+
+---
+
+## What you CAN do with the theme
+
+You can create one End Product for a client, and you can transfer that single End Product to your client for any fee. This license is then transferred to your client.
+
+You can make any number of copies of the single End Product, as long as the End Product is distributed for Free.
+
+You can modify or manipulate the theme. You can combine the theme with other works and make a derivative work from it. The resulting works are subject to the terms of this license.
+
+---
+
+## What you CAN'T do with the theme
+
+You can’t Sell the End Product, except to one client. (If you or your client want to Sell the End Product, you will need an Extended License – send an email to hello@jekyllthemes.io to discuss this with us.)
+
+You can’t re-distribute the theme as stock, in a tool or template, or with source files. You can’t do this with the theme either on its own or bundled with others, and even if you modify the theme. You can’t re-distribute or make available the theme as-is or with superficial modifications. These things are not allowed even if the re-distribution is for Free.
+
+For example: You can’t purchase the theme, convert it to a WordPress theme and sell or give it to more than one client. You can’t license the theme and then make it available as-is on your website for your users to download.
+
+You can’t use the theme in any application allowing an end user to customise a digital or physical product to their specific needs, such as an “on demand”, “made to order” or “build it yourself” application. You can use the theme in this way only if you purchase a separate license for each final product incorporating the theme that is created using the application.
+
+---
+
+## Other license terms
+
+Some components of the theme are sourced by the author from elsewhere and different license terms may apply to the component, such as someone else’s license or an open source or creative commons license. The other license will apply to that component instead of this license. This license will apply to the rest of the theme.
+
+You can only use the theme for lawful purposes.
+
+This license can be terminated if you breach it. If that happens, you must stop making copies of or distributing the End Product until you remove the theme from it.
+
+JekyllThemes.io retains ownership of the theme, but grants you the license on these terms.
\ No newline at end of file
diff --git a/_README.md b/_README.md
new file mode 100644
index 0000000..442ddc6
--- /dev/null
+++ b/_README.md
@@ -0,0 +1,166 @@
+# Personal by JekyllThemes.io – Instructions
+
+If you have any questions or feedback about the theme, don't hesitate to reach out to hello@jekyllthemes.io for 1-to-1 support direct from the developers.
+
+---
+
+## Getting started
+
+Copy the theme files to your website directory.
+
+To run the theme locally, navigate to the theme directory in your terminal and run `bundle install` to install the theme's dependencies. Then run `jekyll serve` to start the Jekyll server.
+
+---
+
+## Jekyll basics
+
+If you're not familiar with how Jekyll works, check out [jekyllrb.com](https://jekyllrb.com/) for all the details,
+or read up on just the basics of [front matter](https://jekyllrb.com/docs/frontmatter/), [writing posts](https://jekyllrb.com/docs/posts/), and [creating pages](https://jekyllrb.com/docs/pages/).
+
+---
+
+## Customizing the theme
+
+Personal comes packed with lots of options to let you customize the theme.
+
+---
+
+### The `_config.yml` file
+
+The main things you might need to change here are:
+
+`site: Personal Jekyll Theme` – change this to your website's name
+
+`url:` – the full URL that your site will be hosted at, e.g. https://your-domain.com
+
+`baseurl:` – add a base URL here if you will be publishing the site inside a folder, e.g. https://your-domain.com/project/ – or if you're hosting it as a 'project page' on GitHub Pages. Example: `baseurl: /project`
+
+When using baseurl, you should reference images in your post/project Frontmatter **without** the baseurl, e.g. `/images/image.jpg` but images inside the Markdown content **should include** the baseurl snippet, e.g. `{{site.baseurl}}/images/image.jpg`
+
+`paginate: 6` – change this to set the number of blog posts on each page
+
+You can also change more advanced things here like the path names, collections etc. You do not need to change any of these to achieve the same look as the demo, so best to leave everything else unless you are confident.
+
+---
+
+### The `settings.yml` file
+
+You'll find this inside the `_data` folder – this is where you can set all of the theme options.
+
+**Basic settings**
+
+`site_title` – change this to your website's title. This shows up in the browser's title bar, and in the header and footer.
+`favicon_image` – change this to the location of your favicon image, which shows up in the browser's title bar.
+
+**Header settings**
+
+`logo_image` – if you'd like to use a logo instead of plain text title in your header, enter the link to it here.
+`logo_width` – set the width (in pixels) that your logo should appear at. This is useful for adding retina display support – for example if your original image is 400px wide, you could set this value to `200` to display a retina-ready image.
+
+**Menu settings**
+
+This allows you to set the links inside your menu. Add each one as a list item with a `title` and `url`. When hosting on GitHub Pages, make sure you leave a trailing `/` at the end of links to category pages (e.g. `/blog/` or `/projects/`).
+
+**Footer settings**
+
+`footer_tagline` – sets the text that dispays underneath the site title/logo in the footer.
+
+**Hero settings**
+
+`overlay_opacity` – this sets the opacity of the overlay when you hover over grid items (portfolio and blog posts). Use a decimal value here, e.g. `0.8` will give you 80% opacity on hover.
+
+**Post settings**
+
+`grid_spacing` – this sets the amount of spacing (in pixels) between each image in an image grid layout.
+
+**Contact settings**
+
+The theme comes with a pre-made contact form that you can use with [Formspree](https://formspree.io/create/jekyllthemes), which is free for up to 50 submissions per month. They also have two great paid plans that offer advanced features. Use the link above to set up your account and then paste the 'endpoint' integration code into the theme settings:
+
+`form_action` – this is the form endpoint attribute that you get from FormSpree, for example `https://formspree.io/abcdefgh`
+`confirmation_url` – by default the user is shown a default Formspree thank you page. If you have a premium plan, you can use this setting to provide an alternative URL for that page, for example `/thanks` – we have included a basic thank you page with the theme.
+`email_subject` – choose the subject of the email you receive from Formspree.
+`send_button_text` – change the text used on the form submit button.
+
+Hint: you can add the contact form to any page of your site using the include – `{% include contact-form.html %}` – for example if you wanted to have the contact form on your About page.
+
+**Social settings**
+
+Here you can add links to your profiles on social networks, and they'll be shown in the footer. Simply add your URL next to the ones you want to show.
+
+**Color settings**
+
+Here you can set all the different colors used by the theme. Try them out and find the color pallette that works for you!
+
+**Font settings**
+
+`font_embed` – add an embed code from an external font service. This allows you to use services like Google Fonts or Typekit.
+`title_font` – set the CSS name for the font used on titles.
+`body_font` – set the CSS anme for the font used for body text.
+`regular_weight` – set the font weight for regular styled text.
+`bold_weight` – set the font weight for bold styled text.
+
+Below these options, you'll see options for each typographical element used in the theme. For each, you can set the following options:
+
+`small_size` – the size (in pixels) used for this element on small size screens like mobile phones.
+`medium_size` – the size (in pixels) used for this element on medium size screens like tablets.
+`large_size` – the size (in pixels) used for this element on largers screens like laptops and desktops.
+`weight` – the font weight for this element.
+`letter_spacing` – the letter spacing (in ems) for this element.
+`line_height` – the line-height (in decimals) for this element.
+
+**Advanced options**
+
+`ajax_loading` – use `true` to enable Ajax loading throughout your site. Use `false` to disable it and load pages normally – this can be helpful if you're adding plugins or other javascript to your pages.
+`analytics_code` – use this option to add your Google Analytics code.
+`custom_styles` – use this option to add custom CSS styles to the theme.
+`header_js` – use this option to insert javascript into the header of the page.
+`footer_js` – use this option to insert javascript at the end of the page.
+
+---
+
+### Images
+
+Inside the `/images/` folder you'll find a few images included with the theme.
+
+The images in the `/demo/` subfolder are used in the demo project, post and page – you delete those if you don't need them.
+
+`favicon.png` – you should replace this with the favicon image you'd like to use for your website.
+
+`social.jpg` – this image is used by default as the meta image on the Home and Blog pages. This shows up on social shares of your page, for example Facebook or Twitter – so you should change it to a relevant image, or change the image URL in that page's Front Matter (see below).
+
+---
+
+## Main pages
+
+The theme comes with some pages set up ready for your content.
+
+### The home page – `/index.html`
+
+This is your website home page. You can edit some details in the Front Matter at the top of the page:
+
+`title` – this sets the page title, which shows up in the browser's title bar and on search engine results, social shares etc.
+`description` – this sets the page meta description, which shows up on search engine results, social shares etc.
+`featured_image` – this sets the header image for the page, as well as the meta image, which shows up on social shares.
+
+Below the Front Matter is the code for the page. You should edit this to set your title and intro text. Hint - the main
tag respects line breaks on tablet size screens and larger. This is useful if you want to prevent typographic widows.
+
+### The blog page – `/blog/index.html`
+
+This is the blog listing page, which shows all your blog posts. You can edit the same things as on the home page to customise it for your website.
+
+---
+
+## Projects, posts and pages
+
+These control the main content of your website, and are found inside the `_projects`, `_posts` and `_pages` folders.
+
+Take a look at the demo content inside each folder for full descriptions on what you can do inside these, and to use as a template for your own content.
+
+---
+
+## Any questions?
+
+If you have any questions or feedback about the theme, don't hesitate to reach out to hello@jekyllthemes.io for 1-to-1 support direct from the developers!
+
+🤘
\ No newline at end of file
diff --git a/_config.yml b/_config.yml
index 49a0c3c..761f912 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,42 +1,52 @@
-# Welcome to Jekyll!
-#
-# This config file is meant for settings that affect your whole blog, values
-# which you are expected to set up once and rarely edit after that. If you find
-# yourself editing this file very often, consider using Jekyll's data files
-# feature for the data you need to update frequently.
-#
-# For technical reasons, this file is *NOT* reloaded automatically when you use
-# 'bundle exec jekyll serve'. If you change this file, please restart the server process.
-
-# Site settings
-# These are used to personalize your new site. If you look in the HTML files,
-# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
-# You can create any custom variable you would like, and they will be accessible
-# in the templates via {{ site.myvariable }}.
-title: Gavin Draper - SQL Server Blog and Related Ramblings
-name: Gavin Draper - SQL Server Blog and Related Ramblings
-description: > # this means to ignore newlines until "baseurl:"
- Father, Developer, DBA, Extreme Sports Enthusiast
-baseurl: "" # the subpath of your site, e.g. /blog
-url: "https://gavindraper.com" # the base hostname & protocol for your site, e.g. http://example.com
-twitter_username: gavdraper
-github_username: gavdraper
-linkedin_username: gavdraper
-permalink: /:year/:month/:day/:title/
-highlighter: rouge
-include: ['tags']
-paginate: 3
-# Build settings
+site: Gavin Draper
+
+url: "https://gavindraper.com"
+baseurl:
+
+collections:
+ pages:
+ output: true
+ permalink: /:name
+ posts:
+ output: true
+ permalink: /:year/:month/:day/:title/
+ projects:
+ output: true
+ permalink: /project/:slug
+
+defaults:
+ - scope:
+ path: ""
+ values:
+ layout: "default"
+ - scope:
+ path: ""
+ type: "pages"
+ values:
+ layout: "page"
+ - scope:
+ path: ""
+ type: "posts"
+ values:
+ layout: "post"
+ - scope:
+ path: ""
+ type: "projects"
+ values:
+ layout: "project"
+
markdown: kramdown
+
+kramdown:
+ input: GFM
+ syntax_highlighter: rouge
+
+sass:
+ style: compressed
+
plugins:
- - jekyll-feed
- - jekyll-redirect-from
- jekyll-paginate
-exclude:
- - Gemfile
- - Gemfile.lock
-# Disqus Comments
-disqus:
- # Leave shortname blank to disable comments site-wide.
- # Disable comments for any post by adding `comments: false` to that post's YAML Front Matter.
- shortname: gavindraper
\ No newline at end of file
+ - jekyll-sitemap
+
+paginate: 6
+paginate_path: "/page:num/"
diff --git a/_data/settings.yml b/_data/settings.yml
new file mode 100644
index 0000000..3b61569
--- /dev/null
+++ b/_data/settings.yml
@@ -0,0 +1,158 @@
+basic_settings:
+ site_title: Gavin Draper
+ favicon_image: /images/favicon.ico
+
+header_settings:
+ logo_image:
+ logo_width: 200
+
+menu_settings:
+ menu_items:
+ - title: "Blog"
+ url: "/"
+ - title: "Projects"
+ url: "/projects/"
+ - title: "About"
+ url: "/about"
+ - title: "Contact"
+ url: "/contact"
+
+footer_settings:
+ footer_tagline: Gavin Draper's Blog
+
+hero_settings:
+ overlay_opacity: 0.8
+
+post_settings:
+ grid_spacing: 10
+
+contact_settings:
+ form_action: "https://formspree.io/mdowkvog"
+ confirmation_url: "/thanks"
+ email_subject: "Contact form submission"
+ send_button_text: "Send Message"
+
+social_settings:
+ facebook_url: ""
+ twitter_url: ""
+ instagram_url: ""
+ snapchat_url: ""
+ youtube_url: ""
+ google-plus_url: ""
+ vimeo_url: ""
+ pinterest_url: ""
+ medium_url: ""
+ quora_url: ""
+ amazon_url: ""
+ apple_url: ""
+ android_url: ""
+ tumblr_url: ""
+ dribbble_url: ""
+ behance_url: ""
+ deviantart_url: ""
+ github_url: ""
+ reddit_url: ""
+ flickr_url: ""
+ etsy_url: ""
+ kickstarter_url: ""
+ soundcloud_url: ""
+ spotify_url: ""
+ bandcamp_url: ""
+ linkedin_url: ""
+
+color_settings:
+ background_color: "#ffffff"
+ background_alt_color: "#f4f5f6"
+ text_dark_color: "#2A2F36"
+ text_medium_color: "#6C7A89"
+ text_light_color: "#ABB7B7"
+ accent_color: "#3498db"
+ border_color: "#dddddd"
+ hero_background_color: "#132930"
+ hero_text_color: "#ffffff"
+ error_color: "#D64541"
+
+font_settings:
+ font_embed: ''
+ title_font: '"Muli", sans-serif'
+ body_font: '"Muli", sans-serif'
+ regular_weight: 400
+ bold_weight: 600
+ site_title:
+ small_size: 25
+ medium_size: 30
+ large_size: 35
+ weight: 700
+ letter_spacing: -0.02
+ menu:
+ small_size: 30
+ medium_size: 15
+ large_size: 17
+ weight: 600
+ letter_spacing: 0
+ h1:
+ small_size: 35
+ medium_size: 45
+ large_size: 60
+ weight: 700
+ letter_spacing: -0.03
+ line_height: 1.2
+ h2:
+ small_size: 22
+ medium_size: 30
+ large_size: 35
+ weight: 700
+ letter_spacing: -0.02
+ line_height: 1.2
+ h3:
+ small_size: 22
+ medium_size: 25
+ large_size: 30
+ weight: 600
+ letter_spacing: -0.02
+ line_height: 1.3
+ h4:
+ small_size: 17
+ medium_size: 22
+ large_size: 22
+ weight: 700
+ letter_spacing: 0
+ line_height: 1.6
+ h5:
+ small_size: 17
+ medium_size: 20
+ large_size: 20
+ weight: 700
+ letter_spacing: 0
+ line_height: 1.6
+ h6:
+ small_size: 17
+ medium_size: 20
+ large_size: 20
+ weight: 700
+ letter_spacing: 0
+ line_height: 1.6
+ p:
+ small_size: 18
+ medium_size: 20
+ large_size: 22
+ weight: 400
+ letter_spacing: 0
+ line_height: 1.6
+ blockquote:
+ small_size: 25
+ medium_size: 35
+ large_size: 45
+ weight: 300
+ letter_spacing: -0.02
+ line_height: 1.6
+ buttons:
+ weight: 600
+ letter_spacing: 0
+
+advanced_settings:
+ ajax_loading: true
+ analytics_code: ""
+ custom_styles: ""
+ header_js: ""
+ footer_js: ""
diff --git a/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md b/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md
deleted file mode 100644
index 4daa757..0000000
--- a/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-layout: post
-title: SQL Server Moving Data Between Filegroups
-date: '2018-05-17 13:34:01'
----
-In thie post I'm going to cover a number of different ways to move data between filegroups aloeing you to split the database accross multiple drives and locations if needed.
\ No newline at end of file
diff --git a/_drafts/2018-08-22-SQL-Server-Compression-Impact.md b/_drafts/2018-08-22-SQL-Server-Compression-Impact.md
deleted file mode 100644
index 28ec133..0000000
--- a/_drafts/2018-08-22-SQL-Server-Compression-Impact.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-layout: post
-title: SQL Server Impacts of Compression
-date: '2018-08-17 13:34:01'
----
-I recently had an issue where a server's CPU load was running a lot higher than usual, after studying a profile for while it quickly highlighted the offending queries. What wasn't obvious was why some of these simple queries were using so much CPU, the only thing they had in common is that they were temporal queries using the AS OF syntax to go across the main and history table. After a little head scratching I realized all the history tables were compressed at the page level, it turns out history tables by default are compressed. After rebuilding the table to turn of compression the CPU load dropped right back down. Problem solved.
-
-This got me thinking though, I've never worked on a system where I've needed to compress tables so had never really looked at what compression does to query performance and their plans. I'm going to delve into this in this post.
-
-All examples in this post are based on a data dump of Stack Overflow from 2010 mainly because it's a nice size and well distributed test bed.
-
-First let's take a baseline against the non compressed posts table...
-
-{% highlight sql %}
-SELECT TOP 5
- Users.DisplayName,
- COUNT(*)
-FROM
- Posts
- INNER JOIN Users ON Users.Id = Posts.OwnerUserId
-GROUP BY
- Posts.OwnerUserId,Users.DisplayName
-ORDER BY COUNT(*) DESC
-OPTION (MAXDOP 1)
-{% endhighlight %}
-
-It's a straight forward query that gets the top 5 users with the highest post count. I've added MAXDOP 1 here to stop the process going parallel, the reason for this is our before and after test will have different costs which may cause SQL Server to make one parallel which will make it hard to compare like for like.
-
-Before I ran these 2 queries I turned on STATISITCS IO and TIME and got the following results...
-
-> Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
-
-> Table 'Workfile'. Scan count 5, logical reads 2912, physical reads 339, read-ahead reads 2573, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
-
-> Table 'Posts'. Scan count 1, logical reads 801623, physical reads 1, read-ahead reads 801168, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
-
-> CPU time = 8515 ms, elapsed time = 18315 ms.
-
-The query plan looked like this...
-
-As you can see the SELECT had an estimated subtree cost of 652.
-
-Now lets compress the clustered index on the posts table...
-
-{% highlight sql %}
-ALTER TABLE Posts REBUILD WITH (DATA_COMPRESSION = PAGE)
-{% endhighlight %}
-
-The table size has gone from..
-
-If we now run the posts query again the query plan now looks like this...
-
-Before running both these queries I turned on STATISTICS IO and STATISTICS TIME to get info on reads and CPU load, the before and after looks like this...
-
-It's quite clear having seen this that...
\ No newline at end of file
diff --git a/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md b/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md
deleted file mode 100644
index 98f9e90..0000000
--- a/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-layout: post
-title: Kicking Ass With Backup Jobs
-date: '2018-09-03 09:34:01'
----
-SQL Maintenance plans have been around for a long time and are commonly used for tasks like backups, CHECKDB, index rebuilds, statistics rebuilds and other cleanup work. The UI for building them is clunky and often slow, it's a bit of a pain to move them between servers and the tasks in them are not the most flexable. So what's the alternative?
-
-## Ola Hallengren's DatabaseBackup ##
-Ola Hallengren has a number of scripts one of which is DatabaseBackup (https://ola.hallengren.com/sql-server-backup.html). If you want to follow along you will need to install Ola's scripts from the previous link. Let's look at some examples of using this and see why it's more flexible...
-
-Full backup of all user databases with checksum and remove backups older than 3 days...
-
-{% highlight sql %}
-EXECUTE dbo.DatabaseBackup
- @Databases = 'USER_DATABASES',
- @BackupType = 'FULL',
- @CheckSum = 'Y',
- @CleanupTime = 72,
- @Directory = 'D:\DBBackups',
-{% endhighlight %}
-
-The above script will create a directory structure inside the directory you give it that looks something like this...
-
- D:\DBBackups\ServerName\DatabaseName\Full\DBName+DateTime.bak
-
-Another smart thing this script can do is if you are running in full recovery it can change backup type between log and full depending on weather a full backup already exists...
-
-{% highlight sql %}
-EXECUTE dbo.DatabaseBackup
- @Databases = 'USER_DATABASES',
- @Directory = 'D:\DBBackups',
- @BackupType = 'LOG',
- @ChangeBackupType = 'Y'
-{% endhighlight %}
-
-The above script uses @ChangeBackupType to switch between full and log. It will first check if a full backup exists, if it doesnt it will make a full backup, if it does it will make a log backup, these files will go to...
-
- D:\DBBackups\ServerName\DatabaseName\Log\DBName+DateTime.log
- D:\DBBackups\ServerName\DatabaseName\Full\DBName+DateTime.bak
-
-Depending on RPO/RTO requirements I typically take all my full backups with Ola's Database backup script from an agent job.
-
-You could quite easily schedule the above to also manage your log backups and that would work well however Brent Ozar's team have fairly recently release sp_AllNightLog.
-
-## Brent Ozar Unlimited's sp_AllNightLog ##
-sp_AllNightLog builds ontop of Ola's DatabaseBackup script to really help automate managing database log backups and even restoring them. On my primary I've been using this to setup jobs that will automatically backup my log files for any database I create that is in full recovery. As part of this process sp_AllNightLog created an agent job that polls for new databases and automatically adds them to it's list of databases to backup the logs for.
-
-Like I said before behind the scenes sp_AllNightLog is making calls to Ola's DatabaseBackup, as part of this some of the options in DatabaseBackup are not available to be set from sp_AllNightLog, I made a small change to sp_AllNightLog that allows me to pass the CleanUpTime from sp_AllNightLog into DatabaseBackup essentially setting a retention policy on my log backups.
-
-The change looks like this...
-
-TODO INSERT CHANGE HERE
-
-One thing to note here is that at the time over writing sp_AllNightLog requires some changes to Ola's scripts for the ChangeBackupType switch to work so if you want to use that feature you need to update Ola's scripts on your server with the ones here https://github.com/BrentOzarULTD/sql-server-maintenance-solution
-
-Setup Step By Step
-If you want new databases to be uatomatically backed up then you need to enable xp_cmdshell on your SQL Server so sp_AllNightLog can monitor directories...
-
-{% highlight sql %}
-EXEC sp_configure 'show advanced options',1
-GO
-RECONFIGURE
-GO
-
-EXEC sp_configure 'xp_cmdshell', 1
-GO
-RECONFIGURE
-GO
-{% endhighlight %}
\ No newline at end of file
diff --git a/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md b/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md
deleted file mode 100644
index c3814f8..0000000
--- a/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-layout: post
-title: Initial Steps To Tuning A Query
-date: '2019-01-08 06:34:01'
----
-There are a million and one possible reasons your query is running slow, however I've found that I follow the same initial steps for every query I optimize and have found it's not until I've gone through this list of steps that things veer off the path and go in other directions. As this is a process I repeat often and find it solves a lot of low hanging fruit in query tuning fairly quickly I though I'd post it here...
-
-
diff --git a/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md b/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md
deleted file mode 100644
index f2f4a6e..0000000
--- a/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: post
-title: Indexing In Memory OLTP Tables
-date: '2018-12-10 09:34:01'
----
-Indexing on In Memory OLTP tables is a little different from your traditional on disk rowstore tables...
-
-In Memory Differences...
-- There is no clustered index
-- There is a new hash index ideal for single record lookups
-- The non clustered index still exists but it;s structure is quite different.
-
-Lets got over each of these points
-
-## No Clustered Index ##
-
-## New Hash Index ##
-
-## Non Clustered Index ##
\ No newline at end of file
diff --git a/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md b/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md
deleted file mode 100644
index a8f62aa..0000000
--- a/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-layout: post
-title: Make Predicate Pushdown Your Best Friend
-date: '2018-12-10 09:34:01'
----
diff --git a/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md b/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md
deleted file mode 100644
index a8f62aa..0000000
--- a/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-layout: post
-title: Make Predicate Pushdown Your Best Friend
-date: '2018-12-10 09:34:01'
----
diff --git a/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md b/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md
deleted file mode 100644
index 7bc72df..0000000
--- a/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-layout: post
-title: SQL Server Agregation With No Data Loss
-date: '2018-12-10 09:34:01'
----
-Let's imagine we have the following table of posts for a generic forum...
-
-{% highlight sql %}
-CREATE TABLE posts
-(
- Id INT IDENTITY PRIMARY KEY,
- Votes INT,
- Body NVARCHAR(MAX)
-)
-{% endhighlight %}
-
-With that data we now want to to return the Votes, Body along with the sum of all votes and count of all posts for comparisson. This can't be done with a group by as in order to get the body and id we'd need to group by it and as soon as we do that any count or sum will only be on that group and not on the overall dataset.
-
-One thing you can do in order to get aggregations and with no loss of data is use APPLY as I detailed in my APPLYBLOGPOST. For example...
-
-{% highlight sql %}
-SELECT TOP 100
- aggr.PostCount,
- aggr.VoteSum,
- Id,
- Votes,
- Body
-FROM
- posts
- CROSS APPLY (SELECT COUNT(*) PostCount, SUM(Votes) VoteSum FROM posts) aggr
-ORDER BY id
-{% endhighlight %}
-
-I've populated my posts table with 5 million records and the above query did the following...
-
-TODO : Query Plan
-TODO : Stats
-
-Since SQL Server 2005 we've have frameless window function, that is a function that runs per row with no bounds. Use this we can rewrite the above query as...
\ No newline at end of file
diff --git a/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md b/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md
deleted file mode 100644
index 5f71484..0000000
--- a/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-layout: post
-title: Deleting Lots Of Data? Go Home SQL Server You're Doing It Wrong!
-date: '2019-01-08 06:34:01'
----
-After recently spending some time trying to optimize queries doing some fairly large scale deletes I discovered things don't work quite as optimally as I'd expected when deleting from multiple indexes. Before I go into too much detail a couple of things to understand first...
-
-## Before We Start : Indexes In Indexes ##
-
-* If a table has no clustered indexes then each record in the NonClustered indexes points back to the data in the table (HEAP) with its Row Identifier (RID) this is an identifier that points to the file, page and slot in page of the underlying row.
-* If a table does have a Clustered index then the NonClustered indexes do not use the RID to point back to data in the clustered index, they instead use the fields in the clustered index. This is a little surprising to learn at first as for this to work it means that every NonClustered index you have also has the clustered index fields included in it in order to get back to the underlying rows in the table.
-
-Lets demo the above points with a quick sample...
-
-{% highlight sql %}
-CREATE TABLE NonClusteredOnly
-(
- Id INT IDENTITY,
- Name NVARCHAR(100),
- INDEX ndx_nonclusteredonly_name NONCLUSTERED(Name)
-)
-
-CREATE TABLE ClusteredOnly
-(
- Id INT IDENTITY PRIMARY KEY,
- Name NVARCHAR(100)
-)
-
-CREATE TABLE ClusteredAndNonClustered
-(
- Id INT IDENTITY PRIMARY KEY,
- Name NVARCHAR(100),
- INDEX ndx_clusteredandnonclustered_name NONCLUSTERED(Name)
-)
-
-INSERT INTO NonClusteredOnly (Name)
-SELECT specific_name
-FROM msdb.information_schema.routines
-WHERE routine_type = 'PROCEDURE'
-
-INSERT INTO ClusteredOnly (Name)
-SELECT specific_name
-FROM msdb.information_schema.routines
-WHERE routine_type = 'PROCEDURE'
-
-INSERT INTO ClusteredAndNonClustered (Name)
-SELECT specific_name
-FROM msdb.information_schema.routines
-WHERE routine_type = 'PROCEDURE'
-{% endhighlight %}
-
-After running that you'll have 3 tables and about 500 records in each depeneding on which version of SQL Server you're running.
-
-Let's first look at what happens if we filter on the name column for select all columns from ClusteredOnly...
-
-{% highlight sql %}
-SELECT id,[Name] FROM ClusteredOnly
-WHERE [Name] LIKE 'sp_verify_job%'
-{% endhighlight %}
-
-
-
-As you probably expected we have no index that can help with our predicate so it does a full scan on the clustered index.
-
-Now let's run that same query on our table with only a single NonClustered index...
-
-{% highlight sql %}
-SELECT id,[Name] FROM NonClusteredOnly
-WHERE [Name] LIKE 'sp_verify_job%'
-{% endhighlight %}
-
-
-
-In this case we're using the NonClustered index to seek on our predicate but because that index doesnt have ID in it and our query wants the ID field it then uses the RID (Record Identifier) to go back to the heap and get that data in that field.
-
-It gets more interesting when we run that same query on our table with a Clustered index on ID and NonClustered on Name, the obvious thing you'd expect to see is probably seek on the NonClustered then a lookup to the Clusted index to get the ID field but...
-
-{% highlight sql %}
-SELECT id,[Name] FROM ClusteredAndNonClustered
-WHERE [Name] LIKE 'sp_verify_job%'
-{% endhighlight %}
-
-
-
-## Setting Up a Sandbox ##
-
-### Delete No Index ###
-### Delete Clustered Index ###
-### Delete Non Clustered Index ###
-### Delete Clustered and One Non Clustered Index ###
-### Delete Clusterd and Multiple Non Clustered Indexes ###
\ No newline at end of file
diff --git a/_includes/.DS_Store b/_includes/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/_includes/.DS_Store differ
diff --git a/_includes/adsense-vertical.html b/_includes/adsense-vertical.html
deleted file mode 100644
index bf7c901..0000000
--- a/_includes/adsense-vertical.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_includes/adsense.html b/_includes/adsense.html
deleted file mode 100644
index a3b290f..0000000
--- a/_includes/adsense.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/_includes/analytics.html b/_includes/analytics.html
deleted file mode 100644
index 60ca816..0000000
--- a/_includes/analytics.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/_includes/contact-form.html b/_includes/contact-form.html
new file mode 100644
index 0000000..8c1ba77
--- /dev/null
+++ b/_includes/contact-form.html
@@ -0,0 +1,30 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/_includes/demo-post.md b/_includes/demo-post.md
new file mode 100644
index 0000000..ffa4668
--- /dev/null
+++ b/_includes/demo-post.md
@@ -0,0 +1,99 @@
+## Demo content
+
+This page is a demo that shows everything you can do inside portfolio and blog posts.
+
+We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way.
+
+
+
+**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
+
+You can create lists:
+
+* Simple bulleted lists
+* Like this one
+* Are cool
+
+And:
+
+1. Numbered lists
+2. Like this other one
+3. Are great too
+
+You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content:
+
+> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.”
+
+The theme also supports markdown tables:
+
+| Item | Author | Supports tables? | Price |
+|----------------------|---------------|------------------|-------|
+| Duet Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Index Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Journal Jekyll Theme | Jekyll Themes | Yes | $49 |
+
+And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3].
+
+[^1]: Beautiful modern, minimal theme design.
+[^2]: Powerful features to show off your work.
+[^3]: Maintained and supported by the theme developer.
+
+You can throw in some horizontal rules too:
+
+---
+
+### Image galleries
+
+Here's a really neat custom feature we added – galleries:
+
+
+
+
+
+
+
+
+Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout:
+
+```html
+
+
+
+
+
+
+```
+
+*See what we did there? Code and syntax highlighting is built-in too!*
+
+Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page.
+
+---
+
+### Image carousels
+
+Here's another gallery with only one column, which creates a carousel slide-show instead.
+
+A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images.
+
+
+
+
+
+
+
+### What about videos?
+
+Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly:
+
+
+
+---
+
+## Pretty cool, huh?
+
+We've packed this theme with powerful features to show off your work.
+
+Why not put them to use on your new website?
+
+Get This Theme
\ No newline at end of file
diff --git a/_includes/disqus_comments.html b/_includes/disqus_comments.html
deleted file mode 100644
index a14cdba..0000000
--- a/_includes/disqus_comments.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% if page.comments != false and jekyll.environment == "production" %}
-
-
-
-
-{% endif %}
diff --git a/_includes/footer.html b/_includes/footer.html
index d5aad37..896a505 100644
--- a/_includes/footer.html
+++ b/_includes/footer.html
@@ -1,52 +1,15 @@
-
\ No newline at end of file
diff --git a/_includes/google-analytics.html b/_includes/google-analytics.html
deleted file mode 100644
index eb2a692..0000000
--- a/_includes/google-analytics.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
diff --git a/_includes/head.html b/_includes/head.html
deleted file mode 100644
index 0060aba..0000000
--- a/_includes/head.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
- {% if page.title %}{{ page.title | escape }} | Gavin Draper - SQL Server
- Blog{% else %}{{ site.title | escape }}{% endif %}
-
-
-
-
-
-
-
- {% if jekyll.environment == 'production' and site.google_analytics %}
- {% include google-analytics.html %}
- {% endif %}
-
\ No newline at end of file
diff --git a/_includes/header.html b/_includes/header.html
index dc4d7fe..f185528 100644
--- a/_includes/header.html
+++ b/_includes/header.html
@@ -1,44 +1,32 @@
-
+
-
-
- {% if site.twitter_username %}
- {% include icon-twitter.html username=site.twitter_username %}
- {% endif %}
- {% if site.github_username %}
- {% include icon-github.html username=site.github_username %}
- {% endif %}
- {% if site.linkedin_username %}
- {% include icon-linkedin.html username=site.linkedin_username %}
-{% endif %}
+
\ No newline at end of file
diff --git a/_layouts/default.html b/_layouts/default.html
index ad827a5..f0d4991 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -1,62 +1,106 @@
-
-
-
-{% include head.html %}
-
-
-
- {% include header.html %}
-
-
-
-
- Software Developer/Dev DBA. Often hyper, often talking rubbish. Pick and choose what to take away from this blog.... Want to get in touch? My social network profiles are listed above.
-
+
+
+
+{% endif %}
\ No newline at end of file
diff --git a/css/.DS_Store b/css/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/css/.DS_Store differ
diff --git a/css/style.scss b/css/style.scss
new file mode 100644
index 0000000..952cf31
--- /dev/null
+++ b/css/style.scss
@@ -0,0 +1,147 @@
+---
+---
+
+// - - - - - - - - - - Foundations
+
+@import "_reset";
+@import "_mixins";
+@import "_plugins";
+
+
+
+// - - - - - - - - - - Variables
+
+
+// Colors
+
+$background-color: {{ site.data.settings.color_settings.background_color }};
+$background-alt-color: {{ site.data.settings.color_settings.background_alt_color }};
+$border-color: {{ site.data.settings.color_settings.border_color }};
+
+$text-dark-color: {{ site.data.settings.color_settings.text_dark_color }};
+$text-medium-color: {{ site.data.settings.color_settings.text_medium_color }};
+$text-light-color: {{ site.data.settings.color_settings.text_light_color }};
+
+$accent-color: {{ site.data.settings.color_settings.accent_color }};
+
+$hero-background-color: {{ site.data.settings.color_settings.hero_background_color }};
+$hero-text-color: {{ site.data.settings.color_settings.hero_text_color }};
+
+$error-color: {{ site.data.settings.color_settings.error_color }};
+
+
+// Fonts
+
+$body-font: {{ site.data.settings.font_settings.body_font }};
+$title-font: {{ site.data.settings.font_settings.title_font }};
+
+$regular-weight: {{ site.data.settings.font_settings.regular_weight }};
+$bold-weight: {{ site.data.settings.font_settings.bold_weight }};
+
+
+// Typography
+
+$sitetitle-small: {{ site.data.settings.font_settings.site_title.small_size }}px;
+$sitetitle-medium: {{ site.data.settings.font_settings.site_title.medium_size }}px;
+$sitetitle-large: {{ site.data.settings.font_settings.site_title.large_size }}px;
+$sitetitle-weight: {{ site.data.settings.font_settings.site_title.weight }};
+$sitetitle-spacing: {{ site.data.settings.font_settings.site_title.letter_spacing }}em;
+
+$menu-small: {{ site.data.settings.font_settings.menu.small_size }}px;
+$menu-medium: {{ site.data.settings.font_settings.menu.medium_size }}px;
+$menu-large: {{ site.data.settings.font_settings.menu.large_size }}px;
+$menu-weight: {{ site.data.settings.font_settings.menu.weight }};
+$menu-spacing: {{ site.data.settings.font_settings.menu.letter_spacing }}em;
+
+$h1-small: {{ site.data.settings.font_settings.h1.small_size }}px;
+$h1-medium: {{ site.data.settings.font_settings.h1.medium_size }}px;
+$h1-large: {{ site.data.settings.font_settings.h1.large_size }}px;
+$h1-weight: {{ site.data.settings.font_settings.h1.weight }};
+$h1-spacing: {{ site.data.settings.font_settings.h1.letter_spacing }}em;
+$h1-lineheight: {{ site.data.settings.font_settings.h1.line_height }};
+
+$h2-small: {{ site.data.settings.font_settings.h2.small_size }}px;
+$h2-medium: {{ site.data.settings.font_settings.h2.medium_size }}px;
+$h2-large: {{ site.data.settings.font_settings.h2.large_size }}px;
+$h2-weight: {{ site.data.settings.font_settings.h2.weight }};
+$h2-spacing: {{ site.data.settings.font_settings.h2.letter_spacing }}em;
+$h2-lineheight: {{ site.data.settings.font_settings.h2.line_height }};
+
+$h3-small: {{ site.data.settings.font_settings.h3.small_size }}px;
+$h3-medium: {{ site.data.settings.font_settings.h3.medium_size }}px;
+$h3-large: {{ site.data.settings.font_settings.h3.large_size }}px;
+$h3-weight: {{ site.data.settings.font_settings.h3.weight }};
+$h3-spacing: {{ site.data.settings.font_settings.h3.letter_spacing }}em;
+$h3-lineheight: {{ site.data.settings.font_settings.h3.line_height }};
+
+$h4-small: {{ site.data.settings.font_settings.h4.small_size }}px;
+$h4-medium: {{ site.data.settings.font_settings.h4.medium_size }}px;
+$h4-large: {{ site.data.settings.font_settings.h4.large_size }}px;
+$h4-weight: {{ site.data.settings.font_settings.h4.weight }};
+$h4-spacing: {{ site.data.settings.font_settings.h4.letter_spacing }}em;
+$h4-lineheight: {{ site.data.settings.font_settings.h4.line_height }};
+
+$h5-small: {{ site.data.settings.font_settings.h5.small_size }}px;
+$h5-medium: {{ site.data.settings.font_settings.h5.medium_size }}px;
+$h5-large: {{ site.data.settings.font_settings.h5.large_size }}px;
+$h5-weight: {{ site.data.settings.font_settings.h5.weight }};
+$h5-spacing: {{ site.data.settings.font_settings.h5.letter_spacing }}em;
+$h5-lineheight: {{ site.data.settings.font_settings.h5.line_height }};
+
+$h6-small: {{ site.data.settings.font_settings.h6.small_size }}px;
+$h6-medium: {{ site.data.settings.font_settings.h6.medium_size }}px;
+$h6-large: {{ site.data.settings.font_settings.h6.large_size }}px;
+$h6-weight: {{ site.data.settings.font_settings.h6.weight }};
+$h6-spacing: {{ site.data.settings.font_settings.h6.letter_spacing }}em;
+$h6-lineheight: {{ site.data.settings.font_settings.h6.line_height }};
+
+$p-small: {{ site.data.settings.font_settings.p.small_size }}px;
+$p-medium: {{ site.data.settings.font_settings.p.medium_size }}px;
+$p-large: {{ site.data.settings.font_settings.p.large_size }}px;
+$p-weight: {{ site.data.settings.font_settings.p.weight }};
+$p-spacing: {{ site.data.settings.font_settings.p.letter_spacing }}em;
+$p-lineheight: {{ site.data.settings.font_settings.p.line_height }};
+
+$blockquote-small: {{ site.data.settings.font_settings.blockquote.small_size }}px;
+$blockquote-medium: {{ site.data.settings.font_settings.blockquote.medium_size }}px;
+$blockquote-large: {{ site.data.settings.font_settings.blockquote.large_size }}px;
+$blockquote-weight: {{ site.data.settings.font_settings.blockquote.weight }};
+$blockquote-spacing: {{ site.data.settings.font_settings.blockquote.letter_spacing }}em;
+$blockquote-lineheight: {{ site.data.settings.font_settings.blockquote.line_height }};
+
+$button-weight: {{ site.data.settings.font_settings.buttons.weight }};
+$button-spacing: {{ site.data.settings.font_settings.buttons.letter_spacing }}em;
+
+
+// Logo
+$logo-width: {{ site.data.settings.header_settings.logo_width }}px;
+$footer-logo-width: {{ site.data.settings.footer_settings.logo_width }}px;
+
+
+// Post details
+$overlay-opacity: {{ site.data.settings.hero_settings.overlay_opacity }};
+$grid-spacing: {{ site.data.settings.post_settings.grid_spacing }}px;
+
+
+
+// - - - - - - - - - - Global styles
+
+@import "_basic";
+
+@import "_includes/_header";
+@import "_includes/_footer";
+
+@import "_includes/_content";
+@import "_includes/_socials";
+@import "_includes/_gallery";
+@import "_includes/_syntax";
+@import "_includes/_contact-form";
+
+
+
+// - - - - - - - - - - Section styles
+
+@import "_includes/_listing";
+@import "_includes/_hero";
+
+
diff --git a/drafts/2018-06-30-chaosload.md b/drafts/2018-06-30-chaosload.md
new file mode 100644
index 0000000..023af4c
--- /dev/null
+++ b/drafts/2018-06-30-chaosload.md
@@ -0,0 +1,104 @@
+---
+title: 'ChaosLoad'
+subtitle: 'Load Simulator'
+date: 2018-06-30 00:00:00
+description: Works accross SQL Server, Rabbit MQ, Mongo...
+featured_image: '/images/hero-images/crowds.jpg'
+---
+
+## Demo content
+
+This page is a demo that shows everything you can do inside portfolio and blog posts.
+
+We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way.
+
+**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
+
+You can create lists:
+
+* Simple bulleted lists
+* Like this one
+* Are cool
+
+And:
+
+1. Numbered lists
+2. Like this other one
+3. Are great too
+
+You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content:
+
+> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.”
+
+The theme also supports markdown tables:
+
+| Item | Author | Supports tables? | Price |
+|----------------------|---------------|------------------|-------|
+| Duet Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Index Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Journal Jekyll Theme | Jekyll Themes | Yes | $49 |
+
+And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3].
+
+[^1]: Beautiful modern, minimal theme design.
+[^2]: Powerful features to show off your work.
+[^3]: Maintained and supported by the theme developer.
+
+You can throw in some horizontal rules too:
+
+---
+
+### Image galleries
+
+Here's a really neat custom feature we added – galleries:
+
+
+
+
+
+
+
+
+Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout:
+
+```html
+
+
+
+
+
+
+```
+
+*See what we did there? Code and syntax highlighting is built-in too!*
+
+Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page.
+
+---
+
+### Image carousels
+
+Here's another gallery with only one column, which creates a carousel slide-show instead.
+
+A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images.
+
+
+
+
+
+
+### What about videos?
+
+Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly:
+
+
+
+---
+
+## Pretty cool, huh?
+
+We've packed this theme with powerful features to show off your work.
+
+Why not put them to use on your new portfolio?
+
+Get This Theme
\ No newline at end of file
diff --git a/drafts/2018-06-30-demo-post.md b/drafts/2018-06-30-demo-post.md
new file mode 100644
index 0000000..d9e75c0
--- /dev/null
+++ b/drafts/2018-06-30-demo-post.md
@@ -0,0 +1,105 @@
+---
+title: 'Demo Post'
+date: 2018-06-30 00:00:00
+description: This page is a demo that shows everything you can do inside portfolio and blog posts.
+featured_image: '/images/demo/demo-square.jpg'
+---
+
+
+
+## Demo content
+
+This page is a demo that shows everything you can do inside portfolio and blog posts.
+
+We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way.
+
+**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
+
+You can create lists:
+
+* Simple bulleted lists
+* Like this one
+* Are cool
+
+And:
+
+1. Numbered lists
+2. Like this other one
+3. Are great too
+
+You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content:
+
+> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.”
+
+The theme also supports markdown tables:
+
+| Item | Author | Supports tables? | Price |
+|----------------------|---------------|------------------|-------|
+| Duet Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Index Jekyll Theme | Jekyll Themes | Yes | $49 |
+| Journal Jekyll Theme | Jekyll Themes | Yes | $49 |
+
+And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3].
+
+[^1]: Beautiful modern, minimal theme design.
+[^2]: Powerful features to show off your work.
+[^3]: Maintained and supported by the theme developer.
+
+You can throw in some horizontal rules too:
+
+---
+
+### Image galleries
+
+Here's a really neat custom feature we added – galleries:
+
+
+
+
+
+
+
+
+Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout:
+
+```html
+
+
+
+
+
+
+```
+
+*See what we did there? Code and syntax highlighting is built-in too!*
+
+Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page.
+
+---
+
+### Image carousels
+
+Here's another gallery with only one column, which creates a carousel slide-show instead.
+
+A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images.
+
+
+
+
+
+
+### What about videos?
+
+Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly:
+
+
+
+---
+
+## Pretty cool, huh?
+
+We've packed this theme with powerful features to show off your work.
+
+Why not put them to use on your new portfolio?
+
+Get This Theme
\ No newline at end of file
diff --git a/drafts/2020-05-14-Im-Back-And-Grammarly.md b/drafts/2020-05-14-Im-Back-And-Grammarly.md
new file mode 100644
index 0000000..fbedbb0
--- /dev/null
+++ b/drafts/2020-05-14-Im-Back-And-Grammarly.md
@@ -0,0 +1,18 @@
+---
+title: The blog is back and... Grammarly!
+date: 2020-05-14 00:00:00
+description: 'The blog is back and we&pos;re trying Grammarly'
+featured_image: '/images/hero-images/notebooks.jpg'
+---
+It's been a while... Work got busy, life got busy, and I lost my enthusiasm for posting to this blog, all that's about to change! I'm restarting the blog and making it less SQL Server focussed and more generic to Software Development/Anything I find interesting at the time. I've also got a new theme, can't restart this thing without procrastinating for weeks about the look right? Let me know what you think.
+
+Anyway, as an incentive to start writing on, here again, I thought I'd give Grammarly a try, for anyone that's been here before you'll know my grammar is terrible my writing is awful and my poorly strung together sentences are shocking (But hey at least I try to get the technical posts accurate :) ). I've always previously just used the built-in spellchecker tools in Microsoft Word and thought I'd step up and give Grammarly a go. I'm writing and editing this blog post in the free version of Grammarly, and once it's done, I'll run it through the premium version and post that version below so you can all see the difference. I'm pretty sceptical that this can improve my writing but hey any help is help right?
+
+## Free Version
+Having run this post through the free version of Grammarly my initial findings are it picked up all the same typos as Microsoft Word and suggested a lot of commas, Grammarly really likes commas! It also suggested removing some noise words that it deemed "Unnecessary" a few of these made sense but a couple more I prefered with the word left in.
+
+## Premium Version
+Remember I mentioned the free version really liked commas? Well, premium takes that to a whole new level! Commas, as far as the eye can see! Surprisingly the premium version also picked out a couple of spelling mistakes that the free version didn't find, I'm not sure what's going on there as I thought both versions used the same spell checker. Both the free and premium tier give your writing a score and add comments on the clarity, engagement and delivery, and I found that the free version marked these down. When using the premium version, they all improved after I took a couple of its suggestions that made very little difference to the feel of the post, possibly a way to steer people towards the premium version with low value-add. With the premium version, I managed to get the "score" out of 100 of this post from 79 to 97, did that improve the post? Maybe a little, it certainly removed a couple of mistakes, but for the most part, I'm not convinced by the scoring of it all.
+
+## Final Thoughts
+I'm unsure that premium for me at least justifies the hefty price tag: £23 per month if you pay monthly or £9 a month if you take the yearly plan. I'm sure there is more value here for someone who writes a lot more than I will be, but it still seems quite steep. The free version outperformed Microsoft Word in my tests, is free and runs in most places browser, mobile keyboards, desktop app. I'll most likely move back to the free tier next month unless I find some significant amount of value-added over my future few posts.
\ No newline at end of file
diff --git a/feed.xml b/feed.xml
deleted file mode 100644
index 3c28277..0000000
--- a/feed.xml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: none
----
-
-
-
- {{ site.name | xml_escape }}
- {{ site.description | xml_escape }}
- {{ site.url }}
-
- {% for post in site.posts limit:100 %}
-
- {{ post.title | xml_escape }}
- {{ post.content | xml_escape }}
- {{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }}
- {{ site.url }}/{{ post.url }}
- {{ site.url }}/{{ post.url }}
-
- {% endfor %}
-
-
\ No newline at end of file
diff --git a/images/.DS_Store b/images/.DS_Store
new file mode 100644
index 0000000..0bbf75f
Binary files /dev/null and b/images/.DS_Store differ
diff --git a/images/demo/.DS_Store b/images/demo/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/images/demo/.DS_Store differ
diff --git a/images/demo/about.jpg b/images/demo/about.jpg
new file mode 100644
index 0000000..87bf8e8
Binary files /dev/null and b/images/demo/about.jpg differ
diff --git a/images/demo/blog.jpg b/images/demo/blog.jpg
new file mode 100644
index 0000000..d4b93b5
Binary files /dev/null and b/images/demo/blog.jpg differ
diff --git a/images/demo/contact.jpg b/images/demo/contact.jpg
new file mode 100644
index 0000000..f899149
Binary files /dev/null and b/images/demo/contact.jpg differ
diff --git a/images/demo/demo-landscape-2.jpg b/images/demo/demo-landscape-2.jpg
new file mode 100644
index 0000000..8634647
Binary files /dev/null and b/images/demo/demo-landscape-2.jpg differ
diff --git a/images/demo/demo-landscape.jpg b/images/demo/demo-landscape.jpg
new file mode 100644
index 0000000..ebb7520
Binary files /dev/null and b/images/demo/demo-landscape.jpg differ
diff --git a/images/demo/demo-portrait.jpg b/images/demo/demo-portrait.jpg
new file mode 100644
index 0000000..a5deb9b
Binary files /dev/null and b/images/demo/demo-portrait.jpg differ
diff --git a/images/demo/demo-square.jpg b/images/demo/demo-square.jpg
new file mode 100644
index 0000000..09ce81f
Binary files /dev/null and b/images/demo/demo-square.jpg differ
diff --git a/images/demo/home.jpg b/images/demo/home.jpg
new file mode 100644
index 0000000..0f90803
Binary files /dev/null and b/images/demo/home.jpg differ
diff --git a/favicon.ico b/images/favicon.ico
similarity index 100%
rename from favicon.ico
rename to images/favicon.ico
diff --git a/images/favicon.png b/images/favicon.png
new file mode 100644
index 0000000..0e147c8
Binary files /dev/null and b/images/favicon.png differ
diff --git a/images/hero-images/blocks.jpg b/images/hero-images/blocks.jpg
new file mode 100644
index 0000000..1dd3d57
Binary files /dev/null and b/images/hero-images/blocks.jpg differ
diff --git a/images/hero-images/clean-desk.jpg b/images/hero-images/clean-desk.jpg
new file mode 100644
index 0000000..fb4a2a6
Binary files /dev/null and b/images/hero-images/clean-desk.jpg differ
diff --git a/images/hero-images/crowds.jpg b/images/hero-images/crowds.jpg
new file mode 100644
index 0000000..a0b3302
Binary files /dev/null and b/images/hero-images/crowds.jpg differ
diff --git a/images/hero-images/dice.jpg b/images/hero-images/dice.jpg
new file mode 100644
index 0000000..c788311
Binary files /dev/null and b/images/hero-images/dice.jpg differ
diff --git a/images/hero-images/harddrive.jpg b/images/hero-images/harddrive.jpg
new file mode 100644
index 0000000..020efbe
Binary files /dev/null and b/images/hero-images/harddrive.jpg differ
diff --git a/images/hero-images/mailbox.jpg b/images/hero-images/mailbox.jpg
new file mode 100644
index 0000000..4858515
Binary files /dev/null and b/images/hero-images/mailbox.jpg differ
diff --git a/images/hero-images/night-programming-outdoor.jpg b/images/hero-images/night-programming-outdoor.jpg
new file mode 100644
index 0000000..a91a38a
Binary files /dev/null and b/images/hero-images/night-programming-outdoor.jpg differ
diff --git a/images/hero-images/notebooks.jpg b/images/hero-images/notebooks.jpg
new file mode 100644
index 0000000..9857ac4
Binary files /dev/null and b/images/hero-images/notebooks.jpg differ
diff --git a/images/hero-images/typewriter.jpg b/images/hero-images/typewriter.jpg
new file mode 100644
index 0000000..4b59e2a
Binary files /dev/null and b/images/hero-images/typewriter.jpg differ
diff --git a/images/social.jpg b/images/social.jpg
new file mode 100644
index 0000000..96cc7ec
Binary files /dev/null and b/images/social.jpg differ
diff --git a/index.html b/index.html
index 1eb5d67..b6484bf 100644
--- a/index.html
+++ b/index.html
@@ -1,6 +1,70 @@
---
-# You don't need to edit this file, it's empty on purpose.
-# Edit theme's home layout instead if you wanna make some changes
-# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults
-layout: home
+layout: default
+title: Blog
+description: Random posts about random things
+featured_image: /images/demo/blog.jpg
---
+
+
+
+