value1

10 truques para deixar o Facebook mais bacana

face-noticicaExistem alguns truques espalhados pelo Facebook que poderiam tonar a experiência dos usuários mais bacana. Nem todos esses recursos estão escondidos, mas podem não ter sido notados, então segue uma lista com dez deles:

 

Lista de interesses

No quesito produtividade, uma das grandes funcionalidades do Facebook. Com isso você pode criar listas co páginas ou pessoas que te interessem. Por exemplo: uma chamada "notícias" em que constam páginas de sites como o Olhar Digital; ou outra "acompanhar" com pessoas que você queira seguir de perto.

Basta clicar aqui para criar uma lista. Ela pode ser pública ou privada.

Ver o histórico de amizade

Veja as interações entre você e um amigo clicando na aba "ver amizade" que fica abaixo da foto de capa de cada pessoa. Ali aparecem postagens, fotos, eventos, entre outras coisas. E, caso você esteja em um relacionamento com alguém, clique aqui para ver a página do casal.

"Outras" mensagens

Pode haver um monte de mensagens não lidas no seu Facebook, porque tudo o que a rede social julga como não tão interessante vai para a pasta "Outros". Ela fica aqui, guardando conversas talvez nunca respondidas.

Veja fotos do jeito antigo

Nem todo mundo gostou da visualização de fotos e vídeos em formato pop-up do Facebook, mas você pode voltar ao modo antigo apenas recarregando a página da foto/vídeo. Também dá para fazer isso abrindo a foto/vídeo em uma nova aba do navegador.

Não seja surpreendido com a marcação de fotos

Ao invés de deixar que qualquer um te marque em uma foto, o que por vezes causa constrangimento, você pode escolher aprovar todas as marcações. Para fazer isso, clique aqui e deixe a opção "Analisar marcações que as pessoas adicionam às suas publicações antes de serem exibidas no Facebook?" ativada.

Altere o idioma para algo mais divertido

Há bastante tempo o Facebook incluiu a opção "inglês de piratas" entre os idiomas, e também há o "upside down" que deixa tudo escrito da direita para a esquerda e o "Leet Speak", uma espécie linguagem de internet. Mas atenção: pode ser bem complicado entender o que está escrito. Se quiser mudar, vá aqui e divirta-se.

Baixe seus dados

Também nesta página você encontrará um link para baixar todas as informações sobre si próprio que estão armazenadas na rede social. Ele fica abaixo da opção de idioma, escrito em azul.

Registro de atividades

Tudo o que você faz no Facebook fica guardado. Pelo registro de atividades dá para ver o que foi curtido, os comentários feitos e recebidos, fotos marcadas, grupos que você entrou, eventos… tudo. O recurso fica abaixo de sua foto de capa, do lado direito.

Envie mensagem privada pelo e-mail

Todo usuário do Facebook possui um e-mail na rede social, isso significa que é possível receber mensagens de Gmail, Hotmail, Yahoo etc. lá dentro. Se quiser enviar uma mensagem assim, basta colocar o nome de usuário do destinatário seguido por @facebook.com e enviar da sua conta tradicional.

Desligue notificações móveis

Não quer mais receber notificações no celular ou tablet sobre qualquer coisa que ocorre no Facebook? Siga estes passos: pelo app do aparelho, visite Configurações da conta > Notificações > Push de celular. Então é só desmarcar o que incomoda.

Com: Telegraph.

fonte: http://olhardigital.uol.com.br/

value1

Google atualiza Google+ e libera filtros para fotos e criação de vídeos

googleplusO Google+ tem lutado para convencer a Internet que é melhor do que o Facebook, então a rede social do Google está adotando uma nova abordagem: a de se reposicionar como uma ferramenta para os fotógrafos.

Não é exatamente uma mudança abrupta para a plataforma, que reformulou a sua imagem e lançou novos recursos de aperfeiçoamento de fotos e ferramentas de organização durante o Google I/O em maio. 

 

Mas o vice-presidente de engenharia do Google, Vic Gundotra, na terça-feira (29), fez da fotografia o foco principal da empresa, avançando com uma série de novos recursos de foto e vídeo.

Gundotra anunciou que o Google+ tem 300 milhões de usuários ativos mensais atualmente, acima dos 190 milhões registrados em maio, que fazem o upload de 1,5 bilhão de fotos para o site a cada semana. 

O Google+ levou um ano e meio para chegar aos 190 milhões de usuários ativos - não apenas calculando os usuários associados a outros serviços com um login para a rede. Então outros 110 milhões em menos de seis meses é um feito bastante impressionante. 

As fotos são a chave para a plataforma, que precisa se ​​destacar do Facebook e das centenas de aplicativos sociais que abrem e fecham todos os dias.

google-foto-melhoria

Agora você pode habilita a melhora automática da imagem para transformar 
sua cena da praia em uma obra de arte impressionante

 

Coloque um filtro nisso

Gundotra demonstrou 18 novos recursos do Google+ em um evento em São Francisco. Muitos dos recursos eram a prova de que a "Instagramização" da fotografia veio para ficar. Esqueça o Photoshop, queremos um aplicativo que irá retocar a nossa arte latte e mostrar o seu melhor ângulo na tela.

"A fotografia atualmente é muito difícil", disse Gundotra. "Quando eu saio de férias, minha mesa é uma massa de cabos e cartões de memória e DSLRs e lentes, para não falar que mais e mais a fotografia está conquistando seu espaço em dispositivos móveis. Isto não é divertido. É um pesadelo. As pessoas têm belos tesouros que ficaram presos nestes vários dispositivos."

