O dificíl trabalho de evangelizador.
December 28, 2008 at 7:50 pm | In LInux | 1 Comment
Não, não virei pastor, , esse post eu queria escrever já faz um tempo atrás, após um longa conversa no msn sobre o uso do Linux, não vou dizer aqui quem foi a pessoa na qual eu estive falando,
na verdade eu tenho a autorização da mesma para dizer o nome, mas não vou fazer isso, bom esse post se trata de o quão é difícil convencer as pessoas à mudar, particularmente nesse post irei falar sobre
como é dificil convencer uma pessoa ao menos a pensar no Linux como uma alternativa ao sistema do Bill, mas isso se encaixa em tantas outras coisas que eu poderia citar uma imensa lista aqui, resolvi falar sobre o caso do Linux que é a única coisa que eu posso dizer que sou um pouco evangelizador, então vamos lá.
1 – Pessoas são acomodadas.

É fato, ( eu sou em algumas coisas
, as pessoas não gostam da idéia de ter que aprender a usar um novo sistema operacional por exemplo, elas dizem “Mas para que, se eu ja sei Windows?”,
vou ter que aprender mil e um comando para mexer no Linux(MENTIRA), hoje em dia até uma macaco mexe no Linux
, como ia dizendo acima as pessoas não querem aprender nada de novo, elas não querem perder o tempo que podiam tar escrevendo uma mensagem para o seu “miguxu nu Orkut” ou seja lá o que diabos for, para estudar algo novo, para evoluir, para ler um livro qualquer, não só em questões tecnologicas, mas em tudo, existem pessoas que são tão mente fechada que acabam por não ver o grande leque de possibilidades que existe, então acabam por ser algo muito dificil “convencer” um usúario ao menos a tentar usar o Linux.
2 – A GRANDE desculpa.
Essa é pura conversa fiada de primeira, “Não posso usar Linux porque os aplicativos que eu uso só existem para o Windows.”, isso é a coisa mais inocente que eu posso ouvir, existem praticamente TODO tipo de
aplicativo para Linux, é claro, você pode ter que em alguns casos muitos remotos realmente precisar de alguma coisa que realmente só tenha disponivel para a plataforma Windows. Mas eu digo a vocês 99% dos
casos existem softwares equivalente( e até melhores) para Linux, é claro que você não vai achar os botões e funcões exatamente no mesmo lugar, E AI que entra a questao do item acima( PESSOAS SAO ACOMODADAS), elas não vão querer gastar mais de 3 minutos tentando achar onde fica o maldito botão para seja lá que diabos ela esteja fazendo, abaixo deixo um link onde você pode encontrar bons software
para Linux:
http://mosel.estg.ipleiria.pt/files/tabela_equivelentes.html
3 – O grande problema com os MITOS.

Essa também é conversa fiada de primeira, bem vamos a definição de mito, segundo a Wikipedia:
Um mito [do grego antigo μυθος ("mithós")] é uma narrativa tradicional com caráter explicativo e/ou simbólico, profundamente relacionado com uma dada cultura e/ou religião. O mito procura explicar os principais acontecimentos da vida, os fenômenos naturais, as origens do Mundo e do Homem por meio de deuses, semi-deuses e heróis (todas elas são criaturas sobrenaturais). Pode-se dizer que o mito é uma primeira tentativa de explicar a realidade.
Exitem centenas de mitos acerca do Linux, muitos, são encarados como verdade apenas para aqueles que realmente não conhecem NADA do sistema, vou falar um pouco dos grandes mitos que circulam por ai.
MITO A: Para se trabalhar com Linux eu tenho que saber TODOS OS COMANDOS.
Mentira, anos atrás até que para algumas tarefas era sim necéssario o uso da linha de comando, hoje em dia se você for um usúario normal você poderá trabalhar tranquilamente com todos aplicativos ficando milhas distante do Terminal. Já se você é um usúario mais avançado, e por exemplo uma de suas atividades seja programar, o Terminal sem dúvida algumas é um ótimo alinhado, eu pessoalmente SEMPRE to com ele aberto no meu Linux, ele me facilita muito a vida. Então MITO A detonado.
MITO B: Linux não Roda Jogos:
Claro você não ira rodar um jogo que é feito para rodar me Windows no Linux( a não ser emulado), mas existe uma grande quantidade de Jogos para Linux e eles são sim tão bons quanto o de windows. Não vou falar mais nada aqui porque realmente nao conheço muito coisa sobre Jogos no Linux:
MITO C: Linux é dificil de Instalar e se você conseguir você pode se igualar ao Batman.
Mentira de primeira novamente, como disse acima, anos atrás era relativamente dificil instalar qualquer Linux na sua maquina, mas hoje em dia você tem que ter a grande habilidade de saber ler
e clicar em meia duzia de botões e ir tomar um café. Então MITO C detonado.
MITO D: Existe muitos outros mitos acerca do Linux mas que nao teram espaço neste post.
4 – A cultura porca que o que é BOM tem quer SER da Microsoft.
Grande parte das pessoas que não conhece um pouco mais a fundo a história e evolução do mundo tecnologico( sobre tudo dos computadores ), pensa que o TODOS os programas bons são da Microsoft, e QUE FOI Bill Gates quem criou a Internet ( SIM, ja ouvi isso ), e qualquer coisa que não seja dessa empresa não deve ser considerada como um opção por você.
Obviamente a Microsoft tem produtos bons( pagos ), mas como visto acima temos opções livre e muito boas, eu não uso Linux porque odeio a Microsoft, o uso porque ele é um sistema que se adapata de melhor forma as minha atividades diárias, sobretudo para desenvolvedores ambientes Unix like são concerteza a melhor opção, vou citar como exemplo o caso do uso do Ruby ou Rails em ambiente Windwos, a grandes problemas quanto à isso, a uma grande quantidade de Gems que tem extensões nativas, o que significa que para elas serem instaladas necessitam serem compiladas, e em Windows isso realmente é um problema, Luis Lavena está fazendo um ótimo trabalho quanto a deixar o Ruby cadá vez mais usavél no Windows, mas são relamente grandes problemas a serem resolvidos, mas felizmente ele está fazendo um bom trabalho, Parabens.
Então por favor não me falem que somente produtos pagos são bons, existem muita coisa boa que não é paga, e com certeza devem ser consideradas por você, principalmente se você desenvolve.
5 – Então . . . evangelizar.
As coisas acima são concerteza algumas das centenas de barreiras encontradas na hora de convencer um pessoa a usar Linux, eu mesmo aqui na minha pequena cidade, quando eu e um amigo meu começamos a usar Linux nem tudo foi flores, mas com um pequeno esforço conseguimos dar o ponta-pé inicial e começamos a usar o dito Linux, aprendemos sozinhos, com ajuda de Forums, conversando com outras pessoas pela internet, trocando idéias de uso, tirando dúvidas com gente que já estava usando a mais tempo, ou seja, usamos o que há de melhor no mundo Open Source que é a sua comunidade, desde então começou essa coisa de evangelizar o Linux para todos, mas como as coisas faladas acima estavam presentes, quase que por 95% das pessoas que você tenta-se “converter”, algumas(poucas) consegui fazer com que usam até hoje(parabens), outras quero acreditar eu não o usem mais porque …… bom. Mas mesmo algumas pessoas não tendo o Linux instalado em suas maquinas já fico feliz em eles saberem agora que existem sim aleternativas à Microsoft, e felizmente estão com a mente um pouco mais aberta quanto a isso.
[Primeira Parte] – PHP Orientado a Objetos.
December 26, 2008 at 8:02 pm | In php | Leave a Comment
Já faz algum tempo atrás eu mexia com PHP, mas nunca de forma orientada a Objetos, sempre tive a vontade de dar uma olhada para ver como esse negócio era “feito” no PHP, então até que enfim tomei vergonha (risos), e resolvi ir atrás de algumas coisas, então resolvi escrever aqui o que estou vendo para que possa ser útil a alguém também.
Essa será a primeira parte (espero que tenha uma segunda), nessa primeira parte, vermos algumas coisas como: Criação de Classes, Criação de Objetos, Criação de Métodos, Visibilidade de Propriedades e Métodos.
NOTAS ANTES DE COMEÇAR: A versão do php que estou usando é a 5.2.0.
1 – Criando uma simples Classe.
Podemos declarar uma nova classe usando a palavra reservada class, seguida pelo nome da classe começando com letra maiúscula:
<?php class MinhaPequenaClasse { } ?>
______________________
<?php /** * @author * @copyright 2008 */ class MinhaPequenaClasse{ var $username = "jack"; function show_Name(){ echo $this -> username; } } $obj = new MinhaPequenaClasse(); $obj -> show_Name(); ?>
Vamos analisar esse exemplo.
Primeiramente definimos um classe chamada MinhaPequenaClasse, declaramos um variável chamada username(logo veremos porque não usar o var para declarar), logo após definimos um método( mas que diabos de método que é declarado com a palavra function J ), é assim mesmo, mas no contexto de Orientação Objeto é chamado método, então temos um método chamado show_Name, então mostramos o useraname.
Pergunta: Que diabos é esse $this:?.
Resposta: Isto é uma referência ao objeto chamado, ele está disponível quando certo método é chamado dentro do contexto do objeto.
Logo a baixo criamos um novo objeto da classe, e então na ultima linha, chamamos o método show_Name que pertece a nossa classe.
É um exemplo muito simples mas já ilustra a criação de uma classe que contém um método.
2 – Visibilidades.(Encapsulamento)
Devemos declarar as propriedade e métodos usando uma das três formas disponíveis, public, protected, e private.
Public – Acesso livre, pode ser acessado de dentro e fora da classe
Protected – Acesso live dentro da classe que os declaro, ou em classes herdadas.
Private – Pode ser acessado somente dentro da classe.
O exemplo está comentado então acho que é melhor do que eu escrever aqui, nesse exemplo fizemos o uso da palavra extends, para podermos usar a classe Visibility na classe Visibility2, e assim mostrar o funcionamento do protected.
<?php class Visibility{ private $privado = "Eu sou private"; protected $protegido = "Eu sou protegido"; public $publico = "Eu sou publico"; private function MostraTodos(){ // Método Privado, So pode ser acessado dentro da Classe. echo $this -> privado, "<br>"; echo $this -> protegido, "<br>"; echo $this -> publico, "<br>"; } public function Show(){ $this ->MostraTodos(); // Método Privado chamado.( Dentro da CLASSE) } } $objeto = new Visibility(); echo $objeto -> publico; // Funciona porque eh public echo $objeto -> privado; // Nao funcia, esta fora da classe $objeto -> Show(); // Funciona, show eh public. $objeto -> protegido; // Nao Funciona. class Visibility2 extends Visibility{ function Mostrar(){ echo "<b>Acessado em Visibulity2 que herda Visibility:</b> ", $this -> protegido; } } $objeto2 = new Visibility2(); $objeto2 -> Mostrar(); ?>
Resolvi deixar o código com comentários que acho que ficou melhor para entender.
A lógica para a declaração dos métodos usando protected, public, e private é a mesma, caso você declarar um método apesar dizendo:
function Metodo(){ } ele será declarado como public, abaixo mais um código cometado, acho que é bem melhor:
visibility_2.php
<?php /** * @author * @copyright 2008 */ class Visibility2{ private $privado = "Eu sou privado"; private function Prv_Show(){ echo "<b> Vindo de private: </b>", $this -> privado, "<br>"; } protected function Pro_Show(){ echo "<b> Vindo de protected: </b>",$this -> privado, "<br>"; } public function Pub_Show(){ echo "<b> Vindo de public: </b>", $this -> privado, "<br>"; } public function Show_All(){ $this -> Prv_Show(); $this -> Pro_Show(); $this -> Pub_Show(); } } $visibility = new Visibility2(); //$visibility -> Prv_show(); // Fatal error: Call to private method Visibility2::Prv_show() from context ' //$visibility -> Pro_Show(); // Fatal error: Call to protected method Visibility2::Pro_Show() from context '' $visibility -> Show_All(); ?>
Bom, é isso, obviamente é apenas uma pequena intro, ma já da para ter um idéia do que se trata.
[Update]Blog movido para . . . (Não Mais)
December 16, 2008 at 8:48 pm | In Geral | Leave a Comment[UPDATE] – Por motivos de sérios problemas com o servidor que eu tinha movido o blog, estou voltado para cá, e nao vou mais sair
.
Olá pessoal, acabei de mover o blog para outro enderço, apartir de agora todos os posts serão postados nesse novo endereço, os posts desse blog estão presentes lá … então….. mova-se para….
Gerando arquivos PDF com Ruby(pdf/writer) – Parte 1.
December 11, 2008 at 3:49 pm | In Ruby/Rails | 2 CommentsOlá, pessoal, uma forma de se gerar documentos PDF usando Ruby é utilizar o pdf-writer, é uma gem que pode ser usada tanto em Rails e Ruby, nessa primeira parte vamos conhecer o básico , criar alguns exemplos e ver como o negocio funciona, não iremos ver tudo da gem(é obvio) bem que para isso tem o manual no site(99 páginas em Inglês), nesse post não iremos interar com o Rails, somente Ruby.
1 – Instalação
Para instalar o pdf-writer temos dois caminhos, 1) Instalar via RubyGems(recomendo) e 2) Instalar manualmente usando o pacote. Recomendo via rubygems pois ele irá reconhecer as dependências que o pdf-writer tem, já a segunda você irá ter que instalar a dependencia, ou transaction-simple ou colors-tools.
Via RubyGems:
sudo gem install pdf-writer
Via “package”
wget http://rubyforge.org/frs/download.php/33972/pdf-writer.1.1.8.tar.gz
tar -xvzf pdf-writer.1.1.8.tar.gz
cd pdf_writer-1.1.8
sudo ruby setup.rb
agora instale o transaction-simple ou colors-tools da mesma forma.
Mas acho melhor a primeiro opção
2 – Criando um Exemplo Muito Simples.
Vamos criar um exemplo “Hello PDF::Writer” para não ficar “Hello World” , crie arquivo chamado teste_pdf1.pfd com o seguinte conteúdo:
require "rubygems"
require "pdf/writer"
pdf = PDF::Writer.new
pdf.text("Hello PDF::Writer", :font_size => 35)
pdf.save_as("file1.pdf")
Isto produz:

Fizemos dois requires ali no começo, com rubygems e pdf/writer, após fizemos a chamada de PDF::Writer, logo depois “escrevemos” no documento o texto “Hello PDF::Writer” e definimos o tamanho da fonte para 35 pontos, então por ultimo salvamos o documento como file1.pdf.
3 – Fontes e Posições.
Para configurar o tipo de fonte usada você pode usar pdf.select_font “Times-Roman” por exemplo, opções de posição , :left, :right, :absolute_left, :absolute_right, vamos a um exemplo:
require "rubygems"
require "pdf/writer"
pdf = PDF::Writer.new
pdf.select_font "Courier-BoldOblique"
pdf.text("Hello PDF::Writer", :font_size => 35, :left => 100)
pdf.save_as("file2.pdf")
Isto produz:
Justificações:
Com as seguinte quatro formas de justificação:
pdf.text("Hello Ruby!", :justification => :left)
pdf.text("Hello Ruby!", :justification => :right)
pdf.text(“Hello Ruby!", :justification => :center)
pdf.text("Hello Ruby", :justification => :full)
4 – Espaçamento entre Linhas
Você pode configurar o espaço entre determindas linhas do texto por exemplo:
require "rubygems"
require "pdf/writer"
pdf = PDF::Writer.new
pdf.select_font "Courier-BoldOblique"
pdf.text("Hello PDF::Writer", :font_size => 35, :left => 100)
pdf.text("Ola Mundo Cruel!", :font_size => 35, :left => 100, :spacing => 5)
pdf.save_as("file3.pdf")

5 – Documento final
Para finalizar esse post vamos criar um “documento real” com um simples texto, usando o que vimos nesse post.
require "rubygems"
require "pdf/writer"
pdf = PDF::Writer.new
BODY = <<-'EOS'
Benjamin Franklin (January 17, 1706 [O.S. January 6, 1705] April 17, 1790) was one of the Founding Fathers of the United States of America. A noted polymath, Franklin was a leading author and printer, satirist, political theorist, politician, scientist, inventor, civic activist, statesman, and diplomat. As a scientist, he was a major figure in the Enlightenment and the history of physics for his discoveries and theories regarding electricity. He invented the lightning rod, bifocals, the Franklin stove, a carriage odometer, and a musical instrument. He formed both the first public lending library in America and first fire department in Pennsylvania. He was an early proponent of colonial unity and as a political writer and activist he, more than anyone, invented the idea of an American nation[1] and as a diplomat during the American Revolution, he secured the French alliance that helped to make independence possible.
Franklin is credited as being foundational to the roots of American values and character, a marriage of the practical and democratic Puritan values of thrift, hard work, education, community spirit, self-governing institutions, and opposition to authoritarianism both political and religious, with the scientific and tolerant values of the Enlightenment. In the words of Henry Steele Commager, "In Franklin could be merged the virtues of Puritanism without its defects, the illumination of the Enlightenment without its heat."[2] To Walter Isaacson, this makes Franklin, "the most accomplished American of his age and the most influential in inventing the type of society America would become."
EOS
corpo = BODY.split($/).join(" ").squeeze(" ")
pdf.text("Benjamin Franklin", :font_size => 20, :justification => :center)
pdf.move_pointer(36)
pdf.text(corpo, :font_size => 12, :justification => :full)
pdf.move_pointer(50)
pdf.text("Fonte: Wikipedia", :font_size => 10, :left => 370)
pdf.save_as("final.pdf")

Bom para começo é isso, logo irei postar algo mais sobre o pdf-writer, obviamente isso é muito mas muito básico.
Ruby – Hashes
December 7, 2008 at 4:25 pm | In Ruby/Rails | 3 CommentsPequena Intro.
Hashes é uma coleção de pares (chave-valor), cada elemento da lista é um par, que contém uma chave que representa um valor. São semelhantes aos Arrays, porém se diferem desses por terem atribuição arbritária, chaves são qualquer tipo de objeto e não um int(inteiro) igual os Array.
Hashes em outra linguagem também são chamados de dicionários, e logo você vai ver porque ?.
Hashes tem valor padrão que é retornado se tentar acessar chaves que não existam, esse valor é nil.
Com essa pequena teoria sobre hashes em mente vamos fazer alguns exemplo, como sempre abra o IRB.
1 – Criando um hashe
h = {"choice"=>"escolha", "cloak"=>"capa", "stuffy"=>"abafado"}
=> {"stuffy"=>"abafado", "cloak"=>"capa", "choice"=>"escolha"}
Acima criamos um hashe simples contendo três palavras em inglês que suas traduções.
Bom como visto acima aqui não temos índices e sim chaves, vamos acessar as chaves desse hashe.
Antes vamos ver todos os métodos para manipulação de hashes, então usamos h.methods( onde h é o hashe que criamos a cima).
1.1 – Métodos
irb(main):003:0> h.methods => ["select", "[]=", "inspect", "each_value", "fetch", "clone", "values_at", "public_methods", "partition ", "display", "empty?", "instance_variable_defined?", "update", "shift", "to_yaml_properties", "equal?", "freeze", "has_value?", "clear", "grep", "rehash", "to_yaml", "taguri", "indices", "methods", "respond_to ?", "reject", "each_key", "taguri=", "dup", "delete", "instance_variables", "yaml_initialize", "member?", "__id__", "find", "method", "eql?", "value?", "to_hash", "each_with_index", "id", "to_yaml_style", "inde x", "collect", "singleton_methods", "send", "each_pair", "all?", "taint", "delete_if", "length", "entries ", "merge!", "frozen?", "instance_variable_get", "include?", "__send__", "instance_of?", "merge", "detect ", "to_a", "store", "zip", "type", "protected_methods", "instance_eval", "object_id", "map", "any?", "==" , "values", "===", "size", "sort", "instance_variable_set", "default", "min", "kind_of?", "extend", "find _all", "to_s", "default=", "default_proc", "key?", "each", "hash", "class", "reject!", "replace", "inject ", "tainted?", "keys", "=~", "private_methods", "invert", "nil?", "untaint", "sort_by", "has_key?", "max" , "[]", "is_a?", "indexes"] irb(main):004:0>
Veremos algo assim, uma grande lista de métodos que estão disponíveis para o uso, ali no meio(coloquei em negrito) temos o método Keys, ele nos mostra todas as chaves do nosso hashe, então vamos usá-lo.
1.2 – Chaves
h.keys => ["stuffy", "cloak", "choice"]
E está ai as três chaves que nosso hashe contém.
1.3 – Acessando Valores.
h["choice"] => "escolha"
Acho que não precisa explicar né ?
Temos outro método chamado values, como o primeiro que agente viu era chamado keys e você viu o que ele retornou, imagino que você já saiba o que este retorna:
h.values => ["abafado", "capa", "escolha"]
OHHHH, retornou os valores.
Com esses dois conceitos de keys e valeus em mente vamos fazer um loop para acessar todos os valores:
h.keys.each do |chave|
puts "#{chave} = #{h[chave]}"
end
stuffy = abafado
cloak = capa
choice = escolha
2 – Adicionando novos elementos
Podemos adicionar novos elementos em um hashe, para isso temos dois métodos o merge e o merge!, listados na lista acima, vamos fazer dois exemplo usando os dois métodos é ver o que acontece.
numeros = {"1"=>"um","2"=>"dois","3"=>"tres"}
=> {"1"=>"um", "2"=>"dois", "3"=>"tres"}
Com merge
numeros.merge( {"4"=>"quatro"} )
=> {"1"=>"um", "2"=>"dois", "3"=>"tres", "4"=>"quatro"}
numeros
=> {"1"=>"um", "2"=>"dois", "3"=>"tres"}
Com merge!
numeros.merge!( {"4"=>"quatro"} )
=> {"1"=>"um", "2"=>"dois", "3"=>"tres", "4"=>"quatro"}
numeros
=> {"1"=>"um", "2"=>"dois", "3"=>"tres", "4"=>"quatro"}
Viu? Podemos concluir então que o primeiro método( merge ) não altera o hashe original, e o segundo já faz as alterações diretamente no original “gravando” as mudanças.
3 – Melhorando um pouco.
Esses exemplo acima, como você pode notar as chaves e os valores são representados com strings, isso não é bom, isso é feio, existe um tipo no ruby chamado symbol(símbolos), eles são representando com dois-pontos( : ) antes do nome, por exemplo :home.
Então vamos mudar nosso modo de criar hashe e usar symbols.
nums = {:um=>"1", :dois=>"2"}
=> {:um=>"1", :dois=>"2"}
Se você já andou mexendo com o Rails muito provavelmente você encontrou símbolos para tudo quanto é lado.
Então porque usar símbolos?
• São mais bonitos que Strings.
• O código fica melhor para ler
• Você economizara memória
• São usadas muito no Rails
Bom chegamos ao final, obviamente isso não é tudo, recomendo olhar a documentação do Ruby, e ir testando todos os métodos no IRB, novamente se alguém vier a ler isso e achar erros, me informe através dos comentários, ficaria feliz se quem ler esse post deixar um comentário dizendo o que achou.
Abraço a todos.
Blog at WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.