Herberth's blog

Just another software engineer

Saldo Da Visita Técnica à BH

Nos dias 21 e 22 deste mês um grupo de dezoito pessoas e eu fizemos uma viagem à BH com um intuito: conhecer melhor as iniciativas de startups da cidade. Boa parte dos custos da viagem do grupo foi bancado pelo SEBRAE, ao qual agradeço publicamente pela generosa e oportuna oferta.

Fizemos quatro visitas: à Startup Sympla, à Acelera, ao Techmall, ao SEBRAE e ao Lemonade. Além disso, fiz por conta própria uma visita ao novo escritório da RockContent e à Méliuz.

Sympla

A primeira visita já começou espetacular. O Rodrigo Cartacho abriu as portas da Sympla e contou sua experiência no exterior (ele morou na Hungria por 10 anos) e na criação da empresa.

Só por contar sua história, o Rodrigo nos deu uma aula. O ponto mais importante da aula do Rodrigo foi quando ele disse: “você não precisa fazer o MVP completo… basta fazer o M”. O que ele quis dizer é que talvez não seja necessário investir uma quantia alta de dinheiro fazendo um MVP sendo que há meios mais baratos e rápidos de validarem seu modelo. De fato, vimos como isso funcionaria no dia seguinte (continue lendo).

Hoje a Sympla conta com mais de 40 funcionários e almeja ser a maior plataforma para eventos do Brasil.

Acelera

O Acelera é um programa de aceleração bem interessante que toma lugar na Fumsoft. Fomos apresentados ao programa e à uma startup que faz parte dele, a OneCloud, que tem como foco a unificação do gerenciamento de recursos computacionais nas nuvens de diferentes provedores.

Inicialmente o programa me pareceu um pouco engessado demais para ter algum resultado, mas mudei de opinião quando vi que há negócios com grande potencial sendo desenvolvidos (e os que já saíram) por lá.

Lemonade/Techmall

O Lemonade é um programa de aceleração que acontece nas dependências do Techmall. Rotineiramente, o Lemonade trás pessoas com conteúdo para palestrar no local. No dia 21, tivemos a honra de assistir uma palestra do Dr. Nívio Ziviani (sim, aquela lenda dos algoritmos :). A palestra do Dr. Nívio tinha como tema a geração de riqueza através do conhecimento em que ele nos expos estatísticas de como as pesquisas impactam no PIB de países desenvolvidos com uma comparação com o Brasil. Além disso, o Dr. Nívio citou exemplos de empresas que ele ajudou a criar e que criaram riqueza nos moldes que ele defende.

Uma das perguntas que fiz ao Dr. Nívio foi a seguinte: “O sr. disse, basicamente, que a Akwan não chegou a ser um player global na área de buscadores da web por causa do acidente geográfico de ter nascida no Brasil?”. A resposta foi um veemente “Sim”. Segundo o professor “Na época não havia investidores no Brasil como se tinha no exterior. Precisávamos de uma infraestrutura de alguns milhões de dólares e não tínhamos ninguém para bancar, nem mesmo o BNDES”. Empreender no Brasil é um jogo na dificuldade “hard” por causa dessas e outras. Felizmente há um horizonte de mudanças neste cenário.

SEBRAE

Infelizmente não tive como ficar durante toda a extensão da visita ao SEBRAE porque tinha uma visita marcada à Méliuz. Mas esta visita mostrou mais uma vez como que uma conversa de corredor pode render mais que uma palestra inteira. O João Marinheiro, do ThePlant nos mostrou várias técnicas de validação de negócios que vão desde a venda de inexistentes cursos de cerveja durante um Startup Weekend ao uso de ad-sense para coletar feedback prematuro de possíveis clientes.

Méliuz

A minha visita à Méliuz foi acidental: o Leandro Alves, CTO da empresa, estava em busca de um/a DevOps para o time e me mandou um e-mail. Na cara de pau, pedi para visitar a empresa e tive a grata surpresa que não se tratava de uma empresa pequena, mas uma empresa com dezenas de pessoas trabalhando. Tomamos café e conversamos sobre os requisitos que a pessoa que preencherá a vaga de DevOps terá que ter. Recomendei um conhecido e espero que seja uma boa sugestão.

RockContent

Eu sabia que a Rock estava indo bem, mas não sabia que era tanto :). Tive a grata surpresa de visitar o HQ da Rock na rua Alagoas, bem no coração da Savassi, com o André e o Alessandro do EnglishExperts. Em breve o escritório deles contará com ~800m² de área útil e, segundo o Edmar (que nos recebeu extremamente bem), deve servir até o fim do ano que vem (!!!).

