Trasponer una matriz en Python

La definción técnica del término matriz traspuesta es “el resultado de reordenar la matriz original mediante el cambio de filas por columnas y las columnas por filas en una nueva matriz”. Imaginemos que tenemos un array en Python tal que así:

x = [[1,2,3],
  [2,3,1],
  [3,1,2]]

Ahora queremos meter esa matriz en otra variable, pero tras trasponerla. Si bien en la mayoría de los lenguajes es posible trasponer la matriz utilizando una serie de bucles anidados, en Python podremos hacerlo de forma muy sencilla sirviéndonos de la función zip() y el operador *. Para almacenar la matriz traspuesta en otra variable bastaría con hacer:

y=zip(*x)

Y solo con esa línea ya habría traspuesto nuestra matriz original.

Televisión en tu PC o tablet: plataformas de streaming gratuitas.

Hace años que no tengo tele, en concreto desde el 2016. No es ningún tipo de alegato pseudointelectual como el que hacía un profesor de filosofía que tuve en el instituto, que decía no tenerla para mantener su cabeza limpia y pura y seguía con una larga reivindicación de la radio (como si las tertulias radiofónicas no fuesen también pozos de desinformación y embrutecimiento, vamos).

En todo caso, aquí ya todos sabéis que como mucha gente veo películas, series, documentales y retransmisiones deportivas, así que no hay nada de reivindicación en decir que no tengo aparato de televisión, simplemente utilizo un ordenador viejo para ello porque me resulta más práctico y porque así tengo en el mismo electrodoméstico televisión, radio, reproductor de música y consola de videojuegos. Si como yo eres de los que no van a invertir en una tele porque le resulta más barato o más cómodo usar un ordenador, pero no quieres dejarte una parte de tu salario en pagar servicios de streaming, aquí van unas cuantas opciones gratis para usar tu ordenador o tablet como tele.

Photo by Tim Mossholder on Pexels.com

Tivify: Tivify es una plataforma de streaming que tiene tres planes de precios, uno de los cuales es gratis (que es lo que nos interesa en este artículo). Básicamente lo que incluye esta plataforma son canales de TDT que emiten en España, tanto los de nivel estatal como los autonómicos y a mayores incluye algún canal internacional de noticias. Si bien muchas de estas cadenas son también accesibles a través de sus webs oficiales en esta plataforma consigues la comodidad de poder tenerlas todas juntas. Tiene además dos planes de pago que aumentan la capacidad para guardar grabaciones, dan acceso a canales temáticos y permiten vincular más dispositivos a la cuenta.

VIX: Se trata de una plataforma de streaming financiada por publicidad, incluye series, cine, concursos, gastronomía o programas de true crime. Hay sobre todo muchas series y telenovelas producidas en América Latina, programas para televisiones locales y su sección de cine se compone principalmente de telefilmes o producciones “directas a vídeo“. Ojo, que si te gusta el cine de bichoños cutres apocalípticos te puedes encontrar una buena cantidad de joyitas para tardes de domingo lluviosas.

iQiyi: ¿Eres fan del K-Pop o de la cultura surcoreana? En los últimos años los productos de entretenimiento provenientes de Corea del Sur han ganado mucha popularidad en occidente. La plataforma iQiyi ofrece series y programas de espectáculos surcoreanos. Además también tiene una enorme oferta de cine de serie B producido en China, películas de acción de Hong Kong, algo de anime, concursos musicales de otros países asiáticos… Ofrecen un plan de pago VIP con acceso a algunos contenidos exclusivos, vídeo en alta definción, descargas para ver sin conexión, etc.

PlutoTV: De PlutoTV ya hablamos aquí en el pasado, cuando todavía no estaba oficialmente en España pero podía ser accedido. Es una plataforma con un montón de canales que emiten programas de televisión de forma lineal, la mayoría de ellos temáticos y dedicados a emitir un solo programa o serie las 24 horas del día. Estos canalaes van cambiando con el paso del tiempo y también se van añadiendo nuevas opciones. Al momento de escribir esto hay más de 70 canales y la promesa de la plataforma es llegar a 100 antes de acabar el año.

