Windows 8 – Menu de contexto do Explorer e operações com o Shell são muito lentas

Estou usando o Windows 8 há uma semana e as operações padrão como um click direito do mouse para selecionar “Abrir com…“, copiar ou excluir arquivos demoram muito para iniciar. Hoje pesquisei um pouco e vi muita gente reclamando desta lentidão desde o Windows 7, e a solução que encontrei nos posts do MSDN foi:

A solução para a lentidão do Shell no Windows 7 e Windows 8 é desativar o “Windows Search”

E realmente funciona, após desativar o Windows Search estas operações ficaram instantâneas.

No Windows XP eu sempre desativei o Windows Search, mas notei que alguns programas utilizavam este recurso e ficavam limitados, quando migrei para Windows 7 passei a manter ativado por que não senti nenhuma perda de performance, mas no Windows 8 é impossível trabalhar com o Windows Search ativado.

As buscas baseadas no conteúdo de um arquivo que preciso são apenas de arquivos texto, para isto eu uso o “Grep”, em outros arquivos uso apenas a busca por nomes, completo ou parcial com “*”, então a melhor ferramenta que encontrei para esta tarefa é o “Everything Search” do qual eu já falei aqui

Como desativar o Windows Search

  • Para desativar o Windows Seach, abra o “Menu Iniciar*” >> “Painel de Controle”.
  • No canto superior direito altere “Exibir por: Categoria” para “Exibir por: Ícones grandes” ou  “Exibir por: Ícones pequenos“.
  • Procure por “Ferramentas Administrativas” >> “Serviços” e com o clique duplo do mouse abra a janela de Serviços.
  • Procure o item “Windows Search”, selecione o item e tecle “ENTER” ou duplo clique com o Mouse.

Na janela de propriedades do Windows Search:

  1. Altere o Tipo de Inicialização para “Desativado
  2. Clique no botão “Parar”,
  3. E finalmente clique no botão “OK

Clique na imagem abaixo para ver as instruções marcadas em vermelho
Desativar Windows Search

Atenção: “*Menu Iniciar” somente até o Windows 7.


Script para baixar atualizações de repositórios Subversion, Mercurial e Git

Repository Update

Repository Update

Eu mantenho cópia local dos projetos Open Source que me interessam, e toda vez que precisava usá-los tinha de fazer atualização manual usando o “Tortoise” do repositório correspondente.

Para evitar o trabalho manual resolvi escrever um script para automatizar a tarefa.

Eu queria um script que pude-se varrer todas as pastas e subpastas, sem a necessidade de eu ter de atuar uma lista a cada novo repositório,  assim surgiu o repository_update.bat.
Meus projetos ficam na seguinte estrutura:

C:\Documents\Projects\[Components, Libraries, Frameworks]

O script fica em:

C:\Documents\Projects\repository_update.bat

Basta executa-lo, e ele varre todos os subdiretórios e atualiza a cópia local de cada projeto.

Para que o script funcione corretamente é necessário verificar algumas configurações que estão na sessão ENVIRONMENT:

:ENVIRONMENT
 set UPDATE_HG=1
 set UPDATE_GIT=1
 set UPDATE_SVN=1

 set HG_CMD="C:\Program Files\TortoiseHg\hg.exe"
 set GIT_CMD="C:\Program Files (x86)\Git\cmd\git.exe"
 set SVN_CMD="C:\Program Files\SlikSvn\bin\svn.exe"
 set SVN_ASYNC_CMD=C:"\Program Files"\TortoiseSVN\bin\TortoiseProc.exe
 set HG_PARAMS=pull -u
 set GIT_PARAMS=pull --all -u
 set SVN_PARAMS=update
 set SVN_ASYNC_PARAMS=/command:update /path:%%G 

 :: SVN_ASYNC=1 call GUI async, default 0
 set SVN_ASYNC=0

 :: English = EN_US
 :: Portugues Brasil = PT_BR
 set SCRIPT_LANGUAGE=PT_BR
  • As 3 primeiras linhas ativam=1 ou desativam=0 o suporte aos respectivos repositórios.
  • Depois o path dos comandos a serem executados. Note o último item deste grupo, é a versão GUI do TortoiseSVN, que só é útil se o parâmetro SVN_ASYNC for igual a 1.
  • Os parâmetros estão separados dos comandos para evitar que sejam alterados acidentalmente.
  • SVN_ASYNC, executa o TortoiseSVN gráfico de forma assíncrona, abrindo uma janela para cada repositório Subversion encontrado.
  • E por último a linguagem das mensagens.
Repository Update done!

Repository Update done!

 

Download

Você pode adicionar o script repository_update.bat no agendador de tarefas do Windows para que ele seja executado diariamente, mantendo todos os seus projetos sempre atualizados.


DHibernate – Features Explained Parte II 1

Leia também:

 

  • DHibernate – Features Explained Parte I

 

ITransaction

Opcional. Utilizada para gerenciar transações do banco de dados. Representa um objeto de vida curta para controlar unidades de trabalho atômicas.

