Blog do André

Sql Server, ASP.Net, C# e Microsoft Dynamics

Eae Pessoal,

Meu professor da faculdade,  Sandro Renato, indicou um site sobre a publicação de um relatório relacionando os 25 erros mais cometidos por programadores que podem levar a falhas de segurança e abrir diversas portas para o crime cibernético e a espionagem.

Vale a pena dar uma olhada:
http://www.sans.org/top25errors/

abraços

Fala Pessoal,

Segue um código interessante para monitorar todas as modificações feitas no conteúdo das tabelas de um banco.

 

 

USE gespro
GO

 

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= ‘Audit’)

 

DROP TABLE Audit

 

CREATE TABLE Audit
(
AuditID [int]IDENTITY(1,1) NOT NULL,
Type char(1),
TableName varchar(128),�
PrimaryKeyField varchar(1000),�
PrimaryKeyValue varchar(1000),
FieldName varchar(128),
OldValue varchar(1000),
NewValue varchar(1000),
UpdateDate datetime DEFAULT (GetDate()),
UserName varchar(128)
)
GO

DECLARE @sql varchar(8000), @TABLE_NAME sysname

SET NOCOUNT ON

SELECT @TABLE_NAME= MIN(TABLE_NAME)
FROM INFORMATION_SCHEMA.Tables
WHERE
TABLE_TYPE = ‘BASE TABLE’
AND TABLE_NAME!= ’sysdiagrams’
AND TABLE_NAME != ‘Audit’

WHILE
@TABLE_NAME IS NOT NULL
BEGIN

EXEC(‘IF OBJECT_ID (”’ + @TABLE_NAME + ‘_ChangeTracking”, ”TR”) IS NOT NULL DROP TRIGGER ‘ + @TABLE_NAME+ ‘_ChangeTracking’)

SELECT @sql = ‘create trigger ‘ + @TABLE_NAME+ ‘_ChangeTracking on ‘ + @TABLE_NAME+ ‘ for insert, update, delete as
declare @bit int ,
@field int ,
@maxfield int ,
@char int ,
@fieldname varchar(128) ,
@TableName varchar(128) ,
@PKCols varchar(1000) ,
@sql varchar(2000),
@UpdateDate varchar(21) ,
@UserName varchar(128) ,
@Type char(1) ,
@PKFieldSelect varchar(1000),
@PKValueSelect varchar(1000)
select @TableName = ”’ + @TABLE_NAME+ ”’�

– date and user

select @UserName = system_user ,
@UpdateDate = convert(varchar(8), getdate(), 112) + ” ” + convert(varchar(12), getdate(), 114)

if @UserName = ”GRUPOFIAT\BRFS003011”
begin

– Action

