Older blog entries for jarod (starting at number 116)

ECMA 4: vá com Deus (ou que o diabo te carregue!)

E a batata quente, quente, quente, queimou. Após o encontro do ECMA (Ecma's Technical
Committee 39) em Oslo, em julho, a especificação ES4 foi deixada (temporariamente) de lado. Brendan Eich fez o anúncio. O foco, por enquanto era o ES3.1 (Baseado no ECMA-262 Edição 3). Packages, namespaces e early binding, por enquanto, ficam de fora.

Podem até dizer que é conspiração da Microsoft (o Brendan Eich nega). O fato é que, ao menos pra mim, as coisas ficaram como sempre deveriam estar. Por enquanto.

Syndicated 2008-08-26 18:55:28 (Updated 2008-08-26 18:55:58) from devlog

Wordpress 2.6, TinyMCE

Usando o wordpress 2.6, que vem com o TinyMCE 3.1.1 (que a propósito, não é bem um 3.1.1), mesmo depois deu ter conseguido habilitar o plugin para tabelas do TinyMCE (ei, elas podem ser úteis e necessárias em alguns contextos), a tela ficava como no screenshot abaixo.

Wordpress TinyMCE

Após ler alguns posts, eu consegui 'resolver' (vulgo, usar um tipo leve de POG) para fazer funcionar. Segue os passos!

  1. Baixar o TinyMCE do site
  2. Copiar o plugin table para wp-includes/js/tinymce/plugins
  3. Editar o wp-includes/js/tinymce/tiny_mce_config.php e incluir o 'table' no array $plugins;
  4. Editar o wp-includes/js/tinymce/tiny_mce_config.php e incluir o 'tablecontrols' no array $mce_buttons_3;

Verifique também se não existe um cache do javascript do tiny_mce. Ele fica em /wp-content/uploads/js_cache. Você pode precisar apagá-lo para que suas configurações do plugin sejam lidas. Adicionalmente, você pode desabilitar o cache em wp-includes/js/tinymce/tiny_mce_config.php .

Se tudo correu bem até aqui, o seu editor de tabelas no tinyMCE deverá estar funcionando como o meu.

Segundo um comentário no fórum do tinymce, a chamada (!tinymce.ScriptLoader.isDone(u)) na função requireLangPack nunca retornava verdadeiro. Como Javascript nos permite fazer alterar um método dinamicamente, podemos aplicar um pequeno hack no table.js, logo no início do arquivo, antes da chamana a requireLangPack:


tinyMCEPopup.requireLangPack = function () {
    var u = this.getWindowArg("plugin_url") || this.getWindowArg("theme_url");
    if (u && this.editor.settings.language) {
        u += "/langs/" + this.editor.settings.language + "_dlg.js";
        tinymce.ScriptLoader.lookup[u] = {state:0} //HACK MALIGNO
        if (!tinymce.ScriptLoader.isDone(u)) {
            document.write("&ltscript type="text/javascript" src="" + tinymce._addVer(u) + "">");
            tinymce.ScriptLoader.markDone(u);
        }
    }
}
 

Basicamente, estamos fazendo um HACK MALIGNO, dizendo que o script nunca está carregado, portanto, sempre o carregue. Se você estiver usando o locale pt_BR no wordpress, vai precisar criar um arquivo pt_dlg.js na pasta langs do plugin table.

Curioso para saber o que eu ando fazendo com wordpress? Dá uma olhada no site da China 2008!

Syndicated 2008-08-11 20:57:14 (Updated 2008-08-11 21:22:55) from devlog

PHP4 na hora da morte!

http://www.php.net/archive/2007.php

De acordo com a notícia no php.net, e como já foi anunciado em alguns blogs por aí, hoje é o dia da morte do PHP 4. Ainda bem que se foi (embora ainda continue muito vivo mum servidor perto de você, ou, infelizmente, de mim!)

Syndicated 2008-08-08 18:06:12 from devlog

Dr. Project

https://www.drproject.org/

Apesar da recente popularização de sistemas de controles de versão distribuídos como o git ou o mercurial, o svn ainda é a ferramenta mais popular para controle de versões. E junto com ele, quase sempre está o trac, que adiciona ao repositório um wiki, tickets e outras ferramentas para gerenciar o desenvolvimento.

Porém, a maior questão dos usuários com o trac é ter de subir uma instalação do trac para cada repositório. Não é uma tarefa muito difícil, mas convenhamos, podia ser mais fácil.

Pensando nisso, a Universidade de Toronto fez um fork do trac, adicionando a capacidade de múltiplos projetos. Entre as facilidades oferecidas, podemos citar, por exemplo, que criar um projeto no DrProject já cria o respectivo repositório.

Comparação

O DrProject era originalmente um fork do portal open source leve chamado Trac. Essa é a comparação dos dois hoje:

DrProject Trac
Múltiplos projetos por portal sim não
Listas de e-mails integradas sim não
Controle de Acesso baseado em Roles sim não
Contas de Usuários externas sim por plugins de terceiros
Camada de banco de dados Elixir/SQLAlchemy SQL manual
Navegador de repositório Subversion sim sim
Support a Perforce, BZR, etc. não por plugins de terceiros
Busca Cross-Component sim sim
Administração baseada em Web sim parcial
Sintaxe do Wiki Markdown custom
Milestones Sim Sim
Tagging yes by third-party plugin
Remote Scripting API yes no
Client-Side Javascript Dojo handwritten Javascript
RSS Feeds yes yes
Custom Ticket Views no yes
Integração ao Eclipse não por plugins de terceiros

Segundo Jeff Balogh, o trunk dele é estável, com o desenvolvimento feito nos branches.

O projeto foi originalmente desenvolvido para uso no ensino[bb]. Numa troca de e-mail rápida com os desenvolvedores, perguntei no que isso se fazia presente no projeto. David Wolever me disse que o sistema de permissões é um reflexo disso, já que num projeto open source o acesso ao código não precisa ser restrito. Greg Wilson me falou a respeito das listas de e-mail integradas, e das operações em lote, como criar vários projetos com nomes sequenciais - que são úteis dentro de um ambiente de ensino.

A instalação do projeto foi parecida com a do trac, com a exceção que o DrProject espera que os repositórios estejam dentro dele, já que ele os administra. Numa tentativa de atualização, o meu banco de dados (sqlite) teve algum problema, mas logo depois o problema desapareceu. Sinais de que o projeto ainda tem muito o que andar, mas é uma boa pedida pra adicionar na lista de coisas a testar.

Syndicated 2008-07-21 21:54:43 from devlog

2+2 = 5

Se tem uma coisa que me irrita, é quando as pessoas dão nomes as coisas de uma forma não condizente.

Por exemplo, trabalhando com o Plone e categorização de objetos. Você já imagina que para procurar objetos por categorias você irá esbarrar em categories, category, até um possível tag. Mas dentro do Plone, você busca por Subject.

Mas em um outro caso, é o Plone que me salva. Se você vai adicionar uma informação geográfica a um objeto, você logo pensa em location. Ao menos é o que a tela de edição do Plone mostra. E é o que o Dublin Core chama de coverage.

Vocês podem achar que eu estou sendo excessivamente chato com isso, mas lembre-se que você sempre terá de gastar alguns segundos para associar a palavra ao seu significado específico dentro daquele contexto onde ela tem um significado alienígena

Syndicated 2008-07-17 21:12:11 (Updated 2008-07-17 21:13:15) from devlog

Escreva para quem vai dar manutenção!

Do C2 Wiki, através do Coding Horror: "Sempre codifique como se a pessoa que vai dar manutenção no seu código fosse um psicopata violento que sabe onde você mora."

Syndicated 2008-07-15 13:29:13 from devlog

Bugs mais velhos do que eu! (ou você!)

Dois meses atrás eu fiquei espantado com a idade do bug do BSD que tinha sido corrigido: 25 anos. Pois não é que hoje eu fico sabendo de um bug no yacc do OpenBSD que remonta há 33 anos? Mais velho que eu!

Syndicated 2008-07-09 15:06:20 from devlog

Protocol Buffers

http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html

É o nome do mais novo projeto do google disponibilizado para a comunidade do código livre.

Segundo a descrição no anúncio do projeto, ele nasceu da necessidade de serializar dados e trocar esses dados serializados pela rede de forma eficiente. Já nasceu com versões para Java, C++, ou Python.

Você define uma descrição de um objeto, um arquivo .proto, e o compilador gera o código necessário para acesso na linguagem que você escolher, dentre as três suportadas.

Segundo a documentação: "Protocol buffers are now Google's lingua franca for data – at time of writing, there are 48,162 different message types defined in the Google code tree across 12,183 .proto files. They're used both in RPC systems and for persistent storage of data in a variety of storage systems."

Syndicated 2008-07-08 14:36:44 from devlog

4 Jul 2008 (updated 8 Jul 2008 at 04:08 UTC) »

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!

Syndicated 2008-07-04 15:23:04 (Updated 2008-07-08 03:49:13) from devlog

Mais Text Munger

Whitespace, punctuation, numbers -- anything that isn't a word -- should also remain unchanged.

Ou seja, minha implementação anterior está fundamentalmente errada ;)

E eu só li essa parte do enunciado depois do comentário do Rodolpho.

Mas é fácil de resolver, usando o shlex mesmo:


import sys
import shlex

from random import shuffle

def munge(text):
    t = shlex.shlex(text, posix=False)
    t.quotes = "'"
    t.whitespace = ""
    #print(list(t))
    s = (munge_word(word) for word in t)
    print("".join(s))

def munge_word(aword):
    s = list(aword)
    first = s.pop(0)
    try:
      last = s.pop()
    except IndexError:
        return aword
    shuffle(s)
    return first + ''.join(s) + last

try:
  s = open(sys.argv[1]).read()
  munge(s)
except IndexError:
  print("Usage: munge.py file")
 

Syndicated 2008-07-03 20:15:12 (Updated 2008-07-03 20:15:43) from devlog

107 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!