Software Freedom Day – Santa Maria/RS

Olá pessoal!

Vocês provavelmente notaram um pouco da minha ausência aqui no blog. Isto ocorreu por que estou no último ano da faculdade e coisas como o TFG1 e TFG2 realmente acabam um pouco com a sua vida. Nesses últimos dias estive focado em preparar uma palestra para o evento Software Freedom Day de Santa Maria/RS. A data do evento esse ano foi no dia 20 de Setembro mas como aqui no Rio Grande do Sul é feriado por causa do dia do Gaúcho ele foi realizado com um atraso de uma semana, ocorrendo no dia 28 de Setembro.

O que é o evento?

sfd-logoO Software Freedom Day, ou Dia da Liberdade de Software é uma celebração mundial para mostrar o por que as tecnologias de hoje são tão transparentes e sustentáveis. Com mais de 200 times em 60 países participando, é um evento fantástico que envolve escolas e comunidades.

Ele ocorreu aqui em Santa Maria no dia 28/09/2014 com início as 08:00 no Centro Universitário Franciscano (Unifra).
Segue o link do evento: www.sfdsm.org

Minha percepção do Evento

Esse é o segundo ano que o evento ocorre em Santa Maria e o segundo ano que sou palestrante. Posso dizer que esse anos as coisas me pareceram mais organizadas e tudo foi extremamente bem executado. O evento contou com palestras de diversos níveis de, assuntos e áreas e possuía um conjunto de mini-cursos sobre algumas áreas ligadas ao movimento open source.

Uma coisa que chamou um pouco a atenção foi o número de participantes um pouco reduzidos dos cursos de Sistemas de Informação e Ciência da Computação da própria universidade.

No mais, foi um bom evento que reafirmou que em Santa Maria precisamos evoluir a comunidade de software livre.

Minha Palestra

Infelizmente não houve gravação das palestras, mas em breve vou disponibilizar os slides dela aqui.

Fontes Windows no Arch Linux

Windows FontsRecentemente encontrei na documentação do Arch Linux uma maneira de instalar Microsoft Fonts e descobri que eu usava o pacote legacy das fontes Microsoft. Então como apanhei um pouco para conseguir instalar o pacote correto resolvi colocar aqui a forma de instalação do ttf-win7-fonts

