computero
computero
Computero
14 posts
"Seja como a água, meu amigo." - Bruce Lee
Last active 60 minutes ago
Don't wanna be here? Send us removal request.
computero · 7 months ago
Link
Play Chess Online Against the Computer - Ultra 85 by Logic - Chess.com
0 notes
computero · 2 years ago
Text
Código Limpo - Capítulo 4 - Comentários
O capítulo resume-se em seu mote: "Don't comment bad code -- rewrite it."
Código bem escrito, no geral, dispensa comentários. Existem exceções, como disclaimers, authorships, to-dos, etc., mas via de regra comentários não devem ser utilizados para explicar código. Um comentário pode tanto salvar horas de leitura de código, como levar o programador ao erro completo de entendimento do contexto.
0 notes
computero · 2 years ago
Text
Código Limpo - Capítulo 3 - Métodos
Funções devem ter poucas linhas de código. Linhas também devem ser limitadas em quantidade de caracteres. Antes utilizava-se 80 caracteres porque era o que se dava para imprimir em uma página. Funções não deveriam ultrapassar 20, tampouco 30 linhas. Elas devem ser curtas e bem identadas.
Funções bem escritas devem ter apenas uma responsabilidade. Elas devem fazer isso bem e fazer apenas isso. Para garantir que um método tenha apenas uma responsabilidade, podemos observar se todas as suas linhas estão no mesmo nível de abstração.
O código deve ter uma narrativa que possa ser lido top-down. Queremos que cada função seja uma abstração seguida de abstração de nível mais baixo. Em outras palavras, queremos utilizar uma sequência de Para…
Para incluir setups e teardowns, incluímos os setups, então incluímos o conteúdo da página e, então, incluímos os teardowns.
Para incluir os setups, incluímos a suíte de setup, se for uma suíte, então incluímos o setup normal.
Para incluir a suíte de setup, buscamos acima na hierarquia pela página "SuiteSetUp" and adicionamos uma inclusão com o caminho da página.
Para buscar acima na hierarquia…
Seguir esse procedimento de se manter em apenas um nível de abstração é díficil a princípio, mas é uma técnica muito efetiva para manter o código legível.
Utilize nomes descritivos e não tenha medo que fiquem longos. Não é incomum que meditar sobre bons nomes faça com que o código seja reestruturado para estar melhor escrito.
Argumentos de funções devem se manter em no máximo 3 e jamais passar disso a menos que se tenha uma justificativa muito forte. Argumentos são difíceis de se ler, eles carregam uma quantidade enorme de pode conceitual. Além disso, testar métodos que possuem 3 ou mais argumentos aumenta exponencialmente o número de combinações de valores possíveis para cada um deles.
Funções monádicas. Existem duas razões básicas para que uma função seja monádica. Uma é que se esteja realizando uma pergunta sobre a variável, p.e. isValid(value). Outra é que a variável será processada, transformada e retornada. Evite utilizar a variável de input como output e não retornar um valor com a função.
Funções diádicas. São mais difíceis de entender que as monádicas. Não utilize flags, como booleanos, para alterar o comportamento de uma função. Isso indica que a função cumpre mais do que uma responsabilidade.
Funções triádicas. Se a função realmente precisa levar 3 ou mais argumentos, provavelmente um objeto pode ser utilizado para agrupar os argumentos em uma única variável.
Uma função não pode ter efeitos colaterais. Se uma função diz ter uma responsabilidade, mas afeta o sistema com a alterações de variáveis de estado, por exemplo, ela será uma grande dor de cabeça.
Separação de Comando e Questionamento. Uma função deve responder uma questão ou realizar uma operação, mas não as duas coisas. Se a função seta um valor e retorna se deu certo, ela fica difícil de ler, principalmente quando é usada em um IF.
Prefira lançar exceções do que retornar códigos de erro. Tratar erros é fazer uma coisa e funções não devem fazer mais do que uma coisa, logo tratar exceções deve ser feito separadamente.
Não se repita. Código duplicado tem sido o maior ofensor de todos os tempos. É como se tudo o que foi criado até agora, POO, POA, POC, etc., tivesse como objetivo principal evitar reescrita de código.
Conclusão: Todo sistema é construído a partir de uma linguagem específica do domínio do problema escrita por programadores para descrever o problema. A arte de programa sempre foi a arte de escrever bem. Mestres pensam em histórias a serem contadas ao invés de programas a serem implementados.
0 notes
computero · 2 years ago
Text
Código Limpo - Capítulo 2 - Nomes
O código deve ser legível e inteligível.
Deve-se usar nomes que sejam autoexplicativos, que revelem a intenção de uso da variável, classe ou método.
Evite desinformação. Os nomes devem ser escritos em linguagem clara e evitando-se o uso de abreviações que não serão óbvias para os leitores do código. Prefira utilizar nomes que definam implementações como GerenciadorDeArquivosImpl ao invés de colocar I nas interfaces como em IGerenciadorDeArquivos.
Variáveis devem ter nomes que possam fazer clara distinção de seu uso. Evite modificar ou adicionar apenas um caracter para repetir o nome de uma variável dentro do mesmo código.
Utilize nomes pronunciáveis porque humanos são bons com palavras. Se você pode pronunciar o que está escrito no código, então poderá discutir o mesmo com seus pares. Nomes impronunciáveis farão com que a discussão soe como uma piada idiota.
Utilize nomes que possam ser procurados com facilidade. As IDEs permitem de buscas simples a complexas com uso de expressões regulares. Ser capaz de buscar no código deve ser algo fácil.
Nomes de classes devem ser substantivos. Nomes de métodos devem ser verbos.
Piadas, trocadilhos e outras graças só fazem sentido em um contexto de pessoas que compartilham do mesmo senso de humor. Não utilize esse tipo de abordagem.
Seja consistente no uso do vocabulário e evite utilizar sinônimos para utilidades similares. Se está usando a palavra buscar, não misture com encontrar ou procurar, mantenha o buscar ao longo de sua escrita.
Tente ao máximo possível utilizar nomes que façam partes do domínio da solução implementada. Utilize contexto na nomeação. Se você encontrar rua, estado e cidade no mesmo código, inferirá que se trata de um endereço rapidamente. Mas o que acontece se apenas a palavra estado for encontrada? O significado já não é claro à primeira vista.
0 notes
computero · 2 years ago
Text
Código Limpo - Capítulo 1 - Pontos-chave
Haverá código a ser escrito: desenvolvedores são necessários para que requisitos vagos se tornem programas precisos.
Código ruim: ele existe e pode matar de um produto a toda uma empresa.
O Custo Total de uma Bagunça: código ruim gera mais trabalho sem igual incremento na produtividade.
Regras de Beck para um código simples:
Executa todos os testes;
Não contém código duplicado;
Expressa todas as ideias de design do sistema;
Minimiza o número de entidades como classes, métodos, funções e afins.
A Regra dos Escoteiros: deixe o sítio mais limpo do que quando você chegou.
Conclusão
Código bem escrito é o mesmo que código de fácil leitura. Se o código não está claro, ele deve ser refatorado até que seja impecável dentro dos princípios do SOLID.
Todo desenvolvedor é um autor que deve ter a consciência de que terá leitores. Como um bom autor, o desenvolvedor deve querer passar a mensagem com clareza e exatidão.
0 notes
computero · 2 years ago
Text
Clean code 5S
James O. Coplien cita logo na introdução do seminal Clean Code (2012) a filosofia dos 5S. Essa filosofia foi extraída da indústria automobilística japonesa e compreende os seguintes princípios:
Seiri: organização. Saber onde as coisas estão. Nomear apropriadamente classes e variáveis é crucial.
Seiton: sistematização. O código deve estar onde você espera encontrá-lo.
Seiso: limpeza. Livre-se de comentários que não documentam e linhas comentadas de código.
Seiketsu: padronização. Todo o grupo está de acordo sobre como manter o ambiente de trabalho arrumado.
Shutsuke: disciplina. Seguir as boas práticas, refletir sobre o trabalho realizado e buscar o aprimoramento.
0 notes
computero · 4 years ago
Text
Nova jornada rumo ao trading
Essa semana comecei uma nova jornada de aprendizado.
Com a intenção de deixar de sabotar minha vida financeira, comecei a ler o livro “Como se transformar em um operador e investidor de sucesso”, do autor Alexander Elber.
Os dois primeiros capítulos tratam da psicologia individual e de massa, respectivamente. Apresentam conceitos de auto-ajuda para ter disciplina o suficiente para entrar no território de bears e bulls e fluir entre os dois sem se tornar uma presa indefesa.
O terceiro capítulo introduz a análise técnica, começando por candlesticks e MME (média móvel exponencial). Após ler esse capítulo fiz um script em python3.8+selenium para ler os dados de intraday do UOL Economia. A primeira raspagem de dados foi realizada para o dia 16/08/2021 sobre a seguinte lista de companhias ['itub4-sa', 'vale3-sa','mglu3-sa','mrfg3-sa','lwsa3-sa','ggbr3-sa','ggbr4-sa','bbdc3-sa','bbdc4-sa','hapv3-sa', 'suzb3-sa','vvar3-sa', 'lame4-sa', 'prio3-sa', 'bbas3-sa', 'csna3-sa', 'cyre3-sa', 'mult3-sa', 'ceab3-sa']. Os dados foram salvos em arquivos CSV. As empresas foram escolhidas com uma pesquisa rasa, apenas para fins de praticar o aprendizado da análise técnica aplicada ao day trading.
O próximo passo será montar os gráficos em R ou python, o que for mais razoável. R é a linguagem de preferência para análises estatísticas e plotagem de gráficos que fazem os olhos brilhar, não sei se python tem a mesma gama de recursos.
0 notes
computero · 4 years ago
Text
Remover Imagem Docker
Listar imagens disponíveis com
sudo docker images
grep ajuda :-]
REPOSITORY TAG IMAGE ID CREATED SIZE hostname:XXXX/nome-da-imagem tag-versao db7c67e94027 33 minutes ago 231MB
Copiar o ID da imagem que deseja excluir
sudo docker rmi id_da_imagem
0 notes
computero · 8 years ago
Text
MySQL 101.0.3
Usando a tabela Users a seguir:
CREATE TABLE Users( id int(11) not null, username varchar(50), password varchar(255), role varchar(20), created datetime, modified datetime, primary key(id) );
Criar uma nova tabela com uma Foreign Key:
CREATE TABLE Articles( id int(11) not null auto_increment, title varchar(255) not null, body text not null, category_id int(11) not null, created datetime not null, modified datetime not null, user_id int(11), primary key(id), foreign key(user_id) references users(user_id) );
Inserir uma Foreign Key em uma tabela já criada:
ALTER TABLE Articles ADD CONSTRAINT fk_UsersArticles FOREIGN KEY (user_id) REFERENCES Users(id);
0 notes
computero · 8 years ago
Text
CakePHP - Instalação
Primeiramente deve-se ter o composer instalado, para isso deve-se seguir as instruções presentes em https://getcomposer.org/download/.
Em seguida deve-se mover o arquivo composer.phar para o diretório de executáves (e.g. mv composer.phar /usr/local/bin/composer).
Para se criar o projeto deve-se executar:
composer self-update && composer create-project --prefer-dist cakephp/app my_app_name
OBS.: o diretório /var/www/html/ deve receber as seguinte permissões para funcionar:
chown -R dmatos /var/www/html/ chgrp -R www-data /var/www/html/ chmod -R 750 /var/www/html/ chmod g+s /var/www/html/
No arquivo /etc/apachd2/sites-available/000-default.conf deve-se inserir as seguintes linhas para dar as devidas permissões
<Directory /> Options FollowSymLinks AllowOverride All </Directory /> <Directory /var/www > Options Indexes FollowSymLinks MultiViews AllowOverride All Order Allow,Deny Allow from all </Directory >
Por fim deve-se configurar o arquivo my_app/config/app.php como os dados para acesso à base de dados e certificar-se de que o modo de sobrescrita está ativo. Se o modo de sobrescrita estiver desligado o site padrão do cakephp estará desconfigurado, caso no qual basta ativar o modo com o comando a2enmod rewrite
.
obs: se o projeto tem redirecionamento através de .htaccess, certifique-se que o diretório acima da raiz do projeto também contém o arquivo .htaccess. No cakephp são 3 níveis de .htaccess, um nível acima da raiz, na raiz e no diretório webroot
0 notes
computero · 8 years ago
Text
MySQL 101.0.2
Para remover uma linha da tabela:
 delete from table_name where condition
