I’ve had the chance to troll Donald Trump. But I didn’t.

Trump_3
The craziest thing that could possibly happen on my professional life as a Software Engineer happened on August 18th, 2016. That day I discovered that I could perform a massive Rick Roll attempt against the US presidential candidate Donald Trump.

 

The crazy story begins with an unexpected e-mail from a guy named Shu Uesugi – a San Francisco based Engineer currently working for EdSurge – asking for permission to mention my name and share to the world what he just discovered.

After reading his e-mail and his draft I was like:

The short story is that Donald Trump has a donate page which is using my open-source project jQuery Mask Plugin to guide his visitors on the tricky quest of filling up web forms – so far so good.

The shit hits the fan when the developer of his 2MM dollars website decides to include the minified version of jquery mask plugin file pointing directly to the demonstration page of my project (hosted in github.io). I have 100% control over this file and the developer simply injected the file on the page (instead of saving the file on his servers) and I could just replace or inject something nasty in it to make the most ambitious trolling attempt against the US presidential candidate.

Yet, in shock, I decided to share this with my personal friends on Facebook:

In only MY post I got 714 likes, 139 comments and an impressive 262 shares, hundreds of people randomly sending me friend requests, sending me messages on Twitter, Facebook and e-mails… giving me ideas and warning me about the window of opportunity that I got to do something about Trump. People really liked the possibilities of what Uesugi discovered . At the end of the post I asked for ideas of what each person would do if they were in my position – oh boy… that was fun!

All of the sudden I became some sort of super-man with a power that could change the world. People were like… DO IT! DO IT! Say something! Make a beautiful rain of penises with wings upon his website! And I was like… Wow… People really want to say something to this guy…

They even opened a hilarious pull request on their own, pure team work, in attempt to do something and hoping I’d merge it (sadly it was deleted).

The discovery was discussed everywhere:

After watching all this, receiving all those tweets, messages and emails showing nothing but pure hate love towards Trump. Of course, the bad news spreads fast and in a matter of hours the code on Trump’s website was fixed. People were in tears. e.g:

Screen Shot 2016-08-21 at 11.21.18 PM

Then I posted this on twitter:

Screen Shot 2016-08-21 at 11.18.18 PM

Yep. At the bottom of your heart you agree with me that this would be wrong. jQuery Mask Plugin is a serious project which took years of hard work and commitment to the community to build its reputation. I can’t just throw it all away for the public’s amusement. To make people laugh. To make a statement against someone – even if this someone is a US presidential candidate like Donald Trump.

Screen Shot 2016-08-21 at 11.22.27 PM

The true sad history behind this is that Donald Trump’s website cost 2MM dollars, they are using several open sourced projects like our jQuery Mask Plugin and they don’t even donated 1.00 freaking dollar in our donate page to support its development.

Posts Relacionados:

Deploying Sendy Using AWS ElasticBeanstalk and Docker

sendy-300x118In this post I’m going to guide you through a step-by-step on how to deploy your Sendy installation using AWS ElasticBeanstalk and Docker. Keep in mind that this is a production ready setup so brace yourself.

The AWS Resources

Here is a list of what you need to do before going ahead.

  1. Create an ElasticBeanstalk Application (e.g Sendy).
  2. Create an ElasticBeanstalk Environment (e.g sendy-production).
    1. You can deploy the Sample Application for now.
    2. Once your environment is created make a note of your Environment ID located on your environment dashboard right beside your DNS entry. (e.g Environment ID: e-xxxxxxxxxxx).
  3. Create a EC2 Security Group to be used by your RDS MySQL Instance (e.g: rds-sendy-production).
    1. Inbound: Open this tab and make sure you allowed your ElasticBeanstalk Instances can reach your RDS. To do so you need to locate the name of the Security Group created by your ElasticBeanstalk Environment. Just go to your EC2 Security Groups Section. And locate the ID of the security group that possessed your ElasticBeanstalk Environment ID.
    2. It will look kind of like this:
    3. You need to do that because your environment is elastic and every new created instance needs to inherit its permission to access the RDS instance.
  4. Create your RDS MySQL instance and attach the EC2 Security Group created on the previous step. Further configurations is up to you.
  5. Create a SSD or Magnetic Volume on the same Availability Zone of your Elastic Beanstalk Environment Instances. Attention to the availability zone or your deployment will fail because EC2 Instances can’t attach volumes outside of its availability zone. After doing that take a note on your Volume ID (e.g vol-XXXXXXXX).
  6. Install the awsebcli.

