diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2251989 --- /dev/null +++ b/Makefile @@ -0,0 +1,85 @@ +PY?= +PELICAN?=pelican +PELICANOPTS= + +BASEDIR=$(CURDIR) +INPUTDIR=$(BASEDIR)/content +OUTPUTDIR=$(BASEDIR)/output +CONFFILE=$(BASEDIR)/pelicanconf.py +PUBLISHCONF=$(BASEDIR)/publishconf.py + +S3_BUCKET=n + +GITHUB_PAGES_BRANCH=gh-pages + + +DEBUG ?= 0 +ifeq ($(DEBUG), 1) + PELICANOPTS += -D +endif + +RELATIVE ?= 0 +ifeq ($(RELATIVE), 1) + PELICANOPTS += --relative-urls +endif + +SERVER ?= "0.0.0.0" + +PORT ?= 0 +ifneq ($(PORT), 0) + PELICANOPTS += -p $(PORT) +endif + + +help: + @echo 'Makefile for a pelican Web site ' + @echo ' ' + @echo 'Usage: ' + @echo ' make html (re)generate the web site ' + @echo ' make clean remove the generated files ' + @echo ' make regenerate regenerate files upon modification ' + @echo ' make publish generate using production settings ' + @echo ' make serve [PORT=8000] serve site at http://localhost:8000' + @echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 ' + @echo ' make devserver [PORT=8000] serve and regenerate together ' + @echo ' make devserver-global regenerate and serve on 0.0.0.0 ' + @echo ' make s3_upload upload the web site via S3 ' + @echo ' make github upload the web site via gh-pages ' + @echo ' ' + @echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html ' + @echo 'Set the RELATIVE variable to 1 to enable relative urls ' + @echo ' ' + +html: + "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +clean: + [ ! -d "$(OUTPUTDIR)" ] || rm -rf "$(OUTPUTDIR)" + +regenerate: + "$(PELICAN)" -r "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +serve: + "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +serve-global: + "$(PELICAN)" -l "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) -b $(SERVER) + +devserver: + "$(PELICAN)" -lr "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(CONFFILE)" $(PELICANOPTS) + +devserver-global: + $(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -b 0.0.0.0 + +publish: + "$(PELICAN)" "$(INPUTDIR)" -o "$(OUTPUTDIR)" -s "$(PUBLISHCONF)" $(PELICANOPTS) + +s3_upload: publish + aws s3 sync "$(OUTPUTDIR)"/ s3://$(S3_BUCKET) --acl public-read --delete + +github: publish + ghp-import -m "Generate Pelican site" -b $(GITHUB_PAGES_BRANCH) "$(OUTPUTDIR)" + git push origin $(GITHUB_PAGES_BRANCH) + + +.PHONY: html help clean regenerate serve serve-global devserver publish s3_upload github \ No newline at end of file diff --git a/_includes/analytics.html b/_includes/analytics.html deleted file mode 100644 index 97517ac..0000000 --- a/_includes/analytics.html +++ /dev/null @@ -1,11 +0,0 @@ - - \ No newline at end of file diff --git a/_includes/color-bar.html b/_includes/color-bar.html deleted file mode 100644 index cbc5a0a..0000000 --- a/_includes/color-bar.html +++ /dev/null @@ -1,2 +0,0 @@ -
- \ No newline at end of file diff --git a/_includes/disqus.html b/_includes/disqus.html deleted file mode 100644 index 344b7e3..0000000 --- a/_includes/disqus.html +++ /dev/null @@ -1,11 +0,0 @@ -
- - - \ No newline at end of file diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index bf9098e..0000000 --- a/_includes/footer.html +++ /dev/null @@ -1,9 +0,0 @@ - -
\ No newline at end of file diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 086600a..0000000 --- a/_includes/head.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - -{% seo %} - - - - - diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 53ddbb3..0000000 --- a/_includes/header.html +++ /dev/null @@ -1,14 +0,0 @@ - - diff --git a/_includes/pagination.html b/_includes/pagination.html deleted file mode 100644 index 83fab7b..0000000 --- a/_includes/pagination.html +++ /dev/null @@ -1,25 +0,0 @@ -{% if paginator.total_pages > 1 %} - -{% endif %} diff --git a/_layouts/compress.html b/_layouts/compress.html deleted file mode 100644 index 3db753a..0000000 --- a/_layouts/compress.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -# Jekyll layout that compresses HTML -# v3.0.1 -# http://jch.penibelst.de/ -# © 2014–2015 Anatol Broder -# MIT License ---- - -{% capture _LINE_FEED %} -{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% assign _lastchar = _pres.last | split: "" | last %}{% assign _outerloop = forloop %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if forloop.last and _lastchar == _LINE_FEED %}{% unless _outerloop.last %}{{ _LINE_FEED }}{% endunless %}{% continue %}{% endif %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
Step Bytes
raw {{ content | size }}{% if _profile_endings %}
endings {{ _profile_endings }}{% endif %}{% if _profile_startings %}
startings {{ _profile_startings }}{% endif %}{% if _profile_comments %}
comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %}
collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %}
clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %} diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 7c68970..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: compress ---- - - - - {% include head.html %} - - - -
- {% include color-bar.html %} - {% include header.html %} -
-
-
- {{ content }} -
-
-
- {% include footer.html %} -
- {% if site.analytics %} - {% include analytics.html %} - {% endif %} - - diff --git a/_layouts/page.html b/_layouts/page.html deleted file mode 100644 index ce233ad..0000000 --- a/_layouts/page.html +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

-
- -
- {{ content }} -
- -
diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index d475172..0000000 --- a/_layouts/post.html +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: default ---- -
- -
-

{{ page.title }}

