segunda-feira, 2 de novembro de 2009

Melhor gerador de Chave ÉVAR!

Me deparei com um código desse esses dias... achei demais e resolvi compartilhar =)

Select
    '11_XXX_KEY_ouviramdoipirangaasmargensplacidas_' ||    TRIM(MB.ASSINANTE_A)  || ''_deumpovoheroicoumbradoretumbante_KEY_XXX_11'' AS AUTENTICACAO

from
 tabela ...
 
Achei também alguns comentários do tipo: "AQUI COMEÇA A GAMBIARRA", "Alterado para funcionar as pressas", e por ai vai.

#MEDO


Demais!  

sábado, 31 de outubro de 2009

Upgrade Ubuntu 9.04 para o 9.10 - Problema Vídeo Intel

Bom...

esse vale a pena postar, depois do problemão que tive hoje para conseguir fazer o meu ubuntu voltar a funcionar depois do Upgrade para a nova versão.

Antes de mais nada, queria falar que apesar do problema, a nova versão está bem bacana, acho que vale a pena fazer o upgrade.

Bom, meu problema era que deposi do Upgrade a interface gráfica ficou muito lenta, mas muito mesmo, levava em torno de 20-30 segundos para e mudar de uma tela para outra. Se esse é o seu problema, acho que chegamos a solução. Ao menos para mim funcionou, mas vi pessoas falando que não funcionou para elas.

Meu computador é um Notebook Dell Inspiron 1525 com tudo intel onboard. E a essas placas Intel são bem conhecidas por incompatibilidade com linux, principalmente as de vídeo. Segue a configuração, caso queira comparar:

juliano@juliano-laptop:/$ lspci
00:00.0 Host bridge: Intel Corporation Mobile PM965/GM965/GL960 Memory Controller Hub (rev 0c)
00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
00:02.1 Display controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)
00:1a.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #5 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #2 (rev 02)
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 2 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801H (ICH8 Family) PCI Express Port 5 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801H (ICH8 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev f2)
00:1f.0 ISA bridge: Intel Corporation 82801HEM (ICH8M) LPC Interface Controller (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801H (ICH8 Family) SMBus Controller (rev 02)
02:09.0 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 05)
02:09.1 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 22)
02:09.2 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 12)
02:09.3 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 12)
09:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8040 PCI-E Fast Ethernet Controller (rev 12)
0b:00.0 Network controller: Broadcom Corporation BCM4312 802.11a/b/g (rev 01)

A solução é fazer o downgrade do Driver de Vídeo para a versão 2.4. Para créditos não vou reproduzir aqui, por isso Veja esse post aqui tem a solução completa

Bom, agora só falta a solução para o Som. Espero resolver esse rapido.

Abraços

segunda-feira, 12 de outubro de 2009

Ruby+Rails+MySQL+Windows

Buenas!
Este vai ser outro post daqules "coisas que ainda vou precisar, novamente".

Hoje, tive que, infelizmente, instalar RoR no windows aqui no trabalho, e como era de se esperar, não foi uma tarefa nada trivial.

Me bati bastante com a instalação Ruby1.8.6 + GEM + Rails 2.3.4 + MySQL 5.1, se esse é o seu caso, e você chegou nesse post através do google procurando por um erro ao rodar a aplicação com mysql por causa de uma DLL (libmySQL.dll), fique feliz, vc chegou a solução.

O erro que aparecia era algo assim:

!!! The bundled mysql.rb driver has been removed from Rails 2.2. 
Please install the mysql gem and try again: gem install mysql.
rake aborted!
126: The specified module could not be found.   - 
c:/ruby/lib/ruby/gems/1.8/gems/mysql-2.7.3-x86-mswin32/ext/mysql.so
 
(See full trace by running task with --trace)

