PhpBox v 1.0

Verifique sempre a página mais atual sobre o PhpBox aqui!

Ok!

Será que é um recorde em 3 dias lançar 3 versões diferentes de uma mesma classe? Bom, não são exatamente 3 dias, já que já passou da meia noite e ontem eu não lancei nada! Mas não havia melhor momento para eu lançar a versão 1.0 (uhul, versão 1.0 versão 1.1 na verdade…) do PhpBox justamente agora que o pessoal da boo-box acabou de atualizar a API! Bom, como é um novo release, muita coisa mudou, por isso vou começar desde o início.

O que é PhpBox?

Para quem ainda não conhece, PhpBox é uma classezinha que criei para manipular os dados recebidos através das APIs de desenvolvimento da boo-box via PHP. Boo-box é um serviço que te permite contextualizar os anúncios de produtos veiculados através de programas de afiliação como BuscaPé, Amazon, Submarino, Americanas e etc…

Antes de entrarmos em maiores detalhes…

Baixe o PhpBox aqui! (phpbox-v1.1.zip) 3kb

Dentro do zip você terá 2 arquivos e uma pasta:

cache/
example.php
phpbox.php

Em “phpbox.php” você tem o código que faz a mágica acontecer. Em “example.php” você tem algum código básico que te mostra como a classe funciona e a pasta “cache” serve para guardar os arquivos gerados pelo sistema de cacheamento do script.

Tá, e daí… Como funciona?

Antes de tudo, você precisa se registrar num programa de afiliação. Depois que você possuir um login e um ID, você pode começar a usar a boo-box da forma que quiser. Para utiliza a boo-box via PhpBox é fácil. No seu script, escreva algo assim:

include('phpbox.php');
$phpbox = new PhpBox();

Antes de começar a utilizar os métodos da classe, existem duas coisas que você precisa saber:

1ª - Por default, o script tentará resgatar os dados da API via cURL mas nem todos os servidores possuem esta biblioteca habilitada. Neste caso, você precisa desligar a utilização do cURL antes de utilizar qualquer método. No entanto, nós profundamente recomendamos o uso de cURL. Isto porque a API pode conter alguns problemas que são corrigidos através do script, e somente através da utilização do cURL é que nós podemos manipular os dados desta forma (tá, eu sei que também seria possível por fopen(), mas eu não tive muita paciência pra implementar esta função…). Para desligar a utilização do cURL é fácil, basta fazer o seguinte:

1ª - Por default, você vai utilizar a função file_get_contents() para manipular o XML que vem através da API. Caso o seu host desabilite a manipulação de arquivos externos, você ainda pode utilizar cURL sem maiores problemas. Para isso, basta fazer o seguinte:

$phpbox->curl = true;

2ª - O PhpBox, por default, habilita o cacheamento dos dados resgatados via boo-box. Para desligar esta função, basta fazer o seguinte:

$phpbox->tocache = false;

Por default, a pasta que vai receber os arquivos é a “cache” que vem junto com o pacote. Para mudar o destino dos arquivos, faça o seguinte:

$phpbox->cachedir = './cache/';

Não esqueça de colocar a barra no final da string! Por padrão, também, o arquivo de cache vai durar dois dias até uma renovação. Você pode modificar esta opção da seguinte forma:

$phpbox->cachetime = 86400;

Pronto! Agora você já sabe tudo o que você precisava saber antes de começar a utilizar os métodos da classe! Então…

Vamos aos métodos!

São 4 os métodos implementados nesta classe: get, randon, merge e shuffleRes.

get

O método get é a base para todos os outros métodos. É com ela que você consegue resgatar os resultados de forma mais simples através do PhpBox. Veja:

$array = $phpbox->get('submarinoid', '173091', 'ipod', 5);

Parâmetros… No primeiro você deve especificar o programa de afiliação no qual você possui registro, no segundo, você indica seu ID. O terceiro parâmetro é referente à tag (ou tags) que você deseja utilizar para fazer sua pesquisa. Esta tag pode ser uma string comum ou um(a) array com diversas palavras, então você poderia fazer algo assim:

$tags = array('livro', 'design', 'decoração');
$array = $phpbox->get('submarinoid', '173091', $tags, 5);

O último parâmetro determina o limite de resultados que sua array vai ter, mas este parâmetro é opcional, ou seja, algo do tipo “$phpbox->get(’submarinoid’, ‘173091′, $tags);” iria funcionar sem problema algum, lembrando que a omissão deste parâmetro determina um limite de 6 produtos por consulta (não é minha culpa, a API que funciona assim)! Ao executar este método, você terá na variável $array (por exemplo) o seguinte resultado:

