Hola!

July 15, 2010

Page up/down en aplicaciones de terminal con buffer propio

Por razones de tiempo cada vez me conecto menos a IRC, aunque creo firmemente que sigue siendo el sistema de chat con el cual me siento más cómodo. Hace algún tiempo note que al conectarme desde irssi sobre Mac OS X, no me funcionaba el bendito Page up/down como con el resto de las aplicaciones!!!. Esto sucede porque irssi maneja un buffer de manera independiente a Terminal, por lo cual las combinaciones clásicas no funcionaban. Probando combinaciones casi al azar, logré encontrar una que me permitió desplazar a través del buffer de irssi:

(shift + fn) + (flecha arriba)

(shift + fn) + (flecha abajo)

Con eso queda resuelto el problema del desplazamiento en irssi y probablemente otras aplicaciones que utilizan el mismo sistema. Aunque queda muy poca gente que usa clientes de IRC por terminal espero que el tip sea de utilidad.

April 28, 2010

Symfony/Doctrine: Clave Primaria Compuesta

Debo reconocer que soy bastante crítico al momento de modelar datos, ya que me gusta que todo quede lo mejor optimizado posible. En estos días he estado trabajando junto a mi equipo, en un proyecto el cual tienen como base tecnológica: PostgreSQL, Symfony y Doctrine; todo iba viento en popa hasta que llego el momento de intervenir el mantenedor de una entidad cuya clave primaria era compuesta y además los campos eran foráneos, lo cual gatilló en los siguientes problemas:

  1. Hubo que crear a mano los elementos del formulario correspondientes a los campos foraneos correspondientes a la clave primaria.
  2. Una vez creados, se logra ingresar un dato... hasta aquí todo parecía ir bien, sin embargo, la sorpresa apareció al momento de intentar desplegar la grilla, en la cual aparecío un flamante error en el routing (routing.yml) del backend, especificamente en la opción column que tenía como valor Array. Se intento solucionar de variadas formas propuestas como pseudo-soluciones en algunos sitios web, para nuestro infortúnio sin conseguir el exito esperado.
  3. Cuando casi perdiamos la esperanza y ya estabamos casi dispuestos a darle toda la responsabilidad a la capa del modelo de Symfony, nos iluminamos, pensamos y compartiendo experiencias de amigos externos (Gracias Jorge por tu infiníto tiempo libre para los amigos), en que quizás si creabamos un índice compuesto y que además sea único, con eso en teoría podíamos garantizar que no hubiesen registros duplicados (que era lo importante), y dejar como clave primaria un simple id autoincremental, y gotcha! funcionó perfecto.
A continuación dejaré una entidad de ejemplo para config/doctrine/schema.yml y backend/config/routing.yml.

schema.yml


MiEntidad:
columns:
id_mi_entidad:
type: integer
primary: true
notnull: true
autoincrement: true
id_foranea_uno:
type: integer
notnull: true
id_foranea_dos:
type: integer
notnull: true
relations:
ForaneaUno:
foreignAlias: MisEntidadesForaneaUno
local: id_foranea_uno
foreign: id_foranea_uno
type: one
foreignType: many
ForaneaDos:
foreignAlias: MisEntidadesForaneaDos
local: id_foranea_dos
foreign: id_foranea_dos
type: one
foreignType: many
indexes:
mi_entidad_index_unq:
fields: [id_foranea_uno, id_foranea_uno]
type: unique

routing.yml

mi_entidad:
class: sfDoctrineRouteCollection
options:
model: MiEntidad
module: mi_entidad
prefix_path: /mi_entidad
column: id_mi_entidad
with_wildcard_routes: true

Espero que este post, les sea de todo su gusto y les permita optimizar de mejor forma su tiempo que a mi :P.

Pd, Disculpen la indentación y recuerden que en yamel la indentación es de dos espacios y no de una tabulación tradicional (cuatro espacios).

April 14, 2010

Back to the source …

… cada vez que te das cuenta del tiempo que ah pasado, se tiende a volver al origen y replantearte que tan lejos estas del camino que la ultima vez trazaste. Bueno ahora es cuando!, acontecimientos de la naturaleza y de la vida en si que te invitan a replantearte objetivos y nuevas metas.

