terça-feira, 30 de novembro de 2010

Pastas ocultas no Pen Drive causado por virus

Está com problemas em seu pen drive, suas pastas estão ocultas? Pensou que perdeu os seus arquivos né? Hehehe, não se preocupe pois apenas as pastas estão ocultas então tem como recuperar seu modo normal.
Existem duas maneiras para fazer isso. Uma é manualmente onde você digita os comandos, e a outra é através de um software chamado USB-SHOW.
Primeiro passo vai fazer manualmente, vá até Iniciar>Executar em seguida digite o comando CMD que irá abrir a famosa tela preta. Com muita atenção você vai ver qual a letra de sua unidade (pen drive), e usaremos aqui a letra F:
Digite F: e tecle Enter> e repare que agora mudou o local onde você está acessando.

Agora sim você vai digitar o seguinte comando exatamente como está aqui mostrado,
attrib -s -h -r -a /d /s
É normal que os dispositivos de maior quantidade de armazenamento de 8GB, 16GB e assim por diante, demorem a verificar pois pode conter muitas pastas etc.
Assim que terminar o cursor irá ficar piscando como no modo inicial F:
Então é só digitar exit e pronto, e se você ver arquivos que não são seus pode deletar que é tudo vírus hehehehe. Nem tudo é claro.
Então agora o jeito mais simples. Utilizando o Usb Show você pode fazer o mesmo procedimento de um modo mais fácil. Vá até o menu Recovery the hide files e procure a unidade de seu dispositivo, no qual estamos abordando a letra F: como exemplo, e de inicio a recuperação. Logo que quando a recuperação for concluída ele irá exibir uma mensagem  de conclusão do processo.
Aconselho aquele que tem problemas constantes com esses vírus, leve o aplicativo Usb Show na raiz do seu dispositivo ou seja, sem coloca-lo em pasta alguma, pois se você for infectado novamente com esse vírus e o aplicativo estiver dentro de uma pasta, só lamento terá que fazer procedimento à mão.

Geralmente os vírus de pen drive que mais perturba os usuários são no Windows Xp no Windows Vista é mais difícil e no Windows 7 mais difícil ainda hehehe, claro que é tudo uma questão de tempo até vim um merda chato e criar alguma praga para começar a infernizar a vida dos usuários.
Abraço.

Como recuperar pastas ocultas em pen driver

Está com problemas em seu pen drive, suas pastas estão ocultas? Pensou que perdeu os seus arquivos né? Hehehe, não se preocupe pois apenas as pastas estão ocultas então tem como recuperar seu modo normal.
Existem duas maneiras para fazer isso. Uma é manualmente onde você digita os comandos, e a outra é através de um software chamado USB-SHOW.
Primeiro passo vai fazer manualmente, vá até Iniciar>Executar em seguida digite o comando CMD que irá abrir a famosa tela preta. Com muita atenção você vai ver qual a letra de sua unidade (pen drive), e usaremos aqui a letra F:
Digite F: e tecle Enter> e repare que agora mudou o local onde você está acessando.

segunda-feira, 29 de novembro de 2010

Migração do Joomla CMS e instalação do WAMPServer em Windows Server 2003

Este artigo descreve como migrar um sistema web desenvolvido em Joomla CMS 1.0.15 e instalar o WAMPServer 2.0b em um servidor Windows Server 2003. O foco do artigo é a migração e instalação no novo servidor, portanto o sistema anterior de onde está sendo migrado pode ser uma versão de Linux ou Windows que suporte a versão 2.0b do WAMPServer e 1.0.15 do Joomla.

Instalando o WAMPServer (Windows + Apache + MySQL + PHP)


Figura 1: Windows Server 2003.

O WAMPServer é uma solução de software WAMP (Windows + Apache + MySQL + PHP) que inclui:

- Apache 2.2.8
- MySQL 5.0.51a
- PHP 5.2.5

Sua versão atual é a 2.0b. É preciso desinstalar qualquer versão anterior do Apache, MySQL ou PHP caso estejam instalados na máquina. A instalação do WAMPServer é típica, exigindo apenas cliques de confirmação. Feito isso você verá o menu abaixo.

Figura 2: Menu de utilização do WAMPServer.

Configurando o WAMPServer

Apache 2.2.8

No menu do WAMPServer (Figura 2) clique no item Apache > httpd.conf. O arquivo httpd.conf será aberto no Bloco de Notas. Altere as linhas necessárias de configuração no httpd.conf, abaixo:

- "Listen ..." Nesta linha coloque "Listen 8080". Assim o Apache funcionará na porta 8080. Você pode colocar nesta linha outra porta qualquer caso desejar.


Figura 3: Alterando o parâmetro Listen no arquivo httpd.conf do Apache.

- "Servername ..." Nesta linha coloque "ServerName localhost:8080". Estamos usando a porta 8080 porque o IIS do Windows 2003 Server usa a porta 80. Você também pode configurar esta linha como, Ex: "ServerName nomeservidor:8080" ou "ServerName 10.0.0.1:8080".


Figura 4: Alterando o parâmetro ServerName no arquivo httpd.conf do Apache.

- "DocumentRoot ..." Nesta linha coloque "DocumentRoot "D:/wamp/www/". Você pode mover o diretório "www" do WAMPServer para onde desejar, inclusive fugindo do padrão em que ele é instalado, caso precise de mais segurança. Ex: "DocumentRoot "E:/web/wamp/www/".


Figura 5: Alterando o parâmetro DocumentRoot no arquivo httpd.conf do Apache.

PHP 5.2.5

Ainda no menu do WAMPServer clique no item PHP > PHP settings, e verifique se as configurações do PHP, exigidas pelo Joomla, estão selecionadas corretamente conforme abaixo:

- Short Open Tag: Ligado
- Safe Mode: Desligado
- Display Erros: Ligado
- File Uploads: Ligado
- Magic Quotes GPC: Ligado
- Magic Quotes Runtime: Desligado
- Register Globals: Desligado
- Output Buffering: Desligado
- Session Auto Start: Desligado

As opções acima, configuradas no PHP.ini, possuem uma explicação detalhada de seus significados dentro do próprio arquivo PHP.ini, texto 'em comentários' (texto comentado está após o caractere ";" ponto e vírgula).

Agora clique no item PHP > PHP extensions:

- Selecione as extensões que serão usadas: LDAP, ODBC, MySQL, etc. Geralmente as extensões a serem habilitadas vão depender das características do seu sistema. Se ao final deste passo a passo você fizer tudo certo e der erro verifique se não esqueceu de habilitar alguma extensão ou então deixou habilitada uma extensão que entra em conflito com outra.

Figura 6: Menu de utilização do WAMPServer, PHP > PHP extensions.

A cada vez que você habilitar/alterar um item no 'PHP settings' ou 'PHP extensions' será necessário reiniciar o WAMPServer para que ele possa reconhecer as mudanças. Faça isto clicando uma vez no icone do WAMPServer > Restart All Services.

MySQL 5.0.51a

O próximo passo é trocar a senha do banco de dados MySQL porque na instalação padrão, via WAMPServer, o usuário administrador do MySQL é 'root', sem senha (vazio). O WAMPServer instala automaticamente o phpMyAdmin, que é um sistema GPL desenvolvido em PHP pela comunidade de software livre, que faz o gerenciamento via web do banco de dados MySQL. O WAMPServer também instala automaticamente o SQLiteManager, que faz o gerenciamento web do banco de dados SQLite, porém não iremos tratar disto neste artigo.


Figura 7: Página inicial, após autenticação, do phpMyAdmin.