Array
(
    [0] => Array
        (
            [img] => http://i.s8.com.br/images/books/cover_tn/img7/pq584147.jpg
            [title] => Cozinha dos Artistas: Brasileira e Internacional - vol. 1
            [uri] => http://boo-box.com/prod/u90w0/affid:173091
            [price] => R$ 78,00
            [store] => submarinoid
            [tags] => livro,design,decoracao
        )

    [1] => Array
        (
            [img] => http://i.s8.com.br/images/books/cover_tn/img6/pq21246306.jpg
            [title] => O Livro e o Designer I: Embalagem, Navegação, Estrutura e ...
            [uri] => http://boo-box.com/prod/u90w8/affid:173091
            [price] => R$ 46,40
            [store] => submarinoid
            [tags] => livro,design,decoracao
        )

Os índices são bem óbvios. Você tem ali a imagem, o titulo do produto, o endereço referente, o preço (que nem sempre está presente, tome cuidado!), a loja de origem do produto e as tags utilizadas.

randon

Com este método você pode especificar mais de um programa de afiliação e deixar o script escolher qual será mostrado naquele instante! Veja:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$tags = array('livro', 'design', 'decoração');
$array = $phpbox->randon($programas, $tags, 5);

Os resultados são similares aos da função get e mais uma vez, o último parâmetro se refere ao limite, ou seja, é um parâmetro opcional.

merge

Com este método você pode fundir os resultados de dois ou mais programas de afiliação em uma array apenas. O funcionamento dela é identico ao do randon. Veja:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$tags = array('livro', 'design', 'decoração');
$array = $phpbox->merge($programas, $tags, 5);

shuffleRes

Este método é exatamente igual ao merge. Na verdade é uma cópia. A diferença é que com este método, todos os resultados da sua array serão bagunçados e misturados. Veja:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$tags = array('livro', 'design', 'decoração');
$array = $phpbox->shuffleRes($programas, $tags, 5);

Licença

Esta classe está licenciada sob a WTFPL. O que isto quer dizer? Quer dizer que você pode fazer o que você quiser com esta classe! Bom, é um pouco mais elaborado que isso, mas é basicamente isso :)

Considerações finais…

Se voce achou legal, achou algum erro, algum bug, quer me elogiar, quer me xingar, enfim… Qualquer coisa, entre em contato. Você pode enviar comentários aqui que eu respondo, ou pode me enviar emails em eusou [at] eberfdias.com! É isso! E se você usar, me deixa um comentáriozinho por aqui dizendo o que achou, beleza? Um abraço e até a próxima!

Technorati Tags: ,

PhpBox v.0.3 – Agora com cache!

Verifique sempre a página mais atual sobre o PhpBox aqui!

Poisé, eu sei que só se passou um dia desde que eu lancei esse negócio, mas hoje percebi a necessidade de modificar algumas coisas na classe. A minha principal preocupação foi a de melhorar o desempenho do script, porque às vezes o carregamento se tornava extremamente lento, talvez pelo alto tráfego nos servidores da boo-box. Por isso resolvi fazer um sisteminha simples de “cacheamento” dos resultados. Você ainda pode usar sua classe normalmente da forma como ela poderia ser usada anteriormente, você só tem que cuidar com o seguinte:

Por definição, o “cacheamento” é padrão, ou seja, se você *não* quiser cachear seus resultados, logo após criar seu objeto, você tem que fazer o seguinte:

$phpbox = new PhpBox();
$phpbox->setCache(false);

Do contrário o “cacheamento” vai ocorrer. A sua segunda preocupação agora é em setar o caminho para onde o script deve enviar os arquivos “cacheados” [arquivos cacheados? Eita...]:

$phpbox->setCachePath('./cache/');

Por padrão, o diretório que recebe os arquivos é o “cache” que vem no pacote. Mude para o caminho que você quiser! Mas não se esqueça de colocar a “/” no final, se não num vai ser legal…

Por definição, o arquivo de cache vai durar dois dias, mas você também pode mudar isso facilmente com a seguinte função:

$phpbox->setCacheLimit(86400);

No exemplo acima, os arquivos vão durar apenas um dia. O número ali é referente a segundos, então ‘86400′ são todos os segundos de um dia.

Para baixar, é só clicar aqui!

Depois é só seguir os passos do post anterior e começar a desfrutar de uma velocidade maior na hora de mostrar seus anúncios ;) Espero que gostem! Críticas e sugestões, estamos aí! Abraços!

Technorati Tags: ,

PhpBox – Manipule os dados do boo-box via PHP

Verifique sempre a página mais atual sobre o PhpBox aqui!

Oi pessoal! Estou muito feliz que estar contribuindo (ou não) pela primeira vez com a comunidade Open Source. Como vocês sabem, lancei recentemente o meu mais novo site, o designUp. Desde que eu o criei, tinha em mente a utilização da boo-box como forma de monetizar o site inicialmente. Na verdade nós temos outros planos para fazer o site dar algum dinheiro, mas a boo-box seria uma ótima ferramenta para começar.