Resumo da ópera

Não tenho como agradecer ao SEBRAE pela experiência fornecida. Veio em boa hora. Percebi que, estupidamente, me afastei de BH e que isso me custou caro em termos de boas experiências. Fosse três ou quatro meses atrás, eu teria certeza que esse tipo de viagem seria uma espécie de viagem de turismo para quem fosse. Fico extremamente satisfeito em saber que eu estaria errado se dissesse isso hoje.

Espero voltar em BH em breve para dar continuidade às boas experiências vividas.

Mestrado: A Verdadeira Graduação

Depois de mais de dois anos sem blogar, volto com um assunto que demanda um pouco de reflexão.

Decidi fazer um mestrado porque acredito que me trará conhecimentos importantes na minha profissão e porque eu tenho interesse em dar aulas. E fico feliz de dizer que minhas expectativas estão sendo largamente satisfeitas.

Estou inscrito em três disciplinas:

  1. Métodos Matemáticos, em que trabalhamos basicamente até agora com equações diferenciais;
  2. Projeto e Análise de Algoritmos, trabalhamos com matemática discreta, algoritmos, grafos, complexidade até agora;
  3. Inteligência Computacional, optativa em que trabalhamos com aprendizado de máquina, basicamente.

Por quê eu digo que é a verdadeira graduação?

Basicamente porque não há enrolação. As coisas na graduação são mais rarefeitas. Foram poucas aulas realmente intensas que tive na graduação, mais notavelmente Comunicação de Dados I e II (que eu achava que sabia por ter lido o livro do Tanenbaum antes da graduação).

Foi no mestrado que eu descobri que eu não sei estudar (ou pelo menos que eu desaprendi a estudar). É uma experiência que deixa humilde boa parte das pessoas. E é disso que eu sentia falta.

Os problemas

Basicamente os problemas são mais comigo mesmo do que com o programa de pós graduação. Mas basicamente, o mestrado era para ser profissional e me parece bem acadêmico. Não que seja um problema para mim, mas algumas pessoas podem entrar achando que é uma coisa, quando na verdade parece bem mais com outra coisa.

Trabalhar e fazer três disciplinas de uma pós-graduação stricto-sensu é bem puxado e eu acredito que o programa poderia obter mais exito se incentivassem os alunos a fazerem disciplinas isoladas antes de entrarem como alunos regulares. Eu tenho certeza que meu aproveitamento seria bem diferente se eu atacasse uma única matéria de cada vez. De fato, eu até tentei fazer isso (mandei e-mail, perguntei para docentes, mas ficou parecendo que o mestrado não aceitava alunos especiais), mas acabei não insistindo muito na idéia.

E agora?

Sempre ouvi que é sempre mais fácil entrar na Universidade do que sair. Foi assim na minha graduação é continua sendo assim na minha pós. Pensei em trancar algumas vezes, mas acredito que o sacrifício vai ser recompensado e a parte mais difícil (1º semestre) já está chegando ao fim.

Desejem-me sorte.

Sobre O jQuery Fundamentals

Comecei o processo de tradução do jQuery Fundamentals há quase 3 anos, quando meu antigo blog ainda não havia sido destruído pela minha incompetência (de não ter um backup em outro local) e da Webbynode (por ter apagado meu VPS sem aviso prévio).

Durante o tempo que meu VPS ficou fora do ar, o link pro jQuery Fundamentals também. Agora eu estou retornando o link pro devido lugar.

Download

 

Nota importante: Apesar do código do livro não estar sendo mais mantido por mim, ele ainda se encontra em um repositório aberto. Quem quiser contribuir fique a vontade :-)

Commands Conversion Table From MySQL to PostgreSQL

The above title (One who has no dog hunts with a cat - “Quem não tem cão caça com gato”) is a portuguese proverb which exemplifies the developer routine regarding to adapting tools and creating others when there are no other available.

Those who use an IDE (like Visual Studio) and a static-typed language are quite used to use the “refact” tool. It allows you to rename variables and methods, extract methods, rename classes and more, without breaking the code. There are even other extensions, like resharper, which make it even more powerful.

Non-static-language programmers, like me, are often jealous of what C# guys can do without too much effort. Because of the nature of dynamic languages, is very hard to develop a tool to do exactly what Visual Studio can do. We have to find our way to fix our code in multiple places. And we often do it the hard way.