RakutenTV Free: RakutenTV es una plataforma principalmente de pago, pero tiene una pequeña sección de su catálogo que puede ser accedida de forma gratuita. Esta oferta gratis incluye principalmente programas de reportajes deportivos o sensacionalistas, programas y series infantiles y una selección de películas que se renueva mes a mes. No esperes estrenos o grandes clásicos, pero siempre hay alguna película decente.

La Liga Sports TV: Si lo tuyo son las retransmisiones deportivas este canal financiado por la La Liga (la empresa que organiza la liga de fútbol profesional en España) ofrece deportes varios como fútbol sala, gimnasia, atletismo, balonmano, baloncesto, fútbol. Al día en que escribí esto ofertaban la Liga Nacional de Fútbol Sala española, la liga ASOBAL de balonmano, las ligas LEB oro y LEB plata de baloncesto (segunda y tercera categorías del baloncesto español), la Premier League Rusa de fútbol, la Champions League Asiática de fútbol y varios campeonatos nacionales españoles de distintos deportes, incluso alguna cosa de e-sports.

UEFA TV: Edito para añadir esta plataforma para los futboleros. No tiene gran cosa: resúmenes semanales de las competiciones europeas dependientes de la UEFA (fútbol masculino, femenino y fútbol sala) y algunos reportajes y entrevistas. Lo interesante es que de vez en cuando ponen partidos enteros en directo: no te esperes la Champions o la Europa League porque los derechos se venden caros, pero sí partidos de torneos de categorías inferiores, partidos de selecciones absolutas de la League of Nations o de las fases de clasificación para Eurocopas o Mundiales.

SQL-Server 2008 R2: “El valor de la línea de comandos INSTALLSHAREDWOWDIR no es válido. Compruebe que la ruta de acceso especificada es válida y diferente de la ruta de acceso de INSTALLSHAREDDIR”

Pues llevo unas horas pegándome con este problema. Ayer un compañero se puso a instalar un SQL-Server 2008 y se le ocurrió poner la misma ruta para los recursos compartidos de la versión de x86 y para la de 64 bits. Cuando llegué hoy a restaurar la base de datos que tenía que ir en ese equipo me encontré con que no podía restaurarla.

Decidí que lo mejor sería desinstalar el motor de base de datos y volver a instalarlo, pero me saltó el error del título: “El valor de la línea de comandos INSTALLSHAREDWOWDIR no es válido. Compruebe que la ruta de acceso especificada es válida y diferente de la ruta de acceso de INSTALLSHAREDDIR. Como el tiempo apretaba y no acababa de encontrar en google ninguna solución para cambiar esas rutas pensé que la solución rápida sería instalar otra instancia con otro nombre y usar esa, dejando la primera mal instalada apagada, pero me encontré con que el instalador tampoco me permitía cambiar la ruta duplicada al iniciar una nueva instalación.

Busqué en Google pero no había casi pistas, de hecho el ejemplo que encontraba no solía ser para esto problema sino para otro en el que uno de los directorios está definido y el otro no, que no era el caso. La cosa era que si el programa de instalación estaba abriendo ya con una ruta cargada esa ruta tenía que estar definida en algún sitio. Fiándome de un foro busqué un fichero que se llamase config.ini o ConfigurationFile.ini sin suerte. Al final encontré esta entrada en otro blog donde alguien había tenido ese problema cuando intentó actualizar de un 2008 a un 2014.

La cosa es que la ruta está guardada en el registro del sistema, en concreto en la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-518\Components\0D1F366D0FE0E404F8C15EE4F1C15094 para INSTALLSHAREDDIR y en la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\ Components\C90BFAC020D87EA46811C836AD3C507F para INSTALLSHAREDWOWDIR. Decidí modificar todos los valores y cambiarlos por la ruta por defecto que suele usar SQL-Server para no tener ya más quebraderos de cabeza. Tras el cambio no tuve ni que reiniciar, volví a abrir el programa de instalación y me permitió desinstalar y volver a instalar correctamente.

