segunda-feira, 29 de novembro de 2010

Vaga Programador PHP

Descrição: Atuar como Programador PHP.
Qtde. Vagas: 1
Empresa Contratante: TecSaaS / Uberlândia
Experiência / Qualificações: Programação com PHP orientada a objeto.
Formação:          Superior completo, ou em formação, ou técnico na área de informática
Cursos / Certificações / Conhecimentos: É necessário ter conhecimento em programação com PHP, orientado a objeto e vivência no mercado telecom. Conhecimentos específicos em MYSQL, PHP, Javascript, AJAX e Webservice via SOAP.
Horário:               2ª a 6ª 40 horas semanais
Endereço:           Praça Adolfo Fonseca, 100 - Centro
E-mail:                claudia.matos@tecsaas.com.br
Telefone(s): 34 3221-0055
Informações Adicionais: Pessoa pró-ativa, comprometida, com boa comunicação verbal e dinâmica. Conhecimento em Linux, controle de versão – CVS/SVN, XML, CSS, ExtJS. Ter desenvolvido programação de sistemas web, soluções de integração com outros softwares/hardwares e estruturação de banco de dados. Interessados enviar CV para claudia.matos@tecsaas.com.br . No campo assunto acrescentar PROGRAMADOR PHP. Serão considerados apenas os CVs que atenderem aos pré-requisitos da vaga.

quarta-feira, 24 de novembro de 2010

Governança de TI

Governança de TI é um conjunto de práticas, padrões e relacionamentos estruturados, assumidos por executivos, gestores, técnicos e usuários de TI de uma organização, com a finalidade de garantir controles efetivos, ampliar os processos de segurança, minimizar os riscos, ampliar o desempenho, otimizar a aplicação de recursos, reduzir os custos, suportar as melhores decisões e conseqüentemente alinhar TI aos negócios.”

Está definição deixa clara a importância da Governança de TI em organizações que almejam atender a crescente demanda por aumento de qualidade de produtos e processos, a alta competitividade do mercado globalizado e a busca por menores custos e maiores lucros.

A implementação efetiva da Governança de TI só é possível com o desenvolvimento de um framework(modelo) organizacional específico. Para tanto, devem ser utilizadas, em conjunto, as melhores práticas existentes como o BSC, PMBok, CobiT, ITIL, CMMI e ISO 17.799, de onde devem ser extraídos os pontos que atinjam os objetivos do programa de Governança. Além disso, é imprescindível levar em conta os aspectos culturais e estruturais da empresa, devido à mudança dos paradigmas existentes.

O grande desafio do Governante de TI é o de transformar os processos em “engrenagens” que funcionem de forma sincronizada a ponto de demonstrar que a TI não é apenas uma área de suporte ao negócio e sim parte fundamental da estratégia das organizações.

E qual o papel da TI nessa Governança? 

Pelo fato das informações financeiras das empresas estarem salvos em sistemas de informação, os gestores de negócio precisam ter garantias que as informações nestes sistemas são confiáveis. Para se ter uma idéia, após os escândalos de 2001, o congresso americano aprovou uma lei chamado Sarbanes-Oxley, mais conhecida como SOX, onde os executivos de empresas com ações na bolsa de Nova York são responsabilizados criminalmente por desvios nas demonstrações financeiras, podendo além de levar multa ser preso também. Mesmo que os executivos não tenham participação em fraudes das demonstrações financeiras, caso for detectado alguma fraude, eles são penalizados.

Em Governança de TI, os autores mostram como conceber e implementar um sistema de direitos decisórios que enderecem três questões fundamentais: Quais decisões devem ser tomadas para garantir um uso e uma gestão apropriados da TI? Quem deve tomar estas decisões? Como tomá-las e monitorá-las?

Com base num estudo feito junto a 250 empresas de todo o mundo, Weill e Ross afirmam que o valor de negócios de TI resulta diretamente de uma governança de TI eficaz - da alocação, pela empresa, da responsabilidade e dos direitos decisórios. Suas pesquisas revelam que empresas com governança de TI superior tem lucros no mínimo 20% maiores do que as com má governança, considerados os mesmos objetivos estratégicos. Mas somente 38% da alta gerência conseguem descrever com precisão sua governaça de TI.

segunda-feira, 22 de novembro de 2010

O que fazer para aumentar a produtividade no trabalho?

