Um dos maiores e mais interessantes blogs do Brasil, o Efetividade.net, está incentivando que blogueiros desse Brasil escrevam mais sobre a temática de eficiência, produtividade e assuntos relacionados, eu sou leitor assíduo do blog do Augusto Campos e resolvi dar minha contribuição escrevendo sobre “como eu escrevo meus posts”.

É díficil pensar em bons assuntos para publicar, mas acredite, quando eles vêm, dificilmente será quando você sentar no computador e resolver escrever um post, por experiência própria e de outros, as boas ideias sempre surgem quando você menos espera, é interessante que você tenha sempre a mão uma forma de anotar suas ideias para serem repassadas posteriormente, com mais calma e atenção.

É importantíssimo não perder essas ideias ou “insights” que surgem no caminho do trabalho, no banheiro :-P, na escola (naquela aula chata que você não quer prestar atenção), etc. Tenha em mente que a melhor forma de guardar essas ideias sempre será a forma que mais lhe for mais confortável e habitual, um artigo interessante que mostra uma abordagem de como tomar notas é o “Como tomar notas com efetividade” do Augusto Campos e eu recomendo sua leitura.

Passada a fase de “sobre o que escrever” vamos para a publicação. Eu sempre procuro fazer um esquema inicial de como o post irá se apresentar.

Esse esquema deverá resumir, em tópicos, qual a sua intenção do que você deseja escrever, e também deverá servir de ponto de partida para os textos mais detalhados que serão escritos posteriormente. Como eu uso o Wordpress, e essa ferramente possibilitar que o post seja salvo antes de ser publicado, eu procuro achar, de imediato, um título e uma sequência de 5 a 10 tópicos sobre os quais eu desejo discorrer, sem necessariamente me preocupar de quando eu irei escrever o restante do post.

“Uma imagem vale mais do que mil palavras”, não é verdade? Portanto eu procuro sempre usar imagens nos meus posts, exceto quando o post é sobre um trecho de programa ou coisa parecida, acredite, para nós que desenvolvemos sistemas, um código é uma obra de arte linda, cheia de cores (syntax hilighting) e de formas (identação do código), e ele por si só já fala tudo que deve falar. Mas para todos os outros casos é interessante que desde o princípio você já tenha definido quais imagens você irá utilizar, fazer uma pesquisa de imagens públicas ou você mesmo tirá-las.

Como o veículo aqui é a Internet, procure recortar e melhorar o desempenho das imagens, para que seu carregamento não seja demorado, você poderá fazer isso usando um programa de edição de imagens, como eu uso Linux, meu favorito é o GIMP.

Depois de definido o esquema do post e as imagens que nele estarão contidas verifique se tudo estará conforme o desejado. Ajustes são necessários durante todo o processo, pense sempre se o que você está escrevendo é interessante, útil e necessários para outros, eu mesmo já desisti de escrever vários posts no meio do caminho apenas por perceber que o assunto era redundante ou desnecessário.

Agora, que você já deve estar com uma boa ideia do seu post e de como escrevê-lo, está na hora de por a mão na massa. Comece preenchendo os textos no lugar dos tópicos pensados, nessa fase dificilmente você modificará os tópicos abordados, mas caso seja necessário, prefira preencher os tópicos previamente pensados para só então, depois de todo o texto escrito, adicionar outros conteúdos que não foram pensados, isso evita ser redudante ou prolixo no seu texto. O seu texto aqui deve refletir o mais próximo possível do resultado desejado.

As vezes dias são necessários para chegar no texto desejado, veja no primeiro momento apenas a ideia, se os textos estão concisos e claros, sem se preocupar com português ou detalhes de grafia ou acentuação, se você for fraco no português (como é meu caso) eu procuro primeiro passar a ideia, depois revisar português e escrita, peça para outra pessoa ler e dar uma opnião, se isso não for possível tente reler o texto um outro dia para ser mais auto-crítico, geralmente eu faço a releitura do texto usando a previsualização do Wordpress, pois nossa mente, quando vê o mesmo texto, mas em uma “moldura” diferente, tende a perceber mais erros do que com uma moldura que já está acostumada.