Acesse da máquina servidor com seu navegador a URL http://localhost:8080/phpmyadmin/, o phpMyAdmin irá fazer o acesso diretamente, sem solicitar login/senha. Se você tentar acessar de algum navegador de fora desta máquina o acesso será negado, retornando uma página de erro. Corrigir isso será o próximo passo, vamos incluir primeiro a senha de root ao MySQL para que não fique vazia (padrão da instalação).

Na Home do phpMyAdmin clicar em "Privilégios" (lado direito abaixo, na tela). Após clicar você verá somente o usuario "root" para acesso ao MySQL. Clicar no icone "Editar privilégios". Ao mudar a senha você perderá o acesso ao MySQL através do phpMyAdmin pois você estava conectado com este usuário e acabou de alterar a senha do mesmo (de vazio para outra qualquer mais segura). Basta acessar novamente a URL http://localhost:8080/phpmyadmin/ e digitar usuário root com a nova senha.

A instalação padrão do phpMyAdmin não permite acesso remoto via web, a instalação padrão só permite o acesso web da máquina onde foi feita a instalação, no caso a máquina servidora. Aproveite então para habilitar a autenticação remota, editando o "config.inc.php" no diretório de instalação do phpMyAdmin. Edite as seguintes linhas:

$cfg['Servers']['auth_type']='cookie';
$cfg['blowfish_secret']='palavraqualquer';


O arquivo "config.inc.php" fica em D:\wamp\apps\phpmyadmin2.10.1\.


Figura 8: Localização do arquivo config.inc.php do phpMyAdmin.


Figura 9: Parâmetros a editar do arquivo config.inc.php.


Figura 10: Parâmetro a editar do arquivo config.inc.php.

Não altere as linhas abaixo:

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';


Altere as linhas acima somente se desejar fazer com que o phpMyAdmin faça acesso direto sem exigir a solicitação de login e senha. Porém isto é bastante perigoso pois o acesso ao banco de dados estará liberado para qualquer um que saiba ou descubra a URL do phpMyAdmin.

O último passo para disponibilizar o acesso remoto web ao phpMyAdmin é editar o arquivo "phpmyadmin.conf" em "D:\wamp\alias\". Abra o arquivo e siga as orientações que estão 'em comentários' (texto comentado está após o caractere #) no próprio arquivo. Faça conforme a figura abaixo.


Figura 11: Alterações no arquivo phpmyadmin.conf.

Conforme mostrado na figura acima, troque as linhas:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

Por:

Order Allow,Deny
Allow from all


Com esta última mudança o phpMyAdmin poderá ser acessado de uma máquina qualquer na rede ou de uma máquina da internet.

Para funcionar não se esqueça de reiniciar o WAMPServer.

Migrando o Joomla CMS

A segunda parte do trabalho é migrar o sistema desenvolvido em Joomla!, crie o diretório do "projeto_web" abaixo de "D:\wamp\www" no novo servidor e copie para este novo diretório todos os arquivos do projeto que está sendo migrado. Estes arquivos referem-se aos arquivos do sistema que foi desenvolvido em Joomla!

Após o passo incial, acima, siga os passos abaixo:

- No servidor antigo exporte o banco de dados do projeto desenvolvido com o Joomla!, exporte por exemplo para um arquivo de nome "banco_dados.sql".
- No servidor novo, para onde o sistema vai migrar e foi instalado o WAMPServer, acesse o phpMyAdmin e crie o database/banco de dados com o mesmo nome.


Figura 12: Base de dados MySQL com o phpMyAdmin.

Importando os dados

Ainda no phpMyAdmin clique no menu a esquerda, selecione o nome do banco de dados criado para a migração de dados (mesmo nome que no servidor antigo) e faça a importação do "banco_dados.sql" usando a opção "Importar" do phpMyAdmin. Você pode encontrar problemas ao exportar e importar dados para o MySQL por isso use o mesmo modo de compatibilidade em "Opções SQL" > "Modo de compatibilidade SQL", tanto para exportar quanto para importar. O modo de compatibilidade "MYSQL40" é bastante utilizado. Caso o tamanho do arquivo SQL para importar seja muito grande divida-o em 2 ou 3 arquivos e importe um a um.


Figura 13: Importando dados MySQL com o phpMyAdmin.

Reconfigurando o Joomla

Com isso feito, o projeto desenvolvido em Joomla! vai precisar somente que você faça a configuração manual do arquivo "configuration.php". Encontre este arquivo em "D:\wamp\www\projeto_web\configuration.php", sendo "projeto_web" o diretório que você criou ao migrar o sistema projeto web para o novo servidor. Não entrarei nos detalhes da configuração deste arquivo pois entendo que a pessoa que está fazendo a migração já o saiba. Basicamente será necessário alterar o nome do servidor, diretório do projeto, nome do banco de dados (espero que você tenha deixado o mesmo), login/senha do banco de dados e URL do site.


Figura 14: configuration.php, arquivo de configuração do Joomla!.

Para testar acesse a URL http://servidor:8080/projeto_web/ ou http://localhost:8080/projeto_web/.

Impondo o limite de upload para importação de dados

O phpMyAdmin, por padrão, só permite importar arquivo com no máximo 2 mb, o que significa que você precisará dividir o arquivo de "BancoImportado.sql' caso ele seja maior que 2 mb. Há duas soluções que conheço, porém podem haver outras, a primeira é:

- Copie o arquivo "BancoImportado.sql" para o subdiretório "/bin" de onde está instalado o MySQL e abra o prompt de comando também neste mesmo subdiretório, então digite "mysql -uUsuario -pPassword -Dnomedatabase < BancoImportado.sql".


Figura 15: Prompt com comando para importar dados para o MySQL.

Poderá ocorrer variações no código acima dependendo de como o seu MySQL foi instalado.

"-u","-p", e "-D" sao parâmetros do MySQL, respectivamente para usuário, password e Database.

A segunda solução é importar pelo próprio phpMyAdmin, conforme já explicado. Porém, a dica é vencer o limite de 2 mb por arquivo para upload. Para isso mude a seguinte linha no arquivo PHP.ini: "upload_max_filesize=2m" para "upload_max_filesize=8m". Desta forma o phpMyAdmin permitirá um upload (importação) de arquivos SQL com até 8 mb!


Figura 16: Linha para alterar no arquivo php.ini.


Figura 17: phpMyAdmin após alteração feita.

Bom, com isso finalizamos este artigo, que nos mostrou como instalar o WAMPServer, migrar o Joomla CMS e configurá-los em um servidor Windows Server 2003.

Trabalhando com PHP e MySQL: Uma Introdução

Um tutorial para quem quiser aprender a mexer com PHP, integrando com um banco de dados MySQL. Ótimo para quem está começando. Não inclui instruções de como instalar e configurar o PHP.

1. A linguagem PHP

A linguagem PHP é uma linguagem de programação criada especialmente para o uso em páginas Web. Mas nem por isso ela não pode deixar de ser usada em ambientes desktop, aplicações servidoras, aplicações de rede, entre outros. Mas o principal escopo da linguagem é justamente trabalhar com o ambiente Web. O site do PHP é http://www.php.net, e lá você pode encontrar os arquivos necessários para a instalação em vários sistemas, inclusive o Linux e o Windows.
Para quem não conhece linguagens de programação, PHP pode ser umpouco difícil no começo, como toda linguagem, mas quem já está habituado à programar, vai perceber que PHP é muito fácil. O PHPé uma linguagem orientada a objeto, com a sintaxe parecida com a do C, só que muito mais simples e prática. O PHP se diferencia justamente pela rapidez e agilidade que os programadores têm em fazer programas e sistemas, pois com o PHP consegue-se desenvolver muito mais rapidamente do que outras linguagens de programação para Web tais como ASP ou JSP.
E se já não bastasse, o uso do PHP já é muito difundido na Internet. Uma boa quantidade de páginas dinâmicas por aí na Internet são feitas justamente com a linguagem PHP. Então com certeza você não vai ficar isolado no meio… Com certeza você vai ter vários recursos para estudar o PHP e ver como ele é útil para a programação voltada para Web. E por último, o PHP é software livre, ou seja, seu código-fonte está disponível para todos usufruirem! Ótimas vantagens para quem quer começar a programar para Web!