A cobrança por produtividade e melhores resultados, às vezes, é algo inevitável dentro da organização. A “era da informação”, junto com a competitividade do mercado, faz com que o profissional sempre tenha que mostrar elevado desempenho em suas atividades.

Conseguir administrar a rotina e aproveitar ao máximo as horas que trabalha pode, nesse momento, ser muito favorável para alcançar a performance esperada. Por isso, é fundamental que o profissional faça uma gestão do seu tempo e planeje as tarefas diárias. A partir do momento em que se começa a adotar um método para organizar o tempo, os resultados aparecem em um curto período. Anotar em cadernos, agendas, ou computador todas as atividades, pode ser extremamente útil para elevar o desempenho.

A má gestão do tempo disponível e o acúmulo de tarefas podem acarretar em desgastes, estresse, cansaço físico e psicológico, além de dificuldades de concentração.

O aumento da produtividade no trabalho também está diretamente relacionado com a vida pessoal. Dificuldade de relacionamento em casa e problemas relacionados à saúde são alguns fatores externos que podem prejudicar o profissional no trabalho. 



Veja algumas dicas da Career Center, consultoria especializada em gestão estratégica de Recursos Humanos e Carreiras, sobre como administrar o tempo de forma a gerar disciplina e autocontrole:

Avalie o tempo necessário e estabeleça limites:
 Não trabalhe mais horas só porque não consegue ter o trabalho pronto. Estabeleça prazos para tarefas e informações. Aprenda a gerir o tempo e a usar as horas que dispõe da forma mais produtiva possível, depois vá para casa e descanse.
Estabeleça prioridades: 
Faça uma matriz de prioridades identificando a importância e urgência de cada atividade. Geralmente a tendência é a urgência se sobrepor à importância. Acontecimentos urgentes sempre têm vínculo com prioridades e prazos de outras pessoas. Enfoque coerentemente suas prioridades.

Planeje o seu dia: Antes de sair planeje o seu próximo dia de trabalho. Você terá uma excelente sensação de estar com as coisas controladas. Siga seu planejamento, com flexibilidade.

Não trabalhe mais horas do que os outros: 
Preocupe-se em mostrar resultados no período de trabalho. Você terá o reconhecimento do seu chefe como uma pessoa que age rapidamente e entrega os resultados que a empresa necessita, não perdendo tempo com coisas insignificantes.


Cheque diariamente seus resultados:
 Inicie, vença as tarefas e conclua o dia positivamente.

Delegue tarefas: 
Não deixe de delegar as atividades. Tenha clareza na comunicação e certifique-se de que foi entendido no que delegou.

Tome nota:
 Sempre anote todas as suas atividades diárias. Tenha uma agenda e, se possível, auxílio da secretária.

Tenha disciplina: Aprenda a dizer não em certas situações. Utilize o telefone sem exageros e evite interrupções durante reuniões.

Tenha objetividade: 
Em todas as circunstâncias, como em reuniões, telefonemas e emails. Estabeleça uma comunicação breve e objetiva (oral e escrita).

Se organize: 
Evite o acúmulo de papéis, organize sua mesa de trabalho.

Respeite seu relógio biológico: 
Permita-se momentos de lazer. Estabeleça tempo para atividades isoladas, como elaborar ideias.


A gestão do tempo é considerada um paradoxo, pois sabemos que não é possível gerir o tempo, mas é possível nos gerenciar. O autogerenciamento requer planejamento e disciplina.

Pessoas cansadas, estressadas no trabalho e de difícil convívio, negligenciam as próprias atividades, abusam do limite do corpo e da mente, desprezam férias e não se preocupam com a qualidade de vida. Acabam cometendo erros por falta de atenção, bloqueiam inovações por falta de visão, além de criarem um clima de tensão que dificulta o trabalho conjunto. 


Bibliografia
http://www.administradores.com.br/informe-se/informativo/o-que-fazer-para-aumentar-a-produtividade-no-trabalho/28423/

quinta-feira, 18 de novembro de 2010

Encapsulation (Encapsulamento)

O encapsulamento é um dos recursos mais interessantes da programação orientada a objetos. Encapsular significa, na programação, esconder os dados contidos nas propriedades de uma classe. Qualquer classe é completamente responsável pelos dados que ela transporta e necessita que os mesmos se mantenham íntegros, ou seja, sem alterações não previstas durando o fluxo da aplicação.