Sometime ago I read a serie of posts called “Unix as an IDE” and it taught me how to use my enviroment to edit code more efficiently.

One of the things the series of posts havent showed me is the power of sed. This simple tool can do almost the same thing as Visual Studio’s refact tool does sometimes.

Let’s suppose we are maintaining an old PHP project that has queries all over the place and which those uses “mysql_db_query” (now deprecated) instead of “mysql_query”. Here’s a life-saving command:

$ find /your/project/folder/ -name "*.php" | xargs sed -i s/mysql_db_query/mysql_query/

We can read it as follows: “find every file ending with *.php in folder /your/project/folder and then substitute mysql_db_query with mysql_query in each one of them”. Pretty simple, huh?

A more complicated example

I’m working on a Django project which uses bootstrapform to better rendering some forms. However, since we’re moving to Crispy Forms, bootstrapform is no longer needed. So let’s remove it!

First, let’s change

{% load bootstrap  %}
to
{% load crispy_forms_tags  %}
inside templates. We can do it as follows:

$ sed --in-place 's/ {% load bootstrap  %}/{% load crispy_forms_tags  %}/' `find . -name "*.html"`

The command is slightly different from the previous one, but it works like a charm.

The second one is a bit more difficult. We need to change

{{any_form|bootstrap }}

to

{% crispy any_form %}

There are no other way: you need to have some regex knowledge to pick this up:

$ sed --in-place 's//{% crispy \1  %}/' `find . -name "*.html"`

In this case, grouping saved my day. It is important to remember that sed does not only work on source code files: it works everywhere.

If you are a programmer that uses Unix, keep your sed skills sharp. If you uses windows to work, I can recommend sed for windows or cygwin for a more complete environment.

Commands Conversion Table From MySQL to PostgreSQL

A lot of companies are moving or considering moving to PostgreSQL today. The reasons vary a lot and it is not the scope of this blog post to address those reasons, but to help the developers to do an easier adoption of new technology by showing a simple command conversion table.

Although the blog title says MySQL to PostgreSQL, it can serve as a reverse path (PostgreSQL to MySQL). So, here it is:

MySQL command PostgreSQL equivalent
show databases; \\l
use somedb; \\c somedb
show tables; \\dt
describe table sometable; $ pg_dump -U postgres -t mytable --schema-only mydb
show schemas \\dn

Some notes

There’s a lot of differences between MySQL to PostgreSQL. Some you need to address every single time (like the differences between commands I’ve pointed out). Others are less frequent, like creating databases, users or setting up a replication.

If you are planning to learn or move to PostgreSQL from MySQL, I’d like to recommend that you learn the differences between authentication, which includes creating and giving priveleges to users and creating databases. It should be good enough for small to medium setups.

Any important command that I’ve missed? Please, drop a line in the comments :-)

A New Template for Django Projects

Since Django 1.4 it is possible to use project templates. This means that you can start off your Django project with a different project structure, which also means that you can avoid some initial configuration hassle.

Django follows Python’s principle of “explicit is better than implicit”. And this is the justification I’ve got when I asked why Django does not have some configurations done by default. I think “convention over configuration” is not necessarily “explicit is better than implicit”’s enemy. Both can live together as long you keep the configurations explicit.

Thinking about that I’ve decided to write a project template which eliminates some of the Django’s annoyances when starting a project, mainly related to paths (templates, media and static). This is specially useful for newcomers so they don’t lose a lot of time configuring the project.

Show me it working!

You can start off a project using this template like this:

$ django-admin.py startproject myproject \
  --template=https://github.com/herberthamaral/django_project_template/archive/master.zip
$ cd myproject
$ python manage.py runserver

At this point you can point out your browser to http://localhost:8000 and you can see Django’s initial page. But, if you point it to http://localhost:8000/static/readme.txt, you can also see the static folder’s configuration working. The same for the media folder: http://localhost:8000/media/readme.txt.

The template path is also configured. And there is a example template located in myproject/templates/index.html. Yup, it is the initial Django’s template, slightly modified.

Limitations and workarounds

Not everything is a sea of roses, though:

  • Django does not offer a way to change the project folder name. For that reason, I’ve been forced to add a custom code in manage.py in order to change this folder name to match the application name.
  • There is some extra code in urls.py too.

Final words

I hope this can solve some problems for newcomers willing to learn Django. Please contact me if you find a bug or if you have a suggestion.

A New Era, a New Blog

So, my old blog was wiped out, sent to oblivion, and I had no backups. So it is good to start over again. Probably in the right way with git-based backups (using Github).