mayo 2006Express IT: mayo 2006

lunes, 29 de mayo de 2006

Radio On-Line para el estado

Resumen

Como administrador de sistemas y red en Radio Universidad Autónoma de Tamaulipas (RadioUNI) y consumidor de radio en línea, pretendo describir como RadioUNI desde 1997 a aprovechado la Internet para transmitir su señal en vivo. Además propongo un proyecto para renovar la presencia del Sistema Estatal Radio Tamaulipas (SERT) en la web haciendo uso de la tecnología más reciente para streaming y podcasting con poca inversión y costos de mantenimiento casi cero.

Introducción

En 1997 RadioUNI estrenaba la red de radio universitaria que le permitía enviar su señal a todos los campus en el estado y desde el sur de Texas hasta el norte de América del Sur vía satélite. Además la Universidad Autónoma de Tamaulipas daba sus primeros pasos en el campo de la Internet y decidió utilizar tecnología Real Audio para subir la señal de RadioUNI a la web, con el paso del tiempo y hasta el año 2004 que trabaje en esa estación, la transmisión de contenidos en vivo y bajo demanda en el portal de RadioUNI fueron una parte muy importante dentro del quehacer diario. No solo nos permitía mantener informados a nuestros radio escuchas si no que debido a la naturaleza de la Internet los programas y la programación se adaptaban fácilmente a las necesidades de la Universidad y la audiencia con la ayuda de encuestas en línea, retroalimentación vía correo electrónico y otros indicadores.
Radio Tamaulipas por otra parte, ha sido una dependencia muy olvidada por el aparato estatal y más o menos al mismo tiempo que RadioUNI coloco en línea su señal con el mismo formato Real Audio, pero a diferencia de RadioUNI nunca a tenido un portal con servicios que le permitan la comunicación con su audiencia y la pagina web apenas proporciona información básica para poder escuchar la estación. Sin mencionar el hecho de que la transmisión ha sido intermitente y por periodos de tiempos indefinidos pero bastante largos es imposible escuchar la estación. En fechas recientes e intentado escuchar la estación en Internet con éxito, pero cada vez que llego al sitio, es necesario (léase obligatorio) llenar una formulario con datos personales, cosa que como navegante habitual de la red no siempre estoy dispuesto a revelar aún tratándose de un sitio del estado.
Todo esto me lleva a pensar que Radio Tamaulipas como departamento no tiene control alguno sobre el contenido de su sitio en Internet y tampoco controla la transmisión en línea. En RadioUNI existió al principio una situación similar donde la Coordinación General de Telecomunicaciones e Informática tenia un receptor de radio en el site de servidores para generar la señal en línea y también era su personal quien diseñaba y publicaba la página web. Cuando RadioUNI designo a una persona responsable de esas tareas y la señal era tomada directamente de la bahía de parcheo en el estudio de la estación fue posible tomar ventaja realmente de la Internet y los servicios que es posible ofrecer ahí.

CMS Made Simple y Icecast

CMS Made Simple es un sistema de administración de contenidos que provee una forma rápida y sencilla para crear paginas web y administrar sus contenidos sin la necesidad de conocimientos de programación, esta basado en tecnología LAMP
y tienen la capacidad de generar RSS feeds útiles para publicar podcasts.
Icecast es el servidor de streams de audio en formato Ogg Vorbis, es versátil ya que es relativamente sencillo agregar soporte para otros formatos de audio y utiliza estándares abiertos para comunicación e interacción.
Existen dos componentes principales para generar un streaming en vivo: una parte provee el contenido (lo que se llama "source client") y la parte encargada de distribuir el contenido a la audiencia (el servidor de straming), esta es la función de Icecast. El cliente que utilizaremos en esta ocasión es Oddcast v3.

Implementación

