¿Cómo forzar que la instrucción “net use /delete” no nos pida confirmación para desmontar una unidad de red?

Vamos con un tip rápido sobre sistemas operativos. Si en Windows queremos desmontar una unidad de red desde un script utilizaremos el comando net use con el parámetro /delete. El problema es que este nos pedirá confirmación, por lo que si es una tarea automatizada se quedará esperando la respuesta ¿Cómo podemos forzar que se desconecte la unidad? Pues con el parámetro /y después del /delete.

La cosa sería más o menos la siguiente:

#Así para desmontar todas
net use * /delete /y

#Cambiando * por el nombre de la unidad 
#desconectamos solo esa
net use x: /delete /y

La opción /y hará que se interprete “yes” como respuesta por defecto a todas las peticiones de confirmación.

Anuncios

SQL-Server: Usar CASE en una cláusula ORDER BY

La ordenación de resultados en una consulta SQL suele ralentizar la respuesta de la consulta, aunque en muchos casos necesitamos tener nuestro resultado ordenado. Hoy me veía con este caso particular, en una aplicación que conecta con una base de datos de SQL-Server: en una pantalla se muestran una serie de líneas de deuda, algunas haciendo referencia a tratamientos ya realizados y otras a tratamientos pendientes. En caso de que estén realizados habría que ordenarlos por fecha de realización, en caso de que no estén realizados sería por fecha de creación.

Para eso podemos utilizar una sentencia CASE en la cláusula ORDER BY:

SELECT 
  FechaCrea,   
  Concepto,
  Precio,
  ImportePagado,
  Realizado,
  FechaRealizado 
FROM 
  vistaPagos  
WHERE 
  Precio > 0 
ORDER BY 
 CASE Realizado WHEN True THEN FechaRealizado  
 ELSE FechaCrea END;  

Veamos ahora otra posibilidad de uso del CASE: cuando queremos que la consulta reciba un parámetro con el campo por el que ordenar los resultados:

SELECT 
  FechaCrea,   
  Concepto,
  Precio,
  ImportePagado,
  Realizado,
  FechaRealizado 
FROM 
  vistaPagos  
WHERE 
  Precio > 0 
ORDER BY 
CASE @OrdenaPor 
   WHEN 'Fecha' THEN FechaCrea
   WHEN 'FReal' THEN FechaRealizado       
 END,
CASE @OrdenaPor 
   WHEN 'Precio' THEN Precio
   WHEN 'Pendiente' THEN ImportePagado   
 END
;  

¿Por qué hay dos CASE separados en el segundo ejemplo? Bueno, CASE necesita que los tipos devueltos en la expresión sean compatibles. En el primer caso devolverá fechas, en el segundo devolverá importes. En caso de que no se cumpla ninguna de las condiciones devolverá un null, así que no debería hacer fallar la consulta.

Utilizar el comando expr para hacer operaciones

El comando expr del terminal de Linux nos permite evaluar una expresión y pintar su resultado. De esta forma podemos usarlo para ejecutar operaciones aritméticas o de comparación.

$ expr 15 + 3
$ expr 15 % 3
$ expr 15 \* 3
$ expr 15 – 3
$ expr 15 / 3

En el ejemplo de arriba puedes ver los ejemplos para suma, operación de módulo, multiplicación (ese caso requiere usar el carácter \ para escapar el asterisco que usamos como símbolo de multiplicación), resta y división.

¿Limitaciones? Pues que solo nos permite operar con números enteros: únicamente acepta enteros como parámetros y tan solo devuelve enteros como resultado

Otra cosa que nos permite expr es ejecutar operaciones de comparación:

$ expr 15 = 3
$ expr 15 != 5
$ expr 15 \> 3
$ expr 15 \< 3
$ expr 15 \<= 3

Devolverá 1 en caso de que la comparación sea verdadera y 0 en el caso contrario. De nuevo el carácter \ será necesario para escapar los caracteres de mayor y menor en las comparaciones.

No solo podemos usarlo desde el terminal para operar, expr también puede resultar de utilidad invocado dentro de alguno de nuestros scripts.

Cómo ver que Apps tienen acceso a nuestra cuenta de Facebook