Por eso vuelvo al origen!!! e iniciemos nuevamente.

January 23, 2010

Seducido por la Manzana Prohibida


Después de mas de una decada codeando sobre Sistemas Operativos Unix BSD y UnixLike Libres, debo asumir que me he dejado seducir por el encanto e inigualable belleza entregada por una manzana, que aunque está mordida en sus principios, me dejo encantado por la forma en la cual logra integrar lo mejor del mundo Unix BSD con el principio KISS. Si bien es una relación que recien comienza, tengo la esperanza que será una larga y comprometida relación (espero no estar escupiendo al cielo).

September 01, 2009

Nuevo Mirror Svn de FreeBSD

Tenemos nuevo mirror: svn://svn.freebsd.cl/base
Se actualiza cada 1 hora.

August 29, 2009

cvsup.freebsd.cl

El mirror cvsup de FreeBSD (src, ports, docs, www) queda oficialmente abajo....
:(

August 12, 2009

PostgreSQL: Actualizar nulidades en columnas

Algo que se podría pensar como trivial en un motor de bases de datos, como lo es el actualizar/modificar las nulidades de una columna, en PostgreSQL resulta ser un poco mas complejo que un simple alter. He decidido compartir esto, ya que es algo que resulta bastante normal cuando se trabaja con bases de datos y por lo demás una problemática mas común de lo que se puede pensar.

A continuación un ejemplo en donde se define attnotnull como FALSE (Se permite NULL):

BEGIN;
UPDATE
pg_attribute
SET
attnotnull = FALSE
WHERE
attname = 'nombre_columna'
AND
attrelid = ( SELECT oid FROM pg_class WHERE relname = 'nombre_tabla') ;
COMMIT;
Para el caso contrario basta con dejar attnotnull como TRUE (No Se permite NULL), ya que este es de tipo boolean.
test=# \d pg_attribute
Tabla «pg_catalog.pg_attribute»
Columna | Tipo | Modificadores
---------------+------------+---------------
attrelid | oid | not null
attname | name | not null
[...]
attalign | "char" | not null
attnotnull | boolean | not null
atthasdef | boolean | not null
[...]
Una de las cosas que creo que es importante acotar, es que la columna relname de la tabla pg_class almacena el nombre de las tablas sin determinar el SCHEMA, esto lo pueden averiguar de manera sencilla haciendo la consulta por separado:
SELECT oid FROM pg_class WHERE relname = 'nombre_tabla'
Si retorna el oid es que esta bien, en caso contrario, algo estan haciendo mal.

Con todo esto la columna ya debería contar con el nuevo atributo, permitiendo continuar con la música...

August 05, 2009

PL/PgSQL: Obtener días hábiles de un rango de fechas


En mi trabajo nos surgió la necesidad de desarrollar un algoritmo que nos permitiese calcular y generar los días hábiles de un determinado rango de fechas. Este debía ser capaz de excluir de manera automática los días Sábado, Domingo y Festivos y retornar solo el resto de los días de lunes a viernes. El planteamiento a seguir fue el siguiente:
  • Elegir la tecnología para implementar el algoritmo:
Como la base de datos institucional está en PostgreSQL, pensamos que lo mejor era apegarnos a esto y utilizar como lenguaje PL/PgSQL, el cual sin duda satisfacía cada una de nuestras necesidades para el caso y mucho mas.
  • Crear una tabla que contenga los días festivos:
CREATE TABLE public.dia_festivo (
cod_dia_festivo CHARACTER(5) NOT NULL,
desc_dia_festivo CHARACTER VARYING(250) NOT NULL,
PRIMARY KEY (cod_dia_festivo)
);
  • Poblar la tabla public.dia_festivo
  • Crear la función
CREATE OR REPLACE FUNCTION public.get_dias_habiles(date, date) RETURNS SETOF RECORD AS
$BODY$
DECLARE
fecha_ini ALIAS FOR $1; -- Fecha Inicio
fecha_ter ALIAS FOR $2; -- Fecha Termino
sabado integer := 6; -- Dia sabado
domingo integer := 0; -- Dia domingo
BEGIN
RETURN QUERY
SELECT
CAST(to_char(fecha_ini + dias, 'DD-MM-YYYY') AS character(10)) AS fecha
FROM
generate_series(0, fecha_ter - fecha_ini) AS dias
WHERE
extract (dow FROM fecha_ini + dias) NOT IN (sabado, domingo)
AND
CAST(to_char(fecha_ini + dias, 'DD-MM') AS character(5))
NOT IN
(SELECT cod_dia_festivo FROM public.dia_festivo);
END;
$BODY$
LANGUAGE 'plpgsql';
  • Llamar la función:
SELECT
fecha
FROM
public.get_dias_habiles('2009-01-01', '2009-12-31')
AS
dias_habiles(fecha character);
Creo que todo el código es practicamente autoexplicable para alguien con conocimientos de SQL, PostgreSQL y PL/PgSQL, y la idea principal de compartirlo es obtener algún feedback con algún enfoque distinto, correcciones, y por supuesto que le pueda ser de utilidad y mejore el día a quien lo necesite.

PS, Perdón por la falta de indentación pero el blog se la comió. :P

May 22, 2009

March 28, 2009

Color de un ComboBox Item

Los items de los combobox en windows forms no se les puede definir el color del foreground y background.
Si los objetos que se ponden son del tipo ListViewItem, entonces se puede usar el evento comboBox.DrawItem para dibujarles los colores, con lo siguiente:


void OnDrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index0)