2. O uso do PHP com Bancos de Dados

Uma das melhores habilidades do PHP é lidar com bancos de dados de uma forma fácil. Hoje em dia os sistemas para Web estão cada vez mais usufruindo das capacidades magníficas que os bancos de dados podem oferecer. Neste tutorial vamos aprender a fazer algumas coisas com o banco de dados MySQL.
O MySQL é um banco de dados simples, rápido e eficiente para se trabalhar com sistemas Web. Além disso ele é bem fácil e intuitivo, então estaremos usando ele para fazer os nossos exemplos deste tutorial. A licença deste banco de dados também é GPL, então é software livre. O site do MySQL é http://www.mysql.com.

3. Criando um livro de visitas

Antes de mais nada, este tutorial assume que você tenha pelo menos um pouco de noção sobre o que é HTML e um pouco de lógica de programação. Mas também os usuários inexperientes também podem seguir este manual sem problemas, e ir aprendendo ainda mais com ele. Primeiramente iremos criar um livro de visitas bem simples, usando como fonte de dados o banco de dados MySQL.

3.1. Conectando ao servidor MySQL e criando o banco de dados

Não vou explicar aqui como montar um servidor MySQL, porque vai fora do escopo deste tutorial. As distribuições Linux geralmente vem com o MySQL prontopara o uso, como também a instalação no Windows é bastante fácil também. Cabe à você então instalar o seu servidor MySQL. Depois que o servidor MySQL estiver instalando e funcionando, você precisará de um banco de dados para trabalhar. Para criar um, execute o comando:
mysqladmin -h localhost -u root -p create guestbook
O comando acima criará um banco de dados chamado ‘guestbook’. A opção ‘-h localhost’ diz em qual IP/HOST o servidor MySQL está localizado para efetuar a conexão, enquanto que as opções ‘-u root -p’ significa para usar o usuário root para fazer a ação, e perguntar por uma senha. Caso o usuário não tenha senha, a opção ‘-p’ não é requerida. Depois outro comando será necessário, neste caso para conectar ao servidor MySQL usando o nosso recém-criado banco de dados e começar a enviar Consultas para ele através do seu prompt de comando:
[hugo@lina hugo]$ mysql -u root -p guestbook
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.49

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
Agora já podemos criar as nossas tabelas. Mas antes precisamos saber o que criaremos! Para o nosso livro de visitas, precisaremos de poucas coisas. Vamos pensar… Huummm… Iremos querer o seguinte do nosso usuário: Nome, Localização e Mensagem. Além disso, precisaremos também de um campo para a data e hora em que o usuário postou as informações. Agora vamos criar a tabela:
mysql> CREATE TABLE guestbook (
    ->    id int(5) unsigned zerofill NOT NULL DEFAULT '00000' auto_increment,
    ->    nome varchar(255),
    ->    localizacao varchar(50),
    ->    mensagem text,
    ->    data datetime,
    ->    PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql>
Pronto. Criamos a nossa tabela, e ela já está pronta para ser usada. O campo ‘id’ vai ser a identificação de cada mensagem no livro de visitas, ele terá sempre seu número incrementado (para nunca repetir), nunca será nulo e sempre vai ter ‘0′ (zeros) antes do número. Como definimos o campo como int(5), que significa número inteiro de no máximo 5 digitos, então poderemos armazenar de uma a 99999 mensagem no livro de visitas.
O campo nome é definido com varchar(255), que significa uma string de até 255 caracteres. Então o nome da pessoa poderá ir até 255 caracteres, sendo que o nome tiver apenas 50 caracteres, o banco de dados irá usar apenas os 50 caracteres. Se fosse char(255), o banco de dados iria usar todos os 255 caracteres, desperdiçando memória. Coloquei 255 (que é o máximo suportado pelo varchar/char) de exagero mesmo, para falar isso. Diga sério, eu nunca vi alguém com um nome tão grande que use 255 caracteres… X_x A localizacao também usa o varchar, só que comno máximo 50 caracteres.
O campo mensagem já é diferente. Ele comporta textos enormes, e não só restritos a até 255 caracteres. Esta é a característica do tipo de campo ‘text’. Perfeito para o nosso uso, já que os usuários poderiam deixar mensagens grandes em nosso livro de visitas.
E por último o campo data, que é do tipo datetime. Quando adicionarmos uma entrada nesta tabela, a data que irá aparecer neste campo estará no formato Ano-Mês-Dia Hora:minuto:segundo. Vamos ver como ficou a tabela de descrição da nossa tabela. Fazemos isso da seguinte forma:
mysql> describe guestbook;
+-------------+--------------------------+------+-----+---------+----------------+
| Field       | Type                     | Null | Key | Default | Extra          |
+-------------+--------------------------+------+-----+---------+----------------+
| id          | int(5) unsigned zerofill |      | PRI | NULL    | auto_increment |
| nome        | varchar(255)             | YES  |     | NULL    |                |
| localizacao | varchar(50)              | YES  |     | NULL    |                |
| mensagem    | text                     | YES  |     | NULL    |                |
| data        | datetime                 | YES  |     | NULL    |                |
+-------------+--------------------------+------+-----+---------+----------------+
Agora vamos incluri alguns dados nesta tabela então:
mysql> INSERT INTO guestbook VALUES(
    ->    '00000',
    ->    'Eitch',
    ->    'Makai',
    ->    'Eu posso colocar muito texto aqui, já que este campoé do tipo text.',
    ->    NOW()
    -> );
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO guestbook VALUES(
    ->    '00000',
    ->    'Hugo',
    ->    'Japão',
    ->    'Esta é uma outra mensagem de teste!',
    ->    NOW()
    -> );
Query OK, 1 row affected (0.00 sec)

mysql>
Incluímos duas linhas na nossa tabela ‘guestbook’. Mas vamos supor que na segunda inclusão, eu troquei as bolas e ao invés de colocar que eu estava no Brasil, coloquei que eu estava no Japão (quem dera). Primeiro vamos visualizar os dois campos para ver suas informações, e depois atualizar os dados da segunda linha para que fique Brasil ao invés de Japão na localização:
mysql> SELECT * FROM guestbook;
+-------+-------+-------------+--------------------+---------------------+
| id    | nome  | localizacao | mensagem           | data                |
+-------+-------+-------------+--------------------+---------------------+
| 00001 | Eitch | Makai       | (Mensagem cortada) | 2002-09-19 17:42:53 |
| 00002 | Hugo  | Japão       | (Mensagem cortada) | 2002-09-19 17:43:13 |
+-------+-------+-------------+--------------------+---------------------+
2 rows in set (0.00 sec)

mysql> UPDATE guestbook SET localizacao='Brasil' WHERE id='00002';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM guestbook;
+-------+-------+-------------+--------------------+---------------------+
| id    | nome  | localizacao | mensagem           | data                |
+-------+-------+-------------+--------------------+---------------------+
| 00001 | Eitch | Makai       | (Mensagem cortada) | 2002-09-19 17:42:53 |
| 00002 | Hugo  | Brasil      | (Mensagem cortada) | 2002-09-19 17:43:13 |
+-------+-------+-------------+--------------------+---------------------+
2 rows in set (0.00 sec)

mysql>
Ok então, viu só como eu atualizei os dados? As instruções SQL são bem fáceis, principalmente para quem sabe inglês, pois você consegue ‘ler’ coerentemente o que está tentando dizer ao banco de dados para fazer. No caso da atualização, pedimos ao banco de dados para atualizar a tabela ‘guestbook’, mudando o campo localizacao para ‘Brasil’ nas linhas que tiverem o ‘id’ igual à 00002. Isso só vai atualizar a linha 2. Se não tivesse a instrução ‘WHERE’, todos os campos localizacao de todas as linhas seriam mudados para ‘Brasil’.
E por último, percebemos que a segunda linha ficou uma porcaria, e que realmente eu não era para estar localizado no Brasil, a mensagem que deixei é ruim, e o meu nome é feio. Então para aliviar todos estes danos, vamos excluir essa linha do banco de dados. Fazemos isso assim:
mysql> DELETE FROM guestbook WHERE id='00002';
Query OK, 1 row affected (0.00 sec)
Pronto! Nos livramos da segunda linha, ficamos apenas com a primeira mesmo. Usamos o comando “SELECT” para visualizar os dados da nossa tabela. Com este comando podemos requisitar apenas determinados campos, na ordem que quisermos. Veja o exemplo a seguir:
mysql> select id,nome,localizacao FROM guestbook;
+-------+-------+-------------+
| id    | nome  | localizacao |
+-------+-------+-------------+
| 00001 | Eitch | Makai       |
+-------+-------+-------------+
1 row in set (0.00 sec)

mysql>
Agora vou adicionar uma série de linhas com vários dados diferentes, para que possamos testar mais consultas. Depois de criado mais ou menos 10 linhas diferentes, vamos testar algumas coisas legais do comando SELECT:
mysql> SELECT COUNT(*) FROM guestbook;
+----------+
| COUNT(*) |
+----------+
|       11 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT id,nome,localizacao FROM guestbook ORDER BY nome;
+-------+-----------------+------------------+
| id    | nome            | localizacao      |
+-------+-----------------+------------------+
| 00009 | Artemis         | Lua              |
| 00001 | Eitch           | Makai            |
| 00007 | Fulano          | Nova Zelândia    |
| 00012 | Hansi Kürch     | Middle-Earth     |
| 00006 | Joey DeMaio     | Battlefield      |
| 00010 | Kaoru           | Japão            |
| 00005 | King Diamond    | House Of God     |
| 00003 | Lina Inverse    | Mundo de Slayers |
| 00004 | Narusegawa Naru | Hinata Sou       |
| 00011 | Sakura          | Japão            |
| 00008 | Zeca Pagodinho  | Cachaçalandia    |
+-------+-----------------+------------------+
11 rows in set (0.00 sec)

mysql>
A função MySQL COUNT(*) conta quantas linhas tem na nossa tabela. No nosso exemplo aqui foram 11 linhas. Logo em seguida a consulta pediu os campos id,nome e localizacao da tabela guestbook, ordenando por ordem alfabética no campo nome. Agora vamos salvar todo o conteúdo de nosso banco de dados em um arquivo texto com todos os comandos. Chamamos este arquivo de arquivo dump, e criamos ele da seguinte maneira no prompt de comando:
$ mysqldump -u root -p guestbook > guestbook.sql
O arquivo guestbook.sql será criado, e se você editá-lo com um edito de texto comum, verá que ele contém vários comandos SQL para criar as tabelas do banco de dados e colocar os dados nestas tabelas. Se por acaso você precisar importar estes dados para o seu banco de dados, você usa o seguinte comando:
$ mysql -u root -p guestbook < guestbook.sql
E já que criamos um backup de todas as nossas tabelas e todos os nossos dados, podemos deletar todos os dados da tabela guestbook com o seguinte comando:
mysql> DELETE FROM guestbook;
Query OK, 0 rows affected (0.00 sec)

mysql>
Como não temos o “WHERE”, isso vai deletar todos os dados da nossa tabela guestbook :-) Mas se quisermos restaurar os dados é só utilizar o arquivo .sql que criamos acima. Outros comandos que você poderá usar no cliente MySQL:
mysql> SHOW TABLES;
+---------------------+
| Tables_in_guestbook |
+---------------------+
| guestbook           |
| teste               |
+---------------------+
1 row in set (0.00 sec)