Para realizar este proyecto es necesario contar con dos equipos de computo de configuración relativamente estándar y una persona responsable de la administración y contenidos en el portal de Internet. Además el departamento de Sistemas de Gobierno del Estado deberá proveer dos conexiones de red, una a la LAN de gobierno en las instalaciones del SERT y otra en el site de servidores para el servidor Icecast que además albergara el portal web, con una IP publica de Internet y los puertos TCP 22, 80 y 8000 abiertos para administración, portal web y streaming en vivo respectivamente. El puerto 22 puede y de hecho debería ser accesible solo desde la IP asignada a la PC en las oficinas del SERT y el puerto 8000 es opcional pudiendo utilizarse cualquier otro que el departamento de sistemas designe. En las oficinas del SERT el técnico o ingeniero responsable de la estación deberá proveer una linea de audio de buena calidad para cada uno de los streamings deseados (esto suponiendo que se desee colocar en Internet la señal de las estaciones de A.M. y F.M.).

Una vez que se cumplan estos requerimientos es posible iniciar el streaming en vivo y la publicación del portal y sus primeros contenidos en un periodo menor a 24 horas incluyendo entrenamiento básico de la persona designada para las tareas de administración y generación de contenidos.

Requerimientos

  • 1 PC Pentium 4, 512 MB de RAM, HD de 80 GB, CD-Writer, con bocinas estereo, tarjeta de audio y tarjeta de Ethernet 100 de Mbps.

  • 1 Servidor Pentium 4 o mejor, 1 GB de RAM o más, HD de 250 GB SATA o mejor, CD-ROM y tarjeta Ethernet 100 Mbps o mejor.

  • 1 Persona con conocimientos básicos de computación.

  • 1 IP de LAN de Gobierno en las oficinas del SERT

  • 1 IP pública en Internet con los puertos TCP 80 y 8000 abiertos y el 22 abierto a la LAN de gobierno

sábado, 6 de mayo de 2006

Recuperar gestor de arranque FreeBSD

Como era de esperar, Windows "el envidioso" sobreescribio el MBR del disco duro y ahora no puedo iniciar FreeBSD 6.0, afortunadamente cuando de software libre se trata la solución a estos incovenientes es simple:
  1. Inicia la computadora con el CD de FreeBSD
  2. En sysinstall selecciona Configure y enseguida Fdisk
  3. Con ESPACIO selecciona el disco donde residia el Boot Manager de FreeBSD
  4. Presiona W para guardar los cambios
  5. Enseguida aparece una ADVERTENCIA, simplemente responde YES
  6. Por último nos pregunta donde deseamos instalar el Boot Manager, elige la opción más apropiada para tu caso.
  7. Sal de sysinstall reinicia y listo.

Deshabilitar Event Tracker en Windows 2003

Instale Windows Server 2003 para un sistema en el que trabajo, en esta versión Microsoft introdujo el "Shutdown Event Tracker" que esta bastante bien para un servidor en producción, pero para desarrollo y con reboots repetidos ya que en esta maquina tiene instalado tambien FreeBSD 6.0, el mentado Shutdown Event Tracker se vuelve una molestia. Googleando un poco encontre la forma de inhabilitarlo.

  1. En el menu Start selecciona Run y teclea GPEDIT.MSC
  2. En el Group Policy Object Editor expande Computer Configuration->Administrative Templates->System
  3. Doble clic en Display Shutdown Event Tracker
  4. Selecciona Disabled y haz clic en OK

RDBMS, instalación desatendida

No siempre es posible instalar una base de datos con el auxilio de una GUI, ya sea por que es necesario hacer una instalación remota o local de varias instancias. En seguida listo la forma de hacer esto con SQL Server 2005, Oracle 10g y DB2.


SQL Server 2005
En el directorio raíz del CD de instalación se encuentra un archivo TEMPLATE.INI, copialo con otro nombre y editalo con el block de notas de acuerdo a tus necesidades.

  • Los parametros TARGETCOMPUTER, ADMINACCOUNT y ADMINPASSWORD, pueden pasarse en la linea de comandos y es lo más recomendable para los dos últimos.
  • INSTALLSQLDIR indica donde colocar el motor y los binarios de SQL Server por default: %ProgramFiles%\Microsoft SQL Server\
  • INSTALLSDATADIR indica donde colocar los archivos de datos de las bases de datos, por default : %ProgramFiles%\Microsoft\SQL Server\Data\

