sexta-feira, 6 de junho de 2008

Cheat Sheets

Pra quem não conhece, C. S. são guias de referência, geralmente em uma única página, que servem para o profissional ter acesso ao conteúdo de um determinado assunto sem ter que ficar fuçando manuais e internet pra ver como ele é escrito. Servem principalmente para lembrar a sintaxe de algum comando.


Um dos melhores sites para C. S. e Quick reference guides é o I Love Jack Daniels, do Dave Child. Ele tem C. S. pra diversas linguagens de programação, recomendadíssimo \o/

Aqui vai uma lista com vários Cheat Sheets para download, em formato PDF:

  1. Algebra - Paul Dawkins
  2. Apache Quick Reference Card - Andrew Ford
  3. ASP e VBScript - Dave Child
  4. Assembly (Win32) - Peter Kankowski
  5. C - Joseph H. Silverman
  6. C# e .NET - ?
  7. C++ - Dream in Code
  8. Caracteres HTML - Dave Child
  9. ColdFusion - Peter Freitag
  10. Comandos UNIX - FOSSwire
  11. CVS (Controle de versão) - Laurent Grégoire
  12. Debian - W. Borgert
  13. Delphi - Explain That!
  14. Django - Mercury Tide
  15. Eclipse (IDE) - Carsten Ullrich
  16. Expressões regulares - Dave Child
  17. HTML - Dave Child
  18. Java - Janeg.ca
  19. Java 2 - Pinnacle Software Solutions
  20. Java 3 - Jialong He
  21. JavaScript - Dave Child
  22. JSP - Sun
  23. JSTL - Bill Siggelkow
  24. LUA - SoulKiller
  25. Microformats - Dave Child
  26. MySQL - Dave Child
  27. Oracle - Michael Eliasz
  28. Perl - John Bokma
  29. Perl (variáveis predefinidas) - Peteris Krumins
  30. PHP - Dave Child
  31. PHP PEAR MDB2 - codeschmie.de
  32. PostgreSQL - Alberton.info
  33. Python - Laurent Pointal
  34. Ruby - Cenophobie
  35. SEO (Search Engine Optimization) - SeoMoz
  36. Serviços Google - Adelaider
  37. Shell script - Michael Oliveri
  38. Smalltalk - Bern University
  39. Solaris - Jialong He
  40. STL - Yotam Medini
  41. SVN (controle de versão) - Lucas Baltes
  42. UML (Linguagem de modelagem) - Laurent Grégoire
  43. VI (editor de texto) - HP
  44. XML - Mulberry Technologies


Se alguém quiser mais algum Cheat Sheet, ou não entender alguma coisa, só entrar em contato, que tamos aê o/

Todos os Cheat Sheets daqui são gratuitos e estão hospedados no mesmo lugar, pra não depender de servidores alheios para disponibilidade... Se você gostou e quer hospedar no seu blog/site, link-me, por favor ;)

Té mais o/

quarta-feira, 2 de abril de 2008

Emoticons para Blogger e Blogspot

Tá, passei um trabalhinho pra fazer isso, mas desenvolvi um JavaScript pra colocar emoticons em blogs do Blogger/Blogspot \o/

***

Edit: Pra quem quiser usar o emoticon no próprio blog, tem que fazer assim:

  1. Vá em Layout/Editar HTML, e cole o seguinte trecho de código antes de </head>:


  2. <script language='javascript' src='http://sites.google.com/site/perereco/emoticons.js' type='text/javascript'></script>


  3. Daí, ali no <body>, troque por:
    <body onload='emoticon()'>



Pra usar um emoticon, basta colocar o sinal desejado entre colchetes duplos:
[[sinal]]


Vamos à lista:

  • relogio : [[relogio]]
  • paleta : [[paleta]]
  • som: [[som]]
  • voltar: [[voltar]]
  • estrela: [[estrela]]
  • mundo: [[mundo]]
  • cancelar: [[cancelar]]
  • ok : [[ok]]
  • 8) : [[8)]]
  • $) : [[$)]]
  • ;P : [[;P]]
  • ideia : [[ideia]]
  • casa : [[casa]]
  • baixo : [[baixo]]
  • taca : [[taca]]
  • foto : [[foto]]
  • zangado : [[zangado]]
  • ^^ : [[^^]]
  • :O : [[:O]]
  • D: : [[D:]]
  • ;) : [[;)]]
  • :S : [[:S]]
  • :I : [[:I]]
  • :P : [[:P]]
  • 8 : [[8]]
  • L : [[L]]
  • :D : [[:D]]
  • espantado : [[espantado]]
  • :( : [[:(]]
  • :) : [[:)]]
  • raio : [[raio]]
  • chave: [[chave]]
  • msn: [[msn]]
  • msn2: [[msn2]]
  • telefone: [[telefone]]
  • pizza: [[pizza]]
  • presente: [[presente]]
  • U : [[U]]
  • cima: [[cima]]
  • banana [[banana]]

