Through the viewfinder (a Photoshop tutorial of sorts) « Hank & Willie

 

I’m rarely on the bandwagon with photo processing trends, mostly because, well, have you seen the pile of laundry in my living room? And, oh, and these guys keep me a little busy, too.

So while the rest of the photo enthusiasts I love to read were playing with things like selective color, way back when, and texture, sloppy borders, vintage washes and cross processing, I just watched from the sidelines.

But I recently came across this clever technique, called TTV (Through the Viewfinder). Basically, you shoot through the viewfinder of an old camera, using your modern digital or film camera, and create an interesting framing effect in camera. I thought to myself, “That’s kind of fun.”

Apparently hundreds of other people thought the same thing, and decided to make a Flickr group and share their images. You’ll see some AMAZING versions of this technique there.

However, the laundry in my living room didn’t go anywhere, and the 9,000 other things that beckon kept beckoning, so it remained a nice idea until I saw this–a way to do it digitally, without hunting for an old camera to shoot through. Hooray!

So I tried it. And thought I would share the steps with you, since so many of you have taught me wonderful Photoshop techniques.

Hope you’ll share some of your tries with this technique. Or, if you don’t have Photoshop and want me to try on one of your photos, I will pick a few that people send me to try it. (Email me a high-res version at hankandwillieATgmailDOTcom.)

TTV-Through the Viewfinder

1. Find a suitable photo. I loved the old-fashioned feel of the print in her dress, her pigtails and the timeless watermelon-in-summer-moment.

2. Since this effect mimics the old waist-height viewfinders with square pictures, I cropped this one square, even though her buddy was equally cute.

3. Edit to taste. I’ve seen this done with strong, vibrant color, with black and white and with sepia. I went for kind of a mild vintage feel here, using Pioneer Woman’s Soft and Faded action here and reduced the opacity a bit to restore some of the bright color of her watermelon.

4. I opened this file, shared by a very generous photographer out there in Flickrland.There’s a whole group of “through a viewfinder shots” to download here, choose the speckle pattern you like best!

It looks like this:

5. Using layers, drag it on top of your open, edited image, and size it to fit. ( I used free transform.)

6. Choose a blend mode, and voila! (I used multiply, and reduced the opacity to about 80%. You can also try other blending modes, like soft light and hard light for different effects.)

The whole thing took longer to write about than to do. Here are a few other examples.

If you try this, I’d love to see the results, post your link in the comments!

And want to see a super cool way to use this? Photographer Tara Whitney decorated a whole wall with her family photos this way. Wow.

Happy PhotoShopping!

Fim dos desktops daqui a 3 anos

De acordo com o Google sim, em matéria publicada no site silicomrepublic, o chefe do Google na Europa John Herlihy disse que cada vez mais os desktops se tornarão irrelevantes.

“Em três anos, desktops serão irrelevantes, no Japão a maioria das pesquisas hoje são realizadas em smartphones e não em pcs”, disse Herlihy em uma conferência.

As aplicações poderão ser feitas através de dispositivos móveis, não só pelo avanço da tecnologia, mas também pela oportunidade dada pelo cloud-computing.

Com a maioria dos aplicativos e dados armazenados na núvem, os aplicativos não precisam mais ter uma grande capacidade de armazenagem para realizar mais atividades em menos tempo.

Claro que os notebooks ainda serão por muito tempo utilizados principalmente para tarefas mais complicadas de design, desenvolvimento e programação.

Outro fator importante para extinção dos desktops é a popularização dos notebooks e net, que até bem pouco tempo atrás eram restritos a uma parcela da sociedade.

HWiNFO32 Portable

Processador, memória, disco, placa gráfica, BIOS e o resto da família fazem parte do meu computador, verdade? Mas como sei se estão a funcionar correctamente? Como posso saber as suas características, nomes e fabricantes? Provavelmente terei de abrir a máquina ou ler aquele livrinho de 200 páginas que veio na caixa, será assim?

Claro que não. Aliás para quem nos segue estas questões já nem fazem sentido. São tantas as ferramentas que nos permitem ter acesso a estas informações que só mesmo a pedido é que já abrimos o leque para mais uma. Assim foi com o HWiNFO.

Na verdade até tem o seu lugar, esta ferramenta é portátil, logo escusa de pensar que será mais uma aplicação a encher o seu registo. Não, simplesmente descarregue e veja o que lhe pode ser útil tanta informação que lhe será a presentada.

Logo ao abrir a aplicação presenteia-o com um resumo das “entranhas” do seu computador. Será um mundo Matrix? Nem pensar, são apenas os seus componentes devidamente catalogados.

Poderá ter acesso a informações dos seguintes componentes:

  • Processador
  • Motherboard
  • Memória
  • Bus
  • Placa Gráfica
  • Ecrã
  • Drivers
  • Áudio
  • Rede
  • Portas
  • Bateria

