segunda-feira, 2 de dezembro de 2013

Ruby 1

Ruby


Ruby é uma linguagem de programação dinâmica 1 , reflexiva 2, orientada a objetos 3, e de uso geral. Encarna inspirado em Perl com características Smalltalk - como sintaxe e também foi influenciado por Eiffel e Lisp. 

Ela suporta múltiplos paradigmas de programação, incluindo o funcional 4, orientação a objetos, e imperativo. Também tem um sistema de tipo dinâmico e gerenciamento automático de memória. Portanto, é semelhante em diferentes graus a Smalltalk , Python, Perl, Lisp, Dylan, e CLU .

A partir de 2010 , há uma série de implementações alternativas completas ou próximos do Ruby, incluindo YARV, JRuby, Rubinius, IronRuby, MacRuby ( e sua contraparte iOS , RubyMotion), mruby, HotRuby, Topaz e Opal. Cada tem uma abordagem diferente, com IronRuby, JRuby, MacRuby e Rubinius fornecendo compilação just-in-time.

Características do Ruby

  • Completamente orientada a objetos com herança, mixins (classe que contem uma combinação de métodos de outras classes) e metaclasses (classe cujas instância são classes).
  • Tipagem dinâmica e 'duck typing'(não requer a declaração do tipo da variável).
  • Tudo é uma expressão (até mesmo declarações) e tudo é executado imperativamente (mesmo declarações)
  • Sintaxe sucinta e flexível que minimiza o ruído sintático e serve como base para linguagens específicas de domínio.
  • Reflexão dinâmica e alteração de objetos para facilitar a metaprogramação.
  • Fechamentos léxicos, 'iteration' (objeto que permite tratar com contêineres, como listas ) e 'generator' (rotina usada para controlar o comportamento de uma 'iteration' em um loop), com um único bloco sintático.
  • Notação literal para arrays, hashes , expressões regulares e símbolos
  • Incorporação de código em strings (interpolação)
  • argumentos defaults
  • Quatro níveis de alcance variável (global, classe, instância e local) denotado por sigil(símbolo junto dos nomes das variáveis mostrando o tipo ou escopo, um prefixo como $foo, %foo, @foo) ou a falta dele.
  • A coleta de lixo.
  • Continuações de primeira-classe.
  • Regras rígidas de coerção booleanos (tudo é verdadeiro, exceto false e nil [o ponteiro não aponta para objeto válido]).
  • A manipulação de exceção.
  • Sobrecarga de operadores.
  • O suporte integrado para os números racionais, números complexos e aritmética de precisão arbitrária
  • Comportamento de envio personalizado(através method_missing e const_missing )
  • Threads nativas e fibras cooperativas (threads de execuções leves )
  • O suporte inicial para Unicode e várias codificações de caracteres (não suporta ICU)
  • Plug-in API nativa em C.
  • Ruby Shell interativa  (um REPL [ read–eval–print loop (REPL) é um simples ambiente de programação interativo]).
  • Gerenciamento de pacotes centralizado através RubyGems
  • Implementado em todas as principais plataformas.
  • Grande biblioteca padrão.

Semântica do Ruby

Ruby é orientada a objetos: 
a cada valor é um objeto, incluindo classes e instâncias de tipos que muitas outras línguas designam como primitivas (como inteiros , booleanos , e "null").
  • Variáveis ​​sempre contêm referências a objetos.
  • Cada função é um método e métodos são sempre chamados em um objeto.
  • Métodos definidos no escopo de alto nível tornam-se membros da classe Object.
  • Uma vez que esta classe é um ancestral de todas as outras classes, tais métodos podem ser chamados em qualquer objeto. Eles também são visíveis em todos os âmbitos , efetivamente servindo como procedimentos "globais".
  • Rubi suporta herança com envio dinâmico, mixins e métodos singleton ( pertencentes a, e definidos para uma única instância em vez de ser definido na classe ).
  • Apesar de Ruby não suporta herança múltipla, classes podem importar módulos como mixins .
  • Rubi tem sido descrito como uma linguagem de programação multi-paradigma: permite programação procedural (definindo funções/ variáveis ​​fora das classes tornando as parte da raiz, 'self' Object), como orientação a objetos (tudo é um objeto) ou programação funcional (tem funções anônimas, fechamentos e continuações; declarações têm todos valores, e as funções retornam a última avaliação).
  • Ele tem suporte para a introspecção, reflexão e meta-programação, bem como suporte para threads baseadas em interpretação.
  • Ruby tem tipagem dinâmica, e suporta polimorfismo paramétrico .