Ya hemos hablado de varios temas de privacidad en este blog, como cuando vimos cómo descargar nuestros datos de varias redes sociales o cuando dimos consejos para proteger nuestra privacidad tanto en facebook como en general. Muchas de las brechas de seguridad en Facebook provienen de apps de terceros con demasiados permisos. ¿Cómo podemos verlas?

Desde la web podemos hacer click en el menú desplegable a la derecha de la cabecera, ir a Configuración y allí, en el menú de la izquierda, buscar Apps y Sitios web. Si te pierdes un poco con la explicación basta con que hagas click en este enlace en un navegador donde tengas tu sesión iniciada.

Desde el app para Androidla cosa es más o menos igual: despliegas el menú, vas a Configuración y allía a Apps y Sitios Web. Una vez dentro de esa pantalla tienes que pulsar en Sesión Iniciada con Facebook. Una vez allí ya verás todas las apps conectadas, en una pantalla como la siguiente.

Apps y Sitios Web

Tanto desde el ordenador como desde la app podrás seleccionar qué apps quieres eliminar para revocarles de esta forma el acceso a tus datos. De esta forma mejorarás un poco más tu privacidad.

Algunos consejos para optimizar consultas en SQL-Server

Vamos con una serie de pequeños trucos para optimizar nuestras consultas en SQL-Server y conseguir un mejor rendimiento, como ya habíamos hecho en el pasado con MySQL.

  • Añadir al nombre de la tabla el propietario y el esquema hará más rápida nuestra consulta. Si no lo ponemos SQL-Server buscará en todos los esquemas hasta encontrar el objeto.
  • Un clásico: No usar el comodín * en las consultas, poner el nombre de las columnas que queremos traer ayudará a ahorrar tiempo y memoria.
  • Como ya dijimos en un artículo anterior, NOT EXISTS tiene un mejor rendimiento que NOT IN.
  • No uses el prefijo sp_ para nombrar tus procedimientos almacenados. Aunque suene raro, al ser el prefijo que SQL-Server usa para los procedimientos almacenados por defecto siempre que se invoque uno que empieza por sp_ primero lo buscará en la base de datos maestra.
  • Comprueba que tus índices sean eficientes y que no estén demasiado saturados. Recuerda usar las claves primarias y externas de forma adecuada y tener la bases de datos bien normalizadas
  • Recuerda que las vistas con índices, como ya comentamos en otro artículo, mejoran la velocidad de consulta pero penalizan las operaciones de borrado, lectura y escritura.
  • No uses variables de tipo table en los joins de las consultas. Una tabla temporal o una expresión de tabla común (CTE) te darán un mejor rendimiento.
  • No utilices las cláusulas Distinct, Group By y Order By si no es indispensable. Consumen mucha memoria.
  • SQL-Server siempre devuelve la cuenta del número de filas afectado por las consultas de INSERT, DELETE, UPDATE y SELECT. Utilizar la cláusula SET NOCOUNT ON evitará esto ahorrando memoria y tiempo. En una consulta simple apenas se nota, pero en consultas con muchos joins o subconsultas ahorra mucho tiempo.
  • Las funciones son uno de los puntos débiles de SQL-Server, ralentizan enormemente las consultas. La ventaja que aportan es la reutilización de código, pero tienes que ver si te compensa su uso por lo que penalizan el rendimiento. En muchos casos una subconsulta o una tabla temporal serán más rápidas.

Transformar una fecha de formato anglosajón (mm.dd.yyyy) a formato europeo (dd/mm/yyyy) con ASP clásico

Vamos con una entrada cortita. En el trabajo todavía usamos ASP clásico en uno de los proyectos y cuando usamos un campo de fecha en HTML5 en la vista hay que andar transformando de formato europeo a anglosajón y viceversa. ¿Cómo hacemos en ASP clásico esto?

Supongamos que tenemos una cadena con la fecha en formato mm.dd.yyyy, por ejemplo recibimos el 11.30.2018 de nuestro campo Date. ¿Cómo procedemos?

arFech = split(".","11.30.2018")
strFechaEuro = arFecha(1) & "/" & arFecha(0) & "/" & arFecha(2)

De esta forma la cadena strFechaEuro almacenaría el valor “30/11/2018

Famiclones: la historia de las consolas NES piratas.

Se llama Famiclone o Famiclón a las consolas que eran imitaciones de la popular NES (Famicon en Asia) de Nintendo. Históricamente han tenido dos momentos álgidos de popularidad: la primera mitad de los 90 y estos últimos años, tras el lanzamiento de la NES mini por parte de Nintendo y de la ola nostálgica de sus antiguos usuarios