Electron.js: obtener el nombre, la versión o la arquitectura de nuestro sistema operativo

Bueno, pues hace unas semanas que en el trabajo estoy currando con el framework Electron.js, que básicamente nos permite transformar aplicaciones web en aplicaciones nativas de escritorio. En mi caso es para actualizar un software de intranet que dependía de ActiveX y de Internet Explorer en exceso. En todo caso vamos a ver algunas cosillas sobre Electron, una de ellas es ¿cómo puedo obtener los datos sobre mi sistema operativo? Pues Electron incluye un módulo para eso:

Lo primero será importar el módulo “os“, para que la aplicación pueda trabajar con el sistema operativo anfitrión. Para el ejemplo crearemos una variable llamada también os (por recordarlo bien) para almacenar dicho objeto:

var os = require("os");

Ahora veamos ¿cómo haríamos para ver la arquitectura de nuestro sistema operativo? Pues llamando al método arch().

var arquitectura = os.arch();

¿Y para ver el nombre del sistema operativo? Pues tenemos dos opciones: el método type() nos devolverá el tipo genérico (Linux, Darwin o Windows) y el método platform() nos devolverá un resultado más concreto (darwin,freebsd,sunos,win32…). Finalmente el método version() nos devolverá la versión del sistema operativo:

var tipo = os.type();
var plataforma = os.platform();
var version = os.version();

Diferencia entre TLS y SSL

Me pregunta un cliente, que estaba configurando un cliente de correo, la diferencia entre TLS y SSL. Supongo que más gente tendará interés así que lo cuento por aquí:

Tanto TLS como SSL son protocolos de cifrado de datos que se aplican en la capa de transporte en internet (protocolos TCP/IP).

Photo by Markus Spiske on Pexels.com

SSL son las siglas de Secure Socket Layer, apareció originalmente en 1995 y tuvo varias revisiones (2.0 y 3.0) que corregían diversos problemas de seguridad. La versión 2.0 fue considerada obsoleta en 2011, mientras que la versión 3.0 fue marcada como tal en junio de 2015 tras encontrarse vulnerabilidades graves que facilitaban ataques man-in-the-middle.

TLS, abreviatura de Transport Layer Security, fue publicado originalmente en 1999 y también ha tenido varias revisiones, siendo la última de agosto de 2018, que nos trajo la versión 1.3 del protocolo. Las versiones 1.0 y 1.1 se consideran obsoletas, mientras que la versión 1.2 del protocolo (de 2008) todavía se permite bajo ciertas condiciones.

Entonces ¿Qué debo usar? Pues hoy por hoy lo recomendable es TLS 1.3, es la versión más actualizada y más segura. En algunos casos todavía encontraremos algunos servidores que utilizan TLS 1.2 por cuestiones de compatibilidad con alguna aplicación antigua. Cualquier versión anterior a la 1.2 debería ser considerada insegura y obsoleta.

Exodus Privacy: Controla quién te rastrea desde las apps de tu móvil Android

Hay un dicho: en internet si algo es gratis tú no eres el cliente sino el producto. Aunque no es así el 100% de las veces sí que es habitual que las empresas que nos proveen un servicio “gratis” realmente se estén lucrando comerciando con nuestros datos, ya sea a un nivel individualizado o usándolos de forma anonimizada en la elaboración de estadísticas y estudios. ¿Podemos saber quién está rastreándonos desde un app que tengamos instalada en nuestro teléfono? Podemos. Hablemos de Exodus Privacy.

Exodus Privacy es una ONG francesa cuyo objetivo es hacer a los usuarios conscientes del rastreo al que pueden ser sometidos a través de las apps de sus teléfonos móviles. Para ello se sirven tanto de canales de comunicación en redes sociales a través de los cuales hacer didáctica como de una herramienta de análisis, una herramienta que nos informa sobre que rastreadores trae incorporada una aplicación.

