Não tão óbvio assim

Tá bom, talvez o motivo de eu estar ausente não seja tão óbvio, então vejam:

Congratulations!  LMS webAula 2008 has been tested and meets the criteria for the Microsoft “Platform Test for ISV Solutions” program:  Platform Test: Windows Server + SQL Server 2005

Your next steps are very important.  Please take a moment now to review the Next Steps information on our web so that you can begin enjoying the benefits as soon as possible.

Please keep this email at hand.  You will need to refer to the product information exactly as it appears below in order to complete your next steps:

Company Name:          WEBAULA PRODUTOS E SERVIÇOS PARA EDUCAÇÃO S/A

Product Name: LMS webAula 2008

Product-ID:      WE08XXXXXX37

Thank you for participating in the Microsoft “Platform Test for ISV Solutions” program at VeriTest.

Best Regards,

The Microsoft Platform Test Team at VeriTest

Isto é um e-mail que recebi com alegria depois de tanto trabalho, afinal, o LMS webAula é agora um software CERTIFICADO PELA MICROSOFT! Nossos clientes ganham mais esta certificação para atestar a qualidade do produto.

É isso ai, passei um bom tempo respondendo questionários, desenvolvendo documentos, submetendo o produto para os testes e respondendo dúvidas do pessoal da Veritest, o resultado valeu todo o trabalho.

Abraços!

Máscara de Sub-rede

Tô sumido, por razões talvez óbvias mas estou de volta para postar alguns artigos que, espero eu, serão úteis a todos os amigos.

Por causa da limitação de quantidade de IPs imposta pelo protocolo IPv4 e outros vários motivos que podem ser vistos aqui temos o que se chama sub-rede. São pedaços de redes, escopos de rede, que vivem separados de outras sub-redes. Graças a este mecanismo, você pode ter sua rede em casa e controlar seu próprio endereçamento assim como qualquer outro indivíduo. E é assim que podemos identificar que um IP vem de um provedor específico.

A máscara da sub-rede é o que faz o computador entender se aquele endereçõ que ele deve procurar, para enviar o pacote é na sua rede ou em uma outra rede (neste caso ele deve enviar para o gateway padrão).

Então se tenho um IP [192.168.3.1] com máscara [25.255.255.240] e quero mandar um pacote para o IP [192.168.3.11] mandarei para a mesma rede, através de conexão direta, porém se quero mandar para o IP [192.168.3.16] ai já é outra história, terei que usar e abusar de meu gateway (máquina que supostamente, conhece as 2 redes), mas me pergunte, como sei isso?

Tenho uma "cola" muito boa que me mostra como são formadas as sub-redes de Classe C.

Mas pra quem é mais power e não quer imprimir uma listinha pra ficar olhando, temos o Sub-net calculator que é fenomenal!!!

Invalid length for a Base-64 char array

Estava eu arrumando bugs em um projeto que peguei no freela e me deparei com este erro quando passei uma string encriptada pela URL (Querystring) e após muito quebrar a cabeça li um artigo que salvou! Com um approach muito simples praticamente resolveu meu problema.

O principal responsável foi o algoritmo de criptografia presente no Enterprise Library, de nome sugestivo (por ser indiano) RijndaelManaged este algoritmo e suas funções são muito bem feitas e simples demais de usar, porém, a string criptografada contém alguns sinais de soma (+) , veja o exemplo:

5NGETiEwyYy3F+P+QnzkRUeB5l7xUTRJuhhGZmFwi5WxCfeo3+kCvTs0z9s+CnZW

Na query string vira:

5NGETiEwyYy3F P QnzkRUeB5l7xUTRJuhhGZmFwi5WxCfeo3 kCvTs0z9s CnZW

Então a solução simples (porém não muito elegante) é recuperar a string a seu formato inicial (replace de espaço para +):

byte[] dados = Convert.FromBase64String(ciphertext.Replace(” “,”+”));

Espero que este artigozinho possa ser útil e economizar bastante tempo de todos....!

Abraços!

PS: Hoje é meu glorioso ANIVERSÁRIO!!! 29 anos de muita saúde e sabedoria (hehehe).

Ordenar registros? Com Row_Number() é moleza!

Já precisou adicionar um campo ORDEM em alguma tabela que terá um contexto diferente do "a tabela toda":

Por exemplo: Ordem de notícias dentro de sua respectiva sessão.

Pois é, o SQL 2005 tem uma solução simples pra isso, é o comando ROW_NUMBER() OVER (ORDER) e juntando um pouco de ginga brasileira para resolver problemas teremos o roteiro abaixo.

