Ruby em Vinte Minutos

sábado, 12 de dezembro de 2009 0 comentários

Introdução

Este é um pequeno tutorial de Ruby que não deverá demorar mais de 20 minutos a completar. Assume-se á partida que já tem o Ruby instalado. (Se não tem o Ruby no seu computador, faça o download e instale-o antes de começar.)

Ruby Interactivo

Abrir o IRB.
  • Se está a usar Mac OS X abra o Terminal, escreva irb, e depois pressione a tecla enter.
  • Se está a usar Linux, abra uma shell e escreva irb, seguido de enter.
  • Se está a usar Windows, abra fxri a partir do atalho para o Ruby no seu menu Iniciar.
irb(main):001:0>
Ok, abriu. E agora?
Escreva isto: "Ola Mundo"
irb(main):001:0> "Ola Mundo"
=> "Ola Mundo"

O Ruby obedeceu-lhe!

O que é que sucedeu? Será que acabamos de escrever o mais pequeno programa «Olá mundo»? Não exactamente, a segunda linha é a forma de o IRB nos dizer qual o resultado da última expressão que avaliou. Se desejarmos imprimir «Ola Mundo» necessitamos de um pouco mais:
irb(main):002:0> puts "Ola Mundo" 
Ola Mundo 
=> nil
puts é o comando básico para imprimir algo em Ruby. Mas então o que é aquele => nil ? É o resultado da expressão. puts retorna sempre nil, o que em Ruby é o valor que representa o nada absoluto.

Uma Máquina Calculadora gratuita

Já temos neste momento conhecimento suficiente para utilizar o IRB como uma calculadora básica:
irb(main):003:0> 3+2
=> 5
Três mais dois. Suficientemente fácil. E então três vezes dois? Pode escrevê-lo, é suficientemente curto, mas também podemos voltar atrás e mudar o que acabamos de inserir. Carregue na tecla Seta para cima do teclado e veja se tal o leva à linha com 3+2. Se tal suceder, use a tecla da seta para a esquerda para mover o cursor para a frente do sinal de mais + e depois use a tecla de backspace para mudar o sinal para *.
irb(main):004:0> 3*2
=> 6
De seguida vamos tentar três ao quadrado:
irb(main):005:0> 3**2
=> 9
Em Ruby ** é a forma de dizer potência de. Mas o que acontece quando queremos saber o inverso disto ou seja a raiz quadrada de algo?
irb(main):006:0> Math.sqrt(9)
=> 3.0
Muito bem, o que aconteceu aqui atrás? Se disse “que estava a determinar a raiz quadrada de nove” então está correcto. Mas vejamos as coisas com mais pormenor. Primeiro de tudo, o que é Math?

Módulos, Agrupar Código por Tópico

Math é um módulo nativo para funções matemáticas. Os módulos têm dois papeis em Ruby. Este é um desses papeis: agrupar métodos semelhantes em conjunto sobre um nome familiar. Math também contém métodos como sin() e tan().
Depois segue-se um ponto final. O que faz o ponto? O ponto final é como se identifica o receptor de uma mensagem. Qual é a mensagem? Neste caso é sqrt(9), o que significa chamar o método sqrt, uma abreviatura em língua inglesa para “square root (raiz quadrada)” com o parâmetro 9.
O resultado desta chamada de método é o valor 3.0. Se repararmos bem, o resultado não é apenas 3. Mas isso deve-se ao facto da raiz quadrada de um número na maioria dos casos não ser um inteiro e, assim sendo, o método retorna sempre um número de vírgula flutuante.
E se nos quisermos lembrar do resultado desta matemática toda? Podemos atribuir o resultado a uma variável.
irb(main):007:0> a = 3 ** 2
=> 9
irb(main):008:0> b = 4 ** 2
=> 16
irb(main):009:0> Math.sqrt(a+b)
=> 5.0
Como calculadora isto é muito bom mas nós estamos a afastarmos-nos da mensagem mais tradicional Ola Mundo que os guias de iniciação normalmente focam…


E se quisermos dizer “Olá” varias vezes sem cansar os dedos? Temos que definir um método!
irb(main):010:0> def h
irb(main):011:1> puts "Olá Mundo!"
irb(main):012:1> end
=> nil
O código def h começa a definição do método. Diz ao Ruby que estamos a definir um método, cujo nome é h. A linha seguinte é o corpo do método, a mesma frase que vimos antes: puts "Olá Mundo". Finalmente, a última linha end diz ao Ruby que terminámos a definição do método. A resposta do Ruby => nil diz-nos que sabe que terminamos a definição do método.

As Breves e Repetitivas Vidas de um Método

Agora tentemos correr o método algumas vezes:
irb(main):013:0> h
Olá Mundo!
=> nil
irb(main):014:0> h()
Olá Mundo!
=> nil
Bem, esta foi fácil. Chamar um método em Ruby é tão fácil como mencionar o seu nome ao Ruby. Se o método não tiver parâmetros é tudo o que precisamos. Podemos também colocar os parênteses vazios se desejar-mos, porem estes não são necessários.
E se o que queremos é dizer ola a uma pessoa só, e não ao mundo inteiro? Para isso basta redifinir h para que aceite um nome como parâmetro.
irb(main):015:0> def h(nome)
irb(main):016:1> puts "Olá #{nome}!"
irb(main):017:1> end
=> nil
irb(main):018:0> h("Matz")
Olá Matz!
=> nil
Parece funcionar… mas vamos pausar um minuto para ver o que se passa aqui.

Reservando espaços numa String

