quarta-feira, 6 de julho de 2011

Automatizando a mineiração de Bitcoins no Windows

Criei um pequeno script para facilitar a mineiração de Bitcoins no Windows
set host=localhost
set user=youruser
set password=yourpassword
set file=%appdata%\Bitcoin\bitcoin.conf
set pf=%programfiles(x86)%
set start=start ""
if "%pf%"=="" set pf=%programfiles%
echo rpcuser=%user% > %file%
echo rpcpassword=%password% >> %file%
%start% "%pf%\Bitcoin\Bitcoin.exe" -server
for /l %%X in (0,1,1) do %start% poclbm.exe -o %host% -d%%X -u %user% --pass=%password%

terça-feira, 8 de fevereiro de 2011

Como hospedar serviços WCF no IIS

Para o IIS 6.0 é necessário um comando a mais que para o IIS 7.0

"%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis" -i
"%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i


Para no IIS 7.0 para Windows 64 bits é necessário adaptar o caminho


"%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis" -i
"%windir%\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i

terça-feira, 1 de fevereiro de 2011

Hudson CI versus Jenkins CI

Kohsuke Kawaguchi criou o Hudson-CI quando trabalhava na Oracle, mas a mesma licenciou o software como livre, com a exceção do nome “Hudson” que é propriedade da empresa.

Depois que Koshuke mudou de empresa, ele e a maioria esmagadora dos desenvolvedores queriam mover o repositório do site Java.net para o Github por causa do baixo percentual de disponibilidade do primeiro e das migrações com outages. A Oracle não concordou. Por isso agora o há um novo branch do Hudson. O mantido pelo desenvolvedor original e pela maioria da comunidade se passará a chamar Jenkins. Como ainda não há diferença entre as duas versões, tanto faz escolher. Mas como o Jenkins provavelmente terá mais desenvolvedores eu pretendo utilizá-lo.

Linq e seu filho mais famoso Linq-to-SQL

Com o .NET 3.0 e com o C# 3.0 foram introduzidas extensões à linguagem C# que mudou a forma de programar de muita gente. Uma das adições é uma syntaxe parecida com o SQL:

    int[] numbers = { 1, 2, 3 };
    var numbersPlusOne =
        from n in numbers
        select n + 1;

Mas também foram adicionados os Extension Methods:

    int[] numbers = { 1, 2, 3 };
    var numbersPlusOne =
        numbers
        .Select(n => n + 1);

Antes o tipo int[] não possuía o método Array.Select(Func<T, TResult>). Mas esse método pôde ser adicionado sem modificações à classe original através dos Extension Methods. Note que os dois trechos de código acima são equivalentes, apenas escritos de forma diferente, ambos em C# 3.0.

Breve introdução ao Mapeamento Objeto-Relacional para .NET

Antes do Mapeamento Objeto-Relacional (ORM em inglês) automatizado surgir tínhamos que desenvolver nossas classes de acesso a dados manualmente.

Esta classe é responsável por:
  • expor métodos para consulta ou atualização do banco, e para cada um destes métodos:
  • serializar os parâmetros
  • gerar e executar o código SQL
  • deserializar o resultado
E pelo fato da linguagem SQL mudar de um SGBD para outro, se ela for gerada manualmente a migração de bancos ficava muito difícil. Com a introdução dos ORMs estas classes não precisam mais serem escritas nem precisamos nos preocupar com migração de bancos.

Os principais ORMs para .NET são
  • NHibernate (FOSS)
  • Linq-to-SQL (.NET 3.0)
  • Entity Framework 1.0 (.NET 3.5)
  • Entity Framework 4.0 (.NET 4.0)

O que é o Windows Communication Foundation (WCF)?

O WCF é uma biblioteca de comunicação introduzida a partir da versão 3.0 do .NET Framework que permite isolar a "implementação do serviço" do "protocolo de comunicação". Além de facilitar a serialização e deserialização dos dados, esta biblioteca também disponibiliza implementações intercambiáveis dos principais protocolos de comunicação. por exemplo:

  • TCP
  • HTTP - REST
  • SOAP
  • Named Pipes
  • Message Queues

O WCF exige que os dados a serem comunicados e os métodos de comunicação sejam definidos em tempo de compilação, mas os protocolos de comunicação, endereços, métodos de autenticação, métodos de serialização, método de criptografia e outros detalhes da comunicação podem ser definidos em tempo de execução. A configuração destes itens pode ser feita sem escrever código, pois para a maioria das opções mais populares basta apenas mudar uma entrada no arquivo de configuração.

Alguns protocolos no WCF foram implementados para a interoperabilidade com outras linguagens e plataformas de desenvolvimento, além de poderem ser consumidos por clientes implementados em .NET. O WCF também permite expor metadados sobre o serviço, facilitando o consumo destes.

Serviços que utilizam WCF podem rodar no IIS ou em aplicações normais, sejam elas de linha de comando, aplicações gráficas ou serviços do Windows. O WCF pode ser usado em vários cenários, permitindo uma rápida e eficiente implementação de:

  • comunicação entre processos da mesma máquina (ex: pipes nomeados)
  • webservices
  • web APIs
  • comunicação desconectada (ex: message queue, envie e esqueça)
  • comunicação bi-direcional (ex: assinatura e publicação)

O WCF também foi implementado no framework Mono, mas apenas parcialmente.

sábado, 29 de janeiro de 2011

As 4 componentes da programação Web

Sempre é bom relembrar: uma aplicação HTML é composta de 4 elementos:
  • Conteúdo (strings)
  • Estrutura (HTML)
  • Comportamento (JavaScript)
  • Apresentação (<br>, <font>, <center>, style e CSS)
Normalmente se separam estas partes nos seguintes arquivos:
  • arquivos server-side: .php, .cs, .py, .java, .resources, etc - suporta  HTML, JavaScript e CSS
  • .html - suporta HTML, JavaScript e CSS
  • .js - suporta HTML, JavaScript e estilos
  • .css - suporta CSS
Como vocês podem ver, é possível incluir CSS em todo tipo de arquivo. Agora imagine-se desenvolvendo ou mantendo um programa que mistura tudo e põe as coisas erradas nos arquivos errados, fica uma bagunça. Então mais uma vez: ponha cada coisa no seu lugar. Essa mania de por tudo num arquivo só é coisa de quem não tem uma IDE decente e fica usando editores de texto simples para programar.
  • Conteúdo no .html dificulta a internacionalização.
  • Javascript no .html dificulta a compreensão e depuração do código, mesmo que seja um simples onclick.
  • HTML no script do servidor ou no .js dificulta a leitura de código e formação correta do markup. Para contornar isso use um view engine. Ex: pure para JavaScript.
  • CSS ou style no .html ou no .js dificulta a atualização de layout. Lembre-se: o layout ou design de uma página sempre muda.