viernes, 26 de diciembre de 2008
Estreno en el Peru de la pelicula Crepuesculo
Por fin despues de tanta espera se entrenara en Peru la pelicula crepusculo que esta basada en el primer libro de la saga "Crepusculo", su estreno sera el 1 de enero del 2009.
Aunque se puede apreciar la pelicula en copias ilegales de baja calidad desde hace algun tiempo, no he querido adelantarme a verlo hasta que se estrene en una sala de cine. Fuera de que me considero un fanatico a la saga y de haber leido ya 2 de los 4 libros de la saga, espero que la pelicula tenga la escencia del libro y que no sea una burla para los que se quedaron pegados con el libro.
Lo malo para mi es la fecha en la que escogieron el estreno, ya que pensaba no aparecerme en lima hasta el dia 4 de enero XD.
Instalar Mysql 5 sobre linux Debian 4
1. Para instalar mysql usaremos el gestor de paquete APT, con la siguiente linea de comando
apt-get install mysql-server-5.02. Ahora instalamos el cliente de mysql para poder acceder a servidor de base de datos
apt-get install mysql-client-5.03. Una vez instado el Mysql se debe levantar el servidor de base de datos
/etc/init.d/mysql start4. Una vez inicializado el servicio nos conectamos a la base de datos mysql, colocando el password en lugar de los asteriscos
mysql -uroot -p******
5. Por defecto, solo se podra acceder al servidor desde la misma maquina en la que se instalo. Para poder acceder desde cualquier otra maquina tenemos que habilitar la conexion remota.GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'contrasena' WITH GRANT OPTION;6. Por ultimo para que permita el acceso remotamente de varias computadoras deberemos modificar el archivo my.cnf
FLUSH PRIVILEGES;
nano /etc/mysql/my.cnf7. Dentro del archivo buscamos la palabra "bind-address" y lo comentamos con un michi (#)
#bind-address = 127.0.0.18. Por ultimo, reiniciamos el servidor Mysql
/etc/init.d/mysql restart
domingo, 2 de noviembre de 2008
Instalar Mysql 5 sobre linux Centos 5
1. Para instalar mysql usaremos el gestor de paquete YUM, con la siguiente linea de comando
yum install mysql-server2. Ahora instalamos el cliente de mysql para poder acceder a servidor de base de datos
yum install mysql3. Una vez instado el Mysql se debe levantar el servidor de base de datos
/sbin/service mysqld start4. Una vez inicializado el servicio nos conectamos a la base de datos mysql, colocando el password en lugar de los asteriscos
mysql -uroot -p******
5. Por defecto, solo se podra acceder al servidor desde la misma maquina en la que se instalo. Para poder acceder desde cualquier otra maquina tenemos que habilitar la conexion remota.GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'contrasena' WITH GRANT OPTION;
FLUSH PRIVILEGES
sábado, 11 de octubre de 2008
Grandes o Tontos errores de la Historia
- En 1879 fue introducida en Estados Unidos una sustancia para tratar la adicción a la morfina: la cocaína.
- En 1853 John Coffee construyó la cárcel en Dundalk, Irlanda. Quedó en bancarrota en el proyecto y se convirtió en el primer preso de su propia cárcel.
- El "hombre del año" en 1938 según la revista Time era Adolfo Hitler.
- Ronald Reagan, el ex-presidente de los Estados Unidos y exactor de cine, fue rechazado para el rol principal en una película de 1964 llamada "The Best Man" porque "no tenía apariencia de presidente".
- En 1943, Thomas Watson, director de IBM, hizo una declaración diciendo "yo creo que hay un mercado mundial para quizás cinco computadoras".
- "No nos gusta como suenan, y la música de la guitarra esta pasando de moda" dijeron los de Decca Recording Company en 1962 al rechazar a los Beatles.
- En un memorandum interno de Western Union en 1876 escribieron lo siguiente después de que Alexander Graham Bell les ofreció venderles los derechos para el teléfono: "Este 'teléfono' tiene muchas cosas en su contra como para ser seriamente considerado un medio de comunicación. El aparato no tiene ningún valor para nosotros".
- "640 Kb -de memoria- deben ser suficientes para cualquiera"... Bill Gates en 1981.
- El emperador en la silla eléctrica. En Agosto de 1890 un prisionero fue ejecutado en la silla eléctrica. Esta fue la primera ejecución que se hizo por ese método. Cuando el Emperador Menelik II de Abisinia (Etiopía hoy) se enteró, encargó tres sillas eléctricas a los Estados Unidos. El único problema fue que, al llegar el envío, descubrió que necesitaban electricidad para funcionar (Abisinia todavía no contaba con este adelanto). Como el emperador era muy inspirado pronto le encontró la solución. Uso una de ellas como su propio trono imperial.
- Las marmotas son pequeños mamíferos Asiáticos famosos por matar cobras, fueron llevadas por los agricultores de Hawaii para tratar de controlar la población de ratas, pero se les paso un pequeño detalle. Las marmotas son animales diurnos y las ratas son animales nocturnos. Hoy en día, las marmotas son consideradas en Hawaii como una plaga, casi tanto como las ratas.
- Peter Archer de 47 años de edad fue arrestado por correr desnudo por una calle en Melbourne, Australia, pero fue dejado libre cuando la policía supo que venía huyendo de una funeraria donde un doctor lo había pronunciado oficialmente muerto.
Formato de Fecha y Hora con SQL SERVER 2005
Sin el siglo (aa) (1) | Con el siglo ?(aaaa) | Estándar | Entrada/salida (3) |
---|---|---|---|
- | 0 o 100 (1, 2) | Valor predeterminado | mes dd aaaa hh:mia.m. (o p. m.) |
1 | 101 | EE.UU. | mm/dd/aaaa |
2 | 102 | ANSI | aa.mm.dd |
3 | 103 | Británico/Francés | dd/mm/aaaa |
4 | 104 | Alemán | dd.mm.aa |
5 | 105 | Italiano | dd-mm-aa |
6 | 106 (1) | - | dd mes aa |
7 | 107 (1) | - | Mes dd, aa |
8 | 108 | - | hh:mi:ss |
- | 9 o 109 (1, 2) | Valor predeterminado + milisegundos | mes dd aaaa hh:mi:ss:mmma.m. (o p. m.) |
10 | 110 | EE.UU. | mm-dd-aa |
11 | 111 | JAPÓN | aa/mm/dd |
12 | 112 | ISO | aammdd aaaammdd |
- | 13 o 113 (1, 2) | Europeo predeterminado + milisegundos | dd mes aaaa hh:mi:ss:mmm(24h) |
14 | 114 | - | hh:mi:ss:mmm(24h) |
- | 20 o 120 (2) | ODBC canónico | aaaa-mm-dd hh:mi:ss(24h) |
- | 21 o 121 (2) | ODBC canónico (con milisegundos) | aaaa-mm-dd hh:mi:ss.mmm(24h) |
- | 126 (4) | ISO8601 | aaaa-mm-ddThh:mi:ss.mmm (sin espacios) |
- | 127(6, 7) | ISO8601 con zona horaria Z. | aaaa-mm-ddThh:mi:ss.mmmZ (sin espacios) |
- | 130 (1, 2) | Hijri (5) | dd mes aaaa hh:mi:ss:mmma.m. |
- | 131 (2) | Hijri (5) | dd/mm/aa hh:mi:ss:mmma.m. |
Ejemplo
SELECT CONVERT(VARCHAR(10), GETDATE(), 103) AS 'FECHA'
-- Muestra la fecha con formato dd/mm/aaaa
SELECT CONVERT(VARCHAR(8), GETDATE(), 108) AS 'HORA'
-- Muestra la fecha con formato hh:mi:ss
Link Oficial
http://technet.microsoft.com/es-es/library/ms187928.aspx
miércoles, 24 de septiembre de 2008
Retornar registros separada por comas con MSSQL
El punto es que buscaba la solucion para listar el resultado de una consulta de una manera mas personalizada y de forma horizontal usando como separadores la coma ",". Como escribi anteriormente en otro articulo en MYSQL es mucho mas facil por que contiene una funcion , pero lamentablemente BILL no nos da una funcion tan util como aquella, por lo que investigando encontre una forma personalizada para emular dicha funcion el MSSQL
-- Declaramos la variable que contendra el resultadoObservacion: Lo malo de esta consulta es que si devuelve demasiados registros y al momento de concatenarlos en la variable supera la longitud de la cadena provoca un error.
DECLARE @x varchar(8000)
-- Cargamos los registros consultados en la variable
SELECT @x = COALESCE(@x+', ','')+ISNULL(CONVERT(varchar,nombre),'')
FROM FILTROS
WHERE ID_FILTROPADRE = 169
-- Mostramos el valor de la consulta separada por comas
SELECT @x
domingo, 17 de agosto de 2008
Las Reglas de Motivación de Bill Gates
1' Regla: La vida no es justa, acostúmbrate a ello.
2' Regla: Al mundo no le importara tu autoestima. El mundo esperara que logres algo, independiente si te sientes bien o no contigo mismo.
3' Regla: No ganaras mucho dinero después de haber salido de la preparatoria y no serás un vicepresidente hasta que con tu esfuerzo te hayas ganado ambos logros.
4' Regla: Si piensas que tu profesor es duro, espera a que tengas un jefe.
5' Regla: Dedicarse a voltear hamburguesas no te quita dignidad tus abuelos le llamaban de forma diferente “oportunidad".
6' Regla: Si metes la pata, no es culpa de tus padres, así que no lloriquees por tus errores; aprende de ellos.
7' Regla: Antes de que nacieras, tus padres no eran tan aburridos como son ahora. Ellos empezaron a serlo por pagar tus cuentas, limpiar tu ropa y escucharte hablar acerca da la nueva onda en la que estabas.
8' Regla: En la escuela puede haberse eliminado la diferencia entre ganadores y perdedores, pero en la vida real no.
9' Regla: La vida no se divide en semestres, y muy pocos jefes se interesaran en ayudarte en que te encuentres a ti mismo.
10' Regla: La televisión no es la vida diaria. En la vida cotidiana, la gente de verdad tiene que salir del café de la película para irse a trabajar.
11' Regla: Se amable con los "nerds"(los mas aplicados de tu clase) existen muchas probabilidades de que termines trabajando para uno de ellos.
miércoles, 25 de junio de 2008
Generacion automatica de backup en MSSQL 2005 Express con un Windows Service (Parte II)
1er paso: Debemos importar la libreria System.ServiceProcess, esta nos permite definir los parametros de instalacion de nuestro servicio.
using System.ServiceProcess2do paso: Sobre escribimos el metodo InstallerService y definimos los parametros de instalacion de nuestro service.
public InstallerService()Con esto tenemos listo nuestra clase instaladora que nos permitira instalar el service en el sistema.
{
ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
ServiceInstaller serviceInstaller = new ServiceInstaller();
//# Service Account Information
serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
serviceProcessInstaller.Username = null;
serviceProcessInstaller.Password = null;
//# Service Information
serviceInstaller.DisplayName = "Backup Service";
serviceInstaller.StartType = ServiceStartMode.Automatic;
//# This must be identical to the WindowsService.ServiceBase name
//# set in the constructor of WindowsService.cs
serviceInstaller.ServiceName = "BackupService";
this.Installers.Add(serviceProcessInstaller);
this.Installers.Add(serviceInstaller);
}
3er paso: la instalacion y desintalacion del service se hace a travez de comandos por lo que usamos la consola de comandos (CMD). Para instalar usamos "i" y para desinstalar la "u"
InstallUtil /i BackupService.exeLo que hice para facilitar la instalacion y desinstalacion del service fue crear 2 archivo bat donde ingreso dichos comandos.
InstallUtil /u BackupService.exe
Aqui te adjunto el codigo del service para la creacion de backup
Generacion automatica de backup en MSSQL 2005 Express con un Windows Service (Parte I)
Para no tener que hacer esta tediosa tarea cada cierto periodo ( cosa que tenia que hacerlo yo :S ) , hice un pequeña aplicacion que en si es un Windows Service que genera un backup automaticamente cada dia.
1er paso: Crear un nuevo proyectollamado BackupServicio del tipo "Windows Service" con C#, esto creara 2 items por defecto el primero llamado Program.cs y Service1.cs lo renombramos BackupService.cs, ademas agregamos un item del tipo "InstallerClass" llamandolo InstallerService.cs. La clase BackupService.cs es donde ira la logica para generar el backup y en la clase InstallerService.cs ira la logica para la instalacion del servicio en el sistema.
2do paso: Agregamos 2 nuevas referencias a nuestro proyecto llamados Microsoft.SqlServer.Smo y Microsoft.SqlServer.ConnectionInfo, estos son importantes para poder hacer el backup de la base de datos y poder llamar a estas librerias.
using Microsoft.SqlServer.Management.Common;3er paso: Crearemos el metodo que realizara el trabajo de generar la base de datos, primero indicamos el nombre del archivo de backup para ello se toma como referencia la fecha actual. Segundo, indicamos el dispositivo donde se generara el backup por lo que indicamos "DeviceType.File" para crearlo como archivo, este se crea por defecto en la carpeta de backup del MSSQL. Por ultimo, indicamos la base de datos que queremos crearle su backup que esta representado por el valor de "this.database" y el nombre del servidor cuyo valor es representado por "this.server".
using Microsoft.SqlServer.Management.Smo
private void backupDB()Este metodo solo se llamara cuando la hora señalada sea identica a la hora del sistema, para ello el servicio verifica cada segundo dicha condición.
{
try
{
string fileBackup = "BACKUP_" + DateTime.Now.ToString("yyyyMMdd") + ".bak";
BackupDeviceItem bdi = new BackupDeviceItem(fileBackup, DeviceType.File);
Backup bu = new Backup();
bu.Database = this.database;
bu.Devices.Add(bdi);
bu.Initialize = true;
Server server = new Server(this.server);
bu.SqlBackup(server);
}
catch (Exception ex)
{
throw ex;
}
}
4to paso: Creamos un Timer para que cada segundo verifique si la hora para generar el backup.
using System.Timers;5to paso: Inicializamos el Timer con la configuraciones para que valide cada segundo la condicion de la hora. Para ello usamos el metodo "OnStart" que es el metodo que se ejecuta al momento de inicial el servicio. Ademas, vemos que usamos ElapsedEventHandler este metodo no sirve para decirle que en cada intervalo de tiempo ejecute el metodo OnElapsedTime que contiene la condicion para verificar la hora de sistema.
Timer timer = new Timer();
private void OnElapsedTime(object source, ElapsedEventArgs e)
{
try
{
String tm1 = DateTime.Now.Hour.ToString() + ':' + DateTime.Now.Minute.ToString() + ':' + DateTime.Now.Second.ToString();
String tm2 = this.hour + ':' + this.minute + ':' + this.second;
if (tm1.Equals(tm2))
{
this.backupDB();
EventLog.WriteEntry(this.ServiceName, "Se genero el backup con fecha " + DateTime.Now.ToShortDateString(), System.Diagnostics.EventLogEntryType.Information);
}
}
catch (Exception ex)
{
EventLog.WriteEntry(this.ServiceName, "Error: " + ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
}
}
protected override void OnStart(string[] args)Con esta breve descripcion puedo definir el funcionamiento del programa que aunque ya esta terminado no se puede probar hasta que se intale el servicio en el sistema.
{
try
{
this.loadConfiguration();
timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
timer.Interval = 1000;
timer.Enabled = true;
}
catch (Exception ex)
{
EventLog.WriteEntry(this.ServiceName, "Error: " + ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
this.Stop();
}
}
Para instalacion del servicio sigamos sigamo con la segunda parte Aqui
viernes, 6 de junio de 2008
Error al devolver, eliminar o actualizar con Propel
La forma normal y la mas usada para devolver, eliminar o actualizar un registro usando PROPEL
Devolver un registro:
<?phpEliminar un registro:
$product = ProductosPeer::retrieveByPK($id);
print $product->getNombre();
?>
<?phpActualizar un registro:
$product = ProductosPeer::retrieveByPK($id);
$product->delete();
?>
<?phpFuncionan siempre en la mayoria de casos, pero existe un error que se produce cuando se define en la base de datos un campo de fecha que acepte valores '0000-00-00' o que contenga este valor.
$product = ProductosPeer::retrieveByPK($id);
$product->setNombre('TESTING');
$product->save();
?>
Para especificar como se produce este error veremos la primera linea de codigo donde obtenemos todo el registro segun su ID
<?phpEs justo en este momento donde se produce un error, ya que lo que quiere es asignar al objeto todos los campos del registro obtenido. Esto no seria ningun problema si es que se uno de los campos del registro es del tipo date (fecha) y tiene asignado el valor '0000-00-00' . Esto produce un error y detiene la operacion.
$product = ProductosPeer::retrieveByPK($id);
?>
Uno similar a este:
Fatal error: Uncaught exception 'PropelException' with message 'Error populating Productos object [wrapped: Unable to convert value at column 6 to timestamp: 0000-00-00 00:00:00]' in /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/om/BaseProductos.php:383 Stack trace: #0 /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/om/BaseProductosPeer.php(317): BaseProductos->hydrate(Object(MySQLResultSet)) #1 /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/om/BaseProductosPeer.php(265): BaseProductosPeer::populateObjects(Object(MySQLResultSet)) #2 /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/om/BaseProductosPeer.php(548): BaseProductosPeer::doSelect(Object(Criteria), Object(MySQLConnection)) #3 /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/Productos.php(100): BaseProductosPeer::retrieveByPK('73') #4 /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/index.php(165): Productos->editVisita('73') #5 {main} in /nfs/c02/h03/mnt/27113/domains/qtregalo.com/html/demo/libs/model/classes/om/BaseProductos.php on line 383
Solucion
Encontre una pequeña solucion para evitar (no arreglar) este problema. Para ello, no asigno todos los campos del registro obtenido desde la base de dato. Si no, utilizo el objeto CRITERIA que me servira para listarlo en un objeto de tipo mas generico del tipo RECORD
Devolver un registro:
<?phpEliminar un registro:
// Genero una consulta para ver si existe el producto con ID especificado
$c = new Criteria();
$c->addSelectColumn(ProductosPeer::NOMBRE);
$c->add(ProductosPeer::ID_PRODUCTO,$id, Criteria::EQUAL);
$rs = ProductosPeer::doSelectRS($c);
// Verifica si existe algun registro y si es asi solo devolvera un registro
if($rs->next()){
print $rs->getString(1)
}
<?phpActualizar un registro:
// Genero una consulta para ver si existe el producto con ID especificado
$c = new Criteria();
$c->add(ProductosPeer::ID_PRODUCTO,$id, Criteria::EQUAL);
// Llama al metodo eliminar para que elimine el registro devuelto por la consulta
ProductosPeer::doDelete($c);
?>
<?php
// Variable de conexion del propel
$conn = Propel::getConnection('proyecto');
// Criteria para elegir el registro que se desea modificar
$c1 = new Criteria();
$c1->add(ProductosPeer::ID_PRODUCTO,$id, Criteria::EQUAL);
// Criteria para actualizar el campo del registro
$c2 = new Criteria();
$c2->add(ProductosPeer::NOMBRE,$data['productName']);
// Llamar al metodo para actualizar
BasePeer::doUpdate($c1, $c2, $conn);
?>