O que significa a expressão @#{nome}? É a forma de inserir alguma coisa numa string. Aquilo que se encontra entre chavetas transforma-se numa string (se já não o for) e é substituído naquele ponto da string. Podemos também usar isto para ter a certeza de que o nome de alguém se apresenta em letra maiúscula:
irb(main):019:0> def h(nome = "Mundo")
irb(main):020:1> puts "Olá #{nome.capitalize}!"
irb(main):021:1> end
=> nil
irb(main):022:0> h "chris"
Olá Chris!
=> nil
irb(main):023:0> h
Olá Mundo!
=> nil
Podemos encontrar aqui um truque ou dois. Um deles é que estamos a chamar novamente o método sem recorrer aos parênteses. Se aquilo que estamos a fazer for óbvio então os parênteses são opcionais. O outro truque é o parâmetro Mundo usado por omissão. O que isto quer dizer é que “Se o nome não for fornecido, então usamos o nome por omissão "Mundo".

Evoluindo para um Anfitrião

E se quisermos criar um Anfitrião mais “sério”? Um que se lembre do nosso nome, nos dê as boas vindas e nos trate com o respeio devido? Podemos usar um objecto para esse efeito. Vamos então criar, a classe “Anfitrião”.
irb(main):024:0> class Anfitriao
irb(main):025:1>   def initialize(nome = "Mundo")
irb(main):026:2>     @nome = nome
irb(main):027:2>   end
irb(main):028:1>   def diz_ola
irb(main):029:2>     puts "Olá #{@nome}!"
irb(main):030:2>   end
irb(main):031:1>   def diz_adeus
irb(main):032:2>     puts "Adeus #{@nome}, volte sempre."
irb(main):033:2>   end
irb(main):034:1> end
=> nil
A nova palavra chave aqui é class. Esta define uma nova classe chamada Anfitrião e uma quantidade de métodos para essa classe. E o @nome ? É uma variável de instância e está disponível para todos os métodos da classe. Como podemos ver está a ser utilizada por diz_ola e diz_adeus.
Então como é que pomos a classe Anfitrião em movimento?