O ROW_NUMBER() OVER() espera um parametro no OVER que descreva a ordenação que se deseja aplicar será retonado nesta coluna, o número de ordem do registro dentro do contexto daquela ordenação.

Veja o roteiro:

--Cria-se o campo (nullable pois não temos como preencher agora):

Alter Table Noticia Add Ordem Int Null;

Select Distinct 'Select ''Update Noticia Set Ordem = '' + convert(varchar,ROW_NUMBER() OVER(ORDER BY DATA_PUBLICACAO)) + '' Where ID = '' + Convert(varchar,ID) From Noticia Where Sessao_ID = ' + Convert(varchar,Sessao_ID) From Noticia

O resultado deste select serão tantas linhas quantas sessões sua tabela tiver, porém iremos retornar comandos SELECT que nos trarão a ordem realmente, no nosso exemplo seria assim:

Select 'Update Noticia Set Ordem = ' + convert(varchar,ROW_NUMBER() OVER(ORDER BY DATA_PUBLICACAO)) + ' Where ID = ' + Convert(varchar,ID) From Noticia Where Sessao_ID = 34
Select 'Update Noticia Set Ordem = ' + convert(varchar,ROW_NUMBER() OVER(ORDER BY DATA_PUBLICACAO)) + ' Where ID = ' + Convert(varchar,ID) From Noticia Where Sessao_ID = 117
Select 'Update Noticia Set Ordem = ' + convert(varchar,ROW_NUMBER() OVER(ORDER BY DATA_PUBLICACAO)) + ' Where ID = ' + Convert(varchar,ID) From Noticia Where Sessao_ID = 904

Executando a primeira linha retornariamos:

Update Noticia Set Ordem = 1 Where ID = 64
Update Noticia Set Ordem = 2 Where ID = 65
Update Noticia Set Ordem = 3 Where ID = 72
Update Noticia Set Ordem = 4 Where ID = 75

Executando a segunda linha teriamos:

Update Noticia Set Ordem = 1 Where ID = 19
Update Noticia Set Ordem = 2 Where ID = 21
Update Noticia Set Ordem = 3 Where ID = 22
Update Noticia Set Ordem = 4 Where ID = 23

Ai basta pegar cada grupo de updates e executar, de modo que preenchamos a tabela toda e finalmente podemos bloquear inserção de nulos:

Alter Table Noticia Add Ordem Int Null;

É importante entender, que não se pode colocar Union ou fazer qualquer tipo de junção entre as queries que retornarão os updates, pois o Row_Number() irá retornar a ordem do registro naquele contexto (com todos os registros).

Sem tempo, dica rápida! WAST no Vista

Pessoal, sei que prometi uma onda de posts, mas a webAula está sugando até o último suspiro de meu tempo, então vai ai uma dica rápida.

Alguém conhece o WAST? Web Application Stress Tool? Ferramenta mão na roda para testar softwares web. Você grava um script e basicamente dá um play com n usuários virtuais para simular trafego na sua aplicação.

Este software merece até uma sessão nova, pq dá pra condizir testes bem completos com ele. Você não daria nada para ele pela interface.

OK. Até ai, não tem novidade nenhuma que mereça um post, a não ser que você seja usuário do Windows Vista (assim como eu). A instalação dele falha no vista, mas não se preocupe! Seus probremas se acabaram-se! Você achou o TI100loop!

Para instalar ele no vista, você precisa da DLL msvcp50.DLL. Coloque-a no pasta Windows\System e ai pode instalar o software (ou reinstalar caso já tentado instalar).

A DLL pode ser obtida aqui.

Um abraço pra todos!

Olá do Geraldo!

Olá pessoal! Como vão? Espero que tudo esteja nota 10!

Finalmente apareci! Há tempos eu venho tentando arrumar alguns minutos para postar alguma coisa aqui na nossa comunidade, e agora criei o blog (já é um passo).

TI sem loop vem para ajudar você que está preso em algum problema, algum pepino, alguma cilada!

A Ideia é postar tudo de "cabeludo" que eu enfrento no dia-a-dia como Coordenador de Datacenter da webAula. Geralmente serão posts de infra, windows, redes, porém, todos sabem que "de médico, louco e desenvolvedor" todos temos um pouco, vão acabar aparecendo alguns posts também nesta área.

Fiquem à vontade para solicitar temas para os futuros posts e também para criticar minha escrita, ideias e workarounds :) aqui é um espaço livre!

Próximos Posts (não necessariamente nesta ordem):

  • Instalando o Windows Live Writer no Windows 2003
  • Postando no Comunity Server com o Windows Live Writer
  • Liberando permissão de execução de código .NET situado em um drive.
  • Lidando com o chatinho do Rijandel Managed.
  • Dica de ordenação de registros no SQL Server.