Pra quem não conhece, boo-box é um serviço que te permite contextualizar o anúncio de produtos de determinados programas de afiliação que existem pela net. Entre os programas suportados, você pode usar Amazon, BuscaPé, Submarino, MercadoLivre e etc.

A um tempo atrás, eles lançaram APIs que te permitem acessar os dados das pesquisas feitas e manipulá-las da maneira que quisesse. Foi aí que eu comecei a construir um pequeno script pra que isto acontecesse no designUp. Achei que ele seria de fácil integração com outros sites e acabei criando uma classe simples para manipular os dados da boo-box em um ambiente amigável em PHP e o nome dela é PhpBox (criativo não?).

Bom, o PhpBox é um treco muito simples e qualquer zé ruela como eu seria capaz de criá-lo. Mas o que ele faz é pegar os resultados de uma pesquisa e colocar numa array simples que pode ser utilizada da maneira que você quiser. Além disso, coloquei umas outras funções que podem te ajudar na hora de criar algumas outras coisas mais corriqueiras. Vamos ver como isto funciona…

Primeiro, você deve fazer o download da “biblioteca” (cof, cof) aqui!

Botá-la pra funcionar é realmente muito simples:

include('phpbox.php');
$phpbox = new PhpBox();

Se o seu host, assim como o meu, não te possibilitar abrir url’s externas através do seu script, você pode setar a variável curl = true (você vai precisar de cURL habilitado no seu host pra isso funcionar). Assim, você inicia a classe da seguinte forma:

include('phpbox.php');
$phpbox = new PhpBox();
$phpbox->curl = true;

Feito isso, você pode começar a utilizar as funções da classe. Vamos começar pela mais básica, a get:

$produtos = $phpbox->get('submarinoid', '173091', array('livro', 'php'));

Como você pode ver, a função get recebe três argumentos. O primeiro se refere ao programa de afiliação que você quer utilizar. Para ver uma lista com os programas suportados e as referentes “strings” para que elas funcionem, visite este link. O segundo argumento recebe o ID do seu cadastro no programa de afiliação referente, o terceiro argumento pode receber um(a) array ou uma string simples com as tags que servirão de base para a consulta. O resultado desta função será uma array mais ou menos assim:

