JSONP with Express.js API – cross domain request

The problem:

So you have this awesome API endpoint, but of course it is another domain as the static site.

Web browsers are pretty moody with Cross Domain and there are actually very good security reasons for that, but even using good practices the old Internet Explorer don’t care.

Welcome ancient jsonp techniques!

Solution

For some Express.js API running on Node.js and client using jQuery (or something alike)

In your server:

app.get('/my-unique-endpoint', function(req, res, next) {
  var myAwesomeResource = ["hello", "mundo"];
  if (req.query && req.query.callback) {
    res.set({
      // nice to have, but Chrome dont seem to mind either way
      'Access-Control-Allow-Origin': '*',
      // right content type prevent warnings and errors
      'Content-Type': 'text/javascript; charset=UTF-8',
      // optional, this is in seconds, equivalent to 8h
      'Cache-Control': 'public, max-age=28800'
    });
    return res.send(200, "" + req.query.callback + "(" + JSON.stringify(myAwesomeResource) + ");");
  } else {
    return res.send(200, myAwesomeResource);
  }
});

In the client:

// see the data in your console
$.getJSON("http://myawesomewebsiteurl/my-unique-endpoint?callback=?", function(data){ console.log(data) } )

Caveats

jsonp is works for GET verb, because it effectively execute the code received as if it was downloading a script.
for the same as above, the source should also be fully trusted!

2012 Recap

2012
Early this year.. I had a car, house all for myself on the weekends, a girlfriend, presence of family and friends, had maid once a week, a dog, cheap beer, worked with the tech I like the most and still was not nearly satisfied.

In Canada I live in a small room sharing apartment, am experimenting in new job, have to study, cook and clean for myself, smaller number of friends, no actual family nearby.

To summarize: All I have done was with support of friends and family, I am useless by myself. I can also say for sure that I am growing despite all uncertainties. Back then I had too much in my mouth, after a big cleanup I can see better and crave for more!

Rails e NAMED SCOPE

Depois de trabalhar com eles é difícil voltar ao modelo relacional antigo!

Nada é tão lindo no Rails quanto essa feature, sinceramente, se o ActiveRecord provê uma abstração massa, isso extende ao extase!
É regra de negócio transparente, incluindo JOIN!

Para entender a pira veja: http://railscasts.com/episodes/108-named-scope

Se isso não te convernceu a usar sudo leia:

class Railer < Programador
require 'named scope' or die
p "I fell happier =)"
end

Converting Dia diagram to Ruby StateMachine =)

Hello !!!

After a loooong while I decided to dev something just so I don´t get too rusty!

The concept is: Statemachine is a fine implementation of FSM for ruby (act_as_state_machine is also an option). The author  wrote a nice guide for layperson (or forgetful like me :P) BUT still something is missing! In all examples there are diagrams, those are very necessary for us to understand what to implement in the machine, but a huge one´s mat get really confusing. The solution would be to convert the Diagram into Ruby code!

The plan: Dia is a great and easy to use diagramming tool, win and linux able, it´s save file is in XML.What i´m gonna do is make a JS that is able to parse it´s code and generate ruby =)

Execution:

  1. Make a definition of the simbols accepted by the conversion. Document it (blog).
  2. Understand the .dia XML, what is gonna be used inside?
  3. Make a website that receives a file .dia
  4. Make a response page with the contents
  5. In this page, JS will read, convert (the XML inside .dia) and return a ruby code for the statemachine in a textarea.
  6. In future (since the future is unknown this may never happen..) there will be no upload to the server, a Flash reads the content and return to JS.

Purpose: I love ruby lang, every Computer Science student must at least once use a Finite State Machine, maybe this interface will make things more attractive so he have a taste of ruby programming..

Long automata’s description may be very boring and error prone this should make the assembly easier.

What´s Next ?!

Começando esse novo ano maravilhoso, onde eu jah me sinto formado (apesar de não estar bem exatamente:P) mas me sinto livre.

(Esse post eh uma pequena quebra de paradigma em meu blog! -O qual não deveria tratar assuntos pessoais :P)

Para mim vem junto a aquela felicidade de formando, a sensação de logo sou desempregado.

Porém é como dizem.. aonde um pessimista ve uma dificuldade um otimista vê uma oportunidade! Digamos que eu sou realista 🙂

Estou feliz que em ver algumas oportunidades que posso conciliar com meu TCC que é meu must-do juntamente com o projeto de mestrado no JP até o meio do ano, não sei ainda porem aonde exatamente executar, mas fico feliz que os fatores estão convergindo para a realização de algumas idéias antigas, conciliando com as novas é claro!

Informalmente anunciando o futuro maior nome de WebDesign da web Citrons 😀

A velocidade que evolui a tecnologia

Não sei dizer se esta é uma preocupação privada minha ou ela atinge muitos outros tecnologos, mas parece-me que a tecnologia está evoluindo mais rapidamente do que as pessoas que a utilizam.

Um pouco de história.. por centenas de anos produtores rurais e artesãoes levavam suas vidas com o sustento de seus ofícios, e tinham segurança no que faziam, pois aqueles que produziam tinham a tranquilidade de que as pessoas sempre usariam sapatos, ou consumiriam alimentos, carne etc.. (porém tudo isso fortemente sujeito as imprevisibilidades da natureza)

Fast Foward FF na história.. a  alguns anos atrás, tipo uma década? começou a corrida das linguagens dinâmicas para Web! Fast-CGI, ASP, PHP foram os principais concorentes maduros que eu possa me lembrar. MVC e mapeamento objeto-relacional(ORM) ainda brotando.

Hoje, os projetos de médias e grandes empresas tem por base alguma métodologia de desenvolvimento(AGIL, RUP), um projeto considerado bom certamente faz uso de um bom ORM, um framework, preferencialmente MVC.

Essas mudanças ocorreram em um tempo relativamente pequeno, e em termos de produtividade são excelentes comprovadamente, as metodologias de trabalho, as melhorias de processo de software e tantos mais tecnicas que possam ser citadas em uma empresa. Porém, estas melhorias são complicadas demais de acompanhar, veja, o desenvolvedor que a 5 anos atras era um bom criador de aplicações em PHP ou ASP puro, hoje não acha mais emprego pois não conhece frameworkse suas tecnicas são ultrapassadas, surge logo a faísca “Mas isso é culpa do profissional que não se atualizou!“. Claro, digamos que esse programador que a 10 anos passados era um cutting-edge, hj é um dinossauro, digamos também que ele tinha tanta demanda de trabalho que ele não tinha tempo, vontade ou motivação para qualquer atualização.

Porém minha preocupação é levemente mais egoísta. Estou saindo da faculdade agora, posso me dizer razoavelmente atualizado quanto a desenvolvimento WEB, pois pratico RAILs dry-code, mas quanto tempo minha atualização vai durar? Semana passada comecei a me atentar para o framework Merb que supostamente é mais rapido e logo vai estar na moda, porém outras opções são Djungle e Monorail! Nossa, não se passaram nem 2 anosque Rails ta em alta e já ta sendo passado? Quantas vezes na minha vida vou ter que me atualizar? ou Em que frequência vou ter que atualizar? Será essa frequência está aumentando rápido de mais? Vou ter tempo para fazer isso? Valerá a pena fazer isso ?

Talvez exista algo de muito errado em nosso sistema de produção que vem desde a época da produção em massa, como melhorar a situação?