terça-feira, 24 de junho de 2014

nohup

Dica nohup Executa comandos demorados no linux, a saída do comando vai para nohup.out, esse por sua vez fica no diretório em que o comando está sendo executado.

Exemplo de utilização

nohup ./comando &

segunda-feira, 20 de janeiro de 2014

Vagrant + (PHP-5.2 + Apache + Firebird)

Essa é triste, mas como eu perdi dias montando o script talvez valha o post!

Antes de qualquer ofensa vou já me justificando que não estou desenvolvendo nada novo usando php 5.2! Meu caso é um caso de “manutenção” e evolução do sistema para versões posteriores.

Desculpas na mesa, vamos ao desenvolvimento do script. Não tenho muito o que dizer sobre o processo de desenvolvimento do script, foi um processo em que fui caminhando sob os problemas um de cada vez.
Meus primeiros testes em compilar o php foram utilizando o mínimo de argumentos. E fui gradualmente adicionando novos argumentos ao ./configure e corrigindo os erros, fazendo downgrade de versão de softwares dependentes, aplicar patch de correção de erro, etc.

Não vou descrever os passos isoladamente pois não me lembro deles, infelizmente. No meio do processo de crianção do script eu entrei de férias e minha memória foi corrompida durante as férias.

Mas estou divulgando o link do repositório com o Vagrant file nos Links. Imagino que possa servir de inspiração para alguém que esteja passando por situação semelhante, rodar algo que ainda estejam com php <= 5.3. A partir da 5.3 já é possível instalar via repositório (ex.: apt-get).

PS: O primeiro link é um post supimpa que achei a informação do patch necessário para corrigir um erro do OpenSSL no Ubuntu.

[]’s

Cheers

Links

quinta-feira, 16 de janeiro de 2014

Chrome Apps - Primeiras Impressões

Hoje tive a oportunidade/necessidade de fazer um teste com as Google Chrome Apps.

Cheguei ao assunto pois precisei perssistir alguns dados localmente a partir de uma web app.
A principio optei por soluções em HTML5 que funcionaram muito bem nos browsers suportados, só que nos browsers não suportados era problema. O Chrome implementa praticamente todos os novos recursos do HTML5, então Chrome App foi um caminho natural. A idéia seria minimizar os problemas com outros browsers obrigando o usuário a usar só o Chrome.

Alem de implementar as APIs do HTML5, o Google oferece a Chrome Platform API para ser consumida dentro da Chrome App. Nessa API existem recursos  para trabalhar com notificações, acesso a dispositivos ligados em alguma porta USB, acesso a dispositivos ligados a portas serial, recursos facilitadores que utilizam APIs do HTML5 e mais uma serie de coisas bacanas. Veja documentação da API para ver todo conteúdo.

Sobre a curva de aprendizagem, não me parece muito longa. Se tiver um pouco de afinidade com html, css e javascript não haverá problemas, sem falar que a documentação é ótima.

A comunidade ainda está meio devagar, mas mesmo assim, eu acredito na popularização das Chrome Apps. Pretendo inclusive utilizar em novos produtos.

Recomendo assistir ao video da apresentação sobre Chrome Apps no Google I/O 2013 e também fazer a first app da documentação oficial.

Finalizo minhas impressões dizendo que  fiquei maravilhado com o resultado final!
Pretendo investir mais tempo na tecnologia e escrever mais alguns posts.

Obrigado por ler até o fim.

[]’s

Cheers

Links:

segunda-feira, 16 de dezembro de 2013

Go Away - Tipagem Getters Structs

Inicialmente comecei a fazer testes com Go por pura diversão. Conheci a linguagem pelo Grok Podcast, e gostei bastante do que falaram. Inclusive essa é uma recomendação forte que eu faço para quem quer começar com Go, escutem os três podcasts sobre Go que os caras do Grok fizeram, eu ouvi a serie toda umas três vezes :)

Vou escrever o post para solidificar a dimensão do básico na minha cabeça.

Entender o básico de qualquer linguagem, framework, whatever na minha opinião é fundamental para que eu consiga me desenvolver no que estou tentando aprender.

Definir o básico já não é tão fácil.

Geralmente fico dias batendo em cima da documentação até perceber que alguns elementos estão sempre presentes. Só depois de adquirir essa percepção consigo começar a sacar o que é básico e essencial para que eu consiga, por exemplo, ler a documentação e produzir código sozinho.

Isso vai gerar uma série de posts, nesse vou me ater apenas a alguns aspectos como tipagem, interfaces públicas e structs.


Tipagem