The Deploy Setup

Assuming that you’re already inside your Sendy’s folder you need to create a few files.

Dockerfile

FROM php:7.0.8-apache

RUN a2enmod rewrite && \
    docker-php-ext-install mysqli gettext

ENV APP_HOME /var/www/html

WORKDIR $APP_HOME
COPY . $APP_HOME

EXPOSE 80

Notice that I’m using the official php + apache2 docker image. I need to create my own Dockerfile because of Sendy’s dependencies like mysqli and gettext.

.elasticbeanstalk/config.yml

branch-defaults:
  default:
    environment: sendy-production
global:
  application_name: sendy
  default_ec2_keyname: YOUR-EC2-KEYNAME
  default_platform: Docker 1.11.1
  default_region: us-east-1
  profile: null
  sc: null

This file is important when your are about to deploy your application to ElasticBeanstalk.

Dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1",
  "Ports": [
    {
      "ContainerPort": "80"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/uploads",
      "ContainerDirectory": "/var/www/html/uploads"
    },
    {
       "HostDirectory": "/session",
       "ContainerDirectory": "/var/www/html/session"
    }
  ],
  "Logging": "/var/log/apache2/"
}

Ports: By default apache is running on port 80, no big deal here.
Volumes: The most important thing to notice on the code above is those “Volumes”. Sendy uses the the uploads/ directory to save everything you upload to its system so it’s very important for you to have those volumes mapped from the Docker Host into your containers to make sure that in case you need to restart your containers you don’t lose your persisted data (docker containers are stateless!).

The /session:/var/www/html/session is because it is where php is saving logged user sessions. Its better to save sessions outside of the application container. It make sure that every new deployment you don’t need to clean your cookies and login again (it sucks, I know!).

.ebextensions/container_commands.config

container_commands:
  01mount:
    command: "aws ec2 attach-volume --region us-east-1 --volume-id YOUR_VOLUME_ID_HERE --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --device /dev/xvdf"
    ignoreErrors: true
  02wait:
    command: "sleep 20"
  03mkdir:
    command: "mkdir /uploads"
    test: "[ ! -d /uploads ]"
  04trymount:
    command: mount /dev/xvdf /uploads
    ignoreErrors: true
  05format-if-not-already:
    command: if find /uploads -maxdepth 0 -empty | read v; then mkfs -t ext4 /dev/xvdf; fi
  06mount:
    command: "mount /dev/xvdf /uploads"
    ignoreErrors: true
  07fix_public_dirs:
    command: "chmod -R 777 /session && chmod -R 777 /uploads"
    ignoreErrors: true

01mount: Replace the YOUR_VOLUME_ID_HERE by your Volume ID created before. Also make sure that –region us-east-1 is correct. This file will make sure that we will be using the Volume created earlier exclusive to our uploads and your data will never be lost in case you explode your machine somehow.
02wait: The commend aws ec2 attach-volume is async so we need this otherwise further commands would fail.
03mkdir: Create the /uploads dir in case it doesn’t exists.
04trymount and 05: When you first create a EC2 Volume you need to make sure that it has a file system in it so this is what it does.
06mount: Uses the Volume we created for the /uploads folder.

.ebextensions/files.config

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/files.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      set -x
      docker run -v /uploads:/var/www/html/uploads --rm aws_beanstalk/staging-app chown -R www-data: /var/www/html/uploads
  "/opt/elasticbeanstalk/hooks/appdeploy/enact/rewrite_nginx_config.py":
    group: root
    owner: root
    mode: "000755"
    content: |-
      #! /usr/bin/python

      """
      Modifies nginx configuration file on AWS Elastic Beanstalk to support WebSocket connections.
      """

      import os
      import re

      VERSION="v1.0.4"
      NGINX_CONF_FILE = '/etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf'
      NGINX_CONFIG = """
      # nginx.conf
      # v1.0.4

      map $http_upgrade $connection_upgrade {
        default   "upgrade";
        ""      "";
      }

      server {
        listen 80;

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        client_max_body_size 100M;

        location ~ "^/assets/" {
          root /var/app/current/public;
          gzip_static on;
          expires max;
          add_header Cache-Control public;
          add_header ETag "";
        }

        location / {
          proxy_pass      http://docker;
          proxy_http_version  1.1;

          proxy_set_header  Connection           $connection_upgrade;
          proxy_set_header  Upgrade              $http_upgrade;
          proxy_set_header  Host                 $host;
          proxy_set_header  X-Real-IP            $http_x_real_ip;
          proxy_set_header  X-Forwarded-For      $http_x_forwarded_for;
        }
      }
      """

      def has_same_nginx_file_version():
        f = open(NGINX_CONF_FILE, "r")
        conf = f.read()
        ret = re.search(VERSION, conf)
        f.close()

        return ret != None

      def write_nginx_conf_file():
        f = open(NGINX_CONF_FILE, "w")
        f.write(NGINX_CONFIG)
        f.close()

      def restart_nginx():
        print("-- service nginx restart")
        os.system("service nginx restart")

      def main():
        if has_same_nginx_file_version():
          print("-- already configured, do nothing.")
        else :
          write_nginx_conf_file()
          restart_nginx()

      if __name__ == "__main__":
        main()

