Category Archives: Tecnologia

Indexando e buscando documentos com Lucene.Net e LINQ

Código de exemplo:


using System;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using Lucene.Net.Store;
using Lucene.Net.Linq;
using Lucene.Net.Linq.Mapping;
using Lucene.Net.Analysis.Standard;

namespace LuceneTests
{
    [TestClass]
    public class LuceneTest
    {
        [TestMethod]
        public void TestIndex()
        {
            // Configura o Lucene.
            var luceneDir = Path.Combine(System.Environment.CurrentDirectory, 
                "lucene_index");

            if (!System.IO.Directory.Exists(luceneDir))
            {
                lock (this)
                {
                    System.IO.Directory.CreateDirectory(luceneDir);
                }
            }

            var directory = FSDirectory.Open(new DirectoryInfo(luceneDir));
            var provider = new LuceneDataProvider(directory, 
                Lucene.Net.Util.Version.LUCENE_30);

            // Indexa os Documentos.
            using (var session = provider.OpenSession<Document>())
            {
                session.Add(new Document()
                {
                    Title = "Hello",
                    Content = "Hello Lucene!"
                });

                session.Add(new Document()
                {
                    Title = "Hi",
                    Content = "Hi, Lucene!"
                });
            }


            // Busca os documentos que contém a palavra "Hello" no título.
            var items = provider.AsQueryable<Document>()
                .Where(l => l.Title.Contains("Hello"));

            Assert.AreNotEqual(items.Count(), 0);
        }
    }
    class Document
    {
        [Field(Analyzer = typeof(StandardAnalyzer))]
        public String Title { get; set; }

        [Field(Analyzer = typeof(StandardAnalyzer))]
        public String Content { get; set; }
    }
}

Como desenvolver para XNA no Windows 8

Por padrão, se você tentar instalar o XNA Game Studio 4.0 no Windows 8, você receberá uma mensagem de erro. Esse erro é devido a problemas de compatibilidade.

A Microsoft prometeu uma nova versão do Windows Phone SDK que resolve esse problema, mas ainda deve demorar para sair.

Uma maneira de contornar o problema é instalando o Games for Windows Marketplace Client.

Após essa instalação, você poderá instalar o XNA Game Studio para utilizá-lo com o Visual Studio 2010.
Infelizmente, o XNA Game Studio ainda não é compatível com o Visual Studio 2012.

Utilizando o Apple Wireless Keyboard no Windows

Sem dúvida alguma, o Apple Wireless Keyboard é um teclado sensacional.

Adquiri recentemente um teclado apple wireless, para utilizar no meu hackintosh. Funcionou que é uma maravilha!

Como estava tendo diversos problema de compatibilidade com o hardware, resolvi parar de utilizá-lo e montar uma estação Windows :/

Como queria utilizar o teclado com o Windows, utilizei o aplicativo Apple Wireless Keyboard, que além de fornecer uma boa compatibilidade, oferece uma opção de trocar as teclas Control Fn.

O projeto é open source Smile

Repositório do SVN

Removendo a acentua�§�£o e os caracteres especiais de uma String

Estava precisando remover a acentuação e os caracteres especiais do nome de um arquivo. Para isso, desenvolvi um extension method para a classe String.

Exemplo:
String de entrada:
Adobe Acrobat – Pacy-Paraná_05.12_áÃ?¨Ã?¯Ã?´úã+.pdf

String de retorno:
AdobeAcrobatPacyParana_05.12_aeioua.pdf

Desenvolvi o método utilizando uma HashTable e expressão regular. Caso você tenha alguma sugestão de melhoria, poste aí nos comentários.

Extension method:

public static String RemoveSpecialCharacters(this String self)
{
	var normalizedString = self;

	// Prepara a tabela de símbolos.
	var symbolTable = new Dictionary();
	symbolTable.Add('a', new char[] {'Ã? ', 'á', 'Ã?¤', 'â', 'ã'});
	symbolTable.Add('c', new char[] { 'ç' });
	symbolTable.Add('e', new char[] { 'Ã?¨', 'é', 'Ã?«', 'ê' });
	symbolTable.Add('i', new char[] { 'Ã?¬', 'í', 'Ã?¯', 'Ã?®' });
	symbolTable.Add('o', new char[] { 'Ã?²', 'ó', 'Ã?¶', 'Ã?´', 'õ' });
	symbolTable.Add('u', new char[] { 'Ã?¹', 'ú', 'Ã?¼', 'Ã?»' });

	// Substitui os símbolos.
	foreach (var key in symbolTable.Keys)
	{
		foreach (var symbol in symbolTable[key])
		{
			normalizedString = normalizedString.Replace(symbol, key);
		}
	}
			
	// Remove os outros caracteres especiais.
	normalizedString = Regex.Replace(normalizedString, "[^0-9a-zA-Z._]+?", "");
	return normalizedString;
}