O Google+ quer ser o lugar em que você armazena, organiza, edita e compartilha essas fotos. Não com outras redes - apenas dentro do Google+.

A empresa liberou melhorias para a função "Auto Enhance" da rede, que edita suas fotos sem que você faça o trabalho pesado. Agora você pode aumentar ou diminuir os níveis de Auto Enhance e controlar essa configuração em uma base álbum por álbum.

Duas outras ferramentas enigmáticas que os usuários do Google+ podem se apaixonar são a "Action", que dispara vários quadros em um clique, e a "Eraser", que elimina quaisquer objetos indesejados que possam ter entrado na imagem. 

Essa última é o sonho dos turistas - não mais terão um nova-iorquino mal-humorado cruzando na frente da sua foto!

Na parte de vídeos, a rede social adicionou o recurso "Auto Awesome Movie" para criar filmes a partir de fotos, clipes curtos, e uma trilha sonora de sua escolha - o que lembra um pouco o iMovie. Mas, hey, as pessoas adoram criar vídeos, como Instagram e Vine podem atestar.

g erasure2Pessoas chatas sempre bloqueam sua visão? Agora você pode simplesmente apagá-las

Se suas habilidades fotográficas pendem mais para o lado profissional, o Google adicionou filtros aos seus editores de fotografia - tanto o Snapseed, quanto à suíte de plugins para Photoshop, Photoshop Elements, Photoshop Lightroom e Aperture, a Nik Collection (que é paga).

Esses são os únicos editores que podem postar imagens no Google+, já que não há APIs para que outros aplicativos postem imagens na rede - somente produtos do próprio Google podem fazer isso.

Hangouts

O Google+ também quer ser o lugar onde você tem todas as suas conversas, desse modo, a rede social está atualizando seu aplicativo Hangouts para Android para dar suporte a mensagens de texto SMS. 

Agora você não tem que deixar o app para continuar conversando com os amigos. Isso se encaixa no objetivo da empresa: que você nunca, jamais, deixe o Google+, especialmente para usar outros serviços de mensagens.

"Você não tem que lidar com vários clientes", disse Gundotra. O que ele quis dizer foi: sinta-se livre para apagar o Snapchat, usuários do Android.

O Google também habilitou o compartilhamento de localização com um clique - possibilitado pelo Google Maps, é claro, dentro do aplicativo Hangouts. Além de permitir a visualização de GIFs animados. Sim, GIFs animados. Isso é algo que o Facebook não tem.

A "Auto Awesome" também está chegando para chamadas de vídeo no Hangouts, de modo que você pode colocar um filtro no seu vídeo ao vivo. 

Essas atualizações serão liberadas nos próximos dias para o Hangouts para os usuários do Android. Gundotra não disse se as melhorias para o aplicativo chegarão ao iOS em breve.

De volta ao desktop, o Google adicionou algumas melhorias para Hangouts on Air. Agora, o Google permite aos usuários criar páginas dedicadas a promover eventos do Hangout e adicionou recursos para ajudar a gerenciar esses eventos quando eles começarem.

O público do Google+

Se o Facebook é um lugar para os amigos, o Google pode ser o lugar para fotos. E vídeos, também. Ser apenas mais uma rede social não é uma opção - não quando o cenário já está cheio de concorrentes. A gigante das buscas tem algum poder, ela agora só precisa que as pessoas realmente postem.

Gundotra e sua equipe estão apostando nos fotógrafos - ambos profissionais e aqueles iguais a nós que deixam nossos smartphones fazem a maior parte do trabalho - vai definir a rede social. Gundotra reiterou várias vezes que a empresa quer revolucionar a fotografia e ajudar as pessoas a contar histórias com suas imagens. E eles podem estar chegando mais próximo desse objetivo.

fonte: http://idgnow.uol.com.br/

value1

Estudante faz milhares de dólares em Bitcoin investindo apenas US$ 27

biticonImagine se lembrar de um investimento feito há anos e descobrir que ficou cheio de dinheiro. Foi o que aconteceu com o estudante norueguês Kristoffer Koch.

Em 2009 ele gastou 150 coroas (US$ 26,60) comprando algumas unidades da moeda virtual e se esqueceu disso.

 

Em abril deste ano, quando a Bitcoin estava em destaque na mídia, Koch se lembrou que investira na moeda. "Pensei comigo: eu não tinha alguma coisa daquilo?", declarou em entrevista repercutida pelo News.com.au.

A surpresa foi grande: quando finalmente lembrou de sua senha (porque ele esquecera), o estudante descobriu que o saldo havia chegado em 5 mil Bitcoins, o equivalente a 5 milhões de coroas - ou US$ 885,5 mil.

Koch descontou 1/5 do valor, mas isso foi suficiente para ele comprar um apartamento em Toyen, uma das regiões mais ricas da capital Oslo.

fonte: http://olhardigital.uol.com.br

value1

Erro no Facebook bloqueia contas dos usuários

facebook-bloqueiaAlguns usuários do Facebook pelo mundo tiveram suas contas bloqueadas nessa segunda-feira por causa de um erro da rede social. Segundo os internautas afetados, uma mensagem de verificação pedia a eles que publicassem fotos para comprovar que os perfis lhe pertenciam.