Além das descrições dos componentes e dos seus derivados e complementos, a aplicação permite que tenha acesso aos sensores da máquina e receba as temperaturas que cada componente medido está a registar. Sim, é aqui que pode ver se algum está febril.

Além desta pequena pérola, podemos saltar para outra “ostra” e retirar outra pérola também especial: benchmarks. Comparativos que lhe darão uma informação relativa e útil para ter ideia da actualidade e modernidade dos seus componentes face ao mercado.

Mas em caso de “overclock” a algum dispositivo, o ideal será primeiro tirar relatório em modo original, fazer as devidas e cautelosas alterações e depois reportar os novos valores. Pode mesmo exportar a situação da máquina.

Por falar em situação da máquina, estes relatórios são excelentes para quem queira enviar o estado da máquina para um administrador de rede, caso este não consiga ter acesso remoto.

À pouco falei-lhe em overclock… sim eu sei que quem o faz por norma utiliza vários tipos de aplicações deste género, mas não se assuste com a palavra: há por exemplo, software que “esforça” a sua placa gráfica obrigando-a a dar um pouco mais.. digamos que é um overclock controlado. Verifique temperaturas e taxas de esforço.

Novidades desta versão:

  • Melhorada a pesquisa de dispositivos SCSI
  • Adicionado suporte para monitorização QST 2.0
  • Adicionado suporte para LPC secundário
  • Melhorada a monitorização de sensores para EVGA W555
  • Adicionado suporte para o chipset VIA VN1000
  • Actualizado o ficheiro de ajuda
  • Melhorada a monitorização para ASUS M2N-SLI Deluxe.
  • Melhorada a monitorização MSI DKA790GX Platinum (MS-7550).
  • Melhorada a monitorização para AMD 890GX e SB800/Hudson.
  • Melhorado o suporte para VIA VT8261.
  • Melhorada a monitorização na série ASRock: P43DE2, P43iCafe, 770 Extreme3, 770iCafe, M3A790GXH/USB3, 880GMH/USB3, 890GMH/USB3, 890GX Extreme3.
  • Melhorada a monitorização na série ASUS: M4A89GTD-PRO, M4A89GTD-PRO/USB3

Pode ler aqui as restantes novidades desta versão.

Alternativas:

Licença: Freeware
Sistemas Operativos: Windows 9x/2000/XP/Vista/Win7
Download: HWiNFO32 Portable 3.43 [1.7MB]
Download: HWiNFO32 3.43 (Instalação) [2.0MB]
Homepage: Hwinfo

Jogo em Java

Bom hoje nós vamos desenvolver um game educativo bem simples em Java, desenvolvi esse game para ensinar as pessoas que estão começando a mexer no computador e tem problemas com o mouse, ele consiste em vários quadradinhos na tela e a jogador tem que ir passando o mouse no quadradinho vermelho que vai mudando de lugar.

1

O game que vamos desenvolver tem essa aparência, são 30 quadradinhos que ao passar o mouse eles vão mudando de cor, mas eles têm que passar o mouse em uma ordem se não, não tem sentido o game né.

Pronto, vamos por a mão no código ehehehh.

Primeiro vamos criar uma classe para fazer os quadradinhos, então crie a classe Quadrado.

O quadrado tem que ter, posição X, Y, largura, altura, e uma cor.

import java.awt.Color;

public class Quadrado {
        private int x;
        private int y;
        private int width;
        private int height;
        private Color cor;

    public Quadrado(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public Quadrado(){

        }

    public Color getCor() {
        return cor;
    }

    public void setCor(Color cor) {
        this.cor = cor;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;

    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }  
}

Pronto já temos os quadradinhos precisamos criar agora nossa janela, a janela é mais complicada porque temos que criar um modelo de como vai ser a tela, para depois quando formos criar a tela do game programaremos somente que vamos usar.

A Classe Janela deverá estender a JFrame, pois assim teremos uma janela, precisaremos também implementar duas interfaces a MouseListener e a MouseMotionListener para controlarmos o mouse, deixaremos essa classe abstrata.

Então ficará assim:

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;

public abstract class Janela extends JFrame implements MouseListener, MouseMotionListener{
}

Você não precisa, mas é interessante implementar todos os métodos das classes MouseListener, MouseMotionListener, porque depois só sobrescrevemos só aqueles que vamos usar entendeu??? Hehehhe.

Então até agora a classe Janela está assim:

public abstract class Janela extends JFrame implements MouseListener, MouseMotionListener {

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {  
    }

    public void mouseDragged(MouseEvent e) {
    }

    public void mouseMoved(MouseEvent e) {
    }
}

Continuando a classe janela precisamos de uma variável para guardar em que fase nos estamos e precisamos também criar os quadradinhos.

