Da Vinci Digital

por em abril 21st, 2012

 

Você saberia dizer a diferença entre as duas imagens ao lado, da famosa La Gioconda de Leornardo Da Vinci? Olhe bem atentamente…

Fique tranquilo, eu também não saberia dizer. De fato há uma diferença, mas ela não é perceptível aos nossos limitados olhos humanos. Na verdade a imagem da direita contém uma mensagem escondida, embora ninguém possa perceber, pois ela está cifrada nos bits que compõem as cores de cada pixel.

Para ser mais exato, está embutida nos bits menos significativos de cada cor de cada pixel. Isso significa uma perda máxima de 8  tonalidades das 256 possíveis de cada cor primária (vermelho, verde e azul) representada em cada pixel. Não há um consenso sobre o número máximo de cores que a visão humana é capaz de distinguir, mas as teorias mais otimistas apontam algo em torno de 10 milhões. Mesmo com a perda de 3 dos 24bits de cada pixel  para a codificação da mensagem, a imagem ainda é capaz de exibir mais de 15 milhões de tonalidades diferentes. Ou seja, um universo de cores muito maior do que a visão humana é capaz de perceber. 

Por ocasião da minha participação em aulas de computação gráfica de um curso de MBA que concluí recentemente, tive a oportunidade de pesquisar sobre essa interessante área da criptografia, a Esteganografia, que é o estudo de técnicas de ocultação de mensagens.  O resultado dessa pesquisa foi o desenvolvimento de um pequeno software que batizei apropriadamente de Da Vinci. A versão que estou disponibilizando abaixo é capaz de ocultar textos em imagens de 24 ou 32 bits apenas nos formatos PNG ou BMP. Na internet, no entanto, existem programas que são capazes de ocultar até uma imagem dentro de outra.

Fiquei imaginando se em algum momento da minha vida de internauta já não me deparei com uma imagem dessas sem tomar o mínimo conhecimento de que havia algo oculto. Será que as agências de inteligência usam esse tipo “mandinga” para trafegar informações sigilosas? Acho que o tema daria um ótimo romance de espionagem.

Ah, antes que eu me esqueça, a Monalisa da direita contém a resposta para um grande mistério da natureza. Use o DaVinciDecoder (versão Windows) abaixo para descobrir.

Baixar DaVinci versão 0.8 (Plataforma Windows)

VN:F [1.9.17_1161]
Rating: 1.0/5 (1 vote cast)

Livro: O Fim da Infância

por em abril 19th, 2012

 

Livro: O Fim da InfânciaMundo pós-guerra. Início da guerra fria. A humanidade, prestes a lançar o primeiro homem ao espaço, vive o início da era espacial. A corrida travada entre EUA e URSS estava apenas começando. Estaria… A poucos dias do primeiro lançamento, naves alienígenas gigantescas tomam conta do espaço aéreo das principais capitais do planeta Terra, causando estupefação e medo. Os programas espaciais imediatamente se tornam irrelevantes e levaria várias décadas até que o primeiro homem chegasse finalmente ao espaço. No entanto a presença dos nossos visitantes, os Senhores Supremos, traz grandes benefícios à humanidade. Sua tecnologia, milhares de anos a frente da nossa, permite um controle social sem precedentes. Representara o fim de guerras, doenças e todas as mazelas que impediam o progresso pleno do ser humano. A humanidade nunca havia sido tão feliz quanto agora, longe dos domínios das religiões e misticismos que sempre a assombraram. Mas há algo muito estranho nos Senhores Supremos. Quais são seus reais interesses em nosso planeta? De onde vieram? Porque nunca saem de suas naves? Porque nunca se revelam? Porque tiraram do homem o direito de conhecer o espaço?