Por exemplo, não é necessário conhecer todo o funcionamento interno de um carro para poder dirigi-lo. Para isso é escondido por baixo da lataria tudo que faz com que o carro funcione, deixando apenas para o usuário o que é realmente necessário para se dirigir. Assim é garantido que o usuário leigo, ou que não saiba completamente do funcionamento do carro faça mexa na peça errada, corte o fio errado ou faça qualquer outra besteira.


1. Public

A palavra chave public informa que a propriedade ou o método são públicos, ou seja, qualquer um pode acessar (desde subclasses como outras classes que estão a instanciando).

2. Private

Já a palavra chave private informa que a propriedade ou método só podem ser acessados internamente na classe. Nem seus filhos podem acessá-lo.

3. Protected

Enquanto isso protected indica que subclasses podem acessar, mas outras classes ou funções não têm essa permissão. Um exemplo de tudo isso junto:






class  Pessoa
{
               private $id;
               protected $nome;
               public function setId( $id )
               {
                    $this->id = $id;
               }
               public function getId()
               {
                    return $this->id;
               }
               public function getNome()
               {
                   return $this->nome;
               }
}

class  PessoaFisica extends Pessoa
{
               public function setId( $id )
               {
                      $this->id = $id;
               }
               public function setNome( $nome )
               {
                  $this->nome = $nome;
               }
}

$pessoa = new Pessoa();
$pessoaFisica = new PessoaFisica();

/**
       * Isto causa um Fatal Error,
       * pois esta proriedade está como private
       */ 
$pessoa->id = 1;
$pessoa->setId(1); // já isto, funciona normalmente
$pessoaJuridica->setId(1); // isto causa outro Fatal Error

/**
       * Isto causa um Fatal Error,
       * pois esta proriedade está como protected
       */ 
$pessoaFisica->nome = 'Ademir Braga';

$pessoaFisica->setNome( 'Ademir Braga' ); // já isto, funciona

quarta-feira, 17 de novembro de 2010

PHP PDO

PDO (PHP Data Objects) é um módulo de PHP construído sob o paradigma Orientado a Objetos e cujo objetivo é prover uma padronização da forma com que PHP se comunica com um banco de dados relacional. Este módulo surgiu a partir da versão 5 de PHP. PDO, portanto, é uma interface que define um conjunto de classes e a assinatura dos métodos de comunicação com uma base de dados.

PDO juntou o que havia de melhor em cada driver e gerou uma especificação. Embora a especificação não trabalhe com resource explicitamente, ela define duas classes com significados semelhantes: PDO (que representa uma conexão) e PDOStatement (que representa uma consulta/resultado). Além destas, existe a classe PDOException, que é disparada por alguns métodos para que seja realizado o tratamento de exceções

Para utilizar PDO, primeiro é instanciado um objeto da classe PDO, que representa a conexão com um banco. No construtor da classe, deve ser informado o chamado "DSN", que é uma string de conexão semelhante àquela vista anteriormente na função de conexão com PostgreSQL. Cada driver PDO especifica uma forma de como é criado o DSN para o SGBD correspondente. Além do DSN, também é informado, por parâmetro, o usuário, a senha de acesso e as opções adicionais.

// Exemplo de conexao com MySQL via PDO

$dsn = 'mysql:host=host;port=3306;dbname=bd';

$usuario = 'usuario';

$senha = 'senha';

$opcoes = array(

    PDO::ATTR_PERSISTENT => true,

    PDO::ATTR_CASE => PDO::CASE_LOWER

);


try {

    $pdo = new PDO($dsn, $usuario, $senha, $opcoes);

} catch (PDOException $e) {

    echo 'Erro: '.$e->getMessage();
}