Em nota, o Facebook reconheceu o problema que atingiu um "pequeno número" de pessoas e pediu desculpas pelo inconveniente. No texto repercutido ontem à noite, a companhia disse ter removido a funcionalidade assim que notou o erro. De acordo com o site The Next Web, a falha não indica vulnerabilidade a eventuais ataques.

Confira a mensagem que impediu os usuários de acessar suas contas:

bloqueia-face

fonte: http://olhardigital.uol.com.br/

value1

Micro-ondas ao contrário gela bebidas em segundos

micro-friuSe o forno de micro-ondas deu mais agilidade ao esquentar almoços, lanches e jantares em minutos, o que dizer de um aparelho que faz exatamente o oposto, só que com bebidas, deixando-as geladas em apenas segundos?

 

Uma empresa britânica chamada V-Tex desenvolveu a tecnologia, chamada rapid cooling, e ela foi tão bem creditada que a União Europeia colocou dinheiro na ideia.

O "micro-ondas ao contrário" deixa latas e garrafas a 5 ºC em 45 segundos, mas o protótipo doméstico da V-Tex vem com outras opções de temperatura. Ele consegue isso envolvendo a embalagem da bebida em um líquido bem gelado, que se chacoalha rapidamente mas de uma forma que não deixar a cerveja ficar choca.

A ideia é colocar a máquina não só nos lares, mas também em estabelecimentos que mantêm geladeiras ligadas o tempo todo - como bares e supermercados. Segundo a V-Tex, sua tecnologia consome até 80% menos energia que outros aparelhos.

value1

Investigadores conseguem prever o final de uma relação através do Facebook

ET FacebookRelationshipsDois investigadores afirmam ter descoberto uma forma de identificar pares românticos e até prever o final de uma relação no Facebook. Como? Através de um algoritmo.

A solução inventada por Jon Kleinberg, cientista da universidade de Cornell, e Lars Backstrom, engenheiro do Facebook, baseia-se num algoritmo matemático que analisa as interações na rede social de Mark Zuckerberg.

Os dois propõem um novo parâmetro para avaliar o relacionamento entre duas pessoas, ao qual chamam de “dispersão“.

Os investigadores partem do princípio que os amigos próximos têm tendência para ter mais conexões em comum. Com um par romântico, acontece o oposto. Se é verdade que ambos acabam por conhecer e criar laços com os amigos um do outro, o que acontece é que muitas vezes a única ligação para esse novo grupo de amigos conhecidos através do “namorado” ou “marido”, por exemplo, é o próprio cônjuge.

Assim, uma grande “dispersão” entre duas pessoas indica que os seus amigos mútuos não têm muitas ligações entre si. É o que  acontece geralmente com os casais. O oposto verifica-se com amigos próximos, que têm baixa “dispersão”.

Para verificar estes tipos de relacionamentos e ligações, os cientistas recorreram a técnicas de análise de big data. O universo do estudo teve por base mais de 8 mil milhões de conexões de 1,3 milhões de utilizadores do Facebook, selecionados aleatoriamente mas com um denominador em comum: identificaram um parceiro amoroso.

Durante dois anos, os investigadores analisaram milhões de dados e chegaram à conclusão de que a “dispersão” é um critério razoavelmente preciso para identificar um par romântico.

Ainda assim, há casos em que o relacionamento amoroso existe, mas a dispersão é baixa (ou seja, os seus amigos têm muitas ligaõçes entre si). O algoritmo, então, não consegue reconhecer a relação. Kleinberg e Backstrom observaram que, quando isso acontece, significa provavelmente que o relacionamento não vai bem. A probabilidade de a relação acabar nos próximos dois meses aumenta para 50 por cento.

Assim, os relacionamentos mais duradouros parecem ser aqueles que expandem o universo de relações de cada pessoa, conferindo-lhe conexões (ou amigos) que ela não possuía.

fonte: http://www.tecnologia.com.pt

value1

Lista negra do comércio eletrônico é atualizada

comercio-eletronico-negroProblemas com sites fraudulentos de compras não são novidade, mas em épocas de atividade intensa no comércio eles aumentam. Ou seja: está chegando a hora de prestar atenção antes de sair clicando por aí.

O Procon paulista elaborou há mais de um ano uma lista com os sites que devem ser evitados por já terem sido alvos de reclamações de internautas lesados. Essa lista vem sendo atualizada e, hoje, conta com 323 endereços.

Segundo reportagem do Globo, 18 sites foram incluídos apenas entre setembro e o começo deste mês, e dez deles ainda estão no ar. Ainda assim assim a lista não está completa. O jornal lembra, por exemplo, do JFD Eletrônicos e do Barato A Jato, que aparentemente enganaram muitos brasileiros mas ainda não são citados pelo Procon.

A dica principal para não cair em armadilhas é: desconfie sempre. Nenhuma loja consegue fazer milagres, então, se o valor de um produto destoar demais do que você encontrou em outros sites, é melhor pensar várias vezes antes de fechar a compra.

Consultar o trabalho do Procon também é importante. Para conferir, clique aqui e veja o PDF. 

fonte: http://olhardigital.uol.com.br/

value1

Google constrói data centers gigantes que flutuam no mar

StructureA Google estará finalmente a dar uso a uma patente registada há cinco anos relativa à construção de data centers situados no mar. O objetivo é que as estruturas flutuantes sejam arrefecidas e movidas pela força do oceano, ficando ainda fora do alcance legal de qualquer governo, especialmente o norte-americano.

 

