Reemplazando cadenas en archivos con sed

sed es un editor de flujo que se utiliza para filtrar texto. Es decir, toma como entrada un archivo y realiza alguna operación (o conjunto de operaciones) para generar una versión modificada que muestra por la salida estándar (normalmente en pantalla, a menos que se redireccione). Se suele utilizar para la extracción de parte de un archivo con la coincidencia de patrones o la sustitución de varias apariciones de una cadena dentro de un archivo.

La sintaxis es la siguiente:
sed [-n] [-e'script'] [-f archivo] archivo1 archivo2 ...
donde:
    -n indica que se suprima la salida estándar.
    -e indica que se ejecute el script que viene a continuación. Si no se emplea la opción -f se puede omitir -e.
    -f indica que los órdenes se tomarán de un archivo.
Aquí os dejo una lista con los comandos mas habituales de sed
  • a\. Tras terminar el ciclo de procesamiento del script sobre la línea actual, añade la línea especificada a continuación.
  • c\. Sustituye la línea actual por la especificada a continuación.
  • d. Borra la línea actual.
  • i\. Similar a a\, pero es insertada inmediatamente (sin esperar a finalizar el ciclo).
  • p. Imprime la línea actual, inclusive cuando se utiliza la opción -n.
  • q. Abandona el proceso cuando se alcanza la línea especificada.
  • r archivo. Lee un archivo, añadiendo su contenido a la salida.
  • w archivo. Copia la línea en archivo.
  • =. Imprime el número de línea.
Para entender su comportamiento lo mejor será poner algunos ejemplos. supongamos que tenemos un archivo con el siguiente texto:


Cambio todas las mayúsculas a minúsculas:

Elimino la segunda línea:

Cambio la palabra "CALUROSAS" por "FANTASTICAS":

Espero que les sea útil.

Pide un referéndum para ratificar la reforma de la Constitución

Al firmar esta petición estarás enviando la siguiente carta:

Destinatario: Todos los Grupos Parlamentarios del Congreso y del Senado

Señorías,

El Presidente ha anunciado su intención de promover la reforma constitucional para incluir un límite al déficit público.
Se trata de una modificación que de acuerdo con la Constitución Española no exige necesariamente la celebración de un referéndum vinculante.
Este asunto es de tal importancia y va a ser tan determinante para nuestro futuro que le pido que si esta modificación es finalmente aprobada por las cámaras, su grupo parlamentario se comprometa a solicitar que esta reforma sea sometida a referéndum para su ratificación tal y como recoge el artículo 167.3 de la Constitución Española.

Atentamente,

Razones para reformar una constitución

Razones para reformar una Constitución 
Sin comentarios...

Fuente: Mangas Verdes

glabels 3.0


gLabels es un programa para crear etiquetas y tarjetas de visita de forma sencilla e intuitiva. Permite incluir texto, imágenes, líneas, objetos rectangulares y circulares, códigos de barras... Además, de ofrecer una infinidad de tamaños de tarjeta.

La instalación es sencilla, ya que esta en el Centro de software de Ubuntu.

PlayOnLinux 4.0.9

Desde hace unos días ya se encuentra disponible la versión 4.0.9 de PlayOnlinux. Se trata de un frontend de Wine para la instalación de juegos y aplicaciones de Windows.

Para instalarlo puede instalar el este paquete .deb, o desde la terminal ejecuta los siguientes comandos:

$ wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
$ sudo wget http://deb.playonlinux.com/playonlinux_natty.list -O /etc/apt/sources.list.d/playonlinux.list
$ sudo apt-get update
$ sudo apt-get install playonlinux

Actualiza Network Manager

Ya hace algún tiempo que noto como se corta la conexión de red del PC en Ubuntu (en el mismo PC con Windows no pasa, ni con el portátil que también va con Windows, algo bueno tendrá...). Bueno a lo que os quería contar hay una nueva versión de network manager, que parece solucionarlo. Por lo que os recomiendo que os actualicéis, para ello:
$ sudo add-apt-repository ppa:network-manager
$ sudo apt-get update
$ sudo apt-get upgrade
Fuente: Ubuntizando el planeta

Wine 1.3.27