Após abrir uma conexão, as consultas podem ser feitas de duas maneiras: 1 - Através da própria conexão, com o método "exec" ou o "query"; 2 - Criando uma prepared statement com o método "prepare", que devolve um objeto da classe PDOStatement, e depois executando o método "execute" (desta classe).
O método "query" é utilizado para consultas que retornam resultados tabulares (como o SELECT) e devolve um objeto da classe PDOStatement com o resultado. Já o método "exec" é utilizado para consultas que não retornam resultados tabulares (como o INSERT, UPDATE, DELETE) e retorna apenas o número de linhas afetadas.
Já o método "prepare" é útil para criar uma consulta com dados variáveis. É possível especificar uma SQL com pontos de substituição que, ao serem substituidos, são escapados pela classe automaticamente. Vejamos alguns exemplos:
// Usando "exec"
$inseriu = $pdo->exec('INSERT INTO logs (operacao) VALUES (1)');
$ultimo_id = $pdo->lastInsertId();
// Usando "query"
$stmt = $pdo->query('SELECT nome, login FROM usuarios');
// Percorrento um resultset com while
while ($obj = $stmt->fetchObject()) {
   ...
}
// Percorrendo um resultset com foreach
foreach ($stmt as $linha) {
    ...
}

Note que a classe PDOStatement (objeto $stmt) implementa a interface Traversable, indicando que ela pode ser percorrida por uma estrutura "foreach". Existem diferentes formas de se executar uma prepared statement com PDO:
// 1 - Usando "?" nos pontos-chave
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (?,?)');
// Passando os valores a serem usados no primeiro e segundo "?"
$dados = array('Rubens', 'rubens');
$consultou = $stmt->execute($dados);
// 2 - Usando pontos-chave nomeados
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (:nome, :login)');
// Passando os valores a serem usados em :nome e :login
array(':nome' => 'Rubens', ':login' => 'rubens');
$consultou = $stmt->execute($dados);
// 3 - Fazendo binding de parametros
$stmt = $pdo->prepare('INSERT INTO usuarios (nome, login) VALUES (:nome, :login)');
// Fazendo o binding
$nome = 'Rubens';
$login = 'rubens';
$stmt->bindParam(':nome', $nome, PDO::PARAM_STR, 128);
$stmt->bindParam(':login', $login, PDO::PARAM_STR, 20);
// Executando a SQL com os valores definidos com binding
$consultou = $stmt->execute();
Prepared statements tendem a ser mais rápidas que as consultas convensionais, já que a consulta fica previamente "compilada" e pronta para execução com novos valores. Ao invés do SGBD interpretar toda a SQL, ele apenas atribui novos valores aos pontos chave e realiza a operação. Funcionalidade muito útil para inserções ou atualizações em massa em uma tabela.
Conclusão O uso das novidades da PDO com técnicas de captura e tratamento de exceções, juntando com outra boas práticas de programação e orientação a objetos traz muitas vantagens ao desenvolvimento de aplicações PHP.



WebSockets

WebSockets é uma técnica de comunicação bidireccional em um socket (TCP), um tipo de tecnologia PUSH. No momento, a ele ainda está sendo padronizado pelo W3C, porém, o últimas versões do Chrome e Safari tem suporte para WebSockets.
Ele é projetado para ser executado em navegadores da web e servidores web , mas pode ser usado por qualquer cliente ou servidor de aplicativos.

Transmissão de dados para clientes WebSocket

WebSockets não são os mesmos sockets TCP e por um um bom motivo. 
Embora pareça tentador poder abrir uma conexão TCP em estado bruto a partir do browser, a segurança do navegador seria imediatamente comprometida: qualquer website poderia, então, acessar a rede, em nome da o usuário, dentro do mesmo contexto de segurança do usuário. Por exemplo, um site poderia abrir uma conexão com um servidor SMTP remoto e começar a oferecer spam. Em vez disso, WebSockets estendem  o protocolo HTTP por uma definição especial para que o navegador estabeleça uma conexão. Em outras palavras, é um protocolo opt-in, que requer um servidor independente.

Nada impede que você converse com um servidor SMTP AMQP, ou qualquer outro através do protocolo bruto, mas você terá de introduzir um servidor WebSocket para intermediar a conexão.
Kaazing Gateway já fornece adaptadores para STOMP e Apache ActiveMQ, e você também pode implementar seus próprios pacotes JavaScript para outros. E se um servidor Java WebSocket base não é com você, Ruby EventMachine também nos permite construir uma estrutura muito simples orientada a eventos.....