Vejamos então o nosso novo programa de modo mais aprofundado, de notar que as linhas iniciais começam com um sinal de cardinal(#). Em Ruby, algo após um sinal de cardinal é considerado um comentário e ignorado pelo interpretador. A primeira linha do ficheiro é um caso especial, sob um sistema operativo do tipo Unix, isto indica á shell como executar o ficheiro. Os restantes comentários só se encontram ali para clarificação.
O nosso método dizer_ola tornou-se um pouco mais complexo:
# Dizer ola a todos
def dizer_ola
  if @nomes.nil?
    puts "..."
  elsif @nomes.respond_to?("each")
    # @nomes é uma lista de algum tipo, iterar!
    @nomes.each do |nome|
      puts "Ola #{nome}!"
    end
  else
    puts "Ola #{@nomes}!"
  end
end
Agora toma o parâmetro @nomes e toma decisões. Se for nil, só imprime três pontinhos. Não há razão para cumprimentar ninguém, certo?

Ciclos e Voltas—ou seja Iterações

Se o objecto @nomes responde a each, isto significa que é algo sobre o qual se pode iterar, assim, fazemos iterações sobre o mesmo e saudamos cada pessoa à sua vez. Finalmente, se @nomes é outra coisa qualquer, deixamos que se transforme numa string automaticamente e fazemos a saudação por omissão.
Vejamos o iterador com mais profundidade:
@nomes.each do |nome|
  puts "Ola #{nome}!"
end
each é um método que aceita um bloco de código e que depois o executa para cada elemento numa lista, e a parte entre do e end é exactamente um bloco desses. Um bloco é como uma função anónima ou lambda. A variável entre barras verticais é o parâmetro para este bloco.
O que sucede aqui é que para cada entrada na lista se associa nome a esse elemento da lista e depois a expressão puts "Ola #{nome}!" é executada com esse nome.
A generalidade das outras linguagens tratar de passar por uma lista usando o ciclo for, que em C se assemelha a algo como:
for (i=0; i<numero_de_elementos; i++)
{
  fazer_algo_com(elemento[i]);
}
Isto funciona mas não é muito elegante. Necessitamos de uma variável descartável semelhante a i, temos que determinar previamente qual o tamanho da lista e temos que explicar como percorrer a lista. O modo de operar em Ruby é muito mais elegante, os trabalhos domésticos são escondidos dentro do método each, tudo o que necessitamos de lhe dizer é o que fazer com cada elemento. Internamente, o método each irá essencialmente chamar yield "Albert", depois yield "Brenda" e depois yield "Charles", e assim sucessivamente.

Blocos, Uma das funcionalidades mais poderosas da Ruby

O poder real dos blocos é quando tratam de algo mais complexo que listas. Para além de tratar dos detalhes simples de trabalhos domésticos dentro do método, também pode tratar da instalação, limpeza e erros—tudo de forma escondida das preocupações do utilizador.
# Dizer adeus a toda a gente
def dizer_adeus
  if @nomes.nil?
    puts "..."
  elsif @nomes.respond_to?("join")
    # Juntar os elementos da lista com vírgulas
    puts "Adeus #{@nomes.join(", ")}.  Voltem em breve!"
  else
    puts "Adeus #{@nomes}.  Volta em breve!"
  end
end
O método dizer_adeus não usa o método each, em vez disso verifica se @nomes responde ao método join e se sim, usa-o. Caso contrário limita-se a imprimir a variável como string. Este método não se preocupa com o verdadeiro tipo da variável, está só a limitar-se a tirar partido de algo conhecido por “Duck Typing”, no sentido de que “se anda como um pato, e faz quá quá como um pato então…”. A vantagem disto é não restringir desnecessariamente os tipos de variáveis suportados. Se alguém aparecer com um novo género de classe de lista, desde que essa lista tenha implementado método join com a mesma semântica que as outras listas, então tudo irá funcionar como planeado.

Executar o Script

Está pois apresentada a classe MegaAnfitrião, o resto do ficheiro só chama os métodos nessa classe. Existe um último truque a tomar nota, é a linha:
if __FILE__ == $0
__FILE__ é uma variável mágica que contém o nome do ficheiro actual. $0 é o nome do ficheiro usado para iniciar o programa. Esta verificação diz: “Se este é o ficheiro principal a ser usado então…”, isto permite que um ficheiro seja usado como biblioteca e nesse contexto não executar código mas caso o ficheiro seja usado como executável então executa esse código.

Foi um prazer

Pronto, isto foi uma visita rápida ao mundo do Ruby. Existe muito para explorar, as diferentes estruturas de controlo que Ruby oferece, o uso de blocos e de yield, módulos como mixins e muito mais. Espero que esta pequena amostra da linguagem Ruby tenha deixado o desejo de aprender mais.
Se sim, por favor visite a nossa secção de Documentação , onde encontraram ligações para manuais e guias, todos disponíveis em formato digital.
Ou, se desejar ler mesmo um livro, veja a nossa biblioteca de livros (ligação ao exterior) para títulos disponíveis à venda online ou numa livraria aí perto.



Fonte

Forum, fora do ar ;*

0 comentários
Pootz, que coisa ein, eu doido pra postar algumas coisas, afim de escrever, me deparo com o forum, fora do ar! ¬¬''
poxa, e já faz um tempo que tá assim, isso ta me dando uma raiva...
eu tentei usar o anonymouse e o Hide my ass, com os dios, consegui acessar o forum, de principio, mas agora nao tá dando.. isso me deixa furioso! Argh :S
espero que isso, acabe, e o Forum, volte logo...
nao deixem de acessar, pois, em varias regioões, ele esta ON sem problemas..

nemesiz.forum.st

f0nt_Drk [s]

Macbook Air Ad

0 comentários
Como diz a fláá, Um dia você vai ser meu, meu amor... 



Histórias De Uma Madrugada...

0 comentários
.•*    Flávia     diz:
*Aee.
*Era uma veeez...

Num lugar muito distante, onde nada mais se ouvia a nao ser o som do vento, nada se sentia a nao ser o frio da noite, e nada se via alem da escuridão...
Nesse lugar muito distante, existia uma pequena escola de magia. onde estuvam dez jovens. 4 homens 4 mulheres e duas criaturas sobrenaturais...

Certo dia..
                 Gabriel             s2         paty                  diz:
*4 homens 4 mulheres 2 duas criaturas sobrenaturais ki na verdade eram 2 travecos
*criaturas misticas ki mudam sua imagem ao longo de sua existencia....
*certo dia 1 bruxo mtu feio chamado bruner, ki tinha kara de idiota e era fã de academia, decidiu assumir o controle do reino e puxar a banda no rei e da carrinhu na esposa dele, a lider dos feiticeiros e professora da escola de magia: manuela
*^^
(F).•*


(F).•* Flávia diz:
*O terrivel brunner, na verdade nao era um bruxo convicto, e sim apenas um dos estudantes que se disfarçava de bruxo durante o dia e de criatura mistica (traveco) durante a noite.
Assim ele conseguia diamantes (moeda local) o suficiente para poder paagar os seus estudos ...
Sendo assim , ele armou um plano malefico para tirar a rainha manuella do poder, assacinando o seu esposo por 30 longos dias!
(eu nao queria ser rainha droga)
A magia so podia ser usada com prazo determinado pra acabar o feitiço e nesses 30 dias ele pretendia governar...
o seu primeiro ato foi...


Gabriel s2 paty diz:

*(vc eh rainha e lider da escola)
*o primeiro ato de bruner foi chamar seu fiel lakaio.. gabriel, o aluno nerd, magrelo, feio e rejeitado para ajudar com o plano... gabriel n era ruim, mas estava cansado de tomar broncas de sua professora, e de ver como ela era linda e perfeita, ele tbm keria ser ki nem ela, sim de noite ele se chamava gabriela. mas apenas bruner sabia dessa mudança, usando esse artificio.. bruner convenceu gabriel a rapitar a rainha manuella, e levala para a casa de bruner.. ki mais parecia 1 prisão... era 1 castelo medio com 1 masmorra enorme...


Gabriel s2 paty diz:

*mas existia 1 grande homem.. o melhor aluno de manuella... bruno, ele era forte, moreno alto bonito e sensual... realizava todos os desejos.. telefone 555-425932....(ui bofe) como era 1 pessoa mto correta e grande amigo da rainha e professora, ele certamente n gostaria nada do rapto... e deveria ser eliminado, bruner... ki era mtu esperto garoto malandro acostumado a vender o almoço a comprar a janta, tinha tbm 1 plano para ki bruno n entra-se em seu caminho
*...
(F).•* Flávia diz:
*hmm
Gabriel s2 paty diz:
*hehehe
(F).•* Flávia diz:
*(troxa)
*vamo la...
Gabriel s2 paty diz:
*hehehehe.


(F).•* Flávia diz:
*Na verdade ela nao era alto, tinha 1.75 e era pouco maior que a rainha (vale lembrar), nao foi por acaso que ele soube do rapto... Depois de estudar mais uma vez a materia mestrada pela teacher, sem entender oq ela quis dizer com. " por favor, nao seja tao intenso, concentre-se" resolveu discar um 9090 parao castelo, e para a sua surpresa caiu na secretaria eletronica...

mas ao inves de ouvir a voz da rainha ele ouviu a gargalhada malefica de brunner e logo sacou q havia algo errado.
mais que depressa, montou em seu cavalo veloz, e calvalgou ate o castelo, antes porem, pegou uma maça para a professora.


(F).•* Flávia diz:
Lá chegando, esbaforido e suado, entrou castelo a dentro e se dirigiu aos aposentos da rainha q estavam completamente arrombados.
la econtrou 2.000 copias piratas de jogos e softwares pagos, chicletes de hortelã e roupas intimas...

mas algo o chamou a atenção e lhe deu uma pistaa sobre o sequestroo. perto da lareira ele econtrou.....
*(continue)



Gabriel s2 paty diz:
*perto da lareira ele encontrou o 1 kit de makiagem... ki n pertencia a rainha.. pois ela nunca usaria 1 sombra tão baranga... e puxando a memoria, bruno lembrou ja ter visto akele kit na pochete de bruner... na escola de magia, mas isso n era suficiente para saber o paradeiro de bruner, então ele lembrou ki ele era mtu grudado a gabriel, o nerdzinhu ki ele qze nunca conversava com bruno. talvez os dois tivesem 1 caso, e talvez achando gabriel ele podese encontrar bruner q era mtu reservado na escola e poucos sabiam onde ele morava, so gabriel conhecia onde era seu castelo. bruno decidiu procurar por gabriel no centro da vila, ele sabia ki o nerd gostava de umas birita e ki com certeza estaria em algum buteco...



(F).•* Flávia diz:
*Estava mais que certo, nao demorou muito logo na primeira esquina, encontrou o sujeito tonto como um dragão alado depois de uma batalha intensa de jogos de paciencia no pc.
Corajoso como era, chamou ele na chincha e disse:

eu sei q vc tem algo a ver com o rapto da rainhaa, diga -me ou ou... lhe enfiarei minha espada que comprei no anime fetival de 2007...

O nerde gabrieel nao conteve-se e mesmo agarrado pela gola do uniforme soltou a perola:
"uuuuuuuuuuuuuuuui, vai me enfiar sua espada bofe? so se for com carinho"
mas imediatamente voltou a compustura, visto q logo ao lado estava uma bela donzela de nome secreto, escutando tudoo.
como bom nerd q era, amigo leal e sincero, disse q jamais contaria algo, msm se soubesse.

mas bruno percebeu q precisaria ser um pouco mais duro e imediatamente lhe ...
*(sobraa, continua ae)



Gabriel s2 paty diz:
*humm
*arrancou a peruca, ki no momento estava na sacola, pois gabriel ainda n tinha começado a bater ponto e guardava a sua segunda roupa na mochila, bruno lhe disse: ahaamm eu sabia ki vc tbm era 1 dos travecos, 1 criatura mistica ki muda de forma durante a noite, pois se vc n me contar imediatamente o paradeiro da teacher eu vou espalhar pra todo mundo ki vc eh traveco, vo bota no orkut, vo fala pra galera do af, pra turma la du barsinhu, pra torcida do flamengo, e pra todo mundo na escola
*e a sua vida de nerdzinhu estara acabadaaa vc sera rejeitado ainda mais e a suas chances de serem 1 pessoa normal estaram para sempre acabadas.. então desembucha, onde ta a rainha! e onde ta o outro traveco ki eh teu amigo
*...
(F).•* Flávia diz:
*Diante dessas ameaças...
Gabriel s2 paty diz:
*...
 
 (F).•* Flávia diz:
*Gabriel, q logo seria Gabriela, que era super amiga da garota em segredo, que por sinal era afim de Gabriel ... sentiu-se intimidado e contou q brunner tinha rapitado a rainha e pior, desejava jogar a noite inteiraa adedanha com ela disputando a coroa real e liderança da escola d e magia!

gabriel se sentiu um monstro depois de ter entregado seu pareciro das nights...
mas ele havia sido ameaçado e chamado pelo nome de guerra! nao era muita humilhação..

tinha q se vingar de bruno , q se dirigia para a casa de brunner com ajuda de um mapinha de 5h comprados num oiapoque proximo, enquanto isso gabriel...
 
 
 

Gabriel s2 paty diz:
*kkk
*então
*gabriel pegou o seu tamanco plataforma, ki na verdade era 1 arma secreta e correu para o castelo de bruner, com ajuda de teu mapinha, apos alguns pantanos e alguns crocodilos mortos a tamancada, gabriel chegou na masmorra, e contou ki bruno estava solto e ki era perigoso e tava armado. apesar de ser 1 bofe deveria ser eliminado, pois a coroa era mais importante xD então bruner viu ki era a hora da batalha final e ki seu castelo precisava ser bem defendido, por isso ele mantinha grandes e poderosos guardas na folha de pagamento, ele reuniu o capitão da guarda e ...
 
(F).•* Flávia diz:
*Claro...
*O capitão era um moço chamado Pedro ..um cara branquelo com cabelo grande e preto que gostava de tocar guitarra nu.
ele ouviu atentamente as instruçoes de brunner, sendo assim quando bruno chegou encontrou uma barreira de homens com pranchetas nas maos... era horriveeeeeeeeeeel, todos eles faziam perguntas de historia geogrfia e ciencias, e ainda tinha uma equipe especializada em tabuuada.

foi fatal.
bruno sentiu uma lagrima caindo no canto do olho... diante da pergunta:
*

Parou um instante, nao ele nao sabia, ceuus o qu e fariaa o destino da rainha estava em suas maos... sem ela, ele jamais poderia ser um homem completoo. chorou, pirraçou, ameaçou a todos com sua arma, mas nenhum cedeu.. a pergunta continou pairando no ar...
 
(F).•* Flávia diz:
7 x 7 + 20 :
7 x 7 + 20 :
7 x 7 + 20 :
7 x 7 + 20 :

ele estava perdido , nao sabiaa, naao...
*que mais poderia fazer se nao lembrar os belos momentos juntos da teacher...
sim as broncas, os puxoes de orelha, siim , a materia explicada ao pe do ouvido 200 vezes..

mas ele nunca tinha se concentrado, nao na materiaa
enquanto ela explicava os numeros correpondentes a cada feitiço, e suas contas hexadecimais, na mente so lhe vinha o pensamentoo o mesmo, frequente, ele e a professora, sozinhos na sala de magia fazendo um belo ...

nao terminou o raciocinioo, enxugou as lagrimas e saiu gritandoooo:
eu seeeeeeeeeeei, uii eu sei a respostaa seus merdaas!!
*(continue)
 
Gabriel s2 paty diz:
*7x7 + 20 eh ingual a!! 70 e deiz xD!! bruner do topo da muralha soltou 1 enorme gargalhada... eh claro ki a resposta estava incorreta... bruno, ki era 1 bom aluno, infelizmente era pessimo em matematica, ele pretendia fazer biblioteconomia na ufmg. então mais ki derrepente 1 buraco se abriu no chão e bruno caiu por um tunel.. ate chegar a masmorra do castelo, la ele deu de kara com 1 leão velho e preguiçoso, ki deveria ataca-lo mas estava com mta preguiça e preferiu continuar durmindo. então bruno seguiu por 1 corredor ki mais parecia com 1 corredor de cadeia, ate dar de car com 2 guardas ki ele matou usando sua espada de lusinha do anime festival 2007, eles n morreram com punhaladas nas costas, e sim com o barulho da espada ligando, ki os assustou e os fez cair em 1 poço de pinga 99%teor alcolico, eles derreteram qze ki instantaneamente.... então bruno atravesou a passarela por cima do posso de acido e abriu a porta para sair da masmorra,
 
Histórias De Uma Madrugada XV
Gabriel s2 paty diz:

chegando na cozinha do castelo, onde ele encontrou
(F).•* Flávia diz:
*kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
*(caraca, vc é muito booom)


To Be Continue ...
 
Writen by Fláávia.
 
[s]    
      

Poesias da Fláá

0 comentários

Nós e a Chuva...

Disquei os numeros sem querer discar, esperei atender sem querer que atendesse... falei sem querer falar, aquelas palavra que cortaram o ar... como você sentiu o vento cortando o seu rosto e os pingos de chuvaa mohando o vidro da janelaa...

Ah como eu queria ser mais corajosaa.
Mas algo sempre tem que atrapalhar... Chuva chuvaa, você veio me derrubar ou me ajudar?

"
*o vento forte fora da janela
*que me trazia ciscos ao olho
*e a duvida na cabeça
*quando eu entrei no onibus
*eu no fundo ouvi
*ela não vai...
*não deu muito tempo
* o cel toca... "
.
Do outro lado da linha, alguém que não queria ter ligado, falado, e muito menos desligado...

Droga de chuvaa, você veio me ajudar ou me atrapalhar?


Liesely.•

Um Genio, um idolo, uma 'polemica'..

0 comentários
Nietzsche ele realmente, é um cara foda, queria poder ter tido a honrra de o conheçer..
Bom, ele é muito polemico, pelo fato de que parte ou a maioria de nosssa sociedade é futil, mediocre, enfim.. voces devem me entender..
não quero julgar ninguem, apenas estou lhes moestrando um fato ;}
Agora vamos a um pouco de Nietzsche para nossa alma...