Array
(
    [0] => Array
        (
            [img] => http://i.s8.com.br/images/books/cover_tn/img7/pq1620247.jpg
            [title] => Design Gráfico Brasileiro: Anos 60, O
            [uri] => http://boo-box.com/prod/u97mu/affid:173091
            [price] => R$ 74,00
            [store] => submarinoid
            [tags] => livro design
        )

    [1] => Array
        (
            [img] => http://i.s8.com.br/images/books/cover_tn/img8/pq1871598.jpg
            [title] => Design do Objeto: Bases Conceituais
            [uri] => http://boo-box.com/prod/u9cgu/affid:173091
            [price] => R$ 51,90
            [store] => submarinoid
            [tags] => livro design
        )

...

Os índices são bem óbvios, e você pode utiliza-los para mostrar seus produtos e tudo mais. Você tem a imagem, o título, o endereço para acessar o produto, o preço, a loja de origem e as tags utilizadas.

A segunda função do pacotinho é a randon. Você especifica um(a) array associativa com os programas de afiliação e seus respectivos id’s, e o script vai “sortear” um deles pra mostrar. Isso é legal se você tiver cadastro em diversos programas de afiliação e quiser mostrar os resultados deles de forma aleatória. Confira:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$produtos = $phpbox->randon($programas, array('livro', 'php'));

Os resultados em todos os casos são similares aos de cima.

Depois você pode utilizar a função merge. Com ela você mistura os resultados de pesquisas em diversos programas de afiliação juntos. Assim, em um(a) mesmo(a) array, você vai ter os resultados de mais de um programa de afiliação. A utilização é exatamente igual a da randon. Veja:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$produtos = $phpbox->merge($programas, array('livro', 'php'));

Por último, temos a função shuffle. Como o nome já sugere, ele vai dar um “merge” nos resultados de pesquisa em diversos programas de afiliação e depois vai embaralhar estes resultados de forma randômica. Veja:

$programas = array('ebayid' => '1042', 'amazonid' => 'boobo-20', 'submarinoid' => '173091');
$produtos = $phpbox->shuffleRes($programas, array('livro', 'php'));

Boo-box é uma ferramenta ótima para contextualizar os anúncios em seu site, e esta forma que eu vos apresento, é talvez, a menos eficaz. Para saber das possibilidades incríveis que a boo-box te oferece, visite o site dos caras e aprenda tudo o que você puder!

Enfim… O código lá talvez não esteja tão perfeito e bacana como deveria estar, mas pra começar, deve dar pro gasto. A classe é licenciada pela WTFPL, então “Do What The Fuck You Want” com essa classe! Ela deve ser ótima pra você criar seus próprios “widgets”, adicionar seu próprio visual, filtrar pelas tags que você quiser e assim por diante! Dá pra deitar em rolar agora (ou não)! Espero que gostem, e se usarem, deixem recadinhos dizendo o que acharam ok?

Ah! E não me xingue caso você ache que o código está uma droga, ok? :P Abraços a todos!

Technorati Tags: , ,

Estágio: RAW Soluções - RJ - flash/actionscript

Vaga oferecida por RAW Soluções, Estágio, em Rio De Janeiro - RJ

Estágio de Designer para web

Conhecimentos de HTML, Css, Webstandard, Photoshop. (Fireworks é diferencial).

Bolsa de 415 reais. 6 horas de trabalho.

Clique aqui para se candidatar

designUp - meu site de empregos… e profissionais… e…

A um tempo atrás eu escrevi este post aqui falando sobre um site de empregos que eu havia feito, o designUp.pro.br. Ele até que foi usado um pouco, mas eu não cheguei a me esforçar muito por fazer ele funcionar, sem contar que eu dei umas pisadas na bola deixando o código pela metade, o que prejudicou um pouco o nosso serviço, mas enfim… Eu me liguei que poderia fazer um site bem legal e diferente, que não existia ainda no mercado brasileiro [pelo menos que eu tenha conhecimento] expandindo aquilo que eu já havia feito no designUp original, e é por isso que eu estou aqui para anunciar o novo designUp!

Diferente do designUp anterior, eu não fiz esta versão de um dia pro outro. Foram duas semanas de desenvolvimento visual e de programação, o que eu ainda acho ser um tempo bem bacana pelo que foi feito. Nesta nova versão eu deixei os “riquififis” de ajax e js desnecessários pra dar melhor suporte a todos. Procurei usar o mínimo de js, e onde eu usei, procurei manter a página acessível para toda e qualquer pessoa. Na parte server-side eu utilizei PHP com o framework CakePHP e no client-side foi js com o framework jQuery. Também tive um bom trabalho pra fazer a página ficar “perfeita” em todos os principais browsers, mas como o IE existe, isso não foi 100% possível. Enfim, pelo menos não fica horrível. A página fica linda no Safari e funciona 100% no Firefox e Opera.

Nesta nova versão nós ainda temos a lista de vagas de empregos, e ela está praticamente igual. A diferença agora é que existe uma moderação na hora de inserir as vagas, pra galera não abusar. Você também pode escolher mais de uma área de atuação na lista de categorias, deixando os dados da vaga mais detalhados e facilitando a busca.

A novidade do site está na área de profissionais, onde qualquer pessoa pode se cadastrar e criar seu perfil profissional, colocando sua biografia, mandando imagens pro portfolio [o usuário pode colocar até 15 imagens] e também seu currículo para ser baixado. Estes profissionais podem ser buscados e se você tem registro, se aplicar para uma vaga de emprego é tão simples quanto clicar num botão. Todos os seus dados são enviados automaticamente para o contratante [mas talvez eu mude isso, vamos ver].

Nós também nos esforçamos bastante por tornar o site bem “distribuível”. Por exemplo, já existem códigos HTMLe BBCode prontos para você divulgar as vagas em outros ambientes, como blogs e fóruns. Todos os perfis possuem links para compartilhamento [via addthis] nos principais bookmarks sociais da rede e assim por diante.

Este é só o novo recomeço do designUp. Agora devemos nos focar na divulgação dele e em outros projetos, mas ainda temos muitos planos para ele, coisas que vamos divulgando com o tempo. Enquanto isso, adoraríamos ver as pessoas se cadastrando e usando o site. Ele foi feito com muito carinho para ajudar a comunidade de designers no Brasil. Pra quem quiser ver, aqui está o meu perfil! :)

É isso, espero que gostem, visitem e usem! Um abraço a todos!

Technorati Tags: , , , ,

Filtrando uma consulta com associações hasAndBelongsToMany - CakePHP

Já é a segunda vez que eu preciso fazer isto e só agora que eu achei uma solução realmente mais clean. Não que seja elegante… Parece mais um hack que qualquer outra coisa e nem funciona da maneira que eu realmente gostaria, mas foi o melhor que consegui.

Imagine o seguinte cenário: Você tem um blog e este blog tem um model “Post” e um model “Tag” onde “Post” HABTM “Tag” e vice versa. Agora imagine que você quer encontrar todos os posts com as tags “pessoal”, “vida marinha” e “caçadas”, como você faz? Dizer “$this->Post->findAll(array(’Tag.id’ => 1));” não vai funcionar simplismente porque nesta busca não há nenhuma associação com o model “Tag”, então como fazer?

A solução é você criar um model para a tabela que une os outros dois models [neste caso, a tabela posts_tags] que vai se chamar “PostsTag”. Dentro deste model você não precisa declara nenhuma associação. Simplismente jogue o model lá com as variáveis $name e $userTable e pronto. Quando você for fazer alguma consulta que necessite do filtro via tags, você realiza uma associação hasOne “on the fly” com este novo model. Vou exemplificar:

$this->Post->bindModel(array('hasOne' => array('PostsTag' => array())), false);

O que este comando faz? Ele cria uma associação “hasOne” do model “Post” com o model “PostsTag”. Uma associação hasOne cria um LEFT JOIN no seu query, te permitindo buscar também pelo id de “Tag” também. No CakePHP 1.2, o método bindModel possui uma segunda váriavel chamada $rest que é padrão “true”. Esta variável determina se a associação feita será persistente para outras consultas ou não. Se $reset for “true”, a associação só funcionará para a próxima consulta feita, sendo resetada depois disso. Se “false”, a associação persiste naquele método para o restante das consultas também. Tendo feito isso, você pode fazer uma consulta da seguinte forma:

$condicao['PostsTag.tag_id'] = array(1, 5, 10); //se for um valor apenas, ele não precisa estar num array
$this->Post->findAll($condicao); //você busca passando as condições anteriores

Preste atenção que estamos buscando pela “tag_id” em “PostsTag” ao invés de procurarmos pela “id” em “Tag”. Sua query vai ficar mais ou menos assim:

SELECT `Post`.`id`, `Post`.`title` FROM `posts` AS `Post` LEFT JOIN `posts_tags` AS `PostsTag` ON (`PostsTag`.`post_id` = `Post`.`id`) WHERE `PostsTag`.`tag_id` IN (1, 5, 10)

Até aqui, tudo parece ótimo, mas quando você vir os resultados, pode acontecer de aparecerem dois ou mais registros repetidos por causa das múltiplas associações. Para previnir isso, você tem que adicionar o comando DISTINCT ao id de posts, e você pode fazer isso declarando a variável $fields na hora de fazer a consulta, ficando assim:

$condicao['PostsTag.tag_id'] = array(1, 5, 10);
$fields = array('DISTINCT Post.id', 'Post.title');
$this->Post->findAll($condicao, $fields);

Sua query vai ficar mais ou menos assim:

SELECT DISTINCT `Post`.`id`, `Post`.`title` FROM `posts` AS `Post` LEFT JOIN `posts_tags` AS `PostsTag` ON (`PostsTag`.`post_id` = `Post`.`id`) WHERE `PostsTag`.`tag_id` IN (1, 5, 10)

Pronto, você já conseguiu fazer uma consulta filtrando através de uma associação hasAndBelongsToMany. Eu precisei fazer isso numa paginação, então depois eu escrevou outro post sobre como personalizar e definir outros parâmetros na hora de paginar seus resultados baseado no que eu tive que fazer.

Ah! Vale lembra que nada disso fui eu quem “descobri”. Tive que ler diversos emails no grupo do CakePHP e tudo mais. Por isso, qualquer dúvida, procure lá no grupo ou pergunte pra mim que eu vou tentar descobrir. É isso, abraços!

Technorati Tags: ,

10º Encontro Locaweb - Rio de Janeiro

Hoje, apesar de sozinho, fui ao 10º Encontro Locaweb aqui no Rio de Janeiro. Nunca tinha ido a nenhum destes encontros e pra mim foi uma experiência muito agradável. De cara, o preço do evento foi bem convidativo. Apenas R$ 29,00 que depois poderiam ser gastos em qualquer produto da Locaweb [ou seja, mais ou menos de graça]. Depois, a programação me parecia ser de muita qualidade, e foi!

Logo no início, tivemos uma palestra com o Gilberto Mautner, presidente da Locaweb, onde ele tentou falar um pouco sobre as tendências do mercado de internet pra 2008. Essa foi a palestra que eu achei mais fraquinha, porque as tendências que ele apresentou por lá na verdade não passavam de coisas que já estão rolando com uma certa maturidade já. Não quer dizer que não sejam tendências sólidas pra 2008, mas eu esperava algo mais inovador, algo que eu ainda não conhecesse, mas enfim… O cara ainda fez um pequeno demo de como se programa uma aplicação em Ruby on Rails, e apesar de eu imaginar que trocentas pessoas ali nunca tinha ouvido falar de Rails, essa parte foi meio chata pra mim que já conhecia a linguagem e tudo mais [imagino que pra outras trocentas pessoas também].

Depois, pra relaxar, tivemos um coffee break de prima! Comi muito pãozinho de queijo cara! Muito pãozinho de queijo e aquele doce com chocolate! Alguns sandubinhas também e o suco de Manga tava show! O de uva também! Mas o de uva foi só no coffee break da tarde…

Depois do coffee break teve a palestra do Élcio, que tive a oportunidade de ouvir e ver falar. Foi muito legal e os demos que ele fez foram bem relevantes porque mostravam mais os conceitos que ele queria passar do que uma tecnologia especifica. Ele falou basicamente sobre produtividade e como os frameworks e outras ferramentas nos ajudam nisso.

