Scala Programing

April 16, 2010

Depois de conversar com alguns amigos do trabalho e ler alguns artigos achei que seria interessante iniciar um estudo sobre a linguagem Scala.
Achei bons materiais sobre o assunto disponíveis gratuitamente na internet.

Vou descrever a instalação e codificar um método simples, mas que já me deixou empolgado com a linguagem.
Isso foi feito no Mac OS, mas acredito que em qualquer linux deva funcionar.

A instalação não poderia ser mais simples. Baixei o binário da última versão estável no site da própria linguagem (http://www.scala-lang.org/downloads) descompactei em uma pasta de minha escolha, meu caso /opt e exportei algumas variáveis de ambiente.
Para que não precisasse ficar sempre exportando essas variáveis editei o arquivo /etc/profile para que isso acontecesse de forma “automática”.
Apenas essas duas linhas;

export SCALA_HOME="/opt/scala-2.7.7.final"
export PATH="$PATH:$SCALA_HOME/bin"

Feito isso você pode se certificar de que esta tudo OK executando no terminal o comando scala -version.

Agora vamos ao método!
Algo bem simples só para fazer algumas observações sobre a sintaxe da linguagem.
Vou criar um método que recebe um array de strings e muda todas para maiúscula, retornando o mesmo array de strings em caixa alta.

// Primeiro exemplo em Scala

class Teste {
def upper(strings: String*): Seq[String] = {
strings.map((s:String) => s.toUpperCase())
}
}

val up = new Teste
Console.println(up.upper("o", "primeiro", "codigo", "scala"))

Copie isso em algum editor de texto e salve como primeiro_teste.scala. O nome do arquivo tanto faz, Scala não faz questão que o nome do arquivo seja igual ao nome da classe.

Para rodar isso, abra o terminal va até a pasta aonde você salvou o arquivo e rode o comando scala primeiro_teste.scala. Isso ja vai compilar e executar o arquivo.

A assinatura do método.
Colocamos a palavra chave def nome do método e parâmetros entre parênteses.
Depois dos parâmetros vem o tipo de retorno precedido de :.
Seq é um tipo Collection da linguagem Scala. Usei, no retorno também, uma espécie de generics, em Scala os generics não ficam entre e sim entre [].
Outra coisa interessante é que o corpo do método sempre é precedido de =. Nem sempre os {} são necessários, mas o sinal de igual sim.

Saindo um pouco da assinatura do método outra característica interessante. O return não é obrigatório, mas pode ser especificado. Li em alguns lugares dizendo que especificar um return ao fim do método é muito pouco usado. A linguagem Scala entende que a última linha do corpo do método corresponde ao valor de retorno.
Porem caso seja necessário retornar algo no meio do corpo do método, isso pode ser feito sem grandes problemas.

Scala é estaticamente tipada, porem caso o tipo não seja explicitamente declarado o compilador consegue fazer isso com base no valor. Fiz apenas exemplos com valores literais, e eles funcionaram comigo sem especificar o tipo explicitamente.

Pesquisando um pouco dei uma mudada nesse exemplo (perfumaria).

object Teste {
def upper(strings: String*): Seq[String] = {
val teste = "Teste"
Console.println(teste)
strings.map((s:String) => s.toUpperCase())
}
}

Console.println(Teste.upper("o", "primeiro", "codigo", "scala"))

Agora ao invés de classe declarei diretamente um objeto. Isso simula um Singleton.
Não tem como não ficar empolgado, rss.

Vou continuar escrevendo sobre meu aprendizado. Por enquanto é só isso.

Até a próxima.

Debugando aplicações em php no Mac OS

March 6, 2010

Olá pessoal.
Vou mostrar como debugar aplicações em php que estejam rodando em ambiente de teste.

Para isso vou utilizar:
- MAMP(Mac OS Apache Mysql Php) (download)
- XDebug (download)
- MacGDBp (download)

Comece fazendo o download do Php Remote Debugging paraMac OS X.

Descompacte o arquivo.
Dentro da pasta gerada pela descompactação você vai encontrar subpastas que correspondem a versões do PHP.

No meu caso a versão do PHP é a 5.2.

Abra a pasta correspondente a sua versão e de um ls. O único arquivo será o xdebug.so.
Vamos copiar esse arquivo para a pasta de extensões do php.

cp xdebug.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-*

Feito isso precisamos configurar o XDbug no php.ini.
Abra o php.ini com um editor de sua escolha, vou usar o TextMate:
mate /Applications/MAMP/conf/php5/php.ini

Com o arquivo aberto, busque pelo termo [xdebug].
Descomente a primeira linha e a dicione:

zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_autostart = 1

Deixando dessa maneira:

[xdebug]
zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable = On
xdebug.remote_autostart = 1

Feito isso. Precisamos alterar mais algumas linhas também no php.ini mas referentes as configurações do Zend.
Logo a baixo do bloco do [xdbug] encontramos o bloco [Zend]. Pois bem, comente as três linhas desse bloco.
O final do meu arquivo ficou dessa maneira:

[Zend]
;zend_optimizer.optimization_level=15
;zend_extension_manager.optimizer=/Applications/MAMP/bin/php5/zend/lib/Optimizer-3.3.9
;zend_optimizer.version=3.3.9

Agora reiniciei o MAMP. O XDebug deve estar instalado.
É possível verificar isso observando o phpinfo().

Quando comecei a escrever esse tutorial meu objetivo era debugar utilizando o TextMate.
Mas não consegui tal feito, não por enquanto. Em breve quem sabe :) .
Ao invés do TextMate, encontrei um aplicativo de interface simples e intuitiva chamado MacGDBp.
Baixe esse software e instale esse aplicativo.

O programa funciona da seguinte forma.
Depois de iniciado, ele vai começar a debugar o arquivo da primeira requisição do servidor. Caso não seja criado nenhum breakpoint o debug inicia na primeira linha do arquivo, caso contrario inicia na linha do breakpoint.
Ao final do debug, o MacGDB não vai ficar te perturbando querendo debugar qualquer requisição.
Para começar uma nova sessão de debug é preciso reiniciar o debugger.

Bom é isso.
Até a Próxima!

Ativando Windows XP

February 16, 2010

Boa e velha ativação do windows xp rs.

1. Vá em Iniciar > Executar

2. Digite regedit e clique em OK.

3. Já dentro do regedit, navegue até a chave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT
\CurrentVersion\WPAEvents

4. No painel à direita, clique duas vezes em OOBETimer

5. Na janela que foi aberta, apague qualquer valor e clique em OK. Feche oregedit

6. Vá novamente em Iniciar > Executar e dessa vez digite:%systemroot%\system32\oobe\msoobe.exe /a

7. Na janela que foi aberta, escolha a opção Sim, desejo telefonar…

8. Na próxima etapa, clique no botão Alterar chave de produto.

9. Na etapa seguinte, digite a CD-Key:THMPV-77D6F-94376-8HGKG-VRDRQe clique no botão Atualizar

10. Após clicar no botão Atualizar, o assistente para ativação voltará para a janela anterior, então, clique em Lembrar mais tarde e reinicie o Windows.

11. Reiniciado o Windows vá novamente em Iniciar > Executar e digite:%systemroot%\system32\oobe\msoobe.exe /a


Follow

Get every new post delivered to your Inbox.