Por fim, só pra constar, os ícones usados foram feitos pelos membros da equipe CrystalXp, e podem ser utilizados em qualquer blog, desde que não tenha fins lucrativos. [[:)]]


***EDIT:

Antes realmente não estava funcionando, porque estava muito pesado, agora eu mudei o arquivo javascript - ele tem apenas 5kb -. Portanto, ignorem os comentários "Ah, tentei aqui mas não deu" [[:P]]

segunda-feira, 31 de março de 2008

Trocar senha do SYSDBA no Firebird

Isso serve pra todos os usuários, mas o SYSDBA é o mais fodão e tals..

Então vamo lá. Primeiro, a gente vai na pasta "bin" do firebird:

C:> cd C:\Arquivos de programas\Firebird\Firebird_2_0\bin

Agora a gente executa o arquivo gsec.exe, passando como parâmetro o nome de usuário e a senha atual:

C:\Arquivos de programas\Firebird\Firebird_2_0\bin> gsec -user SYSDBA -password masterkey

Daí, dentro do gsec, é só mudar a senha, com o comando:

GSEC> modi sysdba -pw senha_nova

E sair:

GSEC>quit

\o/ Té mais

Caso você use Windows Vista ou Windows 7, troque de sistema operacional, leia este artigo aqui: Alterando senha do Firebird no Windows Vista e Windows 7

Obs.: Peguei daqui.

segunda-feira, 17 de dezembro de 2007

Combos dinâmicos no JSP

Depois de muito penar, descobri como fazer combobox dinâmicas para JSP.
No exemplo, eu quero que um combo, chamado 'cidade' exiba as cidades contidas no banco, de acordo com o estado que eu selecionar na combo 'uf'.

1º passo: Criar uma página jsp, que faça uma busca na tabela 'cidade', passando como parâmetro (preferencialmente via get) o código da uf:


try{
int codigoUf = Integer.parseInt(request.getParameter("codigo").toString());
List lista = Busca.listaCidades(codigoUf);
out.print("[");
for(int i = 0; i < lista.size(); i++){
if (i != 0) out.print(", ");
out.print("'" + lista.get(i).getNome() + "'");
}
out.print("]");
conexao.close();
} catch (NumberFormatException e){}


obs.: Se o java imprimisse a lista diretamente, ficaria no formato "[ item, item, item ]". Mas o javascript, pelo menos aqui, não reconheceu esse formato. Por isso, eu fiz essa mini gambiarra, para que a saída seja "[ 'item', 'item', 'item' ]", como no PHP.

2º passo: Agora, no HTML, basta colocar o seguinte atributo na tag select:

onchange="buscaCidade(this.options[this.selectedIndex].value)"

3º passo: Criar o javascript:


function buscaCidade(tuf){
try{
xmlhttp = new XMLHttpRequest();
} catch(e1) {
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e2){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e3){
xmlhttp = false; //Viva a padronização dos browsers
}
}
}

//limpa a combobox
var c = document.getElementById("cidade")
while( c.options.length > 0) c.options[0] = null
c.options[0] = new Option(" -- Aguarde ... -- "," -- Aguarde ... -- ")

//Monta a url com a uf
xmlhttp.open("GET", "buscacidade.jsp?codigo=" + tuf, true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4){
var c = document.getElementById("cidade")
while(c.options.length > 0) c.options[0] = null
//Transforma a lista de cidades JSON em Javascript
var aCidades = eval((xmlhttp.responseText))
//popula o select com a lista de cidades obtida
for(var i = 0; i < aCidades.length; i++){
aCidades[i] = unescape(aCidades[i])
c.options[c.options.length] = new Option(aCidades[i], aCidades[i])
}
}
}
xmlhttp.send(null)
}


Segundo meus cálculos, agora deve funcionar... Para testar, crie dois combos (uf e cidade), e popule um banco =]

Observações:

1) De repente, você pode precisar utilizar o código da cidade juntamente com o nome, para efetuar cadastros e tals. No exemplo de cima, o jsp só busca o nome da cidade. Pra fazer ele buscar também o código, concatene ele com o nome da cidade, utilizando um caracter bem estranho para separá-los:

out.print("'" + lista.get(i).getCodigo() + "#" + lista.get(i).getNome() + "'");

Daí no .js você coloca:

var str = aCidades[i].split("#");
c.options[c.options.length] = new Option(str[1], str[0])

Onde str[0] (código) será o value do select, e str[1] (nome) será o valor exibido na combo.

2) De repente também, você precise utilizar este javascript em mais de uma combo. Para isso, é só passar o nome do combo que você quer carregar via parâmetro:

onchange="doBusca(this.options[this.selectedIndex].value, 'cidade')"

E alterar o javascript pra receber esse parâmetro.