The file above is necessary because apache runs your application with www-data user and this user doesn’t exists on your Docker Host. And the second file is for overwriting nginx’s beanstalk configuration for accepting upload of bigger files.

includes/config.php

/* MySQL database connection credentials (please place values between the apostrophes) */
$dbHost = $_ENV['MYSQL_DATABASE_HOST']; //MySQL Hostname
$dbUser = $_ENV['MYSQL_DATABASE_USER']; //MySQL Username
$dbPass = $_ENV['MYSQL_DATABASE_PASSWORD']; //MySQL Password
$dbName = $_ENV['MYSQL_DATABASE_NAME']; //MySQL Database Name

.htaccess
Add these to your .htaccess file:


# for enabling upload of bigger CSV files
LimitRequestBody 104857600
php_value max_execution_time 0
php_value post_max_size 60M
php_value upload_max_filesize 50M

# to avoid session problems originally saved to /tmp.
php_value session.save_path '/var/www/html/session'

Make sure that you are using environment variables on that file so we can inject them into your ElasticBeanstalk Environment.

Set your database configuration as Environment Variables

eb setenv MYSQL_DATABASE_HOST="XXXX" MYSQL_DATABASE_USER="XXXX" MYSQL_DATABASE_PASSWORD="XXXX" MYSQL_DATABASE_NAME="XXX" -e sendy-production

Deploy it

Commit your changes and then:

eb deploy sendy-production

Boom! Now make sure that you follow Sendy’s Guide Lines in order to setup your app correctly.

Let me know if you have any questions on the comments section bellow. Maybe some detail is missing and I could add it to the post. Remember! Sharing is caring! ;-D

Posts Relacionados:

Farewell Brasil… Hello Portugal!

Hi. My name is Igor Escobar and I’m a Software Engineer at Hole19 Golf. As many of you already know, I recently made a life changing decision of which I would love to talk about with you.

Before going through the why’s, I need you to understand I little bit about me so you can follow my reasoning on why I did leave Brasil.

I started into programming when I was 13 years old. Loved it since the first time I laid eyes on those crazy computer instructions. Did all kinds of crazy computer programs you can imagine and I’ve learned that magical things only happen way out of your comfort zone.

This motto not only tells a lot about myself but also tells a lot about our mindset and the kind of challenges that we are able to pursue. I’ve always dreamed big, always pictured myself out there, living this dream of endless freaking awesome challenges.

A few months ago I stumbled on the opportunity of joining a Portugal based startup called Hole19 Golf. I can tell you that it wasn’t an easy decision.

Some of you would call me crazy for leaving Brasil (some of you definitely wouldn’t), but not everyone has the courage needed to put your entire life upside down… leaving your family, selling everything you once possessed, job, home (~/) and my wife (also a dog) for endless 4 months.

When this kind of opportunity appears in your life you can’t think just about yourself. You need to think about your family, your future, is it worth it? Does Portugal have better safety conditions, education? Will my kids have a better life there? For many of you It may sound like “it’s just a job, not worth it!” but in my head it sounded completely different.

I saw an entire new world opening before my eyes. Portugal in 2016 held the 13th position in terms of Quality of Life right after Finland and United States which holds the 12th position. Portugal has better qualify of life compared with amazing places like UK, Canada, Japan, France, Ireland, Italy and the list goes on! Where is Brasil on that list? 45th place… right next to India, Iran, Pakistan, Singapore etc.