Captura ejemplo del app de Exodus Privacy

Disponemos de dicha herramienta en dos formatos: app y web. A la versión web podemos acceder a través de este enlace, en ella veremos un cuadro de texto donde podemos buscar apps por el nombre, o incluso pegar la url de un app del Google Play Store si queremos algo muy concreto, para obtener un informe sobre qué permisos solicita y qué rastreadores incorpora. La otra opción pasa por instalar la propia app de Exodus en nuestro teléfono, ya sea a través de la propia Play Store o de F.Droid. En su web además disponemos de otras cosas como un blog corporativo, informes sobre los distintos rastreadores que han detectado o explicaciones de los conceptos sobre los que hablan.

Libre Office Writer: crear un PDF híbrido, editable por cualquiera.

Un fichero PDF híbrido de Libre Office consiste en un fichero que por un lado puede ser abierto por cualquier lector de PDF y por otro lleva incrustado el documento ODF para que pueda ser editado con Libre Office por el receptor.

¿Cómo hacemos esto? Pues nos vamos a Archivo->Exportar a… y elegimos en el selector Exportar a PDF. Eso nos abre un diálogo de exportación, en la sección General de dicho diálogo tenemos que marcar la opción PDF Híbrido (Incrustar archivo ODF) como en la imagen de ejemplo. Con esto obtendríamos nuestro PDF híbrido.

Common Table Expression (CTE): la sentencia WITH en PostgreSQL.

Hace tiempo escribí una entrada sobre el uso de CTE en SQL-Server de Microsoft y no hace mucho en dicha entrada me preguntaron si podría usarse también una CTE en PostgreSQL. La respuesta es que sí, existe este recurso también en ese sistema gestor de bases de datos.

Sintaxis básica de una CTE

Recuerda, una CTE es un artefacto que nos permite mantener en memoria el resultado de una consulta para poder utilizarlo como si se tratase de una tabla o vista más.

En PostgreSQL usaría la misma sintaxis que en SQL-Server: tras la instrucción WITH definimos el nombre de la CTE y podemos opcionalmente agregar también los nombres que queramos dar a las columnas de la tabla que devolverá como resultado (si no lo hacemos entonces se usarán por defecto los nombres de las columnas que traigamos en la consulta). Dentro del cuerpo de la instrucción WITH definimos la consulta que queramos usar en la CTE. Finalmente ya podremos usar nuestra CTE dentro de una consulta. En fin, que lo básico sería tal que así:

WITH cte_name (column_list) AS (
    Select * from TablaQueNecesitemos
)

El mismo ejemplo que usé en la entrada sobre SQL-Server nos vale para aquí, una CTE sobre dos tablas (vendedores y ventas) para ver el total de ventas de cada uno ese año:

WITH Ventas_CTE (IdVendedor, NombreVendedor, TotalVendido)  
AS  
(  
    SELECT 
      v.Id as IdVendedor, 
      v.Nombre as NombreVendedor, 
      SUM(vt.Importe) AS TotalVentas 
    FROM Vendedores v inner join ventas vt on v.Id = vt.IdVendedor
    WHERE YEAR(vt.Fecha)=2018
)  

Después podríamos usar esa CTE como una tabla más en cualquier consulta de SELECT, INSERT,UPDATE o DELETE. Recordad que como en SQL-Server no podremos usar cláusulas coo ORDER BY o FOR BROWSE, algo que tampoco tendría mucho sentido por otra parte.

¿Por qué usar una CTE?

La misma pregunta que nos hacíamos en el primer artículo. Hay motivos varios para usar una CTE con PostrgreSQL:

  • Hacer más legible y más entendible una consulta compleja, permitiéndonos prescindir de variables de tabla y subconsultas, consiguiendo un código más ordenado y limpio sin penalizar el rendimiento.
  • La posibilidad de crear consultas recursivas (un tema del que prometí escribir hace dos años y se me pasó)
  • La posibilidad de usar funciones de agregado o funciones ventana y poder operar con ellas después.