return;


Graphics g = e.Graphics;

Rectangle r = e.Bounds ;

e.DrawBackground();


Color textColor = SystemColors.ControlText; //Queda con etse color

if (e.State == (DrawItemState.Focus | DrawItemState.Selected ) )

textColor = SystemColors.HighlightText;

if (e.State == DrawItemState.None)

textColor = SystemColors.WindowText;


ListViewItem item = combo.Items[e.Index] as ListViewItem;


if (item.ForeColor != SystemColors.WindowText)

textColor = item.ForeColor;


//Rectangulo interno

// Rectangle rectangle = new Rectangle(2, e.Bounds.Top+2, e.Bounds.Height, e.Bounds.Height-4);

// e.Graphics.FillRectangle(new SolidBrush(Color.Salmon), rectangle);


g.DrawString(item.ToString(), new Font("Ariel", 8), new SolidBrush(textColor), r);

e.DrawFocusRectangle();


}



O más simple aún, reemplazar OnDrawItem:


public class ColorComboBox : ComboBox
{

protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem (e);

if (e.Index0)
return;

Control item = this.Items[e.Index] as Control;
if (item==null)
return;

Graphics g = e.Graphics;
Rectangle r = e.Bounds ;
if (item.ForeColor != SystemColors.WindowText)
g.DrawString(item.ToString(), Parent.Font, new SolidBrush(item.ForeColor), r);

}

}

March 19, 2009

¿Volvi?

Generalmente me da por temporadas, escribo algo, varios post seguidos y luego lo dejo…. Ya van mas de 4 meses que no escribia nada, y nuevamente vuelvo a este blog.

Sigo utilizando Slackware en mi portatil, que sensación mas agradable tener el dominio completo de tu sistema operativo gracias a esta gran distribución. En casa ocuparé Ubuntu o FreeBSD, pero aún sigo con el inseparable Windows XP (si, soy un hereje) para poder jugar algo….

Tengo varios proyectos en mentes.. algunos para mí, otros para el mundo. Los cuales ire comentando en este blog a medida que avancen. Volveré con los articulos de Slackware y el mundo libre en general.

Bendiciones a todos y espero mantener el contacto…

root@workmobil:~# ping -c 4 inkubot
PING inkubot (127.0.0.1) 56(84) bytes of data.
64 bytes from inkubot (127.0.0.1): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from inkubot (127.0.0.1): icmp_seq=2 ttl=64 time=0.029 ms
64 bytes from inkubot (127.0.0.1): icmp_seq=3 ttl=64 time=0.023 ms
64 bytes from inkubot (127.0.0.1): icmp_seq=4 ttl=64 time=0.028 ms

— localhost ping statistics —
4 packets transmitted, 4 received, 0% packet loss, time 2997ms
rtt min/avg/max/mdev = 0.023/0.026/0.029/0.002 ms

February 26, 2009

Cliente Oracle 10g en FreeBSD

Tiempo atras, hice un paper con respecto a este proceso que voy a transcribir y revisar su utilizacion en FreeBSD 7.1-RELEASE-p3, espero ayude.

