<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Alexandre Freire</title>
    <description>The latest articles on Forem by Alexandre Freire (@alexandrefreire).</description>
    <link>https://forem.com/alexandrefreire</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F213434%2Ff0d66f0b-e981-4939-b04e-d462efce49c3.jpg</url>
      <title>Forem: Alexandre Freire</title>
      <link>https://forem.com/alexandrefreire</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alexandrefreire"/>
    <language>en</language>
    <item>
      <title>Tipos de Case na Programação: Como Escolher o Melhor para seu Código</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Mon, 17 Feb 2025 01:13:23 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/tipos-de-case-na-programacao-como-escolher-o-melhor-para-seu-codigo-4ol7</link>
      <guid>https://forem.com/alexandrefreire/tipos-de-case-na-programacao-como-escolher-o-melhor-para-seu-codigo-4ol7</guid>
      <description>&lt;p&gt;Se você é programador, provavelmente já se deparou com diferentes estilos de escrita para nomear variáveis, funções e classes. Esses padrões são chamados de naming case e desempenham um papel fundamental na legibilidade e padronização do código.&lt;/p&gt;

&lt;p&gt;Vamos explorar os principais tipos de case usados na programação, quando utilizá-los e como escolher o melhor para seu projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são Naming Cases?
&lt;/h2&gt;

&lt;p&gt;Os naming cases são convenções de nomenclatura usadas para formatar nomes de variáveis, funções, classes e constantes. Seguir um padrão adequado melhora a organização do código e facilita a colaboração em equipe.&lt;/p&gt;

&lt;p&gt;A seguir, veremos os estilos mais comuns e suas aplicações.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. camelCase
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;Descrição:&lt;/strong&gt; As palavras são unidas sem separadores, e a primeira letra da primeira palavra é minúscula, enquanto as demais iniciam com maiúscula.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Uso Comum:&lt;/strong&gt; Variáveis e funções em linguagens como JavaScript, Java, TypeScript e Swift.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let nomeUsuario = "João";  
function calcularTotalCompra() { /* código */ }  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Muito usado em linguagens populares.&lt;/li&gt;
&lt;li&gt;Fácil de ler quando há poucas palavras.&lt;/li&gt;
&lt;li&gt;Evita caracteres especiais, tornando o código mais limpo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Desvantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pode ser difícil de ler em nomes muito longos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. PascalCase
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;Descrição:&lt;/strong&gt; Similar ao camelCase, mas a primeira letra também é maiúscula.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Uso Comum:&lt;/strong&gt; Nome de classes, componentes em React e .NET.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UsuarioCadastro { /* código */ }  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Padrão recomendado para classes e objetos.&lt;/li&gt;
&lt;li&gt;Fácil de identificar elementos de alto nível no código.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Desvantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pode ser confundido com camelCase se não houver um padrão bem definido no projeto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. snake_case
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;Descrição:&lt;/strong&gt; As palavras são separadas por underscores (_) e todas as letras são minúsculas.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Uso Comum:&lt;/strong&gt; Python, bancos de dados (SQL) e algumas configurações de arquivos.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nome_usuario = "João"  
def calcular_total_compra():  
    # código  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excelente legibilidade, especialmente para nomes longos.&lt;/li&gt;