Esse é o enredo incrível desse esplêndido livro de ficção científica, escrito por ninguém menos que Arthur Charles Clark no início da década de 50. Se você não conhece esse autor provavelmente está frequentando o blog errado! Brincadeirinha… Sir Arthur C. Clark é o mesmo cara que escreveu o livro 2001 – uma odisseia no espaço, que foi produzido em paralelo ao filme de mesmo nome. Se você não assistiu, é muito provável que o seu pai ou avô já tenham assistido. Na minha opinião, Sir Arthur foi o segundo melhor escritor de ficção da era pós-segunda guerra (o primeiro, sem sombra de dúvidas, foi Asimov). O que mais me chamou a atenção em O Fim da Infância, além do incrível enredo, foi a quantidade de ideias, tecnologias e fatos profetizados no livro que seriam anos e décadas mais tarde confirmados na vida real. O cara era um gênio…

Em certos momentos do livro o autor se mostra extremamente otimista quanto à conduta humana em face dos verossímeis acontecimentos, de forma um tanto quanto inocente eu diria. Obviamente isso não diminui em nada a qualidade da leitura. Um final totalmente inusitado e aparentemente aterrador fecha magnificamente essa história fantástica. Para quem gosta do gênero, recomendo totalmente.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Implementando um ProgressBar em PHP com JQuery

por em abril 17th, 2012

 

Outro dia desses ocorreu uma discussão bem bacana na lista do PHPRio sobre como implementar um ProgressBar usando o JQuery para acompanhar um processo de inserção de registros num banco de dados qualquer. Uma das soluções propostas envolvia a criação de um javascript que implementaria um timer na página e que a cada tantos segundos (ou milissegundos) acessaria o servidor via ajax para atualizar o status do progresso. O script PHP responsável pela inserção dos registros teria a responsabilidade de atualizar um arquivo ou uma variável de sessão com os dados do progresso, de forma que o script que daria o retorno ao ajax pudesse acessá-lo. Embora seja uma solução viável e interessante até certo ponto, me preocupava o fato do script ter que fazer centenas de requisições ao servidor para dar a noção de progresso.

Então propus uma abordagem diferente. Propus que o processo que faz as inserções fosse disparado pelo mesmo script que informa o progresso e que o retorno fosse em tempo real, usando essa mesma requisição. Além disso, a solução teria que ser genérica o suficiente para atender a qualquer processo que necessitasse informar o retorno do progresso, não apenas para o problema específico das inserções, discutido até então.

O resultado disso foi seguinte código para o lado do cliente:

 HTML |  copy code |? 
01
<html>
02
 
03
<head>
04
 <title>Exemplo de implementação de barra de progresso usando JQuery com PHP</title>
05
 <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css" type="text/css" media="all" />
06
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
07
 <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script> 
08
</head>
09
<body>
10
 
11
 <iframe id="hiddenframe" style="display: none;" src="about:blank"></iframe>
12
 
13
 <button onclick="$('#hiddenframe').attr('src', 'processar.php')">Processar Algo!</button><br /><br />
14
 <div id="progresso" style="width: 200px; height: 15px;"></div>
15
 
16
 <script>
17
 $(function() {
18
  $("#progresso").progressbar({ value: 0 });
19
 });
20
 </script> 
21
 
22
</body>

A solução é bem simples. Um iframe escondido é usado para disparar o processo no servidor que, como veremos mais a frente, retorna comandos jquery para atualizar o progressbar no frame pai. Ao clicar no botão para “processar algo” o endereço do iframe é acionado para executar o nosso script server-side. O script “processar.php” faz o seguinte:

 PHP |  copy code |? 
01
<?
02
// Garante que o envio do buffer será imediato
03
@apache_setenv('no-gzip', 1);
04
@ini_set('zlib.output_compression', 0);
05
@ini_set('implicit_flush', 1);
06
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
07
ob_implicit_flush(1);
08
?>
09
<html>
10
 
11
<head>
12
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
13
</head>
14
<body> 
15
<?
16
flush();
17
$procs = array();
18
 
19
// Cria massa de processos que serão executados.
20
for($x = 0; $x <= 100; $x++)
21
 $procs[$x]=$x;
22
 
23
// Calcula o peso de cada processo no universo de processos
24
$p_proc = 100/count($procs);
25
 
26
// Essa variável controla o progresso
27
$progresso = 0;
28
 