Ya esta disponible la versión 1.3.27 de Wine los cambios son los siguientes:
  • Support for multisampling in Direct3D.
  • New version of the Gecko engine.
  • Improvements to the network proxy handling.
  • Better write support in MSXML.
  • Side-by-side manifests for built-in libraries.
  • Various bug fixes.
Si quieres instalarlo, ejecuta los siguiente comandos desde el terminal:
$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.3
Fuente: WineHQ

Optimización de índices en MySQL


Normalmente la primera opción para la optimización de una base de datos en MySQL (y en la mayoría de bases de datos) consiste en la optimización de los índices.
Aquí os dejo una serie de consejos para la creación de índices:
  • Indexar sólo las columnas necesarias: sólo se deben indexar las columnas sobre las que se realizan búsquedas, es decir, aquellas que se utilizan en una cláusula WHERE o en una JOIN.
  • No abusar de los índices: los índices deben ser actualizados, y mantenidos cuando se realizan INSERT's, UPDATE's y DELETE's, por lo que ralentiza el sistema. Es decir, más índices más lento. Sólo hay que crear los necesarios.
  • Utilizar índices únicos: los índices funcionan mejor sobre columnas con valores únicos y empeoran en columnas que tienen muchos duplicados.
  • Utilizar índices cortos: Hay que tener especial cuidado al utilizar índices sobre campos CHAR. Para ello, no es conveniente indexar columnas enteras, si la mayor parte de los valores son únicos dentro de los 10 o 20 primeros caracteres, basta con indexar esa cantidad de caracteres.
  • Considerar el tipo de comparaciones a realizar en un registro: los índices se utilizan con los operadores <, <=, =, >=, >, BETWEEN y LIKE, no así con las funciones. Por lo tanto, si se utiliza la función, por ejemplo, STRCMP() para la comparación de cadenas, es innecesaria la creación del índice.

Pendientes planta piraña


He visto estos graciosos pendientes con forma de plantas carnívoras al estilo Mario Bros que se venden en Etsy y no he podido contenerme a enseñároslos. Así que si tenéis que hacer un regalo a vuestra novia/amiga o aquí tenéis una propuesta.

Publicado Gimp 2.7.3 con ventana única

La versión 2.8 de Gimp sigue sin salir, pero mientras tanto va saliendo nuevas versiones de la rama 2.7.x con nuevas características. En esta versión las nuevas características incorporadas son:
  • Modo ventana único casi definitivo (para activarlo ve a Windows->Single Window Mode)
  • Soporte para grupos de capas
  • Gestión de sesiones
  • Mejoras en la edición de texto
  • Se añade un "botón para bloqueo de contenido" para capas, canales y cuadro de diálago de rutas
Para ver la lista completa de cambios pulsa aquí.

Comandos útiles en MySQL

Existen muchos comandos en MySQL, hoy intentaré hacer un pequeña lista de los más útiles (por lo menos para mí). Por cierto algunos se ejecutan desde la shell de MySQL (mysql>) y otros desde la shell del sistema operativo. A continuación os detallo la lista:
    Administración
    $ mysqladmin -u root -h host -p password 'nuevo_password'
    $ mysqladmin extended-status
    $ mysqladmin status
    $ mysqladmin variables
    $ mysqladmin version
    $ mysqladmin create base_de_datos
    $ mysqladmin drop base_de_datos
    $ mysqladmin flush-privileges
    $ mysqladmin ping
    $ mysqladmin reload
    $ mysqladmin kill id_proceso, id_proceso...
    $ mysqladmin shutdown
    Copias
    $ mysql base_de_datos < backup.sql
    $ mysqldump base_de_datos [tablas] > backup.sql
    $ mysqldump –no-data base_de_datos [tablas] > backup.sql
    $ mysqldump –add-drop-table base_de_datos [tablas] > backup.sql
    Sistema, bases de datos y tablas.
    mysql> SHOW DATABASES;
    mysql> USE base_de_datos;
    mysql> SHOW TABLES;
    mysql> SHOW COLUMNS FROM base_de_datos.nombre_de_tabla;
    mysql> SHOW VARIABLES;
    mysql> SHOW GRANTS FOR usuario@host;
    mysql> SHOW PRIVILEGES;
    mysql> DESCRIBE nombre_de_tabla;
    Datos
    mysql> DROP DATABASE nombre_de_base_de_datos;
    mysql> DROP TABLE nombre_de_tabla;
    mysql> ALTER TABLE nombre_de_tabla DROP COLUMN nombre_de_columna;
    mysql> ALTER TABLE nombre_de_tabla ADD COLUMN nombre_de_columna tipo_de_dato;
    mysql> ALTER TABLE TABLE nombre_de_tabla CHANGE nombre_de_columna_original nombre_de_columna_nuevo tipo_de_dato;
    mysql> ALTER TABLE nombre_de_tabla MODIFY nombre_de_columna tipo_de_dato; mysql> SELECT * FROM nombre_de_tabla;
    mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna = "valor";
    mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna_1 = "valor1" AND nombre_de_columna_2_numerica = 'valor2';
    mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna_1 != "valor" ORDER BY nombre_de_columna2
    mysql> SELECT * FROM nombre_de_tabla WHERE nombre_de_columna LIKE "valor%";
    mysql> SELECT DISTINCT nombre_de_columna FROM nombre_de_tabla;
    mysql> SELECT nombre_de_columna_1,nombre_de_columna_2 FROM nombre_de_tabla ORDER BY [nombre_de_columna_2] DESC;
    mysql> SELECT COUNT(*) FROM nombre_de_tabla;
    mysql> SELECT SUM(*) FROM nombre_de_tabla;
