Como aumentar o espaço da partição /dev/shm

A partição /dev/shm utiliza o filesystem tmpfs, sistema de arquivos especial, armazenado 100% na memória RAM.

Essa partição é muito importante para facilitar a troca de informações entre diferentes processos do sistema operacional, e também para deixar alguns processos mais rápidos.

No Debian 9 (e em outras distros também), o padrão é que essa partição seja montada com 50% da memória RAM. No meu caso, tenho uma máquina com 16GB de RAM, então quando eu ligo meu sistema, possuo 8GB nessa partição:


$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 126M 1.5G 8% /run
/dev/sda10 425G 357G 47G 89% /
tmpfs 8.0G 221M 7.8G 3% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 496M 58M 439M 12% /boot/efi
tmpfs 1.6G 28K 1.6G 1% /run/user/118
tmpfs 1.6G 88K 1.6G 1% /run/user/1000

Entretanto, em alguns casos específicos, eu preciso aumentar provisoriamente o tempo dessa partição. Um exemplo é quando eu utilizo alguns scripts de importação de grandes bases de dados, que utilizam mais de 8GB de memória. Esses scripts que eu utilizo rodam um container da imagem mysql:5 utilizando Docker, utilizando o /dev/shm/mysql como volume do container. E eu utilizo esse container provisório para importar o banco, o que em alguns casos fica 10x mais rápido do que importar diretamente no HD convencional.

Neste momento, preciso importar um banco de dados que utiliza até 12GB de RAM no total, então eu preciso fazer o seguinte:

sudo mount -o remount,size=12G tmpfs /dev/shm

Após rodar esse comando, minha partição /dev/shm foi aumentada para 12GB da memória RAM.

Rodando novamente, o comando df -h, agora tenho o seguinte output:

$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 126M 1.5G 8% /run
/dev/sda10 425G 357G 47G 89% /
tmpfs 12G 222M 12G 2% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sda1 496M 58M 439M 12% /boot/efi
tmpfs 1.6G 28K 1.6G 1% /run/user/118
tmpfs 1.6G 84K 1.6G 1% /run/user/1000

Não esqueça de depois de rodar seus scripts, voltar o tamanho /dev/shm para o tamanho original (50% da sua memória RAM), rodando o mesmo comando que utilizou para alterar para 12GB. Caso você esqueça de reduzir o tamanho do /dev/shm, aumenta a probabilidade de sua máquina travar por escassez de memória!

Até a próxima!

Criando uma aplicação com React e Webpack

O mundo do desenvolvimento Front-End viu a ascensão e o declínio de inúmeras ferramentas e frameworks. Para aqueles que acompanham este mundo, é muito comum atualmente escutar três grandes nomes, sendo eles Angular, Vue e React.

Neste post vamos criar uma aplicação simples com React e Webpack, entretanto vale ressaltar que todos os frameworks citados são excelentes, desde que usados com sabedoria.

Mas antes de iniciarmos, você sabe o que é React?

O React é um framework JavaScript de código aberto desenvolvido pelo facebook, e hoje é mantido pelo próprio facebook, uma comunidade de desenvolvedores individuais e outras empresas. Em poucas palavras o React é uma biblioteca para criar interfaces, seu maior conceito é separar seu projeto em componentes, sendo assim, quando se trabalha com React deve-se quebrar os elementos ou problemas da sua aplicação em pequenas frações, que serão mais simples de se trabalhar, como também serão reutilizáveis por todo projeto.

Após essa breve explicação, vamos começar o projeto!

Primeiramente vamos inicializar o package.json, onde serão armazenadas informações essenciais de todo o projeto.

$ npm init -y

Após o arquivo package.json ser iniciado, vamos alterar o seguinte trecho:

"test": "echo "Error: no test specified" && exit 1"

Substituindo por:

 "dev": "webpack-dev-server"

Vamos instalar as dependências necessárias para utilização do React por meio do comando:

$ npm i --save-dev babel-core [email protected] babel-preset-es2015 babel-preset-react react react-dom webpack webpack-cli webpack-dev-server

Após instalar as dependências, que pode ser um processo um pouco demorado, será criado um diretório chamado node_modules em seu projeto, pelo seu tamanho é recomendável inclui-lo no gitignore de sua aplicação, caso você utilize git.

Outro ponto importante, é que este diretório pode ser refeito a qualquer momento pelo comando $ npm i.

Após isso, crie o arquivo webpack.config.js com o seguinte conteúdo:

const webpack = require('webpack')