29
// Essa auxiliar ajuda a verificar se mudou a parte inteira do progresso para atualizar a barra
30
$progresso_anterior = 0;
31
 
32
// itera sobre os array de processos
33
foreach($procs as $proc)
34
{
35
 $progresso += $p_proc;
36
 
37
 // Executa o processo
38
 // (A linha abaixo não é necessária em uma aplicação real, serve apenas para simular a visualização do progresso. 
39
 // Deve ser substituida pelo processo em si.)
40
 usleep(100000);
41
 
42
 // Atualiza a barra de progresso caso tenha atingido a próxima porcentagem
43
 if (ceil($progresso) != ceil($progresso_anterior)) {
44
 echo "<script>window.parent.$('#progresso').progressbar('value',".ceil($progresso).");</script>\r\n                                                                                                                                                                          ";
45
 flush();
46
 }
47
 $progresso_anterior = $progresso;
48
}
49
 
50
?>
51
</body>

As primeiras linhas desse arquivo são hacks usados para dizer ao PHP que ele deve liberar o buffer de saída por demanda, ou seja, ele não ficará aguardando o final do processamento para enviar os resultados para o cliente de uma só vez. As linhas 20 e 21 apenas criam a nossa massa de teste. Na verdade os processos aqui significam comandos ou linhas de execução que precisam ser rastreados pela barra de progresso. Esses processos podem ser uma lista de inserts no banco de dados, uma lista de arquivos a serem salvos ou carregados, uma lista de eventos que devem ocorrer ou whatever… Como eu disse no início, a idéia é que a solução seja genérica e aplicável na maioria dos casos. A linha 40, onde temos o comando usleep deve ser substituída pela execução propriamente dita do processo atual dentro do laço. Aqui, apenas para fins de teste, coloquei o usleep para simular algo sendo processado em 1 segundo.

A parte importante desse script está mesmo é entre as linhas 43 e 46. A linha 44 envia o comando do JQuery que atualizará o componente do ProgressBar. O flush() da linha 45 força o envio precoce do comando gerado na linha anterior para o navegador. O if da linha 43 não é obrigatório. Mas ele garante que o status será atualizado de 1 em 1 por cento, evitando um flood na requisição (imagina o tráfego que geraria um processo com milhões de comandos retornando o status do progresso a cada execução).

Quando o script é disparado no iframe o navegador fica aguardando o retorno do php, que por sua vez envia os comandos de atualização do status a medida que o processo é executado. Os testes que fiz com esse esquema revelou um resultado muito promissor para esse modelo.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Uma pequena invenção para gerar grandes mudanças

por em abril 4th, 2011

Está aí um pequeno invento que pode mudar o mundo. Na foto a esquerda está Jonathan Liow, o inventor,  e a “Bola Solar” (numa tradução crua de “Solarball”), a sua invenção. Essa bola é capaz de produzir até 3 litros de água potável por dia, dependendo das condições climáticas. Pelo que pude entender, a água “não-potável” fica armazenada nessa metade negra da esfera. Conforme a luz solar incide sobre a esfera, o seu “lado negro” absorve o calor fazendo com que a água evapore e passe por um filtro que separa os resíduos impróprios para o consumo. Após esse processo, a água potável se acumula no “lado branco” (ou transparente) da esfera.

Esse japa gente boa é estudante de graduação em desenho industrial em uma universidade na Austrália. Teve essa idéia após visitar o Camboja, em 2008, e ver de perto as terríveis privações de recursos pelas quais as pessoas de lá sofrem – de água principalmente. Para nós, brasileiros, 3 litros de água é nada. Possivelmente ao escovar os dentes e lavar o rosto pela manhã nós  gastemos mais do que 3 litros da nossa “infinita” reserva fluvial. Mas lá fora, em países com o Camboja, pessoas morrem por falta de água.

A humanidade precisa de mais pessoas como Jon Liow…

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

IPTV: o futuro da mídia televisiva

por em março 18th, 2011

