viernes, 26 de noviembre de 2010

Generar archivos pdf con Dompdf en Codeigniter

Después de haber buscado librerías de pdf para integrarlas al codeigniter llego la conclusión de que la que más se adapta a mis necesidades es dompdf, dado que le puedo pasar una pagina HTML y este la pasa a PDF incluyendo las imágenes y algunas reglas de estilo, a continuación presento el procedimiento.

1. Descargamos la librería en su versión 0.5 dado que no funciona con su versión beta me deje llevar por la manía de usar siempre la última versión en fin descárgala de aquí.
2. Descomprimir el archivo en la ruta ./system/plugins/ lo dejamos con el nombre de dompdf.
3. Creamos un plugin con el nombre to_pdf_pi.php el código para este plugin es el siguiente te recuerdo no dejar espacios porque te generaría el error Unable to stream pdf: headers already sent.


function pdf_create($html, $filename, $stream=TRUE)
{
require_once("dompdf/dompdf_config.inc.php");

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
if ($stream) {
$dompdf->stream($filename.".pdf");
} else {
$CI =& get_instance();
$CI->load->helper('file');
write_file("./invoices_temp/invoice_$filename.pdf", $dompdf->output());
}
}


4. En el controlador ingresaremos el siguiente código.


function pdf ()
{
$data = 0;
$this ->load->plugin('to_pdf');
$html = $this->load->view( 'welcome_message' , $data , true );

pdf_create ($html,'pruebas');
}

martes, 23 de noviembre de 2010

LINQ con Visual Studio 2008

martes, 8 de diciembre de 2009

Twitter desde python

Bueno, investigando investigando me encontré con un desarrollo para manejar las api's de twitter desde Python con el módulo python-twitter, este lo pueden descargarcon apt-get

#apt-get install python-twitter

Después de esto solo deben entrar a una consola de python y hacer lo siguiente:

import twitter
api = twitter.Api('usuario', 'password')
status = api.PostUpdate('Actualizando desde Python')

Es genial, para más información python-twitter

viernes, 31 de julio de 2009

System Administrator Day

July 31, 2009 (Last Friday Of July)
10
th Annual
System Administrator Appreciation Day

A sysadmin unpacked the server for this website from its box, installed an operating system, patched it for security, made sure the power and air conditioning was working in the server room, monitored it for stability, set up the software, and kept backups in case anything went wrong. All to serve this webpage.

A sysadmin installed the routers, laid the cables, configured the networks, set up the firewalls, and watched and guided the traffic for each hop of the network that runs over copper, fiber optic glass, and even the air itself to bring the Internet to your computer. All to make sure the webpage found its way from the server to your computer.

Ted In Wires

A sysadmin makes sure your network connection is safe, secure, open, and working. A sysadmin makes sure your computer is working in a healthy way on a healthy network. A sysadmin takes backups to guard against disaster both human and otherwise, holds the gates against security threats and crackers, and keeps the printers going no matter how many copies of the tax code someone from Accounting prints out.

more

martes, 21 de julio de 2009

Microsoft stuns Linux world, submits source code for kernel

Microsoft's most important open source act

Sam Ramji, who runs the Open Source Software Lab for Microsoft and is the company's director of open source technology strategy, called the Linux kernel submission the company's most important Linux/open source commitment ever.

"It is a significant piece of technology. It is a strategic technology and it is under the GPLv2 license that the Linux kernel uses, and which the community is organized around."

Evolution of Microsoft Windows

Ramji said the code could be used by any Linux distribution, commercial or otherwise, without requiring any relationship with Microsoft. That could help emerging distributions such a Ubuntu gain a foothold in corporate networks.

more

sábado, 6 de junio de 2009

Envio de correos con PHPMailer

PHPMailer es una clase escrita en PHP que facilita el envío de correo, añadiendo facilidad en el envío de correos con adjuntos, en formato HTML y con diferentes codificaciones, soporte para imagenes embebidas, headers personalizados y además funciona con múltiples servidores de correo.

