JDBC Driver para SQL Server 2005

A Microsoft já liberou o seu driver JDBC para o SQL Server 2005.

De qualquer modo, o ColdFusion já consegue conectar no SQL Server 2005 utilizando os drivers padrão (veja este post do Ben Forta).


ColdFusion e Excel

Uma das maneiras mais tradicionais de gerar conteúdo em Excel via ColdFusion é gerar o conteúdo utilizando tabelas normais em HTML e dar o output do conteúdo como se fosse um arquivo .xls. O Excel espertamente irá converter automaticamente para uma planilha. Nesse modo, contudo, não é possível aproveitar todo o potencial do Excel, como fórmulas e afins.

Um outro modo, mais caro (pois envolve uma licença do Excel) e razoavelmente utilizado, é instalar o Excel no servidor e utilizar objetos COM no ColdFusion. Uma outra abordagem interessante é utilizar o Jakarta POI, uma API em Java para manipulação de arquivos de softwares da família Office, da Microsoft. A sugestão de utilização dessa API inclusive aconteceu recentemente na lista de discussão do CFUG-DF.

E hoje, coincidentemente, passando os olhos nos blogs sobre Adobe/Macromedia, vi um post que indica duas interessantes referências ([1] e [2]) para utilizar o HSSF (projeto do Jakarta POI) para gerar planilhas Excel com recursos mais avançados de formatação, fórmulas e afins.

Uma outra alternativa, também em Java, é a API JXL.


Remoting em .NET

Fluorine é uma implementação open source e gratuíta do Flash Remoting para .NET.

O interessante é que permite utilizar uma abordagem mais coerente, chamando uma classe em .NET, e não páginas ASP.NET individualmente (cada uma representando uma função)… Além é claro, do já disponível WebService.

Interessados no assunto podem checar também o Starwolf, ainda não tão maduro.


Oportunidade

A LightComm está a procura de dois profissionais ColdFusion. O local de trabalho é no bairro do Campo Belo, em São Paulo – SP. O salário será de acordo com a experiência.

Interessador encaminhem currículo diretamente para wendell AT lightcomm.com.br


No U2 for you!

E alguns minutos depois…

Isso porque a capacidade anunciada era de 10.000 visitantes simultâneos. O mais curioso, contudo, é que se são 73 mil ingressos para o show, e a primeira imagem mostra um limite de, ahãhn, 25.000 acessos simultâneos, quer dizer que os ingressos acabariam em poucos minutos, não?

Ora, contem outra…


Adobe Developer Community

Shantanu Narayen, Presidente da Adobe e COO fez uma apresentação em Breeze sobre o comprometimento da Adobe com a comunidade de desenvolvedores.

Assista o Breezo em http://adobe.breezecentral.com/drupdate0106/.


Frase do dia

“Segurança M&M: dura por fora, mas muito mole e fácil de mastigar por dentro!”
— Do Livro “A Arte de Enganar”, de Kevin Mitnick


Defaults

Recentemente tive a oportunidade de aprender um pouco mais sobre o que a Microsoft chama de Computação Confiável. Resumidamente, esse programa e filosofia visa obedecer os princípios básicos de segurança (Disponibilidade, Integridade e Confidencialidade), e para tal eles visam melhorias em quatro áreas, o chamado SD3+C:

  • Security by Design
  • Security by Default
  • Security by Deployment
  • Communications

Não vou discorrer sobre todos nesse momento, mas gostaria de compartilhar alguns pensamentos sobre os “defaults”. Nesse âmbito, a Microsoft pretente mudar as configurações padrões dos softwares de modo que, por padrão (ou seja: na instalação “next-next-finish” e sem nenhuma grau de parametrização), o software esteja o mais seguro possível, com o mínimo de serviços necessários atividos, possibilitando ao usuário habilita-los, passo-a-passo, explicando os níveis de segurança envolvidos em cada novo recurso ativo.

Parece uma daquelas: “Por que não pensei nisso antes?”, afinal, é um tanto quanto óbvio, não? Mas não é o que ocorre na maioria dos softwares por aí.

