sexta-feira, 14 de março de 2014

Novo blog

Venho por meio deste post anunciar que o blog está oficialmente encerrado.
Isso porque agora tenho um blog pessoal, onde posto sobre diversos assuntos (Relacionados à programação .net, e muito mais):


Herbert.Lausmann

segunda-feira, 17 de setembro de 2012

Criando um navegador web no vb.net

Esse é um assunto um pouco complicado, na minha opinião, principalmente se o objetivo for criar um navegador para tentar competir com os gigantes que dominam essa área. Não estou dizendo que é algo impossível, mas para conseguir fazer alguma coisa "decente" é necessário ter bastante conhecimento e de várias áreas. Se quiser fazer um navegador moderninho, com visual descolado, é melhor partir para Windows Presentation Fundation (WPF) com o auxilio do Expression Blend.

A engine

Pois bem, a parte mais importante de um navegador é a engine (motor). O .Net traz nativamente o controle Webbrowser que é, somente, uma implementação gerenciada da Trident Engine, motor do Internet Explorer.
Mas temos também uma segunda opção, estou falando do projeto Awesomium, um motor baseado no projeto Chromium (Google Chrome). O Awesomium tem um potencial muito grande, e oferece algo realmente decente para WPF, mas também é compatível com o Windows Forms, claro.

Se você está querendo criar um navegador baseado na Trident veja este ótimo artigo: Working with the Web Browser Control in Visual Studio 2005 - IE7Clone

Mas se irá se aventurar no Awesomium, basta somente conferir o vasto material encontrado no site do projeto.

Os favoritos

Uma forma simples de implementar os favoritos em seu navegador é através de uma barra de favoritos usando um componente ToolStrip para Win Forms, ToolBar ou StackPanel para WPF. Cada favorito será representado por um botão com imagem.

O armazenamento pode ser feito através de um banco de dados xml com o uso de um DataSet. As imagens podem ser armazenadas também, apenas convertendo-as para texto string básico, ou seja, Base64 String.

O histórico

Existem diversas formas de apresentar o histórico ao usuário, através de um controle TreeView por exemplo. A forma de armazenamento pode ser a mesma citada anteriormente, ou um banco de dados mais robusto como o SQL por exemplo.

As abas (Guias)

Bom, isso é complicado se tratando de Win Forms, mas se for WPF é algo muito simples! Na minha opinião, o melhor controle de guias disponível na net para o Win Forms e adequado para um navegador é o desse projeto: Painting Your Own Tabs - Second Edition.

Para WPF temos à disposição esse passo-a-passo: WPF: TabControl Series e o projeto wpfchrometabs.

Gerenciador de downloads

Um navegador que se preze deve possuir um bom gerenciador de downloads. Encontrei o projeto A Multi-thread C# Segmented Download Manager escrito em C#. Infelizmente não consegui encontrar nada de qualidade semelhante para o vb.net, mas você poderá usar um conversor c# para vb.net para lhe auxiliar nesta empreitada.

Conclusão

Como evidenciado, criar um navegador web não é algo simples, mas também não é impossível. Com estudo e dedicação com certeza é possível, pode levar algum tempo, mas é possível. O meu objetivo,basicamente, era, através deste artigo, reunir as informações necessárias para conseguir fazer um bom navegador. Se esqueci de algo importante por favor comentem.

domingo, 16 de setembro de 2012

Baixar vídeos do Youtube no Vb.Net

Tempo atras eu achei este vídeo sobre a criação de um programa para baixar vídeos do youtube:
Para baixar o código fonte siga: http://www.fileden.com/files/2012/3/30/3285449/YoutubeDownload.zip
Até o presente momento funciona perfeitamente...

Algorítimo de comparação de Strings

ATUALIZAÇÃOEste artigo e seu código está desatualizado. Contudo, eu reescrevi ele e postei em meu novo blog:Algoritmo para comparação de strings – C# | Herbert.Lausmann


Olá,
Este é o meu primeiro post no blog. Sejam todos bem vindos.
Pois bem, este algorítimo compara duas strings e retorna um valor Double entre 0 e 100, onde 0 significa que as strings não tem nada em comum, e 100 onde as strings são totalmente iguais.


 Public Function Compare(wordA As String, wordB As String) As Double
        Dim n As Integer = wordA.Length, m As Integer = wordB.Length
        Dim distance(n + 1, m + 1) As Integer
        Dim cost As Integer = 0
        If n = 0 Then Return n
        If m = 0 Then Return m

        For i As Integer = 0 To n
            distance(i, 0) = i
        Next
        For j As Integer = 0 To m
            distance(0, j) = j
        Next
        For i As Integer = 1 To n
            For j = 1 To m
                cost = (wordB.Substring(j - 1, 1) = wordA.Substring(i - 1, 1))
                distance(i, j) = Math.Min(Math.Min(distance(i - 1, j) + 1, distance(i, j - 1) + 1), distance(i - 1, j - 1) + cost)
            Next
        Next

        Dim maxLen As Integer = wordA.Length
        If wordB.Length > wordA.Length Then
            maxLen = wordB.Length
        End If
        Dim res As Double = distance(n, m)
        res = ((1 - (res / maxLen)) / 2) * 100
        Return res
    End Function

Esse algorítimo é baseado no Algorítimo de Levenshtein. Originalmente ele foi desenvolvido para comparar palavras, mas pode ser usado tranquilamente na comparação de frases tendo somente uma perda de desempenho dependendo do tamanho da frase. Ele é muito usado por corretores ortográficos.

Este código é uma adaptação do artigo An improvement on capturing similarity between strings.