A Sony está prestes a lançar (se é que já não lançou) a sua primeira TV de alta definição que usa o Android como seu sistema interativo e “Google TV built-in”, conforme eles anunciam na página do produto. Nessa TV, além de poder usar todos os recursos do Android (jogos e aplicativos), também é possível acessar à Internet via wi-fi, ver videos na rede, armazenar seu próprio acervo de vídeos ou acessá-los remotamente. E se você tiver um celular com Android poderá usá-lo como um controle remoto da televisão, enviando comandos por voz, compartilhando recursos (imagens, videos, etc) com a TV, entre outras coisas fantásticas. Aliás, o controle remoto dessa TV é um capitulo a parte. Já vem com teclado QUERTY e o escambau.

Estou citando esse exemplo da Sony apenas para ilustrar a idéia da revolução que estamos prestes a presenciar. Uma revolução que talvez sepulte de vez a TV digital interativa, tão falada e aguardada no Brasil, mas que nunca mostrou a que veio. Essa revolução está sendo chamada pela indústria de IPTV. É análoga a idéia do VoIP, com a diferença de que ao invés de voz o tráfego sobre IP agora é de mídia televisiva, ou seja, qualquer coisa associada a vídeo.

No Brasil já vemos essa revolução chegando aos poucos. Os principais fabricantes de TV já tem algum modelo que acessam a Internet e/ou vídeos remotamente via TCP/IP, usando cabo ou wireless, enfim… A novidade, nesse exemplo da Sony, é justamente o Android. Ainda tenho que reservar um tempo para dedicar um post maior só para o Android. Por hora, apenas informo o início desse casamento entre Android e TV, que tem tudo para dar certo.

Há algum tempo que venho pensando sobre essa história da TV Digital. Uma história que nunca me fascinou de fato. A começar pelas próprias características dessa tecnologia. Alta definição e interatividade é algo já existe há pelo menos 1 década, não é novidade para quem já trabalhava com computadores. Sempre achei que seria natural que um dia televisão e Internet se fundissem num só corpo, imenso, abrangente. Mas na minha cabeça era mais fácil ver a TV se adaptar à Internet do que o contrário. Agora parece que esse movimento está de fato acontecendo. Se eu tivesse uma televisão que mostrasse o futuro 10 anos a frente, não ficaria nem um pouco surpreso se visse a supremacia da Internet sobre a radio-difusão como principal meio de transmissão de mídia televisiva.

As grandes emissoras de TV, tanto no Brasil quando no exterior, já perceberam esse movimento e começam a se preparar para essa virada. Quantidades cada vez maiores de programação da TV aberta estão sendo disponibilizadas na web. Na última copa do mundo, por exemplo, a rede globo transmitiu todos os jogos pela web. Se você tivesse uma TV preparada para IPTV e uma boa conexão poderia assistir tudo via Internet.  Pode parecer uma idéia besta trocar uma transmissão de um jogo via TV Digital por uma IPTV, afinal a primeira é de graça. Mas pense nas vantagens de poder escolher o conteúdo da sua TV, nas facilidades e comodidades que a Internet oferece, além dos inúmeros serviços que já estão disponíveis na grande rede. Do lado das emissoras, provavelmente elas devem estar repensando sobre suas estratégias sobre a TV digital. A começar pelo processo de treinamento e adoção dessa nova cultura pelos profissionais da área. Isso leva tempo e dinheiro. Nesse quesito, a web oferece uma base muito bem formada de profissionais e especialistas em mídia, prontos para atender a demanda a qualquer momento. A decisão nesse caso me parece muito fácil.

Mas admito que essas idéias são apenas especulações, profecias fundamentadas na minha própria idéia e informação sobre essas tecnologias. Saberemos se elas procedem em breve.

 

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Geek Stuff S.A. – Switchblade

por em março 15th, 2011

Vejam só essa belezinha. Quando você pensa que já se esgotaram as idéias no mundo dos games os caras tiram coelhos da cartola. Certamente mais um item para a minha lista de sonhos de consumo Geek.

 

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Dominação e Conluio

por em março 11th, 2011