Os planos da empresa, que é um dos maiores detentores de informação alheia do mundo, foram revelados pelo site CNet. A notícia revela que a Google está ligada ao misterioso ”Building 3″ (Edifício 3), na Treasure Island, em San Francisco Bay.

Neste local, está a ser construída uma enorme estrutura de quatro andares que os especialistas dizem ser um data center flutuante.

Google-Building

Building 3, em San Francisco Bay

Entretanto, uma construção muito semelhante foi vista a ser rebocada por uma barca perto do porto de Portland, Maine, há cerca de duas semanas. A operação está registada no nome da mesma companhia responsável pela estrutura que está a ser construída em San Francisco, chamada By and Large (um nome muito semelhante à empresa fictícia “Buy and Large” que surge em vários filmes da Pixar).

A patente destes data centers foi pedida pela Google em 2008 e garantida no ano seguinte, descrevendo uma estrutura situada no oceano, num suporte flutuante como um navio, por exemplo, que é alimentada pela força do mar, utilizando a água para arrefecer os servidores.

Colocando os data centers no alto mar, fora dos limites da costa dos Estados Unidos, daria a possibilidade à Google de fugir ao controlo do governo norte-americano.

fonte: http://www.tecnologia.com.pt

value1

Segurança: como proteger sua conta no Facebook usando autenticação dupla

fb security codeNinguém gosta quando seus amigos, de repente, começam a postar um monte de links de perda de peso ou pornografia no Facebook. Não seja essa pessoa. Usar a autenticação dupla na rede social pode ajudar a manter coisas indesejadas bem longe da sua conta - e até poupar alguns amigos.

 

A autenticação de dois fatores, para os não entendidos, exige que você coloque outro dado privado além da senha digitada para acessar o site. Isso geralmente assume a forma de um código de segurança de uso único que é enviado ao seu smartphone, e pode ajudar a manter a sua conta protegida em caso de algum cracker ou ladrão de dados consiga seu nome de usuário e senha.

Configurar a ferramenta Aprovação de login leva apenas alguns minutos.

Para começar, entre na página Facebook.com e acesse com o seu nome de usuário e senha. Depois, clique na engrenagem localizado no canto direito da página e selecione "Configurações da conta" no menu. Selecione a opção "Segurança" na lista localizada à esquerda da tela e, depois, selecione "Aprovação de login".

Ao clicar na seção, ela irá se expandir. Então, marque a caixa de seleção "Exigir um código de segurança para acessar minha conta a partir de navegadores desconhecidos", e o Facebook irá orientá-lo no processo de configuração. 

Por padrão, o Facebook irá enviar um código de segurança por meio do seu aplicativo móvel, mas a rede também pode enviar um SMS como método de login reserva. Se você ainda não possui um número de telefone associado à sua conta, o Facebook pedirá que você adicione um.  

Quando acontecer, selecione um país da lista, entre com o seu número e depois aperte o botão "Continuar". A rede social enviará um SMS ao seu celular para confirmar que o seu número é, de fato, seu: entre com o código de confirmação de seis dígitos quando solicitado e depois clique em "Confirmar".

Acessando à rede

O Facebook não pedirá para você colocar um código de segurança em um navegador que ele já reconhece, então se você usa o site apenas de um computador, é possível que você nunca seja solicitado a entrar com um código de segurança. Mas caso você seja, aqui está o que esperar:

Depois de entrar com um nome de usuário e senha, será solicitado um código de segurança.

A próxima vez que você acessar o Facebook de um novo computador, entre com o seu nome de usuário e senha normalmente, e clique em "Entrar". Na página página, o Facebook pedirá que você entre com um código de segurança.

Gerador de código

Para obter esse código, abra o aplicativo do Facebook no seu celular, clique em "Mais" (no iOS a opção está na barra de ferramentas, no Android você deve deslizar para a direita para acessar o menu), e então desça até o final da página e clique em "Gerador de códigos". A rede social irá exibir um código único composto por seis dígitos durante 30 segundos (depois desse tempo, outro código aparecerá na tela). Entre com ele no seu computador e clique em "Continuar".

Limitações

O recurso de autenticação de dois fatores do Facebook não protege tudo, no entanto. Ele apenas solicita o uso de um código de segurança se você tentar acessar o site de um dispositivo desconhecido, e apenas funciona para solicitações de login feitas por navegadores web - você pode entrar no aplicativo móvel sem ter que digitar o código. Ainda assim, é melhor que nada.

fonte: http://idgnow.uol.com.br

value1

Criando Releases com Apache Ant

Apache-AntEste artigo demonstra o processo de criação de releases de projeto, utilizando a ferramenta Ant. Os arquivos gerados da release são o “html/css/js/php”, necessários para enviar ao cliente, destacando que os arquivos “js” e “css” são concatenados e compactados em um único arquivo. O objetivo deste artigo é que através de um simples comando “ant” a release seja gerada e possa ser enviada para o cliente.

De acordo com a Apache, “A Apache Ant é uma biblioteca Java e uma ferramenta de linha de comando, cuja missão é conduzir os processos descritos na construção de arquivos como alvos e pontos de extensão, que dependem uns dos outros. Ant fornece uma série de tarefas internas que permitem compilar, montar, testar e executar aplicativos”. Essa ferramenta é um software livre, projetado e licenciado pela “Apache Software Foundation.

Instalação do Apache Ant

Para a instalação da ferramenta  deve ser realizado o download do arquivo correspondente, compactado, pelo site .