A minha felicidade
"Desde que me cansei de procurar,
aprendi a encontrar;
Desde que o vento começou a soprar-me na face,
velejo com todos os ventos."
"A educação consiste no condicionamento de um indivíduo, através da promessa de várias compensações e vantagens, de modo a que ele adopte um modo de pensar e se comportar que, logo que se tornem um hábito, instinto ou paixão, os dominarão «para o bem geral» mas, em última instância, para sua própria desvantagem. Somos vítimas das nossas virtudes, que nos transformam numa mera função do todo social." (21)
"Muitas vezes consideramos uma ideia mais verdadeira apenas porque há qualquer coisa de muito belo e divino no ritmo e na forma métrica do seu enunciado. Não é divertido notar que os filósofos mais sérios, por mais rigorosos que sejam na sua busca da certeza, citam frequentemente as palavras dos poetas para dar às suas ideias mais força e credibilidade ? E, no entanto, é mais perigoso para uma verdade se um poeta concorda com ela do que se ele a contradiz! Porque, como dizia Homero, 'muitas mentiras contam os poetas'." (84)
"O que é a originalidade ? É ver qualquer coisa que ainda não tem nome e que, por isso, não pode ainda ser mencionada, embora esteja mesmo à frente dos olhos de toda a gente. A maioria das pessoas não consegue ver aquilo que não tem um nome. As pessoas originais são as que já deram (ou têm capacidade para dar) nomes às coisas." (261)
"Um pensador é alguém que sabe como tornar as coisas mais simples do que aquilo que elas são na realidade." (189)
"Os pensamentos são as sombras dos nossos sentimentos - sempre mais escuros, mais vazios e mais simples." (179)
"O egoísmo é a lei da perspectiva aplicada aos sentimentos: o que está mais próximo parece-nos maior e mais pesado e, à medida que nos afastamos, o seu tamanho e peso diminuem." (162)
"Tabela da multiplicação. - Um está sempre errado, mas com dois, começa a surgir a verdade. Um não consegue provar o seu caso, mas dois são irrefutáveis." (260)
"Onde começa o bem e acaba o mal ? O reino da bondade começa onde a nossa imperfeita percepção deixa de notar o «impulso do mal» porque se tornou demasiado subtil; a partir desse ponto, o sentimento de que entramos no reino da bondade excita os nossos impulsos que se sentem ameaçados e limitados pelos «impulsos do mal»: os sentimentos de segurança, de conforto, de benevolência. Quanto mais imperfeita for a nossa percepção, maior será a extensão do bem. É por isso que as crianças e pessoas comuns gozam de uma eterna boa disposição e também por essa razão que os grandes pensadores sofrem sempre de uma melancolia semelhante à de uma má consciência." (53)
"Em que é que eu acredito ? Acredito que os pesos de todas as coisas têm que ser novamente determinados." (269)
"O que é ser livre ? É não termos vergonha de sermos quem somos." (275)
"Causa e efeito. Dizemos que a ciência «explica», mas, na realidade, apenas «descreve». Descrevemos hoje melhor, mas explicamos tão pouco quanto todos os nossos predecessores. Descobrimos uma sucessão múltipla onde o homem ingénuo e o investigador das civilizações mais antigas se apercebia apenas de duas coisas: 'causa' e 'efeito', como se costumava dizer. E deduzimos: isto e isto tem de se dar primeiro para que depois se siga aquilo - mas, com isso, não compreendemos absolutamente nada. Em qualquer processo químico, por exemplo, as transformações continuam, tal como antes, a aparecer como um «milagre». E como haveríamos nós de conseguir explicá-las? Operamos unicamente com coisas que não existem, com linhas, com superfícies, corpos, átomos, tempos divisíveis, espaços divisíveis! Como seria possível sequer uma explicação, se traduzimos tudo primeiro numa imagem, na nossa própria imagem! Na verdade, temos à nossa frente um continuum, de que isolamos algumas partes, da mesma maneira que, num movimento, nos apercebemos apenas de pontos isolados e, portanto, não vemos, na realidade, esse movimento, mas deduzimos que existe. Um intelecto que visse a causa e o efeito como um continuum, e não, à nossa maneira, como parcelamento e fragmentação arbitrários, que visse o curso do acontecer, repudiaria o conceito de causa e efeito e negaria toda a condicionalidade." (112)
"A origem do nosso conceito de conhecimento. Que entende o povo verdadeiramente por conhecimento? Só isto: algo de estranho deve ser transformado em algo de familiar. E para nós, os filósofos, não é a nossa necessidade de conhecimento a mesma necessidade do que é conhecido, a vontade de, no meio de tudo o que é estranho, fora do usual e duvidoso descobrir algo que já não nos perturbe? Não será o instinto do medo que nos obriga a conhecer? Quando os que buscam o conhecimento reencontram algo nas coisas, sob as coisas ou por trás das coisas, que já é muito conhecido, como, por exemplo, a tabuada, ou a lógica, ou as nossas vontades e apetites, que felizes ficam logo! Porque «o que é familiar é conhecido», e nisso estão de acordo. Mesmo os mais cuidadosos entre eles acham que o que é familiar é pelo menos mais facilmente conhecido do que o que é estranho. Erro dos erros! O que é conhecido é habitual; e o habitual é o mais difícil de 'conhecer', isto é, de ver como problema, isto é, de ver como estranho, afastado, 'fora de nós'..." (355)
"O Veneno que mata as naturezas fracas é um fortificante para as fortes..e por isso não lhe chamam veneno.."