Os parâmetros default não estão presentes apenas na segurança, mas em todo o aspecto de um software. É frequente escutarmos coisas do tipo:

“Meu serviço x está ocupando 100Mb de RAM.”
“Ah, o meu está ocupando 500Mb! Que absurdo!”

ou…

“Se você instalou no Windows, ele estará rodando na porta 80, não na 8500!”

E depois ouvir reclamações sobre o software ou o mal gerenciamento de memória do sistema operacional. Em inúmeras vezes que escutei alguns dos diálogos acima, tinha certeza de que o software relacionado oferecia meios para configurar o recurso em questão, seja a memória ou a porta.

Desenvolvedores experientes, que têm mais confiança em seu trabalho e sua habilidade, podem freqüentemente achar e questionar por que o compilador está compilando errado, enquanto eles estavam digitando o código que fazia do modo certo. Bastam alguns minutos de revisão para ver que o compilador não está tão errado assim.

Ou justamente o contrário, desenvolvedores menos experientes ficarem contentes por suporem que acharam um bug no software. Afinal, “desse jeito não funciona. Então é um bug!!”, enquanto na verdade é um mal uso da ferramenta, da função de programação, ou algum parâmetro mal configurado.

Portanto, é importante conhecer o software e linguagem de programação que se está utilizando, seja através do hábito de ler APIs e documentações sobre o software e da humildade de poder estar errado, e o software agindo corretamente, de acordo com os parâmetros configurados. Infelizmente, nem sempre estes vêm de uma forma segura e funcional, muito menos oferecem meios simples e evidentes de configura-los (nada de arquivos em texto puro com nomes de variáveis que só os programadores daquele produto entendem), o que também nos lembra de também construirmos nossos softwares dessa maneira, facilitando a parametrização e configurando-o da melhor maneira possível para um “default”.


Quebra de linha no Flex

As quebras de linhas em aplicações em Flex são tratadas de dois modos distintos. Um é a quebra de linha em códigos ActionScript, já conhecidas do pessoal que trabalhava com Flash, utilizando um n para criar as quebras de linha (tal como em outras linguagens de programação).

<mx:Script>
<![CDATA[
function setDataToolTip(date1:String, date2:String):Void {
  cbDatas.toolTip = date1 + 'n' + date2;
}
]]>
</mx:Script>

O newline também pode ser utilizada para gerar quebras de linha, contudo, ao passo que o n é interpretado como um “texto” (escaped character; note as aspas no exemplo acima), o newline é como uma variável.

cbDatas.toolTip = date1 + newline + date2;

O segundo modo é quando estamos em uma tag do Flex. Ora, uma tag em Flex, e mais do que isso, um arquivo MXML nada mais é do que um arquivo XML, e portanto, os padrões podem e devem ser seguidos. Qual é o caractere de carriage return e como ele é representado em documentos HTML, XML e afins? &#13;

<mx:Link label="link com&#13;duas linhas" />

Adicionalmente, a variável newline também pode ser utilizada em tags MXML, utilizando o recurso de binding:

<mx:Link label="link com{newline}duas linhas" />

Vale a pena também citar casos especiais, como o uso de tags HTML, e o famoso <br> para quebras de linhas, como no caso de dataTips em gráficos, em que é possível utilizar b, i e br. No exemplo abaixo, uma função a ser utilizada como dataTipFunction de um gráfico.

function formatDataTip(event:Object):String {
return '<b>' + event.hitData.item.valor1 + '</b> <br> <i>' + event.hitData.item.valor2 + '</i>';
}


Frase do dia

Sabe aquela situação em que algo precisa ser feito, e na correria do dia-a-dia ou por falta de tempo mesmo, faz-se um “quabra-galho” (também conhecido como gambiarra), que de fato, resolve temporariamente o problema, mas de longe não é a melhor solução, e deixa para implementar a solução definitiva num futuro “próximo”?

Fernando Fonseca, consultor de segurança da Microsoft, tem uma frase que resume perfeitamente essa situação:

“Se você não tem tempo de fazer direito, quando terá tempo de fazer de novo?”
–Fernando Fonseca