Dinâmica  1 é uma classe de linguagens de programação de alto nível que, em tempo de execução, executar muitos comportamentos comuns que outras línguas pode realizar durante a compilação. Esses comportamentos podem incluir a extensão do programa, através da adição de um novo código, estendendo objetos e definições, ou modificando o sistema de tipos, todos durante a execução do programa. Esses comportamentos podem ser emulado em quase qualquer linguagem de complexidade suficiente, mas linguagens dinâmicas fornecem ferramentas diretas para fazer uso deles.

A maioria das linguagens dinâmicas também são 'typed' de forma dinâmica, mas nem todos são. As linguagens dinâmicas podem ser (mas não sempre), frequentemente referido como "linguagens de script", no entanto, que poucos artigos se referem a linguagens específicas de um determinado ambiente.

Reflexiva 2 é a capacidade de um programa de computador de analisar e modificar a estrutura e o comportamento (especificamente os valores, meta-dados, propriedades e funções) de um objeto em tempo de execução.

A reflexão é mais comumente usado em alto nível linguagens de programação da máquina virtual, como linguagens de script e também em linguagens de programação manifestamente digitados ou de tipagem estática.

Pode ser usada para observar e / ou modificar a execução do programa durante a execução. Um componente de programa orientado a reflexão pode monitorar a execução de um corpo de código e pode modificar-se de acordo com um objetivo desejado relacionada a esse código. Isso normalmente é realizado através da atribuição dinamicamente código do programa em tempo de execução .

Em linguagens de programação orientadas a objeto como Java, a reflexão permite inspeção de classes, interfaces, campos e métodos em tempo de execução sem saber os nomes das interfaces, campos, métodos em tempo de compilação. Ele também permite a instanciação de novos objetos e invocação de métodos.

Reflexibilidade também pode ser utilizada para adaptar dinamicamente um programa a diferentes situações. Por exemplo, considere um aplicativo que usa duas classes diferentes X e Y de forma intercambiável para executar operações similares. 

Sem programação orientada a reflexão, o aplicativo deve ser rigidamente codificado para chamar nomes de métodos de classe X e  classe Y. No entanto, utilizando o paradigma de programação orientada a reflexão, o aplicativo poderia ser concebido e escrito para utilizar reflexão para invocar métodos em classes X e Y, sem nomes de métodos rígidos de codificação.

Programação orientada a reflexão quase sempre requer conhecimento adicional, estrutura, mapeamento relacional e relevância objeto, a fim de aproveitar a execução de código mais genérico. Rigidez de codificação pode ser evitada com o uso de programação orientada a reflexão.

A reflexão é muitas vezes usado como parte de testes de software, tais como o tempo de execução para a criação / instanciação de objetos simulados. A reflexão é também uma estratégia fundamental para metaprogramação.

Uma linguagem de apoio reflexão fornece uma série de recursos disponíveis em tempo de execução que seriam muito difíceis de realizar em uma linguagem de baixo nível. Algumas destas características são as habilidades:
  • Descobrir e modificar construções de código fonte (como blocos de código, classes, métodos, protocolos, etc) como um objeto de primeira-classe em tempo de execução .
  • Converte uma string correspondente ao nome simbólico de uma classe ou função em uma referência ou invocação de que classe ou função.
  • Executa uma string como se fosse uma declaração de código-fonte em tempo de execução .
  • Criar um novo intérprete de bytecode da linguagem para dar um novo significado ou propósito para a construção de programação .
Estas características podem ser aplicadas de diferentes maneiras .

Os seguintes trechos de código cria uma instância foo da classe  FOO, e invocar o seu método hello(). Para cada linguagem de programação, as sequências normais e baseado em reflexão de chamadas são mostrados.