Espero que les sirva de ayuda.

Utilizar el comando grep

El comando grep es uno de los más utilizados en linux y ahorra mucho tiempo cuando debes buscar dentro de archivos. El comando toma una expresión regular de la línea de comandos, lee la entrada estándar o una lista de archivos, e imprime las líneas que contengan coincidencias para la expresión regular.

Para entender su comportamiento lo mejor será poner algunos ejemplos:

Supongamos que tenemos dos archivos con los siguientes textos:


Mostrar todas las líneas que contengan la cadena "agua"
$ grep agua *

Mostrar todas las líneas que contengan la cadena "agua" (sin diferenciar mayúsculas y minúsculas)
$ grep -i agua *


Mostrar todas las líneas que NO contengan la cadena "agua"
$ grep -v agua *

Mostrar todas las líneas que NO contengan la cadena "agua" (sin diferenciar mayúsculas y minúsculas)
$ grep -iv agua *

Mostrar todas las líneas que contengan la cadena "agua", luego cualquier texto (*) y la cadena "no".
$ grep -i agua.*no *
Para saber todas opciones del comando grep consulta la ayuda.

Instalar Firefox 6.0 en Ubuntu


Estos días hablamos mucho de Firefox, bueno pues una más. Si quieres instalarte la versión 6 de Firefox, pero no quieres "complicarte" con la instalación desde la descargar de los servidores de Mozilla. Lo mejor es que lo instales desde el siguiente repositorio que será más sencillo.

Para ello, desde la consola ejecuta:
$ sudo add-apt-repository ppa:mozillateam/firefox-stable
$ sudo apt-get update
$ sudo apt-get upgrade
Y para el idioma:
$ sudo apt-get install firefox firefox-locale-es

Firefox 7 Beta1


Sólo hace unos días del lanzamiento de Firefox 6 y ya tenemos la primera beta de Firefox 7, con la que se reducirá el consumo de memoria, como comentamos.

Entre las novedades destacan:
  • Improved memory management: The JavaScript garbage collector works more frequently to free up memory and improve performance when you have many tabs open or keep Firefox running for a long time.
  • Azure Direct2D for Canvas: Helps Firefox speed up HTML5 Canvas-based animation rendering.
  • Web timing spec: Enables developers to measure page load time and site navigation so they can identify how to make website performance improvements.
  • CSS 3 Text-Overflow: ellipsis: Additional way for developers to display CSS 3 text that overflows the layout area.
  • Telemetry: Install this add-on and opt-in to report browser performance data and help improve future versions of Firefox.
    … while the mobile version (for Android devices) includes:
  • Copy and paste
  • Restored session history and tabs
  • Language selection: Firefox can detect the language setting on your Android device or allow you to select from more than 10 languages during initial set up
También ya aparece en los ftp las primeras nightly build de Firefox 8 (disponible también en 64bits) y Firefox 9 donde se renovará el interfaz, además de otras mejoras.

