convertir .lit a .pdf / lit2pdf conversion


El .lit es un formato de Microsoft para libros electrónicos.

Para abrirlos en linux, podemos utilizar Calibre, que es gratuito y open source, y convertirlo a pdf u otros formatos.

Loado sea el yum:

$ sudo yum install calibre

Una vez instalado, seleccionamos el libro, hacemos click con el botón derecho del mouse y utilizamos la opción Convert Books.

Enviar correo desde Sql Server utilizando cuenta de gmail / Send email from Sql Server using gmail account


Acá va el detalle de como enviar correo electrónico desde SQL Server, utilizando Stored Procedures y utilizando como servidor de salida una cuenta de gmail.

1) En el servidor Sql, debemos habilitar la opción “Ole Automation Procedures” que por defecto está deshabilitada, para que nos permita llamar aplicaciones externas al servidor. Desde la consola ejecutamos la siguiente consulta:

EXEC sp_configure 'show advanced option', 1
RECONFIGURE
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE

2) Instalamos la aplicación gratuita easendmail de emailarchitect.net que permite realizar el dialogo del servidor smtp con gmail, entre otros proveedores de correo.

3) Creamos un sp que nos permitirá llamar a esta aplicacion y enviar correo. Gracias emailarchitect.net

CREATE PROCEDURE [dbo].[usp_SendTextEmail]  @ServerAddr nvarchar(128),
@From nvarchar(128),
@To nvarchar(1024),
@Subject nvarchar(256),
@Bodytext nvarchar(max) = 'This is a test text email from MS SQL server, do not reply.',
@User nvarchar(128) = '',
@Password nvarchar(128) = '',
@SSLConnection int = 0,
@ServerPort int = 25

AS

DECLARE @hr int
DECLARE @oSmtp int
DECLARE @result int
DECLARE @description nvarchar(255)

EXEC @hr = sp_OACreate 'EASendMailObj.Mail',@oSmtp OUT 
If @hr <> 0 
BEGIN
    PRINT 'Please make sure you have EASendMail Component installed!'
    EXEC @hr = sp_OAGetErrorInfo @oSmtp, NULL, @description OUT
    IF @hr = 0
    BEGIN
        PRINT @description
    END
    RETURN
End

EXEC @hr = sp_OASetProperty @oSmtp, 'LicenseCode', 'TryIt'
EXEC @hr = sp_OASetProperty @oSmtp, 'ServerAddr', @ServerAddr
EXEC @hr = sp_OASetProperty @oSmtp, 'ServerPort', @ServerPort

EXEC @hr = sp_OASetProperty @oSmtp, 'UserName', @User
EXEC @hr = sp_OASetProperty @oSmtp, 'Password', @Password

EXEC @hr = sp_OASetProperty @oSmtp, 'FromAddr', @From

EXEC @hr = sp_OAMethod @oSmtp, 'AddRecipientEx', NULL,  @To, 0

EXEC @hr = sp_OASetProperty @oSmtp, 'Subject', @Subject 
EXEC @hr = sp_OASetProperty @oSmtp, 'BodyText', @BodyText 

If @SSLConnection > 0 
BEGIN
    EXEC @hr = sp_OAMethod @oSmtp, 'SSL_init', NULL
END

PRINT 'Start to send email ...' 

EXEC @hr = sp_OAMethod @oSmtp, 'SendMail', @result OUT 

If @hr <> 0 
BEGIN
    EXEC @hr = sp_OAGetErrorInfo @oSmtp, NULL, @description OUT
    IF @hr = 0
    BEGIN
        PRINT @description
    END
    RETURN
End

If @result <> 0 
BEGIN
    EXEC @hr = sp_OAMethod @oSmtp, 'GetLastErrDescription', @description OUT
    PRINT 'failed to send email with the following error:'
    PRINT @description
END
ELSE 
BEGIN
    PRINT 'Email was sent successfully!'
END

EXEC @hr = sp_OADestroy @oSmtp

Go

4) Ya estamos en condiciones de enviar email desde Sql Server. En una ventana nueva de la consola podemos ejecutar:

/* Gmail SMTP server address */
DECLARE @ServerAddr nvarchar(128)
Set @ServerAddr = 'smtp.gmail.com'

/* Set your Gmail email address */
DECLARE @From nvarchar(128)
Set @From = 'direccionorigen@gmail.com'

DECLARE @To nvarchar(1024)
/*You can input multiple recipients and use comma (,) to separate multiple addresses */
Set @To = 'direcciondestino@gmail.com'

DECLARE @Subject nvarchar(256)
Set @Subject = 'prueba envio de correo desde sql server'

DECLARE @Bodytext nvarchar(512)
Set @BodyText = 'Este es un mesaje de prueba. No responda.'

/* Gmail user authentication should use your Gmail email address as the user name. */
DECLARE @User nvarchar(128)
Set @User = 'direccionorigen@gmail.com'

DECLARE @Password nvarchar(128)
Set @Password = 'su password'

/* Enable SSL/TLS */
DECLARE @SSL int
Set @SSL = 1

/* If you want to use TLS, please set it to 25 or 587 */
DECLARE @Port int
Set @Port = 465

PRINT 'start to send email ...'

exec usp_SendTextEmail @ServerAddr, @From, @To, @Subject, @BodyText, @User, @Password, @SSL, @Port

Ejecutamos y listo.

 

Script: Grabar Back Ups en DVD’s


 

#!/bin/bash
#20130328. hvivani. graba backups en DVD. 
#Genera una imagen .iso con los archivos que coloquemos en ./grabar/ 
#Abre la grabadora, solicita el disco y graba el iso