isso é  Nietzsche !


até.. f0nt_Drk [s]

Filosofia/Poesia..

0 comentários
Não poderia falar de filosofia, sem citar grandes filosofos, o mesmo com a poesia, mas eu aprendi, que nao é o nome que faz a pessoa, pois muitas poessoas desconhecidas, sao realmente fantasticas, mas sao meio que apagadas, nesse meio, entao, decidi, postar pensamentos, poesias, e textos, de meus parceiros, e parceiras, dos quais eu relamente admiro..

Linux Hardening

sexta-feira, 11 de dezembro de 2009 0 comentários

Linux Hardening

Autor: Bernardo Maia Rodrigues

CSIRT PoP-MG (csirt@csirt.pop-mg.rnp.br)
Última modificação: 27/02/2008

Introdução

Recomenda-se instalar versões atuais dos sistemas operacionais, que contêm correções e patches de segurança. Instalar versões antigas e fazer o upgrade em seguida pode ser problemático, deixando o sistema temporariamente vulnerável (caso existam pacotes com falhas). Serviços críticos como o apache, imapd, bind, devem estar sempre nas versões mais atuais. Softwares desnecessários devem ser desinstalados e pacotes inseguros devem ser substituídos por alternativas mais confiáveis.

Atualizações e Patches

Todo sistema operacional deve ser atualizado com frequência, assim como seus componentes e pacotes instalados. De tempos em tempos, grupos de segurança lançam Security Advisories, alertando para possíveis falhas em softwares específicos. Algumas distruibuições possuem um sistema automático para verificar se os pacotes estão desatualizados e passíveis de falhas, corrigindo e/ou emitindo um alerta ao administrador local.
O CSIRT PoP-MG possui uma documentação detalhando os processos de atualização para a maioria dos sistemas operacionais baseados em Linux:
http://www.csirt.pop-mg.rnp.br/docs/so/atualizacao.html