    private int numeroDaFase;
    public int getNumeroDaFase() {
        return numeroDaFase;
    }

    public void setNumeroDaFase(int numeroDaFase) {
        this.numeroDaFase = numeroDaFase;
    }

    protected ArrayList<Quadrado> quad = new ArrayList<Quadrado>();

    public ArrayList<Quadrado> getQuad() {
        return quad;
    }

    public void setQuad(ArrayList<Quadrado> quad) {
        this.quad = quad;
     }

Vamos criar inicializar os componentes e fazer um teste?

Para isso precisamos criar mais outro método e depois uma classe, o método é o inicializarComponetes(), assim inicializamos tudo em um único método assim fica mais fácil depois.

public void inicializaComponetes() {
    addMouseListener(this);
    addMouseMotionListener(this);
     setResizable(false);
     setSize(740, 640);
     setTitle(”:: Elzo Brito – Game ::”);
     setDefaultCloseOperation(EXIT_ON_CLOSE);
    show();
}

Agora vamos criar a classe MinhaTela com ela vamos criar a tela, no primeiro momento só para testar a classe Janela depois vamos usar ela para ser nossa tela.

public class MinhaTela extends Janela{

    public MinhaTela(){

        inicializaComponetes();

    }

}

Pronto agora na classe Main crie uma instancia de MinhaTela e veja o que fizemos até agora…

public class Main {

    public static void main(String[] args) {

        MinhaTela mt = new MinhaTela();

    }

}

 

Pode não parecer, mas 50% do nosso game já está pronto J, vamos dar continuidade e desenhar na tela os quadrados que compõe a tela, para isso vamos criar outra classe para facilitar nosso trabalho, criaremos então a classe Fase é nela que estarão os elementos que vamos usar no jogo.

A classe Fase tem um array com 30 quadrados que formarão a tela, alem dos dos métodos setQ() que servirá para setar a posição dos quadrados na classe e getQ() para recuperar os quadrados depois, o construtor da classe cria os 30 quadradinhos já passando a posição que cada um vai estar na tela.

public class Fase {

    private Quadrado[] q = new Quadrado[30];

    public Quadrado[] getQ() {

        return q;

    }

    public void setQ(Quadrado[] q) {

        this.q = q;

    }

    public Fase() {

        Quadrado[] q = new Quadrado[30];

        q[0] = new Quadrado(20, 40, 100, 100);

        q[1] = new Quadrado(140, 40, 100, 100);

        q[2] = new Quadrado(260, 40, 100, 100);

        q[3] = new Quadrado(380, 40, 100, 100);

        q[4] = new Quadrado(500, 40, 100, 100);

        q[5] = new Quadrado(620, 40, 100, 100);

        q[6] = new Quadrado(20, 160, 100, 100);

        q[7] = new Quadrado(140, 160, 100, 100);

        q[8] = new Quadrado(260, 160, 100, 100);

        q[9] = new Quadrado(380, 160, 100, 100);

        q[10] = new Quadrado(500, 160, 100, 100);

        q[11] = new Quadrado(620, 160, 100, 100);

        q[12] = new Quadrado(20, 280, 100, 100);

        q[13] = new Quadrado(140, 280, 100, 100);

        q[14] = new Quadrado(260, 280, 100, 100);

        q[15] = new Quadrado(380, 280, 100, 100);

        q[16] = new Quadrado(500, 280, 100, 100);

        q[17] = new Quadrado(620, 280, 100, 100);

        q[18] = new Quadrado(20, 400, 100, 100);

        q[19] = new Quadrado(140, 400, 100, 100);

        q[20] = new Quadrado(260, 400, 100, 100);

        q[21] = new Quadrado(380, 400, 100, 100);

        q[22] = new Quadrado(500, 400, 100, 100);

        q[23] = new Quadrado(620, 400, 100, 100);

        q[24] = new Quadrado(20, 520, 100, 100);

        q[25] = new Quadrado(140, 520, 100, 100);

        q[26] = new Quadrado(260, 520, 100, 100);

        q[27] = new Quadrado(380, 520, 100, 100);

        q[28] = new Quadrado(500, 520, 100, 100);

        q[29] = new Quadrado(620, 520, 100, 100);

        setQ(q);

    }

}

Agora vamos terminar a classe Janela(), nela vamos criar mais um método e sobrescrever outro, o método que vamos criar é o MyTela(), ele servirá para setar a posição dos quadradinhos na classe janela().