Link da documentação: [https://wiki.archlinux.org/index.php/MS_Fonts]
AUR: ttf-win7-fonts [https://aur.archlinux.org/packages/ttf-win7-fonts/]

1 – Preparando os pacotes

Inicialmente baixe o pacote no AUR, já que você precisa ter as fontes da Microsoft no mesmo diretório do .PKBUILD para poder instalar.

$ wget https://aur.archlinux.org/packages/tt/ttf-win7-fonts/ttf-win7-fonts.tar.gz
$ tar zxvf ttf-win7-fonts.tar.gz

Nos próprios comentários do AUR encontrei um link com todas as fontes da Microsoft para fazer a instalação

http://www.mediafire.com/?pvkp1ejcy4k1bfi

Descompacte o arquivo com as fontes e copie as mesmas para dentro da pasta ttf-win7-fonts

2 – Gerando um novo sha256sums()

Devido a versões diferentes do Windows possuirem diferentes versões das fontes é necessário gerar novamente o sha256sums() para essas fontes que baixamos

$ makepkg -g

Copie a saída do comando e substitua o mesmo trecho sha256sums(…) no .PKBUILD dentro da pasta ttf-win7-fonts

3 – Efetuando a instalação

Agora que está tudo pronto é só efetuar a instalação e sair pro abraço ^^

$ makepkg -si

No proximo artigo pretendo postar como configurar o fontconfig para deixar as fontes no Arch Linux mais agradáveis =)

Até próxima

Links da Semana [2012-07-06]

A partir de agora irei disponibilizar toda Sexta-feira os links e referências que achei mais legais durante a semana. Como não me preparei pra semana a primeira postagem vai ser bem singela.

Principios para escrever CSS de forma consistente [Tableless]
http://tableless.com.br/principios-para-escrever-css-de-forma-consistente/

Problemas de segurança em aplicações web [Klaus laube]
http://www.klauslaube.com.br/2012/04/15/problemas-de-seguranca-em-aplicacoes-web/

CSS Awards [CSS Design Awards]
http://www.cssdesignawards.com/

Abraços e boa leitura 😉

Meu ambiente de trabalho

Olá pessoal, sei que faz um tempo que não posto nada por aqui, mas estou tentando voltar a ativa.

Sei que já passou a época das postagens com o tema “Meu ambiente de trabalho em 7 itens“, mas como ainda estou devendo essa vamos lá

1 – Sistema Operacional

debian

Atualmente tenho usado bastante o Debian Linux, é o sistema com que tive mais contato apesar de ter usado um tempo o Fedora não me adaptei muito bem. Atualmente tenho lido bastante sobre o Arch Linux e sua filosofia minimalista, agora que já não me considero tão iniciante em linux pretendo em breve dar uma “fuçada”.

Como Sistema operacional para jogos tenho uma máquina instalada com Windows 7 (e sim já tentei rodar jogos com Wine no Linux mas, foi uma tremenda decepção, provavelmente por minha causa ^^ ).

2 – Linguagens de Programação e IDE’s

Tema bastante controverso esse para a minha pessoa, particularmente sou um grande Fã de linguagens mais dinâmicas e modernas ex.: Python, Ruby mas no meu computador vocês irão encontrar C/C#, Java (depois de ser obrigado a utilizar ganhei um grande respeito pela linguagem), PHP (linguagem que utilizo atualmente no trabalho junto com o framework CakePHP)

  • C/C++
  • Java (depois de ser obrigado a utilizar ganhei um grande respeito pela linguagem)
  • PHP (linguagem que utilizo atualmente no trabalho junto com o framework CakePHP)
  • Python que junto com o Django revolucionou a maneira de eu enxergar a programação pra web
  • Ruby junto com o Rails
  • Mais toda aquele monte de linguagens como jQuery, CSS, HTML

Como IDE pra essa galera toda ai utilizo o Netbeans para C/C++ e Java, para o resto tenho utilizado o Eclipse

* Durante a semana prentendo atualizar esse post com mais alguns itens que mas no geral é isso, um bom sistema operacional e uma IDE parruda e podemos montar o que quiser 😉

PHP perdeu a corrida dos frameworks

Olá Pessoal

Recentemente em conversas de bar e leituras pela web vi o tamanho do descontentamento geral de programadores com o nosso querido PHP.
Também percebi que o PHP está perdendo a corrida pelo desenvolvimento de aplicações web. Vamos fazer uma análise rápida do cenário de desenvolvimento web que temos hoje em outras linguagens:

Python/Django
Pra mim simplesmente o melhor framework para desenvolvimento web.
– Poucas configurações e todas centradas no settings.py;
– Estrutura de pastas que mínima tanto que quando vc inicia um projeto não tem pasta nenhuma apenas uns: arquivos.py;
– Sistema de administração incrível com permissões de usuário para cada app que vc desenvolver e você ainda instalar o Grappelli uma coisa de outro mundo e acredito que o admin do django possa ser usado em 80% dos programas que você desenvolver, apenas em algo realmente personalizado você precisará de outra estrutura
– A linguagem Python, essa não tem comentários: Orientação a Objetos de verdade, sintaxe muito clara e muito melhor que aquele monte de (), {}, $, ->

Ruby e Rails
Esse é framework mais modafoca da atualizadade tudo que é novidade os caras implementam na mesma hora
Não optei por ele por:
– Uma estrutura de pastas enorme na largada do projeto;
– E pra mim o Ruby é muito estranho, mas tenho um enorme respeito pela linguagem e principalmente pelo framework é por ele que hoje temos a capacidade de desenvolvimento ágil.

VRaptor e Grails
Pra mim JAVA nunca foi a melhor linguagem pra web mas esses 2 frameworks tem me chamado bastante a atenção.
Principalmente pelo fato de conseguirem transformar o JAVA numa linguagem competitiva pra web (coisa que na minha cabeça era impossível)

Bom e agora o que temos no PHP

CodeIgniter
– Excelente framework consegue trazer as vantagens de MVC, Orientação a Objeto, URL’s amigáveis e desenvolvimento organizado.
– Mas peca no sentido que ainda é a mesma coisa que desenvolver no braço, todos os crud’s são por sua conta e risco assim como não tem nenhum sistema de autenticação pra dar uma ajuda.
– Resumindo ele só tem uma meia dúzia de classes que te ajudam em uma necessidade muito específica;
Ainda assim é o meu framework favorito =)

