Entradas

Mostrando entradas de 2013

SQL Server default values

Si alguna vez habéis querido insertar en una tabla solo los valores por defecto , en SQL es muy fácil hacerlo con el siguiente comando: INSERT INTO tabla DEFAULT VALUES Para ver las opciones del comando insert en la web de Microsoft hay una información muy bien detallada.

SQL Server OUTPUT

Imagen
El comando OUTPUT es uno de los más interesantes y útiles en SQL Server, se utiliza para devolver los datos de las filas insertadas, actualizadas o eliminadas. Por ejemplo, para obtener el id de una nueva fila insertada: INSERT INTO tabla (campos) OUTPUT inserted.tabla_id VALUES (valores) La tabla inserted es una tabla temporal que almacena los datos de la fila insertada incluyendo en nuevo ID. Al actualizar debemos utilizar esta misma palabra clave y lo que devuelve son los datos de la fila al modificarse. O sea al insertar u actualizar obtenemos los datos nuevos y al eliminar obtendremos los antiguos usando el comando deleted. Sin dudas el uso más frecuente es obtener la clave única al insertar datos en una tabla sin necesidad de ejecutar una consulta adicional .

SQL Server tipos de datos

Imagen
Más que escribir y describir sobre los tipos de datos en SQL Server , en este post pretendo aclarar o definir algunas curiosidades y/o novedades de los tipos de datos en las nuevas versiones de SQL Server , como por ejemplo la 2008 R2 y la recién estrenada 2012. Tipos de datos deprecados (obsoletos) Desde SQL Server 2008 R2 los tipos de datos timestamp (hablaré más adelante sobre él) y text (ntext también) se encuentran obsoletos y en futuras versiones dejaran de existir (en la 2012 aún existen pero solo por mera compatibilidad). Timestamp Los tipos de datos timestamp para los que estamos acostumbrados a MySQL pensamos que va a hacer lo mismo que en este tipo de servidores, actualizar la fecha cada vez que se inserta o actualiza una fila. La primera diferencia es que timestamp en SQL Server nunca ha almacenado una fecha, es un valor entero único pero no corresponde con una fecha, en las nuevas versiones el tipo de campo que lo viene a sustituir es el uniqueid. Text y Ntext Los

Opciones del LFTP

Unos de los gestores FTP más importantes de Linux es el LFTP, muy ligero y muy versátil y en las últimas versiones han mejorado muchísimo las opciones. He tenido que trabajar con el en un par de proyectos y aquí os dejo algunos comandos y opciones muy interesantes. Para crear un directorio solo si este no existe tenemos la opción mkdir –p /directorio. Tened en cuenta que si en la url del directorio hay subdirectorios, estos serán creados en caso de no existir. Para subir el contenido de un directorio entero tenemos la opción mirror, en la mayoría de artículos por internet utilizan esta opción para copias de seguridad con lo cual parecería que solo se pueda ejecutar este comando para sincronizar carpetas, lo cual no es el caso, por ejemplo si tienes las carpetas orígenes A, B, C y la de destino D, perfectamente puedes hacer esto: mirror –R A D mirror –R B D mirror –R C D Lo bueno de esto es que si volvemos a ejecutar uno de estos comandos solo se subirán los archivos nuevos o modif

Hacer un select readonly con jQuery

Para un select no es aplicable la opción readonly, o está deshabilitado o está activo, pero no puede estar activo y ser readonly. Esto es lo que HTML y los navegadores te dicen pero hay una opción a esto y es deshabilitar todos los option no seleccionados con jQuery, de esta manera con este sencillo código JavaScript podemos simular tener un select readonly . $('#selectid option:not(:selected)').attr('disabled',true); Para los que quieran un poco más de teoría pueden seguir leyendo el post. Diferencias entre controles readonly y disabled La principal diferencia entre readonly y disabled es que aunque en ambos casos el contenido del control sobre el que se aplica no puede ser modificado en caso de readonly este valor si se envía al hacer el submit del formulario mientras en el caso de un control disabled este valor nunca se envía, con lo cual suele ser interesante tener un control no modificable pero que queramos tener su valor al recibir los datos del formulari

Zend Studio y el símbolo de euro para PHPExcel

