+ {% endif %}
+
+
+
+ {% include scripts.html %}
+
+
+
diff --git a/_pages/404.md b/_pages/404.md
index b3025a6053..4adbecc666 100644
--- a/_pages/404.md
+++ b/_pages/404.md
@@ -5,4 +5,11 @@ sitemap: false
permalink: /404.html
---
-Sorry, but the page you were trying to view does not exist.
+Sorry, but the page you were trying to view does not exist --- perhaps you can try searching for it below.
+
+
+
diff --git a/_pages/about.md b/_pages/about.md
index 9ba0655cdf..1434cef06d 100644
--- a/_pages/about.md
+++ b/_pages/about.md
@@ -3,6 +3,18 @@ permalink: /about/
title: "About"
---
-Tempor velit sint sunt ipsum tempor enim ad qui ullamco. Est dolore anim ad velit duis dolore minim sunt aliquip amet commodo labore. Ut eu pariatur aute ea aute excepteur laborum. Esse ea esse excepteur minim mollit qui cillum excepteur ex dolore magna. Labore deserunt fugiat incididunt incididunt sint ea. Consequat dolore aute laboris quis proident quis non et est consectetur ex eiusmod sit culpa.
-Cupidatat ea do et in excepteur in. Ad nostrud ut est esse eu duis ea sunt eiusmod. Aliquip tempor veniam sint elit fugiat. Velit incididunt laboris amet incididunt labore dolore irure velit excepteur commodo deserunt laborum. Consectetur eu fugiat veniam veniam Lorem labore magna eiusmod. Ea occaecat reprehenderit pariatur consectetur minim labore ut aliquip.
\ No newline at end of file
+{% remote_include https://raw.githubusercontent.com/josecastillolema/josecastillolema/master/README.md %}
+
+### Bio
+
+Currently working as Cloud Consultant, Architect and Technical Lead for NFV-related projects at Red Hat. BE in Computer Engineering from University of A Coruña (Spain) and PhD from Polytechnic School of the University of São Paulo (Brazil). During MsC and PhD studies, worked on QoS routing in SDN and NFV Management and Orchestration.
+
+Have been designing and implementing IaaS/PaaS solutions, namelly OpenStack and Kubernetes/OpenShift, for the last 7 years, and teaching postgraduate courses for the last 5 years.
+
+Areas of Expertise
+ - NFVi
+ - OpenStack
+ - K8s/OpenShift
+ - SDN
+{: .text-justify}
diff --git a/_pages/classes.md b/_pages/classes.md
new file mode 100644
index 0000000000..eaacd9167a
--- /dev/null
+++ b/_pages/classes.md
@@ -0,0 +1,31 @@
+---
+permalink: /classes/
+last_modified_at: 2022-03-21T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - es
+ - fiap
+ - iffe
+ - iot
+ - openstack
+ - pt
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/iffe/main/README.md %}
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/README.md %}
+
+
diff --git a/_pages/mininfv.md b/_pages/mininfv.md
new file mode 100644
index 0000000000..695b8a9454
--- /dev/null
+++ b/_pages/mininfv.md
@@ -0,0 +1,21 @@
+---
+permalink: /mininfv/
+last_modified_at: 2020-07-10T16:00:58-04:00
+tags:
+ - en
+ - iac
+ - networks
+ - nfv
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/mini-nfv/master/README.md %}
+
+
diff --git a/_pages/series.md b/_pages/series.md
new file mode 100644
index 0000000000..772a44ccdd
--- /dev/null
+++ b/_pages/series.md
@@ -0,0 +1,87 @@
+---
+title: "Series"
+permalink: /series/
+last_modified_at: 2020-07-10T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - iac
+ - openstack
+ - openshift
+ - redhat
+ - pt
+ - series
+ - terraform
+toc: true
+toc_sticky: true
+---
+
+
+# AWS
+
+## Infrastructure as a Service (IaaS)
+- AWS I: [Elastic Computing (EC2)](/aws1-ec2)
+- AWS II: [Elastic Block Service (EBS)](/aws2-ebs)
+- AWS III: [Simple Storage Service (S3)](/aws3-s3)
+- AWS IV: [Auto Scaling](/aws4-autoscaling)
+- AWS V: [Elastic Container Service (ECS)](/aws5-ecs)
+- AWS VI: [CloudFormation](/aws6-cloudformation)
+
+## Platform as a Service (PaaS)
+- AWS VII: [Elastic Beanstalk (EB)](/aws7-eb)
+- AWS VIII: [Elastic Beanstalk (EB) com Spring Boot](/aws8-eb-springboot)
+- AWS IX: [CodePipeline](/aws9-cp)
+- AWS X: [API Gateway](/aws10-apigw)
+- AWS XI: [Elastic Kubernetes Service (EKS)](/aws11-eks)
+
+### Database as a Service (DBaaS)
+- AWS XII: [DynamoDB](/aws12-dynamodb)
+- AWS XIII: [Relational Database Service (RDS)](/aws13-rds)
+
+### Big Data as a Service (BDaaS)
+- AWS XIV: [Elastic MapReduce (EMR)](/aws14-emr)
+
+## Function as a Service (FaaS)
+- AWS XV: [Lambda](/aws15-lambda)
+
+# Azure
+
+## Infrastructure as a Service (IaaS)
+- Azure I: [Virtual machines](/azure1-vm)
+- Azure II: [Containers](/azure2-container)
+- Azure III: [Disks](/azure3-disk)
+- Azure IV: [Blob storage](/azure4-blob)
+
+## Platform as a Service (PaaS)
+- Azure V: [App services](/azure5-app)
+- Azure VI: [Azure Pipelines](/azure6-pipeline)
+
+# Containers
+- Containers I: [Docker](/containers1-docker)
+- Containers II: [Docker - continuação](/containers2-docker2)
+- Containers III: [Docker Compose](/containers3-docker-compose)
+
+## Orquestração
+- Containers IV: [Docker Swarm](/containers4-docker-swarm)
+- Containers V: [Kubernetes - Instalação](/containers5-k8s-install)
+- Containers VI: [Kompose](/containers6-kompose)
+- Containers VII: [Kubernetes - Uso](/containers7-k8s-use)
+
+# OpenStack
+- OpenStack I: [Keystone - Identity Manager](/openstack1-keystone)
+- OpenStack II: [Glance - Image Service](/openstack2-glance)
+- OpenStack III: [Nova - Instance Service](/openstack3-nova)
+- OpenStack IV: [Neutron - Network Service](/openstack4-neutron)
+- OpenStack V: [Cinder - Block Storage Service](/openstack5-cinder)
+- OpenStack VI: [Swift - Object Storage Service](/openstack6-swift)
+- OpenStack VII: [Heat - Orquestration Service](/openstack7-heat)
+- OpenStack VIII: [Terraform](/openstack8-terraform)
+
+## Infrastructure as code (IaC)
+- [Terraform – IaC – Terraformando no OpenStack](/terraformando-openstack)
+- [Terraform no OpenStack II](/openstack8-terraform)
+- [Terraform na AWS](/iac-terraform-aws)
+- [Heat - Introdução](/heat-introducao)
+- [Heat II](/openstack7-heat)
+- [Ansible na AWS](/iac-ansible-aws)
\ No newline at end of file
diff --git a/_posts/2010-01-07-post-modified.md b/_posts/2010-01-07-post-modified.md
deleted file mode 100644
index c09d324ae1..0000000000
--- a/_posts/2010-01-07-post-modified.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: "Post: Modified Date"
-last_modified_at: 2016-03-09T16:20:02-05:00
-categories:
- - Blog
-tags:
- - Post Formats
- - readability
- - standard
----
-
-This post has been updated and should show a modified date if used in a layout.
-
-All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end.
\ No newline at end of file
diff --git a/_posts/2010-01-07-post-standard.md b/_posts/2010-01-07-post-standard.md
deleted file mode 100644
index fc25616d42..0000000000
--- a/_posts/2010-01-07-post-standard.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: "Post: Standard"
-excerpt_separator: ""
-categories:
- - Blog
-tags:
- - Post Formats
- - readability
- - standard
----
-
-All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end.
-
-Mrs. Darling first heard of Peter when she was tidying up her children's minds. It is the nightly custom of every good mother after her children are asleep to rummage in their minds and put things straight for next morning, repacking into their proper places the many articles that have wandered during the day.
-
-
-
-This post has a manual excerpt `` set after the second paragraph. The following YAML Front Matter has also be applied:
-
-```yaml
-excerpt_separator: ""
-```
-
-If you could keep awake (but of course you can't) you would see your own mother doing this, and you would find it very interesting to watch her. It is quite like tidying up drawers. You would see her on her knees, I expect, lingering humorously over some of your contents, wondering where on earth you had picked this thing up, making discoveries sweet and not so sweet, pressing this to her cheek as if it were as nice as a kitten, and hurriedly stowing that out of sight. When you wake in the morning, the naughtiness and evil passions with which you went to bed have been folded up small and placed at the bottom of your mind and on the top, beautifully aired, are spread out your prettier thoughts, ready for you to put on.
-
-I don't know whether you have ever seen a map of a person's mind. Doctors sometimes draw maps of other parts of you, and your own map can become intensely interesting, but catch them trying to draw a map of a child's mind, which is not only confused, but keeps going round all the time. There are zigzag lines on it, just like your temperature on a card, and these are probably roads in the island, for the Neverland is always more or less an island, with astonishing splashes of colour here and there, and coral reefs and rakish-looking craft in the offing, and savages and lonely lairs, and gnomes who are mostly tailors, and caves through which a river runs, and princes with six elder brothers, and a hut fast going to decay, and one very small old lady with a hooked nose. It would be an easy map if that were all, but there is also first day at school, religion, fathers, the round pond, needle-work, murders, hangings, verbs that take the dative, chocolate pudding day, getting into braces, say ninety-nine, three-pence for pulling out your tooth yourself, and so on, and either these are part of the island or they are another map showing through, and it is all rather confusing, especially as nothing will stand still.
-
-Of course the Neverlands vary a good deal. John's, for instance, had a lagoon with flamingoes flying over it at which John was shooting, while Michael, who was very small, had a flamingo with lagoons flying over it. John lived in a boat turned upside down on the sands, Michael in a wigwam, Wendy in a house of leaves deftly sewn together. John had no friends, Michael had friends at night, Wendy had a pet wolf forsaken by its parents, but on the whole the Neverlands have a family resemblance, and if they stood still in a row you could say of them that they have each other's nose, and so forth. On these magic shores children at play are for ever beaching their coracles [simple boat]. We too have been there; we can still hear the sound of the surf, though we shall land no more.
-
-Of all delectable islands the Neverland is the snuggest and most compact, not large and sprawly, you know, with tedious distances between one adventure and another, but nicely crammed. When you play at it by day with the chairs and table-cloth, it is not in the least alarming, but in the two minutes before you go to sleep it becomes very real. That is why there are night-lights.
-
-Occasionally in her travels through her children's minds Mrs. Darling found things she could not understand, and of these quite the most perplexing was the word Peter. She knew of no Peter, and yet he was here and there in John and Michael's minds, while Wendy's began to be scrawled all over with him. The name stood out in bolder letters than any of the other words, and as Mrs. Darling gazed she felt that it had an oddly cocky appearance.
\ No newline at end of file
diff --git a/_posts/2010-01-08-post-chat.md b/_posts/2010-01-08-post-chat.md
deleted file mode 100644
index 9092634192..0000000000
--- a/_posts/2010-01-08-post-chat.md
+++ /dev/null
@@ -1,134 +0,0 @@
----
-title: "Post: Chat"
-categories:
- - Blog
-tags:
- - chat
- - Post Formats
----
-
-Abbott: Strange as it may seem, they give ball players nowadays very peculiar names.
-
-Costello: Funny names?
-
-Abbott: Nicknames, nicknames. Now, on the St. Louis team we have Who's on first, What's on second, I Don't Know is on third--
-
-Costello: That's what I want to find out. I want you to tell me the names of the fellows on the St. Louis team.
-
-Abbott: I'm telling you. Who's on first, What's on second, I Don't Know is on third--
-
-Costello: You know the fellows' names?
-
-Abbott: Yes.
-
-Costello: Well, then who's playing first?
-
-Abbott: Yes.
-
-Costello: I mean the fellow's name on first base.
-
-Abbott: Who.
-
-Costello: The fellow playin' first base.
-
-Abbott: Who.
-
-Costello: The guy on first base.
-
-Abbott: Who is on first.
-
-Costello: Well, what are you askin' me for?
-
-Abbott: I'm not asking you--I'm telling you. Who is on first.
-
-Costello: I'm asking you--who's on first?
-
-Abbott: That's the man's name.
-
-Costello: That's who's name?
-
-Abbott: Yes.
-
-Costello: When you pay off the first baseman every month, who gets the money?
-
-Abbott: Every dollar of it. And why not, the man's entitled to it.
-
-Costello: Who is?
-
-Abbott: Yes.
-
-Costello: So who gets it?
-
-Abbott: Why shouldn't he? Sometimes his wife comes down and collects it.
-
-Costello: Who's wife?
-
-Abbott: Yes. After all, the man earns it.
-
-Costello: Who does?
-
-Abbott: Absolutely.
-
-Costello: Well, all I'm trying to find out is what's the guy's name on first base?
-
-Abbott: Oh, no, no. What is on second base.
-
-Costello: I'm not asking you who's on second.
-
-Abbott: Who's on first!
-
-Costello: St. Louis has a good outfield?
-
-Abbott: Oh, absolutely.
-
-Costello: The left fielder's name?
-
-Abbott: Why.
-
-Costello: I don't know, I just thought I'd ask.
-
-Abbott: Well, I just thought I'd tell you.
-
-Costello: Then tell me who's playing left field?
-
-Abbott: Who's playing first.
-
-Costello: Stay out of the infield! The left fielder's name?
-
-Abbott: Why.
-
-Costello: Because.
-
-Abbott: Oh, he's center field.
-
-Costello: Wait a minute. You got a pitcher on this team?
-
-Abbott: Wouldn't this be a fine team without a pitcher?
-
-Costello: Tell me the pitcher's name.
-
-Abbott: Tomorrow.
-
-Costello: Now, when the guy at bat bunts the ball--me being a good catcher--I want to throw the guy out at first base, so I pick up the ball and throw it to who?
-
-Abbott: Now, that's he first thing you've said right.
-
-Costello: I DON'T EVEN KNOW WHAT I'M TALKING ABOUT!
-
-Abbott: Don't get excited. Take it easy.
-
-Costello: I throw the ball to first base, whoever it is grabs the ball, so the guy runs to second. Who picks up the ball and throws it to what. What throws it to I don't know. I don't know throws it back to tomorrow--a triple play.
-
-Abbott: Yeah, it could be.
-
-Costello: Another guy gets up and it's a long ball to center.
-
-Abbott: Because.
-
-Costello: Why? I don't know. And I don't care.
-
-Abbott: What was that?
-
-Costello: I said, I DON'T CARE!
-
-Abbott: Oh, that's our shortstop!
\ No newline at end of file
diff --git a/_posts/2010-02-05-post-notice.md b/_posts/2010-02-05-post-notice.md
deleted file mode 100644
index 392f2cd52d..0000000000
--- a/_posts/2010-02-05-post-notice.md
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: "Post: Notice"
-categories:
- - Blog
-tags:
- - Post Formats
- - notice
----
-
-A notice displays information that explains nearby content. Often used to call attention to a particular detail.
-
-When using Kramdown `{: .notice}` can be added after a sentence to assign the `.notice` to the `` element.
-
-**Changes in Service:** We just updated our [privacy policy](#) here to better service our customers. We recommend reviewing the changes.
-{: .notice}
-
-**Primary Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. [Praesent libero](#). Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
-{: .notice--primary}
-
-**Info Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing elit](#). Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
-{: .notice--info}
-
-**Warning Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. [Integer nec odio](#). Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
-{: .notice--warning}
-
-**Danger Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing](#) elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
-{: .notice--danger}
-
-**Success Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at [nibh elementum](#) imperdiet.
-{: .notice--success}
-
-Want to wrap several paragraphs or other elements in a notice? Using Liquid to capture the content and then filter it with `markdownify` is a good way to go.
-
-```html
-{% raw %}{% capture notice-2 %}
-#### New Site Features
-
-* You can now have cover images on blog pages
-* Drafts will now auto-save while writing
-{% endcapture %}{% endraw %}
-
-
{% raw %}{{ notice-2 | markdownify }}{% endraw %}
-```
-
-{% capture notice-2 %}
-#### New Site Features
-
-* You can now have cover images on blog pages
-* Drafts will now auto-save while writing
-{% endcapture %}
-
-
- {{ notice-2 | markdownify }}
-
-
-Or you could skip the capture and stick with straight HTML.
-
-```html
-
-
Message
-
A basic message.
-
-```
-
-
-
Message
-
A basic message.
-
\ No newline at end of file
diff --git a/_posts/2010-02-05-post-quote.md b/_posts/2010-02-05-post-quote.md
deleted file mode 100644
index fda06e93db..0000000000
--- a/_posts/2010-02-05-post-quote.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Post: Quote"
-categories:
- - Blog
-tags:
- - Post Formats
- - quote
----
-
-> Only one thing is impossible for God: To find any sense in any copyright law on the planet.
-
-> Mark Twain
\ No newline at end of file
diff --git a/_posts/2010-03-07-post-link.md b/_posts/2010-03-07-post-link.md
deleted file mode 100644
index 6d9918026a..0000000000
--- a/_posts/2010-03-07-post-link.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "Post: Link"
-categories:
- - Blog
-tags:
- - link
- - Post Formats
-link: https://github.com
----
-
-This theme supports **link posts**, made famous by John Gruber. To use, just add `link: http://url-you-want-linked` to the post's YAML front matter and you're done.
-
-> And this is how a quote looks.
-
-Some [link](#) can also be shown.
\ No newline at end of file
diff --git a/_posts/2012-07-30-icccn12.md b/_posts/2012-07-30-icccn12.md
new file mode 100644
index 0000000000..6e459e79f4
--- /dev/null
+++ b/_posts/2012-07-30-icccn12.md
@@ -0,0 +1,45 @@
+---
+title: "ICCCN 2012"
+last_modified_at: 2012-07-30T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: true
+toc_sticky: true
+---
+
+**2012 21st International Conference on Computer Communications and Networks (ICCCN)**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6287204/proceeding)
+
+[**Context-Driven Resource Over-Provisioning Approach for Rich Networking**](https://ieeexplore.ieee.org/document/6289251)
+
+[![DOI:10.1109/ICCCN.2012.6289251](https://zenodo.org/badge/DOI/10.1109/ICCCN.2012.6289251.svg)](https://doi.org/10.1109/ICCCN.2012.6289251)
+
+ - J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain)
+ - E. Cruz (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil)
+ - A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil)
+ - S. Sargento (Institute of Telecommunications, University of Aveiro, Portugal)
+ - E. Cerqueira (Computer Engineering, Federal University of Para (UFPA), Belém-PA, Brazil)
+
+## Cite this
+
+### Plain text
+
+J. Castillo, E. Cruz, A. Neto, S. Sargento and E. Cerqueira, "**Context-Driven Resource Over-Provisioning Approach for Rich Networking**", *2012 21st International Conference on Computer Communications and Networks (ICCCN)*, Munich, 2012, pp. 1-5, doi: 10.1109/ICCCN.2012.6289251.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6289251,
+ author={J. {Castillo} and E. {Cruz} and A. {Neto} and S. {Sargento} and E. {Cerqueira}},
+ booktitle={2012 21st International Conference on Computer Communications and Networks (ICCCN)},
+ title={Context-Driven Resource Over-Provisioning Approach for Rich Networking},
+ year={2012},
+ volume={},
+ number={},
+ pages={1-5}}
+```
diff --git a/_posts/2012-10-07-latincom12.md b/_posts/2012-10-07-latincom12.md
new file mode 100644
index 0000000000..e1a7984a36
--- /dev/null
+++ b/_posts/2012-10-07-latincom12.md
@@ -0,0 +1,45 @@
+---
+title: "IEEE LATINCOM 2012"
+last_modified_at: 2012-10-07T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: true
+toc_sticky: true
+---
+
+**2012 IEEE Latin-America Conference on Communications**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6495636/proceeding)
+
+[**Applying advanced network resource provisioning in future internet systems**](https://ieeexplore.ieee.org/document/6506000)
+
+[![DOI:10.1109/LATINCOM.2012.6506000](https://zenodo.org/badge/DOI/10.1109/LATINCOM.2012.6506000.svg)](https://doi.org/10.1109/LATINCOM.2012.6506000)
+
+ - S. Jardim (Informatics Institute, Federal University of Goiás, Goiânia, Brazil)
+ - A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil)
+ - J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain)
+ - E. Cerqueira (Computer Engineering, Federal University of Para (UFPA), Belém, Brazil)
+ - H. Barros (Federal University of Rio Grande do Norte (UFRN), Natal, Brazil)
+
+## Cite this
+
+### Plain text
+
+S. Jardim, A. Neto, J. Castillo, E. Cerqueira and H. Barros, "**Applying advanced network resource provisioning in future internet systems**", *2012 IEEE Latin-America Conference on Communications*, Cuenca, 2012, pp. 1-6, doi: 10.1109/LATINCOM.2012.6506000.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6506000,
+ author={S. {Jardim} and A. {Neto} and J. {Castillo} and E. {Cerqueira} and H. {Barros}},
+ booktitle={2012 IEEE Latin-America Conference on Communications},
+ title={Applying advanced network resource provisioning in future internet systems},
+ year={2012},
+ volume={},
+ number={},
+ pages={1-6}}
+```
diff --git a/_posts/2012-10-15-networks12.md b/_posts/2012-10-15-networks12.md
new file mode 100644
index 0000000000..c7cde45467
--- /dev/null
+++ b/_posts/2012-10-15-networks12.md
@@ -0,0 +1,45 @@
+---
+title: "NETWORKS 2012"
+last_modified_at: 2012-10-15T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: true
+toc_sticky: true
+---
+
+**2012 15th International Telecommunications Network Strategy and Planning Symposium (NETWORKS)**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6365888/proceeding)
+
+[**Applying over-provisioning centric resource control in context-sensitive networks**](https://ieeexplore.ieee.org/document/6825100)
+
+[![DOI:10.1109/NETWKS.2012.6381689](https://zenodo.org/badge/DOI/10.1109/NETWKS.2012.6381689.svg)](https://doi.org/10.1109/NETWKS.2012.6381689)
+
+ - J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain)
+ - E. Cruz (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil)
+ - A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil)
+ - S. Sargento (Institute of Telecommunications, University of Aveiro, Portugal)
+ - E. Cerqueira (Computer Engineering, Federal University of Para (UFPA), Belém-PA, Brazil)
+
+## Cite this
+
+### Plain text
+
+J. Castillo-Lema, E. Cruz, A. Neto, S. Sargento and E. Cerqueira, "**Applying over-provisioning centric resource control in context-sensitive networks**", *2012 15th International Telecommunications Network Strategy and Planning Symposium (NETWORKS)*, Rome, 2012, pp. 1-6, doi: 10.1109/NETWKS.2012.6381689.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6381689,
+ author={J. {Castillo-Lema} and E. {Cruz} and A. {Neto} and S. {Sargento} and E. {Cerqueira}},
+ booktitle={2012 15th International Telecommunications Network Strategy and Planning Symposium (NETWORKS)},
+ title={Applying over-provisioning centric resource control in context-sensitive networks},
+ year={2012},
+ volume={},
+ number={},
+ pages={1-6}}
+```
diff --git a/_posts/2013-01-28-icnc13.md b/_posts/2013-01-28-icnc13.md
new file mode 100644
index 0000000000..feb30f00fd
--- /dev/null
+++ b/_posts/2013-01-28-icnc13.md
@@ -0,0 +1,73 @@
+---
+title: "ICNC 2013"
+last_modified_at: 2013-12-09T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: true
+toc_sticky: true
+---
+
+**2013 International Conference on Computing, Networking and Communications (ICNC)**
+
+# [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6495637/proceeding)
+
+## [Advanced resource provisioning in context-sensitive converged networks](https://ieeexplore.ieee.org/document/6504057)
+
+[![DOI:10.1109/ICCNC.2013.6504057](https://zenodo.org/badge/DOI/10.1109/ICCNC.2013.6504057.svg)](https://doi.org/10.1109/ICCNC.2013.6504057)
+
+ - Jose Castillo Lema (Universidade da Coruña, Spain)
+ - Elifanio Cruz (Federal University of Ceará, Brazil)
+ - Augusto Jose Venancio Neto (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Eduardo Cerqueira (Federal University of Para, Brazil)
+
+### Cite this
+
+#### Plain text
+
+J. Castillo-Lema, E. Cruz, A. Neto and E. Cerqueira, "**Advanced resource provisioning in context-sensitive converged networks**", *2013 International Conference on Computing, Networking and Communications (ICNC)*, San Diego, CA, 2013, pp. 77-81, doi: 10.1109/ICCNC.2013.6504057.
+
+#### BibTeX
+
+```
+@INPROCEEDINGS {6504057,
+ author={J. {Castillo-Lema} and E. {Cruz} and A. {Neto} and E. {Cerqueira}},
+ booktitle={2013 International Conference on Computing, Networking and Communications (ICNC)},
+ title={Advanced resource provisioning in context-sensitive converged networks},
+ year={2013},
+ volume={},
+ number={},
+ pages={77-81}}
+```
+
+## [Enhancing dependability in Future Internet systems by applying over-provisioning centric resource allocation control](https://ieeexplore.ieee.org/document/6504252)
+
+[![DOI:10.1109/ICCNC.2013.6504252](https://zenodo.org/badge/DOI/10.1109/ICCNC.2013.6504252.svg)](https://doi.org/10.1109/ICCNC.2013.6504252)
+
+ - Sandino Jardim (Federal University of Goias, Brazil)
+ - Augusto Jose Venancio Neto (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Jose Castillo Lema (Universidade da Coruña, Spain)
+ - Eduardo Cerqueira (Federal University of Para, Brazil)
+ - Hugo Barros (Universidade Federal do Rio Grande do Norte, Brazil)
+
+### Cite this
+
+#### Plain text
+
+S. Jardim, A. Neto, J. Castillo, E. Cerqueira and H. Barros, "**Enhancing dependability in Future Internet systems by applying over-provisioning centric resource allocation control**", *2013 International Conference on Computing, Networking and Communications (ICNC)*, San Diego, CA, 2013, pp. 1134-1138, doi: 10.1109/ICCNC.2013.6504252.
+
+#### BibTeX
+
+```
+@INPROCEEDINGS {6504252,
+ author={S. {Jardim} and A. {Neto} and J. {Castillo} and E. {Cerqueira} and H. {Barros}},
+ booktitle={2013 International Conference on Computing, Networking and Communications (ICNC)},
+ title={Enhancing dependability in Future Internet systems by applying over-provisioning centric resource allocation control},
+ year={2013},
+ volume={},
+ number={},
+ pages={1134-1138}}
+```
diff --git a/_posts/2013-07-10-iscc13.md b/_posts/2013-07-10-iscc13.md
new file mode 100644
index 0000000000..270e2fe7ee
--- /dev/null
+++ b/_posts/2013-07-10-iscc13.md
@@ -0,0 +1,45 @@
+---
+title: "IEEE ISCC 2013"
+last_modified_at: 2013-12-09T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: yes
+toc_sticky: true
+---
+
+**2013 IEEE Symposium on Computers and Communications (ISCC)**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6746555/proceeding)
+
+[**Over-provisioning centric network resource control in Future Internet systems**](https://ieeexplore.ieee.org/document/6754948)
+
+[![DOI:10.1109/ISCC.2013.6754948](https://zenodo.org/badge/DOI/10.1109/ISCC.2013.6754948.svg)](https://doi.org/10.1109/ISCC.2013.6754948)
+
+ - Sandino Jardim (Federal University of Goias, Brazil)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Jose Castillo Lema (Universidade da Coruña, Spain)
+ - Eduardo Cerqueira (Federal University of Para & UFPA, Brazil)
+ - Felipe Silva (Universidade Federal do Rio Grande do Norte, Brazil)
+
+## Cite this
+
+### Plain text
+
+S. Jardim, A. Neto, J. C. Lema, E. Cerqueira and F. Silva, "**Over-provisioning centric network resource control in Future Internet systems**", *2013 IEEE Symposium on Computers and Communications (ISCC)*, Split, 2013, pp. 000213-000218, doi: 10.1109/ISCC.2013.6754948.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6754948,
+ author={S. {Jardim} and A. {Neto} and J. C. {Lema} and E. {Cerqueira} and F. {Silva}},
+ booktitle={2013 IEEE Symposium on Computers and Communications (ISCC)},
+ title={Over-provisioning centric network resource control in Future Internet systems},
+ year={2013},
+ volume={},
+ number={},
+ pages={000213-000218}}
+```
diff --git a/_posts/2013-12-09-globecom13.md b/_posts/2013-12-09-globecom13.md
new file mode 100644
index 0000000000..d610873d3d
--- /dev/null
+++ b/_posts/2013-12-09-globecom13.md
@@ -0,0 +1,46 @@
+---
+title: "IEEE GLOBECOM 2013"
+last_modified_at: 2013-12-09T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+toc: yes
+toc_sticky: true
+---
+
+**Globecom 2013 Workshop - Management of Emerging Networks and Services Program**
+
+## [Program](http://grtc.uha.fr/MENS2013/program.html)
+
+[**Hybrid Framework for Scalable Resource Control in Multi-ingress Networks**](https://ieeexplore.ieee.org/document/6825100)
+
+[![DOI:10.1109/GLOCOMW.2013.6825100](https://zenodo.org/badge/DOI/10.1109/GLOCOMW.2013.6825100.svg)](https://doi.org/10.1109/GLOCOMW.2013.6825100)
+
+ - Sandino Jardim (Federal University of Goias, Brazil)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Jose Castillo Lema (Universidade da Coruña, Spain)
+ - Evariste Logota (University of Aveiro, Instituto de Telecomunicações, Portugal)
+ - Eduardo Cerqueira (Federal University of Para & UFPA, Brazil)
+ - Jonathan Rodriguez (Instituto de Telecomunicações, Portugal)
+
+## Cite this
+
+### Plain text
+
+S. Jardim, A. Neto, J. C. Lema, E. Logota, J. Rodriguez and E. Cerqueira, "**Hybrid framework for scalable resource control in multi-ingress networks**", *2013 IEEE Globecom Workshops (GC Wkshps)*, Atlanta, GA, 2013, pp. 879-884, doi: 10.1109/GLOCOMW.2013.6825100.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6825100,
+ author={S. {Jardim} and A. {Neto} and J. C. {Lema} and E. {Logota} and J. {Rodriguez} and E. {Cerqueira}},
+ booktitle={2013 IEEE Globecom Workshops (GC Wkshps)},
+ title={Hybrid framework for scalable resource control in multi-ingress networks},
+ year={2013},
+ volume={},
+ number={},
+ pages={879-884}}
+```
diff --git a/_posts/2014-05-05-sbrc14.md b/_posts/2014-05-05-sbrc14.md
new file mode 100644
index 0000000000..ea78bd2d95
--- /dev/null
+++ b/_posts/2014-05-05-sbrc14.md
@@ -0,0 +1,54 @@
+---
+title: "SBRC/WPEIF 2014"
+last_modified_at: 2014-05-05T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**XXXII Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos / V Workshop de Pesquisa Experimental da Internet do Futuro**
+
+## [Proceedings](http://www.sbrc2014.ufsc.br/?pg=workshops&id=6)
+
+
+[**Quality-oriented Mobility Control Architecture for ETArch Handover Optimization**](https://www.semanticscholar.org/paper/Quality-oriented-Mobility-Control-Architecture-for-Silva-Neto/06330e77484e498f3bb4c8429761902196a213e6)
+
+ - Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil)
+ - José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Flavio de Oliveira Silva (Universidade Federal de Uberlândia, Brazil)
+ - Pedro Frosi Rosa (Federal University of Uberlândia, Brazil)
+ - Daniel Corujo (Universidade de Aveiro, Portugal)
+ - Carlos Guimaraes (Universidade de Aveiro, Portugal)
+ - Rui Aguiar (Universidade de Aveiro, Brazil)
+
+## Cite this
+
+### APA
+
+Silva, F.S., Neto, A., Silva, F.´., Frosi, P., Corujo, D., Guimar, C.A., & Aguiar, R.L. (2014). Quality-oriented Mobility Control Architecture for ETArch Handover Optimization.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {32004,
+ author={F. Dantas Dantas and A. Neto and J. Castillo-Lema and P. Rosa and F. Silva and D. Corujo and C. Guimarães and R. Aguiar},
+ booktitle={SBC WORKSHOP DE PESQUISA EXPERIMENTAL DA INTERNET DO FUTURO WPEIF},
+ title={Quality-oriented Mobility Control Architecture for ETArch Handover Optimization},
+ year={2014},
+ month={May}}
+```
+
+### Chicago
+
+Silva, Felipe Sampaio Dantas da, Augusto Neto, Flávio Silva, Pedro Frosi, Daniel Corujo, Carlos A. S. Guimar and Rui L. Aguiar. “Quality-oriented Mobility Control Architecture for ETArch Handover Optimization.” (2014).
+
+### MLA
+
+Silva, Felipe Sampaio Dantas da et al. “Quality-oriented Mobility Control Architecture for ETArch Handover Optimization.” (2014).
\ No newline at end of file
diff --git a/_posts/2014-06-23-iscc14.md b/_posts/2014-06-23-iscc14.md
new file mode 100644
index 0000000000..174d057b63
--- /dev/null
+++ b/_posts/2014-06-23-iscc14.md
@@ -0,0 +1,51 @@
+---
+title: "IEEE ISCC 2014"
+last_modified_at: 2014-06-23T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**The nineteenth IEEE Symposium on Computers And Communications**
+
+## [Program](http://iscc2014.ieee-iscc.org/2014/Program/index.html)
+
+
+[**Entity Title Architecture Extensions Towards Advanced Quality-oriented Mobility Control Capabilities**](https://ieeexplore.ieee.org/document/6912459)
+
+[![DOI:10.1109/ISCC.2014.6912459](https://zenodo.org/badge/DOI/10.1109/ISCC.2014.6912459.svg)](https://doi.org/10.1109/ISCC.2014.6912459)
+
+ - Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil)
+ - José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Flavio de Oliveira Silva (Universidade Federal de Uberlândia, Brazil)
+ - Pedro Frosi Rosa (Federal University of Uberlândia, Brazil)
+ - Daniel Corujo (Instituto de Telecomunicações Aveiro, Portugal)
+ - Carlos Eduardo Magalhães Guimarães (Instituto de Telecomunicações - Pólo de Aveiro, Portugal)
+ - Rui L Aguiar (University of Aveiro, Portugal)
+
+## Cite this
+
+### Plain text
+
+F. Silva et al., "**Entity title architecture extensions towards advanced quality-oriented mobility control capabilities**", *2014 IEEE Symposium on Computers and Communications (ISCC)*, Funchal, 2014, pp. 1-6, doi: 10.1109/ISCC.2014.6912459.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {6912459,
+ author={F. {Silva} and J. {Castillo-Lema} and A. {Neto} and F. {Silva} and P. {Rosa} and D. {Corujo} and C. {Guimarães} and R. {Aguiar}},
+ booktitle={2014 IEEE Symposium on Computers and Communications (ISCC)},
+ title={Entity title architecture extensions towards advanced quality-oriented mobility control capabilities},
+ year={2014},
+ volume={},
+ number={},
+ pages={1-6}}
+```
+
diff --git a/_posts/2014-07-20-aict14.md b/_posts/2014-07-20-aict14.md
new file mode 100644
index 0000000000..c5be71d5b6
--- /dev/null
+++ b/_posts/2014-07-20-aict14.md
@@ -0,0 +1,52 @@
+---
+title: "AITC 2014"
+last_modified_at: 2014-07-20T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**The Tenth Advanced International Conference on Telecommunications**
+
+## [Program](http://www.iaria.org/conferences2014/ProgramAICT14.html)
+
+
+[**Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions**](https://www.semanticscholar.org/paper/Evolving-Future-Internet-Clean-Slate-Entity-Title-Castillo-Silva/eeed2c240ecbb4d68ae40b7d2a79a803c2d45edd)
+
+ - José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain)
+ - Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Flavio de Oliveira Silva (Universidade Federal de Uberlândia, Brazil)
+ - Pedro Frosi Rosa (Federal University of Uberlândia, Brazil)
+ - Carlos Eduardo Magalhães Guimarães (Instituto de Telecomunicações - Pólo de Aveiro, Portugal)
+ - Daniel Corujo (Instituto de Telecomunicações Aveiro, Portugal)
+ - Rui L Aguiar (University of Aveiro, Portugal)
+
+## Cite this
+
+### APA
+
+Castillo, J., Silva, F.S., Neto, A., Silva, F.O., Frosi, P., Guimarães, C., Corujo, D., & Aguiar, R.L. (2014). Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions. AICT 2014.
+
+### BibTeX
+
+```
+@inproceedings {Castillo2014EvolvingFI,
+ title={Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions},
+ author={Jos{\'e} Castillo and Felipe Sampaio Dantas da Silva and Augusto Neto and Fl{\'a}vio Oliveira Silva and Pedro Frosi and Carlos Guimar{\~a}es and Daniel Corujo and Rui L. Aguiar},
+ booktitle={IARIA Advanced International Conference on Telecommunications (AICT 2014)},
+ year={2014}}
+```
+
+### Chicago
+Castillo, José, Felipe Sampaio Dantas da Silva, Augusto Neto, Flávio Oliveira Silva, Pedro Frosi, Carlos Guimarães, Daniel Corujo and Rui L. Aguiar. “Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions.” AICT 2014 (2014).
+
+### MLA
+Castillo, José et al. “Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions.” AICT 2014 (2014).
+
diff --git a/_posts/2014-08-05-mdthesis.md b/_posts/2014-08-05-mdthesis.md
new file mode 100644
index 0000000000..d7ab949485
--- /dev/null
+++ b/_posts/2014-08-05-mdthesis.md
@@ -0,0 +1,35 @@
+---
+title: "Evolving Future Internet clean-slate ETArch with QoS control-plane extensions"
+last_modified_at: 2014-08-05T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[**Biblioteca Digital Brasileira de Teses e Dissertações**](http://bdtd.ibict.br/vufind/Record/UFRN_7ccf2b703d54b0fd8cc548ccd747339a)
+
+
+## Cite this
+
+### APA
+Lema, J. C. (2014). **Evolving Future Internet clean-slate Entity Title Architecture with quality-oriented control-plane extensions**.
+
+### Chicago
+Lema, José Castillo. **Evolving Future Internet Clean-slate Entity Title Architecture With Quality-oriented Control-plane Extensions**. 2014.
+
+### MLA
+Lema, José Castillo. **Evolving Future Internet Clean-slate Entity Title Architecture With Quality-oriented Control-plane Extensions**. 2014.
+
+## Publications
+
+- [J. Castillo et al., “**Additions to the ETArch control plane to support multimedia QoS-guaranteed content transport over OpenFlow-enabled SDN future internet systems**”, *2014 IEEE Globecom Workshops (GC Wkshps)*, Austin, TX, 2014, pp. 172-177, doi: 10.1109/GLOCOMW.2014.7063426.](/globecom14) [![DOI:10.1109/GLOCOMW.2014.7063426](https://zenodo.org/badge/DOI/10.1109/GLOCOMW.2014.7063426.svg)](https://doi.org/10.1109/GLOCOMW.2014.7063426)
+- [Castillo, José et al. “**Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions.**” *AICT 2014* (2014).](/aict14)
+- [F. Silva et al., “**Entity title architecture extensions towards advanced quality-oriented mobility control capabilities**”, *2014 IEEE Symposium on Computers and Communications (ISCC)*, Funchal, 2014, pp. 1-6, doi: 10.1109/ISCC.2014.6912459.](/iscc14) [![DOI:10.1109/ISCC.2014.6912459](https://zenodo.org/badge/DOI/10.1109/ISCC.2014.6912459.svg)](https://doi.org/10.1109/ISCC.2014.6912459)
+- [F. Silva, A. Neto, D. Maciel, J. Castillo-Lema and F. Silva, “**Infrastructured Mobility Management Approach for Future Internet ETArch Networks**”, *2015 World Congress in Computer Science, Computer Engineering and Applied Computing (ICWN)*, Las Vegas, Nevada, USA, 2014, pp. 39-45.](/icwn15)
+- [Felipe S. Dantas Silva, Augusto J.V. Neto, Douglas Braz Maciel, Jose Castillo-Lema, Flávio de Oliveira Silva, and Pedro Frosi Rosa. 2015. **SDN Based Control Plane Extensions for Mobility Management Improvement in Next Generation ETArch Networks**. In *Proceedings of the 18th ACM International Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems (MSWiM ’15)*. Association for Computing Machinery, New York, NY, USA, 189–193. DOI:https://doi.org/10.1145/2811587.2811632](/mswim15)
+- [Silva, Felipe Sampaio Dantas da, Augusto Neto, Flávio Silva, Pedro Frosi, Daniel Corujo, Carlos A. S. Guimar and Rui L. Aguiar. “**Quality-oriented Mobility Control Architecture for ETArch Handover Optimization**”. (2014).](/sbrc14)
\ No newline at end of file
diff --git a/_posts/2014-09-05-smart.md b/_posts/2014-09-05-smart.md
new file mode 100644
index 0000000000..23d7ee8158
--- /dev/null
+++ b/_posts/2014-09-05-smart.md
@@ -0,0 +1,20 @@
+---
+title: "Support of Mobile Sessions with High Transport Network Resource Demand"
+last_modified_at: 2014-09-05T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/smart-OF-controller/master/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2014-10-15-healthcom14.md b/_posts/2014-10-15-healthcom14.md
new file mode 100644
index 0000000000..5a9866fac3
--- /dev/null
+++ b/_posts/2014-10-15-healthcom14.md
@@ -0,0 +1,48 @@
+---
+title: "IEEE HealthCom 2014"
+last_modified_at: 2014-06-23T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**2014 IEEE 16th International Conference on e-Health Networking, Applications and Services (Healthcom)**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/6992842/proceeding)
+
+
+[**Software defined eHealth networking towards a truly mobile and reliable system**](https://ieeexplore.ieee.org/document/7001903)
+
+[![DOI:10.1109/HealthCom.2014.7001903](https://zenodo.org/badge/DOI/10.1109/HealthCom.2014.7001903.svg)](https://doi.org/10.1109/HealthCom.2014.7001903)
+
+ - Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil)
+ - José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain)
+ - Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+ - Flavio de Oliveira Silva (Universidade Federal de Uberlândia, Brazil)
+ - Pedro Frosi Rosa (Federal University of Uberlândia, Brazil)
+
+## Cite this
+
+### Plain text
+
+F. Silva, J. Castillo-Lema, A. Neto, F. Silva and P. Rosa, "**Software defined eHealth networking towards a truly mobile and reliable system**", *2014 IEEE 16th International Conference on e-Health Networking, Applications and Services (Healthcom)*, Natal, 2014, pp. 560-564, doi: 10.1109/HealthCom.2014.7001903.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {7001903,
+ author={F. {Silva} and J. {Castillo-Lema} and A. {Neto} and F. {Silva} and P. {Rosa}},
+ booktitle={2014 IEEE 16th International Conference on e-Health Networking, Applications and Services (Healthcom)},
+ title={Software defined eHealth networking towards a truly mobile and reliable system},
+ year={2014},
+ volume={},
+ number={},
+ pages={560-564}}
+```
+
diff --git a/_posts/2014-10-26-smartcampus.md b/_posts/2014-10-26-smartcampus.md
new file mode 100644
index 0000000000..a185f531c1
--- /dev/null
+++ b/_posts/2014-10-26-smartcampus.md
@@ -0,0 +1,18 @@
+---
+title: "Smart Campus SP"
+last_modified_at: 2014-10-26T16:00:58-04:00
+tags:
+ - en
+ - fiware
+ - iot
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/smartcampus-sp/master/README.md %}
+
+
diff --git a/_posts/2014-12-08-globecom14.md b/_posts/2014-12-08-globecom14.md
new file mode 100644
index 0000000000..dd66d4958a
--- /dev/null
+++ b/_posts/2014-12-08-globecom14.md
@@ -0,0 +1,49 @@
+---
+title: "IEEE GLOBECOM 2014"
+last_modified_at: 2014-12-08T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**Global Communications Conference 2014**
+
+## [Proceedings](https://ieeexplore.ieee.org/xpl/conhome/7050532/proceeding)
+
+[**Additions to the ETArch control plane to support multimedia QoS-guaranteed content transport over OpenFlow-enabled SDN future internet systems**](https://ieeexplore.ieee.org/document/7063426)
+
+[![DOI:10.1109/GLOCOMW.2014.7063426](https://zenodo.org/badge/DOI/10.1109/GLOCOMW.2014.7063426.svg)](https://doi.org/10.1109/GLOCOMW.2014.7063426)
+
+ - José Castillo - Federal University of Rio Grande do Norte (UFRN), Brazil
+ - Augusto Neto - Federal University of Rio Grande do Norte (UFRN), Brazil
+ - Flavio Silva - Federal University of Uberlândia (UFU), Brazil
+ - Pedro Frosi - Federal University of Uberlândia (UFU), Brazil
+ - Rui Aguiar - Instituto de Telecomunicações (IT), Portugal
+ - Airton Ishimori - Federal University of Pará (UFPA), Brazil
+ - Fernando Farias - Federal University of Pará (UFPA), Brazil
+ - Antônio Abelém - Federal University of Pará (UFPA), Brazil
+
+## Cite this
+
+### Plain text
+
+J. Castillo et al., "**Additions to the ETArch control plane to support multimedia QoS-guaranteed content transport over OpenFlow-enabled SDN future internet systems**", *2014 IEEE Globecom Workshops (GC Wkshps)*, Austin, TX, 2014, pp. 172-177, doi: 10.1109/GLOCOMW.2014.7063426.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {7063426,
+ author={J. {Castillo} and A. {Neto} and F. {Silva} and P. {Frosi} and R. {Aguiar} and A. {Ishimori} and F. {Farias} and A. {Abelém}},
+ booktitle={2014 IEEE Globecom Workshops (GC Wkshps)},
+ title={Additions to the ETArch control plane to support multimedia QoS-guaranteed content transport over OpenFlow-enabled SDN future internet systems},
+ year={2014},
+ volume={},
+ number={},
+ pages={172-177}}
+```
diff --git a/_posts/2015-07-27-icwn15.md b/_posts/2015-07-27-icwn15.md
new file mode 100644
index 0000000000..56d78975db
--- /dev/null
+++ b/_posts/2015-07-27-icwn15.md
@@ -0,0 +1,46 @@
+---
+title: "ICWN 2015"
+last_modified_at: 2015-07-27T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**The 2015 World Congress in Computer Science, Computer Engineering and Applied Computing**
+
+## [Agenda](https://worldacademyofscience.org/worldcomp15/ws/program/icw29.html)
+
+
+**Infrastructured Mobility Management Approach for Future Internet ETArch Networks**
+ - Felipe Sampaio Dantas da Silva, *Federal Institute of Education, Science and Technology of Rio Grande do Norte*, Brazil
+ - Augusto J. Venancio Neto, *Federal University of Rio Grande do Norte*, Brazil
+ - Douglas Maciel, *Federal University of Rio Grande do Norte*, Brazil
+ - José Castillo Lema, *Universidade de São Paulo*, Brazil
+ - Flavio de Oliveira Silva, *Federal University of Uberlândia*, Brazil
+
+
+## Cite this
+
+### Plain text
+
+F. Silva, A. Neto, D. Maciel, J. Castillo-Lema and F. Silva, "**Infrastructured Mobility Management Approach for Future Internet ETArch Networks**", *2015 World Congress in Computer Science, Computer Engineering and Applied Computing (ICWN)*, Las Vegas, Nevada, USA, 2014, pp. 39-45.
+
+### BibTeX
+
+```
+@INPROCEEDINGS {24637,
+ author={A. Neto},
+ doi={},
+ booktitle={International Conference on Wireless Networks ICWN},
+ title={Infrastructured Mobility Management Approach for Future Internet ETArch Networks},
+ year={2015},
+ month={June},
+ volume={1},
+ pages={39-45}}
+```
\ No newline at end of file
diff --git a/_posts/2015-10-01-lanoms15.md b/_posts/2015-10-01-lanoms15.md
new file mode 100644
index 0000000000..54162dc99d
--- /dev/null
+++ b/_posts/2015-10-01-lanoms15.md
@@ -0,0 +1,26 @@
+---
+title: "LANOMS 2015"
+last_modified_at: 2015-10-01T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: false
+---
+
+**8th Latin American Network Operations and Management Symposium**
+
+## [Agenda](http://www.lanoms.org/2015/17.html)
+
+
+**SDN-based Control Plane Extensions for Mobility Management Improvement in Future Internet Networks**
+ - Felipe Sampaio Dantas da Silva, *Federal Institute of Education, Science and Technology of Rio Grande do Norte*, Brazil
+ - Augusto J. Venancio Neto, *Federal University of Rio Grande do Norte*, Brazil
+ - Douglas Maciel, *Federal University of Rio Grande do Norte*, Brazil
+ - José Castillo Lema, *Universidade de São Paulo*, Brazil
+ - Flavio de Oliveira Silva, *Federal University of Uberlândia*, Brazil
+
+
diff --git a/_posts/2015-11-02-mswim15.md b/_posts/2015-11-02-mswim15.md
new file mode 100644
index 0000000000..7fccaa717a
--- /dev/null
+++ b/_posts/2015-11-02-mswim15.md
@@ -0,0 +1,50 @@
+---
+title: "MSWiM 2015"
+last_modified_at: 2015-11-02T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+**The 18th ACM International Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems**
+
+## [Agenda](http://mswimconf.com/2015/)
+
+
+[**Network-Initiated Quality-oriented Mobility Management Approach for Next Generation ETArch Networks**](https://www.researchgate.net/publication/283718842_Network-Initiated_Quality-oriented_Mobility_Management_Approach_for_Next_Generation_ETArch_Networks)
+
+ - Felipe Sampaio Dantas da Silva, *Federal Institute of Education, Science and Technology of Rio Grande do Norte*, Brazil
+ - Augusto J. Venancio Neto, *Federal University of Rio Grande do Norte*, Brazil
+ - Douglas Maciel, *Federal University of Rio Grande do Norte*, Brazil
+ - José Castillo Lema, *Universidade de São Paulo*, Brazil
+ - Flavio de Oliveira Silva, *Federal University of Uberlândia*, Brazil
+
+## Cite this
+
+### ACM
+
+Felipe S. Dantas Silva, Augusto J.V. Neto, Douglas Braz Maciel, Jose Castillo-Lema, Flávio de Oliveira Silva, and Pedro Frosi Rosa. 2015. **SDN Based Control Plane Extensions for Mobility Management Improvement in Next Generation ETArch Networks**. In *Proceedings of the 18th ACM International Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems (MSWiM ’15)*. Association for Computing Machinery, New York, NY, USA, 189–193.
+
+### BibTeX
+
+```
+@inproceedings {10.1145/2811587.2811632,
+ author = {Silva, Felipe S. Dantas and Neto, Augusto J.V. and Maciel, Douglas Braz and Castillo-Lema, Jose and Silva, Fl\'{a}vio de Oliveira and Rosa, Pedro Frosi},
+ title = {SDN Based Control Plane Extensions for Mobility Management Improvement in Next Generation ETArch Networks},
+ year = {2015},
+ isbn = {9781450337625},
+ publisher = {Association for Computing Machinery},
+ address = {New York, NY, USA},
+ booktitle = {Proceedings of the 18th ACM International Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems},
+ pages = {189–193},
+ numpages = {5},
+ keywords = {etarch network, quality of service, software defined networking, mobility management, load balancing},
+ location = {Cancun, Mexico},
+ series = {MSWiM ’15}}
+```
diff --git a/_posts/2016-08-04-fiap-scj.md b/_posts/2016-08-04-fiap-scj.md
new file mode 100644
index 0000000000..8b13e4dda9
--- /dev/null
+++ b/_posts/2016-08-04-fiap-scj.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Full Stack Developer - Microservices, Cloud e IoT (SCJ)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/scj/README.md %}
+
diff --git a/_posts/2016-10-09-computer-networks.md b/_posts/2016-10-09-computer-networks.md
new file mode 100644
index 0000000000..42ffe75031
--- /dev/null
+++ b/_posts/2016-10-09-computer-networks.md
@@ -0,0 +1,56 @@
+---
+title: "Computer Networks - Volume 107"
+last_modified_at: 2016-10-09T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - papers
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2016-10-09-computer-networks.png)](https://www.journals.elsevier.com/computer-networks)
+
+[**Volume 107, Part 2, Pages 270-291**](https://www.sciencedirect.com/science/article/abs/pii/S1389128616301177)
+
+**An innovative software-defined WiNeMO architecture for advanced QoS-guaranteed mobile service transport**
+
+[![DOI:10.1016/j.comnet.2016.04.019](https://zenodo.org/badge/DOI/10.1016/j.comnet.2016.04.019.svg)](https://doi.org/10.1016/j.comnet.2016.04.019)
+
+
+ - Felipe S. Dantas Silva
+ - Augusto Venâncio Netob
+ - Douglas Maciel
+ - José Castillo-Lema
+ - Flávio Silva
+ - Pedro Frosi
+ - Eduardo Cerqueira.
+
+## Cite this
+
+### ACM
+Felipe S. Dantas Silva, Augusto Venâncio Neto, Douglas Maciel, José Castillo-Lema, Flávio Silva, Pedro Frosi, and Eduardo Cerqueira. 2016. **An innovative software-defined WiNeMO architecture for advanced QoS-guaranteed mobile service transport**. Comput. Netw. 107, P2 (October 2016), 270–291. DOI:https://doi.org/10.1016/j.comnet.2016.04.019
+
+### BibTeX
+
+```
+@article {10.1016/j.comnet.2016.04.019,
+author = {Silva, Felipe S. Dantas and Neto, Augusto Ven\^{a}ncio and Maciel, Douglas and Castillo-Lema, Jos\'{e} and Silva, Fl\'{a}vio and Frosi, Pedro and Cerqueira, Eduardo},
+title = {An Innovative Software-Defined WiNeMO Architecture for Advanced QoS-Guaranteed Mobile Service Transport},
+year = {2016},
+issue_date = {October 2016},
+publisher = {Elsevier North-Holland, Inc.},
+address = {USA},
+volume = {107},
+number = {P2},
+issn = {1389-1286},
+url = {https://doi.org/10.1016/j.comnet.2016.04.019},
+doi = {10.1016/j.comnet.2016.04.019},
+journal = {Comput. Netw.},
+month = oct,
+pages = {270–291},
+numpages = {22},
+keywords = {Software-defined networking, Mobility management, Load balancing, Quality of experience, Quality of service}}
+```
\ No newline at end of file
diff --git a/_posts/2016-11-23-fiap-mob.md b/_posts/2016-11-23-fiap-mob.md
new file mode 100644
index 0000000000..85db8f5092
--- /dev/null
+++ b/_posts/2016-11-23-fiap-mob.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Mobile Development (MOB)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/mob/README.md %}
+
diff --git a/_posts/2016-12-12-hntd-01.md b/_posts/2016-12-12-hntd-01.md
new file mode 100644
index 0000000000..1aa6ab6679
--- /dev/null
+++ b/_posts/2016-12-12-hntd-01.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 1st edition"
+last_modified_at: 2016-12-12T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2016-12-12-hntd-01.jpeg)
diff --git a/_posts/2017-02-01-fiap-corporate.md b/_posts/2017-02-01-fiap-corporate.md
new file mode 100644
index 0000000000..1bcc6e671b
--- /dev/null
+++ b/_posts/2017-02-01-fiap-corporate.md
@@ -0,0 +1,21 @@
+---
+title: "FIAP Corporate"
+last_modified_at: 2021-11-26T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - iot
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2017-02-01-fiap-corporate.png)](https://www.fiap.com.br/corporate/)
+
+- **Citibank**: Internet of Things (2017)
+- **Gerdau**: Internet of Things (2017)
+- **Ambev**: Computers Networks and Cloud Computing (2018)
+- **T-Systems**: Internet of Things (2018)
+- **CCR**: Multicloud Architecture (2021)
\ No newline at end of file
diff --git a/_posts/2017-02-06-hntd-02.md b/_posts/2017-02-06-hntd-02.md
new file mode 100644
index 0000000000..0473f77305
--- /dev/null
+++ b/_posts/2017-02-06-hntd-02.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 2nd edition"
+last_modified_at: 2017-02-06T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-02-06-hntd-02.jpeg)
diff --git a/_posts/2017-03-01-puc.md b/_posts/2017-03-01-puc.md
new file mode 100644
index 0000000000..5ed9c07c7c
--- /dev/null
+++ b/_posts/2017-03-01-puc.md
@@ -0,0 +1,11 @@
+---
+title: "PUC-SP Cursos de extensão - Internet das Coisas"
+last_modified_at: 2017-08-26T16:00:58-04:00
+tags:
+ - classes
+ - iot
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-03-01-puc.jpeg)
diff --git a/_posts/2017-03-17-apicon.md b/_posts/2017-03-17-apicon.md
new file mode 100644
index 0000000000..73c1b965e7
--- /dev/null
+++ b/_posts/2017-03-17-apicon.md
@@ -0,0 +1,17 @@
+---
+title: "APICON 2017 - IoT HandsOn Lab"
+last_modified_at: 2017-03-17T16:00:58-04:00
+tags:
+ - events
+ - iot
+ - pt
+toc: false
+---
+
+## API Connect Conference 2017
+
+![](/assets/images/posts/2017-03-17-apicon/01.png)
+![](/assets/images/posts/2017-03-17-apicon/02.jpeg)
+
+![](/assets/images/posts/2017-03-17-apicon/03.JPG)
+![](/assets/images/posts/2017-03-17-apicon/04.JPG)
diff --git a/_posts/2017-03-18-hntd-03.md b/_posts/2017-03-18-hntd-03.md
new file mode 100644
index 0000000000..5bb25e3bb3
--- /dev/null
+++ b/_posts/2017-03-18-hntd-03.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 3rd edition"
+last_modified_at: 2017-03-18T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-03-18-hntd-03.jpeg)
diff --git a/_posts/2017-03-27-hntd-04.md b/_posts/2017-03-27-hntd-04.md
new file mode 100644
index 0000000000..82df37d191
--- /dev/null
+++ b/_posts/2017-03-27-hntd-04.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 4th edition"
+last_modified_at: 2017-03-27T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-03-27-hntd-04.jpeg)
diff --git a/_posts/2017-05-29-hntd-05.md b/_posts/2017-05-29-hntd-05.md
new file mode 100644
index 0000000000..0423098991
--- /dev/null
+++ b/_posts/2017-05-29-hntd-05.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 5th/6th edition"
+last_modified_at: 2017-05-29T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-05-29-hntd-05.jpeg)
diff --git a/_posts/2017-08-21-hntd-07.md b/_posts/2017-08-21-hntd-07.md
new file mode 100644
index 0000000000..9f0166ed57
--- /dev/null
+++ b/_posts/2017-08-21-hntd-07.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 7th edition"
+last_modified_at: 2017-08-21T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-08-21-hntd-07.jpeg)
diff --git a/_posts/2017-08-26-hntd-08.md b/_posts/2017-08-26-hntd-08.md
new file mode 100644
index 0000000000..a51bbe8eb7
--- /dev/null
+++ b/_posts/2017-08-26-hntd-08.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 8th edition"
+last_modified_at: 2017-08-26T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-08-26-hntd-08.jpeg)
diff --git a/_posts/2017-09-26-saint-gobain-ultrachallenge.md b/_posts/2017-09-26-saint-gobain-ultrachallenge.md
new file mode 100644
index 0000000000..457e6b3687
--- /dev/null
+++ b/_posts/2017-09-26-saint-gobain-ultrachallenge.md
@@ -0,0 +1,15 @@
+---
+title: "Ultra Challenge Saint-Gobain"
+last_modified_at: 2017-09-26T16:00:58-04:00
+tags:
+ - events
+ - hackathon
+ - iot
+ - pt
+ - youtube
+toc: false
+---
+
+[![](/assets/images/posts/2017-09-26-saint-gobain-ultrachallenge.jpeg)](https://www.saint-gobain.com.br/noticias/primeiro-ultra-challenge-da-america-latina)
+
+
\ No newline at end of file
diff --git a/_posts/2017-10-17-hntd-09.md b/_posts/2017-10-17-hntd-09.md
new file mode 100644
index 0000000000..e3c131f159
--- /dev/null
+++ b/_posts/2017-10-17-hntd-09.md
@@ -0,0 +1,15 @@
+---
+title: "HCNA-HNTD Training - 9th edition"
+last_modified_at: 2017-10-17T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-10-17-hntd-09/01.jpeg)
+
+![](/assets/images/posts/2017-10-17-hntd-09/02.JPG)
diff --git a/_posts/2017-10-28-futurecom17.md b/_posts/2017-10-28-futurecom17.md
new file mode 100644
index 0000000000..1b53947119
--- /dev/null
+++ b/_posts/2017-10-28-futurecom17.md
@@ -0,0 +1,13 @@
+---
+title: "Futurecom 2017 - Tour IoT"
+last_modified_at: 2017-10-28T16:00:58-04:00
+tags:
+ - events
+ - iot
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-10-28-futurecom2017/00.jpeg)
+![](/assets/images/posts/2017-10-28-futurecom2017/01.jpg)
+![](/assets/images/posts/2017-10-28-futurecom2017/02.jpg)
diff --git a/_posts/2017-10-28-hntd-10.md b/_posts/2017-10-28-hntd-10.md
new file mode 100644
index 0000000000..999b69f31e
--- /dev/null
+++ b/_posts/2017-10-28-hntd-10.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 10th edition"
+last_modified_at: 2017-10-28T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2017-10-28-hntd-10.png)
diff --git a/_posts/2017-11-26-terraformando-openstack.md b/_posts/2017-11-26-terraformando-openstack.md
new file mode 100644
index 0000000000..6f0e1c89f4
--- /dev/null
+++ b/_posts/2017-11-26-terraformando-openstack.md
@@ -0,0 +1,147 @@
+---
+title: "[PT] Terraform – IaC – Terraformando no OpenStack"
+last_modified_at: 2017-11-26T16:00:58-04:00
+tags:
+ - openstack
+ - iac
+ - terraform
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+> Originally published at [**Churrops on DevOps**](https://churrops.io/2017/11/26/terraform-iac-terraformando-no-openstack/) on November 26, 2017.
+
+Olá pessoal, vamos começar uma uma série de artigos sobre OpenStack dando continuidade aos artigos sobre Terraform ([parte 1](https://churrops.io/2017/08/01/terraform-iac-infra-como-codigo-conhecendo/) e [parte 2](https://churrops.io/2017/08/03/terraform-iac-terraformando-na-aws/)) do [Rodrigo Floriano](https://churrops.io/about-authorsrdglinux/), pois é uma ferramenta que vários assíduos do blog já conhecem e usam a diário!
+
+Hoje vamos mostrar um exemplo prático de uso da ferramenta sobre OpenStack.
+
+OpenStack é um *software* de código aberto para a instalação, configuração e gerenciamento de nuvens, tanto públicas como privadas. Rackspace e Dreamhost são alguns exemplos de nuvens públicas que funcionam sobre OpenStack, e PayPal e eBay são exemplos de empresas que usam OpenStack nas suas nuvens privadas.
+
+OpenStack apresenta seus serviços através de APIs compatíveis com os serviços EC2, S3 e CloudFormation da Amazon AWS e, portanto, aplicações escritas para estes serviços do AWS podem ser usados com OpenStack também. Além disso, podemos interagir com OpenStack via CLI, usando o comando `openstack`, ou pelo *dashboard* da plataforma, o Horizon.
+
+Sem mais, vamos la!
+
+## Pré requisitos
+ - Ter o `git` instalado
+ - Uma conta em alguma nuvem OpenStack, não necessariamente `admin`
+ - Quota suficiente na nossa conta para instanciar os recursos solicitados
+ - Ter o Terraform instalado (ver [[Terraform] – IaC – Infra como Código – Conhecendo](https://churrops.io/2017/08/01/terraform-iac-infra-como-codigo-conhecendo/))
+
+## Clonando o repósitorio
+
+```
+$ git clone https://github.com/josecastillolema/churrops.git
+```
+
+Segue uma breve descrição dos arquivos:
+
+ - **live.tf**
+ Arquivo principal, é um *template* com as informações do *provider* (neste caso OpenStack) e a topologia dos recursos que vão ser criados. No primeiro bloco definimos as credencias de acesso a nossa nuvem OpenStack:
+ ```
+ provider "openstack" {
+ user_name = "jose.castillo"
+ tenant_name = "churrops"
+ tenant_id = "ddc494sdfc8bc6ba7caf6d3615b"
+ password = "password"
+ auth_url = "https://keystone.openstack.com.br:5000/v2.0"
+ }
+ ```
+ Para conseguir o `tenant_id` do projeto churrops (o *id* do nosso projeto) basta executar `openstack project show churrops` ou `openstack project list | grep churrops` (ou pegar os dados via o *dashboard* de OpenStack, Horizon).
+
+ No segundo bloco definimos alguns valores que vamos usar no projeto, como a imagem (neste caso Ubuntu), a chave (caso precisemos acessar por ssh a instância), o *flavor*, as redes, etc. Este bloco não é obrigatório, mas pode facilitar a nossa vida quando trabalhemos com um número maior de instâncias. Neste exemplo estamos usando o *security group* padrão do OpenStack (a porta 80 precisa estar aberta), mas de forma muito direta poderíamos criar um recurso de tipo *security group* personalizado para o nosso servidor web. O [site da Terraform](https://www.terraform.io/docs/providers/openstack/) mostra todos os recursos que temos disponíveis para OpenStack.
+
+ ```
+ variable "defaults" {
+ description = "Variaveis do projeto"
+ type = "map"
+ default {
+ image_name = "linux-ubuntu-16-64b-base"
+ az_name = "nova"
+ region = "SP"
+ tenant_name = "churrops"
+ key_pair = "chave"
+ flavor_name = "g1.micro"
+ security_group = "default"
+ network_name = "rede-interna"
+ }
+ }
+ ```
+
+ No terceiro bloco definimos o nosso servidor web. Na variável `user_data` apontamos para outro arquivo do exemplo, que vai ser executado via **cloud-init** no primeiro *boot* para configurar o servidor web.
+ ```
+ resource "openstack_compute_instance_v2" "web" {
+ name = "web"
+ image_name = "${var.defaults["image_name"]}"
+ flavor_name = "${var.defaults["flavor_name"]}"
+ availability_zone = "${var.defaults["az_name"]}"
+ key_pair = "${var.defaults["key_pair"]}"
+ security_groups = ["${var.defaults["security_group"]}"]
+ network {
+ name = "${var.defaults["network_name"]}"
+ }
+ user_data = "${file("bootstrapweb.sh")}"
+ lifecycle {
+ create_before_destroy = true
+ }
+ }
+ ```
+
+ Por último, os restantes blocos associam uma IP pública ao nosso servidor web:
+ ```
+ resource "openstack_networking_floatingip_v2" "ip-publica" {
+ pool = "rede-publica"
+ }
+
+ resource "openstack_compute_floatingip_associate_v2" "asoc-ip-publica" {
+ floating_ip = "${openstack_networking_floatingip_v2.ip-publica.address}"
+ instance_id = "${openstack_compute_instance_v2.web.id}"
+ }
+ ```
+
+ - **output.tf**
+Retorna o IP público da instância do nosso servidor web.
+
+ - **bootstrapweb.sh**
+
+Arquivo de *shell* que vai ser executado via **cloud-init** no primeiro *boot* para configurar o servidor web. Esta versão é para SOs de tipo Debian, mas pode ser fácilmente modificada para funcionar em CentOS e derivados.
+
+## Fazendo o *deploy*
+
+```
+$ terraform init
+```
+
+![](/assets/images/posts/2017-11-26-terraformando-openstack/01.png)
+
+```
+$ terraform plan
+```
+```
+$ terraform apply
+```
+![](/assets/images/posts/2017-11-26-terraformando-openstack/02.png)
+
+Se tudo der certo, veremos a nova VM com a sua IP pública correspondente:
+
+![](/assets/images/posts/2017-11-26-terraformando-openstack/03.png)
+
+E conseguimos acessar ao nosso *site*:
+
+![](/assets/images/posts/2017-11-26-terraformando-openstack/04.jpeg)
+
+
+## Outros comandos
+O resto dos comandos que foram explicados [no caso da AWS](https://churrops.io/2017/08/03/terraform-iac-terraformando-na-aws/), `terraform graph`, `terraform show` e `terraform destroy` funcionam de forma idêntica em OpenStack.
+
+## Conclusão
+Terraform se integra muito bem com vários provedores de nuvem, incluíndo OpenStack! Neste artigo vimos como é simples integrar OpenStack com a ferramenta, e como a mesma funciona de forma coerente entre várias nuvens.
+
+Nos [próximos artigos](/heat-introducao) de OpenStack falaremos sobre *heat*, o “terraform” nativo da plataforma, e veremos como é simples também gerenciar o ciclo de vida de *hardware* e *software* usando o orquestrador nativo da nuvem.
+
+Obrigado a todos e um abraço!
+
+
+
diff --git a/_posts/2017-12-20-heat-introducao.md b/_posts/2017-12-20-heat-introducao.md
new file mode 100644
index 0000000000..f6a4e098f9
--- /dev/null
+++ b/_posts/2017-12-20-heat-introducao.md
@@ -0,0 +1,209 @@
+---
+title: "[PT] Heat - Introdução"
+last_modified_at: 2017-10-28T16:00:58-04:00
+tags:
+ - iac
+ - openstack
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+> Originally published at [**Churrops on DevOps**](https://churrops.io/2017/12/20/heat-introducao/) on December 20, 2017.
+
+Olá pessoal, vamos começar uma série de artigos sobre Heat, o “terraform” nativo do OpenStack, ou para quem vem do mundo da AWS, o CloudFormation do OpenStack (inclusive parcialmente compatível). Neste primeiro artigo introdutório vamos aprender a criar as nossas próprias pilhas (ou *stacks*) e recriar a instância do servidor web que criamos no [post passado](/terraformando-openstack) usando o Terraform.
+
+O objetivo principal de Heat é criar um serviço para gerenciar todo o ciclo de vida de infra e aplicativos dentro do OpenStack. Ele implementa um mecanismo de orquestração com base em *templates* na forma de arquivos de texto (em formato `.yaml`) que podem ser tratados como código. O formato dos `templates` está evoluindo a cada versão do OpenStack, mas o Heat se esforça para fornecer compatibilidade com o formato do modelo AWS CloudFormation, de modo que muitos modelos CloudFormation existentes podem ser iniciados no OpenStack (inclusive permitindo, por exemplo, escalar do OpenStack para dentro da AWS). Para quem tiver interesse, existe também um esforço da comunidade para suportar templates TOSCA, chamado [Heat Translator](https://wiki.openstack.org/wiki/Heat-Translator).
+
+O Heat fornece uma API REST nativa do OpenStack e uma API de consulta compatível com o CloudFormation, além de interface gráfica via Horizon (o *dashboard* de OpenStack) e um cliente para a linha de comandos (antigamente `heat`, nas versões mais novas de OpenStack foi integrado no próprio comando `openstack`).
+
+Uma característica importante do Heat é que ele gerencia todo o ciclo de vida do aplicativo, e não só a criação. Quando precisar alterar a infra, simplesmente modifique o modelo e use o Heat para atualizar sua pilha existente. Heat sabe como fazer as mudanças necessárias. Ele irá excluir todos os recursos quando você terminar o aplicativo também (tipo `terraform destroy`).
+
+Os recursos de infra que podem ser descritos incluem: instâncias, IPs públicos, volumes, grupos de segurança, usuários, roteadores, etc. Os modelos também podem especificar as relações entre recursos (por exemplo, este volume está conectado a este servidor). Isso permite que o Heat invoque as APIs do OpenStack para criar toda sua infra virtual na ordem correta para iniciar completamente sua aplicação.
+
+O Heat também se integra com o Ceilometer, o módulo de telemetria do OpenStack, permitindo definir políticas de uso de *autoscaling* em função do uso dos recursos (chegaremos lá nos próximos artigos!).
+
+O Heat gerencia principalmente a infra virtual, mas os modelos se integram bem com ferramentas de gerenciamento de configuração de *software*, como Puppet e Chef, e a equipe do Heat está trabalhando para fornecer uma integração ainda melhor entre infraestrutura e *software*. Existem várias opções para configurar o software que é executado nos servidores do *stack*:
+ - Criar uma imagem personalizada (de preferência usando [**diskimager-builder**](https://git.openstack.org/cgit/openstack/diskimage-builder))
+ - Via [**cloud-init**](https://cloud-init.io/), um script que é executado durante o primeiro boot. Esta será a forma que usaremos ao longo dos artigos.
+ - Um recurso do heat, de tipo ***software deployment***.
+
+Sem mais, vamos criar o nosso primeiro *stack* e recriar o nosso servidor web.
+
+## Pré requisitos
+
+ - Uma conta em alguma nuvem OpenStack, não necessariamente `admin`
+ - Quota suficiente na nossa conta para instanciar os recursos solicitados
+
+No repositório [https://github.com/josecastillolema/churrops.git](https://github.com/josecastillolema/churrops.git) podem fazer *download* do arquivo heat.yaml, o *template* que usaremos durante este artigo.
+
+## Descrição do *template*
+As duas primeras linhas mostram a versão em uso do formato do template e uma descrição do conteúdo do mesmo:
+```yaml
+heat_template_version: 2016-04-08
+description: Servidor web para churrops!
+```
+
+A seguir, o primeiro bloco do *template*, `parameters`, define uma série de parâmetros que serão usados durante o *deployment* da infra (de forma análoga ao bloco `variable` no caso do Terraform). Podemos definir neste bloco imagem, *flavor*, redes, chaves para acessar aos nossos servidores, etc. Para cada parâmetro definido podemos adicionar uma descrição e um valor padrão.
+```yaml
+parameters:
+ flavor:
+ type: string
+ description: Flavor para o servidor web
+ constraints:
+ - custom_constraint: nova.flavor
+ default: g1.micro
+ image:
+ type: string
+ description: Imagem para o servidor web
+ constraints:
+ - custom_constraint: glance.image
+ default: linux-ubuntu-16-64b-base
+ private_network:
+ type: string
+ description: Rede interna
+ constraints:
+ - custom_constraint: neutron.network
+ default: net-int1
+ private_ip:
+ type: string
+ description: IP interna do servidor
+ default: 10.0.0.200
+ key_name:
+ type: string
+ description: A chave ssh para acessar a nossa vm
+ constraints:
+ - custom_constraint: nova.keypair
+ default: devel
+ public_network:
+ type: string
+ description: Rede publica
+ constraints:
+ - custom_constraint: neutron.network
+ texto:
+ type: string
+ description: Texto exibido no site
+ default: "Churrops rules"
+```
+No segundo bloco, `resources`, é a onde vamos definir os recursos da nossa infra. Neste caso vamos definir o nosso servidor web. Podem consultar uma lista de todos os recursos disponíveis [aqui](https://docs.openstack.org/heat/pike/template_guide/openstack.html). O servidor web é configurado via **cloud-init** no primeiro *boot*. Vejam que é possível passar parâmetros para os recursos, como neste caso o parâmetro `TEXTO`.
+```yaml
+resources:
+ sec_group:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ rules:
+ - remote_ip_prefix: 0.0.0.0/0
+ protocol: icmp
+ - remote_ip_prefix: 0.0.0.0/0
+ protocol: tcp
+ port_range_min: 80
+ port_range_max: 80
+ - remote_ip_prefix: 0.0.0.0/0
+ protocol: tcp
+ port_range_min: 22
+ port_range_max: 22
+
+ serverweb_port:
+ type: OS::Neutron::Port
+ properties:
+ network_id: { get_param: private_network }
+ security_groups: [{ get_resource: sec_group }]
+
+ serverweb:
+ type: OS::Nova::Server
+ properties:
+ image: { get_param: image }
+ flavor: { get_param: flavor }
+ networks:
+ - port: { get_resource: serverweb_port }
+ user_data_format: RAW
+ key_name: { get_param: key_name }
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/bash
+ sudo -i
+ apt-get update
+ apt-get install -y apache2
+ cat < /var/www/html/index.html
+ Churrops!!! o/
+ hostname: $(hostname)
+ parametro: TEXTO
+ EOF
+ params:
+ TEXTO: { get_param: texto }
+
+ floating_ip:
+ type: OS::Neutron::FloatingIP
+ properties:
+ floating_network: { get_param: public_network }
+ port_id: { get_resource: serverweb_port }
+```
+O terceiro e ultimo bloco, `outputs`, tem uma função análoga ao arquivo `output.tf` do Terraform. Ele define uma saída que será mostrada ao usuário ao terminar a criação da infra.
+```yaml
+outputs:
+ lburl:
+ description: URL do servidor web
+ value:
+ str_replace:
+ template: http://IP_ADDRESS
+ params:
+ IP_ADDRESS: { get_attr: [ floating_ip, floating_ip_address ] }
+ description: >
+ Esta URL e a URL "externa" que pode ser usada para acessar o servidor WEB.
+```
+
+## Execução do *template*
+
+### Via Horizon
+Primeiro, na aba `Orquestration - Stacks` criamos o nosso *stack* e setamos os parâmetros opcionais que foram definidos no template.
+![](/assets/images/posts/2017-12-20-heat-introducao/01.png)
+
+A continuação podemos ver a topologia diversos recursos sendo criados (os recursos em verde já estão disponíveis).
+![](/assets/images/posts/2017-12-20-heat-introducao/02.png)
+
+Um *overview* da nossa pilha, com o *output* que definimos no *template*.
+![](/assets/images/posts/2017-12-20-heat-introducao/03.png)
+
+Os recursos que estão sendo criados.
+![](/assets/images/posts/2017-12-20-heat-introducao/04.png)
+
+E por último todos os eventos relacionados com esses recursos (criação, atualização, modificação, deleção, etc.).
+![](/assets/images/posts/2017-12-20-heat-introducao/05.png)
+
+### Via CLI
+ - Criação:
+ ```
+ openstack stack create churrops-stack -t heat.yaml
+ openstack stack create churrops-stack -t heat.yaml
+ ```
+
+ - Para acompanhar a criação:
+ ```
+ watch openstack stack event list churrops-stack
+
+ ```
+
+### Via API REST
+Como falamos na introdução, o Heat fornece uma API REST nativa do OpenStack e uma API de consulta compatível com o CloudFormation. Neste caso usaremos a API REST nativa.
+
+![](/assets/images/posts/2017-12-20-heat-introducao/06.png)
+
+
+## Resultado da execução
+
+Independentemente do método escolhido (Horizon, CLI ou API REST), uma vez que o *stack* transicione ao estado `created` (não deveria demorar muito mais de 2 minutos) poderemos ver a infra instanciada.
+![](/assets/images/posts/2017-12-20-heat-introducao/07.png)
+
+Em alguns minutos (enquanto **cloud-init** instala e configura o servidor web Apache), poderemos acessar ao nosso servidor pela IP pública.
+![](/assets/images/posts/2017-12-20-heat-introducao/07.png)
+
+
+## Conclusão
+Neste artigo introduzimos o Heat, o orquestrador do OpenStack. Vimos como mantém todas as funcionalidades de outros IaCs, como Terraform, mas é integrado de uma forma mais nativa no OpenStack e podemos accesá-lo via *dashboard* , linha de comandos ou API REST (compatível com a AWS CloudFormation).
+
+Nos próximos artigos veremos como criar via Heat um balanceador de carga em alta disponibilidade usando `haproxy` e VRRP.
+
+Um abraço!
diff --git a/_posts/2018-02-17-hntd-11.md b/_posts/2018-02-17-hntd-11.md
new file mode 100644
index 0000000000..752a5cdf4a
--- /dev/null
+++ b/_posts/2018-02-17-hntd-11.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 11th edition"
+last_modified_at: 2018-02-17T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2018-02-17-hntd-11.jpeg)
diff --git a/_posts/2018-03-08-fiap-cld.md b/_posts/2018-03-08-fiap-cld.md
new file mode 100644
index 0000000000..84b71a7a5e
--- /dev/null
+++ b/_posts/2018-03-08-fiap-cld.md
@@ -0,0 +1,13 @@
+---
+title: "FIAP MBA em Cloud Computing (CLD)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/README.md %}
+
diff --git a/_posts/2018-03-14-hntd-12.md b/_posts/2018-03-14-hntd-12.md
new file mode 100644
index 0000000000..a951e628b8
--- /dev/null
+++ b/_posts/2018-03-14-hntd-12.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 12th edition"
+last_modified_at: 2018-03-14T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2018-03-14-hntd-12.jpeg)
diff --git a/_posts/2018-03-18-openstack1-keystone.md b/_posts/2018-03-18-openstack1-keystone.md
new file mode 100644
index 0000000000..cf2a393d03
--- /dev/null
+++ b/_posts/2018-03-18-openstack1-keystone.md
@@ -0,0 +1,24 @@
+---
+title: "OpenStack series I: Keystone - Identity Manager"
+last_modified_at: 2018-03-18T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab01-keystone.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-03-20-openstack2-glance.md b/_posts/2018-03-20-openstack2-glance.md
new file mode 100644
index 0000000000..0c41cb331d
--- /dev/null
+++ b/_posts/2018-03-20-openstack2-glance.md
@@ -0,0 +1,24 @@
+---
+title: "OpenStack series II: Glance - Image Service"
+last_modified_at: 2018-03-20T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab02-glance.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-03-22-openstack3-nova.md b/_posts/2018-03-22-openstack3-nova.md
new file mode 100644
index 0000000000..c50f7d6794
--- /dev/null
+++ b/_posts/2018-03-22-openstack3-nova.md
@@ -0,0 +1,24 @@
+---
+title: "OpenStack series III: Nova - Compute Service"
+last_modified_at: 2018-03-22T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab03-nova.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-03-24-hntd-13.md b/_posts/2018-03-24-hntd-13.md
new file mode 100644
index 0000000000..36205ecced
--- /dev/null
+++ b/_posts/2018-03-24-hntd-13.md
@@ -0,0 +1,13 @@
+---
+title: "HCNA-HNTD Training - 13th edition"
+last_modified_at: 2018-03-24T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2018-03-24-hntd-13.jpeg)
diff --git a/_posts/2018-04-01-redhat-academy.md b/_posts/2018-04-01-redhat-academy.md
new file mode 100644
index 0000000000..2056dd92be
--- /dev/null
+++ b/_posts/2018-04-01-redhat-academy.md
@@ -0,0 +1,44 @@
+---
+title: "Red Hat Academy"
+last_modified_at: 2020-06-06T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - fiap
+ - openshift
+ - openstack
+ - pt
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2018-04-01-redhat-academy/2018-04-01-redhat-academy.jpg)](https://www.redhat.com/pt-br/services/training/red-hat-academy)
+
+## Benefícios
+- Aproveite os descontos (**voucher 50% *off***) nos exames de certificação.
+- Escolha o estilo de aprendizado ideal para você dentre os nossos vários formatos de material didático.
+- Adquiria uma experiência valiosa com os ambientes de laboratório *hands-on*.
+- Conecte-se com outros estudantes e os instrutores da Red Hat que fazem parte da [**Red Hat Learning Community**](https://learn.redhat.com/).
+
+## Cursos
+### ![](/assets/images/posts/2018-04-01-redhat-academy/icon1.png) Administração de sistemas básica
+ * Red Hat System Administration I ([RH124](https://www.redhat.com/pt-br/services/training/rh124-red-hat-system-administration-i))
+ * Red Hat System Administration II ([RH134](https://www.redhat.com/pt-br/services/training/rh134-red-hat-system-administration-ii))
+ * Red Hat System Administration III ([RH254](https://www.redhat.com/pt-br/services/training/rh254-red-hat-system-administration-iii))
+
+### ![](/assets/images/posts/2018-04-01-redhat-academy/icon2.png) Desenvolvimento de middleware
+ * Red Hat Application Development I: Programming in Java EE ([AD183](https://www.redhat.com/pt-br/services/training/ad183-red-hat-application-development-i-programming-java-ee))
+ * Red Hat Application Development II: Implementing Microservice Architecture ([DO283](https://www.redhat.com/pt-br/services/training/do283-red-hat-application-development-ii-implementing-microservice-architectures))
+
+### ![](/assets/images/posts/2018-04-01-redhat-academy/icon3.png) Cloud Computing
+ * Red Hat OpenStack Administration I ([CL110](https://www.redhat.com/pt-br/services/training/cl110-red-hat-openstack-administration-i-core-operations-cloud-operators))
+ * Introduction to Containers, Kubernetes and Red Hat OpenShift ([DO180](https://www.redhat.com/pt-br/services/training/do180-introduction-containers-kubernetes-red-hat-openshift))
+
+## ![](/assets/images/posts/2018-04-01-redhat-academy/icon4.png) Exames de certificação
+- Red Hat Certified System Administrator ([EX200](https://www.redhat.com/pt-br/services/training/ex200-red-hat-certified-system-administrator-rhcsa-exam))
+- Red Hat Certified Engineer ([EX300](https://www.redhat.com/pt-br/services/training/ex300-red-hat-certified-engineer-rhce-exam))
+- Red Hat Certified Enterprise Application Developer ([EX183](https://www.redhat.com/pt-br/services/training/ex183-red-hat-certified-enterprise-application-developer-exam))
+- Red Hat Certified Enterprise Microservices Developer ([EX283](https://www.redhat.com/pt-br/services/training/ex283-red-hat-certified-enterprise-microservices-developer-exam))
+- Preliminary Exam in Containers, Kubernetes, and OpenShift ([PE180](https://www.redhat.com/pt-br/services/training/pe180-preliminary-exam-containers-kubernetes-openshift))
+- Preliminary Exam in System Administration ([PE124](https://www.redhat.com/pt-br/services/training/pe124-preliminary-exam-red-hat-system-administration-I))
\ No newline at end of file
diff --git a/_posts/2018-04-25-openstack4-neutron.md b/_posts/2018-04-25-openstack4-neutron.md
new file mode 100644
index 0000000000..7bbbb0ea81
--- /dev/null
+++ b/_posts/2018-04-25-openstack4-neutron.md
@@ -0,0 +1,26 @@
+---
+title: "OpenStack series IV: Neutron - Network Service"
+last_modified_at: 2018-04-25T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - networks
+ - openstack
+ - pt
+ - redhat
+ - sdn
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab04-neutron.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-04-27-openstack5-cinder.md b/_posts/2018-04-27-openstack5-cinder.md
new file mode 100644
index 0000000000..07eb76368a
--- /dev/null
+++ b/_posts/2018-04-27-openstack5-cinder.md
@@ -0,0 +1,25 @@
+---
+title: "OpenStack series V: Cinder - Block Storage Service"
+last_modified_at: 2018-04-27T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+ - redhat
+ - sds
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab05-cinder.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-04-29-openstack6-swift.md b/_posts/2018-04-29-openstack6-swift.md
new file mode 100644
index 0000000000..2dc1ce31c2
--- /dev/null
+++ b/_posts/2018-04-29-openstack6-swift.md
@@ -0,0 +1,25 @@
+---
+title: "OpenStack series VI: Swift - Object Storage Service"
+last_modified_at: 2018-04-29T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - openstack
+ - pt
+ - redhat
+ - sds
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab06-swift.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-05-02-openstack7-heat.md b/_posts/2018-05-02-openstack7-heat.md
new file mode 100644
index 0000000000..3608b8679e
--- /dev/null
+++ b/_posts/2018-05-02-openstack7-heat.md
@@ -0,0 +1,25 @@
+---
+title: "OpenStack series VII: Heat - Orchestration Service"
+last_modified_at: 2018-05-02T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openstack
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab07-heat.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-05-04-openstack8-terraform.md b/_posts/2018-05-04-openstack8-terraform.md
new file mode 100644
index 0000000000..4f66aeaaaa
--- /dev/null
+++ b/_posts/2018-05-04-openstack8-terraform.md
@@ -0,0 +1,26 @@
+---
+title: "OpenStack series VIII: Terraform"
+last_modified_at: 2018-05-04T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openstack
+ - pt
+ - redhat
+ - series
+ - terraform
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#openstack) sobre OpenStack.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/openstack/lab08-terraform.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2018-07-28-openstackday.md b/_posts/2018-07-28-openstackday.md
new file mode 100644
index 0000000000..d1f6fe08f2
--- /dev/null
+++ b/_posts/2018-07-28-openstackday.md
@@ -0,0 +1,19 @@
+---
+title: "OpenStack Day SP 2018"
+last_modified_at: 2018-07-28T16:00:58-04:00
+tags:
+ - events
+ - openstack
+ - pt
+ - youtube
+toc: false
+---
+
+IPv6 no OpenStack
+
+[![](/assets/images/posts/2018-07-28-openstackday.jpeg)](https://openstackbr.com.br/)
+
+
+
+![YouTube Video Views](https://img.shields.io/youtube/views/z-hQnrt2_88?style=social)
+![YouTube Video Likes](https://img.shields.io/youtube/likes/z-hQnrt2_88?style=social)
\ No newline at end of file
diff --git a/_posts/2018-08-20-mandic-webinar.md b/_posts/2018-08-20-mandic-webinar.md
new file mode 100644
index 0000000000..942ee678d4
--- /dev/null
+++ b/_posts/2018-08-20-mandic-webinar.md
@@ -0,0 +1,12 @@
+---
+title: "Webinar Mandic Cloud - IPv6 no OpenStack"
+last_modified_at: 2018-03-14T16:00:58-04:00
+tags:
+ - events
+ - pt
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2018-08-20-mandic-webinar.jpeg)](https://labs.mandic.com.br/webinars/ipv6-openstack)
+
diff --git a/_posts/2018-09-11-ict-competition.md b/_posts/2018-09-11-ict-competition.md
new file mode 100644
index 0000000000..f8c7dcf2a8
--- /dev/null
+++ b/_posts/2018-09-11-ict-competition.md
@@ -0,0 +1,39 @@
+---
+title: "Huawei ICT Competition Brazil 2018-2019"
+last_modified_at: 2018-09-11T16:00:58-04:00
+tags:
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: true
+toc_sticky: true
+---
+
+![](/assets/images/posts/2018-09-11-ict-competition.jpg)
+
+A Huawei University promove pela primeira vez no Brasil o ICT Competition, um campeonato mundial promovido anualmente pela companhia para estudantes de TIC – Tecnologia da Informação e Comunicação . Com a participação de mais de 50 países, o programa deve receber mais de 80 mil alunos de cerca de mil instituições de ensino em sua primeira fase, que acontece por meio de uma prova online.
+
+Os estudantes aprovados na primeira fase (top 50) competirão em uma seletiva nacional, que determinará quem serão os representantes do Brasil na fase regional no Mexico (top 6), e posteriarmente na fase final, que acontecerá na China em 2019. Os finalistas também poderão conhecer os laboratórios de Pesquisa e Desenvolvimento da sede global da companhia, além de receber certificados de acordo com sua colocação e concorrer a smartphones Huawei.
+
+
+## Tracks
+
+### Network
+- Routing & Switching
+- WLAN
+- Security
+
+### Cloud
+- Cloud
+- Big Data
+- Storage
+
+## Etapas
+
+- A primeira é o self-learning a onde serão disponibilizados diversos materiais/labs/treinamentos para se preparar para os testes;
+- A segunda etapa é um teste online que irá classificar os melhores candidatos para a próxima fase (top 50);
+- A terceira etapa é a semi-final, na qual serão escolhidos os vencedores de cada track (top 6). Os vencedores da semi-final de cada país participarão da final regional na Cidade do México, México.
+
+Os participantes do top 50 ganham um voucher de 200$ para realizar as provas HCIA de qualquer track da Huawei, e os vencedores poderão participar da etapa mundial em Shenzhen, China.
+
diff --git a/_posts/2018-12-16-etsi2tosca.md b/_posts/2018-12-16-etsi2tosca.md
new file mode 100644
index 0000000000..77126157ed
--- /dev/null
+++ b/_posts/2018-12-16-etsi2tosca.md
@@ -0,0 +1,18 @@
+---
+title: "Converting ETSI NFV templates into TOSCA profile"
+last_modified_at: 2018-12-16T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - nfv
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/etsi2tosca/master/README.md %}
+
+
diff --git a/_posts/2019-01-23-fiap-aso.md b/_posts/2019-01-23-fiap-aso.md
new file mode 100644
index 0000000000..16c30350ce
--- /dev/null
+++ b/_posts/2019-01-23-fiap-aso.md
@@ -0,0 +1,15 @@
+---
+title: "FIAP MBA em Arquitetura de Soluções (ASO)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - openshift
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/aso/README.md %}
+
diff --git a/_posts/2019-01-25-containers1-docker.md b/_posts/2019-01-25-containers1-docker.md
new file mode 100644
index 0000000000..90857342ce
--- /dev/null
+++ b/_posts/2019-01-25-containers1-docker.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series I: Docker"
+last_modified_at: 2019-01-25T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab01-docker.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-01-27-containers2-docker2.md b/_posts/2019-01-27-containers2-docker2.md
new file mode 100644
index 0000000000..28ef9180c9
--- /dev/null
+++ b/_posts/2019-01-27-containers2-docker2.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series II: Docker - continuação"
+last_modified_at: 2019-01-27T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab02-docker-2.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-01-29-containers3-docker-compose.md b/_posts/2019-01-29-containers3-docker-compose.md
new file mode 100644
index 0000000000..ef34845c0e
--- /dev/null
+++ b/_posts/2019-01-29-containers3-docker-compose.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series III: Docker Compose"
+last_modified_at: 2019-01-29T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab03-docker-compose.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-02-02-containers4-docker-swarm.md b/_posts/2019-02-02-containers4-docker-swarm.md
new file mode 100644
index 0000000000..841696cc4c
--- /dev/null
+++ b/_posts/2019-02-02-containers4-docker-swarm.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series IV: Docker Swarm"
+last_modified_at: 2019-02-02T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab04-docker-swarm.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-02-04-containers5-k8s-install.md b/_posts/2019-02-04-containers5-k8s-install.md
new file mode 100644
index 0000000000..81efe48348
--- /dev/null
+++ b/_posts/2019-02-04-containers5-k8s-install.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series V: Kubernetes - Instalação"
+last_modified_at: 2019-02-04T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab05-kubernetes-install.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-02-06-containers6-kompose.md b/_posts/2019-02-06-containers6-kompose.md
new file mode 100644
index 0000000000..ed0b88a980
--- /dev/null
+++ b/_posts/2019-02-06-containers6-kompose.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series VI: Kompose"
+last_modified_at: 2019-02-06T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab06-kompose.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-02-08-containers7-k8s-use.md b/_posts/2019-02-08-containers7-k8s-use.md
new file mode 100644
index 0000000000..b265c7cea6
--- /dev/null
+++ b/_posts/2019-02-08-containers7-k8s-use.md
@@ -0,0 +1,25 @@
+---
+title: "Containers series VII: Kubernetes - Uso"
+last_modified_at: 2019-02-08T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iac
+ - openshift
+ - pt
+ - redhat
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#containers) sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/microservices/lab07-kubernetes-use.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-03-10-locust-ccnclient.md b/_posts/2019-03-10-locust-ccnclient.md
new file mode 100644
index 0000000000..3fd8fa4f01
--- /dev/null
+++ b/_posts/2019-03-10-locust-ccnclient.md
@@ -0,0 +1,17 @@
+---
+title: "Locust CCN client"
+last_modified_at: 2019-03-10T16:00:58-04:00
+tags:
+ - ccn
+ - en
+ - networks
+toc: false
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/locust-ccnclient/master/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-03-21-fiap-net.md b/_posts/2019-03-21-fiap-net.md
new file mode 100644
index 0000000000..663f81fb01
--- /dev/null
+++ b/_posts/2019-03-21-fiap-net.md
@@ -0,0 +1,13 @@
+---
+title: "FIAP MBA em Arquitetura e Desenvolvimento na Plataforma .NET (NET)"
+last_modified_at: 2019-03-21T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/README.md %}
+
diff --git a/_posts/2019-04-18-welcome-to-jekyll.md b/_posts/2019-04-18-welcome-to-jekyll.md
deleted file mode 100644
index 30fdbf3746..0000000000
--- a/_posts/2019-04-18-welcome-to-jekyll.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: "Welcome to Jekyll!"
-date: 2019-04-18T15:34:30-04:00
-categories:
- - blog
-tags:
- - Jekyll
- - update
----
-
-You'll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
-
-To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.
-
-Jekyll also offers powerful support for code snippets:
-
-```ruby
-def print_hi(name)
- puts "Hi, #{name}"
-end
-print_hi('Tom')
-#=> prints 'Hi, Tom' to STDOUT.
-```
-
-Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
-
-[jekyll-docs]: https://jekyllrb.com/docs/home
-[jekyll-gh]: https://github.com/jekyll/jekyll
-[jekyll-talk]: https://talk.jekyllrb.com/
diff --git a/_posts/2019-04-23-fiap-bdt.md b/_posts/2019-04-23-fiap-bdt.md
new file mode 100644
index 0000000000..f747c9a601
--- /dev/null
+++ b/_posts/2019-04-23-fiap-bdt.md
@@ -0,0 +1,15 @@
+---
+title: "FIAP MBA em Big Data (Data Science) (BDT)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - iot
+ - openshift
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/bdt/README.md %}
+
diff --git a/_posts/2019-04-25-zabbix-openstack.md b/_posts/2019-04-25-zabbix-openstack.md
new file mode 100644
index 0000000000..b4209e7051
--- /dev/null
+++ b/_posts/2019-04-25-zabbix-openstack.md
@@ -0,0 +1,20 @@
+---
+title: "Zabbix templates for OpenStack"
+last_modified_at: 2019-04-25T16:00:58-04:00
+tags:
+ - ansible
+ - monitoring
+ - openstack
+ - pt
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/zabbix-for-openstack/master/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2019-04-30-aws-educate.md b/_posts/2019-04-30-aws-educate.md
new file mode 100644
index 0000000000..de0407c7c9
--- /dev/null
+++ b/_posts/2019-04-30-aws-educate.md
@@ -0,0 +1,69 @@
+---
+title: "AWS Educate"
+last_modified_at: 2021-07-25T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: yes
+---
+
+[![](/assets/images/posts/2019-04-30-aws-educate/0.png)](https://aws.amazon.com/pt/education/awseducate/)
+
+
+## Recursos e benefícios
+- Acesso ao [**AWS Educate Student Portal**](https://aws.amazon.com/pt/education/awseducate/).
+- Accesso ao **console AWS com 50$ de créditos** e labs online.
+- [**Cloud Career Pathways**](https://aws.amazon.com/pt/education/awseducate/pathways-and-badges/): Explore trajetórias profissionais na nuvem para saber mais sobre as principais competências de nuvem nas carreiras de tecnologia mais procuradas. Desde Cientista de machine learning até Desenvolvedor de aplicativos, cada trajetória alinha-se a uma função específica e inclui mais de 25 horas de conteúdo autoguiado acompanhado de testes de conhecimento. Ganhe distintivos pelas trajetórias concluídas e compartilhe com potenciais empregadores no AWS Educate Job Board.
+- [**AWS Educate Badges**](https://aws.amazon.com/pt/education/awseducate/pathways-and-badges/): Desbloqueie um distintivo do AWS Educate em uma das áreas de interesse de maior crescimento do setor, incluindo Alexa, jogos e Internet das Coisas (IoT). Cada distintivo apresenta 10-15 horas de conteúdo individualizado para expandir seu conjunto de habilidades na nuvem.
+- [**Salas de aula do AWS Educate**](https://aws.amazon.com/pt/education/awseducate/classrooms/): Uma sala de aula virtual para os estudantes aprenderem sobre a nuvem em um ambiente prático. Cada sala de aula utiliza um conjunto distinto de serviços que são ideais para o aprendizado de vários tópicos sobre a nuvem, como Big Data ou machine learning.
+- **Desenvolvimento profissional**: Expanda suas competências de nuvem por meio de cursos do AWS Educate ou de programas AWS Training and Certification. Outros recursos incluem vídeos instrutivos e laboratórios autoguiados. Descontos podem estar disponíveis para alguns treinamentos.
+- [**AWS Educate Job Board**](https://aws.amazon.com/pt/education/awseducate/aws-educate-job-board/): Acesse milhares de empregos e estágios na nuvem da Amazon e outras empresas no mundo inteiro no AWS Educate Job Board. Personalize seu portfólio online com credenciais de trajetórias e ganhe distintivos para atrair recrutadores ou empresas em busca de alguém.
+
+
+## [Cloud Career Pathways](https://aws.amazon.com/pt/education/awseducate/pathways-and-badges/)
+- Introdução à computação na nuvem
+- Machine learning
+- Cientista de dados
+- Desenvolvedor de aplicativos
+- Desenvolvimento na Web
+- Engenheiro de software
+- Especialista em segurança cibernética
+- Engenheiro de DevOps
+- Arquiteto de soluções
+- Associado de suporte à nuvem
+- Engenheiro de suporte à nuvem
+- Integração de dados
+
+## [AWS Educate Badges](https://aws.amazon.com/pt/education/awseducate/pathways-and-badges/)
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge0.png) AWS DeepLens
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge1.png) Jogos
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge2.png) AWS DeepRacer
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge3.png) Datapalooza
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge4.png) Amazon Sumerian
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge5.png) AWS RoboMaker
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge6.png) Internet das Coisas
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge7.png) Alexa
+- ![](/assets/images/posts/2019-04-30-aws-educate/badge8.png) Startups da AWS
+
+
+## Cadastro na plataforma
+
+1. Acessar [www.awseducate.com](https://www.awseducate.com/)
+
+2. Seleccionar **Join AWS Educate**
+
+3. Selecionar o rol de estudante
+
+4. Preencher o formulario, usando o mail da FIAP (RMxyzw@fiap.com.br) e **colocando uma data de término do curso/graduação no futuro**.
+
+5. Aguardar o mail de confirmação
+
+## Cadastro na plataforma via convite do instrutor
+
+Seguir os passos descritos em [AWS Educate: Cadastro na plataforma](/aws-educate-login)
+
+![](/assets/images/posts/2019-04-30-aws-educate/cert2019.jpg)
+![](/assets/images/posts/2019-04-30-aws-educate/cert2020.jpg)
\ No newline at end of file
diff --git a/_posts/2019-05-10-sbrc19.md b/_posts/2019-05-10-sbrc19.md
new file mode 100644
index 0000000000..fd137b8ae5
--- /dev/null
+++ b/_posts/2019-05-10-sbrc19.md
@@ -0,0 +1,64 @@
+---
+title: "SBRC/WPEIF 2019"
+last_modified_at: 2019-05-10T16:00:58-04:00
+tags:
+ - ccn
+ - en
+ - events
+ - networks
+ - nfv
+ - research
+ - papers
+toc: true
+toc_sticky: true
+---
+
+**XXXVII Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos / Workshop de Pesquisa Experimental da Internet do Futuro**
+
+## [Proceedings](http://sbrc2019.sbc.org.br/wp-content/uploads/2019/05/wpeif2019.pdf)
+
+[**Network Function Virtualization in Content-Centric Networks**](https://sol.sbc.org.br/index.php/wpeif/article/view/7696)
+
+[![DOI:10.5753/wpeif.2019.7696](https://zenodo.org/badge/DOI/10.5753/wpeif.2019.7696.svg)](https://doi.org/10.5753/wpeif.2019.7696)
+
+ - José Castillo Lema, *Universidade de São Paulo*, Brazil
+ - Augusto J. Venancio Neto, *Federal University of Rio Grande do Norte*, Brazil
+ - Flavio de Oliveira Silva, *Federal University of Uberlândia*, Brazil
+ - Sergio Kofuji, *Universidade de São Paulo*, Brazil
+
+## Cite this
+
+### ABNT
+CASTILLO-LEMA, José ; NETO, Augusto José Venâncio; SILVA, Flavio de Oliveira; KOFUJI, Sergio Takeo. **Network Function Virtualization in Content-Centric Networks**. In: WORKSHOP DE PESQUISA EXPERIMENTAL DA INTERNET DO FUTURO (WPEIF), 10. , 2019, Gramado. *Anais do X Workshop de Pesquisa Experimental da Internet do Futuro. Porto Alegre: Sociedade Brasileira de Computação*, sep. 2019 . p. 31-37. ISSN 2595-2692.
+
+### APA
+Castillo-Lema, J., Neto, A., Silva, F., & Kofuji, S. (2019). **Network Function Virtualization in Content-Centric Networks**. In *Anais do X Workshop de Pesquisa Experimental da Internet do Futuro*, (pp. 31-37). Porto Alegre: SBC.
+
+### BibTeX
+```
+@inproceedings {wpeif,
+ author = {José Castillo-Lema and Augusto Neto and Flavio Silva and Sergio Kofuji},
+ title = {Network Function Virtualization in Content-Centric Networks},
+ booktitle = {Anais do X Workshop de Pesquisa Experimental da Internet do Futuro},
+ location = {Gramado},
+ year = {2019},
+ keywords = {},
+ issn = {2595-2692},
+ pages = {31--37},
+ publisher = {SBC},
+ address = {Porto Alegre, RS, Brasil},
+ url = {https://sol.sbc.org.br/index.php/wpeif/article/view/7696}}
+```
+
+### MLA
+Castillo-Lema, José, Augusto José Venâncio Neto, Flavio de Oliveira Silva, and Sergio Takeo Kofuji. "**Network Function Virtualization in Content-Centric Networks**". *Anais do X Workshop de Pesquisa Experimental da Internet do Futuro*, Gramado, 2019. SBC, 2019, pp.31-37.
+
+### RefWorks
+```
+@article { {wpeif} {},
+ author = { Castillo-Lema, J., Neto, A., Silva, F., Kofuji, S.},
+ title = {Network Function Virtualization in Content-Centric Networks},
+ journal = {Anais do Workshop de Pesquisa Experimental da Internet do Futuro (WPEIF)},
+ year = {2019},
+ url = {https://sol.sbc.org.br/index.php/wpeif/article/view/7696}}
+```
\ No newline at end of file
diff --git a/_posts/2019-05-21-sumare.md b/_posts/2019-05-21-sumare.md
new file mode 100644
index 0000000000..653895349f
--- /dev/null
+++ b/_posts/2019-05-21-sumare.md
@@ -0,0 +1,14 @@
+---
+title: "11a Semana de TI da Sumaré"
+last_modified_at: 2019-05-21T16:00:58-04:00
+tags:
+ - events
+ - pt
+toc: false
+---
+
+## [Agenda](https://blog.sumare.edu.br/blog/index.php/2019/05/17/11a-semana-de-t-i-sumare/)
+
+[![](/assets/images/posts/2019-05-21-sumare/01.jpg)](https://blog.sumare.edu.br/blog/index.php/2019/05/17/11a-semana-de-t-i-sumare/)
+
+![](/assets/images/posts/2019-05-21-sumare/02.jpeg)
diff --git a/_posts/2019-05-23-fiap-blc.md b/_posts/2019-05-23-fiap-blc.md
new file mode 100644
index 0000000000..782d445bad
--- /dev/null
+++ b/_posts/2019-05-23-fiap-blc.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Blockchain Development & Technologies (BLC)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/blc/README.md %}
+
diff --git a/_posts/2019-06-28-netsoft19.md b/_posts/2019-06-28-netsoft19.md
new file mode 100644
index 0000000000..c4544dd509
--- /dev/null
+++ b/_posts/2019-06-28-netsoft19.md
@@ -0,0 +1,44 @@
+---
+title: "IEEE NetSoft/S4SI 2019"
+last_modified_at: 2019-06-28T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - papers
+ - research
+ - sdn
+toc: yes
+toc_sticky: true
+---
+
+**IEEE Conference on Network Softwarization / 2nd Workshop on Advances in Slicing for Softwarized Infrastructures**
+
+## [Agenda](https://intrig.dca.fee.unicamp.br/s4si2019/agenda.html)
+
+[**Mininet-NFV: Evolving Mininet with OASIS TOSCA NVF profiles Towards Reproducible NFV Prototyping**](https://ieeexplore.ieee.org/document/8806686)
+
+[![DOI:10.1109/NETSOFT.2019.8806686](https://zenodo.org/badge/DOI/10.1109/NETSOFT.2019.8806686.svg)](https://doi.org/10.1109/NETSOFT.2019.8806686)
+
+ - José Castillo Lema, *Universidade de São Paulo*, Brazil
+ - Augusto J. Venancio Neto, *Federal University of Rio Grande do Norte*, Brazil
+ - Flavio de Oliveira Silva, *Federal University of Uberlândia*, Brazil
+ - Sergio Kofuji, *Universidade de São Paulo*, Brazil
+
+## Cite this
+
+### Plain text
+J. Castillo-Lema, A. Venâncio Neto, F. de Oliveira and S. Takeo Kofuji, "**Mininet-NFV: Evolving Mininet with OASIS TOSCA NVF profiles Towards Reproducible NFV Prototyping**", *2019 IEEE Conference on Network Softwarization (NetSoft)*, Paris, France, 2019, pp. 506-512, doi: 10.1109/NETSOFT.2019.8806686.
+
+### BibTeX
+```
+@INPROCEEDINGS{8806686,
+ author={J. {Castillo-Lema} and A. {Venâncio Neto} and F. {de Oliveira} and S. {Takeo Kofuji}},
+ booktitle={2019 IEEE Conference on Network Softwarization (NetSoft)},
+ title={Mininet-NFV: Evolving Mininet with OASIS TOSCA NVF profiles Towards Reproducible NFV Prototyping},
+ year={2019},
+ volume={},
+ number={},
+ pages={506-512}}
+```
diff --git a/_posts/2019-08-03-fiap-aojo.md b/_posts/2019-08-03-fiap-aojo.md
new file mode 100644
index 0000000000..adb76a6f50
--- /dev/null
+++ b/_posts/2019-08-03-fiap-aojo.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Engenharia de Software - Online (AOJO)"
+last_modified_at: 2019-08-03T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/aojo/README.md %}
+
diff --git a/_posts/2019-08-05-thesis.md b/_posts/2019-08-05-thesis.md
new file mode 100644
index 0000000000..57b93926aa
--- /dev/null
+++ b/_posts/2019-08-05-thesis.md
@@ -0,0 +1,45 @@
+---
+title: "A generic NFV MANO for Content-Centric Networks"
+last_modified_at: 2019-08-05T16:00:58-04:00
+tags:
+ - ccn
+ - en
+ - networks
+ - nfv
+ - papers
+ - research
+toc: true
+toc_sticky: true
+---
+
+[**Biblioteca Digital de Teses e Dissertações da USP**](https://teses.usp.br/teses/disponiveis/3/3142/tde-23102019-120559)
+
+[![DOI:10.11606/T.3.2019.tde-23102019-120559](https://zenodo.org/badge/DOI/10.11606/T.3.2019.tde-23102019-120559.svg)](https://doi.org/10.11606/T.3.2019.tde-23102019-120559)
+
+## Cite this
+
+### ISO
+
+CASTILLO LEMA, José. **A generic network function virtualization manager and orchestrator for content-centric networks** [doi:10.11606/T.3.2019.tde-23102019-120559]. São Paulo : Escola Politécnica, Universidade de São Paulo, 2019. Tese de Doutorado em Sistemas Eletrônicos. [acesso 2020-06-01].
+
+
+### ABNT
+
+CASTILLO LEMA, José. **A generic network function virtualization manager and orchestrator for content-centric networks**. 2019. Tese (Doutorado em Sistemas Eletrônicos) - Escola Politécnica, Universidade de São Paulo, São Paulo, 2019. doi:10.11606/T.3.2019.tde-23102019-120559. Acesso em: 2020-06-01.
+
+
+### APA
+
+Castillo Lema, J. (2019). **A generic network function virtualization manager and orchestrator for content-centric networks**. Tese de Doutorado, Escola Politécnica, Universidade de São Paulo, São Paulo. doi:10.11606/T.3.2019.tde-23102019-120559. Recuperado em 2020-06-01, de www.teses.usp.br
+
+
+### Vancouver
+
+Castillo Lema, José. **A generic network function virtualization manager and orchestrator for content-centric networks** [tese]. São Paulo: Escola Politécnica; 2019 [citado 2020-06-01]. doi:10.11606/T.3.2019.tde-23102019-120559.
+
+## Publications
+
+- [J. Castillo-Lema, A. Venâncio Neto, F. de Oliveira and S. Takeo Kofuji, "**Mininet-NFV: Evolving Mininet with OASIS TOSCA NVF profiles Towards Reproducible NFV Prototyping**", *2019 IEEE Conference on Network Softwarization (NetSoft)*, Paris, France, 2019, pp. 506-512, doi: 10.1109/NETSOFT.2019.8806686.](/netsoft19) [![DOI:10.1109/NETSOFT.2019.8806686](https://zenodo.org/badge/DOI/10.1109/NETSOFT.2019.8806686.svg)](https://doi.org/10.1109/NETSOFT.2019.8806686)
+- [CASTILLO-LEMA, José ; NETO, Augusto José Venâncio; SILVA, Flavio de Oliveira; KOFUJI, Sergio Takeo. **Network Function Virtualization in Content-Centric Networks**. In: WORKSHOP DE PESQUISA EXPERIMENTAL DA INTERNET DO FUTURO (WPEIF), 10. , 2019, Gramado. *Anais do X Workshop de Pesquisa Experimental da Internet do Futuro. Porto Alegre: Sociedade Brasileira de Computação*, sep. 2019 . p. 31-37. ISSN 2595-2692.](/sbrc19) [![DOI:10.5753/wpeif.2019.7696](https://zenodo.org/badge/DOI/10.5753/wpeif.2019.7696.svg)](https://doi.org/10.5753/wpeif.2019.7696)
+
+
diff --git a/_posts/2019-08-06-kuryr.md b/_posts/2019-08-06-kuryr.md
new file mode 100644
index 0000000000..d9b138c52b
--- /dev/null
+++ b/_posts/2019-08-06-kuryr.md
@@ -0,0 +1,48 @@
+---
+title: "Kuryr on OpenStack"
+last_modified_at: 2019-08-06T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - openstack
+ - redhat
+toc: false
+---
+
+![](/assets/images/posts/2019-08-06-kuryr.png)
+
+[Kuryr](https://github.com/openstack/kuryr) is Kubernetes Container Network Interface (CNI) for OpenStack, supported from OpenStack side from Red Hat OpenStack 13, for OpenShift 3.11 and for OpenShift 4.2 and above.
+
+If you are interested on checking the performance impact, check the post [Accelerate your OpenShift Network Performance on OpenStack with Kuryr](https://www.openshift.com/blog/accelerate-your-openshift-network-performance-on-openstack-with-kuryr) from the [official openshift blog](https://www.openshift.com/blog).
+
+Kuryr code lives in Kubernetes/OpenShift space, however there are some prerequisites from OpenStack side in order to properly work:
+ - [Octavia](https://wiki.openstack.org/wiki/Octavia), OpenStack`s load balancer as a service
+ - Open vSwitch as Neutron firewall driver
+ - The trunk extension to be enabled at Neutron
+
+ The following TripleO/Director Heat template satisfies these prerequisites:
+ ```
+ resource_registry:
+ OS::TripleO::Services::OctaviaApi: /usr/share/openstack-tripleo-heat-templates/docker/services/octavia-api.yaml
+ OS::TripleO::Services::OctaviaHousekeeping: /usr/share/openstack-tripleo-heat-templates/docker/services/octavia-housekeeping.yaml
+ OS::TripleO::Services::OctaviaHealthManager: /usr/share/openstack-tripleo-heat-templates/docker/services/octavia-health-manager.yaml
+ OS::TripleO::Services::OctaviaWorker: /usr/share/openstack-tripleo-heat-templates/docker/services/octavia-worker.yaml
+ OS::TripleO::Services::OctaviaDeploymentConfig: /usr/share/openstack-tripleo-heat-templates/docker/services/octavia/octavia-deployment-config.yaml
+
+parameter_defaults:
+ # This flag enables internal generation of certificates for communication
+ # with amphorae. Use OctaviaCaCert, OctaviaCaKey, OctaviaCaKeyPassphrase
+ # and OctaviaClient cert to configure secure production environments.
+ OctaviaGenerateCerts: true
+
+ # As an Octavia Load Balancer is used to access the OpenShift API, there is a need to increase their listeners
+ # default timeouts for the connections. The default timeout is 50 seconds. Increase the timeout to 20 minutes
+ OctaviaTimeoutClientData: 1200000
+ OctaviaTimeoutMemberData: 1200000
+
+ NeutronOVSFirewallDriver: 'openvswitch'
+
+ # In RHOSP 13, the trunk extension is enabled by default at Neutron, if that is not the case, make sure
+ # to add trunk the comma separated list of service plugin entrypoints defined in NeutronServicePlugins
+ ```
\ No newline at end of file
diff --git a/_posts/2019-09-03-fiap-ia.md b/_posts/2019-09-03-fiap-ia.md
new file mode 100644
index 0000000000..6f82fe4af1
--- /dev/null
+++ b/_posts/2019-09-03-fiap-ia.md
@@ -0,0 +1,13 @@
+---
+title: "FIAP MBA em Artificial Intelligence & Machine Learning (IA)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - iot
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/ia/README.md %}
+
diff --git a/_posts/2019-10-10-fiapon-live-1aso.md b/_posts/2019-10-10-fiapon-live-1aso.md
new file mode 100644
index 0000000000..98873badbc
--- /dev/null
+++ b/_posts/2019-10-10-fiapon-live-1aso.md
@@ -0,0 +1,16 @@
+---
+title: "FIAP MBA ON Live - 1ASO - Fase 3 - Cloud"
+last_modified_at: 2019-10-10T16:00:58-04:00
+tags:
+ - events
+ - fiap
+ - pt
+ - webinar
+toc: false
+---
+
+
+
+![YouTube Video Views](https://img.shields.io/youtube/views/iYChd1SVEzc?style=social)
+![YouTube Video Likes](https://img.shields.io/youtube/likes/iYChd1SVEzc?style=social)
+![YouTube Video Votes](https://img.shields.io/youtube/likes/iYChd1SVEzc?style=social&withDislikes)
\ No newline at end of file
diff --git a/_posts/2020-01-06-computehcisriov-role.md b/_posts/2020-01-06-computehcisriov-role.md
new file mode 100644
index 0000000000..52369f6717
--- /dev/null
+++ b/_posts/2020-01-06-computehcisriov-role.md
@@ -0,0 +1,85 @@
+---
+title: "ComputeHCISriov role for Director/TripleO"
+last_modified_at: 2020-01-06T16:00:58-04:00
+tags:
+ - en
+ - nfv
+ - openstack
+ - redhat
+toc: false
+---
+
+
+Hyper-converged SR-IOV role for compute nodes.
+
+Change `700887` proposed and merged upstream: [https://review.opendev.org/#/c/700887/](https://review.opendev.org/#/c/700887/)
+
+```
+###############################################################################
+# Role: ComputeHCISriov #
+###############################################################################
+- name: ComputeHCISriov
+ description: |
+ Compute Node with SR-IOV role hosting Ceph OSD too
+ networks:
+ - InternalApi
+ - Tenant
+ - Storage
+ - StorageMgmt
+ - Management
+ default_route_networks: ['Management']
+ disable_upgrade_deployment: True
+ RoleParametersDefault:
+ TunedProfileName: "cpu-partitioning"
+ # CephOSD present so serial has to be 1
+ update_serial: 1
+ ServicesDefault:
+ - OS::TripleO::Services::Aide
+ - OS::TripleO::Services::AuditD
+ - OS::TripleO::Services::BootParams
+ - OS::TripleO::Services::CACerts
+ - OS::TripleO::Services::CephClient
+ - OS::TripleO::Services::CephExternal
+ - OS::TripleO::Services::CephOSD
+ - OS::TripleO::Services::CertmongerUser
+ - OS::TripleO::Services::Collectd
+ - OS::TripleO::Services::ComputeCeilometerAgent
+ - OS::TripleO::Services::ComputeNeutronCorePlugin
+ - OS::TripleO::Services::ComputeNeutronL3Agent
+ - OS::TripleO::Services::ComputeNeutronMetadataAgent
+ - OS::TripleO::Services::ComputeNeutronOvsAgent
+ - OS::TripleO::Services::Docker
+ - OS::TripleO::Services::Fluentd
+ - OS::TripleO::Services::IpaClient
+ - OS::TripleO::Services::Ipsec
+ - OS::TripleO::Services::Iscsid
+ - OS::TripleO::Services::Kernel
+ - OS::TripleO::Services::LoginDefs
+ - OS::TripleO::Services::MetricsQdr
+ - OS::TripleO::Services::MySQLClient
+ - OS::TripleO::Services::NeutronBgpVpnBagpipe
+ - OS::TripleO::Services::NeutronSriovAgent
+ - OS::TripleO::Services::NeutronSriovHostConfig
+ - OS::TripleO::Services::NeutronVppAgent
+ - OS::TripleO::Services::NovaCompute
+ - OS::TripleO::Services::NovaLibvirt
+ - OS::TripleO::Services::NovaLibvirtGuests
+ - OS::TripleO::Services::NovaMigrationTarget
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::ContainersLogrotateCrond
+ - OS::TripleO::Services::OpenDaylightOvs
+ - OS::TripleO::Services::Rhsm
+ - OS::TripleO::Services::RsyslogSidecar
+ - OS::TripleO::Services::Securetty
+ - OS::TripleO::Services::SensuClient
+ - OS::TripleO::Services::SkydiveAgent
+ - OS::TripleO::Services::Snmp
+ - OS::TripleO::Services::Sshd
+ - OS::TripleO::Services::Timezone
+ - OS::TripleO::Services::TripleoFirewall
+ - OS::TripleO::Services::TripleoPackages
+ - OS::TripleO::Services::Vpp
+ - OS::TripleO::Services::OVNController
+ - OS::TripleO::Services::OVNMetadataAgent
+ - OS::TripleO::Services::Ptp
+```
\ No newline at end of file
diff --git a/_posts/2020-04-04-onf.md b/_posts/2020-04-04-onf.md
new file mode 100644
index 0000000000..5c827ef2c0
--- /dev/null
+++ b/_posts/2020-04-04-onf.md
@@ -0,0 +1,55 @@
+---
+title: "Open Networking Foundation"
+last_modified_at: 2021-04-17T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - nfv
+ - onf
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+
+## Open Networking Foundation
+![](/assets/images/posts/2020-04-30-onf/0.jpg)
+
+The [Open Networking Foundation (ONF)](https://opennetworking.org/) is a non-profit operator led consortium driving transformation of network infrastructure and carrier business models.
+
+We are an open, collaborative, community of communities. The ONF serves as the umbrella for a number of projects building solutions by leveraging network disaggregation, white box economics, open source software and software defined standards to revolutionize the carrier industry, including among others:
+
+- [**Stratum**](https://opennetworking.org/stratum/): thin switch implementing next generation SDN interfaces.
+ - [**Trellis**](https://opennetworking.org/trellis/): multi-purpose leaf-spine fabric supporting distributed access networks, NFV and edge cloud applications.
+ - [**ODTN**](https://opennetworking.org/odtn/): open and disaggregated source data center interconnect solution.
+ - [**SEBA**](https://opennetworking.org/seba/): lightweight platform that supports a multitude of virtualized access technologies at the edge of the carrier network, including PON, G.Fast and eventually DOCSIS and more.
+ - [**SD-RAN**](https://opennetworking.org/sd-ran/): Complementary to the O-RAN architecture, it includes a near-real-time RIC (nRT-RIC) and a set of exemplar xApps for controlling the RAN.
+ - [**Aether**](https://opennetworking.org/aether/): the first open source 5G Connected Edge platform for enabling enterprise digital transformation.
+
+## ONF Ambassador Program
+![](/assets/images/posts/2020-04-30-onf/1.png)
+
+The [ONF Ambassador Program](https://www.opennetworking.org/ambassadors/) empowers anyone knowledgeable and passionate about ONF projects and initiatives to promote these in their part of the world. The program provides a simple framework and tools to help organize or attend events, recruit and mentor new contributors, and support a local developer community.If you feel that you want to represent and promote ONF, its mission, and projects in your region, and inspire, recruit, and support new contributors, please [apply here](https://forms.gle/PfkunXncognheAad8) to become an ONF Ambassador.
+
+## LATAM/CALA Community
+
+The ONF LATAM/CALA Ambassador team have been delivering spanish and portuguese webinars to talk about ONF and its related open source projects and how you can participate in the community:
+
+![](/assets/images/posts/2021-04-17-onf-webinar-21.png)
+
+- [Working with ONF to transform mobile and broadband networks in LATAM 2020](/onf-webinar)
+- [Working with ONF to transform mobile and broadband networks in LATAM 2021](/onf-webinar-21)
+
+### CALA Ambassador Members
+
+ - [Fernando Cerioni](https://opennetworking.org/ambassadors/fernando-cerioni/)
+ - [Amanda Espindola](https://opennetworking.org/ambassadors/amanda-espindola/)
+ - [Jose Lema](https://opennetworking.org/ambassadors/jose-castillo-lema/)
+ - [Andres Madero](https://opennetworking.org/ambassadors/andres-madero/)
+ - [Rony Pedroso](https://opennetworking.org/ambassadors/rony-a-spada-pedroso/)
+ - [Ricardo Tombi](https://opennetworking.org/ambassadors/ricardo-tombi/)
+ - [Freddy Turriaf](https://opennetworking.org/ambassadors/freddy-turriaf/)
+ - [Daniel Lazkani Feferman](https://opennetworking.org/ambassadors/daniel-lazkani-feferman/)
+
+## Profile
+[![](/assets/images/posts/2020-04-30-onf/3.png)](https://www.opennetworking.org/ambassadors/jose-castillo-lema/)
diff --git a/_posts/2020-04-25-aws1-ec2.md b/_posts/2020-04-25-aws1-ec2.md
new file mode 100644
index 0000000000..c06545b048
--- /dev/null
+++ b/_posts/2020-04-25-aws1-ec2.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series I: Elastic Computing (EC2)"
+last_modified_at: 2020-04-25T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab01-iaas-ec2.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-04-26-ocp43-on-rhosp13.md b/_posts/2020-04-26-ocp43-on-rhosp13.md
new file mode 100644
index 0000000000..e0bf760909
--- /dev/null
+++ b/_posts/2020-04-26-ocp43-on-rhosp13.md
@@ -0,0 +1,232 @@
+---
+title: "OpenShift 4.3 on RHOSP 13: Installation and Integrations"
+last_modified_at: 2020-04-26T16:00:58-04:00
+tags:
+ - en
+ - openstack
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+I would like to share my experience installing and integrating OpenShift with various OpenStack services, namely Cinder, Swift and Keystone (Neutron and Octavia TBD).
+
+## Prerequisites
+ - This was not a disconnected environment. Note that virtual machines have to be born with proper DNS configuration for OpenShift to download proper CoreOS images (`NeutronDhcpAgentDnsmasqDnsServer` parameter from Director).
+ - On Ceph RGW, the account in url option must be enabled (`rgw_swift_account_in_url: true` parameter from Director).
+
+## Installation
+Following official documentation: [https://access.redhat.com/documentation/en-us/openshift_container_platform/4.3/html-single/installing_on_openstack/index](https://access.redhat.com/documentation/en-us/openshift_container_platform/4.3/html-single/installing_on_openstack/index)
+
+Prepared a bastion server within the OpenShift project for convenience, downloaded into it the OpenStack credentials file and added the password into it.
+```
+[cloud-user@bastion ~]$ ./openshift-install create install-config --dir=installationDoc
+? SSH Public Key /home/cloud-user/.ssh/id_rsa.pub
+? Platform openstack
+? Cloud openstack
+? ExternalNetwork public
+? APIFloatingIPAddress 192.168.226.42
+? FlavorName openshift
+? Base Domain openshift.com.br
+? Cluster Name lab01
+? Pull Secret [? for help]
+```
+
+The resulting configuration:
+```yaml
+[cloud-user@bastion ~]$ cat installationDoc/install-config.yaml
+apiVersion: v1
+baseDomain: openshift.com.br
+compute:
+- hyperthreading: Enabled
+ name: worker
+ platform: {}
+ replicas: 1
+controlPlane:
+ hyperthreading: Enabled
+ name: master
+ platform: {}
+ replicas: 1
+metadata:
+ creationTimestamp: null
+ name: lab01
+networking:
+ clusterNetwork:
+ - cidr: 10.128.0.0/14
+ hostPrefix: 23
+ machineCIDR: 10.0.0.0/16
+ networkType: OpenShiftSDN
+ serviceNetwork:
+ - 172.30.0.0/16
+platform:
+ openstack:
+ cloud: openstack
+ computeFlavor: openshift
+ externalDNS: null
+ externalNetwork: public
+ lbFloatingIP: 192.168.226.42
+ octaviaSupport: "0"
+ region: ""
+ trunkSupport: "1"
+publish: External
+pullSecret: '{"auths":{"cloud.openshift.com":{"auth”:”abc==","email":"jlema@redhat.com"},"quay.io":{"auth”:”abc==","email":"jlema@redhat.com"},"registry.connect.redhat.com":{"auth”:”abc==”,”email":"jlema@redhat.com"},"registry.redhat.io":{"auth”:”abc==,”,”email":"jlema@redhat.com"}}}'
+sshKey: |
+ ssh-rsa abc== cloud-user@bastion
+```
+
+As opposed to what the documentation says regarding the number of replicas (a positive integer greater than or equal to 3 for control nodes and greater to 2 for worker nodes), the installation actually works with 1 control node and 1 worker.
+
+Proceed with the actual installation:
+```
+[cloud-user@bastion ~]$ ./openshift-install create cluster --dir=installationDoc --log-level=debug
+First try we got this error:
+...
+INFO Creating infrastructure resources...
+...
+
+INFO Waiting up to 30m0s for the Kubernetes API at https://api.lab01.openshift.oss.timbrasil.com.br:6443...
+ERROR Attempted to gather ClusterOperator status after installation failure: listing
+INFO Pulling debug logs from the bootstrap machine
+ERROR Attempted to gather debug logs after installation failure: failed to create SSH client, ensure the proper ssh key is in your keyring or specify with --key: dial tcp 192.168.226.40:22: connect: connection refused
+FATAL Bootstrap failed to complete: waiting for Kubernetes API: context deadline exceeded
+```
+
+It was a [MTU issue](https://bugzilla.redhat.com/show_bug.cgi?id=1799078), as our environment has jumbo frames as its default. Actually, there is no way to set MTU in IPI installations, and it was decided to wait to a future feature where you will be able to create your networking in OpenStack and then instruct the installer to use the existing networking resources while still installing with the IPI workflow (something like bring your own network).
+
+The (not very elegant) solution was to wait for the network creation, and manually configure the MTU, before the virtual machines are created:
+```
+[cloud-user@bastion ~]$ watch -n 10 openstack network list
+[cloud-user@bastion ~]$ openstack network set --mtu 1400 lab01-n67mh-openshift
+```
+
+Another issue we found at this point it is that for some reason the openshift-installer does not use soft anti-affinity policies (different from AWS and from [OpenStack UPI installation](https://github.com/openshift/installer/blob/master/docs/user/openstack/install_upi.md)), and may create all the masters/workers in the same server. The only option to accomplish this would be to define different regions for the nodes, which is not supported from RHOSP side.
+
+Finally, installation completed:
+![](/assets/images/posts/2020-04-26-osp43-on-rhosp13/0.png)
+
+## Cinder Integration
+Worked out of the box:
+```yaml
+[cloud-user@bastion ~]$ oc get storageClass
+NAME TYPE
+standard (default) kubernetes.io/cinder
+
+[cloud-user@bastion ~]$ oc describe storageClass standard
+Name: standard
+IsDefaultClass: Yes
+Annotations: storageclass.kubernetes.io/is-default-class=true
+Provisioner: kubernetes.io/cinder
+Parameters:
+Events:
+
+[cloud-user@bastion ~]$ oc get -o yaml storageClass standard
+allowVolumeExpansion: true
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ annotations:
+ storageclass.kubernetes.io/is-default-class: "true"
+ creationTimestamp: 2020-03-24T18:17:11Z
+ name: standard
+ ownerReferences:
+ - apiVersion: v1
+ kind: clusteroperator
+ name: storage
+ uid: 82643882-1e38-4fdd-98c2-fb19636ad003
+ resourceVersion: "10307"
+ selfLink: /apis/storage.k8s.io/v1/storageclasses/standard
+ uid: 7bb9919c-2ea7-4f1d-aedf-111b6c16e68c
+provisioner: kubernetes.io/cinder
+reclaimPolicy: Delete
+volumeBindingMode: WaitForFirstConsumer
+```
+
+Create a persistent volume claim from this template:
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: vol-teste-vai
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+ storageClassName: standard
+```
+
+As the `volumeBindingMode` is set to `WaitForFirstConsumer`, we had to actually attach the PV to a deployment in order to the Cinder volume to be created. For that, we used OpenShift GUI:
+![](/assets/images/posts/2020-04-26-osp43-on-rhosp13/1.png)
+
+
+From OpenShift side:
+```
+[cloud-user@bastion ~]$ oc get pv
+NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
+pvc-691a2bbb-0d5a-4d2f-94e2-f50708085c7d 10Gi RWO Delete Bound default/vol-teste-vai standard 55s
+```
+
+From OpenStack side, the actual Cinder volume created dynamically by OpenShift:
+```
+(overcloudrc) [cloud-user@bastion ~]$ openstack volume list
++--------------------------------------+--------------------------------------------------------------+-----------+------+-------------+
+| ID | Name | Status | Size | Attached to |
++--------------------------------------+--------------------------------------------------------------+-----------+------+-------------+
+| b75c57b4-ea8f-4d73-b0d6-28ab02458842 | lab01-9v54g-dynamic-pvc-691a2bbb-0d5a-4d2f-94e2-f50708085c7d | available | 10 | |
++--------------------------------------+--------------------------------------------------------------+-----------+------+-------------+
+```
+
+## Swift Integration
+Worked out of the box.
+
+From OpenStack side:
+```
+(overcloud) [stack@manager ~]$ openstack container list
++----------------------------------------------------------------+
+| Name |
++----------------------------------------------------------------+
+| lab01-9v54g-image-registry-phbhqxrotxhvfkunvehpebfyeyajvoiirer |
++----------------------------------------------------------------+
+```
+We can see the docker registry images inside the container:
+```
+(overcloud) [stack@manager ~]$ swift list lab01-9v54g-image-registry-phbhqxrotxhvfkunvehpebfyeyajvoiirer | grep registry
+files/docker/registry/v2/blobs/sha256/02/02c05272c8dd4f99d68e12066db506412bef3c460dbb4a587a7cafc8af593e35/data
+files/docker/registry/v2/blobs/sha256/45/455ea8ab06218495bbbcb14b750a0d644897b24f8c5dcf9e8698e27882583412/data
+files/docker/registry/v2/blobs/sha256/46/46fc24a071a44b29a3ba49c94f75a47514a56470d539c9204f3e7688973fc93a/data
+files/docker/registry/v2/blobs/sha256/4a/4abfcf58ff10724f3886be18423f80a481e90c4b258fbecad6ea06917a266003/data
+files/docker/registry/v2/blobs/sha256/56/566b3d0a5bcd5903e86174ab1551a402b1c0dade2aa918d86895516bd2d0dd43/data
+files/docker/registry/v2/blobs/sha256/6d/6d3329d5faa944944d54166b52dd7d11fcb99e6467950b5679095a44346c1cc8/data
+files/docker/registry/v2/blobs/sha256/81/8170b35922ece1799b004d6fe41e253808d47da894197d3c7fe2b49614336fa7/data
+files/docker/registry/v2/blobs/sha256/84/84e620d0abe585d05a7bed55144af0bc5efe083aed05eac1e88922034ddf1ed2/data
+files/docker/registry/v2/blobs/sha256/b5/b57725894ce17afd25fefcef7fdb2467837e85834bf482759b9ca67b261a3724/data
+files/docker/registry/v2/blobs/sha256/bb/bb13d92caffa705f32b8a7f9f661e07ddede310c6ccfa78fb53a49539740e29b/data
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/455ea8ab06218495bbbcb14b750a0d644897b24f8c5dcf9e8698e27882583412/link
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/46fc24a071a44b29a3ba49c94f75a47514a56470d539c9204f3e7688973fc93a/link
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/4abfcf58ff10724f3886be18423f80a481e90c4b258fbecad6ea06917a266003/link
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/8170b35922ece1799b004d6fe41e253808d47da894197d3c7fe2b49614336fa7/link
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/84e620d0abe585d05a7bed55144af0bc5efe083aed05eac1e88922034ddf1ed2/link
+files/docker/registry/v2/repositories/openshift/python/_layers/sha256/bb13d92caffa705f32b8a7f9f661e07ddede310c6ccfa78fb53a49539740e29b/link
+files/docker/registry/v2/repositories/openshift/python/_manifests/revisions/sha256/566b3d0a5bcd5903e86174ab1551a402b1c0dade2aa918d86895516bd2d0dd4/link
+```
+
+## Keystone Integration
+Tricky when using self-signed certificates from OpenStack side. [Openshift Keystone Identity Provider](https://docs.openshift.com/container-platform/4.3/authentication/identity_providers/configuring-keystone-identity-provider.html) only works with https keystone endpoints.
+
+From the other side, there are several issues for deploying OpenShift on top endpoints with self-signed certificates:
+ - [[OSP] allow retrieval of ignition files from behind an encrypted endpoint which uses a self-signed certificate](https://bugzilla.redhat.com/show_bug.cgi?id=1735192) / target release 4.4.0
+ - [[IPI][OSP] Machine-api cannot create workers on osp envs installed with self-signed certs](https://bugzilla.redhat.com/show_bug.cgi?id=1769879) / target release 4.4.0
+ - [[OSP] allow retrieval of ignition files from behind an encrypted endpoint which uses a self-signed certificate](https://bugzilla.redhat.com/show_bug.cgi?id=1796822) / target release 4.3.z
+ - [[IPI][OSP] Machine-api cannot create workers on osp envs installed with self-signed certs](https://bugzilla.redhat.com/show_bug.cgi?id=1788072) / target release 4.3.z
+
+TBD
+
+## Neutron/Octavia Integration (Kuryr)
+TBD
+
+## References
+ - [Red Hat OpenShift 4.2 IPI on OpenStack 13: All-in-one setup](https://developers.redhat.com/blog/2020/02/06/red-hat-openshift-4-2-ipi-on-openstack-13-all-in-one-setup/)
+ - [Automated Infrastructure in the On-Premise Datacenter – OpenShift 4.2 on OpenStack 15 (Stein)](https://keithtenzer.com/2019/10/29/automated-infrastructure-in-the-on-premise-datacenter-openshift-4-2-on-openstack-15-stein/)
+ - [OpenShift 4.2 on Red Hat OpenStack Platform 13](https://kdjlab.com/openshift-4-2-on-red-hat-openstack-platform-13/)
diff --git a/_posts/2020-05-11-ussuri.md b/_posts/2020-05-11-ussuri.md
new file mode 100644
index 0000000000..5862126666
--- /dev/null
+++ b/_posts/2020-05-11-ussuri.md
@@ -0,0 +1,18 @@
+---
+title: "OpenStack Ussuri Contributor List"
+last_modified_at: 2020-05-11T16:00:58-04:00
+tags:
+ - en
+ - nfv
+ - openstack
+ - redhat
+toc: false
+---
+
+![](/assets/images/posts/2020-05-11-ussuri/2020-05-11-ussuri.svg)
+
+Thanks to the more than 1,000 contributors from more than 50 countries and 188 organizations that contributed to the OpenStack Ussuri release.
+
+[https://www.openstack.org/software/ussuri/](https://www.openstack.org/software/ussuri/)
+
+![](/assets/images/posts/2020-05-11-ussuri/1.png)
diff --git a/_posts/2020-05-25-aodh2sensu.md b/_posts/2020-05-25-aodh2sensu.md
new file mode 100644
index 0000000000..2a7cc02198
--- /dev/null
+++ b/_posts/2020-05-25-aodh2sensu.md
@@ -0,0 +1,20 @@
+---
+title: "Importing alarms from OpenStack Aodh into Sensu Core"
+last_modified_at: 2020-04-26T16:00:58-04:00
+tags:
+ - en
+ - openstack
+ - monitoring
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/aodh2sensu/master/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-05-25-aws2-ebs.md b/_posts/2020-05-25-aws2-ebs.md
new file mode 100644
index 0000000000..1e14e685bf
--- /dev/null
+++ b/_posts/2020-05-25-aws2-ebs.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series II: Elastic Block Service (EBS)"
+last_modified_at: 2020-05-25T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab04-iaas-ebs.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-06-25-aws3-s3.md b/_posts/2020-06-25-aws3-s3.md
new file mode 100644
index 0000000000..0dee9d079f
--- /dev/null
+++ b/_posts/2020-06-25-aws3-s3.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series III: Simple Storage Service (S3)"
+last_modified_at: 2020-06-25T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab05-iaas-s3.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-07-haina-brazil.md b/_posts/2020-07-07-haina-brazil.md
new file mode 100644
index 0000000000..426e474ccd
--- /dev/null
+++ b/_posts/2020-07-07-haina-brazil.md
@@ -0,0 +1,20 @@
+---
+title: "Huawei Certificate Training Program"
+last_modified_at: 2020-07-07T16:00:58-04:00
+tags:
+ - cert
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2020-07-07-haina-brazil/0.jpg)](https://e.huawei.com/en/talent/#/news/details?consultationId=749)
+
+A Huawei está oferecendo **treinamentos digitais gratuitos**, trazendo para o Brasil o [Huawei Certificate Training Program](https://e.huawei.com/en/talent/#/news/details?consultationId=749), um programa de treinamentos para realizar os cursos preparatórios das certificações nível Associate, testes de qualificação e solicitar um **voucher para realizar a prova sem custo** (que normalmente tem um valor de $200).
+
+São 500 vouchers para realização da prova, que pode ser realizada remotamente pelos centros da [Person VUE](https://home.pearsonvue.com/Clients/Huawei.aspx).
+
+![](/assets/images/posts/2020-07-07-haina-brazil/1.png)
+
+
diff --git a/_posts/2020-07-08-aws4-autoscaling.md b/_posts/2020-07-08-aws4-autoscaling.md
new file mode 100644
index 0000000000..6f522852d6
--- /dev/null
+++ b/_posts/2020-07-08-aws4-autoscaling.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series IV: Auto Scaling"
+last_modified_at: 2020-07-08T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab09-iaas-autoscaling.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-10-aws5-ecs.md b/_posts/2020-07-10-aws5-ecs.md
new file mode 100644
index 0000000000..7356553781
--- /dev/null
+++ b/_posts/2020-07-10-aws5-ecs.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series V: Elastic Container Service (ECS)"
+last_modified_at: 2020-07-10T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab03-iaas-ecs.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-12-aws7-eb.md b/_posts/2020-07-12-aws7-eb.md
new file mode 100644
index 0000000000..93b91c038c
--- /dev/null
+++ b/_posts/2020-07-12-aws7-eb.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series VII: Elastic Beanstalk (EB)"
+last_modified_at: 2020-07-12T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab06-paas-eb.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-13-aws-academy.md b/_posts/2020-07-13-aws-academy.md
new file mode 100644
index 0000000000..3e7a5d8bfc
--- /dev/null
+++ b/_posts/2020-07-13-aws-academy.md
@@ -0,0 +1,158 @@
+---
+title: "AWS Academy"
+last_modified_at: 2022-11-07T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-07-09-aws-academy/01.png)](https://aws.amazon.com/pt/training/awsacademy/)
+
+## Benefícios do programa
+- Acesso ao currículo criado pela AWS: O currículo pronto para ensino permite que as instituições membro incorporem a instrução em seu catálogo de cursos. As atualizações regulares da AWS refletem o ritmo da inovação e as melhores práticas da computação em nuvem.
+- Crie habilidades alinhadas à AWS Certification: os alunos adquirem habilidades de computação na Nuvem AWS por meio de experiência prática e podem se preparar para a AWS Certification com simulados gratuitos e **descontos de 50% para os exames completos**.
+- Aumente a força de trabalho da Nuvem AWS: Com o currículo da AWS Academy, os alunos obtêm experiência prática trabalhando em ambientes ao vivo, o que os ajuda a ganhar a experiência do mundo real necessária para conseguir emprego no setor.
+
+## Cursos
+
+### Cloud Foundations
+
+#### AWS Academy Cloud Foundations (ACF)
+
+O curso é introdutório e oferece uma visão geral detalhada dos seguintes tópicos:
+* conceitos da nuvem
+* principais serviços da AWS
+* segurança
+* arquitetura
+* definição de preço
+* suporte
+
+O curso possui **20 horas** de conteúdo e prepara os alunos para conseguir a [**certificação AWS Certified Cloud Practitioner (CLF-C01)**](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/).
+
+Na FIAP ofertamos este curso ([1ª edição](/shift-aws-foundations), [2ª edição](/shift-aws-foundations-2), [3ª edição](/shift-aws-foundations-3), [4ª edição](/shift-aws-foundations-4), [5ª edição](/shift-aws-foundations-5), [6ª edição](/shift-aws-foundations-6), [7ª edição](/shift-aws-foundations-7), [8ª edição](/shift-aws-foundations-8) e [9ª edição](/shift-aws-foundations-9)) na modalidade [SHIFT](https://www.fiap.com.br/shift).
+
+![](/assets/images/posts/2020-07-09-aws-academy/05.png)
+
+
+
+#### AWS Academy Introduction to Cloud
+
+##### Semester 1 (AICS1)
+
+Neste curso, os alunos irão estudar serviços de computação em nuvem, aplicativos e
+casos de uso. Você vai mergulhar nas melhores práticas de computação em nuvem e aprender como
+a computação em nuvem ajuda os usuários a desenvolver uma infraestrutura global para apoiar
+para usar casos em escala, enquanto desenvolve e inventa tecnologias inovadoras, a través de **60 horas** de conteúdo.
+
+
+
+##### Semester 2 (AICS2)
+
+Neste curso, os alunos exploram serviços, aplicativos e casos de uso de computação em nuvem. Os alunos mergulham nas melhores práticas de computação em nuvem e aprendem como a computação em nuvem ajuda os usuários a desenvolver uma infraestrutura global para oferecer suporte a casos de uso em escala, ao mesmo tempo que desenvolve e inventa tecnologias inovadoras.
+
+Este curso é uma extensão do *AWS Academy Introduction to Cloud: Semester 1*. O curso fornece aos alunos instrução em sala de aula que apresenta as habilidades de computação em nuvem e acelera os alunos em direção às próximas etapas em sua jornada educacional.
+
+![](/assets/images/posts/2020-07-09-aws-academy/11.png)
+
+
+
+### Desenvolvimento
+
+#### AWS Academy Cloud Developing (ACD)
+
+Esse curso de nível intermediário ajudará os estudantes a ganharem experiência técnica em desenvolvimento com tecnologia de nuvens. Ele também os ajudará a se preparar para o exame de certificação [**AWS Certified Developer - Associate (DVA-C01)**](https://aws.amazon.com/pt/certification/certified-developer-associate/). Ao completar, os alunos estarão aptos a desenvolver com AWS SDK e identificar as melhores práticas para construir e implantar aplicativos na nuvem AWS. Esse curso tem aproximadamente **40 horas** de conteúdo fornecido por meio de palestras e laboratórios práticos.
+
+Recomendamos que os alunos cursem o [AWS Academy Cloud Foundations](#aws-academy-cloud-foundations-acf) ou equivalente, antes de iniciar este curso.
+
+Na FIAP ofertamos este curso ([1ª edição](/shift-aws-dev), [2ª edição](/shift-aws-dev-2), [3ª edição](/shift-aws-dev-3), [4ª edição](/shift-aws-dev-4), [5ª edição](/shift-aws-dev-5) e [6ª edição](/shift-aws-dev-6)) na modalidade [SHIFT](https://www.fiap.com.br/shift).
+
+![](/assets/images/posts/2020-07-09-aws-academy/06.png)
+
+
+
+### Arquitetura
+
+#### AWS Academy Cloud Architecting (ACA)
+
+O curso de nível intermediário cobre os fundamentos na construção da infraestrutura de TI na AWS e ajuda os estudantes a desenvolverem habilidades que eles precisam para obter a certificação [**AWS Certified Solutions Architect – Associate (SAA-C02)**](https://aws.amazon.com/certification/certified-solutions-architect-associate/). Este curso tem aproximadamente **40 horas** de conteúdo entregue por meio de palestras, laboratórios práticos e trabalho em projetos.
+
+Recomendamos que os alunos cursem o [AWS Academy Cloud Foundations](#aws-academy-cloud-foundations-acf) ou equivalente, antes de iniciar este curso.
+
+![](/assets/images/posts/2020-07-09-aws-academy/10.png)
+
+
+
+### Operações
+
+#### AWS Academy Cloud Operations (ACO)
+
+Esse curso de nível intermediário preparará os alunos para buscar DevOps sob demanda, suporte e papéis de operações nas nuvens no nível de entrada. Ele também os irá ajudar a se preparar para exame de certificação [**AWS Certified SysOps Administrator – Associate**](https://aws.amazon.com/certification/certified-sysops-admin-associate/). Por meio de estudos de casos, demonstrações e atividades de laboratório, os alunos aprenderão como resolver problemas em cenários diversos e automatizar a implantação de redes e sistemas na AWS. Este curso tem aproximadamente **40** horas de conteúdo fornecido por meio de palestras e laboratórios práticos.
+
+Recomendamos que os alunos cursem o [AWS Academy Cloud Foundations](#aws-academy-cloud-foundations-acf) ou equivalente, antes de iniciar este curso.
+
+![](/assets/images/posts/2020-07-09-aws-academy/09.png)
+
+
+
+### Machine learning
+
+#### AWS Academy Machine Learning Foundation (AML)
+
+Este curso introdutório apresenta aos alunos os conceitos e a terminologia de inteligência artificial (IA) e *machine learning* (ML). Ao final deste curso, os alunos poderão selecionar e aplicar serviços de ML para resolver problemas de negócios. Eles também poderão rotular, criar, treinar e implantar um modelo de ML personalizado. Este curso tem aproximadamente **20 horas** de conteúdo entregue por meio de palestras, laboratórios práticos e trabalho em projetos.
+
+![](/assets/images/posts/2020-07-09-aws-academy/07.png)
+
+
+
+### Análise de dados
+
+#### AWS Academy Data Analytics (ADA)
+
+Estes exercícios de laboratório ensinam os alunos a conduzir a análise de Big Data com exemplos práticos do mundo real. Os laboratórios e os recursos de aprendizado foram projetados para complementar os cursos de análise de dados existentes em uma instituição e fornecer aos alunos uma experiência prática ao trabalhar com dados em escala. Voltado para estudantes interessados em seguir carreiras em análise de dados, o AWS Academy Data Analytics requer uma base sólida em conceitos e habilidades de TI e contém **7.5 horas** de conteúdo.
+
+Na FIAP ofertamos este curso aos alunos do [MBA em Engenharia de dados](/fiap-abd).
+
+![](/assets/images/posts/2020-07-09-aws-academy/08.png)
+
+
+
+### Datacenters
+
+#### AWS Academy Engineering Operations Technicians (AEOT)
+
+Este curso fornece uma visão geral dos conceitos e habilidades fundamentais necessários para a função de técnico em operações de engenharia em um ambiente de datacenter. Os alunos aprenderão sobre tópicos como noções básicas de datacenter, infraestrutura física de data center, fundamentos elétricos e baterias e geradores de datacenter.
+
+![](/assets/images/posts/2020-07-09-aws-academy/12.png)
+
+
+
+#### AWS Academy Data Center Technician (DCT)
+
+Este curso foi desenvolvido para ajudar os alunos a desenvolver conhecimentos técnicos em operações de datacenter. Embora este seja um curso fundamental, os alunos devem ter conhecimento geral dos conceitos de engenharia mecânica e elétrica.
+
+![](/assets/images/posts/2020-07-09-aws-academy/13.png)
+
+
+
+### AWS Academy Learner Labs
+
+Ambientes com laboratórios práticos de longa duração onde os educadores podem inserir suas próprias atividades e convidar seus alunos para ganharem experiência usando produtos da AWS selecionados.
+
+#### Foundation (LLFS)
+
+ - Disponível para todos os educadores AWS Academy que concluírem nosso curso de Orientação do educador
+ - Acesso a mais de 40 produtos da AWS
+
+#### Associate
+ - Disponível para todos os educadores credenciados
+ - Os educadores devem ser credenciados para ensinar pelo menos um curso do nível Associate da AWS Academy para criar um Learner Lab no nível Associate da AWS Academy
+ - Inclui acesso a mais de 100 produtos da AWS
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-14-aws8-eb-springboot.md b/_posts/2020-07-14-aws8-eb-springboot.md
new file mode 100644
index 0000000000..cd03056bf8
--- /dev/null
+++ b/_posts/2020-07-14-aws8-eb-springboot.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series VIII: Elastic Beanstalk (EB) com Spring Boot"
+last_modified_at: 2020-07-14T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab10-paas-eb-springboot.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-16-aws12-dynamodb.md b/_posts/2020-07-16-aws12-dynamodb.md
new file mode 100644
index 0000000000..3d32c23239
--- /dev/null
+++ b/_posts/2020-07-16-aws12-dynamodb.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series XII: DynamoDB"
+last_modified_at: 2020-07-16T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab08-paas-dynamo.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-16-aws9-cp.md b/_posts/2020-07-16-aws9-cp.md
new file mode 100644
index 0000000000..1f17334cea
--- /dev/null
+++ b/_posts/2020-07-16-aws9-cp.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series IX: CodePipeline"
+last_modified_at: 2020-07-16T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab07-paas-cp.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-17-haina.md b/_posts/2020-07-17-haina.md
new file mode 100644
index 0000000000..3d416cb72f
--- /dev/null
+++ b/_posts/2020-07-17-haina.md
@@ -0,0 +1,67 @@
+---
+title: "Huawei ICT Academy"
+last_modified_at: 2020-10-25T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-07-17-haina/0.png)](https://www.huaweiacad.com)
+
+A Huawei ICT Academy é um programa de parceria sem fins lucrativos que autoriza universidades e faculdades a oferecer cursos de Certificação Huawei para estudantes. Este programa atua como uma ponte entre empresas e academia para construir um ecossistema de talentos para as indústrias de TIC.
+
+Desde sua afiliação no programa em 2016, a **Escola Politécnica da USP** oferece treinamento de certificação técnica para estudantes de instituições de ensino superior, formando com sucesso mais de 200 estudantes nos cursos certificados pela HCIA.
+
+![](/assets/images/posts/2020-07-17-haina/1.png)
+
+- [16a edição treinamento HCIA-R&S](/hcia-16)
+- [15a edição](/hcia-15)
+- [14a edição](/hcia-14)
+- [Huawei ICT Competition Brazil 2018-2019](/ict-competition)
+- [13a edição treinamento HCNA-HNTD](/hntd-13)
+- [12a edição](/hntd-12)
+- [11a edição](/hntd-11)
+- [10a edição](/hntd-10)
+- [9a edição](/hntd-09)
+- [8a edição](/hntd-08)
+- [7a edição](/hntd-07)
+- [5a/6a edições](/hntd-05)
+- [4a edição](/hntd-04)
+- [3a edição](/hntd-03)
+- [2a edição](/hntd-02)
+- [1a edição](/hntd-01)
+
+
+## Benefícios do programa
+- Participação na Huawei ICT Competition
+- Vochers para fazer os exames de certificação sem custo
+- Acesso ao [portal da Huawei ICT Academy](https://www.huaweiacad.com), permitindo o aprendizado a qualquer hora, em qualquer lugar
+
+## Certificação Huawei
+
+A Huawei criou um sistema de certificação de três níveis:
+- Huawei Certified ICT Associate (**HCIA**)
+- Huawei Certified ICT Professional (**HCIP**)
+- Huawei Certified ICT Expert (**HCIE**)
+
+![](/assets/images/posts/2020-07-17-haina/2.png)
+
+
+Cada curso inclui:
+- Materiais de e-Learning
+- Exercícios práticos de laboratório baseados em cenários reais
+- Vídeos que abrangem conhecimentos mais detalhados em áreas chave
+
+## Plataforma on-line
+A plataforma on-line da Huawei ICT Academy fornece um suporte digital integrado com compartilhamento de recursos, suporte ao ensino, interação com a comunidade e aprendizado móvel.
+
+Os alunos podem adquirir materiais de aprendizagem, concluir tarefas, consultar resultados e interagir com professores e outros aprendizados a qualquer hora e em qualquer lugar.
+
+Para se registrar na plataforma de aprendizado on-line gratuitamente e obter os materiais mais recentes: [https://www.huaweiacad.com](https://www.huaweiacad.com)
+
+![](/assets/images/posts/2020-07-17-haina/3.png)
diff --git a/_posts/2020-07-18-aws14-emr.md b/_posts/2020-07-18-aws14-emr.md
new file mode 100644
index 0000000000..68cd2c1a10
--- /dev/null
+++ b/_posts/2020-07-18-aws14-emr.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series XIV: Elastic MapReduce (EMR)"
+last_modified_at: 2020-07-18T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab12-paas-emr.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-20-aws10-apigw.md b/_posts/2020-07-20-aws10-apigw.md
new file mode 100644
index 0000000000..a09e573473
--- /dev/null
+++ b/_posts/2020-07-20-aws10-apigw.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series X: API Gateway"
+last_modified_at: 2020-07-20T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab11-paas-api-gateway.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-07-22-aws15-lambda.md b/_posts/2020-07-22-aws15-lambda.md
new file mode 100644
index 0000000000..86af135685
--- /dev/null
+++ b/_posts/2020-07-22-aws15-lambda.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series XV: Lambda"
+last_modified_at: 2020-07-20T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab13-faas-lambda.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2020-08-30-shift-aws-foundations.md b/_posts/2020-08-30-shift-aws-foundations.md
new file mode 100644
index 0000000000..552e3ca69e
--- /dev/null
+++ b/_posts/2020-08-30-shift-aws-foundations.md
@@ -0,0 +1,44 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations"
+last_modified_at: 2020-08-30T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-08-30-shift-aws-foundations.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias 15/10 e 19/11, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2020-09-05-shift-multicloud.md b/_posts/2020-09-05-shift-multicloud.md
new file mode 100644
index 0000000000..9c727af615
--- /dev/null
+++ b/_posts/2020-09-05-shift-multicloud.md
@@ -0,0 +1,54 @@
+---
+title: "FIAP SHIFT: Multicloud Architecture"
+last_modified_at: 2020-09-05T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-09-05-shift-multicloud.png)](https://www.fiap.com.br/shift/curso/tecnologia/multicloud-architecture-development-solutions-service-online)
+
+A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços.
+
+Além de ser uma solução inovadora, a Cloud também é um modelo de negócio relativamente novo, aplicável a qualquer tipo de empresa. Nosso foco é formar o profissional para dominar modelos de serviços de Computação em Nuvem (SaaS, PaaS, IaaS), modelos de implantação em Nuvem (privado, público, híbrido e multicloud) e economia em Nuvem. Tudo isso por meio de atividades hands-on na Amazon Web Services (AWS).
+
+## Para quem?
+Profissionais de TI (analistas, especialistas e gestores) que atuam nas áreas de Cloud, Virtualização e/ou DevOps.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Benefício Amazon
+
+Cada aluno vai receber US$ 50 em créditos para usar em laboratórios no ambiente Amazon, durante e após o curso.
+
+## Shift remoto
+Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ * Virtualização
+ * Modelos de serviço
+ * Segurança em nuvem / Modelo de responsabilidade compartilhada
+ * Modelos de implementação
+ * Multicloud
+ * Economia e faturamento da nuvem
+ * Arquitetura de nuvem / Desenvolvimento de aplicações para a nuvem
+ - Módulo 2: Infraestrutura como serviço (IaaS)
+ * Instanciação de máquinas virtuais
+ * Autoscaling
+ * Infraestrutura de armazenamento: block/object/file storage
+ * Containers
+ * Orquestração de containers
+ * Arquitetura de microserviços
+ - Módulo 3: Plataforma como serviço (PaaS)
+ * Automação e entrega contínua (CI/CD)
+ * Pipeline DevOps
+ * DBaaS SQL/NoSQL
+ * Function as a Service
+ * Arquiteturas serverless
\ No newline at end of file
diff --git a/_posts/2020-09-30-mycodeisopen.md b/_posts/2020-09-30-mycodeisopen.md
new file mode 100644
index 0000000000..e5b5413977
--- /dev/null
+++ b/_posts/2020-09-30-mycodeisopen.md
@@ -0,0 +1,11 @@
+---
+title: "My code is open"
+last_modified_at: 2020-09-30T16:00:58-04:00
+tags:
+ - redhat
+toc: false
+---
+
+![](/assets/images/posts/2020-09-30-mycodeisopen/0.jpg)
+
+![](/assets/images/posts/2020-09-30-mycodeisopen/1.jpg)
\ No newline at end of file
diff --git a/_posts/2020-10-01-onf-webinar.md b/_posts/2020-10-01-onf-webinar.md
new file mode 100644
index 0000000000..15c40b2db6
--- /dev/null
+++ b/_posts/2020-10-01-onf-webinar.md
@@ -0,0 +1,25 @@
+---
+title: "Webinar: Working with ONF to transform mobile and broadband networks in LATAM 2020"
+last_modified_at: 2020-10-11T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - onf
+ - sdn
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2020-10-01-onf-webinar/0.jpeg)](https://onf.zoom.us/webinar/register/WN_pJWEXMWASSqIPmDyZ9H9AQ)
+
+Don't miss this virtual event sponsored by the ONF LATAM Ambassador team. In this webinar you will learn about the [Open Networking Foundation (ONF)](https://opennetworking.org/), a non-profit, operator-led consortium that is focused on driving transformation of network infrastructure and carrier business models around the world. The ONF serves as the umbrella for a number of projects building solutions for mobile and broadband operators by leveraging network disaggregation, white box economics and open source software to revolutionize the carrier industry.
+
+With a robust community of operators, vendors and system integrators, ONF member companies have the opportunity to add their innovations and use cases to solutions that can be inserted into operator PoCs and trials, and be deployed into production networks.
+
+Join us to learn about the exciting organization, its open source projects and how you can join and participate in the community.
+
+This webinar will be delivered in Portuguese, Oct 23, 2020 10:00AM BRT. Register [here](https://onf.zoom.us/webinar/register/WN_pJWEXMWASSqIPmDyZ9H9AQ).
+
+![](/assets/images/posts/2020-10-01-onf-webinar/1.png)
\ No newline at end of file
diff --git a/_posts/2020-10-12-aws-cert-challenge.md b/_posts/2020-10-12-aws-cert-challenge.md
new file mode 100644
index 0000000000..74bc0b77ba
--- /dev/null
+++ b/_posts/2020-10-12-aws-cert-challenge.md
@@ -0,0 +1,18 @@
+---
+title: "AWS Global Certification Challenge"
+last_modified_at: 2020-10-12T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2020-10-12-aws-cert-challenge.jpg)](https://aws.amazon.com/blogs/training-and-certification/coming-to-twitch-aws-power-hour-cloud-practitioner/)
+
+A AWS está oferecendo de forma gratuita a **certificação AWS Cloud Practitioner**, que normalmente tem um valor de $200, como parte da iniciativa AWS re:Invent 2020 durante os meses de outubro e novembro de este ano.
+
+Segue o [link para a solicitação do voucher](https://pages.awscloud.com/AWS_Global_Certification_Challenge_Practice_Exam_Voucher.html), que demora até 3 dias úteis, e o [blog do AWS Training com todas as informações sobre o programa](https://aws.amazon.com/blogs/training-and-certification/coming-to-twitch-aws-power-hour-cloud-practitioner/).
+
+
+
diff --git a/_posts/2020-10-25-hcia-14.md b/_posts/2020-10-25-hcia-14.md
new file mode 100644
index 0000000000..2bd4b8ac75
--- /dev/null
+++ b/_posts/2020-10-25-hcia-14.md
@@ -0,0 +1,15 @@
+---
+title: "HCIA-Routing & Switching - 14th edition"
+last_modified_at: 2020-11-15T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2020-10-25-hcia-14.jpeg)](https://www.sympla.com.br/treinamento-de-redes--14-edicao__1020859)
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
\ No newline at end of file
diff --git a/_posts/2020-10-26-totvs-talks.md b/_posts/2020-10-26-totvs-talks.md
new file mode 100644
index 0000000000..7acf7b64ea
--- /dev/null
+++ b/_posts/2020-10-26-totvs-talks.md
@@ -0,0 +1,24 @@
+---
+title: "TOTVS TALKS #09 - A computação em nuvem no Brasil"
+last_modified_at: 2020-10-26T16:00:58-04:00
+tags:
+ - events
+ - podcast
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2020-10-26-totvs-talks/0.jpeg)](https://bandnewsfm.band.uol.com.br/totvs-talks/)
+
+O [TOTVS TALKS Podcast](https://bandnewsfm.band.uol.com.br/totvs-talks/) é uma parceria entre a BandNews FM e a TOTVS. Aqui, você ouve conversas sobre tecnologia – ferramentas, soluções e caminhos; cada mês, um novo assunto. Os episódios novos saem sempre no dia 20 e você encontra o programa no site da BandNews FM e no Spotify.
+
+
+
+[![](/assets/images/posts/2020-10-26-totvs-talks/1.jpeg)](https://open.spotify.com/episode/3tjjbSBQOjnOj7JNwWiNK6?si=YMFflZtASiOwbFLZQPMx2w)
+
+[![](/assets/images/posts/2020-10-26-totvs-talks/2.png)](https://open.spotify.com/episode/3tjjbSBQOjnOj7JNwWiNK6?si=YMFflZtASiOwbFLZQPMx2w)
+
+Neste [nono episódio](https://open.spotify.com/episode/3tjjbSBQOjnOj7JNwWiNK6?si=YMFflZtASiOwbFLZQPMx2w), o podcast de tecnologia para o mundo dos negócios fala sobre o panorama atual da computação em nuvem no Brasil. A digitalização dos negócios continua parte do debate. Não só porque o mercado vem reconhecendo ano após ano a importância da tecnologia para manter as empresas competitivas, mas também porque o cenário imposto pela pandemia do coronavírus exigiu que as empresas se reinventassem apoiadas na tecnologia. E hoje já é praticamente impossível falar de tecnologia sem falar de Cloud Computing, a computação em nuvem.
+
+Para entender como as soluções atuais têm englobado a tecnologia da nuvem e como a pandemia impactou este mercado, estão na mesa do TOTVS TALKS o diretor de Cloud da TOTVS, Vinicius Mendes, e o doutor em engenharia elétrica, nas áreas de telecomunicações, redes e internet das coisas, José Castillo Lema, consultor de Cloud para América Latina na Red Hat e professor no MBA da FIAP.
+
diff --git a/_posts/2020-10-31-caio-youtube.md b/_posts/2020-10-31-caio-youtube.md
new file mode 100644
index 0000000000..62cf20143b
--- /dev/null
+++ b/_posts/2020-10-31-caio-youtube.md
@@ -0,0 +1,22 @@
+---
+title: "Caio Ferreira - canal de YouTube"
+last_modified_at: 2020-10-31T16:00:58-04:00
+tags:
+ - aws
+ - networks
+ - pt
+ - youtube
+toc: false
+---
+
+[![](/assets/images/posts/2020-10-31-caio-youtube.png)](https://www.youtube.com/channel/UCbDgBA7vpWsB7AwiPPmhfXA/videos)
+
+Gostaria de recomendar o [canal de YouTube](https://www.youtube.com/channel/UCbDgBA7vpWsB7AwiPPmhfXA/videos) do meu amigo [**Caio Ferreria**](https://www.linkedin.com/in/caiocf/).
+
+No canal podem encontrar videos sobre:
+ - AWS
+ - Fluxos de pagamento
+ - Restcomm/Mobicents
+
+Parabéns pelo canal Caio!
+
diff --git a/_posts/2020-11-09-fiap-asoo.md b/_posts/2020-11-09-fiap-asoo.md
new file mode 100644
index 0000000000..1b7c77642a
--- /dev/null
+++ b/_posts/2020-11-09-fiap-asoo.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Arquitetura de Soluções - Online (ASOO)"
+last_modified_at: 2020-11-09T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/asoo/README.md %}
+
diff --git a/_posts/2020-11-13-haina-talent.md b/_posts/2020-11-13-haina-talent.md
new file mode 100644
index 0000000000..7579547eb7
--- /dev/null
+++ b/_posts/2020-11-13-haina-talent.md
@@ -0,0 +1,64 @@
+---
+title: "Huawei Talent: Cadastro na plataforma"
+last_modified_at: 2020-11-13T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-11-13-haina-talent/logo.jpg)](https://e.huawei.com/en/talent)
+
+Para acompanhar os cursos [HCIA Routing & Switching](/hcia-14), uma vez aprovado no processo seletivo é necessária a criação de uma conta na plataforma [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+A plataforma on-line da Huawei ICT Academy fornece um suporte digital integrado com compartilhamento de recursos, suporte ao ensino, interação com a comunidade e aprendizado móvel.
+
+Os alunos podem adquirir materiais de aprendizagem, concluir tarefas, consultar resultados e interagir com professores e outros aprendizados a qualquer hora e em qualquer lugar.
+
+# Criação da conta
+
+1. Acessar o [site da plataforma](https://e.huawei.com/en/talent)
+
+2. Caso não tiver conta, na plataforma, **registrar** um novo usuário:
+![](/assets/images/posts/2020-11-13-haina-talent/0.png)
+
+3. Preencher as informações requisitadas. O dominio do endereço de mail não é relevante. Um SMS será enviado para confirmar a identidade:
+![](/assets/images/posts/2020-11-13-haina-talent/1.png)
+
+4. Aguardar pelo mail de ativação (normalmente chega em minutos):
+![](/assets/images/posts/2020-11-13-haina-talent/2.png)
+
+# Ativação da conta
+
+5. Uma vez recebido o mail de ativação, abrir o enlace para ativar o e-mail previamente cadastrado:
+![](/assets/images/posts/2020-11-13-haina-talent/3.png)
+
+6. Fazer login no [site](https://e.huawei.com/en/talent):
+![](/assets/images/posts/2020-11-13-haina-talent/4.png)
+
+# Associação da conta com a instituição
+
+7. Navegar até o ***User Center*** -> ***My information***
+![](/assets/images/posts/2020-11-13-haina-talent/5.png)
+
+8. Solicitar a associação da conta com a instituição **Escola Politécnica da USP - USP**:
+![](/assets/images/posts/2020-11-13-haina-talent/6.png)
+![](/assets/images/posts/2020-11-13-haina-talent/7.png)
+
+9. Confirmar a solicitação e aguardar pelo mail de aprovação. A aprovação é manual, e não inmediata:
+![](/assets/images/posts/2020-11-13-haina-talent/8.png)
+
+10. Aguardar o mail de aprovação:
+![](/assets/images/posts/2020-11-13-haina-talent/9.png)
+
+# Acesso ao curso
+
+11. Logar novamente na plataforma e confirmar que o curso é mostrado na aba **My course**:
+![](/assets/images/posts/2020-11-13-haina-talent/10.png)
+
+12. Nos detalhes do curso, confirmar o estado de registro:
+![](/assets/images/posts/2020-11-13-haina-talent/11.png)
diff --git a/_posts/2020-11-17-shift-aws-foundations-2.md b/_posts/2020-11-17-shift-aws-foundations-2.md
new file mode 100644
index 0000000000..b4ba6d6c4e
--- /dev/null
+++ b/_posts/2020-11-17-shift-aws-foundations-2.md
@@ -0,0 +1,44 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 2nd edition"
+last_modified_at: 2020-11-17T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-11-17-shift-aws-foundations-2.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **11/01** e **15/02**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2020-12-20-intel-network-builders.md b/_posts/2020-12-20-intel-network-builders.md
new file mode 100644
index 0000000000..85e8279998
--- /dev/null
+++ b/_posts/2020-12-20-intel-network-builders.md
@@ -0,0 +1,78 @@
+---
+title: "Intel Network Builders University"
+last_modified_at: 2020-12-20T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - nfv
+ - openstack
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2020-12-20-intel-network-builders/logo.jpg)](https://networkbuilders.intel.com/university)
+
+[Intel® Network Builders University](https://networkbuilders.intel.com/university) is a comprehensive network functions virtualization (NFV) and software defined networking (SDN) training program. The university includes a broad collection of online content training to help technical professionals in the network industry to improve their knowledge of key Intel® technologies, industry trends, and technical aspects of NFV deployments.
+
+I would like to recomend its courses to everyone who is interested in learning more about OpenStack, 4G, DPDK and Open vSwitch.
+
+Intel proposes three learning paths:
+
+![](/assets/images/posts/2020-12-20-intel-network-builders/paths.png)
+
+# Foundational Learning Pathway
+- Software Defined Infrastructure (SDI) – A World Where the Application Defines the System
+- Network Transformation
+- NFV Technologies
+- NFV/SDN Essentials Series – Network Virtualization
+- NFV/SDN Essentials Series – Virtualization Concepts
+- NFV/SDN Essentials Series – Network Functions Virtualization
+- NFV/SDN Essentials Series – Cloud IaaS with OpenStack
+- NFV/SDN Essentials Series – Software-Defined Networking
+- NFV/SDN Essentials Series – Deployment Use Cases
+- The Intel® Xeon® Scalable Processor: Foundations for Communications Service Providers
+- Server Ingredients: Virtualization 101
+- Server Ingredients: Virtualization 102
+- Cloud 101
+- Open Source and NFV
+- DPDK 101
+
+# Intermediate Learning Pathway
+- VNF re-architecting
+- NFVI Hardware Configurations
+- Hyperscan Overview
+- Intel ® Xeon ® Scalable Platform Technical Deep Dive
+- DPDK 201
+- DPDK Intro
+- DPDK Open vSwitch: Accelerating the Path to the Guest
+- Intel’s NFV Technologies Management & Orchestration
+- Intel® QuickAssist Technology Overview – NDA Content
+- Extend Cloud and Data Center Capacity with Intel® QuickAssist Technology
+- OpenStack* Enhanced Platform Awareness 101
+- OpenStack* Enhanced Platform Awareness 102
+- Virtual Enterprise Customer Premises Equipment (vE-CPE) Overview
+- Gi-LAN Overview
+- Virtual IP Multimedia Subsystem (vIMS) Overview
+
+# Advanced Learning Pathway
+- How to Maximize Performance of NFV on Intel® Architecture
+- Setting Up DPDK on Different Operating Systems
+- Open vSwitch with DPDK Architectural Deep Dive
+- VSPERF Deep Dive: Virtual Switch performance in OPNFV
+- Using DPDK and OvS to Accelerate Virtual Switching
+- Container Orchestration with Kubernetes*
+- Integration of OpenDaylight Service Function Chaining and Vector Packet Processing
+- Introduction to SDN Controller and VIM Integration – OpenStack* and OpenDaylight* Integration
+- NetVirt* Features and Their Use Cases
+- Virtual Enterprise Customer Premises Equipment (vE-CPE) Reference Architecture
+- Virtual Enterprise Customer Premises Equipment (vE-CPE) Use Cases
+- Virtual Enterprise Customer Premises Equipment (vE-CPE) Operations
+- Gi-LAN Deep Dive
+- vGi-LAN Architecture
+- Service Function Chaining
+- IP Multimedia Subsystem (IMS) Architecture
+- Virtual IP Multimedia Subsystem (vIMS) Architecture
+- Virtual IP Multimedia Subsystem (vIMS) Additional Benefits
+
+
diff --git a/_posts/2020-12-22-colab.md b/_posts/2020-12-22-colab.md
new file mode 100644
index 0000000000..efbabe5ecc
--- /dev/null
+++ b/_posts/2020-12-22-colab.md
@@ -0,0 +1,30 @@
+---
+title: "Red Hat Co.Lab: Open Source Stories"
+last_modified_at: 2020-12-22T16:00:58-04:00
+tags:
+ - iot
+ - pt
+ - redhat
+toc: false
+comments: true
+---
+
+[![](/assets/images/posts/2020-12-22-co.lab.jpg)](https://www.redhat.com/pt-br/colab-repo)
+
+Na Red Hat, acreditamos no potencial da tecnologia para educar, ensinar, evoluir e transformar o mundo.
+
+Foi com esse propósito que a Red Hat, em parceria com a prefeitura de Boston, junto à organização Sociedad Latina, iniciou o projeto [Co.Lab](https://www.redhat.com/pt-br/colab-repo) com um objetivo: ensinar às crianças e jovens os fundamentos da codificação e a importância da criatividade e da colaboração.
+
+Agora, o Co.Lab chega ao Brasil!
+
+O Co.Lab apresenta às crianças e jovens os princípios do código aberto, inspirando-os no seu dia a dia.
+
+Em uma plataforma digital, você terá acesso a muitos conteúdos referentes à tecnologia *open source*, *workshops* e experimentos para crianças e jovens de todas as idades.
+
+Com hardware e metodologias abertas, pretendemos ensinar os jovens porque a cultura *open* é a melhor maneira de trabalhar e resolver desafios. Nesta plataforma você encontrará experimentos, palestras e workshops. Frequentemente um novo conteúdo será disponibilizado na plataforma para que você se atualize.
+
+Convidamos você a explorar o universo das tecnologias abertas e compartilhar muitos aprendizados com seus amigos, filhos e toda a família.
+
+Essa é a nossa contribuição para um mundo mais conectado, mais aberto e mais inclusivo.
+
+
diff --git a/_posts/2021-01-01-newyear.md b/_posts/2021-01-01-newyear.md
new file mode 100644
index 0000000000..6f1e868d98
--- /dev/null
+++ b/_posts/2021-01-01-newyear.md
@@ -0,0 +1,16 @@
+---
+title: "Happy new year!"
+last_modified_at: 2021-01-01T16:00:58-04:00
+tags:
+ - en
+ - es
+ - redhat
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2020-12-31-newyear/1.png)
+
+![](/assets/images/posts/2020-12-31-newyear/2.png)
+
+![](/assets/images/posts/2020-12-31-newyear/3.png)
\ No newline at end of file
diff --git a/_posts/2021-01-05-calico.md b/_posts/2021-01-05-calico.md
new file mode 100644
index 0000000000..d5afe5acd7
--- /dev/null
+++ b/_posts/2021-01-05-calico.md
@@ -0,0 +1,47 @@
+---
+title: "Certified Calico Operator"
+last_modified_at: 2021-01-05T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - networks
+ - nfv
+ - openshift
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-01-05-calico/1.png)](https://www.projectcalico.org/)
+
+I would like to strongly recomend the [Certified Calico Operator: Level 1](https://academy.tigera.io/course/certified-calico-operator-level-1/) course for everyone interested in Kubernetes networking.
+
+This free and self-paced course will arm you with the knowledge you need to understand how Kubernetes networking works, how to configure and manage a Calico network, and how to secure your cluster following today’s best practices, with the confidence you need to run mission critical workloads in production.
+
+
+# What the Course Covers
+- Introduction to Kubernetes Networking
+- Installing Calico
+- Everything you need to know about Network Policy, including:
+ * Introduction to Network Policy
+ * Best Practices for Network Policy
+ * Managing Trust Across Teams
+ * Network Policy for Hosts and NodePorts
+- Everything you need to know about network connectivity, including:
+ * Pod Connectivity Fundamentals
+ * Calico’s Next Generation eBPF Dataplane
+ * Encrypting Data in Transit
+ * Fun with IP Address Management
+ * Peering with BGP
+- Everything you need to know about Kubernetes Services, including:
+ * Introduction to Kubernetes Services
+ * Understanding Kube-Proxy Service Handling
+ * Understanding Calico Native Service Handling
+ * Advertising Services
+
+# Free certification
+
+At the end of the course, you can earn a certificate by passing a final exam.
+
+[![](/assets/images/posts/2021-01-05-calico/2.png)](https://courses.academy.tigera.io/certificates/90b9e57cdec7460b8243401246da2e67)
diff --git a/_posts/2021-01-09-shift-multicloud-2.md b/_posts/2021-01-09-shift-multicloud-2.md
new file mode 100644
index 0000000000..2ed2ecffd0
--- /dev/null
+++ b/_posts/2021-01-09-shift-multicloud-2.md
@@ -0,0 +1,56 @@
+---
+title: "FIAP SHIFT: Multicloud Architecture - 2nd edition"
+last_modified_at: 2021-01-09T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-01-09-shift-multicloud-2.png)](https://www.fiap.com.br/shift/curso/tecnologia/multicloud-architecture-development-solutions-service-online)
+
+A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços.
+
+Além de ser uma solução inovadora, a Cloud também é um modelo de negócio relativamente novo, aplicável a qualquer tipo de empresa. Nosso foco é formar o profissional para dominar modelos de serviços de Computação em Nuvem (SaaS, PaaS, IaaS), modelos de implantação em Nuvem (privado, público, híbrido e multicloud) e economia em Nuvem. Tudo isso por meio de atividades hands-on na Amazon Web Services (AWS).
+
+## Para quem?
+Profissionais de TI (analistas, especialistas e gestores) que atuam nas áreas de Cloud, Virtualização e/ou DevOps.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Benefício Amazon
+
+Cada aluno vai receber US$ 50 em créditos para usar em laboratórios no ambiente Amazon, durante e após o curso.
+
+## Shift remoto
+Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ * Virtualização
+ * Modelos de serviço
+ * Segurança em nuvem / Modelo de responsabilidade compartilhada
+ * Modelos de implementação
+ * Multicloud
+ * Economia e faturamento da nuvem
+ * Arquitetura de nuvem / Desenvolvimento de aplicações para a nuvem
+ - Módulo 2: Infraestrutura como serviço (IaaS)
+ * Instanciação de máquinas virtuais
+ * Autoscaling
+ * Infraestrutura de armazenamento: block/object/file storage
+ * Containers
+ * Orquestração de containers
+ * Arquitetura de microserviços
+ - Módulo 3: Plataforma como serviço (PaaS)
+ * Automação e entrega contínua (CI/CD)
+ * Pipeline DevOps
+ * DBaaS SQL/NoSQL
+ * Function as a Service
+ * Arquiteturas serverless
\ No newline at end of file
diff --git a/_posts/2021-02-05-aviatrix.md b/_posts/2021-02-05-aviatrix.md
new file mode 100644
index 0000000000..54dcbd0096
--- /dev/null
+++ b/_posts/2021-02-05-aviatrix.md
@@ -0,0 +1,62 @@
+---
+title: "Aviatrix Certified Engineer - Multicloud"
+last_modified_at: 2021-08-16T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - cert
+ - en
+ - iac
+ - networks
+ - sdn
+ - terraform
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-02-05-aviatrix/1.png)](https://aviatrix.com/)
+
+I would like to strongly recomend the [Aviatrix Certified Engineer - Multi-Cloud Network Associate Course](https://aviatrix.com/ace-multicloud-networking-training/) for anyone interested in public cloud networking (in AWS, Azure, GCP and OCI) and multicloud arquitecture.
+
+Training and exam are free using code **ACEHOLIDAY** through February 28th.
+
+**UPDATE 1**: Training and exam are free using code **ACEMULTICLOUD** through September 30th.
+
+
+# What the Course Covers
+ - Introduction
+ * Introductory Survey
+ * About ACE Associate Training
+ * About Aviatrix
+ - Public Cloud Networking
+ * Networking Principles in the Cloud
+ * AWS Networking 101
+ * Azure Networking 101
+ * GCP Networking 101
+ * OCI Networking 101
+ - Multi-Cloud Network Architecture
+ * What is the MCNA?
+ - Aviatrix Platform
+ * Feature Overview - Part 1
+ * Feature Overview - Part 2
+ - Operations, Visibility, and Troubleshooting
+ * Day 2 Operations
+ * CoPilot Demo
+ * Aviatrix Controller Deployment
+ - Customer Case Study
+ * Real Aviatrix Customer Walk-Through - Single Region
+ * Real Aviatrix Customer Walk-Through - Multi-Region Multi-Cloud
+ - Conclusion
+ * Course Feedback Survey
+ * How to take the Exam
+ * Scheduling the Exam
+
+# Free certification
+
+At the end of the course, you can earn a certificate by scheduling and passing a final exam.
+
+![](/assets/images/posts/2021-02-05-aviatrix/2.png)
+
+![](/assets/images/posts/2021-02-05-aviatrix/3.png)
+
+
\ No newline at end of file
diff --git a/_posts/2021-02-09-hcia-5g.md b/_posts/2021-02-09-hcia-5g.md
new file mode 100644
index 0000000000..a4b995c30e
--- /dev/null
+++ b/_posts/2021-02-09-hcia-5g.md
@@ -0,0 +1,44 @@
+---
+title: "HCIA 5G - 1st edition"
+last_modified_at: 2021-02-09T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - iot
+ - networks
+ - nfv
+ - pt
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2021-02-09-hcia-5g/1.png)](https://www.imd.ufrn.br/portal/visualizar/252)
+
+## PROCESSO SELETIVO PARA CURSO DE FORMAÇÃO HCIA 5G - Turma 01/2021
+
+Oportunidade ímpar à comunidade: formação GRATUITA para certificação em redes 5G. A Coordenação do projeto [Instituto Metrópole Digital](https://www.imd.ufrn.br/) - [UFRN](https://www.ufrn.br/) – **5G Training RN** abre inscrições para o processo seletivo para participação na primeira turma do curso de formação HCIA 5G, promovido em parceria entre o [IMD](https://www.imd.ufrn.br/) e a [Huawei Technologies Co. LTD](https://www.huawei.com/br/).
+
+Período do Processo: **09/02/2021 - 01/03/2021**
+
+Link do edital: [https://www.imd.ufrn.br/portal/visualizar/252](https://www.imd.ufrn.br/portal/visualizar/252)
+
+## IMD abre 100 vagas para curso online sobre redes celulares 5G
+
+Assunto amplamente discutido em todo o mundo, as redes celulares de quinta geração (5G) é o tema do mais novo curso de formação do Instituto Metrópole Digital (IMD/UFRN). Fruto de parceria internacional com a gigante tecnológica Huawei, o projeto, intitulado de “5G Training RN”, está com 100 vagas abertas, mais cadastro reserva, para aulas online e gratuitas.
+
+Com inscrições abertas até o dia 21 deste mês, disponíveis por meio do link, o processo seletivo é aberto a qualquer pessoa, desde que esta tenha cursado, pelo menos, mais de uma disciplina relacionada a redes de computadores ou telecomunicações em cursos técnicos ou de graduação.
+
+O projeto oferecerá aulas com o intuito de capacitar os alunos para a prova de certificação HCIA 5G da Huawei – exame cuja aprovação qualifica profissionais em diferentes áreas e garante a estes certificados emitidos pela própria multinacional chinesa.
+
+Para se inscrever no processo, não é necessário estar matriculado em instituição de ensino específica e as vagas, dado o ensino remoto, podem ser preenchidas por candidatos oriundos de qualquer lugar do Brasil. O curso também tem como alvo profissionais da área de redes e telecomunicações e terá duração de dois meses e meio, indo de março até maio deste ano.
+
+[![](/assets/images/posts/2021-02-09-hcia-5g/3.jpg)](https://www.imd.ufrn.br/portal/visualizar/252)
+
+## Seleção
+
+Regido pelo [Edital nº 008/2021](https://imd.ufrn.br/portal/visualizar/252), o processo de seleção consistirá em avaliação de documentação comprobatória. Dentre os quesitos a serem avaliados, encontram-se experiência de atuação profissional, formação acadêmica e certificações diversas em tecnologia.
+
+O resultado final será divulgado no dia 27 deste mês, por meio do portal do IMD, na aba “Editais”. As matrículas estão previstas para acontecer até o dia 05 de março.
+
+![](/assets/images/posts/2021-02-09-hcia-5g/2.jpeg)
\ No newline at end of file
diff --git a/_posts/2021-02-18-azure1-vm.md b/_posts/2021-02-18-azure1-vm.md
new file mode 100644
index 0000000000..56c82532b4
--- /dev/null
+++ b/_posts/2021-02-18-azure1-vm.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series I: Virtual machines"
+last_modified_at: 2021-02-18T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab01-iaas-vm.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-02-20-azure2-container.md b/_posts/2021-02-20-azure2-container.md
new file mode 100644
index 0000000000..5546bf2753
--- /dev/null
+++ b/_posts/2021-02-20-azure2-container.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series II: Containers"
+last_modified_at: 2021-02-20T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab02-iaas-container.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-02-22-azure3-disk.md b/_posts/2021-02-22-azure3-disk.md
new file mode 100644
index 0000000000..33776162b2
--- /dev/null
+++ b/_posts/2021-02-22-azure3-disk.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series III: Disks"
+last_modified_at: 2021-02-22T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab03-iaas-disk.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-02-25-fiap-abd.md b/_posts/2021-02-25-fiap-abd.md
new file mode 100644
index 0000000000..1a0bec7cb7
--- /dev/null
+++ b/_posts/2021-02-25-fiap-abd.md
@@ -0,0 +1,14 @@
+---
+title: "FIAP MBA em Engenharia de Dados (ABD)"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/abd/README.md %}
+
diff --git a/_posts/2021-02-26-aws13-rds.md b/_posts/2021-02-26-aws13-rds.md
new file mode 100644
index 0000000000..f62064f896
--- /dev/null
+++ b/_posts/2021-02-26-aws13-rds.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series XIII: Relational Database Service (RDS)"
+last_modified_at: 2021-02-26T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/abd/dbaas/lab05-paas-rds.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-03-02-azure4-blob.md b/_posts/2021-03-02-azure4-blob.md
new file mode 100644
index 0000000000..f3a7206412
--- /dev/null
+++ b/_posts/2021-03-02-azure4-blob.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series IV: Blob storage"
+last_modified_at: 2021-03-02T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab04-iaas-blob.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-03-09-azure5-app.md b/_posts/2021-03-09-azure5-app.md
new file mode 100644
index 0000000000..11fa3af13a
--- /dev/null
+++ b/_posts/2021-03-09-azure5-app.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series V: App services"
+last_modified_at: 2021-03-09T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab05-paas-app.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-03-10-shift-aws-foundations-3.md b/_posts/2021-03-10-shift-aws-foundations-3.md
new file mode 100644
index 0000000000..5250c0b0b5
--- /dev/null
+++ b/_posts/2021-03-10-shift-aws-foundations-3.md
@@ -0,0 +1,47 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 3rd edition"
+last_modified_at: 2021-03-10T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-03-10-shift-aws-foundations-3.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **04/05** e **08/06**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2021-03-20-aws6-cloudformation.md b/_posts/2021-03-20-aws6-cloudformation.md
new file mode 100644
index 0000000000..af6dbb195e
--- /dev/null
+++ b/_posts/2021-03-20-aws6-cloudformation.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series VI: CloudFormation"
+last_modified_at: 2021-03-20T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab14-iaas-cloudformation.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-03-22-hcia-5g-2.md b/_posts/2021-03-22-hcia-5g-2.md
new file mode 100644
index 0000000000..aac8bf4e32
--- /dev/null
+++ b/_posts/2021-03-22-hcia-5g-2.md
@@ -0,0 +1,30 @@
+---
+title: "HCIA 5G - 2nd edition"
+last_modified_at: 2021-03-22T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - iot
+ - networks
+ - nfv
+ - pt
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2021-03-22-hcia-5g-2/0.jpeg)](https://imd.ufrn.br/portal/visualizar/260)
+
+A Coordenação do projeto **IMD/UFRN – 5G Training RN** abre inscrições para o processo seletivo para participação na segunda turma do curso de formação HCIA 5G, promovido em parceria entre o [IMD](https://www.imd.ufrn.br/) e a [Huawei Technologies Co. LTD](https://www.huawei.com/br/). São 100 vagas disponíveis, gratuito e a distância.
+
+Venha obter formação gratuita em 5G, a tecnologia que irá revolucionar o mundo, e se posicionar fortemente no mercado a partir da certificação Huawei HCIA.
+
+Edital de seleção em: [https://lnkd.in/esyWARY](https://lnkd.in/esyWARY)
+
+![](/assets/images/posts/2021-03-22-hcia-5g-2/1.png)
+
+As inscrições terão início no dia 23 de março e se estenderão até 12 de abril, podendo ser realizadas através do preenchimento de [formulário online](https://docs.google.com/forms/d/e/1FAIpQLScV2K23q24iJfHiK-wdSkFKxEtPauetcOHeWH_xWyxKDc5YRw/viewform), juntamente com envio dos anexos solicitados no edital. O curso é aberto a qualquer pessoa que tenha conhecimento comprovado em Redes de Comunicação e/ou telecomunicações. Os critérios para tal comprovação são detalhados no [edital do processo seletivo (nº 015/2021)](https://imd.ufrn.br/portal/visualizar/260).
+
+A seleção consistirá em avaliação de documentação comprobatória. Dentre os quesitos a serem analisados, encontram-se experiência de atuação profissional, formação acadêmica e certificações diversas em tecnologia. O resultado final será divulgado a partir do dia 16 de abril, por meio do portal do IMD, na aba “Editais”. As matrículas estão previstas para acontecer até 23 de abril.
+
+![](/assets/images/posts/2021-02-09-hcia-5g/2.jpeg)
\ No newline at end of file
diff --git a/_posts/2021-03-23-azure6-pipeline.md b/_posts/2021-03-23-azure6-pipeline.md
new file mode 100644
index 0000000000..74c1871f7e
--- /dev/null
+++ b/_posts/2021-03-23-azure6-pipeline.md
@@ -0,0 +1,23 @@
+---
+title: "Azure series VI: Azure Pipeline"
+last_modified_at: 2021-03-23T16:00:58-04:00
+tags:
+ - azure
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#azure) sobre Microsoft Azure.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/net/devops/lab06-paas-pipeline.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-03-25-rh-summit21.md b/_posts/2021-03-25-rh-summit21.md
new file mode 100644
index 0000000000..f4d6c95b13
--- /dev/null
+++ b/_posts/2021-03-25-rh-summit21.md
@@ -0,0 +1,15 @@
+---
+title: "Red Hat Summit 2021"
+last_modified_at: 2021-03-25T16:00:58-04:00
+tags:
+ - ansible
+ - events
+ - openshift
+ - pt
+ - redhat
+toc: false
+---
+
+[![](/assets/images/posts/2021-03-25-rh-summit21.jpeg)](https://red.ht/3vyU5Wv)
+
+Chegou o **Red Hat Summit 2021**, agora em série. Registre-se agora sem custo e aproveite as oportunidades de inovação, colaboração e aprendizagem que só o principal evento de código aberto do mundo pode oferecer. Inscreva-se já: [https://red.ht/3vyU5Wv](https://red.ht/3vyU5Wv) #RHSummit
\ No newline at end of file
diff --git a/_posts/2021-03-26-hcia-15.md b/_posts/2021-03-26-hcia-15.md
new file mode 100644
index 0000000000..ef325b09e6
--- /dev/null
+++ b/_posts/2021-03-26-hcia-15.md
@@ -0,0 +1,29 @@
+---
+title: "HCIA-Routing & Switching - 15th edition"
+last_modified_at: 2021-03-26T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2021-03-26-hcia-15/1.png)](https://www.sympla.com.br/15-treinamento-em-tecnologia-da-informacao-e-comunicacao---conv-usp---huawei---hcia__1157952)
+
+Informamos que estão abertas as inscrições do **15.º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Routing & Switching V2.5** até o dia 26/11/2020 às 12h, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/15-treinamento-em-tecnologia-da-informacao-e-comunicacao---conv-usp---huawei---hcia__1157952).
+
+O curso ocorrerá dos dias 27/03/21 à 17/04/21, das 9h00 as 17h00 sempre aos sábados.
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
\ No newline at end of file
diff --git a/_posts/2021-04-08-azure-fundamentals.md b/_posts/2021-04-08-azure-fundamentals.md
new file mode 100644
index 0000000000..f716166e35
--- /dev/null
+++ b/_posts/2021-04-08-azure-fundamentals.md
@@ -0,0 +1,94 @@
+---
+title: "Microsoft Azure Virtual Training Days"
+last_modified_at: 2021-11-26T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-08-azure-fundamentals/1.png)](https://www.microsoft.com/en-us/trainingdays)
+
+By participating in any of the following [Microsoft Virtual Training Days](https://www.microsoft.com/en-us/trainingdays):
+ - Microsoft Azure Virtual Training Day: **Fundamentals**
+ - Microsoft Azure Virtual Training Day: **Data Fundamentals**
+ - Microsoft Azure Virtual Training Day: **AI Fundamentals**
+
+You’ll be eligible to take the following certifications exam at no cost:
+ - [Microsoft Azure Fundamentals (AZ-900)](https://docs.microsoft.com/en-us/learn/certifications/exams/az-900)
+ - [Microsoft Azure Data Fundamentals (DP-900)](https://docs.microsoft.com/en-us/learn/certifications/exams/dp-900)
+ - [Microsoft Azure AI Fundamentals (AI-900)](https://docs.microsoft.com/en-us/learn/certifications/exams/ai-900)
+
+![](/assets/images/posts/2021-04-08-azure-fundamentals/2.png)
+
+# Azure Fundamentals
+
+In this introductory course you will learn about cloud-computing concepts, models, and services, covering topics such as public, private, and hybrid cloud as well as infrastructure as a service, platform as a service, and software as a service.
+
+## Course Objectives
+ - Get started with Azure
+ - Integrate Azure with your existing networks
+ - Better understand key cloud concepts and core services, including pricing, support, and cloud security
+
+## Content
+ - Introduction
+ - Azure Cloud Concepts
+ - Core Azure Services
+ - Azure Solutions and Management Tools
+ - Azure Security and Network Security
+ - Identity, governance, privacy and compliance
+ - Azure Pricing and Lifestyle
+ - Closing Q&A
+
+# Data Fundamentals
+
+Learn the fundamentals of core database concepts in a cloud environment. Join us at Microsoft Azure Virtual Training Day: Data Fundamentals to build your foundational knowledge of cloud data services. Explore relational and non-relational data offerings as well as big data and modern data warehouse analytics solutions in Azure.
+
+## Course Objectives
+ - Learn the roles, tasks, and responsibilities involved in managing data in a cloud environment.
+ - Gain basic skills for working with relational and non-relational cloud data services in Azure, including provisioning and deploying relational and non-relational databases.
+ - Explore processing options for building data analytics solutions, including Azure Synapse Analytics, Azure Databricks, and Azure HDInsight.
+
+## Content
+ - Introduction
+ - Explore Core Data Concepts
+ - Explore Relational Data in Azure
+ - Explore Non-relational Data in Azure
+ - Explore modern data warehouse analytics in Azure
+ - Closing Q&A
+
+# AI Fundamentals
+
+Discover the solutions it’s possible to create with AI and the Azure services that can help you build those solutions. Join the free Microsoft Azure Virtual Training Day: AI Fundamentals to explore fundamental AI concepts and learn how to get started with AI on Azure.
+
+## Course Objectives
+ - Get an overview of basic AI concepts and applications.
+ - Create no-code predictive models with Azure Machine Learning.
+ - Learn more about conversational AI, natural language processing, and computer vision in Microsoft Azure.
+
+## Content
+ - Introduction
+ - Introduction to AI
+ - Machine Learning
+ - Computer Vision
+ - Natural Language Processing
+ - Conversational AI
+ - Closing Q&A
+
+# Free certification
+
+After completing this free trainings you’ll be eligible to take the certifications exam at no cost.
+
+![](/assets/images/posts/2021-04-08-azure-fundamentals/3.png)
+
+
+
+![](/assets/images/posts/2021-04-08-azure-fundamentals/4.png)
+
+
+
+![](/assets/images/posts/2021-04-08-azure-fundamentals/5.png)
+
+
\ No newline at end of file
diff --git a/_posts/2021-04-13-kafka.md b/_posts/2021-04-13-kafka.md
new file mode 100644
index 0000000000..097263fda5
--- /dev/null
+++ b/_posts/2021-04-13-kafka.md
@@ -0,0 +1,87 @@
+---
+title: "Confluent Fundamentals Accreditation - Apache Kafka"
+last_modified_at: 2021-04-13T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-13-kafka/1.png)](https://www.confluent.io/)
+
+I would like to strongly recomend the [Confluent Fundamentals for Apache Kafka®](https://cloud.contentraven.com/confluent/self-userpackage) course and [Confluent Fundamentals Accreditation](https://cloud.contentraven.com/confluent/self-userpackage) certification for anyone interested learning more about the [Apache Kafka project](https://kafka.apache.org/).
+
+Training and exam certification are free.
+
+
+# Course Objectives
+
+ - Gain an understanding of Apache Kafka® and the Confluent Platform
+ - Explore use cases
+ - Receive an overview of Kafka’s core concepts that enable it to power a highly scalable, highly available and resilient real-time event streaming platform
+ - Be introduced to the Confluent Platform, offering an enterprise-ready, real-time event streaming platform powered by Apache Kafka®
+ - Begin preparation to attend Apache Kafka® Administration by Confluent and/or the Confluent Developer Skills for Building Apache Kafka® training courses.
+
+# Content
+
+ - Motivation and Customer Use Cases
+ - Motivation for a paradigm change to “Event-driven”
+ - How Kafka is the backbone of real-time event streaming
+ - How other major players in the market use Kafka
+ - Customer Use Cases
+ - Microservices, IoT and Edge Computing
+ - Core Banking, payments engine and fraud detection
+ - Cyber Data Collection and Dissemination
+ - ESB Replacement
+ - Data Pipelining
+ - eCommerce and Customer 360
+ - Mainframe offloading
+ - Apache Kafka® Fundamentals
+ - Architecture
+ - ZooKeeper’s role
+ - Topics, Partitions and Segments
+ - The commit log and streams
+ - Brokers and Broker replication
+ - Producers Basics
+ - Consumers, Consumer groups and Offsets
+ - How Kafka Works
+ - High-level code overview for a basic producer and a basic consumer
+ - High Availability through Replication
+ - Data Retention Policies
+ - Producer Design and Producer Guarantees
+ - Delivery Guarantees, including Exactly Once Semantic
+ - Partition strategies
+ - Consumer group rebalances
+ - Compacted Topics
+ - Troubleshooting strategies
+ - Security overview
+ - Integrating Kafka into your Environment
+ - Get streams of data into and out of Kafka with Kafka Connect and REST Proxy
+ - Maintain data formats and ensure compatibility with Schema Registry and Avro
+ - Build real-time streaming applications with Confluent ksqlDB & Kafka Streams
+ - The Confluent Platform
+ - The Streaming Platform as the Central Nervous System
+ - Deployment Models — on premise versus SaaS
+ - The Confluent Control Center
+ - Role Based Access Control (RBAC)
+ - The Confluent CLI
+ - Confluent Operator
+ - The Confluent Hub for Certified Connectors
+
+# Free certification
+
+At the end of the course, you can earn a badge by passing a final exam.
+
+![](/assets/images/posts/2021-04-13-kafka/2.png)
+
+
\ No newline at end of file
diff --git a/_posts/2021-04-17-onf-webinar-21.md b/_posts/2021-04-17-onf-webinar-21.md
new file mode 100644
index 0000000000..9fc9b6ff82
--- /dev/null
+++ b/_posts/2021-04-17-onf-webinar-21.md
@@ -0,0 +1,53 @@
+---
+title: "Webinar: Working with ONF to transform mobile and broadband networks in LATAM 2021"
+last_modified_at: 2021-04-17T16:00:58-04:00
+tags:
+ - en
+ - es
+ - events
+ - networks
+ - nfv
+ - onf
+ - pt
+ - sdn
+ - webinar
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-17-onf-webinar-21.png)](https://opennetworking.org/events/working-with-onf-to-transform-mobile-and-broadband-networks-in-latam-2/)
+
+Don’t miss this virtual event sponsored by the ONF CALA Ambassador team. In this webinar you will learn about the [Open Networking Foundation (ONF)](https://opennetworking.org/), a non-profit, operator-led consortium that is focused on driving transformation of network infrastructure and carrier business models around the world. The ONF serves as the umbrella for a number of projects building solutions for mobile and broadband operators by leveraging network disaggregation, white box economics and open source software to revolutionize the carrier industry.
+
+## Agenda
+
+ - Introduction
+ - Who is ONF
+ - ONF CALA Team
+ - ONF Open Source Project Ecosystem
+ - [**Stratum**](https://opennetworking.org/stratum/): thin switch implementing next generation SDN interfaces.
+ - [**Trellis**](https://opennetworking.org/trellis/): multi-purpose leaf-spine fabric supporting distributed access networks, NFV and edge cloud applications.
+ - [**ODTN**](https://opennetworking.org/odtn/): open and disaggregated source data center interconnect solution.
+ - [**SEBA**](https://opennetworking.org/seba/): lightweight platform that supports a multitude of virtualized access technologies at the edge of the carrier network, including PON, G.Fast and eventually DOCSIS and more.
+ - [**SD-RAN**](https://opennetworking.org/sd-ran/): Complementary to the O-RAN architecture, it includes a near-real-time RIC (nRT-RIC) and a set of exemplar xApps for controlling the RAN.
+ - [**Aether**](https://opennetworking.org/aether/): the first open source 5G Connected Edge platform for enabling enterprise digital transformation.
+ - Q&As
+
+Join us to learn about ONF and these open source projects and how you can participate in the community. Note that the information covered in both of these webinars will be the same – one will be in Spanish and the other Portuguese.
+
+## Sign-up Now for Live Webinar
+
+May 11, 11:00am (GMT-5) – in Spanish – [REGISTER NOW](https://onf.zoom.us/webinar/register/WN_xpGZAVp4QDGzWK68wiDDtw)
+
+May 13, 11:00am (GMT-3) – in Portuguese – [REGISTER NOW](https://onf.zoom.us/webinar/register/WN_qndVbNQFTe6BvmScb7LhDg)
+
+## CALA Ambassador Speakers
+
+ - [Fernando Cerioni](https://opennetworking.org/ambassadors/fernando-cerioni/)
+ - [Amanda Espindola](https://opennetworking.org/ambassadors/amanda-espindola/)
+ - [Jose Lema](https://opennetworking.org/ambassadors/jose-castillo-lema/)
+ - [Andres Madero](https://opennetworking.org/ambassadors/andres-madero/)
+ - [Rony Pedroso](https://opennetworking.org/ambassadors/rony-a-spada-pedroso/)
+ - [Ricardo Tombi](https://opennetworking.org/ambassadors/ricardo-tombi/)
+ - [Freddy Turriaf](https://opennetworking.org/ambassadors/freddy-turriaf/)
+
diff --git a/_posts/2021-04-23-gitlab.md b/_posts/2021-04-23-gitlab.md
new file mode 100644
index 0000000000..7821169890
--- /dev/null
+++ b/_posts/2021-04-23-gitlab.md
@@ -0,0 +1,54 @@
+---
+title: "GitLab Certified Associate"
+last_modified_at: 2021-08-01T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-23-gitlab.png)](https://gitlab.com/)
+
+Usually priced at USD $650 it's available for free until April 30, 2021.
+
+Steps required:
+
+ 1. Create account on the [GitLab Learn platform](https://gitlab.edcast.com/)
+ 1.1 purple login button
+ 1.2 purple signup button
+ 2. Add the [associate test pathway](https://gitlab.edcast.com/pathways/cy-test-pathway-associate-study-exam/) to the basket
+ 3. In Payment step apply discount code `E6B8A234458AE3D795`
+
+Once signed up you have one year time for completion.
+
+More info [here](https://about.gitlab.com/blog/2021/04/20/everyone-can-get-certified/).
+
+# Course contents
+
+## Section 1 - Introduction to GitLab
+
+ - GitLab Overview
+ - GitLab Comparison
+ - GitLab Components and Navigation
+ - Demos and Hands On Excercises
+
+## Section 2 - Self Study using GIT and GitLab
+
+ - Git Basics
+ - Code Creation in GitLab
+ - GitLabs CI/CD features
+ - GitLabs Package and Release Functions
+ - GitLab Security Scanning
+
+## Section 3 - Certification Assesments
+
+ - Knowledge Exam
+ - Hands On Exam
+
+# Certification
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2021-04-27-power-fundamentals.md b/_posts/2021-04-27-power-fundamentals.md
new file mode 100644
index 0000000000..4084eb204c
--- /dev/null
+++ b/_posts/2021-04-27-power-fundamentals.md
@@ -0,0 +1,44 @@
+---
+title: "Microsoft Power Platform Virtual Training Day"
+last_modified_at: 2022-04-14T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-08-azure-fundamentals/1.png)](https://www.microsoft.com/en-us/trainingdays)
+
+By participating in the following [Microsoft Virtual Training Days](https://www.microsoft.com/en-us/trainingdays):
+ - Microsoft Power Platform Virtual Training Day: Fundamentals
+
+You’ll be eligible to take the following certification exam at no cost:
+ - [Microsoft Certified: Power Platform Fundamentals (PL-900)](https://docs.microsoft.com/en-us/learn/certifications/exams/pl-900)
+
+
+# Power Platform Fundamentals
+
+Microsoft Power Platform Virtual Training Day: Fundamentals will cover everything you need to know about building and managing innovative business solutions so your organisation is ready for whatever comes next. You’ll discover how to connect your data to analyse real-time business performance, act on data and insights with custom-built apps, and automate workflows to improve how people work, both remotely and in the office. This training will teach you how to create innovative, future-proof solutions for an evolving business environment.
+
+## Course Objectives
+ - Prepare for the Microsoft Power Platform Fundamentals certification exam
+ - Build and manage innovative business solutions with Power Platform
+ - Easily connect all your data to analyse business performance with custom-built apps
+ - Automate workflows to improve daily processes, regardless of your technical expertise
+
+## Content
+ - Introduction
+ - Introduction to Microsoft Power Platform
+ - Introduction to Microsoft Power Apps and Common Data Services
+ - Build simple Power Apps
+ - Leverage Microsoft Power Automate
+ - Leverage Microsoft Power BI
+ - Closing Q&A
+
+# Free certification
+
+After completing this free training you’ll be eligible to take the certifications exam at no cost.
+
+
\ No newline at end of file
diff --git a/_posts/2021-05-10-hcia-ia-notes.md b/_posts/2021-05-10-hcia-ia-notes.md
new file mode 100644
index 0000000000..012b4ad568
--- /dev/null
+++ b/_posts/2021-05-10-hcia-ia-notes.md
@@ -0,0 +1,40 @@
+---
+title: "Notes for HCIA-IA"
+last_modified_at: 2021-05-10T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - huawei
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-05-10-hcia-ia-notes/0.png)](https://e.huawei.com/en/talent/#/cert/product-details?certifiedProductId=345&authenticationLevel=CTYPE_CARE_HCIA&technicalField=PSC&version=3.0)
+
+Some of the notes I prepared studying for the [Huawei Certified ICT Associate - Artificial Intelligence (HCIA-IA)](https://e.huawei.com/en/talent/#/cert/product-details?certifiedProductId=345&authenticationLevel=CTYPE_CARE_HCIA&technicalField=PSC&version=3.0) exam.
+
+# Notes
+
+## Deep learning
+
+I used the [Coggle platform](https://coggle.it), a collaborative mind maps & flow charts tool.
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/1.png)
+
+## Huawei Cloud Enterprise Intelligent (EI) Services
+
+These were made by my studying collegues using [Miro](https://miro.com/), an online visual collaboration platform for teamwork.
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/2.png)
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/3.png)
+
+## Huawei Open AI (HiAI) Platform for Smart Devices
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/4.png)
+
+# Certification
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/5.png)
+
+![](/assets/images/posts/2021-05-10-hcia-ia-notes/6.png)
diff --git a/_posts/2021-05-11-shift-multicloud-3.md b/_posts/2021-05-11-shift-multicloud-3.md
new file mode 100644
index 0000000000..4e4e9feffe
--- /dev/null
+++ b/_posts/2021-05-11-shift-multicloud-3.md
@@ -0,0 +1,54 @@
+---
+title: "FIAP SHIFT: Multicloud Architecture - 3rd edition"
+last_modified_at: 2021-05-11T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-05-11-shift-multicloud-3.png)](https://www.fiap.com.br/shift/curso/tecnologia/multicloud-architecture-development-solutions-service-online)
+
+A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços.
+
+Além de ser uma solução inovadora, a Cloud também é um modelo de negócio relativamente novo, aplicável a qualquer tipo de empresa. Nosso foco é formar o profissional para dominar modelos de serviços de Computação em Nuvem (SaaS, PaaS, IaaS), modelos de implantação em Nuvem (privado, público, híbrido e multicloud) e economia em Nuvem. Tudo isso por meio de atividades hands-on na Amazon Web Services (AWS).
+
+## Para quem?
+Profissionais de TI (analistas, especialistas e gestores) que atuam nas áreas de Cloud, Virtualização e/ou DevOps.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Benefício Amazon
+
+Cada aluno vai receber US$ 50 em créditos para usar em laboratórios no ambiente Amazon, durante e após o curso.
+
+## Shift remoto
+Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ * Virtualização
+ * Modelos de serviço
+ * Segurança em nuvem / Modelo de responsabilidade compartilhada
+ * Modelos de implementação
+ * Multicloud
+ * Economia e faturamento da nuvem
+ * Arquitetura de nuvem / Desenvolvimento de aplicações para a nuvem
+ - Módulo 2: Infraestrutura como serviço (IaaS)
+ * Instanciação de máquinas virtuais
+ * Autoscaling
+ * Infraestrutura de armazenamento: block/object/file storage
+ * Containers
+ * Orquestração de containers
+ * Arquitetura de microserviços
+ - Módulo 3: Plataforma como serviço (PaaS)
+ * Automação e entrega contínua (CI/CD)
+ * Pipeline DevOps
+ * DBaaS SQL/NoSQL
+ * Function as a Service
+ * Arquiteturas serverless
\ No newline at end of file
diff --git a/_posts/2021-05-14-hcia-16.md b/_posts/2021-05-14-hcia-16.md
new file mode 100644
index 0000000000..da82bfa84f
--- /dev/null
+++ b/_posts/2021-05-14-hcia-16.md
@@ -0,0 +1,27 @@
+---
+title: "HCIA-Routing & Switching - 16th edition"
+last_modified_at: 2021-07-09T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2021-05-14-hcia-16.jpeg)](https://www.sympla.com.br/16-treinamento-em-tecnologia-da-informacao-e-comunicacao---conv-usp---huawei---hcia__1215160)
+
+Informamos que estão abertas as inscrições do **16º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Routing & Switching V2.5**, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/16-treinamento-em-tecnologia-da-informacao-e-comunicacao---conv-usp---huawei---hcia__1215160).
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
\ No newline at end of file
diff --git a/_posts/2021-05-15-aws-community-builder.md b/_posts/2021-05-15-aws-community-builder.md
new file mode 100644
index 0000000000..fad2b046c4
--- /dev/null
+++ b/_posts/2021-05-15-aws-community-builder.md
@@ -0,0 +1,30 @@
+---
+title: "AWS Community Builder"
+last_modified_at: 2021-05-15T16:00:58-04:00
+tags:
+ - aws
+ - en
+toc: true
+toc_sticky: true
+---
+
+
+## AWS Community Builders program
+[![](/assets/images/posts/2021-05-15-aws-community-builder.png)](https://aws.amazon.com/developer/community/community-builders/)
+
+I am glad to be part of the [AWS Community Builders program](https://aws.amazon.com/developer/community/community-builders/). The program offers technical resources, mentorship, and networking opportunities to AWS enthusiasts and emerging thought leaders who are passionate about sharing knowledge and connecting with the technical community.
+
+Throughout the program, subject matter experts will provide mentorship and share insights, including information about the latest services, as well as best practices for creating technical content, increasing reach, and sharing AWS knowledge across online and in-person communities. The program will accept a limited number of members per year. All AWS builders are welcome and encouraged to apply.
+
+Program members are expected to participate in mentorship opportunities, continue to share or produce educational and technical content, actively engage with and help build the AWS community, and demonstrate continued interest in learning more about AWS.
+
+The AWS Community Builders Directory can be found [here](https://aws.amazon.com/developer/community/community-builders/community-builders-directory/?cb-cards.sort-by=item.additionalFields.cbName&cb-cards.sort-order=asc&awsf.builder-category=cb-type%23containers&awsf.location=location%23latam&awsf.year=*all).
+
+## Benefits of joining the program
+
+ - Access to AWS product teams and information about new services and features
+ - Mentorship from AWS subject matter experts on a variety of topics
+ - AWS Promotional Credits and other helpful resources to support content creation
+ - Opportunities to connect with and learn from like-minded developers
+
+
diff --git a/_posts/2021-05-18-gitops-summit-21.md b/_posts/2021-05-18-gitops-summit-21.md
new file mode 100644
index 0000000000..54bb497efa
--- /dev/null
+++ b/_posts/2021-05-18-gitops-summit-21.md
@@ -0,0 +1,45 @@
+---
+title: "GitOps Summit 2021"
+last_modified_at: 2021-05-18T16:00:58-04:00
+tags:
+ - en
+ - events
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-05-18-gitops-summit-21.png)](https://events.linuxfoundation.org/gitops-summit/)
+
+## Virtual Experience
+
+**June 22, 2021**
+
+**#GitOpsSummit**
+
+Cloud native technologies enable organizations to scale rapidly and deliver software faster than ever before. GitOps, operation by pull request, is a powerful developer workflow that enables organizations to unlock the promise of cloud native continuous delivery. The GitOps Summit brings together topflight talent to give you a greater understanding of GitOps, share insights into the evolving tools landscape and help you figure out the best approach for adopting GitOps.
+
+Scaling from 2 deployments a day to 200, rapid cluster recovery, complete audit trails – these are some of the benefits shared by teams who adopt a GitOps approach. An emerging paradigm, GitOps teams also need to understand secrets management, scaling challenges and how to tackle adopting best practices. Join us at the GitOps Summit to learn more in this 1-day deep dive.
+
+The GitOps Summit is hosted by the [Continuous Delivery Foundation (CDF)](https://cd.foundation/) and the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/) and will be co-located with [cdCon](https://events.linuxfoundation.org/cdcon/).
+
+## Agenda
+
+ - Best Practices for Secret Management with GitOps - Kara de la Marck, CloudBees
+ - Combining Progressive Delivery With GitOps And Continuous Delivery - Viktor Farcic, Codefresh
+ - GitOps: Yea or Nay? - Ricardo Castro, DefinedCrowd
+ - Level Unlocked: GitOps to the Edge and Infrastructure Provisioning - Katie Gamanji, The Linux Foundation
+ - Keynote Panel: Why GitOps? - Tracy Ragan, DeployHub; Dan Garfield, Codefresh; Cornelia Davis, Weaveworks; Moderated by Dan Lorenc, Google
+ - ReleaseOps: GitOps for the People - Lian Li, Container Solutions
+ - Managing Storage via GitOps - Christian Hernandez, Red Hat
+ - The SAME Project: A GitOps Approach to Reproducible Machine Learning with Flux and Kubeflow - David Aronchick, Azure, Microsoft
+ - Progressive Delivery at Intuit, the Next Chapter in a GitOps Journey. - Henrik Blixt & Jesse Suen, Intuit
+ - Self Healing GitOps: Continuous, Secure GitOps using Flux, Helm and OPA - Om Moolchandani, Accurics
+ - Policy-driven Operations: Put the Ops in GitOps - Rosalind Benoit, Themist
+4:45pm EDT
+ - GitOps Summit Happy Hour Sponsored by CNCF
+
+## Registration
+
+[Register now](https://www.cvent.com/d/b7qylh/4W?ct=50221cf5-5496-4c34-9ec0-3b52b1bf1204&_ga=2.213519767.2069174923.1621350275-2006967682.1618230804)
+
+[View the Schedule](https://events.linuxfoundation.org/gitops-summit/program/schedule/)
\ No newline at end of file
diff --git a/_posts/2021-05-31-fiap-meetup.md b/_posts/2021-05-31-fiap-meetup.md
new file mode 100644
index 0000000000..7778b94d14
--- /dev/null
+++ b/_posts/2021-05-31-fiap-meetup.md
@@ -0,0 +1,61 @@
+---
+title: "FIAP Meetup #9 - Kubernetes & Service Mesh"
+last_modified_at: 2021-07-08T16:00:58-04:00
+tags:
+ - events
+ - fiap
+ - iac
+ - openshift
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-05-31-fiap-meetup/0.png)](https://www.meetup.com/pt-BR/fiapmeetups/events/278576296)
+
+## Descrição do evento
+
+De acordo com o Gartner, mais de 85% das organizações executarão aplicativos em contêineres no Kubernetes até 2025. Por isso alguns profissionais definem que o Kubernetes será o “sistema operacional” da nuvem durante a transformação de aplicações para a Arquitetura de Microsserviços.
+
+Práticas DevOps estão sendo adotadas, porém essa não é apenas uma mudança cultural, pois requer ótimas ferramentas para ser concretizada. Nessa jornada aparecem ferramentas populares de código aberto que apoiam a utilização de uma arquitetura nativa em nuvem. Seu uso permite desde construções de contêineres à orquestração, envolvendo a resiliência de microsserviços e automação de CI / CD.
+
+Será um encontro técnico e hands-on, ao longo do qual serão discutidos diversos cenários inspirados nos ambientes de startups e grandes empresas. Vamos pensar juntos quais são os principais desafios enfrentados e suas possíveis soluções.
+
+## Dados de acesso
+
+**QUANDO**
+10 de junho de 2021
+
+**HORÁRIO**
+18h às 19:30h
+
+**LOCAL**
+On-line via Zoom (dados de acesso no dia do evento)
+
+Esperamos por você.
+
+[Inscrição gratuita.](https://www.meetup.com/pt-BR/fiapmeetups/events/278576296)
+
+FIAP & LuizaLabs & RedHat
+
+## Material
+
+ - [Slides](https://github.com/tonanuvem/k8s-exemplos/blob/master/TALK_MEETUP_v3.pdf)
+ - [Gravação](https://zoom.us/rec/share/8vzivOe-MtaDXOOGw3Ohnqa3bEXpw9Jh4TbnyZbL5VM--h7e53ter1qaeqYSJSTq.MLAt8caSC9QICm1q) (senha: `s=2c90K.`)
+
+## Participantes
+
+![](/assets/images/posts/2021-05-31-fiap-meetup/1.png)
+
+**André Pontes Sampaio**
+
+Mestre em Engenharia de Telecomunicações, MBA em Gerenciamento de Projetos e formado em Ciência da Computação. Mais de 15 anos de experiência no mercado de TI. Experiência profissional como Diretor de Operações e Infraestrutura, além de ter atuado como Líder e Consultor técnico em instituição do Governo do Estado de SP e empresas do setor Financeiro e Telecomunicações. Professor de cursos de MBA da FIAP.
+
+**Cláudio Eduardo de Oliveira**
+
+Sr Software Engineer na Luiza Labs. Trabalha com APIs, microservices e aplicativos centrados em nuvem e containers. Com mais de dez anos de experiência em desenvolvimento de software com linguagens Java e outras linguagens para JVM, é palestrante em alguns dos eventos mais importantes no Brasil sobre Arquitetura e Desenvolvimento de Software. Autor do Livro Spring 5.0 By Example, publicado pela editora Packt em Fevereiro de 2018.
+
+**José Castillo Lema**
+
+Consultor de infraestrutura cloud na Red Hat, tem trabalhado como arquiteto de plataformas de infraestrutura de nuvem pública e privada, práticas DevOps e temas de automação. Atua em provedores de Cloud e fornecedores de software de infraestrutura e plataforma. É mestre e doutor em engenharia elétrica, nas áreas de redes e telecomunicações. Professor de cursos de MBA da FIAP desde 2016.
+
diff --git a/_posts/2021-06-03-edx-magma.md b/_posts/2021-06-03-edx-magma.md
new file mode 100644
index 0000000000..5d51c61282
--- /dev/null
+++ b/_posts/2021-06-03-edx-magma.md
@@ -0,0 +1,76 @@
+---
+title: "edX: Introduction to Magma"
+last_modified_at: 2021-06-03T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - nfv
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-06-03-edx-magma/1.png)](https://www.magmacore.org/)
+
+## Introduction to Magma: Cloud Native Wireless Networking
+
+Learn about the [Magma project](https://www.magmacore.org/), an open source implementation of a mobile network core. Magma supports diverse radio technologies, including LTE, 5G and WiFi, and is particularly relevant for extending network access into remote, sparsely populated areas.
+
+**DURATION**
+10 weeks
+
+**DEDICATION**
+1-2 hours per week
+
+**COST**
+Free (there is the possibility to add a paying certificate for $149)
+
+**INSTITUTION**
+[Linux Foundation](https://linuxfoundation.org/)
+
+
+## About
+
+Magma leverages open source software and commodity hardware to help operators manage their networks efficiently. It provides a high level of automation, high reliability, and the ability to deliver new network services quickly. It is agnostic to the radio access network technology, supporting any cellular “generation” from 2G to 5G, as well as WiFi and CBRS for unlicensed spectrum. Magma can be federated with existing cellular networks to allow networks to be cost-effectively extended into remote areas.
+
+This course is designed for technology strategists or decision makers at telcos looking to understand the applicability of Magma to their environment. This course is also aimed at rural ISP operators, systems integrators, and anyone looking to set up a lab environment to experiment with Magma or deploy it in production.
+
+This course will help you gain an understanding of the overall Magma architecture and how it fits into the bigger picture of cellular network architectures, particularly 4G/LTE and 5G. You will learn to recognize and understand the main functions of a mobile wireless network, understand the key use cases and value proposition of Magma, the overall architecture of Magma at a functional block level, and the functions performed by each of the main Magma components (Access Gateway, Federation Gateway, and Orchestrator). The course will also provide resources to learn more to deploy Magma on standard hardware.
+
+This course prepares you to fully explore the Magma project. It provides the necessary background to help you determine if Magma is appropriate for your setting, and equips you to start installing and experimenting with the system.
+
+## Objectives
+
+ - Recognize and understand the main functions of a mobile wireless network
+
+ - Understand the key use cases and value proposition of Magma
+
+ - Describe the overall architecture of Magma at a functional block level
+
+ - Understand the functions performed by each of the following main components: Access Gateway, Federation Gateway, Orchestrator
+
+ - Know how to learn more to deploy Magma on standard hardware
+
+## Curriculum
+
+ - Ch 1. Introduction to Mobile Cellular Networking
+
+ - Ch 2. Introduction to the Magma Architecture
+
+ - Ch 3. The Orchestrator
+
+ - Ch 4. The Access Gateway (AGW)
+
+ - Ch 5. The Federation Gateway
+
+ - Ch 6. The Network Management System (NMS)
+
+ - Ch 7. Summary
+
+ - Final Exam (verified track only)
+
+## Registration
+
+[Register now](https://www.edx.org/es/course/introduction-to-magma-cloud-native-wireless-networking)
+
+![](/assets/images/posts/2021-06-03-edx-magma/2.png)
\ No newline at end of file
diff --git a/_posts/2021-06-21-shift-aws-foundations-4.md b/_posts/2021-06-21-shift-aws-foundations-4.md
new file mode 100644
index 0000000000..50a0406e25
--- /dev/null
+++ b/_posts/2021-06-21-shift-aws-foundations-4.md
@@ -0,0 +1,44 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 4rd edition"
+last_modified_at: 2021-06-21T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-06-21-shift-aws-foundations-4.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **13/07** e **17/07**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2021-06-22-shift-aws-dev.md b/_posts/2021-06-22-shift-aws-dev.md
new file mode 100644
index 0000000000..a72a120e2e
--- /dev/null
+++ b/_posts/2021-06-22-shift-aws-dev.md
@@ -0,0 +1,105 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing"
+last_modified_at: 2021-06-22T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-06-22-shift-aws-dev.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
\ No newline at end of file
diff --git a/_posts/2021-06-28-cognitive-class.md b/_posts/2021-06-28-cognitive-class.md
new file mode 100644
index 0000000000..bcd6f72474
--- /dev/null
+++ b/_posts/2021-06-28-cognitive-class.md
@@ -0,0 +1,96 @@
+---
+title: "Cognitive Class @ai"
+last_modified_at: 2022-05-06T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iot
+ - networks
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-06-28-cognitive-class.png)](https://cognitiveclass.ai/)
+
+[Cognitive Class @ai](https://cognitiveclass.ai/) is a platform for learning leading-edge technologies: blockchain, data science, AI, Cloud, Serverless, Docker, Kubernetes and more ...
+
+ - Earn certificates and badges
+ - Free
+
+# Learning paths
+- Big data fundamentals
+- Data science fundamentals
+- Scala programming for data science
+- Deep learning
+- Hadoop fundamentals
+- Spark fundamentals
+- Containers, k8s and Istio on IBM Cloud
+- Reactive architecture foundations
+- Lightbend reactive architecture: advanced
+- Data science with Python
+- Blockchain for developers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2021-07-04-frr-k8s.md b/_posts/2021-07-04-frr-k8s.md
new file mode 100644
index 0000000000..559780c57f
--- /dev/null
+++ b/_posts/2021-07-04-frr-k8s.md
@@ -0,0 +1,214 @@
+---
+title: "Running FRR in K8s/OpenShift"
+last_modified_at: 2021-07-04T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+[FRR](http://docs.frrouting.org/en/stable-7.5/) is a fully featured, high performance, free software IP routing suite [included in RHEL 8](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/setting-your-routing-protocols_configuring-and-managing-networking).
+
+We will be using [this FRR image](https://quay.io/repository/fpaoline/ovnkbfdtest) for establishing Bidirectional Forwarding Detection (BFD) sessions.
+
+First, let's define the proper config map:
+```yaml
+apiVersion: v1
+data:
+ daemons: |
+ bgpd=no
+ ospfd=no
+ ospf6d=no
+ ripd=no
+ ripngd=no
+ isisd=no
+ pimd=no
+ ldpd=no
+ nhrpd=no
+ eigrpd=no
+ babeld=no
+ sharpd=no
+ pbrd=no
+ bfdd=yes
+ fabricd=no
+ vrrpd=no
+ vtysh_enable=yes
+ zebra_options=" -A 127.0.0.1 -s 90000000"
+ bgpd_options=" -A 127.0.0.1"
+ ospfd_options=" -A 127.0.0.1"
+ ospf6d_options=" -A ::1"
+ ripd_options=" -A 127.0.0.1"
+ ripngd_options=" -A ::1"
+ isisd_options=" -A 127.0.0.1"
+ pimd_options=" -A 127.0.0.1"
+ ldpd_options=" -A 127.0.0.1"
+ nhrpd_options=" -A 127.0.0.1"
+ eigrpd_options=" -A 127.0.0.1"
+ babeld_options=" -A 127.0.0.1"
+ sharpd_options=" -A 127.0.0.1"
+ pbrd_options=" -A 127.0.0.1"
+ staticd_options="-A 127.0.0.1"
+ bfdd_options=" -A 127.0.0.1"
+ fabricd_options="-A 127.0.0.1"
+ vrrpd_options=" -A 127.0.0.1"
+ frr.conf: |
+ password zebra
+ enable password zebra
+ bfd
+ peer 192.168.216.14 interface net1
+ no shutdown
+ debug bfd network
+ debug bfd peer
+ debug bfd zebra
+ !
+ !
+ bfd
+ peer 192.168.216.15 interface net1
+ no shutdown
+ debug bfd network
+ debug bfd peer
+ debug bfd zebra
+ !
+ !
+ log file /var/log/frr/frr.log debugging
+kind: ConfigMap
+metadata:
+ name: frr
+```
+
+Peer entries must point to the peer(s) BFD endpoint(s) (we assume they are already configured). I am using `net1` as the pod will be created with two interfaces (the second one for establishing the L2 BFD connection).
+
+Now let's define the pod:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: frr-bfd
+ annotations:
+ k8s.v1.cni.cncf.io/networks: '[{ "name": "sriov-net", "ips": [ "192.168.216.50/24" ]}]'
+spec:
+ containers:
+ - name: bfd
+ image: quay.io/fpaoline/ovnkbfdtest:0.2
+ command: ["/bin/sh","-c"]
+ args: ["/usr/lib/frr/frrinit.sh start && tail -f /var/log/frr/frr.log"]
+ ports:
+ - containerPort: 3784
+ protocol: UDP
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - name: config-volume
+ mountPath: /etc/frr
+ volumes:
+ - name: config-volume
+ configMap:
+ name: frr
+```
+
+Once the pod gets created, let's take a look to the logs:
+
+```
+$ oc logs frr-bfd
+Started watchfrr
+2021/07/04 21:14:17 ZEBRA: client 15 says hello and bids fair to announce only static routes vrf=0
+2021/07/04 21:14:17 ZEBRA: client 32 says hello and bids fair to announce only bfd routes vrf=0
+2021/07/04 21:14:18 BFD: zclient: add local address fe80::b0c5:acff:fe58:4c29/64
+2021/07/04 21:14:19 BFD: peer 192.168.216.15 found, but loc-addr 192.168.217.1 ignored
+2021/07/04 21:14:20 BFD: state-change: [mhop:no peer:192.168.216.15 local:0.0.0.0 vrf:default ifname:net1] init -> up
+```
+
+From the last line, we can see the BFD session was properly established. Let's do some tshooting from inside the container:
+
+```
+$ oc rsh frr-bfd
+sh-5.0# sudo yum install -y telnet
+sh-5.0# telnet localhost 2617
+Trying ::1...
+telnet: connect to address ::1: Connection refused
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+
+Hello, this is FRRouting (version 7.5).
+Copyright 1996-2005 Kunihiro Ishiguro, et al.
+
+User Access Verification
+Password: zebra
+
+frr-bfd> enable
+Password: zebra
+
+frr-bfd# show bfd peers
+BFD Peers:
+ peer 192.168.216.14 vrf default interface net1
+ ID: 3380487267
+ Remote ID: 0
+ Active mode
+ Status: down
+ Downtime: 31 minute(s), 53 second(s)
+ Diagnostics: ok
+ Remote diagnostics: ok
+ Peer Type: configured
+ Local timers:
+ Detect-multiplier: 3
+ Receive interval: 300ms
+ Transmission interval: 300ms
+ Echo transmission interval: 50ms
+ Remote timers:
+ Detect-multiplier: 3
+ Receive interval: 1000ms
+ Transmission interval: 1000ms
+ Echo transmission interval: 0ms
+
+ peer 192.168.216.15 vrf default interface net1
+ ID: 1945828781
+ Remote ID: 3129413095
+ Active mode
+ Status: up
+ Uptime: 31 minute(s), 50 second(s)
+ Diagnostics: ok
+ Remote diagnostics: ok
+ Peer Type: configured
+ Local timers:
+ Detect-multiplier: 3
+ Receive interval: 300ms
+ Transmission interval: 300ms
+ Echo transmission interval: 50ms
+ Remote timers:
+ Detect-multiplier: 5
+ Receive interval: 1000ms
+ Transmission interval: 1000ms
+ Echo transmission interval: 0ms
+
+frr-bfd# show bfd peers brief
+Session count: 2
+SessionId LocalAddress PeerAddress Status
+========= ============ =========== ======
+3380487267 unknown 192.168.216.14 down
+1945828781 192.168.216.50 192.168.216.15 up
+
+frr-bfd# show bfd peers counters
+BFD Peers:
+ peer 192.168.216.14 vrf default interface net1
+ Control packet input: 0 packets
+ Control packet output: 2232 packets
+ Echo packet input: 0 packets
+ Echo packet output: 0 packets
+ Session up events: 0
+ Session down events: 0
+ Zebra notifications: 0
+
+ peer 192.168.216.15 vrf default interface net1
+ Control packet input: 2229 packets
+ Control packet output: 2234 packets
+ Echo packet input: 0 packets
+ Echo packet output: 0 packets
+ Session up events: 1
+ Session down events: 0
+ Zebra notifications: 1
+```
\ No newline at end of file
diff --git a/_posts/2021-07-25-aws-educate-login.md b/_posts/2021-07-25-aws-educate-login.md
new file mode 100644
index 0000000000..a85cc4d4b6
--- /dev/null
+++ b/_posts/2021-07-25-aws-educate-login.md
@@ -0,0 +1,69 @@
+---
+title: "AWS Educate: Cadastro na plataforma"
+last_modified_at: 2021-07-25T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2019-04-30-aws-educate/0.png)](https://aws.amazon.com/pt/education/awseducate/)
+
+Para acompanhar alguns cursos da FIAP, uma vez aprovado no processo seletivo é necessária a criação de uma conta na plataforma [AWS Educate](/aws-educate).
+
+A plataforma on-line do AWS Educate fornece um suporte digital integrado com compartilhamento de recursos, suporte ao ensino, interação com a comunidade e acesso ao **console AWS com 50$ de créditos** e labs online.
+
+O passo mais critico é o **2**. É fundamental preencher uma data de término de graduação futura, **caso contrario a AWS entende que o curso já concluiu e a aplicação será reprovada**.
+
+
+# Cadastro na plataforma
+
+1. O instrutor envia o convite do curso:
+![](/assets/images/posts/2021-07-25-aws-educate-login/01.png)
+
+2. No cadastro, **colocar uma data de término de graduação futura** (caso contrário, a aplicação será reprovada):
+![](/assets/images/posts/2021-07-25-aws-educate-login/02.png)
+
+3. Aceitar os termos do programa:
+![](/assets/images/posts/2021-07-25-aws-educate-login/03.png)
+
+# Confirmação do email
+
+4. Concluir o cadastro e aguardar pelo email de verificação de email:
+![](/assets/images/posts/2021-07-25-aws-educate-login/04.png)
+
+5. Verificar o endereço de email no seguinte link e aguardar pela aprovação da conta:
+![](/assets/images/posts/2021-07-25-aws-educate-login/05.png)
+![](/assets/images/posts/2021-07-25-aws-educate-login/06.png)
+
+# Ativação da conta
+
+6. A aprovação da conta será notificada por email:
+![](/assets/images/posts/2021-07-25-aws-educate-login/07.png)
+
+7. Criar uma senha para o seu usuário:
+![](/assets/images/posts/2021-07-25-aws-educate-login/08.png)
+
+# Acesso a plataforma
+
+8. Após a definição da senha, acessar o portal da plataforma:
+![](/assets/images/posts/2021-07-25-aws-educate-login/09.png)
+
+# Acesso ao console AWS
+
+9. Navegar ate *My Classrooms*:
+![](/assets/images/posts/2021-07-25-aws-educate-login/10.png)
+
+10. Aceitar os termos de uso dos laboratórios e da plataforma [Vocareum](https://www.vocareum.com/):
+![](/assets/images/posts/2021-07-25-aws-educate-login/11.png)
+![](/assets/images/posts/2021-07-25-aws-educate-login/12.png)
+
+11. Conferir os créditos restantes e acessar o console AWS:
+![](/assets/images/posts/2021-07-25-aws-educate-login/13.png)
+
+12. Console da AWS:
+![](/assets/images/posts/2021-07-25-aws-educate-login/14.png)
+
diff --git a/_posts/2021-08-18-hcia-17.md b/_posts/2021-08-18-hcia-17.md
new file mode 100644
index 0000000000..3e63fa857f
--- /dev/null
+++ b/_posts/2021-08-18-hcia-17.md
@@ -0,0 +1,28 @@
+---
+title: "HCIA-Routing & Switching - 17th edition"
+last_modified_at: 2021-08-18T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-08-18-hcia-17.jpeg)](https://www.sympla.com.br/treinamento-de-redes---17-edicao__1313536)
+
+Informamos que estão abertas as inscrições do **17º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Routing & Switching V2.5**, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/treinamento-de-redes---17-edicao__1313536).
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
\ No newline at end of file
diff --git a/_posts/2021-08-30-shift-aws-foundations-5.md b/_posts/2021-08-30-shift-aws-foundations-5.md
new file mode 100644
index 0000000000..cd8a6260cb
--- /dev/null
+++ b/_posts/2021-08-30-shift-aws-foundations-5.md
@@ -0,0 +1,47 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 5th edition"
+last_modified_at: 2021-08-30T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-08-30-shift-aws-foundations-5.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **21/09** e **26/10**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2021-09-03-lf-courses.md b/_posts/2021-09-03-lf-courses.md
new file mode 100644
index 0000000000..e9faf2515b
--- /dev/null
+++ b/_posts/2021-09-03-lf-courses.md
@@ -0,0 +1,44 @@
+---
+title: "Linux Foundation Training & Certification courses"
+last_modified_at: 2022-05-19T16:00:58-04:00
+tags:
+ - cert
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-09-03-lf-courses.png)](https://training.linuxfoundation.org/)
+
+[Linux Foundation Training & Certification](https://training.linuxfoundation.org/) provides free online-learning courses on a range of open source topics from Linux to blockchain, networking to cloud, and everything in between.
+
+ - Earn certificates and badges
+ - Free
+
+# Learning path
+
+1. Inclusive Speaker Orientation (LFC101)
+2. Inclusive Open Source Community Orientation (LFC102)
+3. A Beginner’s Guide to Open Source Software Development (LFD102)
+4. Secure Software Development: Requirements, Design, and Reuse (LFD104x)
+5. Secure Software Development: Implementation (LFD105x)
+6. Secure Software Development: Verification and More Specialized Topics (LFD106x)
+7. Open Source Licensing Basics for Software Developers (LFC191)
+8. Generating a Software Bill of Materials (LFC192)
+9. Fundamentals of Professional Open Source Management (LFC110)
+10. Open Source Management & Strategy
+11. Introduction to GitOps (LFS169)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2021-09-15-perfcon21.md b/_posts/2021-09-15-perfcon21.md
new file mode 100644
index 0000000000..ed58be6fc5
--- /dev/null
+++ b/_posts/2021-09-15-perfcon21.md
@@ -0,0 +1,35 @@
+---
+title: "PerfConf Fall 2021"
+last_modified_at: 2021-09-15T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - openshift
+ - redhat
+ - sdn
+toc: yes
+toc_sticky: true
+---
+
+## [Proceedings](https://perfconfall2021.sched.com/)
+
+[**ICNI2 OVN Telco 5G perf/scale**](https://perfconfall2021.sched.com/event/nBpH/icni2-ovn-telco-5g-perfscale)
+
+There has been an effort in the past months to test OVN Intelligent Container Network Interface 2 (ICNI2) implementations at scale. As part of the testing, [FRRouting](http://docs.frrouting.org/en/stable-8.0/) was used to simulate comercial load balancers and to establish BFD sessions with OVN. The ideia is to show how this was achieved and some control/data plane results of the experiments.
+
+Monday September 20, 2021 2:15pm - 3:00pm GMT-03
+
+Track 1: Telco, Networking, System Performance and Tuning
+
+Google Meet ID: [https://meet.google.com/vgv-dnoo-yne](https://meet.google.com/vgv-dnoo-yne)
+
+## Moderators
+ - [Jaison/Ashish](https://perfconfall2021.sched.com/moderator/jaisonashish.7huo2c3)
+
+## Speakers
+ - [Jose Castillo Lema](https://perfconfall2021.sched.com/speaker/jlema) - Software Engineer at **Red Hat**
+ - [Murali Krishnasamy](https://perfconfall2021.sched.com/speaker/murali_krishna.22ykq7wp) - Software Engineer at **Red Hat**
+
+
diff --git a/_posts/2021-09-16-soloio-istio.md b/_posts/2021-09-16-soloio-istio.md
new file mode 100644
index 0000000000..dfcf49f6c8
--- /dev/null
+++ b/_posts/2021-09-16-soloio-istio.md
@@ -0,0 +1,32 @@
+---
+title: "Essentials for Istio by Solo.io"
+last_modified_at: 2021-09-16T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-09-16-soloio-istio.png)](https://www.solo.io/)
+
+# Get certified
+
+Istio is the most popular service mesh deployed into production across the cloud-native ecosystem, and for good reason. It’s feature rich, open-source, and most importantly, battle proven. Istio provides the foundational pieces to implement zero-trust networking, get deeper observability into a distributed system, and smart routing control for safer software releases.
+
+This certification is for those looking to learn more about how Istio works and how to operationalize it for their organization. You will learn the basics of routing, observability, and security, and then expand into leveraging Istio for a devops/gitops CI/CD flow, zero-downtime upgrades of Istio control plane, plugging in with existing PKI, and running Istio on VMs and across multiple clusters.
+
+The [Essentials for Istio certification](https://www.solo.io/blog/get-certified-on-the-essentials-for-istio/) is based on a hands-on, instructor-led workshop focused on how to deploy Istio into production. You will have access to your own Linux virtual machine with a Kubernetes cluster and Istio to complete the exercises.
+
+This credential, offered for free by Solo.io with [Credly](https://www.credly.com/), certifies that you possess the essential skills to deploy, configure, debug, secure, and operationalize Istio for your organization.
+
+# Earning criteria
+
+ - You must complete the live Deploy Istio for Production workshop. Sign up [here](https://www.solo.io/blog/get-certified-on-the-essentials-for-istio/#:~:text=for%20Production%20workshop.-,Sign%20up%20now!%C2%A0,-You%20must%20complete)
+ - You must complete and score 80% or higher on an assessment upon completion of the workshop.
+
+# Certification
+
+
\ No newline at end of file
diff --git a/_posts/2021-10-02-shift-aws-dev-2.md b/_posts/2021-10-02-shift-aws-dev-2.md
new file mode 100644
index 0000000000..3297dc3a7b
--- /dev/null
+++ b/_posts/2021-10-02-shift-aws-dev-2.md
@@ -0,0 +1,105 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing - 2nd edition"
+last_modified_at: 2021-10-02T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-10-02-shift-aws-dev-2.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
\ No newline at end of file
diff --git a/_posts/2021-10-12-tendencias-tic.md b/_posts/2021-10-12-tendencias-tic.md
new file mode 100644
index 0000000000..206f2f8922
--- /dev/null
+++ b/_posts/2021-10-12-tendencias-tic.md
@@ -0,0 +1,15 @@
+---
+title: "Tendências de mercado na área de TIC"
+last_modified_at: 2021-10-12T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - events
+ - huawei
+ - pt
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2021-10-12-tendencias-tic.png)](https://meet.google.com/rpj-krxj-oeq)
+
diff --git a/_posts/2021-10-14-seminf21.md b/_posts/2021-10-14-seminf21.md
new file mode 100644
index 0000000000..b2d1e78a7d
--- /dev/null
+++ b/_posts/2021-10-14-seminf21.md
@@ -0,0 +1,57 @@
+---
+title: "SEMINF 2021: 5G e os impactos na atuação do profisional de TI"
+last_modified_at: 2021-10-14T16:00:58-04:00
+tags:
+ - events
+ - networks
+ - pt
+ - webinar
+toc: true
+toc_sticky: true
+---
+
+# II SEMANA ACADÊMICA DE INFORMÁTICA - SEMINF 2021
+
+## 5G E OS IMPACTOS NA ATUAÇÃO DO PROFISSIONAL DE TI
+
+[![](/assets/images/posts/2021-10-14-seminf21/0.png)](https://seminf.github.io/seminf2021/)
+
+A [II Semana Acadêmica de Informática - SEMINF 2021](https://seminf.github.io/seminf2021/) acontecerá nos dias 18 de outubro a 22 de outubro de 2021, na modalidade virtual, tendo como tema: 5G e os Impactos na Atuação do Profissional de TI.
+
+Organizada pela Coordenações dos cursos de informática do IFTO Campus Palmas, com participação de professores e acadêmicos, o evento possui na sua programação, palestras, minicursos, mesas-redondas, desafio de programação e gincana de jogos eletrônicos.
+
+A semana acadêmica é um evento que possibilita a integração entre pessoas. A troca de informações promovidas pelo evento através da participação de profissionais técnicos, docentes e discentes da área de informática, favorecem de forma significativa a formação do futuro profissional de informática. Acredita-se que por meio de várias perspectivas adquiridas pela experiências dos participantes, é possível que haja um enriquecimento complementar na formação escolar do discente da área de informática.
+
+**Objetivo Geral**
+
+O principal objetivo da semana acadêmica é proporcionar um ambiente de aprendizado complementar contribuindo na formação dos discentes.
+
+**Objetivos Específicos**
+
+ - Promover a integração entre os discentes;
+ - Possibilitar a reciclagem e adição de novos conhecimentos;
+ - Disseminar os cursos de informática oferecidos pelo IFTO campus Palmas.
+
+## PROGRAMAÇÃO
+
+Teremos uma semana totalmente dedicada ao evento, com programação nos três turnos.
+
+ - Oferta de palestras com temas atuais e relevantes;
+ - Uso de mesa-redonda para promoção de debates;
+ - Oferta de minicursos visando o complemento/atualização de currículo;
+ - Desafios de programação e momentos de jogos promovendo a integração escolar.
+
+
+![](/assets/images/posts/2021-10-14-seminf21/1.jpeg)
+
+## INSCRIÇÕES
+
+Período de inscrições: 13/10/2021 a 17/10/2021.
+
+Faça sua inscrição [AQUI](https://si.ifto.edu.br/evento/inscricao/1092/).
+
+## CERTIFICADO
+
+Os certificados estarão disponíveis a partir do dia 26/10/2021 [AQUI](https://si.ifto.edu.br/evento/certificados/).
+
+![](/assets/images/posts/2021-10-14-seminf21/2.png)
diff --git a/_posts/2021-10-23-shift-multicloud-4.md b/_posts/2021-10-23-shift-multicloud-4.md
new file mode 100644
index 0000000000..66022870e2
--- /dev/null
+++ b/_posts/2021-10-23-shift-multicloud-4.md
@@ -0,0 +1,56 @@
+---
+title: "FIAP SHIFT: Multicloud Architecture - 4th edition"
+last_modified_at: 2021-10-23T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-10-23-shift-multicloud-4.png)](https://www.fiap.com.br/shift/curso/tecnologia/multicloud-architecture-development-solutions-service-online)
+
+A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços.
+
+Além de ser uma solução inovadora, a Cloud também é um modelo de negócio relativamente novo, aplicável a qualquer tipo de empresa. Nosso foco é formar o profissional para dominar modelos de serviços de Computação em Nuvem (SaaS, PaaS, IaaS), modelos de implantação em Nuvem (privado, público, híbrido e multicloud) e economia em Nuvem. Tudo isso por meio de atividades hands-on na Amazon Web Services (AWS).
+
+## Para quem?
+Profissionais de TI (analistas, especialistas e gestores) que atuam nas áreas de Cloud, Virtualização e/ou DevOps.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Benefício Amazon
+
+Cada aluno vai receber US$ 100 em créditos para usar em laboratórios no ambiente Amazon, durante e após o curso.
+
+## Shift remoto
+Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ * Virtualização
+ * Modelos de serviço
+ * Segurança em nuvem / Modelo de responsabilidade compartilhada
+ * Modelos de implementação
+ * Multicloud
+ * Economia e faturamento da nuvem
+ * Arquitetura de nuvem / Desenvolvimento de aplicações para a nuvem
+ - Módulo 2: Infraestrutura como serviço (IaaS)
+ * Instanciação de máquinas virtuais
+ * Autoscaling
+ * Infraestrutura de armazenamento: block/object/file storage
+ * Containers
+ * Orquestração de containers
+ * Arquitetura de microserviços
+ - Módulo 3: Plataforma como serviço (PaaS)
+ * Automação e entrega contínua (CI/CD)
+ * Pipeline DevOps
+ * DBaaS SQL/NoSQL
+ * Function as a Service
+ * Arquiteturas serverless
\ No newline at end of file
diff --git a/_posts/2021-11-03-aws-community-day-21.md b/_posts/2021-11-03-aws-community-day-21.md
new file mode 100644
index 0000000000..fa626a64a0
--- /dev/null
+++ b/_posts/2021-11-03-aws-community-day-21.md
@@ -0,0 +1,20 @@
+---
+title: "AWS Community Day Brasil 2021"
+last_modified_at: 2021-11-03T16:00:58-04:00
+tags:
+ - aws
+ - events
+ - pt
+ - webinar
+toc: false
+---
+
+
+
+Contagem regressiva para o **AWS Community Day Brasil 2021**, o maior encontro de grupos de usuários AWS do Brasil!
+
+06/11/2021 às 13hs!
+
+As inscrições ainda podem ser feitas [aquí](https://lnkd.in/dPWdTJHy).
diff --git a/_posts/2021-11-04-microsoft-ignite.md b/_posts/2021-11-04-microsoft-ignite.md
new file mode 100644
index 0000000000..3802a53ba5
--- /dev/null
+++ b/_posts/2021-11-04-microsoft-ignite.md
@@ -0,0 +1,61 @@
+---
+title: "Microsoft Ignite Cloud Skills Challenge"
+last_modified_at: 2022-03-17T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - en
+ - events
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-11-04-microsoft-ignite/0.png)](https://csc.docs.microsoft.com/ignite/registration/fall2021)
+
+Complete one challenge and earn a free Microsoft Certification exam.
+
+Select one challenge that’s right for you – there are 12 challenges to choose from. Once you complete that challenge you will earn a free Microsoft Certification exam which will get delivered on December 7th, 2021.
+
+The challenge ends on November 30, 2021 at 4:00 PM (16:00) UTC. Make sure all modules in your challenge are complete before time runs out.
+
+## Challenges
+
+ - Teams Admin Challenge
+ - Teams Voice Engineer Challenge
+ - Desktop and Device Management Challenge
+ - Dynamics 365 Sales Consultant Challenge
+ - Power Platform Developer Challenge
+ - **Azure Admin Challenge**
+ - Azure Developer Challenge
+ - Azure Database Admin Challenge
+ - Windows Server Hybrid Admin Challenge
+ - Dynamics 365 Supply Chain Mgmt Challenge
+ - Security Operations Analyst Challenge
+ - Identity + Information Protection Challenge
+
+![](/assets/images/posts/2021-11-04-microsoft-ignite/1.png)
+
+## Eligible exams
+
+ - Azure
+ * **AZ-104: Microsoft Azure Administrator**
+ * AZ-204: Developing Solutions for Microsoft Azure
+ * DP-300: Administering Relational Databases on Microsoft Azure
+ * AZ-800: Administering Windows Server Hybrid Core Infrastructure
+ * AZ-801: Configuring Windows Server Hybrid Advanced Services
+ - Dynamics 365
+ * MB-210: Microsoft Dynamics 365 Sales
+ * MB-330: Microsoft Dynamics 365 Supply Chain Management
+ - Microsoft 365
+ * MD-100: Windows 10
+ * MD-101: Managing Modern Desktops
+ * MS-700: Managing Microsoft Teams
+ * MS-720: Microsoft Teams Voice Engineer
+ - Power Platform
+ * PL-400: Microsoft Power Platform Developer
+ - Security, Compliance, and Identity
+ * SC-200: Microsoft Security Operations Analyst
+ * SC-300: Microsoft Identity and Access Administrator
+ * SC-400: Microsoft Information Protection Administrator
+
+
\ No newline at end of file
diff --git a/_posts/2021-11-05-huawey-academy-workshop.md b/_posts/2021-11-05-huawey-academy-workshop.md
new file mode 100644
index 0000000000..661864e586
--- /dev/null
+++ b/_posts/2021-11-05-huawey-academy-workshop.md
@@ -0,0 +1,18 @@
+---
+title: "Huawei ICT Academy Instructor Workshop Brazil 2021"
+last_modified_at: 2022-03-18T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - events
+ - huawei
+ - pt
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2021-11-05-huawey-academy-workshop.png)](http://www.huawei.com/audience/answer.do?u=2675759)
+
+No dia 09 de Novembro, será realizado um Worshop ao vivo sobre o programa **Huawei ICT Academy**, com apresentação de alguns casos de universidades parceiras. Participe e aprenda um pouco mais sobre como podemos trabalhar juntos.
+
+
\ No newline at end of file
diff --git a/_posts/2021-11-15-aws11-eks.md b/_posts/2021-11-15-aws11-eks.md
new file mode 100644
index 0000000000..6bfd99f102
--- /dev/null
+++ b/_posts/2021-11-15-aws11-eks.md
@@ -0,0 +1,23 @@
+---
+title: "AWS series XI: Elastic Kubernetes Service (EKS)"
+last_modified_at: 2021-11-15T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#aws) sobre Amazon Web Services.
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/shift/multicloud/lab15-paas-eks.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2021-11-20-physics.md b/_posts/2021-11-20-physics.md
new file mode 100644
index 0000000000..54707ba7b8
--- /dev/null
+++ b/_posts/2021-11-20-physics.md
@@ -0,0 +1,48 @@
+---
+title: "PHYSICS EU project"
+last_modified_at: 2021-11-20T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-09-20-physics-ga4/1.png)](https://physics-faas.eu/)
+
+## The project
+
+[**PHYSICS**](https://physics-faas.eu/) (**oPtimized HYbrid Space-time servIce Continuum in faaS**) is a research project funded by the European Union’s Horizon 2020 research and innovation program under grant agreement No. 101017047. The project began in January 2021 with 14 international partners and is scheduled to end in December 2023. Partners include Red Hat, Atos, RYAX, the Polytechnic University of Madrid (Spain), and Harokopio University (Greece).
+
+The project’s goal is to enable application developers to design, implement, and deploy advanced function-as-a-service (FaaS) applications in the scope of advanced cloud application design environments by leveraging proven design patterns and existing libraries of cloud/FaaS components.
+
+Red Hat engineers lead the work package **Extended Infrastructure Services with Adaptable Algorithms**, where they leverage several community projects to support PHYSICS’s multi-cluster orchestration and connectivity requirements. Some of the projects modified for PHYSICS’ purposes are [Submariner](https://github.com/submariner-io/submariner) and [MicroShift](https://github.com/openshift/microshift). Other projects used include Node-RED and Apache OpenWhisk.
+
+## Features
+
+- Global Deployment and Orchestration Optimization
+- Visual environments and Cloud design patterns
+- Function as a Service Frameworks as a whole
+- Semantic Descriptions
+- Scaling, Controlling and Performance Logic
+- Application adaptation to FaaS
+
+## Consortium
+
+- GFT
+- Atos
+- Fujitsu
+- Hewlett Packward Enterprise (HPE)
+- Red Hat
+- Ryax
+- Innov-Acts (Innov)
+- InQBit
+- Byte
+- Innovation Sprint (ISPRINT)
+- CybeleTech
+- Universidad Politécnica de Madrid
+- Harokopio University
+- German Research Center for Artificial Intelligence (DKFI)
+
+To learn more about the PHYSICS project, visit the [PHYSICS project page](https://physics-faas.eu/). Read more about it in the [Red Hat Research blog](https://research.redhat.com/blog/research_project/physics-optimized-hybrid-space-time-service-continuum-in-faas/).
\ No newline at end of file
diff --git a/_posts/2021-11-22-hcia-18.md b/_posts/2021-11-22-hcia-18.md
new file mode 100644
index 0000000000..8c69cfac10
--- /dev/null
+++ b/_posts/2021-11-22-hcia-18.md
@@ -0,0 +1,27 @@
+---
+title: "HCIA-Routing & Switching - 18th edition"
+last_modified_at: 2021-11-22T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2021-11-22-hcia-18.jpeg)](https://www.sympla.com.br/treinamento-de-redes---18-edicao__1420453)
+
+Informamos que estão abertas as inscrições do **18º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Routing & Switching V2.5**, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/treinamento-de-redes---18-edicao__1420453).
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
\ No newline at end of file
diff --git a/_posts/2021-11-24-huawey-job-fair-21.md b/_posts/2021-11-24-huawey-job-fair-21.md
new file mode 100644
index 0000000000..dbda3155bc
--- /dev/null
+++ b/_posts/2021-11-24-huawey-job-fair-21.md
@@ -0,0 +1,13 @@
+---
+title: "Huawei ICT Job Fair Brazil 2021"
+last_modified_at: 2021-11-24T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - events
+ - huawei
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2021-11-24-huawey-job-fair-21.jpg)](https://app.huawei.com/web/Brazil_External/#/job_platform)
\ No newline at end of file
diff --git a/_posts/2021-11-28-gremlin-caos.md b/_posts/2021-11-28-gremlin-caos.md
new file mode 100644
index 0000000000..453ee9f589
--- /dev/null
+++ b/_posts/2021-11-28-gremlin-caos.md
@@ -0,0 +1,31 @@
+---
+title: "Gremlin Certified Chaos Engineering Practitioner (GCCEP)"
+last_modified_at: 2021-11-28T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+ - redhat
+toc: false
+---
+
+[![](/assets/images/posts/2021-11-28-gremlin-caos/1.png)](https://www.gremlin.com/)
+
+Chaos Engineering continues to grow in popularity and is rapidly becoming a job requirement. To help Engineering and Testing teams meet the need, take a look at **Gremlin Chaos Engineering Practitioner Certificate Program**! The Certificate Program is now the easiest way to demonstrate your Chaos Engineering expertise and increase your visibility.
+
+Learn more at [gremlin.com/certification](https://www.gremlin.com/certification/).
+
+# Free certification
+
+At the end of the course, you can earn a badge by passing a final exam.
+
+![](/assets/images/posts/2021-11-28-gremlin-caos/2.png)
+
+
\ No newline at end of file
diff --git a/_posts/2021-12-05-ovn21.md b/_posts/2021-12-05-ovn21.md
new file mode 100644
index 0000000000..ca500d58df
--- /dev/null
+++ b/_posts/2021-12-05-ovn21.md
@@ -0,0 +1,26 @@
+---
+title: "Open vSwitch and OVN 2021 Fall Conference"
+last_modified_at: 2021-12-05T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - openshift
+ - openstack
+ - redhat
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2021-12-05-ovn21.png)](https://www.openvswitch.org/support/ovscon2021/)
+
+The **Open vSwitch and OVN 2021 Fall Conference** will be held online Dec. 7 and 8. Talks will be pre-recorded and played back during the conference. It will be used an online system that allows for text-based discussion and Q&A while the talk is being played. It will also be allowed a few minutes after each talk for further discussion via both text and over video and audio with the presenters. Each talk will be given once.
+
+This year the following companies have offered their support for the conference:
+ - [Canonical Ltd.](https://canonical.com/)
+ - [Intel Corporation](https://intel.com/)
+ - [NVIDIA Corporation](https://www.nvidia.com/)
+ - [Red Hat, Inc.](https://redhat.com/)
+
+Registration is requested to attend. A registration form is available via [Event Brite](https://www.eventbrite.com/e/ovsovn-21-conference-registration-217640256867). The session recordings are available [here](https://www.youtube.com/playlist?list=PLaJlRa-xItwARDGAUp7lXviOgOhcRxSU-).
\ No newline at end of file
diff --git a/_posts/2021-12-09-calico-ebpf.md b/_posts/2021-12-09-calico-ebpf.md
new file mode 100644
index 0000000000..beb3b606e1
--- /dev/null
+++ b/_posts/2021-12-09-calico-ebpf.md
@@ -0,0 +1,50 @@
+---
+title: "Certified Calico Operator: eBPF"
+last_modified_at: 2021-12-09T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - networks
+ - nfv
+ - openshift
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-01-05-calico/1.png)](https://www.projectcalico.org/)
+
+I would like to strongly recomend the [Certified Calico Operator: eBPF](https://academy.tigera.io/course/certified-calico-operator-ebpf/) course for everyone interested in eBPF networking.
+
+The new **CCO-L2-EBPF** (Certified Calico Operator: eBPF) course specifically addresses the strengths of eBPF and when it is, or is not, the right choice. It will also help you see how easy it is to deploy the Calico eBPF data plane if you have made the choice that it is right for you and your cluster.
+
+This is a level 2 course, which means that you should probably complete the [existing level 1 course](/calico) first, unless you’re very familiar with Calico and Kubernetes already.
+
+# What the Course Covers
+
+- Week 1
+ * Get Started with eBPF
+ * Lab Setup
+ * Writing an eBPF program
+ * Writing a Kernel Probe for Tracing
+ * Understanding the Tools
+ * eBPF in Kubernetes
+- Week 2
+ * GCP Lab Setup
+ * Deploying Calico with eBPF on Upstream Kubernetes
+ * Key Benefits of the Calico eBPF Data Plane
+- Week 3
+ * Deploying Calico with eBPF on OpenShift
+ * Understanding Calico eBPF and CNI Choice
+ * Deploying a Rancher RKE Cluster with eBPF, and connecting to a Rancher Server
+- Week 4
+ * Calico eBPF and WireGuard
+ * Monitoring and Troubleshooting the Calico eBPF Data Plane
+ * Advanced Topics
+
+# Free certification
+
+At the end of the course, you can earn a certificate by passing a final exam.
+
+[![](/assets/images/posts/2021-12-09-calico-ebpf.png)](https://courses.academy.tigera.io/certificates/5b2d3af1a265456f85c8e41dbef83598)
diff --git a/_posts/2021-12-13-gitops-fundamentals.md b/_posts/2021-12-13-gitops-fundamentals.md
new file mode 100644
index 0000000000..fdb25b168f
--- /dev/null
+++ b/_posts/2021-12-13-gitops-fundamentals.md
@@ -0,0 +1,35 @@
+---
+title: "GitOps certified for Argo"
+last_modified_at: 2021-12-13T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-12-13-gitops-fundamentals/0.png)](https://codefresh.io/)
+
+I would like to strongly recomend the [GitOps Fundamentals](https://codefresh.learnworlds.com/course/gitops-with-argo) course for everyone interested in GitOps best practices.
+
+After you finish this course you will know the fundamentals of GitOps and have practical knowledge of Argo CD.
+
+# What the Course Covers
+
+- What is GitOps and why you should adopt it
+- Benefits and common pitfalls of GitOps
+- How Argo CD works
+- How to manage applications with Argo CD
+- Sync strategies, secrets, and template customization
+- Declarative setup for applications
+- What is Progressive Delivery and how it can level up your deployments
+- Using Argo Rollouts for blue/green and canary deployments
+
+
+# Free certification
+
+At the end of the course, you can earn a certificate by passing a final exam.
+
+![](/assets/images/posts/2021-12-13-gitops-fundamentals/1.png)
diff --git a/_posts/2021-12-19-istio-fundamentals.md b/_posts/2021-12-19-istio-fundamentals.md
new file mode 100644
index 0000000000..f31e484532
--- /dev/null
+++ b/_posts/2021-12-19-istio-fundamentals.md
@@ -0,0 +1,50 @@
+---
+title: "Istio and Envoy Fundamentals by Tetrate"
+last_modified_at: 2022-01-12T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-12-19-istio-fundamentals/0.png)](https://www.tetrate.io/)
+
+I would like to strongly recomend the [Istio Fundamentals](https://academy.tetrate.io/courses/istio-fundamentals) and [Envoy Fundamentals](https://academy.tetrate.io/courses/envoy-fundamentals) courses from the [Tetrate Academy](https://academy.tetrate.io/) for everyone interested in service mesh arquitectures.
+
+# Istio Fundamentals
+
+A course that enables users to learn Istio easily with concept text, labs, and quizzes. Istio is an open-source service mesh platform that helps microservices communicate with each other easily.
+
+## What the Course Covers
+
+- Service Mesh and Istio Overview
+- Installing Istio
+- Observability: Telemetry and Logs
+- Traffic Management
+- Security
+- Advanced Features
+- Troubleshooting
+- Real World Examples
+
+# Envoy Fundamentals
+
+Envoy is an open-source edge and service proxy that is a key part of modern, cloud-native applications.This free course provides a comprehensive, five-part tour of Envoy with concept text, labs, and quizzes.
+
+## What the Course Covers
+
+- Introduction
+- HTTP Connection Manager (HCM)
+- Clusters
+- Dynamic Configuration
+- Listener Subsystem
+
+# Free certification
+
+At the end of the course, you can earn one certificate per course by passing a final exam.
+
+[![](/assets/images/posts/2021-12-19-istio-fundamentals/1.png)](https://academy.tetrate.io/certificates/em1ijnibkx)
+
+[![](/assets/images/posts/2021-12-19-istio-fundamentals/2.png)](https://tetrate-academy.thinkific.com/certificates/g0qtgjk4ix)
diff --git a/_posts/2022-01-01-newyear22.md b/_posts/2022-01-01-newyear22.md
new file mode 100644
index 0000000000..e144b4f865
--- /dev/null
+++ b/_posts/2022-01-01-newyear22.md
@@ -0,0 +1,16 @@
+---
+title: "Happy new year!"
+last_modified_at: 2022-01-01T16:00:58-04:00
+tags:
+ - en
+ - es
+ - redhat
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2022-01-01-newyear22/1.png)
+
+![](/assets/images/posts/2022-01-01-newyear22/2.png)
+
+![](/assets/images/posts/2022-01-01-newyear22/3.png)
\ No newline at end of file
diff --git a/_posts/2022-01-02-skillbuilder.md b/_posts/2022-01-02-skillbuilder.md
new file mode 100644
index 0000000000..b7f2580388
--- /dev/null
+++ b/_posts/2022-01-02-skillbuilder.md
@@ -0,0 +1,30 @@
+---
+title: "AWS Skill Builder"
+last_modified_at: 2022-02-02T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - en
+toc: false
+---
+
+[![](/assets/images/posts/2022-01-02-skillbuilder.png)](https://explore.skillbuilder.aws/)
+
+Since October 19th, former [aws.training site](https://www.aws.training/) has moved to AWS Training and Certification’s new learning center, [AWS Skill Builder](https://explore.skillbuilder.aws/).
+
+Besides lots of great material and courses, they offer free **AWS Certification Official Practice Question Sets**.
+
+AWS Certification Official Practice Question Sets feature 20 questions developed by AWS to demonstrate the style of our certification exams. You can experience these exam-style questions, which offer detailed feedback and recommended resources to help fill gaps.
+
+The 20-question sets available in English, Portuguese, Spanish, German, French, Indonesian, Japansese, Korean and Chinese are:
+
+ - AWS Certified Cloud Practitioner Official Practice Question Set
+ - AWS Certified Developer - Associate Official Practice Question Set
+ - AWS Certified Solutions Architect - Associate Practice Question Set
+ - AWS Certified SysOps Administrator - Associate Official Practice Question Set
+ - AWS Certified Solutions Architect - Professional Official Practice Question Set
+ - AWS Certified DevOps Engineer - Professional Official Practice Question Set
+ - AWS Certified Data Analytics - Specialty Official Practice Question Set
+ - AWS Certified Database - Specialty Practice Question Set
+ - AWS Certified Machine Learning - Specialty Official Practice Question Set
+ - AWS Certified Security - Specialty Official Practice Question Set
\ No newline at end of file
diff --git a/_posts/2022-01-03-kasten.md b/_posts/2022-01-03-kasten.md
new file mode 100644
index 0000000000..efaa70965d
--- /dev/null
+++ b/_posts/2022-01-03-kasten.md
@@ -0,0 +1,55 @@
+---
+title: "Kasten - Kubernetes data protection"
+last_modified_at: 2022-01-03T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-01-03-kasten/0.png)](https://www.kasten.io/)
+
+I would like to strongly recomend the [Kasten](https://www.kasten.io/) courses from the [Learning.kaste.io platform](https://learning.kasten.io/) to everyone interested in Kubernetes data protection.
+
+# Labs
+
+## Introductory
+
+- KubeCon + CloudNativeCon Special Edition Lab
+ * Deploy K10
+ * Backup a data service
+ * Delete data
+ * Recover K10
+
+## Module #1
+
+- Build your first Kubernetes Cluster
+ * Learn Kubernetes Structure
+ * Understand abstractions
+ * Create your own cluster
+
+- Build a Kubernetes Application
+ * Build container images
+ * Run applications
+ * Manage manifests for deployment
+ * Discover [Kubestr](https://kubestr.io/)
+
+- Back-up your Kubernetes Application
+ * Learn unique Kubernetes requirements
+ * Understand step-by-step backup procedures
+ * Learn Kasten K10 – #1 backup and DR for Kubernetes
+
+## Module #2
+
+- Application Consistency
+ * Learn how Kubernetes-native application backup and recovery works using Kasten K10 and Kanister
+ * Learn application-level data management
+
+# Free badges
+
+At the end of the course, you can earn badges by completing the labs and avaliations.
+
+![](/assets/images/posts/2022-01-03-kasten/1.png)
diff --git a/_posts/2022-01-04-examtopics.md b/_posts/2022-01-04-examtopics.md
new file mode 100644
index 0000000000..cc03ae0766
--- /dev/null
+++ b/_posts/2022-01-04-examtopics.md
@@ -0,0 +1,26 @@
+---
+title: "Kudos to ExamTopics"
+last_modified_at: 2022-01-04T16:00:58-04:00
+tags:
+ - cert
+ - en
+toc: false
+---
+
+[![](/assets/images/posts/2022-01-04-examtopics.jpg)](https://www.examtopics.com/)
+
+I have been using the mocks from [ExamTopics](https://www.examtopics.com/) latelly to prepare to several certification exams and I have to say I found them the best material around.
+
+I personally prefer them over exam reviews/practice tests from paid platforms, for the following reasons:
+ - the community around
+ - free
+ - comments for questions: I learn a lot reading the discussion forum for each question
+ - updated: I found the questions from ExamTopics to be always relevant and updated, as you can infere from the comments
+
+At the moment of this writing, they have:
+ - 109 certification providers
+ - 1292 exams
+ - 126 average daily updates
+ - 2089 online users
+
+I believe in certification as a tool to make a positive change, and I hope the ExamTopics community stays relevant and grows over time.
\ No newline at end of file
diff --git a/_posts/2022-01-05-cert-roadmap.md b/_posts/2022-01-05-cert-roadmap.md
new file mode 100644
index 0000000000..86498932ad
--- /dev/null
+++ b/_posts/2022-01-05-cert-roadmap.md
@@ -0,0 +1,68 @@
+---
+title: "Certification preparation roadmap"
+last_modified_at: 2022-02-05T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - cert
+ - en
+ - huawei
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+I would like to share my favourite way to prepare for some certifications. As you can see, I always do (1) the corresponding course and then jump to (2) practice exams. For the practice exams I heavily rely on [ExamTopics](/examtopics).
+
+# AWS
+
+ 1. Do the corresponding [AWS Academy](/aws-academy) course
+ 2. Do the corresponding practice exam in the [AWS Skill Builder platform](/skillbuilder)
+ 3. Reviews/practice the corresponding tests from [ExamTopics](/examtopics), carefully reading the discussion forum for each question
+
+---
+**NOTE**
+
+With [AWS Academy](/aws-academy) courses you earn 50% discount for all AWS certifications
+
+---
+
+# Azure/Microsoft
+
+ 1. Do the corresponding [Microsoft Learn](https://docs.microsoft.com/en-us/learn/) course
+ 2. Reviews/practice the corresponding tests from [ExamTopics](/examtopics), carefully reading the discussion forum for each question
+
+---
+**NOTE**
+
+Lots of opportunities for doing Azure exams for free:
+ - [Microsoft Virtual Training Days](/azure-fundamentals)
+ - [Microsoft Ignite Cloud Skills Challenge](/microsoft-ignite)
+
+---
+
+# Huawei
+
+ 1. Do the corresponding [Huawei Talent](/haina-talent) course
+ 2. Reviews/practice the corresponding tests from the [Huawei Talent](/haina-talent) platform itself
+ 3. As a complement, reviews/practice the corresponding tests from [ExamTopics](/examtopics), carefully reading the discussion forum for each question
+
+---
+**NOTE**
+
+Lots of opportunities from the [Huawei ICT Academy program](/haina) for doing Huawei exams for free
+
+---
+
+# Red Hat
+
+ 1. Do the corresponding [Red Hat Learning Subscription](https://www.redhat.com/en/services/training/learning-subscription) course
+
+As all Red Hat exams are hands-on, and the [Red Hat Learning Subscription](https://www.redhat.com/en/services/training/learning-subscription) course includes lots of labs, there is no need for additional material.
+
+---
+**NOTE**
+
+With [Red Hat Academy](/redhat-academy) courses you earn 50% discount for all Red Hat certifications
+
+---
diff --git a/_posts/2022-01-06-maua-sdn.md b/_posts/2022-01-06-maua-sdn.md
new file mode 100644
index 0000000000..61ae0d4255
--- /dev/null
+++ b/_posts/2022-01-06-maua-sdn.md
@@ -0,0 +1,15 @@
+---
+title: "Curso de Especialização - Tecnologias Habilitadoras para Internet do Futuro"
+last_modified_at: 2022-01-06T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - networks
+ - pt
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2022-01-06-maua-sdn/0.png)](https://maua.br/pos-graduacao/especializacao-360h/tecnologias-habilitadoras-para-internet-do-futuro)
+
+[![](/assets/images/posts/2022-01-06-maua-sdn/1.png)](https://maua.br/pos-graduacao/especializacao-360h/tecnologias-habilitadoras-para-internet-do-futuro)
diff --git a/_posts/2022-01-07-shift-aws-foundations-6.md b/_posts/2022-01-07-shift-aws-foundations-6.md
new file mode 100644
index 0000000000..9908a41e6d
--- /dev/null
+++ b/_posts/2022-01-07-shift-aws-foundations-6.md
@@ -0,0 +1,49 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 6th edition"
+last_modified_at: 2022-01-07T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-01-07-shift-aws-foundations-6/0.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **18/01** e **22/02**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
+
+ [![](/assets/images/posts/2022-01-07-shift-aws-foundations-6/1.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
\ No newline at end of file
diff --git a/_posts/2022-01-21-shift-aws-dev-3.md b/_posts/2022-01-21-shift-aws-dev-3.md
new file mode 100644
index 0000000000..dce68c0209
--- /dev/null
+++ b/_posts/2022-01-21-shift-aws-dev-3.md
@@ -0,0 +1,108 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing - 3rd edition"
+last_modified_at: 2022-01-21T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-01-21-shift-aws-dev-3/1.jpg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
+
+
+ [![](/assets/images/posts/2022-01-21-shift-aws-dev-3/2.jpg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
\ No newline at end of file
diff --git a/_posts/2022-01-26-magma-cert.md b/_posts/2022-01-26-magma-cert.md
new file mode 100644
index 0000000000..9eaadedd3c
--- /dev/null
+++ b/_posts/2022-01-26-magma-cert.md
@@ -0,0 +1,28 @@
+---
+title: "MT101x: Magma Technical Certification Exam"
+last_modified_at: 2022-01-26T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - networks
+ - nfv
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-01-26-magma-cert/0.png)](https://magma.edunext.io/)
+
+The purpose of the Magma certification test is to evaluate the technical abilities of engineers to deploy and operate [Magma](https://www.magmacore.org/). The test will consist of 25 questions that will test your knowledge of the three main Magma components: the access gateway, the Orc8r, and the network management system. During this test, you will be free to use all resources available to you. A score of 80% or higher is required to pass the test.
+
+Prior to taking the test, you should have previously reviewed all documentation on the [Magma Docusaurus website](https://docs.magmacore.org/docs/next/basics/introduction.html) and the [Github repository](https://github.com/magma/magma). This includes reviewing the [Access Gateway Overview](https://magma.github.io/magma/docs/next/lte/architecture_overview) and Orc8r Overview subpages to understand the major services involved with Magma. These documents will be the primary sources for the information on the tests. Additionally, you should have installed an end to end test setup of Magma within your lab or working environment.
+
+## Registration
+
+[Register now](https://magma.edunext.io/)
+
+## Free certification
+
+At the end of the course, you can earn a certificate by passing a final exam.
+
+[![](/assets/images/posts/2022-01-26-magma-cert/1.png)](https://magma.edunext.io/certificates/dec605887c0547308253fd01a0972cef)
diff --git a/_posts/2022-02-03-kyverno-fundamentals.md b/_posts/2022-02-03-kyverno-fundamentals.md
new file mode 100644
index 0000000000..37781b5d50
--- /dev/null
+++ b/_posts/2022-02-03-kyverno-fundamentals.md
@@ -0,0 +1,34 @@
+---
+title: "Kyverno Fundamentals Certification"
+last_modified_at: 2022-02-03T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - iac
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-02-03-kyverno-fundamentals/0.png)](https://nirmata.com)
+
+I would like to strongly recomend the [Kyverno Fundamentals Certification](https://learn.nirmata.com/courses/kyverno-fundamentals-certification) course for everyone interested in Kubernetes security.
+
+[Kyverno](https://kyverno.io/) is a policy engine designed for Kubernetes. With Kyverno, policies are managed as Kubernetes resources and no new language is required to write policies. This allows using familiar tools such as kubectl, git, and kustomize to manage policies. Kyverno policies can validate, mutate, and generate Kubernetes resources. The Kyverno CLI can be used to test policies and validate resources as part of a CI/CD pipeline.
+
+This Kyverno Fundamentals Certification will test you the basic concepts of Kyverno, along with installation, policy definitions, results, and security.
+
+# What the Course Covers
+
+- About Kyverno
+- Basic Concepts
+- Installation
+- Policy Definitions
+- Quiz
+
+
+# Free certification
+
+At the end of the course, you can earn a certificate by passing a final exam.
+
+
\ No newline at end of file
diff --git a/_posts/2022-02-10-ipt-cloud.md b/_posts/2022-02-10-ipt-cloud.md
new file mode 100644
index 0000000000..06bd122923
--- /dev/null
+++ b/_posts/2022-02-10-ipt-cloud.md
@@ -0,0 +1,41 @@
+---
+title: "IPT curta duração - Cloud Computing"
+last_modified_at: 2022-03-15T16:00:58-04:00
+tags:
+ - aws
+ - azure
+ - classes
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-02-10-ipt-cloud/1.jpeg)](https://bit.ly/CloudComputing-IPT)
+
+Curso: ***CLOUD COMPUTING***
+
+[IPT – USP](https://www.ipt.br/) | CURSOS DE ESPECIALIZAÇÃO
+
+Carga horária: 40 horas
+ - Fundamentos de Computação em Nuvem
+ - Microsoft Azure, Amazon AWS e outros *players*
+ - IaaS - Infra como Serviço
+ - *Storage* como Serviço
+ - Redes em Nuvem
+ - Alocação de Recursos
+ - Manutenção e Operação
+
+-- Abordagem Hands-on --
+
+-- Aulas Síncronas --
+
+[Instituto de Pesquisas Tecnológicas do Estado de São Paulo – IPT](https://www.ipt.br/)
+
+Av. Prof. Almeida Prado, 532, Prédio 56, Cidade Universitária, São Paulo
+
+[Informações e inscrições](https://bit.ly/CloudComputing-IPT)
+
+Andréa Valero – E-mail: cursos@ipt.br – fone: (11) 3767-4226
+
+Faça [aqui](https://sapiens.ipt.br/Anexos/22.02.07.CloudComputing.V2.pdf?v=20220208181031) o *download* do folheto
+
+[![](/assets/images/posts/2022-02-10-ipt-cloud/2.jpeg)](https://bit.ly/CloudComputing-IPT)
diff --git a/_posts/2022-02-17-loki.md b/_posts/2022-02-17-loki.md
new file mode 100644
index 0000000000..aa371fae76
--- /dev/null
+++ b/_posts/2022-02-17-loki.md
@@ -0,0 +1,13 @@
+---
+title: "LOKI"
+last_modified_at: 2022-02-17T16:00:58-04:00
+tags:
+ - es
+ - openshift
+ - openstack
+ - redhat
+toc: false
+---
+
+![](/assets/images/posts/2022-02-17-loki.jpeg)
+
diff --git a/_posts/2022-03-11-huawey-rs-vs-datacom.md b/_posts/2022-03-11-huawey-rs-vs-datacom.md
new file mode 100644
index 0000000000..970729c074
--- /dev/null
+++ b/_posts/2022-03-11-huawey-rs-vs-datacom.md
@@ -0,0 +1,18 @@
+---
+title: "Huawei Routing & Switching vs Datacom"
+last_modified_at: 2022-03-18T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - events
+ - huawei
+ - pt
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2022-03-11-huawey-rs-vs-datacom.png)](https://isurvey.huawei.com/survey/#/privacy-page?surveyId=36063&customerId=0&placementId=0&channel=0)
+
+Nesta apresentação serão mostradas as diferenças entre a antiga trilha de certificação **Routing & Swithing** e sua substituta, **Datacom**. Será um evento online de uma hora de duração e quem realizar a inscrição pelo [link](https://isurvey.huawei.com/survey/#/privacy-page?surveyId=36063&customerId=0&placementId=0&channel=0) receberá um certificado de participação no evento.
+
+
\ No newline at end of file
diff --git a/_posts/2022-03-17-mct.md b/_posts/2022-03-17-mct.md
new file mode 100644
index 0000000000..a23e1b1c8c
--- /dev/null
+++ b/_posts/2022-03-17-mct.md
@@ -0,0 +1,96 @@
+---
+title: "Microsoft Certified Trainer (MCT) program"
+last_modified_at: 2022-03-17T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-03-17-mct.png)](https://csc.docs.microsoft.com/ignite/registration/fall2021)
+
+## Become a Microsoft Certified Trainer
+
+Microsoft Certified Trainers (MCTs) are the premier technical and instructional experts in Microsoft technologies. Join this exclusive group of worldwide Microsoft technical training professionals and reap the benefits of MCT training certification and membership.
+
+You will get exclusive benefits as an MCT including access to the complete library of official Microsoft training and certification products, substantial discounts on exams, books, and Microsoft products. In addition, you will be able to use Microsoft readiness resources to help you enhance your training career and engage with other MCT members in an online community forum. You will also receive invitations to exclusive Microsoft and local MCT community events.
+
+As a Microsoft Certified Trainer, you need to earn a Microsoft Certification, validating your experience and knowledge in using Microsoft products and solutions for each course you deliver.
+
+The Microsoft Certified Trainer program is an annual membership program. You must meet program requirements, complete an online application, and pay an annual fee to renew your training certification for the coming year.
+
+## Program Benefits
+
+As a Microsoft Certified Trainer, you will gain access to a personalized dashboard, where you can find a wide variety of useful MCT resources, download your MCT certificate, and view discounts available to you!
+
+In addition, you will have access to [MCT Central](https://www.microsoft.com/en-us/learning/mct-central.aspx), which helps MCTs stay up-to-date on the latest news, find jobs, connect with other MCTs around the world, and reach out to your MCT Regional Lead.
+
+[Explore all the benefits available to MCTs.](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE23o0Z)
+
+## MCT program entry requirements
+
+ - Possess a current Microsoft Certification or qualification eligible for the MCT program
+ * Microsoft Certified: Azure Administrator Associate
+ * Microsoft Certified: Azure Developer Associate
+ * Microsoft Certified: Azure Security Engineer Associate
+ * Microsoft Certified: Azure DevOps Engineer Expert
+ * Microsoft Certified: Azure Solutions Architect Expert
+ * Microsoft Certified: Azure AI Engineer Associate
+ * Microsoft Certified: Azure Data Scientist Associate
+ * Microsoft Certified: Azure Data Engineer Associate
+ * Microsoft Certified: Azure Database Administrator Associate
+ * Microsoft Certified: Azure Stack Hub Operator Associate
+ * Microsoft Certified: Azure Network Engineer Associate
+ * Microsoft Certified: Windows Server Hybrid Administrator Associate
+ * Microsoft 365 Certified: Enterprise Administrator Expert
+ * Microsoft 365 Certified: Modern Desktop Administrator Associate
+ * Microsoft 365 Certified: Security Administrator Associate
+ * Microsoft 365 Certified: Messaging Administrator Associate
+ * Microsoft 365 Certified: Developer Associate
+ * Microsoft 365 Certified: Teams Administrator Associate
+ * Microsoft 365 Certified: Teams Voice Engineer Expert
+ * Microsoft Certified: Power BI Data Analyst Associate
+ * Microsoft Certified: Power Platform Functional Consultant Associate
+ * Microsoft Certified: Power Platform App Maker Associate
+ * Microsoft Certified: Power Platform Developer Associate
+ * Microsoft Certified: Power Platform Solution Architect Expert
+ * Microsoft Certified: Dynamics 365 Business Central Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Sales Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Customer Service Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Marketing Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Field Service Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Finance Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Supply Chain Management, Manufacturing Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Supply Chain Management Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365 Commerce Functional Consultant Associate
+ * Microsoft Certified: Dynamics 365: Finance and Operations Apps Developer Associate
+ * Microsoft Certified: Dynamics 365: Finance and Operations Apps Solution Architect Expert
+ * Microsoft Certified: Security Operations Analyst Associate
+ * Microsoft Certified: Identity and Access Administrator Associate
+ * Microsoft Certified: Information Protection Administrator Associate
+ * Microsoft Office Specialist (MOS): Master 2016, Master 2013, Expert Excel 2016, Expert Excel 2013, Expert Word 2016, Expert Word 2013, Word Associate (Word and Word 2019), Excel Associate (Excel and Excel 2019), PowerPoint Associate (PowerPoint and PowerPoint 2019), Outlook Associate (Outlook and Outlook 2019), Microsoft Office Specialist: Associate (Office 365 and Office 2019), Word Expert (Word and Word 2019), Excel Expert (Excel and Excel 2019), Access Expert (Access and Access 2019) or Microsoft Office Specialist: Expert (Office 365 and Office 2019)
+
+ - Demonstrate instructional skills verified by one of the following Instructional Skills Certification
+ * CompTIA CTT+.
+ * Essential Educate Trainer (internal Microsoft - certification).
+ * Fourth Dimension Technologies, Inc.
+ * Friesen Kaye and Associates.
+ * Global Knowledge Instructional Skills Certification.
+ * IAMCT Approved Technical Trainer (IAMCT ATT).
+ * IPM (Institut für Personalberatung und Managemententwicklung).
+ * Learning and Performance Institute Trainer Performance Monitoring and Assessment (TPMA).
+ * Learning Tree Train the Trainer Program.
+ * Marcom Deli.
+ * Microsoft Certified Trainer Instructional Skills Certification (MCT-ISC).
+ * Microsoft Customer Service & Support (CSS) Trainer Certification.
+ * Microsoft Core Training Skills.
+ * New Horizons Instructional Skills Certification.
+ * PrepMasters USA.
+ * Modern Classroom Certified Trainer (MCCT®) [For college staff or professors only].
+ * Certified Virtual Educator [For college staff or professors only].
+ * Sinerji Egitim
+- OR provide reference supporting at least one year of instructional experience.
+
+
\ No newline at end of file
diff --git a/_posts/2022-03-21-iac-ansible-aws.md b/_posts/2022-03-21-iac-ansible-aws.md
new file mode 100644
index 0000000000..d7237d263f
--- /dev/null
+++ b/_posts/2022-03-21-iac-ansible-aws.md
@@ -0,0 +1,25 @@
+---
+title: "IaC series: Ansible na AWS"
+last_modified_at: 2022-03-21T16:00:58-04:00
+tags:
+ - ansible
+ - aws
+ - classes
+ - fiap
+ - iac
+ - pt
+ - series
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#infrastructure-as-code-iac) sobre Infraestructure as a Code (IaC).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/multicloud/lab15-ansible.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2022-03-21-iac-terraform-aws.md b/_posts/2022-03-21-iac-terraform-aws.md
new file mode 100644
index 0000000000..86a7e2c5a0
--- /dev/null
+++ b/_posts/2022-03-21-iac-terraform-aws.md
@@ -0,0 +1,25 @@
+---
+title: "IaC series: Terraform na AWS"
+last_modified_at: 2022-03-21T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - iac
+ - pt
+ - series
+ - terraform
+toc: true
+toc_sticky: true
+---
+
+[Serie de artigos](/series/#infrastructure-as-code-iac) sobre Infraestructure as a Code (IaC).
+
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/fiap/master/cld/multicloud/lab14-iaas-terraform.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2022-03-21-mie.md b/_posts/2022-03-21-mie.md
new file mode 100644
index 0000000000..83b9f33e54
--- /dev/null
+++ b/_posts/2022-03-21-mie.md
@@ -0,0 +1,27 @@
+---
+title: "Microsoft Innovative Educator (MIE) programs"
+last_modified_at: 2022-03-21T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - classes
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-03-21-mie/1.jpeg)](https://education.microsoft.com/en-us/resource/18485a7b)
+
+## About the Microsoft Innovative Educator Programs
+
+The [Microsoft Innovative Educator (MIE)](https://education.microsoft.com/en-us/resource/18485a7b) programs recognize global educator visionaries who are using technology to pave the way for their peers for better learning and student outcomes. These are a variety of programs to help both educators who are just beginning this journey, as well as programs for educators who are leaders in innovative education.
+
+## Microsoft Innovative Educator
+
+Start your journey by becoming a Microsoft Innovative Educator. MIEs use Microsoft tools in the classroom and have learned the fundamentals of some of these tools. This is the first step on a journey of joining a professional learning network of enthusiastic educators who come together to learn, share, and grow.
+
+Requirements:
+ - Join the [Microsoft Educator Center](https://education.microsoft.com/)
+ - Complete 2 hours of training
+
+ ![](/assets/images/posts/2022-03-21-mie/2.png)
\ No newline at end of file
diff --git a/_posts/2022-03-24-riab.md b/_posts/2022-03-24-riab.md
new file mode 100644
index 0000000000..eb272da88c
--- /dev/null
+++ b/_posts/2022-03-24-riab.md
@@ -0,0 +1,325 @@
+---
+title: "SDRAN-in-a-Box"
+last_modified_at: 2022-03-24T16:00:58-04:00
+tags:
+ - ansible
+ - aws
+ - en
+ - networks
+ - nfv
+ - onf
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[SDRAN-in-a-Box (RiaB)](https://docs.sd-ran.org/master/riab_install_index.html) is an [ONF](/onf) project that consists in a [SD-RAN cluster](https://docs.sd-ran.org/sdran-1.1/) which is able to operate within a single host machine . It provides a development/test environment for developers/users in ONF SD-RAN community.
+
+RiaB deploys the complete SD-RAN infrastructure over Kubernetes:
+ - the EPC (OMEC)
+ - an emulated RAN (CU/DU/UE)
+ - the ONOS RAN Intelligent Controller (ONOS RIC)
+
+[![](/assets/images/posts/2022-03-24-riab.png)](https://docs.sd-ran.org/sdran-1.1/)
+
+## Features
+ - Installs Kubernetes and Helm
+ - Provides one of three choices to emulate/simulate Radio Access Networks (RANs)
+ * RAN-Simulator
+ * OMEC / CU-CP / OAI nFAPI emulator for DU/UE
+ * OMEC / CU-CP / OAI DU and UE with USRP hardware and/or LTE smartphones
+ - Support End-to-End (E2E) connectivity test
+ * User plane E2E tests
+ * SD-RAN control plane E2E tests
+
+
+## Prerequisites
+
+In order to run RiaB, we should prepare at least a single machine (any baremetal server or on premises/cloud VM) with the following minimum requirements:
+ - CPU: Intel CPU and Haswell microarchitecture or beyond; at least 4 cores
+ - OS: Ubuntu 18.04
+ - RAM: At least 16GB
+ - Storage: At least 50GB (recommendation: 100GB)
+
+For this testing it was used a Ubuntu 18.04 `t2.xlarge` (4 vCPUs / 16 GB) instance on AWS.
+
+## Installation
+
+Clone the [RiaB repository](https://github.com/onosproject/sdran-in-a-box):
+```
+$ git clone https://github.com/onosproject/sdran-in-a-box
+```
+
+Install the required dependencies:
+```
+$ sudo apt install -y make
+```
+
+Start the deployment procedure:
+```
+$ cd /path/to/sdran-in-a-box
+$ make riab OPT=oai VER=stable
+```
+
+After a few minutes and if we don’t see any error or failure messages, check that everything is up and running:
+```
+$ kubectl get pods -A
+NAMESPACE NAME READY STATUS RESTARTS AGE
+default router 1/1 Running 0 30m
+kube-system atomix-controller-99f978c7d-7dngl 1/1 Running 0 30m
+kube-system atomix-raft-storage-controller-75979cfff8-n2g7b 1/1 Running 0 29m
+kube-system calico-kube-controllers-7f9675c8b8-xgx4b 1/1 Running 0 31m
+kube-system calico-node-qfl9t 1/1 Running 0 31m
+kube-system coredns-dff8fc7d-x7927 1/1 Running 0 31m
+kube-system dns-autoscaler-5d74bb9b8f-lwbxb 1/1 Running 0 31m
+kube-system kube-apiserver-node1 1/1 Running 0 32m
+kube-system kube-controller-manager-node1 1/1 Running 0 32m
+kube-system kube-multus-ds-amd64-fj22t 1/1 Running 0 31m
+kube-system kube-proxy-jr2c8 1/1 Running 0 32m
+kube-system kube-scheduler-node1 1/1 Running 1 32m
+kube-system kubernetes-dashboard-667c4c65f8-v8tgk 1/1 Running 0 31m
+kube-system kubernetes-metrics-scraper-54fbb4d595-s7v8z 1/1 Running 0 31m
+kube-system nodelocaldns-2np2q 1/1 Running 0 31m
+kube-system onos-operator-app-676674b79c-nl9gl 1/1 Running 0 29m
+kube-system onos-operator-topo-7698956594-2krs5 1/1 Running 0 29m
+riab cassandra-0 1/1 Running 0 29m
+riab hss-0 1/1 Running 0 29m
+riab mme-0 4/4 Running 0 29m
+riab oai-enb-cu-0 1/1 Running 0 26m
+riab oai-enb-du-0 1/1 Running 0 24m
+riab oai-ue-0 1/1 Running 0 23m
+riab onos-a1t-84db77df99-4zpsd 2/2 Running 0 27m
+riab onos-cli-6b746874c8-njgn8 1/1 Running 0 27m
+riab onos-config-7bd4b6f7f6-nb6c8 4/4 Running 0 27m
+riab onos-consensus-store-0 1/1 Running 0 27m
+riab onos-e2t-58b4cd867-f4xbb 3/3 Running 0 27m
+riab onos-kpimon-966bdf77f-4ss4q 2/2 Running 0 27m
+riab onos-rsm-86df4894bd-h49d9 2/2 Running 0 27m
+riab onos-topo-7cc9d754d7-nbh9w 3/3 Running 0 27m
+riab onos-uenib-779cb5dbd6-wsqzl 3/3 Running 0 27m
+riab pcrf-0 1/1 Running 0 29m
+riab spgwc-0 2/2 Running 0 29m
+riab upf-0 4/4 Running 0 27m
+```
+
+## Resource usage
+
+For this particular `t2.xlarge` instance:
+ - Load
+ ```
+ $ uptime
+ 17:16:22 up 56 min, 2 users, load average: 4.27, 5.60, 5.49
+ ```
+
+ - Memory
+ ```
+ $ free -h
+ total used free shared buff/cache available
+ Mem: 15G 3.0G 228M 836M 12G 11G
+ Swap: 0B 0B 0B
+ ```
+
+ - Disk
+ ```
+ $ df -h
+ Filesystem Size Used Avail Use% Mounted on
+ udev 7.9G 0 7.9G 0% /dev
+ tmpfs 1.6G 4.7M 1.6G 1% /run
+ /dev/xvda1 97G 15G 82G 16% /
+ tmpfs 7.9G 0 7.9G 0% /dev/shm
+ tmpfs 5.0M 0 5.0M 0% /run/lock
+ tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
+ /dev/loop0 43M 43M 0 100% /snap/snapd/14066
+ /dev/loop1 56M 56M 0 100% /snap/core18/2253
+ /dev/loop2 25M 25M 0 100% /snap/amazon-ssm-agent/4046
+ tmpfs 1.6G 0 1.6G 0% /run/user/1000
+ ```
+
+## End-to-End (E2E) tests for verification
+
+In order to check whether everything is running, we should conduct some E2E tests and check their results. It is possible to do E2E tests on the user plane and SD-RAN control plane.
+
+### User plane
+
+Type `make test-user-plane` on the prompt for the user plane verification. If the ping is working without any loss, the user plane is working well.
+
+```
+$ make test-user-plane
+Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+*** T1: Internal network test: ping 192.168.250.1 (Internal router IP) ***
+PING 192.168.250.1 (192.168.250.1) from 172.250.255.254 oaitun_ue1: 56(84) bytes of data.
+64 bytes from 192.168.250.1: icmp_seq=1 ttl=64 time=38.9 ms
+64 bytes from 192.168.250.1: icmp_seq=2 ttl=64 time=46.9 ms
+64 bytes from 192.168.250.1: icmp_seq=3 ttl=64 time=33.1 ms
+
+--- 192.168.250.1 ping statistics ---
+3 packets transmitted, 3 received, 0% packet loss, time 2001ms
+rtt min/avg/max/mdev = 33.168/39.706/46.976/5.660 ms
+*** T2: Internet connectivity test: ping to 8.8.8.8 ***
+PING 8.8.8.8 (8.8.8.8) from 172.250.255.254 oaitun_ue1: 56(84) bytes of data.
+64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=41.4 ms
+64 bytes from 8.8.8.8: icmp_seq=2 ttl=50 time=41.0 ms
+64 bytes from 8.8.8.8: icmp_seq=3 ttl=50 time=49.0 ms
+
+--- 8.8.8.8 ping statistics ---
+3 packets transmitted, 3 received, 0% packet loss, time 2002ms
+rtt min/avg/max/mdev = 41.047/43.850/49.062/3.688 ms
+*** T3: DNS test: ping to google.com ***
+PING google.com (172.253.115.139) from 172.250.255.254 oaitun_ue1: 56(84) bytes of data.
+64 bytes from bg-in-f139.1e100.net (172.253.115.139): icmp_seq=1 ttl=99 time=34.4 ms
+64 bytes from bg-in-f139.1e100.net (172.253.115.139): icmp_seq=2 ttl=99 time=43.0 ms
+64 bytes from bg-in-f139.1e100.net (172.253.115.139): icmp_seq=3 ttl=99 time=42.4 ms
+
+--- google.com ping statistics ---
+3 packets transmitted, 3 received, 0% packet loss, time 2001ms
+rtt min/avg/max/mdev = 34.461/39.955/43.000/3.892 ms
+```
+
+### SD-RAN control plane
+
+In order to verify the SD-RAN control plane:
+
+ - `make test-kpimon`: to see the number of active UEs
+ ```
+ $ make test-kpimon
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get KPIMON result through CLI ***
+ Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum
+ e2:4/e00/2/64 1 e0000 17:03:42.0 1 1 1 1 0
+ ```
+ - `make test-e2-subscription`: to see e2 connection and subscription
+ ```
+ $ make test-e2-subscription
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get E2 subscriptions through CLI ***
+ Subscription ID Revision Service Model ID E2 NodeID Encoding Phase State
+ 9a8f85fa67a6ef913ef4c0fa8f8fdee4:e2:4/e00/2/64 67 oran-e2sm-kpm:v2 e2:4/e00/2/64 ASN1_PER SUBSCRIPTION_OPEN SUBSCRIPTION_COMPLETE
+ 43aa0af7ce9a05142e5235c7a8efbd9b:e2:4/e00/2/64 73 oran-e2sm-rsm:v1 e2:4/e00/2/64 ASN1_PER SUBSCRIPTION_OPEN SUBSCRIPTION_COMPLETE
+ ```
+ - `make test-rnib` and `make test-uenib`: to check information in R-NIB and UE-NIB
+
+ ```
+ $ make test-rnib
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get R-NIB result through CLI ***
+ ID: e2:4/e00/3/c8
+ Kind ID: e2node
+ Labels:
+ Source Id's:
+ Target Id's: uuid:bbe3703e-fc46-409c-92d3-6cf11aa65b07
+ Aspects:
+ - onos.topo.MastershipState={"term":"1","nodeId":"uuid:bbe3703e-fc46-409c-92d3-6cf11aa65b07"}
+ - onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}],"ranFunctionIDs":[1]}}}
+
+ ID: e2:4/e00/2/64/e0000
+ Kind ID: e2cell
+ Labels:
+ Source Id's:
+ Target Id's: uuid:74c614b5-8666-67e9-d1a5-97d95ae83dcd
+ Aspects:
+ - onos.topo.E2Cell={"cellObjectId":"1","cellGlobalId":{"value":"e0000","type":"ECGI"},"kpiReports":{"RRC.ConnEstabAtt.sum":1,"RRC.ConnEstabSucc.sum":1,"RRC.ConnMax":1,"RRC.ConnMean":1,"RRC.ConnReEstabAtt.sum":0}}
+
+ ID: gnmi:onos-config-7bd4b6f7f6-nb6c8
+ Kind ID: onos-config
+ Labels:
+ Source Id's:
+ Target Id's:
+ Aspects:
+ - onos.topo.Lease={"expiration":"2022-03-24T17:04:21.115061844Z"}
+
+ ID: e2:4/e00/2/64
+ Kind ID: e2node
+ Labels:
+ Source Id's: uuid:74c614b5-8666-67e9-d1a5-97d95ae83dcd
+ Target Id's: uuid:077dca9f-a558-4728-8b6e-6160301a12be
+ Aspects:
+ - onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{"slicingConfigType":"E2_SM_RSM_COMMAND_EVENT_TRIGGERS"}]}]}],"ranFunctionIDs":[2]},"1.3.6.1.4.1.53148.1.2.2.2":{"oid":"1.3.6.1.4.1.53148.1.2.2.2","name":"ORAN-E2SM-KPM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.KPMRanFunction","reportStyles":[{"name":"O-CU-UP Measurement Container for the EPC connected deployment","type":6,"measurements":[{"id":"value:1","name":"RRC.ConnEstabAtt.sum"},{"id":"value:2","name":"RRC.ConnEstabSucc.sum"},{"id":"value:3","name":"RRC.ConnReEstabAtt.sum"},{"id":"value:4","name":"RRC.ConnMean"},{"id":"value:5","name":"RRC.ConnMax"}]}]}],"ranFunctionIDs":[1]}}}
+ - onos.topo.MastershipState={"term":"1","nodeId":"uuid:077dca9f-a558-4728-8b6e-6160301a12be"}
+
+ ID: a1:onos-a1t-84db77df99-4zpsd
+ Kind ID: a1t
+ Labels:
+ Source Id's:
+ Target Id's:
+ Aspects:
+ - onos.topo.A1TInfo={"interfaces":[{"type":"INTERFACE_A1AP","ip":"192.168.84.22","port":9639}]}
+
+ ID: e2:onos-e2t-58b4cd867-f4xbb
+ Kind ID: e2t
+ Labels:
+ Source Id's: uuid:077dca9f-a558-4728-8b6e-6160301a12be, uuid:bbe3703e-fc46-409c-92d3-6cf11aa65b07
+ Target Id's:
+ Aspects:
+ - onos.topo.E2TInfo={"interfaces":[{"type":"INTERFACE_E2AP200","ip":"192.168.84.23","port":36421},{"type":"INTERFACE_E2T","ip":"192.168.84.23","port":5150}]}
+ - onos.topo.Lease={"expiration":"2022-03-24T17:04:21.582768229Z"}
+
+ $ make test-uenib
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get UE-NIB result through CLI ***
+ ID: ac303794-2745-4159-b86e-cc203aa3f6b1
+ Aspects:
+ - onos.uenib.RsmUeInfo={"globalUeId":"ac303794-2745-4159-b86e-cc203aa3f6b1","ueIdList":{"duUeF1apId":{"value":"9594"},"cuUeF1apId":{"value":"9594"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[]}
+ ```
+
+ - Run `make test-kpimon` before and after detaching the UE to check if the number of active UEs changes. `RRC.ConnMean` shows the number of active UEs changing from 1 to 0, since an emulated UE is detached.
+ ```
+ $ make test-kpimon
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get KPIMON result through CLI ***
+ Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum
+ e2:4/e00/2/64 1 e0000 17:04:24.0 1 1 1 1 0
+
+ $ make detach-ue
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000
+
+ OK
+ echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000
+
+ OK
+
+ $ make test-kpimon
+ Helm values.yaml file: /home/ubuntu/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml
+ HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces
+ HEAD is now at acb2f51 Bump up UE chart version - CI test again (#1105)
+ *** Get KPIMON result through CLI ***
+ Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum
+ e2:4/e00/2/64 1 e0000 17:04:35.0 1 1 1 0 0
+ ```
+
+## Radio Spectrum Management (RSM) tests
+
+Create a slice:
+
+```
+$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm create slice --e2NodeID e2:4/e00/3/c8 --scheduler RR --sliceID 1 --weight 30 --sliceType DL
+```
+
+Check `onos-topo` result:
+```
+$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v
+
+ID: e2:4/e00/3/c8
+Kind ID: e2node
+Labels:
+Source Id's:
+Target Id's: uuid:bbe3703e-fc46-409c-92d3-6cf11aa65b07
+Aspects:
+- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}],"ranFunctionIDs":[1]}}}
+- onos.topo.MastershipState={"term":"1","nodeId":"uuid:bbe3703e-fc46-409c-92d3-6cf11aa65b07"}
+- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":30},"ueIdList":[]}]}
+```
\ No newline at end of file
diff --git a/_posts/2022-03-25-aiab.md b/_posts/2022-03-25-aiab.md
new file mode 100644
index 0000000000..17223a8421
--- /dev/null
+++ b/_posts/2022-03-25-aiab.md
@@ -0,0 +1,206 @@
+---
+title: "Aether-in-a-Box"
+last_modified_at: 2022-03-25T16:00:58-04:00
+tags:
+ - ansible
+ - aws
+ - en
+ - networks
+ - nfv
+ - onf
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[Aether-in-a-Box (AiaB)](https://docs.aetherproject.org/master/developer/aiab.html) is an [ONF](/onf) project that provides an easy way to deploy [Aether’s SD-CORE and Runtime Operational Control (ROC) components](https://docs.aetherproject.org/master/index.html), and then run basic tests to validate the installation.
+
+AiaB can be set up with a 4G or 5G SD-CORE. In either case, SD-CORE configuration can be done with or without the ROC. The ROC provides an interactive GUI for examining and changing the configuration, and is used to manage the production Aether; it can be deployed to test the integration between ROC and SD-CORE. If the ROC is not deployed, a simple tool called [SimApp](https://docs.sd-core.opennetworking.org/master/configuration/config_simapp.html) is used to configure the required state in SD-CORE for testing core functionality.
+
+Helm charts are the primary method of installing the SD-CORE and ROC resources. AiaB offers a great deal of flexibility regarding which Helm chart versions to install:
+ - Local definitions of charts (for testing Helm chart changes)
+ - Latest published charts (for deploying a development version of Aether)
+ - Specified versions of charts (for deploying a specific Aether release)
+
+[![](/assets/images/posts/2022-03-25-aiab/0.png)](https://opennetworking.org/aether/)
+
+## Prerequisites
+
+In order to run AiaB, we should prepare at least a single machine (any baremetal server or on premises/cloud VM) with the following minimum requirements:
+ - CPU: Intel CPU and Haswell microarchitecture or beyond; at least 4 cores
+ - OS: Ubuntu 18.04 with Kernel 4.15 or later
+ - RAM: At least 12GB
+ - Storage: At least 50GB
+
+For this testing it was used a Ubuntu 18.04 `t2.xlarge` (4 vCPUs / 16 GB) instance on AWS (with port 31194 opened in the corresponding security group).
+
+## Installation
+
+Clone the [AiaB repository](https://gerrit.opencord.org/):
+```
+$ git clone https://gerrit.opencord.org/aether-in-a-box
+```
+
+Clone these additional repositories:
+```
+$ mkdir -p ~/cord
+$ cd ~/cord
+$ git clone "https://gerrit.opencord.org/sdcore-helm-charts"
+$ git clone "https://gerrit.opencord.org/roc-helm-charts"
+```
+
+Install the ROC (in this case to configure the 5G SD-CORE):
+```
+$ cd /path/to/aether-in-a-box
+$ make roc-5g-models
+...
+until kubectl -n aether-roc exec pod/onos-cli-5d448ff6c4-b7j9p -- \
+ curl -s -f -L -X PATCH "http://aether-roc-api:8181/aether-roc-api" \
+ --header 'Content-Type: application/json' \
+ --data-raw "$(cat /home/ubuntu/aether-in-a-box//roc-5g-models.json)"; do sleep 5; done
+"uuid:a58bd6b9-d8cc-411d-ac14-17cec7153221"
+```
+
+To deploy the 5G SD-CORE and run a test with gNBSim that performs Registration + UE-initiated PDU Session Establishment + sends User Data packets:
+```
+$ make 5g-test
+...
+2022-03-25T15:15:45Z [INFO][GNBSIM][GNodeB][GnbUpUe][3858759684] Handling: QUIT-EVENT
+2022-03-25T15:15:45Z [INFO][GNBSIM][GNodeB][GnbUpUe][3858759684] Gnb User-plane UE Context terminated
+2022-03-25T15:15:45Z [INFO][GNBSIM][GNodeB][GnbCpUe][3858759684] gNB Control-Plane UE context terminated
+2022-03-25T15:15:45Z [DEBU][GNBSIM][RealUe][PduSession][imsi-208930100007496][10] Received last downlink data packet
+2022-03-25T15:15:45Z [INFO][GNBSIM][RealUe][PduSession][imsi-208930100007496][10] Pdu Session terminated
+2022-03-25T15:15:45Z [INFO][GNBSIM][RealUe][imsi-208930100007496] Real UE terminated
+2022-03-25T15:15:45Z [INFO][GNBSIM][SimUe][imsi-208930100007496] Sim UE terminated
+2022-03-25T15:15:45Z [INFO][GNBSIM][SimUe][imsi-208930100007496] SIM UE go routine complete
+2022-03-25T15:15:47Z [INFO][GNBSIM][Summary] Profile Name: profile2 , Profile Type: pdusessest
+2022-03-25T15:15:47Z [INFO][GNBSIM][Summary] Ue's Passed: 5 , Ue's Failed: 0
+2022-03-25T15:15:47Z [INFO][GNBSIM][Summary] Simulation Result: PASS
+```
+
+Check that everything is up and running:
+```
+$ kubectl get po -A
+NAMESPACE NAME READY STATUS RESTARTS AGE
+aether-roc aether-roc-api-8788d4cf6-dhsd9 1/1 Running 0 6m19s
+aether-roc aether-roc-gui-v2-6d674fd446-jgngs 1/1 Running 0 6m19s
+aether-roc aether-roc-umbrella-grafana-74b4c6bcf6-vwkh7 2/2 Running 0 6m19s
+aether-roc aether-roc-umbrella-kube-state-metrics-6c57fdcdcc-vt6vl 1/1 Running 0 6m19s
+aether-roc aether-roc-umbrella-prometheus-acc-alertmanager-55ddf7468542std 2/2 Running 0 6m19s
+aether-roc aether-roc-umbrella-prometheus-acc-server-6df774dc96-nncgk 2/2 Running 0 6m19s
+aether-roc aether-roc-umbrella-prometheus-ace-server-7d8c6d4578-k7p6x 2/2 Running 0 6m19s
+aether-roc aether-roc-umbrella-prometheus-amp-server-67cc457fc7-hdslj 2/2 Running 0 6m18s
+aether-roc aether-roc-websocket-855d64549b-zjnbh 1/1 Running 0 6m19s
+aether-roc demo-exporter-f97895d8f-2cjl9 1/1 Running 0 6m19s
+aether-roc onos-cli-5d448ff6c4-b7j9p 1/1 Running 0 6m19s
+aether-roc onos-config-7886676d5b-vtkrb 6/6 Running 0 6m18s
+aether-roc onos-consensus-store-0 1/1 Running 0 6m19s
+aether-roc onos-topo-585c7c8976-jtg5t 3/3 Running 0 6m19s
+aether-roc prom-label-proxy-acc-58dbc89fb8-s595b 1/1 Running 0 6m19s
+aether-roc prom-label-proxy-amp-5d54b6d445-55wqv 1/1 Running 0 6m19s
+aether-roc sdcore-adapter-v2-5646d455b9-ljjpc 1/1 Running 0 6m18s
+aether-roc subscriber-proxy-7d989c6b5d-kkdbn 1/1 Running 0 6m19s
+default router 1/1 Running 0 3m46s
+kube-system atomix-controller-6989fbdbf-qdp48 1/1 Running 0 7m19s
+kube-system atomix-raft-storage-controller-9b4678b97-vrrrq 1/1 Running 0 6m56s
+kube-system calico-kube-controllers-dbfbbc4cb-7m8t4 1/1 Running 0 8m33s
+kube-system calico-node-cxlfs 1/1 Running 0 8m42s
+kube-system coredns-bbb7d66cd-4k86p 1/1 Running 0 8m20s
+kube-system dns-autoscaler-7cdcfcf64f-s8hdf 1/1 Running 0 8m17s
+kube-system kube-apiserver-node1 1/1 Running 0 9m26s
+kube-system kube-controller-manager-node1 1/1 Running 0 9m26s
+kube-system kube-multus-ds-amd64-z5jp6 1/1 Running 0 8m36s
+kube-system kube-proxy-9b5h5 1/1 Running 0 8m42s
+kube-system kube-scheduler-node1 1/1 Running 0 9m26s
+kube-system nodelocaldns-52bkt 1/1 Running 0 8m16s
+kube-system onos-operator-app-6b98cbf864-64vwv 1/1 Running 0 6m43s
+kube-system onos-operator-topo-6ddd5875ff-5rqd7 1/1 Running 0 6m44s
+omec amf-7465456d9f-5mbzx 1/1 Running 0 3m25s
+omec ausf-654bbdd6b-7bd55 1/1 Running 0 3m25s
+omec gnbsim-0 1/1 Running 0 3m25s
+omec mongodb-5fcdcff994-bqnpm 1/1 Running 0 3m25s
+omec nrf-5db5789644-65wmd 1/1 Running 0 3m25s
+omec nssf-775fdfbbb4-mbs4t 1/1 Running 0 3m25s
+omec pcf-756b565d85-h8p2w 1/1 Running 0 3m25s
+omec simapp-65dc44b9d-gj9fh 1/1 Running 0 3m25s
+omec smf-9bbcf84bc-5xdbq 1/1 Running 0 3m25s
+omec udm-5ff558bc69-pfpxh 1/1 Running 0 3m25s
+omec udr-cc4654c64-x5pfr 1/1 Running 0 3m25s
+omec upf-0 5/5 Running 0 3m25s
+omec webui-6db4cfdc55-2wlp7 1/1 Running 0 3m25s
+```
+
+## Resource usage
+
+For this particular `t2.xlarge` instance:
+ - Load
+ ```
+ $ uptime
+ 15:16:13 up 45 min, 2 users, load average: 1.81, 3.32, 2.17
+ ```
+
+ - Memory
+ ```
+ $ free -h
+ total used free shared buff/cache available
+ Mem: 15G 2.7G 1.4G 825M 11G 12G
+ Swap: 0B 0B 0B
+ ```
+
+ - Disk
+ ```
+ $ $ df -h | egrep -v 'overlay|shm'
+ Filesystem Size Used Avail Use% Mounted on
+ udev 7.9G 0 7.9G 0% /dev
+ tmpfs 1.6G 8.8M 1.6G 1% /run
+ /dev/xvda1 97G 12G 86G 12% /
+ tmpfs 5.0M 0 5.0M 0% /run/lock
+ tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
+ /dev/loop0 43M 43M 0 100% /snap/snapd/14066
+ /dev/loop1 56M 56M 0 100% /snap/core18/2253
+ /dev/loop2 25M 25M 0 100% /snap/amazon-ssm-agent/4046
+ tmpfs 1.6G 0 1.6G 0% /run/user/1000
+ ```
+
+## ROC GUI
+
+The ROC GUI is available on port 31194 on the host running AiaB.
+
+ - Dashboard
+ ![](/assets/images/posts/2022-03-25-aiab/01.png)
+
+ - Alert view
+ ![](/assets/images/posts/2022-03-25-aiab/02.png)
+
+ - Slice view
+ ![](/assets/images/posts/2022-03-25-aiab/03.png)
+
+ - User plane function view
+ ![](/assets/images/posts/2022-03-25-aiab/04.png)
+
+ - Device groups view
+ ![](/assets/images/posts/2022-03-25-aiab/05.png)
+
+ - Devices view
+ ![](/assets/images/posts/2022-03-25-aiab/06.png)
+
+ - SIM cards view
+ ![](/assets/images/posts/2022-03-25-aiab/07.png)
+
+ - Sites view
+ ![](/assets/images/posts/2022-03-25-aiab/08.png)
+
+ - Small cells view
+ ![](/assets/images/posts/2022-03-25-aiab/09.png)
+
+ - Traffic classes view
+ ![](/assets/images/posts/2022-03-25-aiab/10.png)
+
+ - IP domains view
+ ![](/assets/images/posts/2022-03-25-aiab/11.png)
+
+ - Enterprises view
+ ![](/assets/images/posts/2022-03-25-aiab/12.png)
+
+ - Connectivity services view
+ ![](/assets/images/posts/2022-03-25-aiab/13.png)
diff --git a/_posts/2022-04-01-shift-aws-foundations-7.md b/_posts/2022-04-01-shift-aws-foundations-7.md
new file mode 100644
index 0000000000..5f2cf9bdea
--- /dev/null
+++ b/_posts/2022-04-01-shift-aws-foundations-7.md
@@ -0,0 +1,47 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 7th edition"
+last_modified_at: 2022-04-01T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-04-01-shift-aws-foundations-7.jpg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **05/04** e **10/05**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2022-04-08-hcia-19.md b/_posts/2022-04-08-hcia-19.md
new file mode 100644
index 0000000000..caae75a21d
--- /dev/null
+++ b/_posts/2022-04-08-hcia-19.md
@@ -0,0 +1,27 @@
+---
+title: "HCIA Datacom - 19th edition"
+last_modified_at: 2022-04-08T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-04-08-hcia-19.jpeg)](https://www.sympla.com.br/treinamento-em-redes---19-edicao-copia__1543152)
+
+Informamos que estão abertas as inscrições do **19º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Datacom V1.0**, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/treinamento-em-redes---19-edicao-copia__1543152).
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
\ No newline at end of file
diff --git a/_posts/2022-04-12-aws-certs-desconto.md b/_posts/2022-04-12-aws-certs-desconto.md
new file mode 100644
index 0000000000..27a139aaf5
--- /dev/null
+++ b/_posts/2022-04-12-aws-certs-desconto.md
@@ -0,0 +1,21 @@
+---
+title: "Exames de Certificação AWS com desconto"
+last_modified_at: 2022-04-12T17:00:58-04:00
+tags:
+ - aws
+ - cert
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-04-12-aws-certs-desconto/1.png)](https://pages.awscloud.com/LATAM-launch-STR-aws-certification-disc-br-2022-interest.html)
+
+A AWS está com descontos de 50% a 85% nas certificações:
+ - AWS Certified Cloud Practitioner - 85% de desconto
+ - AWS Certified Developer Associate - 50% de desconto
+ - AWS Certified Solutions Architect Associate - 50% de desconto
+
+Mais informações no seguinte [link](https://pages.awscloud.com/LATAM-launch-STR-aws-certification-disc-br-2022-interest.html).
+
+Passo a passo de como obter o desconto:
+![](/assets/images/posts/2022-04-12-aws-certs-desconto/2.png)
\ No newline at end of file
diff --git a/_posts/2022-04-12-shift-aws-dev-4.md b/_posts/2022-04-12-shift-aws-dev-4.md
new file mode 100644
index 0000000000..f5d046d9ce
--- /dev/null
+++ b/_posts/2022-04-12-shift-aws-dev-4.md
@@ -0,0 +1,108 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing - 4th edition"
+last_modified_at: 2022-04-12T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-04-12-shift-aws-dev-4/1.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
+
+
+ [![](/assets/images/posts/2022-04-12-shift-aws-dev-4/2.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
\ No newline at end of file
diff --git a/_posts/2022-04-14-aws-learning-badges.md b/_posts/2022-04-14-aws-learning-badges.md
new file mode 100644
index 0000000000..8d8df4d3ea
--- /dev/null
+++ b/_posts/2022-04-14-aws-learning-badges.md
@@ -0,0 +1,28 @@
+---
+title: "AWS Learning Badges"
+last_modified_at: 2022-04-14T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - en
+toc: false
+---
+
+## What is an AWS Learning Badge?
+
+AWS Learning badges are credentials that offer these benefits:
+ - AWS digital badges demonstrate your knowledge and skills for specific AWS cloud topics, such as Object Storage
+ - AWS digital badges are shareable on social networks to help you stand out to recruiters and prospective hiring managers
+ - AWS digital badges are free to earn and share
+
+## What types of AWS Learning Badges are available?
+
+AWS Learning badges are aligned to select [AWS Skill Builder](/skillbuilder) learning plans, such as:
+
+ - [Storage Learning Plan - Object](https://explore.skillbuilder.aws/learn/public/learning_plan/view/51/storage-learning-plan-object-storage)
+ - [Storage Learning Plan - Block](https://explore.skillbuilder.aws/learn/public/learning_plan/view/93/storage-learning-plan-block-storage)
+
+More AWS digital badges will be made available over time.
+
+
+
\ No newline at end of file
diff --git a/_posts/2022-04-20-rh-creddly.md b/_posts/2022-04-20-rh-creddly.md
new file mode 100644
index 0000000000..d945a7fd40
--- /dev/null
+++ b/_posts/2022-04-20-rh-creddly.md
@@ -0,0 +1,39 @@
+---
+title: "Digital credentials for Red Hat Certified Professionals"
+last_modified_at: 2022-05-02T16:00:58-04:00
+tags:
+ - ansible
+ - cert
+ - en
+ - openshift
+ - openstack
+ - redhat
+ - sds
+toc: false
+---
+
+[Red Hat Digital Credentials](https://www.redhat.com/en/about/digital-credential-program) recognize and reward learning achievements, community contributions and ecosystem engagement to drive the adoption of Red Hat technologies and to support customer success. A digital credential is earned upon meeting defined criteria, and Red Hat digital credentials can represent many types of achievements. A Red Hat digital badge is a sharable, verified, portable, data-rich form of that record.
+
+After successfully passing a Red Hat Certification exam and updating your Red Hat account profile page to request a Red Hat Certification digital credential, you will receive an email notification directly from [Credly](https://www.youracclaim.com/organizations/red-hat-inc/badges) with instructions on how to accept and begin sharing your Red Hat digital badge. The acceptance of the Red Hat Certification digital badge is completely optional.
+
+If your Red Hat Certification is current, Red Hat will retroactively issue a digital badge via Credly, which will be available and valid until the certification expires. If your Red Hat Certification expires, the digital badge will be updated to reflect this information.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2022-04-24-security-fundamentals.md b/_posts/2022-04-24-security-fundamentals.md
new file mode 100644
index 0000000000..6684cc4b82
--- /dev/null
+++ b/_posts/2022-04-24-security-fundamentals.md
@@ -0,0 +1,40 @@
+---
+title: "Microsoft Security Virtual Training Day"
+last_modified_at: 2022-04-24T16:00:58-04:00
+tags:
+ - azure
+ - cert
+ - en
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2021-04-08-azure-fundamentals/1.png)](https://www.microsoft.com/en-us/trainingdays)
+
+By participating in the following [Microsoft Virtual Training Days](https://www.microsoft.com/en-us/trainingdays):
+ - Microsoft Security Virtual Training Day: Security, Compliance, and Identity Fundamentals
+
+You’ll be eligible to take the following certification exam at no cost:
+ - [Microsoft Security, Compliance, and Identity Fundamentals (SC-900)](https://docs.microsoft.com/en-us/learn/certifications/exams/sc-900)
+
+
+# Security Fundamentals
+
+Learn the basic concepts of security, compliance and identity at Microsoft Security Training Day: Security, Compliance, and Identity Fundamentals. Learn the compliance management capabilities in Microsoft, the capabilities of Microsoft Identity and access management solutions and Microsoft Security solutions.
+
+## Course Objectives
+ - Understand the fundamentals of security, compliance and identity (SCI) across cloud-based and related Microsoft Services.
+ - Learn to apply your knowledge across cloud-based and related Microsoft Services
+ - After completing this free training, you'll be eligible to take the Microsoft Security, Compliance and Identity Fundamentals certification exam at no cost
+
+## Content
+ - Zero Trust methodology, guiding principles and 6 foundation elements used in the Zero Trust Model
+ - Common security threats and ways to protect through the defence in-depth security model
+ - Insider risk, eDiscovery and audit capabilities in Microsoft 365
+ - Compliance management capabilities in Microsoft, including the Service Trust portal, Microsoft 365 compliance centre, Microsoft privacy principles
+
+# Free certification
+
+After completing this free training you’ll be eligible to take the certifications exam at no cost.
+
+
\ No newline at end of file
diff --git a/_posts/2022-04-25-rh-summit22.md b/_posts/2022-04-25-rh-summit22.md
new file mode 100644
index 0000000000..05db6599a8
--- /dev/null
+++ b/_posts/2022-04-25-rh-summit22.md
@@ -0,0 +1,17 @@
+---
+title: "Red Hat Summit 2022"
+last_modified_at: 2022-04-25T16:00:58-04:00
+tags:
+ - ansible
+ - en
+ - events
+ - openshift
+ - redhat
+toc: false
+---
+
+[![](/assets/images/posts/2022-04-25-rh-summit22/1.png)](https://reg.experiences.redhat.com/flow/redhat/sum22/registration2022virtual/login)
+
+When you join IT leaders and peers at our no-cost virtual event, you can chart your hybrid cloud strategy and our open source future. Check out the [available sessions](https://events.experiences.redhat.com/widget/redhat/sum22/SessionCatalog22) to explore ways you can participate in the Red Hat® Summit experience taking place May 10-11. Virtual registration is [live](https://reg.experiences.redhat.com/flow/redhat/sum22/registration2022virtual/login).
+
+![](/assets/images/posts/2022-04-25-rh-summit22/2.png)
\ No newline at end of file
diff --git a/_posts/2022-04-25-wifi6.md b/_posts/2022-04-25-wifi6.md
new file mode 100644
index 0000000000..83cf71ec21
--- /dev/null
+++ b/_posts/2022-04-25-wifi6.md
@@ -0,0 +1,18 @@
+---
+title: "Evolução tecnológica do Wi-Fi 6"
+last_modified_at: 2022-04-26T16:00:58-04:00
+tags:
+ - events
+ - huawei
+ - pt
+ - webinar
+toc: false
+---
+
+[![](/assets/images/posts/2022-04-25-wifi6.png)](https://isurvey.huawei.com/survey/#/privacy-page?surveyId=54035&customerId=0&placementId=0&channel=0&uuid=0fa4c819686e46ac93ce2ec1ac8ea502)
+
+Evento on-line promovido pela Huawei e FiberX, onde será apresentado o seguinte tema: **Evolução Tecnológica do Wi-fi 6**. O evento ocorrerá em 26/04/2022 às 16h.
+
+Será um evento online de uma hora de duração e quem realizar a inscrição pelo [link](https://isurvey.huawei.com/survey/#/privacy-page?surveyId=54035&customerId=0&placementId=0&channel=0&uuid=0fa4c819686e46ac93ce2ec1ac8ea502) receberá um certificado de participação no evento.
+
+{% include video id="Njef2q7Yx7s" provider="youtube" %}
diff --git a/_posts/2022-04-27-eu-capacito.md b/_posts/2022-04-27-eu-capacito.md
new file mode 100644
index 0000000000..b25fd5f8f2
--- /dev/null
+++ b/_posts/2022-04-27-eu-capacito.md
@@ -0,0 +1,36 @@
+---
+title: "Programa EU CAPACITO"
+last_modified_at: 2022-04-27T16:00:58-04:00
+tags:
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-04-27-eu-capacito.png)](https://www.institutoitmidia.com.br/eu-capacito/)
+
+Em conjunto com o [EU CAPACITO](https://www.institutoitmidia.com.br/eu-capacito/), programa liderado pelo [Instituto IT Mídia](https://www.institutoitmidia.com.br/), a FIAP oferece 20 Nano Courses gratuitos. São cursos de 40 a 160 horas nas áreas de Tecnologia, Inovação e Negócios.
+
+[Cadastre-se](https://on.fiap.com.br/local/programaeucapacito/) e escolha os seus.
+
+- Blockchain Advanced (100 horas)
+- Business Intelligence (40 horas)
+- Customer Experience Management (40 horas)
+- Design Thinking (40 horas)
+- DevOps & Agile Culture (60 horas)
+- Inteligência Artificial e Computacional (80 horas)
+- Mobile Marketing (60 horas)
+- Python (40 horas)
+- Soluções Tecnológicas Emergentes (40 horas)
+- User Experience (60 horas)
+- Gestão de Infraestrutura de TI (40 horas)
+- Leadership Communication (60 horas)
+- Big Data & Analytics (120 horas)
+- Linux Fundamentos (40 horas)
+- Cloud Computing & Data Science (160 horas)
+- Java Fundamentos (80 horas)
+- Cybersecurity (120 horas)
+- Design Gráfico (120 horas)
+- Gestão Financeira de Empresas (40 horas)
+- Marketing em Plataformas de Social Media (80 horas)
diff --git a/_posts/2022-05-19-cati22.md b/_posts/2022-05-19-cati22.md
new file mode 100644
index 0000000000..45030e5c26
--- /dev/null
+++ b/_posts/2022-05-19-cati22.md
@@ -0,0 +1,13 @@
+---
+title: "II CATI: Congresso acadêmico de tecnologia da informação"
+last_modified_at: 2022-05-19T16:00:58-04:00
+tags:
+ - events
+ - pt
+ - webinar
+toc: false
+---
+
+## Nuvens híbridas e soluções Red Hat
+
+[![](/assets/images/posts/2022-05-19-cati22.jpeg)](https://www.youtube.com/watch?v=stKWaGk1__4)
diff --git a/_posts/2022-05-25-venko.md b/_posts/2022-05-25-venko.md
new file mode 100644
index 0000000000..f772e88f48
--- /dev/null
+++ b/_posts/2022-05-25-venko.md
@@ -0,0 +1,31 @@
+---
+title: "Estruturando redes com Múltiplos Fornecedores como uma Rede Neutra"
+last_modified_at: 2022-05-19T16:00:58-04:00
+tags:
+ - events
+ - networks
+ - nfv
+ - onf
+ - pt
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2022-05-25-venko/1.jpg)](https://form.jotform.com/221327985456667)
+
+Este evento vai, ao mesmo tempo, mostrar como estruturar **múltiplos serviços**, de **múltiplos fabricantes** e **rentabilizar esta estrutura** unificada ao **alugá-la para terceiros**. Tudo com uma gestão simples, centralizada e econômica.
+
+**Programa**:
+ - Venko - Desafios na Construção de Redes Multi-Vendor
+ - TIP/ONF - Padronização e Soluções Abertas
+ - Intraway - Solução de Orquestração e Abstração Multi-Tenant
+ - Netsia - Virtualização de OLT
+ - Zyxel - Soluções PON
+
+**Horário**: 8h30-11h30
+
+**Local**: We Work Jardim das Perdizes - Avenida Nicolas Boer, 399 - Jardim das Perdizes, São Paulo - SP
+
+[ONF Community Highlights – April/May 2022](https://opennetworking.org/news-and-events/blog/community-highlights-april-may-2022/)
+
+![](/assets/images/posts/2022-05-25-venko/2.jpeg)
\ No newline at end of file
diff --git a/_posts/2022-06-08-perfcon22.md b/_posts/2022-06-08-perfcon22.md
new file mode 100644
index 0000000000..aa4db82ff8
--- /dev/null
+++ b/_posts/2022-06-08-perfcon22.md
@@ -0,0 +1,30 @@
+---
+title: "PerfConf Spring 2022"
+last_modified_at: 2022-06-08T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - openshift
+ - redhat
+ - sdn
+toc: yes
+toc_sticky: true
+---
+
+## [Proceedings](https://perfconfspring2022.sched.com/)
+
+[**MetalLB Perf&Scale Testing**](https://perfconfspring2022.sched.com/event/13Nri/metallb-perfscale-testing)
+
+MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols (like BGP). For OCP 4.10, MetalLB speaker's implementation was reimplemented into FRR and support for BGP was added as a GA feature. In this talk, we will present the results of the MetalLB Perf&Scale testing report along with some tooling improvements to cope with this scenario.
+
+Wednesday, June 8 • 2:45pm - 3:15pm CEST
+
+Google Meet ID: [https://meet.google.com/uvo-pbwv-dbt](https://meet.google.com/uvo-pbwv-dbt)
+
+## Speakers
+ - [Jose Castillo Lema](https://perfconfspring2022.sched.com/speaker/jlema) - Software Engineer at **Red Hat**
+ - [Murali Krishnasamy](https://perfconfspring2022.sched.com/speaker/mukrishn) - Software Engineer at **Red Hat**
+
+
diff --git a/_posts/2022-06-13-women-cloud.md b/_posts/2022-06-13-women-cloud.md
new file mode 100644
index 0000000000..56819a16d2
--- /dev/null
+++ b/_posts/2022-06-13-women-cloud.md
@@ -0,0 +1,23 @@
+---
+title: "AWS - Mulheres em Cloud"
+last_modified_at: 2022-06-13T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - fiap
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-06-13-women-cloud.jpeg)](https://aws-mulheres-em-cloud-2022.splashthat.com/)
+
+Sabemos que a tecnologia tem um poder transformador quando aliada à educação e podemos usá-la como ferramenta nos impactos positivos na luta de igualdade social.
+
+A AWS apoia uma força de trabalho STEM (abordagem interdisciplinar inovadora que engloba temas como ciências, tecnologia, engenharia e matemática) como uma comunidade global, diversificada e inclusiva, e por isso preparou um dia muito especial para inspirar, motivar e conectar suas alunas e educadoras ao próximo nível de sua carreira em tecnologia.
+
+Este é um convite para ser encaminhado às nossas convidadas especiais do **Mulheres em Cloud**, no dia 30 de Junho.
+
+Atenção para as tripulantes:
+
+- Trazer um notebook no dia do evento para atividade prática
+- [Registrar-se](https://aws-mulheres-em-cloud-2022.splashthat.com/) até o dia 20 de Junho
\ No newline at end of file
diff --git a/_posts/2022-06-15-rh-giveback.md b/_posts/2022-06-15-rh-giveback.md
new file mode 100644
index 0000000000..c36d41b8bf
--- /dev/null
+++ b/_posts/2022-06-15-rh-giveback.md
@@ -0,0 +1,16 @@
+---
+title: "Red Hat Giveback Program"
+last_modified_at: 2022-06-15T16:00:58-04:00
+tags:
+ - en
+ - redhat
+toc: false
+---
+
+The Red Hat Giveback Program is an incentive program to recognize an associate who goes above-and-beyond their role-based responsibilities and makes contributions which impact Red Hat.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2022-06-20-apn.md b/_posts/2022-06-20-apn.md
new file mode 100644
index 0000000000..301a19dda7
--- /dev/null
+++ b/_posts/2022-06-20-apn.md
@@ -0,0 +1,31 @@
+---
+title: "AWS Partner Network"
+last_modified_at: 2022-06-20T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - en
+toc: false
+---
+
+[![](/assets/images/posts/2022-06-20-apn.jpeg)](https://aws.amazon.com/partners/)
+
+The AWS Partner Network (APN) is a global community of partners that leverages programs, expertise, and resources to build, market, and sell customer offerings.
+
+This diverse network features 100,000 partners from more than 150 countries. As an AWS Partner, you are uniquely positioned to help customers take full advantage of all that AWS has to offer and accelerate their journey to the cloud.
+
+Together, partners and AWS can provide innovative solutions, solve technical challenges, win deals, and deliver value to our mutual customers.
+
+One of the Partner Resources is Partner Training and Certification, to deepen your AWS knowledge and skills with digital and classroom trainings.
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2022-06-22-educate-relaunch.md b/_posts/2022-06-22-educate-relaunch.md
new file mode 100644
index 0000000000..89248722ec
--- /dev/null
+++ b/_posts/2022-06-22-educate-relaunch.md
@@ -0,0 +1,19 @@
+---
+title: "AWS Educate relaunch"
+last_modified_at: 2022-06-22T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - en
+toc: false
+---
+
+[![](/assets/images/posts/2022-06-22-educate-relaunch.png)](https://aws.amazon.com/education/awseducate/)
+
+AWS Educate is now open to any individual, regardless of where they are in their education, technical experience, or career journey.
+
+AWS Educate offers hundreds of hours of self-paced training and resources for new-to-cloud learners—including hands-on labs in the AWS Management Console. The platform guides you to targeted training content based on your knowledge, goals, interests, and age. Check out some of the most popular course offerings.
+
+
+
+
\ No newline at end of file
diff --git a/_posts/2022-07-01-baseline-operator.md b/_posts/2022-07-01-baseline-operator.md
new file mode 100644
index 0000000000..a373458f23
--- /dev/null
+++ b/_posts/2022-07-01-baseline-operator.md
@@ -0,0 +1,17 @@
+---
+title: "baseline-operator"
+last_modified_at: 2022-07-01T16:00:58-04:00
+tags:
+ - en
+ - openshift
+toc: true
+toc_sticky: true
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/baseline-operator/master/README.md %}
+
+
diff --git a/_posts/2022-07-09-shift-aws-foundations-8.md b/_posts/2022-07-09-shift-aws-foundations-8.md
new file mode 100644
index 0000000000..fc7fa5346d
--- /dev/null
+++ b/_posts/2022-07-09-shift-aws-foundations-8.md
@@ -0,0 +1,47 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 8th edition"
+last_modified_at: 2022-07-09T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-07-09-shift-aws-foundations-8.jpeg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **19/07** e **24/08**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2022-08-10-rh-research.md b/_posts/2022-08-10-rh-research.md
new file mode 100644
index 0000000000..63e8f9f2a9
--- /dev/null
+++ b/_posts/2022-08-10-rh-research.md
@@ -0,0 +1,37 @@
+---
+title: "Red Hat Research"
+last_modified_at: 2022-11-21T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-08-10-rh-research/1.jpg)](https://research.redhat.com/)
+
+## About
+
+Red Hat Research connects Red Hat engineers with professors, researchers, and students to bring great research ideas into open source communities. Our activities around the world have produced grants from government and industry, papers at top conferences, and results that have landed in open source projects of all kinds. Red Hat Research welcomes participation from research-minded individuals around the world.
+
+## Research Areas
+
+The Red Hat Research Program emphasizes research projects (PhD dissertations, Master’s Theses, multi-partner government-funded collaborations) in key areas described below. However, we are always evaluating what the next interest area is based on what we’re hearing from our academic and industry partners and seeing in our own explorations:
+ - [AI/ML](https://research.redhat.com/research-areas/ai-ml/)
+ - [Cloud/DS](https://research.redhat.com/research-areas/cloud-ds/)
+ - [Hardware and the OS](https://research.redhat.com/research-areas/hardware-and-the-os/)
+ - [Security, Privacy, Cryptography](https://research.redhat.com/research-areas/security-privacy-cryptography/)
+ - [Testing and Ops](https://research.redhat.com/research-areas/testing-and-ops/)
+
+
+## Profile
+
+[![](/assets/images/posts/2022-08-10-rh-research/2.png)](https://research.redhat.com/blog/project_member/jose-castillo-lema/)
+
+
+## Projects
+
+- [PHYSICS](/physics): oPtimized HYbrid Space-time servIce Continuum in faaS
+- [ICOS](/icos): IoT2Cloud Operating System
\ No newline at end of file
diff --git a/_posts/2022-08-11-shift-aws-dev-5.md b/_posts/2022-08-11-shift-aws-dev-5.md
new file mode 100644
index 0000000000..f902e8fc6d
--- /dev/null
+++ b/_posts/2022-08-11-shift-aws-dev-5.md
@@ -0,0 +1,105 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing - 5th edition"
+last_modified_at: 2022-08-11T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-08-11-shift-aws-dev-5.jpg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
\ No newline at end of file
diff --git a/_posts/2022-09-01-hcia-20.md b/_posts/2022-09-01-hcia-20.md
new file mode 100644
index 0000000000..4c536bec2e
--- /dev/null
+++ b/_posts/2022-09-01-hcia-20.md
@@ -0,0 +1,27 @@
+---
+title: "HCIA Datacom - 20th edition"
+last_modified_at: 2022-09-01T16:00:58-04:00
+tags:
+ - cert
+ - classes
+ - huawei
+ - networks
+ - pt
+toc: false
+---
+
+[![](/assets/images/posts/2022-09-01-hcia-20.jpeg)](https://www.sympla.com.br/treinamento-em-redes---20-edicao__1696278)
+
+Informamos que estão abertas as inscrições do **20º Treinamento em Tecnologia de Informação e Comunicação** convênio USP e **HUAWEI – HCIA – Datacom V1.0**, totalmente gratuito e virtual.
+
+As inscrições podem ser realizadas por este [link](https://www.sympla.com.br/treinamento-em-redes---20-edicao__1696278).
+
+Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os melhores alunos.
+
+O Treinamento em REDES-1 será ministrado pelo Centro de Internet do Futuro da USP por meio do convênio da USP ([Inova.USP](https://inova.usp.br/)) – Huawei, totalmente na modalidade on-line.
+
+Obs.: Treinamento destinado a estudantes de engenharia de computação, tecnologia da informação e profissionais que atuem na área.
+
+Uma vez aprovado no processo seletivo seguir [as seguintes instruções](/haina-talent) para efetuar o cadastro na plataforma EaD [Huawei Talent Online](https://e.huawei.com/en/talent).
+
+[![](/assets/images/posts/2021-03-26-hcia-15/2.png)](https://inova.usp.br/)
diff --git a/_posts/2022-09-02-icos.md b/_posts/2022-09-02-icos.md
new file mode 100644
index 0000000000..55dd43fe34
--- /dev/null
+++ b/_posts/2022-09-02-icos.md
@@ -0,0 +1,58 @@
+---
+title: "ICOS EU project"
+last_modified_at: 2022-09-02T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-09-02-icos/0.webp)](https://www.icos-project.eu/)
+
+## The project
+
+The unstoppable proliferation of novel computing and sensing device technologies, and the ever-growing demand for data-intensive applications in the edge and cloud, are driving the next wave of transformation in computing systems architecture. The resulting paradigm shift in computing is centered around dynamic, intelligent and yet seamless interconnection of IoT, edge and cloud resources in one computing system, to form a continuum.
+
+A continuum, today also referred to as cloud continuum, IoT continuum, edge-to-cloud or fog-to- cloud, is expected to provide the means for data processing both in the edge and cloud, while inferring and persisting important information for post-mortem and offline analysis. We envision a holistic approach towards the solutioning of this technology trend in future systems, by architecting, designing and implementing the continuum as extensible, open, secure, adaptable, AI-powered as well as well highly performant and technology agnostic, managed through a meta OS, i.e., **IoT2Cloud Operating System** (ICOS).
+
+![](/assets/images/posts/2022-09-02-icos/1.webp)
+
+## Features
+
+- Devices volatility and heterogeneity, continuum infrastructure virtualization and diverse network connectivity
+- Optimized and scalable service execution and performance, as well as resources consumptions, including power consumption
+- Guaranteed trust, security and privacy
+- Reduction of integration costs and effective mitigation of cloud provider lock-in effects, in a data-driven system built upon the principles of openness, adaptability, data sharing and a future edge market scenario for services and data
+
+![](/assets/images/posts/2022-09-02-icos/2.webp)
+
+
+## Use cases
+- In-car Advanced Infotainment and Multimedia Management system (IAIMM)
+- Agriculture Operational Robotic Platform (AORP)
+- Railway Structural Alert Monitoring system (RSAM)
+- Energy Management and Decision Support system (EMDS)
+
+## Consortium
+
+- Atos
+- Barcelona Supercomputing Center
+- CeADAR - Ireland's Centre for Applied AI
+- Engineering
+- Ferrocarrils de la Generalitat de Catalunya (FGC)
+- Lukasiewicz - Poznanski Instytut Technologiczny
+- National and Kapodistrian University of Athens
+- Red Hat
+- SixSQ
+- Stellantis
+- Suite 5
+- Technische Universitãt Braunschweig
+- Universitat Politécnica de Catalunya
+- World Sensing
+- XLab
+- Zetta Scale
+
+To learn more about the ICOS project, visit the [ICOS project page](https://www.icos-project.eu/). Read more about it in the [Red Hat Research blog](https://research.redhat.com/blog/research_project/icos/).
\ No newline at end of file
diff --git a/_posts/2022-09-20-physics-ga4.md b/_posts/2022-09-20-physics-ga4.md
new file mode 100644
index 0000000000..57e0e2d1e8
--- /dev/null
+++ b/_posts/2022-09-20-physics-ga4.md
@@ -0,0 +1,24 @@
+---
+title: "PHYSICS 4th General Assembly"
+last_modified_at: 2022-09-20T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: false
+---
+
+[![](/assets/images/posts/2022-09-20-physics-ga4/1.png)](/physics)
+
+The **4th PHYSICS project General Assembly** meeting was held July 4-6, 2022, hosted by [RYAX](https://ryax.tech/) in Athens, Greece. During the meeting, partners analyzed the project’s growth and had the opportunity to participate in person or virtually in discussions about the next goals of the project. All the work packages of the project were discussed in-depth to monitor the project’s progress and agree on plans for the future.
+
+[**PHYSICS**](/physics) (**oPtimized HYbrid Space-time servIce Continuum in faaS**) is a research project funded by the European Union’s Horizon 2020 research and innovation program under grant agreement No. 101017047. The project began in January 2021 with 14 international partners and is scheduled to end in December 2023. Partners include Red Hat, Atos, RYAX, the Polytechnic University of Madrid (Spain), and Harokopio University (Greece).
+
+The project’s goal is to enable application developers to design, implement, and deploy advanced function-as-a-service (FaaS) applications in the scope of advanced cloud application design environments by leveraging proven design patterns and existing libraries of cloud/FaaS components.
+
+Red Hat engineers lead the work package **Extended Infrastructure Services with Adaptable Algorithms**, where they leverage several community projects to support PHYSICS’s multi-cluster orchestration and connectivity requirements. Some of the projects modified for PHYSICS’ purposes are [Submariner](https://github.com/submariner-io/submariner) and [MicroShift](https://github.com/openshift/microshift). Other projects used include Node-RED and Apache OpenWhisk.
+
+To learn more about the PHYSICS project, visit the [PHYSICS project page](https://physics-faas.eu/). Read more about it in the [Red Hat Research blog](https://research.redhat.com/blog/2022/09/20/physics-4th-general-assembly-held/).
+
+![](/assets/images/posts/2022-09-20-physics-ga4/2.png)
\ No newline at end of file
diff --git a/_posts/2022-10-19-shift-aws-foundations-9.md b/_posts/2022-10-19-shift-aws-foundations-9.md
new file mode 100644
index 0000000000..8c478ffe4b
--- /dev/null
+++ b/_posts/2022-10-19-shift-aws-foundations-9.md
@@ -0,0 +1,47 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Foundations - 9th edition"
+last_modified_at: 2022-10-19T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-10-19-shift-aws-foundations-9.png)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-foundations-online)
+
+O **AWS Academy Cloud Foundations** (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – **[AWS Certified Cloud Practitioner (CLF-01)](https://aws.amazon.com/pt/certification/certified-cloud-practitioner/)**.
+
+O curso oferece uma visão geral detalhada dos conceitos de nuvem, dos serviços essenciais, da segurança, da arquitetura, da definição de preço e do suporte da AWS. A certificação AWS Certified Cloud Practitioner é uma etapa recomendada para a obtenção da certificação Specialty ou em nível Associate.
+
+
+## Para quem?
+Profissionais DevOps e Arquitetos de Plataformas/Soluções que querem ter certificação e experiência hands-on na AWS.
+
+## Pré-requisito
+Recomendamos ter conhecimentos técnicos gerais de TI e de negócios.
+
+## Como funciona?
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy), com videoaulas em inglês (tradução e legendas em português), laboratórios para cada módulo, leituras complementares e testes após cada etapa para acompanhar a evolução com vista ao exame de certificação. Mais 30 dias de acesso às aulas, com dois momentos de interação ao vivo com José Castillo, Accredited Educator da AWS Academy e professor da FIAP.
+
+## Digital + Live
+Serão 20 horas de curso, com duração de quatro semanas, seis laboratórios práticos e mais duas lives com o professor, visando à preparação para a prova, nos dias **19/10** e **22/11**, das 19h às 20h. No fim, você receberá um certificado oficial de conclusão de curso da AWS Academy e poderá aproveitar 50% OFF para fazer a prova de Certificação AWS Cloud Practitioner.
+
+
+
+## Conteúdo
+
+ - Módulo 1: Visão geral dos conceitos de nuvem
+ - Módulo 2: Economia e faturamento da nuvem
+ - Módulo 3: Visão geral da infraestrutura global da AWS
+ - Módulo 4: Segurança na nuvem AWS
+ - Módulo 5: Redes e entrega de conteúdo
+ - Módulo 6: Computação
+ - Módulo 7: Armazenamento
+ - Módulo 8: Bancos de dados
+ - Módulo 9: Arquitetura de nuvem
+ - Módulo 10: Auto scaling e monitoramento
\ No newline at end of file
diff --git a/_posts/2022-11-05-icos-ga1.md b/_posts/2022-11-05-icos-ga1.md
new file mode 100644
index 0000000000..7069ac0952
--- /dev/null
+++ b/_posts/2022-11-05-icos-ga1.md
@@ -0,0 +1,31 @@
+---
+title: "ICOS 1st General Assembly"
+last_modified_at: 2022-11-05T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: false
+---
+
+[![](/assets/images/posts/2022-09-02-icos/0.webp)](https://www.icos-project.eu/)
+
+**22 leading European organizations from 11 countries join forces to tackle the main challenges of the IoT-edge-cloud paradigm, proposing an approach to embed a set of functionalities and define a brand new IoT-edge-Cloud Operating System (ICOS).**
+
+**Barcelona, Spain. November 2022.** Coordinated by the Research and Innovation hub of the Atos Group in Spain, ICOS project started officially on September 1st, 2022, and will continue for 3 years. The project is funded by the European Commission under the Horizon Europe Programme within the topic Future European platforms for the Edge: Meta Operating Systems. Its F2F kick-off meeting took place in Vilanova i la Geltrú, Barcelona area, Spain, on November 2nd-3rd.
+
+ICOS aims to design, develop, and validate a meta-operating system for the Cloud-Edge-IoT continuum by addressing four main challenges:
+ - device volatility and heterogeneity, continuum infrastructure virtualisation and diverse network connectivity;
+ - optimised and scalable service execution and performance, as well as resource consumption; guaranteed trust, security and privacy;
+ iii) reduction of integration costs, ;
+ - effective mitigation of cloud provider lock-in effects.
+
+Efforts towards these objectives will be consolidatedin a data-driven system built upon the principles of openness, adaptability, data sharing and a future edge market scenario for services and data.
+
+The project will contribute to European competitiveness by achieving the creation of a globally attractive, secure, and dynamic data-first economy, moving beyond a simple send-data-to-the-cloud strategy, and offering new opportunities for European actors to enter the market with new services, which will result in increasing the EU’s autonomy, sovereignty, and performance in the global data economy. Moreover, its technical impact will consist of a new platform and ecosystem for managing the application lifecycle in a secure, smart, and efficient way across the entire Cloud-Edge-IoT continuum, while its economic impact will be proven by the feasibility demonstrated through the ICOS micro analysis, according to the use case KPIs (namely: In-car Advanced Infotainment and Multimedia Management system; Agriculture Operational Robotic Platform; Railway Structural Alert Monitoring system, and Energy Management and Decision Support system) and also the ICOS will not be alone in this huge mission. As its coordinator Francesco D’Andria (Atos) states:
+ > The project will cooperate with the other Research and Innovation Action (RIA) projects –such as NEMO or NEPHELE– addressing the same topic, to exploit results and synergies, maximize impacts of the Cloud-Edge-IoT project portfolio and coordinate dissemination activities. In addition, ICOS will contribute to the consolidation and coherence work to be implemented by the two related Coordination and Support Action (CSAs), OpenContinuum and Unlock-CEI".
+
+Red Hat engineers lead the work package *Development of the Distributed Meta-kernel Layer Module*, where we plan to leverage several community projects to support ICOS multi-cluster orchestration and connectivity requirements. Some of the projects being considered for ICOS are Open Cluster Management, Submariner, MicroShift, and Knative.
+
+Read more about it in the [Red Hat Research blog](https://research.redhat.com/blog/research_project/icos/).
\ No newline at end of file
diff --git a/_posts/2022-11-07-shift-aws-dev-6.md b/_posts/2022-11-07-shift-aws-dev-6.md
new file mode 100644
index 0000000000..e8bd749051
--- /dev/null
+++ b/_posts/2022-11-07-shift-aws-dev-6.md
@@ -0,0 +1,105 @@
+---
+title: "FIAP SHIFT: AWS Academy Cloud Developing - 6th edition"
+last_modified_at: 2022-11-07T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - classes
+ - fiap
+ - pt
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-11-07-shift-aws-dev-6.jpg)](https://www.fiap.com.br/shift/curso/tecnologia/aws-academy-cloud-developing)
+
+Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação **[AWS Certified Developer - Associate (DVA-C01)](https://aws.amazon.com/pt/certification/certified-developer-associate/)**. Uma jornada com 40 horas de conteúdo, talks e laboratórios práticos.
+
+## Para quem?
+Desenvolvedores, profissionais DevOps e Arquitetos(as) de plataformas e soluções que querem ter Certificação e experiência hands-on em AWS.
+
+## Pré-requisito
+Sugerimos que você se aprofunde no conteúdo do curso AWS Academy Cloud Foundations, disponível como um dos nossos benefícios ao adquirir esse curso.
+
+## SHIFT remoto
+
+Você vai ter acesso à plataforma [AWS Academy](/aws-academy). Aulas ao vivo com conteúdo e metodologia especialmente pensados para o aprendizado remoto. Os vídeos dos encontros também ficam disponíveis por 7 dias após a última aula. O conteúdo complementar pode ser acessado durante 1 ano. E você ainda tem acesso ao ecossistema FIAP e aos nossos coworkings.
+
+## Benefício FIAP
+Você terá acesso a um voucher de 50% de desconto para o exame de Certificação AWS Certified Developer - Associate. O curso AWS Academy Cloud Foundations é pré-requisito para esse curso. Adquirindo o AWS Academy Cloud Developing, você terá acesso integral prévio e sem custo ao Cloud Foundations (incluso voucher de 50% de prova de Certificação AWS Cloud Practitioner).
+
+
+## Conteúdo
+
+ - Módulo 1: INTRODUCTION TO DEVELOPING ON AWS
+ * Recognize the systems development life cycle, and describe how to start to developing on AWS.
+ * Indicate how to work with AWS SDKs.
+ * Identify why AWS X-Ray is a critical developer tool, and identify AWS management tools.
+ * Develop and run a simple program in AWS Cloud9.
+ - Módulo 2: INTRODUCTION TO AWS IDENTITY AND ACCESS MANAGEMENT (IAM)
+ * Recognize the shared responsibility model.
+ * Explain how IAM helps secure access to AWS resources.
+ * Describe IAM user authentication.
+ * Identify how to authorize an IAM user, group, or role.
+ - Módulo 3: DEVELOPING STORAGE SOLUTIONS WITH AMAZON S3
+ * Describe how Amazon S3 can be used as a storage solution.
+ * Identify Amazon S3 features and components.
+ * Describe two ways to protect data with Amazon S3.
+ * Describe the function of the S3 object operations (PUT, GET, SELECT, DELETE).
+ * Explain how to manage access to Amazon S3 resources developed with Amazon S3 using the AWS SDKs.
+- Módulo 4: DEVELOPING NOSQL SOLUTIONS WITH AMAZON DYNAMODB
+ * Identify Amazon DynamoDB features.
+ * Describe Amazon DynamoDB components.
+ * Explain how Amazon DynamoDB uses partitions.
+ * Indicate how indexes are used with Amazon DynamoDB.
+ * Describe how Amazon DynamoDB keeps data consistent.
+ * Recognize when streaming and global tables are used.
+ * Explain the backup and restoration process.
+ * Develop flexible NoSQL solutions with Amazon DynamoDB.
+- Módulo 5: CACHING INFORMATION FOR SALABILITY
+ * Explain when caching is used.
+ * Describe caching with Amazon CloudFront.
+ * Describe caching with Amazon ElastiCache Apply caching strategies.
+- Módulo 6: INTRODUCTION TO CONTAINERS
+ * Describe the history, technology, and terminology behind containers.
+ * Differentiate containers from bare-metal servers and virtual machines.
+ * Identify the characteristics of a microservices architecture.
+ * Recognize the drivers for using container-based workloads.
+ * Host a basic website by using Docker containers.
+- Módulo 7: DEVELOPING SOLUTIONS WITH AMAZON SQS AND AMAZON SNS
+ * Recall how message queues works.
+ * Describe Amazon SQS.
+ * Send messages to an SQS queue.
+ * Describe Amazon SNS.
+ * Explain Amazon SNS concepts.
+ * Describe Amazon MQ.
+- Módulo 8: DEVELOPING EVENT-DRIVEN SOLUTIONS WITH AWS LAMBDA
+ * Explain serverless computing.
+ * Describe how AWS Lambda works.
+ * Recognize AWS Lambda execution models.
+ * Identify how to use AWS IAM to grant Lambda permissions.
+ * Indicate the steps to author and configure a Lambda functions.
+ * Explain how to deploy serverless applications.
+ * Develop event-driven solutions with AWS Lambda.
+- Módulo 9: DEVELOPING SOLUTIONS WITH AMAZON API GATEWAY
+ * Recognize application programming interfaces.
+ * Describe Amazon API Gateway.
+ * Indicate the steps for developing RESTful APIs with Amazon API Gateway.
+- Módulo 10: DEVELOPING SOLUTIONS WITH AWS STEP FUNCTIONS
+ * Recognize the dynamics of workflow coordination in distributed applications.
+ * Describe AWS Step Functions.
+ * Identify state types.
+ * Indicate common use cases for AWS Step Functions.
+ * Recall AWS Step Functions APIs.
+- Módulo 11: DEVELOPING SECURE APPLICATIONS ON AWS
+ * Identity how to secure applications.
+ * Describe how to manage your application’s secrets.
+ * Recall how to authenticate with AWS Security Token Service.
+ * Describe how Amazon Cognito is used to build secure applications.
+- Módulo 12: DEPLOYING APPLICATIONS ON AWS
+ * Describe DevOps
+ * Recognize AWS code services for CI/CD
+ * Summarize deployment strategies
+ * Describe how AWS Elastic Beanstalk is used to deploy applications
+ * Describe how AWS CloudFormation is used to deploy applications
+ * Describe how AWS SAM is used to deploy serverless applications.
\ No newline at end of file
diff --git a/_posts/2022-11-16-aws-certified-global-community.md b/_posts/2022-11-16-aws-certified-global-community.md
new file mode 100644
index 0000000000..9d7d44d06d
--- /dev/null
+++ b/_posts/2022-11-16-aws-certified-global-community.md
@@ -0,0 +1,19 @@
+---
+title: "AWS Training and Certification - AWS Certified Global Community"
+last_modified_at: 2022-11-16T16:00:58-04:00
+tags:
+ - aws
+ - cert
+ - en
+toc: false
+---
+
+[![](/assets/images/posts/2022-11-16-aws-certified-global-community/1.png)](https://aws-certification.influitive.com/users/sign_in)
+
+The [AWS Certified Global community](https://aws-certification.influitive.com/users/sign_in) is a network of certified AWS professionals. Interact, participate in challenges, get advice from peers and industry experts, win swag, and more.
+
+[![](/assets/images/posts/2022-11-16-aws-certified-global-community/3.png)](https://aws-certification.influitive.com/profiles/5a5d021f-cea2-40c1-8b13-4084afb0fcb6)
+
+Last week I was featured in the Expert’s Exclusive series, where each week it is published an interview with one of the community champions.
+
+![](/assets/images/posts/2022-11-16-aws-certified-global-community/2.jpg)
\ No newline at end of file
diff --git a/_posts/2022-11-17-rhr-talks-physics.md b/_posts/2022-11-17-rhr-talks-physics.md
new file mode 100644
index 0000000000..0e9fe25186
--- /dev/null
+++ b/_posts/2022-11-17-rhr-talks-physics.md
@@ -0,0 +1,37 @@
+---
+title: "RHR talks: PHYSICS EU project"
+last_modified_at: 2022-11-17T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: false
+---
+
+[![](/assets/images/posts/2022-11-17-rhr-talks-physics.png)](https://research.redhat.com/events/research-days-physics/)
+
+Join [Red Hat Research](https://research.redhat.com/) for the next Research Days event, **PHYSICS EU Project: Advancing FaaS applications in the cloud continuum** on November 16, 2022, from 3PM to 4:30PM CEST.
+
+The Function-as-a-Service (Faas) paradigm offers cloud service providers and application designers speed, simplicity, and efficiency, so long as they have accessible tools and techniques to implement it. For this month’s research presentation, Georgios Kousiouris, Harokopio University of Athens, will give an overview of PHYSICS, a large-scale EU Horizon-funded research collaboration that aims to unlock the potential of FaaS in the cloud continuum. Luis Tomás Bolívar, Red Hat, and Yiannis Georgiou, Ryax Technologies, will lead the conversation. Attendees will have the opportunity to participate in the live discussion.
+
+## Abstract
+PHYSICS is a high technology EU Horizon research project with a total funding of about five million euros composed of 14 international partners. The project started in January 2021 and will end in December 2023. PHYSICS aims to unlock the potential of the Function-as-a-Service (FaaS) paradigm for cloud service providers and application developers. When realized, it will enable application developers to design, implement, and deploy advanced FaaS applications through abstract and visual design environments, leveraging proven design patterns and integrated DevOps pipelines.
+
+PHYSICS also offers a novel Global Continuum Layer aimed at exploiting the cloud (including edge and multi-cloud locations) for optimizing the deployment and execution of functions based on aspects such as latency, performance, cost, locality, and other constraints. It does so by extending the needed infrastructure components (the Kubernetes scheduler, for example), offering novel ways of container management that target optimized operation of the infrastructure cluster in the form of container scheduling and co-allocation mechanisms.
+
+In this talk, we will discuss the goals and current status of the PHYSICS EU Horizon project before exploring some of the main research areas of focus and open source development. Specifically, we will describe how visual flow programming and ready-made patterns can enhance abstract function development, and we will investigate different function orchestration means and trade-offs in terms of capabilities and performance. We will also explore the function execution in different clusters while highlighting differences in cluster setup from macroscopically examined load generation and how these map to the observed measurements. Finally, we will look at the task placement and scheduling optimizations that are being developed and how they can be beneficial, in particular, for FaaS-based applications.
+
+Speaker
+ - Georgios Kousiouris, Harokopio University of Athens
+
+Conversation Leaders
+ - Luis Tomás Bolívar, Red Hat
+ - Yiannis Georgiou, Ryax Technologies
+
+Visit the [PHYSICS project website](https://physics-faas.eu/) for more information.
+
+
+
+![YouTube Video Views](https://img.shields.io/youtube/views/ZzBI_5DxcnY?style=social)
+![YouTube Video Likes](https://img.shields.io/youtube/likes/ZzBI_5DxcnY?style=social)
\ No newline at end of file
diff --git a/_posts/2022-12-26-tip-academy.md b/_posts/2022-12-26-tip-academy.md
new file mode 100644
index 0000000000..d9c49b5029
--- /dev/null
+++ b/_posts/2022-12-26-tip-academy.md
@@ -0,0 +1,51 @@
+---
+title: "TIP Academy"
+last_modified_at: 2023-01-04T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - networks
+ - nfv
+ - onf
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2022-12-26-tip-academy/1.svg)](https://www.tip.academy/)
+
+[TIP Academy](https://www.tip.academy/) is an online Academy managed by the [Telecom Infra Project (TIP)](https://telecominfraproject.com/) supporting the development of organizations in the telecommunications and IT industry. It provides an open, community-based learning and knowledge-sharing space for organizations and telco professionals, building an ecosystem around open, disaggregated solutions.
+
+## Courses
+
+### Why Open RAN?
+
+This learning program will help you to gain awareness of the motivation and imperative of Open RAN and its potential to transform the industry.
+
+Upon completion of this learning program, you will be able to:
+ - Define what Open RAN is and explain the drivers, benefits and challenges of Open RAN.
+ - Gain insight into the main ways Open RAN solutions architectures will impact the Business Case.
+ - Identify key industry Open RAN initiatives and discover some Open RAN projects around the word.
+
+
+### Open RAN Fundamentals
+
+This learning program will help you delve into the Open RAN architecture and the underlying forces behind it: disaggregation, open interfaces, virtualization, automation, and orchestration.
+
+Upon completion of this learning program, you will be able to:
+ - Describe what is the split of RAN protocol stack, its motivations and the different split options adopted by the industry for Open interfaces.
+ - Describe the architecture and functions of the Radio Unit (RU), Distributed Unit (DU) and Central Unit (CU).
+ - Recognize the significant role the Telco Cloud and Orchestration play in unlocking the benefits of Open RAN solutions.
+
+## Free certification
+
+After completing the courses training you’ll be eligible to take the final assessments at no cost.
+
+![](/assets/images/posts/2022-12-26-tip-academy/4.png)
+
+![](/assets/images/posts/2022-12-26-tip-academy/2.png)
+
+![](/assets/images/posts/2022-12-26-tip-academy/5.png)
+
+![](/assets/images/posts/2022-12-26-tip-academy/3.png)
+
diff --git a/_posts/2023-01-01-newyear23.md b/_posts/2023-01-01-newyear23.md
new file mode 100644
index 0000000000..ba9e059d3f
--- /dev/null
+++ b/_posts/2023-01-01-newyear23.md
@@ -0,0 +1,12 @@
+---
+title: "Happy new year!"
+last_modified_at: 2022-01-01T16:00:58-04:00
+tags:
+ - en
+ - es
+ - redhat
+ - pt
+toc: false
+---
+
+![](/assets/images/posts/2023-01-01-newyear23.png)
\ No newline at end of file
diff --git a/_posts/2023-01-07-ovnk8s-kind.md b/_posts/2023-01-07-ovnk8s-kind.md
new file mode 100644
index 0000000000..d23c58b82a
--- /dev/null
+++ b/_posts/2023-01-07-ovnk8s-kind.md
@@ -0,0 +1,154 @@
+---
+title: "Running OVN-Kubernetes on a preexisting kind cluster"
+last_modified_at: 2023-01-13T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - redhat
+toc: false
+---
+
+[OVN-Kubernetes](https://github.com/ovn-org/ovn-kubernetes/) is a CNI for Kubernetes based on the [Open Virtual Network (OVN)](https://www.ovn.org/en/) project.
+
+[kind (Kubernetes in Docker) deployment of OVN kubernetes](https://github.com/ovn-org/ovn-kubernetes/blob/master/docs/kind.md) is a fast and easy means to quickly install and test kubernetes with OVN kubernetes CNI. The value proposition is really for developers who want to reproduce an issue or test a fix in an environment that can be brought up locally and within a few minutes.
+
+The [**kind.sh** script](https://github.com/ovn-org/ovn-kubernetes/blob/master/contrib/kind.sh) creates a new [kind cluster](https://kind.sigs.k8s.io/) and then deploys OVN-Kubernetes on top of it.
+
+Thanks to the new `--deploy` option introduced by this [PR](https://github.com/ovn-org/ovn-kubernetes/pull/3337) into the **kind.sh** script, now it is possible to leverage the script to deploy OVN-Kubernetes on preexisting kind clusters.
+
+First, let's define the kind cluster configuration and store it in a **kind-ovn.yaml** file:
+```yaml
+kind: Cluster
+apiVersion: kind.x-k8s.io/v1alpha4
+networking:
+ # kube proxy will be disabled
+ kubeProxyMode: "none"
+ # the default CNI will not be installed
+ disableDefaultCNI: true
+ podSubnet: "10.244.0.0/16"
+ serviceSubnet: "10.96.0.0/16"
+kubeadmConfigPatches:
+- |
+ kind: ClusterConfiguration
+ metadata:
+ name: config
+ apiServer:
+ extraArgs:
+ "v": "4"
+ controllerManager:
+ extraArgs:
+ "v": "4"
+ scheduler:
+ extraArgs:
+ "v": "4"
+ networking:
+ dnsDomain: cluster.local
+ ---
+ kind: InitConfiguration
+ nodeRegistration:
+ kubeletExtraArgs:
+ "v": "4"
+ ---
+ kind: JoinConfiguration
+ nodeRegistration:
+ kubeletExtraArgs:
+ "v": "4"
+nodes:
+ - role: control-plane
+ kubeadmConfigPatches:
+ - |
+ kind: InitConfiguration
+ nodeRegistration:
+ kubeletExtraArgs:
+ node-labels: "ingress-ready=true"
+ authorization-mode: "AlwaysAllow"
+ - role: worker
+ - role: worker
+```
+
+Create the cluster:
+```
+$ kind create cluster --name ovn --image kindest/node:v1.24.0 --config=kind-ovn.yaml
+```
+
+Export the kubeconfig file:
+```
+$ kind get kubeconfig --name ovn > kubeconfig
+$ export KUBECONFIG=$(pwd)/kubeconfig
+```
+
+As you can see the nodes are in `NotReady` state (because there is no CNI deployed) and the CNI dependant pods are in `Pending` state:
+```
+$ kubectl get node -o wide
+NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
+ovn-control-plane NotReady control-plane 59s v1.24.0 172.18.0.3 Ubuntu 21.10 5.17.5-300.fc36.x86_64 containerd://1.6.4
+ovn-worker NotReady 35s v1.24.0 172.18.0.2 Ubuntu 21.10 5.17.5-300.fc36.x86_64 containerd://1.6.4
+ovn-worker2 NotReady 22s v1.24.0 172.18.0.4 Ubuntu 21.10 5.17.5-300.fc36.x86_64 containerd://1.6.4
+
+$ kubectl get po -A
+NAMESPACE NAME READY STATUS RESTARTS AGE
+kube-system coredns-6d4b75cb6d-4nbkk 0/1 Pending 0 107s
+kube-system coredns-6d4b75cb6d-wkmzk 0/1 Pending 0 107s
+kube-system etcd-kind-control-plane 1/1 Running 0 2m3s
+kube-system kube-apiserver-kind-control-plane 1/1 Running 0 2m
+kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 2m
+kube-system kube-scheduler-kind-control-plane 1/1 Running 0 2m3s
+local-path-storage local-path-provisioner-9cd9bd544-4dt8d 0/1 Pending 0 107s
+```
+
+Enable IPv6 on the kind containers:
+```
+$ KIND_NODES=$(kind get nodes --name ovn)
+$ for n in $KIND_NODES; do
+ docker exec "$n" sysctl --ignore net.ipv6.conf.all.disable_ipv6=0
+ docker exec "$n" sysctl --ignore net.ipv6.conf.all.forwarding=1
+ done
+```
+
+Clone the ovn-kubernetes repo:
+```
+$ git clone https://github.com/ovn-org/ovn-kubernetes.git
+```
+
+Run the kind.sh script with the `--deploy` option to avoid the creation of a new kind cluster:
+```
+$ cd ovn-kubernetes/contrib/
+$ ./kind.sh -kc $KUBECONFIG --deploy
+```
+
+Check if the nodes and the CNI dependant pods have transitioned to `Ready` state and the OVN pods are present:
+```
+$ kubectl get node
+NAME STATUS ROLES AGE VERSION
+ovn-control-plane Ready control-plane 11m v1.24.0
+ovn-worker Ready 10m v1.24.0
+ovn-worker2 Ready 10m v1.24.0
+
+$ kubectl get po -A
+NAMESPACE NAME READY STATUS RESTARTS AGE
+kube-system coredns-6d4b75cb6d-9r8lh 1/1 Running 0 10m
+kube-system coredns-6d4b75cb6d-kvhf6 1/1 Running 0 10m
+kube-system etcd-ovn-control-plane 1/1 Running 0 11m
+kube-system kube-apiserver-ovn-control-plane 1/1 Running 0 11m
+kube-system kube-controller-manager-ovn-control-plane 1/1 Running 0 11m
+kube-system kube-scheduler-ovn-control-plane 1/1 Running 0 11m
+local-path-storage local-path-provisioner-9cd9bd544-fm7vm 1/1 Running 0 10m
+ovn-kubernetes ovnkube-db-5fdf4c4986-t2hp7 2/2 Running 0 3m12s
+ovn-kubernetes ovnkube-master-5b5ddf8879-7vqcd 2/2 Running 0 3m10s
+ovn-kubernetes ovnkube-node-8mmjm 3/3 Running 0 3m3s
+ovn-kubernetes ovnkube-node-ggcsd 3/3 Running 0 3m3s
+ovn-kubernetes ovnkube-node-xtdxn 3/3 Running 0 3m3s
+ovn-kubernetes ovs-node-4qvfz 1/1 Running 0 3m11s
+ovn-kubernetes ovs-node-99vl7 1/1 Running 0 3m11s
+ovn-kubernetes ovs-node-dx2rk 1/1 Running 0 3m11s
+```
+
+To tear down the KIND cluster when finished simply run:
+```
+$ ./kind.sh --delete
+```
+
+Alternativally, you can use [this script](https://github.com/elmiko/capi-hacks/blob/devel/deploy-cni-ovn.sh) to automate the deployment.
+
+Tested on Fedora release 36 and Ubuntu 22.04 with kind version 0.17.0.
\ No newline at end of file
diff --git a/_posts/2023-01-13-icos-blog.md b/_posts/2023-01-13-icos-blog.md
new file mode 100644
index 0000000000..1e5d7ecf76
--- /dev/null
+++ b/_posts/2023-01-13-icos-blog.md
@@ -0,0 +1,35 @@
+---
+title: "The impact of upstreaming research contributions"
+last_modified_at: 2023-01-13T16:00:58-04:00
+tags:
+ - en
+ - redhat
+ - research
+toc: false
+---
+
+> Originally published at [**ICOS blog**](https://www.icos-project.eu/impact-of-upstreaming-research-contributions) on January 13, 2023 and at [**opensource.com**](https://opensource.com/article/23/2/open-science-upstream-contributions) on February 3, 2023.
+
+*By Cara Delia and Leslie Hawthorn, Red Hat Open Source Program Office, Jose Castillo Lema, Red Hat Performance & Scale Engineering*
+
+Horizon Europe emphasizes open science and open source technology. The program evolved from Horizon 2020, which provided financial support for research projects that promoted industrial competitiveness, advanced scientific excellence, or solved social challenges through the process of **open science**.
+
+Open science is an approach to the scientific process based on open cooperative work, tools and diffusing knowledge found in the [Horizon Europe Regulation and Model Grant Agreement](https://ec.europa.eu/info/funding-tenders/opportunities/docs/2021-2027/horizon/agr-contr/unit-mga_he_en.pdf). This open science approach aligns with open source principles that provide a structure for such cooperation.
+
+The open source principles are:
+ - Transparency
+ - Collaboration
+ - Release early, release often
+ - Inclusion
+ - Community orientation
+
+In creating open source software, one of the basic foundational principles of open source software development is an "upstream first" philosophy. The opposite direction is "downstream", and upstream and downstream make up the ecosystem for a given software package or distribution. Upstreams are important because that's where the source contribution comes from.
+
+Each upstream is unique, but generally the upstream is where decisions are made and where the community for a project collaborates for the project’s objectives. Work done upstream can flow out to many other open source projects. The upstream is also a place where developers can report bugs and security vulnerabilities. If a bug or security flaw is fixed upstream, then every downstream project or product based on the upstream can benefit from that work.
+
+It is important to contribute to the work side-by-side with the rest of the community from which you are benefitting from. By working upstream first, there is the opportunity to vet ideas with the larger community and work together to build new features, releases, content, etc. It's far better if all the contributors work together rather than, say, contributors from different companies, universities or affiliations working on features behind closed doors and then trying to integrate them later. Open source contributions can outlive the research project duration making a more durable impact.
+
+As an example of such contributions, in the [ORBIT FP7 EU project](https://cordis.europa.eu/project/id/609828) a feature was developed together by Red Hat (lower layers, such as Linux Kernel and QEMU) and Umea University (upper layers, such as LibVirt and OpenStack) and contributed to their related upstream communities. This enabled [post-copy live migration of virtual machines in OpenStack](https://wiki.qemu.org/Features/PostCopyLiveMigration). Even though that was done several years ago, that feature is still available (and independently mantained) in any OpenStack distribution today (and in plain LibVirt/QEMU).
+
+Just as with software development, research under Horizon Europe promotes the adoption of sharing research outputs as early and widely as possible, to citizen science, and developing new indicators for evaluation research and rewarding researchers. With open source upstream communities, the research contributed can extend beyond the research project timeline by feeding into the upstream life cycle. This allows future consumption by companies, universities, governments, etc. to evolve and further secure the research's project contribution.
+
diff --git a/_posts/2023-01-18-codeco-kickoff.md b/_posts/2023-01-18-codeco-kickoff.md
new file mode 100644
index 0000000000..b005cef9f3
--- /dev/null
+++ b/_posts/2023-01-18-codeco-kickoff.md
@@ -0,0 +1,29 @@
+---
+title: "CODECO project kick off"
+last_modified_at: 2023-01-18T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: false
+---
+
+[![](/assets/images/posts/2023-01-18-codeco-kickoff/1.png)](https://he-codeco.eu/)
+
+Kick off of the [Horizon Europe CODECO](https://he-codeco.eu/) in the Munich Highlight Towers, on 16th and 17th of January 2023.
+
+The CODECO project proposes a unique, smart, and cross-layer orchestration between the
+decentralised data flow, computation, and networking services, to address Edge-Cloud
+challenges derived from the rising Internet and IoT service decentralisation.
+Coordinated by Fortiss and involving 15 relevant Edge-Cloud partners
+across Europe, the project shall develop an ecosystem consisting of open-source toolkits,
+large-scale experimentation, training tools and events, use-cases across 4 vertical domains
+(Smart Cities, Energy, Manufacturing, Smart Buildings), multiple events integrated into a
+unique Innovation and Research Community Engagement Programme.
+
+Read more about it in the [Red Hat Research blog](https://research.redhat.com/blog/research_project/codeco/).
+
+![](/assets/images/posts/2023-01-18-codeco-kickoff/2.jpg)
+
+![](/assets/images/posts/2023-01-18-codeco-kickoff/3.jpg)
\ No newline at end of file
diff --git a/_posts/2023-01-18-kubemark.md b/_posts/2023-01-18-kubemark.md
new file mode 100644
index 0000000000..7f61b260b4
--- /dev/null
+++ b/_posts/2023-01-18-kubemark.md
@@ -0,0 +1,396 @@
+---
+title: "Kubernetes control plane scale testing with Kubemark"
+last_modified_at: 2023-01-26T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+> Continuation of Michael McCune (@elmiko) notes on [Setting Up a Development Environment for the Cluster API Kubemark Provider](https://notes.elmiko.dev/2021/10/11/setup-dev-capi-kubemark.html), [Automating My Hollow Kubernetes Test Rig](https://notes.elmiko.dev/2023/01/21/automating-my-hollow-kubernetes-test-rig.html) and [DevConf.cz 2022 Testing at Scale with Cluster API and Kubemark (demo)](https://vimeo.com/671479117).
+
+[Kubemark](https://github.com/kubernetes/kubernetes/tree/master/cmd/kubemark) is a performance testing tool which allows users to run experiments on simulated clusters, by creating "hollow" Kubernetes nodes. What this means is that the nodes do not actually run containers or attach storage, but they do behave like they did, with updates to etcd and all the trimmings. At the same time, **hollow nodes are extremely light (<30 MiB)**.
+
+The primary use case of Kubemark is scalability testing, as simulated clusters can be much bigger than the real ones. The objective is to expose problems with the master components (API server, controller manager or scheduler) that appear only on bigger clusters (e.g. small memory leaks).
+
+## Architecture
+
+On a very high level Kubemark cluster consists of two parts: real master components and a set of "hollow" nodes. The prefix hollow means an implementation/instantiation of a component with all moving parts mocked out. The best example is HollowKubelet, which pretends to be an ordinary Kubelet, but does not start anything, nor mount any volumes -it just lies it does.
+
+Currently master components run on a dedicated machine(s), and HollowNodes run on an external management Kubernetes cluster. This design has the advantage of completely isolating master resources from everything else.
+
+## Integration with Cluster API
+
+[Kubernetes Cluster API (CAPI)](https://cluster-api.sigs.k8s.io/) is a project focused on providing declarative APIs and tooling to simplify provisioning, upgrading, and operating multiple Kubernetes clusters. It uses Kubernetes-style APIs and patterns to automate cluster lifecycle management for platform operators. The supporting infrastructure, like virtual machines, networks, load balancers, and VPCs, as well as the Kubernetes cluster configuration are all defined in the same way that application developers operate deploying and managing their workloads. This enables consistent and repeatable cluster deployments across a wide variety of infrastructure environments.
+
+The Cluster API community has developed a [Cluster API Kubemark Provider](https://github.com/kubernetes-sigs/cluster-api-provider-kubemark/), allowing users to deploy fake, Kubemark-backed machines to their clusters. This is useful in a variety of scenarios, such load-testing and simulation testing.
+
+## Hands to work
+
+On the host docker (we will be using a fresh Ubuntu 22.04 virtual machine) we will use [kind](https://kind.sigs.k8s.io/) (Kubernetes in Docker, a container running the necessary kubernetes pieces) to create the CAPI Management Cluster. Next, we will use the `clusterctl` tool to create a second cluster (using kind as well) for the Kubemark workload (the cluster under test). Lastly, we want to create new nodes for the Kubemark Control Plane Cluster (the cluster under test) and Kubemark requires that we create these hollow nodes as pods running on a cluster that can join the control plane. The Cluster API Kubemark provider then creates pods within the CAPI Management Cluster which will join the Kubemark Control Plane Cluster (the cluster under test/worload cluster) as nodes.
+
+![](/assets/images/posts/2023-01-18-kubemark.svg)
+
+For the demo we will be using a Ubuntu 22.04 virtual machine with 4 vCPUs, 4 GiB of memory and 100 GiB disk.
+
+### Environment setup
+
+I will be using [Lima](https://github.com/lima-vm/lima) (Linux virtual machines) to create and manage the VM:
+
+```
+$ limactl start --name=ubuntu22.04 template://ubuntu-lts
+$ limactl shell ubuntu22.04
+```
+
+We will use [cluster-apikubemark-ansible](https://github.com/elmiko/cluster-api-kubemark-ansible) playbooks to automate the deploy of:
+ - Golang
+ - Build tools
+ - Docker
+ - Docker local registry
+ - Kind
+ - Kubectl
+ - Kustomize
+ - Kubebuilder
+ - Cluster API
+ - Cluster API Kubemark provider
+
+Prepare the host to run ansible:
+ - Install `ansible` (not `ansible-core`)
+ ```
+ $ sudo apt install ansible
+ $ ssh-keygen
+ $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
+ ```
+ - Clone and and prepare the playbooks:
+ ```
+ $ git clone https://github.com/elmiko/cluster-api-kubemark-ansible.git
+ $ cd cluster-api-kubemark-ansible
+ $ echo -e "[defaults]\nallow_world_readable_tmpfiles=true" > ansible.cfg
+ ```
+ - Update `inventory/hosts` if you need to change addresses and/or users and run the first playbook:
+ ```
+ $ ansible-playbook -i inventory/hosts setup_devel_environment.yaml
+ ```
+ Once it is finished you will be able to login to the host as the devel user listed in the hosts file. All the development tools should be ready for access.
+ - Run the second playbook to build the `clusterctl` binary, all the controller images and push the images to the local registry.
+ ```
+ ansible-playbook -i inventory/hosts build_clusterctl_and_images.yaml
+ ```
+
+### Creating the cluster
+
+We will use the [capi-hacks repo](https://github.com/elmiko/capi-hacks) playbooks to aid with Kubemark deployment.
+
+Ensure the docker local registry was created in the previous steps, if not use the `00-start-localregistry.sh` script:
+```
+$ docker ps
+CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
+7064a4208e15 registry:2 "/entrypoint.sh /etc…" 4 days ago Up 46 minutes 127.0.0.1:5000->5000/tcp kind-registry
+```
+
+Clone the capi-hacks repo:
+```
+$ git clone https://github.com/elmiko/capi-hacks.git
+$ cd capi-hacks
+```
+
+Create the CAPI management cluster. This cluster will host the CAPI components and Kubemark hollow nodes:
+```
+$ ./01-start-mgmt-cluster.sh
+$ kind get clusters
+mgmt
+```
+
+Wait for the node to become ready and configure the management cluster to use the local registry:
+```
+$ kubectl get node
+NAME STATUS ROLES AGE VERSION
+mgmt-control-plane Ready control-plane,master 44s v1.23.6
+
+$ ./02-apply-localregistryhosting-configmap.sh
+```
+
+Deploy the Cluster API (capi) and Cluster API Kubemark Provider (capk) components and wait for their pods to become ready:
+
+```
+$ ./03-clusterctl-init.sh
+
+$ kubectl get deploy -A | grep cap
+capd-system capd-controller-manager 1/1 1 1 10m
+capi-kubeadm-bootstrap-system capi-kubeadm-bootstrap-controller-manager 1/1 1 1 11m
+capi-kubeadm-control-plane-system capi-kubeadm-control-plane-controller-manager 1/1 1 1 11m
+capi-system capi-controller-manager 1/1 1 1 11m
+capk-system capk-controller-manager 1/1 1 1 10m
+```
+
+Create the a new kind (docker provider) cluster for the control plane under test:
+```
+$ kubectl apply -f kubemark/kubemark-workload-control-plane.yaml
+```
+
+Wait for the machine to transition from provisioning to running state:
+```
+$ kubectl get machine
+NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION
+kubemark-workload-control-plane-lvkcv kubemark-workload kubemark-workload-control-plane-lvkcv docker:////kubemark-workload-control-plane-lvkcv Running 3m31s v1.23.6
+
+$ kubectl get clusters
+NAME PHASE AGE VERSION
+kubemark-workload Provisioned 4m4s
+
+$ kind get clusters
+kubemark-workload
+mgmt
+```
+
+Let's take a look to the new `kubemark-workload` kind cluster that will host the control plane under test. As you can see the node is in `NotReady` state (because there is no CNI deployed) and the CNI dependant pods are in `Pending` state:
+```
+$ ./get-kubeconfig.sh kubemark-workload
+
+$ kubectl get node --kubeconfig=kubeconfig.kubemark-workload
+NAME STATUS ROLES AGE VERSION
+kubemark-workload-control-plane-lvkcv NotReady control-plane,master 46m v1.23.6
+
+$ kubectl get po -A --kubeconfig=kubeconfig.kubemark-workload
+NAMESPACE NAME READY STATUS RESTARTS AGE
+kube-system coredns-79dc848587-8qbgk 0/1 Pending 0 6m31s
+kube-system coredns-79dc848587-n9428 0/1 Pending 0 6m31s
+kube-system etcd-kubemark-workload-control-plane-lvkcv 1/1 Running 0 6m39s
+kube-system kube-apiserver-kubemark-workload-control-plane-lvkcv 1/1 Running 0 6m39s
+kube-system kube-controller-manager-kubemark-workload-control-plane-lvkcv 1/1 Running 0 6m39s
+kube-system kube-proxy-skgc9 1/1 Running 0 6m31s
+kube-system kube-scheduler-kubemark-workload-control-plane-lvkcv 1/1 Running 0 6m39s
+```
+
+Let's deploy [OVN-Kubernetes](https://github.com/ovn-org/ovn-kubernetes/) on the cluster (more information on how to deploy OVN-K on a preexisting kind cluster in this [past blog post](/ovnk8s-kind). OVN-Kubernetes is a CNI for Kubernetes based on the [Open Virtual Network (OVN)](https://www.ovn.org/en/) project:
+```
+$ ./deploy-cni-ovn.sh $(pwd)/kubeconfig.kubemark-workload kubemark-workload
+```
+
+Check if the nodes and the CNI dependant pods have transitioned to `Ready` state and the OVN pods are present:
+```
+$ kubectl get node --kubeconfig=kubeconfig.kubemark-workload
+NAME STATUS ROLES AGE VERSION
+kubemark-workload-control-plane-lvkcv Ready control-plane,master 78m v1.23.6
+
+$ kubectl get po -A --kubeconfig=kubeconfig.kubemark-workload
+NAMESPACE NAME READY STATUS RESTARTS AGE
+default test2 1/1 Running 0 3m4s
+kube-system coredns-79dc848587-8qbgk 1/1 Running 0 78m
+kube-system coredns-79dc848587-n9428 1/1 Running 0 78m
+kube-system etcd-kubemark-workload-control-plane-lvkcv 1/1 Running 0 78m
+kube-system kube-apiserver-kubemark-workload-control-plane-lvkcv 1/1 Running 0 78m
+kube-system kube-controller-manager-kubemark-workload-control-plane-lvkcv 1/1 Running 0 78m
+kube-system kube-proxy-skgc9 1/1 Running 0 78m
+kube-system kube-scheduler-kubemark-workload-control-plane-lvkcv 1/1 Running 0 78m
+ovn-kubernetes ovnkube-db-7d8fdc7dfb-2pf8m 2/2 Running 0 6m42s
+ovn-kubernetes ovnkube-master-6dbd568bb5-89s7c 2/2 Running 0 6m41s
+ovn-kubernetes ovnkube-node-7s7r5 3/3 Running 0 6m33s
+ovn-kubernetes ovs-node-gnpv9 1/1 Running 0 6m41s
+```
+
+At this point we are ready to deploy Kubemark hollow nodes in the managment cluster. This step will create 4 Kubemark hollow nodes:
+```
+kubectl apply -f kubemark/kubemark-workload-md0.yaml
+```
+
+Let's check things from the managment cluster perspective first:
+```
+$ kubectl get machine
+NAME CLUSTER NODENAME PROVIDERID PHASE AGE VERSION
+kubemark-workload-control-plane-lvkcv kubemark-workload kubemark-workload-control-plane-lvkcv docker:////kubemark-workload-control-plane-lvkcv Running 84m v1.23.6
+kubemark-workload-md-0-764cb59d5-8c62j kubemark-workload kubemark-workload-md-0-v7592 kubemark://kubemark-workload-md-0-v7592 Running 57s v1.23.6
+kubemark-workload-md-0-764cb59d5-bb2p4 kubemark-workload kubemark-workload-md-0-4955k kubemark://kubemark-workload-md-0-4955k Running 57s v1.23.6
+kubemark-workload-md-0-764cb59d5-hwlh7 kubemark-workload kubemark-workload-md-0-m82cf kubemark://kubemark-workload-md-0-m82cf Running 57s v1.23.6
+kubemark-workload-md-0-764cb59d5-jrmgt kubemark-workload kubemark-workload-md-0-82m9j kubemark://kubemark-workload-md-0-82m9j Running 57s v1.23.6
+
+$ kubectl get po
+NAME READY STATUS RESTARTS AGE
+kubemark-workload-md-0-4955k 1/1 Running 0 90s
+kubemark-workload-md-0-82m9j 1/1 Running 0 90s
+kubemark-workload-md-0-m82cf 1/1 Running 0 90s
+kubemark-workload-md-0-v7592 1/1 Running 0 90s
+```
+
+Finally, let's check things from the cluster under test perspective:
+```
+$ kubectl get node --kubeconfig=kubeconfig.kubemark-workload
+NAME STATUS ROLES AGE VERSION
+kubemark-workload-control-plane-lvkcv Ready control-plane,master 84m v1.23.6
+kubemark-workload-md-0-4955k Ready 2m11s v1.23.6
+kubemark-workload-md-0-82m9j Ready 2m6s v1.23.6
+kubemark-workload-md-0-m82cf Ready 2m10s v1.23.6
+kubemark-workload-md-0-v7592 Ready 2m9s v1.23.6
+```
+
+### Creating resources on the workload cluster
+
+Let's create a simple pod and service:
+```
+$ kubectl run test --image nginx --kubeconfig=kubeconfig.kubemark-workload
+pod/test created
+
+$ kubectl get po -o wide --kubeconfig=kubeconfig.kubemark-workload
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+test 1/1 Running 0 100s 192.168.192.168 kubemark-workload-md-0-m82cf
+
+$ kubectl expose po/test --port 5000 --kubeconfig=kubeconfig.kubemark-workload
+service/test exposed
+
+$ kubectl get service --kubeconfig=kubeconfig.kubemark-workload
+NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+kubernetes ClusterIP 192.168.122.1 443/TCP 87m
+test ClusterIP 192.168.122.93 5000/TCP 7s
+```
+
+Let's check OVN databases:
+```
+$ POD=$(kubectl get pod -n ovn-kubernetes -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' --kubeconfig=kubeconfig.kubemark-workload | grep ovnkube-db-) ; kubectl exec -ti $POD -n ovn-kubernetes -c nb-ovsdb --kubeconfig=kubeconfig.kubemark-workload -- bash
+
+[root@kubemark-workload-control-plane-lvkcv ~]# ovn-nbctl ls-list
+712ca431-ff74-4aef-af8d-00acee6e40dd (ext_kubemark-workload-control-plane-lvkcv)
+95755675-c275-4d04-bd35-713ba7597c0c (join)
+d7264e2c-4e4e-44fe-9eae-5b99facca098 (kubemark-workload-control-plane-lvkcv)
+ee3c0a20-7df2-421b-8e9e-b676080d6976 (kubemark-workload-md-0-4955k)
+b4f230a6-9151-44cd-8fa9-4f489799274e (kubemark-workload-md-0-82m9j)
+a27e961a-6aaf-4e33-999c-9e7fd73611fa (kubemark-workload-md-0-m82cf)
+48b096d8-42c5-4d18-b226-924ec60af0c5 (kubemark-workload-md-0-v7592)
+
+[root@kubemark-workload-control-plane-lvkcv ~]# ovn-nbctl lb-list
+UUID LB PROTO VIP IPs
+8ffbeb8b-c2ba-4549-9a5b-5ac9577c4271 Service_default/ tcp 192.168.122.1:443 172.18.0.5:6443
+e4b5bceb-3b51-48e9-be67-7b45fb966caf Service_default/ tcp 192.168.122.93:5000 192.168.192.168:5000
+654c5590-a2b7-4a6e-bf04-d8c1c78b0267 Service_default/ tcp 192.168.122.1:443 169.254.169.2:6443
+ca23b927-4b87-4fdd-b16c-f8c3d824e6e6 Service_kube-sys tcp 192.168.122.10:53 10.244.0.3:53,10.244.0.4:53
+ tcp 192.168.122.10:9153 10.244.0.3:9153,10.244.0.4:9153
+699e0b39-1be8-4db7-953f-dbc836d42faf Service_kube-sys udp 192.168.122.10:53 10.244.0.3:53,10.244.0.4:53
+
+[root@kubemark-workload-control-plane-lvkcv ~]# ovn-sbctl list port_binding default_test
+_uuid : 26050c0d-0e5d-4496-b0ee-0b3df1bb40c9
+additional_chassis : []
+additional_encap : []
+chassis : []
+datapath : 1ac0b646-9d4d-432e-9e59-64db6520973f
+encap : []
+external_ids : {namespace=default, pod="true"}
+gateway_chassis : []
+ha_chassis_group : []
+logical_port : default_test
+mac : ["0a:58:0a:f4:02:03 10.244.2.3"]
+mirror_rules : []
+nat_addresses : []
+options : {iface-id-ver="b505da18-8294-41ac-a25e-ffeeb5d3b7fb", requested-chassis=kubemark-workload-md-0-m82cf}
+parent_port : []
+port_security : ["0a:58:0a:f4:02:03 10.244.2.3"]
+requested_additional_chassis: []
+requested_chassis : []
+tag : []
+tunnel_key : 2
+type : ""
+up : false
+virtual_parent : []
+```
+
+### Scaling the cluster
+
+Let's check how many resources Kubemark hollow nodes consume (<30 MiB, compared to 650 MiB of a normal ovnkube worker):
+```
+$ kubectl top pod
+NAME CPU(cores) MEMORY(bytes)
+kubemark-workload-md-0-4955k 38m 28Mi
+kubemark-workload-md-0-82m9j 36m 28Mi
+kubemark-workload-md-0-m82cf 45m 29Mi
+kubemark-workload-md-0-v7592 41m 28Mi
+```
+
+In our 4 GiB VM we have 1GiB available:
+```
+$ free -h
+ total used free shared buff/cache available
+Mem: 3.8Gi 2.5Gi 170Mi 25Mi 1.2Gi 1.0Gi
+```
+
+Lets create a total of 30 Kubemark hollow nodes:
+
+```
+$ kubectl patch --type merge MachineDeployment kubemark-workload-md-0 -p '{"spec":{"replicas":30}}'
+
+$ kubectl get machine | grep kubemark-workload-md-0 | grep Running | wc -l
+30
+
+$ kubectl get po | grep kubemark-workload | grep Running | wc -l
+30
+
+$ free -h
+ total used free shared buff/cache available
+Mem: 3.8Gi 3.2Gi 112Mi 28Mi 548Mi 347Mi
+```
+
+### Stressing the cluster
+
+Let's use [kube-burner](https://kube-burner.readthedocs.io/) to stress our workload cluster. Kube-burner is a tool aimed at stressing kubernetes clusters, by creating/deleting objects declared in jobs.
+
+Let's install kube-burner:
+```
+$ wget https://github.com/cloud-bulldozer/kube-burner/releases/download/v1.2/kube-burner-1.2-Linux-x86_64.tar.gz
+
+$ sudo install -o root -g root -m 0755 kube-burner /usr/local/bin/kube-burner
+
+$ kube-burner version
+Version: 1.2
+Git Commit: 563bc92b9262582391e5dffb8941b914ca19d2d3
+Build Date: 2023-01-13T10:18:17Z
+Go Version: go1.19.4
+OS/Arch: linux amd64
+```
+
+Let's take a look at the configuration file `kubeburner/cfg.yaml`:
+```yaml
+---
+global:
+ writeToFile: false
+ indexerConfig:
+ enabled: false
+
+jobs:
+ - name: kubelet-density
+ preLoadImages: false
+ jobIterations: 100
+ qps: 20
+ burst: 20
+ namespacedIterations: false
+ namespace: kubelet-density
+ waitWhenFinished: true
+ podWait: false
+ objects:
+ - objectTemplate: pod.yaml
+ replicas: 1
+ inputVars:
+ containerImage: gcr.io/google_containers/pause-amd64:3.0
+```
+
+Let's create some pods on the cluster:
+```
+$ KUBECONFIG=kubeconfig.kubemark-workload kube-burner init -c kubeburner/cfg.yaml
+INFO[2023-01-17 15:21:25] 🔥 Starting kube-burner (1.2@563bc92b9262582391e5dffb8941b914ca19d2d3) with UUID def1da7b-a5db-4c05-bb17-167d889ef33b
+INFO[2023-01-17 15:21:25] 📈 Creating measurement factory
+INFO[2023-01-17 15:21:25] Job kubelet-density: 100 iterations with 1 Pod replicas
+INFO[2023-01-17 15:21:25] QPS: 20
+INFO[2023-01-17 15:21:25] Burst: 20
+INFO[2023-01-17 15:21:25] Triggering job: kubelet-density
+INFO[2023-01-17 15:21:26] Running job kubelet-density
+INFO[2023-01-17 15:21:32] Waiting up to 3h0m0s for actions to be completed
+INFO[2023-01-17 15:21:51] Actions in namespace kubelet-density completed
+INFO[2023-01-17 15:21:51] Finished the create job in 23s
+INFO[2023-01-17 15:21:51] Verifying created objects
+INFO[2023-01-17 15:21:52] pods found: 100 Expected: 100
+INFO[2023-01-17 15:21:52] Job kubelet-density took 26.88 seconds
+INFO[2023-01-17 15:21:52] Finished execution with UUID: def1da7b-a5db-4c05-bb17-167d889ef33b
+INFO[2023-01-17 15:21:52] 👋 Exiting kube-burner def1da7b-a5db-4c05-bb17-167d889ef33b
+
+$ kubectl get po -n kubelet-density | grep Running | wc -l
+100
+```
\ No newline at end of file
diff --git a/_posts/2023-02-06-icni2.md b/_posts/2023-02-06-icni2.md
new file mode 100644
index 0000000000..fbb410997b
--- /dev/null
+++ b/_posts/2023-02-06-icni2.md
@@ -0,0 +1,604 @@
+---
+title: "OVN-Kubernetes Multiple External Gateway local setup"
+last_modified_at: 2023-08-10T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+Steps to set up a local environment with OVN Kubernetes Multiple External Gateway capability (also known as Intelligent CNI 2.0 or iCNI2.0) and a [FRRRouting (FRR)](https://frrouting.org/) pod acting as external gateway.
+
+![](/assets/images/posts/2023-02-06-icni2.png)
+
+## Kind setup
+
+First let us create a local kind cluster with ONV-Kubernetes as CNI:
+
+```
+$ git clone https://github.com/ovn-org/ovn-kubernetes.git
+$ cd ovn-kubernetes/contrib
+$ ./kind.sh --disable-snat-multiple-gws --multi-network-enable
+```
+
+Let's take a look at the options:
+ - `disable-snat-multiple-gws`: Disable SNAT for multiple gws
+ - `multi-network-enable`: Installs [Multus-CNI](https://github.com/k8snetworkplumbingwg/multus-cni) on the cluster
+
+After some minutes, we will have a three node cluster ready for use:
+```
+$ export KUBECONFIG=$HOME/ovn.conf
+$ kubectl get node
+NAME STATUS ROLES AGE VERSION
+ovn-control-plane Ready control-plane 4h2m v1.24.0
+ovn-worker Ready 4h1m v1.24.0
+ovn-worker2 Ready 4h1m v1.24.0
+```
+
+Let's install some additional CNI networks plugins needed for the test (i.e.: macvlan):
+```
+$ git clone https://github.com/containernetworking/plugins.git
+$ cd plugins
+$ ./build_linux.sh
+$ cd bin
+$ for i in $(docker ps -aq); do for j in macvlan static tuning; do docker cp $j $i:/opt/cni/bin/; done; done
+```
+
+Alternativally, if you don't want to manually compile the CNI plugins, submitted a [PR](https://github.com/ovn-org/ovn-kubernetes/pull/3417) that adds an option to deploy additional CNI plugins (i.e.: macvlan, ipvlan, etc.) to the script `kind.sh`:
+
+```
+$ wget https://raw.githubusercontent.com/ovn-org/ovn-kubernetes/0123ad42d371223dc434b6af06a9ea4fd8336cda/contrib/kind.sh
+$ ./kind.sh --install-cni-plugins --disable-snat-multiple-gws --multi-network-enable
+```
+
+Let's take a look at the new option introduced by the [PR](https://github.com/ovn-org/ovn-kubernetes/pull/3417):
+ - `install-cni-plugins`: Installs additional CNI network plugins
+
+## Resource creation
+
+Let's create the namespaces:
+```yaml
+$ cat < 11m v1.24.0 172.18.0.4 Ubuntu 21.10 6.0.7-301.fc37.x86_64 containerd://1.6.4
+
+$ kubectl get nodes -o jsonpath='{range .items[*].metadata.annotations}{.k8s\.ovn\.org\/node\-subnets}{.k8s\.ovn\.org\/node\-primary\-ifaddr}{"\n"}{end}' | awk -F'["/]' '{print "ip route " $4"/"$5 " " $9}'
+ip route 10.244.0.0/24 172.18.0.3
+ip route 10.244.2.0/24 172.18.0.2
+ip route 10.244.1.0/24 172.18.0.4
+```
+
+Let's create the FRR configuration:
+```yaml
+$ cat < mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
+ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+ inet 127.0.0.1/8 scope host lo
+ valid_lft forever preferred_lft forever
+ inet6 ::1/128 scope host
+ valid_lft forever preferred_lft forever
+2: eth0@if95: mtu 1400 qdisc noqueue state UP group default
+ link/ether 0a:58:0a:f4:02:11 brd ff:ff:ff:ff:ff:ff link-netnsid 0
+ inet 10.244.2.17/24 brd 10.244.2.255 scope global eth0
+ valid_lft forever preferred_lft forever
+ inet6 fe80::858:aff:fef4:211/64 scope link
+ valid_lft forever preferred_lft forever
+3: net1@if7: mtu 1500 qdisc noqueue state UP group default
+ link/ether 5a:1d:47:09:44:8e brd ff:ff:ff:ff:ff:ff link-netnsid 0
+ inet 172.18.0.10/16 brd 172.18.255.255 scope global net1
+ valid_lft forever preferred_lft forever
+ inet6 fe80::581d:47ff:fe09:448e/64 scope link
+ valid_lft forever preferred_lft forever
+
+sh-5.1# ip r
+default via 10.244.2.1 dev eth0
+10.244.0.0/24 nhid 15 via 172.18.0.3 dev net1 proto 196 metric 20
+10.244.1.0/24 nhid 16 via 172.18.0.4 dev net1 proto 196 metric 20
+10.244.2.0/24 dev eth0 proto kernel scope link src 10.244.2.6
+172.18.0.0/16 dev net1 proto kernel scope link src 172.18.0.10
+
+sh-5.1# ping -c1 172.18.0.4
+PING 172.18.0.4 (172.18.0.4) 56(84) bytes of data.
+64 bytes from 172.18.0.4: icmp_seq=1 ttl=64 time=0.276 ms
+--- 172.18.0.4 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 0.276/0.276/0.276/0.000 ms
+
+sh-5.1# vtysh
+Hello, this is FRRouting (version 8.0).
+Copyright 1996-2005 Kunihiro Ishiguro, et al.
+ext-gw# show bfd peers brief
+Session count: 1
+SessionId LocalAddress PeerAddress Status
+========= ============ =========== ======
+1866236061 172.18.0.10 172.18.0.4 up
+```
+
+Let's check FRR logs:
+```
+$ oc logs ext-gw -n frr
+Started watchfrr
+2023/02/23 10:34:31 ZEBRA: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
+2023/02/23 10:34:31 BGP: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
+2023/02/23 10:34:31 STATIC: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
+2023/02/23 10:34:31 BFD: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
+2023/02/23 10:34:33 BFD: [J1C6V-VMRW5] state-change: [mhop:no peer:172.18.0.4 local:0.0.0.0 vrf:default] init -> up
+```
+
+Let's check everything was properly created from the OVN perspective:
+```
+$ POD=$(kubectl get pod -n ovn-kubernetes -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' | grep ovnkube-db-) ; kubectl exec -ti $POD -n ovn-kubernetes -c nb-ovsdb -- bash
+
+[root@ovn-control-plane ~]# ovn-nbctl list bfd
+_uuid : 6a5f6a73-df1f-4114-b36a-745cf3e9123b
+detect_mult : []
+dst_ip : "172.18.0.10"
+external_ids : {}
+logical_port : exgw-rtoe-GR_ovn-worker2
+min_rx : []
+min_tx : []
+options : {}
+status : up
+
+[root@ovn-control-plane ~]# ovn-nbctl lr-route-list GR_ovn-worker2
+IPv4 Routes
+Route Table :
+ 10.244.1.3 172.18.0.10 src-ip exgw-rtoe-GR_ovn-worker2 ecmp-symmetric-reply bfd
+ 169.254.169.0/29 169.254.169.4 dst-ip rtoe-GR_ovn-worker2
+ 10.244.0.0/16 100.64.0.1 dst-ip
+ 0.0.0.0/0 172.18.0.1 dst-ip rtoe-GR_ovn-worker2
+
+[root@ovn-control-plane ~]# ovn-nbctl lr-route-list GR_ovn-worker
+IPv4 Routes
+Route Table :
+ 169.254.169.0/29 169.254.169.4 dst-ip rtoe-GR_ovn-worker
+ 10.244.0.0/16 100.64.0.1 dst-ip
+ 0.0.0.0/0 172.18.0.1 dst-ip rtoe-GR_ovn-worker
+```
+
+Let's add a loopback address to the *ext-gw* pod to test the source routing entry:
+```
+$ kubectl exec -n frr ext-gw -- ip a a 192.168.1.10/32 dev lo
+```
+
+Validate the *dummy* pod can reach the network running in *ext-gw* container's looback address:
+```
+$ kubectl exec -n bar dummy -- ping -c 1 192.168.1.10
+PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
+64 bytes from 192.168.1.10: icmp_seq=1 ttl=62 time=6.96 ms
+
+--- 192.168.1.10 ping statistics ---
+1 packets transmitted, 1 received, 0% packet loss, time 0ms
+rtt min/avg/max/mdev = 6.959/6.959/6.959/0.000 ms
+```
+
+Let's create a "normal" pod in the default namespace (outside the `routing-namespaces` annotated namespaces):
+```yaml
+$ cat <-
+ vtysh -c 'show bfd peers brief' |
+ grep up
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ volumes:
+ - name: config-volume
+ configMap:
+ name: frr-configs
+ nodeSelector:
+ kubernetes.io/hostname: ovn-worker
+EOF
+```
+
+```
+$ kubectl get po -n frr
+NAME READY STATUS RESTARTS AGE
+ext-gw 1/1 Running 0 46m
+ext-gw2 1/1 Running 0 5m10s
+
+$ kubectl describe po ext-gw2 -n frr | grep Ready
+ Ready: True
+ Ready True
+ ContainersReady True
+```
diff --git a/_posts/2023-03-20-linux-trivia.md b/_posts/2023-03-20-linux-trivia.md
new file mode 100644
index 0000000000..214be2413b
--- /dev/null
+++ b/_posts/2023-03-20-linux-trivia.md
@@ -0,0 +1,26 @@
+---
+title: "Legends of Linux Trivia"
+last_modified_at: 2022-03-20T16:00:58-04:00
+tags:
+ - cert
+ - en
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+How well do you know Linux?
+
+Red Hat [is offering](https://redhatdg.co1.qualtrics.com/jfe/form/SV_bjRFSHqPdTpIjoa) three nifty badges for Linux lovers and badge collectors alike. Successfully complete a single Red Hat quiz to earn the badge of your choice below. Or complete them all to earn all three. Sounds pretty easy, right? Well, there is a catch … you have to score 100% on the quiz.
+
+### Red Hat Enterprise Linux Trivia - Red Hat Titan
+
+![](/assets/images/posts/2023-03-20-linux-trivia/RedHatTitan.png)
+
+### Linux Command-Line Trivia - Command-Line Captain
+
+![](/assets/images/posts/2023-03-20-linux-trivia/Command-LineCaptain.png)
+
+### Linux Open Source Trivia - Open Sourcer-er
+
+![](/assets/images/posts/2023-03-20-linux-trivia/OpenSourcer-er.png)
diff --git a/_posts/2023-03-28-perfcon23.md b/_posts/2023-03-28-perfcon23.md
new file mode 100644
index 0000000000..b9075cc456
--- /dev/null
+++ b/_posts/2023-03-28-perfcon23.md
@@ -0,0 +1,28 @@
+---
+title: "PerfConf Spring 2023"
+last_modified_at: 2023-03-28T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - openshift
+ - redhat
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+## [Proceedings](https://perfconfspring2023.sched.com/)
+
+[**(Control-plane) testing at scale with Cluster API and Kubemark**](https://perfconfspring2023.sched.com/event/1JjtY/control-plane-testing-at-scale-with-cluster-api-and-kubemark)
+
+Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating "hollow" Kubernetes nodes (that run as pods in an external management cluster). What this means is that the nodes do not actually run containers or attach storage, but they do behave like they did, with updates to etcd and all the trimmings. At the same time, hollow nodes are extremelly light (<30 MiB).
+
+The primary use case of Kubemark is scalability testing, as simulated clusters can be much bigger than the real ones. The objective is to expose problems with the master components (API server, controller manager or scheduler) that appear only on bigger clusters (e.g. small memory leaks).
+
+Tuesday, March 28 • 3:40pm - 4:00pm CEST
+
+Google Meet ID: [https://meet.google.com/bzf-quiv-kaz](https://meet.google.com/bzf-quiv-kaz)
+
+## Speakers
+ - [Jose Castillo Lema](https://perfconfspring2022.sched.com/speaker/jlema) - Software Engineer at **Red Hat**
\ No newline at end of file
diff --git a/_posts/2023-04-19-rhr-talks.md b/_posts/2023-04-19-rhr-talks.md
new file mode 100644
index 0000000000..5ff4c97669
--- /dev/null
+++ b/_posts/2023-04-19-rhr-talks.md
@@ -0,0 +1,34 @@
+---
+title: "RHR talks: Fluid Network Control and Data Plane Research"
+last_modified_at: 2023-04-19T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - redhat
+ - research
+toc: false
+---
+
+[![](/assets/images/posts/2023-04-19-physics-rhr-talks.png)](https://research.redhat.com/events/fluid-network-control-and-data-plane-research/)
+
+Join [Red Hat Research](https://research.redhat.com/) for the next Research Days event, **Fluid Network Control and Data Plane Research** on April 19, 2023 from 17PM to 18:30PM CEST.
+
+New 5G and 6G technologies are raising the top speed for a wireless device up to 1 Tbps, and experts predict 6G will be available to consumers by 2030. What will our core networks look like then, and how will we engineer them to support diverse dynamic services that range from slow text to fast autonomous vehicles? Join us for a peek into the challenges of driving on the edge as envisioned by researchers from Latin America.
+
+[Christian Rothenberg](https://research.redhat.com/blog/project_member/christian-esteve-rothenberg/), Professor, University of Campinas, and head of [INTRIG Lab](https://intrig.dca.fee.unicamp.br/), will be our speaker and [Simone Ferlin-Reiter](https://research.redhat.com/blog/project_member/simone-ferlin-reiter/), Red Hat, will lead the conversation.
+
+## Abstract
+Prof. Christian Rothenberg will introduce the [SMARTNESS 2030](https://smartness2030.tech/) research center initiative and present selected ongoing research tracks around network softwarization leveraging state-of-the-art open source and open hardware technologies:
+
+- Hybrid-p4-5G: Hybrid P4 Programmable Pipelines for 5G gNodeB and User Plane Functions
+- P7 – P4 Programmable Patch Panel: an instant 100G emulated network testbed in a Tofino pizza box
+- EFFECTOR: Encrypted DASH QoE Performance Evaluation Framework with 5G Datasets
+- QoEyes: Virtual Reality Streaming QoE Estimation through ML techniques and Programmable Data Planes
+- PoD acceleration: Offloading K8 container networking functions and service mesh crypto functions (eg. kTLS) to programmable SmartNICs/IPUs
+
+The recording and materials will be available following the talk. Learn more about Red Hat Research Days Events and watch the recordings from previous events at [research.redhat.com/research-talks](https://research.redhat.com/research-talks/).
+
+
+
+![YouTube Video Views](https://img.shields.io/youtube/views/Kd5BiDYD0M4?style=social)
+![YouTube Video Likes](https://img.shields.io/youtube/likes/Kd5BiDYD0M4?style=social)
\ No newline at end of file
diff --git a/_posts/2023-04-21-iffe-mbd.md b/_posts/2023-04-21-iffe-mbd.md
new file mode 100644
index 0000000000..8c24bda2fd
--- /dev/null
+++ b/_posts/2023-04-21-iffe-mbd.md
@@ -0,0 +1,18 @@
+---
+title: "IFFE Máster en Big Data y Analítica de Negocio (MBD)"
+last_modified_at: 2023-04-21T16:00:58-04:00
+tags:
+ - aws
+ - classes
+ - es
+ - iffe
+toc: false
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/iffe/main/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2023-05-23-devconf23.md b/_posts/2023-05-23-devconf23.md
new file mode 100644
index 0000000000..3571e97620
--- /dev/null
+++ b/_posts/2023-05-23-devconf23.md
@@ -0,0 +1,52 @@
+---
+title: "DevConf.CZ 2023 - Writing a K8s Operator for Knative Functions"
+last_modified_at: 2023-07-05T16:00:58-04:00
+tags:
+ - en
+ - events
+ - openshift
+ - redhat
+ - research
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2023-05-23-devconf23/1.png)](https://www.devconf.info/cz/)
+
+## About
+
+[DevConf.CZ](https://www.devconf.info/cz/) is an annual, free, Red Hat sponsored community conference for developers, admins, DevOps engineers, testers, documentation writers and other contributors to open source technologies. At DevConf.CZ, FLOSS communities sync, share, and hack on upstream projects together.
+
+DevConf.cz Mini is a bi-annual, highly focused, local, in-person version of DevConf.cz. It offers an opportunity to return to our conference themes in a smaller setting and establishes a platform for the Czech Republic and EMEA based community to sync, share and hack on upstream projects together.
+
+There is no admission or ticket charge for DevConf.CZ events. However, you are required to complete a free registration. Watch this site for updates about registration.
+
+We are committed to fostering an open and welcoming environment at our conference. We set expectations for inclusive behavior through our code of conduct and media policies, and are prepared to enforce these.
+
+## [Schedule](https://devconfcz2023.sched.com/)
+
+[**Writing a K8s Operator for Knative Functions**](https://devconfcz2023.sched.com/event/1MYpJ/writing-a-k8s-operator-for-knative-functions)
+
+[![](/assets/images/posts/2023-05-23-devconf23/2.png)](https://research.redhat.com/blog/2023/06/09/red-hat-research-engineers-will-lead-the-workshop-on-k8s-operator-for-faas-at-devconf-cz-2023/)
+
+Serverless and Function as a Service (FaaS) are getting more and more attention from customers and developers as a way to develop, run and manage applications functionality without the burden of infrastructure related knowledge. All big cloud providers offer them already, e.g., AWS Lambda, Google Cloud Functions or Microsoft Azure Functions. One of the most relevant upstream projects for serverless is Knative, which recently added support for functions (create, build, and deploy) on top of K8s clusters.
+
+This workshop will introduce you to the the [PHYSICS European project](/physics) and its FaaS model, as well as to building Kubernetes operators. You will implement a K8s Operator, using the operatorsdk framework, to provide the functionality of the Knative CLI. This will allow easier creation, build and deployment of functions with Knative just by creating Kubernetes (CR) objects, and will help you learn the internals about how K8s Operators work in a real life example.
+
+***Friday June 16, 2023 • 2:15pm - 3:35pm CEST***
+
+![](/assets/images/posts/2023-05-23-devconf23/3.jpeg)
+
+## Speakers
+ - [Luis Tomas Bolivar](https://devconfcz2023.sched.com/speaker/ltomasbo) - Software Engineer at **Red Hat**
+ - [Jose Castillo Lema](https://devconfcz2023.sched.com/speaker/jlema) - Software Engineer at **Red Hat**
+
+## Links
+
+ - [DevConf](https://devconfcz2023.sched.com/event/1MYpJ/writing-a-k8s-operator-for-knative-functions)
+ - [Red Hat Research (RHR) blog](https://research.redhat.com/blog/2023/06/09/red-hat-research-engineers-will-lead-the-workshop-on-k8s-operator-for-faas-at-devconf-cz-2023/)
+ - [Physics blog](https://physics-faas.eu/event/future-tech-and-open-research-hackathon/)
+
+## Workshop
+
+{% remote_include https://raw.githubusercontent.com/luis5tb/physics-devconf/main/README.md %}
\ No newline at end of file
diff --git a/_posts/2023-05-25-netsoft23.md b/_posts/2023-05-25-netsoft23.md
new file mode 100644
index 0000000000..8d1819a079
--- /dev/null
+++ b/_posts/2023-05-25-netsoft23.md
@@ -0,0 +1,47 @@
+---
+title: "NetSoft 2023 - Network Softwarization in the Era of Complexity"
+last_modified_at: 2023-06-24T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - redhat
+ - research
+ - sdn
+toc: true
+toc_sticky: true
+---
+
+[![](/assets/images/posts/2023-05-25-netsoft23/1.png)](https://netsoft2023.ieee-netsoft.org/)
+
+## About
+
+The [9th IEEE International Conference on Network Softwarization (IEEE NetSoft 2023)](https://netsoft2023.ieee-netsoft.org/about) will be held in **Madrid, Spain from June 19 to June 23, 2023**. The conference will be hosted by University Carlos III of Madrid, one of the best Spanish universities in many technical areas, in its downtown campus in Madrid.
+
+The theme of the IEEE NetSoft 2023 *Boosting Future Networks through Advanced Softwarization* reflects the vision that future networks will also integrate a native service dimension in a continuum compute-connectivity environment crossing different network segments/providers/domains and enabled by softwarization coupled with new advanced architectures, frameworks, and models. This will allow greater flexibility, reliability, adaptability, and efficiency for both network operations and service deployments for the benefit of an ecosystem of different application layers/developers/components. This will also lay the foundation to head beyond the current inter-networking capabilities in Future Internet architectures and to further convergence between internetworking and IP layer re-engineering.
+
+As in previous events, the IEEE NetSoft 2023 will showcase the latest research and development results from academia and industry in the area of AI/ML, SDN/NFV, edge/fog networking, management and orchestration, network slicing, energy efficiency, cloud-native deployments, security among others promising research areas in the context of Future Internet with the final aim of enabling an open softwarized network environment featured by full automation and autonomicity, native network slicing, and AI-based and dynamic control, management and orchestration.
+
+IEEE NetSoft 2023 will feature an intense five-day conference program. The core of the conference will run from June 20 to June 22 and will feature inspiring Keynote Talks delivered by world-class researchers and industry representatives. It also includes a Distinguished Expert Panel, Technical Sessions, as well as Demos showcasing prototypes and proof-of-concept implementations of ongoing research ideas. On June 19 and June 23, the program includes workshops and tutorials that will provide the opportunity to deep dive into the focused topics on network softwarization. In addition, in this edition for the first time a PhD symposium will take place to engage PhD students in the vibrant NetSoft community and give them the opportunity to exchange ideas and receive valuable and constructive feedback for PhD work.
+
+## [Network Softwarization in the Era of Complexity](https://netsoft2023.ieee-netsoft.org/program/distinguished-expert-panel)
+
+The IEEE International Conference on Network Softwarization (NetSoft) has a long-standing tradition of hosting a Distinguished Expert Panel (DEP) at the end of the three main conference days. The DEP offers the audience the possibility to hear the opinions and visions of renowned experts coming from academia, industry, and government agencies on the most relevant aspects of network softwarization, as well as to actively interact with them.
+
+The NetSoft 2023 conference theme (*Boosting Future Networks through Advanced Softwarization*) reflects the vision of networks characterized by unprecedented levels of complexity, which can be dealt with only through the flexibility, reliability, efficiency, and abstraction capabilities offered by network softwarization and its advanced architectures, frameworks, and models. How to approach such complexity from a perspective that has practical implications on industry and society, taking advantage of the pervasiveness of communications and their evolution toward intelligent paradigms, will be discussed in the NetSoft 2023 DEP, scheduled on **Thursday, June 22**.
+
+The [panel](https://netsoft2023.ieee-netsoft.org/program/distinguished-expert-panel) will be centered on the topic *Network Softwarization in the Era of Complexity* and the discussion will continue on two interesting subtopics: *Industrialization of Network Softwarization* and *Network Softwarization: Pervasiveness and Intelligence*. Champions from industry and academia will present their views and introduce the challenges, stimulating the participation of the other panelists as well as the audience.
+
+## Panelists
+ - Rui Aguiar, IT Aveiro, Portugal
+ - Javier Antich Romaguera, Selector AI, Spain
+ - Jose Castillo Lema, Red Hat, Spain
+ - Abhimanyu Gosain, Northeastern University, USA
+ - Ricard Vilalta, CTTC, Spain
+
+## Co-chairs
+ - Luis Miguel Contreras Murillo, Telefonica I+D, Spain
+ - Walter Cerroni, University of Bologna, Italy
+
+![](/assets/images/posts/2023-05-25-netsoft23/2.jpg)
\ No newline at end of file
diff --git a/_posts/2023-06-02-imdea.md b/_posts/2023-06-02-imdea.md
new file mode 100644
index 0000000000..000245fbcf
--- /dev/null
+++ b/_posts/2023-06-02-imdea.md
@@ -0,0 +1,26 @@
+---
+title: "Telecom cloud-native development: an industry point of view"
+last_modified_at: 2023-06-02T16:00:58-04:00
+tags:
+ - en
+ - events
+ - networks
+ - nfv
+ - research
+ - sdn
+toc: false
+---
+
+[![](/assets/images/posts/2023-06-02-imdea.png)](https://networks.imdea.org/whatsnew/events-agenda/)
+
+Telcos are increasingly moving from physical/virtual to cloud-native network functions in the context of 5G adoption. In this talk we will describe the telecom network transformation journey, benefits of cloud-native deployments, technical requirements/constraints of the underlying cloud service managers, the role of open source technologies and the use of the operator pattern in telecom contexts.
+
+**Event**: [link](https://networks.imdea.org/whatsnew/events-agenda/telecom-cloud-native-development-an-industry-point-of-view/)
+
+**Date**: 9 Jun 2023
+
+**Location**: MR-A1 [Ramón] & MR-A2 [Cajal], IMDEA Networks Institute, Avda. del Mar Mediterráneo 22, 28918 Leganés – Madrid
+
+**Time**: 12:00
+
+**Add to Calendar**: [iCalendar](https://networks.imdea.org/whatsnew/events-agenda/telecom-cloud-native-development-an-industry-point-of-view/#) [Outlook](https://networks.imdea.org/whatsnew/events-agenda/telecom-cloud-native-development-an-industry-point-of-view/#) [Google](https://www.google.com/calendar/render?action=TEMPLATE&text=Telecom+cloud-native+development%3A+an+industry+point+of+view&dates=20230609T100000Z/20230609T120000Z&details=&location=MR-A1+%5BRam%C3%B3n%5D+%26+MR-A2+%5BCajal%5D%2C+IMDEA+Networks+Institute%2C+Avda.+del+Mar+Mediterr%C3%A1neo+22%2C+28918+Legan%C3%A9s+%E2%80%93+Madrid&sf=true&output=xml)
\ No newline at end of file
diff --git a/_posts/2023-06-07-dotfiles.md b/_posts/2023-06-07-dotfiles.md
new file mode 100644
index 0000000000..5b64e597d1
--- /dev/null
+++ b/_posts/2023-06-07-dotfiles.md
@@ -0,0 +1,16 @@
+---
+title: "My Linux desktop"
+last_modified_at: 2023-06-07T16:00:58-04:00
+tags:
+ - en
+ - redhat
+toc: false
+---
+
+
+
+
+
+{% remote_include https://raw.githubusercontent.com/josecastillolema/dotfiles/main/README.md %}
+
+
\ No newline at end of file
diff --git a/_posts/2023-09-19-kubemark-ocp.md b/_posts/2023-09-19-kubemark-ocp.md
new file mode 100644
index 0000000000..fd62b71a98
--- /dev/null
+++ b/_posts/2023-09-19-kubemark-ocp.md
@@ -0,0 +1,162 @@
+---
+title: "Kubemark on OpenShift"
+last_modified_at: 2023-09-19T16:00:58-04:00
+tags:
+ - en
+ - networks
+ - openshift
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+[Kubemark](https://github.com/kubernetes/kubernetes/tree/master/cmd/kubemark) is a performance testing tool which allows users to run experiments on simulated clusters, by creating "hollow" Kubernetes nodes. What this means is that the nodes do not actually run containers or attach storage, but they do behave like they did, with updates to etcd and all the trimmings. At the same time, **hollow nodes are extremely light (<30 MiB)**.
+
+The primary use case of Kubemark is scalability testing, as simulated clusters can be much bigger than the real ones. The objective is to expose problems with the master components (API server, controller manager or scheduler) that appear only on bigger clusters (e.g. small memory leaks).
+
+## Hands to work
+
+We won't be using the [Cluster API Kubemark Provider](https://github.com/kubernetes-sigs/cluster-api-provider-kubemark/) for this demo, and instead we will be using directly Kubemark itself.
+
+Let's assume we have a **working OpenShift cluster** available. We will be leveraging a [Red Hat OpenShift Local instance](https://developers.redhat.com/products/openshift-local/overview) (formerly Red Hat CodeReady Containers) for this demo:
+```
+❯ oc version
+Client Version: 4.13.6
+Kustomize Version: v4.5.7
+Server Version: 4.13.6
+Kubernetes Version: v1.26.6+73ac561
+
+❯ oc get node
+NAME STATUS ROLES AGE VERSION
+crc-2zx29-master-0 Ready control-plane,master,worker 54d v1.26.6+73ac561
+```
+
+Let's create a new **project**, **secret** and corresponding **permissions**:
+```
+❯ oc new-project kubemark
+Now using project "kubemark" on server "https://api.crc.testing:6443".
+
+❯ oc create secret generic kubeconfig --from-file=kubeconfig=$KUBECONFIG
+secret/kubeconfig created
+
+❯ oc adm policy add-scc-to-user privileged -z default
+clusterrole.rbac.authorization.k8s.io/system:openshift:scc:privileged added: "default"
+```
+
+Let's create the **Kubemark pod** (which in turn will automatically instantiate a new node):
+```yaml
+❯ cat < 4s v1.26.7
+```
+
+The cluster should be healthy:
+```
+❯ oc get co
+NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
+authentication 4.13.6 True False False 12d
+cluster-api 4.13.6 True False False 13d
+config-operator 4.13.6 True False False 54d
+console 4.13.6 True False False 12d
+control-plane-machine-set 4.13.6 True False False 54d
+dns 4.13.6 True False False 12d
+etcd 4.13.6 True False False 54d
+image-registry 4.13.6 True False False 12d
+ingress 4.13.6 True False False 54d
+kube-apiserver 4.13.6 True False False 54d
+kube-controller-manager 4.13.6 True False False 54d
+kube-scheduler 4.13.6 True False False 54d
+kube-storage-version-migrator 4.13.6 True False False 12d
+machine-api 4.13.6 True False False 54d
+machine-approver 4.13.6 True False False 54d
+machine-config 4.13.6 True False False 54d
+marketplace 4.13.6 True False False 54d
+network 4.13.6 True False False 54d
+openshift-apiserver 4.13.6 True False False 12d
+openshift-controller-manager 4.13.6 True False False 12d
+openshift-samples 4.13.6 True False False 54d
+operator-lifecycle-manager 4.13.6 True False False 54d
+operator-lifecycle-manager-catalog 4.13.6 True False False 54d
+operator-lifecycle-manager-packageserver 4.13.6 True False False 119m
+platform-operators-aggregated 4.13.6 True False False 119m
+service-ca 4.13.6 True False False 54d
+```
+
+And there should a few pods already "running" in the new hollow node:
+```
+❯ oc get pods -A --field-selector spec.nodeName=kubemark-node
+NAMESPACE NAME READY STATUS RESTARTS AGE
+hostpath-provisioner csi-hostpathplugin-8p9j5 4/4 Running 0 17m
+openshift-dns dns-default-lt7g8 2/2 Running 0 17m
+openshift-dns node-resolver-9plz7 1/1 Running 0 17m
+openshift-image-registry node-ca-x7hq7 1/1 Running 0 17m
+openshift-ingress-canary ingress-canary-l2mlx 1/1 Running 0 17m
+openshift-machine-config-operator machine-config-daemon-smq5z 2/2 Running 0 17m
+openshift-multus multus-7xp8p 1/1 Running 0 17m
+openshift-multus multus-additional-cni-plugins-rv6j7 0/1 Init:0/6 0 17m
+openshift-multus network-metrics-daemon-zh2vz 2/2 Running 0 17m
+openshift-network-diagnostics network-check-target-l85xq 1/1 Running 0 17m
+openshift-sdn sdn-rv9mb 2/2 Running 0 17m
+
+```
+
+Let's try to create some pods on the new hollow node:
+```
+❯ oc run test --image nginx --overrides='{"spec": { "nodeSelector": {"kubernetes.io/hostname": "kubemark-node"}}}'
+pod/test created
+
+❯ oc get po -o wide test
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+test 1/1 Running 0 36s 192.168.192.168 kubemark-node
+```
+
+
+Finally, bear in mind that in order to create new hollow nodes you will have to change two fields in the pod definition:
+ - The pod name: `metadata.name`
+ - The name of the hollow node: `spec.containers.args.--name`
\ No newline at end of file
diff --git a/_posts/2023-10-21-dev-inmutable-distros.md b/_posts/2023-10-21-dev-inmutable-distros.md
new file mode 100644
index 0000000000..e2f5ec9fc0
--- /dev/null
+++ b/_posts/2023-10-21-dev-inmutable-distros.md
@@ -0,0 +1,223 @@
+---
+title: "Development workflows on inmutable distros: rootless setup"
+last_modified_at: 2023-10-21T16:00:58-04:00
+tags:
+ - en
+ - redhat
+toc: true
+toc_sticky: true
+---
+
+> Continuation of [Samsai](https://samsai.eu/) notes on [Toolbox-based Emacs Flatpak workflow](https://samsai.eu/post/toolbox-based-emacs-flatpak-workflow/).
+
+I have been using inmutable OS distributions for a while (Fedora Silverblue and Sericea, see my [dotfiles](/dotfiles)). They have the following characteristics:
+ - System root (baseOS) is mostly immutable
+ - System software installation/updates are handled as images and applied on reboot
+ - For installing desktop applications, [Flatpak](https://flatpak.org/) is the recommended default route
+ - [Toolbx](https://containertoolbx.org/) can be used to set up containerized Linux environments for developer tools, these containers will mount your home directory and certain important files for GUI programs to work as well
+ - Local user (rootless) installations
+
+I personally follow these guidelines when installing new applications:
+ - If it is a desktop application, prefer Flatpak (and some terminal ones too, i.e.: [Neovim](https://flathub.org/apps/io.neovim.nvim) and [Emacs](https://flathub.org/apps/org.gnu.emacs))
+ - For terminal applications, consider Toolbx or local installations
+ - Do not install desktop applications into Toolbx
+ - Avoid duplication (i.e.: installing the same editors or development environments in several places)
+ - Try to avoid `rpm-ostree` layering on baseOS as much as possible
+
+The development workflow story on inmutable distros hasn't really been standardized yet, as these distros are quite new. Let's take a look at several approaches and **finally discuss the local (rootless) installation method**.
+
+## Layering with rpm-ostree (not a good idea)
+
+You can also install development tools directly on the inmutable distros install using package layering with `rpm-ostree`. So, if you want to, you can install your editor, compilers, build tools and linters straight on the Silverblue install.
+
+However, this isn't really how most people view you should use Silverblue. The application installation process is a bit more annoying, although experimental support for installing software without rebooting does exist nowadays. It also makes your system install kind of messy due to large numbers of overlayed packages.
+
+I wouldn't take this route because while you aren't strictly speaking losing all of the benefits of inmutable distros, you are making life quite difficult for yourself compared to just using regular Fedora Workstation for instance. You also don't get the benefits of separating your system from your application environments and expose yourself to more potential breakages.
+
+
+## Toolbx approaches
+
+### Single toolbx container for all dev activities
+The easiest way to have everything working in a predictable and simple manner is to create a single Toolbox container, which has all of the development tools for every single project installed within it. This means that the container contains your text editor of choice, compilers, linters, build tools and all of their dependencies.
+
+The benefit of this approach is that it is extremely close to how you'd work on any other Linux distribution.
+
+This approach has several drawbacks:
+ - All software pilled into one environment
+ - Keeping the text editor inside the Toolbox still results in somewhat poor integration with the host system
+ - Install desktop applications into toolbx containers instead of Flatpak applications
+
+### A toolbx container per language / project
+
+Another (better IMO) possibility is to separately set up a Toolbox container for each project you work on. This means that all of your project environments are fully separated from each other and all of them only carry tools and dependencies relevant to the project in question.
+
+Loss of a Toolbox container limits the damage to a particular project and per-project Toolboxes are fairly simple to recreate.
+
+Drawbacks:
+ - Certain parts of your development workflow need to be duplicated. You potentially need to install your text editor and all of its required dependencies and tools in each environment.
+ - Keeping the text editor inside the Toolbox still results in somewhat poor integration with the host system.
+
+## Flatpak approach
+
+You can install Flatpak SDKs such as the Rust build tools like this:
+```
+$ flatpak install org.freedesktop.Sdk.Extension.rust-stable
+```
+
+And then load them into a Flatpak editor using an SDK extension flag:
+```
+$ FLATPAK_ENABLE_SDK_EXT=rust-stable flatpak run com.visualstudio.code
+```
+or just load every SDK available in your local setup:
+```
+$ FLATPAK_ENABLE_SDK_EXT=* flatpak run com.visualstudio.code
+```
+
+This causes the tools and libraries from that SDK to be made visible to the Flatpak application. There are Flatpak SDKs for a few languages like Java, Rust, Haskell, PHP and Node, but obviously support for all use-cases does not exist. But if you only plan to develop in languages that already have an SDK ready or are willing to learn how to package more SDKs, then this approach is definitely viable for things like Neovim, Emacs and VSCode Flatpaks.
+
+Drawbacks:
+ - Some languages do not have an SDK available
+ - Limited to the language runtime versions available in the SDKs
+ - Duplication of the language runtime (plus you will need to install all the library dependencies on the Flatpak to have proper code support from your editor)
+
+## Combined approach
+
+You can also mix approaches such that part of the development activity happens outside Toolbox and part of it inside the Toolbox. The simplest case would be installing your text editor via Flatpak for example and then connecting from that text editor to a Toolbox for project-specific tools like compilers.
+
+The benefit here is that you can install tools where they make most sense and where they integrate the best. So, you will get your nice app launchers and the ability to keep project environments separate.
+
+Tools available:
+ - For VSCode
+ - [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
+ - [toolbox-vscode](https://github.com/owtaylor/toolbox-vscode): a script that configures the current toolbox container to work with the Remote Containers Visual Studio Code extension
+ - For Emacs
+ - [toolbox-tramp](https://github.com/fejfighter/toolbox-tramp)
+ - For Neovim
+ - `nvim --remote` ?
+ - [nvim-remote-containers](https://github.com/jamestthompson3/nvim-remote-containers)
+
+## User (rootless) installations
+
+I have not seen much information about this method anywhere and for me as of today it is the prefered approach. Flatpak applications (i.e.: editors) cannot access the root filesystem (i.e.: the preinstalled python package on `/usr/bin/python`). However they have full access to the home directory (same as Toolbx containers).
+
+So installing the development runtimes and tools locally (and then configuring your Flatpak editor to use them) provides an excelent out of the box developer experience without the need of Flatpak SDKs nor plugins to enable your editor to access the Toolbx containers.
+
+Drawbacks:
+ - It can be more time consuming to set up than normal `rpm` installs in some scenarios
+ - No automatic updates
+
+Let's take a look at local installs for several platforms.
+
+### OCaml
+
+We will leverage the [OCaml Package Manager (opam)](https://opam.ocaml.org/) to install the platform (or several versions) and local switches to each project:
+```
+$ curl https://github.com/ocaml/opam/releases/download/2.1.5/opam-2.1.5-i686-linux -Lo ~/bin/opam && chmod +x ~/bin/opam
+```
+
+From a toolbx container with proper development tools, i.e.: [this one](https://github.com/josecastillolema/toolbox-images/blob/main/fedora-toolbox-38/Containerfile) incialize the opam environment and install the [platform tools](https://ocaml.org/docs/platform):
+```
+⬢ $ opam init
+⬢ $ opam install dune ocaml-lsp-server odoc ocamlformat utop
+```
+
+Optionally, install some extras for Emacs, Vim and Neovim:
+```
+⬢ $ opam install ocp-indent ocp-index merlin tuareg
+```
+
+We need to add the opam path (`~/bin`) to our editor of choice (i.e.: VSCode) path:
+```
+$ sudo flatpak override --env=PATH='/app/bin:/usr/bin:/home/$USER/bin:/home/$USER/.opam/default/bin' com.visualstudio.code
+```
+
+Finally, open the project in VSCode and choose the corresponding opam switch.
+
+#### Using local switches
+
+It is possible to define a switch within the source of a project to be used specifically in that project.
+If a **local switch** is detected in the current directory or a parent, opam will select it automatically.
+```
+⬢ $ opam switch create .
+```
+
+Finally, open the project in VSCode and choose the corresponding recommended opam switch.
+
+
+### Golang
+
+Download latest version:
+```
+$ mkdr ~/go
+$ curl https://go.dev/dl/go1.21.3.linux-amd64.tar.gz -Lo ~/go.tar.gz
+$ tar xf ~/go/go.tar.gz
+$ mv ~/go/go ~/go/go-1.21.3
+```
+
+Add the following environment variables to your environment:
+```
+export GOROOT=$HOME/go/go-1.21.3
+export GOPATH=$HOME/go
+export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
+```
+
+Check installation:
+```
+$ go version
+go version go1.21.3 linux/amd64
+```
+
+Finally, open VSCode (it should automatically detect the local Golang installation), install the [Go VSCode extension](https://marketplace.visualstudio.com/items?itemName=golang.Go) and click on `⚠ Analysis Tools Missing` to install those.
+
+![](/assets/images/posts/2023-10-21-dev-inmutable-distros/go.png)
+
+### Python
+
+#### Local install
+Install both `python` and `pip` in the local user environment.
+
+From a toolbx container with proper development tools, i.e.: [this one](https://github.com/josecastillolema/toolbox-images/blob/main/fedora-toolbox-38/Containerfile) download and compile Python:
+```
+⬢ $ wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
+⬢ $ tar -xf Python-3.?.?.tar.xz
+⬢ $ cd Python-3.?.?.tar.xz
+⬢ $ ./configure --prefix=$HOME
+⬢ $ make install
+⬢ $ ln -s ~/bin/python3 ~/bin/python
+⬢ $ pip install readline
+```
+
+Then you can just pip install any dependencies, open the project in VSCode and choose the corresponding Python environment `~/bin/python`. I do not tend to pip install the requirements of the projects thought (only the indispensable ones, like i.e.: ansible), instead prefer the virtual environments approach that will be described next.
+
+![](/assets/images/posts/2023-10-21-dev-inmutable-distros/python.png)
+
+#### Using python virtual environments
+
+Before opening the project in VSCode:
+```
+$ flatpak run --command=sh com.visualstudio.code
+[📦] python -m venv .
+[📦] source bin/activate
+()[📦] pip install -r requirements.txt
+```
+Then open the project in VSCode and choose the local virtual environment.
+
+### Ansible
+
+Python local install is a pre-requisite.
+
+Local ansible installation:
+```
+python -m pip install --user ansible ansible-lint
+```
+Ansible will be installed on ~/.local/bin, so we need to add this path to our editor of choice (i.e.: VSCode):
+```
+$ which ansible
+~/.local/bin/ansible
+$ sudo flatpak override --env=PATH='/app/bin:/usr/bin:/home/$USER/.local/bin' com.visualstudio.code
+```
+
+Installed the Ansible extension by Red Hat in VSCode and [enabled Lightspeed](https://developers.redhat.com/articles/2023/08/22/enhance-ansible-development-experience-lightspeed).
+
+When opening VSCode it should automatically detect the local Ansible installation.
+
diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss
new file mode 100644
index 0000000000..3b252e5620
--- /dev/null
+++ b/_sass/minimal-mistakes.scss
@@ -0,0 +1,40 @@
+/*!
+ * Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
+ * Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
+ * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE)
+*/
+
+/* Variables */
+@import "minimal-mistakes/variables";
+
+/* Mixins and functions */
+@import "minimal-mistakes/vendor/breakpoint/breakpoint";
+@include breakpoint-set("to ems", true);
+@import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup
+@import "minimal-mistakes/vendor/susy/susy";
+@import "minimal-mistakes/mixins";
+
+/* Core CSS */
+@import "minimal-mistakes/reset";
+@import "minimal-mistakes/base";
+@import "minimal-mistakes/forms";
+@import "minimal-mistakes/tables";
+@import "minimal-mistakes/animations";
+
+/* Components */
+@import "minimal-mistakes/buttons";
+@import "minimal-mistakes/notices";
+@import "minimal-mistakes/masthead";
+@import "minimal-mistakes/navigation";
+@import "minimal-mistakes/footer";
+@import "minimal-mistakes/search";
+@import "minimal-mistakes/syntax";
+
+/* Utility classes */
+@import "minimal-mistakes/utilities";
+
+/* Layout specific */
+@import "minimal-mistakes/page";
+@import "minimal-mistakes/archive";
+@import "minimal-mistakes/sidebar";
+@import "minimal-mistakes/print";
diff --git a/_sass/minimal-mistakes/_masthead.scss b/_sass/minimal-mistakes/_masthead.scss
new file mode 100644
index 0000000000..15aab36f97
--- /dev/null
+++ b/_sass/minimal-mistakes/_masthead.scss
@@ -0,0 +1,95 @@
+/* ==========================================================================
+ MASTHEAD
+ ========================================================================== */
+
+.masthead {
+ position: relative;
+ border-bottom: 1px solid $border-color;
+ -webkit-animation: $intro-transition;
+ animation: $intro-transition;
+ -webkit-animation-delay: 0.15s;
+ animation-delay: 0.15s;
+ z-index: 20;
+ //background-color: #F6F8FA; // github grey
+ background-color: #F2F3F3;
+
+ &__inner-wrap {
+ @include clearfix;
+ margin-left: auto;
+ margin-right: auto;
+ padding: 1em;
+ max-width: 100%;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ font-family: $sans-serif-narrow;
+
+ @include breakpoint($x-large) {
+ max-width: $max-width;
+ }
+
+ nav {
+ z-index: 10;
+ }
+
+ a {
+ text-decoration: none;
+ }
+ }
+}
+
+.site-logo img {
+ max-height: 2rem;
+}
+
+.site-title {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -ms-flex-item-align: center;
+ align-self: center;
+ font-weight: bold;
+ // z-index: 20;
+}
+
+.site-subtitle {
+ display: block;
+ font-size: $type-size-8;
+}
+
+.masthead__menu {
+ float: left;
+ margin-left: 0;
+ margin-right: 0;
+ width: 100%;
+ clear: both;
+
+ .site-nav {
+ margin-left: 0;
+
+ @include breakpoint($small) {
+ float: right;
+ }
+ }
+
+ ul {
+ margin: 0;
+ padding: 0;
+ clear: both;
+ list-style-type: none;
+ }
+}
+
+.masthead__menu-item {
+ display: block;
+ list-style-type: none;
+ white-space: nowrap;
+
+ &--lg {
+ padding-right: 2em;
+ font-weight: 700;
+ }
+}
diff --git a/_sass/minimal-mistakes/_navigation.scss b/_sass/minimal-mistakes/_navigation.scss
new file mode 100644
index 0000000000..ab7097edfe
--- /dev/null
+++ b/_sass/minimal-mistakes/_navigation.scss
@@ -0,0 +1,573 @@
+/* ==========================================================================
+ NAVIGATION
+ ========================================================================== */
+
+/*
+ Breadcrumb navigation links
+ ========================================================================== */
+
+.breadcrumbs {
+ @include clearfix;
+ margin: 0 auto;
+ max-width: 100%;
+ padding-left: 1em;
+ padding-right: 1em;
+ font-family: $sans-serif;
+ -webkit-animation: $intro-transition;
+ animation: $intro-transition;
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s;
+
+ @include breakpoint($x-large) {
+ max-width: $x-large;
+ }
+
+ ol {
+ padding: 0;
+ list-style: none;
+ font-size: $type-size-6;
+
+ @include breakpoint($large) {
+ float: right;
+ width: calc(100% - #{$right-sidebar-width-narrow});
+ }
+
+ @include breakpoint($x-large) {
+ width: calc(100% - #{$right-sidebar-width});
+ }
+ }
+
+ li {
+ display: inline;
+ }
+
+ .current {
+ font-weight: bold;
+ }
+}
+
+/*
+ Post pagination navigation links
+ ========================================================================== */
+
+.pagination {
+ @include clearfix();
+ float: left;
+ margin-top: 1em;
+ padding-top: 1em;
+ width: 100%;
+
+ ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ font-family: $sans-serif;
+ }
+
+ li {
+ display: block;
+ float: left;
+ margin-left: -1px;
+
+ a {
+ display: block;
+ margin-bottom: 0.25em;
+ padding: 0.5em 1em;
+ font-family: $sans-serif;
+ font-size: 14px;
+ font-weight: bold;
+ line-height: 1.5;
+ text-align: center;
+ text-decoration: none;
+ color: $muted-text-color;
+ border: 1px solid mix(#000, $border-color, 25%);
+ border-radius: 0;
+
+ &:hover {
+ color: $link-color-hover;
+ }
+
+ &.current,
+ &.current.disabled {
+ color: #fff;
+ background: $primary-color;
+ }
+
+ &.disabled {
+ color: rgba($muted-text-color, 0.5);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+
+ &:first-child {
+ margin-left: 0;
+
+ a {
+ border-top-left-radius: $border-radius;
+ border-bottom-left-radius: $border-radius;
+ }
+ }
+
+ &:last-child {
+ a {
+ border-top-right-radius: $border-radius;
+ border-bottom-right-radius: $border-radius;
+ }
+ }
+ }
+
+ /* next/previous buttons */
+ &--pager {
+ display: block;
+ padding: 1em 2em;
+ float: left;
+ width: 50%;
+ font-family: $sans-serif;
+ font-size: $type-size-5;
+ font-weight: bold;
+ text-align: center;
+ text-decoration: none;
+ color: $muted-text-color;
+ border: 1px solid mix(#000, $border-color, 25%);
+ border-radius: $border-radius;
+
+ &:hover {
+ @include yiq-contrasted($muted-text-color);
+ }
+
+ &:first-child {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ &:last-child {
+ margin-left: -1px;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ &.disabled {
+ color: rgba($muted-text-color, 0.5);
+ pointer-events: none;
+ cursor: not-allowed;
+ }
+ }
+}
+
+.page__content + .pagination,
+.page__meta + .pagination,
+.page__share + .pagination,
+.page__comments + .pagination {
+ margin-top: 2em;
+ padding-top: 2em;
+ border-top: 1px solid $border-color;
+}
+
+/*
+ Priority plus navigation
+ ========================================================================== */
+
+.greedy-nav {
+ position: relative;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ min-height: $nav-height;
+ background: #F2F3F3;
+
+ a {
+ display: block;
+ margin: 0 1rem;
+ color: $masthead-link-color;
+ text-decoration: none;
+ -webkit-transition: none;
+ transition: none;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ }
+
+ &.site-logo {
+ margin-left: 0;
+ margin-right: 0.5rem;
+ }
+
+ &.site-title {
+ margin-left: 0;
+ }
+ }
+
+ img {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ &__toggle {
+ -ms-flex-item-align: center;
+ align-self: center;
+ height: $nav-toggle-height;
+ border: 0;
+ outline: none;
+ background-color: transparent;
+ cursor: pointer;
+ }
+
+ .visible-links {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: end;
+ -ms-flex-pack: end;
+ justify-content: flex-end;
+ -webkit-box-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+ overflow: hidden;
+
+ li {
+ -webkit-box-flex: 0;
+ -ms-flex: none;
+ flex: none;
+ }
+
+ a {
+ position: relative;
+
+ &:before {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ height: 4px;
+ background: $primary-color;
+ width: 100%;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ -webkit-transform: scaleX(0) translate3d(0, 0, 0);
+ transform: scaleX(0) translate3d(0, 0, 0); // hide
+ }
+
+ &:hover:before {
+ -webkit-transform: scaleX(1);
+ -ms-transform: scaleX(1);
+ transform: scaleX(1); // reveal
+ }
+ }
+ }
+
+ .hidden-links {
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin-top: 15px;
+ padding: 5px;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ background: $background-color;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(#000, 0.16),
+ 0 2px 10px 0 rgba(#000, 0.12);
+ box-shadow: 0 2px 4px 0 rgba(#000, 0.16), 0 2px 10px 0 rgba(#000, 0.12);
+
+ &.hidden {
+ display: none;
+ }
+
+ a {
+ margin: 0;
+ padding: 10px 20px;
+ font-size: $type-size-5;
+
+ &:hover {
+ color: $masthead-link-color-hover;
+ background: $navicon-link-color-hover;
+ }
+ }
+
+ &:before {
+ content: "";
+ position: absolute;
+ top: -11px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $border-color transparent;
+ display: block;
+ z-index: 0;
+ }
+
+ &:after {
+ content: "";
+ position: absolute;
+ top: -10px;
+ right: 10px;
+ width: 0;
+ border-style: solid;
+ border-width: 0 10px 10px;
+ border-color: $background-color transparent;
+ display: block;
+ z-index: 1;
+ }
+
+ li {
+ display: block;
+ border-bottom: 1px solid $border-color;
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+ }
+}
+
+.no-js {
+ .greedy-nav {
+ .visible-links {
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ overflow: visible;
+ }
+ }
+}
+
+/*
+ Navigation list
+ ========================================================================== */
+
+.nav__list {
+ margin-bottom: 1.5em;
+
+ input[type="checkbox"],
+ label {
+ display: none;
+ }
+
+ @include breakpoint(max-width $large - 1px) {
+ label {
+ position: relative;
+ display: inline-block;
+ padding: 0.5em 2.5em 0.5em 1em;
+ color: $gray;
+ font-size: $type-size-6;
+ font-weight: bold;
+ border: 1px solid $light-gray;
+ border-radius: $border-radius;
+ z-index: 20;
+ -webkit-transition: 0.2s ease-out;
+ transition: 0.2s ease-out;
+ cursor: pointer;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ right: 1em;
+ top: 1.25em;
+ width: 0.75em;
+ height: 0.125em;
+ line-height: 1;
+ background-color: $gray;
+ -webkit-transition: 0.2s ease-out;
+ transition: 0.2s ease-out;
+ }
+
+ &:after {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ }
+
+ &:hover {
+ color: #fff;
+ border-color: $gray;
+ background-color: mix(white, #000, 20%);
+
+ &:before,
+ &:after {
+ background-color: #fff;
+ }
+ }
+ }
+
+ /* selected*/
+ input:checked + label {
+ color: white;
+ background-color: mix(white, #000, 20%);
+
+ &:before,
+ &:after {
+ background-color: #fff;
+ }
+ }
+
+ /* on hover show expand*/
+ label:hover:after {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ }
+
+ input:checked + label:hover:after {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ ul {
+ margin-bottom: 1em;
+ }
+
+ a {
+ display: block;
+ padding: 0.25em 0;
+
+ @include breakpoint($large) {
+ padding-top: 0.125em;
+ padding-bottom: 0.125em;
+ }
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+.nav__list .nav__items {
+ margin: 0;
+ font-size: 1.25rem;
+
+ a {
+ color: inherit;
+ }
+
+ .active {
+ margin-left: -0.5em;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ font-weight: bold;
+ }
+
+ @include breakpoint(max-width $large - 1px) {
+ position: relative;
+ max-height: 0;
+ opacity: 0%;
+ overflow: hidden;
+ z-index: 10;
+ -webkit-transition: 0.3s ease-in-out;
+ transition: 0.3s ease-in-out;
+ -webkit-transform: translate(0, 10%);
+ -ms-transform: translate(0, 10%);
+ transform: translate(0, 10%);
+ }
+}
+
+@include breakpoint(max-width $large - 1px) {
+ .nav__list input:checked ~ .nav__items {
+ -webkit-transition: 0.5s ease-in-out;
+ transition: 0.5s ease-in-out;
+ max-height: 9999px; /* exaggerate max-height to accommodate tall lists*/
+ overflow: visible;
+ opacity: 1;
+ margin-top: 1em;
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+ }
+}
+
+.nav__title {
+ margin: 0;
+ padding: 0.5rem 0.75rem;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-5;
+ font-weight: bold;
+}
+
+.nav__sub-title {
+ display: block;
+ margin: 0.5rem 0;
+ padding: 0.25rem 0;
+ font-family: $sans-serif-narrow;
+ font-size: $type-size-6;
+ font-weight: bold;
+ text-transform: uppercase;
+ border-bottom: 1px solid $border-color;
+}
+
+/*
+ Table of contents navigation
+ ========================================================================== */
+
+.toc {
+ font-family: $sans-serif-narrow;
+ color: $gray;
+ background-color: $background-color;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ -webkit-box-shadow: $box-shadow;
+ box-shadow: $box-shadow;
+
+ .nav__title {
+ color: #fff;
+ font-size: $type-size-6;
+ background: $primary-color;
+ border-top-left-radius: $border-radius;
+ border-top-right-radius: $border-radius;
+ }
+
+ // Scrollspy marks toc items as .active when they are in focus
+ .active a {
+ @include yiq-contrasted($active-color);
+ }
+}
+
+.toc__menu {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ list-style: none;
+ font-size: $type-size-6;
+
+ @include breakpoint($large) {
+ font-size: $type-size-7;
+ }
+
+ a {
+ display: block;
+ padding: 0.25rem 0.75rem;
+ color: $muted-text-color;
+ font-weight: bold;
+ line-height: 1.5;
+ border-bottom: 1px solid $border-color;
+
+ &:hover {
+ color: $text-color;
+ }
+ }
+
+ li ul > li a {
+ padding-left: 1.25rem;
+ font-weight: normal;
+ }
+
+ li ul li ul > li a {
+ padding-left: 1.75rem;
+ }
+
+ li ul li ul li ul > li a {
+ padding-left: 2.25rem;
+ }
+
+ li ul li ul li ul li ul > li a {
+ padding-left: 2.75rem;
+ }
+
+ li ul li ul li ul li ul li ul > li a {
+ padding-left: 3.25rem
+ }
+}
diff --git a/_sass/minimal-mistakes/_utilities.scss b/_sass/minimal-mistakes/_utilities.scss
new file mode 100644
index 0000000000..121b667565
--- /dev/null
+++ b/_sass/minimal-mistakes/_utilities.scss
@@ -0,0 +1,607 @@
+/* ==========================================================================
+ UTILITY CLASSES
+ ========================================================================== */
+
+/*
+ Visibility
+ ========================================================================== */
+
+/* http://www.456bereastreet.com/archive/200711/screen_readers_sometimes_ignore_displaynone/ */
+
+.hidden,
+.is--hidden {
+ display: none;
+ visibility: hidden;
+}
+
+/* for preloading images */
+
+.load {
+ display: none;
+}
+
+.transparent {
+ opacity: 0;
+}
+
+/* https://developer.yahoo.com/blogs/ydn/clip-hidden-content-better-accessibility-53456.html */
+
+.visually-hidden,
+.screen-reader-text,
+.screen-reader-text span,
+.screen-reader-shortcut {
+ position: absolute !important;
+ clip: rect(1px, 1px, 1px, 1px);
+ height: 1px !important;
+ width: 1px !important;
+ border: 0 !important;
+ overflow: hidden;
+}
+
+body:hover .visually-hidden a,
+body:hover .visually-hidden input,
+body:hover .visually-hidden button {
+ display: none !important;
+}
+
+/* screen readers */
+
+.screen-reader-text:focus,
+.screen-reader-shortcut:focus {
+ clip: auto !important;
+ height: auto !important;
+ width: auto !important;
+ display: block;
+ font-size: 1em;
+ font-weight: bold;
+ padding: 15px 23px 14px;
+ background: #fff;
+ z-index: 100000;
+ text-decoration: none;
+ box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
+}
+
+/*
+ Skip links
+ ========================================================================== */
+
+.skip-link {
+ position: fixed;
+ z-index: 20;
+ margin: 0;
+ font-family: $sans-serif;
+ white-space: nowrap;
+}
+
+.skip-link li {
+ height: 0;
+ width: 0;
+ list-style: none;
+}
+
+/*
+ Type
+ ========================================================================== */
+
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-nowrap {
+ white-space: nowrap;
+}
+
+/*
+ Task lists
+ ========================================================================== */
+
+.task-list {
+ padding:0;
+
+ li {
+ list-style-type: none;
+ }
+
+ .task-list-item-checkbox {
+ margin-right: 0.5em;
+ opacity: 1;
+ }
+}
+
+.task-list .task-list {
+ margin-left: 1em;
+}
+
+/*
+ Alignment
+ ========================================================================== */
+
+/* clearfix */
+
+.cf {
+ clear: both;
+}
+
+.wrapper {
+ margin-left: auto;
+ margin-right: auto;
+ width: 100%;
+}
+
+/*
+ Images
+ ========================================================================== */
+
+/* image align left */
+
+.align-left {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: left;
+ margin-right: 1em;
+ }
+}
+
+/* image align right */
+
+.align-right {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+
+ @include breakpoint($small) {
+ float: right;
+ margin-left: 1em;
+ }
+}
+
+/* image align center */
+
+.align-center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* file page content container */
+
+.full {
+ @include breakpoint($large) {
+ margin-right: -1 * span(2.5 of 12) !important;
+ }
+}
+
+/*
+ Icons
+ ========================================================================== */
+
+.icon {
+ display: inline-block;
+ fill: currentColor;
+ width: 1em;
+ height: 1.1em;
+ line-height: 1;
+ position: relative;
+ top: -0.1em;
+ vertical-align: middle;
+}
+
+/* social icons*/
+
+.social-icons {
+ .fas,
+ .fab,
+ .far,
+ .fal {
+ color: $text-color;
+ }
+
+ .fa-behance,
+ .fa-behance-square {
+ color: $behance-color;
+ }
+
+ .fa-bitbucket {
+ color: $bitbucket-color;
+ }
+
+ .fa-dribbble,
+ .fa-dribble-square {
+ color: $dribbble-color;
+ }
+
+ .fa-facebook,
+ .fa-facebook-square,
+ .fa-facebook-f {
+ color: $facebook-color;
+ }
+
+ .fa-flickr {
+ color: $flickr-color;
+ }
+
+ .fa-foursquare {
+ color: $foursquare-color;
+ }
+
+ .fa-github,
+ .fa-github-alt,
+ .fa-github-square {
+ color: $github-color;
+ }
+
+ .fa-gitlab {
+ color: $gitlab-color;
+ }
+
+ .fa-instagram {
+ color: $instagram-color;
+ }
+
+ .fa-keybase {
+ color: $keybase-color;
+ }
+
+ .fa-lastfm,
+ .fa-lastfm-square {
+ color: $lastfm-color;
+ }
+
+ .fa-linkedin,
+ .fa-linkedin-in {
+ color: $linkedin-color;
+ }
+
+ .fa-mastodon,
+ .fa-mastodon-square {
+ color: $mastodon-color;
+ }
+
+ .fa-pinterest,
+ .fa-pinterest-p,
+ .fa-pinterest-square {
+ color: $pinterest-color;
+ }
+
+ .fa-reddit {
+ color: $reddit-color;
+ }
+
+ .fa-rss,
+ .fa-rss-square {
+ color: $rss-color;
+ }
+
+ .fa-soundcloud {
+ color: $soundcloud-color;
+ }
+
+ .fa-stack-exchange,
+ .fa-stack-overflow {
+ color: $stackoverflow-color;
+ }
+
+ .fa-tumblr,
+ .fa-tumblr-square {
+ color: $tumblr-color;
+ }
+
+ .fa-twitter,
+ .fa-twitter-square {
+ color: $twitter-color;
+ }
+
+ .fa-vimeo,
+ .fa-vimeo-square,
+ .fa-vimeo-v {
+ color: $vimeo-color;
+ }
+
+ .fa-vine {
+ color: $vine-color;
+ }
+
+ .fa-youtube {
+ color: $youtube-color;
+ }
+
+ .fa-xing,
+ .fa-xing-square {
+ color: $xing-color;
+ }
+
+ // Custom
+ .fa-researchgate {
+ color: #00cc99;
+ }
+ .fa-google {
+ color: #6699ff;
+ }
+ .fa-university {
+ color: #3366cc;
+ }
+ .fa-battle-net {
+ color: #990000;
+ }
+}
+
+/*
+ Navicons
+ ========================================================================== */
+
+.navicon {
+ position: relative;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: $primary-color;
+ margin: auto;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+
+ &:before,
+ &:after {
+ content: "";
+ position: absolute;
+ left: 0;
+ width: $navicon-width;
+ height: $navicon-height;
+ background: $primary-color;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+ }
+
+ &:before {
+ top: (-2 * $navicon-height);
+ }
+
+ &:after {
+ bottom: (-2 * $navicon-height);
+ }
+}
+
+.close .navicon {
+ /* hide the middle line*/
+ background: transparent;
+
+ /* overlay the lines by setting both their top values to 0*/
+ &:before,
+ &:after {
+ -webkit-transform-origin: 50% 50%;
+ -ms-transform-origin: 50% 50%;
+ transform-origin: 50% 50%;
+ top: 0;
+ width: $navicon-width;
+ }
+
+ /* rotate the lines to form the x shape*/
+ &:before {
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
+ transform: rotate3d(0, 0, 1, 45deg);
+ }
+ &:after {
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
+ transform: rotate3d(0, 0, 1, -45deg);
+ }
+}
+
+.greedy-nav__toggle {
+ &:before {
+ @supports (pointer-events: none) {
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ background-color: $background-color;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ pointer-events: none;
+ }
+ }
+
+ &.close {
+ &:before {
+ opacity: 0.9;
+ -webkit-transition: $global-transition;
+ transition: $global-transition;
+ pointer-events: auto;
+ }
+ }
+}
+
+.greedy-nav__toggle:hover {
+ .navicon,
+ .navicon:before,
+ .navicon:after {
+ background: mix(#000, $primary-color, 25%);
+ }
+
+ &.close {
+ .navicon {
+ background: transparent;
+ }
+ }
+}
+
+/*
+ Sticky, fixed to top content
+ ========================================================================== */
+
+.sticky {
+ @include breakpoint($large) {
+ @include clearfix();
+ position: -webkit-sticky;
+ position: sticky;
+ top: 2em;
+
+ > * {
+ display: block;
+ }
+ }
+}
+
+/*
+ Wells
+ ========================================================================== */
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: $border-radius;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+/*
+ Modals
+ ========================================================================== */
+
+.show-modal {
+ overflow: hidden;
+ position: relative;
+
+ &:before {
+ position: absolute;
+ content: "";
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+ background-color: rgba(255, 255, 255, 0.85);
+ }
+
+ .modal {
+ display: block;
+ }
+}
+
+.modal {
+ display: none;
+ position: fixed;
+ width: 300px;
+ top: 50%;
+ left: 50%;
+ margin-left: -150px;
+ margin-top: -150px;
+ min-height: 0;
+ z-index: 9999;
+ background: #fff;
+ border: 1px solid $border-color;
+ border-radius: $border-radius;
+ box-shadow: $box-shadow;
+
+ &__title {
+ margin: 0;
+ padding: 0.5em 1em;
+ }
+
+ &__supporting-text {
+ padding: 0 1em 0.5em 1em;
+ }
+
+ &__actions {
+ padding: 0.5em 1em;
+ border-top: 1px solid $border-color;
+ }
+}
+
+/*
+ Footnotes
+ ========================================================================== */
+
+.footnote {
+ color: mix(#fff, $gray, 25%);
+ text-decoration: none;
+}
+
+.footnotes {
+ color: mix(#fff, $gray, 25%);
+
+ ol,
+ li,
+ p {
+ margin-bottom: 0;
+ font-size: $type-size-6;
+ }
+}
+
+a.reversefootnote {
+ color: $gray;
+ text-decoration: none;
+
+ &:hover {
+ text-decoration: underline;
+ }
+}
+
+/*
+ Required
+ ========================================================================== */
+
+.required {
+ color: $danger-color;
+ font-weight: bold;
+}
+
+/*
+ Google Custom Search Engine
+ ========================================================================== */
+
+.gsc-control-cse {
+ table,
+ tr,
+ td {
+ border: 0; /* remove table borders widget */
+ }
+}
+
+/*
+ Responsive Video Embed
+ ========================================================================== */
+
+.responsive-video-container {
+ position: relative;
+ margin-bottom: 1em;
+ padding-bottom: 56.25%;
+ height: 0;
+ overflow: hidden;
+ max-width: 100%;
+
+ iframe,
+ object,
+ embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+}
+
+// full screen video fixes
+:-webkit-full-screen-ancestor {
+ .masthead,
+ .page__footer {
+ position: static;
+ }
+}
\ No newline at end of file
diff --git a/assets/images/bio-photo.jpg b/assets/images/bio-photo.jpg
deleted file mode 100644
index 0008451798..0000000000
Binary files a/assets/images/bio-photo.jpg and /dev/null differ
diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico
new file mode 100755
index 0000000000..d7ca24b39a
Binary files /dev/null and b/assets/images/favicon.ico differ
diff --git a/assets/images/favicon_io/android-chrome-192x192.png b/assets/images/favicon_io/android-chrome-192x192.png
new file mode 100755
index 0000000000..34dcc965ec
Binary files /dev/null and b/assets/images/favicon_io/android-chrome-192x192.png differ
diff --git a/assets/images/favicon_io/android-chrome-512x512.png b/assets/images/favicon_io/android-chrome-512x512.png
new file mode 100755
index 0000000000..437f21a617
Binary files /dev/null and b/assets/images/favicon_io/android-chrome-512x512.png differ
diff --git a/assets/images/favicon_io/apple-touch-icon.png b/assets/images/favicon_io/apple-touch-icon.png
new file mode 100755
index 0000000000..6526ea995d
Binary files /dev/null and b/assets/images/favicon_io/apple-touch-icon.png differ
diff --git a/assets/images/favicon_io/favicon-16x16.png b/assets/images/favicon_io/favicon-16x16.png
new file mode 100755
index 0000000000..faa81f37be
Binary files /dev/null and b/assets/images/favicon_io/favicon-16x16.png differ
diff --git a/assets/images/favicon_io/favicon-32x32.png b/assets/images/favicon_io/favicon-32x32.png
new file mode 100755
index 0000000000..247369f218
Binary files /dev/null and b/assets/images/favicon_io/favicon-32x32.png differ
diff --git a/assets/images/favicon_io/favicon.ico b/assets/images/favicon_io/favicon.ico
new file mode 100755
index 0000000000..d7ca24b39a
Binary files /dev/null and b/assets/images/favicon_io/favicon.ico differ
diff --git a/assets/images/favicon_io/site.webmanifest b/assets/images/favicon_io/site.webmanifest
new file mode 100755
index 0000000000..45dc8a2065
--- /dev/null
+++ b/assets/images/favicon_io/site.webmanifest
@@ -0,0 +1 @@
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
diff --git a/assets/images/me.jpg b/assets/images/me.jpg
new file mode 100644
index 0000000000..399b0213bf
Binary files /dev/null and b/assets/images/me.jpg differ
diff --git a/assets/images/me2.jpg b/assets/images/me2.jpg
new file mode 100644
index 0000000000..55692be449
Binary files /dev/null and b/assets/images/me2.jpg differ
diff --git a/assets/images/me3.jpg b/assets/images/me3.jpg
new file mode 100644
index 0000000000..3fc01d5ee0
Binary files /dev/null and b/assets/images/me3.jpg differ
diff --git a/assets/images/posts/.DS_Store b/assets/images/posts/.DS_Store
new file mode 100644
index 0000000000..259ee1bad7
Binary files /dev/null and b/assets/images/posts/.DS_Store differ
diff --git a/assets/images/posts/2016-10-09-computer-networks.png b/assets/images/posts/2016-10-09-computer-networks.png
new file mode 100644
index 0000000000..535ee76780
Binary files /dev/null and b/assets/images/posts/2016-10-09-computer-networks.png differ
diff --git a/assets/images/posts/2016-12-12-hntd-01.jpeg b/assets/images/posts/2016-12-12-hntd-01.jpeg
new file mode 100644
index 0000000000..02fc9c011f
Binary files /dev/null and b/assets/images/posts/2016-12-12-hntd-01.jpeg differ
diff --git a/assets/images/posts/2017-02-01-fiap-corporate.png b/assets/images/posts/2017-02-01-fiap-corporate.png
new file mode 100644
index 0000000000..9412a1c6ca
Binary files /dev/null and b/assets/images/posts/2017-02-01-fiap-corporate.png differ
diff --git a/assets/images/posts/2017-02-06-hntd-02.jpeg b/assets/images/posts/2017-02-06-hntd-02.jpeg
new file mode 100644
index 0000000000..279e1cf5c3
Binary files /dev/null and b/assets/images/posts/2017-02-06-hntd-02.jpeg differ
diff --git a/assets/images/posts/2017-03-01-puc.jpeg b/assets/images/posts/2017-03-01-puc.jpeg
new file mode 100644
index 0000000000..fb89ce2298
Binary files /dev/null and b/assets/images/posts/2017-03-01-puc.jpeg differ
diff --git a/assets/images/posts/2017-03-17-apicon/01.png b/assets/images/posts/2017-03-17-apicon/01.png
new file mode 100644
index 0000000000..48c069e500
Binary files /dev/null and b/assets/images/posts/2017-03-17-apicon/01.png differ
diff --git a/assets/images/posts/2017-03-17-apicon/02.jpeg b/assets/images/posts/2017-03-17-apicon/02.jpeg
new file mode 100644
index 0000000000..63676aaccb
Binary files /dev/null and b/assets/images/posts/2017-03-17-apicon/02.jpeg differ
diff --git a/assets/images/posts/2017-03-17-apicon/03.JPG b/assets/images/posts/2017-03-17-apicon/03.JPG
new file mode 100644
index 0000000000..2d78490b5f
Binary files /dev/null and b/assets/images/posts/2017-03-17-apicon/03.JPG differ
diff --git a/assets/images/posts/2017-03-17-apicon/04.JPG b/assets/images/posts/2017-03-17-apicon/04.JPG
new file mode 100644
index 0000000000..a84196dbc8
Binary files /dev/null and b/assets/images/posts/2017-03-17-apicon/04.JPG differ
diff --git a/assets/images/posts/2017-03-18-hntd-03.jpeg b/assets/images/posts/2017-03-18-hntd-03.jpeg
new file mode 100644
index 0000000000..6bc1b9075e
Binary files /dev/null and b/assets/images/posts/2017-03-18-hntd-03.jpeg differ
diff --git a/assets/images/posts/2017-03-27-hntd-04.jpeg b/assets/images/posts/2017-03-27-hntd-04.jpeg
new file mode 100644
index 0000000000..5b50619485
Binary files /dev/null and b/assets/images/posts/2017-03-27-hntd-04.jpeg differ
diff --git a/assets/images/posts/2017-05-29-hntd-05.jpeg b/assets/images/posts/2017-05-29-hntd-05.jpeg
new file mode 100644
index 0000000000..90bb02f5c1
Binary files /dev/null and b/assets/images/posts/2017-05-29-hntd-05.jpeg differ
diff --git a/assets/images/posts/2017-08-21-hntd-07.jpeg b/assets/images/posts/2017-08-21-hntd-07.jpeg
new file mode 100644
index 0000000000..7845110706
Binary files /dev/null and b/assets/images/posts/2017-08-21-hntd-07.jpeg differ
diff --git a/assets/images/posts/2017-08-26-hntd-08.jpeg b/assets/images/posts/2017-08-26-hntd-08.jpeg
new file mode 100644
index 0000000000..f666e23c0a
Binary files /dev/null and b/assets/images/posts/2017-08-26-hntd-08.jpeg differ
diff --git a/assets/images/posts/2017-09-26-saint-gobain-ultrachallenge.jpeg b/assets/images/posts/2017-09-26-saint-gobain-ultrachallenge.jpeg
new file mode 100644
index 0000000000..93ffc4b69c
Binary files /dev/null and b/assets/images/posts/2017-09-26-saint-gobain-ultrachallenge.jpeg differ
diff --git a/assets/images/posts/2017-10-17-hntd-09/01.jpeg b/assets/images/posts/2017-10-17-hntd-09/01.jpeg
new file mode 100644
index 0000000000..2fae7a9c0c
Binary files /dev/null and b/assets/images/posts/2017-10-17-hntd-09/01.jpeg differ
diff --git a/assets/images/posts/2017-10-17-hntd-09/02.JPG b/assets/images/posts/2017-10-17-hntd-09/02.JPG
new file mode 100644
index 0000000000..6df5ad0215
Binary files /dev/null and b/assets/images/posts/2017-10-17-hntd-09/02.JPG differ
diff --git a/assets/images/posts/2017-10-28-futurecom2017/00.jpeg b/assets/images/posts/2017-10-28-futurecom2017/00.jpeg
new file mode 100644
index 0000000000..0d10d402db
Binary files /dev/null and b/assets/images/posts/2017-10-28-futurecom2017/00.jpeg differ
diff --git a/assets/images/posts/2017-10-28-futurecom2017/01.jpg b/assets/images/posts/2017-10-28-futurecom2017/01.jpg
new file mode 100644
index 0000000000..5209a8f18a
Binary files /dev/null and b/assets/images/posts/2017-10-28-futurecom2017/01.jpg differ
diff --git a/assets/images/posts/2017-10-28-futurecom2017/02.jpg b/assets/images/posts/2017-10-28-futurecom2017/02.jpg
new file mode 100644
index 0000000000..eb6885c7dc
Binary files /dev/null and b/assets/images/posts/2017-10-28-futurecom2017/02.jpg differ
diff --git a/assets/images/posts/2017-10-28-hntd-10.png b/assets/images/posts/2017-10-28-hntd-10.png
new file mode 100644
index 0000000000..3c0b18287f
Binary files /dev/null and b/assets/images/posts/2017-10-28-hntd-10.png differ
diff --git a/assets/images/posts/2017-11-26-terraformando-openstack/01.png b/assets/images/posts/2017-11-26-terraformando-openstack/01.png
new file mode 100644
index 0000000000..e0f5a09f45
Binary files /dev/null and b/assets/images/posts/2017-11-26-terraformando-openstack/01.png differ
diff --git a/assets/images/posts/2017-11-26-terraformando-openstack/02.png b/assets/images/posts/2017-11-26-terraformando-openstack/02.png
new file mode 100644
index 0000000000..372cf32e98
Binary files /dev/null and b/assets/images/posts/2017-11-26-terraformando-openstack/02.png differ
diff --git a/assets/images/posts/2017-11-26-terraformando-openstack/03.png b/assets/images/posts/2017-11-26-terraformando-openstack/03.png
new file mode 100644
index 0000000000..45deb9ca93
Binary files /dev/null and b/assets/images/posts/2017-11-26-terraformando-openstack/03.png differ
diff --git a/assets/images/posts/2017-11-26-terraformando-openstack/04.jpeg b/assets/images/posts/2017-11-26-terraformando-openstack/04.jpeg
new file mode 100644
index 0000000000..287a8a1c17
Binary files /dev/null and b/assets/images/posts/2017-11-26-terraformando-openstack/04.jpeg differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/01.png b/assets/images/posts/2017-12-20-heat-introducao/01.png
new file mode 100644
index 0000000000..5c76e3ea81
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/01.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/02.png b/assets/images/posts/2017-12-20-heat-introducao/02.png
new file mode 100644
index 0000000000..41591d764e
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/02.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/03.png b/assets/images/posts/2017-12-20-heat-introducao/03.png
new file mode 100644
index 0000000000..b6880fa5cc
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/03.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/04.png b/assets/images/posts/2017-12-20-heat-introducao/04.png
new file mode 100644
index 0000000000..ee347b71d6
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/04.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/05.png b/assets/images/posts/2017-12-20-heat-introducao/05.png
new file mode 100644
index 0000000000..59b43f6c4f
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/05.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/06.png b/assets/images/posts/2017-12-20-heat-introducao/06.png
new file mode 100644
index 0000000000..8ac3ec2a1a
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/06.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/07.png b/assets/images/posts/2017-12-20-heat-introducao/07.png
new file mode 100644
index 0000000000..b929dc8691
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/07.png differ
diff --git a/assets/images/posts/2017-12-20-heat-introducao/08.png b/assets/images/posts/2017-12-20-heat-introducao/08.png
new file mode 100644
index 0000000000..02e9bb4048
Binary files /dev/null and b/assets/images/posts/2017-12-20-heat-introducao/08.png differ
diff --git a/assets/images/posts/2018-02-17-hntd-11.jpeg b/assets/images/posts/2018-02-17-hntd-11.jpeg
new file mode 100644
index 0000000000..1e64a57008
Binary files /dev/null and b/assets/images/posts/2018-02-17-hntd-11.jpeg differ
diff --git a/assets/images/posts/2018-03-14-hntd-12.jpeg b/assets/images/posts/2018-03-14-hntd-12.jpeg
new file mode 100644
index 0000000000..0859daa993
Binary files /dev/null and b/assets/images/posts/2018-03-14-hntd-12.jpeg differ
diff --git a/assets/images/posts/2018-03-24-hntd-13.jpeg b/assets/images/posts/2018-03-24-hntd-13.jpeg
new file mode 100644
index 0000000000..c8bf69347b
Binary files /dev/null and b/assets/images/posts/2018-03-24-hntd-13.jpeg differ
diff --git a/assets/images/posts/2018-04-01-redhat-academy/2018-04-01-redhat-academy.jpg b/assets/images/posts/2018-04-01-redhat-academy/2018-04-01-redhat-academy.jpg
new file mode 100644
index 0000000000..b10577b7e7
Binary files /dev/null and b/assets/images/posts/2018-04-01-redhat-academy/2018-04-01-redhat-academy.jpg differ
diff --git a/assets/images/posts/2018-04-01-redhat-academy/icon1.png b/assets/images/posts/2018-04-01-redhat-academy/icon1.png
new file mode 100644
index 0000000000..6638460321
Binary files /dev/null and b/assets/images/posts/2018-04-01-redhat-academy/icon1.png differ
diff --git a/assets/images/posts/2018-04-01-redhat-academy/icon2.png b/assets/images/posts/2018-04-01-redhat-academy/icon2.png
new file mode 100644
index 0000000000..d3bf7f7af6
Binary files /dev/null and b/assets/images/posts/2018-04-01-redhat-academy/icon2.png differ
diff --git a/assets/images/posts/2018-04-01-redhat-academy/icon3.png b/assets/images/posts/2018-04-01-redhat-academy/icon3.png
new file mode 100644
index 0000000000..18d1959090
Binary files /dev/null and b/assets/images/posts/2018-04-01-redhat-academy/icon3.png differ
diff --git a/assets/images/posts/2018-04-01-redhat-academy/icon4.png b/assets/images/posts/2018-04-01-redhat-academy/icon4.png
new file mode 100644
index 0000000000..b1a4ef260a
Binary files /dev/null and b/assets/images/posts/2018-04-01-redhat-academy/icon4.png differ
diff --git a/assets/images/posts/2018-07-28-openstackday.jpeg b/assets/images/posts/2018-07-28-openstackday.jpeg
new file mode 100644
index 0000000000..2928c475ee
Binary files /dev/null and b/assets/images/posts/2018-07-28-openstackday.jpeg differ
diff --git a/assets/images/posts/2018-08-20-mandic-webinar.jpeg b/assets/images/posts/2018-08-20-mandic-webinar.jpeg
new file mode 100644
index 0000000000..15044b8774
Binary files /dev/null and b/assets/images/posts/2018-08-20-mandic-webinar.jpeg differ
diff --git a/assets/images/posts/2018-09-11-ict-competition.jpg b/assets/images/posts/2018-09-11-ict-competition.jpg
new file mode 100644
index 0000000000..df12a5c24a
Binary files /dev/null and b/assets/images/posts/2018-09-11-ict-competition.jpg differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/0.png b/assets/images/posts/2019-04-30-aws-educate/0.png
new file mode 100644
index 0000000000..ebdbda81a7
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/0.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge0.png b/assets/images/posts/2019-04-30-aws-educate/badge0.png
new file mode 100644
index 0000000000..e5efcadb0f
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge0.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge1.png b/assets/images/posts/2019-04-30-aws-educate/badge1.png
new file mode 100644
index 0000000000..d697049cec
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge1.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge2.png b/assets/images/posts/2019-04-30-aws-educate/badge2.png
new file mode 100644
index 0000000000..257b91e04e
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge2.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge3.png b/assets/images/posts/2019-04-30-aws-educate/badge3.png
new file mode 100644
index 0000000000..6f3be0e9f8
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge3.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge4.png b/assets/images/posts/2019-04-30-aws-educate/badge4.png
new file mode 100644
index 0000000000..715232afd9
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge4.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge5.png b/assets/images/posts/2019-04-30-aws-educate/badge5.png
new file mode 100644
index 0000000000..db940cb5ea
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge5.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge6.png b/assets/images/posts/2019-04-30-aws-educate/badge6.png
new file mode 100644
index 0000000000..40cb3542ca
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge6.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge7.png b/assets/images/posts/2019-04-30-aws-educate/badge7.png
new file mode 100644
index 0000000000..b31571a9d9
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge7.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/badge8.png b/assets/images/posts/2019-04-30-aws-educate/badge8.png
new file mode 100644
index 0000000000..0c542624be
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/badge8.png differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/cert2019.jpg b/assets/images/posts/2019-04-30-aws-educate/cert2019.jpg
new file mode 100644
index 0000000000..5b7879d7a2
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/cert2019.jpg differ
diff --git a/assets/images/posts/2019-04-30-aws-educate/cert2020.jpg b/assets/images/posts/2019-04-30-aws-educate/cert2020.jpg
new file mode 100644
index 0000000000..c60c44c442
Binary files /dev/null and b/assets/images/posts/2019-04-30-aws-educate/cert2020.jpg differ
diff --git a/assets/images/posts/2019-05-21-sumare/01.jpg b/assets/images/posts/2019-05-21-sumare/01.jpg
new file mode 100644
index 0000000000..109aab952f
Binary files /dev/null and b/assets/images/posts/2019-05-21-sumare/01.jpg differ
diff --git a/assets/images/posts/2019-05-21-sumare/02.jpeg b/assets/images/posts/2019-05-21-sumare/02.jpeg
new file mode 100644
index 0000000000..96cccb934c
Binary files /dev/null and b/assets/images/posts/2019-05-21-sumare/02.jpeg differ
diff --git a/assets/images/posts/2019-08-06-kuryr.png b/assets/images/posts/2019-08-06-kuryr.png
new file mode 100644
index 0000000000..285461b176
Binary files /dev/null and b/assets/images/posts/2019-08-06-kuryr.png differ
diff --git a/assets/images/posts/2020-04-26-osp43-on-rhosp13/0.png b/assets/images/posts/2020-04-26-osp43-on-rhosp13/0.png
new file mode 100644
index 0000000000..7ff300b2dc
Binary files /dev/null and b/assets/images/posts/2020-04-26-osp43-on-rhosp13/0.png differ
diff --git a/assets/images/posts/2020-04-26-osp43-on-rhosp13/1.png b/assets/images/posts/2020-04-26-osp43-on-rhosp13/1.png
new file mode 100644
index 0000000000..fc4a0fc645
Binary files /dev/null and b/assets/images/posts/2020-04-26-osp43-on-rhosp13/1.png differ
diff --git a/assets/images/posts/2020-04-30-onf/.DS_Store b/assets/images/posts/2020-04-30-onf/.DS_Store
new file mode 100644
index 0000000000..5008ddfcf5
Binary files /dev/null and b/assets/images/posts/2020-04-30-onf/.DS_Store differ
diff --git a/assets/images/posts/2020-04-30-onf/0.jpg b/assets/images/posts/2020-04-30-onf/0.jpg
new file mode 100644
index 0000000000..6840d1a584
Binary files /dev/null and b/assets/images/posts/2020-04-30-onf/0.jpg differ
diff --git a/assets/images/posts/2020-04-30-onf/1.png b/assets/images/posts/2020-04-30-onf/1.png
new file mode 100644
index 0000000000..0b2b5fe9fa
Binary files /dev/null and b/assets/images/posts/2020-04-30-onf/1.png differ
diff --git a/assets/images/posts/2020-04-30-onf/3.png b/assets/images/posts/2020-04-30-onf/3.png
new file mode 100644
index 0000000000..ff22738fe4
Binary files /dev/null and b/assets/images/posts/2020-04-30-onf/3.png differ
diff --git a/assets/images/posts/2020-05-11-ussuri/1.png b/assets/images/posts/2020-05-11-ussuri/1.png
new file mode 100644
index 0000000000..3e226c0450
Binary files /dev/null and b/assets/images/posts/2020-05-11-ussuri/1.png differ
diff --git a/assets/images/posts/2020-05-11-ussuri/2020-05-11-ussuri.svg b/assets/images/posts/2020-05-11-ussuri/2020-05-11-ussuri.svg
new file mode 100644
index 0000000000..5af1e1c940
--- /dev/null
+++ b/assets/images/posts/2020-05-11-ussuri/2020-05-11-ussuri.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/posts/2020-07-07-haina-brazil/0.jpg b/assets/images/posts/2020-07-07-haina-brazil/0.jpg
new file mode 100644
index 0000000000..88a7719588
Binary files /dev/null and b/assets/images/posts/2020-07-07-haina-brazil/0.jpg differ
diff --git a/assets/images/posts/2020-07-07-haina-brazil/1.png b/assets/images/posts/2020-07-07-haina-brazil/1.png
new file mode 100644
index 0000000000..3e87b1ddd8
Binary files /dev/null and b/assets/images/posts/2020-07-07-haina-brazil/1.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/.DS_Store b/assets/images/posts/2020-07-09-aws-academy/.DS_Store
new file mode 100644
index 0000000000..5008ddfcf5
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/.DS_Store differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/01.png b/assets/images/posts/2020-07-09-aws-academy/01.png
new file mode 100644
index 0000000000..352a2bbf35
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/01.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/02.jpeg b/assets/images/posts/2020-07-09-aws-academy/02.jpeg
new file mode 100644
index 0000000000..680900bbe3
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/02.jpeg differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/03.png b/assets/images/posts/2020-07-09-aws-academy/03.png
new file mode 100644
index 0000000000..74deaca415
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/03.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/04.png b/assets/images/posts/2020-07-09-aws-academy/04.png
new file mode 100644
index 0000000000..1c00104e85
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/04.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/05.png b/assets/images/posts/2020-07-09-aws-academy/05.png
new file mode 100644
index 0000000000..a48b71aae2
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/05.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/06.png b/assets/images/posts/2020-07-09-aws-academy/06.png
new file mode 100644
index 0000000000..5447e3b593
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/06.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/07.png b/assets/images/posts/2020-07-09-aws-academy/07.png
new file mode 100644
index 0000000000..3e1ffa8e59
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/07.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/08.png b/assets/images/posts/2020-07-09-aws-academy/08.png
new file mode 100644
index 0000000000..46ace43227
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/08.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/09.png b/assets/images/posts/2020-07-09-aws-academy/09.png
new file mode 100644
index 0000000000..501a449796
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/09.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/10.png b/assets/images/posts/2020-07-09-aws-academy/10.png
new file mode 100644
index 0000000000..e0e42a5758
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/10.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/11.png b/assets/images/posts/2020-07-09-aws-academy/11.png
new file mode 100644
index 0000000000..faff223224
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/11.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/12.png b/assets/images/posts/2020-07-09-aws-academy/12.png
new file mode 100644
index 0000000000..3196a8b9a6
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/12.png differ
diff --git a/assets/images/posts/2020-07-09-aws-academy/13.png b/assets/images/posts/2020-07-09-aws-academy/13.png
new file mode 100644
index 0000000000..c879350f0f
Binary files /dev/null and b/assets/images/posts/2020-07-09-aws-academy/13.png differ
diff --git a/assets/images/posts/2020-07-17-haina/.DS_Store b/assets/images/posts/2020-07-17-haina/.DS_Store
new file mode 100644
index 0000000000..5008ddfcf5
Binary files /dev/null and b/assets/images/posts/2020-07-17-haina/.DS_Store differ
diff --git a/assets/images/posts/2020-07-17-haina/0.png b/assets/images/posts/2020-07-17-haina/0.png
new file mode 100644
index 0000000000..5460a8fb95
Binary files /dev/null and b/assets/images/posts/2020-07-17-haina/0.png differ
diff --git a/assets/images/posts/2020-07-17-haina/1.png b/assets/images/posts/2020-07-17-haina/1.png
new file mode 100644
index 0000000000..e5bd030a2f
Binary files /dev/null and b/assets/images/posts/2020-07-17-haina/1.png differ
diff --git a/assets/images/posts/2020-07-17-haina/2.png b/assets/images/posts/2020-07-17-haina/2.png
new file mode 100644
index 0000000000..8a3325bb4d
Binary files /dev/null and b/assets/images/posts/2020-07-17-haina/2.png differ
diff --git a/assets/images/posts/2020-07-17-haina/3.png b/assets/images/posts/2020-07-17-haina/3.png
new file mode 100644
index 0000000000..154ffc8ada
Binary files /dev/null and b/assets/images/posts/2020-07-17-haina/3.png differ
diff --git a/assets/images/posts/2020-08-30-shift-aws-foundations.png b/assets/images/posts/2020-08-30-shift-aws-foundations.png
new file mode 100644
index 0000000000..2b65543441
Binary files /dev/null and b/assets/images/posts/2020-08-30-shift-aws-foundations.png differ
diff --git a/assets/images/posts/2020-09-05-shift-multicloud.png b/assets/images/posts/2020-09-05-shift-multicloud.png
new file mode 100644
index 0000000000..b626835dc8
Binary files /dev/null and b/assets/images/posts/2020-09-05-shift-multicloud.png differ
diff --git a/assets/images/posts/2020-09-30-mycodeisopen/0.jpg b/assets/images/posts/2020-09-30-mycodeisopen/0.jpg
new file mode 100644
index 0000000000..15018453f2
Binary files /dev/null and b/assets/images/posts/2020-09-30-mycodeisopen/0.jpg differ
diff --git a/assets/images/posts/2020-09-30-mycodeisopen/1.jpg b/assets/images/posts/2020-09-30-mycodeisopen/1.jpg
new file mode 100644
index 0000000000..884e3f0ffc
Binary files /dev/null and b/assets/images/posts/2020-09-30-mycodeisopen/1.jpg differ
diff --git a/assets/images/posts/2020-10-01-onf-webinar/0.jpeg b/assets/images/posts/2020-10-01-onf-webinar/0.jpeg
new file mode 100644
index 0000000000..50ca1c11d9
Binary files /dev/null and b/assets/images/posts/2020-10-01-onf-webinar/0.jpeg differ
diff --git a/assets/images/posts/2020-10-01-onf-webinar/1.png b/assets/images/posts/2020-10-01-onf-webinar/1.png
new file mode 100644
index 0000000000..0296919ddc
Binary files /dev/null and b/assets/images/posts/2020-10-01-onf-webinar/1.png differ
diff --git a/assets/images/posts/2020-10-12-aws-cert-challenge.jpg b/assets/images/posts/2020-10-12-aws-cert-challenge.jpg
new file mode 100644
index 0000000000..382a2d8642
Binary files /dev/null and b/assets/images/posts/2020-10-12-aws-cert-challenge.jpg differ
diff --git a/assets/images/posts/2020-10-25-hcia-14.jpeg b/assets/images/posts/2020-10-25-hcia-14.jpeg
new file mode 100644
index 0000000000..05bf65b2fb
Binary files /dev/null and b/assets/images/posts/2020-10-25-hcia-14.jpeg differ
diff --git a/assets/images/posts/2020-10-26-totvs-talks/0.jpeg b/assets/images/posts/2020-10-26-totvs-talks/0.jpeg
new file mode 100644
index 0000000000..de396c9ec5
Binary files /dev/null and b/assets/images/posts/2020-10-26-totvs-talks/0.jpeg differ
diff --git a/assets/images/posts/2020-10-26-totvs-talks/1.jpeg b/assets/images/posts/2020-10-26-totvs-talks/1.jpeg
new file mode 100644
index 0000000000..d1c767e990
Binary files /dev/null and b/assets/images/posts/2020-10-26-totvs-talks/1.jpeg differ
diff --git a/assets/images/posts/2020-10-26-totvs-talks/2.png b/assets/images/posts/2020-10-26-totvs-talks/2.png
new file mode 100644
index 0000000000..2727c6a042
Binary files /dev/null and b/assets/images/posts/2020-10-26-totvs-talks/2.png differ
diff --git a/assets/images/posts/2020-10-31-caio-youtube.png b/assets/images/posts/2020-10-31-caio-youtube.png
new file mode 100644
index 0000000000..32fd4be46b
Binary files /dev/null and b/assets/images/posts/2020-10-31-caio-youtube.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/0.png b/assets/images/posts/2020-11-13-haina-talent/0.png
new file mode 100644
index 0000000000..9e134c8cec
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/0.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/1.png b/assets/images/posts/2020-11-13-haina-talent/1.png
new file mode 100644
index 0000000000..0403112d23
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/1.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/10.png b/assets/images/posts/2020-11-13-haina-talent/10.png
new file mode 100644
index 0000000000..2b9d46c686
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/10.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/10_2.png b/assets/images/posts/2020-11-13-haina-talent/10_2.png
new file mode 100644
index 0000000000..b1e21eaf19
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/10_2.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/11.png b/assets/images/posts/2020-11-13-haina-talent/11.png
new file mode 100644
index 0000000000..3506c79c53
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/11.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/11_2.png b/assets/images/posts/2020-11-13-haina-talent/11_2.png
new file mode 100644
index 0000000000..9b0d70d85b
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/11_2.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/12.png b/assets/images/posts/2020-11-13-haina-talent/12.png
new file mode 100644
index 0000000000..138910799b
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/12.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/13.png b/assets/images/posts/2020-11-13-haina-talent/13.png
new file mode 100644
index 0000000000..91a2edc051
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/13.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/14.png b/assets/images/posts/2020-11-13-haina-talent/14.png
new file mode 100644
index 0000000000..fdf4c43942
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/14.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/15.png b/assets/images/posts/2020-11-13-haina-talent/15.png
new file mode 100644
index 0000000000..f65f641b6f
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/15.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/2.png b/assets/images/posts/2020-11-13-haina-talent/2.png
new file mode 100644
index 0000000000..7dc9e4f37d
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/2.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/3.png b/assets/images/posts/2020-11-13-haina-talent/3.png
new file mode 100644
index 0000000000..78223586f1
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/3.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/3_3.png b/assets/images/posts/2020-11-13-haina-talent/3_3.png
new file mode 100644
index 0000000000..6d2b16bee7
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/3_3.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/4.png b/assets/images/posts/2020-11-13-haina-talent/4.png
new file mode 100644
index 0000000000..d0ce576da5
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/4.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/4_2.png b/assets/images/posts/2020-11-13-haina-talent/4_2.png
new file mode 100644
index 0000000000..c4807a4312
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/4_2.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/5.png b/assets/images/posts/2020-11-13-haina-talent/5.png
new file mode 100644
index 0000000000..0663b98cae
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/5.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/6.png b/assets/images/posts/2020-11-13-haina-talent/6.png
new file mode 100644
index 0000000000..5738b6ab2f
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/6.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/7.png b/assets/images/posts/2020-11-13-haina-talent/7.png
new file mode 100644
index 0000000000..bc264edb8a
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/7.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/8.png b/assets/images/posts/2020-11-13-haina-talent/8.png
new file mode 100644
index 0000000000..10bfccf8ca
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/8.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/9.png b/assets/images/posts/2020-11-13-haina-talent/9.png
new file mode 100644
index 0000000000..9381a06a81
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/9.png differ
diff --git a/assets/images/posts/2020-11-13-haina-talent/logo.jpg b/assets/images/posts/2020-11-13-haina-talent/logo.jpg
new file mode 100644
index 0000000000..18312b2326
Binary files /dev/null and b/assets/images/posts/2020-11-13-haina-talent/logo.jpg differ
diff --git a/assets/images/posts/2020-11-17-shift-aws-foundations-2.png b/assets/images/posts/2020-11-17-shift-aws-foundations-2.png
new file mode 100644
index 0000000000..66e29dab5a
Binary files /dev/null and b/assets/images/posts/2020-11-17-shift-aws-foundations-2.png differ
diff --git a/assets/images/posts/2020-12-20-intel-network-builders/logo.jpg b/assets/images/posts/2020-12-20-intel-network-builders/logo.jpg
new file mode 100644
index 0000000000..19180c4460
Binary files /dev/null and b/assets/images/posts/2020-12-20-intel-network-builders/logo.jpg differ
diff --git a/assets/images/posts/2020-12-20-intel-network-builders/paths.png b/assets/images/posts/2020-12-20-intel-network-builders/paths.png
new file mode 100644
index 0000000000..13cdb3e8c2
Binary files /dev/null and b/assets/images/posts/2020-12-20-intel-network-builders/paths.png differ
diff --git a/assets/images/posts/2020-12-22-co.lab.jpg b/assets/images/posts/2020-12-22-co.lab.jpg
new file mode 100644
index 0000000000..73c8ea43df
Binary files /dev/null and b/assets/images/posts/2020-12-22-co.lab.jpg differ
diff --git a/assets/images/posts/2020-12-31-newyear/1.png b/assets/images/posts/2020-12-31-newyear/1.png
new file mode 100644
index 0000000000..04d830c469
Binary files /dev/null and b/assets/images/posts/2020-12-31-newyear/1.png differ
diff --git a/assets/images/posts/2020-12-31-newyear/2.png b/assets/images/posts/2020-12-31-newyear/2.png
new file mode 100644
index 0000000000..92d358a3f2
Binary files /dev/null and b/assets/images/posts/2020-12-31-newyear/2.png differ
diff --git a/assets/images/posts/2020-12-31-newyear/3.png b/assets/images/posts/2020-12-31-newyear/3.png
new file mode 100644
index 0000000000..5f83fc3220
Binary files /dev/null and b/assets/images/posts/2020-12-31-newyear/3.png differ
diff --git a/assets/images/posts/2021-01-05-calico/1.png b/assets/images/posts/2021-01-05-calico/1.png
new file mode 100644
index 0000000000..beefa3886c
Binary files /dev/null and b/assets/images/posts/2021-01-05-calico/1.png differ
diff --git a/assets/images/posts/2021-01-05-calico/2.png b/assets/images/posts/2021-01-05-calico/2.png
new file mode 100644
index 0000000000..e21e15e0a7
Binary files /dev/null and b/assets/images/posts/2021-01-05-calico/2.png differ
diff --git a/assets/images/posts/2021-01-09-shift-multicloud-2.png b/assets/images/posts/2021-01-09-shift-multicloud-2.png
new file mode 100644
index 0000000000..101fcd322a
Binary files /dev/null and b/assets/images/posts/2021-01-09-shift-multicloud-2.png differ
diff --git a/assets/images/posts/2021-02-05-aviatrix/1.png b/assets/images/posts/2021-02-05-aviatrix/1.png
new file mode 100644
index 0000000000..f47550d2e4
Binary files /dev/null and b/assets/images/posts/2021-02-05-aviatrix/1.png differ
diff --git a/assets/images/posts/2021-02-05-aviatrix/2.png b/assets/images/posts/2021-02-05-aviatrix/2.png
new file mode 100644
index 0000000000..845912ec85
Binary files /dev/null and b/assets/images/posts/2021-02-05-aviatrix/2.png differ
diff --git a/assets/images/posts/2021-02-05-aviatrix/3.png b/assets/images/posts/2021-02-05-aviatrix/3.png
new file mode 100644
index 0000000000..e9787383bf
Binary files /dev/null and b/assets/images/posts/2021-02-05-aviatrix/3.png differ
diff --git a/assets/images/posts/2021-02-09-hcia-5g/1.png b/assets/images/posts/2021-02-09-hcia-5g/1.png
new file mode 100644
index 0000000000..791e564ffa
Binary files /dev/null and b/assets/images/posts/2021-02-09-hcia-5g/1.png differ
diff --git a/assets/images/posts/2021-02-09-hcia-5g/2.jpeg b/assets/images/posts/2021-02-09-hcia-5g/2.jpeg
new file mode 100644
index 0000000000..f1a4839c6e
Binary files /dev/null and b/assets/images/posts/2021-02-09-hcia-5g/2.jpeg differ
diff --git a/assets/images/posts/2021-02-09-hcia-5g/3.jpg b/assets/images/posts/2021-02-09-hcia-5g/3.jpg
new file mode 100644
index 0000000000..44ad29c0c3
Binary files /dev/null and b/assets/images/posts/2021-02-09-hcia-5g/3.jpg differ
diff --git a/assets/images/posts/2021-03-10-shift-aws-foundations-3.png b/assets/images/posts/2021-03-10-shift-aws-foundations-3.png
new file mode 100644
index 0000000000..3bf131278a
Binary files /dev/null and b/assets/images/posts/2021-03-10-shift-aws-foundations-3.png differ
diff --git a/assets/images/posts/2021-03-22-hcia-5g-2/0.jpeg b/assets/images/posts/2021-03-22-hcia-5g-2/0.jpeg
new file mode 100644
index 0000000000..0ddcf1b70f
Binary files /dev/null and b/assets/images/posts/2021-03-22-hcia-5g-2/0.jpeg differ
diff --git a/assets/images/posts/2021-03-22-hcia-5g-2/1.png b/assets/images/posts/2021-03-22-hcia-5g-2/1.png
new file mode 100644
index 0000000000..78a9b310f0
Binary files /dev/null and b/assets/images/posts/2021-03-22-hcia-5g-2/1.png differ
diff --git a/assets/images/posts/2021-03-25-rh-summit21.jpeg b/assets/images/posts/2021-03-25-rh-summit21.jpeg
new file mode 100644
index 0000000000..b4599dac3b
Binary files /dev/null and b/assets/images/posts/2021-03-25-rh-summit21.jpeg differ
diff --git a/assets/images/posts/2021-03-26-hcia-15/1.png b/assets/images/posts/2021-03-26-hcia-15/1.png
new file mode 100644
index 0000000000..a9d3bd11c3
Binary files /dev/null and b/assets/images/posts/2021-03-26-hcia-15/1.png differ
diff --git a/assets/images/posts/2021-03-26-hcia-15/2.png b/assets/images/posts/2021-03-26-hcia-15/2.png
new file mode 100644
index 0000000000..5b64fa3155
Binary files /dev/null and b/assets/images/posts/2021-03-26-hcia-15/2.png differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/.DS_Store b/assets/images/posts/2021-04-08-azure-fundamentals/.DS_Store
new file mode 100644
index 0000000000..5008ddfcf5
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/.DS_Store differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/1.png b/assets/images/posts/2021-04-08-azure-fundamentals/1.png
new file mode 100644
index 0000000000..73648d31af
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/1.png differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/2.png b/assets/images/posts/2021-04-08-azure-fundamentals/2.png
new file mode 100644
index 0000000000..520868678e
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/2.png differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/3.png b/assets/images/posts/2021-04-08-azure-fundamentals/3.png
new file mode 100644
index 0000000000..9eec9f7e83
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/3.png differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/4.png b/assets/images/posts/2021-04-08-azure-fundamentals/4.png
new file mode 100644
index 0000000000..b84d24a9a7
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/4.png differ
diff --git a/assets/images/posts/2021-04-08-azure-fundamentals/5.png b/assets/images/posts/2021-04-08-azure-fundamentals/5.png
new file mode 100644
index 0000000000..d25b142652
Binary files /dev/null and b/assets/images/posts/2021-04-08-azure-fundamentals/5.png differ
diff --git a/assets/images/posts/2021-04-13-kafka/1.png b/assets/images/posts/2021-04-13-kafka/1.png
new file mode 100644
index 0000000000..dd312ac9fb
Binary files /dev/null and b/assets/images/posts/2021-04-13-kafka/1.png differ
diff --git a/assets/images/posts/2021-04-13-kafka/2.png b/assets/images/posts/2021-04-13-kafka/2.png
new file mode 100644
index 0000000000..722267896a
Binary files /dev/null and b/assets/images/posts/2021-04-13-kafka/2.png differ
diff --git a/assets/images/posts/2021-04-17-onf-webinar-21.png b/assets/images/posts/2021-04-17-onf-webinar-21.png
new file mode 100644
index 0000000000..54b354a673
Binary files /dev/null and b/assets/images/posts/2021-04-17-onf-webinar-21.png differ
diff --git a/assets/images/posts/2021-04-23-gitlab.png b/assets/images/posts/2021-04-23-gitlab.png
new file mode 100644
index 0000000000..aa243d8f1d
Binary files /dev/null and b/assets/images/posts/2021-04-23-gitlab.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/0.png b/assets/images/posts/2021-05-10-hcia-ia-notes/0.png
new file mode 100644
index 0000000000..119b187abf
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/0.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/1.png b/assets/images/posts/2021-05-10-hcia-ia-notes/1.png
new file mode 100644
index 0000000000..1cafee9db8
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/1.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/2.png b/assets/images/posts/2021-05-10-hcia-ia-notes/2.png
new file mode 100644
index 0000000000..fd30b3332d
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/2.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/3.png b/assets/images/posts/2021-05-10-hcia-ia-notes/3.png
new file mode 100644
index 0000000000..e5429ce4d9
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/3.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/4.png b/assets/images/posts/2021-05-10-hcia-ia-notes/4.png
new file mode 100644
index 0000000000..b47a70adc2
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/4.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/5.png b/assets/images/posts/2021-05-10-hcia-ia-notes/5.png
new file mode 100644
index 0000000000..6f5c192c27
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/5.png differ
diff --git a/assets/images/posts/2021-05-10-hcia-ia-notes/6.png b/assets/images/posts/2021-05-10-hcia-ia-notes/6.png
new file mode 100644
index 0000000000..5962d07b87
Binary files /dev/null and b/assets/images/posts/2021-05-10-hcia-ia-notes/6.png differ
diff --git a/assets/images/posts/2021-05-11-shift-multicloud-3.png b/assets/images/posts/2021-05-11-shift-multicloud-3.png
new file mode 100644
index 0000000000..076c863c65
Binary files /dev/null and b/assets/images/posts/2021-05-11-shift-multicloud-3.png differ
diff --git a/assets/images/posts/2021-05-14-hcia-16.jpeg b/assets/images/posts/2021-05-14-hcia-16.jpeg
new file mode 100644
index 0000000000..29cc59b0a4
Binary files /dev/null and b/assets/images/posts/2021-05-14-hcia-16.jpeg differ
diff --git a/assets/images/posts/2021-05-15-aws-community-builder.png b/assets/images/posts/2021-05-15-aws-community-builder.png
new file mode 100755
index 0000000000..9b1dccc7d3
Binary files /dev/null and b/assets/images/posts/2021-05-15-aws-community-builder.png differ
diff --git a/assets/images/posts/2021-05-18-gitops-summit-21.png b/assets/images/posts/2021-05-18-gitops-summit-21.png
new file mode 100644
index 0000000000..e329aeaa03
Binary files /dev/null and b/assets/images/posts/2021-05-18-gitops-summit-21.png differ
diff --git a/assets/images/posts/2021-05-31-fiap-meetup/0.png b/assets/images/posts/2021-05-31-fiap-meetup/0.png
new file mode 100644
index 0000000000..4c8ab6e907
Binary files /dev/null and b/assets/images/posts/2021-05-31-fiap-meetup/0.png differ
diff --git a/assets/images/posts/2021-05-31-fiap-meetup/1.png b/assets/images/posts/2021-05-31-fiap-meetup/1.png
new file mode 100644
index 0000000000..f993c2a845
Binary files /dev/null and b/assets/images/posts/2021-05-31-fiap-meetup/1.png differ
diff --git a/assets/images/posts/2021-06-03-edx-magma/1.png b/assets/images/posts/2021-06-03-edx-magma/1.png
new file mode 100644
index 0000000000..752753961e
Binary files /dev/null and b/assets/images/posts/2021-06-03-edx-magma/1.png differ
diff --git a/assets/images/posts/2021-06-03-edx-magma/2.png b/assets/images/posts/2021-06-03-edx-magma/2.png
new file mode 100644
index 0000000000..e756f1c465
Binary files /dev/null and b/assets/images/posts/2021-06-03-edx-magma/2.png differ
diff --git a/assets/images/posts/2021-06-21-shift-aws-foundations-4.png b/assets/images/posts/2021-06-21-shift-aws-foundations-4.png
new file mode 100644
index 0000000000..291370bd36
Binary files /dev/null and b/assets/images/posts/2021-06-21-shift-aws-foundations-4.png differ
diff --git a/assets/images/posts/2021-06-22-shift-aws-dev.png b/assets/images/posts/2021-06-22-shift-aws-dev.png
new file mode 100644
index 0000000000..236fd83e4a
Binary files /dev/null and b/assets/images/posts/2021-06-22-shift-aws-dev.png differ
diff --git a/assets/images/posts/2021-06-28-cognitive-class.png b/assets/images/posts/2021-06-28-cognitive-class.png
new file mode 100644
index 0000000000..3539c2a23e
Binary files /dev/null and b/assets/images/posts/2021-06-28-cognitive-class.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/01.png b/assets/images/posts/2021-07-25-aws-educate-login/01.png
new file mode 100644
index 0000000000..c2bf1119c8
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/01.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/02.png b/assets/images/posts/2021-07-25-aws-educate-login/02.png
new file mode 100644
index 0000000000..57c846e4e9
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/02.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/03.png b/assets/images/posts/2021-07-25-aws-educate-login/03.png
new file mode 100644
index 0000000000..526d21576a
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/03.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/04.png b/assets/images/posts/2021-07-25-aws-educate-login/04.png
new file mode 100644
index 0000000000..4588c9c9d9
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/04.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/05.png b/assets/images/posts/2021-07-25-aws-educate-login/05.png
new file mode 100644
index 0000000000..ce4a04e0e7
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/05.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/06.png b/assets/images/posts/2021-07-25-aws-educate-login/06.png
new file mode 100644
index 0000000000..fcc0b794af
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/06.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/07.png b/assets/images/posts/2021-07-25-aws-educate-login/07.png
new file mode 100644
index 0000000000..5ea7a21685
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/07.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/08.png b/assets/images/posts/2021-07-25-aws-educate-login/08.png
new file mode 100644
index 0000000000..2042bad827
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/08.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/09.png b/assets/images/posts/2021-07-25-aws-educate-login/09.png
new file mode 100644
index 0000000000..ebfe4e761a
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/09.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/10.png b/assets/images/posts/2021-07-25-aws-educate-login/10.png
new file mode 100644
index 0000000000..7d1dc814e2
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/10.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/11.png b/assets/images/posts/2021-07-25-aws-educate-login/11.png
new file mode 100644
index 0000000000..2e06d1cbb3
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/11.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/12.png b/assets/images/posts/2021-07-25-aws-educate-login/12.png
new file mode 100644
index 0000000000..19330ebc04
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/12.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/13.png b/assets/images/posts/2021-07-25-aws-educate-login/13.png
new file mode 100644
index 0000000000..3e27804acb
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/13.png differ
diff --git a/assets/images/posts/2021-07-25-aws-educate-login/14.png b/assets/images/posts/2021-07-25-aws-educate-login/14.png
new file mode 100644
index 0000000000..f08f1f03f9
Binary files /dev/null and b/assets/images/posts/2021-07-25-aws-educate-login/14.png differ
diff --git a/assets/images/posts/2021-08-18-hcia-17.jpeg b/assets/images/posts/2021-08-18-hcia-17.jpeg
new file mode 100644
index 0000000000..4cd283fbab
Binary files /dev/null and b/assets/images/posts/2021-08-18-hcia-17.jpeg differ
diff --git a/assets/images/posts/2021-08-30-shift-aws-foundations-5.png b/assets/images/posts/2021-08-30-shift-aws-foundations-5.png
new file mode 100644
index 0000000000..69d64a664b
Binary files /dev/null and b/assets/images/posts/2021-08-30-shift-aws-foundations-5.png differ
diff --git a/assets/images/posts/2021-09-03-lf-courses.png b/assets/images/posts/2021-09-03-lf-courses.png
new file mode 100644
index 0000000000..10a87d9a7a
Binary files /dev/null and b/assets/images/posts/2021-09-03-lf-courses.png differ
diff --git a/assets/images/posts/2021-09-16-soloio-istio.png b/assets/images/posts/2021-09-16-soloio-istio.png
new file mode 100644
index 0000000000..813e742c6b
Binary files /dev/null and b/assets/images/posts/2021-09-16-soloio-istio.png differ
diff --git a/assets/images/posts/2021-10-02-shift-aws-dev-2.png b/assets/images/posts/2021-10-02-shift-aws-dev-2.png
new file mode 100644
index 0000000000..acb544e54e
Binary files /dev/null and b/assets/images/posts/2021-10-02-shift-aws-dev-2.png differ
diff --git a/assets/images/posts/2021-10-12-tendencias-tic.png b/assets/images/posts/2021-10-12-tendencias-tic.png
new file mode 100644
index 0000000000..993ae9c901
Binary files /dev/null and b/assets/images/posts/2021-10-12-tendencias-tic.png differ
diff --git a/assets/images/posts/2021-10-14-seminf21/0.png b/assets/images/posts/2021-10-14-seminf21/0.png
new file mode 100644
index 0000000000..816b8d59ef
Binary files /dev/null and b/assets/images/posts/2021-10-14-seminf21/0.png differ
diff --git a/assets/images/posts/2021-10-14-seminf21/1.jpeg b/assets/images/posts/2021-10-14-seminf21/1.jpeg
new file mode 100644
index 0000000000..dace416d27
Binary files /dev/null and b/assets/images/posts/2021-10-14-seminf21/1.jpeg differ
diff --git a/assets/images/posts/2021-10-14-seminf21/2.png b/assets/images/posts/2021-10-14-seminf21/2.png
new file mode 100644
index 0000000000..87b7e79c4f
Binary files /dev/null and b/assets/images/posts/2021-10-14-seminf21/2.png differ
diff --git a/assets/images/posts/2021-10-23-shift-multicloud-4.png b/assets/images/posts/2021-10-23-shift-multicloud-4.png
new file mode 100644
index 0000000000..77aa767bbc
Binary files /dev/null and b/assets/images/posts/2021-10-23-shift-multicloud-4.png differ
diff --git a/assets/images/posts/2021-11-03-aws-community-day-21/1.mp4 b/assets/images/posts/2021-11-03-aws-community-day-21/1.mp4
new file mode 100644
index 0000000000..0dc015d2ee
Binary files /dev/null and b/assets/images/posts/2021-11-03-aws-community-day-21/1.mp4 differ
diff --git a/assets/images/posts/2021-11-04-microsoft-ignite/0.png b/assets/images/posts/2021-11-04-microsoft-ignite/0.png
new file mode 100644
index 0000000000..27c45e2b84
Binary files /dev/null and b/assets/images/posts/2021-11-04-microsoft-ignite/0.png differ
diff --git a/assets/images/posts/2021-11-04-microsoft-ignite/1.png b/assets/images/posts/2021-11-04-microsoft-ignite/1.png
new file mode 100644
index 0000000000..d6fc9dcefb
Binary files /dev/null and b/assets/images/posts/2021-11-04-microsoft-ignite/1.png differ
diff --git a/assets/images/posts/2021-11-05-huawey-academy-workshop.png b/assets/images/posts/2021-11-05-huawey-academy-workshop.png
new file mode 100644
index 0000000000..d4251f596a
Binary files /dev/null and b/assets/images/posts/2021-11-05-huawey-academy-workshop.png differ
diff --git a/assets/images/posts/2021-11-22-hcia-18.jpeg b/assets/images/posts/2021-11-22-hcia-18.jpeg
new file mode 100644
index 0000000000..5401746010
Binary files /dev/null and b/assets/images/posts/2021-11-22-hcia-18.jpeg differ
diff --git a/assets/images/posts/2021-11-24-huawey-job-fair-21.jpg b/assets/images/posts/2021-11-24-huawey-job-fair-21.jpg
new file mode 100644
index 0000000000..7da224d7b3
Binary files /dev/null and b/assets/images/posts/2021-11-24-huawey-job-fair-21.jpg differ
diff --git a/assets/images/posts/2021-11-28-gremlin-caos/1.png b/assets/images/posts/2021-11-28-gremlin-caos/1.png
new file mode 100644
index 0000000000..8f60891942
Binary files /dev/null and b/assets/images/posts/2021-11-28-gremlin-caos/1.png differ
diff --git a/assets/images/posts/2021-11-28-gremlin-caos/2.png b/assets/images/posts/2021-11-28-gremlin-caos/2.png
new file mode 100644
index 0000000000..1b3a2c0566
Binary files /dev/null and b/assets/images/posts/2021-11-28-gremlin-caos/2.png differ
diff --git a/assets/images/posts/2021-12-05-ovn21.png b/assets/images/posts/2021-12-05-ovn21.png
new file mode 100644
index 0000000000..402a18d3c2
Binary files /dev/null and b/assets/images/posts/2021-12-05-ovn21.png differ
diff --git a/assets/images/posts/2021-12-09-calico-ebpf.png b/assets/images/posts/2021-12-09-calico-ebpf.png
new file mode 100644
index 0000000000..a45776a080
Binary files /dev/null and b/assets/images/posts/2021-12-09-calico-ebpf.png differ
diff --git a/assets/images/posts/2021-12-13-gitops-fundamentals/0.png b/assets/images/posts/2021-12-13-gitops-fundamentals/0.png
new file mode 100644
index 0000000000..95f8f467ed
Binary files /dev/null and b/assets/images/posts/2021-12-13-gitops-fundamentals/0.png differ
diff --git a/assets/images/posts/2021-12-13-gitops-fundamentals/1.png b/assets/images/posts/2021-12-13-gitops-fundamentals/1.png
new file mode 100644
index 0000000000..e51f7452cf
Binary files /dev/null and b/assets/images/posts/2021-12-13-gitops-fundamentals/1.png differ
diff --git a/assets/images/posts/2021-12-19-istio-fundamentals/0.png b/assets/images/posts/2021-12-19-istio-fundamentals/0.png
new file mode 100644
index 0000000000..cc85df5dec
Binary files /dev/null and b/assets/images/posts/2021-12-19-istio-fundamentals/0.png differ
diff --git a/assets/images/posts/2021-12-19-istio-fundamentals/1.png b/assets/images/posts/2021-12-19-istio-fundamentals/1.png
new file mode 100644
index 0000000000..f59436d77d
Binary files /dev/null and b/assets/images/posts/2021-12-19-istio-fundamentals/1.png differ
diff --git a/assets/images/posts/2021-12-19-istio-fundamentals/2.png b/assets/images/posts/2021-12-19-istio-fundamentals/2.png
new file mode 100644
index 0000000000..70976913a6
Binary files /dev/null and b/assets/images/posts/2021-12-19-istio-fundamentals/2.png differ
diff --git a/assets/images/posts/2022-01-01-newyear22/1.png b/assets/images/posts/2022-01-01-newyear22/1.png
new file mode 100644
index 0000000000..50aab63f81
Binary files /dev/null and b/assets/images/posts/2022-01-01-newyear22/1.png differ
diff --git a/assets/images/posts/2022-01-01-newyear22/2.png b/assets/images/posts/2022-01-01-newyear22/2.png
new file mode 100644
index 0000000000..f8c1c31c14
Binary files /dev/null and b/assets/images/posts/2022-01-01-newyear22/2.png differ
diff --git a/assets/images/posts/2022-01-01-newyear22/3.png b/assets/images/posts/2022-01-01-newyear22/3.png
new file mode 100644
index 0000000000..7995674345
Binary files /dev/null and b/assets/images/posts/2022-01-01-newyear22/3.png differ
diff --git a/assets/images/posts/2022-01-02-skillbuilder.png b/assets/images/posts/2022-01-02-skillbuilder.png
new file mode 100644
index 0000000000..361392d69d
Binary files /dev/null and b/assets/images/posts/2022-01-02-skillbuilder.png differ
diff --git a/assets/images/posts/2022-01-03-kasten/0.png b/assets/images/posts/2022-01-03-kasten/0.png
new file mode 100644
index 0000000000..af87aae7a1
Binary files /dev/null and b/assets/images/posts/2022-01-03-kasten/0.png differ
diff --git a/assets/images/posts/2022-01-03-kasten/1.png b/assets/images/posts/2022-01-03-kasten/1.png
new file mode 100644
index 0000000000..c32f9d2021
Binary files /dev/null and b/assets/images/posts/2022-01-03-kasten/1.png differ
diff --git a/assets/images/posts/2022-01-04-examtopics.jpg b/assets/images/posts/2022-01-04-examtopics.jpg
new file mode 100644
index 0000000000..a617274831
Binary files /dev/null and b/assets/images/posts/2022-01-04-examtopics.jpg differ
diff --git a/assets/images/posts/2022-01-06-maua-sdn/0.png b/assets/images/posts/2022-01-06-maua-sdn/0.png
new file mode 100644
index 0000000000..042b2c6335
Binary files /dev/null and b/assets/images/posts/2022-01-06-maua-sdn/0.png differ
diff --git a/assets/images/posts/2022-01-06-maua-sdn/1.png b/assets/images/posts/2022-01-06-maua-sdn/1.png
new file mode 100644
index 0000000000..e696363823
Binary files /dev/null and b/assets/images/posts/2022-01-06-maua-sdn/1.png differ
diff --git a/assets/images/posts/2022-01-07-shift-aws-foundations-6/0.png b/assets/images/posts/2022-01-07-shift-aws-foundations-6/0.png
new file mode 100644
index 0000000000..0440f40249
Binary files /dev/null and b/assets/images/posts/2022-01-07-shift-aws-foundations-6/0.png differ
diff --git a/assets/images/posts/2022-01-07-shift-aws-foundations-6/1.png b/assets/images/posts/2022-01-07-shift-aws-foundations-6/1.png
new file mode 100644
index 0000000000..5d8231315a
Binary files /dev/null and b/assets/images/posts/2022-01-07-shift-aws-foundations-6/1.png differ
diff --git a/assets/images/posts/2022-01-21-shift-aws-dev-3/1.jpg b/assets/images/posts/2022-01-21-shift-aws-dev-3/1.jpg
new file mode 100644
index 0000000000..9149948e57
Binary files /dev/null and b/assets/images/posts/2022-01-21-shift-aws-dev-3/1.jpg differ
diff --git a/assets/images/posts/2022-01-21-shift-aws-dev-3/2.jpg b/assets/images/posts/2022-01-21-shift-aws-dev-3/2.jpg
new file mode 100644
index 0000000000..b00621ffd5
Binary files /dev/null and b/assets/images/posts/2022-01-21-shift-aws-dev-3/2.jpg differ
diff --git a/assets/images/posts/2022-01-26-magma-cert/0.png b/assets/images/posts/2022-01-26-magma-cert/0.png
new file mode 100644
index 0000000000..2d3052a083
Binary files /dev/null and b/assets/images/posts/2022-01-26-magma-cert/0.png differ
diff --git a/assets/images/posts/2022-01-26-magma-cert/1.png b/assets/images/posts/2022-01-26-magma-cert/1.png
new file mode 100644
index 0000000000..9f3aa1cab2
Binary files /dev/null and b/assets/images/posts/2022-01-26-magma-cert/1.png differ
diff --git a/assets/images/posts/2022-02-03-kyverno-fundamentals/0.png b/assets/images/posts/2022-02-03-kyverno-fundamentals/0.png
new file mode 100644
index 0000000000..fd49a80bbd
Binary files /dev/null and b/assets/images/posts/2022-02-03-kyverno-fundamentals/0.png differ
diff --git a/assets/images/posts/2022-02-10-ipt-cloud/1.jpeg b/assets/images/posts/2022-02-10-ipt-cloud/1.jpeg
new file mode 100644
index 0000000000..240731cda4
Binary files /dev/null and b/assets/images/posts/2022-02-10-ipt-cloud/1.jpeg differ
diff --git a/assets/images/posts/2022-02-10-ipt-cloud/2.jpeg b/assets/images/posts/2022-02-10-ipt-cloud/2.jpeg
new file mode 100644
index 0000000000..6b818bac43
Binary files /dev/null and b/assets/images/posts/2022-02-10-ipt-cloud/2.jpeg differ
diff --git a/assets/images/posts/2022-02-17-loki.jpeg b/assets/images/posts/2022-02-17-loki.jpeg
new file mode 100644
index 0000000000..546faead72
Binary files /dev/null and b/assets/images/posts/2022-02-17-loki.jpeg differ
diff --git a/assets/images/posts/2022-03-11-huawey-rs-vs-datacom.png b/assets/images/posts/2022-03-11-huawey-rs-vs-datacom.png
new file mode 100644
index 0000000000..3b3f7b2341
Binary files /dev/null and b/assets/images/posts/2022-03-11-huawey-rs-vs-datacom.png differ
diff --git a/assets/images/posts/2022-03-17-mct.png b/assets/images/posts/2022-03-17-mct.png
new file mode 100644
index 0000000000..0b7dbc8eae
Binary files /dev/null and b/assets/images/posts/2022-03-17-mct.png differ
diff --git a/assets/images/posts/2022-03-21-mie/1.jpeg b/assets/images/posts/2022-03-21-mie/1.jpeg
new file mode 100644
index 0000000000..f118614ac6
Binary files /dev/null and b/assets/images/posts/2022-03-21-mie/1.jpeg differ
diff --git a/assets/images/posts/2022-03-21-mie/2.png b/assets/images/posts/2022-03-21-mie/2.png
new file mode 100644
index 0000000000..2811bd1c64
Binary files /dev/null and b/assets/images/posts/2022-03-21-mie/2.png differ
diff --git a/assets/images/posts/2022-03-24-riab.png b/assets/images/posts/2022-03-24-riab.png
new file mode 100644
index 0000000000..5796e8f57b
Binary files /dev/null and b/assets/images/posts/2022-03-24-riab.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/0.png b/assets/images/posts/2022-03-25-aiab/0.png
new file mode 100644
index 0000000000..c26b65d161
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/0.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/01.png b/assets/images/posts/2022-03-25-aiab/01.png
new file mode 100644
index 0000000000..8d662cbabc
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/01.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/02.png b/assets/images/posts/2022-03-25-aiab/02.png
new file mode 100644
index 0000000000..bc770d9993
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/02.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/03.png b/assets/images/posts/2022-03-25-aiab/03.png
new file mode 100644
index 0000000000..66b2a09d72
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/03.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/04.png b/assets/images/posts/2022-03-25-aiab/04.png
new file mode 100644
index 0000000000..760c143415
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/04.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/05.png b/assets/images/posts/2022-03-25-aiab/05.png
new file mode 100644
index 0000000000..f2089eb71a
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/05.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/06.png b/assets/images/posts/2022-03-25-aiab/06.png
new file mode 100644
index 0000000000..1a6d5da89e
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/06.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/07.png b/assets/images/posts/2022-03-25-aiab/07.png
new file mode 100644
index 0000000000..f953d7ac5e
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/07.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/08.png b/assets/images/posts/2022-03-25-aiab/08.png
new file mode 100644
index 0000000000..f0ef419e9e
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/08.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/09.png b/assets/images/posts/2022-03-25-aiab/09.png
new file mode 100644
index 0000000000..6060e83392
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/09.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/10.png b/assets/images/posts/2022-03-25-aiab/10.png
new file mode 100644
index 0000000000..4c9d5147ad
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/10.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/11.png b/assets/images/posts/2022-03-25-aiab/11.png
new file mode 100644
index 0000000000..b58ca499a1
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/11.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/12.png b/assets/images/posts/2022-03-25-aiab/12.png
new file mode 100644
index 0000000000..c2cf12fd08
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/12.png differ
diff --git a/assets/images/posts/2022-03-25-aiab/13.png b/assets/images/posts/2022-03-25-aiab/13.png
new file mode 100644
index 0000000000..78d0b9f609
Binary files /dev/null and b/assets/images/posts/2022-03-25-aiab/13.png differ
diff --git a/assets/images/posts/2022-04-01-shift-aws-foundations-7.jpg b/assets/images/posts/2022-04-01-shift-aws-foundations-7.jpg
new file mode 100644
index 0000000000..584f72046c
Binary files /dev/null and b/assets/images/posts/2022-04-01-shift-aws-foundations-7.jpg differ
diff --git a/assets/images/posts/2022-04-08-hcia-19.jpeg b/assets/images/posts/2022-04-08-hcia-19.jpeg
new file mode 100644
index 0000000000..2e73bc9039
Binary files /dev/null and b/assets/images/posts/2022-04-08-hcia-19.jpeg differ
diff --git a/assets/images/posts/2022-04-12-aws-certs-desconto/1.png b/assets/images/posts/2022-04-12-aws-certs-desconto/1.png
new file mode 100644
index 0000000000..4556ea13a9
Binary files /dev/null and b/assets/images/posts/2022-04-12-aws-certs-desconto/1.png differ
diff --git a/assets/images/posts/2022-04-12-aws-certs-desconto/2.png b/assets/images/posts/2022-04-12-aws-certs-desconto/2.png
new file mode 100644
index 0000000000..3897a2d285
Binary files /dev/null and b/assets/images/posts/2022-04-12-aws-certs-desconto/2.png differ
diff --git a/assets/images/posts/2022-04-12-shift-aws-dev-4/1.png b/assets/images/posts/2022-04-12-shift-aws-dev-4/1.png
new file mode 100644
index 0000000000..22379a9d16
Binary files /dev/null and b/assets/images/posts/2022-04-12-shift-aws-dev-4/1.png differ
diff --git a/assets/images/posts/2022-04-12-shift-aws-dev-4/2.png b/assets/images/posts/2022-04-12-shift-aws-dev-4/2.png
new file mode 100644
index 0000000000..7475a94493
Binary files /dev/null and b/assets/images/posts/2022-04-12-shift-aws-dev-4/2.png differ
diff --git a/assets/images/posts/2022-04-25-rh-summit22/1.png b/assets/images/posts/2022-04-25-rh-summit22/1.png
new file mode 100644
index 0000000000..8c5960c9ef
Binary files /dev/null and b/assets/images/posts/2022-04-25-rh-summit22/1.png differ
diff --git a/assets/images/posts/2022-04-25-rh-summit22/2.png b/assets/images/posts/2022-04-25-rh-summit22/2.png
new file mode 100644
index 0000000000..b4145567f0
Binary files /dev/null and b/assets/images/posts/2022-04-25-rh-summit22/2.png differ
diff --git a/assets/images/posts/2022-04-25-wifi6.png b/assets/images/posts/2022-04-25-wifi6.png
new file mode 100644
index 0000000000..a2b746e859
Binary files /dev/null and b/assets/images/posts/2022-04-25-wifi6.png differ
diff --git a/assets/images/posts/2022-04-27-eu-capacito.png b/assets/images/posts/2022-04-27-eu-capacito.png
new file mode 100644
index 0000000000..eeb21590d7
Binary files /dev/null and b/assets/images/posts/2022-04-27-eu-capacito.png differ
diff --git a/assets/images/posts/2022-05-19-cati22.jpeg b/assets/images/posts/2022-05-19-cati22.jpeg
new file mode 100644
index 0000000000..05ebb043cf
Binary files /dev/null and b/assets/images/posts/2022-05-19-cati22.jpeg differ
diff --git a/assets/images/posts/2022-05-25-venko/1.jpg b/assets/images/posts/2022-05-25-venko/1.jpg
new file mode 100644
index 0000000000..d958e67312
Binary files /dev/null and b/assets/images/posts/2022-05-25-venko/1.jpg differ
diff --git a/assets/images/posts/2022-05-25-venko/2.jpeg b/assets/images/posts/2022-05-25-venko/2.jpeg
new file mode 100644
index 0000000000..30f576d39e
Binary files /dev/null and b/assets/images/posts/2022-05-25-venko/2.jpeg differ
diff --git a/assets/images/posts/2022-06-13-women-cloud.jpeg b/assets/images/posts/2022-06-13-women-cloud.jpeg
new file mode 100644
index 0000000000..69031b096a
Binary files /dev/null and b/assets/images/posts/2022-06-13-women-cloud.jpeg differ
diff --git a/assets/images/posts/2022-06-20-apn.jpeg b/assets/images/posts/2022-06-20-apn.jpeg
new file mode 100644
index 0000000000..288e03ff7f
Binary files /dev/null and b/assets/images/posts/2022-06-20-apn.jpeg differ
diff --git a/assets/images/posts/2022-06-22-educate-relaunch.png b/assets/images/posts/2022-06-22-educate-relaunch.png
new file mode 100644
index 0000000000..c02e92f1c4
Binary files /dev/null and b/assets/images/posts/2022-06-22-educate-relaunch.png differ
diff --git a/assets/images/posts/2022-07-09-shift-aws-foundations-8.jpeg b/assets/images/posts/2022-07-09-shift-aws-foundations-8.jpeg
new file mode 100644
index 0000000000..40c1357aac
Binary files /dev/null and b/assets/images/posts/2022-07-09-shift-aws-foundations-8.jpeg differ
diff --git a/assets/images/posts/2022-08-10-rh-research/1.jpg b/assets/images/posts/2022-08-10-rh-research/1.jpg
new file mode 100644
index 0000000000..43141a14f5
Binary files /dev/null and b/assets/images/posts/2022-08-10-rh-research/1.jpg differ
diff --git a/assets/images/posts/2022-08-10-rh-research/2.png b/assets/images/posts/2022-08-10-rh-research/2.png
new file mode 100644
index 0000000000..20d368a95b
Binary files /dev/null and b/assets/images/posts/2022-08-10-rh-research/2.png differ
diff --git a/assets/images/posts/2022-08-11-shift-aws-dev-5.jpg b/assets/images/posts/2022-08-11-shift-aws-dev-5.jpg
new file mode 100644
index 0000000000..331b12a7a9
Binary files /dev/null and b/assets/images/posts/2022-08-11-shift-aws-dev-5.jpg differ
diff --git a/assets/images/posts/2022-09-01-hcia-20.jpeg b/assets/images/posts/2022-09-01-hcia-20.jpeg
new file mode 100644
index 0000000000..078f249bce
Binary files /dev/null and b/assets/images/posts/2022-09-01-hcia-20.jpeg differ
diff --git a/assets/images/posts/2022-09-02-icos/0.webp b/assets/images/posts/2022-09-02-icos/0.webp
new file mode 100644
index 0000000000..3b5aace99e
Binary files /dev/null and b/assets/images/posts/2022-09-02-icos/0.webp differ
diff --git a/assets/images/posts/2022-09-02-icos/1.webp b/assets/images/posts/2022-09-02-icos/1.webp
new file mode 100644
index 0000000000..de163f4c7e
Binary files /dev/null and b/assets/images/posts/2022-09-02-icos/1.webp differ
diff --git a/assets/images/posts/2022-09-02-icos/2.webp b/assets/images/posts/2022-09-02-icos/2.webp
new file mode 100644
index 0000000000..bebfd620c5
Binary files /dev/null and b/assets/images/posts/2022-09-02-icos/2.webp differ
diff --git a/assets/images/posts/2022-09-20-physics-ga4/1.png b/assets/images/posts/2022-09-20-physics-ga4/1.png
new file mode 100644
index 0000000000..20d7e9f88c
Binary files /dev/null and b/assets/images/posts/2022-09-20-physics-ga4/1.png differ
diff --git a/assets/images/posts/2022-09-20-physics-ga4/2.png b/assets/images/posts/2022-09-20-physics-ga4/2.png
new file mode 100644
index 0000000000..ca4c8c6769
Binary files /dev/null and b/assets/images/posts/2022-09-20-physics-ga4/2.png differ
diff --git a/assets/images/posts/2022-10-19-shift-aws-foundations-9.png b/assets/images/posts/2022-10-19-shift-aws-foundations-9.png
new file mode 100644
index 0000000000..d60d38b093
Binary files /dev/null and b/assets/images/posts/2022-10-19-shift-aws-foundations-9.png differ
diff --git a/assets/images/posts/2022-11-07-shift-aws-dev-6.jpg b/assets/images/posts/2022-11-07-shift-aws-dev-6.jpg
new file mode 100644
index 0000000000..e76c0a911f
Binary files /dev/null and b/assets/images/posts/2022-11-07-shift-aws-dev-6.jpg differ
diff --git a/assets/images/posts/2022-11-16-aws-certified-global-community/1.png b/assets/images/posts/2022-11-16-aws-certified-global-community/1.png
new file mode 100644
index 0000000000..51a03072b1
Binary files /dev/null and b/assets/images/posts/2022-11-16-aws-certified-global-community/1.png differ
diff --git a/assets/images/posts/2022-11-16-aws-certified-global-community/2.jpg b/assets/images/posts/2022-11-16-aws-certified-global-community/2.jpg
new file mode 100644
index 0000000000..b0c1e81a5a
Binary files /dev/null and b/assets/images/posts/2022-11-16-aws-certified-global-community/2.jpg differ
diff --git a/assets/images/posts/2022-11-16-aws-certified-global-community/3.png b/assets/images/posts/2022-11-16-aws-certified-global-community/3.png
new file mode 100644
index 0000000000..7e9d6bfe2a
Binary files /dev/null and b/assets/images/posts/2022-11-16-aws-certified-global-community/3.png differ
diff --git a/assets/images/posts/2022-11-17-rhr-talks-physics.png b/assets/images/posts/2022-11-17-rhr-talks-physics.png
new file mode 100644
index 0000000000..8d55ff4fdf
Binary files /dev/null and b/assets/images/posts/2022-11-17-rhr-talks-physics.png differ
diff --git a/assets/images/posts/2022-12-26-tip-academy/1.svg b/assets/images/posts/2022-12-26-tip-academy/1.svg
new file mode 100644
index 0000000000..0abb137128
--- /dev/null
+++ b/assets/images/posts/2022-12-26-tip-academy/1.svg
@@ -0,0 +1,102 @@
+
diff --git a/assets/images/posts/2022-12-26-tip-academy/2.png b/assets/images/posts/2022-12-26-tip-academy/2.png
new file mode 100644
index 0000000000..332e9252df
Binary files /dev/null and b/assets/images/posts/2022-12-26-tip-academy/2.png differ
diff --git a/assets/images/posts/2022-12-26-tip-academy/3.png b/assets/images/posts/2022-12-26-tip-academy/3.png
new file mode 100644
index 0000000000..4783286e5d
Binary files /dev/null and b/assets/images/posts/2022-12-26-tip-academy/3.png differ
diff --git a/assets/images/posts/2022-12-26-tip-academy/4.png b/assets/images/posts/2022-12-26-tip-academy/4.png
new file mode 100644
index 0000000000..b28562fd3a
Binary files /dev/null and b/assets/images/posts/2022-12-26-tip-academy/4.png differ
diff --git a/assets/images/posts/2022-12-26-tip-academy/5.png b/assets/images/posts/2022-12-26-tip-academy/5.png
new file mode 100644
index 0000000000..33147efd85
Binary files /dev/null and b/assets/images/posts/2022-12-26-tip-academy/5.png differ
diff --git a/assets/images/posts/2023-01-01-newyear23.png b/assets/images/posts/2023-01-01-newyear23.png
new file mode 100644
index 0000000000..2cbe209f76
Binary files /dev/null and b/assets/images/posts/2023-01-01-newyear23.png differ
diff --git a/assets/images/posts/2023-01-18-codeco-kickoff/1.png b/assets/images/posts/2023-01-18-codeco-kickoff/1.png
new file mode 100644
index 0000000000..c9824afbbb
Binary files /dev/null and b/assets/images/posts/2023-01-18-codeco-kickoff/1.png differ
diff --git a/assets/images/posts/2023-01-18-codeco-kickoff/2.jpg b/assets/images/posts/2023-01-18-codeco-kickoff/2.jpg
new file mode 100644
index 0000000000..eb8ff1ee16
Binary files /dev/null and b/assets/images/posts/2023-01-18-codeco-kickoff/2.jpg differ
diff --git a/assets/images/posts/2023-01-18-codeco-kickoff/3.jpg b/assets/images/posts/2023-01-18-codeco-kickoff/3.jpg
new file mode 100644
index 0000000000..b1940d7cc4
Binary files /dev/null and b/assets/images/posts/2023-01-18-codeco-kickoff/3.jpg differ
diff --git a/assets/images/posts/2023-01-18-kubemark.svg b/assets/images/posts/2023-01-18-kubemark.svg
new file mode 100644
index 0000000000..4cd4f2ad73
--- /dev/null
+++ b/assets/images/posts/2023-01-18-kubemark.svg
@@ -0,0 +1,616 @@
+
+
diff --git a/assets/images/posts/2023-02-06-icni2.png b/assets/images/posts/2023-02-06-icni2.png
new file mode 100644
index 0000000000..4d71a4c3d2
Binary files /dev/null and b/assets/images/posts/2023-02-06-icni2.png differ
diff --git a/assets/images/posts/2023-03-20-linux-trivia/Command-LineCaptain.png b/assets/images/posts/2023-03-20-linux-trivia/Command-LineCaptain.png
new file mode 100644
index 0000000000..7d0f17b502
Binary files /dev/null and b/assets/images/posts/2023-03-20-linux-trivia/Command-LineCaptain.png differ
diff --git a/assets/images/posts/2023-03-20-linux-trivia/OpenSourcer-er.png b/assets/images/posts/2023-03-20-linux-trivia/OpenSourcer-er.png
new file mode 100644
index 0000000000..78cebc1a98
Binary files /dev/null and b/assets/images/posts/2023-03-20-linux-trivia/OpenSourcer-er.png differ
diff --git a/assets/images/posts/2023-03-20-linux-trivia/RedHatTitan.png b/assets/images/posts/2023-03-20-linux-trivia/RedHatTitan.png
new file mode 100644
index 0000000000..fd8d1e36a7
Binary files /dev/null and b/assets/images/posts/2023-03-20-linux-trivia/RedHatTitan.png differ
diff --git a/assets/images/posts/2023-04-19-physics-rhr-talks.png b/assets/images/posts/2023-04-19-physics-rhr-talks.png
new file mode 100644
index 0000000000..b9a49f8e9f
Binary files /dev/null and b/assets/images/posts/2023-04-19-physics-rhr-talks.png differ
diff --git a/assets/images/posts/2023-05-23-devconf23/1.png b/assets/images/posts/2023-05-23-devconf23/1.png
new file mode 100644
index 0000000000..b85855f71b
Binary files /dev/null and b/assets/images/posts/2023-05-23-devconf23/1.png differ
diff --git a/assets/images/posts/2023-05-23-devconf23/2.png b/assets/images/posts/2023-05-23-devconf23/2.png
new file mode 100644
index 0000000000..4126872643
Binary files /dev/null and b/assets/images/posts/2023-05-23-devconf23/2.png differ
diff --git a/assets/images/posts/2023-05-23-devconf23/3.jpeg b/assets/images/posts/2023-05-23-devconf23/3.jpeg
new file mode 100644
index 0000000000..67579491b6
Binary files /dev/null and b/assets/images/posts/2023-05-23-devconf23/3.jpeg differ
diff --git a/assets/images/posts/2023-05-25-netsoft23/1.png b/assets/images/posts/2023-05-25-netsoft23/1.png
new file mode 100644
index 0000000000..bf7cb57903
Binary files /dev/null and b/assets/images/posts/2023-05-25-netsoft23/1.png differ
diff --git a/assets/images/posts/2023-05-25-netsoft23/2.jpg b/assets/images/posts/2023-05-25-netsoft23/2.jpg
new file mode 100644
index 0000000000..ea248b846e
Binary files /dev/null and b/assets/images/posts/2023-05-25-netsoft23/2.jpg differ
diff --git a/assets/images/posts/2023-06-02-imdea.png b/assets/images/posts/2023-06-02-imdea.png
new file mode 100644
index 0000000000..9bfd6cae04
Binary files /dev/null and b/assets/images/posts/2023-06-02-imdea.png differ
diff --git a/assets/images/posts/2023-10-21-dev-inmutable-distros/go.png b/assets/images/posts/2023-10-21-dev-inmutable-distros/go.png
new file mode 100644
index 0000000000..03d1042ac6
Binary files /dev/null and b/assets/images/posts/2023-10-21-dev-inmutable-distros/go.png differ
diff --git a/assets/images/posts/2023-10-21-dev-inmutable-distros/python.png b/assets/images/posts/2023-10-21-dev-inmutable-distros/python.png
new file mode 100644
index 0000000000..cde045a948
Binary files /dev/null and b/assets/images/posts/2023-10-21-dev-inmutable-distros/python.png differ
diff --git a/assets/js/lunr/lunr-en.js b/assets/js/lunr/lunr-en.js
new file mode 100644
index 0000000000..cefd343e9a
--- /dev/null
+++ b/assets/js/lunr/lunr-en.js
@@ -0,0 +1,70 @@
+---
+layout: none
+---
+
+var idx = lunr(function () {
+ this.field('title')
+ this.field('excerpt')
+ this.field('categories')
+ this.field('tags')
+ this.ref('id')
+
+ this.pipeline.remove(lunr.trimmer)
+
+ for (var item in store) {
+ this.add({
+ title: store[item].title,
+ excerpt: store[item].excerpt,
+ categories: store[item].categories,
+ tags: store[item].tags,
+ id: item
+ })
+ }
+});
+
+$(document).ready(function() {
+ $('input#search').on('keyup', function () {
+ var resultdiv = $('#results');
+ var query = $(this).val().toLowerCase();
+ var result =
+ idx.query(function (q) {
+ query.split(lunr.tokenizer.separator).forEach(function (term) {
+ q.term(term, { boost: 100 })
+ if(query.lastIndexOf(" ") != query.length-1){
+ q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 })
+ }
+ if (term != ""){
+ q.term(term, { usePipeline: false, editDistance: 1, boost: 1 })
+ }
+ })
+ });
+ resultdiv.empty();
+ resultdiv.prepend('
Currently working as Cloud Consultant, Architect and Technical Lead for NFV-related projects at Red Hat. BE in Computer Engineering from University of A Coruña (Spain) and PhD from Polytechnic School of the University of São Paulo (Brazil). During MsC and PhD studies, worked on QoS routing in SDN and NFV Management and Orchestration.
+
+
Have been designing and implementing IaaS/PaaS solutions, namelly OpenStack and Kubernetes/OpenShift, for the last 7 years, and teaching postgraduate courses for the last 5 years.
AiaB can be set up with a 4G or 5G SD-CORE. In either case, SD-CORE configuration can be done with or without the ROC. The ROC provides an interactive GUI for examining and changing the configuration, and is used to manage the production Aether; it can be deployed to test the integration between ROC and SD-CORE. If the ROC is not deployed, a simple tool called SimApp is used to configure the required state in SD-CORE for testing core functionality.
+
+
Helm charts are the primary method of installing the SD-CORE and ROC resources. AiaB offers a great deal of flexibility regarding which Helm chart versions to install:
+
+
Local definitions of charts (for testing Helm chart changes)
+
Latest published charts (for deploying a development version of Aether)
+
Specified versions of charts (for deploying a specific Aether release)
+
+
+
+
+
Prerequisites
+
+
In order to run AiaB, we should prepare at least a single machine (any baremetal server or on premises/cloud VM) with the following minimum requirements:
+
+
CPU: Intel CPU and Haswell microarchitecture or beyond; at least 4 cores
+
OS: Ubuntu 18.04 with Kernel 4.15 or later
+
RAM: At least 12GB
+
Storage: At least 50GB
+
+
+
For this testing it was used a Ubuntu 18.04 t2.xlarge (4 vCPUs / 16 GB) instance on AWS (with port 31194 opened in the corresponding security group).
Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is...
José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain)
+
Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil)
+
Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil)
+
Flavio de Oliveira Silva (Universidade Federal de Uberlândia, Brazil)
+
Pedro Frosi Rosa (Federal University of Uberlândia, Brazil)
+
Carlos Eduardo Magalhães Guimarães (Instituto de Telecomunicações - Pólo de Aveiro, Portugal)
+
Daniel Corujo (Instituto de Telecomunicações Aveiro, Portugal)
+
Rui L Aguiar (University of Aveiro, Portugal)
+
+
+
Cite this
+
+
APA
+
+
Castillo, J., Silva, F.S., Neto, A., Silva, F.O., Frosi, P., Guimarães, C., Corujo, D., & Aguiar, R.L. (2014). Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions. AICT 2014.
+
+
BibTeX
+
+
@inproceedings {Castillo2014EvolvingFI,
+ title={Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions},
+ author={Jos{\'e} Castillo and Felipe Sampaio Dantas da Silva and Augusto Neto and Fl{\'a}vio Oliveira Silva and Pedro Frosi and Carlos Guimar{\~a}es and Daniel Corujo and Rui L. Aguiar},
+ booktitle={IARIA Advanced International Conference on Telecommunications (AICT 2014)},
+ year={2014}}
+
+
+
Chicago
+
Castillo, José, Felipe Sampaio Dantas da Silva, Augusto Neto, Flávio Oliveira Silva, Pedro Frosi, Carlos Guimarães, Daniel Corujo and Rui L. Aguiar. “Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions.” AICT 2014 (2014).
+
+
MLA
+
Castillo, José et al. “Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions.” AICT 2014 (2014).
Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is...
Usage: aodh2sensu.py [options]
+
+Imports OpenStack Aodh alarms into Sensu Core Server.
+
+Options:
+ -h, --help show this help message and exit
+ --sensu-url URL if not specified, defaults to localhost:4567
+
+
+
+
+
Run the aodh2sensu proxy. sensu_url must point to the sensu server. The proxy must be run in a server reachable from OpenStack controllers and with access to the Sensu Server (for example, the Sensu Server itself).
+
+
$ ./aodh2sensu.py
+
+
or alternatively via pipenv:
+
$ pipenv shell
+ $ ./aodh2sensu.py
+
+
+
Create an Aodh alarm from OpenStack side. This example alarm will trigger an HTTP POST message to the aodh2sensu proxy whenever the cpu utilization of $INSTANCE_ID goes above 20%:
+
Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is...
Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is...
The AWS Partner Network (APN) is a global community of partners that leverages programs, expertise, and resources to build, market, and sell customer offerings.
+
+
This diverse network features 100,000 partners from more than 150 countries. As an AWS Partner, you are uniquely positioned to help customers take full advantage of all that AWS has to offer and accelerate their journey to the cloud.
+
+
Together, partners and AWS can provide innovative solutions, solve technical challenges, win deals, and deliver value to our mutual customers.
+
+
One of the Partner Resources is Partner Training and Certification, to deepen your AWS knowledge and skills with digital and classroom trainings.
Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is...
';
+ }
+ resultdiv.append(searchitem);
+ }
+ });
+});
diff --git a/docs/assets/js/lunr/lunr-store.js b/docs/assets/js/lunr/lunr-store.js
new file mode 100644
index 0000000000..c7c397bd49
--- /dev/null
+++ b/docs/assets/js/lunr/lunr-store.js
@@ -0,0 +1,1375 @@
+var store = [{
+ "title": "ICCCN 2012",
+ "excerpt":"2012 21st International Conference on Computer Communications and Networks (ICCCN) Proceedings Context-Driven Resource Over-Provisioning Approach for Rich Networking J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain) E. Cruz (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil) A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil) S. Sargento (Institute of...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/icccn12/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE LATINCOM 2012",
+ "excerpt":"2012 IEEE Latin-America Conference on Communications Proceedings Applying advanced network resource provisioning in future internet systems S. Jardim (Informatics Institute, Federal University of Goiás, Goiânia, Brazil) A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil) J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain) E. Cerqueira (Computer Engineering, Federal University...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/latincom12/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "NETWORKS 2012",
+ "excerpt":"2012 15th International Telecommunications Network Strategy and Planning Symposium (NETWORKS) Proceedings Applying over-provisioning centric resource control in context-sensitive networks J. Castillo-Lema (Computer Engineering, Universidade da Coruña, Spain) E. Cruz (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil) A. Neto (Teleinformatics Engineering, Federal University of Ceará, Fortaleza, Brazil) S. Sargento (Institute...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/networks12/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "ICNC 2013",
+ "excerpt":"2013 International Conference on Computing, Networking and Communications (ICNC) Proceedings Advanced resource provisioning in context-sensitive converged networks Jose Castillo Lema (Universidade da Coruña, Spain) Elifanio Cruz (Federal University of Ceará, Brazil) Augusto Jose Venancio Neto (Universidade Federal do Rio Grande do Norte, Brazil) Eduardo Cerqueira (Federal University of Para, Brazil)...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/icnc13/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE ISCC 2013",
+ "excerpt":"2013 IEEE Symposium on Computers and Communications (ISCC) Proceedings Over-provisioning centric network resource control in Future Internet systems Sandino Jardim (Federal University of Goias, Brazil) Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil) Jose Castillo Lema (Universidade da Coruña, Spain) Eduardo Cerqueira (Federal University...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/iscc13/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE GLOBECOM 2013",
+ "excerpt":"Globecom 2013 Workshop - Management of Emerging Networks and Services Program Program Hybrid Framework for Scalable Resource Control in Multi-ingress Networks Sandino Jardim (Federal University of Goias, Brazil) Augusto Jose Venancio Neto, Ph. D. (Universidade Federal do Rio Grande do Norte, Brazil) Jose Castillo Lema (Universidade da Coruña, Spain) Evariste...","categories": [],
+ "tags": ["en","events","networks","papers","research"],
+ "url": "/globecom13/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "SBRC/WPEIF 2014",
+ "excerpt":"XXXII Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos / V Workshop de Pesquisa Experimental da Internet do Futuro Proceedings Quality-oriented Mobility Control Architecture for ETArch Handover Optimization Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil) José Castillo Lema...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/sbrc14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE ISCC 2014",
+ "excerpt":"The nineteenth IEEE Symposium on Computers And Communications Program Entity Title Architecture Extensions Towards Advanced Quality-oriented Mobility Control Capabilities Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil) José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain) Augusto Jose...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/iscc14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AITC 2014",
+ "excerpt":"The Tenth Advanced International Conference on Telecommunications Program Evolving Future Internet Clean-Slate Entity Title Architecture with Quality-Oriented Control Plane Extensions José Castillo Lema (Universidade Federal do Rio Grande do Norte, Spain) Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil) Augusto...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/aict14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Evolving Future Internet clean-slate ETArch with QoS control-plane extensions",
+ "excerpt":"Biblioteca Digital Brasileira de Teses e Dissertações Cite this APA Lema, J. C. (2014). Evolving Future Internet clean-slate Entity Title Architecture with quality-oriented control-plane extensions. Chicago Lema, José Castillo. Evolving Future Internet Clean-slate Entity Title Architecture With Quality-oriented Control-plane Extensions. 2014. MLA Lema, José Castillo. Evolving Future Internet Clean-slate Entity...","categories": [],
+ "tags": ["en","networks","papers","research","sdn"],
+ "url": "/mdthesis/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Support of Mobile Sessions with High Transport Network Resource Demand",
+ "excerpt":"smart-OF-controller This project aims to design and develop a clean-slate Future Internet framework called SMART (Support of Mobile Sessions with High Transport Network Resource Demand). In this framework, Software-Defined Networking mechanisms will be applied and fitted in vital aspects of the RNP (Brazilian National Research and Education Network) infrastructure, to...","categories": [],
+ "tags": ["en","networks","papers","research","sdn"],
+ "url": "/smart/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE HealthCom 2014",
+ "excerpt":"2014 IEEE 16th International Conference on e-Health Networking, Applications and Services (Healthcom) Proceedings Software defined eHealth networking towards a truly mobile and reliable system Felipe Sampaio Dantas da Silva (Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil) José Castillo Lema (Universidade Federal do Rio Grande...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/healthcom14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Smart Campus SP",
+ "excerpt":"Smart Campus SP SmartCampus is a FI-Ware software prototype to measure the contamination levels in the University of São Paulo (USP) Campus with a group of Android, Arduino and Galileo sensors. Below you can find a diagram of all the system components and a brief explanation of their functions. The...","categories": [],
+ "tags": ["en","fiware","iot"],
+ "url": "/smartcampus/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE GLOBECOM 2014",
+ "excerpt":"Global Communications Conference 2014 Proceedings Additions to the ETArch control plane to support multimedia QoS-guaranteed content transport over OpenFlow-enabled SDN future internet systems José Castillo - Federal University of Rio Grande do Norte (UFRN), Brazil Augusto Neto - Federal University of Rio Grande do Norte (UFRN), Brazil Flavio Silva -...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/globecom14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "ICWN 2015",
+ "excerpt":"The 2015 World Congress in Computer Science, Computer Engineering and Applied Computing Agenda Infrastructured Mobility Management Approach for Future Internet ETArch Networks Felipe Sampaio Dantas da Silva, Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil Augusto J. Venancio Neto, Federal University of Rio Grande do...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/icwn15/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "LANOMS 2015",
+ "excerpt":"8th Latin American Network Operations and Management Symposium Agenda SDN-based Control Plane Extensions for Mobility Management Improvement in Future Internet Networks Felipe Sampaio Dantas da Silva, Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil Augusto J. Venancio Neto, Federal University of Rio Grande do Norte,...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/lanoms15/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "MSWiM 2015",
+ "excerpt":"The 18th ACM International Conference on Modeling, Analysis and Simulation of Wireless and Mobile Systems Agenda Network-Initiated Quality-oriented Mobility Management Approach for Next Generation ETArch Networks Felipe Sampaio Dantas da Silva, Federal Institute of Education, Science and Technology of Rio Grande do Norte, Brazil Augusto J. Venancio Neto, Federal University...","categories": [],
+ "tags": ["en","events","networks","papers","research","sdn"],
+ "url": "/mswim15/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Full Stack Developer - Microservices, Cloud e IoT (SCJ)",
+ "excerpt":" Arquitetura e Desenvolvimento Java com IoT Arquitetura e Desenvolvimento Java de Alta Disponibilidade para Cloud Computing Arquitetura e Infraestrutura de Cloud Computing e Internet das Coisas Cloud Development Desenvolvimento de aplicações usando Cloud Computing ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-scj/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Computer Networks - Volume 107",
+ "excerpt":"Volume 107, Part 2, Pages 270-291 An innovative software-defined WiNeMO architecture for advanced QoS-guaranteed mobile service transport Felipe S. Dantas Silva Augusto Venâncio Netob Douglas Maciel José Castillo-Lema Flávio Silva Pedro Frosi Eduardo Cerqueira. Cite this ACM Felipe S. Dantas Silva, Augusto Venâncio Neto, Douglas Maciel, José Castillo-Lema, Flávio Silva,...","categories": [],
+ "tags": ["en","networks","papers","research","sdn"],
+ "url": "/computer-networks/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Mobile Development (MOB)",
+ "excerpt":" Cloud Foundation DevOps & Cloud Oriented Architecture Segurança para Aplicações Móveis para Internet das Coisas e Cloud Computing ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-mob/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 1st edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-01/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP Corporate",
+ "excerpt":" Citibank: Internet of Things (2017) Gerdau: Internet of Things (2017) Ambev: Computers Networks and Cloud Computing (2018) T-Systems: Internet of Things (2018) CCR: Multicloud Architecture (2021) ","categories": [],
+ "tags": ["aws","azure","classes","fiap","iot","networks","pt"],
+ "url": "/fiap-corporate/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 2nd edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-02/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PUC-SP Cursos de extensão - Internet das Coisas",
+ "excerpt":" ","categories": [],
+ "tags": ["classes","iot","pt"],
+ "url": "/puc/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "APICON 2017 - IoT HandsOn Lab",
+ "excerpt":"API Connect Conference 2017 ","categories": [],
+ "tags": ["events","iot","pt"],
+ "url": "/apicon/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 3rd edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-03/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 4th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-04/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 5th/6th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-05/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 7th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-07/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 8th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-08/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Ultra Challenge Saint-Gobain",
+ "excerpt":" ","categories": [],
+ "tags": ["events","hackathon","iot","pt","youtube"],
+ "url": "/saint-gobain-ultrachallenge/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 9th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-09/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Futurecom 2017 - Tour IoT",
+ "excerpt":" ","categories": [],
+ "tags": ["events","iot","pt"],
+ "url": "/futurecom17/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 10th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-10/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "[PT] Terraform – IaC – Terraformando no OpenStack",
+ "excerpt":"Originally published at Churrops on DevOps on November 26, 2017. Olá pessoal, vamos começar uma uma série de artigos sobre OpenStack dando continuidade aos artigos sobre Terraform (parte 1 e parte 2) do Rodrigo Floriano, pois é uma ferramenta que vários assíduos do blog já conhecem e usam a diário!...","categories": [],
+ "tags": ["openstack","iac","terraform","pt","redhat","series"],
+ "url": "/terraformando-openstack/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "[PT] Heat - Introdução",
+ "excerpt":"Originally published at Churrops on DevOps on December 20, 2017. Olá pessoal, vamos começar uma série de artigos sobre Heat, o “terraform” nativo do OpenStack, ou para quem vem do mundo da AWS, o CloudFormation do OpenStack (inclusive parcialmente compatível). Neste primeiro artigo introdutório vamos aprender a criar as nossas...","categories": [],
+ "tags": ["iac","openstack","pt","redhat","series"],
+ "url": "/heat-introducao/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 11th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-11/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Cloud Computing (CLD)",
+ "excerpt":" BootCamp OpenStack Implementação de Cloud Implementação OpenStack Soluções MultiCloud ","categories": [],
+ "tags": ["classes","fiap","openstack","pt"],
+ "url": "/fiap-cld/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 12th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-12/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series I: Keystone - Identity Manager",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 1 - OpenStack Keystone Identity Manager Usaremos o serviço Keystone para aprender alguns conceitos importantes de autenticação/autorização de usuários: projetos róis quotas endpoints Pre-reqs Listar os serviços Linux que compõem o Keystone: $ systemctl | grep devstack@keystone devstack@keystone.service loaded active running Devstack devstack@keystone.service Conferir...","categories": [],
+ "tags": ["classes","fiap","openstack","pt","redhat","series"],
+ "url": "/openstack1-keystone/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series II: Glance - Image Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 2 - OpenStack Glance Image Service Usaremos o serviço Glance para aprender alguns conceitos importantes de imagens/snapshots de máquinas virtuais: formatos: qcow2, raw, vmdk, ami, … conversão entre formatos: ferramenta qemu-img snapshots Pre-reqs Carregar as credenciais de administrador e conferir que foram aplicadas no...","categories": [],
+ "tags": ["classes","fiap","openstack","pt","redhat","series"],
+ "url": "/openstack2-glance/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series III: Nova - Compute Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 3 - OpenStack Nova Compute Service Usaremos o serviço Nova para aprender alguns conceitos importantes sobre máquinas virtuais: flavors security groups cloud-init Pre-reqs Conferir se as extensões de virtualizações estão presentes no processador: $ grep -E ' svm | vmx ' /proc/cpuinfo Listar os...","categories": [],
+ "tags": ["classes","fiap","openstack","pt","redhat","series"],
+ "url": "/openstack3-nova/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCNA-HNTD Training - 13th edition",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hntd-13/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Academy",
+ "excerpt":"Benefícios Aproveite os descontos (voucher 50% off) nos exames de certificação. Escolha o estilo de aprendizado ideal para você dentre os nossos vários formatos de material didático. Adquiria uma experiência valiosa com os ambientes de laboratório hands-on. Conecte-se com outros estudantes e os instrutores da Red Hat que fazem parte...","categories": [],
+ "tags": ["cert","classes","fiap","openshift","openstack","pt","redhat"],
+ "url": "/redhat-academy/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series IV: Neutron - Network Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 4 - OpenStack Neutron Network Service Usaremos o serviço Neutron para aprender alguns conceitos importantes sobre virtualização de redes: criação de redes/subredes virtuais virtual routers security groups floating IPs Pre-reqs Carregar as credenciais de OpenStack: $ source devstack/openrc admin WARNING: setting legacy OS_TENANT_NAME to...","categories": [],
+ "tags": ["classes","fiap","networks","openstack","pt","redhat","sdn","series"],
+ "url": "/openstack4-neutron/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series V: Cinder - Block Storage Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 5 - OpenStack Cinder Block Storage Service Usaremos o serviço Cinder para aprender alguns conceitos importantes sobre armazenamento de bloco: criação de volumes snapshots partição, formatação e montagem de volumes Pre-reqs Carregar as credenciais de administrador e conferir que foram aplicadas no ambiente: $...","categories": [],
+ "tags": ["classes","fiap","openstack","pt","redhat","sds","series"],
+ "url": "/openstack5-cinder/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series VI: Swift - Object Storage Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 6 - OpenStack Swift Object Storage Service Usaremos o serviço Swift para aprender alguns conceitos importantes sobre armazenamento de objeto: criação de containers objetos acesso via URL Pre-reqs Carregar as credenciais de administrador e conferir que foram aplicadas no ambiente: $ source devstack/openrc admin...","categories": [],
+ "tags": ["classes","fiap","openstack","pt","redhat","sds","series"],
+ "url": "/openstack6-swift/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series VII: Heat - Orchestration Service",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 7 - OpenStack Heat Orchestration Service Usaremos o serviço Heat para aprender alguns conceitos importantes sobre orquestração e Infrastructure as Code (IaC): criação de pilhas (stacks) listagem de recursos Pre-reqs Carregar as credenciais de administrador e conferir que foram aplicadas no ambiente: $ source...","categories": [],
+ "tags": ["classes","fiap","iac","openstack","pt","redhat","series"],
+ "url": "/openstack7-heat/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack series VIII: Terraform",
+ "excerpt":"Serie de artigos sobre OpenStack. Lab 8 - Terraform OpenStack Provider O Terraform é uma ferramenta para construir, alterar e controlar a infraestrutura de forma segura e eficiente. O Terraform pode gerenciar provedores de serviços existentes e populares como OpenStack, Azure, AWS, Digital Ocean, entre outras, bem como soluções internas...","categories": [],
+ "tags": ["classes","fiap","iac","openstack","pt","redhat","series","terraform"],
+ "url": "/openstack8-terraform/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack Day SP 2018",
+ "excerpt":"IPv6 no OpenStack ","categories": [],
+ "tags": ["events","openstack","pt","youtube"],
+ "url": "/openstackday/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Webinar Mandic Cloud - IPv6 no OpenStack",
+ "excerpt":" ","categories": [],
+ "tags": ["events","pt","webinar"],
+ "url": "/mandic-webinar/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei ICT Competition Brazil 2018-2019",
+ "excerpt":"A Huawei University promove pela primeira vez no Brasil o ICT Competition, um campeonato mundial promovido anualmente pela companhia para estudantes de TIC – Tecnologia da Informação e Comunicação . Com a participação de mais de 50 países, o programa deve receber mais de 80 mil alunos de cerca de...","categories": [],
+ "tags": ["classes","huawei","networks","pt"],
+ "url": "/ict-competition/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Converting ETSI NFV templates into TOSCA profile",
+ "excerpt":"etsi2tosca Converts ETSI NFV templates into TOSCA profile. Use Usage: etsi2tosca FILE Converts ETSI NFV templates into TOSCA profile Options: -h, --help show this help message and exit Examples Example 1: $ ./etsi2tosca.py samples/opencv_transcoder_vnfd.yaml tosca_definitions_version: tosca_simple_profile_for_nfv_1_0_0 description: OpenCV Transcoder VNF metadata: template_name: opencv_transcoder_vnf topology_template: inputs: ssh-hostname: type: string default: <rw_mgmt_ip>...","categories": [],
+ "tags": ["en","networks","nfv"],
+ "url": "/etsi2tosca/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Arquitetura de Soluções (ASO)",
+ "excerpt":" Arquitetura de Storage / DataCenter / Virtualização e Microcontainers Arquitetura em MultiCloud (AWS / GCP / Azure / IBM Cloud) ","categories": [],
+ "tags": ["aws","azure","classes","fiap","openshift","pt"],
+ "url": "/fiap-aso/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series I: Docker",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 1 - Docker Usaremos a imagem oficial Ubuntu Linux 18.04 ou Amazon Linux para aprender alguns conceitos importantes do Docker: instalação customização de imagens via Dockerfile upload de imagens no DockerHub Vamos trabalhar com dois terminais abertos...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers1-docker/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series II: Docker - continuação",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 2 - Docker - continuação Executando mysql server Usaremos a imagem oficial mysql para aprender alguns conceitos importantes do Docker: variáveis de entorno: docker run -e mapeamento de portas: docker run -p persistência de dados: docker run...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers2-docker2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series III: Docker Compose",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 3 - Docker Compose Executando servicos Docker Compose permite definir serviços (que a sua vez são formados por containers) e a comunicação entre os mesmos. Esta comunicação é implementada via DNS nos containers. Além disso, no arquivo...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers3-docker-compose/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series IV: Docker Swarm",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 4 - Docker Swarm Orquestrando containers Docker Swarm permite orquestrar containers em um cluster formado por vários servidores. De esta forma conseguimos garantir as seguintes propriedades nos containers gerenciados pelo orquestrador: tolerância a falhas: se um dos...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers4-docker-swarm/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series V: Kubernetes - Instalação",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 5 - Kubernetes - Instalação Orquestrando containers Kubernetes (k8s), da mesma forma que o Docker Swarm, permite orquestrar containers em um cluster formado por vários servidores. De esta forma conseguimos garantir as seguintes propriedades nos containers gerenciados...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers5-k8s-install/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series VI: Kompose",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 6 - Kompose Kompose permite importar templates do Docker Swarm no Kubernetes. Instalação Instalação do Kompose a. Obtenção do executável: $ curl -L https://github.com/kubernetes/kompose/releases/download/v1.17.0/kompose-linux-amd64 -o kompose % Total % Received % Xferd Average Speed Time Time Time...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers6-kompose/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Containers series VII: Kubernetes - Uso",
+ "excerpt":"Serie de artigos sobre containers (Docker, Docker Compose, Docker Swarm e Kubernetes). Lab 7 - Kubernetes - Uso Orquestrando containers Existem vários recursos dentro de um cluster Kubernetes: pod: conjunto de um ou mais containers service: cria um endpoint para acessar os pods de uma determinada app deployment: define as...","categories": [],
+ "tags": ["classes","fiap","iac","openshift","pt","redhat","series"],
+ "url": "/containers7-k8s-use/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Locust CCN client",
+ "excerpt":" locust-ccnclient A Locust CCN client compatible with ccn-lite. It allows the execution of load test experiments againts a CCN network. ","categories": [],
+ "tags": ["ccn","en","networks"],
+ "url": "/locust-ccnclient/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Arquitetura e Desenvolvimento na Plataforma .NET (NET)",
+ "excerpt":" Arquitetura Windows Azure Services Gestão de Configuração - ALM e DevOps ","categories": [],
+ "tags": ["azure","classes","fiap","pt"],
+ "url": "/fiap-net/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Big Data (Data Science) (BDT)",
+ "excerpt":" Cloud Computing Fast Data & Microservices Internet das Coisas Microserviços ","categories": [],
+ "tags": ["aws","classes","fiap","iot","openshift","pt"],
+ "url": "/fiap-bdt/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Zabbix templates for OpenStack",
+ "excerpt":"zabbix-for-openstack Ansible playbook for installing Zabbix and its templates for OpenStack (through Zabbix user parameters). In the following screenshot you can see the final result: As you can see, hosts are segregated by groups (controllers, compute, ceph, external Horizon, IdM, storage, etc.), and the items we monitore in each group...","categories": [],
+ "tags": ["ansible","monitoring","openstack","pt","redhat"],
+ "url": "/zabbix-openstack/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Educate",
+ "excerpt":"Recursos e benefícios Acesso ao AWS Educate Student Portal. Accesso ao console AWS com 50$ de créditos e labs online. Cloud Career Pathways: Explore trajetórias profissionais na nuvem para saber mais sobre as principais competências de nuvem nas carreiras de tecnologia mais procuradas. Desde Cientista de machine learning até Desenvolvedor...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/aws-educate/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "SBRC/WPEIF 2019",
+ "excerpt":"XXXVII Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos / Workshop de Pesquisa Experimental da Internet do Futuro Proceedings Network Function Virtualization in Content-Centric Networks José Castillo Lema, Universidade de São Paulo, Brazil Augusto J. Venancio Neto, Federal University of Rio Grande do Norte, Brazil Flavio de Oliveira Silva,...","categories": [],
+ "tags": ["ccn","en","events","networks","nfv","research","papers"],
+ "url": "/sbrc19/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "11a Semana de TI da Sumaré",
+ "excerpt":"Agenda ","categories": [],
+ "tags": ["events","pt"],
+ "url": "/sumare/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Blockchain Development & Technologies (BLC)",
+ "excerpt":" DevOps & Cloud Oriented Architecture ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-blc/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IEEE NetSoft/S4SI 2019",
+ "excerpt":"IEEE Conference on Network Softwarization / 2nd Workshop on Advances in Slicing for Softwarized Infrastructures Agenda Mininet-NFV: Evolving Mininet with OASIS TOSCA NVF profiles Towards Reproducible NFV Prototyping José Castillo Lema, Universidade de São Paulo, Brazil Augusto J. Venancio Neto, Federal University of Rio Grande do Norte, Brazil Flavio de...","categories": [],
+ "tags": ["en","events","networks","nfv","papers","research","sdn"],
+ "url": "/netsoft19/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Engenharia de Software - Online (AOJO)",
+ "excerpt":" Fase 4: Data Analytics Data Engineering (Big Data & Analytics) Cloud Computing & SRE Leadership and Corporate Accountability ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-aojo/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "A generic NFV MANO for Content-Centric Networks",
+ "excerpt":"Biblioteca Digital de Teses e Dissertações da USP Cite this ISO CASTILLO LEMA, José. A generic network function virtualization manager and orchestrator for content-centric networks [doi:10.11606/T.3.2019.tde-23102019-120559]. São Paulo : Escola Politécnica, Universidade de São Paulo, 2019. Tese de Doutorado em Sistemas Eletrônicos. [acesso 2020-06-01]. ABNT CASTILLO LEMA, José. A generic...","categories": [],
+ "tags": ["ccn","en","networks","nfv","papers","research"],
+ "url": "/thesis/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kuryr on OpenStack",
+ "excerpt":"Kuryr is Kubernetes Container Network Interface (CNI) for OpenStack, supported from OpenStack side from Red Hat OpenStack 13, for OpenShift 3.11 and for OpenShift 4.2 and above. If you are interested on checking the performance impact, check the post Accelerate your OpenShift Network Performance on OpenStack with Kuryr from the...","categories": [],
+ "tags": ["en","networks","openshift","openstack","redhat"],
+ "url": "/kuryr/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Artificial Intelligence & Machine Learning (IA)",
+ "excerpt":" Princípios de Robótica e IoT ","categories": [],
+ "tags": ["classes","fiap","iot","pt"],
+ "url": "/fiap-ia/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA ON Live - 1ASO - Fase 3 - Cloud",
+ "excerpt":" ","categories": [],
+ "tags": ["events","fiap","pt","webinar"],
+ "url": "/fiapon-live-1aso/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "ComputeHCISriov role for Director/TripleO",
+ "excerpt":"Hyper-converged SR-IOV role for compute nodes. Change 700887 proposed and merged upstream: https://review.opendev.org/#/c/700887/ ############################################################################### # Role: ComputeHCISriov # ############################################################################### - name: ComputeHCISriov description: | Compute Node with SR-IOV role hosting Ceph OSD too networks: - InternalApi - Tenant - Storage - StorageMgmt - Management default_route_networks: ['Management'] disable_upgrade_deployment: True RoleParametersDefault: TunedProfileName:...","categories": [],
+ "tags": ["en","nfv","openstack","redhat"],
+ "url": "/computehcisriov-role/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Open Networking Foundation",
+ "excerpt":"Open Networking Foundation The Open Networking Foundation (ONF) is a non-profit operator led consortium driving transformation of network infrastructure and carrier business models. We are an open, collaborative, community of communities. The ONF serves as the umbrella for a number of projects building solutions by leveraging network disaggregation, white box...","categories": [],
+ "tags": ["en","networks","nfv","onf","sdn"],
+ "url": "/onf/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series I: Elastic Computing (EC2)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 1 - AWS EC2 Criando a instancia Usaremos a imagem oficial Amazon Linux para aprender alguns conceitos importantes do Amazon Elastic Computing: flavors security groups cloud-init Acessar o serviço EC2: Lançar o assistente de criaçao de instancias: Escolher a imagem do Amazon...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws1-ec2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenShift 4.3 on RHOSP 13: Installation and Integrations",
+ "excerpt":"I would like to share my experience installing and integrating OpenShift with various OpenStack services, namely Cinder, Swift and Keystone (Neutron and Octavia TBD). Prerequisites This was not a disconnected environment. Note that virtual machines have to be born with proper DNS configuration for OpenShift to download proper CoreOS images...","categories": [],
+ "tags": ["en","openstack","openshift","redhat"],
+ "url": "/ocp43-on-rhosp13/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OpenStack Ussuri Contributor List",
+ "excerpt":" Thanks to the more than 1,000 contributors from more than 50 countries and 188 organizations that contributed to the OpenStack Ussuri release. https://www.openstack.org/software/ussuri/ ","categories": [],
+ "tags": ["en","nfv","openstack","redhat"],
+ "url": "/ussuri/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Importing alarms from OpenStack Aodh into Sensu Core",
+ "excerpt":"aodh2sensu Imports OpenStack Aodh alarms into Sensu Core Server. Install Via requirements file $ pip3 install -r ./requirements.txt Via pipenv pipfile $ pipenv install Use Usage: aodh2sensu.py [options] Imports OpenStack Aodh alarms into Sensu Core Server. Options: -h, --help show this help message and exit --sensu-url URL if not specified,...","categories": [],
+ "tags": ["en","openstack","monitoring","redhat"],
+ "url": "/aodh2sensu/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series II: Elastic Block Service (EBS)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 4 - AWS EBS Em este lab sobre Elastic Block Service aprenderemos alguns conceitos importantes do armazenamento em blocos: Criação de volumes Anexar volumes a instâncias Configurar volumes dentro das instâncias Formatação Criação do sistema de arquivos Montar o volume Pre-reqs Na...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws2-ebs/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series III: Simple Storage Service (S3)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 5 - AWS S3 Em este lab sobre Simple Storage Service (S3) aprenderemos alguns conceitos importantes do armazenamento de objetos: Criação de buckets Criação de objetos Controle de permissões de acesso Hospedagem de sites estáticos Criação do bucket Accessar o serviço S3:...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws3-s3/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei Certificate Training Program",
+ "excerpt":"A Huawei está oferecendo treinamentos digitais gratuitos, trazendo para o Brasil o Huawei Certificate Training Program, um programa de treinamentos para realizar os cursos preparatórios das certificações nível Associate, testes de qualificação e solicitar um voucher para realizar a prova sem custo (que normalmente tem um valor de $200). São...","categories": [],
+ "tags": ["cert","huawei","networks","pt"],
+ "url": "/haina-brazil/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series IV: Auto Scaling",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 9 - AWS Autoscaling Usaremos a imagem oficial Amazon Linux para aprender alguns conceitos importantes de autoscaling: launch configuration templates autoscaling groups scaling policies Criando o launch template Acessar o serviço EC2: Criar um novo launch template: Escolher a imagem do Amazon...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws4-autoscaling/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series V: Elastic Container Service (ECS)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 3 - AWS ECS Criando a instância Usaremos a imagem josecastillolema/api hospedada no Docker Hub para aprender alguns conceitos importantes do Elastic Container Service: Deploy de containers no ECS Mapeamento de portas Memory limits Acessar o serviço ECS: Lançar o assistente de...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws5-ecs/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series VII: Elastic Beanstalk (EB)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 6 - AWS Elastic Beanstalk Em este lab sobre Elastic Beanstalk (EB) aprenderemos alguns conceitos importantes da camada de plataforma da AWS: Deploy de aplicações Plataformas/entornos de execução disponíveis Logging Monitoramento Pre-reqs git python3 pip3 Se não tiver os pre-reqs na máquina...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws7-eb/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Academy",
+ "excerpt":"Benefícios do programa Acesso ao currículo criado pela AWS: O currículo pronto para ensino permite que as instituições membro incorporem a instrução em seu catálogo de cursos. As atualizações regulares da AWS refletem o ritmo da inovação e as melhores práticas da computação em nuvem. Crie habilidades alinhadas à AWS...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/aws-academy/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series VIII: Elastic Beanstalk (EB) com Spring Boot",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 10 - AWS Elastic Beanstalk com Spring Boot Em este lab sobre Elastic Beanstalk (EB) aprenderemos alguns conceitos importantes da camada de plataforma da AWS: Deploy de aplicações Plataformas/entornos de execução disponíveis Logging Monitoramento Deploy local Clonar o repositório: git clone https://github.com/josecastillolema/fiap...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws8-eb-springboot/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series XII: DynamoDB",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 8 - AWS DynamoDB Em este lab sobre DynamoDB aprenderemos alguns conceitos importantes na criação de DBaaS NoSQL: Criação de tabelas Inserção/consulta de dados via console Inserção/consulta via código python Aproveitaremos para ver alguns conceitos importantes sobre Identity and Access Management (IAM):...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws12-dynamodb/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series IX: CodePipeline",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 7 - AWS CP Em este lab sobre Code Pipeline aprenderemos alguns conceitos importantes da criação de pipelines: Criação do pipeline Automação de deploy no Beanstalk Pre-reqs A aplicação do lab de Beanstalk precisa estar no ar: Criação de um repositório no...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws9-cp/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei ICT Academy",
+ "excerpt":"A Huawei ICT Academy é um programa de parceria sem fins lucrativos que autoriza universidades e faculdades a oferecer cursos de Certificação Huawei para estudantes. Este programa atua como uma ponte entre empresas e academia para construir um ecossistema de talentos para as indústrias de TIC. Desde sua afiliação no...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/haina/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series XIV: Elastic MapReduce (EMR)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 12 - Elastic MapReduce Em este lab sobre EMR aprenderemos alguns conceitos da plataforma de Big Data as a Service da AWS: Criação de cluster Acesso via WEB e SSH/CLI Monitoramento Configuração do serviço Acessar o serviço EMR: Iniciar a criação do...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws14-emr/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series X: API Gateway",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 11 - Amazon API Gateway Em este lab sobre API Gateway aprenderemos alguns conceitos do API gateway da plataforma da AWS: Configuração de rotas Throttling (limitação do número de requisições por segundo) Monitoramento Pre-reqs Dois URLs accessíveis. Por exemplo, dois apps no...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws10-apigw/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series XV: Lambda",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 13 - Amazon Lambda Em este lab sobre Lambda aprenderemos alguns conceitos do modulo de Function as a Service (FaaS) / serverless da plataforma da AWS: Criação de funções Lambda Teste de funções Criação de triggers (via API Gateway) Pre-reqs A seguinte...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws15-lambda/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: Multicloud Architecture",
+ "excerpt":"A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços. Além de ser uma solução inovadora, a Cloud...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/shift-multicloud/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "My code is open",
+ "excerpt":" ","categories": [],
+ "tags": ["redhat"],
+ "url": "/mycodeisopen/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Webinar: Working with ONF to transform mobile and broadband networks in LATAM 2020",
+ "excerpt":"Don’t miss this virtual event sponsored by the ONF LATAM Ambassador team. In this webinar you will learn about the Open Networking Foundation (ONF), a non-profit, operator-led consortium that is focused on driving transformation of network infrastructure and carrier business models around the world. The ONF serves as the umbrella...","categories": [],
+ "tags": ["en","events","networks","nfv","onf","sdn","webinar"],
+ "url": "/onf-webinar/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Global Certification Challenge",
+ "excerpt":"A AWS está oferecendo de forma gratuita a certificação AWS Cloud Practitioner, que normalmente tem um valor de $200, como parte da iniciativa AWS re:Invent 2020 durante os meses de outubro e novembro de este ano. Segue o link para a solicitação do voucher, que demora até 3 dias úteis,...","categories": [],
+ "tags": ["aws","cert","pt"],
+ "url": "/aws-cert-challenge/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA-Routing & Switching - 14th edition",
+ "excerpt":" Uma vez aprovado no processo seletivo seguir as seguintes instruções para efetuar o cadastro na plataforma EaD Huawei Talent Online. ","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-14/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "TOTVS TALKS #09 - A computação em nuvem no Brasil",
+ "excerpt":"O TOTVS TALKS Podcast é uma parceria entre a BandNews FM e a TOTVS. Aqui, você ouve conversas sobre tecnologia – ferramentas, soluções e caminhos; cada mês, um novo assunto. Os episódios novos saem sempre no dia 20 e você encontra o programa no site da BandNews FM e no...","categories": [],
+ "tags": ["events","podcast","pt"],
+ "url": "/totvs-talks/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Caio Ferreira - canal de YouTube",
+ "excerpt":" Gostaria de recomendar o canal de YouTube do meu amigo Caio Ferreria. No canal podem encontrar videos sobre: AWS Fluxos de pagamento Restcomm/Mobicents Parabéns pelo canal Caio! ","categories": [],
+ "tags": ["aws","networks","pt","youtube"],
+ "url": "/caio-youtube/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Arquitetura de Soluções - Online (ASOO)",
+ "excerpt":" Fase 4: On the Clouds Gestão Financeira de TI Bimodal IT & Sourcing Arquitetura em MultiCloud (AWS / Google Cloud / Azure / IBM Cloud) ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-asoo/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei Talent: Cadastro na plataforma",
+ "excerpt":"Para acompanhar os cursos HCIA Routing & Switching, uma vez aprovado no processo seletivo é necessária a criação de uma conta na plataforma Huawei Talent Online. A plataforma on-line da Huawei ICT Academy fornece um suporte digital integrado com compartilhamento de recursos, suporte ao ensino, interação com a comunidade e...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/haina-talent/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 2nd edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Intel Network Builders University",
+ "excerpt":"Intel® Network Builders University is a comprehensive network functions virtualization (NFV) and software defined networking (SDN) training program. The university includes a broad collection of online content training to help technical professionals in the network industry to improve their knowledge of key Intel® technologies, industry trends, and technical aspects of...","categories": [],
+ "tags": ["en","networks","nfv","openstack","sdn"],
+ "url": "/intel-network-builders/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Co.Lab: Open Source Stories",
+ "excerpt":"Na Red Hat, acreditamos no potencial da tecnologia para educar, ensinar, evoluir e transformar o mundo. Foi com esse propósito que a Red Hat, em parceria com a prefeitura de Boston, junto à organização Sociedad Latina, iniciou o projeto Co.Lab com um objetivo: ensinar às crianças e jovens os fundamentos...","categories": [],
+ "tags": ["iot","pt","redhat"],
+ "url": "/colab/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Happy new year!",
+ "excerpt":" ","categories": [],
+ "tags": ["en","es","redhat","pt"],
+ "url": "/newyear/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Certified Calico Operator",
+ "excerpt":"I would like to strongly recomend the Certified Calico Operator: Level 1 course for everyone interested in Kubernetes networking. This free and self-paced course will arm you with the knowledge you need to understand how Kubernetes networking works, how to configure and manage a Calico network, and how to secure...","categories": [],
+ "tags": ["cert","en","iac","networks","nfv","openshift","sdn"],
+ "url": "/calico/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: Multicloud Architecture - 2nd edition",
+ "excerpt":"A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços. Além de ser uma solução inovadora, a Cloud...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/shift-multicloud-2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Aviatrix Certified Engineer - Multicloud",
+ "excerpt":"I would like to strongly recomend the Aviatrix Certified Engineer - Multi-Cloud Network Associate Course for anyone interested in public cloud networking (in AWS, Azure, GCP and OCI) and multicloud arquitecture. Training and exam are free using code ACEHOLIDAY through February 28th. UPDATE 1: Training and exam are free using...","categories": [],
+ "tags": ["aws","azure","cert","en","iac","networks","sdn","terraform"],
+ "url": "/aviatrix/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA 5G - 1st edition",
+ "excerpt":"PROCESSO SELETIVO PARA CURSO DE FORMAÇÃO HCIA 5G - Turma 01/2021 Oportunidade ímpar à comunidade: formação GRATUITA para certificação em redes 5G. A Coordenação do projeto Instituto Metrópole Digital - UFRN – 5G Training RN abre inscrições para o processo seletivo para participação na primeira turma do curso de formação...","categories": [],
+ "tags": ["cert","classes","huawei","iot","networks","nfv","pt","sdn"],
+ "url": "/hcia-5g/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series I: Virtual machines",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 1 - Virtual Machines Criando a instancia Usaremos a imagem oficial Ubuntu Server para aprender alguns conceitos importantes de máquinas virtuais: flavors security groups cloud-init Acessar o serviço Virtual machine: Sempre que for criar novos recursos, selecione como subscription Azure for students e...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure1-vm/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series II: Containers",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 2 - Containers Criando a instância Usaremos a imagem josecastillolema/api hospedada no Docker Hub para aprender alguns conceitos importantes dos Azure Containers: Deploy de containers no Azure Mapeamento de portas Memory limits Acessar o serviço Container Instances: Parametrização da instância: Imagem: josecastillolema/api hospedada...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure2-container/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series III: Disks",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 2 - Azure Disks Em este lab sobre disks aprenderemos alguns conceitos importantes do armazenamento em bloco: Criação de volumes Anexar volumes a instâncias Configurar volumes dentro das instâncias Formatação Criação do sistema de arquivos Montar o volume Pre-reqs Na maquina virtual do...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure3-disk/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP MBA em Engenharia de Dados (ABD)",
+ "excerpt":" DataBase as a Service - DBaaS ","categories": [],
+ "tags": ["aws","azure","classes","fiap","pt"],
+ "url": "/fiap-abd/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series XIII: Relational Database Service (RDS)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 5 - AWS RDS Em este lab sobre Relational Database Service (RDS) aprenderemos alguns conceitos importantes na criação de serviços de DBaaS NoSQL: Criação de instâncias RDS Plataformas/entornos disponíveis Logging Monitoramento Criação da instância RDS Acessar o serviço RDS: Criar um novo...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws13-rds/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series IV: Blob storage",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 4 - Blob storage Em este lab sobre Azure Blob Storage aprenderemos alguns conceitos importantes do armazenamento de objetos: Criação de containers Criação de objetos (blobs) Controle de permissões de acesso Hospedagem de sites estáticos Criação do container Accessar o serviço Storage account:...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure4-blob/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series V: App services",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 5 - App Service Plans Em este lab sobre App Service Plans aprenderemos alguns conceitos importantes da camada de plataforma da Azure: Deploy de aplicações Plataformas/entornos de execução disponíveis Logging Monitoramento Estratégias de release Blue-Green Canary Pre-reqs Uma VM com a imagem Ubuntu...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure5-app/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 3rd edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-3/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series VI: CloudFormation",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 14 - AWS CloudFormation Em este lab sobre CloudFormation aprenderemos alguns conceitos importantes do paradigma de Infrastructure as Code (IaC): Criação de stacks Parametrização Monitoramento Criaremos um stack que configura um servidor WordPress. Criação do stack Accessar o serviço CloudFormation e criar...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws6-cloudformation/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA 5G - 2nd edition",
+ "excerpt":"A Coordenação do projeto IMD/UFRN – 5G Training RN abre inscrições para o processo seletivo para participação na segunda turma do curso de formação HCIA 5G, promovido em parceria entre o IMD e a Huawei Technologies Co. LTD. São 100 vagas disponíveis, gratuito e a distância. Venha obter formação gratuita...","categories": [],
+ "tags": ["cert","classes","huawei","iot","networks","nfv","pt","sdn"],
+ "url": "/hcia-5g-2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Azure series VI: Azure Pipeline",
+ "excerpt":"Serie de artigos sobre Microsoft Azure. Lab 6 - Azure Pipelines Em este lab sobre Azure Pipelines aprenderemos alguns conceitos importantes na criação de pipelines: Criação do pipeline Automação de deploy no Azure Pipelines Pre-reqs Um application service no ar, seguindo os passos do lab 05 - Application Services Criação...","categories": [],
+ "tags": ["azure","classes","fiap","pt","series"],
+ "url": "/azure6-pipeline/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Summit 2021",
+ "excerpt":" Chegou o Red Hat Summit 2021, agora em série. Registre-se agora sem custo e aproveite as oportunidades de inovação, colaboração e aprendizagem que só o principal evento de código aberto do mundo pode oferecer. Inscreva-se já: https://red.ht/3vyU5Wv #RHSummit ","categories": [],
+ "tags": ["ansible","events","openshift","pt","redhat"],
+ "url": "/rh-summit21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA-Routing & Switching - 15th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 15.º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Routing & Switching V2.5 até o dia 26/11/2020 às 12h, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. O curso ocorrerá dos dias 27/03/21...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-15/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Azure Virtual Training Days",
+ "excerpt":"By participating in any of the following Microsoft Virtual Training Days: Microsoft Azure Virtual Training Day: Fundamentals Microsoft Azure Virtual Training Day: Data Fundamentals Microsoft Azure Virtual Training Day: AI Fundamentals You’ll be eligible to take the following certifications exam at no cost: Microsoft Azure Fundamentals (AZ-900) Microsoft Azure Data...","categories": [],
+ "tags": ["azure","cert","en"],
+ "url": "/azure-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Confluent Fundamentals Accreditation - Apache Kafka",
+ "excerpt":"I would like to strongly recomend the Confluent Fundamentals for Apache Kafka® course and Confluent Fundamentals Accreditation certification for anyone interested learning more about the Apache Kafka project. Training and exam certification are free. Course Objectives Gain an understanding of Apache Kafka® and the Confluent Platform Explore use cases Receive...","categories": [],
+ "tags": ["cert","en","iac","openshift","redhat"],
+ "url": "/kafka/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Webinar: Working with ONF to transform mobile and broadband networks in LATAM 2021",
+ "excerpt":"Don’t miss this virtual event sponsored by the ONF CALA Ambassador team. In this webinar you will learn about the Open Networking Foundation (ONF), a non-profit, operator-led consortium that is focused on driving transformation of network infrastructure and carrier business models around the world. The ONF serves as the umbrella...","categories": [],
+ "tags": ["en","es","events","networks","nfv","onf","pt","sdn","webinar"],
+ "url": "/onf-webinar-21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "GitLab Certified Associate",
+ "excerpt":"Usually priced at USD $650 it’s available for free until April 30, 2021. Steps required: Create account on the GitLab Learn platform 1.1 purple login button 1.2 purple signup button Add the associate test pathway to the basket In Payment step apply discount code E6B8A234458AE3D795 Once signed up you have...","categories": [],
+ "tags": ["cert","en","iac"],
+ "url": "/gitlab/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Power Platform Virtual Training Day",
+ "excerpt":"By participating in the following Microsoft Virtual Training Days: Microsoft Power Platform Virtual Training Day: Fundamentals You’ll be eligible to take the following certification exam at no cost: Microsoft Certified: Power Platform Fundamentals (PL-900) Power Platform Fundamentals Microsoft Power Platform Virtual Training Day: Fundamentals will cover everything you need to...","categories": [],
+ "tags": ["azure","cert","en"],
+ "url": "/power-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Notes for HCIA-IA",
+ "excerpt":"Some of the notes I prepared studying for the Huawei Certified ICT Associate - Artificial Intelligence (HCIA-IA) exam. Notes Deep learning I used the Coggle platform, a collaborative mind maps & flow charts tool. Huawei Cloud Enterprise Intelligent (EI) Services These were made by my studying collegues using Miro, an...","categories": [],
+ "tags": ["cert","en","huawei"],
+ "url": "/hcia-ia-notes/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: Multicloud Architecture - 3rd edition",
+ "excerpt":"A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços. Além de ser uma solução inovadora, a Cloud...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/shift-multicloud-3/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA-Routing & Switching - 16th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 16º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Routing & Switching V2.5, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-16/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Community Builder",
+ "excerpt":"AWS Community Builders program I am glad to be part of the AWS Community Builders program. The program offers technical resources, mentorship, and networking opportunities to AWS enthusiasts and emerging thought leaders who are passionate about sharing knowledge and connecting with the technical community. Throughout the program, subject matter experts...","categories": [],
+ "tags": ["aws","en"],
+ "url": "/aws-community-builder/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "GitOps Summit 2021",
+ "excerpt":"Virtual Experience June 22, 2021 #GitOpsSummit Cloud native technologies enable organizations to scale rapidly and deliver software faster than ever before. GitOps, operation by pull request, is a powerful developer workflow that enables organizations to unlock the promise of cloud native continuous delivery. The GitOps Summit brings together topflight talent...","categories": [],
+ "tags": ["en","events"],
+ "url": "/gitops-summit-21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP Meetup #9 - Kubernetes & Service Mesh",
+ "excerpt":"Descrição do evento De acordo com o Gartner, mais de 85% das organizações executarão aplicativos em contêineres no Kubernetes até 2025. Por isso alguns profissionais definem que o Kubernetes será o “sistema operacional” da nuvem durante a transformação de aplicações para a Arquitetura de Microsserviços. Práticas DevOps estão sendo adotadas,...","categories": [],
+ "tags": ["events","fiap","iac","openshift","pt"],
+ "url": "/fiap-meetup/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "edX: Introduction to Magma",
+ "excerpt":"Introduction to Magma: Cloud Native Wireless Networking Learn about the Magma project, an open source implementation of a mobile network core. Magma supports diverse radio technologies, including LTE, 5G and WiFi, and is particularly relevant for extending network access into remote, sparsely populated areas. DURATION 10 weeks DEDICATION 1-2 hours...","categories": [],
+ "tags": ["en","networks","nfv","sdn"],
+ "url": "/edx-magma/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 4rd edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-4/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Cognitive Class @ai",
+ "excerpt":"Cognitive Class @ai is a platform for learning leading-edge technologies: blockchain, data science, AI, Cloud, Serverless, Docker, Kubernetes and more … Earn certificates and badges Free Learning paths Big data fundamentals Data science fundamentals Scala programming for data science Deep learning Hadoop fundamentals Spark fundamentals Containers, k8s and Istio on...","categories": [],
+ "tags": ["cert","en","iot","networks","openshift"],
+ "url": "/cognitive-class/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Running FRR in K8s/OpenShift",
+ "excerpt":"FRR is a fully featured, high performance, free software IP routing suite included in RHEL 8. We will be using this FRR image for establishing Bidirectional Forwarding Detection (BFD) sessions. First, let’s define the proper config map: apiVersion: v1 data: daemons: | bgpd=no ospfd=no ospf6d=no ripd=no ripngd=no isisd=no pimd=no ldpd=no...","categories": [],
+ "tags": ["en","networks","openshift","redhat"],
+ "url": "/frr-k8s/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Educate: Cadastro na plataforma",
+ "excerpt":"Para acompanhar alguns cursos da FIAP, uma vez aprovado no processo seletivo é necessária a criação de uma conta na plataforma AWS Educate. A plataforma on-line do AWS Educate fornece um suporte digital integrado com compartilhamento de recursos, suporte ao ensino, interação com a comunidade e acesso ao console AWS...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/aws-educate-login/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA-Routing & Switching - 17th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 17º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Routing & Switching V2.5, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-17/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 5th edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-5/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Linux Foundation Training & Certification courses",
+ "excerpt":"Linux Foundation Training & Certification provides free online-learning courses on a range of open source topics from Linux to blockchain, networking to cloud, and everything in between. Earn certificates and badges Free Learning path Inclusive Speaker Orientation (LFC101) Inclusive Open Source Community Orientation (LFC102) A Beginner’s Guide to Open Source...","categories": [],
+ "tags": ["cert","en"],
+ "url": "/lf-courses/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PerfConf Fall 2021",
+ "excerpt":"Proceedings ICNI2 OVN Telco 5G perf/scale There has been an effort in the past months to test OVN Intelligent Container Network Interface 2 (ICNI2) implementations at scale. As part of the testing, FRRouting was used to simulate comercial load balancers and to establish BFD sessions with OVN. The ideia is...","categories": [],
+ "tags": ["en","events","networks","nfv","openshift","redhat","sdn"],
+ "url": "/perfcon21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Essentials for Istio by Solo.io",
+ "excerpt":"Get certified Istio is the most popular service mesh deployed into production across the cloud-native ecosystem, and for good reason. It’s feature rich, open-source, and most importantly, battle proven. Istio provides the foundational pieces to implement zero-trust networking, get deeper observability into a distributed system, and smart routing control for...","categories": [],
+ "tags": ["cert","en","iac","openshift"],
+ "url": "/soloio-istio/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing - 2nd edition",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev-2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Tendências de mercado na área de TIC",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","events","huawei","pt","webinar"],
+ "url": "/tendencias-tic/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "SEMINF 2021: 5G e os impactos na atuação do profisional de TI",
+ "excerpt":"II SEMANA ACADÊMICA DE INFORMÁTICA - SEMINF 2021 5G E OS IMPACTOS NA ATUAÇÃO DO PROFISSIONAL DE TI A II Semana Acadêmica de Informática - SEMINF 2021 acontecerá nos dias 18 de outubro a 22 de outubro de 2021, na modalidade virtual, tendo como tema: 5G e os Impactos na...","categories": [],
+ "tags": ["events","networks","pt","webinar"],
+ "url": "/seminf21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: Multicloud Architecture - 4th edition",
+ "excerpt":"A Computação em Nuvem está transformando a forma como as organizações investem no mundo digital. Nesse cenário, adotar Cloud Computing no ambiente corporativo é seguir o fluxo tecnológico natural. E se manter sempre à frente quanto à e-science e opções de serviços. Além de ser uma solução inovadora, a Cloud...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/shift-multicloud-4/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Community Day Brasil 2021",
+ "excerpt":" Contagem regressiva para o AWS Community Day Brasil 2021, o maior encontro de grupos de usuários AWS do Brasil! 06/11/2021 às 13hs! As inscrições ainda podem ser feitas aquí. ","categories": [],
+ "tags": ["aws","events","pt","webinar"],
+ "url": "/aws-community-day-21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Ignite Cloud Skills Challenge",
+ "excerpt":"Complete one challenge and earn a free Microsoft Certification exam. Select one challenge that’s right for you – there are 12 challenges to choose from. Once you complete that challenge you will earn a free Microsoft Certification exam which will get delivered on December 7th, 2021. The challenge ends on...","categories": [],
+ "tags": ["azure","cert","en","events"],
+ "url": "/microsoft-ignite/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei ICT Academy Instructor Workshop Brazil 2021",
+ "excerpt":" No dia 09 de Novembro, será realizado um Worshop ao vivo sobre o programa Huawei ICT Academy, com apresentação de alguns casos de universidades parceiras. Participe e aprenda um pouco mais sobre como podemos trabalhar juntos. ","categories": [],
+ "tags": ["cert","classes","events","huawei","pt","webinar"],
+ "url": "/huawey-academy-workshop/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS series XI: Elastic Kubernetes Service (EKS)",
+ "excerpt":"Serie de artigos sobre Amazon Web Services. Lab 15 - AWS EKS Criando o cluster Vamos criar um cluster Kubernetes gerenciado para aprender alguns conceitos importantes do Elastic Kubernetes Service: Geração do arquivo kubeconfig Uso do cliente kubectl Acessar o serviço EKS: Escolher a opção de criação de um novo...","categories": [],
+ "tags": ["aws","classes","fiap","pt","series"],
+ "url": "/aws11-eks/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PHYSICS EU project",
+ "excerpt":"The project PHYSICS (oPtimized HYbrid Space-time servIce Continuum in faaS) is a research project funded by the European Union’s Horizon 2020 research and innovation program under grant agreement No. 101017047. The project began in January 2021 with 14 international partners and is scheduled to end in December 2023. Partners include...","categories": [],
+ "tags": ["en","networks","redhat"],
+ "url": "/physics/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA-Routing & Switching - 18th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 18º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Routing & Switching V2.5, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-18/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei ICT Job Fair Brazil 2021",
+ "excerpt":" ","categories": [],
+ "tags": ["cert","classes","events","huawei","pt"],
+ "url": "/huawey-job-fair-21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Gremlin Certified Chaos Engineering Practitioner (GCCEP)",
+ "excerpt":"Chaos Engineering continues to grow in popularity and is rapidly becoming a job requirement. To help Engineering and Testing teams meet the need, take a look at Gremlin Chaos Engineering Practitioner Certificate Program! The Certificate Program is now the easiest way to demonstrate your Chaos Engineering expertise and increase your...","categories": [],
+ "tags": ["cert","en","iac","openshift","redhat"],
+ "url": "/gremlin-caos/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Open vSwitch and OVN 2021 Fall Conference",
+ "excerpt":"The Open vSwitch and OVN 2021 Fall Conference will be held online Dec. 7 and 8. Talks will be pre-recorded and played back during the conference. It will be used an online system that allows for text-based discussion and Q&A while the talk is being played. It will also be...","categories": [],
+ "tags": ["en","events","networks","nfv","openshift","openstack","redhat","sdn"],
+ "url": "/ovn21/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Certified Calico Operator: eBPF",
+ "excerpt":"I would like to strongly recomend the Certified Calico Operator: eBPF course for everyone interested in eBPF networking. The new CCO-L2-EBPF (Certified Calico Operator: eBPF) course specifically addresses the strengths of eBPF and when it is, or is not, the right choice. It will also help you see how easy...","categories": [],
+ "tags": ["cert","en","iac","networks","nfv","openshift","sdn"],
+ "url": "/calico-ebpf/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "GitOps certified for Argo",
+ "excerpt":"I would like to strongly recomend the GitOps Fundamentals course for everyone interested in GitOps best practices. After you finish this course you will know the fundamentals of GitOps and have practical knowledge of Argo CD. What the Course Covers What is GitOps and why you should adopt it Benefits...","categories": [],
+ "tags": ["cert","en","iac","openshift"],
+ "url": "/gitops-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Istio and Envoy Fundamentals by Tetrate",
+ "excerpt":"I would like to strongly recomend the Istio Fundamentals and Envoy Fundamentals courses from the Tetrate Academy for everyone interested in service mesh arquitectures. Istio Fundamentals A course that enables users to learn Istio easily with concept text, labs, and quizzes. Istio is an open-source service mesh platform that helps...","categories": [],
+ "tags": ["cert","en","iac","openshift"],
+ "url": "/istio-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Happy new year!",
+ "excerpt":" ","categories": [],
+ "tags": ["en","es","redhat","pt"],
+ "url": "/newyear22/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Skill Builder",
+ "excerpt":"Since October 19th, former aws.training site has moved to AWS Training and Certification’s new learning center, AWS Skill Builder. Besides lots of great material and courses, they offer free AWS Certification Official Practice Question Sets. AWS Certification Official Practice Question Sets feature 20 questions developed by AWS to demonstrate the...","categories": [],
+ "tags": ["aws","cert","en"],
+ "url": "/skillbuilder/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kasten - Kubernetes data protection",
+ "excerpt":"I would like to strongly recomend the Kasten courses from the Learning.kaste.io platform to everyone interested in Kubernetes data protection. Labs Introductory KubeCon + CloudNativeCon Special Edition Lab Deploy K10 Backup a data service Delete data Recover K10 Module #1 Build your first Kubernetes Cluster Learn Kubernetes Structure Understand abstractions...","categories": [],
+ "tags": ["cert","en","iac","openshift"],
+ "url": "/kasten/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kudos to ExamTopics",
+ "excerpt":"I have been using the mocks from ExamTopics latelly to prepare to several certification exams and I have to say I found them the best material around. I personally prefer them over exam reviews/practice tests from paid platforms, for the following reasons: the community around free comments for questions: I...","categories": [],
+ "tags": ["cert","en"],
+ "url": "/examtopics/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Certification preparation roadmap",
+ "excerpt":"I would like to share my favourite way to prepare for some certifications. As you can see, I always do (1) the corresponding course and then jump to (2) practice exams. For the practice exams I heavily rely on ExamTopics. AWS Do the corresponding AWS Academy course Do the corresponding...","categories": [],
+ "tags": ["aws","azure","cert","en","huawei","redhat"],
+ "url": "/cert-roadmap/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Curso de Especialização - Tecnologias Habilitadoras para Internet do Futuro",
+ "excerpt":" ","categories": [],
+ "tags": ["aws","classes","networks","pt","sdn"],
+ "url": "/maua-sdn/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 6th edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-6/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing - 3rd edition",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev-3/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "MT101x: Magma Technical Certification Exam",
+ "excerpt":"The purpose of the Magma certification test is to evaluate the technical abilities of engineers to deploy and operate Magma. The test will consist of 25 questions that will test your knowledge of the three main Magma components: the access gateway, the Orc8r, and the network management system. During this...","categories": [],
+ "tags": ["cert","en","networks","nfv","sdn"],
+ "url": "/magma-cert/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kyverno Fundamentals Certification",
+ "excerpt":"I would like to strongly recomend the Kyverno Fundamentals Certification course for everyone interested in Kubernetes security. Kyverno is a policy engine designed for Kubernetes. With Kyverno, policies are managed as Kubernetes resources and no new language is required to write policies. This allows using familiar tools such as kubectl,...","categories": [],
+ "tags": ["cert","en","iac","openshift"],
+ "url": "/kyverno-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IPT curta duração - Cloud Computing",
+ "excerpt":"Curso: CLOUD COMPUTING IPT – USP CURSOS DE ESPECIALIZAÇÃO Carga horária: 40 horas Fundamentos de Computação em Nuvem Microsoft Azure, Amazon AWS e outros players IaaS - Infra como Serviço Storage como Serviço Redes em Nuvem Alocação de Recursos Manutenção e Operação – Abordagem Hands-on – – Aulas Síncronas –...","categories": [],
+ "tags": ["aws","azure","classes","pt"],
+ "url": "/ipt-cloud/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "LOKI",
+ "excerpt":" ","categories": [],
+ "tags": ["es","openshift","openstack","redhat"],
+ "url": "/loki/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Huawei Routing & Switching vs Datacom",
+ "excerpt":" Nesta apresentação serão mostradas as diferenças entre a antiga trilha de certificação Routing & Swithing e sua substituta, Datacom. Será um evento online de uma hora de duração e quem realizar a inscrição pelo link receberá um certificado de participação no evento. ","categories": [],
+ "tags": ["cert","classes","events","huawei","pt","webinar"],
+ "url": "/huawey-rs-vs-datacom/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Certified Trainer (MCT) program",
+ "excerpt":"Become a Microsoft Certified Trainer Microsoft Certified Trainers (MCTs) are the premier technical and instructional experts in Microsoft technologies. Join this exclusive group of worldwide Microsoft technical training professionals and reap the benefits of MCT training certification and membership. You will get exclusive benefits as an MCT including access to...","categories": [],
+ "tags": ["azure","cert","en"],
+ "url": "/mct/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IaC series: Ansible na AWS",
+ "excerpt":"Serie de artigos sobre Infraestructure as a Code (IaC). Lab 15 - Ansible Ansible Pre-reqs Uma VM com a imagem Amazon Linux que será usada como destino do playbook O terminal do AWS Academy Learner Lab será usado como bastion para rodar os playbooks do Ansible Instalação (no terminal do...","categories": [],
+ "tags": ["ansible","aws","classes","fiap","iac","pt","series"],
+ "url": "/iac-ansible-aws/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IaC series: Terraform na AWS",
+ "excerpt":"Serie de artigos sobre Infraestructure as a Code (IaC). Lab 14 - Terraform AWS Provider O Terraform é uma ferramenta para construir, alterar e controlar a infraestrutura de forma segura e eficiente. O Terraform pode gerenciar provedores de serviços existentes e populares como OpenStack, Azure, AWS, Digital Ocean, entre outras,...","categories": [],
+ "tags": ["aws","classes","fiap","iac","pt","series","terraform"],
+ "url": "/iac-terraform-aws/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Innovative Educator (MIE) programs",
+ "excerpt":"About the Microsoft Innovative Educator Programs The Microsoft Innovative Educator (MIE) programs recognize global educator visionaries who are using technology to pave the way for their peers for better learning and student outcomes. These are a variety of programs to help both educators who are just beginning this journey, as...","categories": [],
+ "tags": ["azure","cert","classes","en"],
+ "url": "/mie/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "SDRAN-in-a-Box",
+ "excerpt":"SDRAN-in-a-Box (RiaB) is an ONF project that consists in a SD-RAN cluster which is able to operate within a single host machine . It provides a development/test environment for developers/users in ONF SD-RAN community. RiaB deploys the complete SD-RAN infrastructure over Kubernetes: the EPC (OMEC) an emulated RAN (CU/DU/UE) the...","categories": [],
+ "tags": ["ansible","aws","en","networks","nfv","onf","sdn"],
+ "url": "/riab/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Aether-in-a-Box",
+ "excerpt":"Aether-in-a-Box (AiaB) is an ONF project that provides an easy way to deploy Aether’s SD-CORE and Runtime Operational Control (ROC) components, and then run basic tests to validate the installation. AiaB can be set up with a 4G or 5G SD-CORE. In either case, SD-CORE configuration can be done with...","categories": [],
+ "tags": ["ansible","aws","en","networks","nfv","onf","sdn"],
+ "url": "/aiab/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 7th edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-7/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA Datacom - 19th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 19º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Datacom V1.0, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-19/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Exames de Certificação AWS com desconto",
+ "excerpt":" A AWS está com descontos de 50% a 85% nas certificações: AWS Certified Cloud Practitioner - 85% de desconto AWS Certified Developer Associate - 50% de desconto AWS Certified Solutions Architect Associate - 50% de desconto Mais informações no seguinte link. Passo a passo de como obter o desconto: ","categories": [],
+ "tags": ["aws","cert","pt"],
+ "url": "/aws-certs-desconto/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing - 4th edition",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev-4/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Learning Badges",
+ "excerpt":"What is an AWS Learning Badge? AWS Learning badges are credentials that offer these benefits: AWS digital badges demonstrate your knowledge and skills for specific AWS cloud topics, such as Object Storage AWS digital badges are shareable on social networks to help you stand out to recruiters and prospective hiring...","categories": [],
+ "tags": ["aws","cert","en"],
+ "url": "/aws-learning-badges/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Digital credentials for Red Hat Certified Professionals",
+ "excerpt":"Red Hat Digital Credentials recognize and reward learning achievements, community contributions and ecosystem engagement to drive the adoption of Red Hat technologies and to support customer success. A digital credential is earned upon meeting defined criteria, and Red Hat digital credentials can represent many types of achievements. A Red Hat...","categories": [],
+ "tags": ["ansible","cert","en","openshift","openstack","redhat","sds"],
+ "url": "/rh-creddly/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Microsoft Security Virtual Training Day",
+ "excerpt":"By participating in the following Microsoft Virtual Training Days: Microsoft Security Virtual Training Day: Security, Compliance, and Identity Fundamentals You’ll be eligible to take the following certification exam at no cost: Microsoft Security, Compliance, and Identity Fundamentals (SC-900) Security Fundamentals Learn the basic concepts of security, compliance and identity at...","categories": [],
+ "tags": ["azure","cert","en"],
+ "url": "/security-fundamentals/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Summit 2022",
+ "excerpt":" When you join IT leaders and peers at our no-cost virtual event, you can chart your hybrid cloud strategy and our open source future. Check out the available sessions to explore ways you can participate in the Red Hat® Summit experience taking place May 10-11. Virtual registration is live. ","categories": [],
+ "tags": ["ansible","en","events","openshift","redhat"],
+ "url": "/rh-summit22/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Evolução tecnológica do Wi-Fi 6",
+ "excerpt":" Evento on-line promovido pela Huawei e FiberX, onde será apresentado o seguinte tema: Evolução Tecnológica do Wi-fi 6. O evento ocorrerá em 26/04/2022 às 16h. Será um evento online de uma hora de duração e quem realizar a inscrição pelo link receberá um certificado de participação no evento. ","categories": [],
+ "tags": ["events","huawei","pt","webinar"],
+ "url": "/wifi6/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Programa EU CAPACITO",
+ "excerpt":"Em conjunto com o EU CAPACITO, programa liderado pelo Instituto IT Mídia, a FIAP oferece 20 Nano Courses gratuitos. São cursos de 40 a 160 horas nas áreas de Tecnologia, Inovação e Negócios. Cadastre-se e escolha os seus. Blockchain Advanced (100 horas) Business Intelligence (40 horas) Customer Experience Management (40...","categories": [],
+ "tags": ["classes","fiap","pt"],
+ "url": "/eu-capacito/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "II CATI: Congresso acadêmico de tecnologia da informação",
+ "excerpt":"Nuvens híbridas e soluções Red Hat ","categories": [],
+ "tags": ["events","pt","webinar"],
+ "url": "/cati22/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Estruturando redes com Múltiplos Fornecedores como uma Rede Neutra",
+ "excerpt":"Este evento vai, ao mesmo tempo, mostrar como estruturar múltiplos serviços, de múltiplos fabricantes e rentabilizar esta estrutura unificada ao alugá-la para terceiros. Tudo com uma gestão simples, centralizada e econômica. Programa: Venko - Desafios na Construção de Redes Multi-Vendor TIP/ONF - Padronização e Soluções Abertas Intraway - Solução de...","categories": [],
+ "tags": ["events","networks","nfv","onf","pt","sdn"],
+ "url": "/venko/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PerfConf Spring 2022",
+ "excerpt":"Proceedings MetalLB Perf&Scale Testing MetalLB is a load-balancer implementation for bare metal Kubernetes clusters, using standard routing protocols (like BGP). For OCP 4.10, MetalLB speaker’s implementation was reimplemented into FRR and support for BGP was added as a GA feature. In this talk, we will present the results of the...","categories": [],
+ "tags": ["en","events","networks","nfv","openshift","redhat","sdn"],
+ "url": "/perfcon22/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS - Mulheres em Cloud",
+ "excerpt":"Sabemos que a tecnologia tem um poder transformador quando aliada à educação e podemos usá-la como ferramenta nos impactos positivos na luta de igualdade social. A AWS apoia uma força de trabalho STEM (abordagem interdisciplinar inovadora que engloba temas como ciências, tecnologia, engenharia e matemática) como uma comunidade global, diversificada...","categories": [],
+ "tags": ["aws","classes","fiap","pt"],
+ "url": "/women-cloud/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Giveback Program",
+ "excerpt":"The Red Hat Giveback Program is an incentive program to recognize an associate who goes above-and-beyond their role-based responsibilities and makes contributions which impact Red Hat. ","categories": [],
+ "tags": ["en","redhat"],
+ "url": "/rh-giveback/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Partner Network",
+ "excerpt":"The AWS Partner Network (APN) is a global community of partners that leverages programs, expertise, and resources to build, market, and sell customer offerings. This diverse network features 100,000 partners from more than 150 countries. As an AWS Partner, you are uniquely positioned to help customers take full advantage of...","categories": [],
+ "tags": ["aws","cert","en"],
+ "url": "/apn/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Educate relaunch",
+ "excerpt":"AWS Educate is now open to any individual, regardless of where they are in their education, technical experience, or career journey. AWS Educate offers hundreds of hours of self-paced training and resources for new-to-cloud learners—including hands-on labs in the AWS Management Console. The platform guides you to targeted training content...","categories": [],
+ "tags": ["aws","cert","en"],
+ "url": "/educate-relaunch/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "baseline-operator",
+ "excerpt":"baseline-operator The baseline-operator provides a way to run stress-ng workloads on Kubernetes in various deployment configurations. It is intended to create an artificial baseline load in a Kubernetes cluster in order to be able to run other Kubernetes tests in more realistic conditions (performance, cluster upgrade, etc.). Use Create a...","categories": [],
+ "tags": ["en","openshift"],
+ "url": "/baseline-operator/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 8th edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-8/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Red Hat Research",
+ "excerpt":"About Red Hat Research connects Red Hat engineers with professors, researchers, and students to bring great research ideas into open source communities. Our activities around the world have produced grants from government and industry, papers at top conferences, and results that have landed in open source projects of all kinds....","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/rh-research/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing - 5th edition",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev-5/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "HCIA Datacom - 20th edition",
+ "excerpt":"Informamos que estão abertas as inscrições do 20º Treinamento em Tecnologia de Informação e Comunicação convênio USP e HUAWEI – HCIA – Datacom V1.0, totalmente gratuito e virtual. As inscrições podem ser realizadas por este link. Vale ressaltar que serão distribuídos vouchers para o exame de certificação Huawei para os...","categories": [],
+ "tags": ["cert","classes","huawei","networks","pt"],
+ "url": "/hcia-20/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "ICOS EU project",
+ "excerpt":"The project The unstoppable proliferation of novel computing and sensing device technologies, and the ever-growing demand for data-intensive applications in the edge and cloud, are driving the next wave of transformation in computing systems architecture. The resulting paradigm shift in computing is centered around dynamic, intelligent and yet seamless interconnection...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/icos/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PHYSICS 4th General Assembly",
+ "excerpt":"The 4th PHYSICS project General Assembly meeting was held July 4-6, 2022, hosted by RYAX in Athens, Greece. During the meeting, partners analyzed the project’s growth and had the opportunity to participate in person or virtually in discussions about the next goals of the project. All the work packages of...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/physics-ga4/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Foundations - 9th edition",
+ "excerpt":"O AWS Academy Cloud Foundations (Fundamentos de nuvem da AWS Academy) é destinado a profissionais interessados em aperfeiçoar seus conhecimentos sobre computação em nuvem e AWS, e àqueles que gostariam de obter a certificação da Amazon – AWS Certified Cloud Practitioner (CLF-01). O curso oferece uma visão geral detalhada dos...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-foundations-9/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "ICOS 1st General Assembly",
+ "excerpt":"22 leading European organizations from 11 countries join forces to tackle the main challenges of the IoT-edge-cloud paradigm, proposing an approach to embed a set of functionalities and define a brand new IoT-edge-Cloud Operating System (ICOS). Barcelona, Spain. November 2022. Coordinated by the Research and Innovation hub of the Atos...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/icos-ga1/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "FIAP SHIFT: AWS Academy Cloud Developing - 6th edition",
+ "excerpt":"Nosso foco é formar profissionais que dominem o desenvolvimento em Cloud. Você vai aprender a utilizar AWS SDK e a identificar as melhores práticas para criar aplicativos na nuvem AWS. Também vai se preparar para o exame de certificação AWS Certified Developer - Associate (DVA-C01). Uma jornada com 40 horas...","categories": [],
+ "tags": ["aws","cert","classes","fiap","pt"],
+ "url": "/shift-aws-dev-6/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "AWS Training and Certification - AWS Certified Global Community",
+ "excerpt":"The AWS Certified Global community is a network of certified AWS professionals. Interact, participate in challenges, get advice from peers and industry experts, win swag, and more. Last week I was featured in the Expert’s Exclusive series, where each week it is published an interview with one of the community...","categories": [],
+ "tags": ["aws","cert","en"],
+ "url": "/aws-certified-global-community/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "RHR talks: PHYSICS EU project",
+ "excerpt":"Join Red Hat Research for the next Research Days event, PHYSICS EU Project: Advancing FaaS applications in the cloud continuum on November 16, 2022, from 3PM to 4:30PM CEST. The Function-as-a-Service (Faas) paradigm offers cloud service providers and application designers speed, simplicity, and efficiency, so long as they have accessible...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/rhr-talks-physics/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "TIP Academy",
+ "excerpt":"TIP Academy is an online Academy managed by the Telecom Infra Project (TIP) supporting the development of organizations in the telecommunications and IT industry. It provides an open, community-based learning and knowledge-sharing space for organizations and telco professionals, building an ecosystem around open, disaggregated solutions. Courses Why Open RAN? This...","categories": [],
+ "tags": ["cert","en","networks","nfv","onf","sdn"],
+ "url": "/tip-academy/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Happy new year!",
+ "excerpt":" ","categories": [],
+ "tags": ["en","es","redhat","pt"],
+ "url": "/newyear23/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Running OVN-Kubernetes on a preexisting kind cluster",
+ "excerpt":"OVN-Kubernetes is a CNI for Kubernetes based on the Open Virtual Network (OVN) project. kind (Kubernetes in Docker) deployment of OVN kubernetes is a fast and easy means to quickly install and test kubernetes with OVN kubernetes CNI. The value proposition is really for developers who want to reproduce an...","categories": [],
+ "tags": ["en","networks","openshift","redhat"],
+ "url": "/ovnk8s-kind/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "The impact of upstreaming research contributions",
+ "excerpt":"Originally published at ICOS blog on January 13, 2023 and at opensource.com on February 3, 2023. By Cara Delia and Leslie Hawthorn, Red Hat Open Source Program Office, Jose Castillo Lema, Red Hat Performance & Scale Engineering Horizon Europe emphasizes open science and open source technology. The program evolved from...","categories": [],
+ "tags": ["en","redhat","research"],
+ "url": "/icos-blog/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "CODECO project kick off",
+ "excerpt":"Kick off of the Horizon Europe CODECO in the Munich Highlight Towers, on 16th and 17th of January 2023. The CODECO project proposes a unique, smart, and cross-layer orchestration between the decentralised data flow, computation, and networking services, to address Edge-Cloud challenges derived from the rising Internet and IoT service...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/codeco-kickoff/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kubernetes control plane scale testing with Kubemark",
+ "excerpt":"Continuation of Michael McCune (@elmiko) notes on Setting Up a Development Environment for the Cluster API Kubemark Provider, Automating My Hollow Kubernetes Test Rig and DevConf.cz 2022 Testing at Scale with Cluster API and Kubemark (demo). Kubemark is a performance testing tool which allows users to run experiments on simulated...","categories": [],
+ "tags": ["en","networks","openshift","redhat"],
+ "url": "/kubemark/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "OVN-Kubernetes Multiple External Gateway local setup",
+ "excerpt":"Steps to set up a local environment with OVN Kubernetes Multiple External Gateway capability (also known as Intelligent CNI 2.0 or iCNI2.0) and a FRRRouting (FRR) pod acting as external gateway. Kind setup First let us create a local kind cluster with ONV-Kubernetes as CNI: $ git clone https://github.com/ovn-org/ovn-kubernetes.git $...","categories": [],
+ "tags": ["en","networks","openshift","redhat"],
+ "url": "/icni2/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Legends of Linux Trivia",
+ "excerpt":"How well do you know Linux? Red Hat is offering three nifty badges for Linux lovers and badge collectors alike. Successfully complete a single Red Hat quiz to earn the badge of your choice below. Or complete them all to earn all three. Sounds pretty easy, right? Well, there is...","categories": [],
+ "tags": ["cert","en","redhat"],
+ "url": "/linux-trivia/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "PerfConf Spring 2023",
+ "excerpt":"Proceedings (Control-plane) testing at scale with Cluster API and Kubemark Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes (that run as pods in an external management cluster). What this means is that the nodes do not actually run...","categories": [],
+ "tags": ["en","events","networks","openshift","redhat","sdn"],
+ "url": "/perfcon23/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "RHR talks: Fluid Network Control and Data Plane Research",
+ "excerpt":"Join Red Hat Research for the next Research Days event, Fluid Network Control and Data Plane Research on April 19, 2023 from 17PM to 18:30PM CEST. New 5G and 6G technologies are raising the top speed for a wireless device up to 1 Tbps, and experts predict 6G will be...","categories": [],
+ "tags": ["en","networks","redhat","research"],
+ "url": "/rhr-talks/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "IFFE Máster en Big Data y Analítica de Negocio (MBD)",
+ "excerpt":"IFFE Máster en Big Data y Analítica de Negocio (MBD) Herramientas analíticas en AWS Cada proyecto se refiere a clases y/o labs realizados en aula. Siéntase libre de desarrollar estos ejemplos, mientras sean válidos, aceptaré pull requests 😄. Lab 01: IaaS - Simple Storage Service (S3) Lab 02: PaaS -...","categories": [],
+ "tags": ["aws","classes","es","iffe"],
+ "url": "/iffe-mbd/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "DevConf.CZ 2023 - Writing a K8s Operator for Knative Functions",
+ "excerpt":"About DevConf.CZ is an annual, free, Red Hat sponsored community conference for developers, admins, DevOps engineers, testers, documentation writers and other contributors to open source technologies. At DevConf.CZ, FLOSS communities sync, share, and hack on upstream projects together. DevConf.cz Mini is a bi-annual, highly focused, local, in-person version of DevConf.cz....","categories": [],
+ "tags": ["en","events","openshift","redhat","research"],
+ "url": "/devconf23/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "NetSoft 2023 - Network Softwarization in the Era of Complexity",
+ "excerpt":"About The 9th IEEE International Conference on Network Softwarization (IEEE NetSoft 2023) will be held in Madrid, Spain from June 19 to June 23, 2023. The conference will be hosted by University Carlos III of Madrid, one of the best Spanish universities in many technical areas, in its downtown campus...","categories": [],
+ "tags": ["en","events","networks","nfv","redhat","research","sdn"],
+ "url": "/netsoft23/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Telecom cloud-native development: an industry point of view",
+ "excerpt":"Telcos are increasingly moving from physical/virtual to cloud-native network functions in the context of 5G adoption. In this talk we will describe the telecom network transformation journey, benefits of cloud-native deployments, technical requirements/constraints of the underlying cloud service managers, the role of open source technologies and the use of the...","categories": [],
+ "tags": ["en","events","networks","nfv","research","sdn"],
+ "url": "/imdea/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "My Linux desktop",
+ "excerpt":"dotfiles My Linux desktop setup on Fedora Sericea. Desktop Window manager: Sway via baseOS Only use wayland applications; xwayland apps are not properly scaled swaywm/sway#2966, drag and drop does not work swaywm/sway#6460 and have a glitched behaviour uppon minimized on system tray swaywm/sway#6905. Display setup: wdisplays via rpm-ostree Browser Primary:...","categories": [],
+ "tags": ["en","redhat"],
+ "url": "/dotfiles/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Kubemark on OpenShift",
+ "excerpt":"Kubemark is a performance testing tool which allows users to run experiments on simulated clusters, by creating “hollow” Kubernetes nodes. What this means is that the nodes do not actually run containers or attach storage, but they do behave like they did, with updates to etcd and all the trimmings....","categories": [],
+ "tags": ["en","networks","openshift","redhat"],
+ "url": "/kubemark-ocp/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ },{
+ "title": "Development workflows on inmutable distros: rootless setup",
+ "excerpt":"Continuation of Samsai notes on Toolbox-based Emacs Flatpak workflow. I have been using inmutable OS distributions for a while (Fedora Silverblue and Sericea, see my dotfiles). They have the following characteristics: System root (baseOS) is mostly immutable System software installation/updates are handled as images and applied on reboot For installing...","categories": [],
+ "tags": ["en","redhat"],
+ "url": "/dev-inmutable-distros/",
+ "teaser": "/assets/images/favicon_io/android-chrome-512x512.png"
+ }]
diff --git a/docs/assets/js/lunr/lunr.js b/docs/assets/js/lunr/lunr.js
new file mode 100644
index 0000000000..6aa370fbcb
--- /dev/null
+++ b/docs/assets/js/lunr/lunr.js
@@ -0,0 +1,3475 @@
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
+ * Copyright (C) 2020 Oliver Nightingale
+ * @license MIT
+ */
+
+;(function(){
+
+/**
+ * A convenience function for configuring and constructing
+ * a new lunr Index.
+ *
+ * A lunr.Builder instance is created and the pipeline setup
+ * with a trimmer, stop word filter and stemmer.
+ *
+ * This builder object is yielded to the configuration function
+ * that is passed as a parameter, allowing the list of fields
+ * and other builder parameters to be customised.
+ *
+ * All documents _must_ be added within the passed config function.
+ *
+ * @example
+ * var idx = lunr(function () {
+ * this.field('title')
+ * this.field('body')
+ * this.ref('id')
+ *
+ * documents.forEach(function (doc) {
+ * this.add(doc)
+ * }, this)
+ * })
+ *
+ * @see {@link lunr.Builder}
+ * @see {@link lunr.Pipeline}
+ * @see {@link lunr.trimmer}
+ * @see {@link lunr.stopWordFilter}
+ * @see {@link lunr.stemmer}
+ * @namespace {function} lunr
+ */
+var lunr = function (config) {
+ var builder = new lunr.Builder
+
+ builder.pipeline.add(
+ lunr.trimmer,
+ lunr.stopWordFilter,
+ lunr.stemmer
+ )
+
+ builder.searchPipeline.add(
+ lunr.stemmer
+ )
+
+ config.call(builder, builder)
+ return builder.build()
+}
+
+lunr.version = "2.3.9"
+/*!
+ * lunr.utils
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * A namespace containing utils for the rest of the lunr library
+ * @namespace lunr.utils
+ */
+lunr.utils = {}
+
+/**
+ * Print a warning message to the console.
+ *
+ * @param {String} message The message to be printed.
+ * @memberOf lunr.utils
+ * @function
+ */
+lunr.utils.warn = (function (global) {
+ /* eslint-disable no-console */
+ return function (message) {
+ if (global.console && console.warn) {
+ console.warn(message)
+ }
+ }
+ /* eslint-enable no-console */
+})(this)
+
+/**
+ * Convert an object to a string.
+ *
+ * In the case of `null` and `undefined` the function returns
+ * the empty string, in all other cases the result of calling
+ * `toString` on the passed object is returned.
+ *
+ * @param {Any} obj The object to convert to a string.
+ * @return {String} string representation of the passed object.
+ * @memberOf lunr.utils
+ */
+lunr.utils.asString = function (obj) {
+ if (obj === void 0 || obj === null) {
+ return ""
+ } else {
+ return obj.toString()
+ }
+}
+
+/**
+ * Clones an object.
+ *
+ * Will create a copy of an existing object such that any mutations
+ * on the copy cannot affect the original.
+ *
+ * Only shallow objects are supported, passing a nested object to this
+ * function will cause a TypeError.
+ *
+ * Objects with primitives, and arrays of primitives are supported.
+ *
+ * @param {Object} obj The object to clone.
+ * @return {Object} a clone of the passed object.
+ * @throws {TypeError} when a nested object is passed.
+ * @memberOf Utils
+ */
+lunr.utils.clone = function (obj) {
+ if (obj === null || obj === undefined) {
+ return obj
+ }
+
+ var clone = Object.create(null),
+ keys = Object.keys(obj)
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i],
+ val = obj[key]
+
+ if (Array.isArray(val)) {
+ clone[key] = val.slice()
+ continue
+ }
+
+ if (typeof val === 'string' ||
+ typeof val === 'number' ||
+ typeof val === 'boolean') {
+ clone[key] = val
+ continue
+ }
+
+ throw new TypeError("clone is not deep and does not support nested objects")
+ }
+
+ return clone
+}
+lunr.FieldRef = function (docRef, fieldName, stringValue) {
+ this.docRef = docRef
+ this.fieldName = fieldName
+ this._stringValue = stringValue
+}
+
+lunr.FieldRef.joiner = "/"
+
+lunr.FieldRef.fromString = function (s) {
+ var n = s.indexOf(lunr.FieldRef.joiner)
+
+ if (n === -1) {
+ throw "malformed field ref string"
+ }
+
+ var fieldRef = s.slice(0, n),
+ docRef = s.slice(n + 1)
+
+ return new lunr.FieldRef (docRef, fieldRef, s)
+}
+
+lunr.FieldRef.prototype.toString = function () {
+ if (this._stringValue == undefined) {
+ this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef
+ }
+
+ return this._stringValue
+}
+/*!
+ * lunr.Set
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * A lunr set.
+ *
+ * @constructor
+ */
+lunr.Set = function (elements) {
+ this.elements = Object.create(null)
+
+ if (elements) {
+ this.length = elements.length
+
+ for (var i = 0; i < this.length; i++) {
+ this.elements[elements[i]] = true
+ }
+ } else {
+ this.length = 0
+ }
+}
+
+/**
+ * A complete set that contains all elements.
+ *
+ * @static
+ * @readonly
+ * @type {lunr.Set}
+ */
+lunr.Set.complete = {
+ intersect: function (other) {
+ return other
+ },
+
+ union: function () {
+ return this
+ },
+
+ contains: function () {
+ return true
+ }
+}
+
+/**
+ * An empty set that contains no elements.
+ *
+ * @static
+ * @readonly
+ * @type {lunr.Set}
+ */
+lunr.Set.empty = {
+ intersect: function () {
+ return this
+ },
+
+ union: function (other) {
+ return other
+ },
+
+ contains: function () {
+ return false
+ }
+}
+
+/**
+ * Returns true if this set contains the specified object.
+ *
+ * @param {object} object - Object whose presence in this set is to be tested.
+ * @returns {boolean} - True if this set contains the specified object.
+ */
+lunr.Set.prototype.contains = function (object) {
+ return !!this.elements[object]
+}
+
+/**
+ * Returns a new set containing only the elements that are present in both
+ * this set and the specified set.
+ *
+ * @param {lunr.Set} other - set to intersect with this set.
+ * @returns {lunr.Set} a new set that is the intersection of this and the specified set.
+ */
+
+lunr.Set.prototype.intersect = function (other) {
+ var a, b, elements, intersection = []
+
+ if (other === lunr.Set.complete) {
+ return this
+ }
+
+ if (other === lunr.Set.empty) {
+ return other
+ }
+
+ if (this.length < other.length) {
+ a = this
+ b = other
+ } else {
+ a = other
+ b = this
+ }
+
+ elements = Object.keys(a.elements)
+
+ for (var i = 0; i < elements.length; i++) {
+ var element = elements[i]
+ if (element in b.elements) {
+ intersection.push(element)
+ }
+ }
+
+ return new lunr.Set (intersection)
+}
+
+/**
+ * Returns a new set combining the elements of this and the specified set.
+ *
+ * @param {lunr.Set} other - set to union with this set.
+ * @return {lunr.Set} a new set that is the union of this and the specified set.
+ */
+
+lunr.Set.prototype.union = function (other) {
+ if (other === lunr.Set.complete) {
+ return lunr.Set.complete
+ }
+
+ if (other === lunr.Set.empty) {
+ return this
+ }
+
+ return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))
+}
+/**
+ * A function to calculate the inverse document frequency for
+ * a posting. This is shared between the builder and the index
+ *
+ * @private
+ * @param {object} posting - The posting for a given term
+ * @param {number} documentCount - The total number of documents.
+ */
+lunr.idf = function (posting, documentCount) {
+ var documentsWithTerm = 0
+
+ for (var fieldName in posting) {
+ if (fieldName == '_index') continue // Ignore the term index, its not a field
+ documentsWithTerm += Object.keys(posting[fieldName]).length
+ }
+
+ var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)
+
+ return Math.log(1 + Math.abs(x))
+}
+
+/**
+ * A token wraps a string representation of a token
+ * as it is passed through the text processing pipeline.
+ *
+ * @constructor
+ * @param {string} [str=''] - The string token being wrapped.
+ * @param {object} [metadata={}] - Metadata associated with this token.
+ */
+lunr.Token = function (str, metadata) {
+ this.str = str || ""
+ this.metadata = metadata || {}
+}
+
+/**
+ * Returns the token string that is being wrapped by this object.
+ *
+ * @returns {string}
+ */
+lunr.Token.prototype.toString = function () {
+ return this.str
+}
+
+/**
+ * A token update function is used when updating or optionally
+ * when cloning a token.
+ *
+ * @callback lunr.Token~updateFunction
+ * @param {string} str - The string representation of the token.
+ * @param {Object} metadata - All metadata associated with this token.
+ */
+
+/**
+ * Applies the given function to the wrapped string token.
+ *
+ * @example
+ * token.update(function (str, metadata) {
+ * return str.toUpperCase()
+ * })
+ *
+ * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.
+ * @returns {lunr.Token}
+ */
+lunr.Token.prototype.update = function (fn) {
+ this.str = fn(this.str, this.metadata)
+ return this
+}
+
+/**
+ * Creates a clone of this token. Optionally a function can be
+ * applied to the cloned token.
+ *
+ * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.
+ * @returns {lunr.Token}
+ */
+lunr.Token.prototype.clone = function (fn) {
+ fn = fn || function (s) { return s }
+ return new lunr.Token (fn(this.str, this.metadata), this.metadata)
+}
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * A function for splitting a string into tokens ready to be inserted into
+ * the search index. Uses `lunr.tokenizer.separator` to split strings, change
+ * the value of this property to change how strings are split into tokens.
+ *
+ * This tokenizer will convert its parameter to a string by calling `toString` and
+ * then will split this string on the character in `lunr.tokenizer.separator`.
+ * Arrays will have their elements converted to strings and wrapped in a lunr.Token.
+ *
+ * Optional metadata can be passed to the tokenizer, this metadata will be cloned and
+ * added as metadata to every token that is created from the object to be tokenized.
+ *
+ * @static
+ * @param {?(string|object|object[])} obj - The object to convert into tokens
+ * @param {?object} metadata - Optional metadata to associate with every token
+ * @returns {lunr.Token[]}
+ * @see {@link lunr.Pipeline}
+ */
+lunr.tokenizer = function (obj, metadata) {
+ if (obj == null || obj == undefined) {
+ return []
+ }
+
+ if (Array.isArray(obj)) {
+ return obj.map(function (t) {
+ return new lunr.Token(
+ lunr.utils.asString(t).toLowerCase(),
+ lunr.utils.clone(metadata)
+ )
+ })
+ }
+
+ var str = obj.toString().toLowerCase(),
+ len = str.length,
+ tokens = []
+
+ for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {
+ var char = str.charAt(sliceEnd),
+ sliceLength = sliceEnd - sliceStart
+
+ if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {
+
+ if (sliceLength > 0) {
+ var tokenMetadata = lunr.utils.clone(metadata) || {}
+ tokenMetadata["position"] = [sliceStart, sliceLength]
+ tokenMetadata["index"] = tokens.length
+
+ tokens.push(
+ new lunr.Token (
+ str.slice(sliceStart, sliceEnd),
+ tokenMetadata
+ )
+ )
+ }
+
+ sliceStart = sliceEnd + 1
+ }
+
+ }
+
+ return tokens
+}
+
+/**
+ * The separator used to split a string into tokens. Override this property to change the behaviour of
+ * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.
+ *
+ * @static
+ * @see lunr.tokenizer
+ */
+lunr.tokenizer.separator = /[\s\-]+/
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * lunr.Pipelines maintain an ordered list of functions to be applied to all
+ * tokens in documents entering the search index and queries being ran against
+ * the index.
+ *
+ * An instance of lunr.Index created with the lunr shortcut will contain a
+ * pipeline with a stop word filter and an English language stemmer. Extra
+ * functions can be added before or after either of these functions or these
+ * default functions can be removed.
+ *
+ * When run the pipeline will call each function in turn, passing a token, the
+ * index of that token in the original list of all tokens and finally a list of
+ * all the original tokens.
+ *
+ * The output of functions in the pipeline will be passed to the next function
+ * in the pipeline. To exclude a token from entering the index the function
+ * should return undefined, the rest of the pipeline will not be called with
+ * this token.
+ *
+ * For serialisation of pipelines to work, all functions used in an instance of
+ * a pipeline should be registered with lunr.Pipeline. Registered functions can
+ * then be loaded. If trying to load a serialised pipeline that uses functions
+ * that are not registered an error will be thrown.
+ *
+ * If not planning on serialising the pipeline then registering pipeline functions
+ * is not necessary.
+ *
+ * @constructor
+ */
+lunr.Pipeline = function () {
+ this._stack = []
+}
+
+lunr.Pipeline.registeredFunctions = Object.create(null)
+
+/**
+ * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token
+ * string as well as all known metadata. A pipeline function can mutate the token string
+ * or mutate (or add) metadata for a given token.
+ *
+ * A pipeline function can indicate that the passed token should be discarded by returning
+ * null, undefined or an empty string. This token will not be passed to any downstream pipeline
+ * functions and will not be added to the index.
+ *
+ * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
+ * to any downstream pipeline functions and all will returned tokens will be added to the index.
+ *
+ * Any number of pipeline functions may be chained together using a lunr.Pipeline.
+ *
+ * @interface lunr.PipelineFunction
+ * @param {lunr.Token} token - A token from the document being processed.
+ * @param {number} i - The index of this token in the complete list of tokens for this document/field.
+ * @param {lunr.Token[]} tokens - All tokens for this document/field.
+ * @returns {(?lunr.Token|lunr.Token[])}
+ */
+
+/**
+ * Register a function with the pipeline.
+ *
+ * Functions that are used in the pipeline should be registered if the pipeline
+ * needs to be serialised, or a serialised pipeline needs to be loaded.
+ *
+ * Registering a function does not add it to a pipeline, functions must still be
+ * added to instances of the pipeline for them to be used when running a pipeline.
+ *
+ * @param {lunr.PipelineFunction} fn - The function to check for.
+ * @param {String} label - The label to register this function with
+ */
+lunr.Pipeline.registerFunction = function (fn, label) {
+ if (label in this.registeredFunctions) {
+ lunr.utils.warn('Overwriting existing registered function: ' + label)
+ }
+
+ fn.label = label
+ lunr.Pipeline.registeredFunctions[fn.label] = fn
+}
+
+/**
+ * Warns if the function is not registered as a Pipeline function.
+ *
+ * @param {lunr.PipelineFunction} fn - The function to check for.
+ * @private
+ */
+lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {
+ var isRegistered = fn.label && (fn.label in this.registeredFunctions)
+
+ if (!isRegistered) {
+ lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn)
+ }
+}
+
+/**
+ * Loads a previously serialised pipeline.
+ *
+ * All functions to be loaded must already be registered with lunr.Pipeline.
+ * If any function from the serialised data has not been registered then an
+ * error will be thrown.
+ *
+ * @param {Object} serialised - The serialised pipeline to load.
+ * @returns {lunr.Pipeline}
+ */
+lunr.Pipeline.load = function (serialised) {
+ var pipeline = new lunr.Pipeline
+
+ serialised.forEach(function (fnName) {
+ var fn = lunr.Pipeline.registeredFunctions[fnName]
+
+ if (fn) {
+ pipeline.add(fn)
+ } else {
+ throw new Error('Cannot load unregistered function: ' + fnName)
+ }
+ })
+
+ return pipeline
+}
+
+/**
+ * Adds new functions to the end of the pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.
+ */
+lunr.Pipeline.prototype.add = function () {
+ var fns = Array.prototype.slice.call(arguments)
+
+ fns.forEach(function (fn) {
+ lunr.Pipeline.warnIfFunctionNotRegistered(fn)
+ this._stack.push(fn)
+ }, this)
+}
+
+/**
+ * Adds a single function after a function that already exists in the
+ * pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
+ * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
+ */
+lunr.Pipeline.prototype.after = function (existingFn, newFn) {
+ lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
+
+ var pos = this._stack.indexOf(existingFn)
+ if (pos == -1) {
+ throw new Error('Cannot find existingFn')
+ }
+
+ pos = pos + 1
+ this._stack.splice(pos, 0, newFn)
+}
+
+/**
+ * Adds a single function before a function that already exists in the
+ * pipeline.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
+ * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
+ */
+lunr.Pipeline.prototype.before = function (existingFn, newFn) {
+ lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
+
+ var pos = this._stack.indexOf(existingFn)
+ if (pos == -1) {
+ throw new Error('Cannot find existingFn')
+ }
+
+ this._stack.splice(pos, 0, newFn)
+}
+
+/**
+ * Removes a function from the pipeline.
+ *
+ * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.
+ */
+lunr.Pipeline.prototype.remove = function (fn) {
+ var pos = this._stack.indexOf(fn)
+ if (pos == -1) {
+ return
+ }
+
+ this._stack.splice(pos, 1)
+}
+
+/**
+ * Runs the current list of functions that make up the pipeline against the
+ * passed tokens.
+ *
+ * @param {Array} tokens The tokens to run through the pipeline.
+ * @returns {Array}
+ */
+lunr.Pipeline.prototype.run = function (tokens) {
+ var stackLength = this._stack.length
+
+ for (var i = 0; i < stackLength; i++) {
+ var fn = this._stack[i]
+ var memo = []
+
+ for (var j = 0; j < tokens.length; j++) {
+ var result = fn(tokens[j], j, tokens)
+
+ if (result === null || result === void 0 || result === '') continue
+
+ if (Array.isArray(result)) {
+ for (var k = 0; k < result.length; k++) {
+ memo.push(result[k])
+ }
+ } else {
+ memo.push(result)
+ }
+ }
+
+ tokens = memo
+ }
+
+ return tokens
+}
+
+/**
+ * Convenience method for passing a string through a pipeline and getting
+ * strings out. This method takes care of wrapping the passed string in a
+ * token and mapping the resulting tokens back to strings.
+ *
+ * @param {string} str - The string to pass through the pipeline.
+ * @param {?object} metadata - Optional metadata to associate with the token
+ * passed to the pipeline.
+ * @returns {string[]}
+ */
+lunr.Pipeline.prototype.runString = function (str, metadata) {
+ var token = new lunr.Token (str, metadata)
+
+ return this.run([token]).map(function (t) {
+ return t.toString()
+ })
+}
+
+/**
+ * Resets the pipeline by removing any existing processors.
+ *
+ */
+lunr.Pipeline.prototype.reset = function () {
+ this._stack = []
+}
+
+/**
+ * Returns a representation of the pipeline ready for serialisation.
+ *
+ * Logs a warning if the function has not been registered.
+ *
+ * @returns {Array}
+ */
+lunr.Pipeline.prototype.toJSON = function () {
+ return this._stack.map(function (fn) {
+ lunr.Pipeline.warnIfFunctionNotRegistered(fn)
+
+ return fn.label
+ })
+}
+/*!
+ * lunr.Vector
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * A vector is used to construct the vector space of documents and queries. These
+ * vectors support operations to determine the similarity between two documents or
+ * a document and a query.
+ *
+ * Normally no parameters are required for initializing a vector, but in the case of
+ * loading a previously dumped vector the raw elements can be provided to the constructor.
+ *
+ * For performance reasons vectors are implemented with a flat array, where an elements
+ * index is immediately followed by its value. E.g. [index, value, index, value]. This
+ * allows the underlying array to be as sparse as possible and still offer decent
+ * performance when being used for vector calculations.
+ *
+ * @constructor
+ * @param {Number[]} [elements] - The flat list of element index and element value pairs.
+ */
+lunr.Vector = function (elements) {
+ this._magnitude = 0
+ this.elements = elements || []
+}
+
+
+/**
+ * Calculates the position within the vector to insert a given index.
+ *
+ * This is used internally by insert and upsert. If there are duplicate indexes then
+ * the position is returned as if the value for that index were to be updated, but it
+ * is the callers responsibility to check whether there is a duplicate at that index
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.positionForIndex = function (index) {
+ // For an empty vector the tuple can be inserted at the beginning
+ if (this.elements.length == 0) {
+ return 0
+ }
+
+ var start = 0,
+ end = this.elements.length / 2,
+ sliceLength = end - start,
+ pivotPoint = Math.floor(sliceLength / 2),
+ pivotIndex = this.elements[pivotPoint * 2]
+
+ while (sliceLength > 1) {
+ if (pivotIndex < index) {
+ start = pivotPoint
+ }
+
+ if (pivotIndex > index) {
+ end = pivotPoint
+ }
+
+ if (pivotIndex == index) {
+ break
+ }
+
+ sliceLength = end - start
+ pivotPoint = start + Math.floor(sliceLength / 2)
+ pivotIndex = this.elements[pivotPoint * 2]
+ }
+
+ if (pivotIndex == index) {
+ return pivotPoint * 2
+ }
+
+ if (pivotIndex > index) {
+ return pivotPoint * 2
+ }
+
+ if (pivotIndex < index) {
+ return (pivotPoint + 1) * 2
+ }
+}
+
+/**
+ * Inserts an element at an index within the vector.
+ *
+ * Does not allow duplicates, will throw an error if there is already an entry
+ * for this index.
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @param {Number} val - The value to be inserted into the vector.
+ */
+lunr.Vector.prototype.insert = function (insertIdx, val) {
+ this.upsert(insertIdx, val, function () {
+ throw "duplicate index"
+ })
+}
+
+/**
+ * Inserts or updates an existing index within the vector.
+ *
+ * @param {Number} insertIdx - The index at which the element should be inserted.
+ * @param {Number} val - The value to be inserted into the vector.
+ * @param {function} fn - A function that is called for updates, the existing value and the
+ * requested value are passed as arguments
+ */
+lunr.Vector.prototype.upsert = function (insertIdx, val, fn) {
+ this._magnitude = 0
+ var position = this.positionForIndex(insertIdx)
+
+ if (this.elements[position] == insertIdx) {
+ this.elements[position + 1] = fn(this.elements[position + 1], val)
+ } else {
+ this.elements.splice(position, 0, insertIdx, val)
+ }
+}
+
+/**
+ * Calculates the magnitude of this vector.
+ *
+ * @returns {Number}
+ */
+lunr.Vector.prototype.magnitude = function () {
+ if (this._magnitude) return this._magnitude
+
+ var sumOfSquares = 0,
+ elementsLength = this.elements.length
+
+ for (var i = 1; i < elementsLength; i += 2) {
+ var val = this.elements[i]
+ sumOfSquares += val * val
+ }
+
+ return this._magnitude = Math.sqrt(sumOfSquares)
+}
+
+/**
+ * Calculates the dot product of this vector and another vector.
+ *
+ * @param {lunr.Vector} otherVector - The vector to compute the dot product with.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.dot = function (otherVector) {
+ var dotProduct = 0,
+ a = this.elements, b = otherVector.elements,
+ aLen = a.length, bLen = b.length,
+ aVal = 0, bVal = 0,
+ i = 0, j = 0
+
+ while (i < aLen && j < bLen) {
+ aVal = a[i], bVal = b[j]
+ if (aVal < bVal) {
+ i += 2
+ } else if (aVal > bVal) {
+ j += 2
+ } else if (aVal == bVal) {
+ dotProduct += a[i + 1] * b[j + 1]
+ i += 2
+ j += 2
+ }
+ }
+
+ return dotProduct
+}
+
+/**
+ * Calculates the similarity between this vector and another vector.
+ *
+ * @param {lunr.Vector} otherVector - The other vector to calculate the
+ * similarity with.
+ * @returns {Number}
+ */
+lunr.Vector.prototype.similarity = function (otherVector) {
+ return this.dot(otherVector) / this.magnitude() || 0
+}
+
+/**
+ * Converts the vector to an array of the elements within the vector.
+ *
+ * @returns {Number[]}
+ */
+lunr.Vector.prototype.toArray = function () {
+ var output = new Array (this.elements.length / 2)
+
+ for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {
+ output[j] = this.elements[i]
+ }
+
+ return output
+}
+
+/**
+ * A JSON serializable representation of the vector.
+ *
+ * @returns {Number[]}
+ */
+lunr.Vector.prototype.toJSON = function () {
+ return this.elements
+}
+/* eslint-disable */
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2020 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */
+
+/**
+ * lunr.stemmer is an english language stemmer, this is a JavaScript
+ * implementation of the PorterStemmer taken from http://tartarus.org/~martin
+ *
+ * @static
+ * @implements {lunr.PipelineFunction}
+ * @param {lunr.Token} token - The string to stem
+ * @returns {lunr.Token}
+ * @see {@link lunr.Pipeline}
+ * @function
+ */
+lunr.stemmer = (function(){
+ var step2list = {
+ "ational" : "ate",
+ "tional" : "tion",
+ "enci" : "ence",
+ "anci" : "ance",
+ "izer" : "ize",
+ "bli" : "ble",
+ "alli" : "al",
+ "entli" : "ent",
+ "eli" : "e",
+ "ousli" : "ous",
+ "ization" : "ize",
+ "ation" : "ate",
+ "ator" : "ate",
+ "alism" : "al",
+ "iveness" : "ive",
+ "fulness" : "ful",
+ "ousness" : "ous",
+ "aliti" : "al",
+ "iviti" : "ive",
+ "biliti" : "ble",
+ "logi" : "log"
+ },
+
+ step3list = {
+ "icate" : "ic",
+ "ative" : "",
+ "alize" : "al",
+ "iciti" : "ic",
+ "ical" : "ic",
+ "ful" : "",
+ "ness" : ""
+ },
+
+ c = "[^aeiou]", // consonant
+ v = "[aeiouy]", // vowel
+ C = c + "[^aeiouy]*", // consonant sequence
+ V = v + "[aeiou]*", // vowel sequence
+
+ mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0
+ meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1
+ mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1
+ s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ var re_mgr0 = new RegExp(mgr0);
+ var re_mgr1 = new RegExp(mgr1);
+ var re_meq1 = new RegExp(meq1);
+ var re_s_v = new RegExp(s_v);
+
+ var re_1a = /^(.+?)(ss|i)es$/;
+ var re2_1a = /^(.+?)([^s])s$/;
+ var re_1b = /^(.+?)eed$/;
+ var re2_1b = /^(.+?)(ed|ing)$/;
+ var re_1b_2 = /.$/;
+ var re2_1b_2 = /(at|bl|iz)$/;
+ var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$");
+ var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+
+ var re_1c = /^(.+?[^aeiou])y$/;
+ var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+
+ var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+
+ var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+ var re2_4 = /^(.+?)(s|t)(ion)$/;
+
+ var re_5 = /^(.+?)e$/;
+ var re_5_1 = /ll$/;
+ var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+
+ var porterStemmer = function porterStemmer(w) {
+ var stem,
+ suffix,
+ firstch,
+ re,
+ re2,
+ re3,
+ re4;
+
+ if (w.length < 3) { return w; }
+
+ firstch = w.substr(0,1);
+ if (firstch == "y") {
+ w = firstch.toUpperCase() + w.substr(1);
+ }
+
+ // Step 1a
+ re = re_1a
+ re2 = re2_1a;
+
+ if (re.test(w)) { w = w.replace(re,"$1$2"); }
+ else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
+
+ // Step 1b
+ re = re_1b;
+ re2 = re2_1b;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = re_mgr0;
+ if (re.test(fp[1])) {
+ re = re_1b_2;
+ w = w.replace(re,"");
+ }
+ } else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = re_s_v;
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = re2_1b_2;
+ re3 = re3_1b_2;
+ re4 = re4_1b_2;
+ if (re2.test(w)) { w = w + "e"; }
+ else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); }
+ else if (re4.test(w)) { w = w + "e"; }
+ }
+ }
+
+ // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)
+ re = re_1c;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ w = stem + "i";
+ }
+
+ // Step 2
+ re = re_2;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = re_mgr0;
+ if (re.test(stem)) {
+ w = stem + step2list[suffix];
+ }
+ }
+
+ // Step 3
+ re = re_3;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = re_mgr0;
+ if (re.test(stem)) {
+ w = stem + step3list[suffix];
+ }
+ }
+
+ // Step 4
+ re = re_4;
+ re2 = re2_4;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = re_mgr1;
+ if (re.test(stem)) {
+ w = stem;
+ }
+ } else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = re_mgr1;
+ if (re2.test(stem)) {
+ w = stem;
+ }
+ }
+
+ // Step 5
+ re = re_5;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = re_mgr1;
+ re2 = re_meq1;
+ re3 = re3_5;
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
+ w = stem;
+ }
+ }
+
+ re = re_5_1;
+ re2 = re_mgr1;
+ if (re.test(w) && re2.test(w)) {
+ re = re_1b_2;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+
+ if (firstch == "y") {
+ w = firstch.toLowerCase() + w.substr(1);
+ }
+
+ return w;
+ };
+
+ return function (token) {
+ return token.update(porterStemmer);
+ }
+})();
+
+lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * lunr.generateStopWordFilter builds a stopWordFilter function from the provided
+ * list of stop words.
+ *
+ * The built in lunr.stopWordFilter is built using this generator and can be used
+ * to generate custom stopWordFilters for applications or non English languages.
+ *
+ * @function
+ * @param {Array} token The token to pass through the filter
+ * @returns {lunr.PipelineFunction}
+ * @see lunr.Pipeline
+ * @see lunr.stopWordFilter
+ */
+lunr.generateStopWordFilter = function (stopWords) {
+ var words = stopWords.reduce(function (memo, stopWord) {
+ memo[stopWord] = stopWord
+ return memo
+ }, {})
+
+ return function (token) {
+ if (token && words[token.toString()] !== token.toString()) return token
+ }
+}
+
+/**
+ * lunr.stopWordFilter is an English language stop word list filter, any words
+ * contained in the list will not be passed through the filter.
+ *
+ * This is intended to be used in the Pipeline. If the token does not pass the
+ * filter then undefined will be returned.
+ *
+ * @function
+ * @implements {lunr.PipelineFunction}
+ * @params {lunr.Token} token - A token to check for being a stop word.
+ * @returns {lunr.Token}
+ * @see {@link lunr.Pipeline}
+ */
+lunr.stopWordFilter = lunr.generateStopWordFilter([
+ 'a',
+ 'able',
+ 'about',
+ 'across',
+ 'after',
+ 'all',
+ 'almost',
+ 'also',
+ 'am',
+ 'among',
+ 'an',
+ 'and',
+ 'any',
+ 'are',
+ 'as',
+ 'at',
+ 'be',
+ 'because',
+ 'been',
+ 'but',
+ 'by',
+ 'can',
+ 'cannot',
+ 'could',
+ 'dear',
+ 'did',
+ 'do',
+ 'does',
+ 'either',
+ 'else',
+ 'ever',
+ 'every',
+ 'for',
+ 'from',
+ 'get',
+ 'got',
+ 'had',
+ 'has',
+ 'have',
+ 'he',
+ 'her',
+ 'hers',
+ 'him',
+ 'his',
+ 'how',
+ 'however',
+ 'i',
+ 'if',
+ 'in',
+ 'into',
+ 'is',
+ 'it',
+ 'its',
+ 'just',
+ 'least',
+ 'let',
+ 'like',
+ 'likely',
+ 'may',
+ 'me',
+ 'might',
+ 'most',
+ 'must',
+ 'my',
+ 'neither',
+ 'no',
+ 'nor',
+ 'not',
+ 'of',
+ 'off',
+ 'often',
+ 'on',
+ 'only',
+ 'or',
+ 'other',
+ 'our',
+ 'own',
+ 'rather',
+ 'said',
+ 'say',
+ 'says',
+ 'she',
+ 'should',
+ 'since',
+ 'so',
+ 'some',
+ 'than',
+ 'that',
+ 'the',
+ 'their',
+ 'them',
+ 'then',
+ 'there',
+ 'these',
+ 'they',
+ 'this',
+ 'tis',
+ 'to',
+ 'too',
+ 'twas',
+ 'us',
+ 'wants',
+ 'was',
+ 'we',
+ 'were',
+ 'what',
+ 'when',
+ 'where',
+ 'which',
+ 'while',
+ 'who',
+ 'whom',
+ 'why',
+ 'will',
+ 'with',
+ 'would',
+ 'yet',
+ 'you',
+ 'your'
+])
+
+lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * lunr.trimmer is a pipeline function for trimming non word
+ * characters from the beginning and end of tokens before they
+ * enter the index.
+ *
+ * This implementation may not work correctly for non latin
+ * characters and should either be removed or adapted for use
+ * with languages with non-latin characters.
+ *
+ * @static
+ * @implements {lunr.PipelineFunction}
+ * @param {lunr.Token} token The token to pass through the filter
+ * @returns {lunr.Token}
+ * @see lunr.Pipeline
+ */
+lunr.trimmer = function (token) {
+ return token.update(function (s) {
+ return s.replace(/^\W+/, '').replace(/\W+$/, '')
+ })
+}
+
+lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * A token set is used to store the unique list of all tokens
+ * within an index. Token sets are also used to represent an
+ * incoming query to the index, this query token set and index
+ * token set are then intersected to find which tokens to look
+ * up in the inverted index.
+ *
+ * A token set can hold multiple tokens, as in the case of the
+ * index token set, or it can hold a single token as in the
+ * case of a simple query token set.
+ *
+ * Additionally token sets are used to perform wildcard matching.
+ * Leading, contained and trailing wildcards are supported, and
+ * from this edit distance matching can also be provided.
+ *
+ * Token sets are implemented as a minimal finite state automata,
+ * where both common prefixes and suffixes are shared between tokens.
+ * This helps to reduce the space used for storing the token set.
+ *
+ * @constructor
+ */
+lunr.TokenSet = function () {
+ this.final = false
+ this.edges = {}
+ this.id = lunr.TokenSet._nextId
+ lunr.TokenSet._nextId += 1
+}
+
+/**
+ * Keeps track of the next, auto increment, identifier to assign
+ * to a new tokenSet.
+ *
+ * TokenSets require a unique identifier to be correctly minimised.
+ *
+ * @private
+ */
+lunr.TokenSet._nextId = 1
+
+/**
+ * Creates a TokenSet instance from the given sorted array of words.
+ *
+ * @param {String[]} arr - A sorted array of strings to create the set from.
+ * @returns {lunr.TokenSet}
+ * @throws Will throw an error if the input array is not sorted.
+ */
+lunr.TokenSet.fromArray = function (arr) {
+ var builder = new lunr.TokenSet.Builder
+
+ for (var i = 0, len = arr.length; i < len; i++) {
+ builder.insert(arr[i])
+ }
+
+ builder.finish()
+ return builder.root
+}
+
+/**
+ * Creates a token set from a query clause.
+ *
+ * @private
+ * @param {Object} clause - A single clause from lunr.Query.
+ * @param {string} clause.term - The query clause term.
+ * @param {number} [clause.editDistance] - The optional edit distance for the term.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.fromClause = function (clause) {
+ if ('editDistance' in clause) {
+ return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)
+ } else {
+ return lunr.TokenSet.fromString(clause.term)
+ }
+}
+
+/**
+ * Creates a token set representing a single string with a specified
+ * edit distance.
+ *
+ * Insertions, deletions, substitutions and transpositions are each
+ * treated as an edit distance of 1.
+ *
+ * Increasing the allowed edit distance will have a dramatic impact
+ * on the performance of both creating and intersecting these TokenSets.
+ * It is advised to keep the edit distance less than 3.
+ *
+ * @param {string} str - The string to create the token set from.
+ * @param {number} editDistance - The allowed edit distance to match.
+ * @returns {lunr.Vector}
+ */
+lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
+ var root = new lunr.TokenSet
+
+ var stack = [{
+ node: root,
+ editsRemaining: editDistance,
+ str: str
+ }]
+
+ while (stack.length) {
+ var frame = stack.pop()
+
+ // no edit
+ if (frame.str.length > 0) {
+ var char = frame.str.charAt(0),
+ noEditNode
+
+ if (char in frame.node.edges) {
+ noEditNode = frame.node.edges[char]
+ } else {
+ noEditNode = new lunr.TokenSet
+ frame.node.edges[char] = noEditNode
+ }
+
+ if (frame.str.length == 1) {
+ noEditNode.final = true
+ }
+
+ stack.push({
+ node: noEditNode,
+ editsRemaining: frame.editsRemaining,
+ str: frame.str.slice(1)
+ })
+ }
+
+ if (frame.editsRemaining == 0) {
+ continue
+ }
+
+ // insertion
+ if ("*" in frame.node.edges) {
+ var insertionNode = frame.node.edges["*"]
+ } else {
+ var insertionNode = new lunr.TokenSet
+ frame.node.edges["*"] = insertionNode
+ }
+
+ if (frame.str.length == 0) {
+ insertionNode.final = true
+ }
+
+ stack.push({
+ node: insertionNode,
+ editsRemaining: frame.editsRemaining - 1,
+ str: frame.str
+ })
+
+ // deletion
+ // can only do a deletion if we have enough edits remaining
+ // and if there are characters left to delete in the string
+ if (frame.str.length > 1) {
+ stack.push({
+ node: frame.node,
+ editsRemaining: frame.editsRemaining - 1,
+ str: frame.str.slice(1)
+ })
+ }
+
+ // deletion
+ // just removing the last character from the str
+ if (frame.str.length == 1) {
+ frame.node.final = true
+ }
+
+ // substitution
+ // can only do a substitution if we have enough edits remaining
+ // and if there are characters left to substitute
+ if (frame.str.length >= 1) {
+ if ("*" in frame.node.edges) {
+ var substitutionNode = frame.node.edges["*"]
+ } else {
+ var substitutionNode = new lunr.TokenSet
+ frame.node.edges["*"] = substitutionNode
+ }
+
+ if (frame.str.length == 1) {
+ substitutionNode.final = true
+ }
+
+ stack.push({
+ node: substitutionNode,
+ editsRemaining: frame.editsRemaining - 1,
+ str: frame.str.slice(1)
+ })
+ }
+
+ // transposition
+ // can only do a transposition if there are edits remaining
+ // and there are enough characters to transpose
+ if (frame.str.length > 1) {
+ var charA = frame.str.charAt(0),
+ charB = frame.str.charAt(1),
+ transposeNode
+
+ if (charB in frame.node.edges) {
+ transposeNode = frame.node.edges[charB]
+ } else {
+ transposeNode = new lunr.TokenSet
+ frame.node.edges[charB] = transposeNode
+ }
+
+ if (frame.str.length == 1) {
+ transposeNode.final = true
+ }
+
+ stack.push({
+ node: transposeNode,
+ editsRemaining: frame.editsRemaining - 1,
+ str: charA + frame.str.slice(2)
+ })
+ }
+ }
+
+ return root
+}
+
+/**
+ * Creates a TokenSet from a string.
+ *
+ * The string may contain one or more wildcard characters (*)
+ * that will allow wildcard matching when intersecting with
+ * another TokenSet.
+ *
+ * @param {string} str - The string to create a TokenSet from.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.fromString = function (str) {
+ var node = new lunr.TokenSet,
+ root = node
+
+ /*
+ * Iterates through all characters within the passed string
+ * appending a node for each character.
+ *
+ * When a wildcard character is found then a self
+ * referencing edge is introduced to continually match
+ * any number of any characters.
+ */
+ for (var i = 0, len = str.length; i < len; i++) {
+ var char = str[i],
+ final = (i == len - 1)
+
+ if (char == "*") {
+ node.edges[char] = node
+ node.final = final
+
+ } else {
+ var next = new lunr.TokenSet
+ next.final = final
+
+ node.edges[char] = next
+ node = next
+ }
+ }
+
+ return root
+}
+
+/**
+ * Converts this TokenSet into an array of strings
+ * contained within the TokenSet.
+ *
+ * This is not intended to be used on a TokenSet that
+ * contains wildcards, in these cases the results are
+ * undefined and are likely to cause an infinite loop.
+ *
+ * @returns {string[]}
+ */
+lunr.TokenSet.prototype.toArray = function () {
+ var words = []
+
+ var stack = [{
+ prefix: "",
+ node: this
+ }]
+
+ while (stack.length) {
+ var frame = stack.pop(),
+ edges = Object.keys(frame.node.edges),
+ len = edges.length
+
+ if (frame.node.final) {
+ /* In Safari, at this point the prefix is sometimes corrupted, see:
+ * https://github.com/olivernn/lunr.js/issues/279 Calling any
+ * String.prototype method forces Safari to "cast" this string to what
+ * it's supposed to be, fixing the bug. */
+ frame.prefix.charAt(0)
+ words.push(frame.prefix)
+ }
+
+ for (var i = 0; i < len; i++) {
+ var edge = edges[i]
+
+ stack.push({
+ prefix: frame.prefix.concat(edge),
+ node: frame.node.edges[edge]
+ })
+ }
+ }
+
+ return words
+}
+
+/**
+ * Generates a string representation of a TokenSet.
+ *
+ * This is intended to allow TokenSets to be used as keys
+ * in objects, largely to aid the construction and minimisation
+ * of a TokenSet. As such it is not designed to be a human
+ * friendly representation of the TokenSet.
+ *
+ * @returns {string}
+ */
+lunr.TokenSet.prototype.toString = function () {
+ // NOTE: Using Object.keys here as this.edges is very likely
+ // to enter 'hash-mode' with many keys being added
+ //
+ // avoiding a for-in loop here as it leads to the function
+ // being de-optimised (at least in V8). From some simple
+ // benchmarks the performance is comparable, but allowing
+ // V8 to optimize may mean easy performance wins in the future.
+
+ if (this._str) {
+ return this._str
+ }
+
+ var str = this.final ? '1' : '0',
+ labels = Object.keys(this.edges).sort(),
+ len = labels.length
+
+ for (var i = 0; i < len; i++) {
+ var label = labels[i],
+ node = this.edges[label]
+
+ str = str + label + node.id
+ }
+
+ return str
+}
+
+/**
+ * Returns a new TokenSet that is the intersection of
+ * this TokenSet and the passed TokenSet.
+ *
+ * This intersection will take into account any wildcards
+ * contained within the TokenSet.
+ *
+ * @param {lunr.TokenSet} b - An other TokenSet to intersect with.
+ * @returns {lunr.TokenSet}
+ */
+lunr.TokenSet.prototype.intersect = function (b) {
+ var output = new lunr.TokenSet,
+ frame = undefined
+
+ var stack = [{
+ qNode: b,
+ output: output,
+ node: this
+ }]
+
+ while (stack.length) {
+ frame = stack.pop()
+
+ // NOTE: As with the #toString method, we are using
+ // Object.keys and a for loop instead of a for-in loop
+ // as both of these objects enter 'hash' mode, causing
+ // the function to be de-optimised in V8
+ var qEdges = Object.keys(frame.qNode.edges),
+ qLen = qEdges.length,
+ nEdges = Object.keys(frame.node.edges),
+ nLen = nEdges.length
+
+ for (var q = 0; q < qLen; q++) {
+ var qEdge = qEdges[q]
+
+ for (var n = 0; n < nLen; n++) {
+ var nEdge = nEdges[n]
+
+ if (nEdge == qEdge || qEdge == '*') {
+ var node = frame.node.edges[nEdge],
+ qNode = frame.qNode.edges[qEdge],
+ final = node.final && qNode.final,
+ next = undefined
+
+ if (nEdge in frame.output.edges) {
+ // an edge already exists for this character
+ // no need to create a new node, just set the finality
+ // bit unless this node is already final
+ next = frame.output.edges[nEdge]
+ next.final = next.final || final
+
+ } else {
+ // no edge exists yet, must create one
+ // set the finality bit and insert it
+ // into the output
+ next = new lunr.TokenSet
+ next.final = final
+ frame.output.edges[nEdge] = next
+ }
+
+ stack.push({
+ qNode: qNode,
+ output: next,
+ node: node
+ })
+ }
+ }
+ }
+ }
+
+ return output
+}
+lunr.TokenSet.Builder = function () {
+ this.previousWord = ""
+ this.root = new lunr.TokenSet
+ this.uncheckedNodes = []
+ this.minimizedNodes = {}
+}
+
+lunr.TokenSet.Builder.prototype.insert = function (word) {
+ var node,
+ commonPrefix = 0
+
+ if (word < this.previousWord) {
+ throw new Error ("Out of order word insertion")
+ }
+
+ for (var i = 0; i < word.length && i < this.previousWord.length; i++) {
+ if (word[i] != this.previousWord[i]) break
+ commonPrefix++
+ }
+
+ this.minimize(commonPrefix)
+
+ if (this.uncheckedNodes.length == 0) {
+ node = this.root
+ } else {
+ node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child
+ }
+
+ for (var i = commonPrefix; i < word.length; i++) {
+ var nextNode = new lunr.TokenSet,
+ char = word[i]
+
+ node.edges[char] = nextNode
+
+ this.uncheckedNodes.push({
+ parent: node,
+ char: char,
+ child: nextNode
+ })
+
+ node = nextNode
+ }
+
+ node.final = true
+ this.previousWord = word
+}
+
+lunr.TokenSet.Builder.prototype.finish = function () {
+ this.minimize(0)
+}
+
+lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
+ for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {
+ var node = this.uncheckedNodes[i],
+ childKey = node.child.toString()
+
+ if (childKey in this.minimizedNodes) {
+ node.parent.edges[node.char] = this.minimizedNodes[childKey]
+ } else {
+ // Cache the key for this node since
+ // we know it can't change anymore
+ node.child._str = childKey
+
+ this.minimizedNodes[childKey] = node.child
+ }
+
+ this.uncheckedNodes.pop()
+ }
+}
+/*!
+ * lunr.Index
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * An index contains the built index of all documents and provides a query interface
+ * to the index.
+ *
+ * Usually instances of lunr.Index will not be created using this constructor, instead
+ * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be
+ * used to load previously built and serialized indexes.
+ *
+ * @constructor
+ * @param {Object} attrs - The attributes of the built search index.
+ * @param {Object} attrs.invertedIndex - An index of term/field to document reference.
+ * @param {Object} attrs.fieldVectors - Field vectors
+ * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.
+ * @param {string[]} attrs.fields - The names of indexed document fields.
+ * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.
+ */
+lunr.Index = function (attrs) {
+ this.invertedIndex = attrs.invertedIndex
+ this.fieldVectors = attrs.fieldVectors
+ this.tokenSet = attrs.tokenSet
+ this.fields = attrs.fields
+ this.pipeline = attrs.pipeline
+}
+
+/**
+ * A result contains details of a document matching a search query.
+ * @typedef {Object} lunr.Index~Result
+ * @property {string} ref - The reference of the document this result represents.
+ * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.
+ * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.
+ */
+
+/**
+ * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple
+ * query language which itself is parsed into an instance of lunr.Query.
+ *
+ * For programmatically building queries it is advised to directly use lunr.Query, the query language
+ * is best used for human entered text rather than program generated text.
+ *
+ * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported
+ * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'
+ * or 'world', though those that contain both will rank higher in the results.
+ *
+ * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can
+ * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding
+ * wildcards will increase the number of documents that will be found but can also have a negative
+ * impact on query performance, especially with wildcards at the beginning of a term.
+ *
+ * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term
+ * hello in the title field will match this query. Using a field not present in the index will lead
+ * to an error being thrown.
+ *
+ * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term
+ * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported
+ * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.
+ * Avoid large values for edit distance to improve query performance.
+ *
+ * Each term also supports a presence modifier. By default a term's presence in document is optional, however
+ * this can be changed to either required or prohibited. For a term's presence to be required in a document the
+ * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and
+ * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not
+ * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.
+ *
+ * To escape special characters the backslash character '\' can be used, this allows searches to include
+ * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead
+ * of attempting to apply a boost of 2 to the search term "foo".
+ *
+ * @typedef {string} lunr.Index~QueryString
+ * @example
Simple single term query
+ * hello
+ * @example
Multiple term query
+ * hello world
+ * @example
term scoped to a field
+ * title:hello
+ * @example
term with a boost of 10
+ * hello^10
+ * @example
term with an edit distance of 2
+ * hello~2
+ * @example
terms with presence modifiers
+ * -foo +bar baz
+ */
+
+/**
+ * Performs a search against the index using lunr query syntax.
+ *
+ * Results will be returned sorted by their score, the most relevant results
+ * will be returned first. For details on how the score is calculated, please see
+ * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.
+ *
+ * For more programmatic querying use lunr.Index#query.
+ *
+ * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.
+ * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.
+ * @returns {lunr.Index~Result[]}
+ */
+lunr.Index.prototype.search = function (queryString) {
+ return this.query(function (query) {
+ var parser = new lunr.QueryParser(queryString, query)
+ parser.parse()
+ })
+}
+
+/**
+ * A query builder callback provides a query object to be used to express
+ * the query to perform on the index.
+ *
+ * @callback lunr.Index~queryBuilder
+ * @param {lunr.Query} query - The query object to build up.
+ * @this lunr.Query
+ */
+
+/**
+ * Performs a query against the index using the yielded lunr.Query object.
+ *
+ * If performing programmatic queries against the index, this method is preferred
+ * over lunr.Index#search so as to avoid the additional query parsing overhead.
+ *
+ * A query object is yielded to the supplied function which should be used to
+ * express the query to be run against the index.
+ *
+ * Note that although this function takes a callback parameter it is _not_ an
+ * asynchronous operation, the callback is just yielded a query object to be
+ * customized.
+ *
+ * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.
+ * @returns {lunr.Index~Result[]}
+ */
+lunr.Index.prototype.query = function (fn) {
+ // for each query clause
+ // * process terms
+ // * expand terms from token set
+ // * find matching documents and metadata
+ // * get document vectors
+ // * score documents
+
+ var query = new lunr.Query(this.fields),
+ matchingFields = Object.create(null),
+ queryVectors = Object.create(null),
+ termFieldCache = Object.create(null),
+ requiredMatches = Object.create(null),
+ prohibitedMatches = Object.create(null)
+
+ /*
+ * To support field level boosts a query vector is created per
+ * field. An empty vector is eagerly created to support negated
+ * queries.
+ */
+ for (var i = 0; i < this.fields.length; i++) {
+ queryVectors[this.fields[i]] = new lunr.Vector
+ }
+
+ fn.call(query, query)
+
+ for (var i = 0; i < query.clauses.length; i++) {
+ /*
+ * Unless the pipeline has been disabled for this term, which is
+ * the case for terms with wildcards, we need to pass the clause
+ * term through the search pipeline. A pipeline returns an array
+ * of processed terms. Pipeline functions may expand the passed
+ * term, which means we may end up performing multiple index lookups
+ * for a single query term.
+ */
+ var clause = query.clauses[i],
+ terms = null,
+ clauseMatches = lunr.Set.empty
+
+ if (clause.usePipeline) {
+ terms = this.pipeline.runString(clause.term, {
+ fields: clause.fields
+ })
+ } else {
+ terms = [clause.term]
+ }
+
+ for (var m = 0; m < terms.length; m++) {
+ var term = terms[m]
+
+ /*
+ * Each term returned from the pipeline needs to use the same query
+ * clause object, e.g. the same boost and or edit distance. The
+ * simplest way to do this is to re-use the clause object but mutate
+ * its term property.
+ */
+ clause.term = term
+
+ /*
+ * From the term in the clause we create a token set which will then
+ * be used to intersect the indexes token set to get a list of terms
+ * to lookup in the inverted index
+ */
+ var termTokenSet = lunr.TokenSet.fromClause(clause),
+ expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()
+
+ /*
+ * If a term marked as required does not exist in the tokenSet it is
+ * impossible for the search to return any matches. We set all the field
+ * scoped required matches set to empty and stop examining any further
+ * clauses.
+ */
+ if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {
+ for (var k = 0; k < clause.fields.length; k++) {
+ var field = clause.fields[k]
+ requiredMatches[field] = lunr.Set.empty
+ }
+
+ break
+ }
+
+ for (var j = 0; j < expandedTerms.length; j++) {
+ /*
+ * For each term get the posting and termIndex, this is required for
+ * building the query vector.
+ */
+ var expandedTerm = expandedTerms[j],
+ posting = this.invertedIndex[expandedTerm],
+ termIndex = posting._index
+
+ for (var k = 0; k < clause.fields.length; k++) {
+ /*
+ * For each field that this query term is scoped by (by default
+ * all fields are in scope) we need to get all the document refs
+ * that have this term in that field.
+ *
+ * The posting is the entry in the invertedIndex for the matching
+ * term from above.
+ */
+ var field = clause.fields[k],
+ fieldPosting = posting[field],
+ matchingDocumentRefs = Object.keys(fieldPosting),
+ termField = expandedTerm + "/" + field,
+ matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)
+
+ /*
+ * if the presence of this term is required ensure that the matching
+ * documents are added to the set of required matches for this clause.
+ *
+ */
+ if (clause.presence == lunr.Query.presence.REQUIRED) {
+ clauseMatches = clauseMatches.union(matchingDocumentsSet)
+
+ if (requiredMatches[field] === undefined) {
+ requiredMatches[field] = lunr.Set.complete
+ }
+ }
+
+ /*
+ * if the presence of this term is prohibited ensure that the matching
+ * documents are added to the set of prohibited matches for this field,
+ * creating that set if it does not yet exist.
+ */
+ if (clause.presence == lunr.Query.presence.PROHIBITED) {
+ if (prohibitedMatches[field] === undefined) {
+ prohibitedMatches[field] = lunr.Set.empty
+ }
+
+ prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)
+
+ /*
+ * Prohibited matches should not be part of the query vector used for
+ * similarity scoring and no metadata should be extracted so we continue
+ * to the next field
+ */
+ continue
+ }
+
+ /*
+ * The query field vector is populated using the termIndex found for
+ * the term and a unit value with the appropriate boost applied.
+ * Using upsert because there could already be an entry in the vector
+ * for the term we are working with. In that case we just add the scores
+ * together.
+ */
+ queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })
+
+ /**
+ * If we've already seen this term, field combo then we've already collected
+ * the matching documents and metadata, no need to go through all that again
+ */
+ if (termFieldCache[termField]) {
+ continue
+ }
+
+ for (var l = 0; l < matchingDocumentRefs.length; l++) {
+ /*
+ * All metadata for this term/field/document triple
+ * are then extracted and collected into an instance
+ * of lunr.MatchData ready to be returned in the query
+ * results
+ */
+ var matchingDocumentRef = matchingDocumentRefs[l],
+ matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),
+ metadata = fieldPosting[matchingDocumentRef],
+ fieldMatch
+
+ if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {
+ matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)
+ } else {
+ fieldMatch.add(expandedTerm, field, metadata)
+ }
+
+ }
+
+ termFieldCache[termField] = true
+ }
+ }
+ }
+
+ /**
+ * If the presence was required we need to update the requiredMatches field sets.
+ * We do this after all fields for the term have collected their matches because
+ * the clause terms presence is required in _any_ of the fields not _all_ of the
+ * fields.
+ */
+ if (clause.presence === lunr.Query.presence.REQUIRED) {
+ for (var k = 0; k < clause.fields.length; k++) {
+ var field = clause.fields[k]
+ requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)
+ }
+ }
+ }
+
+ /**
+ * Need to combine the field scoped required and prohibited
+ * matching documents into a global set of required and prohibited
+ * matches
+ */
+ var allRequiredMatches = lunr.Set.complete,
+ allProhibitedMatches = lunr.Set.empty
+
+ for (var i = 0; i < this.fields.length; i++) {
+ var field = this.fields[i]
+
+ if (requiredMatches[field]) {
+ allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])
+ }
+
+ if (prohibitedMatches[field]) {
+ allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])
+ }
+ }
+
+ var matchingFieldRefs = Object.keys(matchingFields),
+ results = [],
+ matches = Object.create(null)
+
+ /*
+ * If the query is negated (contains only prohibited terms)
+ * we need to get _all_ fieldRefs currently existing in the
+ * index. This is only done when we know that the query is
+ * entirely prohibited terms to avoid any cost of getting all
+ * fieldRefs unnecessarily.
+ *
+ * Additionally, blank MatchData must be created to correctly
+ * populate the results.
+ */
+ if (query.isNegated()) {
+ matchingFieldRefs = Object.keys(this.fieldVectors)
+
+ for (var i = 0; i < matchingFieldRefs.length; i++) {
+ var matchingFieldRef = matchingFieldRefs[i]
+ var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)
+ matchingFields[matchingFieldRef] = new lunr.MatchData
+ }
+ }
+
+ for (var i = 0; i < matchingFieldRefs.length; i++) {
+ /*
+ * Currently we have document fields that match the query, but we
+ * need to return documents. The matchData and scores are combined
+ * from multiple fields belonging to the same document.
+ *
+ * Scores are calculated by field, using the query vectors created
+ * above, and combined into a final document score using addition.
+ */
+ var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),
+ docRef = fieldRef.docRef
+
+ if (!allRequiredMatches.contains(docRef)) {
+ continue
+ }
+
+ if (allProhibitedMatches.contains(docRef)) {
+ continue
+ }
+
+ var fieldVector = this.fieldVectors[fieldRef],
+ score = queryVectors[fieldRef.fieldName].similarity(fieldVector),
+ docMatch
+
+ if ((docMatch = matches[docRef]) !== undefined) {
+ docMatch.score += score
+ docMatch.matchData.combine(matchingFields[fieldRef])
+ } else {
+ var match = {
+ ref: docRef,
+ score: score,
+ matchData: matchingFields[fieldRef]
+ }
+ matches[docRef] = match
+ results.push(match)
+ }
+ }
+
+ /*
+ * Sort the results objects by score, highest first.
+ */
+ return results.sort(function (a, b) {
+ return b.score - a.score
+ })
+}
+
+/**
+ * Prepares the index for JSON serialization.
+ *
+ * The schema for this JSON blob will be described in a
+ * separate JSON schema file.
+ *
+ * @returns {Object}
+ */
+lunr.Index.prototype.toJSON = function () {
+ var invertedIndex = Object.keys(this.invertedIndex)
+ .sort()
+ .map(function (term) {
+ return [term, this.invertedIndex[term]]
+ }, this)
+
+ var fieldVectors = Object.keys(this.fieldVectors)
+ .map(function (ref) {
+ return [ref, this.fieldVectors[ref].toJSON()]
+ }, this)
+
+ return {
+ version: lunr.version,
+ fields: this.fields,
+ fieldVectors: fieldVectors,
+ invertedIndex: invertedIndex,
+ pipeline: this.pipeline.toJSON()
+ }
+}
+
+/**
+ * Loads a previously serialized lunr.Index
+ *
+ * @param {Object} serializedIndex - A previously serialized lunr.Index
+ * @returns {lunr.Index}
+ */
+lunr.Index.load = function (serializedIndex) {
+ var attrs = {},
+ fieldVectors = {},
+ serializedVectors = serializedIndex.fieldVectors,
+ invertedIndex = Object.create(null),
+ serializedInvertedIndex = serializedIndex.invertedIndex,
+ tokenSetBuilder = new lunr.TokenSet.Builder,
+ pipeline = lunr.Pipeline.load(serializedIndex.pipeline)
+
+ if (serializedIndex.version != lunr.version) {
+ lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'")
+ }
+
+ for (var i = 0; i < serializedVectors.length; i++) {
+ var tuple = serializedVectors[i],
+ ref = tuple[0],
+ elements = tuple[1]
+
+ fieldVectors[ref] = new lunr.Vector(elements)
+ }
+
+ for (var i = 0; i < serializedInvertedIndex.length; i++) {
+ var tuple = serializedInvertedIndex[i],
+ term = tuple[0],
+ posting = tuple[1]
+
+ tokenSetBuilder.insert(term)
+ invertedIndex[term] = posting
+ }
+
+ tokenSetBuilder.finish()
+
+ attrs.fields = serializedIndex.fields
+
+ attrs.fieldVectors = fieldVectors
+ attrs.invertedIndex = invertedIndex
+ attrs.tokenSet = tokenSetBuilder.root
+ attrs.pipeline = pipeline
+
+ return new lunr.Index(attrs)
+}
+/*!
+ * lunr.Builder
+ * Copyright (C) 2020 Oliver Nightingale
+ */
+
+/**
+ * lunr.Builder performs indexing on a set of documents and
+ * returns instances of lunr.Index ready for querying.
+ *
+ * All configuration of the index is done via the builder, the
+ * fields to index, the document reference, the text processing
+ * pipeline and document scoring parameters are all set on the
+ * builder before indexing.
+ *
+ * @constructor
+ * @property {string} _ref - Internal reference to the document reference field.
+ * @property {string[]} _fields - Internal reference to the document fields to index.
+ * @property {object} invertedIndex - The inverted index maps terms to document fields.
+ * @property {object} documentTermFrequencies - Keeps track of document term frequencies.
+ * @property {object} documentLengths - Keeps track of the length of documents added to the index.
+ * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.
+ * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.
+ * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.
+ * @property {number} documentCount - Keeps track of the total number of documents indexed.
+ * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.
+ * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.
+ * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.
+ * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.
+ */
+lunr.Builder = function () {
+ this._ref = "id"
+ this._fields = Object.create(null)
+ this._documents = Object.create(null)
+ this.invertedIndex = Object.create(null)
+ this.fieldTermFrequencies = {}
+ this.fieldLengths = {}
+ this.tokenizer = lunr.tokenizer
+ this.pipeline = new lunr.Pipeline
+ this.searchPipeline = new lunr.Pipeline
+ this.documentCount = 0
+ this._b = 0.75
+ this._k1 = 1.2
+ this.termIndex = 0
+ this.metadataWhitelist = []
+}
+
+/**
+ * Sets the document field used as the document reference. Every document must have this field.
+ * The type of this field in the document should be a string, if it is not a string it will be
+ * coerced into a string by calling toString.
+ *
+ * The default ref is 'id'.
+ *
+ * The ref should _not_ be changed during indexing, it should be set before any documents are
+ * added to the index. Changing it during indexing can lead to inconsistent results.
+ *
+ * @param {string} ref - The name of the reference field in the document.
+ */
+lunr.Builder.prototype.ref = function (ref) {
+ this._ref = ref
+}
+
+/**
+ * A function that is used to extract a field from a document.
+ *
+ * Lunr expects a field to be at the top level of a document, if however the field
+ * is deeply nested within a document an extractor function can be used to extract
+ * the right field for indexing.
+ *
+ * @callback fieldExtractor
+ * @param {object} doc - The document being added to the index.
+ * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.
+ * @example
Extracting a nested field
+ * function (doc) { return doc.nested.field }
+ */
+
+/**
+ * Adds a field to the list of document fields that will be indexed. Every document being
+ * indexed should have this field. Null values for this field in indexed documents will
+ * not cause errors but will limit the chance of that document being retrieved by searches.
+ *
+ * All fields should be added before adding documents to the index. Adding fields after
+ * a document has been indexed will have no effect on already indexed documents.
+ *
+ * Fields can be boosted at build time. This allows terms within that field to have more
+ * importance when ranking search results. Use a field boost to specify that matches within
+ * one field are more important than other fields.
+ *
+ * @param {string} fieldName - The name of a field to index in all documents.
+ * @param {object} attributes - Optional attributes associated with this field.
+ * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.
+ * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.
+ * @throws {RangeError} fieldName cannot contain unsupported characters '/'
+ */
+lunr.Builder.prototype.field = function (fieldName, attributes) {
+ if (/\//.test(fieldName)) {
+ throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'")
+ }
+
+ this._fields[fieldName] = attributes || {}
+}
+
+/**
+ * A parameter to tune the amount of field length normalisation that is applied when
+ * calculating relevance scores. A value of 0 will completely disable any normalisation
+ * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b
+ * will be clamped to the range 0 - 1.
+ *
+ * @param {number} number - The value to set for this tuning parameter.
+ */
+lunr.Builder.prototype.b = function (number) {
+ if (number < 0) {
+ this._b = 0
+ } else if (number > 1) {
+ this._b = 1
+ } else {
+ this._b = number
+ }
+}
+
+/**
+ * A parameter that controls the speed at which a rise in term frequency results in term
+ * frequency saturation. The default value is 1.2. Setting this to a higher value will give
+ * slower saturation levels, a lower value will result in quicker saturation.
+ *
+ * @param {number} number - The value to set for this tuning parameter.
+ */
+lunr.Builder.prototype.k1 = function (number) {
+ this._k1 = number
+}
+
+/**
+ * Adds a document to the index.
+ *
+ * Before adding fields to the index the index should have been fully setup, with the document
+ * ref and all fields to index already having been specified.
+ *
+ * The document must have a field name as specified by the ref (by default this is 'id') and
+ * it should have all fields defined for indexing, though null or undefined values will not
+ * cause errors.
+ *
+ * Entire documents can be boosted at build time. Applying a boost to a document indicates that
+ * this document should rank higher in search results than other documents.
+ *
+ * @param {object} doc - The document to add to the index.
+ * @param {object} attributes - Optional attributes associated with this document.
+ * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.
+ */
+lunr.Builder.prototype.add = function (doc, attributes) {
+ var docRef = doc[this._ref],
+ fields = Object.keys(this._fields)
+
+ this._documents[docRef] = attributes || {}
+ this.documentCount += 1
+
+ for (var i = 0; i < fields.length; i++) {
+ var fieldName = fields[i],
+ extractor = this._fields[fieldName].extractor,
+ field = extractor ? extractor(doc) : doc[fieldName],
+ tokens = this.tokenizer(field, {
+ fields: [fieldName]
+ }),
+ terms = this.pipeline.run(tokens),
+ fieldRef = new lunr.FieldRef (docRef, fieldName),
+ fieldTerms = Object.create(null)
+
+ this.fieldTermFrequencies[fieldRef] = fieldTerms
+ this.fieldLengths[fieldRef] = 0
+
+ // store the length of this field for this document
+ this.fieldLengths[fieldRef] += terms.length
+
+ // calculate term frequencies for this field
+ for (var j = 0; j < terms.length; j++) {
+ var term = terms[j]
+
+ if (fieldTerms[term] == undefined) {
+ fieldTerms[term] = 0
+ }
+
+ fieldTerms[term] += 1
+
+ // add to inverted index
+ // create an initial posting if one doesn't exist
+ if (this.invertedIndex[term] == undefined) {
+ var posting = Object.create(null)
+ posting["_index"] = this.termIndex
+ this.termIndex += 1
+
+ for (var k = 0; k < fields.length; k++) {
+ posting[fields[k]] = Object.create(null)
+ }
+
+ this.invertedIndex[term] = posting
+ }
+
+ // add an entry for this term/fieldName/docRef to the invertedIndex
+ if (this.invertedIndex[term][fieldName][docRef] == undefined) {
+ this.invertedIndex[term][fieldName][docRef] = Object.create(null)
+ }
+
+ // store all whitelisted metadata about this token in the
+ // inverted index
+ for (var l = 0; l < this.metadataWhitelist.length; l++) {
+ var metadataKey = this.metadataWhitelist[l],
+ metadata = term.metadata[metadataKey]
+
+ if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {
+ this.invertedIndex[term][fieldName][docRef][metadataKey] = []
+ }
+
+ this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)
+ }
+ }
+
+ }
+}
+
+/**
+ * Calculates the average document length for this index
+ *
+ * @private
+ */
+lunr.Builder.prototype.calculateAverageFieldLengths = function () {
+
+ var fieldRefs = Object.keys(this.fieldLengths),
+ numberOfFields = fieldRefs.length,
+ accumulator = {},
+ documentsWithField = {}
+
+ for (var i = 0; i < numberOfFields; i++) {
+ var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
+ field = fieldRef.fieldName
+
+ documentsWithField[field] || (documentsWithField[field] = 0)
+ documentsWithField[field] += 1
+
+ accumulator[field] || (accumulator[field] = 0)
+ accumulator[field] += this.fieldLengths[fieldRef]
+ }
+
+ var fields = Object.keys(this._fields)
+
+ for (var i = 0; i < fields.length; i++) {
+ var fieldName = fields[i]
+ accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]
+ }
+
+ this.averageFieldLength = accumulator
+}
+
+/**
+ * Builds a vector space model of every document using lunr.Vector
+ *
+ * @private
+ */
+lunr.Builder.prototype.createFieldVectors = function () {
+ var fieldVectors = {},
+ fieldRefs = Object.keys(this.fieldTermFrequencies),
+ fieldRefsLength = fieldRefs.length,
+ termIdfCache = Object.create(null)
+
+ for (var i = 0; i < fieldRefsLength; i++) {
+ var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
+ fieldName = fieldRef.fieldName,
+ fieldLength = this.fieldLengths[fieldRef],
+ fieldVector = new lunr.Vector,
+ termFrequencies = this.fieldTermFrequencies[fieldRef],
+ terms = Object.keys(termFrequencies),
+ termsLength = terms.length
+
+
+ var fieldBoost = this._fields[fieldName].boost || 1,
+ docBoost = this._documents[fieldRef.docRef].boost || 1
+
+ for (var j = 0; j < termsLength; j++) {
+ var term = terms[j],
+ tf = termFrequencies[term],
+ termIndex = this.invertedIndex[term]._index,
+ idf, score, scoreWithPrecision
+
+ if (termIdfCache[term] === undefined) {
+ idf = lunr.idf(this.invertedIndex[term], this.documentCount)
+ termIdfCache[term] = idf
+ } else {
+ idf = termIdfCache[term]
+ }
+
+ score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)
+ score *= fieldBoost
+ score *= docBoost
+ scoreWithPrecision = Math.round(score * 1000) / 1000
+ // Converts 1.23456789 to 1.234.
+ // Reducing the precision so that the vectors take up less
+ // space when serialised. Doing it now so that they behave
+ // the same before and after serialisation. Also, this is
+ // the fastest approach to reducing a number's precision in
+ // JavaScript.
+
+ fieldVector.insert(termIndex, scoreWithPrecision)
+ }
+
+ fieldVectors[fieldRef] = fieldVector
+ }
+
+ this.fieldVectors = fieldVectors
+}
+
+/**
+ * Creates a token set of all tokens in the index using lunr.TokenSet
+ *
+ * @private
+ */
+lunr.Builder.prototype.createTokenSet = function () {
+ this.tokenSet = lunr.TokenSet.fromArray(
+ Object.keys(this.invertedIndex).sort()
+ )
+}
+
+/**
+ * Builds the index, creating an instance of lunr.Index.
+ *
+ * This completes the indexing process and should only be called
+ * once all documents have been added to the index.
+ *
+ * @returns {lunr.Index}
+ */
+lunr.Builder.prototype.build = function () {
+ this.calculateAverageFieldLengths()
+ this.createFieldVectors()
+ this.createTokenSet()
+
+ return new lunr.Index({
+ invertedIndex: this.invertedIndex,
+ fieldVectors: this.fieldVectors,
+ tokenSet: this.tokenSet,
+ fields: Object.keys(this._fields),
+ pipeline: this.searchPipeline
+ })
+}
+
+/**
+ * Applies a plugin to the index builder.
+ *
+ * A plugin is a function that is called with the index builder as its context.
+ * Plugins can be used to customise or extend the behaviour of the index
+ * in some way. A plugin is just a function, that encapsulated the custom
+ * behaviour that should be applied when building the index.
+ *
+ * The plugin function will be called with the index builder as its argument, additional
+ * arguments can also be passed when calling use. The function will be called
+ * with the index builder as its context.
+ *
+ * @param {Function} plugin The plugin to apply.
+ */
+lunr.Builder.prototype.use = function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1)
+ args.unshift(this)
+ fn.apply(this, args)
+}
+/**
+ * Contains and collects metadata about a matching document.
+ * A single instance of lunr.MatchData is returned as part of every
+ * lunr.Index~Result.
+ *
+ * @constructor
+ * @param {string} term - The term this match data is associated with
+ * @param {string} field - The field in which the term was found
+ * @param {object} metadata - The metadata recorded about this term in this field
+ * @property {object} metadata - A cloned collection of metadata associated with this document.
+ * @see {@link lunr.Index~Result}
+ */
+lunr.MatchData = function (term, field, metadata) {
+ var clonedMetadata = Object.create(null),
+ metadataKeys = Object.keys(metadata || {})
+
+ // Cloning the metadata to prevent the original
+ // being mutated during match data combination.
+ // Metadata is kept in an array within the inverted
+ // index so cloning the data can be done with
+ // Array#slice
+ for (var i = 0; i < metadataKeys.length; i++) {
+ var key = metadataKeys[i]
+ clonedMetadata[key] = metadata[key].slice()
+ }
+
+ this.metadata = Object.create(null)
+
+ if (term !== undefined) {
+ this.metadata[term] = Object.create(null)
+ this.metadata[term][field] = clonedMetadata
+ }
+}
+
+/**
+ * An instance of lunr.MatchData will be created for every term that matches a
+ * document. However only one instance is required in a lunr.Index~Result. This
+ * method combines metadata from another instance of lunr.MatchData with this
+ * objects metadata.
+ *
+ * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.
+ * @see {@link lunr.Index~Result}
+ */
+lunr.MatchData.prototype.combine = function (otherMatchData) {
+ var terms = Object.keys(otherMatchData.metadata)
+
+ for (var i = 0; i < terms.length; i++) {
+ var term = terms[i],
+ fields = Object.keys(otherMatchData.metadata[term])
+
+ if (this.metadata[term] == undefined) {
+ this.metadata[term] = Object.create(null)
+ }
+
+ for (var j = 0; j < fields.length; j++) {
+ var field = fields[j],
+ keys = Object.keys(otherMatchData.metadata[term][field])
+
+ if (this.metadata[term][field] == undefined) {
+ this.metadata[term][field] = Object.create(null)
+ }
+
+ for (var k = 0; k < keys.length; k++) {
+ var key = keys[k]
+
+ if (this.metadata[term][field][key] == undefined) {
+ this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]
+ } else {
+ this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])
+ }
+
+ }
+ }
+ }
+}
+
+/**
+ * Add metadata for a term/field pair to this instance of match data.
+ *
+ * @param {string} term - The term this match data is associated with
+ * @param {string} field - The field in which the term was found
+ * @param {object} metadata - The metadata recorded about this term in this field
+ */
+lunr.MatchData.prototype.add = function (term, field, metadata) {
+ if (!(term in this.metadata)) {
+ this.metadata[term] = Object.create(null)
+ this.metadata[term][field] = metadata
+ return
+ }
+
+ if (!(field in this.metadata[term])) {
+ this.metadata[term][field] = metadata
+ return
+ }
+
+ var metadataKeys = Object.keys(metadata)
+
+ for (var i = 0; i < metadataKeys.length; i++) {
+ var key = metadataKeys[i]
+
+ if (key in this.metadata[term][field]) {
+ this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])
+ } else {
+ this.metadata[term][field][key] = metadata[key]
+ }
+ }
+}
+/**
+ * A lunr.Query provides a programmatic way of defining queries to be performed
+ * against a {@link lunr.Index}.
+ *
+ * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method
+ * so the query object is pre-initialized with the right index fields.
+ *
+ * @constructor
+ * @property {lunr.Query~Clause[]} clauses - An array of query clauses.
+ * @property {string[]} allFields - An array of all available fields in a lunr.Index.
+ */
+lunr.Query = function (allFields) {
+ this.clauses = []
+ this.allFields = allFields
+}
+
+/**
+ * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.
+ *
+ * This allows wildcards to be added to the beginning and end of a term without having to manually do any string
+ * concatenation.
+ *
+ * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.
+ *
+ * @constant
+ * @default
+ * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour
+ * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists
+ * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists
+ * @see lunr.Query~Clause
+ * @see lunr.Query#clause
+ * @see lunr.Query#term
+ * @example
+ * query.term('foo', {
+ * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING
+ * })
+ */
+
+lunr.Query.wildcard = new String ("*")
+lunr.Query.wildcard.NONE = 0
+lunr.Query.wildcard.LEADING = 1
+lunr.Query.wildcard.TRAILING = 2
+
+/**
+ * Constants for indicating what kind of presence a term must have in matching documents.
+ *
+ * @constant
+ * @enum {number}
+ * @see lunr.Query~Clause
+ * @see lunr.Query#clause
+ * @see lunr.Query#term
+ * @example
query term with required presence
+ * query.term('foo', { presence: lunr.Query.presence.REQUIRED })
+ */
+lunr.Query.presence = {
+ /**
+ * Term's presence in a document is optional, this is the default value.
+ */
+ OPTIONAL: 1,
+
+ /**
+ * Term's presence in a document is required, documents that do not contain
+ * this term will not be returned.
+ */
+ REQUIRED: 2,
+
+ /**
+ * Term's presence in a document is prohibited, documents that do contain
+ * this term will not be returned.
+ */
+ PROHIBITED: 3
+}
+
+/**
+ * A single clause in a {@link lunr.Query} contains a term and details on how to
+ * match that term against a {@link lunr.Index}.
+ *
+ * @typedef {Object} lunr.Query~Clause
+ * @property {string[]} fields - The fields in an index this clause should be matched against.
+ * @property {number} [boost=1] - Any boost that should be applied when matching this clause.
+ * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.
+ * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.
+ * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.
+ * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.
+ */
+
+/**
+ * Adds a {@link lunr.Query~Clause} to this query.
+ *
+ * Unless the clause contains the fields to be matched all fields will be matched. In addition
+ * a default boost of 1 is applied to the clause.
+ *
+ * @param {lunr.Query~Clause} clause - The clause to add to this query.
+ * @see lunr.Query~Clause
+ * @returns {lunr.Query}
+ */
+lunr.Query.prototype.clause = function (clause) {
+ if (!('fields' in clause)) {
+ clause.fields = this.allFields
+ }
+
+ if (!('boost' in clause)) {
+ clause.boost = 1
+ }
+
+ if (!('usePipeline' in clause)) {
+ clause.usePipeline = true
+ }
+
+ if (!('wildcard' in clause)) {
+ clause.wildcard = lunr.Query.wildcard.NONE
+ }
+
+ if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {
+ clause.term = "*" + clause.term
+ }
+
+ if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {
+ clause.term = "" + clause.term + "*"
+ }
+
+ if (!('presence' in clause)) {
+ clause.presence = lunr.Query.presence.OPTIONAL
+ }
+
+ this.clauses.push(clause)
+
+ return this
+}
+
+/**
+ * A negated query is one in which every clause has a presence of
+ * prohibited. These queries require some special processing to return
+ * the expected results.
+ *
+ * @returns boolean
+ */
+lunr.Query.prototype.isNegated = function () {
+ for (var i = 0; i < this.clauses.length; i++) {
+ if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {
+ return false
+ }
+ }
+
+ return true
+}
+
+/**
+ * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}
+ * to the list of clauses that make up this query.
+ *
+ * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion
+ * to a token or token-like string should be done before calling this method.
+ *
+ * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an
+ * array, each term in the array will share the same options.
+ *
+ * @param {object|object[]} term - The term(s) to add to the query.
+ * @param {object} [options] - Any additional properties to add to the query clause.
+ * @returns {lunr.Query}
+ * @see lunr.Query#clause
+ * @see lunr.Query~Clause
+ * @example
adding a single term to a query
+ * query.term("foo")
+ * @example
adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard
")),e.inlineElement=o}return h.updateStatus("ready"),h._parseMarkup(t,{},e),t}}});function N(){I&&u(document.body).removeClass(I)}function j(){N(),h.req&&h.req.abort()}var I,L="ajax";u.magnificPopup.registerModule(L,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'The content could not be loaded.'},proto:{initAjax:function(){h.types.push(L),I=h.st.ajax.cursor,c(l+"."+L,j),c("BeforeChange."+L,j)},getAjax:function(r){I&&u(document.body).addClass(I),h.updateStatus("loading");var e=u.extend({url:r.src,success:function(e,t,n){n={data:e,xhr:n};d("ParseAjax",n),h.appendContent(u(n.data),L),r.finished=!0,N(),h._setFocus(),setTimeout(function(){h.wrap.addClass(w)},16),h.updateStatus("ready"),d("AjaxContentAdded")},error:function(){N(),r.finished=r.loadError=!0,h.updateStatus("error",h.st.ajax.tError.replace("%url%",r.src))}},h.st.ajax.settings);return h.req=u.ajax(e),""}}});var D;u.magnificPopup.registerModule("image",{options:{markup:'
',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'The image could not be loaded.'},proto:{initImage:function(){var e=h.st.image,t=".image";h.types.push("image"),c(b+t,function(){"image"===h.currItem.type&&e.cursor&&u(document.body).addClass(e.cursor)}),c(l+t,function(){e.cursor&&u(document.body).removeClass(e.cursor),C.off("resize"+x)}),c("Resize"+t,h.resizeImage),h.isLowIE&&c("AfterChange",h.resizeImage)},resizeImage:function(){var e,t=h.currItem;t&&t.img&&h.st.image.verticalFit&&(e=0,h.isLowIE&&(e=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",h.wH-e))},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,D&&clearInterval(D),e.isCheckingImgSize=!1,d("ImageHasSize",e),e.imgHidden&&(h.content&&h.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(t){var n=0,r=t.img[0],o=function(e){D&&clearInterval(D),D=setInterval(function(){0
',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){h.types.push(P),c("BeforeChange",function(e,t,n){t!==n&&(t===P?H():n===P&&H(!0))}),c(l+"."+P,function(){H()})},getIframe:function(e,t){var n=e.src,r=h.st.iframe;u.each(r.patterns,function(){if(-1',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=h.st.gallery,e=".mfp-gallery";if(h.direction=!0,!i||!i.enabled)return!1;g+=" mfp-gallery",c(b+e,function(){i.navigateByImgClick&&h.wrap.on("click"+e,".mfp-img",function(){if(1=h.index,h.index=e,h.updateItemHTML()},preloadNearbyImages:function(){for(var e=h.st.gallery.preload,t=Math.min(e[0],h.items.length),n=Math.min(e[1],h.items.length),r=1;r<=(h.direction?n:t);r++)h._preloadItem(h.index+r);for(r=1;r<=(h.direction?t:n);r++)h._preloadItem(h.index-r)},_preloadItem:function(e){var t;e=q(e),h.items[e].preloaded||((t=h.items[e]).parsed||(t=h.parseEl(e)),d("LazyLoad",t),"image"===t.type&&(t.img=u('').on("load.mfploader",function(){t.hasSize=!0}).on("error.mfploader",function(){t.hasSize=!0,t.loadError=!0,d("LazyLoadError",t)}).attr("src",t.src)),t.preloaded=!0)}}});var _="retina";u.magnificPopup.registerModule(_,{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){var n,r;1t.durationMax?t.durationMax:t.durationMin&&e=l)return b.cancelScroll(!0),e=t,n=g,0===(t=r)&&document.body.focus(),n||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),x.scrollTo(0,e)),E("scrollStop",m,r,o),!(y=f=null)},h=function(e){var t,n,r;u+=e-(f=f||e),d=i+s*(n=d=1<(d=0===c?0:u/c)?1:d,"easeInQuad"===(t=m).easing&&(r=n*n),"easeOutQuad"===t.easing&&(r=n*(2-n)),"easeInOutQuad"===t.easing&&(r=n<.5?2*n*n:(4-2*n)*n-1),"easeInCubic"===t.easing&&(r=n*n*n),"easeOutCubic"===t.easing&&(r=--n*n*n+1),"easeInOutCubic"===t.easing&&(r=n<.5?4*n*n*n:(n-1)*(2*n-2)*(2*n-2)+1),"easeInQuart"===t.easing&&(r=n*n*n*n),"easeOutQuart"===t.easing&&(r=1- --n*n*n*n),"easeInOutQuart"===t.easing&&(r=n<.5?8*n*n*n*n:1-8*--n*n*n*n),"easeInQuint"===t.easing&&(r=n*n*n*n*n),"easeOutQuint"===t.easing&&(r=1+--n*n*n*n*n),"easeInOutQuint"===t.easing&&(r=n<.5?16*n*n*n*n*n:1+16*--n*n*n*n*n),(r=t.customEasing?t.customEasing(n):r)||n),x.scrollTo(0,Math.floor(d)),p(d,a)||(y=x.requestAnimationFrame(h),f=e)},0===x.pageYOffset&&x.scrollTo(0,0),t=r,e=m,g||history.pushState&&e.updateURL&&history.pushState({smoothScroll:JSON.stringify(e),anchor:t.id},document.title,t===document.documentElement?"#top":"#"+t.id),"matchMedia"in x&&x.matchMedia("(prefers-reduced-motion)").matches?x.scrollTo(0,Math.floor(a)):(E("scrollStart",m,r,o),b.cancelScroll(!0),x.requestAnimationFrame(h)))};function t(e){if(!e.defaultPrevented&&!(0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey)&&"closest"in e.target&&(o=e.target.closest(r))&&"a"===o.tagName.toLowerCase()&&!e.target.closest(v.ignore)&&o.hostname===x.location.hostname&&o.pathname===x.location.pathname&&/#/.test(o.href)){var t,n;try{n=a(decodeURIComponent(o.hash))}catch(e){n=a(o.hash)}if("#"===n){if(!v.topOnEmptyHash)return;t=document.documentElement}else t=document.querySelector(n);(t=t||"#top"!==n?t:document.documentElement)&&(e.preventDefault(),n=v,history.replaceState&&n.updateURL&&!history.state&&(e=(e=x.location.hash)||"",history.replaceState({smoothScroll:JSON.stringify(n),anchor:e||x.pageYOffset},document.title,e||x.location.href)),b.animateScroll(t,o))}}function i(e){var t;null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(v)&&("string"==typeof(t=history.state.anchor)&&t&&!(t=document.querySelector(a(history.state.anchor)))||b.animateScroll(t,null,{updateURL:!1}))}b.destroy=function(){v&&(document.removeEventListener("click",t,!1),x.removeEventListener("popstate",i,!1),b.cancelScroll(),y=n=o=v=null)};return function(){if(!("querySelector"in document&&"addEventListener"in x&&"requestAnimationFrame"in x&&"closest"in x.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";b.destroy(),v=w(S,e||{}),n=v.header?document.querySelector(v.header):null,document.addEventListener("click",t,!1),v.updateURL&&v.popstate&&x.addEventListener("popstate",i,!1)}(),b}}),function(e,t){"function"==typeof define&&define.amd?define([],function(){return t(e)}):"object"==typeof exports?module.exports=t(e):e.Gumshoe=t(e)}("undefined"!=typeof global?global:"undefined"!=typeof window?window:this,function(c){"use strict";function f(e,t,n){n.settings.events&&(n=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n}),t.dispatchEvent(n))}function n(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return 0<=t?t:0}function d(e){e&&e.sort(function(e,t){return n(e.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)}function p(e,t){var n,r,o=e[e.length-1];if(n=o,r=t,!(!s()||!a(n.content,r,!0)))return o;for(var i=e.length-1;0<=i;i--)if(a(e[i].content,t))return e[i]}function h(e,t){var n;!e||(n=e.nav.closest("li"))&&(n.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),r(n,t),f("gumshoeDeactivate",n,{link:e.nav,content:e.content,settings:t}))}var m={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},r=function(e,t){!t.nested||(e=e.parentNode.closest("li"))&&(e.classList.remove(t.nestedClass),r(e,t))},g=function(e,t){!t.nested||(e=e.parentNode.closest("li"))&&(e.classList.add(t.nestedClass),g(e,t))};return function(e,t){var n,o,i,r,a,s={setup:function(){n=document.querySelectorAll(e),o=[],Array.prototype.forEach.call(n,function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&o.push({nav:e,content:t})}),d(o)}};s.detect=function(){var e,t,n,r=p(o,a);r?i&&r.content===i.content||(h(i,a),t=a,!(e=r)||(n=e.nav.closest("li"))&&(n.classList.add(t.navClass),e.content.classList.add(t.contentClass),g(n,t),f("gumshoeActivate",n,{link:e.nav,content:e.content,settings:t})),i=r):i&&(h(i,a),i=null)};function l(e){r&&c.cancelAnimationFrame(r),r=c.requestAnimationFrame(s.detect)}function u(e){r&&c.cancelAnimationFrame(r),r=c.requestAnimationFrame(function(){d(o),s.detect()})}s.destroy=function(){i&&h(i,a),c.removeEventListener("scroll",l,!1),a.reflow&&c.removeEventListener("resize",u,!1),a=r=i=n=o=null};return a=function(){var n={};return Array.prototype.forEach.call(arguments,function(e){for(var t in e){if(!e.hasOwnProperty(t))return;n[t]=e[t]}}),n}(m,t||{}),s.setup(),s.detect(),c.addEventListener("scroll",l,!1),a.reflow&&c.addEventListener("resize",u,!1),s}}),$(function(){$("#main").fitVids();function e(){(0===$(".author__urls-wrapper").find("button").length?1024<$(window).width():!$(".author__urls-wrapper").find("button").is(":visible"))?$(".sidebar").addClass("sticky"):$(".sidebar").removeClass("sticky")}e(),$(window).resize(function(){e()}),$(".author__urls-wrapper").find("button").on("click",function(){$(".author__urls").toggleClass("is--visible"),$(".author__urls-wrapper").find("button").toggleClass("open")}),$(document).keyup(function(e){27===e.keyCode&&$(".initial-content").hasClass("is--hidden")&&($(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"))}),$(".search__toggle").on("click",function(){$(".search-content").toggleClass("is--visible"),$(".initial-content").toggleClass("is--hidden"),setTimeout(function(){$(".search-content").find("input").focus()},400)});new SmoothScroll('a[href*="#"]',{offset:20,speed:400,speedAsDuration:!0,durationMax:500});0<$("nav.toc").length&&new Gumshoe("nav.toc a",{navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:20,reflow:!0,events:!0}),$("a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif'],a[href$='.webp']").has("> img").addClass("image-popup"),$(".image-popup").magnificPopup({type:"image",tLoading:"Loading image #%curr%...",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{tError:'Image #%curr% could not be loaded.'},removalDelay:500,mainClass:"mfp-zoom-in",callbacks:{beforeOpen:function(){this.st.image.markup=this.st.image.markup.replace("mfp-figure","mfp-figure mfp-with-anim")}},closeOnContentClick:!0,midClick:!0}),$(".page__content").find("h1, h2, h3, h4, h5, h6").each(function(){var e,t=$(this).attr("id");t&&((e=document.createElement("a")).className="header-link",e.href="#"+t,e.innerHTML='Permalink',e.title="Permalink",$(this).append(e))})});
\ No newline at end of file
diff --git a/docs/assets/js/plugins/gumshoe.js b/docs/assets/js/plugins/gumshoe.js
new file mode 100644
index 0000000000..713b6eb303
--- /dev/null
+++ b/docs/assets/js/plugins/gumshoe.js
@@ -0,0 +1,484 @@
+/*!
+ * gumshoejs v5.1.1
+ * A simple, framework-agnostic scrollspy script.
+ * (c) 2019 Chris Ferdinandi
+ * MIT License
+ * http://github.com/cferdinandi/gumshoe
+ */
+
+(function (root, factory) {
+ if ( typeof define === 'function' && define.amd ) {
+ define([], (function () {
+ return factory(root);
+ }));
+ } else if ( typeof exports === 'object' ) {
+ module.exports = factory(root);
+ } else {
+ root.Gumshoe = factory(root);
+ }
+})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) {
+
+ 'use strict';
+
+ //
+ // Defaults
+ //
+
+ var defaults = {
+
+ // Active classes
+ navClass: 'active',
+ contentClass: 'active',
+
+ // Nested navigation
+ nested: false,
+ nestedClass: 'active',
+
+ // Offset & reflow
+ offset: 0,
+ reflow: false,
+
+ // Event support
+ events: true
+
+ };
+
+
+ //
+ // Methods
+ //
+
+ /**
+ * Merge two or more objects together.
+ * @param {Object} objects The objects to merge together
+ * @returns {Object} Merged values of defaults and options
+ */
+ var extend = function () {
+ var merged = {};
+ Array.prototype.forEach.call(arguments, (function (obj) {
+ for (var key in obj) {
+ if (!obj.hasOwnProperty(key)) return;
+ merged[key] = obj[key];
+ }
+ }));
+ return merged;
+ };
+
+ /**
+ * Emit a custom event
+ * @param {String} type The event type
+ * @param {Node} elem The element to attach the event to
+ * @param {Object} detail Any details to pass along with the event
+ */
+ var emitEvent = function (type, elem, detail) {
+
+ // Make sure events are enabled
+ if (!detail.settings.events) return;
+
+ // Create a new event
+ var event = new CustomEvent(type, {
+ bubbles: true,
+ cancelable: true,
+ detail: detail
+ });
+
+ // Dispatch the event
+ elem.dispatchEvent(event);
+
+ };
+
+ /**
+ * Get an element's distance from the top of the Document.
+ * @param {Node} elem The element
+ * @return {Number} Distance from the top in pixels
+ */
+ var getOffsetTop = function (elem) {
+ var location = 0;
+ if (elem.offsetParent) {
+ while (elem) {
+ location += elem.offsetTop;
+ elem = elem.offsetParent;
+ }
+ }
+ return location >= 0 ? location : 0;
+ };
+
+ /**
+ * Sort content from first to last in the DOM
+ * @param {Array} contents The content areas
+ */
+ var sortContents = function (contents) {
+ if(contents) {
+ contents.sort((function (item1, item2) {
+ var offset1 = getOffsetTop(item1.content);
+ var offset2 = getOffsetTop(item2.content);
+ if (offset1 < offset2) return -1;
+ return 1;
+ }));
+ }
+ };
+
+ /**
+ * Get the offset to use for calculating position
+ * @param {Object} settings The settings for this instantiation
+ * @return {Float} The number of pixels to offset the calculations
+ */
+ var getOffset = function (settings) {
+
+ // if the offset is a function run it
+ if (typeof settings.offset === 'function') {
+ return parseFloat(settings.offset());
+ }
+
+ // Otherwise, return it as-is
+ return parseFloat(settings.offset);
+
+ };
+
+ /**
+ * Get the document element's height
+ * @private
+ * @returns {Number}
+ */
+ var getDocumentHeight = function () {
+ return Math.max(
+ document.body.scrollHeight, document.documentElement.scrollHeight,
+ document.body.offsetHeight, document.documentElement.offsetHeight,
+ document.body.clientHeight, document.documentElement.clientHeight
+ );
+ };
+
+ /**
+ * Determine if an element is in view
+ * @param {Node} elem The element
+ * @param {Object} settings The settings for this instantiation
+ * @param {Boolean} bottom If true, check if element is above bottom of viewport instead
+ * @return {Boolean} Returns true if element is in the viewport
+ */
+ var isInView = function (elem, settings, bottom) {
+ var bounds = elem.getBoundingClientRect();
+ var offset = getOffset(settings);
+ if (bottom) {
+ return parseInt(bounds.bottom, 10) < (window.innerHeight || document.documentElement.clientHeight);
+ }
+ return parseInt(bounds.top, 10) <= offset;
+ };
+
+ /**
+ * Check if at the bottom of the viewport
+ * @return {Boolean} If true, page is at the bottom of the viewport
+ */
+ var isAtBottom = function () {
+ if (window.innerHeight + window.pageYOffset >= getDocumentHeight()) return true;
+ return false;
+ };
+
+ /**
+ * Check if the last item should be used (even if not at the top of the page)
+ * @param {Object} item The last item
+ * @param {Object} settings The settings for this instantiation
+ * @return {Boolean} If true, use the last item
+ */
+ var useLastItem = function (item, settings) {
+ if (isAtBottom() && isInView(item.content, settings, true)) return true;
+ return false;
+ };
+
+ /**
+ * Get the active content
+ * @param {Array} contents The content areas
+ * @param {Object} settings The settings for this instantiation
+ * @return {Object} The content area and matching navigation link
+ */
+ var getActive = function (contents, settings) {
+ var last = contents[contents.length-1];
+ if (useLastItem(last, settings)) return last;
+ for (var i = contents.length - 1; i >= 0; i--) {
+ if (isInView(contents[i].content, settings)) return contents[i];
+ }
+ };
+
+ /**
+ * Deactivate parent navs in a nested navigation
+ * @param {Node} nav The starting navigation element
+ * @param {Object} settings The settings for this instantiation
+ */
+ var deactivateNested = function (nav, settings) {
+
+ // If nesting isn't activated, bail
+ if (!settings.nested) return;
+
+ // Get the parent navigation
+ var li = nav.parentNode.closest('li');
+ if (!li) return;
+
+ // Remove the active class
+ li.classList.remove(settings.nestedClass);
+
+ // Apply recursively to any parent navigation elements
+ deactivateNested(li, settings);
+
+ };
+
+ /**
+ * Deactivate a nav and content area
+ * @param {Object} items The nav item and content to deactivate
+ * @param {Object} settings The settings for this instantiation
+ */
+ var deactivate = function (items, settings) {
+
+ // Make sure their are items to deactivate
+ if (!items) return;
+
+ // Get the parent list item
+ var li = items.nav.closest('li');
+ if (!li) return;
+
+ // Remove the active class from the nav and content
+ li.classList.remove(settings.navClass);
+ items.content.classList.remove(settings.contentClass);
+
+ // Deactivate any parent navs in a nested navigation
+ deactivateNested(li, settings);
+
+ // Emit a custom event
+ emitEvent('gumshoeDeactivate', li, {
+ link: items.nav,
+ content: items.content,
+ settings: settings
+ });
+
+ };
+
+
+ /**
+ * Activate parent navs in a nested navigation
+ * @param {Node} nav The starting navigation element
+ * @param {Object} settings The settings for this instantiation
+ */
+ var activateNested = function (nav, settings) {
+
+ // If nesting isn't activated, bail
+ if (!settings.nested) return;
+
+ // Get the parent navigation
+ var li = nav.parentNode.closest('li');
+ if (!li) return;
+
+ // Add the active class
+ li.classList.add(settings.nestedClass);
+
+ // Apply recursively to any parent navigation elements
+ activateNested(li, settings);
+
+ };
+
+ /**
+ * Activate a nav and content area
+ * @param {Object} items The nav item and content to activate
+ * @param {Object} settings The settings for this instantiation
+ */
+ var activate = function (items, settings) {
+
+ // Make sure their are items to activate
+ if (!items) return;
+
+ // Get the parent list item
+ var li = items.nav.closest('li');
+ if (!li) return;
+
+ // Add the active class to the nav and content
+ li.classList.add(settings.navClass);
+ items.content.classList.add(settings.contentClass);
+
+ // Activate any parent navs in a nested navigation
+ activateNested(li, settings);
+
+ // Emit a custom event
+ emitEvent('gumshoeActivate', li, {
+ link: items.nav,
+ content: items.content,
+ settings: settings
+ });
+
+ };
+
+ /**
+ * Create the Constructor object
+ * @param {String} selector The selector to use for navigation items
+ * @param {Object} options User options and settings
+ */
+ var Constructor = function (selector, options) {
+
+ //
+ // Variables
+ //
+
+ var publicAPIs = {};
+ var navItems, contents, current, timeout, settings;
+
+
+ //
+ // Methods
+ //
+
+ /**
+ * Set variables from DOM elements
+ */
+ publicAPIs.setup = function () {
+
+ // Get all nav items
+ navItems = document.querySelectorAll(selector);
+
+ // Create contents array
+ contents = [];
+
+ // Loop through each item, get it's matching content, and push to the array
+ Array.prototype.forEach.call(navItems, (function (item) {
+
+ // Get the content for the nav item
+ var content = document.getElementById(decodeURIComponent(item.hash.substr(1)));
+ if (!content) return;
+
+ // Push to the contents array
+ contents.push({
+ nav: item,
+ content: content
+ });
+
+ }));
+
+ // Sort contents by the order they appear in the DOM
+ sortContents(contents);
+
+ };
+
+ /**
+ * Detect which content is currently active
+ */
+ publicAPIs.detect = function () {
+
+ // Get the active content
+ var active = getActive(contents, settings);
+
+ // if there's no active content, deactivate and bail
+ if (!active) {
+ if (current) {
+ deactivate(current, settings);
+ current = null;
+ }
+ return;
+ }
+
+ // If the active content is the one currently active, do nothing
+ if (current && active.content === current.content) return;
+
+ // Deactivate the current content and activate the new content
+ deactivate(current, settings);
+ activate(active, settings);
+
+ // Update the currently active content
+ current = active;
+
+ };
+
+ /**
+ * Detect the active content on scroll
+ * Debounced for performance
+ */
+ var scrollHandler = function (event) {
+
+ // If there's a timer, cancel it
+ if (timeout) {
+ window.cancelAnimationFrame(timeout);
+ }
+
+ // Setup debounce callback
+ timeout = window.requestAnimationFrame(publicAPIs.detect);
+
+ };
+
+ /**
+ * Update content sorting on resize
+ * Debounced for performance
+ */
+ var resizeHandler = function (event) {
+
+ // If there's a timer, cancel it
+ if (timeout) {
+ window.cancelAnimationFrame(timeout);
+ }
+
+ // Setup debounce callback
+ timeout = window.requestAnimationFrame((function () {
+ sortContents(contents);
+ publicAPIs.detect();
+ }));
+
+ };
+
+ /**
+ * Destroy the current instantiation
+ */
+ publicAPIs.destroy = function () {
+
+ // Undo DOM changes
+ if (current) {
+ deactivate(current, settings);
+ }
+
+ // Remove event listeners
+ window.removeEventListener('scroll', scrollHandler, false);
+ if (settings.reflow) {
+ window.removeEventListener('resize', resizeHandler, false);
+ }
+
+ // Reset variables
+ contents = null;
+ navItems = null;
+ current = null;
+ timeout = null;
+ settings = null;
+
+ };
+
+ /**
+ * Initialize the current instantiation
+ */
+ var init = function () {
+
+ // Merge user options into defaults
+ settings = extend(defaults, options || {});
+
+ // Setup variables based on the current DOM
+ publicAPIs.setup();
+
+ // Find the currently active content
+ publicAPIs.detect();
+
+ // Setup event listeners
+ window.addEventListener('scroll', scrollHandler, false);
+ if (settings.reflow) {
+ window.addEventListener('resize', resizeHandler, false);
+ }
+
+ };
+
+
+ //
+ // Initialize and return the public APIs
+ //
+
+ init();
+ return publicAPIs;
+
+ };
+
+
+ //
+ // Return the Constructor
+ //
+
+ return Constructor;
+
+}));
\ No newline at end of file
diff --git a/docs/assets/js/plugins/jquery.ba-throttle-debounce.js b/docs/assets/js/plugins/jquery.ba-throttle-debounce.js
new file mode 100644
index 0000000000..fa30bdfffe
--- /dev/null
+++ b/docs/assets/js/plugins/jquery.ba-throttle-debounce.js
@@ -0,0 +1,252 @@
+/*!
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+
+// Script: jQuery throttle / debounce: Sometimes, less is more!
+//
+// *Version: 1.1, Last updated: 3/7/2010*
+//
+// Project Home - http://benalman.com/projects/jquery-throttle-debounce-plugin/
+// GitHub - http://github.com/cowboy/jquery-throttle-debounce/
+// Source - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.js
+// (Minified) - http://github.com/cowboy/jquery-throttle-debounce/raw/master/jquery.ba-throttle-debounce.min.js (0.7kb)
+//
+// About: License
+//
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+//
+// About: Examples
+//
+// These working examples, complete with fully commented code, illustrate a few
+// ways in which this plugin can be used.
+//
+// Throttle - http://benalman.com/code/projects/jquery-throttle-debounce/examples/throttle/
+// Debounce - http://benalman.com/code/projects/jquery-throttle-debounce/examples/debounce/
+//
+// About: Support and Testing
+//
+// Information about what version or versions of jQuery this plugin has been
+// tested with, what browsers it has been tested in, and where the unit tests
+// reside (so you can test it yourself).
+//
+// jQuery Versions - none, 1.3.2, 1.4.2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome 4-5, Opera 9.6-10.1.
+// Unit Tests - http://benalman.com/code/projects/jquery-throttle-debounce/unit/
+//
+// About: Release History
+//
+// 1.1 - (3/7/2010) Fixed a bug in where trailing callbacks
+// executed later than they should. Reworked a fair amount of internal
+// logic as well.
+// 1.0 - (3/6/2010) Initial release as a stand-alone project. Migrated over
+// from jquery-misc repo v0.4 to jquery-throttle repo v1.0, added the
+// no_trailing throttle parameter and debounce functionality.
+//
+// Topic: Note for non-jQuery users
+//
+// jQuery isn't actually required for this plugin, because nothing internal
+// uses any jQuery methods or properties. jQuery is just used as a namespace
+// under which these methods can exist.
+//
+// Since jQuery isn't actually required for this plugin, if jQuery doesn't exist
+// when this plugin is loaded, the method described below will be created in
+// the `Cowboy` namespace. Usage will be exactly the same, but instead of
+// $.method() or jQuery.method(), you'll need to use Cowboy.method().
+
+(function(window,undefined){
+ '$:nomunge'; // Used by YUI compressor.
+
+ // Since jQuery really isn't required for this plugin, use `jQuery` as the
+ // namespace only if it already exists, otherwise use the `Cowboy` namespace,
+ // creating it if necessary.
+ var $ = window.jQuery || window.Cowboy || ( window.Cowboy = {} ),
+
+ // Internal method reference.
+ jq_throttle;
+
+ // Method: jQuery.throttle
+ //
+ // Throttle execution of a function. Especially useful for rate limiting
+ // execution of handlers on events like resize and scroll. If you want to
+ // rate-limit execution of a function to a single time, see the
+ // method.
+ //
+ // In this visualization, | is a throttled-function call and X is the actual
+ // callback execution:
+ //
+ // > Throttled with `no_trailing` specified as false or unspecified:
+ // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+ // > X X X X X X X X X X X X
+ // >
+ // > Throttled with `no_trailing` specified as true:
+ // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+ // > X X X X X X X X X X
+ //
+ // Usage:
+ //
+ // > var throttled = jQuery.throttle( delay, [ no_trailing, ] callback );
+ // >
+ // > jQuery('selector').bind( 'someevent', throttled );
+ // > jQuery('selector').unbind( 'someevent', throttled );
+ //
+ // This also works in jQuery 1.4+:
+ //
+ // > jQuery('selector').bind( 'someevent', jQuery.throttle( delay, [ no_trailing, ] callback ) );
+ // > jQuery('selector').unbind( 'someevent', callback );
+ //
+ // Arguments:
+ //
+ // delay - (Number) A zero-or-greater delay in milliseconds. For event
+ // callbacks, values around 100 or 250 (or even higher) are most useful.
+ // no_trailing - (Boolean) Optional, defaults to false. If no_trailing is
+ // true, callback will only execute every `delay` milliseconds while the
+ // throttled-function is being called. If no_trailing is false or
+ // unspecified, callback will be executed one final time after the last
+ // throttled-function call. (After the throttled-function has not been
+ // called for `delay` milliseconds, the internal counter is reset)
+ // callback - (Function) A function to be executed after delay milliseconds.
+ // The `this` context and all arguments are passed through, as-is, to
+ // `callback` when the throttled-function is executed.
+ //
+ // Returns:
+ //
+ // (Function) A new, throttled, function.
+
+ $.throttle = jq_throttle = function( delay, no_trailing, callback, debounce_mode ) {
+ // After wrapper has stopped being called, this timeout ensures that
+ // `callback` is executed at the proper times in `throttle` and `end`
+ // debounce modes.
+ var timeout_id,
+
+ // Keep track of the last time `callback` was executed.
+ last_exec = 0;
+
+ // `no_trailing` defaults to falsy.
+ if ( typeof no_trailing !== 'boolean' ) {
+ debounce_mode = callback;
+ callback = no_trailing;
+ no_trailing = undefined;
+ }
+
+ // The `wrapper` function encapsulates all of the throttling / debouncing
+ // functionality and when executed will limit the rate at which `callback`
+ // is executed.
+ function wrapper() {
+ var that = this,
+ elapsed = +new Date() - last_exec,
+ args = arguments;
+
+ // Execute `callback` and update the `last_exec` timestamp.
+ function exec() {
+ last_exec = +new Date();
+ callback.apply( that, args );
+ };
+
+ // If `debounce_mode` is true (at_begin) this is used to clear the flag
+ // to allow future `callback` executions.
+ function clear() {
+ timeout_id = undefined;
+ };
+
+ if ( debounce_mode && !timeout_id ) {
+ // Since `wrapper` is being called for the first time and
+ // `debounce_mode` is true (at_begin), execute `callback`.
+ exec();
+ }
+
+ // Clear any existing timeout.
+ timeout_id && clearTimeout( timeout_id );
+
+ if ( debounce_mode === undefined && elapsed > delay ) {
+ // In throttle mode, if `delay` time has been exceeded, execute
+ // `callback`.
+ exec();
+
+ } else if ( no_trailing !== true ) {
+ // In trailing throttle mode, since `delay` time has not been
+ // exceeded, schedule `callback` to execute `delay` ms after most
+ // recent execution.
+ //
+ // If `debounce_mode` is true (at_begin), schedule `clear` to execute
+ // after `delay` ms.
+ //
+ // If `debounce_mode` is false (at end), schedule `callback` to
+ // execute after `delay` ms.
+ timeout_id = setTimeout( debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay );
+ }
+ };
+
+ // Set the guid of `wrapper` function to the same of original callback, so
+ // it can be removed in jQuery 1.4+ .unbind or .die by using the original
+ // callback as a reference.
+ if ( $.guid ) {
+ wrapper.guid = callback.guid = callback.guid || $.guid++;
+ }
+
+ // Return the wrapper function.
+ return wrapper;
+ };
+
+ // Method: jQuery.debounce
+ //
+ // Debounce execution of a function. Debouncing, unlike throttling,
+ // guarantees that a function is only executed a single time, either at the
+ // very beginning of a series of calls, or at the very end. If you want to
+ // simply rate-limit execution of a function, see the
+ // method.
+ //
+ // In this visualization, | is a debounced-function call and X is the actual
+ // callback execution:
+ //
+ // > Debounced with `at_begin` specified as false or unspecified:
+ // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+ // > X X
+ // >
+ // > Debounced with `at_begin` specified as true:
+ // > ||||||||||||||||||||||||| (pause) |||||||||||||||||||||||||
+ // > X X
+ //
+ // Usage:
+ //
+ // > var debounced = jQuery.debounce( delay, [ at_begin, ] callback );
+ // >
+ // > jQuery('selector').bind( 'someevent', debounced );
+ // > jQuery('selector').unbind( 'someevent', debounced );
+ //
+ // This also works in jQuery 1.4+:
+ //
+ // > jQuery('selector').bind( 'someevent', jQuery.debounce( delay, [ at_begin, ] callback ) );
+ // > jQuery('selector').unbind( 'someevent', callback );
+ //
+ // Arguments:
+ //
+ // delay - (Number) A zero-or-greater delay in milliseconds. For event
+ // callbacks, values around 100 or 250 (or even higher) are most useful.
+ // at_begin - (Boolean) Optional, defaults to false. If at_begin is false or
+ // unspecified, callback will only be executed `delay` milliseconds after
+ // the last debounced-function call. If at_begin is true, callback will be
+ // executed only at the first debounced-function call. (After the
+ // throttled-function has not been called for `delay` milliseconds, the
+ // internal counter is reset)
+ // callback - (Function) A function to be executed after delay milliseconds.
+ // The `this` context and all arguments are passed through, as-is, to
+ // `callback` when the debounced-function is executed.
+ //
+ // Returns:
+ //
+ // (Function) A new, debounced, function.
+
+ $.debounce = function( delay, at_begin, callback ) {
+ return callback === undefined
+ ? jq_throttle( delay, at_begin, false )
+ : jq_throttle( delay, callback, at_begin !== false );
+ };
+
+})(this);
diff --git a/docs/assets/js/plugins/jquery.fitvids.js b/docs/assets/js/plugins/jquery.fitvids.js
new file mode 100644
index 0000000000..5c2f85c992
--- /dev/null
+++ b/docs/assets/js/plugins/jquery.fitvids.js
@@ -0,0 +1,82 @@
+/*jshint browser:true */
+/*!
+* FitVids 1.1
+*
+* Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com
+* Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
+* Released under the WTFPL license - http://sam.zoy.org/wtfpl/
+*
+*/
+
+;(function( $ ){
+
+ 'use strict';
+
+ $.fn.fitVids = function( options ) {
+ var settings = {
+ customSelector: null,
+ ignore: null
+ };
+
+ if(!document.getElementById('fit-vids-style')) {
+ // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js
+ var head = document.head || document.getElementsByTagName('head')[0];
+ var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
+ var div = document.createElement("div");
+ div.innerHTML = '
x
';
+ head.appendChild(div.childNodes[1]);
+ }
+
+ if ( options ) {
+ $.extend( settings, options );
+ }
+
+ return this.each(function(){
+ var selectors = [
+ 'iframe[src*="player.vimeo.com"]',
+ 'iframe[src*="youtube.com"]',
+ 'iframe[src*="youtube-nocookie.com"]',
+ 'iframe[src*="kickstarter.com"][src*="video.html"]',
+ 'object',
+ 'embed'
+ ];
+
+ if (settings.customSelector) {
+ selectors.push(settings.customSelector);
+ }
+
+ var ignoreList = '.fitvidsignore';
+
+ if(settings.ignore) {
+ ignoreList = ignoreList + ', ' + settings.ignore;
+ }
+
+ var $allVideos = $(this).find(selectors.join(','));
+ $allVideos = $allVideos.not('object object'); // SwfObj conflict patch
+ $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video.
+
+ $allVideos.each(function(count){
+ var $this = $(this);
+ if($this.parents(ignoreList).length > 0) {
+ return; // Disable FitVids on this video.
+ }
+ if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; }
+ if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width'))))
+ {
+ $this.attr('height', 9);
+ $this.attr('width', 16);
+ }
+ var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(),
+ width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
+ aspectRatio = height / width;
+ if(!$this.attr('id')){
+ var videoID = 'fitvid' + count;
+ $this.attr('id', videoID);
+ }
+ $this.wrap('').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%');
+ $this.removeAttr('height').removeAttr('width');
+ });
+ });
+ };
+// Works with either jQuery or Zepto
+})( window.jQuery || window.Zepto );
\ No newline at end of file
diff --git a/docs/assets/js/plugins/jquery.greedy-navigation.js b/docs/assets/js/plugins/jquery.greedy-navigation.js
new file mode 100644
index 0000000000..b29931fa3e
--- /dev/null
+++ b/docs/assets/js/plugins/jquery.greedy-navigation.js
@@ -0,0 +1,127 @@
+/*
+GreedyNav.js - https://github.com/lukejacksonn/GreedyNav
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+Copyright (c) 2015 Luke Jackson http://lukejacksonn.com
+*/
+
+$(function() {
+
+ var $btn = $("nav.greedy-nav .greedy-nav__toggle");
+ var $vlinks = $("nav.greedy-nav .visible-links");
+ var $hlinks = $("nav.greedy-nav .hidden-links");
+ var $nav = $("nav.greedy-nav");
+ var $logo = $('nav.greedy-nav .site-logo');
+ var $logoImg = $('nav.greedy-nav .site-logo img');
+ var $title = $("nav.greedy-nav .site-title");
+ var $search = $('nav.greedy-nav button.search__toggle');
+
+ var numOfItems, totalSpace, closingTime, breakWidths;
+
+ // This function measures both hidden and visible links and sets the navbar breakpoints
+ // This is called the first time the script runs and everytime the "check()" function detects a change of window width that reached a different CSS width breakpoint, which affects the size of navbar Items
+ // Please note that "CSS width breakpoints" (which are only 4) !== "navbar breakpoints" (which are as many as the number of items on the navbar)
+ function measureLinks(){
+ numOfItems = 0;
+ totalSpace = 0;
+ closingTime = 1000;
+ breakWidths = [];
+
+ // Adds the width of a navItem in order to create breakpoints for the navbar
+ function addWidth(i, w) {
+ totalSpace += w;
+ numOfItems += 1;
+ breakWidths.push(totalSpace);
+ }
+
+ // Measures the width of hidden links by making a temporary clone of them and positioning under visible links
+ function hiddenWidth(obj){
+ var clone = obj.clone();
+ clone.css("visibility","hidden");
+ $vlinks.append(clone);
+ addWidth(0, clone.outerWidth());
+ clone.remove();
+ }
+ // Measure both visible and hidden links widths
+ $vlinks.children().outerWidth(addWidth);
+ $hlinks.children().each(function(){hiddenWidth($(this))});
+ }
+ // Get initial state
+ measureLinks();
+
+ var winWidth = $( window ).width();
+ // Set the last measured CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
+ var lastBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
+
+ var availableSpace, numOfVisibleItems, requiredSpace, timer;
+
+ function check() {
+
+ winWidth = $( window ).width();
+ // Set the current CSS width breakpoint: 0: <768px, 1: <1024px, 2: < 1280px, 3: >= 1280px.
+ var curBreakpoint = winWidth < 768 ? 0 : winWidth < 1024 ? 1 : winWidth < 1280 ? 2 : 3;
+ // If current breakpoint is different from last measured breakpoint, measureLinks again
+ if(curBreakpoint !== lastBreakpoint) measureLinks();
+ // Set the last measured CSS width breakpoint with the current breakpoint
+ lastBreakpoint = curBreakpoint;
+
+ // Get instant state
+ numOfVisibleItems = $vlinks.children().length;
+ // Decrease the width of visible elements from the nav innerWidth to find out the available space for navItems
+ availableSpace = /* nav */ $nav.innerWidth()
+ - /* logo */ ($logo.length !== 0 ? $logo.outerWidth(true) : 0)
+ - /* title */ $title.outerWidth(true)
+ - /* search */ ($search.length !== 0 ? $search.outerWidth(true) : 0)
+ - /* toggle */ (numOfVisibleItems !== breakWidths.length ? $btn.outerWidth(true) : 0);
+ requiredSpace = breakWidths[numOfVisibleItems - 1];
+
+ // There is not enought space
+ if (requiredSpace > availableSpace) {
+ $vlinks.children().last().prependTo($hlinks);
+ numOfVisibleItems -= 1;
+ check();
+ // There is more than enough space. If only one element is hidden, add the toggle width to the available space
+ } else if (availableSpace + (numOfVisibleItems === breakWidths.length - 1?$btn.outerWidth(true):0) > breakWidths[numOfVisibleItems]) {
+ $hlinks.children().first().appendTo($vlinks);
+ numOfVisibleItems += 1;
+ check();
+ }
+ // Update the button accordingly
+ $btn.attr("count", numOfItems - numOfVisibleItems);
+ if (numOfVisibleItems === numOfItems) {
+ $btn.addClass('hidden');
+ } else $btn.removeClass('hidden');
+ }
+
+ // Window listeners
+ $(window).resize(function() {
+ check();
+ });
+
+ $btn.on('click', function() {
+ $hlinks.toggleClass('hidden');
+ $(this).toggleClass('close');
+ clearTimeout(timer);
+ });
+
+ $hlinks.on('mouseleave', function() {
+ // Mouse has left, start the timer
+ timer = setTimeout(function() {
+ $hlinks.addClass('hidden');
+ }, closingTime);
+ }).on('mouseenter', function() {
+ // Mouse is back, cancel the timer
+ clearTimeout(timer);
+ })
+
+ // check if page has a logo
+ if($logoImg.length !== 0){
+ // check if logo is not loaded
+ if(!($logoImg[0].complete || $logoImg[0].naturalWidth !== 0)){
+ // if logo is not loaded wait for logo to load or fail to check
+ $logoImg.one("load error", check);
+ // if logo is already loaded just check
+ } else check();
+ // if page does not have a logo just check
+ } else check();
+
+});
diff --git a/docs/assets/js/plugins/jquery.magnific-popup.js b/docs/assets/js/plugins/jquery.magnific-popup.js
new file mode 100644
index 0000000000..7d1d197849
--- /dev/null
+++ b/docs/assets/js/plugins/jquery.magnific-popup.js
@@ -0,0 +1,1860 @@
+/*! Magnific Popup - v1.1.0 - 2016-02-20
+* http://dimsemenov.com/plugins/magnific-popup/
+* Copyright (c) 2016 Dmitry Semenov; */
+;(function (factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS
+ factory(require('jquery'));
+ } else {
+ // Browser globals
+ factory(window.jQuery || window.Zepto);
+ }
+ }(function($) {
+
+ /*>>core*/
+ /**
+ *
+ * Magnific Popup Core JS file
+ *
+ */
+
+
+ /**
+ * Private static constants
+ */
+ var CLOSE_EVENT = 'Close',
+ BEFORE_CLOSE_EVENT = 'BeforeClose',
+ AFTER_CLOSE_EVENT = 'AfterClose',
+ BEFORE_APPEND_EVENT = 'BeforeAppend',
+ MARKUP_PARSE_EVENT = 'MarkupParse',
+ OPEN_EVENT = 'Open',
+ CHANGE_EVENT = 'Change',
+ NS = 'mfp',
+ EVENT_NS = '.' + NS,
+ READY_CLASS = 'mfp-ready',
+ REMOVING_CLASS = 'mfp-removing',
+ PREVENT_CLOSE_CLASS = 'mfp-prevent-close';
+
+
+ /**
+ * Private vars
+ */
+ /*jshint -W079 */
+ var mfp, // As we have only one instance of MagnificPopup object, we define it locally to not to use 'this'
+ MagnificPopup = function(){},
+ _isJQ = !!(window.jQuery),
+ _prevStatus,
+ _window = $(window),
+ _document,
+ _prevContentType,
+ _wrapClasses,
+ _currPopupType;
+
+
+ /**
+ * Private functions
+ */
+ var _mfpOn = function(name, f) {
+ mfp.ev.on(NS + name + EVENT_NS, f);
+ },
+ _getEl = function(className, appendTo, html, raw) {
+ var el = document.createElement('div');
+ el.className = 'mfp-'+className;
+ if(html) {
+ el.innerHTML = html;
+ }
+ if(!raw) {
+ el = $(el);
+ if(appendTo) {
+ el.appendTo(appendTo);
+ }
+ } else if(appendTo) {
+ appendTo.appendChild(el);
+ }
+ return el;
+ },
+ _mfpTrigger = function(e, data) {
+ mfp.ev.triggerHandler(NS + e, data);
+
+ if(mfp.st.callbacks) {
+ // converts "mfpEventName" to "eventName" callback and triggers it if it's present
+ e = e.charAt(0).toLowerCase() + e.slice(1);
+ if(mfp.st.callbacks[e]) {
+ mfp.st.callbacks[e].apply(mfp, $.isArray(data) ? data : [data]);
+ }
+ }
+ },
+ _getCloseBtn = function(type) {
+ if(type !== _currPopupType || !mfp.currTemplate.closeBtn) {
+ mfp.currTemplate.closeBtn = $( mfp.st.closeMarkup.replace('%title%', mfp.st.tClose ) );
+ _currPopupType = type;
+ }
+ return mfp.currTemplate.closeBtn;
+ },
+ // Initialize Magnific Popup only when called at least once
+ _checkInstance = function() {
+ if(!$.magnificPopup.instance) {
+ /*jshint -W020 */
+ mfp = new MagnificPopup();
+ mfp.init();
+ $.magnificPopup.instance = mfp;
+ }
+ },
+ // CSS transition detection, http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr
+ supportsTransitions = function() {
+ var s = document.createElement('p').style, // 's' for style. better to create an element if body yet to exist
+ v = ['ms','O','Moz','Webkit']; // 'v' for vendor
+
+ if( s['transition'] !== undefined ) {
+ return true;
+ }
+
+ while( v.length ) {
+ if( v.pop() + 'Transition' in s ) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+
+
+ /**
+ * Public functions
+ */
+ MagnificPopup.prototype = {
+
+ constructor: MagnificPopup,
+
+ /**
+ * Initializes Magnific Popup plugin.
+ * This function is triggered only once when $.fn.magnificPopup or $.magnificPopup is executed
+ */
+ init: function() {
+ var appVersion = navigator.appVersion;
+ mfp.isLowIE = mfp.isIE8 = document.all && !document.addEventListener;
+ mfp.isAndroid = (/android/gi).test(appVersion);
+ mfp.isIOS = (/iphone|ipad|ipod/gi).test(appVersion);
+ mfp.supportsTransition = supportsTransitions();
+
+ // We disable fixed positioned lightbox on devices that don't handle it nicely.
+ // If you know a better way of detecting this - let me know.
+ mfp.probablyMobile = (mfp.isAndroid || mfp.isIOS || /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent) );
+ _document = $(document);
+
+ mfp.popupsCache = {};
+ },
+
+ /**
+ * Opens popup
+ * @param data [description]
+ */
+ open: function(data) {
+
+ var i;
+
+ if(data.isObj === false) {
+ // convert jQuery collection to array to avoid conflicts later
+ mfp.items = data.items.toArray();
+
+ mfp.index = 0;
+ var items = data.items,
+ item;
+ for(i = 0; i < items.length; i++) {
+ item = items[i];
+ if(item.parsed) {
+ item = item.el[0];
+ }
+ if(item === data.el[0]) {
+ mfp.index = i;
+ break;
+ }
+ }
+ } else {
+ mfp.items = $.isArray(data.items) ? data.items : [data.items];
+ mfp.index = data.index || 0;
+ }
+
+ // if popup is already opened - we just update the content
+ if(mfp.isOpen) {
+ mfp.updateItemHTML();
+ return;
+ }
+
+ mfp.types = [];
+ _wrapClasses = '';
+ if(data.mainEl && data.mainEl.length) {
+ mfp.ev = data.mainEl.eq(0);
+ } else {
+ mfp.ev = _document;
+ }
+
+ if(data.key) {
+ if(!mfp.popupsCache[data.key]) {
+ mfp.popupsCache[data.key] = {};
+ }
+ mfp.currTemplate = mfp.popupsCache[data.key];
+ } else {
+ mfp.currTemplate = {};
+ }
+
+
+
+ mfp.st = $.extend(true, {}, $.magnificPopup.defaults, data );
+ mfp.fixedContentPos = mfp.st.fixedContentPos === 'auto' ? !mfp.probablyMobile : mfp.st.fixedContentPos;
+
+ if(mfp.st.modal) {
+ mfp.st.closeOnContentClick = false;
+ mfp.st.closeOnBgClick = false;
+ mfp.st.showCloseBtn = false;
+ mfp.st.enableEscapeKey = false;
+ }
+
+
+ // Building markup
+ // main containers are created only once
+ if(!mfp.bgOverlay) {
+
+ // Dark overlay
+ mfp.bgOverlay = _getEl('bg').on('click'+EVENT_NS, function() {
+ mfp.close();
+ });
+
+ mfp.wrap = _getEl('wrap').attr('tabindex', -1).on('click'+EVENT_NS, function(e) {
+ if(mfp._checkIfClose(e.target)) {
+ mfp.close();
+ }
+ });
+
+ mfp.container = _getEl('container', mfp.wrap);
+ }
+
+ mfp.contentContainer = _getEl('content');
+ if(mfp.st.preloader) {
+ mfp.preloader = _getEl('preloader', mfp.container, mfp.st.tLoading);
+ }
+
+
+ // Initializing modules
+ var modules = $.magnificPopup.modules;
+ for(i = 0; i < modules.length; i++) {
+ var n = modules[i];
+ n = n.charAt(0).toUpperCase() + n.slice(1);
+ mfp['init'+n].call(mfp);
+ }
+ _mfpTrigger('BeforeOpen');
+
+
+ if(mfp.st.showCloseBtn) {
+ // Close button
+ if(!mfp.st.closeBtnInside) {
+ mfp.wrap.append( _getCloseBtn() );
+ } else {
+ _mfpOn(MARKUP_PARSE_EVENT, function(e, template, values, item) {
+ values.close_replaceWith = _getCloseBtn(item.type);
+ });
+ _wrapClasses += ' mfp-close-btn-in';
+ }
+ }
+
+ if(mfp.st.alignTop) {
+ _wrapClasses += ' mfp-align-top';
+ }
+
+
+
+ if(mfp.fixedContentPos) {
+ mfp.wrap.css({
+ overflow: mfp.st.overflowY,
+ overflowX: 'hidden',
+ overflowY: mfp.st.overflowY
+ });
+ } else {
+ mfp.wrap.css({
+ top: _window.scrollTop(),
+ position: 'absolute'
+ });
+ }
+ if( mfp.st.fixedBgPos === false || (mfp.st.fixedBgPos === 'auto' && !mfp.fixedContentPos) ) {
+ mfp.bgOverlay.css({
+ height: _document.height(),
+ position: 'absolute'
+ });
+ }
+
+
+
+ if(mfp.st.enableEscapeKey) {
+ // Close on ESC key
+ _document.on('keyup' + EVENT_NS, function(e) {
+ if(e.keyCode === 27) {
+ mfp.close();
+ }
+ });
+ }
+
+ _window.on('resize' + EVENT_NS, function() {
+ mfp.updateSize();
+ });
+
+
+ if(!mfp.st.closeOnContentClick) {
+ _wrapClasses += ' mfp-auto-cursor';
+ }
+
+ if(_wrapClasses)
+ mfp.wrap.addClass(_wrapClasses);
+
+
+ // this triggers recalculation of layout, so we get it once to not to trigger twice
+ var windowHeight = mfp.wH = _window.height();
+
+
+ var windowStyles = {};
+
+ if( mfp.fixedContentPos ) {
+ if(mfp._hasScrollBar(windowHeight)){
+ var s = mfp._getScrollbarSize();
+ if(s) {
+ windowStyles.marginRight = s;
+ }
+ }
+ }
+
+ if(mfp.fixedContentPos) {
+ if(!mfp.isIE7) {
+ windowStyles.overflow = 'hidden';
+ } else {
+ // ie7 double-scroll bug
+ $('body, html').css('overflow', 'hidden');
+ }
+ }
+
+
+
+ var classesToadd = mfp.st.mainClass;
+ if(mfp.isIE7) {
+ classesToadd += ' mfp-ie7';
+ }
+ if(classesToadd) {
+ mfp._addClassToMFP( classesToadd );
+ }
+
+ // add content
+ mfp.updateItemHTML();
+
+ _mfpTrigger('BuildControls');
+
+ // remove scrollbar, add margin e.t.c
+ $('html').css(windowStyles);
+
+ // add everything to DOM
+ mfp.bgOverlay.add(mfp.wrap).prependTo( mfp.st.prependTo || $(document.body) );
+
+ // Save last focused element
+ mfp._lastFocusedEl = document.activeElement;
+
+ // Wait for next cycle to allow CSS transition
+ setTimeout(function() {
+
+ if(mfp.content) {
+ mfp._addClassToMFP(READY_CLASS);
+ mfp._setFocus();
+ } else {
+ // if content is not defined (not loaded e.t.c) we add class only for BG
+ mfp.bgOverlay.addClass(READY_CLASS);
+ }
+
+ // Trap the focus in popup
+ _document.on('focusin' + EVENT_NS, mfp._onFocusIn);
+
+ }, 16);
+
+ mfp.isOpen = true;
+ mfp.updateSize(windowHeight);
+ _mfpTrigger(OPEN_EVENT);
+
+ return data;
+ },
+
+ /**
+ * Closes the popup
+ */
+ close: function() {
+ if(!mfp.isOpen) return;
+ _mfpTrigger(BEFORE_CLOSE_EVENT);
+
+ mfp.isOpen = false;
+ // for CSS3 animation
+ if(mfp.st.removalDelay && !mfp.isLowIE && mfp.supportsTransition ) {
+ mfp._addClassToMFP(REMOVING_CLASS);
+ setTimeout(function() {
+ mfp._close();
+ }, mfp.st.removalDelay);
+ } else {
+ mfp._close();
+ }
+ },
+
+ /**
+ * Helper for close() function
+ */
+ _close: function() {
+ _mfpTrigger(CLOSE_EVENT);
+
+ var classesToRemove = REMOVING_CLASS + ' ' + READY_CLASS + ' ';
+
+ mfp.bgOverlay.detach();
+ mfp.wrap.detach();
+ mfp.container.empty();
+
+ if(mfp.st.mainClass) {
+ classesToRemove += mfp.st.mainClass + ' ';
+ }
+
+ mfp._removeClassFromMFP(classesToRemove);
+
+ if(mfp.fixedContentPos) {
+ var windowStyles = {marginRight: ''};
+ if(mfp.isIE7) {
+ $('body, html').css('overflow', '');
+ } else {
+ windowStyles.overflow = '';
+ }
+ $('html').css(windowStyles);
+ }
+
+ _document.off('keyup' + EVENT_NS + ' focusin' + EVENT_NS);
+ mfp.ev.off(EVENT_NS);
+
+ // clean up DOM elements that aren't removed
+ mfp.wrap.attr('class', 'mfp-wrap').removeAttr('style');
+ mfp.bgOverlay.attr('class', 'mfp-bg');
+ mfp.container.attr('class', 'mfp-container');
+
+ // remove close button from target element
+ if(mfp.st.showCloseBtn &&
+ (!mfp.st.closeBtnInside || mfp.currTemplate[mfp.currItem.type] === true)) {
+ if(mfp.currTemplate.closeBtn)
+ mfp.currTemplate.closeBtn.detach();
+ }
+
+
+ if(mfp.st.autoFocusLast && mfp._lastFocusedEl) {
+ $(mfp._lastFocusedEl).focus(); // put tab focus back
+ }
+ mfp.currItem = null;
+ mfp.content = null;
+ mfp.currTemplate = null;
+ mfp.prevHeight = 0;
+
+ _mfpTrigger(AFTER_CLOSE_EVENT);
+ },
+
+ updateSize: function(winHeight) {
+
+ if(mfp.isIOS) {
+ // fixes iOS nav bars https://github.com/dimsemenov/Magnific-Popup/issues/2
+ var zoomLevel = document.documentElement.clientWidth / window.innerWidth;
+ var height = window.innerHeight * zoomLevel;
+ mfp.wrap.css('height', height);
+ mfp.wH = height;
+ } else {
+ mfp.wH = winHeight || _window.height();
+ }
+ // Fixes #84: popup incorrectly positioned with position:relative on body
+ if(!mfp.fixedContentPos) {
+ mfp.wrap.css('height', mfp.wH);
+ }
+
+ _mfpTrigger('Resize');
+
+ },
+
+ /**
+ * Set content of popup based on current index
+ */
+ updateItemHTML: function() {
+ var item = mfp.items[mfp.index];
+
+ // Detach and perform modifications
+ mfp.contentContainer.detach();
+
+ if(mfp.content)
+ mfp.content.detach();
+
+ if(!item.parsed) {
+ item = mfp.parseEl( mfp.index );
+ }
+
+ var type = item.type;
+
+ _mfpTrigger('BeforeChange', [mfp.currItem ? mfp.currItem.type : '', type]);
+ // BeforeChange event works like so:
+ // _mfpOn('BeforeChange', function(e, prevType, newType) { });
+
+ mfp.currItem = item;
+
+ if(!mfp.currTemplate[type]) {
+ var markup = mfp.st[type] ? mfp.st[type].markup : false;
+
+ // allows to modify markup
+ _mfpTrigger('FirstMarkupParse', markup);
+
+ if(markup) {
+ mfp.currTemplate[type] = $(markup);
+ } else {
+ // if there is no markup found we just define that template is parsed
+ mfp.currTemplate[type] = true;
+ }
+ }
+
+ if(_prevContentType && _prevContentType !== item.type) {
+ mfp.container.removeClass('mfp-'+_prevContentType+'-holder');
+ }
+
+ var newContent = mfp['get' + type.charAt(0).toUpperCase() + type.slice(1)](item, mfp.currTemplate[type]);
+ mfp.appendContent(newContent, type);
+
+ item.preloaded = true;
+
+ _mfpTrigger(CHANGE_EVENT, item);
+ _prevContentType = item.type;
+
+ // Append container back after its content changed
+ mfp.container.prepend(mfp.contentContainer);
+
+ _mfpTrigger('AfterChange');
+ },
+
+
+ /**
+ * Set HTML content of popup
+ */
+ appendContent: function(newContent, type) {
+ mfp.content = newContent;
+
+ if(newContent) {
+ if(mfp.st.showCloseBtn && mfp.st.closeBtnInside &&
+ mfp.currTemplate[type] === true) {
+ // if there is no markup, we just append close button element inside
+ if(!mfp.content.find('.mfp-close').length) {
+ mfp.content.append(_getCloseBtn());
+ }
+ } else {
+ mfp.content = newContent;
+ }
+ } else {
+ mfp.content = '';
+ }
+
+ _mfpTrigger(BEFORE_APPEND_EVENT);
+ mfp.container.addClass('mfp-'+type+'-holder');
+
+ mfp.contentContainer.append(mfp.content);
+ },
+
+
+ /**
+ * Creates Magnific Popup data object based on given data
+ * @param {int} index Index of item to parse
+ */
+ parseEl: function(index) {
+ var item = mfp.items[index],
+ type;
+
+ if(item.tagName) {
+ item = { el: $(item) };
+ } else {
+ type = item.type;
+ item = { data: item, src: item.src };
+ }
+
+ if(item.el) {
+ var types = mfp.types;
+
+ // check for 'mfp-TYPE' class
+ for(var i = 0; i < types.length; i++) {
+ if( item.el.hasClass('mfp-'+types[i]) ) {
+ type = types[i];
+ break;
+ }
+ }
+
+ item.src = item.el.attr('data-mfp-src');
+ if(!item.src) {
+ item.src = item.el.attr('href');
+ }
+ }
+
+ item.type = type || mfp.st.type || 'inline';
+ item.index = index;
+ item.parsed = true;
+ mfp.items[index] = item;
+ _mfpTrigger('ElementParse', item);
+
+ return mfp.items[index];
+ },
+
+
+ /**
+ * Initializes single popup or a group of popups
+ */
+ addGroup: function(el, options) {
+ var eHandler = function(e) {
+ e.mfpEl = this;
+ mfp._openClick(e, el, options);
+ };
+
+ if(!options) {
+ options = {};
+ }
+
+ var eName = 'click.magnificPopup';
+ options.mainEl = el;
+
+ if(options.items) {
+ options.isObj = true;
+ el.off(eName).on(eName, eHandler);
+ } else {
+ options.isObj = false;
+ if(options.delegate) {
+ el.off(eName).on(eName, options.delegate , eHandler);
+ } else {
+ options.items = el;
+ el.off(eName).on(eName, eHandler);
+ }
+ }
+ },
+ _openClick: function(e, el, options) {
+ var midClick = options.midClick !== undefined ? options.midClick : $.magnificPopup.defaults.midClick;
+
+
+ if(!midClick && ( e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey ) ) {
+ return;
+ }
+
+ var disableOn = options.disableOn !== undefined ? options.disableOn : $.magnificPopup.defaults.disableOn;
+
+ if(disableOn) {
+ if($.isFunction(disableOn)) {
+ if( !disableOn.call(mfp) ) {
+ return true;
+ }
+ } else { // else it's number
+ if( _window.width() < disableOn ) {
+ return true;
+ }
+ }
+ }
+
+ if(e.type) {
+ e.preventDefault();
+
+ // This will prevent popup from closing if element is inside and popup is already opened
+ if(mfp.isOpen) {
+ e.stopPropagation();
+ }
+ }
+
+ options.el = $(e.mfpEl);
+ if(options.delegate) {
+ options.items = el.find(options.delegate);
+ }
+ mfp.open(options);
+ },
+
+
+ /**
+ * Updates text on preloader
+ */
+ updateStatus: function(status, text) {
+
+ if(mfp.preloader) {
+ if(_prevStatus !== status) {
+ mfp.container.removeClass('mfp-s-'+_prevStatus);
+ }
+
+ if(!text && status === 'loading') {
+ text = mfp.st.tLoading;
+ }
+
+ var data = {
+ status: status,
+ text: text
+ };
+ // allows to modify status
+ _mfpTrigger('UpdateStatus', data);
+
+ status = data.status;
+ text = data.text;
+
+ mfp.preloader.html(text);
+
+ mfp.preloader.find('a').on('click', function(e) {
+ e.stopImmediatePropagation();
+ });
+
+ mfp.container.addClass('mfp-s-'+status);
+ _prevStatus = status;
+ }
+ },
+
+
+ /*
+ "Private" helpers that aren't private at all
+ */
+ // Check to close popup or not
+ // "target" is an element that was clicked
+ _checkIfClose: function(target) {
+
+ if($(target).hasClass(PREVENT_CLOSE_CLASS)) {
+ return;
+ }
+
+ var closeOnContent = mfp.st.closeOnContentClick;
+ var closeOnBg = mfp.st.closeOnBgClick;
+
+ if(closeOnContent && closeOnBg) {
+ return true;
+ } else {
+
+ // We close the popup if click is on close button or on preloader. Or if there is no content.
+ if(!mfp.content || $(target).hasClass('mfp-close') || (mfp.preloader && target === mfp.preloader[0]) ) {
+ return true;
+ }
+
+ // if click is outside the content
+ if( (target !== mfp.content[0] && !$.contains(mfp.content[0], target)) ) {
+ if(closeOnBg) {
+ // last check, if the clicked element is in DOM, (in case it's removed onclick)
+ if( $.contains(document, target) ) {
+ return true;
+ }
+ }
+ } else if(closeOnContent) {
+ return true;
+ }
+
+ }
+ return false;
+ },
+ _addClassToMFP: function(cName) {
+ mfp.bgOverlay.addClass(cName);
+ mfp.wrap.addClass(cName);
+ },
+ _removeClassFromMFP: function(cName) {
+ this.bgOverlay.removeClass(cName);
+ mfp.wrap.removeClass(cName);
+ },
+ _hasScrollBar: function(winHeight) {
+ return ( (mfp.isIE7 ? _document.height() : document.body.scrollHeight) > (winHeight || _window.height()) );
+ },
+ _setFocus: function() {
+ (mfp.st.focus ? mfp.content.find(mfp.st.focus).eq(0) : mfp.wrap).focus();
+ },
+ _onFocusIn: function(e) {
+ if( e.target !== mfp.wrap[0] && !$.contains(mfp.wrap[0], e.target) ) {
+ mfp._setFocus();
+ return false;
+ }
+ },
+ _parseMarkup: function(template, values, item) {
+ var arr;
+ if(item.data) {
+ values = $.extend(item.data, values);
+ }
+ _mfpTrigger(MARKUP_PARSE_EVENT, [template, values, item] );
+
+ $.each(values, function(key, value) {
+ if(value === undefined || value === false) {
+ return true;
+ }
+ arr = key.split('_');
+ if(arr.length > 1) {
+ var el = template.find(EVENT_NS + '-'+arr[0]);
+
+ if(el.length > 0) {
+ var attr = arr[1];
+ if(attr === 'replaceWith') {
+ if(el[0] !== value[0]) {
+ el.replaceWith(value);
+ }
+ } else if(attr === 'img') {
+ if(el.is('img')) {
+ el.attr('src', value);
+ } else {
+ el.replaceWith( $('').attr('src', value).attr('class', el.attr('class')) );
+ }
+ } else {
+ el.attr(arr[1], value);
+ }
+ }
+
+ } else {
+ template.find(EVENT_NS + '-'+key).html(value);
+ }
+ });
+ },
+
+ _getScrollbarSize: function() {
+ // thx David
+ if(mfp.scrollbarSize === undefined) {
+ var scrollDiv = document.createElement("div");
+ scrollDiv.style.cssText = 'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;';
+ document.body.appendChild(scrollDiv);
+ mfp.scrollbarSize = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+ document.body.removeChild(scrollDiv);
+ }
+ return mfp.scrollbarSize;
+ }
+
+ }; /* MagnificPopup core prototype end */
+
+
+
+
+ /**
+ * Public static functions
+ */
+ $.magnificPopup = {
+ instance: null,
+ proto: MagnificPopup.prototype,
+ modules: [],
+
+ open: function(options, index) {
+ _checkInstance();
+
+ if(!options) {
+ options = {};
+ } else {
+ options = $.extend(true, {}, options);
+ }
+
+ options.isObj = true;
+ options.index = index || 0;
+ return this.instance.open(options);
+ },
+
+ close: function() {
+ return $.magnificPopup.instance && $.magnificPopup.instance.close();
+ },
+
+ registerModule: function(name, module) {
+ if(module.options) {
+ $.magnificPopup.defaults[name] = module.options;
+ }
+ $.extend(this.proto, module.proto);
+ this.modules.push(name);
+ },
+
+ defaults: {
+
+ // Info about options is in docs:
+ // http://dimsemenov.com/plugins/magnific-popup/documentation.html#options
+
+ disableOn: 0,
+
+ key: null,
+
+ midClick: false,
+
+ mainClass: '',
+
+ preloader: true,
+
+ focus: '', // CSS selector of input to focus after popup is opened
+
+ closeOnContentClick: false,
+
+ closeOnBgClick: true,
+
+ closeBtnInside: true,
+
+ showCloseBtn: true,
+
+ enableEscapeKey: true,
+
+ modal: false,
+
+ alignTop: false,
+
+ removalDelay: 0,
+
+ prependTo: null,
+
+ fixedContentPos: 'auto',
+
+ fixedBgPos: 'auto',
+
+ overflowY: 'auto',
+
+ closeMarkup: '',
+
+ tClose: 'Close (Esc)',
+
+ tLoading: 'Loading...',
+
+ autoFocusLast: true
+
+ }
+ };
+
+
+
+ $.fn.magnificPopup = function(options) {
+ _checkInstance();
+
+ var jqEl = $(this);
+
+ // We call some API method of first param is a string
+ if (typeof options === "string" ) {
+
+ if(options === 'open') {
+ var items,
+ itemOpts = _isJQ ? jqEl.data('magnificPopup') : jqEl[0].magnificPopup,
+ index = parseInt(arguments[1], 10) || 0;
+
+ if(itemOpts.items) {
+ items = itemOpts.items[index];
+ } else {
+ items = jqEl;
+ if(itemOpts.delegate) {
+ items = items.find(itemOpts.delegate);
+ }
+ items = items.eq( index );
+ }
+ mfp._openClick({mfpEl:items}, jqEl, itemOpts);
+ } else {
+ if(mfp.isOpen)
+ mfp[options].apply(mfp, Array.prototype.slice.call(arguments, 1));
+ }
+
+ } else {
+ // clone options obj
+ options = $.extend(true, {}, options);
+
+ /*
+ * As Zepto doesn't support .data() method for objects
+ * and it works only in normal browsers
+ * we assign "options" object directly to the DOM element. FTW!
+ */
+ if(_isJQ) {
+ jqEl.data('magnificPopup', options);
+ } else {
+ jqEl[0].magnificPopup = options;
+ }
+
+ mfp.addGroup(jqEl, options);
+
+ }
+ return jqEl;
+ };
+
+ /*>>core*/
+
+ /*>>inline*/
+
+ var INLINE_NS = 'inline',
+ _hiddenClass,
+ _inlinePlaceholder,
+ _lastInlineElement,
+ _putInlineElementsBack = function() {
+ if(_lastInlineElement) {
+ _inlinePlaceholder.after( _lastInlineElement.addClass(_hiddenClass) ).detach();
+ _lastInlineElement = null;
+ }
+ };
+
+ $.magnificPopup.registerModule(INLINE_NS, {
+ options: {
+ hiddenClass: 'hide', // will be appended with `mfp-` prefix
+ markup: '',
+ tNotFound: 'Content not found'
+ },
+ proto: {
+
+ initInline: function() {
+ mfp.types.push(INLINE_NS);
+
+ _mfpOn(CLOSE_EVENT+'.'+INLINE_NS, function() {
+ _putInlineElementsBack();
+ });
+ },
+
+ getInline: function(item, template) {
+
+ _putInlineElementsBack();
+
+ if(item.src) {
+ var inlineSt = mfp.st.inline,
+ el = $(item.src);
+
+ if(el.length) {
+
+ // If target element has parent - we replace it with placeholder and put it back after popup is closed
+ var parent = el[0].parentNode;
+ if(parent && parent.tagName) {
+ if(!_inlinePlaceholder) {
+ _hiddenClass = inlineSt.hiddenClass;
+ _inlinePlaceholder = _getEl(_hiddenClass);
+ _hiddenClass = 'mfp-'+_hiddenClass;
+ }
+ // replace target inline element with placeholder
+ _lastInlineElement = el.after(_inlinePlaceholder).detach().removeClass(_hiddenClass);
+ }
+
+ mfp.updateStatus('ready');
+ } else {
+ mfp.updateStatus('error', inlineSt.tNotFound);
+ el = $('
Comments
+ + +