teleren/devto huggingface dataset:
Migrating Kafka clusters with MirrorMaker2 and Strimzi
Tags: strimzi, mirrormaker2, migration, apachekafka
Published: 2021-12-10 08:23:22

---
title: Migrating Kafka clusters with MirrorMaker2 and Strimzi
published: true
date: 2021-11-19 00:00:00 UTC
tags: Strimzi,MirrorMaker2,Migration,ApacheKafka
canonical_url: http://blog.jromanmartin.io/2021/11/19/migrating-kafka-with-mirror-maker2.html
---

In this article we (my colleague [Manuel Schindler](https://www.linkedin.com/in/manuel-schindler-aa0397118/)
and I) would like to focus on the most common challenges to migrate Apache
Kafka clusters between different OpenShift platforms, and how to overcome
them by using Apache MirrorMaker and [Strimzi Operators](https://strimzi.io/).

**:newspaper_roll: :information_source: LATEST NEWS :information_source: :newspaper_roll:** This article has
been accepted and published in the [Strimzi Blog](https://strimzi.io/blog/2021/11/22/migrating-kafka-with-mirror-maker2/)
community :tada: [here](). We are glad :star_struck: to help and contribute in the Strimzi Community with our
experience and knowledge of this amazing Open Source project.

**Thank you so much Strimzi Community**!!! :muscle: :tada:

### Greetings

Many thanks to some great colleagues for help us reviewing this content:

* Hugo Guerrero [<i class="fa fa-twitter"></i>](https://twitter.com/hguerreroo) [<i class="fa fa-linkedin"></i>](https://www.linkedin.com/in/hugoguerrero/)
* Jakub Scholz [<i class="fa fa-twitter"></i>](https://twitter.com/scholzj) [<i class="fa fa-linkedin"></i>](https://www.linkedin.com/in/scholzj/)
* Rafael Yanez [<i class="fa fa-linkedin"></i>](https://www.linkedin.com/in/ryanezillescas/)
* Paolo Patierno [<i class="fa fa-twitter"></i>](https://twitter.com/ppatierno) [<i class="fa fa-linkedin"></i>](https://www.linkedin.com/in/paolopatierno/)
A Note to Devs Looking for Their First Job
Tags: codenewbie, beginners, jobhunt
Published: 2021-11-20 03:52:11

---
title: A Note to Devs Looking for Their First Job
published: true
date: 2021-11-19 00:00:00 UTC
tags: codenewbie, beginner, jobhunt
canonical_url: 
---

It’s hard out there, new devs. I’m sorry. So many of you have been fed the fairy tale of an industry with jobs a plenty, bountiful pay, with a steep and rigorous climb that would be worth it when you hit the peak—finally ready to transition from learning to working. I’m sorry so many of you have been let down, have seen the reality of the plentiful jobs for those with 3+ years of experience, the rat race for the available entry-level jobs, and the toxic environments preying on new developers.

I’m sorry you’ve felt that pain.

I know that for many it’s hard to land your first job. It can feel soul-crushing. The interview processes are worse than the standardized tests they made us take in high school. We’re back to impracticality, unnaturally pressurized situations, and a poor indication of how we’ll communicate with our teammates, how we’ll learn as we go, of our abilities to offer new and diverse opinions.

And for those of you who land your first jobs in tech and find yourself unsupported, neglected, and feeling like you provide no value in your job, I am sorry. You deserve to have guidance, support, and mentorship. You deserve to be provided with the tools that will allow you to grow. You deserve to be acknowledged for your work, to be encouraged to grow.

A team should work to cultivate talent, to create a safe space where you are willing to put yourself out there, to get out of your comfort zone. If you are afraid to share or to ask questions, then you have been let down.

There are good people and teams and communities in tech that are invested in holding the door open for you, in making space for hard and honest conversations that will help you to grow, in creating pathways for you so you aren’t dropped into a new world with no map, no tools, no direction.

There are good companies and teams that realize they don’t have the capacity or structure to support early career developers and admit that.

You deserve to know that you will be supported. Ask that question in the interview. Please ask how they’ll support you as an early career developer. Please ask them how they communicate as a team. Please ask them what their approach is to honest, but hard, conversations.

Please open yourself up to honest, but hard-to-hear feedback. Please remember that you are not at the top of the mountain yet, you are just starting the climb and it’s going to feel hard no matter what. But there’s a difference between growing pains and the pain of neglect. You are the hero in your journey, but every hero needs a mentor. It might not be a Yoda, it might be a community, it might be the wisdom you catch in a podcast, it might be a blogpost you read. Most of us are not out there to slay dragons by ourselves. We’re there to combine our skills, our strengths, to level each other up, to be the team that does it together.
Cursos para desenvolvedores
Tags: dio, digitalinnovationone, curses, developing
Published: 2021-11-18 23:57:45

Está em busca de aprender novas linguagens?
na Digital Innovation One você irá encontrar diversos cursos, com Bootcamps e ainda pode ser chamado para trabalhar para alguma empresa patrocinadora.
Não perca mais tempo inscreva-se e comece hoje mesmo a ampliar seus conhecimentos.

https://digitalinnovation.one/sign-up?ref=5JCFE67IJX
Release 0.3 - Part 3 Code review
Tags: opensource
Published: 2021-11-18 23:08:10

For release 0.3, I have to review 2 Pull requests of any internal repo.

## First review 
[Issue 26- auditing and fixing functions.md](https://github.com/Seneca-ICTOER/IPC144/pull/27), I reviewed the code and notice that some parts are missing, for VALIDATION sample of code, the output is missing. I put a comment and kindly ask Andre to add the missing output. After that I notice there is a lot of console errors [see](https://github.com/Seneca-ICTOER/IPC144/pull/27#pullrequestreview-800681205), again I kindly ask Andre to add the missing output.

After all those changes done it was ready to be merged.

## Second review 
[Added higher resolution icons](https://github.com/Seneca-ICTOER/IPC144/pull/53), I reviewed the code, everything looks good. I suggested him to update the `manifest.json` and `docusaurus.config.js`. 

After all those changes done it was ready to be merged.

## Conclusion
Reviewing code is something good to do. It helps to see the different ways other people implement a feature or fix a bug and learn from it. It also helps to improve the code quality of the project.
Easily Use SSL on Nginx With Certbot
Tags: nginx, linux, tutorial
Published: 2021-11-18 23:04:58

### Install Certbot  
###### Full instructions are [here](https://certbot.eff.org/instructions?ws=nginx&os=debian-10)
To install Certbot, you should have Snap installed as well. For instructions, follow [this](https://snapcraft.io/docs/installing-snapd) tutorial.  
Then, update snap
`sudo snap install core; sudo snap refresh core`
Finally in order to install Cerbot, run the follwing
`sudo snap install --classic certbot`
`sudo ln -s /snap/bin/certbot /usr/bin/certbot`

### Set up Nginx 
To use Certbot you should have `server_name` in your Ngnix config. For example, this is a sample of how my Nginx config file looked like before Certbot.
```json
server{
        root /home/pi/website;
        server_name example.slashtechno.com;
}
``` 
Once you have the config set up properly, restart nginx. On most systems it will be the following command.
`sudo service nginx restart`  
### Using Certbot
##### Running Certbot for use with Nginx
`sudo certbot --nginx`  
##### Removing a certificate 
`sudo certbot delete`
Day 13 of #100daysofcode: New Horizons
Tags: 100daysofcode, react, python, beginners
Published: 2021-11-18 22:50:49

I completed the first project I set out to work on in #100daysofcode! What's next?

## Today
I think I'm going to start using a bullet point style for this section, to keep it brief:
* Started today with Leetcode problems 
* Completed a few ES6 FreeCodeCamp tutorials
* Started working on my Favorite Artist's app
* *Finished the Favorite Artist app redesign*

Overall, I'm feeling great about today. I had initially aimed to do much more with this app redesign, but yesterday I accidentally ditched a ton of the changes I made. I think it is for the best however, as I would like to move on to the project I feel much more passionate about. It was nice to step back and ask myself why I was working so hard on this App redesign. The assignment's specs were very simple, but I set out to do much more with it to learn. I have learned a *LOT* since starting this #100daysofcode challenge, and I think it's time to move on to bigger and better things.

## Tomorrow
Following a previous discussion, I am going to start the main Django tutorial. If you have any recommendations for things to really take into account when first learning Django, I would really appreciate it! 
* Django Tutorial
* Read on comparing Flask vs. Django
* Start laying out plan on the next project
* Type out a discussion in my update on what I'm planning for the next project! If you want a spoiler, [here](https://dev.to/rydwhelchel/discussion-on-learning-memorization-reviewing-and-an-app-to-tie-it-all-together-1e3g) is a previous post I made regarding it!
* Start looking into *Material UI*! I have put some time into learning Bootstrap, specifically the React-bootstrap extension and now I would like to try my hand at learning some about Material UI!
* I also want to look into Material IO and see how it compares to MUI (or if its basically the same, I have no idea about it)

Overall, I'm really excited to be moving forward (and to have a clean slate of code)!

## What I'm Struggling on
Nothing now, my slate is clean!

### Resources
[JS Course - FreeCodeCamp](https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/)
[React-bootstrap](https://react-bootstrap.github.io)
Tomorrow's resources:
[Material UI](https://mui.com)
[Django Tutorial](https://docs.djangoproject.com/en/3.2/intro/tutorial01/)
[Material IO](https://material.io/resources/get-started#web)
Reduza linhas de código no Flutter usando o Spread operator! 
Tags: flutter, dart, codequality
Published: 2021-11-18 22:40:05

O operador Spread é uma sintaxe útil e rápida para adicionar itens a arrays e combinar arrays.

Mas hoje vamos aprender como podemos usar o Spread Operator, no caso esse carinha aqui => (...) no código para reduzir as diversas linhas de código.

###Então olha só, digamos que você tenha algo tipo isso aqui: 

![First look](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ensn3iekgllh8tepdsqx.png)

Como você pode ver no código acima, temos uma coluna contendo um botão e 5 ListTile.

Então... A nossa tarefa é reduzir essas linhas repetidas, mas como?

###Podemos usar um método chamado Nested Column!

Geralmente encontramos algo assim, usamos uma coluna dentro de outra coluna e passamos uma lista para seus filhos.
É bom, mas da pra melhorar...

![Nested Column](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3n1dqpiricaypb1m4weg.png)

###Agora, o método Spread (...)

O operador Spread é simples de usar, basta adicionar ... ao começo e pronto!
A coluna contém uma lista <Widget> e o operador Spread pode ser usado para adicionar uma lista existente em outra lista que ele aceita e entende.

![Spreadzão](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6a8nrd4jq5i4jtizxtgb.png)

###Tá, ainda não se convenceu? Quer mais?

Então toma ai mais um exemplo!

![Mais um exemplo pra ti](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yjap2vmugvaby9uvblcw.png)

Então, vamos verificar o exemplo acima onde estou usando uma condição if dentro de uma coluna com Spread que renderiza widgets condicionalmente e é melhor do que usar colunas aninhadas com operador ternário.

E é isso ai, valeu!
Diferenças entre final e const no Dart
Tags: flutter, dart, algorithms, codequality
Published: 2021-11-18 22:29:19

Na maioria das linguagens, estamos lidando com valores **finais** e **constantes**, como os próprios nomes já sugerem. 

Agora, tanto **final** quanto **const** parecem que estamos criando valores que não podem mudar, certo?

Um valor **constante** é provavelmente o oposto de uma **variável**, é uma variável que não muda, portanto, é bastante constante no valor que está armazenado nele!

Mas um valor **final** também é um valor que não muda.

Então, bora verificar a diferença?

```Dart
var user = [
{'name ': 'Henrique', 'age': 20},
{'name ': 'José', 'age': 22},
{'name ': 'Vargas', 'age': 27},
];
```

Podemos usar **final** em vez de **var** aqui e, na verdade, seria melhor do que usar **var** porque agora estamos muito cientes sobre o fato de que nunca pretendemos alterar esses valores uma vez que nosso programa seja executado!

E aqui está a grande jogada!!!

Use **final** se um valor não mudar desde o momento em que seu programa é executado. Ele pode ser inicializado com um valor, embora, por exemplo, em nossos códigos **Dart**, as propriedades aqui são **finais** porque elas são alteradas inicialmente quando atribuímos um valor aqui quando ele é criado, mas não mudam depois disso. exatamente o que **final** significa!

```Dart
class User {
final String userName;
final int16 age;
User(this.age, this.userName);
}
```

É um valor constante de tempo de execução. No momento em que este código **é executado**, nós registramos os valores **finais**, mas no momento em que estamos escrevendo este código, não sabemos qual será o valor final.

Então **const** para quê?

```Dart
const user = [
{'name ': 'Henrique', 'age': 20},
{'name ': 'José', 'age': 22},
{'name ': 'Vargas', 'age': 27},
];
```

Deveríamos usar **const** para deixar bem claro que esta é uma constante de tempo de compilação, não uma constante de tempo de execução como **final** é, mas uma constante de tempo de compilação. 

Agora, **constante de tempo de compilação** também significa implicitamente **constante de tempo de execução**.

Se você souber no momento em que está **escrevendo o código** qual será o valor **final** e que esse valor nunca mudará, então, é claro, ele também nunca mudará durante o tempo de execução. 

Mas o valor, o valor **final**, não é registrado quando o código é executado, mas já depois que você escreveu o código, porque o valor nunca será alterado. 

E esse é um conceito importante e, esperançosamente, deixa claro por que você veja o **final** e o **const** e como eles diferem.
Great node version management
Tags: node, javascript
Published: 2021-11-18 22:29:18

Here's a package.json:
```
{
  "...": "...",
  "engines-comment": [
    "When new node/yarn versions are released, you may see these errors:",
    "  engine \"yarn|node\" is incompatible with this module.",
    "Just bump version numbers below:"
  ],
  "engines": {
    "node": "16.13.x",
    "yarn": "1.22.15"
  },
  "node-version-rationale": [
    "Give some flexibility by ignoring patch updates",
    "but otherwise force developers to update node every couple 1-4 months"
  ],
  "yarn-version-rationale": [
    "Exact yarn version helps us produce consistent yarn.lock files"
  ]
}
```

Our pipeline is set always try and use the latest lts.

Our pipeline will run:
```
# Always run install+build:ci with latest LTS, to see output
# But verify engines at very end
yarn config set ignore-engines true

yarn install --frozen-lockfile

yarn build:ci

yarn config set ignore-engines false
yarn verify-node-and-yarn-versions-against-package-json-engines
```
So, we always use latest node LTS in our pipelines. BUT, we don't let a major version bump just fly by - as safe as node releases are - we will require explicit acknowledgement from a developer to use new major version of node LTS.

Now, why use node 16.13.x?
If you want to be strict - by all means set an exact version number. Based on node LTS release history, I estimate you'll need to update package.json engines version every 1-4 weeks.

But if you specify only an exact minor version, you'll only need to update package.json engines version about every 1-4 months.

v14 LTS was cut 10/27/2020
minor version bumps happened on: 9/28, 5/11, 2/23, 10/27
4 months, 3 months, 4 months

v12 LTS was more turbulent (probably due to es modules): 3/30, 2/23, 11/24, 10/6, 6/2, 5/26, 2/11, 2/5, 12/17
1 month, 3 months, 2 months, 4 months, 1 week, 3 months, 1 week, 2 months

v10 LTS: 2/23, 10/27, 7/21, 3/26, 2/5, 12/17, 10/22, 5/28, 12/26, 11/27, (10/30-first v10 lts)
4 months, 3 months, 4 months, 2 months, 2 months, 2 months, 5 months, 7 months, 1 month, 1 month

On mac and linux, if you use NVM, you should setup a bash or zsh profile script to automatically set node version when you cd into a project with a .nvmrc file.

We set out .nvmrc file to: `lts/*` which means "latest lts" - this is the same as our ci/cd pipeline.

This means, every time you `cd` into a project, `nvm` will use the latest lts. (I am assuming nvm does a network call at some point to see what `lts/*` should map to)

However, if some developers have not setup this zsh/bash script, or are using windows, or maybe they just simply don't want to automatically update node – Then the package.json engines check will force them to at least update every 1-4 months.

Updating the node minor version every 1-4 months feels like a great cadence to maybe update dependencies in your package.json.

Tangent: I need to do some digging on https://Volta.sh, it may be the only option for some developers using windows.
Release 0.3 - Part 2 Internal Project Contribution
Tags: opensource
Published: 2021-11-18 22:01:39

For release 0.3, I worked on [IPC144](https://github.com/Seneca-ICTOER/IPC144) as my internal project contribution. The issue is [Add Progressive Web App (PWA) support](https://github.com/Seneca-ICTOER/IPC144/issues/11).  

## Process
I started to install PWA plugin, but Docusaurus, I had some version not matching issue. It turns out that the current project is using an older version of Docusaurus (2.0.0-beta.2). The PWA plugin version has to match the version of Docusaurus to work.

I created another [pull request](https://github.com/Seneca-ICTOER/IPC144/pull/20) for upgrading Docusaurus to version (2.0.0-beta.8). After the pull request got merged, I can start working on the PWA feature.

To implement PWA, we first need an icon for 192x192  and 512x512. After that, we need to create a `manifest.json` to add all the settings for PWA.
```json
{
	"theme_color": "#DA291C",
	"background_color": "#FFFFFF",
	"display": "standalone",
	"scope": "./",
	"start_url": "./",
	"name": "IPC144 - Course Notes",
	"short_name": "IPC144",
	"description": "IPC144 course notes",
	"icons": [
		{
			"src": "img/pwa/manifest-icon-192.png",
			"sizes": "192x192",
			"type": "image/png",
			"purpose": "any maskable"
		},
		{
			"src": "img/pwa/manifest-icon-512.png",
			"sizes": "512x512",
			"type": "image/png",
			"purpose": "any maskable"
		}
	]
}
```
After that we add some more config in `docusaurus.config.js`.
```js 
	plugins: [
		[
			'@docusaurus/plugin-pwa',
			{
				offlineModeActivationStrategies: ['standalone', 'queryString'],
				pwaHead: [
					{
						tagName: 'link',
						rel: 'icon',
						href: 'img/pwa/manifest-icon-512.png',
					},
					{
						tagName: 'link',
						rel: 'manifest',
						href: '/manifest.json',
					},
					{
						tagName: 'meta',
						name: 'theme-color',
						content: '#DA291C',
					},
					{
						tagName: 'meta',
						name: 'apple-mobile-web-app-capable',
						content: 'yes',
					},
					{
						tagName: 'meta',
						name: 'apple-mobile-web-app-status-bar-style',
						content: '#DA291C',
					},
					{
						tagName: 'link',
						rel: 'apple-touch-icon',
						href: 'img/pwa/manifest-icon-192.png',
					},
					{
						tagName: 'link',
						rel: 'mask-icon',
						href: 'img/pwa/manifest-icon-512.png',
						color: '#DA291C',
					},
					{
						tagName: 'meta',
						name: 'msapplication-TileImage',
						content: 'img/pwa/manifest-icon-512.png',
					},
					{
						tagName: 'meta',
						name: 'msapplication-TileColor',
						content: '#DA291C',
					},
				],
			},
		],
	],
```
After that PWA is set up.
Contributing to Telescope 🔭
Tags: opensource
Published: 2021-11-18 21:39:24

## Introduction

While waiting for reviews in my recent [pull request](https://dev.to/mqnguyen/contribution-to-course-curriculum-2eb9), I decided to find a different project. After hours of searching for issues on GitHub, I suddenly remembered the first repository where I made my first pull request, Telescope. Since then, the project has undergone many changes with different features and bug fixes, so I think it is time to make another contribution.

## The issue

A quick overview about [Telescope](https://github.com/Seneca-CDOT/telescope): it is a web server and application developed by professors and students at Seneca College to track students/faculties' blogs about anything open-source. 

For my [task](https://github.com/Seneca-CDOT/telescope/issues/2461), I had to customize Telescope's build log page to match the design and layout of the main dashboard, specifically:

- Add header and side navigation bar
- Change side navigation default logo into Telescope logo
- Update link in side navigation logo to redirect to `./`

## Working on the issue

After setting up the development environment using Telescope's documentation, I began looking at the UI to figure out what I should do. Lucky for me, there was also a different [issue](https://github.com/Seneca-CDOT/telescope/issues/2433) that addressed the dashboard page UI, so I decided to use that as a reference.

I began by adding each UI component one by one, re-rendering the page every time I added in new code to make sure I didn't break anything. Once I was satisfied with my changes, I opened up a [pull request](https://github.com/Seneca-CDOT/telescope/pull/2480) on Telescope, explaining what I did and providing screenshots of the result. 

Since I was referencing another issue, I had to keep track of the updated changes in the other PR and update mine accordingly. The other PR also had many requested changes, so I tried my best to read through all the reviews, adding comments when I needed help and clarification to ensure that I wouldn't break or miss anything.

## Conclusion

Similar to the other PR, when this post is online, the PR is currently under review. I will constantly keep an eye on new notifications regarding this PR and add more commits if needed.

Cheers! 🍻
Release 0.3 - Part 1 External Project Contribution
Tags: opensource
Published: 2021-11-18 21:08:44

For release 0.3, I started to contribute on [Heptagram](https://github.com/Heptagram-Bot) repo. The notice that they migrated their website into React. I found out that they do not have prettier set up for the new React project. So I created an issue and asked to be assigned to work on that issue [✨❓ Feature Request: Add Prettier config](https://github.com/Heptagram-Bot/heptagram.xyz/issues/98). 

I first started to install prettier, and add a script for it, one for checking and the other one for writing.
```json
 "prettier": "prettier --write \"./**/*.{md,jsx,json,html,css,js,yml}\"",
 "prettier-check": "prettier --check \"./**/*.{md,jsx,json,html,css,js,yml}\""
```
After that, I made `.prettierrc.json` and add some rules. 
```json
{
    "arrowParens": "always",
    "bracketSpacing": true,
    "embeddedLanguageFormatting": "auto",
    "endOfLine": "lf",
    "htmlWhitespaceSensitivity": "css",
    "insertPragma": false,
    "jsxSingleQuote": false,
    "proseWrap": "preserve",
    "quoteProps": "as-needed",
    "requirePragma": false,
    "singleQuote": true,
    "tabWidth": 4,
    "trailingComma": "es5",
    "useTabs": false,
    "vueIndentScriptAndStyle": false,
    "printWidth": 100
}
```
I committed and pushed my change to remote, then I created a PR for asking if the prettier format is ok before I run a prettier on all files which change the whole project file format. 

After receiving confirmation that everything is okay. I run `npm run prettier` to change all the files and commit my change then after a few hours my [PR] (https://github.com/Heptagram-Bot/heptagram.xyz/pull/100) got merged.