git-pushed

git-pushed é uma ferramenta de linha de comandos capaz de listar as referências alteradas num repositório git remoto.

Caso de uso

$ git-pushed https://github.com/PauloASilva/node-http-mitm-proxy.git

Nota

git-pushed mantém a informação sobre as referências de um repositório no directório $HOME/.cache/git-pushed
Na primeira execução para um dado repositório, todas as referências serão dadas como modificadas.

Motivação

Gitlab inicia um projecto jenkins aquando dum evento push num dado repositório.
O projecto jenkins job executa comandos remotamente via SSH, comandos esses que devem fazer checkout do repositório se e só se o evento (push) ocorreu numa dada referência (head). Continue reading

Comprimento duma string formatada

Para um printf("Vamos dizer %s\n", "ola") não precisamos sequer pensar qual o comprimento final do texto a imprimir, porque o recurso “não tem” limitação de espaço. Mas e quando queremos armazenar o resultado em memória?

Para armazenar em memória precisamos saber qual o tamanho do “slot” a alocar, mas se ainda não conhecemos o resultado final eventualmente o melhor que podemos fazer é alguma aritmética menos automática:

comprimento("Vamos dizer %s\n") - comprimento("%s") + comprimento("ola")

O bom é que isto pode ser automatizado. Continue reading

nginx: desenvolvimento de módulos

Uma referência incontornável na introdução ao desenvolvimento de módulos nginx é sem dúvida o artigo Emiller’s Guide To Nginx Module Development.
Não menos valiosa é ainda a contribuição do Antoine Bonavita: Development of modules for nginx (tradução para Inglês do artigo original em Russo).

Para um servidor http com o potencial do nginx esta é, até agora, a melhor literatura que encontrei especificamente sobre o desenvolvimento de módulos.
O projeto em si padece de falta de documentação técnica e a bibliografia em geral não cobre detalhadamente esta componente.

Como quando se começa com uma nova linguagem de programação, a tentação é procurar um exemplo “hello world” que também o há para o nginx, no entanto, dada a facilidade de borrar a pintura entre apontadores e referências, parece-me mais prudente iniciar a experiência com um módulo cuja principal funcionalidade é não fazer nada. Neste contexto, “não fazer nada” significa que vamos conseguir compilar o nosso módulo junto com o restante código fonte do nginx (ao contrário dos módulos de Apache que são dinamicamente linkados, os módulos nginx são compilados com o core) , não quebrando o seu funcionamento.

Continue reading

Introdução à computação paralela

Um bom recurso sobre pthreads: POSIX Threads Programming.

This tutorial is the first of eight tutorials in the 4+ day “Using LLNL’s Supercomputers” workshop. It is intended to provide only a very quick overview of the extensive and broad topic of Parallel Computing, as a lead-in for the tutorials that follow it. As such, it covers just the very basics of parallel computing, and is intended for someone who is just becoming acquainted with the subject and who is planning to attend one or more of the other tutorials in this workshop. It is not intended to cover Parallel Programming in depth, as this would require significantly more time. The tutorial begins with a discussion on parallel computing – what it is and how it’s used, followed by a discussion on concepts and terminology associated with parallel computing. The topics of parallel memory architectures and programming models are then explored. These topics are followed by a series of practical discussions on a number of the complex issues related to designing and running parallel programs. The tutorial concludes with several examples of how to parallelize simple serial programs.in Introduction to Parallel Computing

Intel XDK New

É recompensador quando a tecnologia cumpre a sua função e nos mostra resultados no tempo esperado.

“The Intel® XDK NEW development system is designed for developers who want to use their HTML5 expertise to build hybrid HTML5 apps for mobile devices (e.g., phones and tablets) and other platforms that host HTML5 web apps (such as a Google Chrome* extension or a mobile web site).”

No caso deste Intel XDK New demorou mais uns minutos: embora a interface de instalação (install_GUI.sh) diga que apenas o Ubuntu 12.04 é suportado, no arquivo vem um rpm.

O download pode ser feito no site oficial. Depois de descomprimir o arquivo, encontrarão o rpm no directório “rpm” (será qualquer coisa como intel-xdk-0154-2.0-0.x86_64.rpm, sendo que o nome do arquivo depende da versão)

A instalação decorrerá sem problemas: basta executar na linha de comandos

$ sudo yum install intel-xdk-0154-2.0-0.x86_64.rpm

Depois disto são precisos mais dois pequenos truques:

  1. corrigir permissões:
    $ sudo chmod 0755 /opt/intel/XDK/
  2. corrigir o symlink libudev.so.0: no meu caso a correcção passou por
    $ sudo unlink libudev.so.0; sudo ln -s /usr/lib64/libudev.so.1 /opt/intel/XDK/libudev.so.0

Depois disto, a oferta da Intel cumpriu.
Arrancou
interface principal do Intel(R) XDK Newe em poucos minutos deu frutos (Sapo A5)

Screenshot da aplicação a correr num Sapo A5

Uma abordagem suave aos objectos em JavaScript

Nota introdutória: este texto foi escrito para um público alvo muito específico, sendo o objectivo principal o de introduzir o paradigma OO em JavaScript. Muita da beleza do paradigma e até da própria linguagem serão eventualmente matéria de desenvolvimento mais adiante.

A Programação Orientada a Objectos (do inglês Object-Oriented Programming – OOP) é um paradigma relativamente recente, introduzido no início dos anos 60.

Na génese deste paradigma está a noção do universo compostos por objectos que interagem entre si. Como o software visa resolver problemas do “mundo real”, a programação por objectos pretende simplificar a representação da realidade onde os objectos têm características (propriedades) e acções (métodos) que são capazes de realizar.
Continue reading