Ruby

# sem reflexão
obj = Foo.new
obj.hello
 
# com reflexão
class_name = "Foo"
method = :hello
obj = Kernel.const_get(class_name).new
obj.send method
 
# com eval
eval "Foo.new.hello"

Java
// sem reflexão
Foo foo = new Foo();
foo.hello();
 
// com reflexão
Object foo = Class.forName("complete.classpath.and.Foo").newInstance();
Method m = foo.getClass().getDeclaredMethod("hello", new Class<?>[0]);
m.invoke(foo);


Programação orientada a objetos (OOP) 3 é um paradigma de programação que representa conceitos como "objetos" que têm campos de dados (atributos que descrevem o objeto) e procedimentos associados, conhecidos como métodos. Objetos, que geralmente são instâncias de classes, são usados ​​para interagir uns com os outros para projetar aplicativos e programas de computador. C++, Objective-C, Smalltalk, Java, C #, Perl, Python e PHP são exemplos de objeto orientada linguagens de programação.

Funcional 4 é um paradigma de programação, um estilo de construção da estrutura e elementos de programas, que trata a computação como a avaliação de funções matemáticas e evita estados e dados mutáveis ​. A programação funcional enfatiza funções que produzem resultados que dependem apenas de suas entradas, e não sobre o estado do programa - funções matemáticas ou seja, puras.

É um paradigma de programação declarativa, o que significa que a programação é feita com expressões. No código funcional, o valor de uma função de saída depende apenas dos argumentos que são entrada para a função, por isso chamada de uma função f duas vezes com o mesmo valor para um argumento x irá produzir o mesmo resultado f (x) duas vezes.

 Eliminando os efeitos colaterais, ou seja, mudanças de estado que não dependem das entradas da função, pode torná-lo muito mais fácil de compreender e prever o comportamento de um programa, que é uma das principais motivações para o desenvolvimento de programação funcional.

A programação funcional tem suas raízes no cálculo lambda, um sistema formal desenvolvido na década de 1930 para investigar computabilidade, o problema Entscheidungs, definição de função, aplicação de função, e recursão.

 Muitas linguagens de programação funcionais podem ser vistas como elaborações sobre o cálculo lambda. No outro bem conhecido paradigma de programação declarativa, programação lógica , as relações estão na base das respectivas linguagens.

JOBS TIPS

http://interviewmastersystem.com/thank-you-2/

sexta-feira, 29 de novembro de 2013

Buffer Cache Hit Ratio Oracle Tuning Performance

Buffer Cache Hit Ratio

https://www.simple-talk.com/sql/database-administration/great-sql-server-debates-buffer-cache-hit-ratio/


http://www.dbspecialists.com/files/presentations/buffercache.html

http://www.fadalti.com/oracle/database/how_to_statspack.htm

http://victor-dba.blogspot.com.br/2012/02/scripts-monitores-de-performance.html

Oracle® Database Performance Tuning Guide

Oracle® Database Performance Tuning Guide
http://docs.oracle.com/cd/B19306_01/server.102/b14211/toc.htm

pHmetro Caseiro

Medidor de pH “caseiro”
Um indicador de pH alternativo é o sumo da couve-roxa (ou o caldo onde foi cozida). Segue abaixo, os passos para o teste.
Material básico necessário:
- Folhas de repolho roxo
- Recipientes para armazenamento
- Peneira
- Líquido a ser avaliado
Procedimento:
- Separe e pique algumas folhas de repolho roxo dentro de um recipiente que possa ser levado ao fogo, adicione um pouco de água e ferva por 10 minutos para a infusão. Deixe esfriar, coe e reserve. Então, este será o líquido indicador.
- Coloque o líquido, como por exemplo, água (seja de rio, lago, poço ou chuva), em um recipiente e jogue o líquido indicador. Observe a cor, em seguida, utilize a escala abaixo para classificação.
Escala de pH – “Indicador de Couve-Roxa”
escala-do-ph-couve-roxa
Imagem 1 – Escala de pH – “Indicador de Couve-Roxa”
Alguns valores comuns de pH
tabela_1