Um dia desses eu li duas notícias que me chamaram a atenção sobre a atual guerra entre Apple e Adobe. Guerra essa que, assim como o título do post, parece mais um romance de Jane Austin do que qualquer outra coisa. Para quem não vive imerso nessa dimensão extra do universo que é o mundo de TI, dou a dica: se você possui um iPod, iPhone ou iPad já deve ter percebido que não consegue acessar conteúdos em Flash usando esses dispositivos (pelo menos não do jeito convencional). O discurso oficial da Apple é de que o Flash consome muitos recursos de processamento e, por conseqüência, diminui a autonomia da bateria. BULLSHIT!!! (isso poderia ser mais um tema do “Penn & Teller” – talvez eu mande essa sugestão para o programa). Basta pegar qualquer smartphone com Android para constatar que esse discurso é uma tremenda cascata. Eu mesmo tinha um Nokia N97, que vem com o Symbian S60 (um S.O. que dá apenas para o gasto) e um processador medíocre, se comparado ao todo poderoso iPhone. Nele eu acessava tranqüilamente conteúdos em Flash (inclusive o YouTube), sem travadas e devo dizer que a bateria durava bastante. Ok, o consumo aumenta um pouco realmente. Mas nada que justifique deixar milhões e milhões de clientes orfãos do Flash.

Assim como a Apple eu também não gosto do Flash (apesar de achar o Adobe Air legalzinho e o Flex bem bacaninha). Mas não nego que ainda é um padrão importante na indústria, isso seria estupidez. Só que para a Apple essa negação vai muito além do fato concreto. Passa por um jogo de dominação bem estranho que, sinceramente, não acho que vá dar certo.

Mas voltando às notícias, fiquei sabendo que a Adobe finalmente cedeu às pressões (15 milhões de iPads vendidos no ano passado) e lançou um conversor de Flash para HTML5. No meu entender, isso soa como preparação para a morte anunciada do Flash. Uma pedra que vem sendo cantada desde que o HTML5 brotou na cabeça de alguém do W3C. Some a isso o fato de a Apple ter recentemente deixado de fabricar os Macs com o Flash pré-instalado (picuinha pouca é bobagem).

Foi então que Shantanu Narayen (CEO da Adobe) marcou uma reunião com Steve Ballmer (CEO da Microsoft) para conversar sobre pescaria, mulheres, Ferraris e a dominação irritante imposta pela Apple no segmento de smartphones. Entre um charuto e outro eles chegaram a conclusão de que é preciso juntar esforços das duas empresas para enfrentar esse “mal”. De acordo com o The New York Times, onde essa notícia surgiu, chegaram até a cogitar a compra da Adobe pela Microsoft. Trocando em miúdos, vão formar um conluio para segurar o impeto da Apple.

Agora vamos juntar os pontos. A Apple quase vai a falência no início do século. A Microsoft então compra parte da Apple salvando-a de uma catástrofe. Steve Jobs reaparece na Apple colocando sua gigantesca naba sobre a mesa e mudando os rumos do negócio. A Adobe consolida o padrão PDF e Flash no mercado. A Microsoft fica com ciúmes da Adobe (porque só ela pode ter o domínio do lado negro da força), então decide que o Office não vai ter suporte a PDF e cria o Silverlight (concorrente do Flash). A Apple, impulsionada pela genialidade de seu líder, domina o mercado de smartphones, reinventa o conceito de tablets, mostra que os concorrentes são uns incompetentes e vira moda. A Microsoft passa misteriosamente a gostar do PDF e inclui suporte a ele no Office. Steve Jobs decide que não gosta do Flash, esse mesmo que a Microsoft também detesta (ou não). A Adobe é obrigada a desistir de um dos seus principais produtos, fica de mau com a Apple e passa a brincar no playground da Microsoft.

O final desse romance de triângulo ”odioso” vai ser bem interessante.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Em breve nos cinemas: Java 4-ever

por em março 4th, 2011

iPad 2 – O retorno

por em março 3rd, 2011

foto: Jim Wilson/The New York Times

