quinta-feira, 30 de dezembro de 2010

Desinstalando o MySQL Connector Net 6.3.1

Passei umas três horas tentando instalar a versão mais nova do Connector do MySQL para .NET, mas quase não consegui desinstalar a versão anterior. Pois é... ainda tem esse inconveniente: para instalar a versão nova (6.3.5), tem que desinstalar a antiga (6.3.1)...

Pois bem, consegui realizar a façanha renomeando os diretórios Config para Config_ que ficam nas pastas:
- C:\Windows\Microsoft.NET\Framework64\Old_v4.0.21006 e
- C:\Windows\Microsoft.NET\Framework\Old_v4.0.21006

Só vi que devia fazer isso graças ao último comentário deste bug: http://bugs.mysql.com/bug.php?id=51407 :

"'C:\Windows\Microsoft.NET\Framework\Old_v4.0.30128'
renaming "config" folder to something else."

Uma informação adicional é que no log de eventos, apresenta-se o código de erro 1603, Mensagem: "Status de erro ou êxito da reconfiguração: 1603."

As ferramentas deviam nos fazer ganhar tempo, não perdê-lo!

Quis compartilhar meu "perrengue", para ajudar pessoas em situação parecida.

Feliz ano novo!

terça-feira, 14 de dezembro de 2010

Sobre minha participação na Copa Fiat Italiana de Tênis, terceira etapa, 2010

Perdi. Na estréia. Detalhe: a corda de minha raquete quebrou no primeiro set, quando eu estava sacando. De uma coisa eu já sabia: que meu "jogo mental" era fraco. Meu jogo técnico vai muito bem, meu físico, mais ou menos, mas meus pensamentos não param! Perdendo minha raquete principal logo no começo, desmoronou o que já não era muito sólido. Bem, tudo é lição.

Mas salvas ao meu adversário, Felipe Mendes! Tão jovem, mas já bastante "desenrolado". Já chegou puxando assunto e até me consolou no final... Felipe, continue assim! (se puderes me mandar a foto do fim do jogo, agradeço).

Obrigado aos que torceram por mim. Desistir jamais!

Update: notícia sobre minha participação: http://www.tenispe.com.br/fiatitaliana/11copafiat/?p=470

sábado, 16 de outubro de 2010

Show do Black Eyed Peas no Recife, 17/out/2010

Aí vai algumas fotos do local do show, com a visão daqui de casa! Espero que eu consiga ouvir o som novamente... Pelo formato do palco, acho que não será um problema.






sexta-feira, 30 de abril de 2010

Comentário de um colega sobre pós-graduação

Após ler o texto de Alexandre Barros, o colega Luiz Carlos Assis D Oleron Barreto nos respondeu com o seguinte comentário:

"Vê-se cada vez mais pessoas que saem de uma graduação e embarcam direto no mestrado. Concluído o mestrado, embarcam direto no doutorado. Terminam o doutorado e embarcam direto numa sala de aula para ensinar algo que não possuem vivência prática. Pesquisadores que só usam dados sintéticos. Alunos vitimizados por um discurso sem a contrapartida da aplicabilidade. Toy applications descritas nos slides do powerpoint. O medo da pergunta na sala de aula.

O resultado, em algum nível que não é o todo, é a formação de um educador(?) inseguro, que se protege de preconceitos e crenças vagas, de conhecimentos(?) não verificados no campo, de medos e arrogâncias. Um fenômeno cíclico que justifica a aberração de, em nosso país, um dos mais empreendedores do planeta, ter-se uma geração descomunal de artigos, e, de patentes, pífia.

Enquanto isso não mudar, continuaremos consumindo 95% de tecnologia desenvolvida em outros países."
Disse tudo.

quarta-feira, 23 de setembro de 2009

Rowlock no SQL Server não funciona

Me deparei esses dias com esse problema. Até ontem achei que o with (rowlock) do SQL Server funcionava. Resolvi escrever aqui um passo-a-passo para comprovar que não funciona.

