Cleydson Silva

<csa:Devaneios id=blog Runat=server />
 
posts - 28, comments - 20, trackbacks - 7

My Links

News

Add to Technorati Favorites Locations of visitors to this page
www.flickr.com
This is a Flickr badge showing public photos from cleydson. Make your own badge here.
My Amazon.com Wish List

Story Categories

Archives

Post Categories

.NET

Caras

Computação Científica

Links

Sign In

    Username

    Password

     Remember Me  

Thursday, June 26, 2008

A ideia de separar o conteúdo do formato é fantástica! Fico louco quando vejo um site bem feito utilizando as boas práticas dos web standards. Exemplo mais que clássico é o Zen Garden, com um slogan não menos interessante "A Estrada para a Iluminação". Só pra alinhar os pensamentos..., Grosso modo você cria sua página utilizando os elementos de marcação do HTML, sem formatação alguma, e depois utilizando os recursos do CSS coloca o formato na página, não necessariamente nessa ordem.

Uma coisa muito importante, tente criar "links" semanticos entre o elemento que você utilizará para marcar determinado conteúdo e o conteúdo propriamente dito. Exemplo: Se você vai criar parágrafo com texto simples, não precisa criar um <div> para isso, utilize o <p> de parágrafo. Se começar a utlizar <div> para tudo que é conteúdo vão começar a te chamar de divmaníaco, e ser um divmaniaco NÃO PODE! Desculpe a brincadeira! Não resisti. :D

Utilizando essa ideia de conteúdo separado do formato, elementos semanticamente corretos, etc. você acaba chegando no coceito tableless, sem tabelas, você para de utilizar tabelas para formatar a sua página já que a formatação vai ser feita com o CSS. Aqui tem um link muito interessante, um vídeo feito pelo Diego Eis. É a criação de um layout utilizando isso tudo acima citado. Muito bom!

 

Abraços!

Feedback (0)

Tuesday, March 25, 2008

Criar threads e usa-las não é uma tarefa complicada, porém o uso deste recurso introduz algumas dificuldades que não são enfrentadas pelo programador quando o mesmo utiliza a programação seqüencial.

Dizer que um programa é multithread é o mesmo que dizer que este programa possui vários pontos de execução, sendo um ponto para cada thread. Pra facilitar a compreensão é como se existisse um processador para cada thread, assim, ao criar uma thread você pode imaginar-se instanciando um novo processador para fazer o trabalho que você está dando para aquela thread fazer.

Eu acredito muito que o leitor não possui um super computador com dezenas de processadores, sendo assim, melhor manter o exemplo acima apenas para fins de compreensão do que realmente é uma thread ok?(Isso foi apenas um momento auto-ajuda, afinal de contas auto-ajuda vende muito mais que livros de informática. :D)

Na verdade o Sistema Operacional com seu algoritmo de escalonamento de processos, pede ao processador para fazer uma pequena parte do trabalho de cada vez e trocando de uma thread para outra e de um processo para outro tão rapidamente que temos a impressão de possuir vários processadores. Na verdade todo o processamento é feito em cima das threads, todo processo tem pelo menos uma thread, sendo assim,quando digo que o processador troca de um processo para outro é simplesmente para lembrar-lhe que temos threads de outros processos sendo executados o tempo todo.

Podemos dizer que os processos com suas respectivas threads concorrem ao processador e por essa e por outras o termo concorrência é tão usado ao se falar de threads.

Mas por que usar multithreads? Para que concorrência?

Caso você tenha um micro ou um servidor multiprocessado em mente já deve ter surgido imediatamente em sua cabeça a idéia de usar os recursos dos vários processadores que possui, afinal de contas para que tanto processador se não para aproveitar os mesmos.

Outra coisa seria utilizar as threads para trabalhar com dispositivos lentos (comparados ao nosso nobre processador) como impressoras, rede, discos e outros. Assim nossa thread vai fazer esse serviço de esperar o retorno dos nossos dispositivos “lesmas” enquanto nosso programa principal faz coisas mais importantes.