E finalmente a Apple apresentou sua nova versão do iPad. Uma versão repaginada do seu antecessor, como era de se esperar. E vários boatos acerca das suas features foram confirmados, como por exemplo, as duas câmeras integradas e o suporte a rede 3G. Ele é mais fino do que seu antecessor em aproximadamente um terço e um pouco mais fino do que o iPhone 4. Seu novo processador, o A5, foi projetado pela própria empresa e é cerca de 9 vezes mais veloz no processamento gráfico, de acordo com o “sêo” Jobs. Também é mais leve ainda que seu antecessor em uns 100 gramas mais ou menos. A continuar assim, em alguns anos o iPad será tão fino e leve quanto o papel da sua impressora e possivelmente mais rápido do que seu desktop. Talvez você poderá dobrá-lo para fazer origamis, quando já estiver de saco cheio.

Resta saber se o ”sêo” Jobs estará entre nós quando isso acontecer. Apesar do tão aguardado anúncio, foi a sua presença a frente da apresentação que deixou todos surpresos. Presença que por si só gerou uma alta de 1% nas ações da Apple – aqui no Brasil a poupança, por exemplo, teve alta de 0,5% no mês passado inteiro (que lástima). Devido a sua luta contra o câncer, ninguém esperava que ele fosse aparecer nesse anúncio. No entanto ele interrompeu seu tratamento para fazê-lo, o que revela a grande importância que ele dá ao seu iPad. Históricamente, quando Jobs dá tamanha importância a alguma coisa é porque essa coisa com certeza vai “bombar”. Na verdade já está “bombando”. O iPad primogênito teve nada menos que 15 milhões de unidades vendidas em 2010. Será que o “sêo” Jobs é um profeta? Será que A5 significa “Apocalipse dos Quintos”? Já tem fundamentalista apostando que sim. Bem, saberemos no próximo dia 11, quando o iPad 2 começará a ser vendido nos “isteitis”. A bagatela estará entre U$499 e U$829 por lá (o mesmo preço do iPad tradicional até ontem), dependendo do modelo – no Brasil, com a política de impostos “tecnocida” do nosso ilustríssimo governo, minha expectativa é que o modelo mais parrudo deverá custar uns R$2500 nas importadoras.

A apple está apostando alto na popularização dos tablets. E o iPad ainda não tem concorrentes a altura, apesar dos anúncios quase que semanais de novos tablets no mercado.

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)

Bluehost + SVN + Subclipse = uma grande odisseia

por em fevereiro 26th, 2011

 

Quem na área de TI nunca ficou absolutamente travado em algum problema aparentemente ridículo, que atire a primeira pedra. Este post é dedicado aos meus irmãos phpzeiros, que hospedam sites no Bluehost e tem a intenção de instalar um repositório SVN no servidor. Se você não se encaixa nesse perfil, sinta-se a vontade para ignorar as linhas abaixo. Se você é um de nós, hoje é seu dia de sorte, meu amigo. O que você lerá abaixo é o resultado de horas e horas de ralação, inconformação, raiva, perseverança e, por fim, felicidade.

Bem, vou poupa-los dos detalhes sórdidos dessa empreitada, pois daria pra escrever um livro a respeito. Então resumindo, eu precisava criar um repositório SVN no meu servidor do Bluehost quando descobri que eles (do provedor) não dão suporte a esse serviço. Isso, só para contextualizar, significa que:

  • É preciso instalar o SVN manualmente a partir dos sources, usando o acesso SSH (se você não tem acesso SSH, vai ter que solicitar ao helpdesk);
  • Não será possível usar as portas do servidor e nem o módulo do apache para acessar o repositório;
  • O repositório só poderá ser acessado por um único usuário: o próprio usuário do SSH.

Esse último aspecto é o que eu considero o pior se você tem uma equipe de desenvolvimento. Mas é melhor isso do que não ter controle de versão.

Como não sou de recusar um bom desafio, eis que me debrucei sobre o Nautilus (meu notebook) a fim de desvendar mais esse mistério dos sete mares cibernéticos (haja poesia esdrúxula, tá lôco).