Com o download completo, o arquivo “rar” deve ser copiado para o diretório de sua preferencia e descompactado. A Figura 1 apresenta o exemplo de caminho que foi realizado a descompactação do arquivo (D:\ant).

Apache Ant

Figura 1: Apache Ant

Com o Ant descompactado, deve ser criada uma variável de ambiente apontando para o caminho de localização do Ant, como exemplificado na Figura 2.

Variável de Ambiente Ant

Figura 2: Variável de Ambiente Ant

A pasta Bin deve ser acrescentada ao PATH de comandos do sistema operacional (D:\>SET PATH=%PATH%;%ANT_HOME%\bin) conforme ilustrado na Figura 3.

Pasta Bin ao Path de comandos do Sistema Operacional

Figura 3: Pasta Bin ao Path de comandos do Sistema Operacional

A verificação de configuração do Ant é possível pela execução do comando “ant”, exemplificado na Figura 4.

Comando Ant

Figura 4: Comando Ant

O comando de verificação direciona o usuário a uma mensagem informativa, de sucesso ou não, como Figura 5.

Ant configurado com Sucesso

Figura 5: Ant configurado com Sucesso

A mensagem apresentada na Figura 5 ilustra a configuração bem sucedida.

Entendendo o projeto ant-build-xml

Com o Ant configurado corretamente é possível iniciar o processo de geração de releases para liberar para o cliente. O projeto “ant-build-xml”, apresenta na Figura 6, pode ser encontrado no .

Projeto ant-build-xml

Figura 6: Projeto "ant-build-xml"

O projeto está divido em “build-xml”, “projeto-exemplo”, “release-liberacao”. Na pasta “build-xml” (Figura 7) encontra-se os arquivos utilizados pela ferramenta Ant.

Pasta build-xml

Figura 7: Pasta build-xml

A Figura 8 apresenta o “projeto-exemplo” que será utilizado de base para geração de releases.

Projeto exemplo utilizado para geração das releases

Figura 8: "projeto-exemplo" utilizado para geração das releases

Na Figura 8, dentro da pasta “app” se encontra arquivos “php”, utilizados no projeto. Já na pasta “css” os arquivos “css”, seguindo da mesma forma para as demais pastas.

A Figura 9 apresenta “release-liberacao”, um exemplo de releases geradas, que devem ser enviadas para o cliente.

Releases liberação

Figura 9: Releases liberação

A release enviada para o cliente (Figura 9), é considerada a versão 0.0.4. no exemplo.

Entendendo a pasta build-xml

Ant trabalha com arquivos “XML”, denominados “buildfiles”, estes são interpretados pelo Ant, para que o mesmo possa executar as tarefas que estão descritas.

Dentro da pasta “build-xml” deve ser criada a pasta “templates”, que conterá arquivos padrões do projeto, também a pasta “yui” com o arquivo “jar”, responsável por compactar arquivos “js” e “css” e um arquivo “build.xml”, conforme Figura 10.

Pasta build-xml

Figura 10: Pasta "build-xml"

Na pasta “templates -> js” esta o arquivo “loader.js”, desenvolvido por terceiros, arquivo responsável por inserir os “js” e “css” desenvolvidos na página.

O arquivo “yuicompressor-2.4.2.jar” responsável por compactar os arquivos “js” e “css” do projeto se encontra na pasta “yui” - maiores informações do “yuicompressor” em 

Criação do arquivo build.xml

O arquivo “build.xml” é o arquivo que será interpretado pelo Ant, neste arquivo irá conter as operações necessárias para geração do “deploy” do projeto.

Configurações Iniciais

Todo “build.xml” deve iniciar com a tag “project”, representando o escopo de inicio e fim do projeto, cada “buildfile” só deve conter uma tag “project”. A Listagem 1 apresenta os primeiro passos para criação do “build.xml” do projeto proposto “ant-build-xml”.

Listagem 1: Inicio arquivo “build.xml”

<?xml version="1.0" encoding="UTF-8"?> <project name="${project.name}" basedir="." default="deploy" > 	<!-- projeto ant-build-xml --> </project> 

Na tag “project” (Listagem 1), o atributo “name” é setado a variável “project.name”, a qual está valorizada com o nome do projeto. O atributo “basedir” ter a função de informar a localização do diretório base, no caso “.” - referência ao diretório que o “build.xml” está localizado. O atributo “default” informa para o Ant qual o primeiro procedimento que deve ser executado ao iniciar o “deploy”.

A Listagem 2 apresenta a configuração inicial do projeto, definindo o nome do projeto como “project.name”, versão da aplicação que será gerada a release “project.vs” e a pasta que será enviada a release “project.folder.save”.

A tag “property” no Ant deve conter nome e valor, no exemplo foi utilizado para declarar as variáveis.

Listagem 2: Configuração da aplicação pelo “build.xml”

  <?xml version="1.0" encoding="UTF-8"?> <project name="${project.name}" basedir="." default="deploy" >      <!-- projeto ant-build-xml -->      <!-- configurações da aplicacação -->     <property name="project.name"        value="projeto-teste" />        <property name="project.vs"          value="vs.0.0.4" />         <property name="project.folder.save" value="release-liberacao" />             <!-- Diretório para o deploy -->     <property name="dir.deploy" value="${basedir}/../deploy/"          description="diretório do deploy" />             <!-- YUICompressor -->     <property name="YUI" value="${basedir}/yui/yuicompressor-2.4.2.jar"          description="YUICompressor" />       <!-- Diretório dos templates -->     <property name="dir.templates" value="${basedir}/templates/" />     <property name="dir.templates.js" value="${dir.templates}/js/" />     <property name="js.loader" value="loader.js" />      </project> 