Para dar crédito a pessoa de quem roubei li essas informações (http://www.meupost.com/2009/03/10/problema-do-rails-222-com-o-mysql-em-windows/), vou reproduzir seu post aqui, apenas para quando eu precisar novamente eu consiga achá-lo bem facilmente, e pra não correr o risco de seu site sair do ar =)

Resumindo, a resolução dos seus problemas é:

Mesmo que você tenha o MySQL5.1, você precisa copiar a DLL libmySQL.dll do MySQL5.0 e colar no diretório: %RUBY_HOME%\bin. Sim, mesmo que seja o 5.1, você precisará da LIB do 5.0.

Mas e agora tiu, onde eu encontro a DLL do 5.0, preciso baixar e instalar apenas para pegar a DLL? Calma, meu pequeno gafanhoto, aqui vai a URL:
http://instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll

Caso nada de certo, tente o InstantRails =)

Abraços!

terça-feira, 6 de outubro de 2009

Campo Número Decimal

Bom, esse post vai ser outro daqueles "coisas que ainda vou precisar, novamente"!

Esse script javascript serve para deixar o campo com uma máscara de campo decimal (ex: 99,00) conforme você vai digitando. Isso associado à CSS com text-align right, deixa bonitinho =)

Normalmente eu utilizo o plugin maskedinput para o jQuery, mas ele só trabalha com tamanhos fixos de campos, e por isso esse scritp abaixo:

Segue o script utilizado:


// Parametros: campo, separador_de_milhar, separador_decimal, evento
function maskCurrency(fld, milSep, decSep, e) {
var sep = 0;
var key = '';
var i = j = 0;
var len = len2 = 0;
var strCheck = '0123456789';
var aux = aux2 = '';
var whichCode = (window.Event) ? e.which : e.keyCode;
if (whichCode == 13 || whichCode == 8 || whichCode == 0) return true;
key = String.fromCharCode(whichCode);// Valor para o código da Chave
if (strCheck.indexOf(key) == -1) return false; // Chave inválida
len = fld.value.length;
for(i = 0; i < aux =" '';" len =" aux.length;" len ="=" value =" '';" len ="=" value =" '0'+" len ="=" value =" '0'+"> 2) {
aux2 = '';
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += milSep;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
fld.value = '';
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
fld.value += aux2.charAt(i);
fld.value += decSep + aux.substr(len - 2, len);
}
return false;
}

Quando quiser utilizar isso num campo, altere a tag alt com o valor monetario (ex: alt="monetario"), e utilize o seguinte script (em jquery) abaixo:


$(document).ready(function(){
$('input[alt="monetario"]')
.bind('keypress', function(e) { return maskCurrency(this, '', '.', e)})
.css("text-align", "right");
});


E apenas para constar, esse scriptzinho que quebra um galho também (self-explanatory):

function sonumeros(e) {
var whichCode = (window.Event) ? e.which : e.keyCode;
if( whichCode!=8 && whichCode!=0 && (whichCode<48>57)) {
return false;
}
}

Feliz aniversário Internet

Antes de mais nada, escrevi esse post, a mais de um mês, só estou postando agora, pq fiquei sem tempo, e também porque o google classificou meu blog como um blog de SPAM =) Nice! Talvez por causa da inatividade... merecido =)

Bom, esse é um post apenas para lembrar que a Internet fez mês passado (02/09) 40 anos. E muita evolução houve desde a primeira comunicação entre dois computadores, porém basicamente o que foi desenvolvido nos primórdios ainda são a base das redes de computadores hoje.