JAVASCRIPT - Uso AJAX e JSON

Uso em Ajax


                                                      


AJAX (Asynchronous Javascript and XML1.,  "Javascript Assíncrono e XML") é um grupo de técnicas de desenvolvimento web interligadas usado no lado do cliente para criar aplicações web assíncronas.

Com Ajax, aplicações web podem enviar e recuperar dados de um servidor de forma assíncrona (em segundo plano), sem interferir com a exibição e comportamento da página. Os dados podem ser recuperados usando o objeto XMLHttpRequest2.

Apesar do nome, não é necessário o uso de XML (JSON é frequentemente usado em seu lugar) e as requisições não precisam ser assíncronas.

Ajax não é uma tecnologia única, mas um grupo de tecnologias. HTML e CSS podem ser usados em combinação para marcação de hipertexto e informações de estilo. 

O DOM3 é acessado com JavaScript para exibir de forma dinâmica, e permitir que o usuário interaja com a informação apresentada. 

JavaScript e o objeto XMLHttpRequest fornecer um método para troca de dados de forma assíncrona entre o navegador e o servidor para evitar recargas de página inteira.

JSON é frequentemente usado em técnicas de Ajax. Ajax é um termo para a capacidade de uma página na internet para solicitar novos dados depois de ter carregado no navegador da web, geralmente em resposta a ações do usuário na página exibida. 

Como parte do modelo Ajax, os novos dados são geralmente incorporados no ecrã interface de usuário dinâmica que ele chega de volta a partir do servidor .

 Um exemplo disso na prática pode ser que enquanto o usuário está digitando em uma caixa de pesquisa , o código do lado do cliente envia o que escreveu até agora a um servidor que responde com uma lista de possíveis termos de busca completo de seu banco de dados.

Estes podem ser exibidas em uma lista drop-down abaixo da pesquisa, de modo que o usuário pode parar de digitar e selecionar uma seqüência de pesquisa completa e comumente usado diretamente. 

Quando foi originalmente descrita em meados dos anos 2000 , o Ajax comumente usado XML como formato de intercâmbio de dados, mas muitos desenvolvedores também têm usado JSON para passar atualizações Ajax entre o servidor eo cliente.

O código JavaScript a seguir é um exemplo de um cliente usando XMLHttpRequest para solicitar dados em formato JSON de um servidor . ( A programação do lado do servidor é omitida, e deve ser configurada para responder a solicitações de URL com uma string JSON-formatada. )


var my_JSON_object;
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
    var done = 4, ok = 200;
    if (http_request.readyState == done && http_request.status == ok) {
        my_JSON_object = JSON.parse('''http_request.responseText''');
    }
};
http_request.send(null);


JavaScript eval ()

Porque a maioria de texto JSON formatado também é código sintático JavaScript, uma maneira fácil para um programa JavaScript para analisar dados de JSON- formatado é usar a função built-in JavaScript eval (), que foi desenvolvida para avaliar expressões JavaScript .Ao invés de usar um analisador específico do JSON, o interpretador JavaScript em si é usado para executar os dados JSON produzindo objetos JavaScript nativas.

Há, no entanto , alguns caracteres Unicode que são válidos em strings JSON mas inválido em JavaScript, usar 'escape sequence4' adicional pode ser necessária em alguns casos.


A menos que sejam tomadas precauções para validar os dados em primeiro lugar, a técnica eval está sujeito a vulnerabilidades de segurança quando os dados e todo o ambiente JavaScript não estão sob o controle de uma única fonte confiável.

Por exemplo, se os dados em si não é confiável, ele está sujeito a ataques de injeção de código malicioso JavaScript. Essas quebras de confiança também pode criar vulnerabilidades para roubo de dados, autenticação de falsificação, e outro mau uso potencial de dados e recursos. As expressões regulares podem ser usados ​​para validar os dados antes de chamar eval (). A RFC que define JSON (RFC 4627) sugere a utilização do seguinte código para validar JSON antes de validá-lo (a variável 'texto' é a entrada JSON):

var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
    text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');