O primeiro osso duro foi instalar o benedeto SVN no servidor. Vejam como é simples:

  1. Instale o PuTTy na sua máquina e acesse o servidor;
  2. Crie uma pasta e baixe os sources do SVN e suas dependências:

    1
    $ mkdir src
    2
    $ cd src
    3
    $ wget http://subversion.tigris.org/downloads/subversion&minus; 1.6.15.tar.gz
    4
    $ wget http://subversion.tigris.org/downloads/subversion&minus; deps&minus;1.6.15.tar.gz
  3. Descompacte os arquivos:

     

    1
    $ tar –xzvf subversion&minus; 1.6.15.tar.gz
    2
    $ tar –xzvf subversion&minus;deps&minus; 1.6.15.tar.gz
    3
    $ cd subversion&minus; 1.6.15
  4. Configure, compile, instale (isso tá parecendo música do Daft Punk):


    1
    $ ./configure &minus;&minus;prefix=$HOME/usr &minus;&minus;without&minus;berkeley&minus;db &minus;&minus;without&minus;apxs &minus;&minus;without&minus;apache &minus;&minus;with&minus;ssl LDFLAGS="&minus;L/lib64" &minus;&minus;disable&minus;mod&minus;activation
    2
    $ make
    3
    $ make install


    Note que o caminho padrão da instalação foi alterado com a opção –prefix=$HOME/usr. Isso deve ser feito para que a compilação e instalação dos executáveis transcorram sem problemas de permissão.

  5. Agora os executáveis do SVN estarão disponíveis na pasta usr/bin da raiz do usuário. Então inclua esse caminho no PATH do seu ambiente editando o arquivo .bash_profile:

     

    1
    $ vi ~/.bash_profile

    O conteúdo do arquivo deve ficar mais ou menos assim:

    01
    # .bash_profile
    02
     
    03
    # Get the aliases and functions
    04
    if [ &minus;f ~/.bashrc ]; then
    05
    . ~/.bashrc
    06
    fi
    07
     
    08
    # User specific environment and startup programs
    09
    PATH=$PATH:$HOME/usr/bin
    10
     
    11
    export PATH
    12
    unset USERNAME


  6. Desconecte e reconecte no servidor para o PATH fazer efeito. Agora crie uma pasta e instancie o repositório:

     

    1
    $ mkdir svn_repo
    2
    $ cd svn_repo
    3
    $ svnadmin create [projetox]

    Onde [projetox] é o nome do seu repositório.