Qualquer comando enviado para o banco de dados é controlado por uma transação, o DHibernate criará uma transação automaticamente sempre que necessário.  Uma ISession pode conter várias ITransaction.

Se a transação for criada manualmente, deve ser finalizada com Commit ou RollBack.

IQuery

Interface utilizada para executar queries no banco de dados e controlar como a query é executada.

Se precisar limitar os resultados de uma consulta, como o número máximo de linhas ou especificar a partir de que linha deseja recuperar, é necessário obter uma instancia de IQuery.

Utilize ISession.CreateQuery para obter uma nova IQuery.

ICriteria

Usada para criar dinamicamente queries orientadas a objetos e executá-las.

ICriteria representa uma query para uma classe persistente em particular.


DHibernate – Features Explained Parte I

Este é o primeiro artigo sobre as features do DHibernate.

Vou publicar uma série de artigos contendo explicações sobre a implementação do framework de persistência.

A publicação neste blog é para manter a referência do DHibernate em português, depois ele será traduzido para inglês e enviado para a revisão, e só então publicado no wiki do projeto.

IConfiguration

É a primeira classe a ser instanciada e contêm as configurações que identificam o Driver e Dialeto do banco de dados, classes de Cache e Transação e outras configurações que alteram o comportamento do framework.

Além de armazenar todos estes parâmetros esta classe validará as informações:

  • Arquivos externos de configuração.
  • Se os parâmetros de conexão do banco de dados estão corretos.
  • Carregar e validar os metadados de mapeamento das classes.
  • Carregar e validar as instruções sql pré-definidas como NamedSql.

Após toda a configuração estar carregada e validada é possível obter uma instancia de ISessionFactory, contendo todas estas configurações prontas para serem usadas, não sendo necessário efetuar nenhuma carga ou validação.

Deve ser criada uma IConfiguration para cada banco de dados ou para cada Schema, pois tudo será validado antes de se obter uma ISessionFactory.

ISessionFactory

É pesada, deve ser criada somente uma vez e compartilhada por todas as threads, então a implementação deve ser threadsafe.

Normalmente existe apenas uma instancia para toda a aplicação. Se for necessário conectar a mais de um banco de dados, deve ser criado uma instancia de ISessionFactory para cada conexão.

A única configuração carregada diretamente é  INameStrategy, que deve ser feita antes de se criar uma ISession, pois ela define as regras de como o framework vai gerar  nome de Tabelas, Colunas , Índices, Chaves Primárias e Estrangeiras.

ISessionFactory faz cache de intruções SQL geradas e metadados do mapeamento utilizados em tempo de execução.

Além de criar novas instancias de ISession, é responsável por guardar a referencia das ISession sendo utilizada através da propriedade CurrentSession.

ISession

É leve e pode ser criada sempre que necessário. Principal Interface, pois encapsula o Database Provider e todos os objetos necessários para a comunicação direta com o banco de dados. Também responsável pela criação de Transações.

Expõe métodos para localizar, salvar, atualizar e excluir objetos, também conhecida como Persistence Manager.

Após uma conexão ser estabelecida, é criado um cache de acordo com os parâmetros definidos em IConfiguration. Este cachê armazenara a referencia de todos os objetos persistentes, criados pelo usuário e salvos, ou recuperados do banco de dados. Pode ser considerada como uma coleção de objetos persistentes relacionados a uma única unidade de trabalho. Ver o Design Pattern Unit of Work.

Próximo Artigo:

  • ITransaction
  • IQuery
  • ICriteria

Understanding English Grammar

Understanding English Grammar

Understanding English Grammar
A Linguistic Introduction
Thomas E. Payne, University of Oregon

Depois de muito tempo apenas planejando e adiando, decidi estudar Inglês novamente, agora focado na gramática.

Ontem tive de publicar alguns textos em Inglês, e pedi para meu amigo Istvan Agoston (Lee Nover) revisar, a maior parte estava bem redigida com apenas alguns erros, mas em alguns casos, a dúvida quanto a gramática era tanta, que simplesmente ficou estranho, este resultado foi o que me motivou a iniciar imediatamente esta etapa.

Após pesquisar alguns títulos, este livro pareceu bem completo para meus propósitos, o site do autor tem recursos adicionais que complementam os estudos.

Iniciei ontem, estou lendo sem pressa e prestando atenção em todos os detalhes, quero focar em cada capitulo como se ele fosse matéria para algum concurso, algo que realmente eu tenho de aprender, depois posto o resultado.

Referências:


Delphi Hibernate

Objetivo

O projeto Jazz SDK precisava ser renovado, e desde que o publiquei, o Hibernate e o NHibernate se popularizaram e amadureceram, desta forma é natural a utilização do design e experiência existente nesta nova versão, para que os usuários e desenvolvedores utilizem toda a base de conhecimento já existente.

Deste ponto em diante, será utilizado à abreviação “XH” como referencia a “Hibernate e NHibernate”.

O desenvolvimento está sendo feito com o Delphi XE2, vários recursos utilizados só estão presentes a partir do Delphi 2010, mas somente após testar todo o framework em cada versão de Delphi, poderei dizer quais versões serão oficialmente suportadas, espero ter a ajuda de colaboradores para estes testes.