Construindo o cliente:
1.        <!DOCTYPE html>  
2.        <html>  
3.        <head>  
4.        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>  
5.          
6.        <title>WebSockets Client</title>  
7.          
8.        </head>  
9.        <body>  
10.     <div id="wrapper">  
11.       
12.         <div id="container">  
13.       
14.             <h1>WebSockets Client</h1>  
15.       
16.             <div id="chatLog">  
17.       
18.             </div><!-- #chatLog -->  
19.             <p id="examples">e.g. try 'hi', 'name', 'age', 'today'</p>  
20.       
21.             <input id="text" type="text" />  
22.             <button id="disconnect">Disconnect</button>  
23.       
24.         </div><!-- #container -->  
25.       
26.     </div>  
27.     </body>  
28.     </html>  


Eventos do WebSocket:
  • onopen
  • onmensage
  • onclose

Criando o WebSocket
var socket = new WebSocket("ws://localhost:8000/socket/server/startDaemon.php");

Checando eventos simples:
1.        socket.onopen = function(){  
2.            alert("Socket has been opened!");  
3.        }  


Javascript
1.        $(document).ready(function() {  
2.            if(!("WebSocket" in window)){  
3.                $('#chatLog, input, button, #examples').fadeOut("fast");  
4.                $('<p>Oh no, you need a browser that supports WebSockets. How about <a href="http://www.google.com/chrome">Google Chrome</a>?</p>').appendTo('#container');  
5.            }else{  
6.          
7.            //The user has WebSockets  
8.          
9.            connect();  
10.       
11.         function connect(){  
12.             //the connect function code is below  
13.       
14.         }  
15.     }); 


Enviando dados:
1.        $('#text').keypress(function(event) {  
2.            if (event.keyCode == '13') {  
3.                send();  
4.            }  
5.        });  


A função send()
1.        function send(){  
2.          
3.            var text = $('#text').val();  
4.            if(text==""){  
5.                message('<p class="warning">Please enter a message');  
6.                return ;  
7.            }  
8.            try{  
9.                socket.send(text);  
10.             message('<p class="event">Sent: '+text)  
11.         catch(exception){  
12.         message('<p class="warning"> Error:' + exception);  
13.         }  
14.       
15.         $('#text').val("");  
16.       
17.     }  


Use: 
socket.send(); //Thanks JavaScript


Fechando o socket:
1.        $('#disconnect').click(function(){  
2.            socket.close();  
3.        });


Exemplo completo:
1.        $(document).ready(function() {  
2.          
3.          if(!("WebSocket" in window)){  
4.          $('#chatLog, input, button, #examples').fadeOut("fast");  
5.          $('<p>Oh no, you need a browser that supports WebSockets. How about <a href="http://www.google.com/chrome">Google Chrome</a>?</p>').appendTo('#container');  
6.          }else{  
7.              //The user has WebSockets  
8.          
9.              connect();  
10.       
11.           function connect(){  
12.               var socket;  
13.               var host = "ws://localhost:8000/socket/server/startDaemon.php";  
14.       
15.               try{  
16.                   var socket = new WebSocket(host);  
17.       
18.                   message('<p class="event">Socket Status: '+socket.readyState);  
19.       
20.                   socket.onopen = function(){  
21.                      message('<p class="event">Socket Status: '+socket.readyState+' (open)');  
22.                   }  
23.       
24.                   socket.onmessage = function(msg){  
25.                      message('<p class="message">Received: '+msg.data);  
26.                   }  
27.       
28.                   socket.onclose = function(){  
29.                     message('<p class="event">Socket Status: '+socket.readyState+' (Closed)');  
30.                   }           
31.       
32.               } catch(exception){  
33.                  message('<p>Error'+exception);  
34.               }  
35.       
36.               function send(){  
37.                   var text = $('#text').val();  
38.       
39.                   if(text==""){  
40.                       message('<p class="warning">Please enter a message');  
41.                       return ;  
42.                   }  
43.                   try{  
44.                       socket.send(text);  
45.                       message('<p class="event">Sent: '+text)  
46.       
47.                   catch(exception){  
48.                      message('<p class="warning">');  
49.                   }  
50.                   $('#text').val("");  
51.               }  
52.       
53.               function message(msg){  
54.                 $('#chatLog').append(msg+'</p>');  
55.               }  
56.       
57.               $('#text').keypress(function(event) {  
58.                   if (event.keyCode == '13') {  
59.                     send();  
60.                   }  
61.               });     
62.       
63.               $('#disconnect').click(function(){  
64.                  socket.close();  
65.               });  
66.       
67.           }//End connect  
68.       
69.       }//End else  
70.       
71.     });