(shift + fn) + (flecha arriba)(shift + fn) + (flecha abajo)
(shift + fn) + (flecha arriba)(shift + fn) + (flecha abajo)
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
mi_entidad:
class: sfDoctrineRouteCollection
options:
model: MiEntidad
module: mi_entidad
prefix_path: /mi_entidad
column: id_mi_entidad
with_wildcard_routes: true
… 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.

BEGIN;Para el caso contrario basta con dejar attnotnull como TRUE (No Se permite NULL), ya que este es de tipo boolean.
UPDATE
pg_attribute
SET
attnotnull = FALSE
WHERE
attname = 'nombre_columna'
AND
attrelid = ( SELECT oid FROM pg_class WHERE relname = 'nombre_tabla') ;
COMMIT;
test=# \d pg_attributeUna 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:
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
[...]
SELECT oid FROM pg_class WHERE relname = 'nombre_tabla'Si retorna el oid es que esta bien, en caso contrario, algo estan haciendo mal.

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.
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)
);
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';
SELECTCreo 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.
fecha
FROM
public.get_dias_habiles('2009-01-01', '2009-12-31')
AS
dias_habiles(fecha character);
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
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:
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:
Y una vez finalizado el proceso completo quedan los siguientes ports instalados en el sistema:
Ahora, solo nos queda configurar el acceso al listener, proceso para el cual necesitamos algunas variables de entorno de nuestra shell:
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>
export CVSROOT":pserver:anoncvs@cvsup.freebsd.cl:/home/ncvs"
cvs login (clave anoncvs)
cvs co ports
suerte!


Es hora de actuar.
Hay cosas que no funcionan bien en nuestra sociedad, es hora de hacer algo.
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_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:
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
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
Gracias a la activa participación de Phillipe Neumann existe la posibilidad de usarlo en su maxima capacidad en nuestros FreeBSD.
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.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.
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.
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:
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)
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.
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:
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.