Imagen
El que esté familiarizado con la librería de PHP para generar archivos Excel de codeplex (PHPExcel) sabe que todos los textos para que esta librería funcione correctamente deben estar en UTF-8. El problema viene cuando queremos utilizar caracteres especiales como el símbolo del euro y nuestro código está en otra codificación. Por ejemplo los proyectos en Zend Studio por defecto están en CP1252 (la mayoría de las veces se puede confundir con el estándar ISO 8859-15 pero no es lo mismo) con lo cual si queremos convertir a UTF-8 un texto sabiendo que puede contener el símbolo de euro (€) no vale con utilizar las funciones utf8_encode o utf8_decode porque ambas codifican o decodifican entre ISO 8859-1 y UTF-8. ¿Qué opciones tenemos para codificar textos en Windows-1252 a UTF-8? Existen varias herramientas ninguna de ella exenta de tener que instalar librerías adicionales aunque son bastante sencillas y universales. La primera opción es mb_convert_encoding y la segunda es iconv

Tips para campos datetime en SQL Server

Imagen
Para mi es mucho más sencillo e intuitivo trabajar con campos datetime en MySQL pero SQL Server ofrece las mismas (sino alguna más) posibilidades de convertir estos campos en formatos concretos de hora y fecha. Para ello tenemos las funciones CONVERT y DATEPART . Aquí os dejo algunos ejemplos de su uso. Convertir un campo datetime a fecha en castellano (el año con 4 dígitos) SELECT CONVERT(VARCHAR(10), CURRENT_TIMESTAMP, 103); Convertir un campo datetime a fecha en castellano (el año con 2 dígitos) SELECT CONVERT(VARCHAR(8), CURRENT_TIMESTAMP, 3); Extraer la fecha de un campo datetime SELECT CONVERT(DATE, CURRENT_TIMESTAMP); Extraer el tiempo de un campo datetime con milisegundos SELECT CONVERT(TIME, CURRENT_TIMESTAMP); Extraer el tiempo de un campo datetime sin milisegundos SELECT CONVERT(VARCHAR(9), CURRENT_TIMESTAMP, 108); ¿Se os ocurre algún otro formato más?

Espacio utilizado en Linux desde consola

Imagen
Cuando tenemos problemas de espacio en nuestro servidor Linux, es muy útil saber cuanto ocupa cada carpeta , esto no es una tarea muy visual desde la consola de Linux con lo cual os dejo un par de comandos muy útiles. df -h nos sirve para identificar que partición tiene mucho espacio: Filesystem                                                   Size  Used Avail Use% Mounted on rootfs                                                        16G  5.6G  8.9G  39% / devtmpfs                                                     4.0G   68K  4.0G   1% /dev tmpfs                                                        4.0G     0  4.0G   0% /dev/shm tmpfs                                                        4.0G  272K  4.0G   1% /run /dev/sda2                                                     16G  5.6G  8.9G  39% / tmpfs                                                        4.0G     0  4.0G   0% /sys/fs/cgroup tmpfs                                                        4.0G     0  4.0G  

Eliminar espacios repetidos en PHP

El post de hoy es bastante corto, voy a dejaros un pequeño código que elimina los espacios en blanco repetidos en el medio de una cadena , utilizando para ello expresiones regulares en PHP. Nota: el código está actualizado para utilizar las funciones de expresiones regulares más actuales de PHP y los las deprecadas. El código para eliminar estos espacios en blanco repetidos en el medio de cualquier cadena para PHP es el siguiente: $cadena_sin_espacios = preg_replace('/( ){2,}/u',' ',$cadena_con_espacios); Ejemplo: Esta    cadena    contiene   espacios    repetidos Quedaría así Esta cadena contiene espacios repetidos. Espero que os sea tan útil como la encuentro yo.

¿Por qué no puedo actualizar mi Windows 8 a 8.1?

Imagen
Las principales causas por las cuales no vas a poder instalar Windows 8.1 en tu Windows 8 son las siguientes: Tienes una copia pirata. Tienes Windows 8 Enterprise o lo descargaste con una licencia de MSDN (desarrollador) Tienes Windows 8 Pro o Windows 8 pero tienes una licencia por volumen . No tienes todas las actualizaciones instaladas. No tienes la actualización para Windows 8 KB2871389 . Si cumples alguno de estos requisitos lamento decirte que no puedes actualizar Windows 8 a Windows 8.1 , aclarar que esta actualización solo esta disponible desde la Windows Store, no existe ningún enlace oficial de Microsoft para descargarla, ni desde su web ni desde el tradicional Windows Update. Para los casos de licencias Enterprise, MSDN o por volumen tendrás que instalar Windows 8.1 desde 0 y los números de serie de Windows 8 no son válidos para Windows 8.1 con lo cual te tocará comprar esta actualización. En caso de que tengas números de serie válidos para Windows 8.1 puedes