Existen muchos otros parametros que sirven para tantas otras cosas como agregar Servicios de Análisis, Replicación , etc. Asignar propiedades de servicios, modo de autentificación, instalación de clusters, etc.

Para iniciar la instalación ejecuta el comando:

setup.exe /settings c:\path\to\settings.ini

Además se pueden utilizar los switches /qn para una instalación silenciosa sin (avisos) o /qb para ver el progreso de la instalación.

jueves, 4 de mayo de 2006

PHP5 Clase para representar base de datos

Ya hace algún tiempo que me tope con el artículo "Going dynamic with PHP" de Jack Herrington, Senior Software Engineer, "Code Generation Network" en el sitio developerWorks de IBM.
Nos muestra como aprovechando las nuevas características de programación orientada a obejetos en PHP 5 se pueden crear objetos muy flexibles capaces de crear metodos y variables miembro al vuelo.
En la actualidad utilizo el siguiente codigo en mis aplicaciones de PHP como base, para una explicación de como funciona sugiero leer el artículo en developerWorks, yo solo lo pongo aquí para disponer de el en forma inmediata.

getMessage()); }

class DBObject
{
private $id = 0;
private $table;
private $fields = array();

function __construct( $table, $fields )
{
$this->table = $table;
foreach( $fields as $key )
$this->fields[ $key ] = null;
}

function __get( $key )
{
return $this->fields[ $key ];
}

function __set( $key, $value )
{
if ( array_key_exists( $key, $this->fields ) )
{
$this->fields[ $key ] = $value;
return true;
}
return false;
}

function load( $id )
{
global $db;
$res = $db->query(
"SELECT * FROM ".$this->table." WHERE ".
$this->table."_id=?",
array( $id )
);
$res->fetchInto( $row, DB_FETCHMODE_ASSOC );
$this->id = $id;
foreach( array_keys( $row ) as $key )
$this->fields[ $key ] = $row[ $key ];
}

function insert()
{
global $db;

$fields = $this->table."_id, ";
$fields .= join( ", ", array_keys( $this->fields ) );

$inspoints = array( "0" );
foreach( array_keys( $this->fields ) as $field )
$inspoints []= "?";
$inspt = join( ", ", $inspoints );

$sql = "INSERT INTO ".$this->table.
" ( $fields ) VALUES ( $inspt )";

$values = array();
foreach( array_keys( $this->fields ) as $field )
$values []= $this->fields[ $field ];

$sth = $db->prepare( $sql );
$db->execute( $sth, $values );

$res = $db->query( "SELECT last_insert_id()" );
$res->fetchInto( $row );
$this->id = $row[0];
return $row[0];
}

function update()
{
global $db;

$sets = array();
$values = array();
foreach( array_keys( $this->fields ) as $field )
{
$sets []= $field.'=?';
$values []= $this->fields[ $field ];
}
$set = join( ", ", $sets );
$values []= $this->id;

$sql = 'UPDATE '.$this->table.' SET '.$set.
' WHERE '.$this->table.'_id=?';

$sth = $db->prepare( $sql );
$db->execute( $sth, $values );
}

function delete()
{
global $db;
$sth = $db->prepare(
'DELETE FROM '.$this->table.' WHERE '.
$this->table.'_id=?'
);
$db->execute( $sth,
array( $this->id ) );
}

function delete_all()
{
global $db;
$sth = $db->prepare( 'DELETE FROM '.$this->table );
$db->execute( $sth );
}
}

class Book extends DBObject
{
function __construct()
{
parent::__construct( 'book',
array( 'author', 'title', 'publisher' ) );
}
}

$book = new Book( );
$book->delete_all();
$book->{'title'} = "PHP Hacks";
$book->{'author'} = "Jack Herrington";
$book->{'publisher'} = "O'Reilly";
$id = $book->insert();

echo ( "New book id = $id\n" );

$book->{'title'} = "Podcasting Hacks";
$book->update();

$book2 = new Book( );
$book2->load( $id );
echo( "Title = ".$book2->{'title'}."\n" );
$book2->delete( );
?>