Logo depois do Élcio, foi a vez de um rapaz [que eu esqueci o nome agora] da Microsoft nos introduzir aos novos pacotes da Microsoft voltados pra web e desenvolvimento [Expression e Visual Studio]. Apesar das ferramentas serem muitos legais e até empolgantes por causa das possibilidades, a diferença entra a apresentação do Élcio, por exemplo, e a do rapaz da MS é gigantesca! Só pra citar um caso engraçado, quando o rapaz precisou aumentar o tamanho da fonte no editor para que as pessoas pudessem enxergar lá de longe, ele deve ter demorado quase um minuto pra achar o menu e a opção que modificava isso, enquanto o Élcio, na apresentação anterior, usando o VIM, aumentou o tamanho das fontes com algumas hotkeys, foi instantâneo. Nessas horas que dá pra perceber que, apesar da Microsoft ter software e tecnologias muito legais e empolgantes, eles cismam em complicar as coisas demais. Eu fiquei literalmente perdido no meio de tantos e tantos softwares, frameworks, extensions e é isso, e é aquilo. Caraca, como a MS gerencia tudo isso? Deve ser um deus nos acuda!

Será que tem alguém lendo isso aqui ainda?”

Bom, depois a gente almoçou e foi a vez do Google apresentar seus produtos. Foi a apresentação mais “bem ensaiada”, se é que foi ensaiada, mas não mostrou nada de novo além daquilo que a gente já sabe que o Google oferece, além de uns dados e gráficos de conteúdos questionáveis, mas enfim… A palestra seguinte foi bem interessante, onde Gil Giardelli tentou nos mostrar o que a tecnologia tem feito com a sociedade e qual o nosso papel, principalmente como brasileiros, dentro deste novo mundo, desta revolução.

Por fim, Cesar Paz, presidente da AG2, uma agência de marketing voltada pra web principalmente, falou um pouco sobre o marketing sobre essas novas plataformas e foi muito, muito legal, com todos os cases que ele mostrou e conceitos interessantes pra serem trabalhados junto aos clientes.

No geral, a Locaweb foi bem inteligente realizando este evento. É uma ótima forma de divulgar seus produtos e de gerar uma experiência com aqueles que já são ou poderão ser clientes da empresa. Acho que não existe nada melhor nesta área do que providenciar conhecimento e oportunidades de se trocar informações como esta. Ótima iniciativa.

Agora, quero deixar algumas diquinhas pros próximos eventos:

  1. Vocês não precisam separar muito tempo pro social. A maioria dos participantes vão sozinhos e não tem com quem conversar, a não ser as mocinhas dos estandes. Nem com as modelos eles se arriscam.
  2. Nunca proíba sapatênis nos seus eventos. Você só vai ter 10% da galera que poderia participar se você fizer isso!
  3. Nada de flamenco, tango ou mambo como musiquinha ambiente, por favor!

Technorati Tags: , , , ,

A morte dos PCs - Minha visão do futuro!

Hoje, conversando com um colega, comecei a viajar e tentar imaginar pra onde nós estamos indo no mundo da informática. Talvez muito do que eu imaginei já tenha sido “profetizado ” ou eu esteja falando só besteiras, mas mesmo assim eu queria comentar o assunto só por diversão =P

A tecnologia hoje cresce de forma assustadora. As capacidades de processamento dos computadores estão crescendo cada dia mais. A Intel já está pra lançar seu processador de seis núcleos, enquanto já procura fabricar processadores de quatro núcleos para portáteis. São muitas as novidades no âmbito do procesamento e eu imagino que em pouco tempo estaremos alcançando níveis de velocidade e capacidade nunca antes imaginado com as pesquisas em nano tecnologia e seus micro robôs, bem como os processadores quânticos e biológicos. As possibilidades são infinitas.

No mundo da conectividade, o acesso à rede mundial de computadores está cada mais fácil e barato. A tendência é as conexões dial-up irem morrendo conforme o preço da banda larga cair mediante as constantes renovações e inovações deste meio. Qualquer pessoa dentro de casa pode montar uma rede doméstica, wired ou wireless. O aproveitamento das redes sem fio tem sido cada vez maiores com o surgimento de tecnologias como 3G e WiMax, e acredito que em breve, nós nem tenhamos que pagar por conexão à internet de forma alguma com redes e hotspots espalhados por todos os cantos das principais capitais do mundo.

No mundo do software, o desenvolvimento para o ambiente on-line nunca esteve tão aquecido. A possibilidade de se utilizar linguagens como Python, Ruby e o próprio PHP tem expandido a visão dos desenvolvedores que agora podem criar verdadeiros aplicativos via web browser aliados a linguagens client-side como o javascript. Os padrões estão em alta [RSS, XML, JSON, Microformats, e por aí vai] e a possibilidade de conversa entre um serviço e outro, uma plataforma e outra [PC – Celular por exemplo] é cada vez maior. A internet está virando uma grande rede social colaborativa. Através de “lifestreams” você pode acompanhar cada passo de uma pessoa tanto no mundo virtual, como no mundo real [twitter?].