CPU does not support crc32 instructions

Imagen
Una de las cosas que me sorprendió al instalar MySQL 5.6.10 fue en el log de inicio ver la siguiente instrucción CPU does not support crc32 instructions ¿que son las instrucciones crc32 ? Es nueva instrucción que se utiliza para acelerar el cálculo de sumas de comprobación CRC32 . Esta instrucción es parte del conjunto SSE4.2, y al igual que la mayoría de las instrucciones SSE, es bastante inútil. ¿qué son las instrucciones SSE ? Son instrucciones que mejoras las posibilidades de nuestro procesador, dependiendo de la CPU de nuestro servidor tendrá unas u otras. Al parecer hasta MySQL 5.6.10 aparecía el texto CPU does not support crc32 instructions en algunos procesadores que si soportan esta instrucción, es un bug de MySQL que se ha corregido en MySQL 5.6.11. Cómo sabes si estamos utilizando estas instrucciones, muy sencillo, lo veremos en el log de mysql bajo el siguiente texto: Not using CPU crc32 instructions . ¿cómo saber si en efecto mi CPU no soporta las instrucciones SS

Optimizando MySQL 5.6 innodb_flush_method

Imagen
El parámetro innodb_flush_method es el método que utilizará MySQL para vaciar los datos y logs que vaya recopilando durante su funcionamiento. Este post en realidad será una traducción del manual de MySQL y otras fuentes del inglés porque como se verá la configuración ideal es a base de prueba y error. Veamos un glosario de términos necesarios para entender este post fsync La función fsync () puede ser utilizada por una aplicación para indicar que todos los datos asociados  a archivos abiertos serán transferidos al dispositivo de almacenamiento asociado con el archivo descrito de una manera dependiente de la implementación del sitema. La función fsync no se detiene hasta que el sistema ha completado la acción o hasta que se detecta un error. La función fsync () obliga a todas las operaciones actuales en la cola de entrada / salida asociadas con un archivo a la sincronización. Todas las operaciones de E / S se realizan cuidando la integridad del archivo al finalizar el proceso de

Optimizando MySQL 5.6 innodb_buffer_pool_size

Imagen
Uno de los parámetros de configuración que hablé en el artículo anterior era innodb_buffer_pool_size , como su nombre indica es el buffer de almacenamiento de innodb, mientras mayor sea este valor menores serán las lecturas y escrituras en el disco duro y por consiguiente mayor será la velocidad de las operaciones. Lo único malo es que este buffer va directamente a la memoria RAM con lo cual si es poca tenemos que ajustarnos. El valor por defecto en MySQL 5.6.10 son 100 MB y lo que se recomienda en un servidor dedicado es el 80 % de la memoria RAM, pero bueno siendo MySQL muy pocos utilizamos un servidor dedicado para ello casi siempre compartimos con apache y otros servicios con lo cual lo mejor es ir probando configuraciones hasta dar con la ideal, yo tengo 3 GB de RAM y por ahora he puesto un buffer de 700 MB y no he notado carga en el servidor pero si una mejoría increíble en el acceso a disco. Os dejo las gráficas. Veamos el comportamiento del buffer innodb, nótese el cambio dr

Optimizando InnoDB en MySQL 5.6

Imagen
Realmente MySQL 5.6 no es la panacea, trae, según los desarrolladores, muchas mejoras en InnoDB, yo a simple vista no he podido observar ninguna salvo una ligera mejora en la velocidad, aún no he probado el FULL TEXT INDEX. Lo que si se nota nada más actualizar MySQL es el aumento exponencial de los ficheros asociados a innodb, fundamentalmente el fichero ibdata. Mysql guarda las tablas en un fichero denominado ibdata1, y aunque trunques las tablas y las vacíes, este fichero no decrece. Lo recomendable cuando instalas MySQL 5.6 (o actualizas a esta versión) es hacer un backup de cada tabla (así es más fácil la restauración en caso de error), borrar todas las tablas y las carpetas asociadas en /var/lib/mysql (salvo la de mysql), borrar los archivos de log de innodb (ib_logfile0 y ib_logfile1) y el archivo ibdata1. Una vez hemos hecho esto modificamos nuestro archivo my.cnf ubicado en /etc/ y ponemos las siguientes líneas: innodb_autoinc_lock_mode=0 innodb_file_per_table=1 innodb_fl

MySQL 5.6.11 error 1146