Depois do texto todo escrito procure verificar também a gramática, acentuação, grafia e demais detalhes do português, dependendo do seu público você poderá afastá-los completamente por conta de um erro grosseiro de português.

Produto testado e aprovado? Então chegou a hora de publicar e aguardar os comentários, se você faz dinheiro com programas de fidelidade é importante procurar palavras para por no seu texto que atraiam os melhores anuncios, mas isso é assunto para outro post. :-D

O iPhone é o objeto de desejo de muitos geek maníacos, e inclusive já chegou a entrar na minha lista de “coisas para comprar”, mas como tudo que eu penso em comprar tem que passar por uma série de critérios para ver se, de fato aquilo irá me trazer alguma utilidade, do contrário minha casa estaria cheia de tralhas, com o iPhone não foi diferente.

Não tenho dúvidas que o iPhone é um produto interessante, mas pelo fato de estar ainda em desenvolvimento as versões que antecedem a final são catastróficas. Claro que as melhorias da versão 1 para a versão 3G (2) foram significativas, mas ainda tem um longo caminho para andar antes de se tornar um celular útil.

Existem algums aspectos negativos que pude observar no iPhone, alguns deles são inadimissíveis e me fizeram desistir de comprar um. O primeiro aspecto negativo que vejo no iPhone é o fato dele apresentar apenas a versão vertical do teclado, já que o iPhone tem a opção de “girar” o aplicativo apenas girando o iPhone de posição, seria desejável que o teclaro “girasse” juntamente com a aplicação. O teclado nessa posição dificulta a digitação de pessoas com dedos maiores e mais largos, como o meu. Alguns usuários tem reportado que o touch screen falha em diversos momentos e são obrigado e pressionar com mais força a tela.

Não existe MMS no iPhone, e não é possível enviar vídeos ou mensagens multimidia. Isso é inadimissível em uma era que até celulares de R$ 99,00 enviam mensagens multimidia.

Não existe um MSN, ICQ, Gtalk, nada. Um celular que tende a se auto denominar um portátil com Internet, não poderia deixar de fora um recurso tão necessário como um “instant messager”.

Claro que ainda tem a bateria selada, impedindo que ela seja substituída, o peso fora do padrão normal de um celular, o tamanho, fora do tamanho normal de um celular, o fato de fechar alguns programas inexplicavelmente, o fato de fechar o aplicativo aberto apenas para atender uma ligação e outros erros de construção.

No meu caso ainda tem um outro fator, o fato do sistema operacional ser fechado e não admitir modificações. Que não seria um problema muito grande se não existissem outras opções, mas felizmente existe, apresento-lhes o novo lançamento da NOKIA no Brasil, o N96.

Nokia N96

Por outro lado veja o celular que está chegando aqui em casa. É o lançamento no Brasil da NOKIA, o N96, um celular maduro, que faz tudo o que ele tem que fazer e mais, usa um sistema operacional aberto, baseado no linux Symbian OS, da própria NOKIA (correção de Osvaldo Santana) com opções de programação que vão desde o C até linguagens ágeis como Python (minha favorita).

O N96 ainda conta com GPS integrado, 16G de armazenamento e câmera de 5MP, configurações superiores ao iPhone e de longe! As lentes Carl Zeiss são dignas de méritos, tira fotos como máquina digital. E o mais importante!!! MANDA MMS!!! :-D

É extremamente simples e intuitivo desenvolver aplicativos em Python para a plataforma S60. http://wiki.forum.nokia.com/index.php/Introdu%C3%A7%C3%A3o_ao_Python_para_S60

O N96 é um brinquedo para desenvolvedores e entusiastas “open source”.

Se você se entusiamou e também quer um desses compre-o aqui:

Link para o submarino

Para quem precisa apenas se conectar em um servidor usando Python e mandar e receber comandos eis uma classe simples que fiz e uso para diversos projetos.