As hard as it may be… For the sake of my future family of 3 kids and two dogs… I really believed that a huge shiny door was opening for me.

It’s been 5 months since I left Brasil and started a whole new life in Portugal as a Software Engineer at Hole19 Golf and I feel morally obligated to tell you about how my life’s going in Lisbon/Portugal and how it’s like to be working for Hole19.

Life in Lisbon/Portugal

Instead of going through all the aspects of living in Portugal I rather talk about a few things that most impressed me on a daily basis.

Safety

When I moved to Lisbon I discovered that I’m a guy who likes to walk around. Day and night. This is impossible in Brasil if you don’t live in a private condo with security cameras, high walls or electrified fences. Lisbon proved to be a very nice place to walk around and discover the city. It felt really safe and you can walk around anytime, day or night, and still get home safe with all pieces in place. Also, if you value living in a nice house close to the ocean or with green areas everywhere, Portugal fits you well and you don’t have to sell one of your kidneys for it or drive for a hundred hours to get to work.

Beauty and people

Lisbon is beautiful and it surprises me every time I go for a walk, day or night. The portuguese are known for being quite surly, but all I can say is that in Lisbon I was always well attended, so I didn’t feel any of that so called rudeness. Of course, you can relate that to the fact that Lisbon is a big city and full of tourists and that influences how portuguese treat visitors.

Pictures above were all taken by me. Most of those places you can visit by just walking around. These are just a few places that I’ve been for this very short period living here. It’s amazing(!).

food

If you think you’re coming to Lisbon and you’re not putting on some extra pounds, you’re wrong. The variety of restaurants here is impressive. And to make it better you eat very well and pay fair prices for it. I guarantee that eating well won’t be an issue for you. This made things easier for me, considering that brazilian food is really good and that my first four months I was living by myself.

weather

For me, this is a huge positive point. Lisbon is cold in the winter but not FREAKING ICE AGE like in other countries and it’s very nice in the summer. The only thing you need to be aware is the pacific freaking cold ocean incluencing the Tejo River.

Public Transportation

In my opinion it works perfectly. We got buses, trams, funiculars, subway, trains and boats. I could go anywhere I wanted using them for very affordable rates.

And these were the aspects that impacted me the most in this time frame.

Life and Work at Hole19

Since the first moment I decided to join Hole19 they started to be like a family to me. They took care of every aspect of my moving to Portugal like documentation, plain tickets, costs, temporary place to stay, everything! They even picked me up at the airport, by the way.

And it’s been like a family ever since. We work and we work hard to connect the world of golf! Together we were able to accomplish amazing things! Even more that I could ever imagine. Our team is incredibly passionate and talented. We are so focused on our mission that you can’t even think about doing poor work – its like everybody is watching and this is amazing!

2016-01-28 16.41.47

It really feels like we are all part of a huge mission (it really has been). If you don’t like to work on a world class product used by 1M people, across 154 countries and 14 languages, to create highly performant applications, solve scale issues, work on recommendation/search algorithms, social connections with Graph databases, to process several thousands of requests per second, to deal with payments, (No)SQL/in memory databases, streaming data processing/transformation/aggregation, distributed architectures, math problems, to create technology for mobile/wearable devices, to use the right programming language to solve the problem, to use containers, continuous integration and deployment and to create APIs… this is definitely NOT the place for you.

It has been an exciting ride for me. I’ve always been a guy that thinks that with the right people, hard work and a huge load of passion you can accomplish anything. So I think we’re on the right track.

This post is also available on Medium.

Posts Relacionados:

  • Nenhum post relacionado!

Adding and removing remote branches

Today I’m going to share another git’s trick to easily set up a remote branch and how to delete them from the remote branch.

Frequently we have to work parallelly to master branch on an exciting feature of your product, right? More often then this is sharing it so your co-workers can contribute and make it even more exciting.

Adding remote branches

The problem is that every time that you create a new branch it’s created locally and you can’t just push your changes because git doesn’t know where to push it. Git stores your branch’s configuration on your .git/config file like this:

[branch "ftw_feature"]
  remote =
  merge =

You can solve this problem manually, every goddamn time setting branch’s remote configurations in .git/config file or if you’re working with git’s version 1.7+ you can use the –set-upstream flag instead.

git branch --set-upstream ftw_feature origin/ftw_feature

Now, just like magic your .git/config file should look like this:

[branch "ftw_feature"]
  remote = origin
  merge = refs/heads/ftw_feature

Or if your you’re sadly running under 1.7 git’s version you can still do a better approach than manually (or not too verbose for me):

git config branch.ftw_feature.remote origin
git config branch.ftw_feature.merge refs/heads/ftw_feature

Removing remote branches

If somehow you screw things up and have to clean the mess before anyone notices, just type:

git push origin :ftw_feature

Or even more intuitive:

git push origin --delete ftw_feature

That does the job.

Posts Relacionados:

  • Nenhum post relacionado!

Masks With jQuery Mask Plugin

Today is the oficial release of the version 0.4.3 of my jQuery Mask Plugin. Since I have never written about it before on this blog, I’ll teach you guys how to use it and some other cool features about it.

Downloading the code

 wget https://github.com/igorescobar/jQuery-Mask-Plugin/blob/master/jquery.mask.min.js 

The only thing that you guys need to do is include the javascript file of the plugin between the head tag in your HTML document and it’s all set to use.

The syntax

The jQuery Mask Plugin syntax is pretty simple. First, you input your  selector, followed by the .mask and then as a parameters you have to put the mask that you want the plugin to apply on the form field.
Example

$(document).ready(function(){
  $('.date').mask('00/00/0000');
});

In this example the mask 00/00/0000 will be applied in all the input fields that have the “.date” class. At jQuery Mask Plugin you don’t have pre-established masks, you choose the mask as you wish. On the website project you can see the jQuery Mask Plugin running with some others examples like this:

$(document).ready(function(){
$('.date').mask('11/11/1111');
  $('.time').mask('00:00:00');
  $('.date_time').mask('00/00/0000 00:00:00');
  $('.cep').mask('00000-000');
  $('.phone').mask('0000-0000');
  $('.phone_with_ddd').mask('(00) 0000-0000');
  $('.phone_us').mask('(000) 000-0000');
  $('.mixed').mask('AAA 000-S0S');
  $('.cpf').mask('000.000.000-00', {reverse: true});
  $('.money').mask('000.000.000.000.000,00', {reverse: true});
});

As you can see, it’s possible to define other data type on each digit of the mask. This mask for example:

$('.mixed').mask('AAA 000-S0S');

The user can type a sequence of three alpha numeric characters, followed by space, three numeric characters, a slash, one string character, other number character and finally one string character, cool isn’t it?

Again, you can define the mask as you wish and the data type of each digit of the mask as well.

Features

  • Lightweight (~2kb minified, ~1kb gziped).
  • Masks on any HTML element!
  • data-mask attribute support.
  • String/Numeric/Alpha/Mixed masks.
  • Reverse mask support for masks on numeric fields.
  • Sanitization.
  • Optional digits.
  • Digits by range.
  • Automatic maxlength.
  • Advanced mask initialization.
  • Callbacks.
  • On-the-fly mask change.
  • Mask removal.
  • Customization.
  • Compatibility with Zepto.js

More about jQuery Mask Plugin

  1. jQuery Mask Plugin on Github
  2. Demonstration
  3. jQuery Mask Plugin
  4. All versions of jQuery Mask Plugin

Any problems, please, let me know.

Help us!

Click here to lend your support to: jQuery Mask Plugin and make a donation at pledgie.com !

Posts Relacionados:

Detectando Requisições Ajax com PHP

É bem comum trabalharmos com requisições Ajax que batem em um servidor rodando alguma aplicação PHP. O problema é que as vezes utilizamos o mesmo método para atender tanto a arquitetura do seu sistema quanto as requisições que são feitas via Ajax.

Por exemplo: Temos um objeto PHP que tem como objetivo recuperar todas as notícias cadastradas na base de dados.

<?php
class MinhaClasse {
    public function getAllNews(){
        // implementação para receber as notícias
        
        return $news;
    }
}
?>

Como eu faço para que este mesmo método supra as minhas requisições Ajax sem que eu tenha que criar outro?

É bem comum vermos por aí programadores criando dois objetos diferentes para atender as duas necessidades (aplicação e Ajax). Sendo que a única diferença entre eles é como o método retorna.

Podemos utilizar o mesmo método e fazer com que retorne de forma diferente dependendo de como eu estou chamando o método.

Vamos criar um método chamado isAjax():

public function isAjax(){
        return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
    }