SSH

Modifique as configurações do SSH para permitir acesso usando o protocolo SSHv2 somente.
Editar o arquivo /etc/ssh/sshd_config e trocar a linha:
#PROTOCOL    1,2
para:
PROTOCOL     2
Vamos criar o grupo “sshlogin” para usuários que podem acessar o servidor remoto, e desabilitar o login do root no SSH:
vi /etc/ssh/sshd_config
Adicione as seguintes linhas:
#AllowUsers root
or
PermitRootLogin no
AllowGroups sshlogin
É possível restringir os hosts/IPs que acessam o servidor remotamente. Edite o arquivo /etc/hosts.allow (Substitua x.x.x.x pelos IPs dos usuários)
sshd : 127.0.0.1 : allow
sshd : 192.168.  : allow
sshd : 10.         : allow
sshd : x.x.x.x : allow
sshd : x.x.x.x : allow
sshd : ALL         :deny
A última linha vai restringir o acesso ao SSH, liberando apenas os IPS listados acima.

Serviços desnecessários e inseguros

Os seguintes serviços devem ser desinstalados


  • rshd
  • rlogind
  • rwhod
  • telnetd - substitua pelo ssh
  • ftpd - substitua pelo scp
  • sendmail
  • identd
Estes serviços podem ser desinstalados usando o gerenciador de pacotes do sistema operacional, ou através do comando chkconfig, desativando todos os níveis (exemplo: 'chkconfig –level 123456 sendmail off'). Além disso, pode-se remover as entradas específicas dos programas no boot do sistema operacional (/etc/inetd.conf e/etc/xinetd). Versões mais novas do chconfig editam as entradas do xinetd automaticamente.