mysql> DROP TABLE teste;
Query OK, 0 rows affected (0.00 sec)

mysql>
Aqui respectivamente eu mostrei as tabelas que estava no banco de dados guestbook (criei uma outra tabela chamada teste só para ilustrar) e depois excluí (DROP) a tabela teste do banco de dados.
Deu para perceber como se trabalhar com MySQL? É bem fácil, mas recomendo que você olhe um pouco da documentação do programa, para obter mais dicas. Ao longo do nosso exemplo de livro de visitas, novas dicas irão surgir. Todas as instruções aprendidas neste tópico serão usadas no nosso exemplo, já que o PHP vai mandar para o servidor exatamente estas strings que colocamos no prompt do MySQL. Vamos com calma que você vai entender.

3.2. Utilizando o PHP

Antes de mais nada vamos testar o funcionamento do PHP. O PHP vem com uma função bem simples para mostrar que está funcionando. Suponhamos que o seu servidor já esteja configurado para rodar PHP em todos os arquivos com extensão .php, então vamos criar dentro do diretório de páginas do seu servidor web um arquivo chamado phpinfo.php, com o seguinte conteúdo:
<?
// PHP Info: Mostra informações sobre o PHP instalado na máquina
phpinfo();
?>
Vejamos… Note que para linhas comentadas (ignoradas pelo interpretador, servindo apenas de comentários ou explicações), o PHP utiliza duas barras (//). Bem ao estilo C, pois ele também suporte comentários de múltiplas linhas, como o a seguir:
<?
/*
-----------------------------------------------------------------
Este é um comentário com múltiplas linhas, igual aos comentários
da linguagem C. Isto tudo será ignorado no código.
-----------------------------------------------------------------
*/
phpinfo();
?>
Depois de salvo o phpinfo.php, coloque o endereço dele no browser e você vai ver várias informações mostradas pelo PHP. Esta função é muito útil para quem quer saber como o PHP foi compilado, com suporte a que, a versão dele, variáveis de ambiente, entre outros. O próximo passo para entender melhor como funciona o PHP, é saber que ele trabalha junto com HTML. Nos exemplos anteriores você pôde notar que começamos o código PHP com a tag <? e terminamos com a tag ?>. Isso significa que podemos colocar código HTML quando não estivermos dentro desta tag PHP. Veja o exemplo abaixo:
<html>
<head>
    <title>Página de Teste</title>
</head>
<body>
<?
$a = 25;
$b = 35;
$c = $a+$b;
echo "Se:<br>\n";
echo "\$a é igual à $a,<br>\n";
echo "\$b é igual à $b,<br>\n";
echo "\$c é igual à \$a+\$b,<br><br>\n";
echo "logo \$c é igual à $c! Incrível!";
?>
</body>
</html>
Copie este exemplo para uma página PHP e aponte no browser. Veja que eu misturei código HTML com PHP, e isso é muito comum neste tipo de linguagem para Web. Isso torna o PHP muito flexível para poder ir colocando código onde quiser, misturando sempre com a saíde em HTML. É sempre bom você separar código de design HTML, mas isso se faz usando Templates, que é um passo mais complicado, que não iremos falar neste tutorial.
Vimos neste exemplo acima pouca coisa, mas vale notar que usamos a função echo do PHP, que imprime a string no output, ou seja, na página HTML. Mas precisamos de algo mais “complexo” para fazer o nosso guestbook funcionar. Como estamos trabalhando com MySQL, usaremos as funções MySQL incorporadas como módulo ao PHP. Pra não ficar muito chato, vamos para um exemplo:
<?
// Mensagens de Erro
$msg[0] = "Conexão com o banco falhou!";
$msg[1] = "Não foi possível selecionar o banco de dados!";

// Fazendo a conexão com o servidor MySQL
$conexao = mysql_pconnect("localhost","root","senha") or die($msg[0]);
mysql_select_db("guestbook",$conexao) or die($msg[1]);

// Colocando o Início da tabela
?>
<table border="1"><tr>
   <td><b>ID</b></td>
   <td><b>Nome</b></td>
   <td><b>Localização</b></td>
</tr>
<?

// Fazendo uma consulta SQL e retornando os resultados em uma tabela HTML
$query = "SELECT id,nome,localizacao FROM guestbook ORDER BY nome";
$resultado = mysql_query($query,$conexao);
while ($linha = mysql_fetch_array($resultado)) {
   ?>
   <tr>
      <td><? echo $linha['id']; ?></td>
      <td><? echo $linha['nome']; ?></td>
      <td><? echo $linha['localizacao']; ?></td>
   </tr>
   <?
}
?>
</table>
O resultado disso, de acordo com os dados que colocamos no nosso banco de dados, será o seguinte:
ID Nome Localização
00009 Artemis Lua
00001 Eitch Makai
00007 Fulano Nova Zelândia
00012 Hansi Kürch Middle-Earth
00006 Joey DeMaio Battlefield
00010 Kaoru Japão
00005 King Diamond House Of God
00003 Lina Inverse Mundo de Slayers
00004 Narusegawa Naru Hinata Sou
00011 Sakura Japão
00008 Zeca Pagodinho Cachaçalandia
Viu como ficou legal? Extraímos os dados da nossa tabela guestbook no banco de dados guestbook, e colocamos numa tabela HTML, para visualização no browser. Bem fácil não? Não? Ah! Também, eu esqueci de explicar direito o que o código faz… Tá bom, vamos lá.
As primeiras linhas do código configuram uma array com as mensagens de erro que vou usar depois. Se você ainda não conhece o que é uma array, uma array é um tipo especial de variável que contém vários valores. No caso criamos a array $msg, que tem duas outras variáveis dentro dela. A 0 representa a mensagem de erro de que não foi possível conectar ao servidor MySQL, e a 1 representa a mensagem de que não foi possível selecionar o banco de dados. Mais para frente, usaremos array mais uma vez. Aliás, se você for programar em PHP, com certeza você ainda vai usar muita array em sua vida.
Depois é que a começa a esquentar. Começamos a usar as funções MySQL do PHP. A função mysql_pconnect() abre a conexão com o banco de dados, e aponta esta conexão para a variável $conexao. Esta variável será usada mais tarde para os outros comandos do MySQL. Note também que nesta conexão, foi preciso você informar o host/ip onde o servidor MySQL está rodando, o usuário para se conectar e a senha deste usuário. Se por alguma razão o PHP não conseguir estabelecer a conexão, ele irá chamar a função die(), que termina o script PHP e gera uma mensagem no browser, que no nosso caso vai ser o conteúdo da array $msg[0].
Já a função mysql_select_db(), você seleciona o banco de dados que usará. O primeiro parâmetro indica o nome do banco de dados que você quer usar, e o segundo a variável de referência que usamos para identificar a conexão com o banco de dados MySQL, que aqui no nosso tutorial nomeamos de $conexao. Caso ele não consiga selecionar o banco de dados, ele chama a função die(), mostrando o conteúdo da array $msg[1].
Agora vem a parte interessante. Lembra da flexibilidade do PHP, em que você pode sair e entrar do código PHP livremente? Então na parte que se segue você viu um exemplo disso. Saímos do “Modo PHP”, e colocamos as tags HTML para iniciar uma tabela. Colocamos as colunas ID, Nome e Localização, que são os dados que iremos pegar do banco de dados.
Depois entramos no “Modo PH” novamente, e fazemos uma consulta no banco de dados MySQL e colocamos o resultado em uma variável. Como você pode ver, a função mysql_query() é responsável pela consulta no banco de dados MySQL. Então você irá utilizar esta função para fazer todas as coisas, selecionar, inserir, excluir, etc, como aprendemos anteriormente no prompt do MySQL. Tudo que você digitou no prompt do MySQL também é válido como primeiro parâmetro da função myqsl_query(). No caso usamos um exemplo que já usamos anteriormente.
A seguir vem o truque. O laço while vai fazer o trabalho de pegar cada linha do resultado da nossa consulta MySQL e transformar em array (não falei que iríamos usar mais uma vez?). A função mysql_fetch_array() transforma esse resultado de consulta em array. Como temos 11 linhas, o laço vai se repetir 11 vezes. Os dados da linha no banco de dados será identificados na array $linha. Então identificamos o dado utilizando $linha['nome_do_campo'], ou seja, $linha['id'], $linha['nome'] e $linha['localizacao']. Colocamos isso em uma linha de tabela.
Depois de passado cada linha, totalizando 11 linhas, o laço while acaba e o código PHP continua, chamando a tag que finaliza a tabela, que é o </table>. Pronto! Extraímos os dados do banco de dados. Fácil né? Com isso deu pra entender melhor como o PHP trabalha com bancos de dados. Agora vamos ao exemplo que realmente interessa…

3.3. Criando o código do Livro de Visitas

Vamos agora criar o Livro de Visitas em si. Vamos usar dois arquivos, um para a visualização do livro de visitas, e outro para a inclusão de uma mensagem no livro de visitas. Vou já incluir todo o código pronto do programa, fragemntado em partes para a explicação. Os comentários também são esclarecedores.
Ok, vamos primeiro à Inclusão! Crie um arquivo chamado assinar.php e mãos à obra:
<?
// Exemplo de livro de visitas para aprendizado (Assinar)
// Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br
//
// Eu não me responsabilizo por quaiser danos com o uso deste código.
// Se você fizer mal uso deste código, seu computador irá explodir e
// sua namorada vai te largar. Eu te avisei!
//

// Primeiro vamos verificar se o método da página é POST. Se for POST,
// quer dizer que o usuário preencheu o formulário e e apertou o botão
// Assinar.
if (getenv("REQUEST_METHOD") == "POST") {
   // Configura as variáveis do método POST para virarem variáveis
   // "normais" do PHP (Requer apenas nas versões do PHP acima da 4.1)
   $nome = $_POST['nome'];
   $localizacao = $_POST['localizacao'];
   $mensagem = $_POST['mensagem'];

   // Caso todos os campos forem preenchidos, inclui a mensagem no
   // banco de dados. Caso isso não aconteça, gera uma mensagem de
   // erro que será impressa no browser mais a frente.
   if ($nome and $localizacao and $mensagem) {
      $conexao = mysql_pconnect("localhost","root","senhasecreta");
      mysql_select_db("guestbook",$conexao);
      $query = "INSERT INTO guestbook VALUES('00000','$nome','$localizacao','$mensagem',NOW())";
      mysql_query($query,$conexao);
      header("Location: ler.php");
   } else {
      $err = "Preencha todos os campos!";
   }
}

?>
<html>
<head>
   <title>Livro de Visitas: Assinar</title>
</head>
<body bgcolor="white">

<h1>Assine o Livro de Visitas</h1>

<?
// Se ocorreu algo de errado, então vai existir uma variável $err
// contendo a mensagem. Imprime-se então em fonte vermelha esta
// mensagem.
if ($err) {
   ?>
   <ul><font color="red"><? echo $err; ?></font></ul>
   <?
}
?>

<form method="post" action="assinar.php">
<table border="0"
<tr>
   <td>Nome: </td>
   <td><input type="text" size="15" name="nome" maxlength="250"></td>
</tr>
<tr>
   <td>Localização: </td>
   <td><input type="text" size="15" name="localizacao" maxlength="45"></td>
</tr>
<tr>
   <td colspan="2">
   <textarea cols="60" rows="10" name="mensagem">Digite aqui sua mensagem!</textarea>
   </td>
</tr>
</table>
<input type="submit" value="Assinar">
</form>

</body>
</html>
Deu para perceber mais ou menos como funciona o código acima? Repare como eu faço muito o uso do controle de fluxo if. No começo o if testa se o usuário postou algum formulário. Para fazer isso, ele verifica se a variável $REQUEST_METHOD é igual à “POST”. Se for “POST”, quer dizer que o usuário postou alguma coisa através de um formulário, e se for “GET”, quer dizer que a requisição da página foi feita pelo modo normal, sem postar nada.
Depois o código testa com o if novamente para ver se o usuário preencheu todos os campos. Para fazer isso ele testa se existe as variáveis correspondentes aos campos de formulário existente na nossa página. Caso aqueles campos estejam todos preenchidos, o código conecta ao servidor MySQL, seleciona o banco de dados que queremos, e depois constrói uma consulta SQL, incluindo os dados na tabela do banco de dados. A parte de inclusão do servidor MySQL não é nova para nós, que já vimos o procedimento anteriormente.
Agora algo interessante. Depois que tudo tiver feito, precisamos redirecionar o navegador do nosso visitante para outro lugar. Para fazer isso, usamos a função header() do PHP, que como o nove diz, manda um cabeçalho para o navegador do visitante. A função header só pode ser usada no começo dos scripts, sem que nada tenha sido impresso no navegador do cliente. Esta é uma restrição do próprio protocolo HTTP, e não do PHP, pois o cabeçalho sempre tem que vir antes né! :) No nosso caso, enviamos o cabeçalho “Location:”, que diz ao navegador para onde ele tem que ir. Então depois que o código inclui os dados no banco de dados MySQL, ele redireciona o navegador para a página ler.php. Pode-se colocar qualquer URL válida no cabeçalho “Location:”. Então, continuando o código, se tudo der certo, ele vai para a página de leitura, mas se for o caso dele não ter preenchido os campos, ou se ele não enviou nada por algum campo de formulário, o resto do código é executado.
O resto do código é a página HTML em si, com os formulários para preenchimento e este tipo de coisa. Os comentários no código explicam como o fluxo do if pode ser útil para por exemplo, mostrar uma mensagem de erro, se houver um erro claro.
Agora vamos para o ler.php, que vai ser a página onde irá se mostrar as assinaturas do livro de visitas! Vamos ao arquivo:
<?
// Exemplo de livro de visitas para aprendizado (Ler)
// Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br
//
// Eu não me responsabilizo por quaiser danos com o uso deste código.
// Se você fizer mal uso deste código, seu computador irá explodir e
// sua namorada vai te largar. Eu te avisei!
//
?>