El primer paso es descargar PHPMailer, aquí encontraremos dos archivos: class.phpmailer.php el cual contiene las funciones para el envío de correo y class.smtp.php para enviar correo mediante servidores SMTP.

yo lo he utilizado con mi cuenta de yahoo y su servidor smtp y funciona sin ningun problema.

Aqui les dejo el ejemplo que hice:

//en el directorio includes deberan estar class.phpmailer.php y class.smtp.php
// primero hay que incluir la clase phpmailer para poder instanciar un objeto de la misma

require "includes/class.phpmailer.php";
//instanciamos un objeto de la clase phpmailer
$mail = new phpmailer();

//Con PluginDir le indicamos a la clase phpmailer donde seencuentra la clase smtp

$mail->PluginDir = "includes/";

//Con la propiedad Mailer le indicamos que vamos a usar un servidor smtp
$mail->Mailer = "smtp";

//Asignamos a Host el nombre de nuestro servidor smtp
$mail->Host = "smtp.mail.yahoo.com";

//Le indicamos que el servidor smtp requiere autenticación
$mail->SMTPAuth = true;

//Le decimos cual es nuestro nombre de usuario y password
$mail->Username = "cuenta@yahoo.com.mx";
$mail->Password = "password";

//Indicamos cual es nuestra dirección de correo y el nombre que queremos que vea el usuario que lee nuestro correo
$mail->From = "cuenta@yahoo.com.mx";
$mail->FromName = "Nombre a mostrar p/e Pedrito Andrade";

//el valor por defecto 10 de Timeout lo cambiamos por 30
$mail->Timeout=30;

//Indicamos cual es la dirección de destino del correo
$mail->AddAddress("cuenta@destino.com");

//Asignamos asunto y cuerpo del mensaje
//El cuerpo del mensaje lo ponemos en formato html, haciendo
//que se vea en negrita

$mail->Subject = "Probando phpmailer";
$mail->Body = "Mensaje de prueba mandado con phpmailer en formato html";

//Definimos AltBody por si el destinatario del correo no admite email con formato html
$mail->AltBody = "Mensaje de prueba mandado con phpmailer en formato solo texto";

//se envia el mensaje, si no ha habido problemas
//la variable $exito tendra el valor true

$exito = $mail->Send();

//Si el mensaje no ha podido ser enviado se realizaran 4 intentos mas como mucho
//para intentar enviar el mensaje, cada intento se hara 5 segundos despues
//del anterior, para ello se usa la funcion sleep

$intentos=1;
while ((!$exito) && ($intentos < 5)) {
sleep(5);
$exito = $mail->Send();
$intentos=$intentos+1;
}//while

if(!$exito)
{
echo "Problemas enviando correo electrónico a ".$valor;
echo "
".$mail->ErrorInfo;
}
else
{
echo "Mensaje enviado correctamente";
}
?>

jueves, 14 de mayo de 2009

Nominacion de proyectos en Sourceforge

Saludos lectores, les comento q he entrado al 2009 Community Choice Award de sourceforge.net con los pequeños proyectos que tengo hopedados en ese es servidor web que ofrece servicios de ayuda para el desarrollo de proyectos open source.

aqui los enlaces para darle seguimiento.

Control BioAcceso.
Control de Asistencias Biometrico



VAccess. Control de Asistencias por lectura de codigos de barra


Saludos y espero su aporte.

martes, 31 de marzo de 2009

Bases de datos HSQLDB

¿Qué es HSQLDB?

HSQLDB es un sistema de gestión de base de datos relacionales escrito en Java. Como principal ventaja tiene su velocidad y su reducido tamaño. Además, puede mantener la base de datos en memoria o en ficheros en disco.

Se pueden realizar las operaciones más habituales de los sistemas de gestión de bases de datos (CRUD) usando sintaxis SQL, soporta triggers, integridad referencial...

Como curiosidad, HSQLDB es el gestor de base de datos usado por "Base", el equivalente de Access dentro de Open Office.

Más información sobre hsqldb

Saludos ...

martes, 17 de febrero de 2009

Lenny is out !!!

Hola, esta vez leo copio y pego..

14 de febrero de 2009