Apache

Esconder a versão dos softwares utilizandos dificulta, em parte, a ação do invasor. No Apache, para esconder esta informação, basta alterar a seguinte linha do httpd.conf:
ServerTokens ProductOnly
ServerSignature Off
A diretriz ServerTokens controla a resposta do Servidor para os clientes sobre a versão do apache e do sistema operacional, além de informações sobre os módulos pré-compilados.


ServerTokens Banner do Servidor
ProductOnly Server: Apache
Major Server: Apache/2
Minor Server: Apache/2.0
Minimal Server: Apache/2.0.55
OS Server: Apache/2.0.55 (Debian)
Full (or not specified) default Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b
Se você quiser restringir o acesso à uma página para um determinado IP ou blocos de IPs, é possível configurar o Apache da seguinte maneira (editando o httpd.conf):
Order Deny,Allow
Deny from all
Allow from 200.0.0.0/16
Outra dica é nunca deixar que os diretorios listem o conteúdo, caso nao haja o arquivo index.html
Options +Indexes MultiViews
O Apache, na sua instalação padrão, acompanha vários módulos. A documentação do Apache descreve as funcionalidades de cada módulo. Em muitos casos, os módulos são desnecessários e podem ser desativados. Para isto, basta comentar as linhas precedidas por “LoadModule” no httpd.conf. Alguns módulos que podem ser desabilitados para casos específicos: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

MySQL

O MySQL, no seu modo padrão, deixa o usuário root sem senha. Usuários podem fazer login como root (sem especificar uma senha) e acessar as bases de dados com privilégios administrativos. Para testar se o servidor está sem senha de root, digite:
mysqladmin -u root status
ou
mysql -u root
Para configurar uma senha para a conta root do MySQL (trocar 'NOVA SENHA' pela senha desejada):
mysql -u root
mysql> UPDATE mysql.user SET password=PASSWORD('NOVA SENHA') WHERE user='root';
mysql> FLUSH PRIVILEGES;

Sniffer

Todo tráfego não criptografado que entra e sai na rede pode ser interceptado por programas que capturam pacotes. Para que uma placa possa capturar tráfego, ela deve estar ativa no modo promíscuo. Para verificar se a sua rede está sujeita a sniffer:
sudo infconfig eth0
Localize e compare as seguintes linhas:
#Sem Sniffer
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
#Promíscuo - Sujeito a Sniffer
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
Para desativar o modo promíscuo para uma interface de rede determinada, basta executar o seguinte comando:
ifconfig eth0 -promisc

Portas abertas

A verificação esporádica de portas abertas na rede é uma boa prática de segurança. Usando o NMAP, pode-se identificar portas abertas, programas responsáveis e versões de sistemas operacionais. O seguinte comando vai listar todas as portas abertas da máquina:
$> nmap -A -p 1-65535 localhost
PORT      STATE SERVICE    VERSION
514/tcp   open  shell?
Em seguida, para identificar o PID responsável pela porta:
$> sudo fuser 514/tcp
514/tcp:              6231
Finalmente, para desobrir o aplicativo responsável:
$> sudo ps 6231
PID TTY      STAT   TIME COMMAND
6231 ?        Ss     0:52 /usr/sbin/syslog-ng

Desconectando usuários inativos

Rotineiramente, administradores esquecem de fazer logout após terminar seus trabalhos, deixando a conta “root” aberta na máquina. Uma pessoa com acesso físico pode facilmente comprometer a máquina, instalando scripts maliciosos e adicionando usuários indevidos.
A solução para resolver este problema é fazer com que o shell faça o logout automaticamente após um certo período de inatividade. Para fazer isto, você deve configurar a variável especial do Linux chamada “TMOUT” com o tempo de inatividade em segundos antes do logout.
Edite o seu arquivo profile (/etc/profile) e adicione a seguinte linha em algum lugar após a linha onde se lê “HISTFILESIZE=” nesse arquivo:
TMOUT=3600
O valor que entramos para a variável está em segundos e representa 1 hora (60 * 60 = 3600 segundos). É importante observar que se você decidir colocar a linha acima em seu arquivo ”/etc/profile”, então o logout automático após uma hora de inatividade entrará em vigor para todos os usuários do sistema.
Se ao invés disso você quiser controlar quais usuários receberão o logout automático e quais não o receberão, você pode configurar esta variável no arquivo .bashrc (shell bash) ou .login (shell csh) , que ficam situados no diretório pessoal de cada um.

Kernel

O kernel é o “coração” do sistema operacional, e é uma das partes do sistema que mais recebe atenção por parte dos desenvolvedores, evoluindo constantemente. A cada nova versão do kernel mais recursos são incorporados, defeitos corrigidos, e constantemente recursos existentes são aprimorados tornando-se mais eficientes. Logo o administrador do sistema, além de conhecer o kernel, deve procurar se manter informado sobre o seu desenvolvimento, e se necessário atualizar o kernel do sistema sob sua responsabilidade.
Assim como qualquer software, versões mais antigas do Kernel possuem uma série de vulnerabilidades. Existem diversas falhas locais, que permitem usuários comuns ganhar acesso de super-usuário (elevação de privilégios) ao executar um exploit. Isto pode ser perigoso em servidores com um grande número de usuários locais e remotos, como em empresas e faculdades: um usuário com senha fraca pode ter sua conta comprometida ou até mesmo um usuário legítmo pode explorar estas falhas e tornar-se root.
Referência: http://www.linorg.cirp.usp.br/Guias.Conectiva/Guias_V.9.0/entendendo/kernel.html

Bastille Unix

Introdução

O programa de Hardening Bastille Hardening protege o sistema operacional, configurando o sistema de maneira proativa para aumentar sua segurança e reduzir as chances de comprometimento. O Bastile também pode ser usado para acessorar no processo de Hardening do sistema, reportando e detalhando cada configuração de segurança usada pelo programa.

