Páginas

06 Julho 2011

Data Protector Express não conecta no Master Server

O HP Data Protector Express(DPE) é um aplicativo de backup excelente mas eu tinha um problema com ele. Quando eu reiniciava um servidor cliente, frequentemente ele não conectava com o Master Server do DPE. Isso não acontecia com todos e muitas vezes reiniciando o serviço no servidor cliente resolvia o problema.

Descobri que o problema ocorre porque tenho duas placas de rede no Master Server e pelo visto o DPE é capaz apenas de ouvir solicitações em uma delas. Por isso os servidores clientes estavam tentando comunicar através de uma das placas que o DPE não ouvia.

A solução é forçar um bind do DPE com uma placa de rede especifica. Para isso eu fiz:

1. Pare o serviço do DPE no Master Server.

2. Edite no Master Server o arquivo <pasta do DPE>\config\dpconfig.ini.

3. Adicione o parâmetro abaixo na seção [configuration]:

bindTo=aaa.bbb.ccc.ddd

onde aaa.bbb.ccc.ddd é o IP da placa de rede.

4. Inicie o serviço DPE no Master Server.

 

Ainda assim pode ocorrer de algum servidor cliente não conectar. Para resolver isso:

1.  Edite no servidor cliente o arquivo <pasta do DPE>\config\dpconfig.ini.

2. Modifique o parâmetro abaixo na seção [configuration]:

databaseServerAddress=aaa.bbb.ccc.ddd

onde aaa.bbb.ccc.ddd é o IP do Master Server (não use nome DNS).

3. Reinicie o serviço DPE no servidor cliente.

 

Eu encontrei essa solução em http://goo.gl/FKjOd

12 Maio 2011

Configurando acesso 3G da Claro no Android

Vá em Configurações  -> Redes sem fio e outras –> Redes móveis –> Pontos de Acesso

Novo APN

Nome da conexão: Claro Dados GPRS
Nome do Ponto de Acesso (APN – Access Point Name): claro.com.br
Usuário:  claro
Senha:  claro

Fonte: http://goo.gl/gbSxC

20 Abril 2011

Component 'GRID32.OCX' or one of its dependencies not correctly registered: a file is missing or invalid

Você baixou o Sicalc, instalou no Windows XP e está recebendo a mensagem:

Run-time error '339':
Component 'GRID32.OCX' or one of its dependencies not correctly registered: a file is missing or invalid

Para resolver isso é necessário instalar o run-time do Visual Basic 6.0 que pode ser encontrado neste link.

28 Janeiro 2011

Criar subpasta em todas as pastas

Eu tenho uma unidade na minha rede com pastas para cada cliente da empresa. São muitas pastas! Essas pastas tem permissões especiais que impedem que os usuários criem novas pastas, estas podem ser criadas apenas pelo administrador da rede, no caso, eu!

Eis então que surge um problema: "Precisamos que seja criada a pasta 2010 dentro da pasta RH de cada empresa".

Não é difícil criar um script VBS para isso ou até no Power Shell (suponho) mas como entendo muito mais de C#, escrevi um aplicativo de console para isso, o MDALL.

A sintaxe do MDALL é bastante simples:

MDALL <pasta_raiz> <caminho_da_nova_pasta>

onde,

<pasta_raiz> é o caminho completo onde encontram-se as pastas.

<caminho_da_nova_pasta> é o caminho da nova pasta dentro da pasta encontrada no caminho raiz.

No exemplo acima, fica assim:

MDALL   L:    \RH\2010

esse comando vai varrer todas as pastas em L: e criar a pasta \RH\2010 dentro delas.

Se isto é útil para você,  baixe o MDALL neste link e, claro, sem nenhuma garantia e por sua conta e risco! Além disso, você também poderá precisar do .NET Framework 4.0.

13 Novembro 2010

HDD Dock Station Akasa

Ligado com HD encaixadoComprei recentemente um novo gadget para meu PC, um dock para discos rígidos. Isso é bastante útil quando preciso conectar um HD no computador mas não quero abrir a máquina para isso. Tem muita utilidade para técnicos, engenheiros ou entusiastas em geral.

O modelo que escolhi foi o Akasa Duo Dock, modelo AK-IC008-BK, esse na foto aqui do lado. O principal motivo da escolha foi porque, além da porta de conexão USB, ele também tem porta eSATA, muito comum nos computadores atuais e proporciona velocidades de transferência de 3 GB/s contra os 480 MB/s da porta USB 2.0. A Akasa também fabrica um modelo com porta USB 3.0. Este modelo eu comprei na Kabum.

O produto já vem com cabos USB, eSATA e fonte de alimentação. Tem um botão para ligar/desligar e outro para ejetar o disco rígido. Suporta discos de 3.5” e 2.5”. Uso no Windows 7 com conexão eSATA e nenhuma configuração é necessária. Basta encaixar o disco, ligar e ela já aparece disponível no sistema operacional.

O produto também é robusto e bem acabado. Mais algumas fotos abaixo:

Vista frontal Conexões

28 Agosto 2010

Manzke PC Frankenstein

PC-Frankenstein

Todos os computadores que tive até hoje foram do tipo Frankenstein, computadores que eu mesmo montei comprando as peças. Infelizmente não registrei imagens de todos eles e por isso vou batizar o meu computador atual de Manzke PC Frankenstein 1 ou simplesmente Manzke PC F1.

Vou registrar as características do Manzke PC F1 com amostras de tela do CPU-Z:

imageimage
imageimage
imageimage

O core speed dessa máquina é 3.0GHz apesar de aparecer menor no cpu-z. Isso porque o core speed é ajustado pelo AMD Quiet.

Algumas telas de benchmarks para a posteridade:

image

Unigine1Unigine2

pontoswindows