exemplo:
delete from usuarios where username like '% silva %'
descrição: removerá todos os usuários que contenham silva no username
Para alterar o formato da tabela
alter table table_name command
exemplo:
alter table usuarios add role text not null;
descrição: adicionará a coluna role do tipo text e restrição not null à tabela
Para alterar os dados já inseridos na tabela
update table_name set column=new_value where condition
exemplo:
update usuarios set username='dmatos' where username like 'diogo'
descrição: altera o campo username para 'dmatos' da linha na qual o usename atual seja 'diogo'
0 notes
computero · 8 years ago
Text
MySQL 101.0.1
Todos os exeplos utilizarão a seguinte tabela:
CREATE TABLE usuarios( username text not null, primary key(username) );
Para inserir dados na tabela
insert into table_name(column) values(new_value);
exemplo:
insert into usuarios(username) values('dmatos');
descrição: insere o novo registro com o campo username de valor 'dmatos'
0 notes
computero · 12 years ago
Text
Java + Ubuntu 12.10
Após baixar a distribuição java (atualmente disponibilizado apenas pela Oracle, após cadastro no site) deve-se utilizar a ferramenta update-alternatives para o gerenciamento dos links simbólicos.
$ sudo update-alternatives --install /caminho/link/simbolico comando /caminho/jre/ prioridade
Se você utilizou o script de instalação, o caminho provavelmente será /usr/lib/jvm/jdk-X.X.X/bin/java
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk-amd64/bin/java 100
No exemplo acima, foi configurado o link simbólico /usr/bin/java para o comando java que está instalado em /usr/lib/jvm/java-11-openjdk-amd64/bin/java. A prioridade ao final indica qual alternativa será utilizada por falta.
Para escolher a versão Java desejada:
$ sudo update-alternatives --config java
0 notes
computero · 12 years ago
Text
Teste de Post com prettyfy
public class HelloWorld{ /*clássicos nunca morrem*/ String hello = new String("HelloWorld!"); System.out.println(hello); }
para referências futuras:
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script> <pre class="prettyprinter"> code here </pre>
0 notes