Go é fortemente tipado, mas tem ducktype. Na minha opinião isso gera um pouco de confusão pois o ducktype só está disponível, digamos assim (disponível), na declaração de variáveis. Ou seja, métodos, "atributos" (entre aspas, ver structs), variáveis globais não tem ducktype.
Vou exemplificar com a diferença entra uma declaração de uma variável global e uma local. Essa diferença se reflete na possibilidade da variável local permitir que o valor seja recebido utilizando o atalho ":=" vou exemplificar com algumas declarações diferentes.


No código acima declaramos uma constante WALTER fora da função main e declaramos uma variável longo dentro da função main, ambas são strings, mas a variável longo declaramos utilizando a forma curta :=. Já a constante precisamos declarar da forma convencional utilizando a paravra chave var seguindo pelo nome do elemento e o tipo, nessa ordem.

Getters

Elementos em letra maiúscula são públicos.
Quando digo elementos estou me referindo a métodos e variáveis.
Eu particularmente gosto desse padrão, deixa claro o que é publico do que não é no código.
No site do Go tem um exemplo de "hello", que usa um método publico que começa com letra maiúscula (Println).

Structs

A definição de objeto do Go não tem a pegada tradicional que estamos acostumados com outras linguagens como PHP, Ruby ou Java.
O recurso de linguagem disponível para tal é o strutct.
Struct é um tipo com campos definidos.


No código acima estamos definindo um struct Pessoa e dentro da função main estamos instanciando esse struct já atribuido valor aos atributos (exemplo p). Existem outras formas de se instanciar um struct, poderíamos ter utilizado a função new (exemplo p2). Para mais detalhes e exemplos mais ricos consulte a sessão Effective Go - Data

Conclusão

Go é uma linguagem fascinante e merece muita atenção. Eu estou no começo dessa jornada ainda, acredito que ao longos dos posts amadureça muita coisa e talvez até de uma editada nesse post, mas por enquanto isso é tudo que tenho a dizer sobre esses três aspectos.

Pretendo falar na série Go Away sobre o esquema de múltiplos retornos, nomear parâmetros de retorno, erros (Panic, Recover, Defer), concorrência, interfaces, padrões, muita coisa! Recomendo para quem esteja começando que leia sobre a sintaxe, pratique com pequenos exemplos, e leia os exemplos feitos pela comunidade. Em falar de exemplos, esse site contem muitos bons Go By Example.

Só lembrando  que minha única fonte de estudo foi a documentação oficial. Em especial Effective Go, dúvidas sobre padrões de nome, declaração de structs,  como alocar dados, muita coisa sobre a forma Go de programar.
Para detalhes mais profundos sobre a linguagem consultei o Go Programming Language Specification.

Nos vemos no próximo!

Cheers!

terça-feira, 10 de setembro de 2013

Clonando repositório GIT por SSH

A dica é para mim mesmo.

Tenho um repositório em um servidor local, e preciso sincronizar esse cara num servidor de produção.

Então fiz um redirecionamento no meu roteador para quando tentar acessar meu ip de fora, passando a porta 2228, ele repassar pro meu servidor local com ip fixo dentro da minha rede.

Os passos no servidor de produção são simples.

Primeiro vamos clonar o repositório:
 git clone ssh://usuario-ssh@meu-ip-externo:2228/caminho/git/repositorio  

Aqui minha internet não tem ip fixo, então preciso alterar o caminho do repositório sempre.

Para isso removo o repositório origin, e depois o adiciono novamente com o novo ip:
 git remote rm origin  
 git remote add origin ssh://usuario-ssh@meu-ip-externo:2228/caminho/git/repositorio  

Feito isso podemos fazer o pull que já deve funcionar, no meu servidor local só existe o branch master, então ficaria:
 git pull origin master  

É isso ae.
Cheers!

terça-feira, 3 de setembro de 2013

Post Inaugural

Já tive outros blogs antes desse, e já escrevi sobre alguns assuntos nesses blogs, assuntos técnicos, assuntos filosóficos, assuntos sem sentido.

O intuito desse blog é mais o menos parecido, extrair idéias e pensamento de mim mesmo.
O ato de escrever ajuda a organizar as idéias. Por pra fora! Embora isso não seja um diário, detesto essa coisa "miguxês".

Gostaria de manter posts regulares, mesmo que sejam sobre algo irrelevante. Escrever é um bom hábito e quero mante-lo.

Esse blog é um auxilio no desenvolvimento da minha criatividade.

Sinta-se livre para postar qualquer comentário, mas não se sinta ofendido caso eu tenha digo alguma merda, lembre-se é apenas um exercício de criação.

Finalizo esse post inaugural por aqui.

Cheers!