    public void myTela(){

        Fase f = new Fase();

        Quadrado[] q = new Quadrado[30];

        q = f.getQ();

        for(int i=0;i<30;i++){

            q[i].setCor(Color.BLACK);

            quad.add(q[i]);

        }

        q[0].setCor(Color.red);

    }

Pronto ele cria uma instancia de fase e adiciona no nosso ArrayList a posição de todos os quadradinhos, agora precisamos sobrescrever o método Paint(Graphics g) ele é responsável por desenhar a tela e como queremos desenhar os quadradinhos na tela então precisamos dar uma arrumada nele.

    @Override

    public void paint(Graphics g) {

        g.setColor(Color.WHITE);

        g.fillRect(0, 0, 20, 650);

        g.fillRect(120, 0, 20, 650);

        g.fillRect(240, 0, 20, 650);

        g.fillRect(360, 0, 20, 650);

        g.fillRect(480, 0, 20, 650);

        g.fillRect(600, 0, 20, 650);

        g.fillRect(720, 0, 20, 650);

        g.fillRect(0, 0, 740, 40);

        g.fillRect(0, 140, 740, 20);

        g.fillRect(0, 260, 740, 20);

        g.fillRect(0, 380, 740, 20);

        g.fillRect(0, 500, 740, 20);

        g.fillRect(0, 620, 740, 20);

        for(int i=0;i<30;i++){

            g.setColor(quad.get(i).getCor());

            g.fill3DRect(quad.get(i).getX(), quad.get(i).getY(), quad.get(i).getWidth(), quad.get(i).getHeight(), true);

        }

    }

Quase pronto vamos alterar o método inicializaComponentes() para chamar o MyTela() pois se não, não conseguiremos desenhar a tela sem a posição dos quadradinho correto???

    public void inicializaComponetes() {

        addMouseListener(this);

        addMouseMotionListener(this);

        setResizable(false);

        setSize(740, 640);

        setTitle(”:: Elzo Brito – Game ::”);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        myTela();

        show();  

    }

Como será que a tela ficou??

 

Só falta agora a lógica do game, como havíamos pensando antes, o nosso game é para pessoas que não sabem mexer com o mouse então quando passar o mouse no quadradinho vermelho ele tem que mudar de lugar forçando a pessoa a seguir-lo com o mouse, vamos então para a classe MinhaTela() pois é nela que iremos por um pouco da lógica do nosso game.

    public void pintarQuad(int x){

        try {

            if (quad.get(x – 1).getCor() == Color.ORANGE) {

                quad.get(x + 1).setCor(Color.RED);

                quad.get(x – 1).setCor(Color.PINK);

                quad.get(x).setCor(Color.ORANGE);

            }

        }

        catch(java.lang.ArrayIndexOutOfBoundsException ex){

            if(quad.get(0).getCor() == Color.RED){

                quad.get(1).setCor(Color.RED);

                quad.get(0).setCor(Color.ORANGE);

            }

        }

        catch(java.lang.IndexOutOfBoundsException ex){}

        repaint();

    }

Adicione esse método pintarQuad(int x), ele serve para pintar o quadrado onde passamos o mouse, se passamos o mouse no 1º quadradinho ele deve ficar amarelo e o 2º quadradinho deve ficar vermelho se passarmos o mouse no 2º quadradinho ele deve ficar amarelo o 3º quadradinho deve ficar vermelho e o 1º quadradinho fica rosinha.

Para finalizar precisamos do movimento do mouse correto? Isso então vamos criar uma classe para trabalharmos só com o movimento do mouse, vamos criar então a classe FaseMouseMove() nela trabalharemos o movimento do mouse sobre os quadradinhos, ela deve importar o MouseEvent, estender a MinhaTela() e sobrescrever o método mouseMoved(MouseEvent e).

import java.awt.event.MouseEvent;

public class FaseMouseMove extends MinhaTela{

    @Override

    public void mouseMoved(MouseEvent e) {

        for(int i=0;i<30;i++){

            if(e.getX() > quad.get(i).getX() && e.getX() < (quad.get(i).getWidth() + quad.get(i).getX()) && e.getY() > quad.get(i).getY() && e.getY() < (quad.get(i).getHeight()+quad.get(i).getY())){

                pintarQuad(i);

            }

        }

    }

}  

Esse IF gigante testa a condição do ponteiro do mouse, se o ponteiro do mouse estiver dentro do quadradinho ele chama então o metodo pintarQua(int i) passando o número do quadradinho que o mouse estar em cima, pronto o game esta criado basta apenas criar uma instancia da classe FaseMouseMove() na classe Main() e pronto é só jogarrrr

public class Main {