Ainda na Listagem 2, foi definido o diretório que será gerado a release “dir.deploy”. No projeto ant-build-xml o diretório “deploy” é criado, zipado em um arquivo, enviado para a pasta de liberação “release-liberacao” e para então ser excluído este diretório.

A property “YUI“ especifica o caminho do “yuicompressor”, responsável por compactar os arquivos “js” e “css”.

A property “dir.templates” “dir.templates.js” e “js.loader” especifica para o Ant o caminho do arquivos padrões do projeto, neste caso apenas utiliza-se o “js loader” como arquivo padrão, poderia ser por exemplo, um arquivo “php” com a conexão padrão do cliente. A vantagem de se utilizar “templates” padrões é que depois da geração da release não haverá a necessidade de alteração de algum arquivo.

Continuando com o desenvolvimento do “deploy.xml”, deve ser especificado para o Ant quais os arquivos são necessários para envio ao cliente, como apresenta a Listagem 3.

Listagem 3: Configuração dos arquivos necessários para Envio.

      <!-- Index da Aplicação -->     <property name="dir.deploy.index.php" value="${dir.deploy}/index.php" />         <property name="dir.base.index.php" value="${basedir}/../projeto-exemplo/index.php" />        <!-- Localização das pastas padrões do projeto -->     <property name="dir.deploy.img" value="${dir.deploy}/img" />         <property name="dir.base.img" value="${basedir}/../projeto-exemplo/img" />            <property name="dir.deploy.css" value="${dir.deploy}/css" />         <property name="dir.base.css" value="${basedir}/../projeto-exemplo/css" />        <property name="dir.deploy.js"  value="${dir.deploy}/js"  />         <property name="dir.base.js"  value="${basedir}/../projeto-exemplo/js"  />        <property name="dir.deploy.app" value="${dir.deploy}/app" />         <property name="dir.base.app" value="${basedir}/../projeto-exemplo/app" />   

Na Listagem 3, os arquivos necessários para geração da release são, a pasta “img, css, js, app” e o arquivo “index.php”. As demais pastas do “projeto-exemplo” como, “releases e scripts” não são necessárias para release, são apenas utilizadas pelo desenvolvedor.

Criação da Release

A primeira etapa do arquivo “build.xml”, responsável pela configuração do projeto exemplo, foi finalizada com sucesso, sendo iniciado o processo de criação do projeto, com o envio das pastas e arquivos para release, concatenação e também a tarefa de comprimir os arquivos “js” e “css” e gerar a release no formato “zip”.

A Listagem 4 apresenta o primeiro método que o Ant ira executar, o qual é responsável por chamar as dependências do projeto para geração da release.

Listagem 4: Inicio do “deploy” do projeto.

      <!-- Iniciando o deploy -->     <echo>Iniciando deploy do projeto ${project.name}</echo>     <target name="deploy"         description="realiza o deploy da aplicação"            depends="index, img, css, js, app, zip" >                  <echo>Deploy finalizado em ${dir.deploy}</echo>     </target>    

A tag “target” é utilizada para executar suas tarefas e suas dependências.

Na Listagem 5 são apresentadas as “targets”, responsáveis por copiar o arquivo “index.php” e diretório “img, app” para a pasta do “deploy”.

Listagem 5: Target index, img e app.

      <target name="index" depends="clean"         description="copia o arquivo index.php" >                  <echo>Copiando o arquivo index.php</echo>         <copy file="${dir.base.index.php}"             tofile="${dir.deploy.index.php}"              overwrite="true" />          </target>             <target name="img"         description="copiando os arquivos da pasta img e enviado para a pasta de deploy do projeto">                  <echo>Copiando os arquivos da pasta ${dir.base.img} para ${dir.deploy.img}</echo>         <mkdir dir="${dir.deploy.img}" />          <copy todir="${dir.deploy.img}">             <fileset dir="${dir.base.img}" />         </copy>     </target>         <target name="app"         description="copiando os arquivos da pasta app e enviado para a pasta de deploy do projeto">                  <echo>Copiando os arquivos da pasta ${dir.deploy.app}</echo>         <mkdir dir="${dir.deploy.app}" />          <copy todir="${dir.deploy.app}" >             <fileset dir="${dir.base.app}" />         </copy>     </target> 

A “target img e app” são semelhantes, a única diferença é o diretório que será copiado para a pasta “deploy”.

A Listagem 6 mostra a semelhança entre as “targets js e css”, onde a única diferença é que a “target js” é responsável por mover o arquivo “loader.js”.