Agora, uma coisa é certa, a razão é sempre dos usuários. Mediante isso por que não pensar neles? Então por que deixar aquela tela travada para que o coitado fique abrindo o gerenciador de tarefas e matando o malvado processo que teima em travar todas as vezes que ele pede a geração de um determinado relatório ou uma consulta um pouco mais rebuscada, ou coisa do tipo? Neste caso a thread seria uma aliada. Ela iria trabalhar na consulta e a interface gráfica não seria substituída por uma tela branca travada e sem vida.

Um caso um pouco mais raro para a grande maioria dos desenvolvedores seria o uso na construção de uma aplicação distribuída. Imagine-se criando o seu próprio IIS, receber as requisições do usuário e então criar uma thread para cada requisição e deixa-la atende-lo. Obs.: Dei um exemplo extremamente simplista do trabalho do IIS, meramente ilustrativo.

Então é mais ou menos isso, sei que fui simplista, mas... pra que complicar? O objetivo foi entender o conceito. Logo virei com a segunda parte dessa conversa sobre threads. Como cria-las e controla-las.

Comentários e críticas são muito bem vindas.

Abraços!

//Cleydson

Technorati Marcas: ,

Feedback (0)

Antes de começar a ler: Saiba que o que está escrito aqui é para quem está começando agora com essa história de virtualização.

Tendo isso em mente vamos lá. Se você não quer instalar o Linux, ou qualquer outro SO, em uma outra partição do seu HD, mas está querendo testar algo ou simplesmente conhecer mais sobre diversos SOs. Você pode virtualizar.

Este é um termo interessante e muito útil, você não precisa criar Dual Boot, ou seja, não precisa instalar dois sistemas operacionais no seu micro e decidir qual vai usar na hora de iniciar o computador. Pode instalar o SO preferido ou o mais usado, e fatidicamente o que você tem mais familiaridade, depois disso baixar um software no estilo VMWare ou Virtual PC e então instalar o SO no qual deseja fazer seus testes; com o auxílio deste software.

O que estes softwares fazem é criar um computador virtual com memória RAM, processador, HD, tudo! Você consegue ver o boot sendo dado neste computador virtual, bem interessante.

Mas se você não quer, ou não sabe, ou está com preguiça de instalar um Linux, baixe um VMWare player. Nessa versão do VMWare você só pode abrir imagens de SOs previamente instalados e configurados, mas funciona muito bem. Então baixe uma imagem de um linux ou FreeBSD ou qualquer outro SO que queira se aventurar. Depois disso é só descompactar e abrir a imagem com o VMWare player. Você tem um SO novinho em folha e configurado por caras que já conhecem melhor o dito cujo. Assim você pode estragá-lo à vontade..., o HD que você vai ver dentro desse SO será um arquivo que simula um disco e... Bom.

Em suma, na pior das hipóteses você terá de descompactar a imagem novamente e abri-la pelo VM player para criar um novo Micro virtual.

Um Abraço!

//Cleydson

Technorati Marcas: ,,

Feedback (0)

Tuesday, June 19, 2007

Li um belo artigo referente ao CMMI e achei muito interessante a abordagem que o Mateus tomou. Achei de muito bom gosto. Apesar de o artigo ser grande e nem sempre nos animamos a ler textos longos na web, acredito que vale a pena dar uma lida. Óbviou que muitos não concordarão, afinal não é tão simples assim chegar com um assunto polêmico desses e querer que todos batam palmas. Mas é um ponto de vista e cada caso é um caso. E fala sério? Se CMMI fosse garantia de sucesso...  

Abraço,

Cleydson

Feedback (1)

Thursday, April 26, 2007

Serializar um objeto com XmlSerializer... Bom, em poucas palavras, serializar é converter um objeto para um determinado formato que facilite a transmissão ou o armazenamento do mesmo. E como o próprio nome diz, XmlSerializer converte para XML.  

Mas por um acaso você quer que a serialização seja sem os "xmlns:xsd=..." e sem os "xmlns:xsi=..." e sem a tradicional linha inicial "<?xml version=...", ou seja, você quer um XML limpo sem namespaces, sem atributos adicionais além dos dados do objeto que você especificou como atributo.

É... Bem que podia ter alguma coisa do tipo

serializador.Namespaces = False

ou

serializador.XmlLimpo = True

Sei lá! Algo fácil!

Mas como não tem, para de chorar e vamos programar!