&lt;li&gt;Muito usado em linguagens como Python e SQL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Desvantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Em muitas linguagens modernas (JavaScript, Java, C#, Swift), o uso do snake_case foge do padrão adotado pela comunidade, o que pode prejudicar a padronização do código.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. SCREAMING_SNAKE_CASE
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;Descrição:&lt;/strong&gt; Uma variação do snake_case, mas todas as letras são maiúsculas.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Uso Comum:&lt;/strong&gt; Nomenclatura de constantes em diversas linguagens.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#define TAMANHO_MAXIMO 100  
const MAX_USERS = 500;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fácil de identificar constantes no código.&lt;/li&gt;
&lt;li&gt;Padrão adotado na maioria das linguagens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Desvantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não indicado para variáveis comuns, pois dificulta a leitura.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. kebab-case
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;Descrição:&lt;/strong&gt; As palavras são separadas por traços (-) e todas as letras são minúsculas.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Uso Comum:&lt;/strong&gt; Nomes de arquivos, URLs e algumas configurações de frameworks web.&lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minha-variavel  
https://meusite.com/pagina-inicial  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Padrão ideal para URLs e arquivos.&lt;/li&gt;
&lt;li&gt;Amplamente utilizado no desenvolvimento web.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;❌ Desvantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não pode ser usado em variáveis de código-fonte, pois o hífen é interpretado como um operador de subtração.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Qual Naming Case Usar no Seu Projeto?
&lt;/h2&gt;

&lt;p&gt;A escolha do naming case depende da linguagem e das convenções do time. Aqui estão algumas recomendações gerais:&lt;/p&gt;

&lt;p&gt;🔹 JavaScript, Java, Swift → Use camelCase para variáveis e funções.&lt;br&gt;
🔹 C#, React, .NET → Use PascalCase para classes e componentes.&lt;br&gt;
🔹 Python, SQL → Prefira snake_case para variáveis e nomes de tabelas.&lt;br&gt;
🔹 Constantes em qualquer linguagem → Use SCREAMING_SNAKE_CASE.&lt;br&gt;
🔹 Nomes de arquivos e URLs → Utilize kebab-case.&lt;/p&gt;

&lt;p&gt;Escolher a convenção certa para nomear variáveis e funções ajuda a manter um código limpo e organizado. Além disso, seguir um padrão melhora a colaboração entre desenvolvedores e evita erros de interpretação.&lt;/p&gt;

&lt;p&gt;Agora que você conhece os principais naming cases, qual deles você mais usa? Deixe seu comentário abaixo! 👇💬&lt;/p&gt;

</description>
      <category>codingtips</category>
      <category>namingconvention</category>
    </item>
    <item>
      <title>Sites that offer free certifications</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Thu, 08 Dec 2022 15:23:18 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/sites-that-offer-free-certifications-hie</link>
      <guid>https://forem.com/alexandrefreire/sites-that-offer-free-certifications-hie</guid>
      <description>&lt;p&gt;There are many websites that offer free certifications, often in the form of online courses or tutorials that users can complete to demonstrate their knowledge and skills in a particular subject. Some examples of websites that offer free certifications include:&lt;/p&gt;

&lt;p&gt;Coursera: Coursera offers thousands of online courses in a wide range of subjects, many of which are free to take. Some courses also offer the option to purchase a paid certificate to verify completion of the course.&lt;/p&gt;

&lt;p&gt;Khan Academy: Khan Academy offers free online courses and tutorials in subjects such as math, science, and history. While the courses do not offer formal certifications, users can earn badges and points to track their progress and achievements.&lt;/p&gt;

&lt;p&gt;edX: edX is a nonprofit online learning platform that offers free courses and tutorials from top universities and institutions. Many courses offer the option to purchase a paid certificate to verify completion.&lt;/p&gt;

&lt;p&gt;Udacity: Udacity offers free and paid online courses in subjects such as computer science, data science, and business. Some free courses offer a certificate of completion, while others require a paid subscription to access the certificate.&lt;/p&gt;

&lt;p&gt;LinkedIn Learning: LinkedIn Learning (formerly Lynda.com) offers a wide range of online courses and tutorials, many of which are free to access. Some courses offer a certificate of completion for a fee, while others do not offer a certificate.&lt;/p&gt;

&lt;p&gt;Overall, there are many websites that offer free certifications in various subjects, which can be a valuable resource for those looking to learn new skills and advance their careers. It's important to carefully research and compare different options to find the right fit for your needs and goals.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Video Tutorial CapRover</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Wed, 02 Mar 2022 19:58:13 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/video-tutorial-caprover-26e5</link>
      <guid>https://forem.com/alexandrefreire/video-tutorial-caprover-26e5</guid>
      <description>&lt;p&gt;&lt;a href="https://m.do.co/c/c3019c7d99fe" rel="noopener noreferrer"&gt;Get $100 credits free to test Digital Ocean Services&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See also the full post talking about caprover:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/alexandrefreire" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F213434%2Ff0d66f0b-e981-4939-b04e-d462efce49c3.jpg" alt="alexandrefreire"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/alexandrefreire/the-best-free-alternative-to-heroku-f60" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The best free alternative to Heroku&lt;/h2&gt;
      &lt;h3&gt;Alexandre Freire ・ Feb 13 '22&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#heroku&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;GitHub&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/caprover" rel="noopener noreferrer"&gt;
        caprover
      &lt;/a&gt; / &lt;a href="https://github.com/caprover/caprover" rel="noopener noreferrer"&gt;
        caprover
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Scalable PaaS (automated Docker+nginx) - aka Heroku on Steroids
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CapRover&lt;/h1&gt;
&lt;/div&gt;
&lt;a href="https://hub.docker.com/r/caprover/caprover/" title="Docker Pulls" rel="nofollow noopener noreferrer"&gt;
&lt;img src="https://camo.githubusercontent.com/1a0000987a389cbbb4628d166af799c2a680a9cf9426504651e77feef0e2b7da/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f636170726f7665722f636170726f7665722e737667" alt="Docker Pulls"&gt;
&lt;/a&gt;
&lt;a href="https://opencollective.com/caprover#backer" title="Open Collective backers and sponsors" rel="nofollow noopener noreferrer"&gt;
&lt;img src="https://camo.githubusercontent.com/f714f540d56bd5ca62498f1f2f1a393021703890ed5788d3fe97038e4ff754ee/68747470733a2f2f696d672e736869656c64732e696f2f6f70656e636f6c6c6563746976652f616c6c2f636170726f766572" alt="Open Collective backers and sponsors"&gt;
&lt;/a&gt;
&lt;a href="https://github.com/caprover/caprover/releases" title="GitHub release (latest by date)" rel="noopener noreferrer"&gt;
&lt;img src="https://camo.githubusercontent.com/fbb4d9f311dd898c0a1259582d142b5601b7e3cc5a642c53ebceca2c5ab7ab08/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f636170726f7665722f636170726f766572" alt="GitHub release (latest by date)"&gt;
&lt;/a&gt;
&lt;p&gt;Easiest app/database deployment platform and webserver package for your NodeJS, Python, PHP, Ruby, Go applications.&lt;/p&gt;
&lt;p&gt;No Docker, nginx knowledge required!&lt;/p&gt;
&lt;a href="https://youtu.be/VPHEXPfsvyQ" title="YouTube" rel="nofollow noopener noreferrer"&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcaprover%2Fcaprover-website%2Fmaster%2Fgraphics%2Fscreenshots-video-small.png" alt="YouTube"&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What's this?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;CapRover is an extremely easy to use app/database deployment &amp;amp; web server manager for your &lt;strong&gt;NodeJS, Python, PHP, ASP.NET, Ruby, MariaDB, MySQL, MongoDB, Postgres, WordPress (and etc...)&lt;/strong&gt; applications!&lt;/p&gt;
&lt;p&gt;It's blazingly fast and very robust as it uses Docker, nginx, LetsEncrypt and NetData under the hood behind its simple-to-use interface.&lt;/p&gt;
&lt;p&gt;✔ CLI for automation and scripting&lt;/p&gt;
&lt;p&gt;✔ Web GUI for ease of access and convenience&lt;/p&gt;
&lt;p&gt;✔ No lock-in! Remove CapRover and your apps keep working!&lt;/p&gt;
&lt;p&gt;✔ Docker Swarm under the hood for containerization and clustering&lt;/p&gt;
&lt;p&gt;✔ Nginx (fully customizable template) under the hood for load-balancing&lt;/p&gt;
&lt;p&gt;✔ Let's Encrypt under the hood for free SSL (HTTPS)&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Seriously! Who should care about CapRover?&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A [web] developer who does not like spending hours and days setting up a server, build tools…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/caprover/caprover" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>The best free alternative to Heroku</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Sun, 13 Feb 2022 16:09:10 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/the-best-free-alternative-to-heroku-f60</link>
      <guid>https://forem.com/alexandrefreire/the-best-free-alternative-to-heroku-f60</guid>
      <description>&lt;p&gt;I recently discovered a new tool, I was looking for an alternative that came closest to Heroku. Personally I think Heroku is very good, but very expensive, I know it's not a simple VPS, plus $7 for me who live in Brazil is a high value, I'm referring to the hobby plan where it's possible to add a domain with SSL, and prevent the application from 'sleeping'. &lt;/p&gt;

&lt;p&gt;So now Caprover is my equivalent alternative to Heroku, I have full control over the infrastructure and I don't need technical knowledge to manage it. With a VPS of only $5 I can now upload my apps with the right to a custom domain with SSL without paying anything extra for it. &lt;/p&gt;

&lt;p&gt;Currently my VPS is 1gb of ram, it is 65% used, but it already has 5 active applications in .net core, and a Mysql server with 3 databases. In other words, there is still room for me to put more in this current structure. &lt;/p&gt;

&lt;p&gt;And if I need to, I can easily scale with the facilities offered by CapRover. Now I will leave here an overview talking about CapRover, remembering that I took this text from the documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's CapRover?
&lt;/h2&gt;

&lt;p&gt;CapRover is an extremely easy to use app/database deployment &amp;amp; web server manager for your NodeJS, Python, PHP, ASP.NET, Ruby, MySQL, MongoDB, Postgres, WordPress (and etc...) applications!&lt;/p&gt;

&lt;p&gt;It's blazingly fast and very robust as it uses Docker, nginx, LetsEncrypt and NetData under the hood behind its simple-to-use interface.&lt;/p&gt;

&lt;p&gt;✔ CLI for automation and scripting&lt;br&gt;
✔ Web GUI for ease of access and convenience&lt;br&gt;
✔ No lock-in! Remove CapRover and your apps keep working!&lt;br&gt;
✔ Docker Swarm under the hood for containerization and clustering&lt;br&gt;
✔ Nginx (fully customizable template) under the hood for load-balancing&lt;br&gt;
✔ Let's Encrypt under the hood for free SSL (HTTPS)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r5zwc6mnzb9lfcjcu57.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2r5zwc6mnzb9lfcjcu57.png" alt="CapRover The best free alternative to Heroku" width="800" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It's made for a developer who...
&lt;/h2&gt;

&lt;p&gt;does not like spending hours and days setting up a server, build tools, sending code to server, build it, get an SSL certificate, install it, update nginx over and over again.&lt;/p&gt;

&lt;p&gt;uses expensive services like Heroku, Microsoft Azure and etc. And is interested in reducing their cost by 4x (Heroku charges 25$/month for their 1gb instance, the same server is 5$ on DigitalOcean!!)&lt;/p&gt;

&lt;p&gt;prefers to write more of showResults(getUserList()) and not much of apt-get install libstdc++6 &amp;gt; /dev/null&lt;/p&gt;

&lt;p&gt;enjoys a platform where installing MySQL, MongoDB and etc on their server is done by selecting from a dropdown and clicking on install!&lt;/p&gt;

&lt;p&gt;likes to enjoy the power of Docker and nginx without having to learn them or deal with their settings scripts to make things work!!&lt;/p&gt;

&lt;p&gt;knows Docker and nginx inside out, and enjoys a platform where basic operations are done, yet allowing them to customize any specific settings if they need to&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Any Language&lt;/strong&gt;&lt;br&gt;
Deploy apps in your own space (Node js, PHP, Python, Java literally any language!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSL&lt;/strong&gt;&lt;br&gt;
Ability to secure your services over HTTPS for FREE, ability to automatically redirect HTTP to HTTPS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One-Click Apps&lt;/strong&gt;&lt;br&gt;
Deploying one-click apps is a matter of seconds! MongoDB, Parse, MySQL, WordPress, Postgres and many more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy Deploy&lt;/strong&gt;&lt;br&gt;
Many ways to deploy: upload your source from dashboard, use command line caprover deploy, use webhooks and build upon git push&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple Interface&lt;/strong&gt;&lt;br&gt;
Simple interface for many docker operations: exposing container ports to host, setting up persistent directories, instance count and etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fully Customizable&lt;/strong&gt;&lt;br&gt;
Optionally fully customizable nginx config allowing you to enable HTTP2, specific caching logic, custom SSL certs and etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cluster Ready&lt;/strong&gt;&lt;br&gt;
Attach more nodes and create a cluster in seconds! CapRover automatically configures nginx to load balance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increase Productivity&lt;/strong&gt;&lt;br&gt;
Focus on your apps! Not the bells and whistles just to run your apps!&lt;/p&gt;

&lt;h2&gt;
  
  
  To finish
&lt;/h2&gt;

&lt;p&gt;You can use CapRover with any cloud provider like AWS, Azure, Google Cloud or other. But CapRover is already available too on the ocean digital store, that is, you will not even need to configure it, just choose it, inform your VPS configuration, datacenter and finally create, after that you will receive the fixed public IP of your VPS and the details to access the CapRover dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduoewxua4j4nfeloncb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fduoewxua4j4nfeloncb2.png" alt="CapRover at Digital Ocean" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will leave here a link promoting Digital Ocean, using my link you receive $100 free to test the platform.&lt;br&gt;
&lt;a href="https://m.do.co/c/c3019c7d99fe" rel="noopener noreferrer"&gt;Get $100 credits free to test Digital Ocean Services&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=VPHEXPfsvyQ" rel="noopener noreferrer"&gt;YouTube Tutorial&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/caprover/caprover" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://caprover.com/" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>heroku</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Como liberar acesso remoto do MySql server no Ubuntu</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Tue, 01 Feb 2022 12:41:58 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/mysql-allow-remote-access-to-all-databases-1kfn</link>
      <guid>https://forem.com/alexandrefreire/mysql-allow-remote-access-to-all-databases-1kfn</guid>
      <description>&lt;p&gt;Config file changes are required to enable connections via localhost.&lt;/p&gt;

&lt;p&gt;To connect through remote IPs, Login as a "root" user and run the below queries in mysql.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new user that is accessible on localhost as well as from remote IPs.&lt;/p&gt;

&lt;p&gt;Also comment the below line from your my.cnf file located in /etc/mysql/my.cnf&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bind-address = 127.0.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart your mysql using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo service mysql restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you should be able to connect remotely to your mysql.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/8348506/grant-remote-access-of-mysql-database-from-any-ip-address/8348560" rel="noopener noreferrer"&gt;Solution found on stackoverflow and written by harishannam&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>WhatsApp Custom Link Message</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Wed, 05 Jan 2022 16:39:04 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/whatsapp-custom-link-message-51kp</link>
      <guid>https://forem.com/alexandrefreire/whatsapp-custom-link-message-51kp</guid>
      <description>&lt;p&gt;Make custom link messages to Whatsapp with nuget package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var waComposer = new WaComposer();
waComposer.WriteText("Pedido",1,1);
//Observation: this 1,1 is break line. 1 before and 1 after

waComposer.WriteText("Item One");

//can format - available options: Italic, Bold, Strikethrough, Monospace.
waComposer.WriteText(WaFormat.Bold("Two")); 
waComposer.WriteText(WaFormat.Italic("Example Number: ") + "3");

var textResult = waComposer.GetText();

var whatsAppLink = WaSender.GetLink("PHONE_NUMBER_HERE",textResult);

//example output of whatsAppLink 
"https://wa.me/123/?text=THE_MESSAGE_FORMATED_BY_PACKAGE_HERE"
or on mobile 
"whatsapp://send?text=THE_MESSAGE_FORMATED_BY_PACKAGE_HERE&amp;amp;phone=123"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;being able to stay like this for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1ryh9gyx52ewymp6ecr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1ryh9gyx52ewymp6ecr.png" alt="Image description" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Available on &lt;a href="https://www.nuget.org/packages/WhatsAppLink/" rel="noopener noreferrer"&gt;https://www.nuget.org/packages/WhatsAppLink/&lt;/a&gt;&lt;br&gt;
Github &lt;a href="https://github.com/oalexandrefreire/WhatsAppLinkCSharp" rel="noopener noreferrer"&gt;https://github.com/oalexandrefreire/WhatsAppLinkCSharp&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>List of Web Attacks</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Tue, 28 Dec 2021 12:56:16 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/list-of-web-attacks-fca</link>
      <guid>https://forem.com/alexandrefreire/list-of-web-attacks-fca</guid>
      <description>&lt;p&gt;This is a list of some types of attacks. The list is incomplete, the idea is to feed it based on your and other people's comments. If you know of any attacks that are not on the list or have already suffered from a comment here. &lt;/p&gt;

&lt;p&gt;There are many interesting stories and I'm sure it will serve as a warning for other people not to go through the same, I've suffered some attacks when I created a VPS, because I didn't worry about security the intruder broke in and was using my VPS to mine bitcoins.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://lifars.com/2020/04/injection-attacks-explained/#:~:text=An%20injection%20attack%20is%20a,in%20the%20OWASP%20Top%2010" rel="noopener noreferrer"&gt;Injection&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://owasp.org/www-project-top-ten/2017/A2_2017-Broken_Authentication" rel="noopener noreferrer"&gt;Broken Authentication&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.acunetix.com/blog/web-security-zone/sensitive-data-exposure/#:~:text=The%20term%20sensitive%20data%20exposure,kind%20of%20sensitive%20data%20exposure." rel="noopener noreferrer"&gt;Sensitive Data Exposure&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing" rel="noopener noreferrer"&gt;XML External Entities (XXE)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://hdivsecurity.com/owasp-broken-access-control" rel="noopener noreferrer"&gt;Broken Access Control&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://owasp.org/www-project-top-ten/2017/A6_2017-Security_Misconfiguration" rel="noopener noreferrer"&gt;Security Misconfiguration&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owasp.org/www-community/attacks/xss/" rel="noopener noreferrer"&gt;Cross-Site Scripting (XSS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://portswigger.net/web-security/deserialization" rel="noopener noreferrer"&gt;Insecure Deserialization&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.whitehatsec.com/glossary/content/null-byte-injection" rel="noopener noreferrer"&gt;Null Byte Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/techiepedia/guide-to-bug-bounty-hunting-dd5607142f78" rel="noopener noreferrer"&gt;Bug Bounty Hunting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;nonce, cookie __host, cache poisoning&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>SpreadArray CSharp</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Mon, 11 Oct 2021 12:39:22 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/spreadarray-csharp-5136</link>
      <guid>https://forem.com/alexandrefreire/spreadarray-csharp-5136</guid>
      <description>&lt;p&gt;I decided to publish an extension that simulates a javascript spread function. &lt;/p&gt;

&lt;p&gt;When I started using c # I missed some features that I used in javascript, I know they are different things and that c # is a strongly typed language. &lt;/p&gt;

&lt;p&gt;But I'll leave the link to the package that I created and use in some projects, and that solves some problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread Array CSharp
&lt;/h2&gt;

&lt;p&gt;The spread operator is denoted by three dots (…)(popular in javascript). · The spread operator unpacks elements of iterable objects such as arrays, sets, and maps into a list.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Alexandre"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;userAddress&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;UserAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Porto Velho"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Brasil"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;contact&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Contact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"my@mail.com"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kt"&gt;dynamic&lt;/span&gt; &lt;span class="n"&gt;dynamicUserProfile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ExpandoObject&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;dynamicUserProfile&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Spread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userAddress&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;Spread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;contact&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;/// Example 1: preparing to json response&lt;/span&gt;
&lt;span class="n"&gt;JObject&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FromObject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;dynamicUserProfile&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;/// Example 2: setting value on richTextBox from windows application&lt;/span&gt;
&lt;span class="n"&gt;richTextBox1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SelectToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dynamicUserProfile"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserAddress&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;UserAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;City&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;city&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="n"&gt;Country&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;country&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;City&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Country&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;User&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Contact&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;Contact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>csharp</category>
    </item>
    <item>
      <title>Plano de estudos em machine learning com conteúdos em português.</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Wed, 18 Aug 2021 21:07:37 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/plano-de-estudos-em-machine-learning-com-conteudos-em-portugues-cjf</link>
      <guid>https://forem.com/alexandrefreire/plano-de-estudos-em-machine-learning-com-conteudos-em-portugues-cjf</guid>
      <description>&lt;p&gt;By &lt;a href="https://github.com/italojs/awesome-machine-learning-portugues" rel="noopener noreferrer"&gt;https://github.com/italojs/awesome-machine-learning-portugues&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alfinetada/lembrete
&lt;/h2&gt;

&lt;p&gt;Fulano(a), sei que não é fácil aprender inglês, mas só queria lembrar que você está perdendo MUITO conteúdo em não focar nessa língua, você perde muito conteúdo e os assuntos que não consegue estudar em inglês, muito provavelmente são assuntos atrasados, se você estudasse tudo isso em inglês veria o quádruplo de contéudo. Não quero que você pare de estudar machine learning (programação em geral na verdade), mas olha, começe a se cobrar um pouco mais nese ponto 😉&lt;/p&gt;

&lt;p&gt;Agora vamos estudar machine learning até o talo! 👊&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que usar?
&lt;/h2&gt;

&lt;p&gt;Muito das pessoas que querem entra no mundo de machine learning começam pelo mais avançado que há, redes neurais com algum framwork(tensorflow, CNTK, pytorch e etc), mas antes de chegar em redes neurais é importante que você passe por outros assuntos mais básicos para então chegar a desenvolver uma rede neural de fato, ou pelo menos entender o que você está fazendo.&lt;/p&gt;

&lt;p&gt;Aqui você encontrará um lista já pronta de assunos a serem estudados, tudo na ordem correta, assim você não terá de gastar tempo aprendendo a aprender machine learning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.quora.com/Can-I-learn-and-get-a-job-in-Machine-Learning-without-studying-CS-Master-and-PhD" rel="noopener noreferrer"&gt;Posso aprender e arrumar um emprego em Machine Learning sem estudar mestrado e Phd em Ciência da Computação?&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;"Você pode, mas isto é muito mais difícil do que quando eu entrei no campo."&lt;/em&gt; &lt;a href="https://www.quora.com/Can-I-learn-and-get-a-job-in-Machine-Learning-without-studying-CS-Master-and-PhD/answer/Drac-Smith?srid=oT0p" rel="noopener noreferrer"&gt;Drac Smith&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;a href="https://www.quora.com/How-do-I-get-a-job-in-Machine-Learning-as-a-software-programmer-who-self-studies-Machine-Learning-but-never-has-a-chance-to-use-it-at-work" rel="noopener noreferrer"&gt;Como eu consigo um emprego em Machine Learning como um programador de software que auto-estudou  Machine Learning, mas nunca teve a chance de usar isso no trabalho?&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;"Estou contratando especialistas de Machine Learning para minha equipe e seu MOOC não vai conseguir para você o trabalho (há melhores notícias abaixo). Na verdade, muitas pessoas com um mestrado em Machine Learning não terão o emprego porque eles (e a maioria que tomaram MOOC) não têm uma compreensão profunda que vai me ajudar a resolver os meus problemas."&lt;/em&gt; &lt;a href="https://www.quora.com/How-do-I-get-a-job-in-Machine-Learning-as-a-software-programmer-who-self-studies-Machine-Learning-but-never-has-a-chance-to-use-it-at-work/answer/Ross-C-Taylor?srid=oT0p" rel="noopener noreferrer"&gt;Ross C. Taylor&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;a href="http://programmers.stackexchange.com/questions/79476/what-skills-are-needed-for-machine-learning-jobs" rel="noopener noreferrer"&gt;Que habilidades são necessárias para trabalhos de Machine Learning?&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;"Primeiramente, você precisa ter um decente background de Ciência da Computação/Matemática. ML é um tópico avançado, então a maioria dos livros didáticos assumem que você tem esse background. Por segundo, Machine Learning é um tema muito geral com várias sub especialidades que exigem habilidades únicas. Você pode querer procurar o currículo de um programa de MS em Machine Learning para ver o curso, o currículo e livro didático."&lt;/em&gt; &lt;a href="http://softwareengineering.stackexchange.com/a/79717" rel="noopener noreferrer"&gt;Uri&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Estatística, propabilidade, computação distribuída e estatística."&lt;/em&gt; &lt;a href="http://softwareengineering.stackexchange.com/a/79575" rel="noopener noreferrer"&gt;Hydrangea&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Eu me encontro em tempos difíceis.&lt;/p&gt;

&lt;p&gt;AFAIK, &lt;a href="http://machinelearningmastery.com/programmers-can-get-into-machine-learning/" rel="noopener noreferrer"&gt;Há dois lados para Machine Learning&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prática de Machine Learning: Isto é sobre bancos de dados de consultas, limpeza de dados, escrevendo scripts para transformar dados e colagem de algoritmo e bibliotecas juntos e escrever código personalizado para espremer respostas confiáveis de dados para satisfazer as perguntas difíceis e mal definidas. É a porcaria da realidade.&lt;/li&gt;
&lt;li&gt;Teoria de Machine Learning: Isto é sobre matemática e abstração e cenários idealizados e limites e beleza e informando o que é possível. É muito mais puro e mais limpo e removido da confusão da realidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eu acho que a melhor maneira para metodologia centrada na prática é algo como &lt;a href="http://machinelearningmastery.com/machine-learning-for-programmers/#comment-358985" rel="noopener noreferrer"&gt;'prática - aprendizagem - prática'&lt;/a&gt;, que significa onde estudantes primeiro vêm com alguns projetos existentes com problemas e soluções (prática) para se familiarizar com os métodos tradicionais na área e talvez também com sua metodologia.Depois de praticar com algumas experiências elementares, podem ir para os livros e estudar a teoria subjacente, que serve para guiar a sua futura prática avançada e reforçará a sua caixa de ferramentas de solução de problemas práticos. Estudar a teoria também melhora ainda mais sua compreensão sobre as experiências elementares e irá ajudá-los a adquirir experiências avançadas mais rapidamente.&lt;/p&gt;

&lt;p&gt;É um plano longo. Isso vai demorar anos para mim. Se você já está familiarizado com bastante disso já, você levará muito menos tempo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como usar?
&lt;/h2&gt;

&lt;p&gt;Tudo abaixo é uma estrutura de tópicos, e você deve enfrentar os itens em ordem de cima para baixo.&lt;br&gt;
Não precisa ver todos os links, mas você tem que entender cada um dos tópicos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Não sinta que não é inteligente o bastante
&lt;/h2&gt;

&lt;p&gt;Para aprender machine learning, você terá de aprender matemática, mas não se preocupe, não é tão difícil quanto parece, caso você discorde de mim, leia esse &lt;a href="https://medium.com/machina-sapiens/aprendendo-ia-se-voc%C3%AA-n%C3%A3o-%C3%A9-bom-em-matem%C3%A1tica-39ac167bc738" rel="noopener noreferrer"&gt;artigo&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Assuntos introdutórios
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/o-que-%C3%A9-machine-learning-94cc71c2a6e3" rel="noopener noreferrer"&gt;O que é machine learning?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/antes-de-come%C3%A7armos-a-falar-sobre-tipos-de-aprendizados-que-veremos-no-pr%C3%B3ximo-artigo-%C3%A9-ea5b04685913" rel="noopener noreferrer"&gt;Tipos de dados do seu dataset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/tipos-de-aprendizagem-1c1339f73bdf" rel="noopener noreferrer"&gt;Tipos de aprendizagem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=WgUrONLhons" rel="noopener noreferrer"&gt;Uma breve introdução ao Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://deeplearningbook.com.br/as-10-principais-arquiteturas-de-redes-neurais/" rel="noopener noreferrer"&gt;As 10 Principais Arquiteturas de Redes Neurais&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=OWt8BW6Tb6o" rel="noopener noreferrer"&gt;Machine Learning (Aula 3) - Aprendizado Supervisionado e não Supervisionado&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  classificação vs predição
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=2vRUdnQ1X74&amp;amp;t=278s" rel="noopener noreferrer"&gt;Machine Learning (Aula 7) - Modelos de Predição&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=WRQmC8QU_YU" rel="noopener noreferrer"&gt;Machine Learning em Português (Aula 8) - Modelo de Classificação de Íris Parte 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Machine Learning Supervisionado
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Árvore de Decisão
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/machine-learning-beyond-deep-learning/%C3%A1rvores-de-decis%C3%A3o-3f52f6420b69" rel="noopener noreferrer"&gt;Árvores de Decisão&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=_ICNdRrl68k" rel="noopener noreferrer"&gt;ÁRVORE DE DECISÃO. EXEMPLO COMPLETO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.vooo.pro/insights/um-tutorial-completo-sobre-a-modelagem-baseada-em-tree-arvore-do-zero-em-r-python/" rel="noopener noreferrer"&gt;Um tutorial completo sobre modelagem baseada em árvores de decisão (códigos R e Python)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/Decision%20Trees.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  KNN - K-Vizinhos Mais Próximos (&lt;em&gt;K-Nearest Neighbors&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/knn-k-nearest-neighbors-1-e140c82e9c4e" rel="noopener noreferrer"&gt;KNN (K-Nearest Neighbors) #1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/knn-k-nearest-neighbors-2-f2ab9e5662b" rel="noopener noreferrer"&gt;KNN (K-Nearest Neighbors) #2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/brasil-ai/knn-3-codando-nosso-classificador-de-c%C3%A2ncer-de-mama-eadd3b41b54b" rel="noopener noreferrer"&gt;KNN #3 — Codando nosso classificador de câncer de mama&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bzIsfLgTEQw" rel="noopener noreferrer"&gt;Machine Learning em Português (Aula 11) - Explicando K-NN (Regressão e Classificação)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Cz6NCHSY0Z0" rel="noopener noreferrer"&gt;Machine Learning em Português (Aula 15) - K-Nearest Neighbors (Regressão - Parte 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/KNN.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Naive Bayes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=9OOZf4klOeM" rel="noopener noreferrer"&gt;Teorema de Bayes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=78R1yNVGnSk&amp;amp;t=244s" rel="noopener noreferrer"&gt;Teorema de Bayes - Aula 1: Características (Probabilidade a Priori, Condicional e Conjunta)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=mTfI6ggVNyQ&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J&amp;amp;index=2" rel="noopener noreferrer"&gt;Teorema de Bayes - Aula 2: a Posteriori&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Buvp2kFnIbs&amp;amp;index=3&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 3) - Usando o teorema para calcular sorteio de uma roleta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=WZLf5sSIzAc&amp;amp;index=4&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 4) - Explicando o cálculo do vídeo anterior&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=dNLqMphjUjw&amp;amp;index=5&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 5) - Caminho pela raridade do item no Diablo (Parte 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=X1I29qqXszs&amp;amp;index=6&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 6) - Caminho pela raridade do item (Parte 2)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Wcb4_pnADEE&amp;amp;index=7&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 7) Vídeo Correção - Nomenclaturas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Y1DnDnCYeQU&amp;amp;list=PL4OAe-tL47sadpBP4atfVFBbKm-Fh160J&amp;amp;index=8" rel="noopener noreferrer"&gt;Teorema de Bayes (Aula 8) - Bayes Sequencial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3HJVRBEMwoU" rel="noopener noreferrer"&gt;Naive Bayes | Carlos Baldove | Papo Reto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://imasters.com.br/desenvolvimento/classificador-naive-bayes-em-50-linhas" rel="noopener noreferrer"&gt;Classificador Naive bayes em 50 linhas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  SVM - Máquina de Vetores de Suporte (&lt;em&gt;Support Vector Machine&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mql5.com/pt/articles/584" rel="noopener noreferrer"&gt;Uma Introdução às Support Vector Machines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pt.stackoverflow.com/a/40149/20728" rel="noopener noreferrer"&gt;Explicar o algoritmo SVR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=4Zh7UeHqHvc" rel="noopener noreferrer"&gt;Máquina de Vetores de Suporte - SVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=cB__Oa85htg" rel="noopener noreferrer"&gt;SVM - Support Vector Machine Linear, Não Linear - Teoria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Regressão Linear
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/ensina-ai/regress%C3%A3o-linear-simples-4cac67c4488c" rel="noopener noreferrer"&gt;Regressão linear simples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=MgtIdBrf0v8" rel="noopener noreferrer"&gt;Regressão Linear (Parte 1) - Machine Learning em Português (Aula 12)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jh4m0WN-n48" rel="noopener noreferrer"&gt;Regressão Linear (Parte 2) - Machine Learning (Aula 13)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Km1HoKVkd6k" rel="noopener noreferrer"&gt;Machine Learning (Aula 21) - Regressão Linear no R&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/Regress%C3%A3o%20Linear.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Regressão Multivariada
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/Regress%C3%A3o%20Multilinear.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Regressão Polinomial
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/Regress%C3%A3o%20Polinomial.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Perceptron
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/ensina-ai/redes-neurais-roots-1-introdu%C3%A7%C3%A3o-ffdd6f8b9f01" rel="noopener noreferrer"&gt;Redes neurais roots #1 — introdução&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/ensina-ai/redes-neurais-roots-2-treinamento-3161a439c4f3" rel="noopener noreferrer"&gt;Redes neurais roots #2— Treinamento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/ensina-ai/redes-neurais-roots-3-show-me-the-code-e56359310083" rel="noopener noreferrer"&gt;Redes neurais roots #3 — Show me the code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6yYUc6nU3Cw&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=2&amp;amp;t=0s" rel="noopener noreferrer"&gt;Aula - Perceptron e Adaline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//ftp://ftp.dca.fee.unicamp.br/pub/docs/vonzuben/ia353_1s13/topico8_1s2013.pdf"&gt;Máquinas de vetores-suporte &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://artificiencia.com/aprenda/maquina-de-vetores-de-suporte/" rel="noopener noreferrer"&gt;Máquina de vetores de suporte(código)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Regressão Logística
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://carloscollares.blogspot.com/2011/05/o-que-e-uma-regressao-logistica.html" rel="noopener noreferrer"&gt;O que é uma regressão logística?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Fs8LhzhEMwI" rel="noopener noreferrer"&gt;EB - Aula 6 Teórica - Regressão logística&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=CVL5vj1N1U8" rel="noopener noreferrer"&gt;EB - Aula 6 prática - Regressão Logística&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.abgconsultoria.com.br/blog/voce-sobreviveria-no-titanic-um-exemplo-de-regressao-logistica/" rel="noopener noreferrer"&gt;Você sobreviveria no Titanic? Um exemplo de Regressão Logística&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@silviocesar_75950/regress%C3%A3o-log%C3%ADstica-na-elei%C3%A7%C3%A3o-3d8011469712" rel="noopener noreferrer"&gt;Regressão Logística na Eleição&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Função de Custo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=jSaJjshIAUw" rel="noopener noreferrer"&gt;Função de Custo (Regressão Linear) - Machine Learning em Português (Aula 14)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kHfhMsCoUus" rel="noopener noreferrer"&gt;Calculando a Função de Custo (Regressão Linear) - Machine Learning (Aula 15)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ikmxun1t-HM" rel="noopener noreferrer"&gt;Valor Mínimo da Função de Custo (Regressão Linear) - Machine Learning (Aula 16)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gradiente Descendente (&lt;em&gt;Gradient Descent&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xdDL_8Sg6JI&amp;amp;t=404s" rel="noopener noreferrer"&gt;Gradient Descent (Regressão Linear - Parte 1) - Machine Learning (Aula 17)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6lbX-MI5B6M" rel="noopener noreferrer"&gt;Calculando Gradient Descent Parte 1 (Regressão Linear) - Machine Learning (Aula 18)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=yraCrOa3mzk" rel="noopener noreferrer"&gt;Como verificar o Gradient Descent (Regressão Linear) - Machine Learning (Aula 20)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multilayer Perceptron
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/ensina-ai/redes-neurais-perceptron-multicamadas-e-o-algoritmo-backpropagation-eaf89778f5b8" rel="noopener noreferrer"&gt;Redes Neurais, Perceptron Multicamadas e o Algoritmo Backpropagation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Redes Neurais Convolucionais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=n4rmrZg1_58&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=5&amp;amp;t=1s" rel="noopener noreferrer"&gt;Redes Neurais profundas Convolucionais - Parte I - Fundamentos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=0XUrLfQXzcw&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=5" rel="noopener noreferrer"&gt;Redes Neurais profundas Convolucionais - Parte II - Arquiteturas Modernas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=qDmKwmkc4vs&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=7" rel="noopener noreferrer"&gt;Parametrização de redes neurais profundas&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extra: &lt;a href="https://www.youtube.com/watch?v=BhwppCyV2iI&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=8" rel="noopener noreferrer"&gt;Arquiteturas de redes neurais profundas para detecção de objetos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## Adaboost&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.teses.usp.br/teses/disponiveis/3/3152/tde-12062012-163740/pt-br.php" rel="noopener noreferrer"&gt;Estudo do algoritmo adaboost de aprendizagem de máquina aplicado a sensores e sistemas embarcados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/Adaboost.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Rede Neurais Recorrentes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=94hG00EJFNo&amp;amp;list=PLSZEVLiOtIgF19_cPrvhJC2bWn-dUh1zB&amp;amp;index=6" rel="noopener noreferrer"&gt;Redes Neurais Recorrentes (RNN) - LSTM, GRU, Seq2seq e Mecanismos de atenção&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bDDP0m4jjH0" rel="noopener noreferrer"&gt;Redes Neurais Recorrentes(tem código)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=bIcadBu--u8" rel="noopener noreferrer"&gt;Keras - Usando redes neurais LSTM para classificar sentimentos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Machine Learning Não-Supervisionado
&lt;/h1&gt;

&lt;h2&gt;
  
  
  PCA - Análise de Componentes Principais (&lt;em&gt;Principal Component Analysis&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/PCA.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LDA - Análise Discriminante Linear (&lt;em&gt;Linear Discriminant Analysis&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/LDA.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  K-Médias (&lt;em&gt;K-Means&lt;/em&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/arnaldog12/Machine_Learning/blob/master/K-Means.ipynb" rel="noopener noreferrer"&gt;Implementação em Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Secure localStorage data with high level of encryption and data compression</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Wed, 18 Aug 2021 21:03:32 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/secure-localstorage-data-with-high-level-of-encryption-and-data-compression-5em4</link>
      <guid>https://forem.com/alexandrefreire/secure-localstorage-data-with-high-level-of-encryption-and-data-compression-5em4</guid>
      <description>&lt;p&gt;By &lt;a href="https://github.com/softvar/secure-ls" rel="noopener noreferrer"&gt;https://github.com/softvar/secure-ls&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  secure-ls
&lt;/h1&gt;

&lt;p&gt;Secure localStorage data with high level of encryption and data compression.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://softvar.github.io/secure-ls#live-demo" rel="noopener noreferrer"&gt;LIVE DEMO&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Secure data with various types of encryption including &lt;code&gt;AES&lt;/code&gt;, &lt;code&gt;DES&lt;/code&gt;, &lt;code&gt;Rabbit&lt;/code&gt; and &lt;code&gt;RC4&lt;/code&gt;. (defaults to &lt;code&gt;Base64&lt;/code&gt; encoding).&lt;/li&gt;
&lt;li&gt;Compress data before storing it to &lt;code&gt;localStorage&lt;/code&gt; to save extra bytes (defaults to &lt;code&gt;true&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Advanced API wrapper over &lt;code&gt;localStorage&lt;/code&gt; API, providing other basic utilities.&lt;/li&gt;
&lt;li&gt;Save data in multiple keys inside &lt;code&gt;localStorage&lt;/code&gt; and &lt;code&gt;secure-ls&lt;/code&gt; will always remember it's creation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm install secure-ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Libraries used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encryption / Decryption&lt;/strong&gt; using &lt;a href="https://code.google.com/archive/p/crypto-js" rel="noopener noreferrer"&gt;The Cipher Algorithms&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It requires secret-key for encrypting and decrypting data securely. If custom secret-key is provided as mentioned below in APIs, then the library will pick that otherwise it will generate yet another very &lt;code&gt;secure&lt;/code&gt; unique password key using &lt;a href="https://code.google.com/archive/p/crypto-js/#PBKDF2" rel="noopener noreferrer"&gt;PBKDF2&lt;/a&gt;, which will be further used for future API requests.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PBKDF2&lt;/code&gt; is a password-based key derivation function. In many applications of cryptography, user security is ultimately dependent on a password, and because a password usually can't be used directly as a cryptographic key, some processing is required.&lt;/p&gt;

&lt;p&gt;A salt provides a large set of keys for any given password, and an iteration count increases the cost of producing keys from a password, thereby also increasing the difficulty of attack.&lt;/p&gt;

&lt;p&gt;Eg: &lt;code&gt;55e8f5585789191d350329b9ebcf2b11&lt;/code&gt; and &lt;code&gt;db51d35aad96610683d5a40a70b20c39&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For the generation of such strings, &lt;code&gt;secretPhrase&lt;/code&gt; is being used and can be found in code easily but that won't make it unsecure, &lt;code&gt;PBKDF2&lt;/code&gt;'s layer on top of that will handle security.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compresion / Decompression&lt;/strong&gt; using &lt;a href="https://github.com/pieroxy/lz-string" rel="noopener noreferrer"&gt;lz-string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Example 1: With &lt;code&gt;default&lt;/code&gt; settings i.e. &lt;code&gt;Base64&lt;/code&gt; Encoding and Data Compression
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; var ls = new SecureLS();
&amp;gt; ls.set('key1', {data: 'test'}); // set key1
&amp;gt; ls.get('key1'); // print data
  {data: 'test'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Example 2: With &lt;code&gt;AES&lt;/code&gt; Encryption and Data Compression
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; var ls = new SecureLS({encodingType: 'aes'});
&amp;gt; ls.set('key1', {data: 'test'}); // set key1
&amp;gt; ls.get('key1'); // print data
  {data: 'test'}

&amp;gt; ls.set('key2', [1, 2, 3]); // set another key
&amp;gt; ls.getAllKeys(); // get all keys
  ["key1", "key2"]
&amp;gt; ls.removeAll(); // remove all keys

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Example 3: With &lt;code&gt;RC4&lt;/code&gt; Encryption but no Data Compression
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; var ls = new SecureLS({encodingType: 'rc4', isCompression: false});
&amp;gt; ls.set('key1', {data: 'test'}); // set key1
&amp;gt; ls.get('key1'); // print data
  {data: 'test'}

&amp;gt; ls.set('key2', [1, 2, 3]); // set another key
&amp;gt; ls.getAllKeys(); // get all keys
  ["key1", "key2"]
&amp;gt; ls.removeAll(); // remove all keys

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Example 3: With &lt;code&gt;DES&lt;/code&gt; Encryption, no Data Compression and custom secret key
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; var ls = new SecureLS({encodingType: 'des', isCompression: false, encryptionSecret: 'my-secret-key'});
&amp;gt; ls.set('key1', {data: 'test'}); // set key1
&amp;gt; ls.get('key1'); // print data
  {data: 'test'}

&amp;gt; ls.set('key2', [1, 2, 3]); // set another key
&amp;gt; ls.getAllKeys(); // get all keys
  ["key1", "key2"]
&amp;gt; ls.removeAll(); // remove all keys

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  API Documentation
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Create an instance / reference before using.
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Contructor&lt;/code&gt; accepts a configurable &lt;code&gt;Object&lt;/code&gt; with all three keys being optional.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Config Keys&lt;/th&gt;
&lt;th&gt;default&lt;/th&gt;
&lt;th&gt;accepts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;encodingType&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Base64&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;base64&lt;/code&gt;/&lt;code&gt;aes&lt;/code&gt;/&lt;code&gt;des&lt;/code&gt;/&lt;code&gt;rabbit&lt;/code&gt;/&lt;code&gt;rc4&lt;/code&gt;/&lt;code&gt;''&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isCompression&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;true&lt;/code&gt;/&lt;code&gt;false&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;encryptionSecret&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PBKDF2 value&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;encryptionNamespace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;encryptionSecret&lt;/code&gt; will only be used for the Encryption and Decryption of data&lt;br&gt;
with &lt;code&gt;AES&lt;/code&gt;, &lt;code&gt;DES&lt;/code&gt;, &lt;code&gt;RC4&lt;/code&gt;, &lt;code&gt;RABBIT&lt;/code&gt;, and the library will discard it if no encoding / Base64&lt;br&gt;
encoding method is choosen.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;encryptionNamespace&lt;/code&gt; is used to make multiple instances with different &lt;code&gt;encryptionSecret&lt;/code&gt;&lt;br&gt;
and/or different &lt;code&gt;encryptionSecret&lt;/code&gt; possible.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls1 = new SecureLS({encodingType: 'des', encryptionSecret: 'my-secret-key-1'});
var ls2 = new SecureLS({encodingType: 'aes', encryptionSecret: 'my-secret-key-2'});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No config or empty Object i.e. Default &lt;strong&gt;&lt;code&gt;Base64 Encoding&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;Data compression&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS();
// or
var ls = new SecureLS({});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;No encoding No data compression i.e. &lt;strong&gt;&lt;code&gt;Normal&lt;/code&gt;&lt;/strong&gt; way of storing data
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS({encodingType: '', isCompression: false});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Base64&lt;/code&gt;&lt;/strong&gt; encoding but &lt;strong&gt;&lt;code&gt;no&lt;/code&gt;&lt;/strong&gt; data compression
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS({isCompression: false});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;AES&lt;/code&gt;&lt;/strong&gt; encryption and &lt;strong&gt;&lt;code&gt;data compression&lt;/code&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS({encodingType: 'aes'});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;RC4&lt;/code&gt;&lt;/strong&gt; encryption and &lt;strong&gt;&lt;code&gt;no&lt;/code&gt;&lt;/strong&gt; data compression
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS({encodingType: 'rc4', isCompression: false});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;RABBIT&lt;/code&gt;&lt;/strong&gt; encryption, &lt;strong&gt;&lt;code&gt;no&lt;/code&gt;&lt;/strong&gt; data compression and &lt;code&gt;custom&lt;/code&gt; encryptionSecret
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var ls = new SecureLS({encodingType: 'rc4', isCompression: false, encryptionSecret: 's3cr3tPa$$w0rd@123'});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Methods
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;set&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saves &lt;code&gt;data&lt;/code&gt; in specifed &lt;code&gt;key&lt;/code&gt; in localStorage. If the key is not provided, the library will warn. Following types of JavaScript objects are supported:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Array&lt;/li&gt;
&lt;li&gt;ArrayBuffer&lt;/li&gt;
&lt;li&gt;Blob&lt;/li&gt;
&lt;li&gt;Float32Array&lt;/li&gt;
&lt;li&gt;Float64Array&lt;/li&gt;
&lt;li&gt;Int8Array&lt;/li&gt;
&lt;li&gt;Int16Array&lt;/li&gt;
&lt;li&gt;Int32Array&lt;/li&gt;
&lt;li&gt;Number&lt;/li&gt;
&lt;li&gt;Object&lt;/li&gt;
&lt;li&gt;Uint8Array&lt;/li&gt;
&lt;li&gt;Uint8ClampedArray&lt;/li&gt;
&lt;li&gt;Uint16Array&lt;/li&gt;
&lt;li&gt;Uint32Array&lt;/li&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;|   Parameter   |        Description          |&lt;br&gt;
  | ------------- | --------------------------- |&lt;br&gt;
  |     key       |     key to store data in    |&lt;br&gt;
  |     data      |      data to be stored      |&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.set('key-name', {test: 'secure-ls'})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;get&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gets &lt;code&gt;data&lt;/code&gt; back from specified &lt;code&gt;key&lt;/code&gt; from the localStorage library. If the key is not provided, the library will warn.&lt;/p&gt;

&lt;p&gt;|   Parameter   |         Description                 |&lt;br&gt;
  | ------------- | ----------------------------------- |&lt;br&gt;
  |     key       |     key in which data is stored     |&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.get('key-name')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;remove&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removes the value of a key from the localStorage. If the &lt;code&gt;meta key&lt;/code&gt;, which stores the list of keys, is tried to be removed even if there are other keys which were created by &lt;code&gt;secure-ls&lt;/code&gt; library, the library will warn for the action.&lt;/p&gt;

&lt;p&gt;|   Parameter   |         Description                       |&lt;br&gt;
  | ------------- | ----------------------------------------- |&lt;br&gt;
  |     key       |     remove key in which data is stored    |&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.remove('key-name')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;removeAll&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removes all the keys that were created by the &lt;code&gt;secure-ls&lt;/code&gt; library, even the &lt;code&gt;meta key&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.removeAll()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;clear&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Removes all the keys ever created for that particular domain. Remember localStorage works differently for &lt;code&gt;http&lt;/code&gt; and &lt;code&gt;https&lt;/code&gt; protocol;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.clear()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;getAllKeys&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gets the list of keys that were created using the &lt;code&gt;secure-ls&lt;/code&gt; library. Helpful when data needs to be retrieved for all the keys or when keys name are not known(dynamically created keys).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;getAllKeys()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ls.getAllKeys()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Screenshot
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/screenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/screenshot.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scripts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm run build&lt;/code&gt; - produces production version of the library under the &lt;code&gt;dist&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run dev&lt;/code&gt; - produces development version of the library and runs a watcher&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run test&lt;/code&gt; - well ... it runs the tests :)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Fork the repo on GitHub.&lt;/li&gt;
&lt;li&gt;Clone the repo on machine.&lt;/li&gt;
&lt;li&gt;Execute &lt;code&gt;npm install&lt;/code&gt; and &lt;code&gt;npm run dev&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a new branch &lt;code&gt;&amp;lt;fix-typo&amp;gt;&lt;/code&gt; and do your work.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm run build&lt;/code&gt; to build dist files and &lt;code&gt;npm run test&lt;/code&gt; to ensure all test cases are passing.&lt;/li&gt;
&lt;li&gt;Commit your changes to the branch.&lt;/li&gt;
&lt;li&gt;Submit a Pull request.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Development Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Webpack based &lt;code&gt;src&lt;/code&gt; compilation &amp;amp; bundling and &lt;code&gt;dist&lt;/code&gt; generation.&lt;/li&gt;
&lt;li&gt;ES6 as a source of writing code.&lt;/li&gt;
&lt;li&gt;Exports in a &lt;a href="https://github.com/umdjs/umd" rel="noopener noreferrer"&gt;umd&lt;/a&gt; format so the library works everywhere.&lt;/li&gt;
&lt;li&gt;ES6 test setup with &lt;a href="http://mochajs.org/" rel="noopener noreferrer"&gt;Mocha&lt;/a&gt; and &lt;a href="http://chaijs.com/" rel="noopener noreferrer"&gt;Chai&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Linting with &lt;a href="http://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ES6 source files
       |
       |
    webpack
       |
       +--- babel, eslint
       |
  ready to use
     library
  in umd format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;Many thanks to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/brix" rel="noopener noreferrer"&gt;@brix&lt;/a&gt; for the awesome &lt;strong&gt;&lt;a href="https://github.com/brix/crypto-js" rel="noopener noreferrer"&gt;crypto-js&lt;/a&gt;&lt;/strong&gt; library for encrypting and decrypting data securely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/pieroxy" rel="noopener noreferrer"&gt;@pieroxy&lt;/a&gt; for the &lt;strong&gt;&lt;a href="https://github.com/pieroxy/lz-string" rel="noopener noreferrer"&gt;lz-string&lt;/a&gt;&lt;/strong&gt; js library for data compression / decompression.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/chinchang" rel="noopener noreferrer"&gt;@chinchang&lt;/a&gt; for the below open-source libraries which are used only for the &lt;a href="http://varunmalhotra.xyz/secure-ls/" rel="noopener noreferrer"&gt;Landing Page Development&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/chinchang/screenlog.js/" rel="noopener noreferrer"&gt;screenlog.js&lt;/a&gt;&lt;/strong&gt; - Brings console.log on the page's screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/chinchang/superplaceholder.js" rel="noopener noreferrer"&gt;superplaceholder.js&lt;/a&gt;&lt;/strong&gt; - For super charging input placeholders.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Copyright and license
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;a href="https://opensource.org/licenses/MIT" rel="noopener noreferrer"&gt;MIT license&lt;/a&gt; (MIT)&lt;/p&gt;

&lt;p&gt;Copyright (c) 2015-2016 Varun Malhotra&lt;/p&gt;

&lt;p&gt;Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:&lt;/p&gt;

&lt;p&gt;The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.&lt;/p&gt;

&lt;p&gt;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>PHPloy - incremental Git FTP and SFTP deployment tool</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Wed, 18 Aug 2021 21:01:43 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/phploy-incremental-git-ftp-and-sftp-deployment-tool-2cd1</link>
      <guid>https://forem.com/alexandrefreire/phploy-incremental-git-ftp-and-sftp-deployment-tool-2cd1</guid>
      <description>&lt;h1&gt;
  
  
  PHPloy
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Version 4.9.2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PHPloy is an incremental Git FTP and SFTP deployment tool. By keeping track of the state of the remote server(s) it deploys only the files that were committed since the last deployment. PHPloy supports submodules, sub-submodules, deploying to multiple servers and rollbacks. PHPloy requires &lt;strong&gt;PHP 7.0+&lt;/strong&gt; and &lt;strong&gt;Git 1.8+&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;PHPloy stores a file called &lt;code&gt;.revision&lt;/code&gt; on your server. This file contains the hash of the commit that you have deployed to that server. When you run phploy, it downloads that file and compares the commit reference in it with the commit you are trying to deploy to find out which files to upload. PHPloy also stores a &lt;code&gt;.revision&lt;/code&gt; file for each submodule in your repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Via Composer
&lt;/h3&gt;

&lt;p&gt;If you have composer installed in your machine, you can pull PHPloy globally like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer global require &lt;span class="s2"&gt;"banago/phploy"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to place the &lt;code&gt;$HOME/.composer/vendor/bin&lt;/code&gt; directory (or the &lt;a href="http://stackoverflow.com/a/40470979/512277" rel="noopener noreferrer"&gt;equivalent directory&lt;/a&gt; for your OS) &lt;br&gt;
in your &lt;code&gt;$PATH&lt;/code&gt; so the PHPloy executable can be located by your system.&lt;/p&gt;
&lt;h3&gt;
  
  
  Via Phar Archive
&lt;/h3&gt;

&lt;p&gt;You can install PHPloy Phar globally, in your &lt;code&gt;/usr/local/bin&lt;/code&gt; directory or, locally, in your project directory. &lt;strong&gt;Rename&lt;/strong&gt; &lt;code&gt;phploy.phar&lt;/code&gt; to &lt;code&gt;phploy&lt;/code&gt; for ease of use.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Globally:&lt;/strong&gt; Move &lt;code&gt;phploy&lt;/code&gt; into &lt;code&gt;/usr/local/bin&lt;/code&gt;. Make it executable by running &lt;code&gt;sudo chmod +x phploy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locally&lt;/strong&gt; Move &lt;code&gt;phploy&lt;/code&gt; into your project directory. &lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;When using PHPloy locally, proceed the command with &lt;code&gt;php&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;phploy --init&lt;/code&gt; in the terminal to create the &lt;code&gt;phploy.ini&lt;/code&gt; file or create one manually.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;phploy&lt;/code&gt; in terminal to deploy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Windows Users: &lt;a href="https://github.com/banago/PHPloy/issues/214" rel="noopener noreferrer"&gt;Installing PHPloy globally on Windows&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  phploy.ini
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;phploy.ini&lt;/code&gt; file holds your project configuration. It should be located in the root directory of the project. &lt;code&gt;phploy.ini&lt;/code&gt; is never uploaded to server.  Check the sample below for all available options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;; This is a sample deploy.ini file. You can specify as many
; servers as you need and use normal or quickmode configuration.
;
; NOTE: If a value in the .ini file contains any non-alphanumeric 
; characters it needs to be enclosed in double-quotes (").
&lt;/span&gt;
&lt;span class="nn"&gt;[staging]&lt;/span&gt;
    &lt;span class="py"&gt;scheme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;sftp&lt;/span&gt;
    &lt;span class="py"&gt;user&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;example&lt;/span&gt;
    &lt;span class="c"&gt;; When connecting via SFTP, you can opt for password-based authentication:
&lt;/span&gt;    &lt;span class="py"&gt;pass&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
    &lt;span class="c"&gt;; Or private key-based authentication:
&lt;/span&gt;    &lt;span class="py"&gt;privkey&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'path/to/or/contents/of/privatekey'&lt;/span&gt;
    &lt;span class="py"&gt;host&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;staging-example.com&lt;/span&gt;
    &lt;span class="py"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/path/to/installation&lt;/span&gt;
    &lt;span class="py"&gt;port&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;22&lt;/span&gt;
    &lt;span class="c"&gt;; You can specify a branch to deploy from
&lt;/span&gt;    &lt;span class="py"&gt;branch&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;develop&lt;/span&gt;
    &lt;span class="c"&gt;; File permission set on the uploaded files/directories
&lt;/span&gt;    &lt;span class="py"&gt;permissions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0700&lt;/span&gt;
    &lt;span class="c"&gt;; File permissions set on newly created directories
&lt;/span&gt;    &lt;span class="py"&gt;directoryPerm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0775&lt;/span&gt;
    &lt;span class="c"&gt;; Deploy only this directory as base directory
&lt;/span&gt;    &lt;span class="py"&gt;base&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'directory-name/'&lt;/span&gt;
    &lt;span class="c"&gt;; Files that should be ignored and not uploaded to your server, but still tracked in your repository
&lt;/span&gt;    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'src/*.scss'&lt;/span&gt;
    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'*.ini'&lt;/span&gt;
    &lt;span class="c"&gt;; Files that are ignored by Git, but you want to send the the server
&lt;/span&gt;    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'js/scripts.min.js'&lt;/span&gt;
    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'directory-name/'&lt;/span&gt;
    &lt;span class="c"&gt;; conditional include - if source file has changed, inclue file
&lt;/span&gt;    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'css/style.min.css:src/style.css'&lt;/span&gt; 
    &lt;span class="c"&gt;; Directories that should be copied after deploy, from-&amp;gt;to
&lt;/span&gt;    &lt;span class="err"&gt;copy&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'public-&amp;gt;www'&lt;/span&gt;
    &lt;span class="c"&gt;; Directories that should be purged before deploy
&lt;/span&gt;    &lt;span class="err"&gt;purge-before&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"dist/"&lt;/span&gt;
    &lt;span class="c"&gt;; Directories that should be purged after deploy
&lt;/span&gt;    &lt;span class="err"&gt;purge&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"cache/"&lt;/span&gt;
    &lt;span class="c"&gt;; Pre- and Post-deploy hooks
&lt;/span&gt;    &lt;span class="c"&gt;; Use "DQOUTE" inside your double-quoted strings to insert a literal double quote
&lt;/span&gt;    &lt;span class="c"&gt;; Use 'QUOTE' inside your qouted strings to insert a literal quote
&lt;/span&gt;    &lt;span class="c"&gt;; For example pre-deploy[] = 'echo "that'QUOTE's nice"' to get a literal "that's".
&lt;/span&gt;    &lt;span class="c"&gt;; That workaround is based on http://php.net/manual/de/function.parse-ini-file.php#70847
&lt;/span&gt;    &lt;span class="err"&gt;pre-deploy&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"wget&lt;/span&gt; &lt;span class="err"&gt;http://staging-example.com/pre-deploy/test.php&lt;/span&gt; &lt;span class="err"&gt;--spider&lt;/span&gt; &lt;span class="err"&gt;--quiet"&lt;/span&gt;
    &lt;span class="err"&gt;post-deploy&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"wget&lt;/span&gt; &lt;span class="err"&gt;http://staging-example.com/post-deploy/test.php&lt;/span&gt; &lt;span class="err"&gt;--spider&lt;/span&gt; &lt;span class="err"&gt;--quiet"&lt;/span&gt;
    &lt;span class="c"&gt;; Works only via SSH2 connection
&lt;/span&gt;    &lt;span class="err"&gt;pre-deploy-remote&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"touch&lt;/span&gt; &lt;span class="err"&gt;.maintenance"&lt;/span&gt;
    &lt;span class="err"&gt;post-deploy-remote&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"mv&lt;/span&gt; &lt;span class="err"&gt;cache&lt;/span&gt; &lt;span class="err"&gt;cache2"&lt;/span&gt;
    &lt;span class="err"&gt;post-deploy-remote&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"rm&lt;/span&gt; &lt;span class="err"&gt;.maintenance"&lt;/span&gt;
    &lt;span class="c"&gt;; You can specify a timeout for the underlying connection which might be useful for long running remote 
&lt;/span&gt;    &lt;span class="c"&gt;; operations (cache clear, dependency update, etc.)
&lt;/span&gt;    &lt;span class="py"&gt;timeout&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;60&lt;/span&gt;

&lt;span class="nn"&gt;[production]&lt;/span&gt;
    &lt;span class="py"&gt;quickmode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ftp://example:password@production-example.com:21/path/to/installation&lt;/span&gt;
    &lt;span class="py"&gt;passive&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;true&lt;/span&gt;
    &lt;span class="py"&gt;ssl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;
    &lt;span class="c"&gt;; You can specify a branch to deploy from
&lt;/span&gt;    &lt;span class="py"&gt;branch&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
    &lt;span class="c"&gt;; File permission set on the uploaded files/directories
&lt;/span&gt;    &lt;span class="py"&gt;permissions&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0774&lt;/span&gt;
    &lt;span class="c"&gt;; File permissions set on newly created directories
&lt;/span&gt;    &lt;span class="py"&gt;directoryPerm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0755&lt;/span&gt;
    &lt;span class="c"&gt;; Files that should be ignored and not uploaded to your server, but still tracked in your repository
&lt;/span&gt;    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'libs/*'&lt;/span&gt;
    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'config/*'&lt;/span&gt;
    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'src/*.scss'&lt;/span&gt;
    &lt;span class="c"&gt;; Files that are ignored by Git, but you want to send the the server
&lt;/span&gt;    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'js/scripts.min.js'&lt;/span&gt;
    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'js/style.min.css'&lt;/span&gt;
    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'directory-name/'&lt;/span&gt;
    &lt;span class="err"&gt;purge-before&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"dist/"&lt;/span&gt; 
    &lt;span class="err"&gt;purge&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"cache/"&lt;/span&gt; 
    &lt;span class="err"&gt;pre-deploy&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"wget&lt;/span&gt; &lt;span class="err"&gt;http://staging-example.com/pre-deploy/test.php&lt;/span&gt; &lt;span class="err"&gt;--spider&lt;/span&gt; &lt;span class="err"&gt;--quiet"&lt;/span&gt;
    &lt;span class="err"&gt;post-deploy&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"wget&lt;/span&gt; &lt;span class="err"&gt;http://staging-example.com/post-deploy/test.php&lt;/span&gt; &lt;span class="err"&gt;--spider&lt;/span&gt; &lt;span class="err"&gt;--quiet"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your password is missing in the &lt;code&gt;phploy.ini&lt;/code&gt; file or the &lt;code&gt;PHPLOY_PASS&lt;/code&gt; environment variable, PHPloy will interactively ask you for your password.&lt;br&gt;
There is also an option to store the user and password in a file called &lt;code&gt;.phploy&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[staging]
    user="theUser"
    pass="thePassword"

[production]
    user="theUser"
    pass="thePassword"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This feature is especially useful if you would like to share your phploy.ini via Git but hide your password from the public.&lt;/p&gt;

&lt;p&gt;You can also use environment variables to deploy without storing your credentials in a file.&lt;br&gt;
These variables will be used if they do not exist in the &lt;code&gt;phploy.ini&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PHPLOY_HOST
PHPLOY_PORT
PHPLOY_PASS
PHPLOY_PATH
PHPLOY_USER
PHPLOY_PRIVKEY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These variables can be used like this;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ PHPLOY_PORT="21" PHPLOY_HOST="myftphost.com" PHPLOY_USER="ftp" PHPLOY_PASS="ftp-password" PHPLOY_PATH="/home/user/public_html/example.com" phploy -s servername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or export them like this, the script will automatically use them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ export PHPLOY_PORT="21"
$ export PHPLOY_HOST="myftphost.com"
$ export PHPLOY_USER="ftp"
$ export PHPLOY_PASS="ftp-password"
$ export PHPLOY_PATH="/home/user/public_html/example.com"
$ export PHPLOY_PRIVKEY="path/to/or/contents/of/privatekey"
$ phploy -s servername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Multiple servers
&lt;/h2&gt;

&lt;p&gt;PHPloy allows you to configure multiple servers in the deploy file and deploy to any of them with ease. &lt;/p&gt;

&lt;p&gt;By default PHPloy will deploy to &lt;em&gt;ALL&lt;/em&gt; specified servers.  Alternatively, if an entry named 'default' exists in your server configuration, PHPloy will default to that server configuration. To specify one single server, run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy -s servername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --server servername
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;servername&lt;/code&gt; stands for the name you have given to the server in the &lt;code&gt;phploy.ini&lt;/code&gt; configuration file.&lt;/p&gt;

&lt;p&gt;If you have a 'default' server configured, you can specify to deploy to all configured servers by running:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Shared configuration (custom defaults)
&lt;/h2&gt;

&lt;p&gt;If you specify a server configuration named &lt;code&gt;*&lt;/code&gt;, all options configured in this section will be shared with other &lt;br&gt;
servers. This basically allows you to inject custom default values.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;; The special '*' configuration is shared between all other configurations (think include)
&lt;/span&gt;&lt;span class="nn"&gt;[*]&lt;/span&gt;
    &lt;span class="err"&gt;exclude&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;'src/*'&lt;/span&gt;
    &lt;span class="err"&gt;include&lt;/span&gt;&lt;span class="nn"&gt;[]&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="err"&gt;"dist/app.css"&lt;/span&gt;

&lt;span class="c"&gt;; As a result both shard1 and shard2 will have the same exclude[] and include[] "default" values
&lt;/span&gt;&lt;span class="nn"&gt;[shard1]&lt;/span&gt;
    &lt;span class="py"&gt;quickmode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ftp://example:password@shard1-example.com:21/path/to/installation&lt;/span&gt;

&lt;span class="nn"&gt;[shard2]&lt;/span&gt;
    &lt;span class="py"&gt;quickmode&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;ftp://example:password@shard2-example.com:21/path/to/installation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Rollbacks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Warning: the --rollback option does not currently update your submodules correctly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PHPloy allows you to roll back to an earlier version when you need to. Rolling back is very easy. &lt;/p&gt;

&lt;p&gt;To roll back to the previous commit, you just run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --rollback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To roll back to whatever commit you want, you run:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --rollback commit-hash-goes-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When you run a rollback, the files in your working copy will revert &lt;strong&gt;temporarily&lt;/strong&gt; to the version of the rollback you are deploying. When the deployment has finished, everything will go back as it was.&lt;/p&gt;

&lt;p&gt;Note that there is not a short version of &lt;code&gt;--rollback&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Listing changed files
&lt;/h2&gt;

&lt;p&gt;PHPloy allows you to see what files are going to be uploaded/deleted before you actually push them. Just run: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Updating or "syncing" the remote revision
&lt;/h2&gt;

&lt;p&gt;If you want to update the &lt;code&gt;.revision&lt;/code&gt; file on the server to match your current local revision, run:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you want to set it to a previous commit revision, just specify the revision like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --sync your-revision-hash-here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Creating deployment directory on first deploy
&lt;/h2&gt;

&lt;p&gt;If the deployment directory does not exits, you can instruct PHPloy to create it for you:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --force
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Manual fresh upload
&lt;/h2&gt;

&lt;p&gt;If you want to do a fresh upload, even if you have deployed earlier, use the &lt;code&gt;--fresh&lt;/code&gt; argument like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --fresh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Submodules
&lt;/h2&gt;

&lt;p&gt;Submodules are supported, but are turned off by default since you don't expect them to change very often and you only update them once in a while. To run a deployment with submodule scanning, add the &lt;code&gt;--submodules&lt;/code&gt; parameter to the command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phploy --submodules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Purging
&lt;/h2&gt;

&lt;p&gt;In many cases, we need to purge the contents of a directory after a deployment. This can be achieved by specifying the directories in &lt;code&gt;phploy.ini&lt;/code&gt; like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;; relative to the deployment path
purge[] = "cache/"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To purge a directory before deployment, specify the directories in &lt;code&gt;phploy.ini&lt;/code&gt; like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;; relative to the deployment path
purge-before[] = "dist/"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Hooks
&lt;/h2&gt;

&lt;p&gt;PHPloy allows you to execute commands before and after the deployment. For example you can use &lt;code&gt;wget&lt;/code&gt;  call a script on my server to execute a &lt;code&gt;composer update&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;; To execute before deployment
pre-deploy[] = "wget http://staging-example.com/pre-deploy/test.php --spider --quiet"
; To execute after deployment
post-deploy[] = "wget http://staging-example.com/post-deploy/test.php --spider --quiet"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Logging
&lt;/h2&gt;

&lt;p&gt;PHPloy supports simple logging of the activity. Logging is saved in a &lt;code&gt;phploy.log&lt;/code&gt; file in your project in the following format:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2016-03-28 08:12:37+02:00 --- INFO: [SHA: 59a387c26641f731df6f0d1098aaa86cd55f4382] Deployment to server: "default" from branch "master". 2 files uploaded; 0 files deleted.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;To turn logging on, add this to &lt;code&gt;phploy.ini&lt;/code&gt;:&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[production]&lt;br&gt;
    logger = on&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Contribute&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;Contributions are very welcome; PHPloy is great because of the contributors. Please check out the &lt;a href="https://github.com/banago/PHPloy/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/banago" rel="noopener noreferrer"&gt;Baki Goxhaj&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/banago/PHPloy/graphs/contributors?type=a" rel="noopener noreferrer"&gt;Contributors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Version history
&lt;/h2&gt;

&lt;p&gt;Please check &lt;a href="https://github.com/banago/PHPloy/releases" rel="noopener noreferrer"&gt;release history&lt;/a&gt; for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;PHPloy is licensed under the MIT License (MIT).&lt;/p&gt;

</description>
      <category>php</category>
    </item>
    <item>
      <title>Promote Your Next Startup</title>
      <dc:creator>Alexandre Freire</dc:creator>
      <pubDate>Sat, 14 Aug 2021 15:54:59 +0000</pubDate>
      <link>https://forem.com/alexandrefreire/promote-your-next-startup-206h</link>
      <guid>https://forem.com/alexandrefreire/promote-your-next-startup-206h</guid>
      <description>&lt;p&gt;By &lt;a href="https://github.com/trekhleb/promote-your-next-startup" rel="noopener noreferrer"&gt;https://github.com/trekhleb/promote-your-next-startup&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Promote Your Next Startup
&lt;/h1&gt;

&lt;p&gt;Free web-resources you may want to use to promote your next startup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The main advertisement channel is of course &lt;strong&gt;people who are in love with your product&lt;/strong&gt;.&lt;br&gt;
Their sharing activities is the best advertisement. Thus, the main idea is to &lt;br&gt;
create the product that is useful, usable and attractive to the end users. And only&lt;br&gt;
after that it does make sense to spread the word about something you've done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Post News
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.reddit.com" rel="noopener noreferrer"&gt;reddit.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The front-page of the internet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://news.ycombinator.com" rel="noopener noreferrer"&gt;news.ycombinator.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hacker news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://lobste.rs" rel="noopener noreferrer"&gt;lobste.rs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Lobsters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://facebook.com" rel="noopener noreferrer"&gt;facebook.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Post news to your niche groups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://twitter.com" rel="noopener noreferrer"&gt;twitter.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Of course&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://slashdot.org" rel="noopener noreferrer"&gt;slashdot.org&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;News for nerds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://raddle.me" rel="noopener noreferrer"&gt;raddle.me&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;News feed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.designernews.co" rel="noopener noreferrer"&gt;designernews.co&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Designer news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://datatau.net/" rel="noopener noreferrer"&gt;datatau.net&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DataTau - Data Science Newsboard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://devrant.com/" rel="noopener noreferrer"&gt;devrant.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A fun community of developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://sidebar.io/" rel="noopener noreferrer"&gt;sidebar.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The five best design links, every weekday&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Create a Product Page
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.producthunt.com" rel="noopener noreferrer"&gt;producthunt.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The best new products in tech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://angel.co" rel="noopener noreferrer"&gt;angel.co&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Where the world meets startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://alternativeto.net" rel="noopener noreferrer"&gt;alternativeto.net&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crowd-sourced software recommendations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.indiehackers.com" rel="noopener noreferrer"&gt;indiehackers.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Indie Hackers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Post an Article
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://medium.com" rel="noopener noreferrer"&gt;medium.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Read, write and share stories that matter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://linkedin.com" rel="noopener noreferrer"&gt;linkedin.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;People and companies that are posting and looking for job. Post to your niche groups as well.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to"&gt;dev.to&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The DEV community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dzone.com" rel="noopener noreferrer"&gt;dzone.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Programming news, tutorials and tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://scotch.io/" rel="noopener noreferrer"&gt;scotch.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Top shelf web-development training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://habr.com" rel="noopener noreferrer"&gt;habr.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Russian tech-blog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://hashnode.com" rel="noopener noreferrer"&gt;hashnode.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The Dev community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dou.ua/" rel="noopener noreferrer"&gt;dou.ua&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Ukrainian developers community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://muckrack.com" rel="noopener noreferrer"&gt;muckrack.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MuckRack for journalist and public relations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://techhype.io" rel="noopener noreferrer"&gt;techhype.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;News, articles and tools for developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://towardsdatascience.com/" rel="noopener noreferrer"&gt;towardsdatascience.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Towards Data Science&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://python.libhunt.com/" rel="noopener noreferrer"&gt;python.libhunt.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Awesome Python LibHunt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://vas3k.club/" rel="noopener noreferrer"&gt;vas3k.club&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Вастрик.Клуб&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.codementor.io/community/" rel="noopener noreferrer"&gt;codementor.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CodeMentor Community&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.kdnuggets.com/" rel="noopener noreferrer"&gt;kdnuggets.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;KDNuggets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://morioh.com/" rel="noopener noreferrer"&gt;morioh.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Social network for programmers and developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hackernoon.com/" rel="noopener noreferrer"&gt;hackernoon.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hacker Noon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.blogger.com/" rel="noopener noreferrer"&gt;blogger.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Blogging platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hackr.io/" rel="noopener noreferrer"&gt;hackr.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The list of programming classes and tutorials&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Niche Platforms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some niche blogs which you may use to find your target audience.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.geeksforgeeks.org" rel="noopener noreferrer"&gt;geeksforgeeks.org&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A computer science portal for geeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://codeforces.com" rel="noopener noreferrer"&gt;codeforces.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Programming contests platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.kaggle.com/" rel="noopener noreferrer"&gt;kaggle.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Your home for datascience&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Write for News Blog
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://medium.com/dailyjs" rel="noopener noreferrer"&gt;medium.com/dailyjs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Daily JS news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://itnext.io" rel="noopener noreferrer"&gt;itnext.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;IT blog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://alistapart.com/about/contribute" rel="noopener noreferrer"&gt;alistapart.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;For people who make web-sites&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thenextweb.com/about/#contact" rel="noopener noreferrer"&gt;thenextweb.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.developer-tech.com/write-for-us" rel="noopener noreferrer"&gt;developer-tech.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Developer tech news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.programmableweb.com/faq#Write_For_PW" rel="noopener noreferrer"&gt;programmableweb.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;APIs, mashups and the Web as a platform&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://hakin9.org/blog" rel="noopener noreferrer"&gt;hakin9.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Blog of IT security magazine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.datacamp.com/community" rel="noopener noreferrer"&gt;datacamp.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Data Science Online News&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.echojs.com" rel="noopener noreferrer"&gt;echojs.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;JavaScript News&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://css-tricks.com/" rel="noopener noreferrer"&gt;css-tricks.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;CSS Tricks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Answer Questions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://stackoverflow.com" rel="noopener noreferrer"&gt;stackoverflow.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Where developers learn, share and build careers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.quora.com" rel="noopener noreferrer"&gt;quora.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A place to share knowledge and better understand the world&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Write on Forums
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.techrepublic.com/forums/" rel="noopener noreferrer"&gt;techrepublic.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Community of IT experts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.sitepoint.com/community/" rel="noopener noreferrer"&gt;sitepoint.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sitepoint forums&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Write to Dev-Chats
&lt;/h2&gt;

&lt;p&gt;Don't spam!&lt;/p&gt;

&lt;p&gt;If you think your project is useful for some specific group of people&lt;br&gt;
then find targeted channel, read about channel rules and only then post information&lt;br&gt;
to channel.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitter.im" rel="noopener noreferrer"&gt;gitter.im&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Where developers come to talk&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Record a video
&lt;/h2&gt;

&lt;p&gt;Record a demo video of your product, or some learning content and upload it to your YouTube channel. Put the link to the product or to the content to the video description.  &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/" rel="noopener noreferrer"&gt;youtube.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Video platform&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Become Awesome
&lt;/h2&gt;

&lt;p&gt;If you find your project to be related to one of the awesome partitions then just&lt;br&gt;
go ahead and create pull request to add your product to the list.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/bayandin/awesome-awesomeness" rel="noopener noreferrer"&gt;github.com/bayandin/awesome-awesomeness&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A curated list of awesome awesomeness&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Use Advanced Google Search Techniques
&lt;/h2&gt;

&lt;p&gt;Google supports &lt;a href="https://ahrefs.com/blog/google-advanced-search-operators/" rel="noopener noreferrer"&gt;powerful search techniques&lt;/a&gt; that may help you to promote your resource.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find sites linking to competitors
&lt;/h3&gt;

&lt;p&gt;Find sites linking to your competitors and try to add your link to that web-sites as well.&lt;/p&gt;

&lt;p&gt;Google’s &lt;code&gt;link:&lt;/code&gt; operator was officially deprecated in 2017.  But it does still return some results.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It might be a good idea to exclude competitor web-site itself from the search results by using the &lt;code&gt;site:&lt;/code&gt; operator to avoid displaying of internal links&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Do the following Google search but with you competitor's URL:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;link:https://competitor-domain.com/blog -site:competitor-domain.com&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Find guest post opportunities
&lt;/h3&gt;

&lt;p&gt;This allows you to find web-sites where you might submit the article about your new project/product/startup.&lt;/p&gt;

&lt;p&gt;Pick your niche keyword (i.e. &lt;code&gt;programming&lt;/code&gt;) and Google search for guest post related phrases like so:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;programming intitle:"write for us" inurl:"write-for-us"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also use other phrases like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;contribute to&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;become a contributor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;guest post guidelines&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inurl:guest-post&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also search for many of these at once:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;programming ("write for us" | inurl:"guest-post-guidelines" | inurl:"guest-post")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or even:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;(programming | machine learning) AND ("write for us" | inurl:"guest-post-guidelines")&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Find resource page opportunities
&lt;/h3&gt;

&lt;p&gt;Resource pages contains the links to best resources on specific topic.&lt;/p&gt;

&lt;p&gt;It might be a good idea to pitch your resource for inclusion.&lt;/p&gt;

&lt;p&gt;To find resource pages you might do the following Google search:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;programming (intitle:"resources" | inurl:resources)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or you might narrow it down to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;intitle:programming AND intitle:resources AND inurl:resources&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Find more related resource
&lt;/h3&gt;

&lt;p&gt;Once you found a good web-site to place a link to you might want to find similar relevant resources.&lt;/p&gt;

&lt;p&gt;To do so just do the following Google search but with the resource you're interested in:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;related:https://news.ycombinator.com&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Register in Startup Directories
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;th&gt;About&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://betalist.com" rel="noopener noreferrer"&gt;betalist.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Discover and get early access to tomorrow's startup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.startuptabs.com" rel="noopener noreferrer"&gt;startuptabs.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Startup discovery engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.crunchbase.com" rel="noopener noreferrer"&gt;crunchbase.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Discover innovative companies and the people behind them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.geekwire.com/submit-startup" rel="noopener noreferrer"&gt;geekwire.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Breaking news in technology in business&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.f6s.com" rel="noopener noreferrer"&gt;f6s.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Startup founder deals and accelerators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.killerstartups.com" rel="noopener noreferrer"&gt;killerstartups.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Where internet entrepreneurs are the stars&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://startupbuffer.com" rel="noopener noreferrer"&gt;startupbuffer.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Promote your startup and discover new startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.allstartups.info" rel="noopener noreferrer"&gt;allstartups.info&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;All startups info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://betapage.co" rel="noopener noreferrer"&gt;betapage.co&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Community of tech lovers and early adopters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://index.co" rel="noopener noreferrer"&gt;index.co&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Connecting startups, corporate brands, and investors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gust.com" rel="noopener noreferrer"&gt;gust.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Startup funding and investing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.startupproject.org" rel="noopener noreferrer"&gt;startupproject.org&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The startup project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.springwise.com" rel="noopener noreferrer"&gt;springwise.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Discovering innovation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://launchlister.com" rel="noopener noreferrer"&gt;launchlister.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;See the day's hottest product launches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://vator.tv" rel="noopener noreferrer"&gt;vator.tv&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Voice of the entrepreneur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.nextbigwhat.com" rel="noopener noreferrer"&gt;nextbigwhat.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Discover great products&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.iamwire.com/startups/user/register" rel="noopener noreferrer"&gt;iamwire.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A digital incubator &amp;amp; network for technology ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.snapmunk.com/submit-your-startup" rel="noopener noreferrer"&gt;snapmunk.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Technology trends and startup culture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.nibletz.com/submit-startup" rel="noopener noreferrer"&gt;nibletz.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The voice of the startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://startupstash.com" rel="noopener noreferrer"&gt;startupstash.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Curated resources and tools for startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://alltopstartups.com" rel="noopener noreferrer"&gt;alltopstartups.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;All top startups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://startupdope.com/submit-news" rel="noopener noreferrer"&gt;startupdope.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Startup Dope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.techpluto.com/submit-a-startup" rel="noopener noreferrer"&gt;techpluto.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Platform to showcase innovative startups and tech news&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thestartuppitch.com/post-a-beta-pitch" rel="noopener noreferrer"&gt;thestartuppitch.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Come pitch your startup to the world&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.sideprojectors.com" rel="noopener noreferrer"&gt;sideprojectors.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Marketplace to buy and sell side projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.launchingnext.com" rel="noopener noreferrer"&gt;launchingnext.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;New startups and ideas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.startupranking.com" rel="noopener noreferrer"&gt;startupranking.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;New startups and ideas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Other suggestions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://www.findareddit.com/" rel="noopener noreferrer"&gt;findareddit.com&lt;/a&gt; to find relevant subreddits for your niche&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depending on the subject of your post you may use the targeted subreddits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/coding/" rel="noopener noreferrer"&gt;r/coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/computerscience/" rel="noopener noreferrer"&gt;r/computerscience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/compsci/" rel="noopener noreferrer"&gt;r/compsci&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/SideProject/" rel="noopener noreferrer"&gt;r/SideProject&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//httr/javascriptps://www.reddit.com/r/algorithms/"&gt;r/algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/javascript/" rel="noopener noreferrer"&gt;r/javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/learnjavascript/" rel="noopener noreferrer"&gt;r/learnjavascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/reactjs/" rel="noopener noreferrer"&gt;r/reactjs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/programming/" rel="noopener noreferrer"&gt;r/programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/learnprogramming/" rel="noopener noreferrer"&gt;r/learnprogramming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/webdev/" rel="noopener noreferrer"&gt;r/webdev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/datascience/" rel="noopener noreferrer"&gt;r/datascience&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/Python/" rel="noopener noreferrer"&gt;r/Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/pythontips/" rel="noopener noreferrer"&gt;r/pythontips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/ArtificialInteligence/" rel="noopener noreferrer"&gt;r/ArtificialInteligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/learnmachinelearning/" rel="noopener noreferrer"&gt;r/learnmachinelearning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/MachinesLearn/" rel="noopener noreferrer"&gt;r/MachinesLearn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/MLQuestions/" rel="noopener noreferrer"&gt;r/MLQuestions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/tensorflow/" rel="noopener noreferrer"&gt;r/tensorflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/r/pythoncoding/" rel="noopener noreferrer"&gt;r/pythoncoding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