Listagem 6: Target js e css.

      <target name="js.copyright"          description="criando o copyright js">              <echo>criando o copyright js</echo>         <echo message="/* copyright ejs */${line.separator}" file="${dir.deploy.js}/copyright.txt"/>     </target>             <target name="js.move" depends="js.copyright"         description="movendo os arquivos da pasta js para a pasta de deploy do projeto e adicionando o copyright nos arquivos">              <echo>Movendo os arquivos da pasta ${dir.deploy.js} para ${dir.base.js}</echo>         <copy todir="${dir.deploy.js}" >             <fileset dir="${dir.base.js}" />             <filterchain>                 <concatfilter prepend="${dir.deploy.js}/copyright.txt"/>             </filterchain>         </copy>     </target>         <target name="js.compact" depends="js.move"          description="concatena os js em um unico arquivo" >                  <echo>Construindo o compact js</echo>         <concat destfile="${dir.deploy.js}/system/compact.js">             <fileset dir="${dir.deploy.js}/system/" includes="*.js" />         </concat>         <echo>Operação de compactação do js realizada</echo>     </target>                 <target name="js.min" depends="js.compact"          description="minimiza os arquivos js" >                  <echo>Construindo o js.min</echo>         <apply executable="java" parallel="false" verbose="true"              dest="${dir.deploy.js}/system">                          <fileset dir="${dir.deploy.js}/system" >                 <include name="compact.js" />             </fileset>             <arg line="-jar" />             <arg path="${YUI}" />             <arg value="--charset" />             <arg value="UTF-8" />             <arg value="-o" />             <targetfile />             <mapper type="glob" from="compact.js" to="compact-min.js" />         </apply>         <echo>Operação js.min realizada</echo>     </target>         <target name="js.loader" depends="js.min"          description="movendo arquivo js template para a pasta de deploy" >              <echo>Movendo arquivo js template para a pasta ${dir.deploy.js}</echo>         <copy todir="${dir.deploy.js}/others" overwrite="true" >             <fileset dir="${basedir}/templates/js/" />         </copy>     </target>         <target name="js" depends="js.loader"          description="excluir arquivos js não utilizados" >                  <echo>Excluindo arquivos js não utilizados</echo>         <delete includeemptydirs="true">             <fileset dir="${dir.deploy.js}/system">                 <include name="*.js"/>                 <exclude name="compact-min.js"/>             </fileset>         </delete>        </target>    

A Listagem 6 também declara a target “js”, responsável por excluir os arquivos js não utilizados pela release, destacando que esta target depende da target “js.loader”.

A target “js.loader” é responsável por mover o arquivo js template para a pasta do “deploy”, sendo dependente da target “js.min”, responsável por comprimir o arquivo “js”, deixando o mesmo em apenas uma linha. Salientando que a target “js.min” depende da target “js.compact”, a qual é responsável por concatenar todos os arquivos “js” em apenas um arquivo, porém sendo essa dependente da target “js.move”.

A target “js.move”, como o próprio nome já sugere, é responsável por enviar todos os arquivos “js” do sistema para a pasta de deploy, adicionando o conteúdo do arquivo txt copyright no inicio dos arquivos do projeto.

A Listagem 7 apresenta toda a codificação do arquivo deploy.xml, responsável pela criação da release de liberação.