class UserSocket:
    """
    Classe de comunicacao

    Exemplo:
        UserSocket("10.13.97.81", 2100)
    """

    def __init__(self, host, port):
        """
        Construtor do driver de conexao
        """
        self.__host = host
        self.__port = port
        self.connect_server()

    def connect_server(self):
        """
        Realiza a conexao com o servidor
        """
        try:
            self.__soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
            self.__soc.connect((self.__host, self.__port))
        except Exception:
            return False
        return True

    def close_server(self):
        """
        Fecha a conexao com o servidor
        """
        try:
            self.__soc.close()
        except Exception:
            return False
        return True

    def receive_data(self):
        """
        Recebe os dados do buffer do servidor
        """
        data = ''
        chunk = ' '
        while (len(data) < 1) or (chunk != '\n'):
            chunk = self.__soc.recv(1)
            if chunk == '':
                raise RuntimeError, "socket connection broken"
            data = data + chunk
        return data

    def send_data(self, data):
        """
        Envia dados para o servidor
        """
        try:
            self.__soc.sendall(data)
        except Exception:
            return False
        return True

Usando …

>>> s = UserSocket("10.13.97.81", 2100)
>>> data = s.receive_data()
>>> s.send_data("COMANDO")

… você poderá se comunicar com qualquer servidor socket.

Se você hospeda seu próprio wordpress é interessante habilitar o ssl para criptografar seu sua comunicação com o servidor, do contrário todas as suas senhas e demais dados que você envia no ato da publicação de conteúdo estarão vulneráveis a sniffing e M-i-M attack. Veremos como fazer essa configuração de uma forma bem simples.

Estou presumindo aqui que o seu wordpress já está funcionando e configurado, com Mysql, Apache, etc.

Passo 1 - Instalar pacotes necessários, caso ainda não tenha instalado.

$ sudo aptitude install openssl ssl-cert

Passo 2 - Gerar a chave privada do servidor.

$ cd /etc/ssl

$ sudo openssl genrsa -out private/server.key 2048

$ sudo chmod 400 private/server.key

Passo 3 - Gerar a requisição de certificado auto assinado. (Para blogs profissionais contrate um certificado “oficial”, verisign, godaddy, etc.)

$ sudo openssl req -new -key private/server.key -out server.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: seu pais
State or Province Name (full name) [Some-State]: seu estado
Locality Name (eg, city) []: sua cidade
Organization Name (eg, company) [Internet Widgits Pty Ltd]: sua empresa
Organizational Unit Name (eg, section) []: seu departamento
Common Name (eg, YOUR name) []: *
Email Address []: seu e-mail

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Note que qualquer dos campos pode ser deixado em branco, basta digitar “.”, sem as aspas. Se você não tem vários IPs sobrando sugiro criar um certificado genérico (para todos os sites) usando no campo “Common name” um asterisco (*).

Passo 4 - Gerando o certificado

$ sudo openssl x509 -days 365 -req -in server.csr -signkey private/server.key -out certs/server.crt

Passo 5 - Configurando o site

Habilite o ssl

$ sudo a2enmod ssl

Crie um novo arquivo

$ cd /etc/apache2/sites-available

$ sudo vim wordpress-ssl

Coloque o conteúdo abaixo no arquivo

NameVirtualHost *:443
<VirtualHost *:443>
    ServerName www.seusite.com.br
    DocumentRoot /var/www/seusite/
    Errorlog /var/log/apache2/site-error_log
    Customlog /var/log/apache2/site-access_log common
    AddDefaultCharset utf-8
    SSLEngine On
    SSLOptions +StrictRequire
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>

Habilite o site criado

$ sudo a2ensite wordpress-ssl

Reinicie o apache para habilitar as configurações

$ sudo /etc/init.d/apache2 force-reload

Pronto, agora é só testar seu site https://www.seusite.com.br. O interessante é que deste jeito você poderá criar vários sites ssl, com o mesmo IP, todavia não tem como usar certificados diferentes para cada site.