O Manzke PC F1 já deu o que tinha que dar e estou iniciando a montagem do Manzke PC F2, meu primeiro PC O.C. (OverClock). Vou publicar mais a respeito disso durante a montagem.

IMG_0160[4]
Manzke PC F1

12 Agosto 2010

Migrando do MySQL para o SQL Server

Este não é um post tutorial para explicar a migração de um banco de dados MySQL para o SQL Server da Microsoft. Apenas quero registrar algumas dicas e armadilhas que encontrei nesse processo.

Eu migrei dois aplicativos web: A intranet da empresa onde trabalho e meu site sobre MMOGs. Ambos usavam MySQL 5.1 acessado pelo Entity Framework do .NET.

Estrutura

Eu poderia ter usado a ferramenta de migração da Microsoft mas preferi criar um Database Project no Visual Studio 2010. Para isso usei o  SQL Create Script do MySQL Workbench para exportar o modelo. Feito isso, eu copiei cada CREATE TABLE do MySQL para um arquivo do tipo Table do Database Project, separando as Constraints e Índices. Nessa etapa, no meu caso, foi tranquilo já que a sintaxe do Create do MySQL é parecida com o SQL Server, ficando ajustes apenas nos tipos de dados.

Aqui vem o primeiro cuidado. No Create Script do MySQL Workbench as Constraints são criadas com o comando Create Table em uma seqüencia específica para que as referências sempre existam:

CREATE  TABLE IF NOT EXISTS `Departamento` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `EmpresaID` INT NOT NULL ,
  `Nome` VARCHAR(64) NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `fk_empresa_departamento_empresa1` (`EmpresaID` ASC) ,
  CONSTRAINT `fk_empresa_departamento_empresa1`
    FOREIGN KEY (`EmpresaID` )
    REFERENCES `Empresa` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB; 
Este script acima no Database Project será 3 arquivos:
Departamento.table.sql:



CREATE TABLE [dbo].[Departamento]
(
ID INT PRIMARY KEY IDENTITY(1,1) ,
EmpresaID INT NOT NULL ,
Nome VARCHAR(64) NOT NULL
)

Departamento.fkey.sql:



ALTER TABLE [dbo].[Departamento]
ADD CONSTRAINT FK_Departamento_EmpresaID
FOREIGN KEY (EmpresaID)
REFERENCES Empresa(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION




Departamento.fkey.sql:



CREATE INDEX IX_Departamento_EmpresaID
ON [dbo].Departamento (EmpresaID)




Nada impede que você coloque o CREATE INDEX no mesmo script do CREATE TABLE lembrando de separa-los pelo comando GO.



A medida que os scripts vão sendo criados no Database Project pode-se ir ajustando alguns tipos de dados. No MySQL Workbench quando criamos os modelos em diagrama é possível definir um campo como Boolean que depois e convertido em Tinyint(1) no MySQL e este deverá ser convertido para BIT do SQL Server. Terminado esse processo vem a parte legal: faça o Build do Database Project e todos os scripts serão validados, gerando uma lista de erros encontrados. Boa parte dos meus erros eram a falta do comando GO em alguns scripts, tipos de dados ou a falta do owner(dbo) antes do nome de algumas tabelas.



Eu não tinha muitas funções definidas no MySQL mas as poucas se limitaram em mudar alguma ou outra função agregada pela sua equivalente no SQL Server, por exemplo, Now() no MySQL é getdate() no SQL Server.



Minhas Store Procedures também foram fáceis de converter.




O próximo passo então é fazer o Deploy para o banco de dados através do comando com o mesmo nome no Visual Studio. O Deploy é muito bacana, principalmente quando nosso Database Project faz parte de uma solução e isso agiliza todo o processo de alterar banco de dados e atualizar o Entity Data Model, por exemplo.


Entity Data Model



Ambos os projetos que converti usam uma class library que contém um Entity Data Model. No meu caso, eu sempre gerei ele a partir do banco de dados e qualquer problema ou inconsistência entre o modelo e o banco eu fazia um “upgrade from database” ou simplesmente apagava ele e gerava novamente. Não fosse o fato de eu ter alterado o nome de algumas views, bastaria gerar o modelo a partir do SQL Server e já estaria tudo pronto para os sistemas. Assim, acabei tendo que fazer um replace em alguns arquivos cujos objetos tinha uma nomenclatura “view_clientes” para “ViewClientes”. A geração do modelo usando o SQL Server é muito mais rápido que no MySQL!


Dados



O último passo é migrar os dados do MySQL para o SQL Server.



Neste processo fiz um Data Dump do MySQL usando o MySQL Workbench e marcando apenas as seguintes opções em “Advanced Export Options”:



  • complete-insert
  • hex-blob
  • no-create-info


Os comando de Insert gerados são compatíveis com o SQL SERVER mas algumas substituições nas seqüencias de escape são necessárias:



  • Troque \' por '' (dois apóstrofos)
  • Troque \" por " (aspas)
  • Troque \\ por \


Além disso acrescente no início do script de cada tabela:

SET IDENTITY_INSERT <NomeDaTabela> ON

e no final:

SET IDENTITY_INSERT <NomeDaTabela> OFF


Dependendo do formato de datas gerado pelo backup do MySQL Workbench e do formato existente no SQL Server, será necessário usar o seguinte comando no início dos scripts:


SET DATEFORMAT ymd


No caso acima, o script gerado pelo MySQL tem datas nos formato YYYY-MM-DD e informa ao SQL Server que a conversão de varchar para datetime encontradas deverão assumir que os valores do ano, mes e dia estão na sequencia ymd.

Pronto, minha migração está concluída!


No meu caso esse processo foi fácil, em boa parte, porque meus projetos estão baseados no Entity Framework.



Próximo passo: Code-First!