<html>
<head>
   <title>Livro de Visitas: Ler</title>
</head>
<body bgcolor="white">

<h1>Livro de Visitas</h1>

<?
// Verifica se existe a variável $begin, que vai indicar a número
// da mensagem que vai aparecer no começo. Se não existir, assume-se
// que vai ser o começo, ou seja, o valor 0.
$begin = $_GET['begin'];
if (!$begin) { $begin = 0; }

// Conecta ao servidor e seleciona o banco de dados
$conexao = mysql_pconnect("localhost","root","senhasecreta");
mysql_select_db("guestbook",$conexao);

// Coloca na variável $total o número total de mensagens no Guestbook
$query = "SELECT count(*) FROM guestbook";
$query = mysql_query($query,$conexao);
$query = mysql_fetch_array($query);
$total = $query[0];

?>
<p>
Total de mensagens postadas: <b><? echo $total; ?></b>
(<a href="assinar.php">Assine você também!</a>)<br>
Exibindo <b>20</b> mensagens por página, mostrando mensagens de
<b><? echo $begin+1; ?></b> a <b><? echo $begin+20; ?></b>.
</p>

<?
// Calcula os links para as próximas mensagens e as anteriores, de
// acordo com o número total de mensagens
if (($begin > 0) and ($begin <= 20)) {
   $anteriores = '<a href="ler.php?begin=0">Anteriores</a>';
} elseif (($begin > 0) and ($begin > 20)) {
   $anteriores = '<a href="ler.php?begin=' . ($begin-20) . '">Anteriores</a>';
} else {
   $anteriores = 'Anteriores';
}

