Ótima ferramenta para ensinar programação em Android

Tudo feito a partir do Drag e Drop e você ainda pode buildar e rodar direto no seu aparelho.

http://appinventor.mit.edu/explore/

Recentemente, eu estava procurando formas de criar uma aplicação para enviar e-mails que fossem reconhecidos pelo Google Now. Descobri que é possível, o google possui um sistema de markup que faz com que as aplicações processem os e-mails e mostrem informações que são enviadas nessas tags.  Se você tem interesse nisso, eu recomendaria ler a página de overview do Google Markup.

Mas não parei por aí. Procurei uma forma de fazer um aplicação para testar o envio dessas mensagens com as informações de markup.
Segui o exemplo da página Apps Scripts e enviei vários e-mails de notificações de evento para mim – dessa forma só torna-se possível enviar e-mail para o próprio usuário. Se você quiser enviar para outras pessoas será necessário se registrar no Google.

Então vou citar os passos que fiz  (os mesmos do tutorial):


1. Primeiramente inciei um projeto no script.google.com.

2. É necessário criar 2 arquivos. O HTML que irá conter o template do e-mail enviado, e o Javascript (GoogleScript).  Os nomes são: Code.gs e mail_template.html.

O conteúdo do Code.gs foi o seguinte:

function testSchemas() {
  var htmlBody = HtmlService.createHtmlOutputFromFile('mail_template').getContent();

  MailApp.sendEmail({
    to: Session.getActiveUser().getEmail(),
    subject: 'Testing E-mail Markup - ' + new Date(),
    htmlBody: htmlBody,
  });
}

e o conteúdo do mail_template.html foi:
http://pastebin.com/tvZyf727

mailTemplate

A mágica está no json embeded no e-mail.

3. É necessário salvar os arquivos – o ponto vermelho nos nomes dos arquivos mostra que eles não foram salvos.

4. Executar a função. Na aba superior “Executar-> testSchemas

No email que chegou na minha conta aparece a seguinte informação.

Essa é a visualização via aplicativo Imbox do Google.

markup

 

Contudo, no Gmail só apareceu a informação textual:

markup2

E nada no Google Now.

Como eu disse recentemente,  caminhos relativos costumam dar dor de cabeça quando se está trabalhando com CronJobs. Já fui surpreendido algumas vezes com erros devido a isso. Por isso, eu sempre uso a estratégia de pegar o caminho do script que estou executando e concatenar ao caminho relativo que desejo usar.  Anteriormente, eu mostrei como fazer isso em Shell Script e agora estou postando o que faço nos meus scritps em Python.

from os import path

CURR_PATH = path.dirname(path.realpath(__file__))

print CURR_PATH

Rodrigo Lira,

Resolvi comprar um iphone velho de uma amigo meu para me enveredar no mundo mac. Eu já tenho um Nexus 7 e um moto E que me permitem desenvolver para Android (ver apps desenvolvidos), mas, por falta de grana e oportunidade, nunca tinha mexido com apps para iOS.  Então comprei um  Iphone 3g com alguns problemas,  mas que serve para desenvolvimento – pelo menos é o que espero.

 

Iphone 3g


Ainda estou acabando a dissertação do mestrado então penso em começar a me envolver nisso apenas no próximo mês. Contudo, comecei a procurar um ambiente para desenvolvimento.  Claro que não tenho um Mac a minha disposição então procurei essas VMs que disponibilizam com o iOS instalado, o famoso Hackintosh.

Estou baixando esta imagem aqui que encontrei neste site:
http://thepiratebay.se/torrent/7037731/OS_X_10.8_Mountain_Lion_Developer_Preview_1_%28Fixed%29

Como gosto de utilizar o virtualbox e a imagem está num formato de disco do mac, eu irei utilizar o anytoISO para converter em ISO e utilizar no meu vbox  irei utilizar o UtraISO para converter em imagem ISO.

Rodrigo Lira,

 

 

Last week, I achieved the Microsoft Specialist: Programming in HTML5 with JavaScript and CSS3 Specialist certification.

Certificado Rodrigo Lira (Programming in Html 5 with Javascript and CSS3)

Now, I will share everything I’ve used to study for it.  There are many files about css 3, JS and HTML 5. I’m also sharing two documents with many questions and their answers.

https://dl.dropboxusercontent.com/u/5992545/Blog/tecweb.zip