    public static void main(String[] args) {

        FaseMouseMove fmm = new FaseMouseMove();

    }

}

 

Pronto galera espero que tenham gostado do artigo, quem quiser fazer o download do projeto basta clicar no link abaixo, ele foi desenvolvido no NetBeans.

http://elzobrito.com/arquivos/desenvolvimento/gameeducativo/GameEducativo.zip

HTML 5

Beleza pessoal? Depois de mais de um ano sem escrever aqui no MX Studio, volto falando sobre a nova versão do HTML.

Vamos lá!

O HTML 5 veio com grandes novidades, podendo até substituir algumas funções que normalmente era utilizado no flash, como player de audio ou vídeo, por exemplo. A nova versão e muito mais robusta, antes para estruturar um documento, era usado div’s com o atributo id, para identificar cada parte do site, agora na nova versão isso foi melhorado, para cada parte da estrutura existe uma tag especifica, o que deixa o código muito mais estruturado. Abaixou vou mostrar dois exemplos, como era no HTML 4 e como é agora na nova versão. Também vou listar algumas novas tags.

Sintaxe HTML 4 x HTML 5:

HTML 4

<?xml version=”1.0″ encoding=”UTF-8″?>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<title>Titulo do Documento</title>

</head>

<body>

</body>

</html>

HTML 5

<?xml version=”1.0″ encoding=”UTF-8″?>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<title>Titulo do Documento</title>

</head>

<body>

<header>Topo</header>

<nav>Menu de Navegação</nav>

<article>Conteudo</article>

<footer>Rodapé</footer>

</body>

</html>

Abaixo segue as novas tags.

  • selection – representa um documento genérico ou seleção de tags. Pode ser usado em conjunto com os elementos h1, h2, h3, h4, h5 e h6.
  • article – representa um pedaço independente do conteúdo de um documento, como um blog ou artigo de jornal.
  • aside – representa uma parte do conteúdo que é apenas ligeiramente relacionado com o restante da página.
  • hgroup – representa o cabeçalho de uma seção.
  • footer – representa um rodapé para uma seção e pode conter informações sobre o autor, copyright,…
  • nav – representa uma seção do documento destinada à navegação.
  • figure – pode ser usado para associar uma legenda junto com algum documento incorporado, como uma imagem ou vídeo.

<figure>

<video src=”ogg”></video>

<figcaption>Example</figcaption>

</figure>