if (($begin < $total) and (($begin+20) >= $total)) {
   $proximas = 'Próximas';
} else {
   $proximas = '<a href="ler.php?begin=' . ($begin+20) . '">Próximas</a>';
}

echo $anteriores . " | " . $proximas;

// Faz uma consulta SQL trazendo as linhas das 20 ultimas mensagens
// que foram colocadas no livro de visitas.
$query = "SELECT * FROM guestbook ORDER BY data DESC LIMIT $begin,20";
$query = mysql_query($query,$conexao);

// Gera uma tabela para cada assinatura no livro de visitas (loop)
while ($linha = mysql_fetch_array($query)) {
   // Organiza a mostragem da data, já que no campo do MySQL, a data
   // se encontra em uma forma não tão legal.
   $var = $linha['data'];
   $var = explode(" ",$var);
   $dia = $var[0];
   $hora = $var[1];
   $dia = explode("-",$dia);
   $data = "$dia[2]/$dia[1]/$dia[0] às $hora";
   ?>

   <table border="0" width="70%">
   <tr><td bgcolor="navy" colspan="2"> </td></tr>
   <tr>
      <td><b>Data:</b></td>
      <td width="100%"><? echo $data; ?></td>
   </tr>
   <tr>
      <td><b>Nome:</b></td>
      <td><? echo $linha['nome']; ?></td>
   </tr>
   <tr>
      <td><b>Localização:</b></td>
      <td><? echo $linha['localizacao']; ?></td>
   </tr>
   <tr>
      <td><b>Mensagem:</b></td>
      <td><? echo $linha['mensagem']; ?></td>
   </tr>
   </table>
   <?
}

