O BLOB!

Fevereiro 15, 2009

eco

A parte mais interessante nas cadeiras que possuem parte prática é sem dúvida a parte em que metemos as “mãos na massa”! E não, não estou a falar de culinária… Com efeito, é com os trabalhos práticos que aprendemos e apreendemos melhor os conceitos que nos ensinaram ao longo do semestre e criar do zero uma aplicação numa dada linguagem de programação é sempre um desafio interessante (a maior parte das vezes pelo menos!).

Ora com o trabalho da cadeira de Base de Dados foi-nos proposto que criássemos um sistema web-based que consistia num repositório multimédia inserido num contexto hospitalar. A aplicação deveria permitir a gestão e visualização de ficheiros relacionados com exames de diagnóstico médico, ficheiros esses de vários tipos incluindo vídeos! Para tal e tal como nos foi pedido, utilizamos o motor de base de dados Oracle e para os ficheiros de maior tamanho foi usado o tipo BLOB! Assim nasceu o MEDEX, criado através da interacção de PHP com Oracle. 

O BLOB (Binary Large Object) é um tipo especial do Oracle que permite armazenar ficheiros com grande quantidade de dados. Porém a parte de visualizar os ficheiros inseridos na base de dados com este tipo, revelou-se algo complicada uma vez que existe pouca informação de como lidar com estes ficheiros mais complicados, como é o caso dos vídeos. A seguir demonstro como resolvemos esta situação em particular. Algumas partes serão no entanto omitidas pelo simples facto de apenas querer mostrar como se lida com a visualização de vídeos armazenados com o tipo BLOB, sem entrar no contexto do trabalho que é muito mais complexo e abrangente ,como decerto compreenderão. De notar que o código mostrado abaixo está em PHP. Para mais informações, quer sobre o tipo BLOB, quer sobre a utilização do PHP com o Oracle, poderão consultar a informação disponível aqui.

Porque achámos ser a melhor maneira de o fazer, utilizámos para a visualização, um player embebido na página (que podem encontrar aqui) que lê de uma pasta temporária o ficheiro de vídeo proveniente da base de dados. Assim sempre que um utilizador pretender visualizar um vídeo, é criada uma pasta temporária com o seu nome de utilizador, é descarregado o vídeo para essa pasta e depois quando o utilizador abandonar a página, a pasta é apagada.

Temos então:

$myblobid como identificador do nome do vídeo que queremos visualizar;

$myblobtipo como identificador do tipo de ficheiro que neste caso será “flv”.

A seguir mostra-se o código para descarregar o vídeo. Este é tratado como sendo um objecto: 

$s = oci_parse ($c, “select DADOS from FICHEIROS where CODIGOFICHEIRO =’$myblobid‘”);
oci_execute($s, OCI_DEFAULT);
$res = oci_fetch_object($s);
$result = $res->DADOS->load();

Depois é criada a pasta temporária com o nome do utilizador e é guardado o ficheiro:

$user = $_SESSION['user'];                          // O nome do utilizador;
$location = “C:/…/” . $user . “/”;                   // A localização da pasta;
$filename = $myblobid.$myblobtipo;       // Para ser usado no player;
$filepath=$location.$filename;                    // Para guardar o vídeo; 
$file=fopen($filepath, ‘w’);
fwrite($file,$result);
fclose($file);

A seguir é então necessário invocar o player com  o $filename criado:

echo ” <script type=’text/javascript’ src=’video/swfobject.js’></script>
<div id=’player’>Video</div>
<script type=’text/javascript’>
var so = new SWFObject(‘video/player.swf’,'mpl’,'470′,’320′,’9′);
so.addParam(‘allowscriptaccess’,'always’);
so.addParam(‘allowfullscreen’,'true’);
so.addParam(‘flashvars’,'&file=$user/$filename‘);
so.write(‘player’);
</script>”;

E pronto, se tudo correu bem, podem então visualizar o vídeo na vossa página web.

Boas programações! ;-)

O sono do Mac!

Novembro 1, 2008

Já por algumas vezes precisei de me movimentar enquanto estava a fazer um ou outro download e como todos sabemos é uma chatice transportar um portátil com a tampa do ecrã aberta. Sim porque os Macs “adormecem” quando se fecha a tampa. Uma particularidade que na maior parte das vezes (quase todas) é fantástica mas que é um problema quando queremos que ele se mantenha activo. É neste contexto que surge o InsomniaX! Esta aplicação permite manter o Mac activo, mesmo fechando a tampa! Maravilha!

Uma outra aplicação que dá imenso jeito no meio académico dá pelo nome de Caffeine e como o próprio  nome indica, evita que o Mac entre em suspensão ou em modo de screen saver não interrompendo, por exemplo, uma apresentação brilhante de um trabalho extremamente bem conseguido, como é o caso dos meus!

:-D