El Proyecto Debian se complace en anunciar la publicación oficial de la versión 5.0 de Debian GNU/Linux, nombre en clave lenny, tras 22 meses de desarrollo constante. Debian GNU/Linux es un sistema operativo libre que soporta un total de doce arquitecturas de procesador e incluye los entornos de escritorio KDE, GNOME, Xfce y LXDE. También ofrece compatibilidad con el estándar FHS v2.3 y software desarrollado para la versión 3.2 de LSB.

Debian GNU/Linux se ejecuta en ordenadores que van desde agendas hasta supercomputadoras, pasando por prácticamente cualquier sistema intermedio. Se da soporte a un total de doce arquitecturas: Sun SPARC (sparc), HP Alpha (alpha), Motorola/IBM PowerPC (powerpc), Intel IA-32 (i386), IA-64 (ia64), HP PA-RISC (hppa), MIPS (mips, mipsel), ARM (arm, armel), IBM S/390 (s390), y AMD64 de AMD y EM64T de Intel (amd64).

El proyecto dedica la publicación de Debian GNU/Linux 5.0 Lenny a Thiemo Seufer, un desarrollador Debian que falleció el pasado 26 de diciembre de 2008 en un trágico accidente de coche. Thiemo participaba de muchas formas distintas en Debian. Mantenía algunos paquetes y era la persona que más ayudaba en la adaptación de Debian a la arquitectura MIPS. También era un miembro del grupo del núcleo, así como un miembro del grupo que trabaja en el instalador de Debian. Sus contribuciones han ido más allá del proyecto Debian: trabajó en la adaptación a MIPS del núcleo de Linux, en la emulación MIPS de qemu y en muchos proyectos pequeños, demasiados para describirlos todos aquí.

Echaremos de menos el trabajo, dedicación, amplio conocimiento técnico y la habilidad de compartir todo esto con otras personas de Thiemo. No olvidaremos todas sus contribuciones. El gran nivel del trabajo de Thiemo pondrá el listón alto a los que quieran continuar su trabajo.



Saludos ...

jueves, 15 de enero de 2009

Crear un Pen Drive Usb Booteable de Knoppix

Saludos a toda la comunidad de lectores, pues les cuento que he creado una usb booteable de GNU/Linux Knoppix, estas son las herramientas que utilice:

Hay que descargar Syslinux de aqui http://syslinux.zytor.com/index.php.

Extraer syslinux en C:\syslinux-3.11.

ejecutar en el interprete de comandos syslinux.exe que se encuentra en “C:\syslinux-3.11\win32\syslinux.exe (Unidad USB)”
p/e. “C:\syslinux-3.11\win32\syslinux.exe E:”

Ahora tenemos que copiar el contenido del disco de Knoppix a la USB

El la USB , mover el contenido de /boot/isolinux a la raiz de la USB. Una vez realizado esto borrar el directorio boot.

Tambien hay que eliminar el archivo ISOlinux.bin.

Renombrar el archivo ISOlinux.cfg a SYSlinux.cfg.

Esto es todo lo qu debemos hacer!

Solo nos queda reiniciar nuestra Pc e iniciar desde la USB.

Espero le sea de utilidad ...

miércoles, 19 de noviembre de 2008

Instalando Squid en Guindos Xp

Hola comunidad de lectores.. esta vez he configurado un servidor proxy con squid en guindos xp debido a q' es el sistema q' manejan en la escuela donde lo puse, no se preocupen pronto lo migraré a GNU/Linux esa es la idea.

Un proxy nos sirve para permitir el acceso a Internet a todos los equipos de una organización cuando sólo se puede disponer de un único equipo conectado, esto es, una única dirección IP.
Un proxy permite a otros equipos conectarse a una red de forma indirecta a través de él.

Cuando un equipo de la red desea acceder a una información o recurso, es realmente el proxy quien realiza la comunicación y a continuación traslada el resultado al equipo inicial.


Aqui les va que es lo q hice:

1. Primero desarge el paquete de squid para windows aqui

2. Descomprimimos el paquete con winrar en el disco local C:

3. La carpeta que se descomprime en C: hay que renombrarla y llamarla squid

4. Entramos a la carpeta C:/squid/etc y renombramos los archivos .deafult, para que siempre los tengamos originales guardados, los dejamos todos con extensión .conf

5. Abrimos el archivo squid.conf con nuestro editor preferido.

6. Allí buscamos la variable http_port podemos dejarla 3128 por defecto o poner 8080 o ambas.

7. Buscamos la línea cache_dir ufs c:/squid/var/cache 100 16 256 y nos aseguramos que este descomentada (sin el símbolo # al principio de la linea); también podemos aumentar el tamaño de la memoria para el almacenamiento de 100 a otro valor por ej. 1000.

8. Buscamos la línea visible_hostname y colocamos el nombre de nuestra máquina, si no lo sabes te vas a inicio y luego a ejecutar y tipeas msinfo32 allí verás el nombre del sistema.

9. Buscamos la sección de las listas de acceso, se identifican porque contienen la palabra acl, es la sección ACCESS CONTROLS del squid.conf; allí buscamos donde dice:

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

y debajo escribimos acl nuestra_red src 192.168.0.0/255.255.255.0 También podemos crear un archivo .txt y guardarlo en c:/squid/etc, en dicho archivo colocamos la o las IP que queramos que accedan a los servicios de red.

Ejemplo:
192.168.0.1
192.168.0.2
192.168.1.3

192.168.3.45 , (sólo la máquinas con estas ip accederán a Internet)
el archivo se nombra permitidos.txt y se guarda en c:/squid/etc, y entonces debajo de la línea acl CONNECT method CONNECT colocaríamos acl nuestra_red src “c:/squid/etc/permitidos.txt”; de la primera forma estaríamos dando acceso a toda la red y de esta sería acceso solo a algunas máquinas.

10. Buscamos la línea http_access allow manager localhost y debajo de ella agregamos: http_acess allow nuestra_red

11. Crear los siguientes directorios en forma manual

C:\squid\var\cache
C:\squid\var\cache\00
C:\squid\var\cache\01
C:\squid\var\cache\02
C:\squid\var\cache\03
C:\squid\var\cache\04
C:\squid\var\cache\05
C:\squid\var\cache\06
C:\squid\var\cache\07
C:\squid\var\cache\08
C:\squid\var\cache\09
C:\squid\var\cache\0A
C:\squid\var\cache\0B
C:\squid\var\cache\0C
C:\squid\var\cache\0D
C:\squid\var\cache\0E
C:\squid\var\cache\0F

O sea nos vamos al direcorio var y creamos un directorio llamado cache y luego dentro de éste creamos varios directotios nombrados de 00 hasta 0F (Esto es numeración Hexadecimal)

12. Ir a menú Inicio, darle clic a ejecutar y escribir cmd y darle a aceptar (esto es para abrir una consola)

13. Una vez en la consola escribir: c:/squid/sbin/squid –z y si todo ha salido bien no dará mensajes de error.

14. Luego escribir c:/squid/sbin/squid –i lo cual instalará squid como servicio de Windows xp.

15. Iniciar el servicio squid, ir a menú Inicio y hacer clic en ejecutar, luego escribimos services.msc y le damos clic a aceptar, esto nos abrirá la ventana de los servicios y allí buscamos a squid y lo iniciamos o reiniciamos.

De esta forma ya tendremos nuestro Proxy-cache funcionando en Windows.

Solo nos queda configurar nuestros navegadores web cliente con la direccion ip del servidor proxy y el puerto asignado.

Saludos !!!

jueves, 13 de noviembre de 2008

Sistemas Biometricos..

Hola comunidad, esta ocasión comentaré un poco sobre los sistemas biométricos los cuales son métodos automáticos de verificación e identificación de un individuo utilizando características físicas y comportamientos precisos.

La biometría es el estudio de métodos automáticos para el reconocimiento único de humanos basados en uno o más rasgos conductuales o físicos intrínsecos. El término se deriva de las palabras griegas "bios" de vida y "metrón" de medida.

La "biometría informática" es la aplicación de técnicas matemáticas y estadísticas sobre los rasgos físicos o de conducta de un individuo, para “verificar” identidades o para “identificar” individuos.

Principales Tecnologías Biométricas
  • Huella Digital (Fingerprint)
  • Biometría de mano (Hand Geometry)
  • Iris

Otras Tecnologías Biométricas

  • Rostro
  • Voz
  • Firma
  • Patrones de venas

Características de Operación de Tecnologías Biométricas:
  • Huella Digital: Mide características y patrones de las líneas de las huellas.
  • Geometría de Mano: Medidas precisas del tamaño y forma de la mano.
  • IRIS: Cámara de video usada para examinar el Iris del ojo humano.
  • Rostro: Medición de características faciales utilizando una cámara.
  • Voz: Uso de Micrófono para capturar el habla y comparar patrones.
  • Firma: Se usa una pluma ó stylus para medir la velocidad, presión y dirección, gravando el patrón de una firma hecha a mano.

Procesos de Autentificación e Identificación biométrica
  • Verificación: Es el corroborar la identidad de una persona por medio de un dato previamente dado (como el nombre, una credencial, CURP, etc) y su huella digital, por ejemplo: yo digo que soy Juan Pérez y lo confirmo con mi huella digital.
  • Identificación: Es el corroborar la identidad de una persona utilizando solamente su huella digital, por ejemplo: coloco mi huella digital y el sistema automáticamente sabe que soy Juan Pérez.

Mas adelante escribiré un poco sobre el desarrollo de un Sistema de Asistencias en Java controlado por medio de lectura de huellas dactilares, estén pendientes...

Saludos !!!

jueves, 6 de noviembre de 2008

Microsoft va por México ...

Leo, copio y pego...
Al menos 10,000 Pequeñas y Medianas Empresas (Pymes) mexicanas tendrán durante un año la licencia gratuita para operar un software de Microsoft diseñado específicamente para cubrir las necesidades del sector.
“El Microsoft Office Small Business pretende incrementar la productividad de las Pymes al agilizar las tareas rutinarias, mejorar la atención de sus clientes y ganar tiempo para agregar valor a sus productos”, dijo el secretario de Economía, Gerardo Ruíz Mateos.
Mediante la firma de un convenio entre la Secretaría de Economía (SE) y Microsoft, se anunció la herramienta de software, que se dirige principalmente a las Pymes que no tienen un administrador de red de tiempo completo ni recursos suficientes para realizar grandes inversiones en tecnología.
Para obtener este beneficio, los micro, pequeños y medianos empresarios deberán registrarse durante noviembre y diciembre y recibirán gratuitamente, además del programa, el entrenamiento y la asesoría necesarios para aprovechar la al 100% la tecnología del producto.
Como ven la estrategia de Microsoft ? :S

jueves, 25 de septiembre de 2008

Wifi en debian lenny


Hace unos dias consegui un adaptador usb wifi TM_U220D con chipset ZyDAS zd1211, este dispositivo es 100% comptible con linux ya que en Ubuntu lo reconoce a la primera. Pero bueno la idea es echarlo a andar en Debian lenny, esto es bastante sencillo solo tenemos que copiar el firmware del producto dentro de un directorio especifico. Para descargarnos el firmware vamos a visitar este apartado en la web de SourceForge y nos descargaremos el archivo zd1211-firmware-1.4.tar.bz2

Una vez descargado el archivo lo vamos a descomprimir con el programa bzip2, si no lo tienes puedes instalarlo con …

apt-get install bzip2

Ahora vamos a descomprimir el fichero con …

bzip2 -dc zd1211-firmware-1.4.tar.bz2 | tar -xv

Una vez descomprimido vamos a copiarlo en el directorio /lib/firmware y lo renombraremos por zd1211

cp -R zd1211-firmware /lib/firmware/zd1211

Hasta el momento nuestro adaptador ya esta listo para haerlo funcionar y lo podemos comprobar haciendo un dmesg

Para configurar la red inalambrica con WPA hacemos lo siguiente:
# apt-get install wpasupplicant o lo puedes bajar desde http://packages.debian.org/etch/wpasupplicant

Edita el archivo /etc/network/interfaces

# nano /etc/network/interfaces

Define el dispositivo como si fuese un dispositivo normal, pero agregando declaraciones específicas para WPA. Por ejemplo,

# wireless network
auto eth1
iface eth1 inet dhcp
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf

En este caso, el Access Point o Router inalámbrico está configurado para asignar números IP con DHCP (caso más común).

Si la red usa números IP estáticos p/e ,

# wireless network
auto eth1
iface eth1 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Crea el archivo /etc/wpa_supplicant.conf con un editor,

# nano /etc/wpa_supplicant.conf

Inserta las siguientes líneas,

ctrl_interface=/var/run/wpa_supplicant

network={
ssid="miwifi"
scan_ssid=1
proto=WPA
key_mgmt=WPA-PSK
psk=mifrasesecreta
}

Instala resolvconf para determinar automáticamente el DNS de la red,

# apt-get install resolvconf

Reinicia la red con,

# invoke-rc.d networking restart

Este fue mi resultado

eth1: unknown hardware address type 801
eth1: unknown hardware address type 801
Listening on LPF/wlan0/00:0e:8e:13:1d:d7
Sending on LPF/wlan0/00:0e:8e:13:1d:d7
Sending on Socket/fallback
ioctl[SIOCSIWAUTH]: Operation not supported
WEXT auth param 4 value 0x0 - Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

eth1: unknown hardware address type 801
eth1: unknown hardware address type 801
Listening on LPF/wlan0/00:0e:8e:13:1d:d7
Sending on LPF/wlan0/00:0e:8e:13:1d:d7
Sending on Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 4
DHCPOFFER from 172.16.0.1
DHCPREQUEST on wlan0 to 255.255.255.255 port 67
DHCPACK from 172.16.0.1
bound to 172.16.1.34 -- renewal in 35421 seconds.
done.

Ahora ya esta todo listo.. y a navegar con la red inalambrica Saludos





miércoles, 10 de septiembre de 2008

Firefox y Chrome Package

Que tal ...

A estas alturas la mayoría de nosotros ya hemos probado Google Chrome. Eso era hasta hace diez minutos, ya que les aviso de algo interesante, Chrome Package, un tema para Mozilla Firefox.

Este tema nos convierte, a simple vista, nuestro Mozilla Firefox en un Google Chrome cualquiera. Evidentemente sólo en aspecto y no en funcionalidades, ya que en ese sentido Firefox es Firefox. El acabado es brutal, como lo podemos ver en la imagen.

el tema no funciona bien al 100% ya que como avisan en Mozilla es un tema experimental. Así que esto es bajo nuestra propia responsabilidad, puedes hacer una copia de seguridad de tu perfil por si acaso.

Para poder descargarlo deberemos estar registrados en la web de Mozilla ya que, como he dicho antes, el tema es experimental.

Buenos pues esta es una opcion mas para los que no pueden dejar totalmente Firefox

Saludos...

lunes, 1 de septiembre de 2008

Debian Squeeze será el sucesor de Lenny

Desde barrapunto.com leo, copio y pego...

El nombre del sucesor de Lenny ha sido revelado en una de las listas de Debian. Siguiendo la tradición de nombrar versiones de Debian con nombres de personajes de Toy Story, la siguiente versión será "Squeeze", el nombre que reciben los alienígenas verdes de tres ojos que, en la primera película, aparecen en un juego de Pizza Planet y que creen que el gancho los elegirá y los llevará a un lugar mejor.Saludos... y viva Debian !!!





sábado, 7 de junio de 2008

Consola de Unix

Que tal ... esta ocasion cometo algo relacionado con la consola de unix o tambien conocida con shell, todos los que somos linuxeros tenemos el habito de manejar la consola todos los dias... pero cuales son tus verdaderos habitos respecto a la consola ???

Aqui les dejo un enlace donde nos dan unos buenos tips para tener un mejor manejo de ella

Saludos !!!

ShareThis