Funciona de forma simples: Sempre que uma requsição Ajax é disparada um header é setado nesta requisição chamada HTTP_X_REQUESTED_WITH e o valor dela é setado como XMLHttpRequest.

Desta forma a nossa classe ficaria assim:

<?php
class MinhaClasse {
    public function isAjax(){
        return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
    }
    public function getAllNews(){
        // implementação para receber as notícias
        // ..
        
        // se o metodo for invocado via Ajax, retorne um JSON
        if($this->isAjax()) {
            echo json_encode($news);
        } else {
            return $news;
        }

    }
}
?>

Veja que se a requisição for feita via Ajax o método dar um echo JSON de $news. Se o método for invocado de qualquer outra forma ele irá retornar normalmente.

É isso. Post rápido, pá pum 😀

[]’s
Igor.

Posts Relacionados:

  • Nenhum post relacionado!

Redes Sociais Aplicada no Desenvolvimento de Aplicações Web

Com a Internet cada vez mais presente na vida de todos, as redes sociais estão ganhando força (muita força). A influência de uma marca nas redes sociais já pode ser convertida em lucro e a grande maioria das empresas já perceberam isso. Essas redes têm sido alvo de muitas empresas para fidelizar e conquistar novos clientes através de ações geniais e muito criativas.

Assim como qualquer outra profissão, as coisas mudam. As tendências mudam. As metodologias mudam. As tecnologias mudam. Tudo muda. Inclusive os desejos e prioridades de nossos clientes. Atualmente as empresas querem estar cada vez mais presentes na vida de cada um de seus clientes. FacebookTwitterOrkutYouTube, etc.. está tudo muito comum e nós precisamos aprender a interagir com estas comunidades para poder dar possibilidade ao seu cliente e potencializar a possibilidade de conversão.

Se você não está familiarizado com o termo “conversão”, podemos dizer que conversão é quando você anuncia e este anúncio é clicado. Isso é chamado de conversão.

O motivo para eu estar aqui hoje, falando sobre redes sociais para vocês, é para dar um puxão de orelha nos profissionais que ainda não estão dando a mínima para este novo (nem tanto assim) conceito de interação. As redes sociais são mais um leque de aplicações que surgiram com a web 2.0. Neste boom, o conceito de interação foi explorado em uma escala muito maior. Junto com todas as inovações e as modificações na forma como interagimos com os sites e aplicativos web hoje, a web 2.0 trouxe o que chamamos hoje de redes sociais.

O meu foco com este post é evangelizar. É fazer com que após você ter lido este post você comece a criar já pensando na integração com as redes sociais. Não faz ideia de como?

Vou te dar algumas ideias:

  • Já pensou que nas notícias do seu site poderia ter a possibilidade dos usuários comentarem nas notícias e replicarem o seu comentário para o Twitter?
  • Os comentários estão protegidos por login? Use o usuário do Twitter do seu visitante para possibilitar mais uma alternativa de autenticação.
  • Upload de vídeos? Dê uma folga para o seu data storage e faça o upload direto para o YouTube e busque as informações através da API.
  • Quer fazer transmissão ao vivo para os seus visitantes? Utilize toda a interação que ferramentas como o Twitcam oferecem para você.
  • Crie aplicativos para Orkut, Facebook e Smarthphones. Os seus usuários poderão ter um nível de interação muito maior e a experiência deles será muito mais rica.
  • Dê a possibilidade do usuário divulgar suas notícias, fotos, albuns e vídeos através das redes sociais que eles participam.
  • Crie aplicações onde o seu usuário possa acompanhar as atualizações das suas redes sociais através da aplicação da sua empresa ou start-up.

Essa lista pode crescer muito ainda. O importante é você ter a criatividade e começar a incluir as redes sociais no planejamento do novo produto ou site da sua empresa ou cliente.

[]’s
Igor.

Posts Relacionados:

  • Nenhum post relacionado!

Feliz Dia Do Programador!

Esta é uma data nerd especial!

O Dia do Programador (em russo: День программиста) é um feriado profissional oficial na Rússia, celebrado no 256º dia do ano (255º dia, se 1 de janeiro for considerado o dia 0). O número 256 (28) foi escolhido para esta data porque 256 é o número de valores distintos que podem ser representados com um byte de oito bits, um número bem conhecido entre os programadores.

Além disso, ‘256’ em hexadecimal é ‘100’ (‘0x100’), e é a maior potência de 2 abaixo de 365 (o número de dias em um ano). Nos anos bissextos, a data comemorativa é 12 de setembro (13 de setembro em outros anos).