Claro que não existe uma maneira apenas de fazer isso, e essa multiplicidade de soluções desse nosso mundo já está registrada no ditado 25, talvez tenha alguém que conheça outra bem mais simples... Neste caso peço que comente este post. Mas juro; aqui registro a que considerei melhor.

Herde a classe XmlTextWriter e faça o seguinte:

Public Class XmlLimpoTextWriter Inherits System.Xml.XmlTextWriter Private _escreverAtributo As Boolean = True Public Sub New(ByVal writer As System.IO.TextWriter) MyBase.New(writer) End Sub Public Overloads Overrides Sub WriteStartElement(ByVal prefix As String, ByVal localName As String, ByVal ns As String) MyBase.WriteStartElement(Nothing, localName, Nothing) End Sub Public Overloads Overrides Sub WriteStartAttribute(ByVal prefix As String, ByVal localName As String, ByVal ns As String) 'Se o prefix ou localname forem "xmlns" não escreve... If String.Compare(prefix, "xmlns") = 0 OrElse _ String.Compare(localName, "xmlns") = 0 OrElse _ String.Compare(localName, "nil") = 0 Then _escreverAtributo = False Else MyBase.WriteStartAttribute(Nothing, localName, Nothing) End If End Sub Public Overrides Sub WriteString(ByVal text As String) 'Aqui ocorre a escrita propriamente dita. If _escreverAtributo Then MyBase.WriteString(text) End If End Sub Public Overrides Sub WriteEndAttribute() 'Se não escreveu o início do atributo não vai escrever o fim também. If _escreverAtributo Then MyBase.WriteEndAttribute() End If 'Prepara variável para próximo atributo. _escreverAtributo = True End Sub Public Overrides Sub WriteQualifiedName(ByVal localName As String, ByVal ns As String) MyBase.WriteQualifiedName(localName, Nothing) End Sub Public Overloads Overrides Sub WriteStartDocument() 'Aqui eu tiro a primeira linha do xml não fazendo nada. '<?xml version="1.0" encoding="utf-8" ?> End Sub End Class

Agora vamos fazer um teste. Crie a classe Produto (Sei que não criei as propriedades, isso aqui é só um exemplo! Não adianta brigar comigo!):

Public Class Produto Public Codigo As String Public Nome As String Public Quantidade As Integer End Class

Agora vamos usar isso tudo ai:

Private Sub SerializaObjeto() Dim objetos(1) As Produto Dim texto As New System.Text.StringBuilder Dim serializador As New System.Xml.Serialization.XmlSerializer(GetType(Produto()), _ New System.Xml.Serialization.XmlRootAttribute("Produtos")) Dim escritorTexto As New System.IO.StringWriter(texto) 'Descomente um e comente o outro só pra testar e ver as diferenças Dim escritorXml As New XmlLimpoTextWriter(escritorTexto) 'Dim escritorXml As New System.Xml.XmlTextWriter(escritorTexto) 'Gerar um xml bonitinho.... escritorXml.Formatting = Xml.Formatting.Indented 'Testando.... Dim objeto1 As New Produto objeto1.Codigo = 1 objeto1.Nome = "Produto" objeto1.Quantidade = 5 Dim objeto2 As New Produto objeto2.Codigo = 2 objeto2.Nome = "Produto1" objeto2.Quantidade = 10 'Joga no array objetos(0) = objeto1 objetos(1) = objeto2 'Serializa(Converte pra xml) serializador.Serialize(escritorXml, objetos) escritorXml.Flush() escritorXml.Close() escritorTexto.Close() 'Exibe o resultado MessageBox.Show(texto.ToString) End Sub

Olha o que saiu:

 

<Produtos> <Produto> <Codigo>1</Codigo> <Nome>Produto</Nome> <Quantidade>5</Quantidade> </Produto> <Produto> <Codigo>2</Codigo> <Nome>Produto1</Nome> <Quantidade>10</Quantidade> </Produto> </Produtos>

 

Limpinho!

Essa tal de programação quando funciona é bom demais heim? Fala sério!

Se tiver alguma surpresa, algum outro atributo indesejado..., só colocar ele lá no método WriteStartAttribute() que o bendito não lhe incomodará novamente.

Abraço!

//Cleydson

 