CakePHP
– Esse é a menina dos olhos de ouro de quem programa em PHP, tem um milhão de pastas, um milhão de configurações e sem falar que é uma cópia rasgada do RubyOnRails

Yii Framewok
Aqui temos uma nova linha de frameworks em PHP um tem tentam te ajudar no desenvolvimento, mas tem uma estrutura confusa e um monte de pastas na largado do projeto.
– A documentação além da que tem no site é quase nula.
Parece ser um framework promissor, vamos ver o que as novas versões nos trazem

Citei apenas o frameworks que tive contato aqui

Mas diante desse cenário vemos claramente que o PHP está muito atrás de outras linguagens para desenvolvimento e acredito que a nova geração de programadores cada vez mais adotem outras tecnologias principalmente Ruby e Python e até mesmo Java.

Esse foi um dos melhores artigos que já vi sobre o por que o PHP está do jeito que está:
http://imasters.com.br/artigo/21272/php/por-que-o-php-era-um-gueto

Sistema de Login com CodeIgniter

Olá pessoal, como primeiro post vou colocar aqui um sistema de autenticação de usuário que precisei fazer esses dias no meu trabalho. É um sistema bem simples que utiliza:

  • Banco de dados MySQL;
  • Framework CodeIgniter;
  • Geralmente utilizo a IDE Netbeans para programar em PHP

Veja que a tabela de registro de usuários é a mais simples possível

CREATE TABLE IF NOT EXISTS `membership` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(32) NOT NULL,
  `status` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Você pode adicionar mais dados na sua tabela, como nome, telefone, endereço essas coisas, mas o básico é isso ai

* Não reparem mas gosto de todos os nomes em ingles galera =)

Model: membership_model.php

Logo após isso precisamos criar um model com o nome membership_model.php dentro da pasta application/models com o seguinte conteúdo:

<?php

class Membership_model extends CI_Model {

    # VALIDA USUÁRIO
    function validate() {
        $this->db->where('username', $this->input->post('username')); // PEGA POR POST O VALOR DO CAMPO USERNAME
        $this->db->where('password', md5($this->input->post('password'))); // PEGA POR POST O VALOR DO PASSWORD
        $this->db->where('status', 1); // VERIFICA SE O USUÁRIO ESTÁ ATIVO (TEM O VALOR = 1)

        $query = $this->db->get('membership'); // FAZ O SELECT COM OS PARAMETROS ACIMA

        if ($query->num_rows == 1) { // VERIFICA SE TEM APENAS UMA LINHA NA CONSULTA
            return true; // RETORNA VERDADEIRO
        }
    }

    # VERIFICA SE O USUÁRIO ESTÁ LOGADO
    function logged() {
        $logged = $this->session->userdata('logged');

        if (!isset($logged) || $logged != true) {
            echo 'Voce nao tem permissao para entrar nessa pagina. <a href="../login">Efetuar Login</a>';
            die();
        }
    }
}

Procurei colocar o mais comentado possível mas em resumo o método validate() valida retorna True apenas se encontrar uma linha com username, password igual ao digitado no formulário e claro o status ainda deve ser 1 para o usuário estar ativo.

Controller: login.php

Bom agora para colocar a mão na massa devemos configurar algumas coisas no CodeIgniter. As configurações do CodeIgniter ficam dentro da pasta application/config

– No arquivo autoload.php devemos chamar as libraries: ‘database’ e ‘session’

Uma novidade do CodeIgniter 2.0 é que agora as sessões são criptografadas e precisamos de uma chave de criptografica para colocar no arquivo config.php eu sempre uso uma string randomica gerada pelo site: http://www.random.org/strings/

Exemplo:

// Seu arquivo config.php deve ficar mais ou menos assim
$config['encryption_key'] = 'ZgHFyY7pCu8LPWpFEeRs';