module.exports = {
   mode: 'development',
   entry: './src/index.jsx',
   output: {
      path: __dirname + '/public',
      filename: './bundle.js'
   },
   devServer: {
      port: 8080,
      contentBase: './public',
   },
   resolve: {
      extensions: ['.js', '.jsx']
   },
   module: {
      rules: [{
         test: /.js[x]?$/,
         loader: 'babel-loader',
         exclude: /node_modules/,
         query: {
            presets: ['es2015', 'react']
         }
      }]
   }
}

Crie um diretório chamado public e dentro dele um arquivo com o nome de index.html com o seguinte conteúdo:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8">
      <title>Hello React!</title>
   </head>
   <body>
      <div id="app"><div>
      <script src="bundle.js"></script>
   </body>
</html>

Agora crie mais um diretório chamado src, será dentro deste diretório que grande parte do projeto será construído. Neste diretório crie um arquivo index.jsx, a extensão jsx é a extensão padrão para o React, e coloque o seguinte conteúdo:

import React from 'react'
import ReactDOM from 'react-dom'

ReactDOM.render(<h1>Olá React</h1>, document.getElementById('app'))

Agora execute:

$ npm run dev

E acesse http://localhost:8080/.

Essa foi uma pequena demonstração da construção de uma aplicação React com Webpack, continue explorando e descobrindo este framework incrível!

 

Format time Golang – porque esses números estranhos ??

.Você já se perguntou porque a formatação de time do Golang é feito com numeros, ex: para formatar uma data como (dia/mes/ano hora:minuto:segundo) a formatação fica: (“02/01/2006 15:04:05″) .

É estranho, mas a explicação é mais simples do que você imagina. =D

simplesmente é uma sequencia numérica em ordem crescente, baseando-se nesse formato  “Mon Jan 2 15:04:05 MST 2006″, ficaria assim:

“01/02 03:04:05PM ’06 -0700″

espero ter ajudado.

fui !!!!

 

Trava otimista e pessimista

A animação abaixo foi gravada com o software asciinema. Recomenda-se assistir em tela cheia.

Todo o conteúdo da apresentação está disponível no repositório https://github.com/rpagliuca/apresentacao-trava-otimista.

Errata: no início da apresentação, o termo CONCORRÊNCIA é incorretamente traduzido como LOCK. Nos trechos seguintes, a tradução correta, TRAVA, é utilizada.

Nos bastidores do PHP

O manual do PHP diz que um array no PHP é um mapa ordenado que relaciona valores a chaves e é otimizado para vários usos diferentes: array, lista, hashtable (não só array mas basicamente tudo no PHP é uma hashtable – se quiser saber mais sobre o assunto acesse Understanding PHP’s internal array implementation), dicionário, coleção, pilha, fila e mais, possibilitando os valores do array serem outros arrays e arrays multidimensionais.

Graças ao hashtable escrito em C no código-fonte do PHP, os arrays são um diferencial em relação a outras linguagens de desenvolvimento web.

Você pode manipular um array PHP utilizando o foreach() para resolver qualquer tipo de controle de dados.

Continuar lendo Nos bastidores do PHP

Meu “dízimo” ao open source

“Meu nome é Ricardo, tenho 38 anos e estou há 4 anos sem usar software pirata.”

Brincadeira a parte, sou grato ao @theologianIT por me mostrar um mundo livre de telas azuis e atualizações em horas indesejadas. No começo, como um bom usuário Windows, relutei em aceitar o novo e até achei que o objetivo do WineHQ  ou do dual-boot era me ajudar a permanecer no “mundo da lentidão“, mas o uso constante e diário do Slackware (distribuição Linux comunitária mais antiga) me fez entender que nem todo sistema operacional foi feito para travar ou atrasar meu trabalho.

Continuar lendo Meu “dízimo” ao open source

Simulando uma pesquisa de intenção de votos para Presidente do Brasil (Ibope) com Python

* Código-fonte no Github: https://github.com/rpagliuca/simulador-ibope-eleicao

* Na verdade, deveria ter sido utilizado o número de eleitores do Brasil (aproximadamente 150 milhões), e não a população total: https://eleicoes.uol.com.br/2016/noticias/2016/07/25/144-milhoes-de-eleitores-vao-as-urnas-nas-eleicoes-de-2016.htm

* Notícia do G1 que relata que uma amostra de 2506 eleitores foi utilizada na pesquisa de intenção de votos nas eleições para presidente do Brasil de 2014: http://g1.globo.com/politica/eleicoes/2014/noticia/2014/08/dilma-tem-38-aecio-23-e-campos-9-diz-pesquisa-ibope.html