Nesse exemplo, o SQL Server precisa fazer um lock exclusivo na tabela referenciada por uma FK. Nesse exemplo, é a Tabela1. Quando o SQL Server faz um insert na Tabela2, e um delete na Tabela1, ele precisa locar toda a Tabela2, pois ela tem uma FK para a Tabela1. Como a Tabela2 está locada para inclusão, o delete fica aguardando a liberação.

Esse problema só é resolvido com a criação de índices. O rowlock parece não fazer efeito, mesmo com o índice.

Vamos entender melhor no passo-a-passo abaixo. Começamos com a criação do modelo de dados.

Tabela1

Chave1 (int) not null IDENTITY

Valor1 (varchar(10)) not null

Tabela2

Chave2 (int) IDENTITY

Valor2 (varchar(10)) not null

Chave1 (int) null, FK para Tabela1

Feito isso, vamos incluir 10 registros em cada tabela, mantendo a Chave1 em Tabela2 sempre nulo.

Exemplo de dados das tabelas:

Chave1

Valor1

1

VT1 - 1

2

VT1 - 2

3

VT1 - 3

4

VT1 - 4

5

VT1 - 5

6

VT1 - 6

7

VT1 - 7

8

VT1 - 8

9

VT1 - 9

10

VT1 - 10

Tabela 1: Exemplo da tabela 1

Chave2

Valor2

Chave1

1

VT2 - 1

NULL

2

VT2 - 2

NULL

3

VT2 - 3

NULL

4

VT2 - 4

NULL

5

VT2 - 5

NULL

6

VT2 - 6

NULL

7

VT2 - 7

NULL

8

VT2 - 8

NULL

9

VT2 - 9

NULL

10

VT2 - 10

NULL

Tabela 2: Exemplo da tabela 2

Executar os comandos em janelas distintas:

1. Janela 1

begin tran;

insert into Tabela2 with (rowlock) (valor2) values ('NT2 - 1')

2. Janela 2

begin tran;

delete from Tabela1 with (rowlock) where chave1 = 5

3. Aqui o problema já ocorre! A Janela 2 fica aguardando a execução da Janela 1.

4. Libere a Janela 1 com o comando: rollback tran;

5. Faça o mesmo na Janela 2.

O esperado seria locar apenas um registro no insert. Esse problema só pode ser resolvido se for colocado um índice na Tabela2 para a coluna Chave1.

domingo, 26 de abril de 2009

Os heróis da produtividade (em TI)

Nesses anos de trabalho já vi tentarem ou eu mesmo tentei muitas formas de aumentar a produtividade minha e das equipes nas quais trabalhei. Algumas dessas formas foram mais eficientes que outras. Na minha empresa, a Pitang, já foi feita uma pesquisa sobre os "Vilões da produtividade", o que foi bem proveitoso e serviu para abrir o tema para a discussão de todos. Dessa pesquisa, me indaguei: e os heróis?

A busca pela produtividade – ou a otimização dos serviços – é constante em mercados competitivos. As pessoas, métodos e ferramentas mais produtivas geram mais faturamento, para o mesmo custo, ou para um custo ligeiramente maior (um investimento que compensa o aumento do faturamento). Percebe-se que equacionar os agentes da produtividade com a balança financeira definitivamente não é fácil. Mas podemos simplificar a busca, de modo a facilitar essa conta.

A parte mais complicada da vida, mas a mais fácil da equação são as pessoas. Melhorar a produtividade do indivíduo significa capacitar para a execução da tarefa a ele designada. Capacitar envolve a educação formal nas universidades e o treinamento nos métodos e ferramentas que serão utilizados no trabalho. Uma pessoa que não sabe usar uma ferramenta vai levar certo tempo para aprendê-la sozinho. Aprendendo sozinho vai criar vícios que não teria se houvesse uma capacitação adequada.

A produtividade do indivíduo pode ser arruinada por problemas pessoais ou pela falta de comprometimento, para citar alguns. Esses aspectos não entram na conta, é de cada indivíduo.

