tag:blogger.com,1999:blog-83201766581738710262023-11-16T08:51:07.000-03:00Fernando Kosh<a href="http://twitter.com/fernandokosh">@fernandokosh</a> Rio de Janeiro - Brazil
Desenvolvimento web Ruby on Rails e PHP
Linux, Mac e outros
<a href="http://www.koshtech.com>http://www.koshtech.com</a>Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.comBlogger115125tag:blogger.com,1999:blog-8320176658173871026.post-84305758599567467582022-08-24T16:08:00.004-03:002022-08-24T16:08:58.361-03:00Faz backup, cópia ou usa Git?<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWU42emUfo9oMII6S4wB3uUW4l3mgZwj_Z_-jL-Zse5cpoVti_LrWaXzUTW0CHP7U_CeMl8DLapT0FUJaZb8kpbZ0oXaayLRQaBnilwDy3iu2_3M1EKKklcG-oP3S1IidM4szhoOvuiQA4Uac-Kmpi0dDPKFxNIs0GPc8zWK6MaRwLLlhAA9O_96c94A/s400/computador-fogo_400.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="345" data-original-width="400" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWU42emUfo9oMII6S4wB3uUW4l3mgZwj_Z_-jL-Zse5cpoVti_LrWaXzUTW0CHP7U_CeMl8DLapT0FUJaZb8kpbZ0oXaayLRQaBnilwDy3iu2_3M1EKKklcG-oP3S1IidM4szhoOvuiQA4Uac-Kmpi0dDPKFxNIs0GPc8zWK6MaRwLLlhAA9O_96c94A/s320/computador-fogo_400.png" width="320" /></a></div><br /><p></p><p>Fosse no tempo antes do controle de versão de verdade, por 4 vezes na era recente, eu teria perdido boa parte do trabalho. Isso graças a um membro de uma das equipes das quais faço parte. A pessoa não sabe usar as ferramentas e não tem a humildade de perguntar como se faz, já que não consegue aprender buscando pela Internet.</p><p>Antes dos controladores de versão, a gente fazia backups regulares do projeto todo e de arquivos específicos, dependendo das alterações. Isso, claro, gerava muitos problemas. Principalmente depois de um tempo, quando não se lembrava mais o porquê de tal cópia. Era bem comum apagar trechos de códigos importantes. Alguns editores ajudavam, fazendo cópias automáticas, mas assim mesmo, as perdas eram parte da rotina.</p><p>Daí conheci primeiro o CVS e cheguei a trabalhar com ele em alguns projetos. Parecia muito bom! Mas tinha seus problemas. Quando eu já conhecia o CVS a ponto de não gostar mais dele, conheci o SVN, que prometeu mais do que entregou, eu acho. Mas usando com uma extensão chamada SVK, ele ficava bem parecido com o que um tempo depois eu conheci como Git. Este sim, ajuda de verdade e salva muito! Mas existe o push force.</p><p>É quando nem o Git resolve. Se o repositório não tiver proteção de push force, pelo menos na main ou a antiga master, nem o Git salva! Brincadeira. Salva sim! Dá voltar no tempo e com umas técnicas bem avançadas, nas quais se pode sim recuperar de um push force! Achei incrível ler sobre isso, mas eu não precisei resolver assim não.</p><p>Primeiro, fiz um git reset até onde sabia que estava bom. Eu sabia que havia uma maquina na rede com o repositório sem o force e que tinha os últimos commits. Adicionei, então, essa máquina e o caminho completo até o repositório nela como um remoto e usei o código de lá. Foi até bem simples, depois do susto inicial.</p><p>E assim eu aprendi mais uma lição: Sempre proteger contra push force. </p>Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-63297048427618678882020-05-18T20:46:00.002-03:002020-05-18T20:49:15.684-03:00Como resolver 99% dos defeitos de mouse sem fio de qualquer fabricanteO mouse parece estranho?<br />
Meio que falha quando é movido?<br />
A seta fica tremula e parece que vai cair da tela?<br />
O clique pega mais não pega?<br />
Parece que quando clica da uma falhada?<br />
A seta tem atraso em relação movimento do dispositivo na não?<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpFr40Up40h1R8LO27iunJKPyhr0ah2CeFfmD23_4bX2ZlTGeB5YGIYKHl5ZbqK1l0FQ2LugLn64wrlw7I-sfMdTlPxcqrOUPVFmaRhiIQ9rHnmsq6QkZ_dVNUM0mmBojcVGBV4zj9tr2e/s1600/como-consertar-quase-todos-os-problemas-do-mouse-sem-fio.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="736" data-original-width="964" height="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpFr40Up40h1R8LO27iunJKPyhr0ah2CeFfmD23_4bX2ZlTGeB5YGIYKHl5ZbqK1l0FQ2LugLn64wrlw7I-sfMdTlPxcqrOUPVFmaRhiIQ9rHnmsq6QkZ_dVNUM0mmBojcVGBV4zj9tr2e/s640/como-consertar-quase-todos-os-problemas-do-mouse-sem-fio.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
A solução é trocar as pilhas. 99% dos defeitos de mouse sem fio é causado por baixo nível de energia. O bom é tentar usar pilhas de melhor qualidade ou, se possível, baterias recarregáveis.<br />
<br />
Nos outros 1% dos casos, vale verificar se o receptor está conectado corretamente. Devido ao baixo preço deste tipo de equipamento, consertar fica praticamente fora de cogitação e ai o jeito é trocar o dispositivo.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0Rio de Janeiro, RJ, Brasil-22.9068467 -43.1728965-23.374864199999998 -43.8183435 -22.4388292 -42.5274495tag:blogger.com,1999:blog-8320176658173871026.post-12304658216909755812020-05-16T16:00:00.000-03:002020-05-18T10:38:58.381-03:00Distribuições Linux que já usei<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3; font-size: inherit;">1) Conectiva 2 - 1996/7</span></h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhRXQtrbcWC6m96GoiYCrC35Y6wr8bhqsMEUez_ahvAGSUYbfzcY8U9dWxX1GmBuWylcG2z8bpQqDBnhr0riV5jr3lwyjV4_Z5Fuhyy5TGJg5iyiCB0K8P5VAgOA38TGl2CzAV3_NRj379/s1600/_11++Fernando+Kosh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: #f3f3f3;"><img border="0" data-original-height="1024" data-original-width="1280" height="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhRXQtrbcWC6m96GoiYCrC35Y6wr8bhqsMEUez_ahvAGSUYbfzcY8U9dWxX1GmBuWylcG2z8bpQqDBnhr0riV5jr3lwyjV4_Z5Fuhyy5TGJg5iyiCB0K8P5VAgOA38TGl2CzAV3_NRj379/s640/_11++Fernando+Kosh.png" width="640" /></span></a></div>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Porta de entrada. Foi bem difícil. Apesar das facilidades eu não entendia nada. Não tinha driver de modem e nem de placa de rede, mas o vídeo funcionava em 800x600.</span><br />
<span style="color: #f3f3f3;"><span style="color: #f3f3f3;"><br /></span>
<span style="color: #f3f3f3;"></span></span><br />
<h2>
<span style="color: #f3f3f3;">2) Caldera Linux - 1997</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQjC_vLL8IsunK3P-acADOVlQUyP7NlgetUHDielnpNU_NNt46Y1NRrs5GNC2EjJ2QZi9ZsJfXSrZbdTAT2g6e4oXOpGoQRQ2RTAkzvrp5JPHtPEWEXVWFRx_IlMi_WcIb0AhkPbbaB2eG/s1600/caldera.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="color: #f3f3f3;"><img border="0" data-original-height="600" data-original-width="750" height="512" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQjC_vLL8IsunK3P-acADOVlQUyP7NlgetUHDielnpNU_NNt46Y1NRrs5GNC2EjJ2QZi9ZsJfXSrZbdTAT2g6e4oXOpGoQRQ2RTAkzvrp5JPHtPEWEXVWFRx_IlMi_WcIb0AhkPbbaB2eG/s640/caldera.jpeg" width="640" /></span></a></div>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Pior ainda! Não tinha suporte nenhum ao meu hardware. </span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><span style="color: #444444;"><br /></span>
</span><br />
<h2>
<span style="color: #f3f3f3;">3) Redhat - 1998</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Consegui evoluir em algo. Tive modem e placa de rede funcionando e modem funcionava até cair a ligação. Depois só reiniciando para voltar.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">4) SuSe Linux - 1999</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Tinha um buraco negro de espaço em disco. Me fez criar ranço com o sistema de pacotes RPM.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">5) Slackware - 1999-2000</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Ai sim! Foi aqui que realmente comecei a sair do Windows. Antes a partição do Linux tinha até 20% do disco. Daqui em diante ficou com 80%. A maquina teve boa performance e funcionou tudo! Deu trabalho para configurar, mas eu aprendi muita coisa. Viva o pkgtool.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">6) Gentoo - 2003</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Esse que trouxe a grande evolução no uso. Ter que montar tudo na mão foi realmente muito bom! 2 dias para instalar o primeiro Gentoo no meu Pentium II 350Mhz. Aprendi muita coisa!</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><span style="color: #444444;"><br style="box-sizing: inherit;" /></span>
</span><br />
<h2>
<span style="color: #f3f3f3;">7) GoboLinux</span></h2>
<span style="color: #f3f3f3;">A mudança para o GoboLinux foi bem empolgante. A distribuição trata os pacotes de uma forma única e foi muito legal. </span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">8) Ubuntu - 2007</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Fazer tudo desde o zero já era caro demais! Eu tinha necessidades de apenas usar os programas e compilar já não era tão legal. Aprendi o apt e gostei.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">8.1) Debian nos servidores - 2007</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Até então eu ainda usava Slackware ou Gentoo nos servidores. Mas ai passei a usar Debian e sou feliz até hoje.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br style="box-sizing: inherit;" /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">9) ArchLinux - 2017</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">O Ubuntu e suas facilidades se tornaram pesadas demais. Mesmo com uma máquina i3 e 4GB de RAM me sentia perdendo recursos desnecessários para o sistema operacional e que me faziam falta nas tarefas do dia a dia. Foi muito bom conhecer o pacman e o sistema AUR, mas usar ArchLinux me lembrou os tempos do Gentoo.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<h2>
<span style="color: #f3f3f3;">10) Manjaro - 2020</span></h2>
</div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;">Novamente me sinto numa distribuição leve e eficiente. Todas as vantagens do ArchLinux, com as facilidades do Ubuntu. É o que venho achando.</span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<span style="color: #f3f3f3;"><br /></span></div>
<div style="border: 0px; box-sizing: inherit; cursor: text; font-size: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;">
<br style="background-color: white; box-sizing: inherit; font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Fira Sans", Ubuntu, Oxygen, "Oxygen Sans", Cantarell, "Droid Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Lucida Grande", Helvetica, Arial, sans-serif; font-size: 19.125px; white-space: pre-wrap;" /></div>
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0Rio de Janeiro, RJ, Brasil-22.9068467 -43.1728965-23.374864199999998 -43.8183435 -22.4388292 -42.5274495tag:blogger.com,1999:blog-8320176658173871026.post-53083164507630215392019-04-15T10:25:00.002-03:002019-04-15T10:29:33.722-03:00Rais e os testes dos assets<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhal1Jc2a6jHh5868yMZKFP6IDKPJrS_lhVzeWpkSB31xoCcnZPBL99PPa4pC18cr6IoPvQsb9OC94KYGhrjzAYFYGmx0DzIWRkIHoZfA4YPDhUYYMxBqU8SbTfjpnM-2ZeVb_c-ToMr5Cs/s1600/asset-pipeline-in-ruby-on-rails-3-638.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="638" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhal1Jc2a6jHh5868yMZKFP6IDKPJrS_lhVzeWpkSB31xoCcnZPBL99PPa4pC18cr6IoPvQsb9OC94KYGhrjzAYFYGmx0DzIWRkIHoZfA4YPDhUYYMxBqU8SbTfjpnM-2ZeVb_c-ToMr5Cs/s640/asset-pipeline-in-ruby-on-rails-3-638.jpg" width="640" /></a></div>
<br />
<br />
As vezes acontece de um deploy falhar. Não é o esperado. Mas acontece. Dia destes, aconteceu comigo, mas por causa dos assets. Mais precisamente um código javascript.<br />
<br />
Não é que estava errado ou gerando falhas, mas o código em si não era compatível com o Uglifier, compilador de JS usado por padrão no Rails. O que aconteceu foi que a sintaxe usada funcionava de boa no navegador e em desenvolvimento não dava o erro. Mas em produção dava erro na hora de compilar os assets.<br />
<br />
E o pior é que não havia o indicativo de onde dava o erro no stack trace. Rodei, então, a tarefa rake assets:precompile em desenvolvimento e, também não deu erro. Mas o erro estava lá em produção.<br />
<br />
Umas googladas depois, descobri que o Uglifier não "entende" algumas especificações mais recentes do Javascript e era sugerido evitar algumas destas sintaxes.<br />
<br />
Algo como este código:<br />
<br />
function baba(param1: 'value'){<br />
// some code<br />
}<br />
<br />
A expressão param1: 'value' não é válida para o Uglifier. Resolvido isso, o deploy se deu normal, mas depois de mais ou menos meia hora e algum estresse. Para evitar isso, criei um teste para compilar os assets individualmente e depois disso, já me peguei uma vez fazendo código que não iria passar. Coisa bem simples e tem me ajudado:<br />
<br />
require "rails_helper"<br />
<br />
describe "rake assets:precompile", type: :task do<br />
<br />
context "assets" do<br />
describe "static precompile" do<br />
JS_PATH = "app/assets/javascripts/**/*.js";<br />
Dir[JS_PATH].each do |file_name|<br />
<br />
it "compile #{file_name}" do<br />
Uglifier.compile(File.read(file_name))<br />
end<br />
<br />
end<br />
end<br />
end<br />
<br />
end<br />
<div>
<br /></div>
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-67257793350217285392018-06-25T07:00:00.000-03:002018-06-25T07:00:14.505-03:00Ruby on Rails Flash messages e Bootstrap<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLPuASTZLipRuc6E1weDxu9bvtK54V-gXFNz4T8adwfhqJtJfqJOTKj-zt_FC6wxQD8tvYZaT0YH9zlmv2RggsapNPufpHOquRzyl2f8gs2pQn4EfMJTesVY3BUOjuzojmEV2bCuoRy59/s1600/bootstrap-alerts.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="317" data-original-width="912" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLPuASTZLipRuc6E1weDxu9bvtK54V-gXFNz4T8adwfhqJtJfqJOTKj-zt_FC6wxQD8tvYZaT0YH9zlmv2RggsapNPufpHOquRzyl2f8gs2pQn4EfMJTesVY3BUOjuzojmEV2bCuoRy59/s640/bootstrap-alerts.jpg" width="640" /></a></div>
<br />
E chega aquele momento em que você percebe que os nomes do níveis de flash messages do Rails não batem 100% com as classes alert-* do Twitter Bootstrap.<br />
<br />
A solução é criar um help para fazer um de-para das classes, adicionando o seguinte método ao seu application_helper.rb:<br />
<br />
def flash_class(level)<br />
case level<br />
when 'notice' then "alert alert-info"<br />
when 'success' then "alert alert-success"<br />
when 'error' then "alert alert-error"<br />
when 'alert' then "alert alert-error"<br />
end<br />
end<br />
<br />
E no local no template onde devem ser exibidas as mensagens, adicionamos um pequeno loop pelos níveis de mensagem que existirem:<br />
<br />
<% flash.each do |key, value| %><br />
<div class="<%= flash_class(key) %>"><br />
<%= value %><br />
</div><br />
<% end %><br />
<br />
basta usar normal depois:<br />
<br />
flash[:success] = "Babá das Cove!"<br />
flash[:notice] = ''Um dois três Bolinha!"<br />
flash[:error] = ''Teste um dois três, eu vi uma joaninha!"<br />
flash[:alert] = "Ela saiu voando pela porta da cozinha!"<br />
<br />
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-44910627067251272592018-06-22T19:00:00.000-03:002018-06-22T19:00:09.234-03:00Spring e Rspec - Conflito quase Certo<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLsnng0JnUA5QtPNgR_Pb-OfsJOxOan4zgwd6tz4aPd3dIdp7jQQk9qDPbH5GTwyvmKLO3NiL-eqRtKS8KF17nrtrvFr25_vmpJBlnlTK-sVUMvTru6CCsK0BajpdLuwlwJLZkmH7GyLUW/s1600/rspec.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="243" data-original-width="600" height="129" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLsnng0JnUA5QtPNgR_Pb-OfsJOxOan4zgwd6tz4aPd3dIdp7jQQk9qDPbH5GTwyvmKLO3NiL-eqRtKS8KF17nrtrvFr25_vmpJBlnlTK-sVUMvTru6CCsK0BajpdLuwlwJLZkmH7GyLUW/s320/rspec.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Você está lá todo feliz e contente codificando. Tudo vai bem até que, sem motivo aparente, seus testes automatizados começam a terminar em erros. Classes não alteradas e métodos que funcionavam, agora com erros inexplicáveis tomam a cena do momento.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Depois de muito pesquisar e testar, eis que me lembro do spring.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
O Spring é um pré carregador de aplicações que visa dar boa performance ao desenvolvimento. Iniciar um servidor Rails com ele fica bem rápido. Mas como ele pré carrega o código, inevitavelmente, caímos naquele problema de cache que tanto nos incomoda nos navegadores. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Ai não tem jeito. Quando estiver executando uma bateria de testes, se um comportamento estranho aparecer, antes de ficar louco tentando mil soluções, pare o spring antes.</div>
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-407330529804301162018-06-21T19:22:00.001-03:002018-06-22T11:57:00.318-03:00Meu Primeiro PC<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJFwhYwBYpjygAa7-Wj_CWX3xYu8DM20ygi50q8eDZPcWEJrMIKXqDZAbi5jWIoAy6iut4eGsYVuqHJbBjkfg7xtROAIpZrdbS32VSTdkq1gFf0Rgl8CFU3ARU398n7f1pedCMtIWJSgCR/s1600/386sx33_sx702.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="520" data-original-width="538" height="617" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJFwhYwBYpjygAa7-Wj_CWX3xYu8DM20ygi50q8eDZPcWEJrMIKXqDZAbi5jWIoAy6iut4eGsYVuqHJbBjkfg7xtROAIpZrdbS32VSTdkq1gFf0Rgl8CFU3ARU398n7f1pedCMtIWJSgCR/s640/386sx33_sx702.JPG" width="640" /></a></div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
Foi um Frankstein 386 SX 33 com 1MB de Ram. O HD era um Seagate de 20MB e dava pra fazer uma festa com essa máquina. A placa de vídeo era uma Cirrus Logic VGA e o monitor era um VGA bem padrão. E tinha também uma plaquinha som que nem lembro mais qual era.</div>
<div dir="ltr">
A máquina era mesmo um Frankstein, montado com partes de várias outras máquinas, acabei usando uma caixa de madeira como gabinete. Isso foi temporário, mas eu precisava da máquina funcionando. Foi com ela que desenvolvi meu primeiro programa. Isso foi lá no fim do ano de 1994.</div>
<div dir="ltr">
Pouco tempo depois, um cliente trocou o gabinete de sua máquina por um mais moderno e seu antigo acabou sobrando. Foi então que o Frank saiu da caixa.</div>
<div dir="ltr">
Nesse tempo eu usava DOS 6.22 com Windows 3.1. Primeiro, fiz um programa comercial em CA Clipper 5. Era um sistema para uma loja de artigos eletrônicos. </div>
<div dir="ltr">
Ainda em 1994 iniciei um outro programa para um rede de lojas de vestuário. Este era em Visual Basic com banco de dados Access. Foi um projeto bem suave e a entrega me deu fôlego suficiente para dar adeus aofrank e adquirir uma máquina melhor. Aí começou a era do 386 DX 40.</div>
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-79398304907117499572018-05-29T17:24:00.001-03:002018-05-29T17:24:49.795-03:00A Profecia da Crise<p dir="ltr">A Profecia da Crise</p>
<p dir="ltr">Seu João morava numa cidadezinha do interior e vendia cachorro quente. Todos os dias ele vendia, pelo menos, 100 unidades de seu delicioso e muito bem preparado hotdog. As salsichas e o pão, assim como os demais ingredientes, eram comprados de produtores locais, o que fomentava os negócios na região.</p>
<p dir="ltr">Certo dia, seu Filho Juca, que morava Capital veio visitar o pai. Ao ver, na casa de seu querido pai, o estoque de 100 Paes, salsichas e demais ingredientes para o dia seguinte, indagou ao empreendedor:</p>
<p dir="ltr">- Pai, não seria melhor comprar menos produtos para prolongar seus recursos? - Continuando: - A crise que assola o país não esta dando trégua e vários comerciantes estão falindo!</p>
<p dir="ltr">Como era apenas um homem do interior e, considerando-se desinformado em relação ao seu filho, estudado e cheio dos conhecimentos da Capital, seu João resolveu seguir os conselhos de seu filho Juca.</p>
<p dir="ltr">Aconteceu que ele cortou pela metade o investimento para o dia, reduzindo para apenas 50 unidades. Isso logo acabou fazendo com que metade de seus clientes, ao chegarem em seu estabelecimento, não pudessem mais comprar seus hotdogs simplesmente por já terem acabado, tendo que ir buscar outras opções.</p>
<p dir="ltr">Estes mesmos clientes, depois de uma ou duas vezes mal sucedidas, deixaram de ir tentar comprar o cachorro quente e nunca mais voltaram.</p>
<p dir="ltr">Vendo que o movimento havia reduzido drasticamente, Seu João, cortou ainda mais o orçamento. E mais clientes passaram a ficar sem o produto. Até que por fim, Seu Joao foi obrigado a fechar seu estabelecimento por não conseguir mais pagar suas contas. O que gerou um efeito em cascata: O produtor da salsicha, teve que demitir funcionários, pois perdera a venda de 700 unidades semanais. O mesmo aconteceu com a padaria e com os demais produtores.</p>
<p dir="ltr">Num dia triste para Seu João, eis que Juca liga para o pai, que, desanimado comenta com o filho:</p>
<p dir="ltr">- A crise está tremenda! Fechou quase tudo por aqui.</p>
<p dir="ltr">A Profecia havia se auto realizado.</p>
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-38616021412359553442018-04-25T23:54:00.001-03:002018-05-29T17:25:56.267-03:00Meu primeiro e-mailO primeiro e-mail a gente nunca esquece! Eu não esqueço. E tive o primeiro e-mail na BBS e na Internet!<br />
<br />
O da Internet foi uma emoção! Era tudo novidade! Navegador, cliente de e-mail, HTTP e tudo mais! Rodava nesse tempo Windows 3.1 num 386 DX 40 com possantes 4 MB de RAM! Tinha um HD Western Digital de 80 MB, com uma placa de vídeo Trident TVGA 8900 ISA 16 Bits! Eu tinha uma ótima máquina! E já tinha o desejado Fax/Modem!<br />
<br />
Enviar Fax eu nunca fiz em máquina minha. Interessava mesmo era a conexão remota. Era comum os amigos ligarem um para o outro e conectar para jogar o "online" que tinha naquele tempo. Joguei muito Quake e Duke Nuken assim.<br />
<br />
E sempre que podia conectava numa BBS. Usei várias! Uma das primeiras que usei foi a Painet e Matrix. mas também usei muito Infolink, Mandic e outras. Começou nesse tempo a vender revistas com CD-ROM que tinha com kit de acesso gratis por 30 dias. Se formou um verdadeiro "mercado negro" de CD-ROMs de kit de acesso, senhas e logins. Não é que fosse vendido. Mas todo mundo tinha medo de que pudesse dar algum problema. Era tudo novidade e ainda não existiam os PowerPoints nem HowTos do Youtube. Poucos profissionais, inclusive, sabiam alguma coisa.<br />
<br />
Nesse tempo meu forte era justamente hardware e redes. Eu programava, mas só o que me interessava e não necessariamente remunerado. Eu gostava muito de vasculhar o Sistema Operacional, entender como funcionava e criar minhas ferramentas. E o Windows rodava em cima do DOS. Era DOS 5 e a gente já olhava com bons olhos pro DOS 6, que prometia até expandir o espaço em disco. Depois ninguém gostou do DoubleSpace, que basicamente, gerava um arquivão com todos os seus arquivos e tudo mais nele e descompactava em real time, conforme fosse necessário. Um belo freio, se o quesito é performance. E numa máquina com 40 Mhz, o que se mais quer, é performance.<br />
<br />
Ai a Painet anunciou que iria fazer um acesso beta de Internet, junto com outras BBS. Os caras estão saltando para o próximo andar e eu me agarrei neles e fui. Lembro que cheguei em casa todo ofegante, já quase caindo por cima do computador e já colocando o CD-ROM no drive e contando os minutos para que o sistema estivesse carregado.<br />
<br />
Dai rodei o programa de instalação fui apresentado a um programa chamado Trunmpet. Que fazia a discagem e depois configurava e acionava a rede TCP/IP. Ah, como era gratificante e consolador ouvir o tom de discagem e em seguida o tom de conexão. Hoje não tem mais isso. Ficou mais simples. Igual beber água de côco engarrafada.<br />
<br />
Mas enfim, conectou! Uhu! Abri então o Mosaic e descobri em pouco tempo que havia o Netscape. Daí cheguei no Eudora e Booom! Eu tinha um e-mail. Era do MailCity. Cheguei a achar que o usaria para sempre! Por 10 bons anos tive aquela conta de e-mail. Até que o serviço foi comprado pelo Lycos. :-/<br />
<br />
Ai, legal! Eu tinha um e-mail. Manero! Mas eu tinha que ver funcionando! Já sabia como era o serviço de e-mail das soluções corporativas da Novell e do serviço Exchange da Microsoft. Mas aquele era online de verdade!<br />
<br />
Então desconectei e liguei para um amigo. Passei os dados de conexão para ele mas não adiantou. Ele não tinha o kit. Então, lá fui eu até sua casa levar-lhe o CD-ROM. Voltei pra casa enquanto ele instalava tudo e criava o seu e-mail. Quando cheguei e conectei, estava lá! O meu primeiro e-mail. Estava escrita a pergunta: "Funcionou?"<br />
Não tinha assunto, nem nada mais. Apenas a pergunta. Que respondi com um caloroso "Sim! Funciona!" Nos dias, semanas e meses seguintes, eu ficava todo ansioso por chegar meu e-mail e ver se havia recebido algo. Até inventarem o SPAM.<br />
<br />
Tudo que nos acontece fica entrelaçado em diversos outros acontecimentos e fatos curiosos. Meus "causos" sempre tem muitos detalhes e relacionamentos, porque sempre envolviam várias pessoas em torno de tecnologia, astronomia, filosofia e outros temas de "maluco".<br />
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-90591748308456982102018-02-01T17:31:00.002-02:002018-02-01T17:31:39.205-02:00Jquery Image Upload PreviewPequeno código para fazer upload com pré-visualização de imagem.<br />
Código completo disponível no CodePen: <a href="https://codepen.io/fernandokosh/pen/wyKjRR">https://codepen.io/fernandokosh/pen/wyKjRR</a><br />
<br />
HTML:<br />
<br />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script><br />
<body><br />
<form id="form1" runat="server"><br />
<input type='file' id="file-input" /><br />
<div id='img_contain'><br />
<img id="image-preview" align='middle'src="http://www.clker.com/cliparts/c/W/h/n/P/W/generic-image-file-icon-hi.png" alt="your image" title=''/><br />
</div><br />
</form><br />
</body><br />
<br />
CSS:<br />
<br />
body{<br />
background-color:#add8e6;<br />
}<br />
#img_contain{<br />
border:1px solid grey;<br />
margin-top:10px;<br />
width:520px;<br />
}<br />
#file-input{<br />
margin-left:7px;<br />
padding:10px;<br />
background-color:gray;<br />
}<br />
#image-preview{<br />
height:320px;<br />
width:auto;<br />
display:block;<br />
margin-left: auto;<br />
margin-right: auto;<br />
padding:5px;<br />
}<br />
<br />
JQuery:<br />
<br />
function readURL(input) {<br />
if (input.files && input.files[0]) {<br />
var reader = new FileReader();<br />
reader.onload = function(e) {<br />
$('#image-preview').attr('src', e.target.result);<br />
$('#image-preview').hide();<br />
$('#image-preview').fadeIn(650);<br />
}<br />
reader.readAsDataURL(input.files[0]);<br />
}<br />
}<br />
<br />
$("#file-input").change(function() {<br />
readURL(this);<br />
});<br />
<div>
<br /></div>
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-65137895955707369882017-12-26T11:06:00.003-02:002017-12-26T11:07:29.843-02:00SALVE O BITCOIN! Diga não à criminalização do Bitcoin no Brasil.<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl4omkWRwz3-6cMbcc1lVEfAhN_BhpnYqAjQsESB87slxCfSTluAxtNn2NX47Iak3z1EDDW_vYnt4uLxwNXObTFXYE07SAUo8yJHpePJ88AzKFfAssbZ69uYMzGmxqun44GuFYr3S7pbAy/s1600/ajude-o-bitcoin.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="800" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl4omkWRwz3-6cMbcc1lVEfAhN_BhpnYqAjQsESB87slxCfSTluAxtNn2NX47Iak3z1EDDW_vYnt4uLxwNXObTFXYE07SAUo8yJHpePJ88AzKFfAssbZ69uYMzGmxqun44GuFYr3S7pbAy/s400/ajude-o-bitcoin.jpg" width="400" /></a></div>
<br />
<br />
Em tramitação no Congresso Nacional, o Projeto de Lei 2303/2015 inicialmente buscou trazer regulamentação para o uso das Moedas Digitais, ou Criptomoedas, como conhecidas popularmente.<br />
<br />
De autoria do Deputado Aureo (SD/RJ) e sob relatoria do Deputado Expedito Netto (PSD/RO), o texto original redigido no ano de 2015 buscou incluir as moedas virtuais e programas de milhagem aéreas na definição de "arranjos de pagamento" da Lei 12.865/2013, para que fiquem sob a supervisão do Banco Central do Brasil.<br />
<br />
Mobilize-se conosco e ajude a causa!<br />
<br />
É rápido e requer apenas um clique.<br />
<br />
Acesse:<br />
<br />
https://www.change.org/p/salve-o-bitcoin-diga-n%C3%A3o-%C3%A0-criminaliza%C3%A7%C3%A3o-do-bitcoin-no-brasil/nftexp/nafta_fb_no_share_image/control/21771560?utm_content=nafta_fb_no_share_image%3Acontrol&recruiter=21771560&utm_source=share_petition&utm_medium=facebook&utm_campaign=autopublish&utm_term=psf_combo_share_message.combo_new_control_progress_110217winners<br />
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-30236874604160836012017-12-12T16:07:00.000-02:002017-12-15T16:17:15.924-02:00Neutralidade da rede: saiba o que é e como isso irá afetar você.<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.7); font-family: "Source Sans Pro", Helvetica, Arial, sans-serif, "Hiragino Kaku Gothic Pro", Meiryo, "Hiragino Sans GB W3", "Noto Naskh Arabic", "Droid Arabic Naskh", "Geeza Pro", "Simplified Arabic", "Noto Sans Thai", Thonburi, Dokchampa, "Droid Sans Thai", "Droid Sans Fallback", -apple-system, ".SFNSDisplay-Regular", "Heiti SC", "Microsoft Yahei", "Segoe UI"; font-size: 17px; line-height: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
A Comissão Federal de Comunicações dos Estados Unidos extinguiu o princípio de neutralidade da rede no país, saiba no que essa medida que SOMENTE beneficia grandes empresas de telecomunicações, irá afetar sua vida.</div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.7); font-family: "Source Sans Pro", Helvetica, Arial, sans-serif, "Hiragino Kaku Gothic Pro", Meiryo, "Hiragino Sans GB W3", "Noto Naskh Arabic", "Droid Arabic Naskh", "Geeza Pro", "Simplified Arabic", "Noto Sans Thai", Thonburi, Dokchampa, "Droid Sans Thai", "Droid Sans Fallback", -apple-system, ".SFNSDisplay-Regular", "Heiti SC", "Microsoft Yahei", "Segoe UI"; font-size: 17px; line-height: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
<br style="box-sizing: inherit;" /></div>
<div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: inherit; color: rgba(0, 0, 0, 0.7); font-family: "Source Sans Pro", Helvetica, Arial, sans-serif, "Hiragino Kaku Gothic Pro", Meiryo, "Hiragino Sans GB W3", "Noto Naskh Arabic", "Droid Arabic Naskh", "Geeza Pro", "Simplified Arabic", "Noto Sans Thai", Thonburi, Dokchampa, "Droid Sans Thai", "Droid Sans Fallback", -apple-system, ".SFNSDisplay-Regular", "Heiti SC", "Microsoft Yahei", "Segoe UI"; font-size: 17px; line-height: 20px; outline: 0px; padding: 0px; vertical-align: baseline;">
<a href="http://revistagalileu.globo.com/Tecnologia/noticia/2017/12/neutralidade-da-rede-saiba-o-que-e-e-como-isso-influencia-internet.html">http://revistagalileu.globo.com/Tecnologia/noticia/2017/12/neutralidade-da-rede-saiba-o-que-e-e-como-isso-influencia-internet.html</a></div>
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-10576798144739767222017-11-10T13:10:00.000-02:002018-01-03T13:11:29.251-02:00Perdi o domínioRalei para conseguir um certo nome de domínio. Esperei anos para tê-lo. Ai finalmente consegui. Fiquei muito feliz! Em êxtase, melhor dizendo.<br />
Só que ai chegou a época de renovar e, eis que foi esquecido. Ignorado. Este e outro domínio muito importante para mim, foram perdidos. Nunca mais deixo isso sob responsabilidade de ninguém!<br />
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-24870852113241479592016-04-11T09:00:00.000-03:002017-12-15T16:16:48.908-02:00Somos Deuses neste planetaNão existem pessoas más. Existem pessoas doentes e confusas.<br />
Não existem pessoas burras. Existem pessoas preguiçosas e desinsteressadas.<br />
Não existem dificuldades. Existem oportunidades de auto superação.<br />
Somos Deuses neste planeta. Explique ao chipanze o que é um avião, mostre seu peso e peça ele para explicar como aquilo pode voar e fará com que ele invente o conceito da religião.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-47497444717320166722014-03-05T16:09:00.000-03:002017-12-15T16:15:39.379-02:00Campo username e campo senha no mesmo scriptEste foi um pedido no mínimo estranho: Uma pessoa me procurou e me perguntou se era possível ter o campo username e campo senha no mesmo script. Claro que não entendi de primeira o que a pessoa queria de verdade. Mas após um breve período de explicações, entendi que o que a pessoa queria de fato era ter o login e a senha no mesmo campo, separados por virgula ou qualquer outro sinal. Quando perguntei o motivo de não usar 2 campos, a resposta foi que "o formulário ficaria feio com 2 campos.<br />
<br />
Bizarra a ideia de ter que treinar o usuário em função de uma interface. Ainda mais nos tempos de hoje, onde usabilidade é tudo! Mas beleza! O cliente mandou, nós fazemos. Não é assim, Devs?<br />
<br />
Tarefa concluída e publicada com sucesso.<br />
<br />
E não deu outra: Depois de devidamente implementado e publicado o formulário e, sem ter um cadastro concluído sequer, a pessoa me procurou optando por ter os 2 campos.<br />
<br />
Um designer de UX experiente faz falta. E muita!Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-29572978700001021572013-02-05T17:21:00.000-02:002017-12-15T02:12:23.128-02:00Pausando processos no LinuxUma dica rápida. Estava executando um rsync e precisei parar.<br />
Com o comando CTRL+Z no bash, o programa executado entra em pausa, liberando o terminal. Para retornar ao programa, use o comando fg. Ou bg, se deseja colocar o programa em segundo plano. fg sempre o trará para execução em primeiro plano, ocupando novamente o terminal.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-19873472121997402672012-11-14T02:02:00.000-02:002017-12-15T02:07:38.700-02:00Atualizando Ubuntu 10.04 LTS para 11.04 LTSNo post <a href="http://fernandokosh.blogspot.com/2010/12/atualizando-ubuntu-804-lts-para-1004.html">Atualizando Ubuntu 8.04 LTS para 10.04 LTS</a>, de 19 de dezembro de 2010, atualizei um servidor rodando Ubuntu 8.04 para 10.04. Hoje preciso atualizar um rodando o sistema 10.04 para 11.04. Quero ver se os mesmos passos servem para esta atualização e se terei problemas maiores.<br />
<br />
<b>Antes de iniciar</b><br />
<br />
Me tornei superusuário logo de uma vez. <b>Muito cuidado executando todos os comandos diretamente com a entidade root</b>:<br />
<br />
kosh@ns1:~$ sudo -i<br />
<br />
Verifiquei a distribuição instalada:<br />
<br />
<br />
root@ns1:~# lsb_release -a<br />
No LSB modules are available.<br />
Distributor ID: Ubuntu<br />
Description: Ubuntu 10.04.3 LTS<br />
Release: 10.04<br />
Codename: lucid<br />
<br />
<br />
<br />
<b>Passos para atualizar</b><br />
<br />
1) Como era uma operaçãos endo executada por SSH, utilizei uma sessão do screen, utilizando o byobu, uma inerface muito bacana para o screen. Para instalá-lo, caso ainda não o tenha em seu sistema, execute:<br />
<br />
$ apt-get install byobu<br />
<br />
Então, inicie o byobu:<br />
<br />
$ byobu<br />
<br />
<br />
2) Me certifiquei de que o sistema estava atualizado:<br />
<br />
$ apt-get update<br />
$ apt-get upgrade<br />
<br />
<br />
<br />
<br />
3) Instalei o update-manager:<br />
<br />
$ apt-get install update-manager-core<br />
<br />
<br />
<br />Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-14467273189848219262012-09-02T06:32:00.000-03:002017-12-15T02:01:06.138-02:00Qualquer linguagem faz qualquer coisa?Acho que o que dita a tecnologia a ser usada é a tarefa, mas qualquer linguagem faz qualquer programa. A questão é o que gera o melhor alguma coisa que importa naquele momento. Se o que se precisa é de velocidade, um framework traz essa velocidade. Se for performance o caso, um framework pode ser um problema por carregar toda uma gama de funções e bibliotecas que não necessariamente são usadas. Para aplicações web de baixo orçamento e demanda, tenho usado com sucesso Ruby on Rails 5 com MongoDB e Lavarel com MySQL ou MariaDB, sempre me mantendo o mais próximo possível do KISS. Acho que qualquer tecnologia serve para qualquer empresa. Com os filtros certos, chega-se a melhor opção.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-65433294105540657092012-06-02T17:00:00.000-03:002017-12-15T01:58:46.171-02:00Numa palestra do Herique Bastos no Dev in Rio 2010, ele falou sobre uma pessoa com 70 drafts em seu blog. Não tenho isso tudo, mas vou publicar tudo como está. Vou revisando devagar.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-72695033078191502002012-05-22T01:55:00.000-03:002017-12-15T01:56:32.885-02:00Um dos melhores suportes que já presteiUm problema simples de login num final de dia, mas que apenas limpar os dados no navegador da cliente não resolveu. Tentei orientar a senhora de diversas formas, para conduzir pequenos testes a fim de determinar o que poderia ser, mas ela tinha pouco tempo e conhecimento, a conexão era discada e ela tinha que fazer o login na manhã seguinte para validar recebimentos, ou havia um atraso no processamento. Este era um sistema de comercio eletrônico feito em ASP no início dos anos 2000. Ofereci a cliente a ideia de instalar o VNC e por ele eu resolver o que quer que fosse, contando com ajuda dela para intervenções locais. Depois de umas 2 horas e diversas tentativas, resolvi desistalando uma atualização do Windows 98 que gerava uma falha no Internet Explorer. Somente ele podia ser usado, porque o sistema usava um controle ActiveX. Saí da empresa ás 23h com a cliente feliz e contente.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-12916407916391001932012-03-18T21:28:00.000-03:002012-03-18T21:28:02.607-03:007 meses sem postÉ impressionante como o tempo passa rápido. Do nada, já são quase 7 meses sem um único post sequer. Nem eu acredito. Tudo bem que não sou o cara das postagens diárias nem semanais. Mas 7 meses é muito tempo.<br />
<br />
O caso é que, o blog acaba sendo muito útil ao dono por conter informações já compiladas e aprovadas. E como tem este tempo todo sem postar nada, o prejuízo é ter que sair buscando coisas que poderiam estar aqui. Além deste, tem ainda o não colaborar com uma comunidade que muito me ajuda. Cada post que deixei de fazer sobre Linux, Rails ou qualquer ou tema, certamente deixou muitas pessoas sem respostas para questões que eu domino fácil. Não que meu conhecimento seja indispensável, mas tem teu seu valor.<br />
<br />
De agora em diante vou escrever mais, Eu próprio acabo sentido falta disto. É ruim por não compartilhar, é ruim por não forçar a criatividade, não gera desafios e é mais do que muito ruim para a auto-promoção. Imagine você acessando o blog de um cara como eu é que o último post tem quase 1 ano. Isto queima o filme.<br />
<br />
Pelo menos eu consegui durante este tempo juntar algum material que, depois de editado e revisado dará um bom conteúdo aqui. Dentre eles, tenho dois mini tutoriais que pretendo enriquecer sobre como instalar Ruby on Rails em produção com o Fusion Passenger e/ou Nginx, com o Ruby instalado no sistema com um pack bom de gems e permitindo a instalação de gems na pasta do usuário. Isto pode não parecer nada, mas vai procurar informações de como fazer o Rails rodar em um servidor de hospedagem compartilhada cedendo acesso SSH. Nem em Japonês tem um bom, completo e rico.<br />
<br />
Estes serão os próximos posts: Criando um host de com hospedagem compartilhada Ruby on Rails. Um com Apache e outro com Nginx. Só não sei ainda se faço apenas um longo ou se divido em partes.<br />
<br />
Esta semana ainda estará aqui.<br />
<br />
;-)Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com1tag:blogger.com,1999:blog-8320176658173871026.post-58468764401877911422011-08-15T12:28:00.004-03:002011-08-15T12:43:24.422-03:00Como foi o Rally on RailsComeçamos bem, muito bem. Tínhamos tudo para ter uma boa participação na competição, até que vieram os problemas:<br />
<br />
<div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRFdofejYmD58pDNCVp5u1oFuFokDAkTHuACC_d8HYi6w5sqUoeU3FGLUnuwBaJVoj6pR1VPvHroL_b0AavqcgL1rQzR7g0shE68FiMfHfygZmNxVatHx-xe8Q9CZTJgzFnzQN7C1doEZ/s1600/dumuzzi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZRFdofejYmD58pDNCVp5u1oFuFokDAkTHuACC_d8HYi6w5sqUoeU3FGLUnuwBaJVoj6pR1VPvHroL_b0AavqcgL1rQzR7g0shE68FiMfHfygZmNxVatHx-xe8Q9CZTJgzFnzQN7C1doEZ/s1600/dumuzzi.jpg" /></a></div><br />
Tudo começo na sexta, dia 12, quando tive que passar o dia com minha esposa e família, no Hospital <a href="http://www.unirio.br/hugg/">Universitário Gaffrée e Guinle</a>, da Unirio, por questões relacionadas à gravidez e ao bebê. No final do dia, voltei para casa. Neste mesmo dia, o Vagner, que passa por problemas de saúde, alergias e outras ingrisias, também faltou. O Igor, ficou na empresa normalmente, até a noite, quando a Viviane foi encontrar-se com ele. O plano era eles levarem para a casa do Vagner os 2 notebooks da empresa, e tocarem de lá o projeto, junto comigo, que chegaria depois. Foi quando tudo foi se complicando.<br />
<br />
A Antonieta não estava bem, passava mal e, temendo por sua integridade e do bebê, não pude ir encontrar com a equipe baseada na residência do Vagner, que estava bem. Fiquei trabalhando remotamente com eles enquanto prestava assistência em casa. Algumas horas depois que a competição já havia se iniciado, tive que sair do computador de vez, deixando-os tocando o projeto. A coisa se complicou mais ainda quando descobrimos que estávamos com metade do apartamento sem energia elétrica. Achava eu que o disjuntor havia torrado por causa do chuveiro. Agora tínhamos que aquecer a água no fogão para a Antonieta tomar banho de balde. :-( <br />
<br />
No sábado pela manhã, já tínhamos o servidor cedido pela Speedy Rails, pronto, a aplicação base fuuncional e o layout quase pronto. Em casa, eu estava agora envolvido com várias tarefas de preparação para o parto, que nos parecia iminente. De arrumação da casa até passar as roupas do bebê, entre outras, enquanto tentava resolver o problema elétrico que, logo descobri que havia sido causado por técnicos da Light. Segundo o porteiro, eles haviam estado no prédio para efetuar o desligamento do fornecimento de energia de um vizinho do segundo andar. Nos testes que fiz, constatei que uma das duas fases que abastecem o apartamento estava desligada. Liguei então para a Light, ainda cedo, na esperança de que tudo pudesse ser resolvido logo. O atendimento gerou o<b> protocolo número 43767616</b>.<br />
<br />
No início da tarde me liga o Vagner, dizendo que estava indo ao hospital com seu primo, pois, segundo ele, havia piorado bastante. A competição agora estava nas mãos do Igor e da Viviane. Eu não podia aplicar quase nada de tempo, mesmo remotamente, e o Vagner só voltaria no início da noite. Chegamos a falar em cancelar a competição, mas os Jedis restantes, bravamente, assumiram a missão e continuaram firmes. Confesso que isto tudo junto, mais a falta de energia elétrica, mil e uma tarefas por fazer para a chegada do Tales (o bebê) e um grande cansaço, me desanimaram um pouco. Mas não havia como desistir, não havia como deixar para outro dia. Era fazer ou fazer. Ainda consegui fazer algo no sábado, mas foi bem pouco mesmo. O Igor e a Vivi levaram tudo praticamente sozinhos noite a dentro.<br />
<br />
No domingo, o Vagner estava melhor e voltou para a competição. Em casa, as coisas agora estavam melhores. A Antonieta sentia-se mais segura por ter ido encontrar com os médicos numa consulta e uma pequena bateria de exames. Infelizmente, como persistia ainda o problema elétrico, não pude ir com ela, que teve que ir sozinha com nossa filha Elisa de 6 anos. O interessante, foram duas ligações, uma no sábado a noite, outra no domingo logo cedo, da Central de Relacionamento com o Cliente da Light, querendo saber se o problema estava solucionado. Fiquei pensado que eles imaginaram que o problema fosse interno, que eu não soubesse o que estava falando quando fiz a reclamação e pedido de reparo de emergência. Na segunda ligação, tive que falar com a pessoa que me ligou que, por um passe de mágica, o problema não seria resolvido sem a presença de técnicos. Umas duas horas depois, os técnicos da Light chegaram ao local. O problema sabem qual era? O "fio estava solto" quadro geral de força, que fica lacrado e fortemente protegido. Em 5 minutos resolveram o caso. Coisa que eu faria se tivesse acesso à dita caixa de força. Praticamente 2 dias de problemas e transtornos diversos em casa, com a esposa grávida, sem poder tomar banho gelado, porque os técnicos da Light não sabem efetuar um desligamento sem que interfira nos demais apartamentos e, por total descaso da centra de atendimento, que me passou a impressão de esperarem o problema se resolver, como se fosse por minha culpa.<br />
<br />
É foda ser tratado como se o tempo todo você seja um imbecil que não sabe o que é barra de título no navegador web, que não sabe a diferença entre uma chave de fendas e um martelo, ou que não sabe usar uma chave de testes e identificar se o problema é interno ou externo. Mas bem, foi resolvido e, decidirei depois se processo esta empresa, que nos últimos anos, tinha como boa e séria.<br />
<br />
A solução do problema elétrico foi a boa para eu retornar ao Rally, mas agora restavam apenas 5 horas de competição. Até pensei em ir para a casa do Vagner, mas todos concordaram que o melhor era eu ficar mesmo remoto. Os três Jedis lá estava exaustos e toda equipe com uma carga de stress bem grande, mas conseguimos fazer, digamos que 60% do que pretendíamos em tempo de fechar bonito a competição. A aplicação, contudo, não chegou a ficar exatamente funcional, com problemas de interface, traduções por fazer e outras coisas mais. Mas todos ficamos com a sensação de missão cumprida.<br />
<br />
Independente de qualquer coisa, nós participamos da competição, cada um de nós deu o máximo de si e, quando outros desistiriam, nós continuamos. Diversas equipes nem chegaram a cadastrar seus aplicativos, mas nós estávamos lá.<br />
<br />
No final do dia, a Viviane e o Igor ainda foram lá em casa, para trazer meu notebook e para a ela poder ainda trabalhar em um projeto seu. Um site em Wordpress que deveria entregar hoje.<br />
<br />
O mérito final é do <a href="http://twitter.com/igorlanes">Igor</a>, da <a href="http://twitter.com/vivianenonato">Viviane</a> e do <a href="http://twitter.com/vagnerzampieri">Vagner</a>.<b> </b><br />
<b>Estes 3 são realmente Jedis</b>.<br />
Ninja é fraco!<br />
Ele usa bombinhas de fumaça para fugir.<br />
A Equipe Cidadelas Jedis, até morrendo, se mantém firme.<br />
<br />
E o <a href="http://dumuzzi.com/">Dumuzzi</a> não ficou mal não, ficou um tanto incompleto, mas não está feio e ainda será concluído. Vamos seguir com nossos planos e, em breve teremos nosso serviço de monitoramento operacional.<br />
<br />
Meus agradecimentos à todos da Equipe <a href="http://rallyonrails.com/teams/57">Cidadelas Jedis</a>.<br />
<br />
E vem ai o <a href="http://railsrumble.com/">Rails Rumble</a>, estaremos lá.<br />
<br />
Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-24364050604093870142011-08-12T22:48:00.002-03:002011-08-13T01:06:15.820-03:00Começou o Rally on RailsA Equipe <a href="http://rallyonrails.com/teams/57">Cidadelas Jedis</a> ja está na corrida. Nosso App, como dito no post anterior é o Dumuzzi, um serviço de monitoramento de hosts e serviços, que logo estará acessível no VPS cedido pela <a href="http://speedyrails.com/">Speed Rails</a> para a competição, nos endereços <a href="http://65.39.226.150/">http://65.39.226.150/</a> e <a href="http://rally.dumuzzi.com/">http://rally.dumuzzi.com/</a>.<br />
<br />
Devido a problemas relacionados a gravidez de minha esposa, tive que ficar de casa, trabalhando remotamente com o resto da Equipe, que está baseada na casa do Vagner.<br />
<br />
Até agora está indo tudo bem, nosso treinamento para trabalho remoto está dando resultados. :-D<br />
<br />
Torçam por nós, que somos guiados pela força.Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-16718736750491852011-08-11T19:18:00.002-03:002011-08-11T19:26:48.580-03:00Dumuzzi Hosts Monitor e o Rally on RailsNos dias 13 e 15 de agosto acontece o <a href="http://rallyonrails.com/">Rally on Rails</a>, evento ao estilo <a href="http://railsrumble.com/">Rails Rumble</a> no qual os participantes tem 48 horas para desenvolver uma aplicação Ruby on Rails completa. A diferença, é que o Rally é somente para desenvolvedores naturais da zona a qual chamam de América Latina, ou sub-américa da América do Norte.<br />
<br />
Questões politico-sócio-geográficas à parte, o evento é patrocinado por empresas como <a href="http://github.com/">Github</a>,<a href="http://www.crowdint.com/"> Crowd Interactive</a> e <a href="http://oreilly.com/">O'Reilly</a>, além de comunidades como <a href="http://rails.mx/">Rails México</a> e <a href="http://codersvenezuela.com/">Coders Venezuela</a>, entre outras. A lista completa de patrocinadores pode ser vista na <a href="http://rallyonrails.com/sponsors">página específica</a> no site da competição.<br />
<br />
A Equipe Cidadelas está cadastrada como a número 57, com o nome <a href="http://rallyonrails.com/teams/57">Cidadelas Jedis</a> e planejamos desenvolver o <b><a href="http://dumuzzi.com/">Dumuzzi</a></b>, um sistema de monitoramento de hosts e serviços, que atuará de forma distribuída, rodando em pelo menos 3 continentes, inicialmente contando com 5 máquinas no Array.<br />
<br />
O Dumuzzi é a evolução de um antigo protótipo que, inicialmente, era chamado de rCluster Monitor, já citado nos posts <a href="http://fernandokosh.blogspot.com/2009/11/rcluster-monitor-start_09.html">rCluster Monitor - ./start</a> e <a href="http://fernandokosh.blogspot.com/2010/02/o-que-fazer-quando-unica-opcao-e-mudar.html">O que fazer quando a única opção é mudar e cliente opta pela não-mudança</a>. O projeto original, apesar de funcionar bem com testes de Ping e HTTP, nunca saiu do protótipo "toscogildo", mas desta vez se tornará um produto funcional, desenvolvido com Ruby 1.9.2 e Rails 3.1.0.rc5, rodará no domínio <a href="http://dumuzzi.com/">dumuzzi.com</a>, será gratuito e de código aberto.<br />
<br />
<a href="http://pt.wikipedia.org/wiki/Dumuzi">Dumuzzi</a> é o Filho fiel, deus sumério, consorte de Inanna, irmão de Geshtin-anna, rei-pastor de Uruk, guardião do portal dos céus de Anu, junto com Gishzida, e pescador de Ku'ara.<br />
<br />
Um serviço de monitoramento eficiente é, de fato, o Guardião do Portal dos Céus de um SysAdmin, já que, tendo certeza de que seus servidores estão online, ele pode dormir tranquilo, ir ao horaextra, dojo e demais eventos e atividades de gente normal, motivo que nos levou à selecionar o nome. :-D<br />
<br />
A equipe é formada por <a href="http://twitter.com/vagnerzampieri">Vagner Zampieri</a>, <a href="http://twitter.com/igorlanes">Igor Lanes</a>, <a href="http://twitter.com/vivianenonato">Viviane Nonato</a> e <a href="http://twitter.com/fernandokosh">Fernando Kosh</a>, eu.<br />
<br />
Na <a href="http://cidadelas.com.br/">Cidadelas</a> somos guiados pela força, que nos mantém firmes e seguros em todas as nossas missões. Que venha o evento, vamos desenvolver nosso aplicativo confiantes de uma boa colocação.<br />
<br />
Que a força esteja com todos nós!Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com0tag:blogger.com,1999:blog-8320176658173871026.post-57258960715221449802011-07-08T13:05:00.002-03:002011-07-08T13:05:22.876-03:00rake db:migrate - couldn't parse YAML<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Colocando um projeto em Rails 3.1 em produção, tive um problema novo, que me custou uma meia hora para resolver:</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> $ rake db:migrate RAILS_ENV=production</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> rake aborted!</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> couldn't parse YAML at line 20 column 16</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> Tasks: TOP => db:migrate => environment</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> (See full trace by running task with --trace)</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Doideira! Nunca tinha visto isso. Numa busca mais ou menos rápida, encontrei <a href="http://stackoverflow.com/questions/4980877/rails-error-couldnt-parse-yaml">este tópico no StackOverFlow</a>, no qual a resposta do <a href="http://stackoverflow.com/users/616388/vicvega">vicvega</a> resolveu meu problema. Ele diz para adicionar duas linhas ao config/boot.rb:</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> require 'yaml'</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> YAML::ENGINE.yamler= 'syck'</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Em desenvolvimento não percebi o problema. Então, fiz assim:</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">if ENV['RAILS_ENV'] == 'production'</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> require 'yaml'</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> YAML::ENGINE.yamler= 'syck'</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">end</div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">E ficou perfeito. Mas há outras causas prováveis para o problema. </div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">As versões em uso:</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> Rails 3.1.0.rc4</div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"> Rake 0.9.2</div></div>Fernando Koshhttp://www.blogger.com/profile/10981139124984272373noreply@blogger.com2