http://pt.wikipedia.org/wiki/Dia_do_programador
Parabéns para nós!

[]’s
Igor.

Posts Relacionados:

  • Nenhum post relacionado!

Torne-se excelente.

Olá pessoal!

Sem muito tempo para postar. Me deparei com um link que estava perdido aqui no meio das minhas coisas que não entendo como não divulguei ele aqui para vocês. O texto é excelente. Fala muito sobre o nosso trabalho e sobre como podemos conduzir nossas vidas. Se você é um profissional ou quer se tornar um da área de Internet, você não pode deixar de ler o que vem a seguir:

By Klaus Wuestefeld

1) Torne-se excelente.

Seja realmente bom em alguma coisa. Não fique só choramingando ou
querendo progredir às custas dos outros. Não pense q pq vc sentou 4
anos numa faculdade ouvindo um professor falar sobre software q vc
sabe alguma coisa. Jogador de futebol não aprende a jogar bola tendo
aula. Ele pratica. Instrumentistas geniais nao aprendem a tocar tendo
aula. Eles praticam. Pratique. Chegue em casa depois do trabalho e da
aula e pratique. No final de semana, pratique.

Crie seu próprio virus, seu proprio jogo, seu proprio SO, seu proprio
gerenciador de janelas, seu proprio webserver, sua propria VM, qq
coisa. Varias coisas.

Nao precisa ser só programacao. Pode ser networking, vendas, etc. Só
precisa ser bom mesmo. Tenha paixão pela coisa.

As melhores praticas do mercado sao polinizadas primeiro nos projetos
de software livre. Aprenda com eles.

Discípulo, Viajante, Mestre: Primeiro seja um discipulo, tenha mestres
locais, aprenda alguma coisa com alguem realmente bom, qq estilo.
Depois viaje, encontre outros mestres e aprenda o estilo deles. Por
fim, tenha o seu estilo, tenha discípulos, seja um mestre.

Vou fazer o curso da Mary Poppendieck em SP semana q vem e qdo tiver o
curso de Scrumban do Alisson e do Rodrigo quero fazer tbem.

"Torne-se excelente" tbem pode ser chamado de "Melhoria Continua" ou "Learning".

2) Não seja deslumbrado.

Desenvolvimento de software é a mesma coisa há 60 anos: modelo
imperativo. Há 30 anos: orientação a objetos. Bancos de dados
relacionais: 30 anos. ("Web", por exemplo, não é uma tecnologia ou um
paradigma. É meramente um conjunto de restrições sobre como
desenvolver e distribuir seu software).

Não corra atras da ultima buzzword do mercado. Busque a essência, os
fundamentos.

Busque na wikipédia e grokke: determinismo, complexidade de algoritmos
"O()", problema de parada de turing. Pronto, pode largar a faculdade.
Falando sério.

Trabalhe com software livre. Não dê ouvidos a grandes empresas,
grandes instituições ou grandes nomes só pq são grandes.

Vc acha q vai aprender mais, ter mais networking e mais chance de
alocação no mercado trabalhando em par comigo no Sneer por um ano, 8h
por semana, ou passando 4 anos na faculdade, 20h por semana, pagando
sei la qto por mes?

Vc acha q vai aprender mais trabalhando em par com o Bamboo 6 meses na
linguagem boo e na engine do Unity ou fazendo um ano de pós em "a
buzzword da moda"?

"Nao seja deslumbrado" tbem é conhecido como "Coolness".

3) Mantenha-se Móvel.

Com a demanda q temos hoje no mercado, se vc é desenvolvedor de
software e n consegue negociar um contrato com uma empresa onde vc é
pago por hora e pode trabalhar qtas horas quiser com um minimo de meio
periodo, vc precisa rever a sua vida.

É melhor ter dois empregos de meio-periodo q um de periodo integral,
pq vc pode largar um deles a qq momento.

Vc nunca vai conseguir nada melhor se nao tiver tempo, se nao tiver
disponibilidade pra pegar algo melhor qdo aparecer.

Vc sustenta seus pais e 7 irmaos? Nao. Entao para de ser ganancioso e
medroso no curto prazo, para de pagar facu, mestrado, pós, MBA,
sei-la-o-q e vai aprender e empreender.

Trabalhe remoto. Não é o mais fácil, mas é perfeitamente possível.