El port de oracle client se instala de la siguiente forma:

  1. # cd /usr/ports/databases/linux-oracle-instantclient-sqlplus
  2. make build install clean

Este proceso requiere de la descarga manual de 2 archivos desde www.Oracle.com que deben ser almacenados en la carpeta /usr/ports/distfiles/oracle y que corresponden a:

  1. instantclient-sqlplus-linux32-10.2.0.3-20061115.zip
  2. instantclient-basic-linux32-10.2.0.3-20061115.zip

Y una vez finalizado el proceso completo quedan los siguientes ports instalados en el sistema:

  1. linux_base-fc-4_14
  2. linux-oracle-instantclient-basic-10.2.0.3.20061115_2
  3. linux-oracle-instantclient-sqlplus-10.2.0.3.20061115_1

Ahora, solo nos queda configurar el acceso al listener, proceso para el cual necesitamos algunas variables de entorno de nuestra shell:

  • Configurar la .cshrc (para quienes usamos la shell de C):

if (! $?ORACLE_HOME) then
if (-d /compat/linux/usr/lib/oracle) then
setenv ORACLE_HOME /compat/linux/usr/lib/oracle
else
echo “Warning – ORACLE_HOME not defined”
echo “To use Oracle Client, define ORACLE_HOME and rerun your .cshrc”
endif
endif

if ($?ORACLE_HOME) then
set path=($path $ORACLE_HOME/10.2.0.3/client/bin)
end

Así la configuración queda completa cuando “sqlplus” busque el tnsnames.ora que por estructura busca en $ORACLE_HOME/network/admin y cuya estructura es la siguiente:

ORADB = (
DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = 10.0.0.5) (PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ServiceName))
)

Con un resultado final como este:

[ kuarzo@kuarzo:~ ]% sqlplus usuario/clave@ORADB as sysdba

SQL*Plus: Release 10.2.0.3.0 – Production on Thu Feb 26 10:31:45 2009
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Conectado a:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL>

February 17, 2009

System.Windows.Forms

Curiosamente no es lo mismo

ventana.Hide();

que

ventana.Show();
ventana.Hide();



Cuando se hace lo primero, entonces cualquier cosa que haga en otro hilo (con Invoke) no funciona.

:P

January 31, 2009

CVS Mirror

Para los interesados:

export CVSROOT":pserver:anoncvs@cvsup.freebsd.cl:/home/ncvs"
cvs login (clave anoncvs)
cvs co ports

suerte!

December 10, 2008

GenericGrid

Por esas cosas de la vida, me puse a implementar una grilla en Gtk (TreeView), en gtk-sharp. Hace tiempo que no lo hacia y al ver la API, inmediatamente me dio paja. :P

Me acorde que hace tiempo (2años?) hice un shortcut para hacer grillas y lo encontre! y esta weno! y es facil se usar!

Es tan bonito como escribir lo siquiente:

Grid g = new Grid();

g.ObjectChanged += ObjectHasChanged;

g.ObjectCreated += ObjectIsNew;

g.ObjectDeleted += ObjectRemoved;


List lista = CreateTestObj();

g.Manage(lista);


:)

TestObj, es el tipo de objeto que la grilla muestra, y esta decorado con atributos que le indican como dibujarse, por ejemplo:

[Column("Percent", Type = typeof(PercentInt), Resizable=true)]

public int Percent

{

get { return percent; }

set { percent = value; }


}


Esta super util. Si alguien le interesa que avise...







Notificaciones

Alguien se metio a mi blog y me dijo que es nerd que la cresta...
Asique pense, como lo hago para hacerlo aun mas nerd?...

Por un tiempo, estuve buscando algo que permitiera notificar las llamadas entrantes a un PC (asterisk). Curiosamente no hay mucho para elegir. Hay varias alternativas que parecen ser buenas, pero son pagadas (no las he probado).
De las libres, la unica que encontre descente (el resto es una basura..) es la de un chino, la cual se ve bien (se me perdio el link), pero no es lo que busco (es web, y hace un polling medio feo..).

Asique aproveche de retomar gtk-sharp...
Notable: Gtk.StatusIcon (antes habia que usar un wrapper medio buggy para poner iconos en el systray.. :P)


