Frase do dia
Se você tem que perguntar é porque você não está pronto para entender.
28 de julho de 2010
Upload automático de imagem do clipboard!
escrito por Ruppel, enquanto EngenheiroEscrever posts com imagens traz uma dificuldade: o processo de upload não é prático! Você tem que tirar uma screenshot, salvar a Imagem, depois clicar num botãozinho para upload e inserir a imagem no seu post.
Talvez, num futuro próximo, será possível copiar e colar diretamente do Word, por exemplo, para o seu editor de texto web e ele fará o trabalho.
É verdade que se você usasse algo como o Writer, você teria a imagem automaticamente carregada no seu servidor. Mas o futuro são os softwares na Web. E eu venho falar de mais um aqui: ScreenShotMe
É fantástico! Agora você faz um print screen, acessa o endereço: http://dailyffs.com/shotme/ e já pode colar sua imagem que será automaticamente enviada ao servidor deles. Melhor ainda: você pode recortar diretamente na página!
Para este post aqui eu já usei essa técnica. Acho que vai me ajudar muito.
Design Patterns – Patterns Criacionais: Prototype
escrito por Ruppel, enquanto EngenheiroA penúltima pattern criacional do livro Design Patterns têm uma motivação muito semelhante à pattern anterior, Factory. A prototype é usada quando você precisa instanciar um tipo não conhecido em tempo de compilação. Essa motivação também foi vista no uso das factories, com a diferença de que, com o Prototype, não há a criação de uma hierarquia paralela de classes, situação que foi vista com a Factory.
O funcionamento da Prototype é muito simples: para criação de um novo objeto você utiliza uma instância pré-existente desse objeto (um protótipo) e pede a ele mesmo que crie um clone.
A única dependência que você cria no seu sistema é de que essa interface comum passe a conter um método Clone, como mostra a figura abaixo.
Essa pattern torna o cliente não dependente dos produtos concretos, diferentemente por exemplo da Builder (engraçado que o livro fala que a Builder também é independente, mas acho que erraram…. do alto da minha modéstia…rs).
E a grande vantagem dessa pattern é a simplicidade. Porém tendo que pagar o preço de implementar um método Clone, que pode não ser muito simples.
19 de julho de 2010
Configurar Servidor DNS para o Registro.br
escrito por Ruppel, enquanto EngenheiroEu sempre tive curiosidade de configurar um servidor DNS.
Em especial o servidor DNS porque, para se colocar um site no ar, acessível à toda Internet, eu sabia que você precisava de:
1. Computador com um ip fixo e com um servidor web (como o Apache) instalado
2. Registro no Registro.br
E na hora do cadastro no Registro.br ele me pedia um bendito nome de servidor DNS.
Quando você contrata uma hospedagem eles vêm na forma “ns1.nomedahospedagem.com.br”. Mas se eu estou justamente cadastrando o meu domínio no Registro.br como será possível eu já ter um nome nesse estilo?
Eis que, hoje, lendo o FAQ do Registro.br eu me deparei com o seguinte trecho:
Os campos de endereço IP e IPv6 devem ser preenchidos somente nos casos em que o domínio do servidor DNS seja igual ou esteja contido no que está sendo delegado.
…
Exemplo: No caso do domínio XYZ.COM.BR delegado para os servidores FOO.XYZ.COM.BR, NS1.BAR.XYZ.COM.BR e NS1.KZX.COM.BR, para os dois primeiros servidores, o preenchimento do campo endereço IP é obrigatório
Ou seja, se você vai cadastrar o seu domínio: ruppel.eng.br, pode colocar no registro.br o servidor DNS ns1.ruppel.eng.br. Mas aí você coloca tb o ip fixo (que era um pré-requisito que eu já conhecia). O Registro.br só usa o ip nesses casos de o DNS fazer parte do próprio domínio que você vai cadastrar. Super interessante!
Agora indo à parte prática.
Para configurar o DNS no Windows Server 2003++ você primeiro precisa ativar o Serviço:
1. Painel de Controle -> Adicionar ou Remover Programas -> Adicionar ou Remover Componentes do Windows -> Serviços de Rede -> Clique em Detalhes e Selecione “Domain Name System (DNS)”.
Com o serviço ativado você pode acessá-lo diretamente através das Ferramentas Administrativas.
Então você precisa criar uma zona (sem trocadilhos). No meu domínio a zona seria “ruppel.eng.br”. Botão direito em “Foward Lookup Zone” (Zona Direta) e “New Zone”.
Dentro dessa sua zone, você já pode adicionar suas entradas (ou registros, como preferir). Botão direito e você terá as opções de Registro A, Registro CNAME, Registro MX, que servem, respectivamente, para linkar o seu nome de domínio para ip, outro nome de domínio e para configurar email.
Um exemplo de Registro A é não preencher nada e colocar o ip da sua hospedagem. Outro exemplo é colocar como subdomínio o “www”. Outro tb interessante é colocar como subdomínio o asterisco “*”, assim qualquer subdomínio será direcionado para aquele ip.
Aqui tem o material Microsoft sobre a instalação e configuração de servidor DNS: http://support.microsoft.com/kb/814591
quão problemática é uma pessoa que, ao receber mensagens de duas pessoas amadas em questões de minutos, resolve conferir o horóscopo para saber se o destino lhe previa tais surpresas?
ou ainda que ao ouvir o nome Krakóvia lembra-se do filme “O Terminal” ao invés da “Lista de Shingler”, pq no primeiro, o espetacular Tom Hanks é um viajante da Krakozhia, país fictício do filme (neste caso a presença de Catherine Zeta-Jones pode explicar muita coisa)
enfim, apenas dois episódios preocupantes do dia
10 de julho de 2010
disable optimizations ou “cannot obtain value of local or argument … possibly because it has been optimized away”
escrito por Ruppel, enquanto Engenheiroeu já tive esse problema:
Cannot obtain value of local or argument ‘variableName’ as it is not available at this instruction pointer, possibly because it has been optimized away
mas na época não dei muita atenção, é uma pequena limitação enquanto vc tenta debugar alguns códigos nativos do .Net Framework.
aliás, achei bem natural haver restrições pra isso
eis que não existem restrições! e a solução para o problema acima está descrita aqui
foi bacana que eu achei essa solução por acaso, num blog simpático e não muito ativo que eu acompanho
na verdade, na época eu nem achei q era um “problema”, por isso não fui atrás de solução… mas agora jah sei =)
Hoje as pessoas usam Mouses, teclados e monitores como se fossem as coisas mais naturais do mundo
mas eu vejo nisso um quê de passado
existem algumas alternativas para controlar um computador: reconhecimento de voz, as ultimamente badaladas “touchscreens”, mas há coisas ainda mais modernas:
talvez encontrar o verdadeiro futuro da UI (esses padrões parecem bizarros qdo vc pensa em uma lan house usando qqler um deles: ou seria um monte de gente falando ao mesmo tempo com seus computadores, ou fazendo gestos, e aí as coisas mais tradicionais parecem mais sensatas)
pois bem… encontrar o futuro da UI parece um bom caminho de inovação
outro dia comentou-se que as pessoas têm seu auge até os 23 anos… mais tardar 26
e que as idéias revolucionárias nascem na juventude de seus autores
a discussão tendia desacreditar gênios adormecidos, como, quem sabe, eu…rs (ou mesmo vc, leitor)
confesso q é um pouco triste pensar q o auge físico chega tão cedo…enquanto temos muito a aprender
mas, naturalmente, muitas idéias revolucionárias podem, sim, ser publicadas por pessoas bem velhas
por mais que eu realmente tendo a concordar que o embrião dessas idéias esteve presente desde a juventude tenra de seus autores… ainda vejo a maturidade com o papel de dar um toque de clareza para o gênio identificar sua genialidade, ou seja:
posso até concordar que as idéias geniais nasçam até os 23 anos de seus autores, mas nada garante o momento em que essas idéias serão percebidas, publicadas e compartilhadas com a humanidade
meu último post fala do uso de fancybox em suas páginas
mas eu tive alguns problemas com fancybox, e decidi trocar pelo colorbox. O bug determinante para isso foi que eu tive problemas para abrir o fancybox em IE7 quando usando o IIS do Windows 7. E ainda depois da segunda ou terceira vez que se tenta abrir a modal. Sim, problema muito específico, então nada muito grave.
A única vantagem que vi do fancybox em relação ao colorbox é permitir o posicionamento centralizado da modal, mesmo quando fazemos scroll do conteúdo que está atrás. Opção “centerOnScroll”.
O colorbox é mais leve, mais simples, e não tem esse bug do fancybox. Além disso, há um problema chato com fancybox:
Quando eu abro arquivos da minha máquina direto no navegador, o fancybox não vai funcionar com ajax. O modo ajax só funciona através de um servidor http.
Novamente, ambos os jquery plugins são excelentes. Mas esses dois detalhes do fancybox me irritaram, então resolvi trocar para o colorbox.
estava procurando como abrir uma pop-in do fancybox com conteúdo carregado via AJAX
o jeito indicado é usar um selector no link e chamar o método validate
não encontrei na internet como fazer essa chamada javascript manualmente, para forçar a pop-in em um momento específico
a solução descobri fuçando o código do plugin: basta incluir o type ajax nas opções da chamada manual:
$.fancybox(‘endereco_popup.html’, { ‘type’ : ‘ajax’ } );
23 de março de 2010
Design Patterns – Patterns Criacionais: Factory Method
escrito por Ruppel, enquanto ele mesmoA terceira pattern do livro é bem conhecida: é uma Factory. A factory tem 3 usos bem claros:
- Você está criando um framework no qual você precisa instanciar uma classe que estará fora do framework.
- Você quer que uma subclasse especifique qual tipo de produto a sua classe pai (ou mãe?) deve criar
- Você quer concentrar o conhecimento de quais são as classes concretas (implementações) usadas no seu sistema em um único lugar.
Para solucionar esses três casos distintos, usa-se a simples idéia de ter uma classe abstrata com um método CreateProduct() que será implementado por sua filha.
Repare que quem faz uso do FactoryMethod é a própria classe Creator, mas esse método será implementado apenas pelo ConcreteCreator.
Uma consequência interessante da FactoryMethod tratada no livro é permitir a manipulação de hierarquias paralelas de classes. O exemplo dado é de elementos gráficos que possam ser manipulados (redimensionados, cortados, arrastados), como Linhas, Textos e Imagens. Cada um desses objetos é manipulado diferentemente, mas através de uma mesma interface, a interface Manipulator.
Assim, você define na interface comum a esses produtos (no caso seria uma interface ElementosGráficos) um método CreateManipulator. E a classe Linha irá criar um ManipuladorDeLinha, a classe Texto um ManipuladorDeTexto e a Imagem um ManipuladorDeImagem. Criando, dessa forma, as duas hierarquias paralelas: a de elementos gráficos e a de manipuladores desses elementos.