?>
</body>
</html>
Apesar de que no código já há vários comentários explicando a funcionabilidade das linhas, vamos dar uma olhada geral no que este arquivo PHP faz. Antes de mais nada, o código verifica se existe a variável $begin, obtida pelo método HTTP GET (requisição normal HTTP, enquanto que o método POST é por formulário). Esta variável será usada mais adiante para saber quais mensagens serão mostradas para o usuário. Se a variável não existir, dá-se o valor de 0 para que ele comece da “primeira” mensagem.
Depois é hora de pegar as mensagens do servidor de banco de dados e colocá-las em variáveis para imprimirmos na página, colocando assim as assinaturas do livro de visitas. Para fazer isso, primeiro conectamos ao servidor de banco de dados, e selecionamos o banco de dados. E antes de consultar todas as mensagens, pegamos também o número total de mensagens, através da função count() do MySQL, como você pode ver no código. Esta função irá retornar quantas linhas tem na tabela em que se fez a consulta, ou seja, a tabela guestbook. Esse número total será usado junto com o $begin para poder ser usada na mostragem das mensagens para o usuário…
…Que será agora! Com um raciocínio simples, e alguns controles de fluxo com o if, podemos criar links diferentes. O que queremos fazer é que se estiver sendo mostrada desde a primeira mensagem, o link de “mensagens anteriores” não será mostrado, e sim apenas o de “próximas mensagens”. A mesma coisa é feita com as próximas mensagens, só que dessa vez não aparece o link se estiver mostrando a última mensagem. Como a vida é cruel, não vou explicar detalhadamente como essa parte do código funciona, porque aprender a ler o código e entender é uma parte essencial. É mais difícil eu explicar do que você entender sem ler a explicação :)
O que vem agora é finalmente a mostragem de mensagens. Usaremos aqui dois atributos do MySQL que não conhecemos, que é o DESC e o LIMIT. Então construímos a consulta do MySQL e armazenamos seu resultado na variável $query. Depois vem o interessante, fazemos um laço com a função while() do PHP e a cada linha que se tem na nossa consulta (no nosso caso, cada mensagem), se criaria uma array chamada $linha com os valores de cada linha. No nosso caso, o while() faria com que se imprimisse no navegador uma tabela HTML para cada mensagem do nosso livro de visitas.
Repare também que como não queremos que se mostre todas as linhas da tabela MySQL na nossa consulta, usamos o atributo LIMIT, que como o nome diz, especifica um limite para a quantidade de linhas que será retornada. O formato deste atributo é LIMIT inicio,quantidade. No nosso caso, o inicio é a mensagem inicial, que temos através da variável $begin discutida anteriormente. E como queremos mostrar apenas 20 mensagens, colocamos o número 20, para se mostrar 20 mensagens. É como se disséssemos por exemplo: “Limite a consulta para 20 linhas, começando da linha 0.”
Outra coisa que queríamos no nosso livro de visitas, é que as últimas assinaturas seriam mostradas primeiro. Então na consulta que fizemos no MySQL, usamos o atributo DESC, que quer dizer “decrecente”. Isso já diz tudo, ele inverte a ordem das linhas e vai na ordem descrecente. E além desse, vou deixar de comentar também o uso da função explode(), que usei na formatação da data do MySQL, assim você poderá pesquisar melhor e entender como ela funciona. Só uma definição rápida e objetiva: ela cria uma array com a separação de uma string delimitada por um certo caracter que você mesmo especifica! Oops, eu disse tudo!
Com isso, todas as mensagens são mostradas. Experimente o programinha que você acabou de fazer e acompanhar neste tutorial, e comece a personalizá-lo, assim você vai aprender mais ainda. Uma ótima referência de PHP é o manual oficial, disponibilizado no site oficial, http://php.net, lá você encontra todas as funções que você poderia usar no seu programa. Boa sorte e até a próxima!


fonte: http://www.devin.com.br/intro_php/

Gestão do Conhecimento

A Gestão do conhecimento possui objetiva controlar, facilitar o acesso e manter um gerenciamento integrado sobre as informações em seus diversos meios. Entende-se por conhecimento a informação interpretada, ou seja, o que cada informação significa e que impactos no meio cada informação pode causar, de modo que a informação possa ser utilizada para importantes ações e tomadas de decisões. [wikipédia]
Conhecimento Diagrama
Alguns tópicos sobre gestão do conhecimento
  1. A Gestão do Conhecimento custa caro, a ignorância é caríssima;
  2. A Gestão do Conhecimento efetiva requer soluções que combinem pessoas e tecnologia;
  3. Gestão do Conhecimento, é altamente política;
  4. Gestão do Conhecimento requer gestores do conhecimento;
  5. Gestão do Conhecimento se beneficia mais de mapas do que de modelos mais de mercados do que de hierarquias;
  6. O compartilhamento e uso do conhecimento são comportamentos antinaturais;
  7. Gestão do Conhecimento significa arrumar os processos de trabalho relacionados com o conhecimento;
  8. O acesso ao conhecimento é apenas único;
  9. Gestão do Conhecimento nunca tem fim;
  10. Gestão do Conhecimento requer um contrato de conhecimento.
Princípios gerais da Gestão do Conhecimento
  1. A Gestão do Conhecimento tem origem e reside na cabeça das pessoas;
  2. O compartilhamento da Gestão do Conhecimento exige confiança;
  3. A tecnologia possibilita novos comportamentos ligados à Gestão do Conhecimento;
  4. O compartilhamento da Gestão do Conhecimento deve ser estimulado e recompensado;
  5. Apoio da direção e recursos são essenciais;
  6. Iniciativas da Gestão do Conhecimento devem começar por um programa piloto;
  7. Aferições quantitativas são necessárias para avaliar a iniciativa;
  8. O conhecimento é criativo e deve ser estimulado a se desenvolver de forma incentivada.
Onze pecados capitais da gestão do conhecimento
  1. Nenhuma definição organizacional do conhecimento;
  2. Ênfase no estoque do conhecimento em detrimento do fluxo do conhecimento;
  3. Reconhecer o conhecimento como predominantemente fora da cabeça das pessoas;
  4. Não criar contexto compartilhado;
  5. Desconsiderar o papel do conhecimento tácito;
  6. Desconsiderar a Gestão do Conhecimento dos seus usuários;
  7. Diminuir/desconsiderar a importância relativa do pensamento e da argumentação;
  8. Priorizar ou focar no passado/presente e não o futuro;
  9. Não reconhecer a importância da experiência (tentativaXerro);
  10. Substituir o contato humano pelo contato tecnológico;
  11. Buscar desenvolver o conhecimento sem base organizacional.

sexta-feira, 26 de novembro de 2010

Galaxy Tab permite compartilhamento de conexão sem fio

O Galaxy Tab, tablet da Samsung que chegou ao Brasil em novembro de 2011, traz uma série de novidades, entre ela a possibilidade de compartilhar a conexão sem fio e a integração de redes sociais. Veja trechos da apresentação feita pelo gerente de produtos da empresa, Diego Alves Pinto de Andrade.

sábado, 6 de novembro de 2010

Configurando Report Builder 2.0 no Reporting Services 2008

Quando se seleciona a opção de instalar o Reporting Services 2008 o mesmo instala o Report Builder 1.0 que pode ser disparado através do botão “Report Builder” do “Report Manager” como mostra a figura abaixo:
reportbuilder20_reportingservices2008_01
Tela de entrada do Report Builder 1.0…
reportbuilder20_reportingservices2008_02
Até aqui tudo bem, mas quando se instala o Service Pack 1 do SQL Server 2008, o mesmo permite que se utilize o Report Builder 2.0 que é MUITO superior à versão 1.0. Em termos de interface, ele é a “cara” do Office 2007, ficando assim, bastante intuitivo para o usuário final utiliza-lo, além de poder contar com novas features que o tornam uma verdadeira ferramenta de relatorios para o usuário final.
Ok, instalado o Service Pack o “Report Manager” continua disparando o Report Builder 1.0… o que fazer? Primeiro vamos verificar se no diretório do Report Builder existem o arquivo ReportBuilder_2_0_0_0.application que o Service Pack 1 do SQL Server 2008 instala quando encontra um servidor Reporting Services 2008:
reportbuilder20_reportingservices2008_03
Com a certeza que o arquivo existe, fica fácil configurar o Report Manager para disparar a versão 2.0 sempre que se clicar em Report Builder. Clique em “Site Settings” e no campo URL de “Custom Report Builder launch URL” digite o caminho como apresentado na figura abaixo:
reportbuilder20_reportingservices2008_04
Clique em “Apply” e em “Home” como mostra a figura abaixo.
reportbuilder20_reportingservices2008_05
Em seguida, no “Report Manager”, clique em “Report Builder”…. e pronto! O Report Builder 2.0 está configurado para disparar…
reportbuilder20_reportingservices2008_06
Interface do Report Builder 2.0:
reportbuilder20_reportingservices2008_07