Listagem 7: Arquivo “deploy.xml”.

  <?xml version="1.0" encoding="UTF-8"?> <project name="${project.name}" basedir="." default="deploy" >      <!-- configurações da aplicacação -->     <property name="project.name"        value="projeto-teste" />        <property name="project.vs"          value="vs.0.0.4" />         <property name="project.folder.save" value="release-liberacao" />             <!-- Diretório para o deploy -->     <property name="dir.deploy" value="${basedir}/../deploy/"          description="diretório do deploy" />             <!-- YUICompressor -->     <property name="YUI" value="${basedir}/yui/yuicompressor-2.4.2.jar"          description="YUICompressor" />                <!-- Diretório dos templates -->     <property name="dir.templates" value="${basedir}/templates/" />     <property name="dir.templates.js" value="${dir.templates}/js/" />     <property name="js.loader" value="loader.js" />           <!-- Index da Aplicação -->     <property name="dir.deploy.index.php" value="${dir.deploy}/index.php" />         <property name="dir.base.index.php" value="${basedir}/../projeto-exemplo/index.php" />        <!-- Localização das pastas padrões do projeto -->     <property name="dir.deploy.img" value="${dir.deploy}/img" />         <property name="dir.base.img" value="${basedir}/../projeto-exemplo/img" />            <property name="dir.deploy.css" value="${dir.deploy}/css" />         <property name="dir.base.css" value="${basedir}/../projeto-exemplo/css" />        <property name="dir.deploy.js"  value="${dir.deploy}/js"  />         <property name="dir.base.js"  value="${basedir}/../projeto-exemplo/js"  />        <property name="dir.deploy.app" value="${dir.deploy}/app" />         <property name="dir.base.app" value="${basedir}/../projeto-exemplo/app" />            <!-- INIT -->          <!-- Iniciando o deploy -->     <echo>Iniciando deploy do projeto ${project.name}</echo>     <target name="deploy"         description="realiza o deploy da aplicação"            depends="index, img, css, js, app, zip" >                  <echo>Deploy finalizado em ${dir.deploy}</echo>     </target>             <target name="index" depends="clean"         description="copia o arquivo index.php" >                  <echo>Copiando o arquivo index.php</echo>         <copy file="${dir.base.index.php}"             tofile="${dir.deploy.index.php}"              overwrite="true" />          </target>             <target name="img"         description="copiando os arquivos da pasta img e enviado para a pasta de deploy do projeto">                  <echo>Copiando os arquivos da pasta ${dir.base.img} para ${dir.deploy.img}</echo>         <mkdir dir="${dir.deploy.img}" />          <copy todir="${dir.deploy.img}">             <fileset dir="${dir.base.img}" />         </copy>     </target>                 <target name="css.copyright"          description="criando o copyright css">              <echo>criando o copyright css</echo>         <echo message="/* copyright ecss */${line.separator}" file="${dir.deploy.css}/copyright.txt"/>     </target>         <target name="css.move" depends="css.copyright"         description="movendo os arquivos da pasta css para a pasta de deploy do projeto e adicionando o copyright nos arquivos">                  <echo>Movendo os arquivos da pasta ${dir.deploy.css} para ${dir.base.css}</echo>         <copy todir="${dir.deploy.css}" >             <fileset dir="${dir.base.css}" />             <filterchain>                 <concatfilter prepend="${dir.deploy.css}/copyright.txt"/>             </filterchain>         </copy>     </target>      <target name="css.compact" depends="css.move"          description="concatena os css em um unico arquivo" >                  <echo>Construindo o css compactado</echo>         <concat destfile="${dir.deploy.css}/system/style.css">             <fileset dir="${dir.base.css}/system/" includes="*.css" />         </concat>         <echo>Operação de compactação do css realizada</echo>     </target>             <target name="css.min" depends="css.compact"          description="minimiza os arquivos css" >                  <echo>Construindo o css.min</echo>         <apply executable="java" parallel="false" verbose="true"              dest="${dir.deploy.css}/system">                          <fileset dir="${dir.deploy.css}/system" >                 <include name="style.css" />             </fileset>             <arg line="-jar" />             <arg path="${YUI}" />             <arg value="--charset" />             <arg value="UTF-8" />             <arg value="-o" />             <targetfile />             <mapper type="glob" from="style.css" to="style-min.css" />         </apply>         <echo>Operação css.min realizada</echo>     </target>             <target name="css" depends="css.min"          description="excluir arquivos css não utilizados" >                  <echo>Excluindo arquivos css não utilizados</echo>         <delete includeemptydirs="true">             <fileset dir="${dir.deploy.css}/system">                 <include name="*.css"/>                 <exclude name="style-min.css"/>             </fileset>         </delete>            </target>         <target name="js.copyright"          description="criando o copyright js">              <echo>criando o copyright js</echo>         <echo message="/* copyright ejs */${line.separator}" file="${dir.deploy.js}/copyright.txt"/>     </target>             <target name="js.move" depends="js.copyright"         description="movendo os arquivos da pasta js para a pasta de deploy do projeto e adicionando o copyright nos arquivos">              <echo>Movendo os arquivos da pasta ${dir.deploy.js} para ${dir.base.js}</echo>         <copy todir="${dir.deploy.js}" >             <fileset dir="${dir.base.js}" />             <filterchain>                 <concatfilter prepend="${dir.deploy.js}/copyright.txt"/>             </filterchain>         </copy>     </target>         <target name="js.compact" depends="js.move"          description="concatena os js em um unico arquivo" >                  <echo>Construindo o compact js</echo>         <concat destfile="${dir.deploy.js}/system/compact.js">             <fileset dir="${dir.deploy.js}/system/" includes="*.js" />         </concat>         <echo>Operação de compactação do js realizada</echo>     </target>                 <target name="js.min" depends="js.compact"          description="minimiza os arquivos js" >                  <echo>Construindo o js.min</echo>         <apply executable="java" parallel="false" verbose="true"              dest="${dir.deploy.js}/system">                          <fileset dir="${dir.deploy.js}/system" >                 <include name="compact.js" />             </fileset>             <arg line="-jar" />             <arg path="${YUI}" />             <arg value="--charset" />             <arg value="UTF-8" />             <arg value="-o" />             <targetfile />             <mapper type="glob" from="compact.js" to="compact-min.js" />         </apply>         <echo>Operação js.min realizada</echo>     </target>         <target name="js.loader" depends="js.min"          description="movendo arquivo js template para a pasta de deploy" >              <echo>Movendo arquivo js template para a pasta ${dir.deploy.js}</echo>         <copy todir="${dir.deploy.js}/others" overwrite="true" >             <fileset dir="${basedir}/templates/js/" />         </copy>     </target>         <target name="js" depends="js.loader"          description="excluir arquivos js não utilizados" >                  <echo>Excluindo arquivos js não utilizados</echo>         <delete includeemptydirs="true">             <fileset dir="${dir.deploy.js}/system">                 <include name="*.js"/>                 <exclude name="compact-min.js"/>             </fileset>         </delete>        </target>             <target name="app"         description="copiando os arquivos da pasta app e enviado para a pasta de deploy do projeto">                  <echo>Copiando os arquivos da pasta ${dir.deploy.app}</echo>         <mkdir dir="${dir.deploy.app}" />          <copy todir="${dir.deploy.app}" >             <fileset dir="${dir.base.app}" />         </copy>     </target>      <target name="clean"          description="recriando diretório de deploy" >                  <reset-dir dir="${dir.deploy}"              description="recriando diretório de deploy" />          </target>                 <macrodef name="reset-dir"         description="reseta o diretório deploy" >                  <attribute name="dir" />         <sequential>             <delete dir="@{dir}" />             <mkdir dir="@{dir}" />         </sequential>     </macrodef>           <target name="zip"          description="compacta o projeto em um arquivo ZIP">                  <echo>Compactando os arquivos</echo>                 <zip destfile="${dir.deploy}/../${project.folder.save}/${project.name}.${project.vs}.zip">             <zipfileset dir="${dir.deploy}" prefix="${project.name}.${project.vs}" />         </zip>          <delete dir="${dir.deploy}" />     </target>      </project> 

A Listagem 7 traz a target zip, responsável por zipar a release do projeto, também a target clean, responsável por deletar a pasta “deploy”.

Leia mais em: http://www.devmedia.com.br/