jQuery: Poner el foco en el siguiente elemento usando una clase

Os cuento: un cliente pide que en un formulario que está rellenando, con varios campos de texto muy pequeños para un solo carácter, el foco salte de forma automática al siguiente campo cada vez que cubre uno. Es decir, en cada evento de levantar la tecla salta al siguiente. La cosa parecía simple usando la función next() de jQuery:

$(".cuadrito").keyup(function() {
  $(this).next('.cuadrito').focus();	
});

La función next() de jQuery salta al siguiente elemento “hermano” que aparezca. ¿Qué quiere decir hermano? Pues que tengan el mismo padre, esto es que estén contenidos en el mismo elemento del DOM. Y por eso esta práctica y elegante solución no me valía, porque resulta que los inputs están dentro de una tabla, de forma que al cambiar de celda cambia el “padre” en el DOM y ya no salta el foco. ¿Qué hacer entonces? Lo solucioné con la función index():

$(".cuadrito").keyup(function() {	            
  var ind = $(".cuadrito").index(this);
  $(".cuadrito").eq(ind + 1).focus();
});

¿Qué hicimos aquí? Creo que en el pasado ya vimos que jQuery nos permite tratar a los elementos como si de un array se tratase. Simplemente estoy mirando en la primera fila qué índice tendría el elemento en el que nos encontramos y, en la siguiente, poniendo el foco en el posterior sumando 1 al índice.

Anuncios

Magnitudes básicas de un circuito eléctrico

No hace mucho veíamos en un artículo sobre Javascript cómo realizar cálculos basados en la ley de Ohm. Esta vez vamos a alejarnos un poco de los lenguajes de programación y a darle un repaso a la física básica ¿Cuáles son las principales magnitudes que podemos medir en un circuito eléctrico?

Diferencia de Potencial:

También llamada tensión o voltaje, indica la diferencia de energía entre dos puntos de un circuito. La diferencia de potencial que existe entre los polos del generador o entre los puntos cualquiera del circuito es la causa de que los electrones circulen por el circuito, si este se encuentra cerrado. Es una medida de la fuerza que hay que comunicar a los electrones para que se muevan y su unidad de medida es el Voltio (V).

Intensidad:

La intensidad sería la cantidad de carga eléctrica que circula por un circuito en la unidad de tiempo, que mediríamos en segundos. La unidad con la que mediríamos la intesidad es el Amperio (A).

Resistencia:

Se trata de la propiedad que tienen los cuerpos para dificultar el paso de la energía. Cuanto menor sea esta mejor conductor será esa sustancia. La resistencia de un conductor depende tanto del tipo de material del que está compuesto como de su longitud y de su sección. Denominaremos estos factores resistividad (ρ), longitud (l) y sección del conductor (S). La unidad de medida de resistencia es el Ohmnio (Ω).

Para calcularla debemos multiplicar la resistividad por la longitud dividida entre la sección. Lo expresaríamos con la fórmula: R = ρ * l / S.

Calculando potencia y energía

En base a lo visto arriba podríamos calcular cuánta es la energía consumida por un aparato eléctrico en una unidad de tiempo. Esto sería la potencia del aparato.

Potencia:

La mediríamos en Watios (W).

Tenemos dos fórmulas para calcularla: multiplicar el voltaje por la intensidad o multiplicar el cuadrado de la intensidad por la resistencia. La primera fórmula la expresaríamos como P = V * I y la segunda sería P = I2 * R

Energía eléctrica:

Y acabaríamos con la energía consumida por un circuito eléctrico medida en Julios (J).

Podemos calcularla multiplicando la potencia del circuito (que acabamos de ver cómo calcular) por el tiempo que está en uso (en segundos). La fórmula para esto la expresaríamos como E = P * t

¿Y saber esto para qué me vale?

Es la típica pregunta de adolescente ¿para qué me vale saber esto si no voy a ser electricista? Pues por ejemplo entenderlo te ayudará a calcular qué potencia necesitas contratar para tu casa en tu contrato de la luz, o a calcular cuántos paneles solares necesitarías en caso de querer ponerte a producir tu propia energía.

En España el grueso de la factura depende de la cantidad de potencia contratada. La potencia contratada vendría a ser la cantidad de watios que podemos estar consumiendo a la vez en nuestra casa, que lo puedes entender como la suma de la potencia de todas las luces y electrodomésticos que podemos estar utilizando a la vez. Puedes leer más sobre el tema de la contratación de energía en este blog.

¿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.

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.