O Bastile auxilia o usuário/administrador do sistema a escolher exatamente como “fortalecer” o sistema operacional. No modo de operação/hardening padrão, ele interage com o usuário fazendo perguntas , explicando cada tópico para, então, criar uma política baseada nas respostas do usuário. Logo em seguida, aplica-se as políticas no sistema. No modo de auditoria, ele cria um relatório para ensinar o usuário sobre as configurações de segurança disponíveis, além de informar quais configurações foram definidas/ajustadas.
O Bastile é extremamente útil, pois, além de atuar no Hardening do sistema, educa os usuários sobre segurança em geral, informando sobre todas medidas adotadas. Muitas empresas usam a seção interativa do Bastile para treinar novos administradores de sistema.


Sistemas operacionais suportados

  • Debian
  • Fedora Core
  • Gentoo
  • Mandriva
  • Red Hat/Red Hat Enterprise
  • SuSE/SuSE Enterprise
  • TurboLinux
  • Mac OSX

Instalação

Red Hat, SuSE e Mandrake

O Bastille suporta um grande número de distribuições do Linux . O pacote RPM do programa suporta os seguintes sistemas operacionais: Fedora Core, Red Hat Enterprise, Red Hat Clássico (Red Hat 6 até o 9), SuSE e Mandrake. Nestes sistemas, o Bastille pode ser instalado pelo RPM ou pelo source (tarball).


Para instalar o programa você deve instalar o RPM e um módulo PERL para prover a interface gráfica ou baseada em texto.
Para instalar o RPM do Bastille, execute o seguinte comando:
rpm -ivh Bastille-3.0.9-1.0.noarch.rpm
      
Para usar o modo interativo de Hardening, deve-se instalar o perl-TK (para a interface gráfica) ou o perl-Curses (para o modo de texto/console). Estes dois pacotes não são necessários no modo de Auditoria, que apenas gera relatórios em HTML e texto puro). Os módulos para interface gráfica podem ser obtidos na página http://bastille-linux.sourceforge.net/perl_rpm_chart.htm
rpm -ivh perl-Tk-a.b-c.i386.rpm
rpm -ivh perl-Curses-d.e-f.i386.rpm

Debian

Existe um pacote do Bastille no repositório do Debian (http://packages.debian.org/bastille), que pode ser baixado e instalado com o gerenciador de pacotes aptitude:
sudo apt-get install bastille

Gentoo

O Bastille também está presente no portage do gentoo, e pode ser instalado usando o emerge:
sudo emerge app-admin/bastille

Mac OS X

A versão para Mac pode ser baixada no seguinte endereço: http://prdownloads.sourceforge.net/bastille-linux/BastilleOSX-3.0.9.tgz?download
A instalação deve ser feita manualmente, uma vez que o pacote não acompanha um instalador específico para o sistema.

Execução

Para executar o Bastille no modo de interface gráfica, execute o seguinte comando:
bastille -x



Para o modo de Texto:
bastille -c



Os comandos do Bastille são altamente intuitivos e todas configurações têm explicações detalhadas. Um comando útil do programa é o RevertBastille, que retoma todas as configurações originais do sistema anteriormente às modificações do Bastille.



Módulos

O Bastille possui os seguintes módulos e scripts:

Firewall

  • Script para filtrar Pacotes

Permissão de Arquivos

  • Restrigir permissões das ferramentas administrativas
  • Desabilitar SUID ping
  • Desabilitar SUID at
  • Desabilitar SUID traceroute
  • Desabilitar impressão com SUID

Segurança de Contas

  • Desabilitar protocolos perigosos
  • Fazer com que as senhas expirem regularmente
  • Restringir acesso ao cron
  • Restringir log-in do root no TTY1-6
  • Proteger boot do LILO com senha
  • Mudar tempo de espera do LILO para 0
  • Configurações de boot do hard-drive
  • Desabilitar reboot usando CTRL-ALT-DEL
  • Proteger modo de usuário-único com senha

Segurança do inetd

  • Restringir TCP wrappers e xinetd
  • Desativar telnet
  • Desativar FTP

Restringindo acesso a programas

  • Restringir acesso/desativar o compilador

Módulo MiscPAM

  • Limitar uso de recursos
  • Restringir acesso ao console

Log

Daemons

  • Desativar daemons de roteamento
  • Deixar o sendmail no modo daemon
  • Executar o sendmail pelo cron para mensagens externas
  • Desabilitar comandos VRFY e EXPN do sendmail

Atualizando o kernel no Ubuntu para o 2.6.30

0 comentários

Caros amigos,


Esse procedimento pode trazer alguns problemas para alguns (principalmente para quem não está acostumado com os problemas que podem decorrer de uma atualização do kernel); mesmo assim, segue o procedimento sobre como atualizar o kernel do Ubuntu Linux.

1. Faça o download do pacote: linux-headers-2.6.30-020630_2.6.30-020630_all.deb

2. Download dos pacotes do kernel headers:

i386: linux-headers-2.6.30-020630-generic_2.6.30-020630_i386.deb
AMD64: linux-headers-2.6.30-020630-generic_2.6.30-020630_amd64.deb

3. Download o compilador do kernel:

i386: linux-image-2.6.30-020630-generic_2.6.30-020630_i386.deb
AMD64: linux-image-2.6.30-020630-generic_2.6.30-020630_amd64.deb

4. Instale os arquivos NA ORDEM EXATA ACIMA!!!!

Para os novatos, basta fazer assim: abra o terminal e digite:

$ sudo dpkg -i *.deb

Nota: o terminal tem que estar na mesma pasta onde estão os pacotes que acabou de baixar.

5. Reboot e selecione o kernel no menu do GRUB.
 
Copyright © Masterplan
Blogger Theme by BloggerThemes Sponsored by Busy Buzz Blogging