A segunda parte são as ferramentas. Chamo de ferramentas aquelas que são utilizadas para auxiliar o trabalho e aquelas que compõem o software, que fazem parte da infraestrutura do software. Daquelas que auxiliam, existem as que fazem o trabalho e as que fazem o trabalho de forma mais eficiente. Só pra citar, existem umas que disponibilizam formas de refactoring e existem outras que implementam vários níveis de refactoring. No dia-a-dia, aquelas que têm os vários níveis podem melhorar a produtividade, executando um determinado refactoring de forma mais rápida. E para aquelas ferramentas que compõem o software não é muito diferente. Mas considero as que fazem o trabalho e aquelas que fazem o trabalho de forma simples. Exemplo: uma ferramenta que implementa uma tabela e uma outra que implementa uma tabela associada a uma fonte de dados. A última já lida diretamente com os dados, independentemente da forma que gera a apresentação da tabela. A primeira deixa que o desenvolvedor se preocupe em como apresentar os dados, em detalhes executados de forma mecânica.

A terceira parte são os métodos. Considero métodos tanto a forma de trabalho – o processo de desenvolvimento do software – quanto a arquitetura para o desenvolvimento. O processo de software determina quão simples será a designação de atividade e a extração das métricas do desenvolvimento. Esses são os principais fatores que podem impactar na produtividade do desenvolvedor do software. Um processo simples no qual podem ser incluídas, alteradas e removidas atividades tenderá a ser mais produtivo, pois a produção do software sempre requer a absorção de mudanças de forma rápida. A arquitetura do software pode determinar o esforço necessário para criar pontos de função. No final, o que vai importar para o cliente é:

  • Que o software atenda ao principal propósito dele. Para quem desenvolve é melhor gastar mais esforço no básico, no que é mais importante, do que se preocupar em fazer a mais. Agradar ao cliente significa fazer bem o que ele pediu.
  • Que o software seja rápido. Ninguém gosta quando um clique demora vários segundos.
  • Que o código tenha certa ordem. Todo software deve evoluir com o tempo, seja por mudanças no processo do cliente, seja por melhorias na interface com o usuário. Enfim, sempre há espaço para melhorar. Um código desordenado vai dificultar essas modificações do software.

A arquitetura do software está relacionada com a performance e a organização do código.

Desses três aspectos de produtividade do software minha impressão e no que acredito fortemente é na capacitação das pessoas. O desenvolvimento de software é um trabalho criativo, não pode ser considerado uma produção mecanizada. As pessoas determinam tanto a qualidade quanto o custo que aquele software vai ter. As ferramentas e métodos são meios complementares para alcançar a melhor produtividade, mas o básico mesmo é investir em capacitação. Se toda empresa tivesse um planejamento financeiro e de tempo para capacitação o resultado final é que todo o conglomerado de empresas alcançaria uma produtividade mundialmente competitiva, independemente se o investimento feito em determinada pessoa seja perdido pela saída dela para uma outra empresa. Acho que devemos repensar de quem é mesmo a responsabilidade de treinar os funcionários. Os heróis não são as pessoas, mas sim a capacidade de cada uma delas.

quarta-feira, 1 de abril de 2009

Fotos e vídeos do show – da varanda

O evento histórico do heavy metal em Recife aconteceu de forma muito tranquila. Mais tranquila até que muitos shows na vizinhança. Eles foram bem pontuais, inclusive. Aqui em casa teve umas cervejas, uns petiscos e metal. Foi bom ficar na varanda só olhando o movimento.

Aí vai alguma coisa que consegui pegar durante o show:


Figura 1: O auge

Como eu disse em post anterior, a imagem da máquina (celular) à noite não fica muito boa. Esse mar que vocês vêem próximo ao palco é gente. Mas, apesar da euforia, o espaço não estava totalmente lotado. Deu pra ver que lá trás tinha espaço ainda.

Alguns vídeos do show:

  1. http://www.youtube.com/watch?v=rA8yqeH5m1w
  2. http://www.youtube.com/watch?v=yOBNck7yxmM

Na hora da saída, a zoada na rua: http://www.youtube.com/watch?v=c1o9RyNb1l8