Al parece hay algún tipo de error en la instalación de algunas versiones de MySQL o en la actualización de algunas (a mi me ha pasado actualizando de la 5.6.10 a la 5.6.11), en el cual te pueden dar los siguientes errores: ERROR 1146 (42S02) at line 36: Table 'mysql.innodb_table_stats' doesn't exist ERROR 1146 (42S02) at line 45: Table 'mysql.innodb_index_stats' doesn't exist ERROR 1146 (42S02) at line 73: Table 'mysql.slave_relay_log_info' doesn't exist ERROR 1146 (42S02) at line 102: Table 'mysql.slave_master_info' doesn't exist ERROR 1146 (42S02) at line 120: Table 'mysql.slave_worker_info' doesn't exist Sin embargo si entras en un administrador de MySQL como SQLYog puedes ver que las tablas existen pero luego al intentar abrirlas te sale el error Error CODE: 1146 TABLE ‘mysql.innodb_table_stats’ doesn’t exist Esto ocurre al tener activada en nuestro my.cnf la opción innodb_file_per_table. Al parecer al actualizar MySQ

SQL Server 2008 registro de transacciones

Imagen
El registro de transacciones en SQL Server es el archivo que registra como bien dice su nombre todas las transacciones de una tabla y sus modificaciones en la base de datos y si no le ponemos un límite al mismo este crecerá de manera indefinida llegando incluso a colapsar todo el espacio libre de nuestro almacenamiento. La recomendación de Microsoft es la siguiente: El registro de transacciones se debe truncar periódicamente para evitar que se llene. Sin embargo, algunos factores pueden retrasar el truncamiento del registro, por lo que es importante supervisar el tamaño del registro. Algunas operaciones se pueden registrar mínimamente para reducir su impacto sobre el tamaño del registro de transacciones. ¿Cómo saber el espacio ocupado por cada registro de transacciones? Ejecutamos la siguiente consulta: DBCC SQLPERF(LOGSPACE); Esto nos devolverá una tabla con los siguientes campos: nombre de la base de datos, tamaño del log en MB, espacio del log utilizado en porcentaje y el est

MySQL 5.6 en CentOS 6 con PowerStack

Imagen
Todos los que trabajan con versiones estables y profesionales de Linux saben que la llegada de las últimas versiones de un determinado software casi nunca llegan con los repositorios oficiales, siempre es necesario utilizar repositorios de terceros que complementan o actualizan nuestro servidor. El trio apache + PHP + MySQL no está exento de este problema y si bien es cierto que para CentOS contábamos con los repositorios Remi estos últimamente están algo desfasados, sobre todo con apache y MySQL, fundamentalmente este último. Buscando un poco de información por internet he encontrado en foros oficiales que es muy probable que Remi deje de dar soporte a MySQL, esto fundamentalmente tras la compra de esta última por Oracle. Remi comenzaría a utilizar MariaDB, una base de datos de los fundadores de MySQL que muchos dicen que es mejor pero pocos han probado. Entonces ¿que hacer si queremos seguir teniendo las ultimas versiones de MySQL utilizando Yum, esta brillante herramienta de Cent

Error Unable to connect to server mssql_connect()

Una de las desventajas de intentar conectar PHP con SQL Server desde linux es tener que utilizar la librería mssql. Esta librería si de algo es escasa es de mostrar errores con los cual cuando tenemos el error Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server lo único que queremos es poner el grito en el cielo porque no sabemos el motivo como tal. Como expliqué en el post Acceder desde Linux a SQL Server con PHP para instalar esta librería es necesario instalar previamente FreeTDS y esta desde la versión 0.6 viene con una utilidad llamada tsql que nos permitirá conectarnos al servidor SQL y en caso de fallo nos dará errores mucho más descriptivos. Lo que tenemos que hacer es entrar como root a la consola de nuestro servidor y ejecutar el comando tsql, en caso del siguiente error tsql: command not found la solución es simple, hay primero que comprobar que existe el archivo y segundo incluir la ruta en la variable global PATH de linux. El archivo

La tiranía de los servicios online