cd /backup/userdata/
echo
echo Generando imagen a grabar del contenido del directorio grabar:
echo

if [ -f userdata.iso ];
then
   echo "ya existe archivo iso, lo borramos y creamos uno nuevo"
   rm userdata.iso
fi
genisoimage -allow-limited-size -o userdata.iso -J ./grabar/

echo
echo Abriendo la lectora:
eject
echo

while true
do
  # (1) pregunta al usuario y lee respuesta en linea de comandos
  read -p "pusiste el disco virgen en la lectora ? " answer

  # (2) handle the input we were given
  case $answer in
   [sS]* ) eject -t
           wodim -v -eject dev=/dev/scd0 userdata.iso
           break;;

   [nN]* )
           echo Donde queres que grabe ?? me voy !!
           exit;;

   * )     echo "Capo, ingresa solo S o N, no pongas boludeces.";;
  esac
done

echo Listo el pollo...

 

Hands On: UPS APC SURT 3000 XLI Battery Replacement / Cambio de Baterías


Supongo que en algún país se consiguen los cartuchos armados de baterías para realizar el cambio en este tipo de UPS’s, pero aquí conseguimos las 16 baterías de 12V 5Ah que lleva este modelo y tuvimos que abrir el cartucho y cambiarlas.

Las baterías se pueden quitar sin apagar el UPS y sin apagar los equipos conectados. (Hot Plug).

2013-09-13 09.37.372013-09-13 09.08.01

Los cartuchos, dos en total. Cada uno pesa 18Kg. !

2013-09-13 09.08.09

Las 16 baterías, 12V 5Ah:

2013-09-13 09.07.48

El desarmado del cartucho y recambio de baterías. Ojo con las polaridades:

2013-09-13 09.11.052013-09-13 12.45.53Probando el cartucho armado:

2013-09-13 09.13.10Nuevamente Online:

2013-09-13 09.38.37Gracias Clau por el soporte.

MySQL: resetting root password


Dato muy interesante para cuando perdemos la password de root de una base de datos MySQL (gracias Cameron):

1) Detenemos el servicio mysqld y restarteamos con la opción –skip-grant-tables. Opcionalmente podemos añadir la opción –skip-networking para evitar la conección de clientes remotos.

# service mysqld stop
# mysqld_safe --skip-grant-tables&

2) Conectamos al servidor por consola:

# mysql

3) Ejecutamos la siguiente sentencia:

mysql> update mysql.user set password=PASSWORD('nuevapassword') where user='root';
mysql> flush privileges;

La sentencia flush le dice al servidor que vuelva a cargar en memoria las grant tables a fin de notificarse del cambio de password.

Luego detenemos el servicio y lo volvemos a inciar normalmente.

# service mysqld stop
# service mysql start

 

Permisos especiales: Sticky Bit, SUID, SGID


Hay una serie de permisos especiales sobre el sistema de archivos de Linux que pueden resultarnos útiles para determinadas tareas o para organizar directorios colaborativos entre diferentes usuarios.

Sticky bit

El Sticky bit se utiliza para permitir que cualquiera pueda escribir y modificar sobre un archivo o directorio, pero que solo su propietario o root pueda eliminarlo. Un ejemplo de uso es el directorio /tmp, que debe tener permisos para ser utilizado por cualquier proceso, pero solo el dueño o root puede eliminar los archivos que crea.

Para aplicar el Sticky bit a un directorio:

[hvivani@test archivos]$ chmod 1755 dirtest/
[hvivani@test archivos]$ ls -l
total 8
drwxr-xr-t. 2 hvivani group 4096 sep  6 09:32 dirtest

Al directorio con el Sticky Bit aplicado se le agrega la t al final del descriptor de permisos.

SUID

El bit SUID activo en un archivo significa que el que lo ejecute va a tener los mismos permisos que el que creó el archivo. Esto puede llegar a ser muy util en algunas situaciones pero hay que utilizarlo con cuidado, dado que puede generar grandes problemas de seguridad.

Para que sea efectivo el archivo debe tener permisos de ejecución.

Para activarlo:

[hvivani@test ~]$ chmod 4775 kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwsrwxr-x. 1 hvivani group 133 ago 27 08:25 kk.sh
[hvivani@test ~]$ chmod -x kk.sh 
[hvivani@test ~]$ ls -l kk.sh 
-rwSrw-r--. 1 hvivani group 133 ago 27 08:25 kk.sh

Vean que en la ultima línea le saqué el permiso de ejecución al archivo y en los permisos se reemplaza la s por la S. En este caso no tiene efecto el bit.

SGID

El SGID es lo mismo que en el SUID, pero a nivel de grupo. Es decir, todo archivo que tenga activo el SGID, al ser ejecutado, tendrá los privilegios del grupo al que pertenece.

Esto es muy usado cuando queremos configurar un directorio colaborativo: si aplicamos este bit al directorio, cualquier archivo creado en dicho directorio, tendrá asignado el grupo al que pertenece el directorio.

[hvivani@test tmp]$ chmod 2775 dirtest/
[hvivani@test tmp]$ ll
total 8
drwxrwsr-x. 2 hvivani grupo 4096 sep  6 09:32 dirtest
[hvivani@test tmp]$ su usuario1
Contraseña: 
[usuario1@test tmp]$ cd dirtest/
[usuario1@test dirtest]$ touch nn.txt
[usuario1@test dirtest]$ ll
total 0
-rw-r--r--. 1 usuario1 grupo 0 Sep  6 09:50 nn.txt

Al igual que con el SUID, aparece una s o una S reemplazando la x en los permisos del grupo.