Rodrigo Lira,

Flask is pretty awesome! It’s so simple. I’ve worked with Django and was nice, but flask seems really funny. Nowadays, i’m developing an app just for fun using Flask. Actually, It will be a new feature to http://calc.coeus.com.br . Well, bellow there is a tutorial about Flesk.

http://flask.pocoo.org/

RL

Many fellas ask me: “why should I learn Python?” so I solved to list a lot of reasons.

Python is the most excited language I’ve ever worked. I use Python since 2008, actually I started to study python since my first year on the graduation. It was funny because I was studying C and Python shows up so easy. I remember which I had many problems with semicolon. Six years passed and now, Python is stronger. So, let me show you some reasons for u use Python:

  • Python is easy and it is clear. You don’t need to waste time with monkey jobs. You just need to develop what you want.
  • Many companies use Python like NASA, GLOBO (Brazil) , M$, APPLE, DISNEY, DROPBOX, GOOGLE… believe Python is everywhere.
    • “Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we’re looking for more people with skills in this language.” said Peter Norvig, director of search quality at Google, Inc.  See more.
  • Object-Oriented Programming or Functional Programming or Imperative programming. You don’t need to choose it. You can use all it with Python. Lambda, map, filter, zip… I love it.
  • The Python interpreter allow you test code snippets very quickly. Actually, if you are using Python on Linux, you should install bpython.
  • There is no company behind Python (like Java has) but there is a huge community. Actually, community is the most cool thing when is talking about opensource.
  • Python is now the the most popupar introductory  teaching language at top US universities because it is powerfull and easy to learn it.
  • Also, Python won twice the “Programming language of the year” created by the TIOBE and according the IEEE, Python is the 4th language most popular.
  • There are a lot of content on the web to study. See my page.

So, listen to me. You should learn it, man! I will increase that list but for while it is enough.

RL

 

Recently, I implemented the Fish School Search II for a discipline on my master degree.
FSSII is an optimization algorithm proposed by Carmelo et all. Actually, it is a version improved of the Fish School Search. That version was proposed last year in the BRICS conference.

Paper: “An Enhanced Fish School Search Algorithm”,
Authors: C. J. A. Bastos-Filho, D. O. Nascimento.
Conference: BRICS 2013, Porto de Galinhas, Brazil. http://brics-cci.org/

I implemented to solve the Rastrigin’s and Sphere’ problem but is very simple to extend for other one. It is a Python code so it is very easy to understand it. I guess I have the code implemented in C++ but I need to find in my stuff.

https://dl.dropboxusercontent.com/u/5992545/Blog/FSS2.py

 

No meu trabalho de Reconhecimento de padrões, eu precisei utilizar uma base que me fornecia imagens como vetor de bits. Por exemplo, o f  era representado pelo seguinte vetor:

0000000000000000000001111110000
0000000000000000000001111111100
0000000000000000000001111111110
0000000000000000000001111111111
0000000000000000000111111111110
0000000000000000000111111111110
0000000000000000000111111111111
0000000000000000000011111111111
0000000000000000000111111111111
0000000000000000001111111111110
0000000000000000000111111111111
0000000000000000000111111111111
0000000000000000000111111111111
0000000000000000001111111111111
0000000000000000001111111111111
0000000000000000011111111111110
0000000000000000011111111111110
0000000000000000011111111111100
0000000000000000011111111111100
0000000000000000001111111111100
0000000000000000011111111111000
0000000000000000011111111111000
0000000000000000011111111111000
0000000000000000111111111111000
0000000000000000111111111110000
0000000000000111111111111100000
0000000000011111111111111000000
0000000000011111111111111000000
0000000000111111111111111000000
0000000011111111111111111000000
0000001111111111111111110000000
0000011111111111111111110000000
0000111111111111111111110000000
0011111111111111111111110000000
1111111111111111111111110000000
1111111111111111111111111000000
1111111111111111111111111000111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111110000000111111111111111111
1111100000000111111111111111111
1100000000000011111111111111111
0000000000000001111111111111111
0000000000000001111111111111110
0000000000000000111111111111000
0000000000000001111111100000000
0000000000000000111111110000000
0000000000000000111111110000000
0000000000000000111111110000000
0000000000000000111111111000000
0000000000000000111111111000000
0000000000000000111111111000000
0000000000000000111111111100000
0000000000000000111111111110000
0000000000000000111111111110000
0000000000000000111111111111000
0000000000000001111111111110000
0000000000000000111111111111000
0000000000000000111111111111000
0000000000000000111111111111100
0000000000000000011111111111100
0000000000000000111111111111000
0000000000000000011111111111100
0000000000000000011111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000000111111111100
0000000000000000000011111111100
0000000000000000000011111111100
0000000000000000000001111111100
0000000000000000000000111111100
0000000000000000000000001111100