Uma nova função, JSON.parse (), foi, assim, desenvolveu-se como uma alternativa mais segura para eval. Ele destina-se especificamente para processar dados JSON e não JavaScript. Ele foi originalmente planejado para inclusão na quarta edição do padrão ECMAScript, [25] mas isso não ocorreu. Foi adicionado primeiro à quinta edição, [26] e agora é suportado pelos principais navegadores listados abaixo. Para os mais velhos, uma biblioteca JavaScript compatível está disponível em JSON.org.


XML (eXtensible Markup Language)é usado para gerar linguagens de marcação para necessidades especiais.
                                                                 Ficheiro:XML-pt.svg

XML tem sido usada para descrever dados estruturados e para serializar objetos. Existem vários protocolos baseados em XML para representar o mesmo tipo de estrutura de dados como JSON para o mesmo tipo de efeitos de intercâmbio de dados. 
Quando os dados são codificados em XML, o resultado é tipicamente maior do que uma codificação equivalente em JSON, principalmente por causa das marcas de fechamento de XML. No entanto, se os dados são compactados usando um algoritmo como gzip, há pouca diferença porque a compressão é boa em economia de espaço quando um padrão se repete.

Quando usado sem um esquema XML, valores XML não tem um tipo de dados específico.

XMLHttpRequest (XHR)2.  É uma API disponível para linguagens de script do navegador da Web, usada para enviar solicitações HTTP ou HTTPS para um servidor web e carregar os dados de resposta do servidor de volta para o script. Os dados são também comumente recebido como JSON, HTML ou como texto simples.

Dados da resposta pode ser utilizada para alterar o documento actual na janela de navegador sem carregar uma nova página.

 Os dados de resposta também pode ser avaliada pelo script do lado do cliente. Por exemplo, se ele foi formatado como JSON pelo servidor web, ele pode ser convertido em um objeto de dados do lado do cliente para uso posterior.

XMLHttpRequest tem um papel importante na técnica de desenvolvimento web Ajax. Atualmente é usado por muitos sites para implementar aplicações web ágeis e dinâmicas.

XMLHttpRequest está sujeito à política de mesma-origem do navegador: por razões de segurança, os pedidos só terão sucesso se forem feitas para o mesmo servidor que serviu a página web de origem.

/*
   Provide the XMLHttpRequest constructor for Internet Explorer 5.x-6.x:
   Other browsers (including Internet Explorer 7.x-9.x) do not redefine
   XMLHttpRequest if it already exists.
 
   This example is based on findings at:
   http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
*/
if (typeof XMLHttpRequest === "undefined") {
  XMLHttpRequest = function () {
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
    catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
    catch (e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); }
    catch (e) {}
    throw new Error("This browser does not support XMLHttpRequest.");
  };
}

O Document Object Model (DOM) 3é uma convenção multi-plataforma e independente de linguagem para representar e interagir com objetos em HTML, XHTML e documentos XML.  Objetos na árvore DOM podem ser dirigidos e manipulados usando métodos nos objetos . A interface pública de um DOM é especificado em sua interface de programação de aplicativos (API).

Escape sequence4  seqüência de escape é uma série de caracteres utilizados para alterar o estado de computadores e seus dispositivos periféricos conectados. Estes são também conhecidos como as sequências de controle, que refletem a sua utilização no controle do dispositivo. 

Algumas seqüências de controle são caracteres especiais que sempre têm o mesmo significado. Seqüências de escape usar um caractere de escape para mudar o significado dos caracteres que o seguem, o que significa que os caracteres podem ser interpretados como um comando a ser executado ao invés de dados.

Seqüências de escape são comumente usados ​​quando um computador e um periférico têm apenas um único canal através do qual se envia e retorna informações. Se o dispositivo em questão é "burro" e só pode fazer uma coisa com a informação a ser enviada a ele (por exemplo, imprimi-lo), então não há necessidade de uma seqüência de escape. No entanto a maioria dos dispositivos têm mais de um recurso, e, portanto, precisa de alguma forma de distinguir a informação que está a ser tratada como dados de informação que está a ser tratado como comandos.