Veja um resumo de fatos marcantes na história da internet aqui (http://www1.folha.uol.com.br/folha/informatica/ult124u617940.shtml)

Vi um post no feed do HackaDay - http://hackaday.com/2009/09/02/internet-40th-birthday/ com 4 vídeos bem interessantes. Vale a pena assistir também.

Eu acredito que todas as pessoas que trabalham com informática DEVEM conhecer como funciona internet, roteamento, protocolos tcp/ip, e ter uma idéia das camadas OSI. Bom, um vídeo muito legal que acho que todos devem ver, que explica resumidamente como isso tudo funciona é o vídeo Warriors of the Net (http://www.warriorsofthe.net/movie.html ). Vi esse na facul, e sempre carrego comigo!

Thats all folks! Conhecer a história é muito importante =)

domingo, 23 de agosto de 2009

Ruby Gems on Ubuntu

Este post é apenas para informar (me lembrar) para não instalar o rubygems do repositório do ubuntu.

Existem outras coisas também que não são muito boas instalar do repositório do ubuntu, principalmente quando você quer/precisa da ultima versão, porque sempre é desatualizado.

Como não é sempre que instalamos todas as coisas novamente, eu não lembrava que o que vem no ubuntu é meio bugado, e que é melhor instalar o que está no site http://rubyforge.org/projects/rubygems/. O problema é que instalando direto do rep do ubuntu (via apt-get) ele não cria os links simbólicos para rails e qualquer outro gem que vc pedir pra ele instalar.

Então, baixe o pacote no site acima, descompacte e rode os seguintes comandos:
chmod 755 setup.rb
sudo ruby setup.rb


Pronto, ele instalará tudo certo, com apenas um porém. No meu caso instalei o gem1.8 e foi assim que ficou o link. Para apenas melhorar, execute o seguinte comando:
sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

E agora sim, tudo certo.
Acho que agora não esqueço mais disso.

Abraços.

terça-feira, 14 de julho de 2009

Chefe, precisamos de um novo Recurso

Hoje de manhã abro meus feeds e encontro um post indicado pelo Jeveaux, do Guilherme Chapiewski, vale a leitura. Este post me fez lembrar que queria a tempos já falar sobre isso, e também sobre liderança. Vou dar então meus centavos de contribuição.

Concordo em número, gênero e grau com o post do Guilherme, e ainda acredito que uma empresa que trata pessoas como recursos está fadada ao fracasso. Pode até não ser no aspecto contratual, jurídico, comercial, mas com certeza no aspecto de que a empresa ou entregará produtos/serviços de má qualidade, como perderá pessoas muito boas.

Quem nunca ouviu falar o seguinte:

"Ninguém é insubstituível" e ainda "Precisamos de um novo Recurso" ou algo "bla bla bla... Recurso para substituir um Recurso que saiu bla bla bla..."

Não sou tão radical ao ponto de achar que ouvir a palavra "recurso" me dá um "nó na barriga", porque muitas vezes as pessoas que dizem isso, apenas usam a palavra por que ela está na moda agora e não veem mal nisso. O que me preocupa, é uma equipe, uma pessoa, ser tratada como um recurso. Em uma linha de produção com um trabalho restrito, e totalmente guiado por regras e procedimentos é complicado você trocar um "recurso" e tudo continuar como antes, imagine em um ambiente de desenvolvimento de software, por exemplo, onde muitos aspectos devem ser levados em consideração e é impossível existir, e que o conhecimento em uma determinada tecnologia não diz muita coisa sobre o trabalho que a pessoa irá fazer. Com certeza trocar um "recurso" não é nada simples.

Sobre a frase, "Ninguém é insubstituível", eu acho uma puta asneira. Se analisarmos do ponto de vista do que precisa ser feito, eu até posso concordar que várias pessoas podem criar uma mesma coisa. Agora, você nunca terá o mesmo trabalho feito por pessoas diferentes. Cada pessoa possui toda uma bagagem de conhecimento técnico e de vida, e isso influencia diretamente no que uma pessoa faz. Então, se uma pessoa está fazendo um ótimo trabalho, e você quer que seu produto continue com a mesma qualidade e eficiência, você precisa manter essa pessoa, principalmente se ela tiver um perfil bom, abaixo falo mais sobre o perfil. Você pode conseguir trocar uma pessoa, por outra, e esta substituta, ou fará um trabalho melhor, ou um pior, ou um trabalho semelhante, mas nunca igual. É dificil compreeender, e/ou visualizar a tênue diferença entre isso, pois isso envolve muitas questões, inclusive culturais e históricas.

Para pincelar sobre o assunto, tome-se como contexto, a história da revolução industrial, e a invenção da linha de montagem de Ford. Depois disso J. W. Taylor, definiu um pouco melhor que deveria haver um investimento maior em pessoas, desde treinamento, até em uma possível participação dos lucros, transformando-se em estímulo. Porém, ainda assim, o modelo era meio engessado e tinha uma visão mecanisada do trabalho e processo. Este tipo de metodologia ainda vem sendo empregado, e tem-se notado que não tem muito sucesso. E se nos atentarmos aos estudos atuais, vê-se que um modelo dinâmico de administração e controle de processos, está substituindo modelos engessados e mecanistas, principalmente numa área onde não existe, e não se encaixa uma linha de montagem. Por isso afirma-se hoje, que uma "fabrica de software" não funciona e nunca funcionará em um modelo engessado. O desenvolvimento de software, principalmente, deve ser tratado como criação de projeto, e não como linha de produção.

Outra grande influência é o fato de que cada vez mais empresas tem capital aberto, e são "dominadas" por acionistas que querem um lucro rápido, e por isso, querem fazer e vender logo, e não analisam que isso acaba gerando muitos problemas. Ao invés de se investir um pouco mais em tempo e treinamento, e principalmente no real capital que são as pessoas na empresa, e isso com certeza gerará um excelente resultado, desde o desenvolvimento humano, como lucro monetário efetivo.

Contudo, muitos dos problemas que existem hoje neste aspecto, podem ser atribuidos a gerência da organização.

Nem sempre uma pessoa que não está indo muito bem em determinada função, é um mal profissional. Cabe ao líder identificar isso, e tentar readequar a função da pessoa. Esta, sentido-se mais confortável fazendo um trabalho do qual gosta, produzirá mais e melhor. Com isso, não quero dizer que todas as pessoas são bons profissionais, e apenas não fazem o que gostam. Existe sim, pessoas que simplesmente não tem o perfil. Eu gosto dessa palavra perfil, ela diz muito mais do que, se "essa pessoa sabe isso, é formada em tal coisa, ou não sabe aquilo, então não serve". O perfil determina se uma pessoa estará apta a fazer tal coisa, independente do conhecimento que ela já tem.

Usando de exemplo, aprender um instrumento musical, não importa o quanto uma pessoa estude e se aperfeiçoe em algo, se ela não tem o dom ela nunca será tão boa quanto uma pessoa que tem o perfil para tal coisa. Um exemplo pessoal, é que eu já dei aula por exemplo de aplicativos como CorelDraw, eu sabia todas as funcionalidades, e tudo mais, mas eu nunca fui criativo para fazer algo descente, não tenho o perfil para isso. Não tenho o dom. Por isso, eu gosto de trabalhar com pessoas que tem um perfil bom, e não que conhecem tal coisa, ou já fizeram tal coisa, pois independente do que essas pessoas saibam, e ninguem sabe tudo, elas aprenderão o que precisaram apender e tenho certeza que a tarefa será feita, e quase na totalidade das vezes da melhor maneira. Também por isso acho que entrevistas além de avaliar o aspecto técnico da pessoa, devem também avaliar o perfil dela, e se esse perfil se encaixa no perfil procurado. Nesta área técnica é bom analisar o que é mais importante também, como por exemplo um "Cientista ou um Engenheiro".

Contudo, gostaria de falar um pouco sobre um assunto de igual polêmica, que é a diferença entre um Líder e um Chefe. Gostaria de colar aqui um email que recebi a um tempo atrás da minha esposa, que resume muito bem esse assunto:

Os principais estudiosos de Liderança começam a identificar nítidas diferenças entre um Chefe e um Líder. Parece oportuno, traçarmos um paralelo entre estas duas posições:

Os Chefes empurram - Os líderes puxam
Os Chefes comandam - Os líderes comunicam
Os Chefes são mestres - Os líderes são maestros
Os Chefes são comandantes - Oslíderes são treinadores
Os Chefes são os donos da voz mais alta - Os líderes dos ouvidos mais acurados
O Chefe administra - O líder inova
Os Chefes é um cópia - O líder é um original
O Chefe mantém - O líder desenvolve
O Chefe focaliza os sistemas e a estrutura - O líder inspira confiança
O Chefe pergunta "como" e "quando" - O líder pergunta "o quê" e "por quê?"

O Chefe convive melhor no "status-quo" - O líder desafia, muda
O Chefe é um bom soldado - O líder é ele mesmo
O Chefe faz a coisa corretamente - O líder faz a coisa certa
O Chefe obtém resultados através das pessoas - O líder desenvolve pessoas e grupos
O Chefe quer segurança e estabilidade - O líder quer desafios
O Chefe busca "status" de vida - O líder privilegia qualidade
Os Chefes são obedientes - Os líderes contestadores
Os Chefes são fazedores - Os líderes criativos.

O Chefe veste a camisa da empresa - Os líderes participam dos negócios da empresa

A genialidade dos líderes não está em obter conquistas pessoais, mas em libertar o talento de outras pessoas.
Se eu pudesse resumir esse assunto todo, seria com essa última frase.

Abraços.

domingo, 12 de julho de 2009

Eclipse Galileo - Vale a pena fazer o update

Mais um ano, e mais uma nova versão do Eclipse. Este agora é chamado de Galileo (http://www.eclipse.org/galileo).

Eu gosto disso no Eclipse, o pessoal trabalha oraganizadamente em todas as versões, existe um roadmap definido para mudanças de versões (2->3->4), e a cada ano obrigatoriamente existe uma nova Release com melhorias e correções de Bugs que é denominado de "release train". E o melhor de tudo, se vc é do tempo do eclipse 2, vc lembra que a cada nova release, você tinha algumas incompatibilidades de plugins, ou nem todos saiam ao mesmo tempo para a nova versão do eclipse. Depois do eclipse 3 (se não me engano) tudo ficou muito mais organizado e "bonito". Muito bom isso =)

Ahhh, e quem lembra que não tinha os pacotes pré-definidos (JavaEE, PHP, etc) do eclipse como existe hoje? Cada nova versão era um parto para instalar todos os plugins. Mas isso mudou já tem algum tempo. Excelente =)