Technorati tags: ,

Assunto: Removing xmlns, removendo xmlns, remove namespaces

Feedback (0)

Monday, March 12, 2007

Ola!

Bom, tenho acompanhado os posts, mas não tenho contribuído com muita coisa ultimamente. Hoje resolvi entrar com um projeto no CodePlex que andei brincando em casa. Mas tem alguns bugs e também não sei se foi feito da melhor forma. Gostaria que os amantes de Windows Forms e Componentes para o mesmo, dessem uma olhada, avaliem, critiquem, me chamem de burro, qualquer coisa! (Adoro dicas para melhorar o desempenho!).

Estou começando com essa história de desenvolver componentes para Windows Forms agora, e qualquer dica é bem vinda.

O projeto é o Brinque e o primeiro download é o Release 0.1. A idéia é criar componentes nos quais ao ganhar e ao perder foco os mesmos troquem a cor da borda. Está fácil de ver! É só fazer download e executar ok?

Obs.: O projeto foi lançado de uma forma um pouco feia no Codeplex.

Abraço

//Cleydson

Feedback (0)

Wednesday, January 31, 2007

Bom assim que eu tiver um tempinho vou ler esse livro Founders At Work. Acho que vai ser bastante construtivo. Já dei uma olhada rápida na entrevista de um cara que pra mim é um dos mais! Joel Spolsky. Aquele do Joel On Software do filme 12 Weeks With Geeks. Em falar nisso o filme também não vi...

Realmente, ando um pouco por fora...

//Cleydson

Feedback (0)

Tuesday, November 21, 2006

Alguns vão até rir e achar isso ridículo. Mas vou lhe contar..., na hora do aperto uma batch do DOS faz milagres! Só que você tem que conhecer pelo menos o que pode ser feito, para poder optar por usar um ou outro recurso. Achei por um acaso essas dez dicas muito boas no blog do Jon Galloway. Em especial a dica número 6:

Pausar a execução da batch por alguns segundos

Por exemplo se quero que minha batch aguarde 20 segundos em determinado momento:

PING 1.1.1.1 -n 1 -w 20000 > NUL

Simples e funciona que é uma beleza. O problema dos outros comandos, e.g TIMEOUT, é que não estão em todas as versões no Windows.

Bom, aproveitem o artigo. Muito bom mesmo!

Top 10 DOS Batch tips (Yes, DOS Batch...)

//Cleydson

Feedback (2)

Monday, November 20, 2006

Será que se chorarmos receberemos esta funcionalidade em C# e VB? :-(

Eu não devia nem ter lido! Agora estou com inveja do C++.

Writing Multi-Processor and Multi-Core Aware Applications with #pragma Directives

Abraços,

//Cleydson

Feedback (0)

Thursday, November 02, 2006

Essa é pra quem não gosta muito de usar o mouse. Slickrun é um incrível Power Toy(English) ou mão na roda (Português Brasil). Você pode configurar os atalhos que quiser e depois é só pressionar Window + Q (padrão que pode ser alterado) e digitar a palavra que destinou para um determinado aplicativo e pressionar ENTER. É um tipo de "Super Window + r". Adorei essa ferramenta, é pequena rápida e tem ocupado em torno de 10 MB de memória.

Recomendo.

//Cleydson

Feedback (0)

Thursday, September 07, 2006

Como descobrir o processo responsável por determinado pool de aplicativos neste exato momento?

Cenário:
Sistema Operacional da família Windows 2003, IIS 6, você dividiu os diretórios virtuais em Pools de aplicação diferentes. Você percebeu que um dos "worker processes" (w3wp.exe) está consumindo memória demais, ou seja, tem alguma coisa errada em um dos projetos.

Descobrindo quem é o culpado:
Qual é o pool que está crescendo tanto? Qual diretório virtual? Você só sabe o nome do processo e todos os processos têm o mesmo nome! Ok. Neste caso você vai até o IIS e olha qual é o processo pelo PID(Process ID), o qual você verificou no "Task Manager", pedindo para exibir a coluna PID, não é verdade? Não, não é verdade, simplesmente porque não tem onde olhar isso lá dentro! Bom, pelo menos eu não achei...
Até que apareceu o incrível script IISAPP.vbs, ele estava lá o tempo todo só me esperando e eu não o vi!!!