El servidor ahora le notifica a al PC, que estan llamando (a alguno de los anexos 45,31 o 90), y dice quien es. Cuando llega la llamada, aparece un feo "Ring riiing" y cuando se solicita mas detalle, se abre una pagina que despliega mas detalles de la shhhamada.


December 03, 2008

November 28, 2008

Es hora de actuar

Es hora de actuar.

Hay cosas que no funcionan bien en nuestra sociedad, es hora de hacer algo.

November 26, 2008

'Casteo ascendente'

Lo encontre choro....

Si en una clase llamada Clase, le ponemos un constructor asi:

public Clase : Dictionary<string,string>
{
public Clase(Dictionary<string,string> dic) : base(dic)
{}
}

Entonces es posible escribir:

Clase clase = new Clase(new Dictionary<string,string>());

:P

November 21, 2008

OpenOffice 3

Ayer instale Openoffice 3, y me encontre con la sorpresa que no se pueden instalar extensiones ni diccionarios:

"bad tranfer url"

Alguien lo ha podido hacer?


Referencias:
http://www.freebsd.org/cgi/query-pr.cgi?pr=127946
http://archivos.sofsis.cl/freebsd/openoffice/

November 17, 2008

The FreeBSD Forums – Al fin!!!

The FreeBSD Forums

Esta extraordinaria noticia llego hoy via RSS en la página oficial de FreeBSD, la cual anuncia la puesta en marcha de su foro oficial. Excelente trabajo y mis felicitaciones. Siguen siendo lo mejor.

SCHED_4BSD o SCHED_ULE

SCHED_ULE es un planificador experimental que proporciona una serie de características avanzadas no presentes en sched_4bsd, el planificador por defecto del sistema. Estas nuevas características incluyen:

  • Thread CPU affinity
  • CPU topology awareness, including for hyper-threading.
  • Per-CPU run queues.
  • Interactivity heuristics that detect interactive applications and schedules them preferentially under high load.

Es dificil dar traducción a estas definiciones pero para quienes estan ya mas familiarizados con el kernel de FreeBSD, es facil de entender. Cabe señalar tambien que su funcionalidad en MultiProcesadores es sumamente eficiente.

Los siguientes sysctls son pertinentes a la operación de sched_ule:

kern.sched.name

Ademas de esto para reemplazar el Planificador por defecto se debe reemplazar la linea en su configuración de kernel:

options       SCHED_4BSD # 4BSD scheduler
por
options       SCHED_ULE  # ULE scheduler

November 13, 2008

Mono 2.0.1 en FreeBSD

El proyecto Mono, está basado en los estandares de la ECMA para .NET Framework de Microsoft, en donde componentes basicos de Mono son:

C# Compiler. Es un completo compilador de las versiones 1.0, 2.0 y 3.0 del Lenguaje C#.

Mono Runtime. Implementa el Common Language Infrastructure (CLI), tambien nos prove de un compilador Just in Time (JIT), un cargador de librerias, un limpiador de memoria, sistema de hilos, y funciones de interoperabiliadad.

Libreria de clases basicas. Contiene una gran cantidad de clases compatibles con el .NET Framework de Microsoft

Mono en freeBSD

Gracias a la activa participación de Phillipe Neumann existe la posibilidad de usarlo en su maxima capacidad en nuestros FreeBSD.

October 28, 2008

Nueva visión

Después de bastante tiempo fuera de la blogosfera he sentido la necesidad de volver a contar con un espacio en donde poder dar rienda suelta a mi Nerd interior he ir haciendo un manifiesto de mi cotidianidad aunque esta vez con una visión mucho mas clara y objetiva, digo esto de manera literal ya que desde hoy soy un usuario de lentes ópticos factor de un descarado astigmatismo miópico.

Lo mas difícil de todo esto, es poder adaptarme a mis "nuevos ojos", ya que aún no domino mi motricidad fina, además de ver el monitor de mi laptop como un pseudo trapecio, pero bueno... como dicen mis amigos usuarios: "es cosa de costumbre", espero que desde esta nueva perspectiva pueda dejar atrás los desagradables dolores de cabeza y llevar una mejor calidad de vida.

October 22, 2008

Tratados como Mercenarios …