Bom, primeiro quero ressaltar sobre algumas coisas que não gostei da nova versão:

  • Continua vindo com CVS como padrão. Eles ainda não incluiram o plugin do SVN por default, vc precisa sempre instalar. Imagine então algo para o GIT...
  • Continua vindo aquela perspectiva Java EE como padrão. Ta bom, eu que prefiro usar a Java, mas enfim... não gostei =)
  • Ahhh e claro, mudou o icone. Eu gostava mais do outro ícone! =)
  • Não gosto de navegar nas abas via CTRL+PgUp/CTRL+PgDown, preferia algo mais intuitico como o CTRL+Tab e CTRL+SHIFT+TAB. Quem sabe um dia eles mudam.

Algumas coisas que gostei no eclipse novo:
  • Ele ficou mais rapido. Já vi varias pessoas que repararam nisso tbm... acho que não é só impressão minha.
  • Parace que acabaram com o fator "Glutão" do eclipse. Trabalhando com ele o dia todo, vários restarts de server e ele continuou firme.
  • Mudaram a interface de Plugins. Ficou legal, porém acho que me adaptava melhor com a antiga. Talvez seja apenas uma questão de me acostumar.
  • Um item no Help -> Check for Updates
  • Melhoraram o eclipse.ini, definindo outros parametros de memória, como MaxPermSize
  • Melhoraram o Mylyn, com uma feature para wikiText.
  • Uma coisa que gostei bastante foi a view Terminal, permite fazer conexões para telnet e para ssh. Não sei se já existia, mas só vi nessa versão.
  • Está cada vez mais migrando a arquitetura para OSGi. Vários plugins e features já estão utilizando e migrando para a nova arquitetura.
  • E uma feature que parece ser bem interessante, mas ainda não usei, é o Memory analyser (http://eclipse.org/mat/) Mas vale a pena conferir.
  • Code completion, e OpenType (CTRL+Shift+T) parece que ficaram mais rapido. Eles devem ter trabalhado em algo na indexação.
  • O debug view ficou legal, ficou mais facil trocar entre as "suspended threads".
  • Finalmente foi adicionado o suporte para copy/paste entre o "project Explorer" e o Nautilus. Era foda ter que fazer tudo sempre pelo shell.
  • E umas das funcionalidades mais fodas que achei: Seleção de Bloco nos editores. Sabe aquela funcionalidade que existe no UltraEdit chamado "Column Mode", pois é, tem um icone na barra de ferramentas, ou basta digitar: CTRL+SHIFT+A
Como não podia deixar de ressaltar, notei muito mais coisas boas do que coisas ruins.
E claro que não podia deixar de falar, que o import do meu workspace antigo foi bem tranquilo, como tem sido nas ultimas versões. Bem legal.

É isso, nova versão ai. Aproveitem as dicas acima.