Los primeros clones provenían tradicionalmente de China, Taiwán y Corea del Sur, en muchos casos de las mismas fábricas que creaban las placas para Nintendo. A finales de los 80 se hicieron populares en América Latina por su precio, sensiblemente más bajo que el de las originales de Nintendo, y en los antiguos países europeos del bloque comunista, puesto que la NES no había tenido distribución en sus mercados. Como curiosidad, los modelos más populares en la antigua Yugoslavia tenían una carcasa que imitaba el diseño de la Mega Drive de Sega.

En España fue muy popular en aquellos primeros 90 la NASA, un clon que era compatible con los cartuchos de NES tanto europeos como importados y que podía encontrarse con facilidad en pequeñas tiendas de electrónica. De serie incluía dos mandos y una réplica de la popular pistola Zapper de Nintendo, incluso hubo alguna tirada con el teclado para usar Family BASIC. Su versión original montaba el mismo hardware que la Dendy, el clon más popular en los países de la antigua Unión Soviética. Hubo versiones posteriores con la tecnología NOAC, de la que hablaremos a continuación, y juegos preinstalados

Consola NASA

A mediados de los 90, apareció la tecnología llamada “NES-on-a-Chip”, una serie de pequeños circuitos integrados que imitan el funcionamiento de la consola. Esto implicaría la producción de modelos más pequeños y todo un auge de nuevos clones destinados a mercados en economías en vías de desarrollo. Seguramente te suene, por haber sido un popular meme, la PolyStation. Se trataba de una consola cuyo hardware se basaba en estos chips, mientras que su carcasa y sus controles imitaban los de una PS-One. Eran consolas baratas que podían encontrarse en bazares, tiendas de Todo a Cien o hasta como regalo en tómbolas de mercadillo. Los chips eran de fabricación barata, lo que provocó que aparecieran múltiples pequeños fabricantes en Malasia, Tailandia o Filipinas.

Nintendo siempre intentó luchar legalmente contra estas imitaciones. La fabricación y distribución de la NES clásica se mantuvo hasta 2003 en Japón y además hubo algún clon que disponía de licencia oficial de Nintendo (Sharp o Hyundai obtuvieron licencias), aunque la mayoría de los clones fueron ilegales. En 2005 Nintendo recibiría un mazazo legal: perdía un juicio contra GameTech, a quienes habían demandado por su consola Power Player Superjoy III. Las patentes de Nintendo habían expirado y las imitaciones del hardware ya no implicarían una violación de sus derechos de autor. Ojo, esto no quiere decir que todos los clones sean legales, los derechos de autor sobre los juegos duran más años al ser tratados como una obra artística, esto provoca que muchos clones que llevan juegos integrados en su memoria sigan fuera de lo legal.

Los populares chips de mediados de los 90 que permitieron la segunda hornada de clones se fueron volviendo más pequeños con el paso del tiempo. Esto permitió la aparición de nuevos formatos de clon: consolas con varias entradas de cartucho y varios chips para reproducirlos (como las RetroFreak, Retro5 o Retron, que permiten cartuchos de NES y de SuperNES), clones portátiles con apariencia de GameBoy o GameGear (yo mismo me he regalado uno estas navidades, una RetroFC de Anbernic), réplicas que imitan una recreativa en miniatura o clones que directamente son solo un mando que conectar a la tele imitando a los que ha comercializado Atari en los últimos años (en Brasil ha sido muy popular el GunBoy, que imita el mando de una N64).

El lanzamiento de la NES mini en 2016 de forma muy limitada, y con un catálogo reducido a 30 juegos, ha llevado a un nuevo pico de popularidad de estos clones. Algunos siguen montando circuitos integrados de uso específico, otros directamente montan una Raspberry Pi con Retropie y un montón de Roms dentro de una carcasa similar a la de la MiniNES.

La NES Classic Edition ha sido la causa del nuevo auge de estos clones.

¿Estamos ante un nuevo ataque de los clones? Basta con buscar “consola retro” en Amazon para constatar el auge de estos dispositivos, sobre todo en formato portátil y en formato mando. No se si los viejos rockeros nunca mueren, pero desde luego que las viejas consolas se resisten.