Então iremos criar uma pasta chamada admin dentro de application/controllers/login

No arquivo routes.php dentro da pasta application/config/routes.php, vamos adicionar um controlador default para para a pasta login

// Adicionar a seguinte rota para url login
$route['login'] = 'login/login';

* Note que ja efetuo as validações para o campo username e password não sejam mandados em branco.

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Login extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    function index() {

        // VALIDATION RULES
        $this->load->library('form_validation');
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_error_delimiters('<p class="error">', '</p>');

        // MODELO MEMBERSHIP
        $this->load->model('membership_model', 'membership');
        $query = $this->membership->validate();

        if ($this->form_validation->run() == FALSE) {

            $this->load->view('login/login_view');
        } else {

            if ($query) { // VERIFICA LOGIN E SENHA
                $data = array(
                    'username' => $this->input->post('username'),
                    'logged' => true
                );
                $this->session->set_userdata($data);
                redirect('login/area_restrita');
            } else {
                redirect($this->index());
            }
        }
    }
}

Views: login_view.php e area_restrita_view.php

Dentro da pasta de views do Codeigniter iremos criar uma pasta como o nome de login também para separar os arquivos do site dos arquivos da área de administração.

Dentro dessa pasta teremos um arquivo como o nome login_view.php que será o formulário de login e também é o default da classe login então é o primeiro arquivo a ser chamado.

<!DOCTYPE html>
<html>
    <head>
        <title>Área Restrita</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style type="text/css">
            body {background: #FFF; font-family: Verdana; font-size: 9pt; }
            #form_login { width: 500px; margin: 0 auto; padding: 20px; background: #F2F2F2; border: 1px solid #B7B7B7; }
            label { display: block; margin-bottom: 0.3em; }
            input[type=text], input[type=password] { border: 1px solid #666; display: block; margin-bottom: 1em; padding: 2px; width: 100%; }
            input[type=text], input[type=password] { display: block; }
            h1 { margin: 0 0 1em 0; text-align: center; }
            .error { background: none repeat scroll 0 0 #FBE6F2; border: 1px solid #D893A1; padding: 5px; }
        </style>
    </head>
    <body>

        <h1>Tela de Login</h1>
        <div id="form_login">
            <?php echo validation_errors(); ?>
            <?php
            echo form_open();

            echo form_label('Username', 'username');
            echo form_input('username', '');

            echo form_label('Password', 'password');
            echo form_password('password', '');

            echo form_submit('submit', 'Entrar no sistema');
            ?>
            <?php form_close(); ?>
        </div>
    </body>
</html>

Notem que esse é um formulário de login bem simples coloquei um pouquinho de CSS pra não ficar tão feio assim.

Bom esse se você configurou tudo certinho agora quando você efetuar um login no site ele irá redirecionar você para o controlador area_restrita.php que chama a view area_restrita_view.php

No controlador devemos colocar uma proteção para caso alguém saiba a url em questão não possa visualizar o conteúdo e seja redirecionada para outro lugar

Controlador: area_restrita.php

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Area_restrita extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('membership_model', 'membership');
        $this->membership->logged();
    }

    public function index() {

        $this->load->view('login/area_restrita_view');

    }
}

Bom aqui é simples no construtor da classe chamamos o model membership e usamos o método logged() que verifica a sessão e permite ou não o a execução desse controlador.

Só falta agora a area_restrita_view()

View: area_restrita_view

<!DOCTYPE html>
<html>
    <head>
        <title>Área Restrita</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <h1>Área Restrita</h1>
    </body>
</html>

Nesse ponto se tudo deu certo você pode criar a área de administração para o seu site =)

Esse é mais um tutorial pra quem já sabe programar e tem um médio conhecimento de #Codeigniter, não foi explicado conceitos sobre como funciona #MVC nem sobre a estrutura do #Codeigniter, mas dá pra se virar bem 😉

Abraços

Meu primeiro post

Olá pessoal!!

Pretendo colocar aqui todos dicas, aprendizados e coisas que desenvolvo no meu dia-a-dia como programador principalmente assuntos relacionados a python/django e php/codeigniter

É sempre difícil fazer o primeiro post de um blog de TI, mas é isso ai abraços e até em breve.