Infelizmente, eu estava utilizando uma framework que necessitava receber a imagem e não o vetor de bits que é extraído dela. Logo, eu tinha que dá um passo pra trás pra puder dá dois pra frente.

Fazendo uma pesquisa na internet, encontrei uma função do scipy que fazia exatamente o que eu queria.  scipy.misc.imsave cria uma imagem a partir de um array da classe numpy.

A partir disso, eu criei o seguinte código:

#!/bin/bash

import scipy
import numpy

def create_bynary_image(binary_content, output_name):
    letter = open(bynary_content)
    bits_image = []

    for line in letter:
        bits_image.append(map(lambda x: int(x), list(line.replace('n',''))))

    np_array = numpy.array(bits_image)
    letter.close()
    scipy.misc.imsave(output_name, np_array)

if __name__ == '__main__':
    create_bynary_image('letter.txt', 'f.png')
   

Abaixo o conteúdo de letter.txt que é usado no exemplo.

0000000000000000000001111110000
0000000000000000000001111111100
0000000000000000000001111111110
0000000000000000000001111111111
0000000000000000000111111111110
0000000000000000000111111111110
0000000000000000000111111111111
0000000000000000000011111111111
0000000000000000000111111111111
0000000000000000001111111111110
0000000000000000000111111111111
0000000000000000000111111111111
0000000000000000000111111111111
0000000000000000001111111111111
0000000000000000001111111111111
0000000000000000011111111111110
0000000000000000011111111111110
0000000000000000011111111111100
0000000000000000011111111111100
0000000000000000001111111111100
0000000000000000011111111111000
0000000000000000011111111111000
0000000000000000011111111111000
0000000000000000111111111111000
0000000000000000111111111110000
0000000000000111111111111100000
0000000000011111111111111000000
0000000000011111111111111000000
0000000000111111111111111000000
0000000011111111111111111000000
0000001111111111111111110000000
0000011111111111111111110000000
0000111111111111111111110000000
0011111111111111111111110000000
1111111111111111111111110000000
1111111111111111111111111000000
1111111111111111111111111000111
1111111111111111111111111111111
1111111111111111111111111111111
1111111111111111111111111111111
1111110000000111111111111111111
1111100000000111111111111111111
1100000000000011111111111111111
0000000000000001111111111111111
0000000000000001111111111111110
0000000000000000111111111111000
0000000000000001111111100000000
0000000000000000111111110000000
0000000000000000111111110000000
0000000000000000111111110000000
0000000000000000111111111000000
0000000000000000111111111000000
0000000000000000111111111000000
0000000000000000111111111100000
0000000000000000111111111110000
0000000000000000111111111110000
0000000000000000111111111111000
0000000000000001111111111110000
0000000000000000111111111111000
0000000000000000111111111111000
0000000000000000111111111111100
0000000000000000011111111111100
0000000000000000111111111111000
0000000000000000011111111111100
0000000000000000011111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000001111111111100
0000000000000000000111111111100
0000000000000000000011111111100
0000000000000000000011111111100
0000000000000000000001111111100
0000000000000000000000111111100
0000000000000000000000001111100
e o resultado foi

teste

RL

 

Caminhos relativos já me deram muita dor de cabeça quando eu coloco um script para ser executado via CronJob. Como o script é executado de um caminho que não é a pasta dele, o output acaba sendo criado numa outra pasta.

A forma mais simples que achei para contornar essa situação é forçar o output a ser criado na pasta que o script está no disco. Contudo, essa localização pode mudar e não pode ser adicionada hardcode no script, logo ela tem que ser obtida dinamicamente.

#/bin/bash
SCRIPTPATH=$( cd $(dirname $0) ; pwd -P )

#usage
log_file=$SCRIPTPATH/log

echo "Logging" | tee -a $log_file