Recentemente descobri o mongoDB, e como tem driver para PHP via Pecl, resolvi investigar…

Uma das primeiras coisas que me chamou atenção era a aparente falta de autenticação, controle de usuários, etc. Eis que hoje descobri como funciona:

Mais ou menos como o mySQL tem uma collection (admin) que, tendo-se usuário e senha para ele, se tem em todos os dbs do sistema. Para se ter auth, basta rodar o daemon com –auth

Em cada banco tem uma collection chamada system.users. Ex: num banco chamado projectx, tem uma collection projectx.system.users. Pra começar a autenticar, é preciso criar um usuário no banco admin (equivalente ao banco mysql):

$ ./mongo
> use admin
> db.addUser("theadmin", "anadminpassword")

Depois disso vai precisar autenticar para fazer ações administrativas:

> db.auth("theadmin", "anadminpassword")

Pra ver todos os usuários do sistema:

> db.system.users.find()

Criando usuários para um banco específico:

$ ./mongo
> use projectx
> db.addUser("joe", "passwordForJoe")

pode-se criar tb usuários somente leitura:

> use projectx
> db.addUser("guest", "passwordForGuest", true)

Original de Woorkup, tradução e adaptação, moi.

The Web Designer Wheel é um modelo de processo simples que descreve em 5 passos como construir um projeto pequeno para web, e como conduzir as relações com o cliente. Esta abordagem permite um melhor trabalho, ensina a definir e cumprir prazos e estabelecer relações lucrativas e duradouras com o cliente. Eis o processo:

Recebi agora um email da GoogleApps informando que eles vão suspender o suporte à ie6 no Apps, e depois do GoogleDocs.
A partir de primeiro de março, ie6 fora. Ainda em 2010 vão barrar ie6 também para Mail e Calendar. A partir desta semana vão botar um aviso nos sites para as pessoas trocarem o navegador.

O ie6 foi lançado em 2001 (9 anos atrás) e tem conhecidas vulnerabilidades de segurança e virus. As alternativas (Chrome, Firefox, Opera) são todas gratuitas e não dependem do windows update (para quem “não pode” atualizar o windows).

Em média, depois de fazer um site fico no mínimo 30% do tempo ajustando ele para funcionar em ie6.

Como disse o Braz: “ja era hora de alguma empresa grande de internet fazer isso”

Dear Google Apps admin,​

In order to continue to improve our products and deliver more sophisticated features and performance, we are harnessing some of the latest improvements in web browser technology.  This includes faster JavaScript processing and new standards like HTML5.  As a result, over the course of 2010, we will be phasing out support for Microsoft Internet Explorer 6.0 ​as well as other older browsers that are not supported by their own manufacturers.

We plan to begin phasing out support of these older browsers on the Google Docs suite and the Google Sites editor on March 1, 2010.  After that point, certain functionality within these applications may have higher latency and may not work correctly in these older browsers. Later in 2010, we will start to phase out support for these browsers for Google Mail and Google Calendar.
Google Apps will continue to support Internet Explorer 7.0 and above, Firefox 3.0 and above, Google Chrome 4.0 and above, and Safari 3.0 and above.

Starting this week, users on these older browsers will see a message in Google Docs and the Google Sites editor explaining this change and asking them to upgrade their browser.  We will also alert you again closer to March 1 to remind you of this change.

In 2009, the Google Apps team delivered more than 100 improvements to enhance your product experience.  We are aiming to beat that in 2010 and continue to deliver the best and most innovative collaboration products for businesses.

Thank you for your continued support!

Sincerely,

The Google Apps team

Sometimes I just like to write code in Python and PHP to compare them, and admire both…

Here’s a little code to find IP adressess inside strings (returned from a nslookup). The code is not optimal, but illustrate how both languages works. Just for some friday fun…