Imagen
Estos días que está tan de moda la democracia quiero reflexionar sobre la tiranía a la que estamos sujetos los usuarios de internet, tiranía a la que no solo estamos sujetos sino que a veces aplicamos. Solo basta que tengas un blog para que te conviertas en un tirano mas o menos dictatorial que otro ¿activo mi RSS? ¿los RSS se mostrarán completos o no? ¿la publicidad agresiva? ¿los comentarios? ¿permitidos? ¿que censuro? Estas y muchas más no dejan de ser preguntas que un administrador de un sitio web se tiene que hacer alguna vez en su vida y de una forma u otra representan como es su mandato. Realmente los blogs son los sitios mas liberales de la red, los foros son más restrictivos, si no te lees las contraindicaciones de un medicamento te vas a leer las normas de un foro, para mi, y sin querer ofender, los administradores de los foros son los seres más despóticos de internet, aplican las normas como máquinas en vez de como seres humanos y sus reglas son inviolables e inquebrantabl

Optimizar Navision en SQL Server

Imagen
Estas son algunas pautas a tener en cuenta para optimizar la base de datos de Microsoft Dynamics Nav (Navision) en Microsoft SQL Server. Dynamics NAV Default Isolation Level Con el lanzamiento de Microsoft Dynamics NAV 5.00 SP1 (Build 30482 / KB 979135) y posteriores tenemos la opción de cambiar el nivel de aislamiento predeterminado de NAV de SERIALIZABLE a REPEATABLEREAD. SERIALIZABLE: Este es el nivel de aislamiento más restrictivo. Cuando se utiliza, los valores fantasmas no pueden ocurrir pues impide que otros usuarios actualicen o inserten filas en el conjunto de datos hasta que la transacción se complete. REPEATABLEREAD: Cuando se utiliza, las lecturas ‘sucias’ y no repetibles no pueden ocurrir. Esto significa que los bloqueos se colocarán en todos los datos que se utilizan en una consulta y otra transacción no puede actualizarlos. En resumen SERIALIZABLE es más restrictiva y bloquea más registros que REPEATABLEREAD que puede causar más tiempos de espera de bloqueos y desb

Recomendaciones respecto a SQL Server

Imagen
Estas son algunas recomendaciones que me pasaron hace un tiempo sobre parámetros para optimizar SQL Server, en realidad son la traducción de esas recomendaciones, espero que os sirvan de ayuda, a mi la verdad no mucho. Auto-Grow Auto-Growths (Auto-crecimientos) de la base de datos o del registro de transacciones en entornos de producción puede degradar el rendimiento pues todas las transacciones deben hacer cola y esperar al SQL Server para hacer crecer el archivo de registro o de datos antes de que pueda comenzar a procesar las transacciones de nuevo. Esto puede crear un cuello de botella. Recomendamos fuertemente el crecimiento de los datos y del archivo de registro durante las horas pico entre un 10 a 25% del tamaño actual. No recomendamos desactivar Auto-Grow pues en casos de emergencia es mejor tenerlo activado que quedarse sin espacio y poner la base de datos fuera de servicio. Trace Flag 4119 Si está ejecutando SQL Server 2005, le recomendamos que active el indicador de tr

La tecnología y los usuarios

Imagen
Hace días tenía muchos deseos de hablar un poco de tecnología y economía, los lectores no habituales de este blog no se asusten, en este artículo no pretendo utilizar demasiadas palabras técnicas así que espero que la lectura sea fácil y agradable. Como os decía, hace tiempo me vengo dando cuenta de que la tecnología puede estar disponible desde hace mucho tiempo pero hasta que las necesidades del mercado no son favorables las empresas responsables no la hacen llegar a los consumidores (nosotros). Si partimos de uno de los objetivos básicos del capitalismo, poseer mayor dinero para poder invertirlo o mejor dicho capitalizarlo, entonces tenemos que entender que las grandes empresas se tienen que adaptar para lograr que sus consumidores consuman y que ello les genere beneficios constantes y crecientes. ¿Cómo lograrlo? En tecnología es relativamente muy sencillo, limitando la tecnología disponible en sus productos. El ejemplo más claro de esto es Apple, a raíz de un iPhone y un iPad al a

Filtros Fotográficos ¿cómo elegirlos?

Imagen
El mundo de la fotografía es bastante complejo sobre todo si te inicias en el tema, si elegir cámara y objetivos te ha parecido complicado, lo que parece ser una tarea bastante sencilla que es la de elegir los filtros que van a proteger o mejorar nuestro objetivo, es todo un mundo también. Intentaré describir en detalle todas las cosas que deberíamos tener en cuenta a la hora de elegir los filtros para nuestros objetivos y desde ya os digo que mejor ir olvidando los anuncios de eBay de filtros por 12 euros, un filtro de calidad no lo encuentras por menos de 50. Antes de empezar vamos a ver las cosas que hay que tener en cuenta a la hora de elegir el filtro: ¿Qué objetivo tengo? ¿Cuánto me costó el objetivo (o mejor dicho qué calidad tiene)? ¿Para qué voy a utilizar el filtro? Ahora las cosas a tener en cuenta en el filtro Diámetro Tipo de montura (anchura fundamentalmente) Resistencia Facilidad de limpieza Posibilidad de acoplar otros filtros o la tapa del objetivo E