No mundo móvel, digamos assim, as novidades são praticamente diárias. O iPhone chegou para definir novos patamares e a tendência é de que celulares sejam cada vez mais poderosos. Celulares hoje em dia são capazes de rodar sistemas operacionais completos que nos dão acesso às funcionalidades mais úteis como centros de mídia, web browsers, aplicativos simples de escritório [editores de texto, planilhas, agendas e etc] e assim vai. Com a redução dos componentes, a tendência é de que possamos rodar coisas cada vez mais complexas em pequenos “devices”, sem contar que os mesmos estão totalmente aptos a se conectarem através das redes sem fio já citadas anteriormente [WiMax, Wi-fi, 3G].

Caramba! Quanta coisa! Para onde estamos indo?!? O que eu imagino é o seguinte. Com o aumento das capacidades de processamento e velocidade de conexão, nós acabaremos por utilizar computadores remotos para a execução de tarefas simples e corriqueiras, ou seja, os web services vão se tornar tão poderosos que com internet e um browser você será capaz de criar textos, enviar emails, editar imagens, navegar, criar planilhas, editar bancos de dados, e todas essas tarefas mais simples que qualquer usuário doméstico realiza. Se as conexões sem fio vão se espalhar, tornando-se baratas e acessíveis de qualquer lugar, em breve trocaremos o PC comum, o Desktop, por aparelhos como celulares, palms ou mini laptops como o Asus EEEPC, que em comparação com os PCs comuns, acabam sendo mais baratos (sendo que a tendência é sempre do preço cair mais) e estão totalmente aptos a se conectarem à intenet. Logo as pessoas estarão comprando mais celulares que PCs pois os mesmos serão capazes de realizar as tarefas mais simples que um usuário doméstico geralmente realiza.

Isto não quer dizer que os Desktops ou Laptops comuns vão sumir. Com o surgimento de programas com o Adobe AIR, o Google Gears e o Prism do Mozilla, vai ficar muito mais fácil utilizar os web apps como programas standalone e os PCs domésticos não precisarão ser tão caros quanto os atuais. E apesar de todas as facilidades dos web services, acho muito difícil, a médio e longo prazo, ser possível a criação de um similar on-line de softwares profissionais. Por isso os PCs comuns serão utilizados mais em nível de produção do consumo.

Em breve vamos ser invadidos por pequenos aparelhos que fazem de tudo, a internet vai ser a coisa mais comum e até mesmo uma necessidade básica do mundo e o acesso à tecnologia vai ser muito mais barato, rápido e fácil. É assim que eu vejo o futuro. E você, como você vê o futuro? Diz aí!

Technorati Tags: , , , , , , , , , ,

tu-dus - organização de tarefas feita à sua maneira

tu-dus

LANCEI! Sim, finalmente eu lancei meu primeiro aplicativo online!

Foi uma longa jornada pra poder conciliar meu trabalho diário com horas extras pra terminar o tu-dus. Na verdade, eu só fiz o tu-dus pra poder conciliar melhor as coisas na minha vida.

tu-dus é um aplicativo on-line que te permite organizar suas tarefas e eu vou explicar o “por quê” de eu ter criado esse treco.

Depois de ler muito sobre produtividade, sobre como vencer a procrastinação, ter ponderado sobre o assunto, aprendido um pouco de GTD e experimentado muitos aplicativos para estes fins [alguns deles muito legais como já foi dito aqui], percebi que, pra mim, uma folha de papel ou um arquivo de texto eram muito mais eficientes do que alguns estes programas [eu ainda sou fã do Post Task] na hora de organizar minhas tarefas. Não, o problema não eram os programas em si. Todos eles são muito bons, com características muito bacanas mas, enquanto uns tinham opções de mais, outros não tinham aquelas opções legais que eu gostaria de ter à mão pra aplicar de uma forma bem eficaz os conceitos e processos de produtividade que eu havia aprendido. Ainda assim eu gostaria de ter alguma ferramenta que fosse mais fácil de usar que um bloco de notas, sem ter que ficar digitando e identando minhas tarefas, foi então que surgiu a idéia de fazer o tu-dus. Ele é um aplicativo que fiz pra suprir minhas próprias necessidades de organização e espero que outras pessoas possam se identificar com o ele.

E o que ele tem de diferente?

Bem, o tu-dus é um aplicativo muito simples. Basicamente, ele é um app pra guardar suas tarefas e notas [caso você precise colocar um texto maior pra consultas e etc]. O grande barato é que ele funciona mais ou menos como as pastas de um sistema operacional. Dentro de cada ítem da sua lista, você pode criar uma nova lista com outros itens e notas e assim infinitamente.

Por que isso?

Esta característica, apesar de simples, é muito poderosa, pois expande a abrangência do tu-dus pra além de suas tarefas. Ele é uma ferramenta que te permite criar listas sobre qualquer coisa sem que tudo vire uma banguça, deixando as informações sempre à mão pra quando for necessário. Ele também facilita a aplicação dos principais conceitos de produtividade espalhados por aí.

Você vai perceber que não existe nada no tu-dus além de ferramentas pra adicionar itens e notas. A gente fez o tu-dus da forma mais simples possível pra que ele seja também o mais flexível. Algumas características que seriam facilmente encontradas na maioria dos “task managers” como agendamentos, prioridades e etc., você não vai encontrar no tu-dus, isto porque a idéia é que você organize suas tarefas da maneira que achar melhor e não da maneira que nós permitimos. Pelo fato de ser possivel criar listas dentro de listas, fica fácil criar um item para um determinado dia, ou organizar suas tarefas dentro de um item que determina uma certa prioridade e assim por diante…

Eu fiz um pequeno screencast que mostra direitinho como o tu-dus pode ser usado.

E como você fez isso?

Bom, eu não sou nenhum expert em programação. Como sempre digo, sou um eterno noob neste mundo, mas ando dando os meus pitacos. Então desde que aprendi a usar CakePHP, tenho podido pensar além das minhas limitações como programador, visto que o framework me ajuda bastante na hora de realizar tarefas que, sozinho, eu penaria muito pra fazer. Foi com ele que eu criei a parte server-side do tu-dus.

Para a parte client-side eu usei o charmoso jQuery. Ele me ajudou muito na hora de criar um código limpo, sem eventos no meio do HTML nem nada. Suas capacidades de seleção são muito poderosas e bacanas. Aposto que existem outros frameworks de JS tão legais quanto (estou de olho no Dojo) mas o jQuey respondeu muito bem às minhas expectativas e foi ótimo aprender a utilizá-lo.

Bom, é isso! Se você leu este artigo e quer experimentar o tu-dus, fique à vontade! Ele é totalmente gratuito, o cadastro demora menos de 30 segundos e é só alegria. Espero que gostem e qualquer coisa, mande um comentário aí com sugestão ou pergunta ou crítica, ou mande email pra contato [at] tu-dus.com.

Technorati Tags: , , , , , ,

Significados da cor cinza

Na verdade o nome deste blog é copiado do nome de um outro blog que tive a um tempo atras. Na época eu estava na faculdade e andava muito de trem [mais precisamente, cerca de 6 horas por dia, da minha casa até a faculdade, ida e volta]. Então sempre tinha aquela voizinha falando “os assentos de cor cinza são de uso preferencial, bla… bla…”, daí eu achei o nome legal e ficou. Mas a verdade é que eu adoro cinza. É uma das minhas cores favoritas do lado do marrom e do verde [embora não seja muito comum as pessoas gostarem de cinza]. Um blog chamado “cor verde” ia parecer relacionado à natureza ou essas coisas, e um blog chamado “cor marrom” não seria muito atrativo, eu acho, por isso “cor cinza” era a escolha perfeita!

Como todas as cores, o cinza tem os seus impactos psicológicos no mundo visual. Geralmente as suas impressões estão relacionadas às sensações que temos quando nos relacionamos com determinado objeto ou situação que possui aquela cor como predominante. No caso cinza, as interpretações são muito paradoxais.

Imagine um dia frio, o céu pesado e escuro, vai chover… Muitas pessoas vão relacionar isto a um sentimento de tristeza, e o cinza expressa este sentimento (a cor predominante do céu), principalmente nos seus tons mais escuros. Algumas aplicações do cinza podem estar relacionadas a perda [as cinzas de um ente querido], depressão, solidão e etc.

Ao mesmo tempo, pelo cinza ser uma cor intermediária [nem branco, nem preto], muitos assumem que o cinza é uma cor que representa não comprometimento ou indecisão, mas também pode significar modéstia, humildade.

Talvez pelo cinza estar muito presente em objetos tecnológicos, o cinza também representa inteligência, sabedoria, solidez, praticidade, independência e muitos outros atributos positivos.

Em ambientes, a cor cinza pode ajudar no estímulo da criatividade, sendo perfeito para inteirores de ambientes onde ela é necessária [um escritório de design, publicidade e etc...]. No design, o cinza pode ser considerado uma base, um ponto de partida para a integração com outras cores. Numa interface, o cinza, muito provavelmente vai indicar elementos indisponíveis ou desabilitados. Numa marca, pode representar tradição, solidez…

O cinza é uma cor muito versátil. Tudo o que você precisa fazer é cuidar com as gradações e você poderá integrar a cor cinza com praticamente qualquer intenção. Sem contar que outras cores possuem os seus cinzas [cinza azulado, cinza esverdeado...]. Você pode ter um cinza quente, um cinza frio e o céu é o limite!

Pinte seu quarto de cinza e comece a usar o cinza das formas mais criativas.

Referências:

Technorati Tags: , , , , , , ,