Conectar con una BD de SQLite en Monodevelop


Para empezar explicaré que SQLite es una BD transacional bajo la forma de una librería que se embebe en las aplicaciones, sin necesidad de contar con un servidor y sin configuración.

El programa utiliza la funcionalidad de SQLite a través de llamadas simples a funciones. De esta forma se reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados en un sólo fichero en la máquina.


Bueno y después de esta pequeña introducción empecemos con la práctica. Para ello, crearemos un nuevo proyecto. abrimos MonoDevelop y creamos una solución nueva.


Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí seleccionamos el paquete "Mono.Data.Sqlite". Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".


De las tres opciones que aparecen en el diálogo entramos en "Paquete", buscamos la referencia "Mono.Data.Sqlite" y lo añadimos a las referencias de la solución.


Ahora ya estamos preparados para conectarnos a una base de datos SQLite desde la solución de MonoDevelop.

Aquí os dejo un código de ejemplo:


Si quieren ver el código fuente completo, aquí les dejo el código.

VirtualBox 4.1.2

El pasado día 15 se liberó la versión 4.1.12 de VirtualBox, con la siguiente lista de cambios:
  • VMM: fixed 64-bit guests on AMD Fusion CPUs (bug #8824)
  • VMM: fixed handling of the sysenter/sysexit machine instructions in 64-bit guests on Intel hosts
  • GUI: added linked clone support
  • GUI: fixed error check when changing the VM controller settings (4.1.0 regression; bug #9246)
  • GUI: fixed the inclusion of additional information (license, vendor, ...) on OVF export
  • GUI: when taking a snapshot from the VM selector, don't do a live snapshot
  • GUI: fixed immediate crash during start on certain environments due to a library version conflict
  • Guest control execution: implemented copying single files from guest to the host (directories and filters not supported yet)
  • Guest control execution: limited to serve up to 5 guest processes at a time by default
  • Main: return the correct RDP default port fixing settings warnings in the GUI if the remote display was enabled at runtime (bug #9368)
  • VBoxSVC: made the path comparison OS independent when images are registered (bug #9303)
  • VBoxSVC: several fixes/performance improvements for cloning of VMs
  • Snapshots: fixed "Solid-State drive" flag survival on snapshot creation (bug #9379)
  • VBoxManage: implemented copyfrom and stat guest control tools to copy files from guest to host and to check for existence of files on the guest
  • VBoxManage: fixed extpack install --replace (bug #9308)
  • VBoxManage: allow to start multiple VMs with startvm
  • VBoxManage: experimental support for SATA CD/DVD hotplugging
  • Mouse support: fixed an off-by-one pointer position error affecting Windows guests (bugs #7566, #9321)
  • VRDP: fixed a case when the screen was not redrawn correctly (bug #9242)
  • NAT: changed TCP connection establishment according to Winsock API requirements (Windows hosts only; bug #8919)
  • USB: fixed device recognition issues (bugs #9299) and fixed several device capturing issues (Windows hosts; bug #9299)
  • USB: fixed issues with remote filters being applied to local USB devices
  • OVA: fixed import of renamed OVA files (bug #9033)
  • Windows host: fixed icon for .VDI files (bug #9393)
  • Solaris hosts: fixed a bug preventing parallel usage of multiple host NICs with Crossbow based bridged networking
  • Linux hosts: fixed random kernel panics on host suspend / shutdown (4.1.0 regression; bug #9305)
  • Guest Additions: keep logged in user count in out-of-memory situations and warn about it
  • Solaris Additions: fixed shared folders due to missing symbols in the vboxfs module (4.0.12 / 4.1.0 regression; bug #9264)
  • Windows Additions: fixed file truncation on a shared folder with some applications (bugs #9276, #9315)
  • Windows Additions: fixed shared folder issues with antivirus software and 64 bit Windows guests (bug #9318)
  • Windows Vista and 7 guests: WDDM driver fixes and performance enhancements, fixed WinSAT crashes (#9267)
  • Linux Additions: fixed llseek() for Linux kernels 2.6.37 and above
Si no la tenéis instalada desde repositorios, la tenéis disponible desde aquí. Si quieres instalarla desde repositorios ejecuta:
$ sudo sh -c "echo 'deb http://download.virtualbox.org/virtualbox/debian `lsb_release -cs` contrib #Virtualbox' >> /etc/apt/sources.list.d/virtualbox.list" && wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O-
$ sudo apt-key add -
Y para terminar actualizamos e instalamos:
$ sudo apt-get update
$ sudo apt-get install virtualbox-4.1 dkms
Para terminar el pack de extensiones lo tienes disponible desde aquí.

Move2Picasa - mueve las fotos de Facebook a Picasa o Google Photos

Si eres de los que piensan que Google+ ofrece una mejor experiencia de usuario que Facebook, y tienes muchas fotos y álbumes en Facebook, y quieres pasarlos a Picasa o Google Photos para disponerlas en Google+. Deberías saber que existe una sencilla herramienta llamada Move2Picasa.



Move2Picasa es una extensión para Google Chrome con la que podrás mover las fotografías de Facebook a Google+. Para ello Move2Picasa solicita acceso a tu cuenta de Facebook. Una vez allí, muestra todas las carpetas y fotografías que tengas guardas en esta red social. Y a continuación, te permite mover las mismas hacia tu cuenta de Picasa. Una vez empiece el proceso puedes dedicarte a hacer cualquier otra cosa, ya que el programa te avisará cuando la copia haya finalizado.

Firefox 7.0, consumirá entre un 20 y un 30% menos de memoria



Coincidiendo con el lanzamiento oficial de Firefox 6.0. Quería comentaros que en la próxima versión, que estará disponible para finales de septiembre, Mozilla se centrará en bajar el consumo de memoria y aumentar la velocidad. Para ello han creado el proyecto MemShrink y sus resultados los veremos en Firefox 7.0.

En las pruebas realizadas (con test sintéticos) parece ser que consumirá entre un 20 y un 30% menos de memoria (y en algunos casos hasta un 50%) y será más rápido que sus versiones anteriores, según Nicholas Nethercote, desarrollador de Mozilla.


Fuente: Nicholas Nethercote

Qwbfs Manager 1.2.1

Qwbfs Manager es una excelente aplicación multiplataforma con la que podremos gestionar los discos duros o pendrives que han sido formateados con el sistema de archivos WBFS.


Entre sus características destacan:
  • Listado de los juegos con títulos, tamaños y códigos.
  • Fácil manejo: arrastrar y soltar para agregar varios archivos a la vez.
  • Procesamiento por lotes de varios ISO´s a la vez.
  • Permite cambiar el nombre de los juegos.
  • Permite el uso de Drive to drive para clonar el HDD.
  • Permite la extracción y eliminación de juegos por lote.
  • Muestra las carátulas de los juegos.
La versión 1.1.0 se puede instalar desde el Centro de Software de Ubuntu, pero si quieres la última versión la 1.2.1. sigue estos pasos:
  1. Si habías instalado una verisón anterior desde el Centro de Software de Ubuntu elimínala.
  2. Necesitas tener instalado los siguientes paquetes, si no lo tienes ejecuta:
    $ sudo apt-get install build-essential libqt4-core libqt4-dev libqt4-gui libqt4-sql libudev-dev
  3. Descárgate y desempaqueta este paquete qwbfsmanager-1.2.1-src.tar.gz.
  4. Desde la terminal desde la carpeta donde lo has descomprimido y ejecuta:
    $ qmake PREFIX=/usr/local
    $ make
    $ sudo make install

Fuente: Ubuntu-cosillas

Ya está Firefox 6.0, el martes se hará oficial

Al igual que en la versión anterior, Mozilla ha publicado en su FTP la versión 6.0 de Firefox 6.0, unos días antes de su comunicado oficial.

Como aun no es oficial, no hay lista de cambios, ni novedades, pero deberían ser las mismas y algo más que en la Beta1 de Firefox 6.0. Si no quieres esperar puedes descargarte la versión desde aquí, de lo contrario espera al anuncio oficial.

Fuente: Xtreme Systems

Juegos en Google+

Ya hace algún tiempo se comentaba que Google añadiría juegos a Google+ y por fin se ha hecho realidad.

Poco a poco la lista de juegos crecerá, por ahora el catálogo inicial de juegos es pequeño, aunque con títulos muy conocidos, como Angry Birds o Sudoku. La página también incluye información referente al juego, actualizaciones de los círculos, invitaciones, títulos jugados por los contactos, tabla de puntuaciones, entre otros datos para compartir.


Si vas a tu cuenta verás un quinto botón a la derecha de los existentes en la cabecera para acceder a los juegos, ya que los juegos y lo relacionado con ellos se integran de forma separada para no interferir en la vista principal del usuario. Si no ves este botón no te preocupes ya que en estos momentos se están implementado para todas las cuentas.

Fuente: GoogleBlog

Banshee 2.0.1


Banshee es un reproductor de audio desarrollado en Mono y Gtk#. Además usa la plataforma multimedia GStreamer para reproducir, codificar y decodificar formatos tales como Ogg, MP3 y otros. Es ideal para organizar tu música y escucharla de una manera diferente gracias a sus complementos, como recomendaciones de otros usuarios o compatibilidad con Last.fm.

También soporta calificación de canciones (de uno a cinco estrellas), reproducción de vídeo (aunque este carece muchas opciones, como la de subtítulos), descarga y reproducción de podcasts, radios y la descarga automática de carátulas. Soporta extensiones, que permiten darle otras funciones, como por ejemplo buscar la letra de una canción. Otra característica es la posibilidad de crear listas de reproducción, tanto estáticas como inteligentes.

Actualmente Ubuntu incorpora la versión 2.0 si deseas instalar la versión 2.0.1, en la que se corrigen unos 40 errores, desde la consola ejecuta:
$ sudo add-apt-repository ppa:banshee-team/ppa
$ sudo apt-get update
$ sudo apt-get install banshee

Calendario de Lanzamiento de Ubuntu 12.04 LTS

La fecha de lanzamiento de Ubuntu 12.04 LTS será el 26 de Abril de 2012, el calendario completo lo teneís aquí:

  • 01 de Diciembre de 2011: Ubuntu 12.04 Alfa 1
  • 02 de Febrero de 2012: Ubuntu 12.04 Alpha 2
  • 01 de Marzo de 2012: Ubuntu 12.04 Beta 1
  • 22 de Marzo de 2012: Ubuntu 12.04 Beta 2
  • 19 de Abril de 2012: Ubuntu 12.04 Release Candidate
  • 26 de Abril de 2012: Final Ubuntu 12.04
Fuente: wiki.ubuntu.com

Especificaciones para OpenGL 4.2


Casi un año después de las especificaciones de OpenGL 4.1, el Grupo Khronos, ha publicado las especificaciones para la última versión de esta API de desarrollo con OpenGL 4.2 (Open Graphics Library 4.2) que extiende sus funcionalidades para mejorar el rendimiento, conservando la compatibilidad con versiones anteriores.

Las novedades están orientadas principalmente a los desarrolladores:
  • Enabling shaders with atomic counters and load/store/atomic read-modify-write operations to a single level of a texture. These capabilities can be combined, for example, to maintain a counter at each pixel in a buffer object for single-rendering-pass order-independent transparency.
  • capturing GPU-tessellated geometry and drawing multiple instances of the result of a transform feedback to enable complex objects to be efficiently repositioned and replicated.
  • modifying an arbitrary subset of a compressed texture, without having to re-download the whole texture to the GPU for significant performance improvements.
  • packing multiple 8 and 16 bit values into a single 32-bit value for efficient shader processing with significantly reduced memory storage and bandwidth, especially useful when transferring data between shader stages.

Si dispones de una tarjeta NVIDIA ya puedes probar los nuevos drivers beta GeForce 280.28 (Windows) y 280.10.01.02 (Linux), los cuales están disponibles desde NVIDIA. Para los usuario de ATI, AMD debe estar terminando la implementación y supongo que saldrán en la próxima versión que debería salir a mediados de mes.

El patron de diseño singleton


Muchos problemas de rendimiento y de escalabilidad suceden cuando se utilizan las conexiones a las bases de datos. Hay que tener en cuenta que las conexiones son un recurso que consume memoria y tiempo de procesador, por lo que sólo se deben crear las conexiones necesarias y estas deben cerrarse tan pronto como se a posible.

Una buena práctica es que todas las clases accedan a los recursos de la base de datos usando siempre una única conexión sin importar el número de instancias que estas clases generen al ser ejecutadas en una aplicación.

El patrón Singleton (instancia única) es el más sencillos, conocidos y utilizados. Está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto, asegurando de que sólo exista una única instancia de la clase sin importar el número de veces que se intente crear y proporcionando un punto de acceso global.

Se podría suponer que utilizando miembros estáticos obtendríamos el mismo resultado, pero no es así, ya que en este caso la responsabilidad de tener una única instancia recae en el cliente de la clase.

El patrón Singleton hace que la clase sea responsable de su única instancia y se implementa creando en nuestra clase un método para la creación de la instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).

Resumiendo, el patrón Singleton, provee una única instancia global ya que:
  • La propia clase es responsable de crear la única instancia.
  • Permite el acceso global a dicha instancia mediante un método de clase.
  • Declara el constructor de clase como privado para que no sea instanciable directamente.
El diseño clásico de un es el siguiente:

Analizando la clase se puede observar el uso de los modificadores "private" y "static" en el constructor que hacen que no se pueda crear la clase de forma directa, sino a través del método public GetInstance() que devuelve la instancia creada.

A continuación voy a mostrar un ejemplo en c# en el que tendremos dos clases, que al crearse se guardan la fecha y hora de creación:
  • "Instancia1", en la que no se utiliza el patrón Singleton
  • "Instancia2" en la que implementaremos el patrón Singleton.
    Para utilizar esta clase se deberá invocar mediante el método "GetInstance()".
Aquí les dejo el pantallazo del programa en el que se utilizan ambas clases, es muy básico con la opción "a" se crea una instancia de la clase que no tiene implementado el patrón Singleton y con la opción "b" se crea la instancia con el patrón implementado y estas instancias se guardan en una lista para mostrarlas.


Como se puede observar cada vez que se crea una instancia sin el patrón Singleton obtenemos una fecha y hora diferente, es decir, son instancias diferentes que se crean en cada llamada. En cambio, utilizando el patrón Singleton obtenemos la misma fecha y hora, ya que se crea una sola instancia de acceso global.

Si quieren ver el código fuente completo, aquí les dejo el código.

Si a los conductores se les contratara como a los programadores

OFERTA DE TRABAJO

Puesto: Conductor de coches
Requisitos:
  • Experiencia en la conducción de coches, transportes de mercancias, autobuses, camiones, trolebuses, tranvías, metro, tractores, excavadoras y tanques ligeros y pesados actualmente en uso por los países de la OTAN.
  • Imprescindible experiencia en rallies y conducción extrema.
  • Se valorará experiencia en conducción de Formula-1.
  • Conocimiento y experiencia en la reparación de motores de pistón y rotor/Wankel, transmisión automática y manual, sistemas de encendido, ordenador abordo, ABS, ABD, GPS y equipos de audio de las marcas más conocidas.
  • Se valorará experiencia en la pintura de automóviles y labores de chapista.
  • Los candidatos deberán contar con certificaciones de BMW, General Motors y Bosch, con menos de 2 años de antigüedad.
Retribución: $15-$20/hora, dependiendo del resultado de la entrevista.
Estudios mínimos: Ingeniero

Fuente: mundogeek.net

Wifiway 2.0.3

Wifiway es un live CD que, basado en el sistema operativo Linux, puede ser ejecutado sin necesidad de instalación directamente desde el CDROM o también desde el disco duro como LiveHD, además de poderse instalar en memorias USB o en disco duro. Wifiway es un linux live cd diseñado por www.seguridadwireless.net y esta adaptado para el wireless.


Algunas herramientas de Wifiway son algo complejas, y muchas funcionan a través de la línea de comandos pero en la página oficial encontrarás vídeos explicativos para las tareas de seguridad más comunes.

El enlace de descargas esta aquí.

Wine 1.3.26

Ya esta disponible la versión 1.3.26 de Wine los cambios son los siguientes:
  • Various improvements to the builtin Internet Explorer.
  • Support for Get/SetDIBits in the DIB engine.
  • Support for enhanced metafiles in the View tool.
  • Many improvements in WinHTTP.
  • A number of fixes to the COM stubless marshaller.
  • Improved mechanism for DLL registrations.
  • Various bug fixes.
Si quieres instalarlo, ejecuta los siguiente comandos desde el terminal:
$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.3
Fuente: WineHQ

Ubuntu 11.10 Oneiric Ocelot Alpha 3


Ya esta disponible para la descarga la versión alpha3 de Ubuntu 11.10 Oneric Ocelot.

Si la quereis probar aquí teneis el link.

Entre las nuevas características, actualizaciones y eliminaciones destacan:
  • Actualización del kernel a la última versión 3.0
  • Unity 3D 4.6.0 con opción para configurar edge reveal timeou
  • Compiz 0.9.5.
  • Firefox y Thunderbird 6.0 beta
  • Gwibber 3.1.4
  • Gnome Shell viene instalado por defecto
  • Nuevo selector de aplicaciones abiertas, Ctrl+Tab
  • Nuevas opciones en el menú sesiones: fácil acceso a la configuración del monitor, dispositivos bluetooth, aplicaciones de inicio, impresoras, dispositivos USB y actualizaciones.
  • Se unifica el menú de mensajería con soporte a Thunderbird

Firefox 6.0 beta 4

En la web de Mozilla han publicado la beta 4 de Firefox 6.


Con la siguiente lista de cambios:
  • The address bar now highlights the domain of the website you’re visiting
  • Streamlined the look of the site identity block
  • Added support for the latest draft version of WebSockets with a prefixed API
  • Added support for EventSource / server-sent events
  • Added support for window.matchMedia
  • Added Scratchpad, an interactive JavaScript prototyping environment
  • Added a new Web Developer menu item and moved development-related items into it
  • Improved usability of the Web Console
  • Improved the discoverability of Firefox Sync
  • Reduced browser startup time when using Panorama
En enlace para la descarga esta aquí, y si quieres saber pulsa aquí.

Parted Magic 6.5


Parted Magic es una pequeña distribución en formato LiveCD con herramientas para la diagnosis, análisis y rescate de CD/USB/PXE, (por ejemplo, Partimage, TestDisk, Truecrypt, Clonezilla, G4L, SuperGrubDisk, ddrescue, etc ...) con una extensa documentación.

Parted Magic 6.5 requiere al menos un procesador i586 y 312MB de RAM para funcionar o 175 MB en modo "LIVE".

Entres sus características destacan:
  • Formato de los discos duros internos y externos.
  • Mover, copiar, crear, borrar, ampliar y reducir particiones de disco duro.
  • Clonar tu disco duro, para crear una copia de seguridad completa.
  • Prueba de unidades de disco duro.
  • Prueba de memoria para los sectores defectuosos.
  • Borrar de forma segura todo el disco duro.
  • Recuperación de datos en discos no bootables.
  • Se ejecuta desde el CD, no requiere instalación.

PushOver

Pushover es un juego de tipo puzzle bastante adictivo, que originalmente publico Ocean en 1992 (y con el que pase muchas horas enganchado), en el que deberás ayudar a una hormiga a reorganizar unos bloques, de modo que cuando empujes el primero todos los demás se caigan en un efecto dominó.

Los primeros niveles son sencillos, pero una vez que completes los niveles de "tutorial" donde aprendes lo que hacen los diferentes tipos de "bloques especiales", las cosas se volverán bastante complicadas.



Para instalarlo, lo tienes disponible en playdeb o en su web.

Encriptar texto con Monodevelop


Las contraseñas e "información sensible" en una base de datos es muy importante, por lo que deben estar protegidas mediante algún algoritmo de encriptación.

Hoy os explicaré en pequeño código para poder encriptar y desencriptar texto.

Primero definiremos una variable global para tener acceso a los servicios criptográficos.

En esta la siguiente función se define la clave para la codificación e inicializan la variable que nos dará acceso a los servicios criptográficos.


Las siguientes funciones realizaran la codificación y decodificación de los datos.


La función "Initkey" la debes llamar antes de utilizar a las funciones "Codificar" o "Decodificar", de lo contrario el programa fallará. Como alternativa puedes llamar a "InitKey" desde las funciones "Codificar" y "Decodificar", así seguro que no se te olvida.

Sencillo verdad? Pues ya no tienes excusa para guardar contraseñas sin encriptarlas.

Aquí os dejo el enlace al proyecto. Encriptar.zip