Errores comunes correos Hotmail

Imagen
Cuando tenemos un sitio web donde los usuarios pueden dejar su correo electrónico para registrarse en diferentes servicios como pueden ser: alta de usuarios comentarios boletines electrónicos suscripciones Corremos el riesgo de que los usuarios de nuestra web introduzcan el correo electrónico mal a propósito o por equivocación. Voy a tratar los segundos, y dar los errores más comunes que cometen los usuarios cuando nos dejan su dirección de correo electrónico. Comienzo por las direcciones de correo de Hotmail porque están bastante extendidas y son mas complicadas de escribir que las de otros servicios como gmail. El estudio lo he hecho basándome en una base de datos con 60 mil direcciones de correo electrónico de Hotmail (exactamente 60276). La tasa de error para direcciones de Hotmail es de 0,56 % (redondeando vendría a ser 6 direcciones mal por cada mil bien). La tasa de error para yahoo es del 0,23 % y la de gmail del 0,47 %. Aquí os dejo una tabla con los e

Transacciones MySQLi vs MSSQL

Imagen
Para los que estamos acostumbrados a trabajar con SQL Server, el manejo de transacciones es bastante transparente y sencillo y se apoya de 3 funciones sqlsrv_begin_transaction, sqlsrv_rollback y sqlsrv_commit. ¿Qué quiere decir esto? Pues que u inicias una transacción cuando quieres y cuando la terminas o la cancelas el sistema vuelve a su estado incial. ¿Cómo gestiona las transacciones MySQL? Pues también utiliza 3 funciones autocommit, rollback y commit. ¿Cuál es la diferencia? Pues que para iniciar transacciones utilizando MySQLi tienes que ejecutar autocommit(false) lo cual modifica el estado global de esa conexión, con lo cual al cancelar (rollback) o ejecutar (commit) una transaccción el sistema no vuelve a su estado inicial sino hasta que ejecutas autocommit(true). Esto es un verdadero engorro, vemos un ejemplo que hace lo mismo en ambos sistemas. Transacciones con MSSQL sqlsrv_begin_transaction($conexion) if(bien)    sqlsrv_commit($conexion) else    sqlsrv_rollback($con

jQuery trabajando con selects

Los tipo select en los formularios son un poco especiales y unos de los más usados, todos en internet hemos tenido que rellenar un formulario en el cual al menos siempre hay un desplegable. Aquí os dejo algunos atajos para trabajar con desplegables en jQuery. Borrar todos los datos de un desplegable $(‘desplegable option’).remove(); Eliminar todos los datos menos el primero $(‘desplegable option:gt(0)’).remove(); Obtener el valor de un desplegable $(‘desplegable’).val(); Obtener el texto del valor seleccionado en un select $(‘desplegable option:selected’).text(); Obtener el objeto DOM del valor seleccionado y no el objeto jQuery $(‘desplegable option:selected’).get(); Rellenar un desplegable desde un JSON $.each(ob, function(key, value) { $('<option />').text(key)                     .attr("value",value)                     .appendTo('desplegable’); });

Periféricos Logitech para Windows 8

Imagen
Con la salida de Windows 8 y su clarísima orientación táctil han salido innumerables periféricos para este nuevo sistema operativo, yo voy a hablar de 3, de los cuales tengo 2 y pensaba comprarme el otro aunque creo que no lo haré. Logitech Touch Mouse T620 Este nuevo ratón de Logitech, el Touch Mouse T620 , que cuesta nada menos que 70 € tengo que deciros que es una mierda, así, por lo claro. Al ser un ratón relativamente pequeño y totalmente táctil hace lo que le da la gana cuando lo tocas, muchos de los gestos son prácticamente imposibles si no lo sujetas con la otra mano aunque por contrapartida algunos gestos son muy muy prácticos. Pero lo que más me fastidia de este ratón es que el clic es muy ruidoso, al hacer clic da la sensación de que el ratón cojea porque el efecto no es el de presionar una tecla sino de inclinar el ratón lo cual lo hace más ruidoso y a la vez que muchas veces se confunda un clic derecho con un clic izquierdo. Entre las cosas positivas señalaré que está