Feito isso, vamos para o segundo osso. Agora é preciso configurar o método de acesso ao repositório, usando um túnel SSH (o único disponível no nosso caso). O procedimento a seguir vale para quem usa Windows (aqui eu usei o Windows 7 Home Premium). Quem usa Linux é esperto o suficiente para saber adaptar o procedimento, de forma que não entrarei nesse mérito.

  1. Instale o TortoiseSVN (pode ser outro cliente svn, eu prefiro esse);
  2. Crie um par de chaves pública/privada usando o PuTTyGen, que vem com o PuTTY, configurado para SSH2-RSA. Salve as chaves em algum lugar do seu HD (em arquivos separados, obviamente).

    Aqui cabe uma dica. Ao gerar as chaves você tem a opção de configurar um passphrase. Esse passphrase serve para melhorar a segurança do SSH. Contudo, toda vez que você fizer alguma operação com o SVN o Tortoise vai pedir essa senha (a pain in the ass, como diriam os americanos). Se você deixar em branco, isso não vai acontecer, mas nem pense em deixar sua chave-privada cair em mãos malévolas.

  3. No painel de controle do BlueHost, acesse o ícone SSH/Shell Access que fica no box Security. Clique no botão Manage SSH Keys e mande gerar um par de chaves qualquer. Não se preocupe com a configuração das chaves, na verdade elas não devem ser usadas, pois o mecanismo de cifragem usado não é compatível com o Tortoise nem com o PuTTY (Murphy é sempre fiel aos seus princípios).
  4. Acesse o servidor usando o PuTTY. Na pasta .ssh deve ter os dois seguintes arquivos: authorized_keys e authorized_keys2. Esses arquivos foram criados no passo anterior, quando você mandou gerar as chaves no painel de controle. Esses são os arquivos da chave pública que, deduzo, configuram o acesso para SSH1 e SSH2 respectivamente.

    Agora chegou a hora da verdade! Tudo o que foi feito até agora foi feito para chegar nesse momento, o momento da vitória. Você deve editar esses arquivos e substituir todo seu conteúdo por isso:

    1
    command="~/usr/bin/svnserve&nbsp;&minus;t"&nbsp;ssh&minus;rsa&nbsp;[chave&minus;publica]

    onde [chave-publica] é a chave pública que você gerou no PuTTYGen. Mas note que a chave-publica não é todo o conteúdo do arquivo gerado pelo PuTTYGen. Na verdade o arquivo gerado tem o seguinte formato:

    1
    &minus;&minus;&minus;&minus;&nbsp;BEGIN&nbsp;SSH2&nbsp;PUBLIC&nbsp;KEY&nbsp;&minus;&minus;&minus;&minus;
    2
    Comment:&nbsp;"rsa&minus;key&minus;AAAAMMDD"
    3
    [chave&minus;publica]
    4
    &minus;&minus;&minus;&minus;&nbsp;END&nbsp;SSH2&nbsp;PUBLIC&nbsp;KEY&nbsp;&minus;&minus;&minus;&minus;

    Copie somente a [chave-publica] (sem as quebras de linha). Agora é só correr pro abraço…
  5. Na sua máquina local, edite o arquivo C:\User\Username\AppData\Roaming\Subversion\config e na sessão [tunnels] adicione a seguinte linha:

     

    1
    ssh&nbsp;=&nbsp;C:/Program&nbsp;Files/TortoiseSVN/bin/TortoisePlink.exe&nbsp;&minus;i&nbsp;C:/[caminho/para/a/chave&minus;privada]&nbsp;/[arquivo.da.chave.privada]



    onde [caminho/para/a/chave-privada] é o… ah, vcs entenderam!

  6. Daqui já deve ser possível fazer um checkout do seu repositório usando o TortoiseSVN. O endereço que deve ser usado para isso deve seguir esse padrão:

     

    1
    svn+ssh://[usuario&nbsp;ssh]@[domínio.com]/[caminho&nbsp;do&nbsp;repositorio]/



    onde [usuario ssh] é o seu login no Bluehost, [domínio.com] o endereço do seu domínio e [caminho do repositorio] é o caminho do seu repositório relativo a raiz do servidor (ex: /home4/user1/svn_repo/projetox). E pronto! Alegria total!

Eu uso o Zend Studio para desenvolver em PHP. É uma IDE baseada no Eclipse que já vem preparada para esse ambiente. Ela vem com o plugin Subclipse para integrar com o SVN. Apesar de essa história toda ter se originado da tentativa de fazer controle de versão com o ZS, eu ainda não consegui fazer com que essa integração (Eclipse/SVN) funcione. Mas eu ainda não zerei todas as possibilidades. O Subclipse dessa versão vem com o driver do SVNKit. Aparentemente existe um bug nesse driver quando configuramos o acesso ao repositório usando o SSH com chave publica-privada. A outra opção seria usar o driver nativo, o javaHL. Como ele não veio instalado na minha IDE eu ainda não tive tempo de testar, mas pelo que li em vários fóruns (e bota vários nisso) parece que pode dar certo. Assim que eu tiver feito o teste, atualizarei o post.

É isso aí meus amigos. Entre mortos e feridos salvaram-se todos. Se quiserem mais informação a respeito, listo abaixo alguns endereços que me ajudaram bastante nessa empreitada.

http://www.bluehostforum.com/showthread.php?12099-Setting-up-Subversion-on-Bluehost

http://www.bluehostforum.com/archive/index.php/t-8191.html

http://www.woodwardweb.com/java/howto_configure.html

VN:F [1.9.17_1161]
Rating: 0.0/5 (0 votes cast)