O framework DSharp será utilizado evitando duplicação de funcionalidades, restando mais tempo para focar nos recursos exclusivos do ORM.

Agradecimentos ao autor do DSharp, Stefan Glienke, por autorizar a utilização desta maravilhosa biblioteca.

Recursos

  • Uma versão futura com os recursos da versão mais atual do XH é planejada, no momento foi selecionado um subconjunto destes recursos que são os necessários para projetos atuais.
  • Todos os recursos selecionados seguirão o modelo já definido no XH sendo ajustado aos recursos do Delphi.
  • Qualquer outro recurso sugerido deverá primeiramente seguir o modelo XH, e outros qualquer outro caso será analisado antes de ser aceito.
  • Lista completa de Recursos da versão 1.0 http://code.google.com/p/delphi-hibernate/wiki/Features

Regras para colaboradores

O desenvolvimento será aberto e seguirá regras para manter a qualidade e o propósito:

  • O design deve seguir as especificações das API’s do XH, ajustadas aos recursos do Delphi.
  • Todo o código deve ser acompanhado de testes
    • DUnit
    • DSharp.Testing.Mock
  • Deverá ser criada a documentação correspondente ou pelo menos a referencia a documentação existente no XH.
  • A versão de desenvolvimento deve sempre ser compilável, mesmo que o recurso não esteja finalizado.
  • O código deve ser formatado de acordo com as regras definidas, um documento com  as regras será publicado junto com o arquivo de configuração de formatação do Delphi.
  • Para a colaboração ser aceita, deve ser solicitada a revisão do código, somente após os revisores aprovarem, o código será adicionado ao repositório principal.
  • Desejável um programa exemplo, compilável e com todas as dependências inclusas.

Projeto

O projeto está hospedado no Google Code no endereço:


Crítica a comunidade

Acabei de ler este texto interessante, em que concordo com quase tudo.

Ele me fez lembrar de vários pensamentos sobre a necessidade de se elevar o nível entre os profissionais das diversas áreas de desenvolvimento de software.

Estes problemas acontecem em todas as comunidades de tecnologia, abrangendo todas as plataformas, todas as linguagens e todas as metodologias. Não é um problema exclusivo da plataforma .NET, todavia é frustrante ver que há pouca inovação na mente de quem compõe as comunidades MS. O tempo que deveria ser a fogueira das vaidades para os técnicos, somente provou que maturidade quando não acontece com muita evolução torna-se desgaste. É parcialmente triste ver novas comunidades com 5 anos ou menos que demonstram mais união, participação e empenho. Passa a sensação de que se as pessoas da geração anterior estivessem começando hoje, não estariam tão instigadas a buscar conhecimento em soluções MS, justamente por enxergar nas suas comunidades menos características motivadoras, seja pela experimentação, pela profundidade ou pela curiosidade inteligente tão mais presente. Não que a empresa não ofereça isto, mas pelo brio enfraquecido de seus participantes.

O texto completo e longo está em:
https://gist.github.com/2709913


WordPress – Tema Compre sua Casa 1

Tema WordPress - Compre sua CasaEsta semana conclui o projeto de um website para representação comercial, este é um tema que criei para o wordpress com PHP, este tema segue todos os padrões e recomendações do WordPress.

A barra lateral esquerda e a parte inferior central suportam widgets, então o administrador do site pode mudar qualquer um dos elementos para qualquer posição, configurar número de itens listados, remover um grupo, instalar plugins do wordpress e colocar nestas posições, mudando completamente a forma que o site se apresenta.

Eu utilizei Rad4PHP para trabalhar com este projeto, mas como se trata de uma programação de tema wordpress, o design do Rad4PHP não foi utilizado, apenas gerenciamento do projeto e editor PHP com os recursos de code completion e um pouco do debug.

Para este projeto estou trabalhando em um cliente em Delphi, que conecta via XML-RPC ao site para gerenciar Posts, Comentários, Categorias, Tags. Este cliente funciona como ferramenta auxiliar para o representante comercial gerenciar os seus contatos e agenda de trabalho, para o envio de fotos criei uma ferramenta que foi integrada ao projeto, que faz um tratamento das fotos, redimencionando em batch todas as fotos e convertendo para um padrão comum.

Já estou trabalhando para melhorar este projeto, organizando melhor, adicionando atalhos e integrando com o shell do windows para que o produto esteja pronto para venda em breve.


Restaurar “Welcome Page” do Delphi 1

As vezes a “Welcome Page” do Delphi simplesmente some, no Delphi 2009 isto acontecia o tempo todo, a partir do Delphi 2010 isto melhorou, mas as vezes quando eu fecho algum grupo de projetos o problema ocorre novamente, e podemos ver o “TEmbarcadero.Create” em vermelho no topo.

Para restaurar a página não é necessário reiniciar o Delphi, basta clicar com o botão direito do mouse na “Welcome Page” e em “Modo de Navegação”.

Delphi Welcome Page

Delphi - Restaurar Welcome Page