Webcam Life Log

O Webcam Life Log é um utilitário que tira fotos com a webcam, em um intervalo de tempo definido. Desenvolvi ele utilizando o Adobe AIR.

Para instalar, basta clicar na imagem abaixo.

Please upgrade your Flash Player
This is the content that would be shown if the user does not have Flash Player 6.0.65 or higher installed.

Screenshot:

O código-fonte está disponível no google code:
http://code.google.com/p/webcamlifelog

SessionScope e FlushAction no Castle ActiveRecord

O Castle ActiveRecord é uma implementação do padrão homÃ?´nimo feita em cima nHibernate. Um ORM bastante conhecido no mundo Java. Apesar de alguns comportamentos serem realizados pelo nHibernate, estarei aqui citando o ActiveRecord como responsável por tais comportamentos.

Um problema muito comum que eu costumo me deparar, é com a utilização de lazy loading no ActiveRecord.

Geralmente na utilização de lazy loading em aplicações web, é utilizado o padrão Session per Request para o SessionScope. Só que por padrão, o ActiveRecord persiste automaticamente (em algumas situações) as entidades, mesmo que seus métodos Save ou Update não tenham sido invocados. Isso costuma gerar uma série de problemas, como por exemplo, entidades com o seu estado interno inválido sendo persistido.

Para resolver esse problema, deve ser especificado o FlushAction como Never:

SessionScope session = new SessionScope(FlushAction.Never);

Assim, o ActiveRecord não irá mais persistir automaticamente as entidades. Em contrapartida, mesmo invocando os métodos Save ou Update as entidades não serão persistidas. Para que isso ocorra, será necessário utilizar os métodos SaveAndFlush e UpdateAndFlush, respectivamente, ou utilizar o método Flush da instância do SessionScope.

Erro ao utilizar o mysql no ruby: LIBMYSQL.dll is missing

Um erro muito comum que costuma acontecer no ruby/rails, em ambiente windows é: “LIBMYSQL.dll is missing from your computer”

LIMYSQL.dll is missing

E a mensagem também pode aparecer no console da seguinte forma:

ruby.exe - Unable to locate Component
This application has failed to start because LIBMYSQL.DLL was not
found. Re-installing the application might
fix this problem.

Esse erro ocorre porque a dll do mysql, LIBMYSQL.dll, não foi localizada. Para resolver esse problema, faça o seguinte:

1 – Instale a gem do mysql

gem install mysql

2 – Copie o arquivo LIBMYSQL.dll do diretório bin do mysql(ex.: c:mysqlbin) para o diretório bin do ruby (ex.: c:rubybin)

Jamais compre um notebook HP !!!

Eu fui proprietário de um notebook HP, modelo tx1070br, que parou de funcionar de forma repentina. Pesquisando nos fóruns, qual não foi a minha surpresa ao constatar que CENTENAS de pessoas tiveram o mesmo problema ?

Em quase todos os casos, para não generalizar, a HP ignorou o caso e como a maioria dos problemas “estranhamente” ocorreram logo após o término de garantia, cobrou pelo serviço. Algumas pessoas pagaram e logo após receberem o notebook de volta(após 2 meses), o notebook apresentou o mesmo problema.

Pesquisando mais sobre o assunto, descobrir que diversos modelos de notebook da HP estão “morrendo” logo após o término da garantia (aproximadamente 1 mês depois).

Eu sempre respeitei os produtos da HP, mas isso não pode passar assim em branco. Uma empresa do porte da HP tem o dever de respeitar os consumidores.

Link para um outro blog que relata o mesmo problema:
NEVER buy an HP laptop | Cheap Laptop Blog