- -
- -
- {{ content }} -
- -
- {% if site.disqus-shortname %} - {% include disqus.html %} - {% endif %} \ No newline at end of file diff --git a/_sass/_base.scss b/_sass/_base.scss deleted file mode 100644 index 3d03bee..0000000 --- a/_sass/_base.scss +++ /dev/null @@ -1,230 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - - - -/** - * Basic styling - */ -body { - font-family: $base-font-family; - font-size: $base-font-size; - line-height: $base-line-height; - color: $text-color; - text-rendering: optimizeLegibility; - @include media-query($on-palm) { - font-size: 1em; - } -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-bottom: $spacing-unit / 2; -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; - border-radius: 5px; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1{ - font-size: 2.5em; - @include media-query($on-laptop) { - font-size: 2em; - } -} -h2{ - font-size: 1.6em; - @include media-query($on-laptop) { - font-size: 1.2em; - } -} - -h3{ - font-size: 1.2em; - @include media-query($on-laptop) { - font-size: 0.9em; - } -} - -h4 { - font-size: 1em; - @include media-query($on-laptop) { - font-size: 0.8em; - } -} - -h5{ - font-size: 0.9em; - @include media-query($on-laptop) { - font-size: 0.7em; - } - -} - - -h1, h2, h3, h4, h5, h6 { - font-weight: $base-font-weight; - font-family: 'Alfa Slab One', cursive, sans-serif; - - -} - - - - -/** - * Links - */ -a { - color: $brand-color; - text-decoration: none; - - &:hover { - color: $comp-color; - } -} - - - -/** - * Blockquotes - */ -blockquote { - font-family: serif; - color: $grey-color; - border: 1px solid $grey-color-light; - border-left: 4px solid $brand-color; - padding-left: $spacing-unit / 2; - font-style: italic; - margin-left: 1em; - - > :last-child { - margin-bottom: 0; - } -} - - - -/** - * Code formatting - */ - -.highlighter-rouge { - font-family: inherit; -} - -pre, -code { - border-radius: 3px; - border: 1px solid $brand-color; - text-shadow: 0 0 0.1px; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; - font-size: 0.8em; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - - - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); - max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit; - padding-left: $spacing-unit; - @extend %clearfix; - - @include media-query($on-laptop) { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); - max-width: calc(#{$content-width} - (#{$spacing-unit})); - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - } -} - - - -/** - * Clearfix - */ -%clearfix { - - &:after { - content: ""; - display: table; - clear: both; - } -} - - diff --git a/_sass/_layout.scss b/_sass/_layout.scss deleted file mode 100644 index 639a340..0000000 --- a/_sass/_layout.scss +++ /dev/null @@ -1,176 +0,0 @@ - - *{ - -webkit-transition: all 0.2s; /* Safari */ - -webkit-transition-timing-function: linear; /* Safari */ - transition: all 0.2s; - transition-timing-function: linear; - } - -/** - * Site header - */ -.site-header { - border-bottom: 1px solid $grey-color-light; - min-height: 56px; - padding-bottom: 1em; -} - -.site-title { - font-size: $title-font-size; - line-height: 2; - letter-spacing: -1px; - margin-bottom: 0; - text-align: center; - text-shadow: 0 0 1px; - &, - &:visited { - color: $grey-color; - } - - @include media-query($on-laptop) { - font-size: 3em; - } - @include media-query($on-palm) { - font-size: 2.75em; - } -} - - -/** - * Site footer - */ -.site-footer { - padding: $spacing-unit 0; -} - -/** - * Page content - */ -/* .page-content { - padding: $spacing-unit 0; -} */ - - -.post-list { - margin-left: 0; - list-style: none; - - > li { - margin-bottom: $spacing-unit; - } -} - -.post-meta { - font-size: $small-font-size; - color: $grey-color; - line-height: 0; -} - -.post-link { - margin-right: 1em; -} - - - -/** - * Posts - */ -.post-header { - margin-bottom: $spacing-unit; -} - - -.site-nav { - text-align: center; -} - -.nav-link { - margin-left: 10px; - border-radius: 2px; - padding: 5px 10px; - text-decoration: none; - font-family: sans-serif; - border: none; - &:hover{ - color: $background-color; - background: $brand-color; - } - - @include media-query($on-laptop) { - font-size: 0.8em; - margin-left: 5px; - - } - -} - - -//table -table { - margin: 15px 0; - border-collapse: collapse; - width: 100%; - padding: 0; } - table tr { - border-top: 1px solid $grey-color; - background-color: white; - margin: 0; - padding: 0; } - table tr:nth-child(2n) { - background-color: #f8f8f8; } - table tr th { - font-weight: bold; - border: 1px solid $grey-color; - text-align: left; - margin: 0; - padding: 6px 13px; } - table tr td { - border: 1px solid $grey-color; - text-align: left; - margin: 0; - padding: 6px 13px; } - table tr th :first-child, table tr td :first-child { - margin: 0; } - table tr th :last-child, table tr td :last-child { - margin: 0; } - - -// Adding 'Contents' headline to the TOC -#markdown-toc::before { - content: "Contents"; - font-weight: bold; -} - - -// Using numbers instead of bullets for listing -#markdown-toc ul { - list-style: decimal; -} - -#markdown-toc { - border: 1px solid $brand-color; - padding: 1.5em; - list-style: decimal; - display: inline-block; -} - -.video { - width: 100%; - height: 360px; - @include media-query($on-laptop) { - height: 300px; - } - @include media-query($on-palm) { - height: 180px; - } - - -} - -.post { - margin-bottom: 2em; -} - -.page-content { - margin-top: 40px; -} diff --git a/images/image-2.png b/content/images/image-2.png similarity index 100% rename from images/image-2.png rename to content/images/image-2.png diff --git a/images/mahabharata-family-tree.png b/content/images/mahabharata-family-tree.png similarity index 100% rename from images/mahabharata-family-tree.png rename to content/images/mahabharata-family-tree.png diff --git a/images/sky.jpg b/content/images/sky.jpg similarity index 100% rename from images/sky.jpg rename to content/images/sky.jpg diff --git a/images/snow.jpg b/content/images/snow.jpg similarity index 100% rename from images/snow.jpg rename to content/images/snow.jpg diff --git a/images/veda-vyasa-ganesha.jpg b/content/images/veda-vyasa-ganesha.jpg similarity index 100% rename from images/veda-vyasa-ganesha.jpg rename to content/images/veda-vyasa-ganesha.jpg diff --git a/images/vyaasa-jekyll-theme-1.png b/content/images/vyaasa-jekyll-theme-1.png similarity index 100% rename from images/vyaasa-jekyll-theme-1.png rename to content/images/vyaasa-jekyll-theme-1.png diff --git a/images/vyaasa-jekyll-theme-2.png b/content/images/vyaasa-jekyll-theme-2.png similarity index 100% rename from images/vyaasa-jekyll-theme-2.png rename to content/images/vyaasa-jekyll-theme-2.png diff --git a/images/vyaasa-responsive-jekyll-theme-1.png b/content/images/vyaasa-responsive-jekyll-theme-1.png similarity index 100% rename from images/vyaasa-responsive-jekyll-theme-1.png rename to content/images/vyaasa-responsive-jekyll-theme-1.png diff --git a/images/wall.png b/content/images/wall.png similarity index 100% rename from images/wall.png rename to content/images/wall.png diff --git a/images/windows.jpg b/content/images/windows.jpg similarity index 100% rename from images/windows.jpg rename to content/images/windows.jpg diff --git a/_pages/about.md b/content/pages/about.md similarity index 100% rename from _pages/about.md rename to content/pages/about.md diff --git a/_posts/2015-01-20-asyncdotio.md b/content/posts/2015-01-20-asyncdotio.md similarity index 100% rename from _posts/2015-01-20-asyncdotio.md rename to content/posts/2015-01-20-asyncdotio.md diff --git a/_posts/2015-05-27-websocket-experiments-in-flask.md b/content/posts/2015-05-27-websocket-experiments-in-flask.md similarity index 100% rename from _posts/2015-05-27-websocket-experiments-in-flask.md rename to content/posts/2015-05-27-websocket-experiments-in-flask.md diff --git a/_posts/2016-01-20-factory_boy_behave_and_click.md b/content/posts/2016-01-20-factory_boy_behave_and_click.md similarity index 100% rename from _posts/2016-01-20-factory_boy_behave_and_click.md rename to content/posts/2016-01-20-factory_boy_behave_and_click.md diff --git a/_posts/2016-10-26-django_v_rails-extending_python_with_rust_and_cffi.md b/content/posts/2016-10-26-django_v_rails-extending_python_with_rust_and_cffi.md similarity index 100% rename from _posts/2016-10-26-django_v_rails-extending_python_with_rust_and_cffi.md rename to content/posts/2016-10-26-django_v_rails-extending_python_with_rust_and_cffi.md diff --git a/_posts/2017-02-21-alexa_and_python_aws_lambada_property_testing.md b/content/posts/2017-02-21-alexa_and_python_aws_lambada_property_testing.md similarity index 100% rename from _posts/2017-02-21-alexa_and_python_aws_lambada_property_testing.md rename to content/posts/2017-02-21-alexa_and_python_aws_lambada_property_testing.md diff --git a/_posts/2022-03-03-pybelfast-returns.md b/content/posts/2022-03-03-pybelfast-returns.md similarity index 100% rename from _posts/2022-03-03-pybelfast-returns.md rename to content/posts/2022-03-03-pybelfast-returns.md diff --git a/_posts/2022-04-14-spring-meetup.md b/content/posts/2022-04-14-spring-meetup.md similarity index 100% rename from _posts/2022-04-14-spring-meetup.md rename to content/posts/2022-04-14-spring-meetup.md diff --git a/css/main.scss b/css/main.scss index 2f5c047..e69de29 100644 --- a/css/main.scss +++ b/css/main.scss @@ -1,54 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- -@charset "utf-8"; - - - -// Our variables -$base-font-family: 'Source Serif Pro', serif; -$base-font-size: 20px; -$title-font-size: {{site.title-font-size}}; - -$base-font-weight: 400; -$small-font-size: $base-font-size * 0.875; -$base-line-height: 1.6; - -$spacing-unit: 30px; - -$text-color: #555; -$background-color: #fdfdfd; -$brand-color: #98C1D9; -$comp-color: #A7D3A6; -$grey-color: #666; -$grey-color-light: lighten($grey-color, 40%); -$grey-color-dark: darken($grey-color, 25%); - -// Width of the content area -$content-width: 800px; - -$on-palm: 600px; -$on-laptop: 800px; - - - -// Use media queries like this: -// @include media-query($on-palm) { -// .wrapper { -// padding-right: $spacing-unit / 2; -// padding-left: $spacing-unit / 2; -// } -// } -@mixin media-query($device) { - @media screen and (max-width: $device) { - @content; - } -} - - - -// Import partials from `sass_dir` (defaults to `_sass`) -@import - "base", - "layout" -; diff --git a/.ruby-gemset b/jekyll_content_archive/.ruby-gemset similarity index 100% rename from .ruby-gemset rename to jekyll_content_archive/.ruby-gemset diff --git a/.ruby-version b/jekyll_content_archive/.ruby-version similarity index 100% rename from .ruby-version rename to jekyll_content_archive/.ruby-version diff --git a/Gemfile b/jekyll_content_archive/Gemfile similarity index 100% rename from Gemfile rename to jekyll_content_archive/Gemfile diff --git a/Gemfile.lock b/jekyll_content_archive/Gemfile.lock similarity index 100% rename from Gemfile.lock rename to jekyll_content_archive/Gemfile.lock diff --git a/_config.yml b/jekyll_content_archive/_config.yml similarity index 100% rename from _config.yml rename to jekyll_content_archive/_config.yml diff --git a/feed.xml b/jekyll_content_archive/feed.xml similarity index 100% rename from feed.xml rename to jekyll_content_archive/feed.xml diff --git a/index.html b/jekyll_content_archive/index.html similarity index 100% rename from index.html rename to jekyll_content_archive/index.html diff --git a/output/alexa-and-python-aws-lambda-property-testing.html b/output/alexa-and-python-aws-lambda-property-testing.html new file mode 100644 index 0000000..2a5ed2c --- /dev/null +++ b/output/alexa-and-python-aws-lambda-property-testing.html @@ -0,0 +1,82 @@ + + + + + + + "Alexa and Python - AWS Lambda & Property Testing" + + + + + + +
+
+
+

+ "Alexa and Python - AWS Lambda & Property Testing"

+
+ +
+
+ + Published: Tue 21 February 2017 + + +
+ By PyBelfast +
+

In posts.

+ +

Venue

+

ShopKeep

+

Talks

+

We had a great first meetup of 2017, very well attended at ShopKeep Belfast.

+

AWS Lambda - "WTF is it"

+

Pete McConnell gave a talk on AWS Lambda.

+

Parseltongue - Speaking to the Snake"

+

Simon Hewitt gave a talk on Alexa and Python - "Parseltongue - Speaking to the Snake".

+

Property testing in Python with Hypothesis

+

Chris Nixon gave a talk on property testing.

+
+ +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/archives.html b/output/archives.html new file mode 100644 index 0000000..bde0b7b --- /dev/null +++ b/output/archives.html @@ -0,0 +1,68 @@ + + + + + + + PyBelfast + + + + + +
+

Archives for PyBelfast

+ +
+
Thu 14 April 2022
+
PyBelfast Spring Meetup!
+
Thu 03 March 2022
+
PyBelfast Returns!
+
Tue 21 February 2017
+
"Alexa and Python - AWS Lambda & Property Testing"
+
Wed 26 October 2016
+
"Django v Rails & extending Python"
+
Wed 20 January 2016
+
"factory_boy, behave & click"
+
Wed 27 May 2015
+
"Websocket experiments in Flask"
+
Tue 20 January 2015
+
"async.io"
+
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/asyncio.html b/output/asyncio.html new file mode 100644 index 0000000..43eb258 --- /dev/null +++ b/output/asyncio.html @@ -0,0 +1,87 @@ + + + + + + + "async.io" + + + + + + +
+ +
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/author/pybelfast.html b/output/author/pybelfast.html new file mode 100644 index 0000000..2c8ff9e --- /dev/null +++ b/output/author/pybelfast.html @@ -0,0 +1,265 @@ + + + + + + + PyBelfast - PyBelfast + + + + + + + +
+

Other articles

+
+
    + +
  1. + +
  2. + +
  3. + +
  4. + +
  5. + +
  6. +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/authors.html b/output/authors.html new file mode 100644 index 0000000..8b56b02 --- /dev/null +++ b/output/authors.html @@ -0,0 +1,56 @@ + + + + + + + PyBelfast - Authors + + + + + + +
+

Authors on PyBelfast

+ +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/output/categories.html b/output/categories.html new file mode 100644 index 0000000..5129335 --- /dev/null +++ b/output/categories.html @@ -0,0 +1,56 @@ + + + + + + + PyBelfast - Categories + + + + + + +
+

Categories for PyBelfast

+ +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/output/category/posts.html b/output/category/posts.html new file mode 100644 index 0000000..5bfc274 --- /dev/null +++ b/output/category/posts.html @@ -0,0 +1,265 @@ + + + + + + + PyBelfast - posts + + + + + + + +
+

Other articles

+
+
    + +
  1. + +
  2. + +
  3. + +
  4. + +
  5. + +
  6. +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/django-v-rails-extending-python.html b/output/django-v-rails-extending-python.html new file mode 100644 index 0000000..3dec7b9 --- /dev/null +++ b/output/django-v-rails-extending-python.html @@ -0,0 +1,79 @@ + + + + + + + "Django v Rails & extending Python" + + + + + + +
+
+
+

+ "Django v Rails & extending Python"

+
+ +
+
+ + Published: Wed 26 October 2016 + + +
+ By PyBelfast +
+

In posts.

+ +

Venue

+

FarsetLabs

+

Talks

+

Rails v Django

+

Stephen McCullough gave a talk on Django v Rails a non troll talk on what is good and what is bad about both. The talk can be found here.

+

Extending Python with Rust and CFFI

+

Chris Nixon will be presenting a talk on "Extending Python with Rust and CFFI" - A Walkthrough of creating a Python package using Mozilla's powerful systems programming language, leveraging a state of the art Python FFI library. The talk can be found here and the source materials here.

+
+ +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/factory_boy-behave-click.html b/output/factory_boy-behave-click.html new file mode 100644 index 0000000..b2eaa46 --- /dev/null +++ b/output/factory_boy-behave-click.html @@ -0,0 +1,79 @@ + + + + + + + "factory_boy, behave & click" + + + + + + +
+ +
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/images/image-2.png b/output/images/image-2.png new file mode 100644 index 0000000..bbb10e5 Binary files /dev/null and b/output/images/image-2.png differ diff --git a/output/images/mahabharata-family-tree.png b/output/images/mahabharata-family-tree.png new file mode 100644 index 0000000..8bf05f7 Binary files /dev/null and b/output/images/mahabharata-family-tree.png differ diff --git a/output/images/sky.jpg b/output/images/sky.jpg new file mode 100644 index 0000000..7856464 Binary files /dev/null and b/output/images/sky.jpg differ diff --git a/output/images/snow.jpg b/output/images/snow.jpg new file mode 100644 index 0000000..0d2c82c Binary files /dev/null and b/output/images/snow.jpg differ diff --git a/output/images/veda-vyasa-ganesha.jpg b/output/images/veda-vyasa-ganesha.jpg new file mode 100644 index 0000000..4c390f0 Binary files /dev/null and b/output/images/veda-vyasa-ganesha.jpg differ diff --git a/output/images/vyaasa-jekyll-theme-1.png b/output/images/vyaasa-jekyll-theme-1.png new file mode 100644 index 0000000..ca141dd Binary files /dev/null and b/output/images/vyaasa-jekyll-theme-1.png differ diff --git a/output/images/vyaasa-jekyll-theme-2.png b/output/images/vyaasa-jekyll-theme-2.png new file mode 100644 index 0000000..59507e2 Binary files /dev/null and b/output/images/vyaasa-jekyll-theme-2.png differ diff --git a/output/images/vyaasa-responsive-jekyll-theme-1.png b/output/images/vyaasa-responsive-jekyll-theme-1.png new file mode 100644 index 0000000..14bf9c5 Binary files /dev/null and b/output/images/vyaasa-responsive-jekyll-theme-1.png differ diff --git a/output/images/wall.png b/output/images/wall.png new file mode 100644 index 0000000..93ab3b0 Binary files /dev/null and b/output/images/wall.png differ diff --git a/output/images/windows.jpg b/output/images/windows.jpg new file mode 100644 index 0000000..7451af9 Binary files /dev/null and b/output/images/windows.jpg differ diff --git a/output/index.html b/output/index.html new file mode 100644 index 0000000..c3317d9 --- /dev/null +++ b/output/index.html @@ -0,0 +1,265 @@ + + + + + + + PyBelfast + + + + + + + +
+

Other articles

+
+
    + +
  1. + +
  2. + +
  3. + +
  4. + +
  5. + +
  6. +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/pages/about.html b/output/pages/about.html new file mode 100644 index 0000000..ad04513 --- /dev/null +++ b/output/pages/about.html @@ -0,0 +1,74 @@ + + + + + + + About + + + + + +
+

About

+ +

What is pyBelfast?

+

pyBelfast is a group of people who use Python in their work or personal +programming projects and like to meet and talk about it.

+

When do you meet?

+

We try and meet bi-monthly however this varies. We keep a +meetup page for definitive information.

+

Can anyone talk?

+

Yes we encourage people to talk. Drop by the slack channel and let us know, we +are a very welcoming bunch.

+

You mentioned a slack channel?

+

Pop into the Irish Tech Slack user group and +join the #pybelfast group. Just say 'hi!'.

+

Organisers

+

Paddy Carey and Stephen +McCullough are the organisers, you can find them +on the slack channel.

+

About this site

+

This site was created by Stephen McCullough using Jekyll +(if you don't like it then please change it). Pull Requests for improvements +are encouraged and welcomed. You can see a list of +issues if you want +to tackle one.

+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/pybelfast-returns.html b/output/pybelfast-returns.html new file mode 100644 index 0000000..a2bf792 --- /dev/null +++ b/output/pybelfast-returns.html @@ -0,0 +1,94 @@ + + + + + + + PyBelfast Returns! + + + + + + +
+
+
+

+ PyBelfast Returns!

+
+ +
+
+ + Published: Thu 03 March 2022 + + +
+ By PyBelfast +
+

In posts.

+ +

Details

+

Date: Tuesday March 24th, 2022 (2022-03-24)

+

Time: 6pm (1800)

+

Venue: Slice Offices, 14 Castle Street, Belfast (54.59909880408056 N, -5.93103321919092 W)

+

Registration: Sign up to the Meetup Event here

+

Finally, after a long hiatus, we are excited to announce that PyBelfast is back and ready to host our next Python meetup in Belfast at the Slice office space in the city center.

+

As always, we welcome returning and new speakers to come to give a talk of any duration (5 minutes to 30) on any Python-related subject.

+

Talks:

+

Comic Books, Open Source, & GraphQL

+

by Kyle Harrison (@apoclyps)

+

Ever think to yourself that a better product or service must exist but you failed to find one? Solving a real problem with technology can often be time-consuming when you first have to go build it. Yet building an MVP in a weekend is an achievable goal when the focus is maintained on the core problem. In this talk, Kyle will explore a solution to how you too can enjoy your comic book collection using a mix of open-source tech and GraphQL.

+

Introduction to Geospatial Graph Networks with OSMNX

+

by Andrew Bolster (@bolster)

+

While we’re used to thinking of maps and charts as being two-dimensional representations of reality, an alternative approach is to view maps as a graph of vertices (locations) and edges (roads or paths). Using the osnmx library, we’re going to do a short introduction to acquiring, manipulating, analysing, and plotting this stranger perspective on the world around us.

+
+

May include lasers.

+
+

How (not) to lie with data visualisation

+

by Curtis Wilson

+

Human brains are hard-wired to derive insights from what we see. Whenever we make a graph or chart or infographic we are trying to trick this system into understanding much more abstract information than “that apple looks good to eat” or “that tiger thinks I look good to eat”. A little insight into how our sense of sight works can help us create visualisations that express the underlying data as accurately as possible (or not, as the case may be).

+

Lightning Talks

+

If you wish to present a lightning talk, feel free to reach out via Meetup or using either @pybelfast on Twitter or Slack (We are on both the NITech and ITC slacks)

+
+ +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/pybelfast-spring-meetup.html b/output/pybelfast-spring-meetup.html new file mode 100644 index 0000000..179fc12 --- /dev/null +++ b/output/pybelfast-spring-meetup.html @@ -0,0 +1,93 @@ + + + + + + + PyBelfast Spring Meetup! + + + + + + +
+
+
+

+ PyBelfast Spring Meetup!

+
+ +
+
+ + Published: Thu 14 April 2022 + + +
+ By PyBelfast +
+

In posts.

+ +

Details

+

Date: Monday, April 24th, 2022 (2022-04-25)

+

Time: 6pm (1800)

+

Venue: Slice Offices, 14 Castle Street, Belfast (54.59909880408056 N, -5.93103321919092 W)

+

Registration: Sign up to the Meetup Event here

+

After an awesome turnout at our last meetup on Thursday, March 24th, 2022, we are excited to return with the PyBelfast meetup in what will soon become a return to a regular cadence of Python meetups again!

+

As always, we welcome returning and new speakers to come to give a talk of any duration (5 minutes to 30) on any Python-related subject.

+

Talks

+

Scream if you wanna go Fast(API)er

+

by Simon Hewitt (@tyndyll)

+

An introduction to FastAPI, a modern, high-performance web framework for building APIs with Python 3.6+ based on standard Python type hints.

+

SRE and the rise of the Platform Engineer

+

by Dan Murphy (@d_murph21)

+

Google has once again rewritten the rule book with SRE. As it finally gains momentum in Northern Ireland, I examine why it is such a revolution. The rise of Platform Engineering or PaaS has built upon SRE and DevOps culture to connect services in ways never thought possible. Let me take you through its history, and present and explore how it can help your business.

+

Django Girls Belfast

+

by Danielle from (@djangogirlsbel)

+

An insight into Django Girls Belfast and the work they do to help create a safe environment where women can explore technology.

+

Django Girls Belfast is trans-inclusive and welcome all women from all walks of life. Men are welcome to attend as well. We don't want men out of the IT industry, we want more women in it.

+

If you are a woman and between the ages of 18-100 you can apply for a pass to the workshop on the 18th of June 2022, in Puppet Belfast! You don’t need to know any technical stuff - it is a very informal day with coaches on hand to help assist.

+

Lightning Talks

+

If you wish to present a lightning talk, feel free to reach out via Meetup or using either @pybelfast on Twitter or Slack (We are on both the NITech and ITC slacks)

+
+ +
+
+
+ + +
+ + + + + \ No newline at end of file diff --git a/output/tags.html b/output/tags.html new file mode 100644 index 0000000..509ecb6 --- /dev/null +++ b/output/tags.html @@ -0,0 +1,55 @@ + + + + + + + PyBelfast - Tags + + + + + + +
+

Tags for PyBelfast

+
    +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/output/theme/css/fonts.css b/output/theme/css/fonts.css new file mode 100644 index 0000000..5601507 --- /dev/null +++ b/output/theme/css/fonts.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('../fonts/Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('../fonts/Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/output/theme/css/main.css b/output/theme/css/main.css new file mode 100644 index 0000000..a4aa51a --- /dev/null +++ b/output/theme/css/main.css @@ -0,0 +1,472 @@ +/* + Name: Smashing HTML5 + Date: July 2009 + Description: Sample layout for HTML5 and CSS3 goodness. + Version: 1.0 + License: MIT + Licensed by: Smashing Media GmbH + Original author: Enrique Ramírez +*/ + +/* Imports */ +@import url("reset.css"); +@import url("pygment.css"); +@import url("typogrify.css"); +@import url("fonts.css"); + +/***** Global *****/ +/* Body */ +body { + background: #F5F4EF; + color: #000305; + font-size: 87.5%; /* Base font size: 14px */ + font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + line-height: 1.429; + margin: 0; + padding: 0; + text-align: left; +} + +/* Headings */ +h1 {font-size: 2em } +h2 {font-size: 1.571em} /* 22px */ +h3 {font-size: 1.429em} /* 20px */ +h4 {font-size: 1.286em} /* 18px */ +h5 {font-size: 1.143em} /* 16px */ +h6 {font-size: 1em} /* 14px */ + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; + line-height: 1.1; + margin-bottom: .8em; + font-family: 'Yanone Kaffeesatz', arial, serif; +} + +h3, h4, h5, h6 { margin-top: .8em; } + +hr { border: 2px solid #EEEEEE; } + +/* Anchors */ +a {outline: 0;} +a img {border: 0px; text-decoration: none;} +a:link, a:visited { + color: #C74350; + padding: 0 1px; + text-decoration: underline; +} +a:hover, a:active { + background-color: #C74350; + color: #fff; + text-decoration: none; + text-shadow: 1px 1px 1px #333; +} + +h1 a:hover { + background-color: inherit +} + +/* Paragraphs */ +div.line-block, +p { margin-top: 1em; + margin-bottom: 1em;} + +strong, b {font-weight: bold;} +em, i {font-style: italic;} + +/* Lists */ +ul { + list-style: outside disc; + margin: 0em 0 0 1.5em; +} + +ol { + list-style: outside decimal; + margin: 0em 0 0 1.5em; +} + +li { margin-top: 0.5em; + margin-bottom: 1em; } + +.post-info { + float:right; + margin:10px; + padding:5px; +} + +.post-info p{ + margin-top: 1px; + margin-bottom: 1px; +} + +.readmore { float: right } + +dl {margin: 0 0 1.5em 0;} +dt {font-weight: bold;} +dd {margin-left: 1.5em;} + +pre{background-color: rgb(238, 238, 238); padding: 10px; margin: 10px; overflow: auto;} + +/* Quotes */ +blockquote { + margin: 20px; + font-style: italic; +} +cite {} + +q {} + +div.note { + float: right; + margin: 5px; + font-size: 85%; + max-width: 300px; +} + +/* Tables */ +table {margin: .5em auto 1.5em auto; width: 98%;} + + /* Thead */ + thead th {padding: .5em .4em; text-align: left;} + thead td {} + + /* Tbody */ + tbody td {padding: .5em .4em;} + tbody th {} + + tbody .alt td {} + tbody .alt th {} + + /* Tfoot */ + tfoot th {} + tfoot td {} + +/* HTML5 tags */ +header, section, footer, +aside, nav, article, figure { + display: block; +} + +/***** Layout *****/ +.body {clear: both; margin: 0 auto; max-width: 800px;} +img { max-width: 100%; } +img.right, figure.right, div.figure.align-right { + float: right; + margin: 0 0 2em 2em; +} +img.left, figure.left, div.figure.align-left { + float: left; + margin: 0 2em 2em 0; +} + +/* .rst support */ +div.figure img, figure img { /* to fill figure exactly */ + max-width: 100%; +} +div.figure p.caption, figure p.caption { /* margin provided by figure */ + margin-top: 0; + margin-bottom: 0; +} + +/* + Header +*****************/ +#banner { + margin: 0 auto; + padding: 0.8em 0 0 0; +} + + /* Banner */ + #banner h1 { + font-size: 3.571em; + line-height: 1.0; + margin-bottom: .3em; + } + + #banner h1 a:link, #banner h1 a:visited { + color: #000305; + display: block; + font-weight: bold; + margin: 0 0 0 .2em; + text-decoration: none; + } + #banner h1 a:hover, #banner h1 a:active { + background: none; + color: #C74350; + text-shadow: none; + } + + #banner h1 strong {font-size: 0.36em; font-weight: normal;} + + /* Main Nav */ + #banner nav { + background: #000305; + font-size: 1.143em; + overflow: auto; + line-height: 30px; + margin: 0 auto 2em auto; + padding: 0; + text-align: center; + max-width: 800px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + + #banner nav ul {list-style: none; margin: 0 auto; max-width: 800px;} + #banner nav li {float: left; display: inline; margin: 0;} + + #banner nav a:link, #banner nav a:visited { + color: #fff; + display: inline-block; + height: 30px; + padding: 5px 1.5em; + text-decoration: none; + } + #banner nav a:hover, #banner nav a:active, + #banner nav .active a:link, #banner nav .active a:visited { + background: #C74451; + color: #fff; + text-shadow: none !important; + } + + #banner nav li:first-child a { + border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + -webkit-border-top-left-radius: 5px; + + border-bottom-left-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -webkit-border-bottom-left-radius: 5px; + } + +/* + Featured +*****************/ +#featured { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#featured figure { + border: 2px solid #eee; + float: right; + margin: 0.786em 2em 0 5em; + max-width: 248px; +} +#featured figure img {display: block; float: right;} + +#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;} +#featured h3 {font-size: 1.429em; margin-bottom: .5em;} + +#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;} +#featured h3 a:hover, #featured h3 a:active {color: #fff;} + +/* + Body +*****************/ +#content { + background: #fff; + margin-bottom: 2em; + overflow: hidden; + padding: 20px 20px; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +/* + Extras +*****************/ +#extras {margin: 0 auto 3em auto; overflow: hidden;} + +#extras ul {list-style: none; margin: 0;} +#extras li {border-bottom: 1px solid #fff;} +#extras h2 { + color: #C74350; + font-size: 1.429em; + margin-bottom: .25em; + padding: 0 3px; +} + +#extras a:link, #extras a:visited { + color: #444; + display: block; + border-bottom: 1px solid #F4E3E3; + text-decoration: none; + padding: .3em .25em; +} + +#extras a:hover, #extras a:active {color: #fff;} + + /* Blogroll */ + #extras .blogroll { + float: left; + max-width: 615px; + } + + #extras .blogroll li {float: left; margin: 0 20px 0 0; max-width: 185px;} + + /* Social */ + #extras .social { + float: right; + max-width: 175px; + } + + #extras div[class='social'] a { + background-repeat: no-repeat; + background-position: 3px 6px; + padding-left: 25px; + } + + /* Icons */ + .social a[href*='about.me'] {background-image: url('../images/icons/aboutme.png');} + .social a[href*='bitbucket.org'] {background-image: url('../images/icons/bitbucket.png');} + .social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');} + .social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');} + .social a[href*='gitorious.org'] {background-image: url('../images/icons/gitorious.png');} + .social a[href*='github.com'], + .social a[href*='git.io'] { + background-image: url('../images/icons/github.png'); + background-size: 16px 16px; + } + .social a[href*='gittip.com'] {background-image: url('../images/icons/gittip.png');} + .social a[href*='plus.google.com'] {background-image: url('../images/icons/google-plus.png');} + .social a[href*='groups.google.com'] {background-image: url('../images/icons/google-groups.png');} + .social a[href*='news.ycombinator.com'], + .social a[href*='hackernewsers.com'] {background-image: url('../images/icons/hackernews.png');} + .social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');} + .social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');} + .social a[href*='reddit.com'] {background-image: url('../images/icons/reddit.png');} + .social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');} + .social a[href*='slideshare.net'] {background-image: url('../images/icons/slideshare.png');} + .social a[href*='speakerdeck.com'] {background-image: url('../images/icons/speakerdeck.png');} + .social a[href*='stackoverflow.com'] {background-image: url('../images/icons/stackoverflow.png');} + .social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');} + .social a[href*='vimeo.com'] {background-image: url('../images/icons/vimeo.png');} + .social a[href*='youtube.com'] {background-image: url('../images/icons/youtube.png');} + +/* + About +*****************/ +#about { + background: #fff; + font-style: normal; + margin-bottom: 2em; + overflow: hidden; + padding: 20px; + text-align: left; + max-width: 760px; + + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +#about .primary {float: left; max-width: 165px;} +#about .primary strong {color: #C64350; display: block; font-size: 1.286em;} +#about .photo {float: left; margin: 5px 20px;} + +#about .url:link, #about .url:visited {text-decoration: none;} + +#about .bio {float: right; max-width: 500px;} + +/* + Footer +*****************/ +#contentinfo {padding-bottom: 2em; text-align: right;} + +/***** Sections *****/ +/* Blog */ +.hentry { + display: block; + clear: both; + border-top: 1px solid #eee; + padding: 1.5em 0; +} +li:first-child .hentry, #content > .hentry {border: 0; margin: 0;} +#content > .hentry {padding: 1em 0;} +.hentry img{display : none ;} +.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;} +.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;} +.entry-title a:visited {background-color: #fff;} + +.hentry .post-info * {font-style: normal;} + + /* Content */ + .hentry footer {margin-bottom: 2em;} + .hentry footer address {display: inline;} + #posts-list footer address {display: block;} + + /* Blog Index */ + #posts-list {list-style: none; margin: 0;} + #posts-list .hentry {padding-left: 10px; position: relative;} + + #posts-list footer { + left: 10px; + position: relative; + float: left; + top: 0.5em; + max-width: 190px; + } + + /* About the Author */ + #about-author { + background: #f9f9f9; + clear: both; + font-style: normal; + margin: 2em 0; + padding: 10px 20px 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + + #about-author strong { + color: #C64350; + clear: both; + display: block; + font-size: 1.429em; + } + + #about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;} + + /* Comments */ + #comments-list {list-style: none; margin: 0 1em;} + #comments-list blockquote { + background: #f8f8f8; + clear: both; + font-style: normal; + margin: 0; + padding: 15px 20px; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + } + #comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;} + + #comments-list li:nth-child(2n) blockquote {background: #F5f5f5;} + + /* Add a Comment */ + #add-comment label {clear: left; float: left; text-align: left; max-width: 150px;} + #add-comment input[type='text'], + #add-comment input[type='email'], + #add-comment input[type='url'] {float: left; max-width: 200px;} + + #add-comment textarea {float: left; height: 150px; max-width: 495px;} + + #add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;} + + #add-comment input[type='submit'] {float: right; margin: 0 .5em;} + #add-comment * {margin-bottom: .5em;} diff --git a/output/theme/css/pygment.css b/output/theme/css/pygment.css new file mode 100644 index 0000000..fdd056f --- /dev/null +++ b/output/theme/css/pygment.css @@ -0,0 +1,205 @@ +.hll { +background-color:#eee; +} +.c { +color:#408090; +font-style:italic; +} +.err { +border:1px solid #FF0000; +} +.k { +color:#007020; +font-weight:bold; +} +.o { +color:#666666; +} +.cm { +color:#408090; +font-style:italic; +} +.cp { +color:#007020; +} +.c1 { +color:#408090; +font-style:italic; +} +.cs { +background-color:#FFF0F0; +color:#408090; +} +.gd { +color:#A00000; +} +.ge { +font-style:italic; +} +.gr { +color:#FF0000; +} +.gh { +color:#000080; +font-weight:bold; +} +.gi { +color:#00A000; +} +.go { +color:#303030; +} +.gp { +color:#C65D09; +font-weight:bold; +} +.gs { +font-weight:bold; +} +.gu { +color:#800080; +font-weight:bold; +} +.gt { +color:#0040D0; +} +.kc { +color:#007020; +font-weight:bold; +} +.kd { +color:#007020; +font-weight:bold; +} +.kn { +color:#007020; +font-weight:bold; +} +.kp { +color:#007020; +} +.kr { +color:#007020; +font-weight:bold; +} +.kt { +color:#902000; +} +.m { +color:#208050; +} +.s { +color:#4070A0; +} +.na { +color:#4070A0; +} +.nb { +color:#007020; +} +.nc { +color:#0E84B5; +font-weight:bold; +} +.no { +color:#60ADD5; +} +.nd { +color:#555555; +font-weight:bold; +} +.ni { +color:#D55537; +font-weight:bold; +} +.ne { +color:#007020; +} +.nf { +color:#06287E; +} +.nl { +color:#002070; +font-weight:bold; +} +.nn { +color:#0E84B5; +font-weight:bold; +} +.nt { +color:#062873; +font-weight:bold; +} +.nv { +color:#BB60D5; +} +.ow { +color:#007020; +font-weight:bold; +} +.w { +color:#BBBBBB; +} +.mf { +color:#208050; +} +.mh { +color:#208050; +} +.mi { +color:#208050; +} +.mo { +color:#208050; +} +.sb { +color:#4070A0; +} +.sc { +color:#4070A0; +} +.sd { +color:#4070A0; +font-style:italic; +} +.s2 { +color:#4070A0; +} +.se { +color:#4070A0; +font-weight:bold; +} +.sh { +color:#4070A0; +} +.si { +color:#70A0D0; +font-style:italic; +} +.sx { +color:#C65D09; +} +.sr { +color:#235388; +} +.s1 { +color:#4070A0; +} +.ss { +color:#517918; +} +.bp { +color:#007020; +} +.vc { +color:#BB60D5; +} +.vg { +color:#BB60D5; +} +.vi { +color:#BB60D5; +} +.il { +color:#208050; +} diff --git a/output/theme/css/reset.css b/output/theme/css/reset.css new file mode 100644 index 0000000..c88e619 --- /dev/null +++ b/output/theme/css/reset.css @@ -0,0 +1,52 @@ +/* + Name: Reset Stylesheet + Description: Resets browser's default CSS + Author: Eric Meyer + Author URI: https://meyerweb.com/eric/tools/css/reset/ +*/ + +/* v1.0 | 20080212 */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +body {line-height: 1;} + +ol, ul {list-style: none;} + +blockquote, q {quotes: none;} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define focus styles! */ +:focus { + outline: 0; +} + +/* remember to highlight inserts somehow! */ +ins {text-decoration: none;} +del {text-decoration: line-through;} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/output/theme/css/typogrify.css b/output/theme/css/typogrify.css new file mode 100644 index 0000000..3bae497 --- /dev/null +++ b/output/theme/css/typogrify.css @@ -0,0 +1,3 @@ +.caps {font-size:.92em;} +.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;} +.dquo {margin-left:-.38em;} diff --git a/output/theme/css/wide.css b/output/theme/css/wide.css new file mode 100644 index 0000000..88fd59c --- /dev/null +++ b/output/theme/css/wide.css @@ -0,0 +1,48 @@ +@import url("main.css"); + +body { + font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif; +} + +.post-info{ + display: none; +} + +#banner nav { + display: none; + -moz-border-radius: 0px; + margin-bottom: 20px; + overflow: hidden; + font-size: 1em; + background: #F5F4EF; +} + +#banner nav ul{ + padding-right: 50px; +} + +#banner nav li{ + float: right; + color: #000; +} + +#banner nav li a { + color: #000; +} + +#banner h1 { + margin-bottom: -18px; +} + +#featured, #extras { + padding: 50px; +} + +#featured { + padding-top: 20px; +} + +#extras { + padding-top: 0px; + padding-bottom: 0px; +} diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.eot b/output/theme/fonts/Yanone_Kaffeesatz_400.eot new file mode 100644 index 0000000..b3b90db Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.eot differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.svg b/output/theme/fonts/Yanone_Kaffeesatz_400.svg new file mode 100644 index 0000000..a69669b --- /dev/null +++ b/output/theme/fonts/Yanone_Kaffeesatz_400.svg @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.ttf b/output/theme/fonts/Yanone_Kaffeesatz_400.ttf new file mode 100644 index 0000000..6f4feb0 Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.ttf differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.woff b/output/theme/fonts/Yanone_Kaffeesatz_400.woff new file mode 100644 index 0000000..ddccf76 Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.woff differ diff --git a/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 b/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 new file mode 100644 index 0000000..7b18f7e Binary files /dev/null and b/output/theme/fonts/Yanone_Kaffeesatz_400.woff2 differ diff --git a/output/theme/fonts/font.css b/output/theme/fonts/font.css new file mode 100644 index 0000000..a9eb87e --- /dev/null +++ b/output/theme/fonts/font.css @@ -0,0 +1,12 @@ +@font-face { + font-family: 'Yanone Kaffeesatz'; + font-style: normal; + font-weight: 400; + src: + local('Yanone Kaffeesatz Regular'), + local('YanoneKaffeesatz-Regular'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLRTHiN2BPBirwIkMLKUspj4.woff */ + url('Yanone_Kaffeesatz_400.woff') format('woff'), + /* from https://fonts.gstatic.com/s/yanonekaffeesatz/v8/YDAoLskQQ5MOAgvHUQCcLfGwxTS8d1Q9KiDNCMKLFUM.woff2 */ + url('Yanone_Kaffeesatz_400.woff2') format('woff2'); +} diff --git a/output/theme/images/icons/aboutme.png b/output/theme/images/icons/aboutme.png new file mode 100644 index 0000000..600110f Binary files /dev/null and b/output/theme/images/icons/aboutme.png differ diff --git a/output/theme/images/icons/bitbucket.png b/output/theme/images/icons/bitbucket.png new file mode 100644 index 0000000..277a7df Binary files /dev/null and b/output/theme/images/icons/bitbucket.png differ diff --git a/output/theme/images/icons/delicious.png b/output/theme/images/icons/delicious.png new file mode 100644 index 0000000..34868c5 Binary files /dev/null and b/output/theme/images/icons/delicious.png differ diff --git a/output/theme/images/icons/facebook.png b/output/theme/images/icons/facebook.png new file mode 100644 index 0000000..1d8a432 Binary files /dev/null and b/output/theme/images/icons/facebook.png differ diff --git a/output/theme/images/icons/github.png b/output/theme/images/icons/github.png new file mode 100644 index 0000000..5d9109d Binary files /dev/null and b/output/theme/images/icons/github.png differ diff --git a/output/theme/images/icons/gitorious.png b/output/theme/images/icons/gitorious.png new file mode 100644 index 0000000..a6705d0 Binary files /dev/null and b/output/theme/images/icons/gitorious.png differ diff --git a/output/theme/images/icons/gittip.png b/output/theme/images/icons/gittip.png new file mode 100644 index 0000000..b9f67aa Binary files /dev/null and b/output/theme/images/icons/gittip.png differ diff --git a/output/theme/images/icons/google-groups.png b/output/theme/images/icons/google-groups.png new file mode 100644 index 0000000..bbd0a0f Binary files /dev/null and b/output/theme/images/icons/google-groups.png differ diff --git a/output/theme/images/icons/google-plus.png b/output/theme/images/icons/google-plus.png new file mode 100644 index 0000000..f8553d4 Binary files /dev/null and b/output/theme/images/icons/google-plus.png differ diff --git a/output/theme/images/icons/hackernews.png b/output/theme/images/icons/hackernews.png new file mode 100644 index 0000000..8e05e3e Binary files /dev/null and b/output/theme/images/icons/hackernews.png differ diff --git a/output/theme/images/icons/lastfm.png b/output/theme/images/icons/lastfm.png new file mode 100644 index 0000000..2eedd2d Binary files /dev/null and b/output/theme/images/icons/lastfm.png differ diff --git a/output/theme/images/icons/linkedin.png b/output/theme/images/icons/linkedin.png new file mode 100644 index 0000000..06a8801 Binary files /dev/null and b/output/theme/images/icons/linkedin.png differ diff --git a/output/theme/images/icons/reddit.png b/output/theme/images/icons/reddit.png new file mode 100644 index 0000000..d826d3e Binary files /dev/null and b/output/theme/images/icons/reddit.png differ diff --git a/output/theme/images/icons/rss.png b/output/theme/images/icons/rss.png new file mode 100644 index 0000000..12448f5 Binary files /dev/null and b/output/theme/images/icons/rss.png differ diff --git a/output/theme/images/icons/slideshare.png b/output/theme/images/icons/slideshare.png new file mode 100644 index 0000000..9cbe858 Binary files /dev/null and b/output/theme/images/icons/slideshare.png differ diff --git a/output/theme/images/icons/speakerdeck.png b/output/theme/images/icons/speakerdeck.png new file mode 100644 index 0000000..7281ec4 Binary files /dev/null and b/output/theme/images/icons/speakerdeck.png differ diff --git a/output/theme/images/icons/stackoverflow.png b/output/theme/images/icons/stackoverflow.png new file mode 100644 index 0000000..3c6862e Binary files /dev/null and b/output/theme/images/icons/stackoverflow.png differ diff --git a/output/theme/images/icons/twitter.png b/output/theme/images/icons/twitter.png new file mode 100644 index 0000000..cef1cef Binary files /dev/null and b/output/theme/images/icons/twitter.png differ diff --git a/output/theme/images/icons/vimeo.png b/output/theme/images/icons/vimeo.png new file mode 100644 index 0000000..4b9d721 Binary files /dev/null and b/output/theme/images/icons/vimeo.png differ diff --git a/output/theme/images/icons/youtube.png b/output/theme/images/icons/youtube.png new file mode 100644 index 0000000..e334e68 Binary files /dev/null and b/output/theme/images/icons/youtube.png differ diff --git a/output/websocket-experiments-in-flask.html b/output/websocket-experiments-in-flask.html new file mode 100644 index 0000000..ea0e982 --- /dev/null +++ b/output/websocket-experiments-in-flask.html @@ -0,0 +1,77 @@ + + + + + + + "Websocket experiments in Flask" + + + + + + +
+ +
+
+ + +
+ + + + + \ No newline at end of file diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..f7a3663 --- /dev/null +++ b/pelicanconf.py @@ -0,0 +1,31 @@ +AUTHOR = 'PyBelfast' +SITENAME = 'PyBelfast' +SITEURL = '' + +PATH = 'content' + +TIMEZONE = 'Europe/London' + +DEFAULT_LANG = 'en' + +# Feed generation is usually not desired when developing +FEED_ALL_ATOM = None +CATEGORY_FEED_ATOM = None +TRANSLATION_FEED_ATOM = None +AUTHOR_FEED_ATOM = None +AUTHOR_FEED_RSS = None + +# Blogroll +LINKS = (('Pelican', 'https://getpelican.com/'), + ('Python.org', 'https://www.python.org/'), + ('Jinja2', 'https://palletsprojects.com/p/jinja/'), + ('You can modify those links in your config file', '#'),) + +# Social widget +SOCIAL = (('You can add links in your config file', '#'), + ('Another social link', '#'),) + +DEFAULT_PAGINATION = 10 + +# Uncomment following line if you want document-relative URLs when developing +#RELATIVE_URLS = True \ No newline at end of file diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..86bf99b --- /dev/null +++ b/publishconf.py @@ -0,0 +1,21 @@ +# This file is only used if you use `make publish` or +# explicitly specify it as your config file. + +import os +import sys +sys.path.append(os.curdir) +from pelicanconf import * + +# If your site is available via HTTPS, make sure SITEURL begins with https:// +SITEURL = 'https://pybelfast.org' +RELATIVE_URLS = False + +FEED_ALL_ATOM = 'feeds/all.atom.xml' +CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' + +DELETE_OUTPUT_DIRECTORY = True + +# Following items are often useful when publishing + +#DISQUS_SITENAME = "" +#GOOGLE_ANALYTICS = "" \ No newline at end of file diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..0e12366 --- /dev/null +++ b/tasks.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- + +import os +import shlex +import shutil +import sys +import datetime + +from invoke import task +from invoke.main import program +from invoke.util import cd +from pelican import main as pelican_main +from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer +from pelican.settings import DEFAULT_CONFIG, get_settings_from_file + +OPEN_BROWSER_ON_SERVE = True +SETTINGS_FILE_BASE = 'pelicanconf.py' +SETTINGS = {} +SETTINGS.update(DEFAULT_CONFIG) +LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE) +SETTINGS.update(LOCAL_SETTINGS) + +CONFIG = { + 'settings_base': SETTINGS_FILE_BASE, + 'settings_publish': 'publishconf.py', + # Output path. Can be absolute or relative to tasks.py. Default: 'output' + 'deploy_path': SETTINGS['OUTPUT_PATH'], + # Github Pages configuration + 'github_pages_branch': 'gh-pages', + 'commit_message': "'Publish site on {}'".format(datetime.date.today().isoformat()), + # Host and port for `serve` + 'host': 'localhost', + 'port': 8000, +} + +@task +def clean(c): + """Remove generated files""" + if os.path.isdir(CONFIG['deploy_path']): + shutil.rmtree(CONFIG['deploy_path']) + os.makedirs(CONFIG['deploy_path']) + +@task +def build(c): + """Build local version of site""" + pelican_run('-s {settings_base}'.format(**CONFIG)) + +@task +def rebuild(c): + """`build` with the delete switch""" + pelican_run('-d -s {settings_base}'.format(**CONFIG)) + +@task +def regenerate(c): + """Automatically regenerate site upon file modification""" + pelican_run('-r -s {settings_base}'.format(**CONFIG)) + +@task +def serve(c): + """Serve site at http://$HOST:$PORT/ (default is localhost:8000)""" + + class AddressReuseTCPServer(RootedHTTPServer): + allow_reuse_address = True + + server = AddressReuseTCPServer( + CONFIG['deploy_path'], + (CONFIG['host'], CONFIG['port']), + ComplexHTTPRequestHandler) + + if OPEN_BROWSER_ON_SERVE: + # Open site in default browser + import webbrowser + webbrowser.open("http://{host}:{port}".format(**CONFIG)) + + sys.stderr.write('Serving at {host}:{port} ...\n'.format(**CONFIG)) + server.serve_forever() + +@task +def reserve(c): + """`build`, then `serve`""" + build(c) + serve(c) + +@task +def preview(c): + """Build production version of site""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + +@task +def livereload(c): + """Automatically reload browser tab upon file modification.""" + from livereload import Server + + def cached_build(): + cmd = '-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true' + pelican_run(cmd.format(**CONFIG)) + + cached_build() + server = Server() + theme_path = SETTINGS['THEME'] + watched_globs = [ + CONFIG['settings_base'], + '{}/templates/**/*.html'.format(theme_path), + ] + + content_file_extensions = ['.md', '.rst'] + for extension in content_file_extensions: + content_glob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension) + watched_globs.append(content_glob) + + static_file_extensions = ['.css', '.js'] + for extension in static_file_extensions: + static_file_glob = '{0}/static/**/*{1}'.format(theme_path, extension) + watched_globs.append(static_file_glob) + + for glob in watched_globs: + server.watch(glob, cached_build) + + if OPEN_BROWSER_ON_SERVE: + # Open site in default browser + import webbrowser + webbrowser.open("http://{host}:{port}".format(**CONFIG)) + + server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path']) + + +@task +def publish(c): + """Publish to production via rsync""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + c.run( + 'rsync --delete --exclude ".DS_Store" -pthrvz -c ' + '-e "ssh -p {ssh_port}" ' + '{} {ssh_user}@{ssh_host}:{ssh_path}'.format( + CONFIG['deploy_path'].rstrip('/') + '/', + **CONFIG)) + +@task +def gh_pages(c): + """Publish to GitHub Pages""" + preview(c) + c.run('ghp-import -b {github_pages_branch} ' + '-m {commit_message} ' + '{deploy_path} -p'.format(**CONFIG)) + +def pelican_run(cmd): + cmd += ' ' + program.core.remainder # allows to pass-through args to pelican + pelican_main(shlex.split(cmd)) \ No newline at end of file