Vá ao Prompt do DOS e digite IISAPP. Ele vai retornar o ID do processo e o nome do Pool. Para descobrir as outras variações do comando digite IISAPP /?.

Mais detalhes sobre o IISAPP.

[]'s

//Cleydson

Feedback (0)

Saturday, September 02, 2006

Google

Posted at 4:03 AM

Nossa! Esse tal de Google cada dia me deixa mais impressionado. Estava eu querendo fazer uma conversão para saber a velocidade de transmissão de um dado dispositivo. Fiz meus cálculos e achei em megabytes por segundo, quanto significava aquela taxa de transferência dada no manual do dispositivo em magabits por segundo.
Megabits por segundo..., difícil de entender! Eu não sei por que não consigo visualizar muito bem, quanto converto para megabytes tudo fica mais claro, acho que é porque quando salvamos um arquivo e vamos lá olhar o tamanho do mesmo visualizamos 60 bytes e não 480 bits, ou seja, é mais usado. Acho que é até um pouco óbvio, é como se comprássemos alguma coisa que custe mais de 99 centavos e nos referíssemos ao preço da mesma em centavos, por exemplo, a televisão X custa 50 000 centavos.
Bom, deixemos esses meus problemas pedagógicos de lado e vamos para o Google. Por algum motivo duvidei de meu cálculo, achei que a taxa de transferência do produto estava muito boa para ser verdade, então fui ao Google para verificar se eu estava calculando errado. Procurando o fator de conversão de megabit para megabyte, digitei megabit to megabyte. A resposta foi 1 megabit = 0.125 megabyte. Isso é que eu chamo de eficiência e eficácia. Então resolvi colocar 360 megabit to megabyte, resposta: 360 megabit = 45 megabyte, ou seja, eu etava certo quanto ao meu extremamente complexo calculo, era só dividir por 8 mesmo, rssss. E mais uma vez o Google me deixou impressionado.

Brincadeiras à parte, é realmente incrível o potencial deste "site de busca". Não sei se vocês sabem, mas ele também funciona como calculadora, por exemplo, raiz quadrada de três elevado a dois, é só digitar sqrt(3^2).

Outra..., Suponhamos que você está procurando algo sobre C#, mas quer isso em arquivos pdf. Digite: C# filetype:pdf. Sou fã incondicional do Google. Termino com a tradicional frase:

"Mais informações podem ser obtidas nos links": Google Brasil, Google Portugal, Google in English.

Abraços,

//Cleydson 

Feedback (1)

Thursday, August 31, 2006

A versão beta do Microsoft XNA Game Studio Express foi disponibilizada para download hoje. Você vai precisar instalar o Visual C# Express Edition.

O XNA Framework é um conjunto de bibliotecas .NET, que tem o objeto de facilitar o desenvolvimento de jogos e permitir que tais jogos possam ser executados tanto em PCs com Windows, quanto nos Xbox 360.

A ideia é fazer com que o desenvolvedor possa esquecer problemas de interação com drives de vídeo, audio, periféricos, etc. e se preocupar com o jogo em si.

Achei muito interessante e assim que eu conseguir baixar isso tudo da Web vou começar a fazer alguns testes. Haja banda!!!

Abraço,

//Cleydson

Feedback (0)

Tuesday, August 22, 2006

Para fazer um teste no meu Windows Live Writer, e usar a dica de configuração do mesmo, a qual foi dada por nosso colega Tiago Salgado, eu vou escrever sobre uma coisa sem muita importância, mas de veras interessante, diria até engraçada.

Fazendo o Notepad parar...(som de fundo: óóóóóóó)

Abra o notepad e digite "this app can break" ...

Salve em algum lugar e depois abra novamente

Diria,..., no mínimo interessante. Tenho certeza que depois dessa, a vida de vocês nunca mais será a mesma. rsss

Abraço,

//Cleydson

Feedback (3)

Wednesday, August 16, 2006

E ai? Quem vai ser o primeiro a testar o Service Pack 1 do Visual Studio 2003? Alguém já instalou? Deu algum problema? Eu sei sou um medroso! Eu assumo!

Abraço,

//Cleydson

 

Feedback (2)