<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Project list | rael.io</title><link>https://rael.io/project/</link><atom:link href="https://rael.io/project/index.xml" rel="self" type="application/rss+xml"/><description>Project list</description><generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>en-us</language><copyright>Fork me on [GitHub](https://github.com/raelga/rael.io)</copyright><image><url>https://rael.io/img/photos/cnbcn-contributing-to-k8s.jpg</url><title>Project list</title><link>https://rael.io/project/</link></image><item><title>yodo</title><link>https://rael.io/project/yodo/</link><pubDate>Mon, 26 Aug 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/yodo/</guid><description>
&lt;p&gt;&lt;a href=&#34;https://github.com/raelga/yodo/actions&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://github.com/raelga/yodo/workflows/Build/badge.svg&#34; alt=&#34;Actions Status&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://travis-ci.org/raelga/yodo&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://travis-ci.org/raelga/yodo.svg?branch=master&#34; alt=&#34;Build Status&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://goreportcard.com/report/github.com/raelga/yodo&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://goreportcard.com/badge/github.com/raelga/yodo&#34; alt=&#34;Go Report Card&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://coveralls.io/github/raelga/yodo?branch=master&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://coveralls.io/repos/github/raelga/yodo/badge.svg?branch=master&#34; alt=&#34;Coverage Status&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://github.com/raelga/yodo/blob/master/LICENSE&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/license/raelga/yodo&#34; alt=&#34;GitHub&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simple GoLang &lt;strong&gt;TODO&lt;/strong&gt; application&lt;/p&gt;
&lt;p&gt;This application is just a playground to learn:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TDD&lt;/strong&gt; with GoLang&lt;/li&gt;
&lt;li&gt;github.com/spf13/&lt;strong&gt;cobra&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;github.com/spf13/&lt;strong&gt;viper&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;gopkg.in/&lt;strong&gt;yaml&lt;/strong&gt;.v2&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ go build
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ ./yodo get
default:
Empty list
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ ./yodo add Add verbose mode
add task &amp;quot;Add verbose mode&amp;quot; (false) to file$
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ ./yodo get
default:
- [0] &amp;quot;Add verbose mode&amp;quot; (false)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ ./yodo do 0
Task 0 done.
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ ./yodo get
default:
- [0] &amp;quot;Add verbose mode&amp;quot; (true)
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;$ cat ~/.yodo/default.yaml
id: 0
name: default
tasks:
- id: 0
status: true
description: Add verbose mode
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;Gopher art from &lt;a href=&#34;https://github.com/ashleymcnamara/gophers&#34; target=&#34;_blank&#34;&gt;ashleymcnamara/gophers&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>rael.io</title><link>https://rael.io/project/rael.io/</link><pubDate>Thu, 15 Aug 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/rael.io/</guid><description>&lt;p&gt;&lt;a href=&#34;https://app.netlify.com/sites/rael/deploys&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://api.netlify.com/api/v1/badges/17660b24-5ace-4e45-9d81-31237fbc07fd/deploy-status&#34; alt=&#34;Netlify Status&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Static site for rael.io using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://gohugo.io/&#34; target=&#34;_blank&#34;&gt;Hugo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sourcethemes.com/academic/&#34; target=&#34;_blank&#34;&gt;Academic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://netlify.com&#34; target=&#34;_blank&#34;&gt;Netlify&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>cloudnative.barcelona</title><link>https://rael.io/project/cloudnative.barcelona/</link><pubDate>Wed, 24 Jul 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/cloudnative.barcelona/</guid><description>
&lt;p&gt;&lt;a href=&#34;https://app.netlify.com/sites/cloudnative/deploys&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://api.netlify.com/api/v1/badges/516ad607-63b3-487e-bbee-c2da0d0c2a7a/deploy-status&#34; alt=&#34;Netlify Status&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cloud Native Barcelona&lt;/strong&gt; is the official Cloud Native Computing Foundation (CNCF) user group dedicated to building a strong, open, diverse developer community around the Cloud Native platform and technologies in &lt;strong&gt;Barcelona&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;what-is-cncf&#34;&gt;What is CNCF?&lt;/h2&gt;
&lt;p&gt;CNCF is an open source software foundation dedicated to making cloud native computing universal and sustainable. Cloud native computing uses an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization. Cloud native technologies enable software developers to build great products faster.&lt;/p&gt;
&lt;p&gt;Learn more at &lt;a href=&#34;https://www.cncf.io/&#34; target=&#34;_blank&#34;&gt;cncf.io&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Docker wordpress</title><link>https://rael.io/project/docker-wordpress/</link><pubDate>Mon, 04 Mar 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/docker-wordpress/</guid><description>
&lt;p&gt;Dockerfile for Wordpress with some plugin/theme management.&lt;/p&gt;
&lt;p&gt;Available at &lt;a href=&#34;https://gcr.io/raelga/wordpress&#34; target=&#34;_blank&#34;&gt;gcr.io/raelga/wordpress:latest&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;dockerfile&#34;&gt;Dockerfile&lt;/h2&gt;
&lt;h3 id=&#34;stage-wp-plugins&#34;&gt;Stage: wp-plugins&lt;/h3&gt;
&lt;p&gt;Downloads form GitHub the plugins listed in &lt;a href=&#34;context/plugins.list&#34; target=&#34;_blank&#34;&gt;context/plugins.list&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;raelga/wp-mailgun:1.7.1
wpCloud/wp-stateless:2.2.6
WP2Static/wp2static:6.6.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The format is: &lt;code&gt;&amp;lt;github-username&amp;gt;/&amp;lt;github-repo&amp;gt;:&amp;lt;github-tag&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;stage-wp&#34;&gt;Stage: wp&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Copies the content from &lt;a href=&#34;context/wp-content&#34; target=&#34;_blank&#34;&gt;context/wp-content&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Copies the plugins from the &lt;code&gt;wp-plugins&lt;/code&gt; stage to the wp plugins folder.&lt;/li&gt;
&lt;li&gt;Adds some php optimizations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;output&#34;&gt;Output&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker build -t cms.bigot.es:7c4311f -f cms.bigot.es/Dockerfile cms.bigot.es/context
Sending build context to Docker daemon 3.936MB
Step 1/7 : FROM bash:5.0 as wp-plugins
---&amp;gt; f63c4bf22009
Step 2/7 : ADD plugins.list /tmp/wp-plugins/plugins.list
---&amp;gt; 263f808fe293
Step 3/7 : RUN while read plugin || [ -n &amp;quot;$plugin&amp;quot; ]; do wget -q -O - https://github.com/${plugin/\:*/}/archive/${plugin/*:/}.tar.gz | tar zx -C /tmp/wp-plugins &amp;amp;&amp;amp; echo &amp;quot;Plugin ${plugin} downloaded.&amp;quot;; done &amp;lt; /tmp/wp-plugins/plugins.list
---&amp;gt; Running in f5217e97b99c
Plugin raelga/wp-mailgun:1.7.1 downloaded.
Plugin wpCloud/wp-stateless:2.2.6 downloaded.
Plugin WP2Static/wp2static:6.6.5 downloaded.
Removing intermediate container f5217e97b99c
---&amp;gt; a639b006aec8
Step 4/7 : FROM wordpress:5.1
---&amp;gt; d3a744e0e523
Step 5/7 : COPY --chown=www-data wp-content /var/www/html/wp-content
---&amp;gt; Using cache
---&amp;gt; 3649a2f4204b
Step 6/7 : COPY --from=wp-plugins --chown=www-data /tmp/wp-plugins /var/www/html/wp-content/plugins/
---&amp;gt; 24191ed6bb75
Step 7/7 : RUN { mv $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini; echo &#39;opcache.memory_consumption=64&#39;; echo &#39;opcache.max_accelerated_files=4000&#39;; echo &#39;opcache.revalidate_freq=10&#39;; } &amp;gt; /usr/local/etc/php/conf.d/opcache-recommended.ini
---&amp;gt; Running in d1f3bd26f718
Removing intermediate container d1f3bd26f718
---&amp;gt; e86ce9bed1cc
Successfully built e86ce9bed1cc
Successfully tagged cms.bigot.es:7c4311f
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;dockerfile-onbuild&#34;&gt;Dockerfile.onbuild&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Dockerfile.onbuild&lt;/code&gt; builds the &lt;code&gt;gcr.io/raelga/wordpress:latest&lt;/code&gt; image with some ONBUILD triggers, to copy the wp-context and download the plugins from the &lt;code&gt;plugins.list&lt;/code&gt; on build when used as &lt;code&gt;FROM&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ cat Dockerfile
FROM gcr.io/raelga/wordpress:latest
$ docker build -t example-wp -f Dockerfile context/
Sending build context to Docker daemon 3.936MB
Step 1/1 : FROM gcr.io/raelga/wordpress:latest
latest: Pulling from raelga/wordpress
27833a3ba0a5: Already exists
2d79f6773a3c: Already exists
f5dd9a448b82: Already exists
95719e57e42b: Already exists
cc75e951030f: Already exists
78873f480bce: Already exists
1b14116a29a2: Already exists
ea69a25cac2e: Already exists
2dbd1202c78e: Already exists
22cefd01eafa: Already exists
21da110f3a63: Already exists
0c1e476df271: Already exists
70a74d14ca92: Already exists
6590e4467d09: Already exists
1b0635fe52ca: Already exists
ccb00f7ad0b4: Already exists
996d17ef73fc: Already exists
2aa80255fade: Already exists
6a6dca4d800a: Already exists
1674e86caa8e: Pull complete
Digest: sha256:e010adc7d5789b75e86e2799bb08e7baec225750d6dce34ef14be2b4ae507d85
Status: Downloaded newer image for gcr.io/raelga/wordpress:latest
# Executing 3 build triggers
---&amp;gt; Running in bdd18a2ac418
######################################################################## 100.0%
Plugin raelga/wp-mailgun:1.7.1 downloaded.
######################################################################## 100.0%
Plugin wpCloud/wp-stateless:2.2.6 downloaded.
######################################################################## 100.0%
Plugin WP2Static/wp2static:6.6.5 downloaded.
Removing intermediate container bdd18a2ac418
---&amp;gt; 3b0c87eb6eb5
Successfully built 3b0c87eb6eb5
Successfully tagged example-wp:latest
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>gcp.rael.io</title><link>https://rael.io/project/gcp.rael.io/</link><pubDate>Sun, 24 Feb 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/gcp.rael.io/</guid><description>&lt;p&gt;Deployment manager deployment from my Google Cloud projects.&lt;/p&gt;</description></item><item><title>dm-templates</title><link>https://rael.io/project/dm-templates/</link><pubDate>Sat, 23 Feb 2019 11:23:56 +0200</pubDate><guid>https://rael.io/project/dm-templates/</guid><description>
&lt;p&gt;Repo for Deployment Manager templates shared between projects.&lt;/p&gt;
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The main purpose of this repo is to have a centralized template repository that
can be added to any GCP Deployment Manager project as a Git submodule.&lt;/p&gt;
&lt;p&gt;That removes the need of copying the templates from one project to another and
the risk of ending with different versions of the templates in each project.&lt;/p&gt;
&lt;h3 id=&#34;templates&#34;&gt;Templates&lt;/h3&gt;
&lt;p&gt;Templates are organized by type of resource:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;compute&lt;/li&gt;
&lt;li&gt;container&lt;/li&gt;
&lt;li&gt;iam&lt;/li&gt;
&lt;li&gt;sql&lt;/li&gt;
&lt;li&gt;storage&lt;/li&gt;
&lt;li&gt;projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The type matches the main resources of the template, as in most cases will
deploy more GCP resources required to configure / use the main one.&lt;/p&gt;
&lt;h3 id=&#34;the-makefile&#34;&gt;The Makefile&lt;/h3&gt;
&lt;p&gt;The Makefile is useful for the actual deployments, not for managing the templates.&lt;/p&gt;
&lt;p&gt;It expects the following folder configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;❯ tree -L 2 .
.
├── Makefile
├── deployments
│ ├── bigotes-pro
│ ├── rael-base
│ ├── rshared
│ ├── project-id-3
│ └── project-id-N
└── templates
├── compute
├── container
├── iam
├── project
├── sql
└── storage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For each project, you can have the deployment &lt;code&gt;.yaml&lt;/code&gt; manifest in the root folder
or using a similar folder hierarchy with folders per each resource type:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;deployments/rshared
└── compute
├── bigotes-pro-peering.yaml
└── network.yaml
1 directory, 2 files
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that setup, the makefile will generate a target to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create the deployment&lt;/li&gt;
&lt;li&gt;Update the deployment&lt;/li&gt;
&lt;li&gt;Preview the deployment&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example, with the following tree:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;❯ tree deployments
deployments
├── bigotes-pro
│ └── compute
│ └── rshared-peering.yaml
├── rael-base
│ ├── compute
│ │ ├── bigotes-pro-base-peering.yaml
│ │ └── network.yaml
│ └── projects
│ ├── bigotes-pro-project.yaml
│ └── rshared-project.yaml
└── rshared
└── compute
├── bigotes-pro-peering.yaml
└── network.yaml
7 directories, 7 files
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Will generate the following targets:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gcp.rael.io/dm on  master [!?] took 17s
❯ make
make target
dm-create-bigotes-pro/compute/rshared-peering dm-preview-rael-base/compute/bigotes-pro-base-peering dm-update-rael-base/compute/network
dm-create-rael-base/compute/bigotes-pro-base-peering dm-preview-rael-base/compute/network dm-update-rael-base/projects/bigotes-pro-project
dm-create-rael-base/compute/network dm-preview-rael-base/projects/bigotes-pro-project dm-update-rael-base/projects/rshared-project
dm-create-rael-base/projects/bigotes-pro-project dm-preview-rael-base/projects/rshared-project dm-update-rshared/compute/bigotes-pro-peering
dm-create-rael-base/projects/rshared-project dm-preview-rshared/compute/bigotes-pro-peering dm-update-rshared/compute/network
dm-create-rshared/compute/bigotes-pro-peering dm-preview-rshared/compute/network gcloud-config-rael-base
dm-create-rshared/compute/network dm-update-bigotes-pro/compute/rshared-peering help
dm-preview-bigotes-pro/compute/rshared-peering dm-update-rael-base/compute/bigotes-pro-base-peering
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Examples of this makefile in use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;github.com/raelga/bigot.es&lt;/li&gt;
&lt;li&gt;github.com/raelga/gcp.rael.io&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;demo&#34;&gt;Demo&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://raw.githubusercontent.com/raelga/dm-templates/master/tty.gif&#34; alt=&#34;tty&#34; /&gt;&lt;/p&gt;</description></item><item><title>Bigotes</title><link>https://rael.io/project/bigotes/</link><pubDate>Sun, 11 Nov 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/bigotes/</guid><description>&lt;p&gt;&lt;a href=&#34;https://app.netlify.com/sites/bigotes/deploys&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://api.netlify.com/api/v1/badges/fc20200d-be84-45ae-a4f2-0b16eff715f5/deploy-status&#34; alt=&#34;Netlify Status&#34; /&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Docker cats</title><link>https://rael.io/project/docker-cats/</link><pubDate>Sun, 11 Nov 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/docker-cats/</guid><description>&lt;p&gt;Simple docker images that show an image of a cat, the tag is the cat name:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cloud.docker.com/u/raelga/repository/docker/raelga/cats&#34; target=&#34;_blank&#34;&gt;https://cloud.docker.com/u/raelga/repository/docker/raelga/cats&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use them with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;docker push raelga/cats:cat-name&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Kubernetes</title><link>https://rael.io/project/kubernetes/</link><pubDate>Wed, 01 Aug 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/kubernetes/</guid><description>
&lt;p&gt;Contributing to the &lt;a href=&#34;https://kubernetes.io&#34; target=&#34;_blank&#34;&gt;Kubernetes&lt;/a&gt; project in different &lt;a href=&#34;https://git.k8s.io/community/&#34; target=&#34;_blank&#34;&gt;special interest groups&lt;/a&gt;, mainly focused on community engagement, documentation and user/contributor experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gubernator.k8s.io/pr/raelga&#34; target=&#34;_blank&#34;&gt;Gubernator PR Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sig-docs&#34;&gt;sig-docs&lt;/h2&gt;
&lt;p&gt;Lead and approver for the Spanish content at kubernetes.io in &lt;strong&gt;sig-docs&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/community/sig-docs&#34; target=&#34;_blank&#34;&gt;Docs Special Interest Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/website/issues/13948&#34; target=&#34;_blank&#34;&gt;Tracking Spanish Localisation Progress (M1) #13948&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sig-contribex&#34;&gt;sig-contribex&lt;/h2&gt;
&lt;p&gt;Contributor in &lt;strong&gt;sig-contribex&lt;/strong&gt; by organizing events like talks, workshops or the New Contributors Summits during KubeCon. Also working on initiatives to improve the Kubernetes community and the contributor experience.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/community/sig-contributor-experience&#34; target=&#34;_blank&#34;&gt;Contributor Experience Special Interest Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://discuss.kubernetes.io/u/rael/activity&#34; target=&#34;_blank&#34;&gt;Kubernetes Community Forums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/cncf/presentations/tree/master/kubernetes#kubernetes-introductions&#34; target=&#34;_blank&#34;&gt;Contributing to Kubernetes - SIG-Docs hackathon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rael.io/talk/190601-kubecap-eu19/&#34; target=&#34;_blank&#34;&gt;KubeCap EU&amp;rsquo;19&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;contributor-summits&#34;&gt;Contributor Summits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://events.linuxfoundation.org/events/contributor-summit-europe-2019/&#34; target=&#34;_blank&#34;&gt;Kubernetes Contributor Summits Barcelona 2019&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=BQ7y2TFOzF4&#34; target=&#34;_blank&#34;&gt;New Contributors Workshop - Welcome and Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/community/tree/master/events/2019/11-contributor-summit&#34; target=&#34;_blank&#34;&gt;2019 Kubernetes Contributor Summit NA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sig-usability&#34;&gt;sig-usability&lt;/h2&gt;
&lt;p&gt;Contributor in &lt;strong&gt;sig-usability&lt;/strong&gt; to ensure that the Kubernetes project is maximally usable by users of a variety of different backgrounds and abilities.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/community/sig-usability&#34; target=&#34;_blank&#34;&gt;Usability Special Interest Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sig-cli&#34;&gt;sig-cli&lt;/h2&gt;
&lt;p&gt;Contributor in &lt;strong&gt;sig-cli&lt;/strong&gt; adding Spanish support to &lt;code&gt;kubectl&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.k8s.io/community/sig-cli&#34; target=&#34;_blank&#34;&gt;CLI Special Interest Group&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/kubernetes/kubernetes/issues/78352&#34; target=&#34;_blank&#34;&gt;Add Spanish i18n strings to kubectl #78352&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Kubernetes Talks</title><link>https://rael.io/project/kubernetes-talks/</link><pubDate>Wed, 28 Mar 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/kubernetes-talks/</guid><description>
&lt;h1 id=&#34;talks&#34;&gt;Talks&lt;/h1&gt;
&lt;h2 id=&#34;kubernetes-101&#34;&gt;Kubernetes 101&lt;/h2&gt;
&lt;p&gt;The main subject of this talk is to have an overview on the microservices architectures. Then, starts an introduction to the kubernetes architecture, core services and objects: pods, controllers, deployments and sets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://talks.godoc.org/github.com/raelga/kubernetes-talks/101/kubernetes-101.slide&#34; target=&#34;_blank&#34;&gt;Kubernetes 101 Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;101/&#34; target=&#34;_blank&#34;&gt;Kubernetes 101 Slides Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;kubernetes-clouds&#34;&gt;Kubernetes Clouds&lt;/h2&gt;
&lt;p&gt;The main subject of this talk is viewing the differences between each managed kubernetes solution offered by AWS, Azure and GCP.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://talks.godoc.org/github.com/raelga/kubernetes-talks/clouds/kubernetes-clouds.slide&#34; target=&#34;_blank&#34;&gt;Kubernetes Clouds Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;clouds/&#34; target=&#34;_blank&#34;&gt;Kubernetes Clouds Slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the labs, the main object is having several clusters deployed all over the using each managed (or not) solution and deploy the same application using the common interface provided by Kubernetes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/aws/#deploy-kubernetes-in-aws&#34; target=&#34;_blank&#34;&gt;Deploy Kubernetes in Amazon Web services&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/aws/#managed-kubernetes-with-eks&#34; target=&#34;_blank&#34;&gt;AWS managed Kubernetes with EKS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/aws/#amazon-web-services---eksctl-alpha&#34; target=&#34;_blank&#34;&gt;AWS managed Kubernetes with EKS using eksctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/aws/#amazon-web-services---kops&#34; target=&#34;_blank&#34;&gt;AWS non-managed on EC2 with Kops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/gcp/#deploy-kubernetes-in-google-cloud-platform&#34; target=&#34;_blank&#34;&gt;Deploy Kubernetes in Google Cloud Platform&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/gcp/#managed-kubernetes-with-google-kubernetes-engine-gke&#34; target=&#34;_blank&#34;&gt;GCP managed Kubernetes with GKE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/azure/#deploy-kubernetes-in-microsoft-azure&#34; target=&#34;_blank&#34;&gt;Deploy Kubernetes in Azure&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;clouds/labs/azure/#managed-kubernetes-with-azure-kubernetes-service-aks&#34; target=&#34;_blank&#34;&gt;Azure managed Kubernetes with AKS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;providers&#34;&gt;Providers&lt;/h2&gt;
&lt;h3 id=&#34;digital-ocean&#34;&gt;Digital Ocean&lt;/h3&gt;
&lt;p&gt;The main subject of this talk is introducing to the Digital Ocean cloud platform and their Managed Kubernetes solution.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://talks.godoc.org/github.com/raelga/kubernetes-talks/providers/do/digital-ocean.slide&#34; target=&#34;_blank&#34;&gt;Digital Ocean Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;providers/do/&#34; target=&#34;_blank&#34;&gt;Digital Ocean Slides Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tools&#34;&gt;Tools&lt;/h2&gt;
&lt;h3 id=&#34;traefik&#34;&gt;Traefik&lt;/h3&gt;
&lt;p&gt;The main subject of this talk is introducing to the Traefik awesome Cloud Native Edge Router and the new features comming in Traefik 2.0.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://talks.godoc.org/github.com/raelga/kubernetes-talks/traefik/traefik.slide&#34; target=&#34;_blank&#34;&gt;Traefik Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;traefik/&#34; target=&#34;_blank&#34;&gt;Traefik Slides Source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;study-jams&#34;&gt;Study Jams&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#replicasets&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;ReplicaSets&lt;/code&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#introduction&#34; target=&#34;_blank&#34;&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#learn-more&#34; target=&#34;_blank&#34;&gt;Learn more&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#some-notes&#34; target=&#34;_blank&#34;&gt;Some notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#1---create-a-replicaset&#34; target=&#34;_blank&#34;&gt;1 - Create a &lt;code&gt;ReplicaSet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#2---scaling-replicasets&#34; target=&#34;_blank&#34;&gt;2 - Scaling &lt;code&gt;ReplicaSets&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#double-the-numbers-of-replicas-with-kubectl-scale&#34; target=&#34;_blank&#34;&gt;Double the numbers of replicas with &lt;code&gt;kubectl scale&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#scale-back-to-1-replica&#34; target=&#34;_blank&#34;&gt;Scale back to 1 replica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#update-the-replicaset-with-the-yaml-definition&#34; target=&#34;_blank&#34;&gt;Update the &lt;code&gt;ReplicaSet&lt;/code&gt; with the yaml definition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#scale-to-50-replicas&#34; target=&#34;_blank&#34;&gt;Scale to 50 replicas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#scale-down-back-to-5-replicas&#34; target=&#34;_blank&#34;&gt;Scale down back to 5 replicas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#3---selectors-and-pods&#34; target=&#34;_blank&#34;&gt;3 - Selectors and Pods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#deploy-some-blue-pods&#34; target=&#34;_blank&#34;&gt;Deploy some &lt;strong&gt;blue&lt;/strong&gt; pods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#deploy-a-blue-replicaset&#34; target=&#34;_blank&#34;&gt;Deploy a &lt;strong&gt;blue&lt;/strong&gt; &lt;code&gt;ReplicaSet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#run-a-red-pod&#34; target=&#34;_blank&#34;&gt;Run a &lt;em&gt;red&lt;/em&gt; pod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#replicaset-for-non-colored-pods-only&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;ReplicaSet&lt;/code&gt; for non-colored &lt;code&gt;pods&lt;/code&gt; only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#lets-acquire-those-fancy-orange-pods&#34; target=&#34;_blank&#34;&gt;Let&amp;rsquo;s acquire those fancy orange &lt;code&gt;pods&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#remove-a-pod-from-the-orange-replicaset&#34; target=&#34;_blank&#34;&gt;Remove a pod from the orange replicaset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#clean-up&#34; target=&#34;_blank&#34;&gt;Clean up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#4---container-probes&#34; target=&#34;_blank&#34;&gt;4 - Container probes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#readiness-probe&#34; target=&#34;_blank&#34;&gt;Readiness probe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#liveness-probe&#34; target=&#34;_blank&#34;&gt;Liveness probe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#clean-up-1&#34; target=&#34;_blank&#34;&gt;Clean up&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#5---manual-rolling-update&#34; target=&#34;_blank&#34;&gt;5 - Manual rolling update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#deploy-the-initial-replicaset&#34; target=&#34;_blank&#34;&gt;Deploy the initial &lt;code&gt;ReplicaSet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#update-the-replicaset-pod-template&#34; target=&#34;_blank&#34;&gt;Update the &lt;code&gt;ReplicaSet&lt;/code&gt; pod template&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#update-the-replicaset-pod-template-with-the-fixed-readinessprobe&#34; target=&#34;_blank&#34;&gt;Update the &lt;code&gt;ReplicaSet&lt;/code&gt; &lt;code&gt;Pod&lt;/code&gt; template with the fixed &lt;code&gt;ReadinessProbe&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;study-jams/k8s/default/replicasets/#clean-up-the-failing-versions-and-the-old-ones&#34; target=&#34;_blank&#34;&gt;Clean up the failing versions and the old ones&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;Gopher art from &lt;a href=&#34;https://github.com/ashleymcnamara/gophers&#34; target=&#34;_blank&#34;&gt;ashleymcnamara/gophers&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>game.pkts.es</title><link>https://rael.io/project/game.pkts.es/</link><pubDate>Sat, 24 Mar 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/game.pkts.es/</guid><description>
&lt;p&gt;Static site for a videogame made with RPG Maker about the pkts community, full of inside jokes.&lt;/p&gt;
&lt;h1 id=&#34;site-for-pkts-the-game&#34;&gt;Site for pkts | The Game&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://game.pkts.es&#34; target=&#34;_blank&#34;&gt;https://game.pkts.es&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;about&#34;&gt;About&lt;/h2&gt;
&lt;p&gt;The webpage uses &lt;a href=&#34;https://templated.co/theory&#34; target=&#34;_blank&#34;&gt;Templated Theory Site Template&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The clock uses &lt;a href=&#34;https://github.com/wimbarelds/TimeCircles&#34; target=&#34;_blank&#34;&gt;wimbarelds/TimeCircles&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;run&#34;&gt;Run&lt;/h2&gt;
&lt;p&gt;The website can be deployed with docker at localhost:8080 using the makefile targets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deploy&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;make run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Will build a container image from &lt;code&gt;nginx:latest&lt;/code&gt; with the docs folder copied as nginx document root.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Develop&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;make dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Will build a container image from &lt;code&gt;nginx:latest&lt;/code&gt; with the docs folder mounted to nginx document root.&lt;/p&gt;</description></item><item><title>Jupyter Image Extractor</title><link>https://rael.io/project/jupyter-image-extractor/</link><pubDate>Tue, 06 Mar 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/jupyter-image-extractor/</guid><description>
&lt;p&gt;Parses a Jupyter book html and extracts the images.&lt;/p&gt;
&lt;h2 id=&#34;build&#34;&gt;Build&lt;/h2&gt;
&lt;p&gt;Build the container:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;ellie:ws rael$ make docker-build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expected output:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker build . -t &#39;jupyter-image-extractor&#39;
Sending build context to Docker daemon 12.46MB
Step 1/1 : FROM python:3-onbuild
# Executing 3 build triggers
---&amp;gt; Running in be4957e8a2d2
Collecting beautifulsoup4 (from -r requirements.txt (line 1))
Downloading https://files.pythonhosted.org/packages/9e/d4/10f46e5cfac773e22707237bfcd51bbffeaf0a576b0a847ec7ab15bd7ace/beautifulsoup4-4.6.0-py3-none-any.whl (86kB)
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.6.0
Removing intermediate container be4957e8a2d2
---&amp;gt; 2b1181b0bde2
Successfully built 2b1181b0bde2
Successfully tagged jupyter-image-extractor:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;execute&#34;&gt;Execute&lt;/h2&gt;
&lt;p&gt;Run the script with docker:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;ellie:ws rael$ make docker-run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expected output:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker run -it --rm --name &#39;jupyter-image-extractor&#39; -v &amp;quot;/Users/rael/Documents/Code/python/ws:/code&amp;quot; -w /code &#39;jupyter-image-extractor&#39; python jupyterImageSaver.py Jupyter\ Notebook\ Viewer.html
./Jupyter Notebook Viewer_files/nav_logo.svg
./images/base64-img-1.png
./images/base64-img-2.png
./images/base64-img-3.png
./images/base64-img-4.png
./images/base64-img-5.png
./images/base64-img-6.png
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Go Playground</title><link>https://rael.io/project/go-playground/</link><pubDate>Mon, 12 Feb 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/go-playground/</guid><description>
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Compiles to Machine Code&lt;/li&gt;
&lt;li&gt;Design for concurrence&lt;/li&gt;
&lt;li&gt;Statically typed&lt;/li&gt;
&lt;li&gt;Garbage collected&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;language&#34;&gt;Language&lt;/h2&gt;
&lt;h3 id=&#34;variables&#34;&gt;Variables&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.golang.org/gos-declaration-syntax&#34; target=&#34;_blank&#34;&gt;https://blog.golang.org/gos-declaration-syntax&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;definition&#34;&gt;Definition&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var foo string;
foo = &amp;quot;bar&amp;quot; // OK, new value for foo
foo = 5 // compile error, expected string, found int
newfoo = &amp;quot;bar&amp;quot; // compile error, foo is not defined
bar := &amp;quot;foo&amp;quot; // implicit var
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;basic-types&#34;&gt;Basic Types&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://golang.org/pkg/go/types/&#34; target=&#34;_blank&#34;&gt;https://golang.org/pkg/go/types/&lt;/a&gt; or &lt;code&gt;go doc types&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt; Invalid: {Invalid, 0, &amp;quot;invalid type&amp;quot;},
Bool: {Bool, IsBoolean, &amp;quot;bool&amp;quot;},
Int: {Int, IsInteger, &amp;quot;int&amp;quot;},
Int8: {Int8, IsInteger, &amp;quot;int8&amp;quot;},
Int16: {Int16, IsInteger, &amp;quot;int16&amp;quot;},
Int32: {Int32, IsInteger, &amp;quot;int32&amp;quot;},
Int64: {Int64, IsInteger, &amp;quot;int64&amp;quot;},
Uint: {Uint, IsInteger | IsUnsigned, &amp;quot;uint&amp;quot;},
Uint8: {Uint8, IsInteger | IsUnsigned, &amp;quot;uint8&amp;quot;},
Uint16: {Uint16, IsInteger | IsUnsigned, &amp;quot;uint16&amp;quot;},
Uint32: {Uint32, IsInteger | IsUnsigned, &amp;quot;uint32&amp;quot;},
Uint64: {Uint64, IsInteger | IsUnsigned, &amp;quot;uint64&amp;quot;},
Uintptr: {Uintptr, IsInteger | IsUnsigned, &amp;quot;uintptr&amp;quot;},
Float32: {Float32, IsFloat, &amp;quot;float32&amp;quot;},
Float64: {Float64, IsFloat, &amp;quot;float64&amp;quot;},
Complex64: {Complex64, IsComplex, &amp;quot;complex64&amp;quot;},
Complex128: {Complex128, IsComplex, &amp;quot;complex128&amp;quot;},
String: {String, IsString, &amp;quot;string&amp;quot;},
UnsafePointer: {UnsafePointer, 0, &amp;quot;Pointer&amp;quot;},
UntypedBool: {UntypedBool, IsBoolean | IsUntyped, &amp;quot;untyped bool&amp;quot;},
UntypedInt: {UntypedInt, IsInteger | IsUntyped, &amp;quot;untyped int&amp;quot;},
UntypedRune: {UntypedRune, IsInteger | IsUntyped, &amp;quot;untyped rune&amp;quot;},
UntypedFloat: {UntypedFloat, IsFloat | IsUntyped, &amp;quot;untyped float&amp;quot;},
UntypedComplex: {UntypedComplex, IsComplex | IsUntyped, &amp;quot;untyped complex&amp;quot;},
UntypedString: {UntypedString, IsString | IsUntyped, &amp;quot;untyped string&amp;quot;},
UntypedNil: {UntypedNil, IsUntyped, &amp;quot;untyped nil&amp;quot;},
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var x byte = 255 // byte alias for uint8
var y byte = x + 5 // overflow to 4
x++ // overflow to 0
var y byte = 0
y = y - 1 // underflow to 255
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var foo byte = 2
var foo int32 = 260
sum = foo + bar // compilation error different types
foo = bar // compilation error different types
var conv uint8 = uint8(260) // 4
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;arrays&#34;&gt;Arrays&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var a [2]int
a[0] = 1
a[1] = &amp;quot;foo&amp;quot; // compile error, wrong type
a[1] = 2 // OK
a[2] = 3 // compile error, out of bounds
index := 2
a[index] = 3 // runtime error, out of bounds
n := 5
var b [n]int // compile error, array size must be constant
var c [2]int // OK
c = a // OK, copy all values
var d [4]int
d = a // compile error, wrong type [2]int vs [4]int
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Go will put the array values contiguous in memory adding padding if needed to align with &lt;sup&gt;4&lt;/sup&gt;&amp;frasl;&lt;sub&gt;8&lt;/sub&gt; bytes.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var a [2][2][2]int
0x00 a[0][0][0]
0x01 a[0][0][1]
0x02 a[0][1][0]
0x03 a[0][1][1]
0x04 a[1][0][0]
0x05 a[1][0][1]
0x06 a[1][1][0]
0x07 a[1][1][1]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;slices&#34;&gt;Slices&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;TODO&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;### Structs&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;type Person struct {
Name string
Age string
Gender string
Children []Person // OK, can be empty, is a slice
Mother Person // compile error, invalid recurse type
Father Person // Type Person contains a Person, infinite references
Parents []Person // OK, can be empty, is a slice
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;### Pointer&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;var x int = 42
var y *int // pointer to integrer
y = &amp;amp;x // &amp;amp;x returns the pointer to x (address of x)
z := *y // *y derreferences y, gets 42, the value of x
x = 24 // updates x value
z = *y // *y returns the new value of x, 24
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;maps&#34;&gt;Maps&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;TODO&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;definition-scope&#34;&gt;Definition scope&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;x := 0
if condition {
x := 42
}
y := x // y is 0
if condition {
y = 21
}
z := y // z is 21
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;functions&#34;&gt;Functions&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func foo(x, y int, z bool) int {
if z {
return x + y
} else {
return &amp;quot;bar&amp;quot; // compile error, wrong return type
}
}
func bar() (string, int) {
return &amp;quot;The answer is&amp;quot;, 42
}
func main() {
var x int = foo(1, 2, true) // OK
var y int = foo(1, 2) // compile error, wrong number of arguments
var z int = foo(1, 2, &amp;quot;bar&amp;quot;) // compile error, last argument not a bool
var v bool = foo(1, 2, true) // compile error, wrong return type
a := 1
b := 2
s := foo(a, b, true) + a // OK, compiler knows that a, b and foo are int
str, num := bar() // OK
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;syntax&#34;&gt;Syntax&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Semicolons are inserted by the compiler&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func foo(x int) int {
x++
return x
}
foo(1)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The compiler will put the &lt;code&gt;;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;func foo(x int) int {
x++;
return x;
};
foo(1);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;### Loops&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-go&#34;&gt;abc := [3]string{&amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;}
for i, v := rang abc {
// i is the index or key if abc is a map
// v is the value
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;range&#34;&gt;Range&lt;/h4&gt;
&lt;h2 id=&#34;resources&#34;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ardanlabs/gotraining&#34; target=&#34;_blank&#34;&gt;https://github.com/ardanlabs/gotraining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/dariubs/GoBooks&#34; target=&#34;_blank&#34;&gt;https://github.com/dariubs/GoBooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://openmymind.net/The-Little-Go-Book/&#34; target=&#34;_blank&#34;&gt;http://openmymind.net/The-Little-Go-Book/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=UvpSDtbdGDM&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?v=UvpSDtbdGDM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=G3PvTWRIhZA&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?v=G3PvTWRIhZA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=ytEkHepK08c&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?v=ytEkHepK08c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codegangsta.gitbooks.io/building-web-apps-with-go&#34; target=&#34;_blank&#34;&gt;https://codegangsta.gitbooks.io/building-web-apps-with-go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://golang.org/doc/code.html#Organization&#34; target=&#34;_blank&#34;&gt;https://golang.org/doc/code.html#Organization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;Gopher art from &lt;a href=&#34;https://github.com/ashleymcnamara/gophers&#34; target=&#34;_blank&#34;&gt;ashleymcnamara/gophers&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Cloud Native Barcelona</title><link>https://rael.io/project/cnbcn/</link><pubDate>Mon, 15 Jan 2018 11:23:56 +0200</pubDate><guid>https://rael.io/project/cnbcn/</guid><description>&lt;p&gt;&lt;a href=&#34;http://cloudnative.barcelona&#34; target=&#34;_blank&#34;&gt;Cloud Native Barcelona&lt;/a&gt; is the official &lt;a href=&#34;https://cncf.io&#34; target=&#34;_blank&#34;&gt;Cloud Native Computing Foundation&lt;/a&gt; user group dedicated to building a &lt;strong&gt;strong, open, diverse developer community&lt;/strong&gt; around the &lt;strong&gt;Cloud Native&lt;/strong&gt; platform and technologies in &lt;strong&gt;Barcelona&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cloud native technologies empower organizations to &lt;strong&gt;build and run scalable applications&lt;/strong&gt; in modern, dynamic environments such as &lt;strong&gt;public, private, and hybrid clouds&lt;/strong&gt;. &lt;strong&gt;Containers&lt;/strong&gt;, &lt;strong&gt;service meshes&lt;/strong&gt;, &lt;strong&gt;microservices&lt;/strong&gt;, &lt;strong&gt;immutable infrastructure&lt;/strong&gt;, and &lt;strong&gt;declarative APIs&lt;/strong&gt; exemplify this approach.&lt;/p&gt;
&lt;p&gt;These techniques enable &lt;strong&gt;loosely coupled systems&lt;/strong&gt; that are &lt;strong&gt;resilient, manageable, and observable&lt;/strong&gt;. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.&lt;/p&gt;
&lt;p&gt;All the &lt;strong&gt;communitcation channels and events&lt;/strong&gt; of the &lt;a href=&#34;http://cloudnative.barcelona&#34; target=&#34;_blank&#34;&gt;Cloud Native Barcelona&lt;/a&gt; user group are &lt;strong&gt;governed by&lt;/strong&gt; the &lt;a href=&#34;https://events.linuxfoundation.org/code-of-conduct/&#34; target=&#34;_blank&#34;&gt;Linux Foundation Code of Conduct&lt;/a&gt;. We are committed to making participation in this group a &lt;strong&gt;harassment-free experience for everyone&lt;/strong&gt;, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.&lt;/p&gt;
&lt;p&gt;Feel free to join us at the slack at &lt;a href=&#34;https://slack.cloudnative.barcelona&#34; target=&#34;_blank&#34;&gt;slack.cloudnative.barcelona&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want to &lt;strong&gt;support&lt;/strong&gt; &lt;a href=&#34;http://cloudnative.barcelona&#34; target=&#34;_blank&#34;&gt;Cloud Native Barcelona&lt;/a&gt;? Do you have a &lt;strong&gt;talk proposal&lt;/strong&gt;? Please send us details at &lt;a href=&#34;https://speak.cloudnative.barcelona&#34; target=&#34;_blank&#34;&gt;speak.cloudnative.barcelona&lt;/a&gt;, &lt;strong&gt;thanks!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>tgfwdbot</title><link>https://rael.io/project/tgfwdbot/</link><pubDate>Sun, 09 Jul 2017 11:23:56 +0200</pubDate><guid>https://rael.io/project/tgfwdbot/</guid><description>
&lt;p&gt;&lt;a href=&#34;https://travis-ci.org/raelga/tgfwdbot&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://travis-ci.org/raelga/tgfwdbot.svg?branch=master&#34; alt=&#34;Build Status&#34; /&gt;&lt;/a&gt;
&lt;a href=&#34;https://goreportcard.com/report/github.com/raelga/tgfwdbot&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://goreportcard.com/badge/github.com/raelga/tgfwdbot&#34; alt=&#34;Go Report&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bot to forward messages between supergroups and private chats, to allow talking in Telegram supergroups when banned.&lt;/p&gt;
&lt;h2 id=&#34;why&#34;&gt;Why&lt;/h2&gt;
&lt;p&gt;Sometimes, due to trolls reporters, users can be banned from any Telegram supergroup, not only the one where reported.
With this bot, users will be able to participate in specific groups through the bot.&lt;/p&gt;
&lt;p&gt;This bot can be added to the group, identified by &lt;code&gt;TELEGRAM_GROUP_ID&lt;/code&gt;, and will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Forward any message from the Group to the private conversation with the banned user&lt;/li&gt;
&lt;li&gt;Forward any message from the private conversation with the banned user to the Group&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The admins of the groups where the bot is a member will decide if the allows the banned users to participate or not.&lt;/p&gt;
&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;This bot is not intended to be a tool for spammers and malicious users to bypass Telegram bans.&lt;/strong&gt;
The purpose is to allow users to interact in the groups with the authorization of the group admins when globally banned from supergroups due to troll reportings.&lt;/p&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes&lt;/h2&gt;
&lt;p&gt;Gopher art from &lt;a href=&#34;https://github.com/ashleymcnamara/gophers&#34; target=&#34;_blank&#34;&gt;ashleymcnamara/gophers&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>TS Invaders</title><link>https://rael.io/project/tsinvaders/</link><pubDate>Sat, 10 Jun 2017 11:23:56 +0200</pubDate><guid>https://rael.io/project/tsinvaders/</guid><description>
&lt;p&gt;&lt;a href=&#34;https://travis-ci.org/raelga/tsinvaders&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://travis-ci.org/raelga/tsinvaders.svg?branch=master&#34; alt=&#34;Build Status&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yet another spaces invaders clone, this time in TypeScript using Phaser.io.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;
&lt;p&gt;Phaser.io framework from @photonstorm &lt;a href=&#34;https://github.com/photonstorm/phaser&#34; target=&#34;_blank&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;art&#34;&gt;Art&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Player explosion sprite from J-Robot &lt;a href=&#34;https://opengameart.org/users/j-robot&#34; target=&#34;_blank&#34;&gt;OpenGameArt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rest of the graphic art is from &lt;a href=&#34;https://twitter.com/whiskyemms&#34; target=&#34;_blank&#34;&gt;@whiskyemms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>PyBot</title><link>https://rael.io/project/pybot/</link><pubDate>Thu, 02 Mar 2017 11:23:56 +0200</pubDate><guid>https://rael.io/project/pybot/</guid><description>
&lt;p&gt;&lt;a href=&#34;https://circleci.com/gh/raelga/pybot/tree/master&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;https://circleci.com/gh/raelga/pybot/tree/master.svg?style=svg&#34; alt=&#34;CircleCI&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;pybot&#34;&gt;pybot&lt;/h1&gt;
&lt;p&gt;Wrapper for &lt;a href=&#34;https://github.com/python-telegram-bot/python-telegram-bot&#34; target=&#34;_blank&#34;&gt;python-telegram-bot&lt;/a&gt; to allow dynamic plug-in architecture, an attempt to make python-telegram-bot more hubottish.&lt;/p&gt;
&lt;h3 id=&#34;execution-flow&#34;&gt;Execution flow&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;bin/pybot&lt;/code&gt; starts the bot with the selected adapter and using the configuration options defined in &lt;code&gt;conf/pybot.conf&lt;/code&gt; or the command-line arguments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The selected adapter receives the message and sends it to the &lt;code&gt;brain.py&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;brain.py&lt;/code&gt; loads in runtime all the &lt;code&gt;.py&lt;/code&gt; files in the &lt;code&gt;./memory&lt;/code&gt; folder each time and try to execute a defined method, for example &lt;code&gt;hear(message.text)&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each module in &lt;code&gt;./memory&lt;/code&gt; with that method returns a response, the &lt;code&gt;brain.py&lt;/code&gt; sends it to the &lt;code&gt;pybot.py&lt;/code&gt; and it sends the response back to the chat.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;As the methods are dynamically loaded, you can edit and add the files in &lt;code&gt;./memory&lt;/code&gt; without need to restart &lt;code&gt;pybot.py&lt;/code&gt;, and they will be reloaded on the next message. Overkill but funny.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;makefile-targets&#34;&gt;Makefile targets&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-Makefile&#34;&gt;usage: Show this help
setup-venv: Setup virtualenv
lint: Run code linter to check code style
telegram: Run pybot with the telegram adapter
docker-build: Build the docker image for running pybot
docker-telegram: Run with telegram adapter in the docker container
docker-lint: Run pep8 in the docker container
docker-clean: Remove the docker image
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;execution-example&#34;&gt;Execution example&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;make docker-telegram
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;docker run -it --rm --name pybot -v /Users/rael/Code/python/pybot:/usr/src/pybot -w /usr/src/pybot &#39;pybot&#39; bin/pybot telegram
Starting pybot using conf token file. CTRL-C to quit.
2017-04-17 07:35:54,392 - pybot.interfaces.telegram - INFO - Bot raelbot up and ready!
2017-04-17 07:36:39,371 - pybot.brain - INFO - 116133952, Hello world!, 53693428, 2017-04-17 07:36:39,&amp;quot;53693428&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;contributing&#34;&gt;Contributing&lt;/h3&gt;
&lt;p&gt;Contributions of all sizes are welcome.&lt;/p&gt;
&lt;h3 id=&#34;attributions&#34;&gt;Attributions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Header image from &lt;a href=&#34;https://python-telegram-bot.org&#34; target=&#34;_blank&#34;&gt;python-telegram-bot.org&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;license&#34;&gt;License&lt;/h3&gt;
&lt;p&gt;You may copy, distribute and modify the software provided that modifications are described and licensed for free under &lt;code&gt;GNU General Public License v3.0&lt;/code&gt;. Derivatives works (including modifications or anything statically linked to the library) can only be redistributed under LGPL-3, but applications that use the library don&amp;rsquo;t have to be.&lt;/p&gt;</description></item><item><title>Hubot Raelbot</title><link>https://rael.io/project/hubot-raelbot/</link><pubDate>Sun, 16 Aug 2015 11:23:56 +0200</pubDate><guid>https://rael.io/project/hubot-raelbot/</guid><description>
&lt;p&gt;&lt;strong&gt;raelbot&lt;/strong&gt; is a chat bot built on the Hubot framework.&lt;/p&gt;
&lt;h3 id=&#34;running-raelbot-locally&#34;&gt;Running raelbot Locally&lt;/h3&gt;
&lt;p&gt;You can test your hubot by running the following, however some plugins will not
behave as expected unless the &lt;a href=&#34;#configuration&#34;&gt;environment variables&lt;/a&gt; they rely
upon have been set.&lt;/p&gt;
&lt;p&gt;You can start raelbot locally by running:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% bin/hubot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&amp;rsquo;ll see some start up output and a prompt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Sat Feb 28 2015 12:38:27 GMT+0000 (GMT)] INFO Using default redis on localhost:6379
raelbot&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then you can interact with raelbot by typing &lt;code&gt;raelbot help&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;raelbot&amp;gt; raelbot help
raelbot help - Displays all of the help commands that raelbot knows about.
...
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;persistence&#34;&gt;Persistence&lt;/h2&gt;
&lt;p&gt;If you are going to use the &lt;code&gt;hubot-redis-brain&lt;/code&gt; package (strongly suggested),
you will need to add the Redis to Go addon on Heroku which requires a verified
account or you can create an account at &lt;a href=&#34;https://redistogo.com/&#34; target=&#34;_blank&#34;&gt;Redis to Go&lt;/a&gt; and manually
set the &lt;code&gt;REDISTOGO_URL&lt;/code&gt; variable.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% heroku config:add REDISTOGO_URL=&amp;quot;...&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don&amp;rsquo;t need any persistence feel free to remove the &lt;code&gt;hubot-redis-brain&lt;/code&gt;
from &lt;code&gt;external-scripts.json&lt;/code&gt; and you don&amp;rsquo;t need to worry about redis at all.&lt;/p&gt;
&lt;h2 id=&#34;adapters&#34;&gt;Adapters&lt;/h2&gt;
&lt;p&gt;Adapters are the interface to the service you want your hubot to run on, such
as Campfire or IRC. There are a number of third party adapters that the
community have contributed. Check &lt;a href=&#34;https://github.com/github/hubot/blob/master/docs/adapters.md&#34; target=&#34;_blank&#34;&gt;Hubot Adapters&lt;/a&gt; for the
available ones.&lt;/p&gt;
&lt;p&gt;If you would like to run a non-Campfire or shell adapter you will need to add
the adapter package as a dependency to the &lt;code&gt;package.json&lt;/code&gt; file in the
&lt;code&gt;dependencies&lt;/code&gt; section.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve added the dependency with &lt;code&gt;npm install --save&lt;/code&gt; to install it you
can then run hubot with the adapter.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;% bin/hubot -a &amp;lt;adapter&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where &lt;code&gt;&amp;lt;adapter&amp;gt;&lt;/code&gt; is the name of your adapter without the &lt;code&gt;hubot-&lt;/code&gt; prefix.&lt;/p&gt;
&lt;h3 id=&#34;deploying-to-unix-or-windows&#34;&gt;Deploying to UNIX or Windows&lt;/h3&gt;
&lt;p&gt;If you would like to deploy to either a UNIX operating system or Windows.
Please check out the &lt;a href=&#34;https://github.com/github/hubot/blob/master/docs/deploying/unix.md&#34; target=&#34;_blank&#34;&gt;deploying hubot onto UNIX&lt;/a&gt; and &lt;a href=&#34;https://github.com/github/hubot/blob/master/docs/deploying/unix.md&#34; target=&#34;_blank&#34;&gt;deploying
hubot onto Windows&lt;/a&gt; wiki pages.&lt;/p&gt;</description></item><item><title>GTA Crew Exporter</title><link>https://rael.io/project/pygtavcrewexporter/</link><pubDate>Wed, 06 Nov 2013 11:23:56 +0200</pubDate><guid>https://rael.io/project/pygtavcrewexporter/</guid><description>
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Get information about crew members on Rockstar GTAV social club.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;python | &lt;a href=&#34;http://www.python.org/download/&#34; target=&#34;_blank&#34;&gt;http://www.python.org/download/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;selenium for python | &lt;a href=&#34;https://pypi.python.org/pypi/selenium&#34; target=&#34;_blank&#34;&gt;https://pypi.python.org/pypi/selenium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;firefox | &lt;a href=&#34;http://www.mozilla.org/en-US/firefox/new/&#34; target=&#34;_blank&#34;&gt;http://www.mozilla.org/en-US/firefox/new/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;** Firefox must be in english due to Rockstar Social Club source code, in the final version it will not be necessary. **&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;h3 id=&#34;linux&#34;&gt;Linux&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[327] root@eva:~# aptitude install python-pip
The following NEW packages will be installed:
python-pip python-pkg-resources{a} python-setuptools{a}
0 packages upgraded, 3 newly installed, 0 to remove and 18 not upgraded.
Need to get 648 kB of archives. After unpacking 2,938 kB will be used.
Do you want to continue? [Y/n/?] y
Get: 1 http://ftp.es.debian.org/debian/ jessie/main python-pkg-resources all 0.6.49-2 [62.5 kB]
Get: 2 http://ftp.es.debian.org/debian/ jessie/main python-setuptools all 0.6.49-2 [320 kB
Get: 3 http://ftp.es.debian.org/debian/ jessie/main python-pip all 1.4.1-2 [266 kB
Fetched 648 kB in 2s (223 kB/s)
Selecting previously unselected package python-pkg-resources.
(Reading database ... 156790 files and directories currently installed.)
Unpacking python-pkg-resources (from .../python-pkg-resources_0.6.49-2_all.deb) ...
Selecting previously unselected package python-setuptools.
Unpacking python-setuptools (from .../python-setuptools_0.6.49-2_all.deb) ...
Selecting previously unselected package python-pip.
Unpacking python-pip (from .../python-pip_1.4.1-2_all.deb) ...
Processing triggers for man-db ...
Setting up python-pkg-resources (0.6.49-2) ...
Setting up python-setuptools (0.6.49-2) ...
Setting up python-pip (1.4.1-2) ...
[328] root@eva:~# easy_install selenium
Searching for selenium
Reading http://pypi.python.org/simple/selenium/
Best match: selenium 2.37.2
Downloading https://pypi.python.org/packages/source/s/selenium/selenium-2.37.2.tar.gz#md5=f3fffaae0bc789676c4e2ab285f7b04f
Processing selenium-2.37.2.tar.gz
Writing /tmp/easy_install-shFcgY/selenium-2.37.2/setup.cfg
Running selenium-2.37.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-shFcgY/selenium-2.37.2/egg-dist-tmp-_CdLcZ
Adding selenium 2.37.2 to easy-install.pth file
Installed /usr/local/lib/python2.7/dist-packages/selenium-2.37.2-py2.7.egg
Processing dependencies for selenium
Finished processing dependencies for selenium
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;mac&#34;&gt;Mac&lt;/h3&gt;
&lt;p&gt;Download and install python from &lt;a href=&#34;http://www.python.org/download/&#34; target=&#34;_blank&#34;&gt;python.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then install selenium using pip:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[502] rael@mbw:~$ sudo pip install selenium
Downloading/unpacking selenium
Downloading selenium-2.37.2.tar.gz (2.6MB): 2.6MB downloaded
Running setup.py egg_info for package selenium
Installing collected packages: selenium
Running setup.py install for selenium
Successfully installed selenium
Cleaning up...
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;windows&#34;&gt;Windows&lt;/h3&gt;
&lt;p&gt;Not tested yet, but I guess similar as in Mac.&lt;/p&gt;
&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;
&lt;h3 id=&#34;command-interface&#34;&gt;Command interface&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;./gtav_crew_exporter.py --help
gtav_crew_exporter.py -c &amp;lt;crew_name&amp;gt; [-u &amp;lt;username&amp;gt; -p &amp;lt;password&amp;gt;] [-o &amp;lt;output_file&amp;gt;] [-v]
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;help&lt;/td&gt;
&lt;td&gt;View the basic usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-c, &amp;ndash;crew&lt;/td&gt;
&lt;td&gt;The name of the crew to export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-u, &amp;ndash;username=&lt;/td&gt;
&lt;td&gt;The username of your Rockstar social club&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-p, &amp;ndash;password=&lt;/td&gt;
&lt;td&gt;The password of your Rockstar social club&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-v&lt;/td&gt;
&lt;td&gt;Verbose mode, for debug.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;examples&#34;&gt;Examples&lt;/h3&gt;
&lt;h4 id=&#34;only-members-and-ranks&#34;&gt;Only members and ranks&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;gtav_crew_exporter.py -c elotrolado&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./gtav_crew_exporter.py -c elotrolado
Crew: elotrolado
Crew Size: 300 members
!! Without login and password, only username and rank are available:
Crew Members :
leader, nihael, http://socialclub.rockstargames.com/member/nihael
commissioner, FJTR23, http://socialclub.rockstargames.com/member/fjtr23
lieutenant, Racso25, http://socialclub.rockstargames.com/member/racso25
representative, AntonLaveyX, http://socialclub.rockstargames.com/member/antonlaveyx
representative, beerna, http://socialclub.rockstargames.com/member/beerna
representative, lierhoff, http://socialclub.rockstargames.com/member/lierhoff
representative, raelga, http://socialclub.rockstargames.com/member/raelga
representative, rubi7410, http://socialclub.rockstargames.com/member/rubi7410
representative, Sd-Snatcher, http://socialclub.rockstargames.com/member/sd-snatcher
muscle, _XiloX_, http://socialclub.rockstargames.com/member/_xilox_
muscle, 4LUFLiNT, http://socialclub.rockstargames.com/member/4luflint
muscle, A_Rebato, http://socialclub.rockstargames.com/member/a_rebato
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;with-member-information-need-login-and-password&#34;&gt;With member information (need login and password)&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;gtav_crew_exporter.py -c the_pollasos -u raelga -p ***&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./gtav_crew_exporter.py -c the_pollasos -u raelga -p ***
Crew: the_pollasos
Crew Size: 9 members
adrianrgvez, Spain, , PS3, the_pollasos, leader, 108, 5D 4H 17M, All ok.
corderius10, Spain, , PS3, the_pollasos, commissioner, 79, 78H 42M 24S, All ok.
oscartc14, Spain, , PS3, the_pollasos, lieutenant, 11, 8H 34M 36S, All ok.
alfi_de_pumarin9, Spain, , PS3, the_pollasos, representative, 24, 17H 23M 9S, All ok.
capableuncle3020, , , , , representative, , , Private profile.
rodri799, Spain, , PS3, the_pollasos, representative, 12, 14H 47M 50S, All ok.
yex_gr, Spain, yex_, PS3, the_pollasos, representative, 21, 24H 50M 26S, All ok.
OrignalBEAST, United Kingdom, ORIGNALBEASSTT, PS3, lossantosdiamondz, muscle, 24, 48H 40M 23S, All ok.
raelga, Spain, raelga, PS3, elotrolado, muscle, 65, 6D 13H 53M, All ok.
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;verbose-mode&#34;&gt;Verbose mode&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;gtav_crew_exporter.py -c the_pollasos -u raelga -p *** -v&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ./gtav_crew_exporter.py -v -c the_pollasos -u raelga -p ***
Crew: the_pollasos
DBG : web - starting browser
DBG : web - page fully loaded!
DBG : web - set page in english.
DBG : web - all users visible.
Crew Size: 9 members
DBG : web - page fully loaded!
DBG : web - page fully loaded!
DBG : [adrianrgvez]
DBG : web - page fully loaded!
DBG : [adrianrgvez] main crew: the_pollasos
DBG : [adrianrgvez] PSN ID:
DBG : [adrianrgvez] country: Spain
DBG : web - page fully loaded!
DBG : [adrianrgvez] rank: leader
DBG : [adrianrgvez] playtime: 5D 4H 20M
DBG : [corderius10]
DBG : web - page fully loaded!
DBG : [corderius10] main crew: the_pollasos
DBG : [corderius10] PSN ID:
DBG : [corderius10] country: Spain
DBG : web - page fully loaded!
DBG : [corderius10] rank: commissioner
DBG : [corderius10] playtime: 78H 42M 24S
DBG : [oscartc14]
DBG : web - page fully loaded!
DBG : [oscartc14] main crew: the_pollasos
DBG : [oscartc14] PSN ID:
DBG : [oscartc14] country: Spain
DBG : web - page fully loaded!
DBG : [oscartc14] rank: lieutenant
DBG : [oscartc14] playtime: 8H 34M 36S
DBG : [alfi_de_pumarin9]
DBG : web - page fully loaded!
DBG : [alfi_de_pumarin9] main crew: the_pollasos
DBG : [alfi_de_pumarin9] PSN ID:
DBG : [alfi_de_pumarin9] country: Spain
DBG : web - page fully loaded!
DBG : [alfi_de_pumarin9] rank: representative
DBG : [alfi_de_pumarin9] playtime: 17H 23M 9S
DBG : [capableuncle3020]
DBG : web - page fully loaded!
DBG : [capableuncle3020] Profile is private!
DBG : [rodri799]
DBG : web - page fully loaded!
DBG : [rodri799] main crew: the_pollasos
DBG : [rodri799] PSN ID:
DBG : [rodri799] country: Spain
DBG : web - page fully loaded!
DBG : [rodri799] rank: representative
DBG : [rodri799] playtime: 14H 47M 50S
DBG : [yex_gr]
DBG : web - page fully loaded!
DBG : [yex_gr] main crew: the_pollasos
DBG : [yex_gr] PSN ID: ***
DBG : [yex_gr] country: Spain
DBG : web - page fully loaded!
DBG : [yex_gr] rank: representative
DBG : [yex_gr] playtime: 24H 50M 26S
DBG : [OrignalBEAST]
DBG : web - page fully loaded!
DBG : [OrignalBEAST] main crew: lossantosdiamondz
DBG : [OrignalBEAST] PSN ID: ***
DBG : [OrignalBEAST] country: United Kingdom
DBG : web - page fully loaded!
DBG : [OrignalBEAST] rank: muscle
DBG : [OrignalBEAST] playtime: 48H 40M 23S
DBG : [raelga]
DBG : web - page fully loaded!
DBG : [raelga] main crew: elotrolado
DBG : [raelga] PSN ID: raelga
DBG : [raelga] country: Spain
DBG : web - page fully loaded!
DBG : [raelga] rank: muscle
DBG : [raelga] playtime: 6D 13H 53M
adrianrgvez, Spain, , PS3, the_pollasos, leader, 108, 5D 4H 20M, All ok.
corderius10, Spain, , PS3, the_pollasos, commissioner, 79, 78H 42M 24S, All ok.
oscartc14, Spain, , PS3, the_pollasos, lieutenant, 11, 8H 34M 36S, All ok.
alfi_de_pumarin9, Spain, , PS3, the_pollasos, representative, 24, 17H 23M 9S, All ok.
capableuncle3020, , , , , representative, , , Private profile.
rodri799, Spain, , PS3, the_pollasos, representative, 12, 14H 47M 50S, All ok.
yex_gr, Spain, ****, PS3, the_pollasos, representative, 21, 24H 50M 26S, All ok.
OrignalBEAST, United Kingdom, ****, PS3, lossantosdiamondz, muscle, 24, 48H 40M 23S, All ok.
raelga, Spain, raelga, PS3, elotrolado, muscle, 65, 6D 13H 53M, All ok.
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>