Actualmente muchos de los que trabajamos en seguridad, como se hacia en la vieja escuela, descubriendo nuevas fallas o simplemente encontrando quienes tenian las ya descubiertas, se debía por etica e incluso algo mas fuerte por solidaridad entre encargados, dar aviso y procurar que sea corregido el problema, algo que era muy bien visto e incluso muchas veces agradecido el apoyo compartiendo mas de algun trago y conversando de lo que nos apaciona, obviamente “Seguridad Informática”.

Esto hoy se ve empañado a gran escala por casos como este:

HACKEO A CHILECOMPRA PONE EN DUDA MILES DE LICITACIONES PÚBLICAS DEL GOBIERNO

En el que si bien es cierto la definicion de HACKER nuevamente se mal usa, destaca el echo de que es increible saber el mal nivel de desarrollo de software que tiene Sonda. Sin desmerecer la genialidad del trabajo en Data Mining necesaria para llegar a encontrar una falla de esta embergadura.

Gino, se que estas con el estomago mas que apretado, confianza amigo mio en que todo esto no va  a ser mas que un recuerdo del que nos reiremos a futuro, en el que vemos como esta sociedad actua como mercenarios con quienes quieren hacer de este mundo un mejor lugar para vivir.

October 21, 2008

Actualizar Bios de Soekris con “cu” y “lsx”

Por lo general este tipo de procesos via serial  se les da mas cuidado del que tiene, si bien es cierto el proceso es critico, no es complejo, lo que si es necesario ya que las actualizaciones no son solo un parche o una nueva funcionalidad, es tambien mejorar el funcionamiento del hardware.

Aquí les muestro los pasos para esto proceso, en FreeBSD el comando “cu” es parte del sistema, pero “lsx” no y vien en el port /usr/ports/comms/lrzsz por lo que pasa a ser necesario en este proceso, lo primero es entrar al Soekris:

cu -l /dev/cuad0 -s 9600

En este proceso entramos al dispositivo, en mi caso tengo un net45xx, y en la consola digitar “download” ojo que esto le dice al soekris que espera una transmisión via serial, y es mientras espera respuesta que se debe ejecutar el comando “~C” OJO es C mayuscula para decirle al sistema que es COMANDO y como ven aqui abajo entre ese proceso se escribe “lsx /root/b4501_133.bin” mostrando algo como esto:

> download

Start sending file using XMODEM/CRC protocol.
CCCCCCCCCC

~C
Local command?
lsx /root/b4501_133.bin

Sending /root/b4501_133.bin, 608 blocks: Give your local XMODEM receive command now.
Bytes Sent:  77824   BPS:902

Transfer complete
File downloaded succesfully, size 608 Blocks.

Y así por ultimo actualizamos de la siguiente forma:

> flashupdate
Updating BIOS Flash ,,,,,,,,,,,,..,,,,.. Done.
> reboot

Finalizando Así:

comBIOS ver. 1.33  20080103  Copyright (C) 2000-2007 Soekris Engineering.
net45xx

0064 Mbyte Memory                        CPU Elan SC520 100 Mhz

Slot   Vend Dev  ClassRev Cmd  Stat CL LT HT  Base1    Base2   Int
——————————————————————-
0:00:0 1022 3000 06000000 0006 2280 00 00 00 00000000 00000000
0:09:0 104C AC50 06070002 0107 0210 10 3F 02 A0000000 020000A0 10
0:18:0 100B 0020 02000000 0107 0290 00 3F 00 0000E101 A0001000 11
0:19:0 100B 0020 02000000 0107 0290 00 3F 00 0000E201 A0002000 05

1 Seconds to automatic boot.   Press Ctrl-P for entering Monitor.

NSC DP83815/DP83816 Fast Ethernet UNDI, v1.03
Copyright (C) 2002, 2003 National Semiconductor Corporation
All rights reserved.

Pre-boot eXecution Environment  PXE-2.0 (build 082)
Copyright (C) 1997-2000  Intel Corporation

PXE-E61: Media test failure, check cable
PXE-M0F: Exiting MacPhyter PXE ROM.
No Boot device available, enter monitor.

comBIOS Monitor.   Press ? for help.

October 19, 2008

PostgreSQL Select a formato XML