Primeiramente deixe-me explicar, imagino que você deve estar se perguntando, “Sendo assim eu sou burro?” ou “Você está me chamando de burro? Seu idiota!!!”, nada disso. Eu estava pensando, nessa semana, o que leva a pessoa a fazer um curso qualquer, seja de reciclagem ou de capacitação em uma determinada área, e percebi que muitas vezes eu mesmo me deparei em alguma sala de aula com alguém falando sobre um determinado tema e eu pouco prestando atenção ou essa pessoa pouco sabia sobre o tema ou tinha segurança sobre o assunto. Claro que há exceções, mas aí nos deparamos com outro problema, muitas vezes a turma em que você está não é, como vamos dizer, tão atenciosa quanto você e isso acaba fazendo com que o instrutor volte assunto, repita conceitos e isso lhe desistimula a continuar com sua atenção alí. Identificou-se com a cena???

Eu tenho o hábito de estudar através de livros, ou até mesmo através de PDFs!, e pude observar que tem sido muito mais proveitoso, econômico e satisfatório. Se seu objetivo é conhecimento, essa é a solução. Existe, como tudo na vida, seus contras, pois um “curso” feito dessa forma exige conhecimento prévio de bons livros, saber sites e referências para consulta e ter uma “base” boa sobre o tema que se deseja estudar, pois é fácil cairmos em livros mal escritos, conteúdo desatualizado ou pior, autores que entendem de administração escrevendo sobre informática (Alguém pode citar um?). Se seu objetivo é certificados (não confundir com certificações) para colocar no currículo, esse não é um bom caminho.

Felizmente, para o leitor desse blog, irei recomendar várias literaturas que poderão embasar consideravelmente seus estudos na área de informática, redes e programação ágil. Todos os livros recomendados aqui são de grande proveito se lidos COMBINADOS! Nenhuma literatura é final e completa, portanto o hábito de consultar várias fontes é sempre bem vindo.

Leitura de base

Abaixo livros para embasar seu conhecimento. Nenhum profissional será bom o suficiente se não conhecer os princípios que solidificam os conhecimentos em informática.


Redes de Computadores - Andrew S. Tanenbaum


Shell Script Profissional - Aurelio Marinho Jargas


Sistemas Distribuídos: Conceitos e Projeto - George Coulouris


Introdução a Estruturas de Dados - Waldemar Celes


Fundamentos Matemáticos para a Ciência da Computação - Judith L. Gersting

Leitura em linux

Livros que descrevem o funcionamento do sistema operacional aberto mais popular que existe. Uma ótima base para entender o linux e seus componentes estão compilados nos livros abaixo.


Certificação Linux Lpi - Nível 1 Exames 101 e 102 - Steven Pritchard


Certificação Linux LPI: Nível 2 Exames 201 e 202 - Steven Pritchard


Manual Completo do Linux: Guia do Administrador - Evi Nemeth


Universidade Linux - Tadeu Carmona

Leitura em redes

Livros específicos para redes e interconexão de computadores, configuração de roteadores, firewalls e demias equipamentos em um ambiente interconectado.


Projeto de Interconexão de Redes - Matthew H. Birkner


Linux Iptables: Guia de Bolso - Grecor N. Purdy


Como Configurar Roteadores Cisco - Allan Leinwand

Leitura em programação

Livros que lhe ajudarão a pensar logicamente e com agilidade, o objetivo de programar é solucionar problemas da forma mais simples possível.


Programação Avançada em Linux - Gleicon Da Silveira Moraes


Profissional Linux Programando - Neil Matthew


Extreme Programming - Vinicius Manhaes Teles


UML Essencial - Grady Booch


Use a Cabeça HTML com CSS e XHTML - Eric Freeman


Use a Cabeça ! : Ajax - Brett Mclaughlin


Use a Cabeça SQL - Lynn Beighley

Bem, essa é uma lista inicial dos livros que já li e gostei, cada um tem seus fortes e fracos também, alguns a tradução não está legal, mas o conteúdo é interessante (principalmente os da série “Use a cabeça”), estou vendo outros livros interessantes que estou interessado em ler, assim que tiver uma opnião positiva sobre eles indico aqui também.

Quem tiver outra indicação pode sugerir nos comentários.