Python

 
Python 2.6.1 (r261:67515, Jul  7 2009,  23:51:51)
 [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
 Type "help", "copyright", "credits" or "license"  for  more information.
 
>>> a  = 'yahoo.com IN A 69.147.114.224 18774s  (05:12:54)'
>>> a += 'yahoo.com IN A 209.131.36.159 18774s  (05:12:54)'
>>> a += 'yahoo.com IN A 209.191.93.53  18774s  (05:12:54)'
>>> print a
 'yahoo.com IN A 69.147.114.224  18774s (05:12:54)yahoo.com IN A 209.131.36.159 18774s  (05:12:54)yahoo.com IN A 209.191.93.53  18774s (05:12:54)'
>>>; import re
>>> p = re.compile('(?:\d{1,3}\.){3}\d{1,3}')
>>>; p.findall(a)
 ['69.147.114.224', '209.131.36.159',  '209.191.93.53']
>>>

PHP

$a  = 'yahoo.com IN A 69.147.114.224 18774s (05:12:54)';
$a .= 'yahoo.com  IN A 209.131.36.159 18774s (05:12:54)';
$a .= 'yahoo.com  IN A 209.191.93.53  18774s (05:12:54)';
 
print $a;
 
/*
saida: yahoo.com IN A 69.147.114.224 18774s (05:12:54)yahoo.com IN A  209.131.36.159 18774s (05:12:54)yahoo.com IN A 209.191.93.53 18774s  (05:12:54)
*/
 
$re = '/(\d+).(\d+).(\d+).(\d+)/';
 
preg_match_all($re, $a, $matches);
 
var_dump($matches[0]); // saida 1
var_dump($matches); // saida 2
 
/*
saida 1:
 
array(3) {
  [0]=>
  string(14) "69.147.114.224"
  [1]=>
  string(14) "209.131.36.159"
  [2]=>
  string(13) "209.191.93.53"
}
 
saida 2:
 
array(5) {
  [0]=>
  array(3) {
    [0]=>
    string(14) "69.147.114.224"
    [1]=>
    string(14) "209.131.36.159"
    [2]=>
    string(13) "209.191.93.53"
  }
  [1]=>
  array(3) {
    [0]=>
    string(2) "69"
    [1]=>
    string(3) "209"
    [2]=>
    string(3) "209"
  }
  [2]=>
  array(3) {
    [0]=>
    string(3) "147"
    [1]=>
    string(3) "131"
    [2]=>
    string(3) "191"
  }
  [3]=>
  array(3) {
    [0]=>
    string(3) "114"
    [1]=>
    string(2) "36"
    [2]=>
    string(2) "93"
  }
  [4]=>
  array(3) {
    [0]=>
    string(3) "224"
    [1]=>
    string(3) "159"
    [2]=>
    string(2) "53"
  }
}
*/

Um jeito fácil, rápido, gratuito de mandar arquivos pra lá e pra cá.

Acho o uploader do mediafire.com beeeem legal, mas a decisão de fazer  pastas e como apresentar o conteúdo para o visitante, complicada. Principalmente se o sujeito não fala inglês.

Este sendshack.com no entanto, é bem prático, e os anúncios não ficam pulando no teu colo.

Pedido: Fazer com que todos os links de uma determinada página sejam externos.

  • Abordagem 1: Alterar a classe em php, genérica, para ver se o link é externo e acrescentar o target; por regex.
  • Abordagem 2: Colocar no init.js
$("a[href^='http://']").attr("target","_blank");

E todo site fica assim; links externos, para fora!
Aff… que doce.

É, meus amigos… ultimamente a vida tem dado umas mexidas que me sinto marinheiro em mar de tempestade. Mas me firmando no caminho, esperando passar.

A partir dos 26 fiz sites de aniversário. Com intervalos nos 30 e 34, mas seguindo um modelo de de contar o que fiz no dia e abrir um espaço para comentários dos amigos.

Estes dias tem sido bem busy, e decidi não investir num site de aniversário. Hoje em dia com Facebook e Orkut, a maior parte dos amigos já mandou as suas mensagens – agradeço.

Mas se algum ainda quiser deixar um comentário aqui, será bem-vindo. Estou me preparando para ano que vem ter mais tempo disponível, para viver cada vez melhor. A companhia dos amigos faz parte dos planos.

Normalmente ao meio-dia, horário em que nasci, faço uma meditação, em silêncio observando mais um ciclo se completar. Como em 74 não havia horário de verão, faço isso às 13h. Hoje estava tão cansado que me entreguei a Morfeu faltando 10 minutos; mais uma mudança nos padrões.

Felicidade a todos nós, prosperidade e firmeza, para que possamos aproveitar esta existência compreendendo o verdadeiro sentido da vida.

Se quiser deixar uma mensagem, os comentários são pra isso…  :)

When I use Betterzip to uncompress a directory tree, it chmods the dirs with 700. Here’s the command to solve this:

find . -type d | xargs chmod 755

It finds all subdirectories and chmod’em to 755. Clever, isn’t it?

Desde que comecei a usar GIT acho svn clumsy… prefiro jogar os arquivos no dropbox, que ele guarda versões pra mim.

Agora resolvi detonar todos os .svn de um trabalho que estou fazendo. Chega de xalassa…

  1. criar um bash script básico para remover os .svn recursivos
  2. salvar no meu ~/bin e dar chmod +x
  3. rodar e ser feliz.
#!/bin/sh
echo “recursively removing .svn folders from”
pwd
rm -rf `find . -type d -name .svn`
#!/bin/sh
 
echo "recursively removing .svn folders from"
 
pwd
 
rm -rf `find . -type d -name .svn`