IF(
if exists (select * from inserted)
if exists (select * from deleted)
select @Type = ”U”
else
select @Type = ”I”
else
select @Type = ”D”
– get list of columns

select * into #ins from inserted
select * into #del from deleted

– Get primary key columns for full outer join

select @PKCols = coalesce(@PKCols + ” and”, ” on”) + ” i.” + c.COLUMN_NAME + ” = d.” + c.COLUMN_NAME from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = ”PRIMARY KEY”
and c.TABLE_NAME = pk.TABLE_NAM
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME 

– Get primary key fields select for insert

select @PKFieldSelect = coalesce(@PKFieldSelect+”+”,””) + ”””” + COLUMN_NAME + ””””
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c
where pk.TABLE_NAME = @TableName
and CONSTRAINT_TYPE = ”PRIMARY KEY”
and c.TABLE_NAME = pk.TABLE_NAME
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

select @PKValueSelect = coalesce(@PKValueSelect+”+”,””) + ”convert(varchar(100), coalesce(i.” + COLUMN_NAME + ”,d.” + COLUMN_NAME + ”))”
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,  �
INFORMATION_SCHEMA.KEY_COLUMN_USAGE c �
where  pk.TABLE_NAME = @TableName �
and CONSTRAINT_TYPE = ”PRIMARY KEY” �
and c.TABLE_NAME = pk.TABLE_NAME �
and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

if @PKCols is null
begin
raiserror(”no PK on table %s”, 16, -1, @TableName)
return
end

select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName

while @field < @maxfield
begin

select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field

select @bit = (@field - 1 )% 8 + 1

select @bit = power(2,@bit - 1)

select @char = ((@field - 1) / 8) + 1

if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @Type in (”I”,”D”)
begin

select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field

select @sql = ”insert Audit (Type, TableName, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, UpdateDate, UserName)”

select @sql = @sql + ” select ””” + @Type + ””””
select @sql = @sql + ”,””” + @TableName + ””””
select @sql = @sql + ”,” + @PKFieldSelect
select @sql = @sql + ”,” + @PKValueSelect
select @sql = @sql + ”,””” + @fieldname + ””””
select @sql = @sql + ”,convert(varchar(1000),d.” + @fieldname + ”)”
select @sql = @sql + ”,convert(varchar(1000),i.” + @fieldname + ”)”
select @sql = @sql + ”,””” + @UpdateDate + ””””
select @sql = @sql + ”,””” + @UserName + ””””
select @sql = @sql + ” from #ins i full outer join #del d”
select @sql = @sql + @PKCols

select @sql = @sql + ” where i.” + @fieldname + ” <> d.” + @fieldname

select @sql = @sql + ” or (i.” + @fieldname + ” is null and  d.” + @fieldname + ” is not null)”

select @sql = @sql + ” or (i.” + @fieldname + ” is not null and  d.” + @fieldname + ” is null)”

exec (@sql)

end
end
end

SELECT @sql

EXEC(@sql)
SELECT @TABLE_NAME= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_NAME> @TABLE_NAME
AND TABLE_TYPE= ‘BASE TABLE’
AND TABLE_NAME!= ’sysdiagrams’
AND TABLE_NAME!= ‘Audit’
END

Fala galera,

Esse é o primeiro de vários posts que vou falar sobre um dos fundamentos do XP (Extreme Programming):
                 A Integração Contínua.

Integre continuamente
“Para trabalhar agressivamente a todo vapor, você precisa integrar continuamente o seu trabalho ao código-base de produção. Você deve integrar diariamente após a conclusão de cada tarefa. Os testes permitem que você saiba com confiança que, se tudo (ou todo o sistema) for executado com sucesso, você pode liberar o novo release do código-base. Integrando com essa frequência, a chance das alterações entrarem em conflito com as alterações de outra pessoa é minimizada. Se ainda houver um conflito, ele será mínimo. Estes ciclos curtos de integração também mantém a convergência entre todas as pessoas. O sistema não tem tempo para divergências entre as integrações.”

Retirado do livro: Extreme Programming - Guia Prático de David Astels, Granville Miller e Miroslav Novak - Editora Campus - Página 13.

Para que isso tudo aconteça é fundamental o uso de três ferramentas. Existem várias ferramentas desse tipo no mercado, mas para nosso exemplo iremos usar as seguintes ferramentas, respectivamente:

           - Ferramenta de Gerenciamento de Tarefas | Mantis
           - Ferramenta de Controle de versão do código |  CVS
           - Ferramenta de Build  | Cruise Control

Mantis
É um sistema de análise de erros opensource baseado em tecnologia web. Permite especificar um número indeterminado de estados de tarefas e atribuir perfis, programador, tester, coordenador, visualizador, etc. aos utilizadores. É possível definir que apenas os testers podem declarar bugs e apenas os coordenadores os podem analisar. O fluxo de trabalho também pode ser configurado através da ferramenta. É uma ferramenta bastante completa e útil.
  1. Instalando o ambiente
    Se você, assim como eu, não é muito antenado em como instalar PHP, MySql e Apache eu te recomendo baixar esse pacote aqui. Dentro dele tem um tutorial que eu baixei em um site e o autor do Post explica bonito como instalar os bixanos. Eu Já tive vários traumas em instalar esse trio parada dura, mas com esse tutorial foi tudo muito tranquilo.
  2. Configurando o Mantis
    Acesse o Mantis e adicione usuários, projetos e vincule tarefas a esses projetos. Cada melhoria e correção no seu código deve ser criado uma nova tarefa atribuida a um usuário. Dessa forma você poderá acompanhar com foi a evolução do seu código durante o tempo de desenvolvimento e saber o que cada desenvolvedor está fazendo. Mas para frente eu vou mostrar como fazer integração entre o Mantis, CVS e Cruise-Control. Com esse softwares em sintonia, você, Gerente de Projetos, vai ter um ganho excelente de qualidade sobre o seu projeto.

 CVS
É uma opção ao Source Safe, pode ser encontrado para download gratuitamente. É uma ferramenta muito bacana que não fica atrás de outras por ai. Com ela é possivel fazer autenticação usando Windows Autentication, integra com o Cruise Control, é possivel fazer Checkout e Checkin remotamente, tem pontos de entrada entre cada comando, que permite fazer uma chamada a um aplicativo externo. Com isso podemos fazer várias integrações entre software, como irei falar nos próximos post.

 Já o seu Client, o WinCVS, exibe graficamente as versões do arquivo, acusa se ouve conflito de versões do arquivo, permite merge entre arquivos usando software externo (recomendo o WinMerge). Entre outras vantagens.

Instalação lado Servidor
Para começar a usar o CVS você precisa instalá-lo no servidor. Faça download da instalação do software aqui. A Instalação é muito tranquila, basicamente Next>Next>Install. Após concluir a instalação vá em Iniciar>Programas>CVSNT>CVSNT Control Panel.

Na aba “Repository Configuration”, adicione um diretório que será o local onde ficará o código-fonte, iremos chamar esse local de Repositório.

Na aba “Server Settings” estão algumas configurações do CVS.

  • Na propriedade “Run as user”, escolha de preferência a opção [client user], pois com essa opção selecionada é feito uma integração com o usuário do desenvolvedor no Active Directory do Windows. Caso não queira esse tipo de segurança, defina um user qualquer.
  • Na propriedade “Default Domain”, escolha o domínio no qual os usuário irão se autenticar. Clique em OK.

Com isso você já tem um repositório central. Por enquanto você ainda não faz controle de nenhum código, (na nomeclatura do CVS chamamos de Módulos). Adicionar módulos ao seu repositório central é feito no lado cliente. Então, por enquanto, o servidor já está configurado. Vamos agora mexer no lado cliente.

Instalação lado Cliente
Como dito anteriormente, o cliente para o CVS que iremos usar é o WinCVS. Faça download aqui da instalação do mesmo. 

Concluído o download, descompacte e executa o arquivo wincvs_setup.exe. Para uma instalação básica clique em Next até concluir a instalação. No término da instalação, o WinCVS sugere a instalação do CVSNT(não é o mesmo aplicativo que instalamos no lado Servidor, esse é apenas a instalação de alguns protocolos de comunicação CVS). Instale também o CVS como sugerido.

Após terminar a instalação vá em Iniciar>Programas> WinCVS > WinCVS

Abaixo segue alguns procedimentos básicos (não irei fazer um tutorial completo sobre o WinCVS. Para mais detalhes acredito que um bom caminho será uma busca no google ou mexer no programa e aprender sozinho).

  1. Conectando-se ao servidor CVS
    Para se conectar ao servidor CVS central clique em Admin>Login. Você deve informar o CVSROOT para se conectar.
    :pserver;username=<usuario>;hostname=<servidor>:/<repositorio>
    onde:
    <usuario>: É o usuário do cliente no dominio que foi especificado na aba Server Settings, no Painel de controle do CVS no servidor
    <servidor>: Nome do servidor(DNS) onde está instalado o CVS
    <repositorio>: Nome do repositório criado na aba Repository Configuration, no Painel de controle do CVS no servidor.Clicando em OK, será solicitado a senha do usuário especificado no dominio.
    Dando tudo certo você estará conectado no servidor CVS.
  2. Importando Módulo
    Chegou o momento de “subir” o seu código-fonte para o servidor de Controle de Versão. Para fazer isso você precisa selecionar o diretório do seu codigo-fonte. Clique com o botão direito no diretório raíz da sua aplicação e vá na opção “Import Module”. Uma janela chamada “Import Filter” deve aparecer lhe informado se foi encontrado algum conflito em algum arquivo do seu código-fonte. Clique em OK.
    Na janela Import Settings, na propriedade “Repository Path” você deve especificar o nome do seu Módulo. Informe um nome bem sugestivo pois esse nome será usado várias vezes durante todo os processo de integração contínua. (Como vou fazer referência a esse módulo várias vezes nesse post vou chamá-lo de ADW). Clique em OK.Caso não aconteça nenhum problema será feito um “upload” do seu código-fonte para o servidor Central. Para conferir se tudo está realmente certo, vá no seu servidor de CVS, no diretório do Repositório e veja se foi criado uma pasta com o nome do módulo informado do WinCVS. Caso esteja tudo de acordo seu código-fonte está realmente no Servidor de Controle de versão de código.
  3. Fazendo Checkout
    Checkout no dia-a-dia de um desenvolvedor é como bater-ponto na portaria. Deve ser feito diariamente ou após o início de cada tarefa. Cada tarefa atribuida e admitida pelo desenvolvedor no Mantis deve ser criado um diretório com o código da tarefa. O checkout será feito dentro desse diretório, dessa forma a cada nova tarefa o desenvolvedor terá um cópia local do código-fonte.No WinCVS, após selecionar a pasta da tarefa, clique com o botão direito e selecione a opção Checkout Module. Na propriedade Module Name informe o nome do Módulo do seu código fonte, no caso do meu exemplo será ADW. Informe também o CVSROOT para se conectar ao Servidor do CVS e clique em OK. Caso esteja tudo certo o código começa a ser “baixado” para a estação de trabalho. Abra o Windows Explorer e vá no diretório onde foi feito o checkout. A sua aplicação estará ali e você poderá começar a fazer a intervenção no código para solucionar a tarefa no qual foi atribuido.
  4. Fazendo Checkin(Commit)
    Após terminar a tarefa abra o WinCVS, selecione a pasta que você fez checkout e trabalho e você verá que todos os arquivos que foram modificados estarão com o ícone vermelho indicando que foram modificados. Arquivos novos estarão  com um ícone com uma interrogação.
    Para comitar um arquivo modificado, selecione o arquivo e clique com o botão direito sobre ele e vá na opção “Commit”. Informe o que foi modificado no arquivo (Nos próximos post vou mostrar como integrar essa informação de log à tarefa no Mantis). Clique OK. O arquivo será comitado para o servidor Central e fará parte da nova versão do seu código-fonte. Cada arquivo modificado deverá ser feito commit. Você pode selecionar vários arquivos e comitar tudo de uma vez.

Nesse momento temos um repositório que contém o código-fonte centralizado. Porém ainda não temos um controle consistente sobre o código-fonte. Não temos a segurança para saber se esse código é confiavél, se algum desenvolvedor comitou um código que nem compila. Para que tenhamos um código-fonte centralizado e seguro é necessário usarmos uma ferramenta que garanta, comit após comit. que nosso código estará sempre íntegro. Para isso vamos falar sobre o Cruise-Control.

Cruise Control
É a ferramenta que irá orquestrar a compilação, testes unitários e reportar sucesso, observações e erros sobre o nosso código-fonte em períodos muito pequenos. Todo o processo é automático e cabe somente ao desenvolvedor fazer checkout, programar e fazer Checkin. Como o meu amigo Júnior da BHFox fala: o Cruz-Credo que “dedura” se o codigo recém comitado pelo desenvolvedor é aceitável ou não.

Instalação lado Servidor
Faça download o Cruise-Control aqui. É necessário que você tenha instalado no seu servidor de Build a framework 2.0 e caso sua aplicação tenha testes unitários você pode, opcionalmente, colocar uma tarefa de teste na sua Build. Eu uso o NUnit. Faça download do NUnit aqui.

  1. Adicionado projetos
    Vá na pasta server e abra o arquivo ccnet.config. Adicione o seguinte código XML.
    <cruisecontrol>
      <project name=”<nomeDoProjeto>”>
        <modificationDelaySeconds>600</modificationDelaySeconds>
        <sourcecontrol type=”cvs”>
          <executable>D:\INTEGRACAOCONTINUA\CVSNT\cvs.exe</executable><–Informe o local do executavel do cvs.exe–>
          <cvsroot>:pserver;user=<login>;password=<senha>;hostname=neo:/REPOSITORIO</cvsroot><–CVSROOT para conectar ao CVS. De preferência crie um usuário no AD para o Cruise-Control usar–>
          <module><nomeDoModulo></module><–Informe o modulo do CVS do projeto–>
          <workingDirectory><localDoCheckoutNoServidor></workingDirectory><–Informe aonde o CCNet irá fazer checkout no seu servidor–>
        </sourcecontrol>
        <tasks>
     <msbuild>
       <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
       <workingDirectory><localDoCheckoutNoServidor></workingDirectory><–Informe aonde o CCNet fez checkout no seu servidor–>
       <projectFile><nomeDaSuaSolucao>.sln</projectFile>
       <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
       <targets>Build</targets>
       <timeout>900</timeout>
       <logger><localOndeEstaInstaladoOCruiseControl|\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
     </msbuild>
          <nunit path=”C:\Arquivos de programas\NUnit 2.4.8\bin\nunit-console.exe”>
            <assemblies>
              <assembly><localDoCheckoutNoServidor>\Solucao\teste\bin\Debug\teste.dll</assembly>
            </assemblies>
          </nunit>
        </tasks>
      </project>
    </cruisecontrol>Salve o arquivo e execute o aplicativo CCNet.exe. Esse executavel irá monitorar o seu Servidor de Controle de Versão. Caso encontre alguma modicação ele irá executar as tarefas que forem atribuida dentro do Node <task>. No nosso caso ele irá executar o MSBuild, esse é um executável que vem junto com a .Net 2.0 que permite que você compile soluções .Net sem a necessidade de ter um Visual Studio instalado na máquina. 
  2. Monitorar Builds
    Para monitorar como anda o seu Servidor de Build use o CCTray, faça download aqui. Esse aplicativo informa o status da Build. Deve ser instalado tanto no Servidor quanto nas estações de trabalho.
    Existe também o site do CCNet. Vá no IIS e adicione um diretório Virtual apontado para a pasta webdashboard do Cruise Control. Nesse site você fica por dentro de todos os detalhes dos logs da build do seu projeto.

Espero que tenham gostado desse post. Qualquer dúvida, como sempre, entre em contato comigo.

Um grande abraço.

Bom dia pessoal,

Tenho uma base em MySql com um banco de um software open source. Eu precisava conectar a essa base para fazer algumas leituras para isso criei uma aplicação .Net 2.0, usando o MySQL Connector/Net recomendado pelo MySql, porém ao fazer um simples select acontecia o seguinte erro na minha aplicação:

Unhandled Exception: System.Threading.SemaphoreFullException: Adding the given count to the semaphore would cause it to exceed its maximum count.
   at System.Threading.Semaphore.Release(Int32 releaseCount)
   at System.Threading.Semaphore.Release()
   at MySql.Data.MySqlClient.MySqlPool.RemoveConnection(Driver driver)
   at MySql.Data.MySqlClient.MySqlPoolManager.RemoveConnection(Driver driver)
   at MySql.Data.MySqlClient.NativeDriver.Dispose(Boolean disposing)
   at MySql.Data.MySqlClient.Driver.Close()
   at MySql.Data.MySqlClient.NativeDriver.Finalize()

Depois de muita luta e dor de cabeça descobri aqui que a versão do driver que eu estava usando, a 5.1.6, estava com bug. Baixei a versão 5.2.2, substitui as Dlls e deu tudo certo.

Fica a dica pra quem encontrar pela frente esse mesmo problema.

grande abraço.

Pessoal,

Eu tinha falado sobre a certificação 70-431, porém eu não postei quais livros eu usei para estudar para a prova.

Segue os links:

http://www.amazon.com/MCTS-Self-Paced-Training-70-431-Pro-Certification/dp/073562271X/ref=pd_bbs_10?ie=UTF8&s=books&qid=1216738076&sr=8-10
Esse é o livro para quem quer passar na prova. Ele tem um conteudo bem extenso, CD para fazer os teste, e o vaucher de 15%.

http://www.amazon.com/Microsoft-SQL-Server-2005-Techniques/dp/0735623163/ref=sr_1_1?ie=UTF8&s=books&qid=1216738307&sr=1-1
Esse livro é mais para apoio. Não é bem abrangente com o anterior, mas é bom té-lo ao lado.

Eu tive acesso a esse livros apartir do site da microsoft. Na página eles recomendam quais livros são sugeridos para estudo.

Nessa página são mostrados quais certificações MCTS estão disponiveis:
http://www.microsoft.com/learning/mcp/mcts/default.mspx

Cada certificação tem sua lista de livros sugeridos. Veja aqui a do Exame 70-431:
http://www.microsoft.com/learning/en/us/exams/70-431.aspx

bons estudos a todos.

Um Beijo especial para minha melhor leitora, minha namorada Bianca. Â

Da série: Código que nunca encontramos quando estamos precisando com urgência.

Pessoal,

Tái um select interessante. Ele retorna informações das colunas (nome, posição, se é Primary key, etc.) de uma determinada tabela. Um dia desses eu estava precisando saber qual coluna da minha tabela era Primary Key e não achei fácil.

select
col.COLUMN_NAME as nome,
col.ORDINAL_POSITION as posicao,
col.DATA_TYPE as tipo,
col
.CHARACTER_MAXIMUM_LENGTH as tamanhoMaximo,
col.IS_NULLABLE as isNullable,
(SELECT count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE kc on tc.CONSTRAINT_NAME = KC.CONSTRAINT_NAME WHERE CONSTRAINT_TYPE = ‘PRIMARY KEY’ AND tc.TABLE_NAME=@NomeDaTabela AND COLUMN_NAME=col.COLUMN_NAME) as isPk
from INFORMATION_SCHEMA.COLUMNS col
where TABLE_NAME=@NomeDaTabela

Fala amigos,

Na última sexta feira 13 fui aprovado na prova 70-431 para certificação MCTS SqlServer 2005. Prova de 47 questões(35 questões fechadas e 12 de simulado) bastante puxada. Fiz a prova na Partner da Microsoft aqui em Belo Horizonte, a BHS.

Dessa vez eu prefiri comprar o livro da certificação na Amazon, ao invés de ler o material no PC. Recomendo a todos que façam o mesmo, pois o material é de excelente qualidade, chega em no maximo 20 dias, é barato(se comprar o preço que seria pra imprimir o PDF) e também dá 15% de desconto para fazer a prova(no final do livro tem um vaucher). Estudei durante 5 meses e graças a Deus eu consegui mais essa vitória.

A próxima batalha agora será a certificação em BI. Encomendei esse livros no mesmo dia que eu fui aprovado na 70-431.

http://www.amazon.com/Microsoft%C2%AE-Server-Reporting-Services-Microsoft/dp/0735622507/ref=sr_1_30?ie=UTF8&s=books&qid=1214273838&sr=8-30

http://www.amazon.com/Microsoft%C2%AE-Server-Analysis-Services-Microsoft/dp/0735621993/ref=sr_1_29?ie=UTF8&s=books&qid=1214273838&sr=8-29

http://www.amazon.com/MCTS-Self-Paced-Training-Exam-70-445/dp/0735623414/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1214273884&sr=8-1

Tomara que eles cheguem logo pra eu começar a estudar. 

Por falar em novidades, apartir do dia 2 topei o desafio na empresa Solin Integradora de Tecnologia. Excelente empresa para trabalhar. Lá eu estou implementando uma framework em .Net para agilizar os processos de desenvolvimento.

Um abraço a todos e obrigado pelas visitas. Ontem o site atinguiu a excelente marca de 10.000 visitas.

Por decisão do CGI.br, o domínio COM.BR, destinado a atividades comerciais genéricas na Internet, também poderá ser registrado sob um CPF. Ou seja, pessoas naturais com atividades comerciais e afins poderão registrar domínios COM.BR.

Esta modificação terá efeito a partir do dia 01/05/2008.

fonte: http://registro.br/anuncios/20080416.html

obs.: Meu dominio vai sair da informalidade.

obs2.:Com essa facilidade de criar endereços daqui a um tempo vai ser dificil encontrar um dominio disponível sendo necessário colocar números nos endereços como existe hoje nos emails, por exemplo: andrenobrega1.com.br.

obs3.: O CGI deve tomar muito cuidado porque vai ter muita gente pegando o CPF alheio para criar sites com a finalidade de golpear os usuários. E olha que isso já acontece com muita frequência hoje em dia.

A Empresa Tiobe publica mensalmente o ranking das linguagens mais usadas no mundo. O C# aparece na 8° posição atrás do Java(1°), C(2°), (Visual)Basic(3°), PHP(4°), C++(5°), Perl(6°) e Python(7°). Transact-SQL aparece apenas na 29° colocação. Destaque para o Ruby que está na 9° posição e com forte crescimento.

Confira a lista completa:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

 Uma pesquisa divulgada pelo site de empregos Catho revelou que a relação candidato vaga em carreiras relacionadas a TI é de 1,03.

Isso poderia significar que não há desempregados nesse mercado. Segundo o gerente de pesquisas salariais da Catho, Mário Fagundes, apesar de as vagas existirem, elas não são preenchidas. Isso porque as empresas não estão encontrando candidatos qualificados o suficiente para atender essas vagas.

 

Segundo Fagundes um dos fatores que contribuem para isso é que as escolas não estão conseguindo acompanhar a evolução tecnológica para formar um profissional mais bem preparado.

O lado bom da pesquisa é que com o crescimento do setor o número de vagas deve continuar aumentando. E isso pode até reduzir a relação candidato-vaga. Segundo a pesquisa, até 2010 serão necessários 100 mil profissionais de TI para atender a demanda das empresas.

 

Todos esses números foram extraídos do site de empregos Catho. Segundo Fagundes a pesquisa reflete a realidade do mercado de TI, já que o site reúne cerca de 9%% das vagas disponíveis em todo o mercado. Segundo ele, a base de erro do estudo é de 4%.

 

fonte: http://info.abril.com.br/blog/silvia/20080324_listar.shtml

Post Antigos »