Não fique reclamando q está trabalhando demais. Aumente seu preço e
trabalhe menos.

4) Emparceire-se Promiscuamente.

Participe de dojos, de congressos, de projetos de software livre.
Tenha amigos, colegas, conhecidos. Seja conhecido. Nao faça ruído em
seis  projetos e doze fóruns. Ajude de verdade em um ou dois projetos
de cada vez. Ao longo do tempo, vc terá ajudado em varios projetos,
trabalhado em varias empresas.

5) Mentalidade de Abundância.

Ajude seus amigos sem cobrar (a "camaradagem" do Vinícius). Dê
palestras gratuitas. Cursos gratuitos. Participe de projetos de
software livre.

Pare as vezes uma tarde pra receber um amigo seu e explicar seu
projeto. Vá visitar seus amigos nos projetos deles. Viaje com algum
amigo seu pra visitar um cliente dele, só pra conversar e fazer
companhia.

Vc tem um espaço onde dá cursos? É uma Aspercom, Caelum da vida? Chama
os brothers p dar curso. Porra, bola um modelo em q as pessoas podem
se inscrever para cursos variados, pagando um sinal, e mantém tipo uma
agenda pre-combinada: "Será numa terça e quinta a noite, avisadas com
duas semanas de antecedencia". Se rolar, beleza, se depois de meses
nao der quorum, devolve o sinal. Pode ser curso de Prevayler, de
Kanban, de Scrum, de Lean, de Comp Soberana, de Restfulie, de
Cucumber, de Rails, de Teste Automatizado Mega-Avançado, qq coisa.

Chame amigos seus pra dar curso em dupla com vc. Divida clientes.
Divida projetos, mesmo q nao precise de ajuda.

Dizia o pai de um brother meu de infância: "Tudo q custa dinheiro é barato."

6) Busque modelos de custo zero.

Trabalhe em coisas q tem custo administrativo/burocratico/manutencao
zero. Por menos ganho q tragam, depois de prontas, estarao tendo uma
relação custo/beneficio infinitamente vantajosa.

7) Ganhe notoriedade.

Faça coisas massa. Participe de projetos de software livre. Dê
palestras gratuitas. Promova eventos (dojos, debates, grupos de
usuarios, etc).

By Dairton Bassi:

8 - Não tenha medo!

Meta a cara. Arrisque empreender. Arrisque inovar. O que você tem a perder? 
No máximo um emprego, mas isso pode ser revertido facilmente em um mercado 
aquecido como o atual. O pior que pode acontecer é não dar certo. Mesmo assim 
você terá aprendido muito mais do que batendo cartão.
Saia da zona de conforto. Se o seu trabalho estiver fácil e sob controle, 
isso significa que ele não está mais agregando para a sua evolução técnica e pessoal. 

Não desperdice a chance de trocar de função se a nova oportunidade 
for mais desafiadora. Isso fará você crescer tecnicamente e o preparará 
para desafios maiores ainda. Conhecer pessoas novas é tão importante 
quanto manter-se em contato com código.

Não se detenha por insegurança ou pela sensação de despreparo. 
Como você acha que vai ganhar experiência em alguma coisa se sempre adiá-la?

Posts Relacionados:

  • Nenhum post relacionado!

Mais um Zend Certified Engineer

Mais uma etapa da vida concluída. No dia 19 de julho, ao meio dia, eu me tornei mais um PHP5 Zend Certified Engineer. Não vou te enganar não, não foi fácil. A prova tem muita pegadinha o inglês da prova é bem tecnico e você precisa de muita calma e paciência para fazer a prova.

Após “aquele” cagaço de clicar em “Finish Exam”, eu fechei os olhos, contei até 10. Ao abrir os olhos, vejo a notícia no monitor:

CONGRATULATIONS! YOU’RE NOW A PHP5 ZEND CERTIFIED ENGINEER.

#nerdpride. Enfim, acho que vocês já estão de saco cheio de tanto que eu falo desta certificação aqui no blog. O post é só para comunicar que eu consegui. Afinal, começou!, termina!. Muita gente ficou torcendo por mim deste o começo e nada mais justo do que vir até aqui e anunciar a conquista da mesma forma que eu anunciei a luta.

Obrigado à todos os que me ajudaram nos tempos de estudo e todos os que torceram por mim.

😀 Até o próximo post 😀

Posts Relacionados: