Em síntese..

Em Síntese, blog de Beck Novaes, da Macromedia Brasil.

Em tempo: Beck aproveita para “deixar claro que os reais objetivos do blog não tem nada a ver com as atividades profissionais na Navita ou na Macromedia”.


Software livre e investimento público

Hoje encontrei na versão impressa da revista InformationWeek Brasil (Ago2004) um excelente artigo de Roberto Carlos Mayer. Artigo que expressa em poucas palavras, diretas e retas, quase tudo aquilo que penso sobre a “molecagem” que está sendo a imposição de software livre no governo brasileiro. Software livre promovido à força, sem argumentos técnicos coerentes e verdadeiramente práticos (em oposição à bela e pura teoria), no melhor estilo goela-abaixo da ditadura, é mais um devaneio ultranacionalista de quem não tem o menor comprometimento com à realidade. Não é de se espantar que venha de um governo que esteja querendo instalar no país um tal de “Conselho Federal de Jornalismo“… (sobre isso é melhor nem comentar).

Para Roberto, (…) “O simples investimento de dinheiro público em projetos de software livre não traz resultados práticos: apenas nos levará a gastar o nosso dinheiro público e continuar a pagar licenças de software estrangeiro com nosso dinheiro privado.” (…)

Eu assino em baixo. Se você também pensa assim, leia o artigo:

Software livre e investimento público


Vila Olímpia e AES Eletropaulo com ColdFusion

Estou de mudança da Vila Olímpia, bairro que morei durante os últimos três anos. Escolhi morar aqui quando casei porque é um bairro cheio de contrastes interessantes: de um lado os edifícios hi-tech (um dos quais trabalho), do outro oficinas mecânicas e sobrados antigos que me lembram muito as cidades do interior de São Paulo. As calçadas destes sobrados escondem tubos e mais tubos amarelos de fibra-óptica, de cobre, de toda sorte de materiais, que faz da “Vilompa” (como os malacos da região costumam chamá-la) a área de maior densidade e disponibilidade de conexões à grande rede. Sem falar na proximidade de quase 80% das empresas “pontocom” da cidade. Todos estão por aqui, dos grandes aos pequenos.

Mas porquê a mudança? Há tempos o Bairro perdeu seu encanto: está muito bagunçado, barulhento intransitável a pé e de carro (apesar das obras que prometem melhora isso). É o problema das baladas infinitas (de domingo-a-domingo), dos idiotas andando de harley-davidson sem escapamento as 4 da manhã, da meninada sem noção e seus carros turbinados capotando a cada esquina ou então dos que acham que impressionam meninas com o som no talo (me lembram os trios elétricos de Salvador), etc, etc. Neste exato momento estou postando aqui e escutando um buzinar frenético, provavelmente porque algum babaca parou o carro no meio da rua para conversar com alguém.

O fato é que estou indo morar numa casa que estou reformando numa área absolutamente tranquila no Morumbi. Na reforma fiz questão (além de trocar um monte de coisas, incluindo telhado) de substituir toda a parte elétrica e cabear a casa (a casa é minha e pretendo morar nela para sempre), especialmente os quartos e o escritório. Procurando por referências de um assunto que não conheço: instalações elétricas (medo de ser passado para trás pelo eletricista), encontrei o site da AES Eletropaulo, operadora de energia elétrica da região. E para minha surpresa, o site é feito em ColdFusion! 😉

http://www.eletropaulo.com.br

Vou sentir saudades da vista daqui de casa, mas não há preço para uma boa noite de sono e uma vizinhança mais amigável. 😉


Imagens inline em e-mail

Como vocês viram no post do Alex sobre o ColdFusion MX 6.1 Updater, agora a tag cfmailparam suporta dois novos atributos, disposition e contentid.

Eles são bastante úteis para enviar imagens inline no e-mail, isto é, a imagem atachada, mas aparecendo direto no e-mail, no meio da mensagem (não como um anexo); e o próprio e-mail já contém o arquivo da imagem, não sendo necessário estar conectado a Internet (ou o programa de e-mail permitir carregar imagens de servidores remoto..).

Para atachar uma imagem, utilizamos a tag cfmailparam com os atributos file e type. Adicionando o atributo disposition (que pode ser inline ou attachment) com o valor inline e colocando um id único no atributo contentID, é possível enviar a imagem inline, como no exemplo abaixo.


<!--- remente de mensagem --->
<cfset to="fabio@provedor.com.br">

<!--- destinatário --->
<cfset from="remetente@provedor.com.br">

<!--- caminho da imagem a ser colocada inline na mensagem --->
<cfset imagemPath="#ExpandPath('.')#/imagem.jpg">

<!--- exemplo de contentID, que deve ser único --->
<cfset contentID="#hash(imagemPath)#.#to#">

<!--- envio um e-mail no formato HTML --->
<cfmail to="#to#" from="#from#" subject="Envio de imagem inline" type="HTML">

<!--- anexo o arquivo inline na mensagem --->
<cfmailparam disposition="inline" contentID="#contentID#" file="#imagemPath#" type="image/jpeg">

<!--- mostro a imagem, utilizando o "caminho" cid:content_id_da_imagem --->
<b>meu e-mail em html</b>
<img src="cid:#contentID#">
<i>imagem acima</i>

</cfmail>


URLScan

URLScan é uma ferramenta de segurança da Microsoft que restringe com base em regras requests HTTP – muito provavelmente mal-intencionados – de serem executados. As regras incluem filtrar requests com variáveis com caracteres “estranhos”, com um conteúdo muito grande (na tentativa de um buffer overflow por exemplo), cabeçalhos anômalos, etc. Uma boa ferramenta.

Um pequeno problema é que a configuração padrão do URLScan bloqueia os requests que contenham pontos em seu endereço (exceto pelo nome do arquivo). E pontos no endereço é algo comum quando se utiliza a metodologia Fusebox; por exemplo, index.cfm?fuseaction=produto.home. Desse modo, aplicações utilizando Fusebox em um IIS com o URLScan podem não funcionar corretamente.

Para contornar esse problema, edite o arquivo {windows}system32inetsrvurlscanUrlScan.ini, e desligue a verificação de pontos:


AllowDotsInPath=1


ColdFusion MX 6.1 Updater lançado

Se você se lembra dos comentários que fiz acerca de uma apresentação do Ben Forta sobre o Blackstone deve se lembrar de que antes do Blackstone sair a Macromedia iria lançar um updater para o ColdFusion MX 6.1. Correções que incluem todas as disponíveis no pacotão tabajara do CFGIGOLÔ e mais algumas extras (ainda não sei quais, mas parece que sim). O já famoso (e bastante baixado) pacotão agora deixa de ter utilidade – até que se lancem novos hotfixes para o CFMX 6.1 – o que duvido muito, pois a equipe de desenvolvimento do ColdFusion está totalmente empenhada no Blackstone.

Engraçado que justo hoje eu estava me perguntando: “quando será que vai sair o tal do updater para o CFMX 6.1”?…

Bem, a resposta veio há cerca de uma hora ;-):

ColdFusion MX 6.1 Updater

Inclui diversos hotfixes (veja a lista completa aqui) e melhoras de performance. A instalação correu sem problemas aqui na minha máquina desktop (Windows XP + IIS + CFMX Stand-alone com pacotão de hotfixes instalado).

Contudo, nunca é demais lembrar: leia o Release Notes antes de prosseguir, especialmente em servidores de produção.

Dois ítens que mais chamaram a minha atenção neste updater:

1) Two attributes have been added to the cfmailparam tag to support mail file attachments: disposition=”disposition-type” and contentID=”content ID”. The disposition attribute specifies how the file content is to be handled. Its value can be inline or attachment.The contentID attribute specifies the mail content-ID header value and is used as an identifier for the attached file in an IMG or other tag in the mail body that references the file content. This ID should be globally unique.

2) Due to compiler changes in this Updater, ColdFusion application code must be recompiled to work properly. To ensure this occurs, the Updater installer renames the existing cfclasses folder, located at cf_rootWEB-INF, to cfclasses_backup. You can use the cfcompile script installed in the cf_rootWEB-INFcfusionbin directory to recompile your ColdFusion applications. Recompiling your application helps to improve initial page request time, but is not necessary for the proper functioning of ColdFusion applications.


Maximum number of simultaneous requests e ThreadTimeOut

Ainda falando de tunning de performance no ColdFusion Server. Quando você configura o seu ColdFusion para processar X requests simultâneos (veja a opção “Maximum number of simultaneous requests” dentro de “Server Settings” no ColdFusion Administrator) você está dizendo a ele mais ou menos o seguinte: “CFServer, atenda 10 requests (por exemplo) ao mesmo tempo e mande os demais esperarem na fila”.

Como o hardware do servidor é limitado em termos de recursos (CPU principalmente), fica fácil perceber que quanto mais requests o servidor tiver que atender, simultâneamente, mais lentamente ele irá fazê-lo. Eu costumo fazer uma analogia entre um ônibus e uma Ferrari. O primeiro anda devagar (se bem que isso é relativo, no Rio os motoristas dos coletivos são loucos), mas leva 40 pessoas ao mesmo tempo. A Ferrari voa, mas leva apenas 2 passageiros. Essa analogia é válida para o setting “Maximum number of simultaneous requests”. Quanto maior o número, mais lentamente o CFServer irá atendê-los. Quanto menor, mais rápido.

Mas qual é o número ideal? O número mágico é o que faz o seu servidor atender um número adequado de requests (de acordo com o seu tráfego), sem deixar muitos esperando na fila e de forma mais rápida possível. Mistura impossível? Nem tanto. O script de CFSTAT (e o CFSTAT propriamente dito) poderá ajudá-lo a chegar à melhor métrica para o seu servidor. Veja quantos requests estão rodando simultâneamente no horário de pico, quantos estão sendo “dropeados” e chegue a um número adequado, de preferência um que não deixe ninguém perder a paciência na fila (leia-se: um request dar timeout). Mas e quando você não pode (por limitações de CPU) atender todos os requests ao mesmo tempo? Simples: aumente o tempo de permanência da fila. Você já deve estar pensando: “ah, é só aumentar aquele atributo “Timeout Requests after (seconds)” na mesma seção do CFAdministrator”?. Não, este setting é válido apenas para requests que já estão sendo processados, o que não é o caso da fila de espera para processamento. Veja mais adiante:

O ColdFusion MX 6.1 trouxe uma mudança que não me agradou muito, que foi a modificação deste tempo (que era de 350ms) para apenas 20ms, muitas vezes absolutamente insuficiente. Não entendi muito bem porquê da mudança, mas me senti aliviado por saber que podemos alterá-la.

No arquivo “jrun.xml”, normalmente localizado em “cf_rootruntimeserversdefaultSERVER-INF” você vai encontrar uma entrada como esta:

<attribute name="threadWaitTimeout">20</attribute>

Basta alterar este valor (20) para um mais elevado. Eu custumo colocar 250 (o valor é expresso em ms). É tempo suficiente para que os seus usuários não “percam a paciência” esperando na fila e você tenha muito menos requests sendo negados (JRun closed connection) apesar do tempo maior para processá-los. Fica aí a dica, especialmente para quem tem máquinas cujo tráfego é bastante elevado.


Heap “agressivo” e mudanças nos settings de JVM

Semana que passou pude confirmar na prática uma valiosa dica postada há algum tempo pelo Pete Freitag: a de incluir, no startup do JVM, a opção: -XX:+AggressiveHeap em servidores parrudos. A máquina era um alucinante XSeries 225 (quem me dera ter um destes!) com 2Gb de RAM ECC e “quatro” processadores Xeon (na verdade são apenas dois processadores físicos, mas cada die leva dois processadores quase distintos, semelhante (mas não igual), ao HT do P4. E por incrível que pareça o servidor estava sofrendo (acredito que este servidor seja responsável por um dos sites feitos em CF com maior volume de visitação no país – não posso dizer qual). A melhora na performance não foi muito expressiva (não pude mensurar isso no ambiente de produção), mas o dito cujo pode respirar um pouco mais aliviado com a mesma carga.

O campo “JVM Arguments” do ColdFusion Administrator ficaria como neste arquivo txt.

Um outra pequena (mas importante) modificação que fiz pode ter auxiliado neste alívio: o ColdFusion MX 6.1 vêm com uma versão do Java HotSpot VM já relativamente antiga (de um ano). Se não me engano é a 1.4.2b28. Migrar para a última compatível e existente (1.4.2_05) ajudou um pouco creio (nem pense em usar a beta 1.5, o CF NÃO é compatível (por enquanto) com ela). Não é má idéia fazer isso em qualquer ambiente, independente da sua máquina. A mudança é bastante simples mas requer cuidado:

1) No ColdFusion Administrator, vá na opção do menu superior chamada “System Information” e veja a especificação “Java VM Version”, que deverá ser 1.4.2b28 (se não me engano);
2) Baixe a última versão do Sun J2SE no site da Sun. O J2SE é a base para o Java em qualquer aplicação baseada no Java da Sun, de desktops à servidores (J2EE), exceto aplicações “micro”, que usam um JVM especial (o J2ME));
3) Minha recomendação é de instalá-lo numa pasta simples e com nome sem espaços ou pontos (sei que não tem mais problema, mas eu sempre fui fresco com isso). Em ambiente Windows, por exemplo, instalo em “C:Java”;
4) No ColdFusion Administrator, vá em “Java and JVM” e mude o “Java Virtual Machine Path” para o novo local (no meu exemplo seria: “C:Javajre”) e clique em submit changes;
5) Páre e reinicie o ColdFusion Server. Verifique a mudança de JVM na opção “System Information” do ColdFusion Administrator (passo 1).

IMPORTANTE: caso o serviço do ColdFusion não reinicie, você fez alguma coisa errada e precisará restaurar o setting anterior. Mas como fazer isso se você não tem acesso mais ao CFAdministrator? Simples, no diretório “cf_rootCFusionMXruntimebin” você vai encontrar dois arquivos, um chamado “jvm.bak” e outro “jvm.config”. Você deverá trocar o nome deles. Renomeie o “jvm.config” para qualquer coisa (ex: “jvm.bak2”) e volte o backup, renomeando o “jvm.bak” para “jvm.config”. Pronto, o CF deve reinicializar como antes (ufa!).

Não tenho métricas sobre esta mudança com relação a estas duas JVM. Já fiz uma análise mais detalhada e técnica no passado porém para o ColdFusion MX 6.0 e trocando o HotSpot Client (padrão no MX 6.0) para Server. Mas o resultado é quase sempre certo: a mudança do JVM para um mais novo (da mesma “marca”) quase sempre resulta em melhoria de performance.

Por último, gostaria de disponibilizar um pequeno script CFML que escrevi (com base no excelente livro “Optimizing ColdFusion 5”) há muito tempo atrás, mas que funciona igualmente bem no CFMX e traz para a interface web as métricas do CFStat. Você pode vê-lo em ação aqui, numa máquina da Locaweb, e baixá-lo aqui, em formato zip (míseros 500 bytes!). Use-o, é uma ferramenta simples, mas bastante útil quando se está fazendo o tunning de servidores e aplicações em CF.


MM Technote: ColdFusion MX e o Windows XP SP2

Neste post eu relato um documento da Microsoft listando o ColdFusion como uma aplicação “incompatível” com o Service Pack 2 do Windows XP.

Apesar de ser um mero detalhe e com workaround/fix bastante simples, a resposta da Macromedia veio rápido:

Enabling ColdFusion MX and ColdFusion MX 6.1 on Windows XP Service Pack 2 with the Windows Firewall Enabled

Incluindo settings para que o servidor K2 (que acompanha o CFMX) rode também sem problemas.


Banner no CFGIGOLÔ

Próximo do aniversário de 2 anos do CFGIGOLO, recebemos um e-mail de um provedor de hospedagem de grande porte oferecendo patrocínio para o blog através de um banner pago, o que é um grande reconhecimento pelo trabalho voluntário neste blog (quem disse que não é possível fazer dinheiro com blogs?!). Não negamos a oferta (aliás, agradecemos muito), mas como um dos objetivos deste blog é justamente ter liberdade para elogiar e criticar serviços prestados por empresas de hosting, achamos que ao aceitar o patrocínio de uma empresa desta área, poderíamos perder a legitimidade em falar destes (e outros) assuntos.

Outra coisa que precisa ficar bastante claro (o Terracini já falou mas não custa repetir – isso aliás será acrescido na forma de texto permanente no blog) é que as opiniões aqui expressadas pelos autores, não necessariamente representam a posição ou opinião das empresas onde trabalhamos. Como Gerente de Tecnologia na Navita tenho liberdade para manter este blog e postar sobre opiniões pessoais acerca de vários assuntos, mas deve estar claro na mente das pessoas que o lêem que estes são exclusivos da pessoa Alex Hübner, e não da Navita. O mesmo é válido para os outros autores (Terracini e Douglas).

Dito isso, só falta dizer quem fez a oferta de banner. Foi a Digiweb! 😉 Estou querendo testar o serviço deles mas ainda não tive oportunidade. E por falar em elogios, por enquanto no Brasil eu recomendo apenas duas empresas: DelixHosting (onde hospedo dois sites de clientes pessoais – aqui e aqui) e Locaweb, onde tenho alguns sites hospedados em CF e onde tive a oportunidade (juntamente da Macromedia Brasil) de definir setting e configurações adequadas para os servidores. Sobre este último recebi críticas com relação ao suporte técnico inadequado para settings específicos do CF (criação de mappings, datasources e afins), que concordo, mas fora este problema, posso garantir que o provedor oferece uma plataforma bastante estável e segura. O gerente de infra-estrutura é uma pessoa que conhece ColdFusion de fato, mas como gerente não pode dar atenção ao suporte técnico. A Locaweb está buscando um profissional com conhecimento de ColdFusion para atuar no suporte. O suporte na Delix é muito bom e personalizado. Guilherme Augusto, proprietário do provedor, leitor e participante ativo da lista CF-Brasil está sempre pronto para atender os clientes, a qualquer hora (eu sou prova disso, com um setting em SQL Server que precisou ser feito as 02h00 da manhã). Recomendo fortemente.