Existen en la actualidad diversas formas de graficar reportes de datos, pero aquellas que son las mejores visualmente requieren de una lectura de datos de XML, por lo que aquí les va el como poder generar uno a travez de un “Select” a una tabla de datos, y obviamente en PostgreSQL las funciones son:

  • XMLParse
  • XMLSerialize
  • XMLElement
  • XMLForest
  • XMLAgg
  • XMLAttributes
  • XMLComment
  • XMLConcat

De las cuales mostrare ejemplos claros en su uso y funcionamiento, ah partir de aqui escribiré algunos como:

SELECT XMLElement(name root, nombre_campo) from tabla;

Y su resultado es mas menos algo parecido a esto:

         xmlelement
—————————–
 <root>Cuprum</root>
 <root>Habitat</root>
 <root>Magister</root>
 <root>Planvital</root>
 <root>Provida</root>
 <root>ING Capital</root>
 <root>Bansander</root>
 <root>Aporta Fomenta</root>

(8 rows)

October 15, 2008

Como cambiar el color de letras consola en FreeBSD

Tiempo atras CdK1 me consulto si podia cambiar el color de las letras a la consola de su FreeBSD, segun el alguna vez yo se lo habia explicado, pero yo no recuerdo XD, bueno despues de mucho buscar el mismo encontro respuesta a su pregunta y aqui estan las definiciones para agregar a la compilación del Kernel

options         SC_NORM_ATTR=(FG_LIGHTGREY|BG_BLACK)
options         SC_NORM_REV_ATTR=(FG_YELLOW|BG_GREEN)
options         SC_KERNEL_CONS_ATTR=(FG_BROWN|BG_BLACK)
options         SC_KERNEL_CONS_REV_ATTR=(FG_BLACK|BG_RED)

Ademas, para quienes no les guste este conjunto de colores presentados en este ejemplo, podran ver el abanico de posibilidades entregado por el sistema aqui:

less /usr/include/machine/pc/display.h

El agradecimiento por la información a “CdK1″, por el buen aporte.

October 02, 2008

Definición de Spam en Correo Electronico

Buscando por la red, una definición grafica (lease UML) o el como un MTA revisa y discrimina cual es SPAM y cual no, me dió por escribir el presente documento en el que dejare mi actual inquietud a disposición de los que la necesiten.

El termino SPAM es la definición de todo correo electronico recibido sin haberlo solicitado, y corresponde a todos los envios masivos de información, que actualmente es la mayor parte de los mensajes electrónicos intercambiados en internet, siendo utilizado para anunciar productos y servicios de dudosa calidad.

SpamAssassin es el numero uno en su area y al ser OpenSource va a ser la fuente de información del presente documento.

Tipos de detección:

  • Bayesian
  • RDBL
  • SPF
  • Chequeo de usuarios origen/destino
  • DomainKeys

El spam mediante el servicio de correo electrónico nació el 5 de marzo de 1994. Este día una firma de abogados de Canter and Siegel, publica en Usenet un mensaje de anuncio de su firma legal, el cual en el primer día después de la publicación, facturó cerca de 10.000 dólares por casos de sus amigos y lectores de la red. Desde ese entonces, el marketing mediante correo electrónico ha crecido a niveles impensados desde su creación. Y el origen de tu nombre tiene raíces estadounidenses con unas curiosas derivaciones socio-culturales:La empresa chacinera (charcutera) estadounidense Hormel Foods lanzó en 1937 una carne en lata originalmente llamada Hormel’s Spiced Ham. El gran éxito del invento lo convirtió con el tiempo en una marca genérica, tan conocida que hasta el mismo fabricante le recortó el nombre, dejándolo con solo cuatro letras: Spam. El Spam alimentó a los soldados soviéticos y británicos en la Segunda Guerra Mundial, y desde 1957 fue comercializado en todo el mundo. En los años 60 se hizo aun más popular gracias a su innovadora anilla de apertura automática, que ahorraba al consumidor el uso del abrelatas.

Fue entonces cuando los Monty Python empezaron a hacer burla de la carne en lata. Su divertidísima costumbre de gritar la palabra spam en diversos tonos y volúmenes se trasladó metafóricamente al correo electrónico no solicitado, que perturba la comunicación normal en internet.

    October 01, 2008