Privacidad: cómo crear alertas de Google sobre nuestros datos de forma efectiva

Hace años que Google lanzó su servicio de alertas, un servicio pensado para que podamos solicitar que nos envíen a nuestro correo un aviso cada vez que se publique algo sobre un tema que nos interese. Esta herramienta se vuelve interesante no tanto para estar informados de nuestras aficiones como para poder saber si se ha publicado algo sobre nosotros, por ejemplo para que un grupo musical pueda saber qué se publica sobre su último disco, para que una empresa de fontanería pueda ver si alguien ha dicho algo sobre su servicio, etc… y también a nivel individual nos permite saber si hay nueva información accesible públicamente relativa a nuestra persona.

Si accedemos al enlace de http://google.es/alerts nos encontraremos un cuadro de búsqueda en el que meter el término sobre el que queremos crear la alerta y podremos un desplegar un cuadro de detalles para acotar más nuestra búsqueda. Podéis verlo en la captura que viene a continuación

Como podéis ver podréis elegir la frecuencia de la notificación (diaria, semanal o al momento), las fuentes en la que revisar (todas, solo blogs, solo noticias, solo webs oficiales), el idioma y la región (todo el mundo o solo un país en concreto), además de poder definir si queréis ver todos los resultados o solo los más destacados. La combinación de estos parámetros bien usados con unos términos de búsqueda adecuados será lo que nos permite usarlo de forma eficiente. Pero ¿qué términos de búsqueda serían los adecuados?

  • Nuestro nombre. Yo recomendaría buscar nombre y apellidos entre comillas (para que busque esa combinación exacta) y hacer dos alarmas, uno para el formato “Nombre Apellido1 Apellido2” y otra para el formato “Apellido1 Apellido2, Nombre” que se usa en muchas comunicaciones oficiales. Por jemplo “María Martínez Martínez” y “Martínez Martínez, María“.
  • El número de nuestro documento de identidad también entre comillas, en el caso de España sería el DNI o el NIE para residentes extranjeros (en otros países pues ya no sé, cada cual tiene su sistema). Creo que para evitar contaminaciones en esta alerta sería mejor acotar la búsqueda a la región de la que es oficial el documento (por ejemplo España si ponemos el DNI).
  • Nuestro número de teléfono, también entre comillas y también tres formatos: sin separación, separando con espacios en bloques de tres en tres dígitios y separando los tres primeros dígitos en un bloque de tres y el resto de dos en dos, por ser los formatos más habituales. Por ejemplo, usando un número que imagino que será ficticio: “900000000”, “900 000 000” y “900 00 00 00”. De nuevo en este caso recomendaría acotar por región.
  • Nuestro correo electrónico.

De esta forma recibiríamos un aviso cuando se publique cualquier cosa en la red en la que aparezca la coincidencia

Abrir la carpeta inicio de Windows en Widows 10

Otro pequeño truquito: en las versiones antiguas de Windows la carpeta Inicio, donde podemos meter los programas y scripts que queremos que se ejecuten al arrancar el sistema operativo, estaba muy accesible: en el menú de Windows aparecía ya una sección “Inicio” y bastaba con un click derecho para navegar hasta ella. Pero en algún momento algún ingeniro a sueldo de Bill Gates decidió que tendría que estar más a desmano, porque patatas traigo. ¿Cómo encontrar la carpeta con facilidad en Windows 10?

Por defecto la carpeta de inicio común estaría en la ruta “C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp” y la de usuario en “C:\Users\Username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup“, pero es bastante complejo acordarse de toda esta ruta de memoria, tranquilidad que existe un atajo.

Pulsando la tecla de windows y a la vez la tecla R se abrirá el menú para ejecutar un comando, en ese ventana debemos ejecutar la orden shell:startup si queremos abrir la carpeta de inicio del usuario o shell:common startup si queremos abrir la carpeta de inicio común.