  • figcaption – fornece a legenda.
  • video e audio para conteúdos multimídia.
  • embed – plugins.
  • marker – representa uma série de texto marcado.
  • progress – representa uma conclusão de uma tarefa, como baixar ou executar uma série de operações.
  • meter – representa uma medida, como o uso do disco.
  • time – representa uma data e/ou tempo.
  • ruby rb e rp – permite a marcação de anotações de Ruby.
  • canvas – é utilizada para renderização de gráficos bitmap.
  • command – representa um comando que o usuário pode invocar.
  • details – representa informações adicionais ou controles que o usuário pode obter sobre uma procura. O elemento summary fornece um resumo.
  • datalist – em conjunto com o atributo list usado na tag input pode ser usada para fazer caixas de combinação:

<input list=”browsers”>

<datalist>

<option value=”Safari”>

<option value=”Internet Explorer”>

<option value=”Opera”>

<option value=”Firefox”>

</datalist>

Isso só foi uma amostra da nova versão, nos próximos artigos vou estar mostrando como utilizar a nova versão do HTML 5.

Até++!

HTC Magic carregado com malware

A familiarização das tecnologias, leva a que cada vez mais os pequenos dispositivos e gadgets que estão acessíveis ao comum dos mortais, nos acompanhem para facilitar a nossa vida. Mas como não há “bela sem senão”, têm como desvantagem ser potenciais focos de disseminação de programas maliciosos. Quem usa Windows, sabe bem que as pen drives são disso um exemplo, mas a moda pode estar a pegar nos smartphones.

Segundo o blog da Panda Software, ocorreu um caso invulgar, mas que em tudo merece a nossa atenção nesta notícia. Um dos colaboradores da empresa de segurança da sucursal Espanhola, recebeu um HTC Magic com branding da Vodafone. Qual foi no entanto a sua surpresa quando o ligou ao PC e automaticamente o sistema de antivírus (Panda Cloud Antivirus), disparou um alerta que identificava um ficheiro autorun.inf e autorun.exe. Uma análise cuidada revelou a seguinte estrutura de ficheiros, que infectaria qualquer PC com Windows com o autorun activo.

Uma análise mais atenta revelou a presença de um malware ligado a uma botnet denominada Mariposa, que se liga remotamente a uma rede de computadores “zombie” de modo armazenar informação sensível relativa ao PC do utilizador. Infelizmente não foi a única ameaça encontrada no Magic, já que foram também detectadas, uma variante do conhecido vírus Conficker, e um malware capaz de armazenar todas as passwords do jogo Lineage, que tem muitos seguidores na Europa.

A Vodafone responsável pela distribuição do equipamento veio já assegurar que se trata de um caso isolado, bem como a HTC a responsável pelo fabrico do Magic. Isto leva-nos contudo a pensar que mesmo apesar de se tratarem de duas empresas de grande credibilidade a nível mundial, com elevados requisitos de controlo de qualidade nada é infalível. Por isso, é da máxima importância, ter alguma atenção quando se adquire em qualquer lado um equipamento electrónico com armazenamento flash, de modo a verificar se não ocorrem situações destas.

Parece claro, que Panda também se aproveitou desta “gaffe” que não sabemos até à data de quem terá sido a responsabilidade, para mediatizar o caso e com isso promover a eficiência e nível de protecção sua solução de anti vírus. Mas se de facto este smartphone foi infectado de uma forma não deliberada, isto leva-nos claramente a reflectir com os nossos leitores, o quanto os autores de populares variantes de malware, estão a evoluir nas suas práticas, ajustando-as ao paradigma cada vez mais actual da computação móvel.elmundo

Pesquisar na Internet com o menu Iniciar do Windows 7

O Windows tem muitas opções escondidas. Algumas menos úteis e outras muito úteis. De tal forma úteis que não se compreende que não venham activas e disponíveis desde o primeiro momento.

Exemplo disso é a dica que vos trago hoje. Sabiam que com meia dúzia de cliques podem usar a vossa barra de tarefas para efectuar pesquisas na Internet? E a sua activação é extremamente simples.

Ao activarem esta funcionalidade podem colocar texto na caixa de pesquisa que habitualmente usam para pesquisar conteúdos e a partir dai lançarem o vosso browser com a pesquisa que pretendem no vosso motor de pesquisa de eleição.

A opção está presente e apenas necessita de indicação para ser activada. E é tão simples como aceder ao Editor de Politicas Grupo Local e activar a politica certa.

Esta dica aplica-se ao Windows SP, Vista e 7 pelo que de certeza que a pode usar.

Mas vamos então explicar em detalhe como activar esta dica. Em primeiro lugar devem lançar o Editor de Politicas Grupo Local. Para isso carreguem no botão Iniciar e na caixa de pesquisa coloquem gpedit.msc. Carreguem agora no Enter.

Ao executarem esse comando será aberta uma nova janela. Essa janela é o Editor de Politicas de Grupo Local. Ai dentro devem procurar na coluna esquerda por Configurações do Utilizador, depois por Modelos Administrativos e finalmente por Menu Iniciar e Barra de Tarefas. Seleccionem este último.

Na metade direita serão apresentadas os itens referentes a essa entrada. Procurem por Adicionar ligação Procurar na Internet ao Menu Adicionar. Deverá ser a primeira.

Façam então duplo clique nessa entrada. Vai ser aberta uma nova janela. É aqui que vamos activar a opção que pretendemos. Basta que cliquem com o rato em Activado e está feito. Carregue  no botão OK e feche a janela do Editor de Politicas de Grupo Local.

E pronto. Agora só têm de abrir novamente o menu Iniciar colocar na caixa de pesquisa o que pretendem procurar. Se repararem passa a haver uma entrada adicional e que tem o símbolo do vosso browser pré-definido e o texto Procurar na Internet. Cerreguem nessa opção e vejam o browser a abrir-se e a ser apontado para o motor de pesquisa que têm definido.

Caso pretendam mudar o motor de pesquisa a usar só têm de o fazer no browser e o SO assume essa alteração. A mudança de browser efectua-se de forma idêntica. Alterem o browser padrão e está feito.

Tal como foi dito acima esta dica funciona para o Windows XP, Vista e 7, e nas versões Professional, Enterprise e Ultimate. Caso a vossa versão não seja esta, ou pretendam usar um método mais rápido e menos “gráfico” podem colocar o texto abaixo num ficheiro com extensão .reg e aplicarem-no com um duplo clique.

Windows Registry Editor Version 5.00   [HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer]
"AddSearchInternetLinkInStartMenu"=dword:00000001

E pensem um pouco, esta funcionalidade deveria estar ou não activa desde a instalação do sistema operativo? Boas pesquisas a partir do vosso menu Iniciar.

Loading JSON content via Ajax

Loading JSON content via Ajax

http://icant.co.uk/articles/things-to-know-about-ajax/load-json.html

Example

Source Code

JavaScript
$(document).ready(function(){
  var container = $('#target');
  container.attr('tabIndex','-1');
  $('.ajaxtrigger').click(function(){
    var trigger = $(this);
    var url = trigger.attr('href');
    container.html('');
    if(!trigger.hasClass('loaded')){
      trigger.append('<span></span>');
      trigger.addClass('loaded');
      var msg = trigger.find('span::last');
    } else {
      var msg = trigger.find('span::last');
    }
    doAjax(url,msg,container);
    return false;
  });
 
  function doAjax(url,msg,container){
    var tag = url.split('/');
    var tag = tag[tag.length-1];
    $.getJSON("http://api.flickr.com/services/feeds/"+
               "photos_public.gne?tags="+tag+
               "&tagmode=any&format=json&jsoncallback=?",
     function(data){
       msg.html(' (ready.)');
       $.each(data.items, function(i,item){
         $("<img/>").
          attr("src", item.media.m).
            attr("alt",item.title).
              appendTo(container);
         if ( i == 3 ) return false;
       });
       container.focus().effect("highlight",{},1000);
    });
  }
});

Top WordPress Hacks 2009

2009 has been a very prolific year for WordPress hacks. In this article, I’ll show you the most useful hacks I came across during the whole year. Enjoy!

Monetizing your old blog posts

Let’s start this post with a nice hack dedicated to help you make more money online, initially published on my other blog Cats Who Blog.
If you don’t want to bore your loyal readers but still want to earn some bucks, what about monetizing only your old blog posts instead? This code will add some advertisements only if the post is more than 15 days old.

The following function has to be pasted in your functions.php. If you are using the Thesis theme this file is named custom_functions.php.

view source

print?

01.function is_old_post($post_id=null){

02. $days = 15;

03. global $wp_query;

04. if(is_single() || is_page()) {

05. if(!$post_id) {

06. $post_id = $wp_query->post->ID;

07. }

08. $current_date = time();

09. $offset = $days *60*60*24;

10. $post_id = get_post($post_id);

11. $post_date = mysql2date('U',$post_id->post_date);

12. $cunning_math = $post_date + $offset;

13. $test = $current_date - $cunning_math;

14. if($test > 0){

15. $return = true;

16. }else{

17. $return = false;

18. }

19. }else{

20. $return = false;

21. }

22. return $return;

23.}

Once you’ve successfully inserted the code in your function.php file, you are now ready to call the functions in your single.php template as shown below:

view source

print?

1.<?php if(is_old_post()){ ?>

2.INSERT AD CODE HERE

3.<?php } ?>

Source : http://www.catswhoblog.com/how-to-monetize-your-old-blog-posts

Display your posts word count

Many people asked me about being able to get the post word count and display it. It is definitely easier to do than you may think at first.
Simply open your functions.php file and paste this function in it:

view source

print?

1.function wcount(){

2. ob_start();

3. the_content();

4. $content = ob_get_clean();

5. return sizeof(explode(" ", $content));

6.}

Once finished, you can call the function within the loop to get the number of words for the current post:

view source

print?

1.<?php echo wcount(); ?>

Source : http://www.wprecipes.com/wordpress-function-to-display-your-posts-words-count

Detect the visitor browser within WordPress

One of my favorite WordPress hacks of the year is definitely this one, which is incredibly useful. While conditional comments are a great way to target specific browsers, WordPress has one detection function that you can use to make your web developer life easier.

view source

print?

01.<?php

02.add_filter('body_class','browser_body_class');

03.function browser_body_class($classes) {

04. global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;

05.

06. if($is_lynx) $classes[] = 'lynx';

07. elseif($is_gecko) $classes[] = 'gecko';

08. elseif($is_opera) $classes[] = 'opera';

09. elseif($is_NS4) $classes[] = 'ns4';

10. elseif($is_safari) $classes[] = 'safari';

11. elseif($is_chrome) $classes[] = 'chrome';

12. elseif($is_IE) $classes[] = 'ie';

13. else $classes[] = 'unknown';

14.

15. if($is_iphone) $classes[] = 'iphone';

16. return $classes;

17.}

18.?>

The final result will look something like this, if you view the source code of your page:

view source

print?

1.<body class="home blog logged-in safari">

Source : http://www.nathanrice.net/blog/browser-detection-and-the-body_class-function/

Get short urls for social bookmarking

With the rise of Twitter and its 140 characters limit, bloggers have to use short urls to fully take advantage of this new social media phenomenon.
Lots of quality url shorteners are available, but this trick will create a shorter version of your urls automatically, making you save time and hassle.
Paste the following code on your single.php file:

view source

print?

1.<?php echo get_bloginfo('url')."/?p=".$post->ID; ?>

It will output a url similar to:

view source

print?

1.http://www.catswhocode.com/?p=54

Source : http://www.wprecipes.com/how-to-get-short-urls-for-social-bookmarking

Get the first image from the post and display it

This hack has been a favorite of WpRecipes during the year 2009. And I understand that because this hack is very useful, especially for “magazine” themes: It allows you to automatically get the first image from the current post, and display it.

The first thing to do is to paste the function below on your functions.php file.

view source

print?

01.function catch_that_image() {

02. global $post, $posts;

03. $first_img = '';

04. ob_start();

05. ob_end_clean();

06. $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);

07. $first_img = $matches [1] [0];

08.

09. if(empty($first_img)){ //Defines a default image

10. $first_img = "/images/default.jpg";

11. }

12. return $first_img;

13.}