Select para encontrar tabelas com foreign keys

Neste post estarei demonstrando outro código Transact-SQL que procura por tabelas com foreign key. Segue o código:
 
SELECT A.TABLE_NAME, A.CONSTRAINT_NAME, B.COLUMN_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS A, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE B
WHERE CONSTRAINT_TYPE = ‘FOREIGN KEY’ AND A.CONSTRAINT_NAME = B. CONSTRAINT_NAME
ORDER BY A.TABLE_NAME
 
E o resultado…
2_tabelas_com_foreign_key
 

SELECT * em Views

É muito comum utilizar SELECT * na criação de views, mas uma simples inclusão de uma coluna na tabela referenciada na view pode acarretar um problema. Vamos praticar e vou explicando os detalhes…
Primeiro passo, criar um banco de testes…

IF DB_ID('TesteView') IS NOT NULL
DROP DATABASE TesteView;
 
CREATE DATABASE TesteView;
GO
 
Neste ponto vamos criar uma tabela e inserir registros…
 
CREATE TABLE Numeros
(
col1 INT NOT NULL,
col2 INT NOT NULL
)
 
INSERT INTO dbo.Numeros(col1, col2) VALUES (1,100);
INSERT INTO dbo.Numeros(col1, col2) VALUES (2,200);
INSERT INTO dbo.Numeros(col1, col2) VALUES (3,300);
INSERT INTO dbo.Numeros(col1, col2) VALUES (4,400);
 

Verificando se os registros foram incluidos com sucesso..

SELECT col1, col2 FROM dbo.Numeros;
 
select_asterisco_em_views_01
 
O próximo passo é a criação da view. Atente para o fato do SELECT não definir as colunas que desejamos utilizar, e sim usar *.
 
CREATE VIEW VisaoNumeros
AS
    SELECT * FROM dbo.Numeros;
GO
 
Vamos fazer um SELECT usando a view recem criada…

SELECT * FROM dbo.VisaoNumeros
 
E o resultado…
 
select_asterisco_em_views_01 
Neste ponto vamos incluir uma coluna a tabela:

ALTER TABLE Numeros ADD col3 INT
 
Um SELECT para confirmar que as 3 colunas existem na tabela…

SELECT * FROM dbo.Numeros;
 
select_asterisco_em_views_02 
 
Agora, SELECT usando a view…

SELECT * FROM dbo.VisaoNumeros;
 
select_asterisco_em_views_03
 
Vamos notar que mesmo utilizando o *, a view retornou apenas as 2 colunas já existentes na tabela antes da criação da View. A coluna criada após a view não é apresentada… E agora? Existe uma stored procedure que realiza uma atualização (refresh) na view desejada. Executando a stored procedure… 

EXEC sp_refreshview @viewname = 'dbo.VisaoNumeros';
 
Pronto! Podemos agora realizar novamente o SELECT * na view desejada..

SELECT * FROM dbo.VisaoNumeros;
 
E o resultado…
 
select_asterisco_em_views_04

Informações sobre colunas da tabela

Script em Transact-SQL para listar informações sobre a estrutura de uma determinada tabela. No caso do script abaixo, o objetivo é listar a tabela Person.Address do database AdventureWorks2008:
SELECT    name AS column_name, 
                TYPE_NAME(system_type_id) AS column_type,
                max_length,
                collation_name,
                is_nullable
FROM sys.columns
WHERE object_id = OBJECT_ID(N'Person.Address');
Segue o resultado…
informacoessobrecolunasdatabela_01

terça-feira, 2 de novembro de 2010

Como aumentar o tamanho do disco virtual - Virtual Box

VirtualBox is a cross platform full virtualizer for x86 hardware. It runs on Windows, Linux, Macintosh and OpenSolaris hosts and supports a large number of guest operating systems such as Windows, Linux and OpenBSD. In a previous guide I have shown you How to install Ubuntu Linux on Windows using VirtualBox . The procedure is the same if you want to install Windows on Linux. The guest operating system is installed on a virtual disk created by VirtualBox which is nothing more than a single .vdi file. When you first create the virtual machine you must set a certain size for this disk. However after playing with VirtualBox you might realize you need more space because your virtual disk is full So, in this tutorial I will explain how to enlarge an existing virtual disk or in other words how to resize your virtualbox vdi. I have a Windows XP installation running on Linux and specifically Archlinux and I am going to create a larger disk for Windows XP.

**Note: The same procedure works for Windows Vista also. The only difference is that you have to use your original Vista installation CD for Bootmgr repair the first time the system is started after the GPARTED steps have been followed. (Thanks to Andrew)

Run VirtualBox and go to File -> Disk Manager.



Here as you can see I have a .vdi disk with a size of 10GB (1) which is almost full. So press the New button (2) to create a new virtual disk.



Click next to go to the next page of the New Virtual Disk Wizard.

3.jpg

Select Dynamically expanding image as Image type and click next.

4.jpg

Select a name for the new image (1), this should be different than the existing one, and also set the size of the new disk (2). Here I've set it to 20GB.

5.jpg

Press Finish to end the wizard.

6.jpg

Now you should have 2 .vdi images in the Virtual Disk Manager. Click Ok to close the wizard.



Here we are gonna need GParted to copy the data of our old disk to the new one. GParted is the Gnome Partition Editor application for creating, destroying, resizing, moving, checking and copying partitions, and the file systems on them. It has a LiveCD which you must download from here . You don't have to burn it on a cd, just store the .iso somewhere in you hard disk.

Now select the existin Windows XP installation (1) and click on the Settings button (2).



In the General -> Advanced tab set CD/DVD Rom as the first boot device.



In the Hard Disks settings double click below your IDE Primary Master and set IDE Primary Slave and the new Virtual Hard Disk image.



In the CD/DVD-ROM settings click on Mount CD/DVD Drive (1), choose ISO Image File (2) and use the folder button to browse to the location you have saved the gparted live cd (3).



Now click the Ok button and start the Windows XP Virtual Machine. Press Enter to boot GParted Live with Default Settings.



Don't touch keymap should be fine. Again press Enter.



Select the Language you prefer. Press Enter for English. And again press Enter for the default video card settings.



GParted will automatically scan your virtual disks. /dev/hda should be the old one and /dev/hdb the new one. Right click on your first disk and select Copy.



Next select /dev/hdb from the drop down menu (1), right click on the unallocated space and select Paste (2).



Drag the right edge (1) like you see in the screenshot so as not to leave any unallocated space in the new disk. Next click the Paste button.



Now press Apply to apply the changes.



When all listed operations are applied click the Close button. Again right click on the new partition /dev/hdb and click Manage flags. Here you should tick the boot flag.



Gparted will scan all devices once more. When it's done close the program and shutdown the live cd from the exit button. It will prompt you to press Enter. Now return to the VirtualBox application, select the Windows XP virtual machine and click the settings button. In the General -> Advanced tab select Hard Disk as the first boot device.



In the Hard Disk settings use the delete button (1) to remove the IDE Primary Slave, leave just IDE Primary Master (2), and select the new .vdi (3).



In the CD/DVD-ROM settings tick the Host CD/DVD Drive.



Press the Ok button and start your Windows XP virtual machine. Windows might ask to check their filesystem. Just let them do it.



After they automatically reboot you will log into your new resized virtualbox disk without having lost any of your data. You can now just delete the old .vdi. Enjoy!



Please do not use the comment function to ask for help!