3) Peguei esse código daqui, e adaptei um pouco =D.

É isso, té mais o/

sexta-feira, 7 de dezembro de 2007

Arredondando valores double

Tava dando uma olhada aqui, achei um codigozinho bem legal pra arredondar doubles...
É bem simples, só informar o double e o número de casas decimais que se quer arredondar:


public static double arredondaValor(double valor, int nrCasasDecimais) {
BigDecimal bd = new BigDecimal(valor);
bd = bd.setScale(nrCasasDecimais,BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}



Roubei o código do Charbel =]

Té mais o/

segunda-feira, 3 de dezembro de 2007

Curiosidade

Por acaso tava programando uma coisa, e me deparei com um possível bug do Windows (bugs do Windows são legais).

Criem um arquivo qualquer, texto, imagem, planilha, etc., e tentem salvar este arquivo com o nome "aux". (no WinXp)
Funciona também na hora de tentar renomear um arquivo qualquer.

Estranho não?

bush hid the facts
(piada "interna")

Abraços o/

terça-feira, 27 de novembro de 2007

O grande livrão verde do SWT

Eu tava procurando coisas sobre SWT na internet.. Tem muita coisa legal, e muita coisa espalhada, além do grande guia do site do eclipse.
Daí eu tava pensando, vou criar um grande livrão verde, ensinando aos usuários de Swing como portar as aplicações pra SWT sem maiores dificuldades, relacionando cada item do Swing ao seu correspondente em SWT.

Deve ficar pronto até o dia 15.

Té mais o/

segunda-feira, 19 de novembro de 2007

Exibindo (e dimensionando) uma imagem no SWT

Existe um monte de jeito de fazer isso, esse aqui é o mais fofinho... Ele exibe a imagem dentro de um Canvas, e toda vez que ele precisa repintar a imagem, ele dimensiona de acordo com o tamanho do "container" (composite) pai.

Eis o código:


final Composite composite = new Composite(shell, SWT.NONE);
final Image image = SWTResourceManager.getImage(PrincipalSWT.class, "/com/trabalho/imgs/imagem.jpg");
final int width = image.getBounds().width;
final int height = image.getBounds().height;

Canvas canvas = new Canvas(composite, SWT.NONE);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
e.gc.drawImage( image, 0, 0, width, height, 0, 0,
(int) composite.getSize().x, (int)composite.getSize().y );
}
});

Peguei o código e adaptei daqui

Por hoje, é isso...
Té mais o/

sexta-feira, 16 de novembro de 2007

Autoincrement no Firebird

Uma das coisas chatas de usar o Firebird é que ele não tem o campo autoincrement (ou pelo menos não tinha até essa postagem). Isso é particularmente chato, porque o autoincrement é legal, e facilita a vida do programador.

Tá, vamos aos códigos.

Primeiro, deve-se criar um Generator. Um generator é um gerador de números que o banco de dados usa pra fazer o controle dessas coisas.

Importante: Se houver mais de um campo autoincrement no banco de dados, será necessária a criação de um generator pra cada um.

Suponhamos que queira o campo "codigo" da tabela "aluno" seja autoincrement. Primeiro cria-se o gerador "gen_cod_aluno":

CREATE GENERATOR gen_cod_aluno;

Agora deve-ser criar uma trigger para que esse gerador seja incrementado cada vez que o usuário tentar inserir algum valor no banco de dados:

CREATE TRIGGER FOR aluno
ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
NEW.codigo = GEN_ID(gen_cod_aluno,1);
END;

Traduzindo, criou-se uma trigger para a tabela aluno, que será ativada antes que um registro seja inserido, atribuindo ao campo "codigo" o valor armazenado em "gen_cod_aluno", somado a 1.

De novo, pra cada campo autoincrement, uma trigger e um generator.

Té mais o/

terça-feira, 13 de novembro de 2007

Retirando a seleção em uma tabela no SWT

Hoje, quando eu tava mexendo com uma Table no SWT, percebi que quando a pessoa clica em um item, esse item fica selecionado até que o usuário clique em outro item. Isso pode ser útil pra alguém, mas acho mais legal que o item continue selecionado até que o usuário clique em outro componente, ou quando o usuário clicar em uma linha vazia da tabela.

Pra resolver isso, tem essa gambiarrinha aqui ó:


Table table = new Table(shell, SWT.FULL_SELECTION
| SWT.BORDER);

table.addMouseListener(new MouseAdapter() {
public void mouseDown(final MouseEvent arg0) {
if (table.getItem(new Point(arg0.x, arg0.y)) == null) {
//Se o usuário clica em uma linha vazia
table.deselectAll();
}
}
});
table.addFocusListener(new FocusAdapter() {
public void focusLost(final FocusEvent arg0) {
//Se o usuário clica em outro componente
table.deselectAll();
}
});


Era isso, Té mais o/