Once finished, you can simply call the function within the loop to display the first image from the post:

view source

print?

1.<?php echo catch_that_image() ?>

Source : http://www.wprecipes.com/how-to-get-the-first-image-from-the-post-and-display-it

Use SSL on wp-admin directory

On the internet, security is always a concern. If your hosting provider supports it (Wp WebHost and HostGator does) you should definitely enable SSL support.
SSL is a cryptographic protocol that provide security and data integrity for communications over TCP/IP networks such as the Internet. TLS and SSL encrypt the segments of network connections at the Transport Layer end-to-end.
Open the wp-config.php file and paste the following:

view source

print?

1.define('FORCE_SSL_ADMIN', true);

Next, save the file, and you’re done!
Source : http://www.wprecipes.com/how-to-force-using-ssl-on-wp-admin-directory

Enhancing the search function

WordPress has a built-in “search” function which isn’t bad, but should have been better. For example, one of the things that could enhance it is to highlight the search results.
To do so, open your search.php file and insert this code:

view source

print?

1.<?php

2. $title = get_the_title();

3. $keys= explode(" ",$s);

4. $title = preg_replace('/('.implode('|', $keys) .')/iu',

5. '<strong class="search-excerpt">\0</strong>',

6. $title);

7.?>

Then, you’ll have to define a style for the search-excerpt CSS class. Just open style.css and paste:

view source

print?

1.strong.search-excerpt { background: yellow; }

Source : http://yoast.com/wordpress-search/

Post on your WordPress blog using PHP

Many of you have enjoyed my “Awesome things to do with cURL” article, published in June. One of the most interesting snippets from that article is showing how to post articles on your WordPress blog, using PHP and cURL.

Here is the function. This code is not made for being used within WordPress, so don’t paste it on your functions.php file (or any other).

Please note that you must activate the XMLRPC posting option in your WordPress blog. If this option isn’t activated, the code will not be able to insert anything into your blog database. Another thing, make sure the XMLRPC functions are activated on your php.ini file.

view source

print?

01.function wpPostXMLRPC($title, $body, $rpcurl, $username, $password, $category, $keywords='', $encoding='UTF-8') {

02. $title = htmlentities($title,ENT_NOQUOTES,$encoding);

03. $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);

04.

05. $content = array(

06. 'title'=>$title,

07. 'description'=>$body,

08. 'mt_allow_comments'=>0,  // 1 to allow comments

09. 'mt_allow_pings'=>0,  // 1 to allow trackbacks

10. 'post_type'=>'post',

11. 'mt_keywords'=>$keywords,

12. 'categories'=>array($category)

13. );

14. $params = array(0,$username,$password,$content,true);

15. $request = xmlrpc_encode_request('metaWeblog.newPost',$params);

16. $ch = curl_init();

17. curl_setopt($ch, CURLOPT_POSTFIELDS, $request);

18. curl_setopt($ch, CURLOPT_URL, $rpcurl);

19. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

20. curl_setopt($ch, CURLOPT_TIMEOUT, 1);

21. $results = curl_exec($ch);

22. curl_close($ch);

23. return $results;

24.?>

Source : http://www.wprecipes.com/post-on-your-wordpress-blog-using-php

Rewrite author name with custom field

If you often invite other bloggers to post on your blog, this tip is a must have. It simply allows you to create a custom field with the name of the guest author, and it will overwrite the the_author(); functions.
Simply paste the following code on your single.php and page.php, where you want the author name to be displayed.

view source

print?

1.<?php $author = get_post_meta($post->ID, "guest-author", true);

2.if ($author != "") {

3. echo $author;

4.} else {

5. the_author();

6.}  ?>

Source : http://www.wprecipes.com/rewrite-author-name-with-custom-field

Detect mobile visitors on your WordPress blog

Mobile devices as such the Blackberry or iPhone are more and more popular everyday, and this is why you definitely should take those readers in consideration by offering them a mobile version of your blog.
This hack is definitely easy to implement, thanks to Jeff Starr and Chris Coyier, the author of the excellent “Digging into WordPress” book.

To achieve this recipe, you first have to get the code from detectmobilebrowsers.mobi and upload it to your theme directory.

Then, simply open your header.php file and place the following at the top of the file. Don’t forget to edit line 5 according to the page where you’d like to redirect mobile users.

view source

print?

1.include('mobile_device_detect.php');

2.$mobile = mobile_device_detect();

3.

4.if ($mobile==true) {

5. header( 'Location: http://your-website.com/?theme=Your_Mobile_Theme' ) ;

6.}

Source : http://digwp.com/2009/12/redirect-mobile-users-to-mobile-theme/