Solucionar problema diskpart Clean Error del servicio de disco virtual


Usando Windows 11 (o versiones anteriores), en ocasiones puede que conectemos una unidad de memoria USB y su contenido no aparezca en el explorador de archivos. A veces, el dispositivo aparece en la Administración de discos con una casilla vacía, pero no aparece en el Explorador de archivos. Además, el «dispositivo» es diverso porque puede obtener «No hay medios en el dispositivo» en HP USB Flash, tarjeta SanDisk SD, Transcend StoreJet, DVD/CD, Pen Drive, Tarjeta de Memoria, incluso SSD/HDD bajo diferentes situaciones. En estos casos, aunque la memoria perfectamente puede estar dañada ( y esto debemos entender que pueda suceder), podemos hacer uso del administrador de discos o lo mas normal el comando diskpart para intentar solucionar el problema.

Dependiendo del estado del pendrive es posible que nos encontremos con algún error durante el proceso de intentar restaurar una unidad usb dañada utilizando el comando diskpart (ejecutados en la herramienta Símbolo como Administrador) y tras ejecutar todos estos comandos en el orden que aquí vemos mas abajo, formateará por completo nuestra memoria USB o lo que es lo mismo, lo mas normal es que solucionemos el problema (consejo: No escriba ningún dato nuevo en el dispositivo que tiene el problema de «no media» hasta que lo resuelva).

 -DISKPART> list disk //(Discos encontrados en el PC)
- DISKPART> select disk Nº del disco //(Seleccionar el disco/Pendrive deseado. Ejemplo: select disk 2)
- DISKPART> attributes disk clear readonly// (Para borrar el atributo de sólo lectura para el disco seleccionado)
- DISKPART> clean //(Borrar todo el disco)
- DISKPART> convert mbr o gpt// (Convierte al tipo de particiones mbr o gpt)
- DISKPART> create partition primary //(crear una partición primaria)
- DISKPART> select part Nº de partición //(Seleccionar la partición deseada. En caso de querer seleccionar la partición primaria: select part 1)
- DISKPART> active //(Para activar la partición seleccionada)
- DISKPART> format fs=Fat32 o Format fs=NTFS //(Formatear la USB en formato Fat32 o NTFS)
- DISKPART> assign letter Letra //(asignación de una letra en la memoria USB. Ejemplo: assign letter H)
- DISKPART> list volume //(ver como ha quedado la memoria USB tras el formateado: Volúmenes, letras, formato, etc.)

No obstante, en ocasiones, la ejecución de estos comandos no puede llevarse a cabo, debido a diversos errores que se pueden producir durante la ejecución de alguno de estos comandos citados anteriormente, lo cual hará que nos quedemos atascados en uno de los pasos a llevar a cabo, impidiéndonos continuar con el siguiente comando y por lo tanto terminar el proceso.

Ahora intentaremos recoger todos esos problemas comunes que nos puede dar el usb de la utilidad Diskpart, describiendo los errores mas habituales, junto a su posible solución.

Empecemos comentando segun la gravedad de mayor a menor los errores mas habituales:

ERROR 1:»Error del servicio de disco virtual»

Dentro de los fallos de error del servicio de disco virtual podemos encontrar unas cuantas variantes:

  • «Error del Servicio de disco virtual: No hay medios en el dispositivo«. Este fallo significa que el sistema no es capaz de comunicarse con la memoria USB. Para el PC es una unidad vacía. Como consecuencia, no puede acceder a los datos almacenados en la unidad (este es el error más grave y por ello lo trataremos al final de este post dado que muchas veces es achacable a un problema fisico).
  • «Error del Servicio de disco virtual: Se agotó el tiempo de espera para la operación«. Este mensaje lo que nos dice es que se ha intentado contactar con la unidad, pero ésta no responde.
  • «Error diskpart ha encontrado un error: no se puede realizar la solicitud por un error del dispositivo de E/S«. Al igual que en los casos anteriores, estamos ante un error de comunicación entre la memoria USB y el ordenador.
  • «DiskPart ha encontrado un error: El dispositivo no está listo«. Una vez más, este error nos indica que el sistema de Windows no puede ponerse en contacto con la unidad USB.

Estos 4 errores relacionados con el disco virtual muchas veces significan que el pendrive tiene una avería de hardware:

  • Si el USB se ha mojado podemos intentar ponerlo en una bolsita de arroz durante un par de días. Dejamos que absorba bien la humedad y volvemos a intentar conectarlo.
  • Si el caso es que se ha dado un golpe o simplemente hace mucho tiempo que no lo utilizamos, es posible que se haya deteriorado o estropeado para siempre.

Ante esta situación, poco podemos hacer, la verdad. Queda la posibilidad de que todo esto venga de un error a la hora de asignar una letra a la unidad, aunque es poco probable. Es un fallo que surge cuando conectamos un USB con una letra que ya está asignada a otro disco en el PC (otro pendrive, el propio disco duro del equipo, etc.). Podemos intentar solucionarlo cambiando la letra asignada al pendrive:

  • Abrimos el panel de «Administración de discos» (desde el panel de control o desde Cortana).
  • Seleccionamos nuestro pendrive y haciendo clic derecho pulsamos sobre «Cambiar la letra y rutas de acceso de la unidad«. Asignamos una nueva letra (que esté libre y sin usar) y guardamos los cambios.

ERROR 2 :»Error de servicio de disco virtual: El medio está protegido contra escritura. Consulte el registro de eventos del sistema para obtener más información o Acceso Denegado«

Este error nos indica que el pendrive o memoria USB solo tiene permisos de lectura. Normalmente podemos solucionarlo moviendo la pestaña de bloqueo contra escritura que suelen incorporar la mayoría de USBs del mercado.

En caso de no disponer de ninguna pestaña también podemos obtener permisos de escritura ejecutando el comando «attributes disk clear readonly» (sin comillas) en MS-DOS, justo antes de borrar el USB mediante el comando Clean. Una vez que haya eliminado la protección contra escritura, ya podrá llevar a cabo el formateado.

ERROR 3 :»Error del servicio de disco virtual: el volumen es demasiado pequeño»

Este error ocurre cuando ejecutamos el comando DISKPART> format fs=Fat32. Es otro fallo con el disco virtual, pero que esta vez podemos solucionar sin demasiados dramas. Lo único que tenemos que hacer es formatear el USB en formato NTFS en lugar de FAT32.

En este caso pues lo que tendremos que hacer será formatear nuestra memoria USB en el formato NTFS, para lo cual, cuando estemos realizando el formateo mediante comandos, en lugar de utilizar el comando «format fs=FAT32» utilizaremos «format fs=NTFS«.

Si esto no funciona, realizaremos la siguiente serie de comandos:

  • diskpart
  • clean
  • convert gpt
  • format fs=NTFS

ERROR 4 :»Error del servicio de disco virtual:«El volumen es demasiado grande»

Seguimos con otro fallo del disco virtual al intentar formatear nuestro pendrive. En este caso el problema está en que Windows no es capaz de formatear ningún disco a FAT32 con un tamaño superior a 32GB. Un dato bastante curioso teniendo en cuenta que el sistema sí que es capaz de montar y leer unidades de mayor tamaño.

En cualquier caso, para poder formatear una unidad USB que tenga un tamaño de 1TB, 500GB o similar, tendremos que utilizar una aplicación de terceros que sí esté habilitada para formatear este tipo de discos. Una buena herramienta gratuita para llevar a cabo este proceso es FAT32 Format (disponible AQUÍ).

ERROR 5 :»chkdsk no está disponible para archivos RAW»

Este error nos saltará al intentar reparar los fallos en disco con el comando chkdsk. Cuando una unidad está en formato RAW significa que ha perdido su formato de archivos. Por tanto, para poder ejecutar la herramienta de chequeo de disco primero tendremos que darle formato (tal y como explicamos en los métodos #2 y #3).

ERROR 6 : «Acceso denegado porque no tiene privilegios suficientes»

Si no ejecutamos la ventana de MS-DOS con permisos de administrador el comando diskpart, obtendremos este error. Lo podemos solucionar simplemente haciendo esto:

  • Si utilizamos Cortana: Escribimos «cmd«, y cuando aparezca el icono del símbolo del sistema, en lugar de pulsar sobre él hacemos clic derecho y seleccionamos «Ejecutar como administrador«.
  • En versiones anteriores a Windows 10: Nos desplazamos hasta la carpeta C:\Windows\System32 y buscamos el ejecutable «cmd.exe». Hacemos clic derecho sobre el archivo mientras presionamos la tecla «shift» y seleccionamos «Ejecutar como administrador«.

Error del Servicio de disco virtual:No hay medios en el dispositivo.

ERROR 7: «Error del Servicio de disco virtual: No se puede convertir el disco especificado. Los CDs y DVDs son ejemplos de discos no convertibles».

Este error ocurre tras ejecutar el comando: DISKPART> convert mbr . Si ha recibido este mensaje de error, se debe a que su memoria USB contiene archivos almacenados en su interior, por lo que deberemos borrar todo su contenido antes de convertir las particiones.

Esto podrá hacerlo gracias al comando: DISKPART> clean. Tras este comando ya puede realizar la conversión

ERROR 8 :» No se encontró ninguna extensión disponible utilizable. Es posible que no haya suficiente espacio disponible para crear una partición con el tamaño y desplazamiento especificados. Especifique valores de tamaño y desplazamiento distintos o no especifique ninguno de estos valores para crear la partición con el tamaño máximo. Es posible que las particiones del disco se crearán con el formato de particiones de disco MBR y que el disco contenga cuatro particiones principales (ya no pueden crearse más particiones) o tres particiones principales y una extendida (solo pueden crearse unidades lógicas)

Este error ocurre tras haber ejecutado el comando DISKPART> create partition primary

En este caso tendrás que ejecutar el comando: DISKPART> clean para justo despues volver a ejecutar el comando DISKPART> convert gpt. Una vez que halla ejecutado los comandos anteriores, ya podrá ejecutar el comando DISKPART> create partition primary para continuar con el proceso.

ERROR 9: Error del Servicio de disco virtual: El volumen no está en línea.

Este error ocurre cuando ejecutamos el comando DISKPART> format fs=Fat32.

En este caso si recibimos este error tendremos que ejecutar los siguientes comandos antes de realizar el formateado en el orden especificado: DISKPART> online diskDISKPART>create partition primaryDISKPART> convert mbr.

ERROR 10: « Error del Servicio de disco virtual:No hay medios en el dispositivo«

Por qué aparece el error «No hay medios en el dispositivo»? Cuando se obtiene el error, se sugiere desconectar la unidad USB y volver a conectarlo a otra máquina para ver si es el problema con su unidad flash. Si lo es, los siguientes factores pueden explicar el error:

  • La unidad USB está fallando o ha fallado. Al igual que un disco duro, una unidad flash tiene una vida útil. Si la memoria USB nos puede servir para un par de años, puede llegar al final y fallar gradualmente. Los daños físicos como estampidas, caídas de altura o golpes frecuentes también pueden dañar la unidad USB.
  • El MBR o PBR del dispositivo está dañado. MBR es la abreviatura de Master Boot Record, que también se conoce como sector de arranque maestro. Es el primer sector que debe leerse cuando se enciende el PC para acceder al disco duro.El MBR recoge el tamaño y la ubicación de cada partición en el disco duro.El MBR consta de tres partes  El código de arranque maestro (ocupa 466Bytes), la tabla de particiones del disco (ocupa 648Bytes) y la firma de arranque. El uso inadecuado de la unidad, como desenchufar la unidad flash mientras está en funcionamiento, es probable que dañe las tablas de búsqueda internas de la unidad e invocar la corrupción en Master Boot Record (MBR) o Partition Boot Record (PBR).
  • El error también puede ser causado por otras razones desconocidas que no se han encontrado hasta ahora. Sin embargo, lo que cuenta a continuación es encontrar soluciones que resuelvan el problema de «No hay medios en el dispositivo».

Por tanto para reparar el error «No hay medios en el dispositivo», primero puede cambiar el puerto USB o desenchufar y enchufar la unidad varias veces, o conectar la unidad a otros ordenadores, tal vez con diferentes sistemas operativos como Linux, para probar si funciona. Si el problema persiste, AOMEI Partition Assistant Professional puede INTENTAR realizar la recuperación de particiones de unidades USB, tarjetas SD, discos duros y SSD ( por cierto no siempre con éxito). Este software viene con una versión Demo para una prueba gratuita.

  1. Conecte el dispositivo a un ordenador. 2. Inicie AOMEI Partition Assistant y haga clic en Partition Recovery Wizard en el lado izquierdo.
  2. Seleccione el dispositivo. Puede distinguirlo por la capacidad del disco y la marca.
  3. Elija el modo de búsqueda, Búsqueda rápida o Búsqueda completa. Seleccione la partición que desea recuperar y haga clic en Continuar para empezar. 5. Espere a que finalice el proceso.

Nota: si los datos de ese dispositivo son muy vitales para usted, y el método anterior no funciona, se sugiere recurrir a un software profesional de recuperación de datos.

Anuncio publicitario

Herramientas gratuitas para detectar una unidad USB falsa


Comprar una unidad USB falsa no es una pérdida total porque una buena parte es espacio de almacenamiento real. Digamos que el fabricante sólo ha tergiversado su verdadero espacio para atraerle a comprarlo, así que a pesar de que puede que nos podamos encontrar estafados, aun es posible recuperar al menos una parte de su valor .

En un post anterior usamos para detectar cual es la capacidad real de un pen-drive los programas aida64 o h2testw, pero en esta ocasión hablaremos de otros interesantes programas gratuitos como fakeflashtest, winsetupfromusb.

Otra forma de saber si un pendrive USB es falso es verificando que tenga la interfaz a la que realmente opera. Muchas unidades prometen ser 3.0 y al final se quedan en 2.0 o ni siquiera llegan a las velocidades prometidas. Con el software ChipGenius ya deberíamos de saber qué versión tiene nuestra unidad, ya que es una información que se lista en esta aplicación. Tambien la aplicación crystaldiskmark también nos ofrece de un modo muy rápido la velocidad de transferencia de esa unidad.

Además de los programas aida64 o h2testw, o los ya comentados, que usaremos para averiguar cual es la capacidad real del la unidad usb de almacenamiento externo, necesitaremos nuevamente usar algunos comandos de la utilidad de Windows diskpart para formatear dicha unidad con su capacidad real:

  • diskpart
  • list disk
  • select disk {number}
  • clean
  • create partition primary size={number of megabytes}
  • select partition 1
  • active
  • format fs=fat32 quick
  • assign
  • exit

FakeFlashTest

FakeFlashTest es una herramienta de detección de unidades flash falsificadas. Esta herramienta se utiliza para detectar unidades flash USB o tarjetas de memoria que han sido engañosamente etiquetadas con un tamaño de almacenamiento mayor al que realmente tienen. Por ejemplo es común que los fabricantes falsificados etiqueten una unidad flash de X GB como si tuviera 2XGB de almacenamiento, y esto puede causar problemas al intentar guardar archivos en la unidad.

FakeFlashTest verifica el tamaño real de almacenamiento de la unidad flash o la tarjeta de memoria y le informa al usuario si hay una diferencia entre el tamaño etiquetado y el tamaño real.

Este programa en efecto es de los más usados para comprobar los sectores de memoria de un dispositivo de almacenamiento como una microSD o un pendrive, pues verifica la capacidad real escribiendo bloques de datos de un tamaño correspondiente a la capacidad que dice tener el dispositivo, de este modo, si luego al leerlo de nuevo da fallos, entonces es que la unidad de almacenamiento esta formateado con una capacidad distinta a la real.

Si el programa ha dado error em algun sector, probablemente se pregunte como calcular cual es la verdadera capacidad del disco, pues afortunadamente existen conversores de sectores a GB, que nos pueden orientar a saber cual es la capacidad real del disco.

Es obvio advertir que antes de usar esta aplicación es importante hacer una copia de los archivos que tengamos en esa unidad, porque toda la información de la memoria o tarjeta queda sobreescrita y por tanto eliminada.

Ojo porque si la capacidad anunciada de la unidad USB es alta, este programa por sus características del método usado, tardara un buen rato ( o incluso en determinadas ocasiones puede que incluso pierda el control).

WinSetupFromUSB

WinSetupFromUSB es una herramienta gratuita que permite crear una unidad USB bootable para instalar diferentes versiones de Windows, así como otras distribuciones de Linux. Permite crear una unidad USB multiboot con varias versiones de Windows y también sistemas operativos Linux siendo ideal para crear una unidad USB de arranque para la instalación de sistemas operativos en varios equipos, ya que permite seleccionar varios sistemas operativos y llevarlos en una sola unidad USB.

Tras la descarga y descompresión, ejecutaremos la versión de 64 bits .Una vez la ejecutemos, descubriremos que realmente se trata de una aplicación que cuenta con otras tres implementadas. Y nosotros la que utilizaremos para saber si un pendrive USB es falso es la de RMPrepUSB, cuya utilidad real es la de crear un USB booteable.

Por tanto en la pantalla principal elegimos la opción RMPrepUSB para abrir esta aplicación que nos abrirá nueva ventana parecida a la siguiente de mas abajo donde en settings deberemos elegir que tome dispositivos de mas de 1GB y en drive seleccionar la unidad que queremos probar:

winsetupfromusb  funcionando

Una vez seleccionada la unidad extraible y pulsaremos «Quick Size Test» y con ello empezaremos la prueba de capacidad real de la unidad.

ChipGenius

ChipGenius es una sencilla aplicación creada para ayudar a los usuarios a extraer información sobre sus dispositivos USB, averiguando los detalles que necesitan para reparar unidades flash averiadas. Aunque puede utilizarse en cualquier situación, resulta especialmente útil cuando un dispositivo flash no está visible en el Explorador de archivos, sino sólo en la sección dedicada a «Dispositivos» del Panel de control.

Esta utilidad es menos atractiva visualmente pero igualmente competente no requiriendo instalación, por lo que la app puede iniciarse con un simple doble clic. Centrándose en la funcionalidad más que en la apariencia se mantiene todo al mínimo: su interfaz consiste en sólo dos áreas, una que muestra una lista completa de todos los dispositivos USB y controladores, y la otra que muestra detalles sobre el dispositivo seleccionado. No hay botones que pulsar, ni menús a los que acceder, ni otras opciones con las que lidiar.

Una vez iniciado la app recopila información sobre todas las unidades flash USB y otros dispositivos conectados a través de un cable USB, junto con el número de puertos abiertos. Al seleccionar cualquiera de los dispositivos descubiertos (pinchando sobre el signo mas), aparece un nuevo informe en el área «Información detallada». Puede comprobar el tipo de dispositivo y su descripción original, la versión del protocolo y la velocidad de procesamiento actual, los datos de identificación del dispositivo (VID – vendor ID, PID – product ID) y su número de serie. Además, muestra el modelo, el fabricante y el proveedor del dispositivo. Quizá la información que más le interese sea el proveedor del chip, el número de pieza (chip de la CPU) y el código de identificación de la memoria flash (el chip Flash que hay dentro de la unidad USB).

En la siguiente imagen podemos ver como nos da información sobre la unidad D donde tenemos un pen-drive que queremos testear:

chipsgenius funcionando


Una unidad USB defectuosa no sólo es imposible de usar para transferir archivos, sino que puede causar la pérdida de información importante. Y si el Explorador de Windows no puede detectarla, tiene otras opciones para extraer los detalles de hardware que necesita para buscar una solución al problema, sea cual sea. ChipGenius muestra información sobre cada equipo conectado por USB, ya sea una unidad flash, una tarjeta, un teclado, un ratón o un dispositivo de almacenamiento externo. Además, con un solo clic con el botón derecho, todos los detalles se copian en el portapapeles, lo que facilita enormemente la creación de informes. Lamentablemente, por el momento no hay ninguna opción de exportación disponible.

NOTA: Algunas soluciones antivirus pueden identificar este software como malicioso. Se trata de falsas alertas positivas activadas por análisis heurísticos debido al comportamiento del programa (acceso a información de hardware). El archivo original proporcionado por el desarrollador está cifrado y requiere una contraseña para extraerlo. Esto sirve para evitar que los motores antivirus lo marquen como malicioso, pero los ficheros del archivo extraído seguirán siendo detectados y potencialmente puestos en cuarentena por su antivirus. Estamos alojando un archivo no cifrado de una versión ligeramente más antigua de ChipGenius que es marcada por menos motores antivirus y tiene una mejor oportunidad de ser utilizable sin tener que desactivar su antivirus o añadir excepciones.

Utilizando USB Device Tree Viewer

Pero si queremos estar aún mas seguros de ello, entonces vamos a utilizar USB Device Tree Viewer, la cual podremos descargar desde su página oficial. Este software muestra muchísima más información que el anterior, y está específicamente dedicado a mostrar las características nuestros puertos y dispositivos que hay conectados a él.

Pues bien, de entrada, el programa es un poco denso, pero fácilmente encontraremos el lugar a donde está conectada nuestra unidad USB si en la zona superior desplegamos Drive y buscamos nuestro USB.

Tras ser marcado en el árbol de puertos, pulsaremos sobre él y a la derecha se mostrará toda la información acerca de su interfaz. Nos fijaremos en la sección “USB Device” y dentro de esta, en las subsección “Connection Information V2”.

Aquí veremos una lista de protocolos soportados, los cuales irán marcándose en “yes” desde el más antiguo hasta el más reciente. En nuestro caso, la unidad soporta solamente USB 1.1 y USB 2.0.

Si efectuamos la misma prueba con una unidad que dice ser USB 3.0, pues tal y como se muestra, debería de aparecer un “yes” en dicha casilla.

CrystalDiskMark

CrystalDiskMark es un software de referencia gratuito que mide la velocidad de transferencia de los medios de almacenamiento de datos como HD, SSD, memoria USB, tarjeta SD y NAS. Tambien es una herramienta de benchmarking de disco duro y unidad de estado sólido (SSD) para medir el rendimiento de lectura y escritura de un disco.

Al ejecutar CrystalDiskMark, se realizan varios test de lectura y escritura en el disco seleccionado, y se genera un informe que muestra el rendimiento en términos de velocidad de lectura y escritura en MB/s. Esta herramienta es útil para medir el rendimiento de un disco y compararlo con otro, o para determinar si un disco está fallando o si hay algún problema de rendimiento.

Nada más abrir el programa podemos ver que tenemos cuatro opciones principales:

  • El primero número que va de 1 hasta 9 corresponde con el número de pasadas que va a realizar el programa. Si tiene prisa puedes seleccionar 1, pero tenga en cuenta que sus resultados pueden ser menos exactos. Un número adecuado suele ser 5.
  • El segundo parámetro hace referencia al tamaño de archivo de la prueba. Lo suyo es utilizar un tamaño de archivo parecido a los que manerajará en la realidad. 1 GiB está bien, pero si quiere reducir las posibilidades de que la caché esté alterando los resultados deberías elegir un tamaño mayor (32 GiB, por ejemplo)
  • El tercer parámetro es la letra de la unidad en la que se va a realizar el test
  • El último parámetro son las unidades de medida en las que queremos ver los resultados. Este parámetro se puede modificar antes y después de hacer el test. El resto de los parámetros hay que modificarlos antes de hacerlo.

Y una vez configurados los parámetros, solo tenemos que darle al botón All para que comience el test y esperar un poco. Ahora solo nos falta analizar los resultados. Lo primero que tenemos que entender es el significado de los parámetros de la izquierda:

  • SEQ o sequential: secuencial, acceso a datos ordenados, por ejemplo 1, 2, 3, 4, 5…
  • RDN o random: o aleatorio, acceso a datos no ordenador, por ejemplo 5, 1, 3, 6…
  • Q o queue: cola o cuántas peticiones tiene la unidad que procesar. Con un uso normal podemos tener un valor entre 1 y 4. Ordenadores con mucho uso del almacenamiento como servidores pueden tener una cola de entre 16 y 20.
  • T o threads: número de procesos que están intentando acceder a la unidad a la vez. Si tenemos cola grande y más procesos a la vez podemos aumentar la velocidad.

Por lo tanto:

  • SEQ1M Q8T1 hace referencia a muchas operaciones largas y secuenciales (copias de archivos, instalaciones, backups…).
  • SEQ1M Q1T1 ofrece el rendimiento de pocas secuenciales.
  • RND4K Q32T1 sirve para probar operaciones pequeñas aleatorias, pero muchas a la vez
  • RND4K Q1T1 sirve para probar operaciones pequeñas aleatorias de 1 en 1

Resultados

  • En general, en el caso de los discos duros magnéticos (HDD), las operaciones secuenciales suelen ser entre 10 y 100 veces más rápidas que en las operaciones aleatorias.
  • Para las unidades de estado sólido (SSD), la diferencia entre las operaciones secuenciales y aleatorias es bastante menor, aunque las secuenciales pueden ser entre 2 y 3 veces mayores. Si no hay diferencia, es probable que el SSD sea más rápido que el método de conexión (SATA I, SATA II, etc.).
  • Tenga en cuenta que la velocidad que suelen citar los proveedores son límites teóricos, y en la práctica, será cerca de un 5-10% inferior debido al rendimiento gastado en la gestión de los datos.
crystaldiskmark funcionado

DISKPART

Diskpart es una herramienta de línea de comandos de Microsoft que se utiliza para administrar discos duros y unidades de almacenamiento en un sistema operativo Windows. Con Diskpart, puede crear, eliminar y formatear particiones en un disco duro, así como asignar y quitar letras de unidad a las particiones. También se puede utilizar para establecer una partición como activa, limpiar un disco duro y cambiar el tamaño de las particiones.


Usando diskpart, ahora dividiremos el USB en su espacio real, para ello, en primer lugar, tenemos que identificar la unidad USB y seleccionarla. Asegúrese de verlo seleccionado en la lista de discos y que es el correcto (el asterisco indica que está seleccionado).

Microsoft DiskPart versión 10.0.22000.653

Copyright (C) Microsoft Corporation.
En el equipo: DESKTOP-NA97NGE

DISKPART> list disk

  Núm Disco  Estado      Tamaño   Disp     Din  Gpt
  ---------- ----------  -------  -------  ---  ---
  Disco 0    En línea        476 GB  2048 KB        *
  Disco 1    En línea       1943 GB      0 B

DISKPART>

Es muy importante asegurarse que disco vamos a gestionar , pues una vez limpiado, se eliminan todos los archivos y particiones. En el ejemplo el disco falso es el disco 1, así que lo seleccionaremos y lo listaremos para asegurarnos que esta activo.


DISKPART> select disk 1

El disco 1 es ahora el disco seleccionado.

DISKPART> list disk

  Núm Disco  Estado      Tamaño   Disp     Din  Gpt
  ---------- ----------  -------  -------  ---  ---
  Disco 0    En línea        476 GB  2048 KB        *
* Disco 1    En línea       1943 GB      0 B

Como el disco falso esta activo, podemos proceder a limpiarlo con el comando clean.

DISKPART> clean

DiskPart ha limpiado el disco satisfactoriamente.

Ahora crearemos una partición basada en el resultado del escaneo que teníamos. En nuestro caso en el ejemplo nos daba 61GB , que en MB es 61*1024=62.464Mb, que es el tamaño que elegiremos.


DISKPART> create partition primary size=62464

DiskPart ha creado satisfactoriamente la partición especificada.

En lugar de los falsos 2TB en el ejemplo , ahora tenemos 61 Gigabytes de verdadero espacio escribible. Esto asegurará que todos los archivos escritos en el USB no estén corruptos.

DISKPART> list partition

  Núm Partición  Tipo              Tamaño   Desplazamiento
  -------------  ----------------  -------  ---------------
* Partición 1    Principal           61 GB  1024 KB

DISKPART>

Active la nueva partición pues de ese modo podremos formatearla normalmente.

DISKPART> select partition 1

La partición 1 es ahora la partición seleccionada.


Ahora el USB falso vuelve a ser auténtico.

DISKPART> active

DiskPart marca la partición actual como activa.

DISKPART>

En este momento Windows lo reconocerá como disco , y nos pedirá que procedamos a formatearlo

Es interesante destacar que podemos formatear ya en NTFS y no en FAT extendida como suelen venir. Tras unos instantes veremos que el disco es correctamente formateado a su capacidad real.

Cómo bajar los subtítulos de videos de youtube


Es posible descargar vídeos de YouTube para verlos offline utilizando una aplicación o un sitio web que proporcione esta función. Sin embargo, es importante tener en cuenta que descargar contenido de YouTube puede violar los términos de servicio de la plataforma y puede ser ilegal en algunos lugares del mundo. Asimismo, algunos vídeos pueden estar protegidos por derechos de autor y descargarlos sin permiso del autor o autores, puede ser considerado una infracción a la ley de derechos de autor.

Existen ademas de descargar el video , varias formas de descargar los subtítulos de videos. Recuerde que siempre debe asegurarse de que está descargando los subtítulos de una fuente confiable y respetuosa de los derechos de autor. Aquí hay algunas opciones que puede probar:

  1. Utilizar una aplicación o sitio web especializado: hay muchas aplicaciones y sitios web que permiten buscar y descargar subtítulos de forma rápida y sencilla. Algunas opciones populares incluyen Subscene, OpenSubtitles y Sublight.
  2. Descargar subtítulos a través del reproductor de video: algunos reproductores de video, como VLC, tienen una opción que permite buscar y descargar subtítulos automáticamente mientras reproduce un video.
  3. Descargar subtítulos manualmente: puede buscar manualmente los subtítulos en línea y descargarlos a su ordenador. Luego, puede cargarlos en su reproductor de video manualmente.
  4. Descargar los subtítulos a través de la API de YouTube: si tiene conocimientos de programación, puede utilizar la API de YouTube para descargar los subtítulos de un video.
  5. Usar una aplicación especifica, lo cual vamos a ver en este post.

Si desea descargar vídeos de YouTube para verlos offline, le sugerimos utilizar una aplicación o sitio web que sea seguro y legal, y asegurarse de tener permiso para descargar el contenido que desea ver. Algunas opciones populares incluyen aTube Catcher, TubeMate y 4K Video Downloader. Es importante también tener en cuenta que descargar vídeos de YouTube puede consumir una gran cantidad de ancho de banda y puede llevar mucho tiempo, dependiendo del tamaño del archivo y de la velocidad de su conexión a Internet.

Si le gusta descargar vídeos de YouTube para verlos offline después o usarlos dentro de una presentación, sabrá lo molesto que es encontrarse con uno que contiene subtítulos pero que, en lugar de estar incrustados, utilizando el sistema del sitio (Closed Captions) para colocarlos. En este post presentamos varias  opciones para bajar esos subtítulos que nos pueden ser muy interesantes para muchas cosas.

El programa Google2SRT

Google2SRT es un programa gratuito escrito en Java que permite descargar subtítulos de vídeos de YouTube y guardarlos en formato SRT (SubRip Text).Además  nos da la opción de elegir cual subtítulo bajar en el caso de que haya varios idiomas disponibles en el vídeo. Esto es útil si necesita los subtítulos de un vídeo de YouTube para verlo sin conexión o para utilizarlos con otro software de reproducción de vídeo.

Para descargar subtítulos con Google2SRT, primero debe tener instalado Python en tu ordenador. Luego, puede descargar Google2SRT desde su página oficial en GitHub y seguir las instrucciones para instalar y utilizar el programa.

Una vez que haya instalado y ejecutado Google2SRT, podrá descargar los subtítulos de un vídeo de YouTube proporcionando la URL del vídeo y seleccionando el idioma de los subtítulos que deseas descargar. El programa descargará los subtítulos en formato SRT y los guardará en su ordenador, listos para usar con cualquier reproductor de vídeo que admita subtítulos en formato SRT.

Es importante tener en cuenta que Google2SRT es una herramienta de terceros y no está afiliada de ninguna manera a YouTube. Además, descargar subtítulos de YouTube puede violar los términos de servicio de la plataforma, por lo que es importante asegurarse de tener permiso para hacerlo antes de utilizar este o cualquier otro programa para descargar subtítulos de YouTube.

Google2SRT

Por tanto, en resumen, el uso de este programa es muy sencillo: copiamos en el cuadro superior la dirección en YouTube del vídeo, elegimos donde y con qué nombre lo vamos a guardar, pinchamos “Leer” y abajo se nos mostrará las opciones de subtítulos entre las que podemos elegir (podemos elegir uno, varios o todos). Una vez marcado lo que queremos, pinchamos en “¡Ya!”.

Por cierto, este programa no requiere de instalación. En Windows, debemos ejecutar el archivo run.bat y en Linux, el run.sh. En caso de no obtener los subtítulos pegando la dirección, en el sitio viene una larga explicación de cómo hacerlo utilizando un archivo XML.

El programa 4K download

4K Video Downloader permite descargar el vídeo, el audio y los subtítulos de YouTube en alta calidad y lo más rápido que el ordenador y la conexión lo permita. Si desea que el vídeo en su iPad, iPhone o cualquier otro dispositivo, la descarga es simple y sencilla: sólo tiene que copiar el enlace de vídeo desde su navegador y hacer clic en «pegar la URL ‘. Es por tanto una aplicación de escritorio para Windows, Mac y Linux que permite descargar vídeos de alta definición de diferentes sitios de vídeo en línea, incluyendo YouTube. Con 4K Video Downloader, puede descargar vídeos en diferentes formatos y calidades, incluyendo 4K, y guardarlos en su ordenador para verlos sin conexión.

Para descargar un vídeo con 4K Video Downloader, primero debe instalar la aplicación en su ordenador y luego copiar la URL del vídeo de YouTube que desea descargar. A continuación, abra 4K Video Downloader y pegue la URL del vídeo en el campo correspondiente. Luego, seleccione el formato y la calidad en la que deseas descargar el vídeo y haz clic en «Descargar». La aplicación descargará el vídeo en tu ordenador y lo guardará en la ubicación que hayas especificado.

Es importante tener en cuenta que descargar vídeos de YouTube puede violar los términos de servicio de la plataforma y puede ser ilegal en algunos lugares. Además, algunos vídeos pueden estar protegidos por derechos de autor y descargarlos sin permiso puede ser considerado una infracción a la ley de derechos de autor. Por lo tanto, es importante asegurarse de tener permiso para descargar el vídeo que deseas ver antes de utilizar una aplicación como 4K Video Downloader.

No hay barras de herramientas, sin adware, sin el malware . Y lo mejor de todo es que es GRATIS Video Downloader! Disfrutar de sus vídeos en cualquier lugar, en cualquier momento, y por supuesto, incluso cuando no esté es posible, solo tiene que seguir estos sencilos pasos;

1-Descargar  el programa aqui : https://www.4kdownload.com/products/product-videodownloader

2-Automaticamente detecta la última url del video de YouTube visto. Si  no  es detectado, simplemente  basta con copiar en el portapapeles  la url de youtube del video requerido.

4k-download

3-En uno  minutos estará disponible la extracción del video  y el texto.

4k-video-download

4-Se almacenan ambos ficheros en la carpeta personal en Videos salvo que se personalice

carpetas

5-Podemos abrir   el fichero  spt con nuestro editor de texto preferido ( notepad++, textpad , o el propio bloc de notas de Windows)

Alginas características interesantes de este programa:

  • Se pueden descargar listas de reproducción completas y canales de YouTube y guardarlos en MP4, MKV, M4A, MP3, FLV, 3G, generar el archivo .m3u para las listas de reproducción. Asimismo se puede descargar vídeo en HD a 1080p, 720p HD o 4K calidad y disfrutar de vídeo de alta definición en su televisor UHD o 4K.
  • Cuenta características avanzadas para la descarga de subtítulos, simplemente seleccione si desea tener archivos  .srt o subtítulos (embedd) en el archivo de vídeo para verlo en su Mac, por ejemplo.
  • Podemos activar «Smart Mode» con el fin de aplicar los ajustes seleccionados para todas sus descargas, fácil y rápido.
  • Podemos descargar vídeo en formato 3D si se encuentra un pequeño icono especial entre los formatos disponibles después de análisis de vídeo. Es realmente impresionante ver en vivo y dibujos animados en 3D.
  • Se puede suscribir a canales de YouTube dentro de 4K Video Downloader y los nuevos vídeos se descargarán automáticamente en el equipo justo después de que se cargan en un canal por su propietario.
  • Cuenta con soporte de 360 ° vídeos ,es decir los vídeos que se han creado con una cámara que registra simultáneamente todos los 360 grados de una escena, permitiendo cambiar el ángulo de visión de vídeo arrastrando con el ratón.
  • También es posible descargar vídeos de YouTube insertados desde cualquier página web: sólo tiene que copiar / pegar enlace y el programa se encuentra la fuente de descarga. Igualmente se puede descargar vídeo y audio de Vimeo , SoundCloud , Flickr , Facebook y DailyMotion .
  • Por cierto para terminar 4K Video Downloader esta disponible para PC, Mac o Linux, no importa qué sistema operativo que prefiera.

Youtube Caption Downloader

Youtube Caption Downloader es una herramienta en línea que permite descargar los subtítulos o las transcripciones de vídeos de YouTube en diferentes idiomas y formatos. Algunos de los formatos disponibles incluyen SRT (SubRip Text), VTT (Web Video Text Tracks) y TXT (texto plano).

El sw es una extensión para Firefox que nos añade un enlace bajo el vídeo para descargarnos los subtítulos en formato .SRT, de manera que luego podamos usarlos offline o incluso editarlos.

descargas-Youtube-Caption-Downloader

Para descargar los subtítulos de un vídeo de YouTube con Youtube Caption Downloader, siga estos pasos:

  1. Abra Youtube Caption Downloader en su navegador web FireFox.
  2. Copie la URL del vídeo de YouTube del que quiere descargar los subtítulos.
  3. Pégueala en el campo de texto de Youtube Caption Downloader y haga clic en «Go».
  4. Seleccione el idioma y el formato de los subtítulos que desea descargar.
  5. Haga clic en «Download» para iniciar la descarga del archivo con los subtítulos.

Es importante tener en cuenta que descargar subtítulos de YouTube puede violar los términos de servicio de la plataforma y puede ser ilegal en algunos lugares. Además, algunos vídeos pueden estar protegidos por derechos de autor y descargar sus subtítulos sin permiso puede ser considerado una infracción a la ley de derechos de autor. Por lo tanto, es importante asegurarse de tener permiso para descargar los subtítulos del vídeo que deseas ver antes de utilizar una herramienta como Youtube Caption Downloader.

Como nota, aunque esta extensión cumple con lo prometido, según reportam algunos usuarios excepto cuando hay subtítulos en varios idiomas puede ser complejo que nos baje el que nos interesa. Salvo este detalle (importante sólo si el vídeo tiene varios subtítulos), me parece un complemento bastante útil.

Enlace a Youtube Caption Downloader :https://addons.mozilla.org/es-ES/firefox/addon/223371/

!Socorro! !Windows no me reconoce mi disco duro externo!


En ocasiones por un mal procedimiento intencionado (o no ) puede quedar inaccesible una unidad externa dejando de ser reconocido por el sistema operativo y por tanto dejando de ser visible en el sistema de archivos de su equipo ( por ejemplo no apareciendo en el explorador de archivos).

En primer lugar, para comprobar que esto es así aun si no aparece, nos iremos al administrador de discos a ver si nuestra unidad es reconocida al menos a bajo nivel por el Sistema Operativo.

Bien , si hemos llegado y el disco es visible desde el Administrador de Discos, entonces físicamente el disco puede estar bien de modo que SI NO LE IMPORTA PERDER LA INFORMACIÓN ALMACENADA, lo mas obvio es intentar desde el interfaz de administrador de discos formatear el disco problemático pinchando sobre el disco , botón derecho, formatear de modo que podemos en una primera instancia intentar un formateo rápido y si falla un formateo normal… ¿y si vuelve a fallar? Pues nos veremos obligados a realizar un formateo a bajo nivel lo cual vamos a ver .

Recordemos: formatear una unidad de almacenamiento nos lleva a borrar todos sus ficheros, y establecer un nuevo sistema de archivos. Al formatear, “limpiamos” por completo nuestro disco y borramos toda la información… ¿O no?

La realidad es que hay dos tipos principales de formateo. El más usado es el formateo rápido de alto nivel. Lo que se hace es, en vez de borrar los ficheros, marcar sus cabeceras como que están borrados. Es decir, se borran las referencias a los ficheros, aquello que nos permite localizarlos dentro del sistema de archivos, pero no se borran los datos en sí. El formateo a bajo nivel se reconoce como uno de los tres procesos de formateo de disco, el resto de los cuales son el formateo de particiones y de alto nivel. El formateo a bajo nivel marca las superficies de los discos con marcadores que indican el inicio de un bloque de grabación y otra información como el bloque CRC para ser usado más tarde, en operaciones normales, por el controlador de disco para leer o escribir datos. Esto se piensa para ser la fundación permanente del disco y se termina a menudo en la fábrica.

El formato a bajo nivel es extremadamente útil y significativo cuando la unidad de disco duro o algunos dispositivos de almacenamiento extraíbles desarrollaron pistas defectuosas, como la pista 0 defectuosa, o cuando Windows no pudo completar el formato debido a la protección contra escritura ( a veces provocada por malfuncionamiento o por infección severa por virus informáticos).

Un formateo de bajo nivel se diferencia de uno rápido en que también se borran todos los datos almacenados en el disco. ¿Cómo? Pues escribiendo un 0 o un 1 en todos y cada uno de los bits del disco, para así eliminar por completo los datos que hemos escrito.

Debe saber que el formateo a bajo nivel daña el disco duro y acelera su muerte y además, lleva mucho tiempo. Se estima que el formato de bajo nivel de un disco duro de 320 GB tarda unas 20 horas o incluso más.

Formateo a bajo nivel

¿Sabe cuántas formas de formatear un disco duro a bajo nivel? En resumen, hay tres acercamientos típicos, incluyendo comando del DOS, utilidades incorporada del disco de la impulsión del disco o del USB, y herramientas para formatear a bajo nivel.

Aquí viene la parte crucial, ¿cuál es la mejor herramienta que facilita la forma de formateo a bajo nivel? Independientemente de las críticas de 5 estrellas del sitio de descarga de CNet, el software para formatear a bajo nivel de HDDGURU recibe retroalimentación positiva de usuarios personales/hogar así como de usuarios comerciales/profesionales, que lo promocionan como el mejor software de formato de bajo nivel para las marcas de discos duros más populares, como Seagate, Samsung, Western Digital, Toshiba, Maxtor, etc. Además hay un aliciente extra !ES GRATIS PARA USO PERSONAL!

Por medio de HDD Low Level Format Tool (herramienta para formatear a bajo nivel), el formateo a bajo nivel se hará más fácil y rápido, incluso a un principiante pues puede borrar y formatear a bajo nivel una unidad de disco duro SATA, IDE, SAS, SCSI o SSD, y también funcionará con cualquier unidad externa USB y de firmware, así como con soportes SD, MMC, MemoryStick y CompactFlash.

Los sistemas operativos compatibles son MS Windows XP, Vista, 7, 8, Server 2003, 2008, 2008R2 pero también funciona en Windows 10 y Windows 11. Los interfaces compatibles son : S-ATA (SATA), IDE (E-IDE), SCSI, SAS, USB, FIREWIRE y soporta discos grandes (LBA-48).Algunos de los fabricantes soportados son Maxtor, Hitachi, Seagate, Samsung, Toshiba, Fujitsu, IBM, Quantum, Western Digital, y casi cualquier otro que no figure en esta lista.
El programa también soporta el formateo de bajo nivel de tarjetas FLASH (SD, MMC, MemoryStick y CompactFlash) utilizando un lector de tarjetas.

Como comentábamos, esta utilidad de formateo de bajo nivel de discos duros es gratuita para uso doméstico por lo que puede borrar y formatear a bajo nivel un disco duro SATA, IDE, SAS, SCSI o SSD. También funciona con cualquier carcasa de unidad externa USB y FIREWIRE, así como con medios SD, MMC, MemoryStick y CompactFlash. Asimismo hay disponible una opción para borrar rápidamente las particiones y los datos MBR.

ADVERTENCIA: Después de ejecutar esta herramienta de formato de bajo nivel, se borrará toda la superficie del disco y la restauración de los datos es imposible después de usar esta utilidad.

Notas :Si sólo se consigue entre 1,0 y 1,5 MB por segundo, aunque se supone que algunos sean medios mucho más rápidos, se debe a que estará utilizando una interfaz muy lenta (1-1,5 MB por segundo es en realidad el límite del USB 1.0, por lo que debería investigar los problemas de los puertos USB). Otra razón para las velocidades lentas podría ser que el dispositivo de almacenamiento tiene algún daño.
La herramienta tiene un límite de 50 MB por segundo en el modo libre. Si su medio es más lento que 50 MB/s, entonces no verá ningún aumento de velocidad. La herramienta no puede ir más rápido de lo que su dispositivo de almacenamiento permite.

Formateo a bajo nivel de un micro SD/USB/Disco duro

Estos son los pasos que seguiremos para formatear a bajo nivel una unidad que nos da problemas:

  • Instalar e «HDD Low Level Format«, elige un sitio oficial o un sitio de descarga cnet para descargarlo e instalarlo en su PC. Para descargarlo, solamente debemos entrar en la página oficial de HDD LLF Low Level Format Tool. Encontrará un montón de información, pero debe localizar la parte de Download. No le ponemos los enlaces directamente, para que así descargue siempre la última versión. Hay dos tipos de descargas:
    • “Download Windows Installer”: esta opción es la mejor si planea utilizar el programa varias veces, o tiene una licencia ya que lo instalará en tu PC.
    • “Download Windows Executable”: si solo quiere usarlo una vez, para evitar instalarlo descarga directamente el ejecutable. Tan solo con abrirlo podrás usarlo.
  • Conectar el disco duro o la unidad USB o micro SD al ordenador ( puede que necesite permisos de administrador) .
  • Ejecute la herramienta para formatear a bajo nivel.
  • Se recomienda expulsar todas las unidades para minimizar errores.
  • Asegúrese en la lista que nos ofrece que el dispositivo está en la lista ( normalmente ser el que este más abajo)
  • Seleccione con extremo cuidado la unidad deseada y haga clic en Continuar. Confirma la opción haciendo clic en Continue>>>.
  • Seleccione la pestaña «Low-Level Format» para proceder a acceder a la funcionalidad de formateo a bajo nivel.
  • Pulse «FORMAT THIS DEVICE» y espere a que concluya el proceso

Y tras unas horas ( según la capacidad del disco). debería de dar un mensaje similar al siguiente:

Por cierto, no merece la pena utilizar este programa con un SSD pues  es mejor usarlo solo con discos duros mecánicos dado que los SSD son sensibles a las escrituras excesivas. De hecho los fabricantes de placas base y de SSD han desarrollado el Secure Erase, con el que nos podemos asegurar de que toda nuestra información esté borrada de forma segura y eficaz.

¿Cómo usar el disco duro, unidad USB o tarjeta de memoria después de formatearlo a bajo nivel?

El propósito de un formateo completo de bajo nivel de una unidad de disco duro es rellenarla a cero para que los datos borrados nunca puedan ser restaurados y corregir errores. Por lo tanto, tenga cuidado al elegir este tipo de proceso de formateo.

No terminó todavía después de que el formateo a bajo nivel de tu disco duro, siempre y cuando decide ponerlo en uso normal. Para tu información, el formato de bajo nivel es la acción previa a un formato de alto nivel. En otras palabras, sólo mediante un formateo a alto nivel, puedes utilizar la unidad para el almacenamiento de datos después de realizar un formato de bajo nivel.

Por lo tanto, debe dar un paso más después de usar programa para formatear a bajo nivel gratis para que su disco duro problemático vuelva a su vida útil. Puede usar un programa para gestionar particiones  como EaseUS para formatear su disco duro con un sistema de archivos, como NTFS o FAT32, para que pueda utilizarse en un dispositivo específico o también puede recurrir a la propia utilidad administrador de discos de Windows.

Aparece el disco sin inicializar. Ahora sobre disco 3 daremos botón derecho «inicializar disco«

Ahora seleccione la tabla de particiones GPT si no es un disco de arranque:

Con esto inicializaremos el disco y empezara el asistente de nuevo volumen:

Ahora lo normal es asignar el máximo espacio disponible a la unidad:

Para hacer accesible la unidad deberemos darle un nombre a la unidad, letra que podemos cambiar en este momento

Después ya solo queda formatear la unidad (aconsejamos NTFS)

Y con esto ya tendremos nuestra unidad disponible para volverla a usar y esperemos que no vuelva a dar problemas.

Como ejecutar un cuaderno de Jupyter Notebook en Visual Studio Code


En efecto gracias a la extensión de Jupyter para Visual Studio Code podemos ejecutar nuestros cuadernos en python de Jupyter Notebook desde el interfaz de Visual Studio Code, editor que como probablemente amigo lector sabrà es gratuito y uno de los más potentes IDEs hasta la fecha.

Jupyter Notebook es una herramienta increíblemente poderosa para desarrollar y presentar proyectos de ciencia de datos de forma interactiva. Este post intentara guiarle de cómo usar Jupyter Notebooks para proyectos de ciencia de datos y cómo configurarlo en su máquina local pero en vez de usar un navegador lo cual nos genera ciertos problemas ( versionado, restauración de código , etc.) lo usaremos desde el potente IDE de Visual Studio Code.

jupyter-notebook las mejores herramientas gratuitas de ciencia de datos

Pero primero: ¿qué es un “cuaderno”?

Un cuaderno integra código y su salida en un solo documento que combina visualizaciones, texto narrativo, ecuaciones matemáticas y otros medios enriquecidos. En otras palabras: es un documento único en el que puede ejecutar código, mostrar el resultado y también agregar explicaciones, fórmulas, gráficos y hacer que su trabajo sea más transparente, comprensible, repetible y compartible. 

El uso de Notebooks es ahora una parte importante del flujo de trabajo de la ciencia de datos en empresas de todo el mundo. Si su objetivo es trabajar con datos, el uso de una computadora portátil acelerará su flujo de trabajo y facilitará la comunicación y el intercambio de resultados. 

Lo mejor de todo es que, como parte del proyecto de código abierto  Jupyter , los cuadernos de Jupyter son completamente gratuitos. Puede descargar el software  solo o como parte del kit de herramientas de ciencia de datos de Anaconda .

Aunque es posible utilizar muchos lenguajes de programación diferentes en Jupyter Notebooks, nos centraremosen Python, ya que es el caso de uso más común. (Entre los usuarios de R, R Studio  tiende a ser una opción más popular).Jupyter Notebooks también puede actuar como una plataforma flexible para familiarizarse con los pandas e incluso con Python, como se verá en este tutorial.


Las extensiones de Visual Studio Code proporcionan soporte básico de cuaderno para los kernels de lenguaje que son compatibles con los cuadernos Jupyter hoy en día. Muchos kernels de lenguaje funcionarán sin ninguna modificación. Para habilitar las características avanzadas, pueden ser necesarias modificaciones en las extensiones de lenguaje de VS Code.

La extensión Jupyter incluye por defecto las extensiones Jupyter Keymaps y Jupyter Notebook Renderers. La extensión Jupyter Keymaps proporciona mapas de teclado consistentes con Jupyter y la extensión Jupyter Notebook Renderers proporciona renderizadores para tipos MIME como latex, plotly, vega, y similares. Ambas extensiones pueden deshabilitarse o desinstalarse. Y por cierto, la extensión está disponible en varios idiomas: de, en, es, fa, fr, it, ja, ko-kr, nl, pl, pt-br, ru, tr, zh-cn, zh-tw

La Extensión Jupyter utiliza el soporte de cuadernos incorporado de VS Code. Esta interfaz de usuario ofrece una serie de ventajas a los usuarios de cuadernos:

  • Soporte inmediato de la amplia gama de funciones básicas de edición de código de VS Code, como la salida en caliente, la búsqueda y el reemplazo, y el plegado de código.
  • Extensiones del editor como VIM, coloración de corchetes, linters y muchas más están disponibles mientras se edita una celda.
  • Profunda integración con el banco de trabajo general y con las funciones basadas en archivos de VS Code, como la vista de esquema (tabla de contenidos), las migas de pan y otras operaciones.
  • Tiempos de carga rápidos para los archivos Jupyter notebook (.ipynb). Cualquier archivo de cuaderno se carga y renderiza lo más rápidamente posible, mientras que las operaciones relacionadas con la ejecución se inicializan entre bastidores.
  • Incluye una herramienta de diferencias para cuadernos, que facilita la comparación y la visualización de las diferencias entre las celdas de código, los resultados y los metadatos.
  • Extensibilidad más allá de lo que proporciona la extensión Jupyter. Las extensiones ahora pueden añadir su propio lenguaje o tiempo de ejecución específico a los cuadernos, como los cuadernos interactivos de .NET y Gather
  • Aunque la extensión de Jupyter viene con un amplio conjunto de los renderizadores más utilizados para la salida, el mercado admite renderizadores personalizados instalables para que el trabajo con tus cuadernos sea aún más productivo. Para empezar a escribir los tuyos propios, consulta la documentación de la api de renderizadores de VS Code.

Trabajar con Python


Si quiere trabajar con Python sólo tiene que asegurarte de que utiliza la última versión de la Extensión Python para disfrutar de la asociación conjunta de las Extensiones Python y Juypter.

Por favor, siga las instrucciones de Léame de la Extensión Python para empezar y visite la Documentación de Python para aprender más sobre cómo la Extensión Python y Jupyter trabajan juntas para proporcionar una experiencia óptima de cuadernos Python.

Ejecutar por línea


Para iniciar una sesión de depuración ligera y ejecutar celdas de código línea por línea en cuadernos de Python, pulse F10 mientras selecciona una celda o haga clic en el botón Ejecutar por línea de la barra de herramientas de la celda. También admite núcleos remotos.

Una vez que inicies una sesión de Ejecutar por Línea, aparecerá el Explorador de Variables y los valores de las variables se actualizarán a medida que itera a través de su código.

Para recorrer el resto de la celda durante una sesión Run by Line pulse Ctrl+Enter. Para parar, puede hacer clic en el botón de interrupción en el lado izquierdo de la celda.


Por cierto como ya se ha comentado ,la Extensión Jupyter soporta otros lenguajes además de Python como Julia, R y C#.

Estsos serian los pasos a seguir para un Inicio rápido


Para crear un nuevo cuaderno, abra la paleta de comandos (Windows: Ctrl + Shift + P, macOS: Command + Shift + P) y seleccione el comando «Crear: Nuevo cuaderno Jupyter».

Selecciona su kernel haciendo clic en el selector de kernel en la parte superior derecha del cuaderno o invocando el comando «Notebook: Seleccionar núcleo de cuaderno».(Notebook: Select Notebook Kernel)

Cambie el idioma de la celda haciendo clic en el selector de idioma o invocando el comando «Cuaderno: Cambiar idioma de la celda». (Notebook: Change Cell Language)

Comandos útiles


Abre la paleta de comandos (Comando+Mayúsculas+P en macOS y Ctrl+Mayúsculas+P en Windows/Linux) y escribe uno de los siguientes comandos:

CommandDescription
Create: New Jupyter NotebookCreate: New Jupyter Notebook
Notebook: Select Notebook KernelSelect or switch kernels within your notebook
Notebook: Change Cell LanguageChange the language of the cell currently in focus
Jupyter: Export to HTML Jupyter: Export to PDFCreate a presentation-friendly version of your notebook in HTML or PDF

Para ver todos los comandos disponibles de Jupyter Notebook, abra la paleta de comandos y escriba Jupyter o Notebook.

Teclas de contexto para los enlaces de teclas


Puede utilizar las teclas de contexto de la extensión en cláusulas «cuando». He aquí un ejemplo:

  {
    "key": "ctrl+i",
    "command": "jupyter.runAndDebugCell",
    "when": "!jupyter.webExtension"
  }

Ese keybinding establece que el comando jupyter.runAndDebugCell debe asignarse a CTRL+I cuando no está en la jupyter.webExtension.

La lista completa de teclas de contexto se puede encontrar aquí: https://github.com/microsoft/vscode-jupyter/wiki/Extensibility-for-other-extensions#context-keys-for-keybindings

Mas información:


Aprenda más sobre las ricas características de la extensión Jupyter:

IntelliSense: Edite su código con autocompletado, navegación por el código, comprobación de sintaxis y mucho más. (mas info en https://code.visualstudio.com/docs/python/editing#_autocomplete-and-intellisense)

Cuadernos Jupyter: Cree y edite cuadernos Jupyter, añada y ejecute celdas de código/marcadas, haga trazados, cree versiones de su cuaderno aptas para la presentación exportándolas a HTML o PDF y mucho más. (mas info en https://code.visualstudio.com/docs/python/jupyter-support)

Descarga extension Jupyter para Visual Studio Code:Mas información en https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter

Como convertir ficheros m4a a mp3 sin morir en el intento


Em este post veremos cómo podemos grabar un CD de música directamente con Windows partiendo de ficheros m4a , sin usar ninguna aplicación adicional de conversión de mp4 a mp3 que no venga preinstalada, puesto que la mayoría de la aplicaciones comerciales de conversión , y que prometen ser gratuitas, en realidad tienen limitaciones en cuanto al numero de canciones , tamaño, etc. Para ello, usaremos un viejo conocido que lleva muchos años con nosotros: el Reproductor de Windows Media.

Aunque sin lugar a dudas hay mejores aplicaciones para grabar CD (al 99,9% de pago ), si lo hacemos muy esporádicamente, y quizás no queramos instalar nada adicional ( puesto que el 99.9% nos van a pedir que pasemos por caja camuflados en versiones gratuitas que necesitaremos actualizar para usar la funcionalidad requerida), el Reproductor de Windows Media incluido en Windows 10 y que no tenemos que pagar nada nos puede servir perfectamente en dichos casos.

En efecto ,con el reproductor de Windows Media incluido de serie en el sistema operativo, se pueden grabar tres tipos de discos: CDs de audio, CDs de datos y DVDs de datos. Para decidir qué tipo de disco debe usar, debe tener en cuenta qué quiere copiar, qué tamaño tiene y cómo quiere reproducir el disco.

Esta tabla le puede ayudar a decidir qué tipo de disco va a usar.

Tipo de discoDescripción
CD de audioElija esta opción si quiere crear un CD de música que pueda reproducir en un automóvil con solo viejo lector de CD ( sin capacidad de reproducir mp3) o en su viejo equipo estéreo con capacidad de leer solo Cd’s. Use esta opción por tanto solo para música «sin compresión» .Capacidad: hasta 80 minutos.
CD de datosPuede reproducir un CD de datos en PCs y en algunos reproductores de CDs y DVDs modernos. El dispositivo debe ser compatible con los tipos de archivos que va a agregar al disco, como WMA, MP3, JPEG o Windows Media Video (WMV).
Elija esta opción si tiene mucha música y un reproductor de CD o DVD que puede reproducir los tipos de archivos que va a agregar al disco o si quieres realizar una copia de seguridad de tu contenido multimedia. Use por ello esta opción para música, imágenes y vídeos. La capacidad es de aproximadamente 700 megabytes (MB) u ocho horas de música.
DVD de datosPuedes reproducir un DVD de datos en PCs y en algunos reproductores de DVDs. El dispositivo debe admitir los tipos de archivos que agregas al disco, como WMA, MP3, JPEG o WMV. Elija esta opción si tiene muchos archivos que no caben en un solo CD, ya que un DVD de datos contiene mucho espacio. Usa esta opción para música, imágenes y vídeos. La capacidad es de aproximadamente 4,7 gigabytes (GB) o 54 horas de música.

Puede crear un CD que almacene unos 80 minutos de música y se reproducirá en casi cualquier reproductor de CD o puede crear un CD o DVD de datos que contenga varias horas de música y que se reproduzca en PCs o reproductores modernos que admitan formatos de audio comprimidos. Un CD de datos funciona en reproductores de CD que admiten los tipos de archivo copiados en el disco.

Para grabar un CD de audio, sigue estos pasos:  

  1. Abra el Reproductor de Windows Media.
  2. En la biblioteca del reproductor, seleccione la pestaña grabar , seleccione el botón opciones de grabación Botón Opcionesy, a continuación, seleccione CD de audio o CD o DVD de datos.
  3. Inserte un disco en blanco en la grabadora de CD o DVD.

    Si su equipo tiene más de una unidad de CD o DVD, seleccione la unidad que desea usar.
  4. Busque los elementos que quieras grabar en el disco en la Biblioteca del reproductor y arrástrelos al panel de lista (en el margen derecho de la Biblioteca del reproductor) para crear una lista de grabación.
  5. Cuando termine con la lista, pulse o haz clic en Iniciar grabación.

Conversión de m4a a mp3

1- Abra los archivos M4A con Windows Media Player. Puede hacer clic en buscar en el archivo M4A y arrastrarlo y soltarlo en Windows Media Player y aparecerá en la biblioteca.

2- Vaya a la esquina superior izquierda del menú y haz clic en el botón «Organizar». Desde allí, haga clic en «Opciones» y luego en «Grabar Música».

3- En la nueva ventana que aparecerá, haga clic en «Copiar música» y luego desplácese hacia abajo y haga clic en «Cambiar» para seleccionar un destino para el archivo convertido.

Ahora vaya al botón «Formatear» y haga clic en el menú desplegable. Desde allí, desplaces hacia abajo y haga clic en el formato «MP3». También puedes establecer la tasa de bits del audio ( lo ideal es ponerlo a lo máximo, para que nos de la máxima calidad).

Una vez termine su lista de reproducción, si la capacidad libre resultante del CD es pequeña (este valor aparece en la esquina superior derecha en función del CD que se haya insertado ), pulse el botón Iniciar grabación .

El proceso de grabación se compone de varios pasos: primero, la aplicación prepara las canciones, lo cual puede tomar algo de tiempo, después empieza la grabación de verdad.

Si su PC va un poco justo de potencia le recomiendo que no lo use mientras se está grabando el CD, pues podría provocar un error durante la grabación que deje el disco virgen ilegible.

Una vez termine la grabación se expulsará el disco automáticamente.

Nota: en caso de usar una grabadora externa, en caso de que no aparezca como reconocida en el reproductor de windows media, simplemente con la grabadora conectada cierre la aplicación WM por completo y vuelva abrirla

Sugerencias: 

  • Si quiere cambiar el orden de los elementos de la lista de grabación, arrástralos arriba o abajo en la lista.
  • Si quiere quitar un elemento de la lista de grabación, haga clic con el botón derecho en él y seleccione Quitar de la lista. De este modo, quitará el elemento de la lista de grabación, pero no del equipo.
  • Si la lista tiene demasiados elementos para un solo disco, puede grabar el resto en otro disco.

Cómo habilitar la ejecución de macros en PowerPoint


Una macro está compuesta por una serie de comandos que puede usar para automatizar una tarea repetitiva, y se puede ejecutar cuando haya que realizar la tarea. Este post intentar aclarar con información acerca de los riesgos relacionados con el trabajo con macros, y le permitirá aprender a habilitar o deshabilitar macros en el Centro de confianza.

Las macros automatizan tareas usadas frecuentemente para ahorrar tiempo en pulsaciones de tecla y acciones del mouse. Muchas se crearon con Microsoft Visual Basic para Aplicaciones (VBA) y son diseñadas por programadores de software.

Sin embargo, algunas macros pueden suponer un riesgo de seguridad. Desgraciadamente algunas macros suelen ser usadas por personas con intenciones malintencionadas para instalar de forma silenciosa malware, como un virus, en el equipo o en la red de su organización.

Crear una macro de forma lícita

Entraremos al menú Macros ( tenga en cuenta que para sea visible debemos habilitar en la cinta el menú de programador) , escribiremos el nombre del la nueva macro y pulsaremos Crear.

Como ejemplo del código en VB, vemos a continuación el código en VB para mostrar en cada slide una barra de progreso que avanza en función del numero de diapositiva . Este código si esta de acuerdo lo podemos copiar desde la ventana de edición de VB:

Sub BarraDeProgreso()
On Error Resume Next
Height = 10 ' cambiar este valor para modificar la altura de la barra de progreso
With ActivePresentation
For X = 1 To .Slides.Count
.Slides(X).Shapes("A").Delete
.Slides(X).Shapes("B").Delete
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
0, .PageSetup.SlideHeight - Height, _
X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(0, 153, 204) ' cambiar los valores de RGB para personalizar el color de la barra
s.Line.Visible = msoFalse
s.Name = "A"
Set s = .Slides(X).Shapes.AddShape(msoShapeRectangle, _
X * .PageSetup.SlideWidth / .Slides.Count, .PageSetup.SlideHeight - Height, _
.PageSetup.SlideWidth - X * .PageSetup.SlideWidth / .Slides.Count, Height)
s.Fill.ForeColor.RGB = RGB(255, 255, 255)
s.Line.Visible = msoFalse
s.Name = "B"
Next X:
End With


End Sub

Como vemos en la imagen copiaremos el código en VB ( si estamos de acuerdo ) y salvaremos la macro desde la opción «Archivo» y «Guardar».

Ahora solo nos queda ejecutar la macro desde el menú «Ejecutar».

Nunca habilite macros en un Office a menos que esté seguro de lo que hacen esas macros. Las macros inesperadas pueden suponer un riesgo de seguridad importante. No tiene que habilitar macros para ver o editar el archivo; solo si desea la funcionalidad proporcionada por la macro.

Habilitar macros cuando aparece la barra de mensajes

Cuando abre un archivo con macros, aparece la barra de mensajes amarilla con un icono de escudo y el botón Habilitar contenido. Si sabe que las macros proceden de un origen confiable, use las siguientes instrucciones:

  • En la Barra de mensajes, haga clic en Habilitar contenido.
    El archivo se abre y es un documento de confianza.

La imagen siguiente es un ejemplo de la barra de mensajes cuando hay macros en el archivo.

Barra de mensajes de advertencia de seguridad para macros

Habilitar macros solo para la sesión actual

Utilice las siguientes instrucciones para habilitar macros mientras el archivo esté abierto. Cuando cierre el archivo y, a continuación, vuelva a abrirlo, la advertencia aparecerá de nuevo.

Nota: Este proceso solo funciona si ha abierto un archivo que contiene macros.

  1. Haga clic en la pestaña Archivo.
  2. En el área Advertencia de seguridad, haga clic en Habilitar contenido.
  3. Seleccione Opciones avanzadas.
  4. En el cuadro de diálogo Opciones de seguridad de Microsoft Office, haga clic en Habilitar contenido para esta sesión para cada macro.
  5. Haga clic en Aceptar.

Cambiar la configuración de las macros en el Centro de confianza

La configuración de las macros se encuentra en el Centro de confianza. Sin embargo, si el dispositivo es administrado por su trabajo o escuela, el administrador del sistema podría impedir que alguien cambie la configuración.

Al cambiar la configuración de las macros en el Centro de confianza, solo cambia en el programa de Office que esté usando. La configuración de la macro no cambia para todos los programas de Office.

  1. Haga clic en la pestaña Archivo.
  2. Haga clic en Opciones.
  3. Haga clic en Centro de confianza y, después, en Configuración del Centro de confianza.
  4. En Centro de confianza, haga clic en Configuración de macros.

    Área Configuración de macros del Centro de confianza
  5. Haga las selecciones que desee y, a continuación, haga clic en Aceptar.

Las macros pueden agregar una gran cantidad de funcionalidad a Office, pero a menudo las usan personas con intenciones incorrectas para distribuir malware a las víctimas que no se dan cuenta del ataque.

Las macros no son necesarias para su uso diario, como leer o editar un documento en Word o usar libros de Excel. En la mayoría de los casos, puede hacer todo lo que necesita hacer en Office sin necesidad de permitir la ejecución de macros.

¿Qué debo hacer ahora?

¿Sigue preguntándose si debe continuar?

  • ❒ ¿Esperaba recibir un archivo con macros? Nunca abra un archivo adjunto que no esperaba, incluso si parece provenir de alguien de confianza. A menudo, los ataques de suplantación de identidad (phishing) provienen de una persona u organización en la que confía en un esfuerzo por ayudarle a abrirlos.
  • ❒ ¿Le están recomendando habilitar el contenido que proviene de un desconocido? Una táctica común de los atacantes es crear algún intento previo, como cancelar un pedido o leer un documento legal. Le pedirán que descargue un documento e intente animarle a permitir la ejecución de macros. Ninguna empresa legítima le hará abrir un archivo de Excel para cancelar un pedido y no necesita macros solo para leer un documento en Word.
  • ❒ ¿Le están recomendando habilitar el contenido mediante un mensaje emergente? Si ha descargado el archivo desde un sitio web, es posible que vea elementos emergentes u otros mensajes que le animen a habilitar el contenido activo. Estas también son tácticas comunes de los atacantes y deberían provocar sospechas de que el archivo no es realmente seguro.

Si un archivo descargado de Internet quiere permitir macros y no está seguro de lo que hacen esas macros, lo más probable es que deba eliminar ese archivo. 

Si está seguro de que el archivo es seguro y desea desbloquear macros

  1. Guarda el archivo en un disco duro local o en un recurso compartido en la nube como OneDrive.
  2. Abra el Explorador de archivos de Windows y vaya a la carpeta donde ha guardado el archivo.
  3. Haga clic con el botón derecho en el archivo y elija Propiedades en el menú contextual.
  4. En la parte inferior de la pestaña General , seleccione la casilla Desbloquear y seleccione Aceptar.

De qué manera puede el malware infectar su PC

Estas son algunas de las formas más comunes de que sus dispositivos se infecten con el malware.

Correos spam

Los autores de malware suelen intentar engañarle para que descargue archivos malintencionados. Puede ser un correo con un archivo adjunto que te indica que es una confirmación de entrega, un reembolso de impuestos o una factura. Es posible que diga que tienes que abrir el adjunto para recibir los elementos o dinero.

Si abre el adjunto, terminará instalando malware en tu PC.

En ocasiones un correo malintencionado puede ser sencillo de detectar; podría estar mal escrito con una ortografía o gramática incorrectas, o provenir de una dirección de correo que no hayas visto antes. Sin embargo, estos correos también pueden parecer provenir de un negocio legítimo o de alguien que conoces. Algún malware puede piratear cuentas de correo electrónico y usarlas para enviar spam malintencionado a los contactos que se encuentre.

Para reducir las posibilidades de que el dispositivo se infecte:

  • Si no está seguro de quién te envió el correo, o algo no le convence, no lo abra.
  • Nunca haga clic en un vínculo inesperado en un correo electrónico. Si parece que procede de una organización en la que confía o con la que hace negocios y cree que puede ser legítima, abra el explorador web y vaya al sitio web de la organización desde su propio favorito guardado o desde una búsqueda en Internet.
  • No abra datos adjuntos a un correo electrónico que no esperaba, aunque parezca que procede de alguien en quien confía.

Macros Office malintencionados

Microsoft Office incluye un potente lenguaje de scripting que permite a los desarrolladores crear herramientas avanzadas para ayudarle a ser más productivo. Desafortunadamente, los delincuentes también pueden usar ese lenguaje de scripting para crear scripts malintencionados que instalen malware o hagan otras cosas malas.

Si abre un archivo Office y ve un aviso como este:

La barra de mensajes

No habilite ese contenido a menos que esté seguro de que sabe exactamente lo que hace, incluso si el archivo parece venir de alguien en quien confía.

 Un truco popular de los delincuentes es decirle que se le va a cobrar por un servicio por el que nunca se suscribió. Al ponerse en contacto con ellos para protestar, le dicen que para cancelar el servicio solo tiene que descargar un archivo Excel que proporcionan y rellenar algunos detalles. Si descarga y abre el archivo Excel mostrará la advertencia que ve anteriormente. Si selecciona Habilitar contenido, la macro malintencionada se ejecutará e infectará el sistema.

Ninguna compañía legítima le hará abrir un archivo Office solo para cancelar un servicio. Si uno le pide que lo haga, cuelgue sobre ellos. Es una estafa y no hay ningún servicio que tenga que cancelar.

Unidades extraíbles infectadas

Muchos gusanos se propagan infectando unidades extraíbles, como unidades flash USB o unidades de disco duro externas. El malware puede instalarse automáticamente al conectar la unidad infectada a tu PC. 

Hay algunas cosas que puede hacer para evitar este tipo de infección:

  • Tenga mucho cuidado con cualquier dispositivo USB que no le pertenezca. Si encuentra un dispositivo USB que aparentemente se ha perdido o se ha descartado, piénselo dos veces antes de conectarlo a un equipo que tenga información que le importe.
  • En ocasiones, los atacantes abandonan deliberadamente dispositivos USB infectados que se colocan en áreas populares con la esperanza de que alguien los encuentre y los conecte en su equipo. Esto se denomina «ataque de colocación USB».
  • Si no lo enchufa, no le infectará. Si encuentra una unidad USB que acaba de colocarse, aparentemente perdida, vea si hay una recepcionista cercana, o perdida y encontrada, a la que puede entregarla. 
  • Si enchufa un dispositivo extraíble desconocido en el equipo, asegúrese de ejecutar un examen de seguridad de él inmediatamente.

Integrado con otro software

Algún malware se puede instalar al mismo tiempo como otros programas que descargas. Esto incluye software de sitios web de terceros o archivos compartidos a través de redes punto a punto.

Algunos programas también instalarán otro software que Microsoft detecta como software potencialmente no deseado. Esto puede incluir barras de herramientas o programas que te muestran anuncios adicionales mientras navegas por la web. Por lo general, para optar por no participar y no instalar este software adicional, desactiva una casilla durante la instalación. Seguridad de Windows puede ayudarle a protegerse de aplicaciones potencialmente no deseadas.

Los programas que se usan para generar claves de software (keygens) a menudo instalan malware al mismo tiempo. El software de seguridad de Microsoft busca malware en más de la mitad de los equipos con keygens instalados.

Puede evitar instalar malware o software potencialmente no deseado de este modo:

  • Descargando siempre el software en el sitio web del proveedor oficial.
  • Asegurándose de que lee exactamente lo que va a instalar; no haga simplemente clic en Aceptar.

Páginas web en peligro o pirateadas

El malware puede usar vulnerabilidades de software conocidas para infectar el equipo. Una vulnerabilidad es similar a un agujero en el software que puede proporcionar acceso al malware a tu PC.

Cuando vaya a un sitio web, puede intentar usar vulnerabilidades en el explorador web para infectar el equipo con malware. El sitio web puede ser malintencionado o podría ser un sitio web legítimo que se haya puesto en peligro o se haya pirateado.

Por eso es muy importante mantener todo el software, especialmente el explorador web, actualizado y quitar el software que no usa. Esto incluye extensiones de explorador sin usar.

Otro malware

Algunos tipos de malware pueden descargar otras amenazas en tu PC. Una vez que estas amenazas se instalen en tu PC, seguirán descargando más amenazas.

La mejor protección contra malware y software potencialmente no deseado es un producto de seguridad actualizado y en tiempo real, como por ejemplo el Antivirus de Microsoft Defender .

Fuente: Microsoft.com

Public or Perish


» Publicar o perecer » es un aforismo que describe la presión de publicar trabajos académicos para tener éxito en una carrera académica . Tal presión institucional es generalmente más fuerte en las universidades de investigación . Algunos investigadores han identificado el entorno de publicar o perecer como un factor que contribuye a la crisis de replicación .Las publicaciones exitosas llaman la atención sobre los académicos y sus instituciones patrocinadoras, lo que puede ayudar a continuar con la financiación y sus carreras. En la percepción académica popular, los académicos que publican con poca frecuencia o que se enfocan en actividades que no resultan en publicaciones, como instruir a estudiantes universitarios , pueden perder terreno en la competencia por los puestos de tenencia disponibles. La presión para publicar se ha citado como una de las causas de los trabajos deficientes que se envían a las revistas académicas . El valor del trabajo publicado a menudo está determinado por el prestigio de la revista académica en la que se publica. Las revistas se pueden medir por su factor de impacto (FI) , que es el es el número promedio de citas de los artículos publicados en una revista en particular. Veremos en este post una interesante aplicación gratuita que nos puede ayudar a tener una visión mas clara sobre el mundo de las citas bibliográficas.

Publish or Perish es un programa de software que recupera y analiza citas académicas. Utiliza una variedad de fuentes de datos para obtener las citas sin procesar, luego las analiza y presenta una variedad de métricas de citas , incluida la cantidad de artículos, el total de citas y el índice h.

Las fuentes de datos disponibles actualmente son:

Fuente de datosnotas
referencia cruzadaDisponible de forma gratuita
Google AcadémicoDisponible de forma gratuita
Perfil de Google AcadémicoDisponible de forma gratuita
Microsoft académicoRequiere una suscripción gratuita de Microsoft
Nota: Microsoft ha anunciado que su fuente de datos se suspenderá después del 31 de diciembre de 2021
AbrirAlexDisponible de forma gratuita. Actualmente (febrero de 2022) en las primeras etapas de desarrollo con opciones de búsqueda limitadas. Realizaremos un seguimiento de los desarrollos futuros.
PubMedDisponible de forma gratuita
ScopusRequiere una clave API gratuita de Elsevier
Académico semánticoRequiere una clave API gratuita de Semantic Scholar
Web de la CienciaRequiere una suscripción de Clarivate (normalmente proporcionada por su organización)
Importación de datos externosPermite importar datos obtenidos externamente de Web of Science, RefMan, EndNote y muchos otros.

Los resultados están disponibles en pantalla y también pueden copiarse en el portapapeles de Windows o macOS (para pegarlos en otras aplicaciones) o guardarse en una variedad de formatos de salida (para referencia futura o análisis adicional). Publish or Perish incluye un archivo de ayuda detallado con sugerencias de búsqueda e información adicional sobre las métricas de citas.

Para qué sirve Publish or Perish

¿Está solicitando una titularidad, un ascenso o un nuevo trabajo ? ¿Necesita prepararse para su evaluación de desempeño? Publish or Perish está diseñado para ayudar a académicos individuales a presentar su caso para el impacto de la investigación de la mejor manera posible, incluso si tiene muy pocas citas .

También puede usarlo para decidir a qué revistas enviar , prepararse para una entrevista de trabajo , hacer una revisión de la literatura , hacer una investigación bibliométrica , escribir elogios u obituarios , o hacer algunos deberes antes de conocer a su héroe académico .! Publish or Perish es una auténtica navaja suiza! .

Descargar e instalar Publish or Perish

El software Publish or Perish está disponible gratuita como aplicaciones de Microsoft Windows y Apple macOS; la versión de Windows también se puede instalar y utilizar en ordenadores GNU/Linux con la ayuda de un emulador adecuado como CrossOver Linux o Wine.

La versión de Windows de Publish or Perish está disponible para descargar siguiendo las instrucciones a continuación. El paquete de descarga contiene un instalador para Microsoft Windows y está firmado digitalmente por Tarma Software Research Ltd.

Nota: El instalador del software Publish or Perish NO requiere derechos de administrador. Puede instalar el software Publish or Perish en su computadora incluso como un usuario sin privilegios.

Acuerdo de licencia

Publish or Perish se proporciona por cortesía de Harzing.com. Es gratis para uso personal sin fines de lucro; consulte el Acuerdo de licencia de usuario final para conocer los términos y condiciones completos de la licencia.

Requisitos del sistema

Verifique que su ordenador cumple con los siguientes requisitos mínimos del sistema:

  • Windows 7, 8, 8.1, 10 y 11, incluidas las ediciones x64 y Server.
  • Algo de memoria (suficiente para ejecutar el sistema operativo, no mucho más).
  • Algo de espacio en el disco duro (ídem).
  • Una conexión a Internet.

Descargar información

Descargue el instalador del software Publish or Perish del sitio web Harzing.com:

Instalador PoP Instalador de Publish or Perish para Windows (1.8 MB)

Versión: 8.2.3944 (23 de marzo de 2022) 

Instrucciones de instalación

Inicie el instalador de PoP8Setup.exe haciendo doble clic en el archivo que acaba de descargar. En la mayoría de los sistemas, ahora aparecerá un cuadro de diálogo de advertencia de seguridad similar a uno de los siguientes.

Windows 10 (actualización 1607 y posterior):

UAC de Windows 10 (actualización 1607)

Windows 10 (original) y Windows 8.x:

Pantalla UAC de Windows 10

Windows 7:

Caja UAC de Windows 7

Haga clic en Ejecutar , Continuar o  después de haber verificado que el nombre del editor es Tarma Software Research Ltd.

(Nota: antes del 15 de agosto de 2014, nuestros instaladores estaban firmados por Tarma Software Research Pty Ltd ; estos también están bien).

Ahora se iniciará el instalador. Siga las instrucciones en pantalla para confirmar su aceptación del acuerdo de licencia e instalar el software Publish or Perish en su computadora.

Nota: si tiene una versión anterior de Publish or Perish en su computadora, se eliminará automáticamente antes de que se instale la nueva versión. Sus consultas se conservan durante el proceso de actualización.

Una vez completada la instalación, puede iniciar Publish or Perish a través del menú Inicio de Windows: haga clic en el botón del menú Inicio , luego en Todos los programas y luego en Publish or Perish 7 .

Si alguna vez necesita eliminar el software Publish or Perish de su sistema, use el panel de control Agregar o quitar programas.

Cómo citar el software Publish or Perish

Si está utilizando el software Publish or Perish en uno de sus artículos de investigación o desea hacer referencia a él, utilice el siguiente formato:

Harzing, AW (2007) Publish or Perish , disponible en  https://harzing.com/resources/publish-or-perish

Cronología de las versiones principales de Publish or Perish

Consultas utiles en Oracle parte 2 de 2


¿Quién no tiene su chuleta de consultas útiles que se suelen utilizar en el día a día, y en nuestras aventuras y desventuras con un BBDD  Oracle? En esta segunda  entrega  vamos  a continuar con el  resumen de consultas SQL de Oracle,  basadas  la mayoría sobre las vistas del diccionario de Oracle,  y animo a todo el que quiera añadir otras que considere de utilidad a responder el post publicando las suyas, a ver si entre todos creamos un repositorio que podamos consultar desde cualquier lugar para facilitarnos la vida, o sacarnos de algún que otro apuro.

Continuando   con las  consultas generales de  parámetros de la BBDD    vamos a ver  una serie de consultas  para conocer  datos sobre la volumetría de lo que ocupan  nuestros datos en  la BBDD.

Consulta Oracle SQL para conocer el tamaño de los ficheros de datos de la base de datos

Veremos así el tamaño en MB ocupado en total

select sum(bytes)/1024/1024 MB from dba_data_files

Consulta Oracle SQL para conocer el tamaño ocupado por una tabla concreta sin incluir los índices de la misma

select sum(bytes)/1024/1024 MB from user_segments
where segment_type='TABLE' and segment_name='NOMBRETABLA'

Consulta Oracle SQL para conocer el tamaño ocupado por una tabla concreta incluyendo los índices de la misma

select sum(bytes)/1024/1024 Table_Allocation_MB from user_segments where segment_type in (‘TABLE’,’INDEX’) and (segment_name=’NOMBRETABLA’ or segment_name in (select index_name from user_indexes where table_name=’NOMBRETABLA’))

Consulta Oracle SQL para conocer el tamaño ocupado por una columna de una tabla

select sum(vsize('NOMBRECOLUMNA'))/1024/1024 MB from NOMBRETABLA

 Consulta Oracle SQL para conocer el espacio ocupado por usuario

SELECT owner, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by owner

Consulta Oracle SQL para conocer el espacio ocupado por los diferentes segmentos    (tablas, índices, undo, rollback, cluster, …)

SELECT SEGMENT_TYPE, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_TYPE

Consulta Oracle SQL para conocer el espacio ocupado por todos los objetos de la base de datos,   muestra los objetos que más ocupan primero

SELECT SEGMENT_NAME, SUM(BYTES)/1024/1024 MB FROM DBA_EXTENTS
group by SEGMENT_NAME
order by 2 desc


Consulta Oracle SQL para el DBA de Oracle que muestra los tablespaces,   el espacio utilizado, el espacio libre y los ficheros de datos de los mismos

Select t.tablespace_name "Tablespace", t.status "Estado",
ROUND(MAX(d.bytes)/1024/1024,2) "MB Tamaño",
ROUND((MAX(d.bytes)/1024/1024) -
(SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024),2) "MB Usados",
ROUND(SUM(decode(f.bytes, NULL,0, f.bytes))/1024/1024,2) "MB Libres",
t.pct_increase "% incremento",
SUBSTR(d.file_name,1,80) "Fichero de datos"
FROM DBA_FREE_SPACE f, DBA_DATA_FILES d, DBA_TABLESPACES t
WHERE t.tablespace_name = d.tablespace_name AND
f.tablespace_name(+) = d.tablespace_name
AND f.file_id(+) = d.file_id GROUP BY t.tablespace_name,
d.file_name, t.pct_increase, t.status ORDER BY 1,3 DESC

Consultas  sobre el Diccionario de datos

Esta es una de las consultas mas potentes pues incluye todas las vistas y tablas de la Base de Datos. segun la version de la BBDD Oracle  puede llegar la consulta  a lanzar el resultados de unss 500 tablas.

Simplemente    para obtenerla podemos lanzar la siguiente consulta:

select * from dictionary

Estas son las principales  tablas en una  BBDD Oracle 9:

  • ALL_ALL_TABLES Descripción de todos los objetos y tablas relacionales accesibles para el usuario
  • ALL_APPLY Detalles sobre cada proceso de aplicación que se retira de la cola visible para el usuario actual
  • ALL_APPLY_CONFLICT_COLUMNS Detalles sobre la resolución de conflictos en tablas visibles para el usuario actual
  • ALL_APPLY_DML_HANDLERS Detalles sobre el controlador dml en tablas visibles para el usuario actual
  • ALL_APPLY_ERROR Transacciones de error que se generaron después de retirarse de la cola visible para el usuario actual
  • ALL_APPLY_KEY_COLUMNS Columnas de teclas alternativas para una tabla STREAMS visible para el usuario actual
  • ALL_APPLY_PARAMETERS Detalles sobre los parámetros de cada proceso de aplicación que se retira de la cola visible para el usuario actual
  • ALL_APPLY_PROGRESS Información sobre el progreso realizado por el proceso de solicitud que se retira de la cola visible para el usuario actual
  • ALL_ARGUMENTS Argumentos en un objeto accesible para el usuario
  • ALL_ASSOCIATIONS Todas las asociaciones disponibles para el usuario.
  • ALL_AUDIT_POLICIES Todas las políticas de auditoría detalladas en la base de datos ALL_BASE_TABLE_MVIEWS Todas las vistas materializadas con registro (s) en la base de datos que el usuario puede ver
  • ALL_CAPTURE Detalles sobre cada proceso de captura que almacena los cambios capturados en una cola visible para el usuario actual
  • ALL_CAPTURE_PARAMETERS Detalles sobre los parámetros para cada proceso de captura que almacena los cambios capturados en una cola visible para el usuario actual
  • ALL_CAPTURE_PREPARED_DATABASE ¿La base de datos local está preparada para la creación de instancias?
  • ALL_CAPTURE_PREPARED_SCHEMAS Todos los esquemas de usuario en la base de datos local que están preparados para la instanciación
  • ALL_CAPTURE_PREPARED_TABLES Todas las tablas visibles para el usuario actual que están preparadas para la instanciación
  • ALL_CATALOG Todas las tablas, vistas, sinónimos y secuencias accesibles para el usuario.
  • ALL_CLUSTERS Descripción de los clústeres accesibles para el usuario.
  • ALL_CLUSTER_HASH_EXPRESSIONS Funciones hash para todos los clústeres accesibles
  • ALL_COLL_TYPES Descripción de los tipos de colección con nombre accesibles para el usuario
  • ALL_COL_COMMENTS Comentarios en columnas de tablas y vistas accesibles
  • ALL_COL_PRIVS Subvenciones en columnas para las cuales el usuario es el otorgante, el concesionario, el propietario o un rol habilitado o PUBLIC es el concesionario
  • ALL_COL_PRIVS_MADE Donaciones en columnas para las cuales el usuario es propietario o otorgante
  • ALL_COL_PRIVS_RECD Otorga en columnas para las cuales el usuario, PUBLIC o rol habilitado es el concesionario
  • ALL_CONSTRAINTS Definiciones de restricciones en tablas accesibles
  • ALL_CONS_COLUMNS Información sobre columnas accesibles en definiciones de restricciones
  • ALL_CONS_OBJ_COLUMNS Lista de tipos a los que se restringe una columna o atributo de objeto en las tablas accesibles para el usuario
  • ALL_CONTEXT Descripción de todos los espacios de nombres de contexto activos en la sesión actual
  • ALL_DB_LINKS Enlaces de base de datos accesibles para el usuario
  • ALL_DEF_AUDIT_OPTS Opciones de auditoría para objetos recién creados
  • ALL_DEPENDENCIES Dependencias hacia y desde objetos accesibles para el usuario
  • ALL_DIMENSIONS Descripción de los objetos de dimensión accesibles para el DBA
  • ALL_DIM_ATTRIBUTES Representación de la relación entre un nivel de dimensión y una columna funcionalmente dependiente
  • ALL_DIM_CHILD_OF Representación de una relación jerárquica 1: n entre un par de niveles en una dimensión
  • ALL_DIM_HIERARCHIES Representación de una jerarquía de dimensiones
  • ALL_DIM_JOIN_KEY Representación de una unión entre dos tablas de dimensiones.
  • ALL_DIM_LEVELS Descripción de los niveles de dimensión visibles para DBA
  • ALL_DIM_LEVEL_KEY Representaciones de columnas de un nivel de dimensión
  • ALL_DIRECTORIES Descripción de todos los directorios accesibles para el usuario
  • ALL_ERRORS Errores actuales en objetos almacenados que el usuario puede crear
  • ALL_EVALUATION_CONTEXTS contextos de evaluación de reglas vistos por el usuario Tablas
  • ALL_EVALUATION_CONTEXT_TABLES en todos los contextos de evaluación de reglas vistos por el usuario
  • ALL_EVALUATION_CONTEXT_VARS variables en todos los contextos de evaluación de reglas vistos por el usuario
  • ALL_EXTERNAL_LOCATIONS Descripción de las ubicaciones de tablas externas accesibles para el usuario
  • ALL_EXTERNAL_TABLES Descripción de las tablas externas accesibles para el usuario ALL_INDEXES Descripciones de índices en tablas accesibles para el usuario
  • ALL_INDEXTYPES Todos los tipos de índice disponibles para el usuario
  • ALL_INDEXTYPE_COMMENTS Comentarios para tipos de índice definidos por el usuario
  • ALL_INDEXTYPE_OPERATORS Todos los operadores disponibles para el usuario
  • ALL THE_COLUMNS COLUMNAS que comprenden ÍNDICES en TABLAS accesibles
  • ALL_IND_EXPRESSIONS EXPRESIONES DE ÍNDICE FUNCIONALES en TABLAS accesibles
  • ALL_IND_PARTITIONS ALL_IND_SUBPARTITIONS ALL_INTERNAL_TRIGGERS Descripción de los disparadores internos en las tablas accesibles para el usuario
  • ALL_JOIN_IND_COLUMNS columnas de índice de unión que comprenden las condiciones de unión
  • ALL_LIBRARIES Descripción de bibliotecas accesibles para el usuario
  • ALL_LOBS Descripción de los LOB contenidos en tablas accesibles para el usuario
  • ALL_LOB_PARTITIONS ALL_LOB_SUBPARTITIONS ALL_LOB_TEMPLATES ALL_LOG_GROUPS Definiciones de grupos de registro en tablas accesibles
  • ALL_LOG_GROUP_COLUMNS Información sobre columnas en definiciones de grupos de registro
  • ALL_METHOD_PARAMS Descripción de los parámetros del método de los tipos accesibles para el usuario
  • ALL_METHOD_RESULTS «Descripción de los resultados del método de tipos accesibles al usuario «
  • ALL_MVIEWS Todas las vistas materializadas en la base de datos
  • ALL_MVIEW_AGGREGATES Descripción de los agregados de vista materializados accesibles para el usuario
  • ALL_MVIEW_ANALYSIS Descripción de las vistas materializadas accesibles para el usuario
  • ALL_MVIEW_DETAIL_RELATIONS Descripción de las tablas de detalles de la vista materializada accesibles para el usuario
  • ALL_MVIEW_JOINS «Descripción de una unión entre dos columnas en la cláusula WHERE de una vista materializada accesible para el usuario «
  • ALL_MVIEW_KEYS «Descripción de las columnas que aparecen en GROUP BY lista de una vista materializada accesible para el usuario «
  • ALL_MVIEW_LOGS Todos los registros de vista materializados en la base de datos que el usuario puede ver
  • ALL_MVIEW_REFRESH_TIMES Vistas materializadas y sus últimos tiempos de actualización para cada tabla maestra que el usuario puede ver
  • ALL_NESTED_TABLES Descripción de tablas anidadas en tablas accesibles para el usuario
  • ALL_OBJECTS Objetos accesibles para el usuario
  • ALL_OBJECT_TABLES Descripción de todas las tablas de objetos accesibles para el usuario
  • ALL_OBJ_COLATTRS Descripción de las columnas de objetos y atributos contenidos en las tablas accesibles para el usuario
  • ALL_OPANCILLARY Todos los operadores auxiliares disponibles para el usuario
  • ALL_OPARGUMENTS Todos los argumentos de los operadores disponibles para el usuario
  • ALL_OPBINDINGS Todas las funciones de enlace para operadores disponibles para el usuario
  • ALL_OPERATORS Todos los operadores disponibles para el usuario
  • ALL_OPERATOR_COMMENTS Comentarios para operadores definidos por el usuario
  • ALL_PARTIAL_DROP_TABS Todas las tablas con columnas descartadas parcialmente accesibles para el usuario
  • ALL_PART_COL_STATISTICS
  • ALL_PART_HISTOGRAMS
  • ALL_PART_INDEXES
  • ALL_PART_KEY_COLUMNS
  • ALL_PART_LOBS
  • ALL_PART_TABLES
  • ALL_PENDING_CONV_TABLES Todas las tablas accesibles para el usuario que no están actualizadas a la última versión de tipo
  • ALL_POLICIES Todas las políticas para objetos si el usuario tiene privilegios del sistema o posee los objetos
  • ALL_POLICY_CONTEXTS Todo el contexto de conducción de políticas definido para todos los sinónimos, tablas o vistas accesibles para el usuario
  • ALL_POLICY_GROUPS Todos los grupos de políticas definidos para cualquier sinónimo, tabla o vista accesible para el usuario
  • ALL_PROBE_OBJECTS
  • ALL_PROCEDURES Descripción de todos los procedimientos disponibles para el usuario.
  • ALL_PROPAGATION Propagación de secuencias vista por el usuario
  • ALL_PUBLISHED_COLUMNS
  • ALL_QUEUES Todas las colas accesibles para el usuario
  • ALL_QUEUE_PUBLISHERS
  • ALL_QUEUE_TABLES Todas las tablas de colas accesibles para el usuario
  • ALL_REFRESH Todos los grupos de actualización que el usuario puede tocar
  • ALL_REFRESH_CHILDREN Todos los objetos en grupos de actualización, donde el usuario puede tocar el grupo
  • ALL_REFRESH_DEPENDENCIES «Descripción de las tablas de detalles de las que dependen las vistas materializadas para actualizar»
  • ALL_REFS Descripción de las columnas REF contenidas en tablas accesibles para el usuario
  • ALL_REGISSTEM_MVIEWS Vistas materializadas remotas de tablas locales que el usuario puede ver
  • ALL_REGISSTEM_SNAPSHOTS Instantáneas remotas de tablas locales que el usuario puede ver
  • ALL_REGISTRY_BANNERS
  • ALL_REPAUDIT_ATTRIBUTE Información sobre atributos mantenidos automáticamente para la replicación
  • ALL_REPAUDIT_COLUMN Información sobre columnas en todas las tablas de sombra para tablas replicadas que son accesibles para el usuario
  • ALL_REPCAT
  • ALL_REPCATLOG Información sobre solicitudes de administración asincrónicas
  • ALL_REPCOLUMN Columnas de nivel superior replicadas (tabla) ordenadas alfabéticamente en orden ascendente
  • ALL_REPCOLUMN_GROUP Todos los grupos de columnas de tablas replicadas que son accesibles para el usuario
  • ALL_REPCONFLICT Todos los conflictos con las resoluciones disponibles para las tablas replicadas del usuario
  • ALL_REPDDL Argumentos que no caben en un único registro de registro repcat
  • ALL_REPFLAVORS Sabores definidos para grupos de objetos replicados
  • ALL_REPFLAVOR_COLUMNS Columnas replicadas en sabores
  • ALL_REPFLAVOR_OBJECTS Objetos replicados en sabores
  • ALL_REPGENERATED Objetos generados para admitir la replicación
  • ALL_REPGENOBJECTS Objetos generados para admitir la replicación
  • ALL_REPGROUP Información sobre grupos de objetos replicados
  • ALL_REPGROUPED_COLUMN Columnas en todos los grupos de columnas de tablas replicadas que son accesibles para el usuario
  • ALL_REPGROUP_PRIVILEGES Información sobre usuarios que están registrados para privilegios de grupo de objetos
  • ALL_REPKEY_COLUMNS Columnas primarias para una tabla que usa replicación a nivel de columna
  • ALL_REPOBJECT Información sobre objetos replicados
  • ALL_REPPARAMETER_COLUMN Todas las columnas utilizadas para resolver conflictos en tablas replicadas que son accesibles para el usuario
  • ALL_REPPRIORITY Valores y sus prioridades correspondientes en todos los grupos de prioridad accesibles para el usuario
  • ALL_REPPRIORITY_GROUP Información sobre todos los grupos prioritarios accesibles para el usuario
  • ALL_REPPROP Información de propagación sobre objetos replicados
  • ALL_REPRESOLUTION Descripción de todas las resoluciones de conflictos para tablas replicadas que son accesibles para el usuario
  • ALL_REPRESOLUTION_METHOD Todos los métodos de resolución de conflictos accesibles para el usuario
  • ALL_REPRESOLUTION_STATISTICS Estadísticas de resolución de conflictos para tablas replicadas que son accesibles para el usuario
  • ALL_REPRESOL_STATS_CONTROL Información sobre la recopilación de estadísticas para la resolución de conflictos para tablas replicadas que son accesibles para el usuario Información de replicación ALL_REPSCHEMA N-way
  • ALL_REPSITES Información de replicación N-way
  • ALL_RULES Reglas vistas por el usuario
  • ALL_RULESETS Reglas vistas por el usuario: mantenidas para compatibilidad con versiones anteriores
  • ALL_RULE_SETS Conjuntos de reglas vistas por el usuario
  • ALL_RULE_SET_RULES Reglas en todos los conjuntos de reglas que ve el usuario
  • ALL_SECONDARY_OBJECTS Todos los objetos secundarios para índices de dominio
  • ALL_SEQUENCES Descripción de las SECUENCIAS accesibles para el usuario Instantáneas de ALL_SNAPSHOTS a las que puede acceder el usuario
  • ALL_SNAPSHOT_LOGS Todos los registros de instantáneas en la base de datos que el usuario puede ver
  • ALL_SOURCE Fuente actual en objetos almacenados que el usuario puede crear
  • ALL_SOURCE_TABLES
  • ALL_SOURCE_TAB_COLUMNS
  • ALL_SQLJ_TYPES Descripción de los tipos accesibles para el usuario
  • ALL_SQLJ_TYPE_ATTRS Descripción de los atributos de los tipos accesibles para el usuario
  • ALL_SQLJ_TYPE_METHODS Descripción de los métodos de tipos accesibles para el usuario
  • ALL_STORED_SETTINGS Configuración de parámetros para objetos accesibles para el usuario
  • ALL_STREAMS_GLOBAL_RULES Reglas globales creadas en el proceso de captura / aplicación / propagación de secuencias que interactúan con la cola visible para el usuario actual
  • ALL_STREAMS_SCHEMA_RULES Reglas creadas por las API administrativas de secuencias en todos los esquemas de usuario
  • ALL_STREAMS_TABLE_RULES Reglas creadas por las API administrativas de secuencias en tablas visibles para el usuario actual
  • ALL_SUBPARTITION_TEMPLATES
  • ALL_SUBPART_COL_STATISTICS
  • ALL_SUBPART_HISTOGRAMS
  • ALL_SUBPART_KEY_COLUMNS
  • ALL_SUBSCRIBED_COLUMNS
  • ALL_SUBSCRIBED_TABLES
  • ALL_SUBSCRIPTIONS
  • ALL_SUMDELTA Entradas de carga de ruta directa accesibles para el usuario
  • ALL_SUMMARIES Descripción de los resúmenes accesibles para el usuario.
  • ALL_SYNONYMS Todos los sinónimos accesibles para el usuario
  • ALL_TABLES Descripción de tablas relacionales accesibles para el usuario
  • ALL_TAB_COLS Columnas de tablas, vistas y clústeres de usuarios
  • ALL_TAB_COLUMNS Columnas de tablas, vistas y clústeres de usuarios
  • ALL_TAB_COL_STATISTICS Columnas de tablas, vistas y clústeres de usuarios
  • ALL_TAB_COMMENTS Comentarios sobre tablas y vistas accesibles para el usuario
  • ALL_TAB_HISTOGRAMS Histogramas en columnas de todas las tablas visibles para el usuario
  • ALL_TAB_MODIFICATIONS Información sobre modificaciones a tablas
  • ALL_TAB_PARTITIONS
  • ALL_TAB_PRIVS «Donaciones sobre objetos para los cuales el usuario es el otorgante, el concesionario, el propietario, o un rol habilitado o PUBLIC es el concesionario «
  • ALL_TAB_PRIVS_MADE Subvenciones del usuario y subvenciones sobre objetos del usuario
  • ALL_TAB_PRIVS_RECD Otorga sobre objetos para los cuales el usuario, PUBLIC o rol habilitado es el concesionario
  • ALL_TAB_SUBPARTITIONS
  • ALL_TRIGGERS Disparadores accesibles para el usuario actual
  • ALL_TRIGGER_COLS Uso de columna en activadores del usuario o en activadores en las tablas del usuario
  • ALL_TYPES Descripción de los tipos accesibles para el usuario.
  • ALL_TYPE_ATTRS Descripción de los atributos de los tipos accesibles para el usuario.
  • ALL_TYPE_METHODS Descripción de los métodos de tipos accesibles para el usuario.
  • ALL_TYPE_VERSIONS Descripción de cada tipo de versión accesible para el usuario
  • ALL_UNUSED_COL_TABS Todas las tablas con columnas no utilizadas accesibles para el usuario
  • ALL_UPDATABLE_COLUMNS Descripción de todas las columnas actualizables
  • ALL_USERS Información sobre todos los usuarios de la base de datos.
  • ALL_USTATS Todas las estadísticas
  • ALL_VARRAYS Descripción de varrays en tablas accesibles para el usuario
  • ALL_VIEWS Descripción de vistas accesibles para el usuario
  • USER_ALL_TABLES Descripción de todos los objetos y tablas relacionales propiedad del usuario.
  • USER_AQ_AGENT_PRIVS
  • USER_ARGUMENTS Argumentos en un objeto accesible para el usuario
  • USER_ASSOCIATIONS Todas las asociaciones definidas por el usuario
  • USER_ATTRIBUTE_TRANSFORMATIONS
  • USER_AUDIT_OBJECT Registros de seguimiento de auditoría para declaraciones relativas a objetos, específicamente: tabla, clúster, vista, índice, secuencia, enlace de base de datos [pública], sinónimo [público], procedimiento, disparador, segmento de reversión, espacio de tabla, rol, usuario
  • USER_AUDIT_POLICIES Todas las políticas de auditoría detalladas para objetos en el esquema de usuario
  • USER_AUDIT_SESSION Todos los registros de seguimiento de auditoría relacionados con CONECTAR y DESCONECTAR
  • USER_AUDIT_STATEMENT Registros de seguimiento de auditoría relacionados con el sistema de concesión, revocación, auditoría, no auditoría y modificación
  • USER_AUDIT_TRAIL Entradas de seguimiento de auditoría relevantes para el usuario
  • USER_AWS Espacios de trabajo analíticos propiedad del usuario
  • USER_AW_PS espacios de páginas en espacios de trabajo analíticos propiedad del usuario
  • USER_BASE_TABLE_MVIEWS Todas las vistas materializadas con registro (s) propiedad del usuario en la base de datos
  • USER_CATALOG Tablas, Vistas, Sinónimos y Secuencias propiedad del usuario
  • USER_CLUSTERS Descripciones de los propios grupos de usuarios
  • USER_CLUSTER_HASH_EXPRESSIONS Funciones hash para los clústeres hash del usuario
  • USER_CLU_COLUMNS Asignación de columnas de tabla a columnas de clúster
  • USER_COLL_TYPES Descripción de los propios tipos de colección con nombre del usuario
  • USER_COL_COMMENTS Comentarios en columnas de tablas y vistas de usuarios
  • USER_COL_PRIVS Donaciones en columnas para las cuales el usuario es el propietario, otorgante o concesionario
  • USER_COL_PRIVS_MADE Todas las concesiones en columnas de objetos propiedad del usuario
  • USER_COL_PRIVS_RECD Donaciones en columnas para las cuales el usuario es el concesionario
  • USER_CONSTRAINTS Definiciones de restricciones en las propias tablas del usuario
  • USER_CONS_COLUMNS Información sobre columnas accesibles en definiciones de restricciones
  • USER_CONS_OBJ_COLUMNS Lista de tipos a los que está restringida una columna o atributo de objeto en las tablas que posee el usuario
  • USER_DB_LINKS Enlaces de bases de datos propiedad del usuario
  • USER_DEPENDENCIES Dependencias hacia y desde los objetos de un usuario
  • USER_DIMENSIONS Descripción de los objetos de dimensión accesibles para el DBA
  • USER_DIM_ATTRIBUTES «Representación de la relación entre un nivel de dimensión y una columna funcionalmente dependiente «
  • USER_DIM_CHILD_OF «Representación de una relación jerárquica 1: n entre un par de niveles en una dimensión «
  • USER_DIM_HIERARCHIES Representación de una jerarquía de dimensiones
  • USER_DIM_JOIN_KEY Representación de una unión entre dos tablas de dimensiones.
  • USER_DIM_LEVELS Descripción de los niveles de dimensión visibles para DBA
  • USER_DIM_LEVEL_KEY Representaciones de columnas de un nivel de dimensión
  • USER_ERRORS Errores actuales en objetos almacenados propiedad del usuario
  • USER_EVALUATION_CONTEXTS contextos de evaluación de reglas propiedad del usuario Tablas USER_EVALUATION_CONTEXT_TABLES en contextos de evaluación de reglas de usuario
  • USER_EVALUATION_CONTEXT_VARS variables en contextos de evaluación de reglas de usuario
  • USER_EXTENTS Extensiones que comprenden segmentos propiedad del usuario
  • USER_EXTERNAL_LOCATIONS Descripción de las ubicaciones de tablas externas del usuario
  • USER_EXTERNAL_TABLES Descripción de las propias tablas externas del usuario
  • USER_FREE_SPACE Extensiones libres en espacios de tabla accesibles para el usuario
  • USER_INDEXES Descripción de los propios índices del usuario.
  • USER_INDEXTYPES Todos los tipos de índice de usuario
  • USER_INDEXTYPE_COMMENTS Comentarios para tipos de índice definidos por el usuario
  • USER_INDEXTYPE_OPERATORS Todos los operadores de tipo de índice de usuario
  • USER_IND_COLUMNS COLUMNs que comprenden los ÍNDICES del usuario y los ÍNDICES en las TABLAS del usuario
  • USER_IND_EXPRESSIONS Expresiones de índice funcional en índices de usuario e índices en tablas de usuario
  • USER_IND_PARTITIONS
  • USER_IND_SUBPARTITIONS
  • USER_INTERNAL_TRIGGERS Descripción de los disparadores internos en las propias tablas del usuario.
  • USER_JOBS Todos los trabajos propiedad de este usuario
  • USER_JOIN_IND_COLUMNS columnas de índice de unión que comprenden las condiciones de unión
  • USER_LIBRARIES Descripción de las propias bibliotecas del usuario.
  • USER_LOBS Descripción de los LOB propios del usuario contenidos en sus propias tablas.
  • USER_LOB_PARTITIONS
  • USER_LOB_SUBPARTITIONS
  • USER_LOB_TEMPLATES
  • USER_LOG_GROUPS Definiciones de grupos de registros en las propias tablas del usuario
  • USER_LOG_GROUP_COLUMNS Información sobre columnas en definiciones de grupos de registro
  • USER_METHOD_PARAMS Descripción de los parámetros del método de los tipos propios del usuario.
  • USER_METHOD_RESULTS Descripción de los resultados del método de los tipos propios del usuario.
  • USER_MVIEWS Todas las vistas materializadas en la base de datos
  • USER_MVIEW_AGGREGATES Descripción de los agregados de vista materializados creados por el usuario
  • USER_MVIEW_ANALYSIS Descripción de las vistas materializadas creadas por el usuario
  • USER_MVIEW_DETAIL_RELATIONS «Descripción de la vista materializada tablas de detalles de la materializada vistas creadas por el usuario «
  • USER_MVIEW_JOINS «Descripción de una unión entre dos columnas en la Cláusula WHERE de una vista materializada creada por el usuario «
  • USER_MVIEW_KEYS «Descripción de las columnas que aparecen en GROUP BY lista de una vista materializada creada por el usuario «
  • USER_MVIEW_LOGS Todos los registros de vista materializados propiedad del usuario
  • USER_MVIEW_REFRESH_TIMES Vistas materializadas y sus últimos tiempos de actualización para cada tabla maestra que el usuario puede ver
  • USER_NESTED_TABLES Descripción de tablas anidadas contenidas en las propias tablas del usuario
  • USER_OBJECTS Objetos propiedad del usuario
  • USER_OBJECT_SIZE Tamaños, en bytes, de varios objetos pl / sql
  • USER_OBJECT_TABLES Descripción de las propias tablas de objetos del usuario.
  • USER_OBJ_AUDIT_OPTS Opciones de auditoría para las propias tablas y vistas del usuario
  • USER_OBJ_COLATTRS Descripción de las columnas y atributos de los objetos contenidos en las tablas propiedad del usuario.
  • USER_OPANCILLARY Todos los operadores auxiliares definidos por el usuario
  • USER_OPARGUMENTS Todos los argumentos de operador de operadores definidos por el usuario
  • USER_OPBINDINGS Todas las funciones o métodos de enlace en operadores definidos por el usuario
  • USER_OPERATORS Todos los operadores de usuarios
  • USER_OPERATOR_COMMENTS Comentarios para operadores definidos por el usuario
  • USER_OUTLINES Contornos almacenados propiedad del usuario
  • USER_OUTLINE_HINTS Sugerencias almacenadas en contornos propiedad del usuario
  • USER_PARTIAL_DROP_TABS Tablas de usuarios con columnas no utilizadas
  • USER_PART_COL_STATISTICS
  • USER_PART_HISTOGRAMS
  • USER_PART_INDEXES
  • USER_PART_KEY_COLUMNS
  • USER_PART_LOBS
  • USER_PART_TABLES
  • USER_PASSWORD_LIMITS Muestra los límites de contraseña del usuario
  • USER_PENDING_CONV_TABLES Todas las tablas de usuario que no están actualizadas a la última versión de tipo
  • USER_POLICIES Todas las políticas de seguridad de nivel de fila para sinónimos, tablas o vistas propiedad del usuario
  • USER_POLICY_CONTEXTS Todo el contexto de conducción de políticas definido para sinónimos, tablas o vistas en el esquema actual
  • USER_POLICY_GROUPS Todos los grupos de políticas definidos para cualquier sinónimo, tabla o vista
  • USER_PROCEDURES Descripción de los propios procedimientos de los usuarios.
  • USER_PROXIES Descripción de las conexiones que el usuario puede usar como proxy
  • USER_PUBLISHED_COLUMNS
  • USER_QUEUES Todas las colas propiedad del usuario.
  • USER_QUEUE_PUBLISHERS
  • USER_QUEUE_SCHEDULES
  • USER_QUEUE_TABLES Todas las tablas de colas creadas por el usuario
  • USER_REFRESH Todos los grupos de actualización
  • USER_REFRESH_CHILDREN Todos los objetos en grupos de actualización, donde el usuario posee el grupo de actualización
  • USER_REFS Descripción de las propias columnas REF del usuario contenidas en sus propias tablas.
  • USER_REGISSTEM_MVIEWS Vistas materializadas remotas de tablas locales que actualmente usan registros propiedad del usuario
  • USER_REGISSTEM_SNAPSHOTS Instantáneas remotas de tablas locales que actualmente usan registros propiedad del usuario
  • USER_REGISTRY
  • USER_REPAUDIT_ATTRIBUTE Información sobre atributos mantenidos automáticamente para la replicación
  • USER_REPAUDIT_COLUMN Información sobre columnas en todas las tablas de sombra para tablas replicadas del usuario
  • USER_REPCAT
  • USER_REPCATLOG Información sobre las solicitudes de administración asincrónicas del usuario actual
  • USER_REPCOLUMN Columnas replicadas para la tabla del usuario actual en orden ascendente
  • USER_REPCOLUMN_GROUP Todos los grupos de columnas de las tablas replicadas del usuario
  • USER_REPCONFLICT
  • USER_REPDDL Argumentos que no caben en un solo registro de registro de repcat
  • USER_REPFLAVORS Aromatiza al usuario actual creado para grupos de objetos replicados
  • USER_REPFLAVOR_COLUMNS Columnas replicadas de tablas del usuario actual en sabores
  • USER_REPFLAVOR_OBJECTS Objetos de usuario replicados en sabores
  • USER_REPGENERATED Objetos generados para que el usuario actual admita la replicación
  • USER_REPGENOBJECTS Objetos generados para que el usuario actual admita la replicación
  • USER_REPGROUP Información de replicación sobre el usuario actual
  • USER_REPGROUPED_COLUMN Columnas en todos los grupos de columnas de las tablas replicadas del usuario
  • USER_REPGROUP_PRIVILEGES Información sobre usuarios que están registrados para privilegios de grupo de objetos
  • USER_REPKEY_COLUMNS Columnas primarias para una tabla que usa replicación a nivel de columna
  • USER_REPOBJECT Información de replicación sobre los objetos del usuario actual
  • USER_REPPARAMETER_COLUMN Todas las columnas utilizadas para resolver conflictos en las tablas replicadas del usuario
  • USER_REPPRIORITY Valores y sus prioridades correspondientes en los grupos de prioridad del usuario
  • USER_REPPRIORITY_GROUP Información sobre los grupos de prioridad del usuario
  • USER_REPPROP Información de propagación sobre los objetos del usuario actual
  • USER_REPRESOLUTION Descripción de todas las resoluciones de conflictos para las tablas replicadas del usuario
  • USER_REPRESOLUTION_METHOD Todos los métodos de resolución de conflictos accesibles para el usuario
  • USER_REPRESOLUTION_STATISTICS Estadísticas de resolución de conflictos para tablas replicadas del usuario
  • USER_REPRESOL_STATS_CONTROL Información sobre la recopilación de estadísticas para la resolución de conflictos para las tablas replicadas del usuario
  • USER_REPSCHEMA Información de replicación N-way sobre el usuario actual
  • USER_REPSITES Información de replicación N-way sobre el usuario actual
  • USER_RESOURCE_LIMITS Muestra el límite de recursos del usuario
  • USER_RESUMABLE Información de sesión reanudable para el usuario actual
  • USER_ROLE_PRIVS Roles otorgados al usuario actual
  • USER_RSRC_CONSUMER_GROUP_PRIVS Cambiar privilegios para grupos de consumidores para el usuario
  • USER_RSRC_MANAGER_SYSTEM_PRIVS privilegios del sistema para el administrador de recursos para el usuario
  • REGLAS DEL USUARIO Reglas propiedad del usuario
  • USER_RULESETS Reglas de propiedad del usuario: mantenidas para compatibilidad con versiones anteriores
  • USER_RULE_SETS Conjuntos de reglas propiedad del usuario
  • USER_RULE_SET_RULES Reglas en conjuntos de reglas de usuario
  • USER_SECONDARY_OBJECTS Todos los objetos secundarios para índices de dominio
  • USER_SEGMENTS Almacenamiento asignado para todos los segmentos de la base de datos
  • USER_SEQUENCES Descripción de las SECUENCIAS propias del usuario
  • USER_SNAPSHOTS Instantáneas que el usuario puede ver
  • USER_SNAPSHOT_LOGS Todos los registros de instantáneas propiedad del usuario
  • USER_SOURCE Fuente de objetos almacenados accesibles para el usuario
  • USER_SOURCE_TABLES
  • USER_SOURCE_TAB_COLUMNS
  • USER_SQLJ_TYPES Descripción de los tipos propios del usuario.
  • USER_SQLJ_TYPE_ATTRS Descripción de los atributos de los tipos propios del usuario
  • USER_SQLJ_TYPE_METHODS Descripción de los métodos de los propios tipos de usuario.
  • USER_STORED_SETTINGS Configuración de parámetros para objetos propiedad del usuario
  • USER_SUBPARTITION_TEMPLATES
  • USER_SUBPART_COL_STATISTICS
  • USER_SUBPART_HISTOGRAMS
  • USER_SUBPART_KEY_COLUMNS
  • USER_SUBSCRIBED_COLUMNS
  • USER_SUBSCRIBED_TABLES
  • USER_SUBSCRIPTIONS
  • USER_SUMMARIES Descripción de los resúmenes creados por el usuario.
  • USER_SYNONYMS Los sinónimos privados del usuario
  • USER_SYS_PRIVS Privilegios del sistema otorgados al usuario actual
  • USER_TABLES Descripción de las propias tablas relacionales del usuario.
  • USER_TABLESPACES Descripción de espacios de tabla accesibles
  • USER_TAB_COLS Columnas de tablas, vistas y clústeres de usuarios
  • USER_TAB_COLUMNS Columnas de tablas, vistas y clústeres de usuarios
  • USER_TAB_COL_STATISTICS Columnas de tablas, vistas y clústeres de usuarios
  • USER_TAB_COMMENTS Comentarios sobre las tablas y vistas que posee el usuario
  • USER_TAB_HISTOGRAMS Histogramas en columnas de tablas de usuario
  • USER_TAB_MODIFICATIONS Información sobre modificaciones a tablas
  • USER_TAB_PARTITIONS
  • USER_TAB_PRIVS Donaciones en objetos para los cuales el usuario es el propietario, otorgante o concesionario
  • USER_TAB_PRIVS_MADE Todas las concesiones en objetos propiedad del usuario
  • USER_TAB_PRIVS_RECD Donaciones en objetos para los cuales el usuario es el concesionario
  • USER_TAB_SUBPARTITIONS
  • USUARIO_TRANSFORMACIONES
  • USER_TRIGGERS Disparadores propiedad del usuario
  • USER_TRIGGER_COLS Uso de columna en activadores del usuario
  • USER_TS_QUOTAS Cuotas de espacio de tabla para el usuario
  • USER_TYPES Descripción de los tipos propios del usuario.
  • USER_TYPE_ATTRS Descripción de los atributos de los tipos propios del usuario.
  • USER_TYPE_METHODS Descripción de los métodos de los propios tipos de usuario.
  • USER_TYPE_VERSIONS Descripción de cada versión de los tipos de usuario.
  • USER_UNUSED_COL_TABS Tablas de usuario con columnas no utilizadas
  • USER_UPDATABLE_COLUMNS Descripción de columnas actualizables
  • USER_USERS Información sobre el usuario actual
  • USER_USTATS Todas las estadísticas en tablas o índices propiedad del usuario
  • USER_VARRAYS Descripción de las matrices contenidas en las propias tablas del usuario.
  • USER_VIEWS Descripción de las propias vistas del usuario.
  • AUDIT_ACTIONS Tabla de descripción para códigos de tipo de acción de seguimiento de auditoría. Asigna números de tipo de acción a nombres de tipo de acción
  • COLUMN_PRIVILEGES «Donaciones en columnas para las cuales el usuario es el otorgante, el concesionario, el propietario o  un rol habilitado o PUBLIC es el concesionario «
  • DATABASE_COMPATIBLE_LEVEL Conjunto de parámetros compatibles con la base de datos a través de init.ora
  • DBMS_ALERT_INFO
  • DBMS_LOCK_ALLOCATED
  • DICCIONARY Descripción de las tablas y vistas del diccionario de datos.
  • DICT_COLUMNS Descripción de columnas en tablas y vistas de diccionario de datos DOBLE
  • GLOBAL_NAME Nombre de la base de datos global
  •  INDEX_HISTOGRAM  Estadísticas en teclas con recuento repetido
  • INDEX_STATS  Estadística en el b-tree
  • NLS_DATABASE_PARAMETERS Parámetros NLS permanentes de la base de datos
  • NLS_INSTANCE_PARAMETERS Parámetros NLS de la instancia
  • NLS_SESSION_PARAMETERS Parámetros NLS de la sesión del usuario
  • RESOURCE_COST Costo por cada recurso
  • ROLE_ROLE_PRIVS Roles que se otorgan a roles
  • ROLE_SYS_PRIVS Privilegios del sistema otorgados a roles
  • ROLE_TAB_PRIVS Privilegios de tabla otorgados a roles
  • SESSION_PRIVS Privilegios que el usuario ha establecido actualmente
  • SESSION_ROLES Roles que el usuario ha habilitado actualmente.
  • TABLE_PRIVILEGES «Donaciones sobre objetos para los cuales el usuario es el otorgante, el concesionario, el propietario, o un rol habilitado o PUBLIC es el concesionario «
  • ALL_HISTOGRAMS Sinónimo de ALL_TAB_HISTOGRAMS
  • ALL_JOBS Sinónimo de USER_JOBS
  • ALL_OUTLINES Sinónimo de USER_OUTLINES
  • ALL_OUTLINE_HINTS Sinónimo de USER_OUTLINE_HINTS
  • ALL_SNAPSHOT_REFRESH_TIMES Sinónimo de ALL_MVIEW_REFRESH_TIMES
  • CAT sinonimo para USER_CATALOG
  • CLU sinonimo para USER_CLUSTERS
  • COLS sinomimo para USER_TAB_COLUMNS
  • DICT Sinónimo de DICCIONARIO
  • GV $ ACTIVE_INSTANCES Sinónimo de GV_ $ ACTIVE_INSTANCES
  • GV $ ACTIVE_SESS_POOL_MTH Sinónimo de GV_ $ ACTIVE_SESS_POOL_MTH
  • GV_ $ AW_CALC  Sinónimo de GV_ $ AW_CALC
  •  GV $ AW_OLAPSinónimo de  GV_ $ AW_OLAP
  • GV $ AW_SESSION_INFO Sinónimo de GV_ $ AW_SESSION_INFO
  • GV $ BH Sinónimo de GV_ $ BH
  • GV $ LOADISTAT Sinónimo de GV_ $ LOADISTAT
  • GV $ LOCK_ACTIVITY Sinónimo de GV_ $ LOCK_ACTIVITY
  • GV $ MAX_ACTIVE_SESS_TARGET_MTH Sinónimo de GV_ $ MAX_ACTIVE_SESS_TARGET_MTH
  • GV $ MLS_PARAMETERS Sinónimo de GV_ $ MLS_PARAMETERS
  • GV $ NLS_PARAMETERS Sinónimo de GV_ $ NLS_PARAMETERS
  • GV $ NLS_VALID_VALUES Sinónimo de GV_ $ NLS_VALID_VALUES
  • GV $ OPTION Sinónimo de GV_ $ OPTION
  • GV $ PARALLEL_DEGREE_LIMIT_MTH Sinónimo de GV_ $ PARALLEL_DEGREE_LIMIT_MTH
  • GV $ PQ_SESSTAT Sinónimo de GV_ $ PQ_SESSTAT
  • GV $ PQ_TQSTAT Sinónimo de GV_ $ PQ_TQSTAT
  • GV $ QUEUEING_MTH Sinónimo de GV_ $ QUEUEING_MTH
  • GV $ RSRC_CONSUMER_GROUP Sinónimo de GV_ $ RSRC_CONSUMER_GROUP
  • GV $ RSRC_CONSUMER_GROUP_CPU_MTH Sinónimo de GV_ $
  • RSRC_CONSUME_GROUP_CPU_MTH
  • GV $ RSRC_PLAN Sinónimo de GV_ $ RSRC_PLAN
  • GV $ RSRC_PLAN_CPU_MTH Sinónimo de GV_ $ RSRC_PLAN_CPU_MTH
  • GV $ SESSION_LONGOPS Sinónimo de GV_ $ SESSION_LONGOPS
  • GV $ TEMPORARY_LOBS Sinónimo de GV_ $ TEMPORARY_LOBS
  • GV $ TIMEZONE_NAMES Sinónimo de GV_ $ TIMEZONE_NAMES
  • GV $ VERSION Sinónimo de GV_ $ VERSION
  •  IND Sinónimo para USER_INDEXES
  •  OBJ Sinónimo para USER_OBJECTS
  •  SEQ Sinónimo para USER_SEQUENCES
  • SM $ VERSION Sinónimo de SM_ $ VERSION
  •  SYN Sinónimo para USER_SYNONYMS
  •  TABS Sinónimo para USER_TABLES
  • USER_HISTOGRAMS Sinónimo de USER_TAB_HISTOGRAMS
  • USER_SNAPSHOT_REFRESH_TIMES Sinónimo de USER_MVIEW_REFRESH_TIMES
  • V $ ACTIVE_INSTANCES Sinónimo de V_ $ ACTIVE_INSTANCES
  • V $ ACTIVE_SESS_POOL_MTH Sinónimo de V_ $ ACTIVE_SESS_POOL_MTH
  • V $ AW_CALC Sinónimo de V_ $ AW_CALC
  • V $ AW_OLAP Sinónimo de V_ $ AW_OLAP
  • V $ AW_SESSION_INFO Sinónimo de V_ $ AW_SESSION_INFO
  • V $ BH Sinónimo de V_ $ BH
  • V $ INSTANCE Sinónimo de V_ $ INSTANCE
  • V $ LOADISTAT Sinónimo de V_ $ LOADISTAT
  • V $ LOADPSTAT Sinónimo de V_ $ LOADPSTAT
  • V $ LOCK_ACTIVITY Sinónimo de V_ $ LOCK_ACTIVITY
  • V $ MAX_ACTIVE_SESS_TARGET_MTH Sinónimo de V_ $ MAX_ACTIVE_SESS_TARGET_MTH
  • V $ MLS_PARAMETERS Sinónimo de V_ $ MLS_PARAMETERS
  • V $ NLS_PARAMETERS Sinónimo de V_ $ NLS_PARAMETERS
  • V $ NLS_VALID_VALUES Sinónimo de V_ $ NLS_VALID_VALUES
  • V $ OPTION Sinónimo de V_ $ OPTION
  • V $ PARALLEL_DEGREE_LIMIT_MTH Sinónimo de V_ $ PARALLEL_DEGREE_LIMIT_MTH
  • V $ PARAMETER Sinónimo de V_ $ PARAMETER
  • V $ PQ_SESSTAT Sinónimo de V_ $ PQ_SESSTAT
  • V $ PQ_TQSTAT Sinónimo de V_ $ PQ_TQSTAT
  • V $ QUEUEING_MTH Sinónimo de V_ $ QUEUEING_MTH
  • V $ RSRC_CONSUMER_GROUP Sinónimo de V_ $ RSRC_CONSUMER_GROUP
  • V $ RSRC_CONSUMER_GROUP_CPU_MTH Sinónimo de V_ $ RSRC_CONSUMER_GROUP_CPU_MTH
  • V $ RSRC_PLAN Sinónimo de V_ $ RSRC_PLAN
  • V $ RSRC_PLAN_CPU_MTH Sinónimo de V_ $ RSRC_PLAN_CPU_MTH
  • V $ SESSION Sinónimo de V_ $ SESSION
  • V $ SESSION_CONNECT_INFO Sinónimo de V_ $ SESSION_CONNECT_INFO
  • V $ SESSION_LONGOPS Sinónimo de V_ $ SESSION_LONGOPS
  •  V $ SQLAREA Sinónimo de  V_ $ SQLAREA
  •  V $ SQLTEXT Sinónimo para V_ $ SQLTEXT
  • V $ SYSTEM_PARAMETER Sinónimo de V_ $ SYSTEM_PARAMETER
  • V $ TEMPORARY_LOBS Sinónimo de V_ $ TEMPORARY_LOBS
  • V $ TIMEZONE_NAMES Sinónimo de V_ $ TIMEZONE_NAMES
  • V $ VERSION Sinónimo de V_ $ VERSIONGV $ LOADPSTAT Sinónimo de GV_ $ LOADPSTAT

Basándonos en el resultado  anterior  vamos a  ver algunas consultas sencillas:

  • Podemos lanzar  una consulta  que muestra los datos de una tabla especificada.En este caso filtramos  por todas las tablas que lleven la cadena «XXX»: select * from ALL_ALL_TABLES where upper(table_name) like ‘%XXX%’
  • Tambien podemos lanzar un consulta  que muestra las descripciones de los campos de una tabla especificada, peor en este caso con todas las tablas que lleven la cadena «XXX»:select * from ALL_COL_COMMENTS where upper(table_name) like ‘%XXX%’
  • Consulta para conocer las tablas propiedad del usuario actual: select * from user_tables
  • Consulta  para conocer todos los objetos propiedad del usuario conectado a Oracle select * from user_catalog
  • Consulta Oracle SQL para conocer los productos Oracle instalados y la versión   select * from product_component_version
  • Consulta Oracle SQL para conocer los roles y privilegios por roles : select * from role_sys_privs
  • Consulta Oracle SQL para conocer las reglas de integridad y columna a la que afectan:   select constraint_name, column_name from sys.all_cons_columns
  • Consulta Oracle SQL para conocer las tablas de las que es propietario un usuario, en este caso «xxx»   SELECT table_owner, table_name from sys.all_synonyms where table_owner like ‘xxx’. Otra consulta Oracle SQL como la anterior, pero de otra forma más efectiva  contra  las(tablas de las que es propietario un usuario: SELECT DISTINCT TABLE_NAME  FROM ALL_ALL_TABLES WHERE OWNER LIKE ‘HR’
  •  Consulta Oracle SQL que muestra los usuarios de Oracle y datos suyos    (fecha de creación, estado, id, nombre, tablespace temporal,…)  Select * FROM dba_users

  • Consulta Oracle SQL para conocer todos los tablespaces   select * from V$TABLESPACE 
  • Consulta Oracle SQL para conocer la memoria Share_Pool libre y usada     select name,to_number(value) bytes   from v$parameter where name =’shared_pool_size’ union all select name,bytes  from v$sgastat where pool = ‘shared pool’ and name = ‘free memory’

Consulta Oracle SQL para obtener todas las funciones de Oracle: NVL, ABS, LTRIM, …

SELECT distinct object_name
FROM all_arguments
WHERE package_name = 'STANDARD'
order by object_name



Consulta Oracle SQL para conocer tablespaces y propietarios de los mismos

select owner, decode(partition_name, null, segment_name,
segment_name || ':' || partition_name) name,
segment_type, tablespace_name,bytes,initial_extent,
next_extent, PCT_INCREASE, extents, max_extents
from dba_segments
Where 1=1 And extents > 1 order by 9 desc, 3

Cursores abiertos por usuario

select b.sid, a.username, b.value Cursores_Abiertos

from v$session a,

v$sesstat b,

v$statname c

where c.name in (‘opened cursors current’)

and b.statistic# = c.statistic#

and a.sid = b.sid

and a.username is not null

and b.value >0

order by 3

ULTIMAS  CONSULTAS LANZADAS CONTRA LA BBDD

Sentencias SQL completas ejecutadas con un texto determinado en el SQL

SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text

FROM v$session c, v$sqltext d

WHERE c.sql_hash_value = d.hash_value

and upper(d.sql_text) like ‘%WHERE CAMPO LIKE%’

ORDER BY c.sid, d.piece

Ultima consulta

SELECT module,
sql_text,
username,
disk_reads_per_exec,
buffer_gets,
disk_reads,
parse_calls,
sorts,
executions,
rows_processed,
hit_ratio,
first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
FROM
(SELECT module,
sql_text ,
u.username ,
ROUND((s.disk_reads/DECODE(s.executions,0,1, s.executions)),2) disk_reads_per_exec,
s.disk_reads ,
s.buffer_gets ,
s.parse_calls ,
s.sorts ,
s.executions ,
s.rows_processed ,
100 - ROUND(100 * s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio,
s.first_load_time ,
sharable_mem ,
persistent_mem ,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
FROM sys.v_$sql s,
sys.all_users u
WHERE s.parsing_user_id =u.user_id
AND UPPER(u.username) NOT IN ('SYS','SYSTEM')
ORDER BY 4 DESC
)
WHERE --MODULE like '[email protected]%' and rownum <= 20

Últimas consultas SQL ejecutadas en Oracle y usuario que las ejecutó

SELECT DISTINCT vs.sql_text,
vs.sharable_mem,
vs.persistent_mem,
vs.runtime_mem,
vs.sorts,
vs.executions,
vs.parse_calls,
vs.module,
vs.buffer_gets,
vs.disk_reads,
vs.version_count,
vs.users_opening,
vs.loads,
TO_CHAR(to_date(vs.first_load_time, 'YYYY-MM-DD/HH24:MI:SS'),'MM/DD HH24:MI:SS') first_load_time,
rawtohex(vs.address) address,
vs.hash_value hash_value ,
rows_processed ,
vs.command_type,
vs.parsing_user_id ,
OPTIMIZER_MODE ,
au.USERNAME parseuser
FROM v$sqlarea vs ,
all_users au
WHERE (parsing_user_id != 0)
AND (au.user_id(+) =vs.parsing_user_id)
AND (executions >= 1)
ORDER BY buffer_gets/executions DESC
Con esta interesante consulta no solo obtenemos casi toda la ultima consulta lanzada  por el usuario  sino también otros datos interesantes en cuanto a la ultima ejecución;
  • sharable_mem
  • persistent_mem
  • .runtime_mem
  • sorts
  • executions
  • parse_calls
  • module
  • buffer_gets
  • disk_reads
  • version_count
  • users_opening
  • loads
  • first_load_time en formato fecha hora
  •  address
  • hash_value
  • rows_processed
  • command_type
  • parsing_user_id
  • OPTIMIZER_MODE
  • USERNAME parseuser

Una sentencia SQL concreta (filtrado por sid)

SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and sid = 105
ORDER BY c.sid, d.piece

¿Sabemos cómo crear y almacenar contraseñas seguras?


Las contraseñas se usan mucho para reforzar el acceso a los recursos. Los atacantes usarán muchas técnicas para descubrir las contraseñas de los usuarios y conseguir acceso no autorizado a recursos o datos.
Para protegerse mejor, es importante que entienda en qué consiste una contraseña segura y cómo almacenarla en forma segura.

En este humilde post vamos a intentar comprender un poco como deberíamos usar contraseñas seguras.

Photo by M Venter on Pexels.com

Creación de una contraseña segura

Las contraseñas seguras tienen cuatro requisitos principales que se detallan a continuación por orden de importancia:

  • El usuario debe poder recordar la contraseña fácilmente
  • Otra persona no debe poder adivinar la contraseña.
  • Un programa no debe poder adivinar ni descubrir la contraseña.
  • Debe ser compleja, incluyendo números, símbolos y una combinación de letras mayúsculas y minúsculas. Basándose en la lista anterior, el primer requisito, probablemente, sea el más importante porque usted debe poder recordar su contraseña. Por ejemplo, la contraseña «#4sFrX^-aartPOknx25_70!xAdk»

Una excelente forma de crear contraseñas seguras es elegir cuatro o más palabras al azar y concatenarlas. La contraseña «televisionranabotasiglesia» es más segura que «[email protected]#81». Observe que, si bien la segunda contraseña cumple con las políticas antes descritas, los programas descifradores de contraseñas (cracks) son muy eficientes para detectar este tipo de contraseña. Aunque muchos conjuntos de directivas de contraseña no aceptarán la primera contraseña, «televisionranabotasiglesia», esta es mucho más segura que la segunda.

Es mucho más fácil de recordar para el usuario (especialmente, si está asociada con una imagen), es muy larga y su factor aleatorio hace que sea más difícil de adivinar para los programas descifradores de contraseñas.
Con una herramienta de creación de contraseñas en línea, cree contraseñas basadas en el conjunto común
de directivas de contraseña para empresas antes descrito.

  • Abra un navegador web y vaya a http://passwordsgenerator.net.
  • Seleccione las opciones para cumplir con el conjunto de directivas de contraseña.
  • Genere la contraseña.


¿La contraseña generada es fácil de recordar?

Mediante una herramienta de creación de contraseñas en línea, cree contraseñas basadas en palabras
al azar. Tenga en cuenta que, como las palabras se escriben unidas, no se consideran como palabras
del diccionario.

Almacenamiento seguro de contraseñas
Si el usuario elige usar un administrador de contraseñas, la primera característica de una contraseña segura puede ignorarse porque el usuario tiene acceso al administrador de contraseñas en todo momento. Tenga presente que algunos usuarios solo confían en su propia memoria para guardar sus contraseñas. Los administradores de contraseñas, tanto locales como remotos, deben tener un almacén de contraseñas, que podría verse comprometido.
El almacén de contraseñas del administrador de contraseñas debe tener un cifrado seguro y el acceso a este debe controlarse estrictamente. Gracias a aplicaciones de teléfonos móviles e interfaces web, los
administradores de contraseñas basados en la nube ofrecen acceso ininterrumpido y en cualquier momento a los usuarios

¿Qué es una contraseña segura?
Teniendo presentes las características de contraseña segura provistas al inicio de este post, elija una
contraseña que sea fácil de recordar pero difícil de adivinar. Está bien usar contraseñas complejas siempre que no afecten requisitos más importantes como la capacidad para recordarlas fácilmente.
Si se usa un administrador de contraseñas, la necesidad de que puedan recordarse fácilmente puede
omitirse.
A continuación, se proporciona un resumen rápido:

  • Elija una contraseña que pueda recordar.
  • Elija una contraseña que otra persona no pueda asociar con usted.
  • Elija contraseñas diferentes y nunca use la misma contraseña para servicios diferentes.
  • Está bien usar contraseñas complejas siempre que esto no las haga difíciles de recordar.

Acceso desde windows a Openstack con ssh


La mayor parte de la autenticación en entornos de Windows se realiza con un par de nombre de usuario y contraseña. Esta funciona bien en los sistemas que comparten un dominio común. Al trabajar con varios dominios (por ejemplo, entre sistemas locales y hospedados en la nube), se expone más a intrusiones de fuerza bruta.

En comparación, los entornos de Linux, normalmente, usan pares de clave pública y privada para controlar la autenticación, lo que no requiere el uso de contraseñas que se puedan adivinar. OpenSSH incluye herramientas que ayudan a admitir esta opción, en concreto:

  • ssh-keygen para generar claves seguras.
  • ssh-agent y ssh-add para almacenar claves privadas de forma segura.
  • scp y sftp para copiar archivos de claves públicas de forma segura durante el uso inicial de un servidor.

En este documento se proporciona información general sobre cómo usar estas herramientas en Windows para empezar a usar la autenticación de claves con SSH. Si no estás familiarizado con la administración de claves SSH, se recomienda que revises el informe interno de NIST 7966 titulado «Seguridad de la administración de acceso interactiva y automatizada con Secure Shell (SSH)».

Acerca de los pares de claves

Los pares de claves hacen referencia a los archivos de clave pública y privada que utilizan determinados protocolos de autenticación.

La autenticación de clave pública SSH usa algoritmos criptográficos asimétricos para generar dos archivos de clave: uno «privado» y otro «público». Los archivos de clave privada son el equivalente de una contraseña y deben estar protegidos en todo momento. Si alguien adquiere tu clave privada, esa persona puede iniciar sesión en cualquier servidor SSH al que tengas acceso. La clave pública es la que se coloca en el servidor SSH y puede compartirse sin poner en peligro la clave privada.

Al usar la autenticación de claves con un servidor SSH, el servidor SSH y el cliente comparan las claves públicas del nombre de usuario proporcionado con la clave privada. Si la clave pública del lado servidor no se puede validar con la clave privada del lado cliente, se produce un error de autenticación.

Para implementar la autenticación multifactor con pares de claves, debes solicitar que se proporcione una frase de contraseña cuando se genera el par de claves (consulta Generación de claves a continuación). Durante la autenticación, se solicita al usuario la frase de contraseña, que se usa junto con la presencia de la clave privada en el cliente SSH para autenticar al usuario.

Generación de claves de host

Las claves públicas tienen requisitos de ACL específicos que, en Windows, equivalen a permitir el acceso únicamente a los administradores y al sistema. Para facilitar esta tarea,

  • El módulo de PowerShell de OpenSSHUtils se creó para establecer las ACL de claves correctamente y debe instalarse en el servidor.
  • Al usar sshd por primera vez, se generará automáticamente el par de claves para el host. Si el ssh-agent se está ejecutando, las claves se agregarán automáticamente al almacén local.

Para facilitar la autenticación de claves con un servidor SSH, ejecuta los siguientes comandos desde un símbolo del sistema de PowerShell con privilegios elevados: PowerShell

# Install the OpenSSHUtils module to the server. This will be valuable when deploying user keys.
Install-Module -Force OpenSSHUtils -Scope AllUsers

# By default the ssh-agent service is disabled. Allow it to be manually started for the next step to work.
Get-Service -Name ssh-agent | Set-Service -StartupType Manual

# Start the ssh-agent service to preserve the server keys
Start-Service ssh-agent

# Now start the sshd service
Start-Service sshd

Dado que no hay ningún usuario asociado al servicio sshd, las claves de host se almacenan en \ProgramData\ssh.

Generación de claves de usuario

Para usar la autenticación basada en claves, primero debes generar algunos pares de claves públicas o privadas para el cliente. Desde PowerShell o cmd, usa ssh-keygen para generar algunos archivos de clave. PowerShell

cd ~\.ssh\
ssh-keygen

Esta operación debería mostrar algo similar a lo siguiente (donde «username» se reemplaza por tu nombre de usuario)

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username\.ssh\id_ed25519):

Puede presionar Entrar para aceptar el valor predeterminado o puedes especificar una ruta de acceso en la que quieres que se generen las claves. Llegados a este punto, se te pedirá que uses una frase de contraseña para cifrar los archivos de clave privada. La frase de contraseña funciona con el archivo de clave para proporcionar una autenticación en dos fases. En este ejemplo, vamos a dejar la frase de contraseña vacía.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username\.ssh\id_ed25519.
Your public key has been saved in C:\Users\username\.ssh\id_ed25519.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 [email protected]@LOCAL-HOSTNAME

The key's randomart image is:
+--[ED25519 256]--+
|        .        |
|         o       |
|    . + + .      |
|   o B * = .     |
|   o= B S .      |
|   .=B O o       |
|  + =+% o        |
| *oo.O.E         |
|+.o+=o. .        |
+----[SHA256]-----+

Ahora tienes un par de claves ED25519 pública y privada (los archivos .pub son claves públicas y los demás son claves privadas):

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/28/2018  11:09 AM           1679 id_ed25519
-a----        9/28/2018  11:09 AM            414 id_ed25519.pub

Recuerde que los archivos de clave privada son el equivalente de una contraseña, por lo que se deben proteger de la misma manera que las contraseñas. Para que sea más fácil, usa ssh-agent para almacenar de forma segura las claves privadas en un contexto de seguridad de Windows y asócialas con tu inicio de sesión de Windows. Para ello, inicia el servicio de ssh-agent como administrador y usa ssh-add para almacenar la clave privada. PowerShell

# Make sure you're running as an Administrator
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add ~\.ssh\id_ed25519


Después de completar estos pasos, cada vez que se necesite una clave privada para la autenticación desde este cliente, ssh-agent recuperará automáticamente la clave privada local y la pasará al cliente SSH.

Nota

Se recomienda realizar una copia de seguridad de la clave privada en una ubicación segura y, a continuación, eliminarla del sistema local después de agregarla al agente SSH. No se puede recuperar la clave privada del agente. Si pierdes el acceso a la clave privada, tendrás que crear un nuevo par de claves y actualizar la clave pública en todos los sistemas con los que interactúes.

Implementación de la clave pública

Para usar la clave de usuario que se creó anteriormente, la clave pública debe colocarse en el servidor en un archivo de texto denominado authorized_keys en users\nombre de usuario\.ssh\. Las herramientas de OpenSSH incluyen scp (una utilidad de transferencia de archivos segura) para ayudarte con esta operación.

Para trasladar el contenido de la clave pública (~.ssh\id_ed25519.pub) a un archivo de texto denominado authorized_keys en ~.ssh\ en el servidor o host.

En este ejemplo se usa la función Repair-AuthorizedKeyPermissions en el módulo OpenSSHUtils que se instaló anteriormente en el host de las instrucciones anteriores. PowerShell

# Make sure that the .ssh directory exists in your server's home folder
ssh [email protected]@contoso.com mkdir C:\users\user1\.ssh\

# Use scp to copy the public key file generated previously to authorized_keys on your server
scp C:\Users\user1\.ssh\id_ed25519.pub [email protected]@contoso.com:C:\Users\user1\.ssh\authorized_keys

# Appropriately ACL the authorized_keys file on your server
ssh --% [email protected]@contoso.com powershell -c $ConfirmPreference = 'None'; Repair-AuthorizedKeyPermission C:\Users\user1\.ssh\authorized_keys

Estos pasos completan la configuración necesaria para usar la autenticación con SSH basada en claves en Windows. Después de esto, el usuario puede conectarse al host de sshd desde cualquier cliente que tenga la clave privada.

scikit-learn: Guardar y restaurar modelos


En muchas ocasiones, mientras trabaja con la biblioteca scikit-learn , deberá guardar sus modelos de predicción en un archivo y luego restaurarlos para reutilizar su trabajo anterior para: probar su modelo con datos nuevos, comparar varios modelos o Algo más. Este procedimiento de guardado también se conoce como serialización de objetos: representa un objeto con un flujo de bytes para almacenarlo en el disco, enviarlo a través de una red o guardarlo en una base de datos, mientras que el procedimiento de restauración se conoce como deserialización. En este artículo, analizamos tres formas posibles de hacer esto en Python y scikit-learn, cada una presentada con sus pros y sus contras.

Herramientas para guardar y restaurar modelos

La primera herramienta que describimos es Pickle , la herramienta estándar de Python para la (des) serialización de objetos. Luego, miramos la biblioteca Joblib que ofrece (des) serialización fácil de objetos que contienen matrices de datos grandes, y finalmente presentamos un enfoque manual para guardar y restaurar objetos hacia / desde JSON (JavaScript Object Notation). Ninguno de estos enfoques representa una solución óptima, pero se debe elegir el ajuste correcto de acuerdo con las necesidades de su proyecto.

Inicialización del modelo

Inicialmente, creemos un modelo de scikit-learn. En nuestro ejemplo usaremos un modelo de regresión logística y el conjunto de datos Iris . 

Vamos a importar las bibliotecas necesarias, cargar los datos y dividirlos en conjuntos de prueba y entrenamiento.

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Load and split data
data = load_iris()
Xtrain, Xtest, Ytrain, Ytest = train_test_split(data.data, data.target, test_size=0.3, random_state=4)

Ahora creemos el modelo con algunos parámetros no predeterminados y ajustémoslo a los datos de entrenamiento. Suponemos que ha encontrado previamente los parámetros óptimos del modelo, es decir, los que producen la mayor precisión estimada.

# Create a model
model = LogisticRegression(C=0.1, 
                           max_iter=20, 
                           fit_intercept=True, 
                           n_jobs=3, 
                           solver='liblinear')
model.fit(Xtrain, Ytrain)

Y nuestro modelo resultante:

LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,
    intercept_scaling=1, max_iter=20, multi_class='ovr', n_jobs=3,
    penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
    verbose=0, warm_start=False)

Usando el fitmétodo, el modelo ha aprendido sus coeficientes que están almacenados en model.coef_. El objetivo es guardar los parámetros y los coeficientes del modelo en un archivo, por lo que no es necesario repetir el entrenamiento del modelo y los pasos de optimización de los parámetros nuevamente con datos nuevos.

Módulo pickle

En las siguientes líneas de código, el modelo que creamos en el paso anterior se guarda en un archivo y luego se carga como un nuevo objeto llamado pickled_model. A continuación, el modelo cargado se utiliza para calcular la puntuación de precisión y predecir los resultados sobre nuevos datos no vistos (de prueba).

import pickle

#
# Create your model here (same as above)
#

# Save to file in the current working directory
pkl_filename = "pickle_model.pkl"
with open(pkl_filename, 'wb') as file:
    pickle.dump(model, file)

# Load from file
with open(pkl_filename, 'rb') as file:
    pickle_model = pickle.load(file)
    
# Calculate the accuracy score and predict target values
score = pickle_model.score(Xtest, Ytest)
print("Test score: {0:.2f} %".format(100 * score))
Ypredict = pickle_model.predict(Xtest)

La ejecución de este código debería generar su puntuación y guardar el modelo a través de Pickle:

$ python save_model_pickle.py
Test score: 91.11 %

Lo mejor de usar Pickle para guardar y restaurar nuestros modelos de aprendizaje es que es rápido: puede hacerlo en dos líneas de código. Es útil si ha optimizado los parámetros del modelo en los datos de entrenamiento, por lo que no necesita repetir este paso nuevamente. De todos modos, no guarda los resultados de la prueba ni ningún dato. Aún así, puede hacer esto guardando una tupla, o una lista, de varios objetos (y recuerde qué objeto va a dónde), de la siguiente manera:

tuple_objects = (model, Xtrain, Ytrain, score)

# Save tuple
pickle.dump(tuple_objects, open("tuple_model.pkl", 'wb'))

# Restore tuple
pickled_model, pickled_Xtrain, pickled_Ytrain, pickled_score = pickle.load(open("tuple_model.pkl", 'rb'))

Módulo Joblib

La biblioteca Joblib está destinada a ser un reemplazo de Pickle, para objetos que contienen datos grandes. Repetiremos el procedimiento de guardar y restaurar como con Pickle.

from sklearn.externals import joblib

# Save to file in the current working directory
joblib_file = "joblib_model.pkl"
joblib.dump(model, joblib_file)

# Load from file
joblib_model = joblib.load(joblib_file)

# Calculate the accuracy and predictions
score = joblib_model.score(Xtest, Ytest)
print("Test score: {0:.2f} %".format(100 * score))
Ypredict = pickle_model.predict(Xtest)
$ python save_model_joblib.py
Test score: 91.11 %

Como se ve en el ejemplo, la biblioteca Joblib ofrece un flujo de trabajo un poco más simple en comparación con Pickle. Si bien Pickle requiere que se pase un objeto de archivo como argumento, Joblib funciona tanto con objetos de archivo como con nombres de archivo de cadena. En caso de que su modelo contenga grandes conjuntos de datos, cada conjunto se almacenará en un archivo separado, pero el procedimiento de guardar y restaurar seguirá siendo el mismo. Joblib también permite diferentes métodos de compresión, como ‘zlib’, ‘gzip’, ‘bz2’ y diferentes niveles de compresión.

Guardar y restaurar manualmente a JSON

Dependiendo de su proyecto, muchas veces encontrará Pickle y Joblib como soluciones inadecuadas. De todos modos, siempre que desee tener un control total sobre el proceso de guardar y restaurar, la mejor manera es crear sus propias funciones manualmente.

A continuación, se muestra un ejemplo de cómo guardar y restaurar objetos manualmente mediante JSON. Este enfoque nos permite seleccionar los datos que deben guardarse, como los parámetros del modelo, los coeficientes, los datos de entrenamiento y cualquier otra cosa que necesitemos.

Dado que queremos guardar todos estos datos en un solo objeto, una forma posible de hacerlo es crear una nueva clase que herede de la clase modelo, que en nuestro ejemplo es LogisticRegression. La nueva clase, llamada MyLogReg, implementa los métodos save_jsonload_json para guardar y restaurar a / desde un archivo JSON, respectivamente.

Para simplificar, guardaremos solo tres parámetros del modelo y los datos de entrenamiento. Algunos datos adicionales que podríamos almacenar con este enfoque son, por ejemplo, una puntuación de validación cruzada en el conjunto de entrenamiento, datos de prueba, puntuación de precisión en los datos de prueba, etc.

import json
import numpy as np

class MyLogReg(LogisticRegression):
    
    # Override the class constructor
    def __init__(self, C=1.0, solver='liblinear', max_iter=100, X_train=None, Y_train=None):
        LogisticRegression.__init__(self, C=C, solver=solver, max_iter=max_iter)
        self.X_train = X_train
        self.Y_train = Y_train
        
    # A method for saving object data to JSON file
    def save_json(self, filepath):
        dict_ = {}
        dict_['C'] = self.C
        dict_['max_iter'] = self.max_iter
        dict_['solver'] = self.solver
        dict_['X_train'] = self.X_train.tolist() if self.X_train is not None else 'None'
        dict_['Y_train'] = self.Y_train.tolist() if self.Y_train is not None else 'None'
        
        # Creat json and save to file
        json_txt = json.dumps(dict_, indent=4)
        with open(filepath, 'w') as file:
            file.write(json_txt)
    
    # A method for loading data from JSON file
    def load_json(self, filepath):
        with open(filepath, 'r') as file:
            dict_ = json.load(file)
            
        self.C = dict_['C']
        self.max_iter = dict_['max_iter']
        self.solver = dict_['solver']
        self.X_train = np.asarray(dict_['X_train']) if dict_['X_train'] != 'None' else None
        self.Y_train = np.asarray(dict_['Y_train']) if dict_['Y_train'] != 'None' else None
        

Ahora probemos la MyLogRegclase. Primero creamos un objeto mylogreg, le pasamos los datos de entrenamiento y lo guardamos en un archivo. Luego creamos un nuevo objeto json_mylogregy llamamos al métod load_json para cargar los datos del archivo.

filepath = "mylogreg.json"

# Create a model and train it
mylogreg = MyLogReg(X_train=Xtrain, Y_train=Ytrain)
mylogreg.save_json(filepath)

# Create a new object and load its data from JSON file
json_mylogreg = MyLogReg()
json_mylogreg.load_json(filepath)
json_mylogreg

Al imprimir el nuevo objeto, podemos ver nuestros parámetros y datos de entrenamiento según sea necesario.

MyLogReg(C=1.0,
     X_train=array([[ 4.3,  3. ,  1.1,  0.1],
       [ 5.7,  4.4,  1.5,  0.4],
       ...,
       [ 7.2,  3. ,  5.8,  1.6],
       [ 7.7,  2.8,  6.7,  2. ]]),
     Y_train=array([0, 0, ..., 2, 2]), class_weight=None, dual=False,
     fit_intercept=True, intercept_scaling=1, max_iter=100,
     multi_class='ovr', n_jobs=1, penalty='l2', random_state=None,
     solver='liblinear', tol=0.0001, verbose=0, warm_start=False)

Dado que la serialización de datos usando JSON realmente guarda el objeto en un formato de cadena, en lugar de un flujo de bytes, el archivo ‘mylogreg.json’ podría abrirse y modificarse con un editor de texto. Aunque este enfoque sería conveniente para el desarrollador, es menos seguro ya que un intruso puede ver y modificar el contenido del archivo JSON. Además, este enfoque es más adecuado para objetos con una pequeña cantidad de variables de instancia, como los modelos scikit-learn, porque cualquier adición de nuevas variables requiere cambios en los métodos de guardar y restaurar.

Problemas de compatibilidad

Si bien algunos de los pros y los contras de cada herramienta se cubrieron en el texto hasta ahora, probablemente el mayor inconveniente de las herramientas Pickle y Joblib es su compatibilidad con diferentes modelos y versiones de Python.

Compatibilidad con la versión de Python : la documentación de ambas herramientas indica que no se recomienda (des) serializar objetos en diferentes versiones de Python, aunque podría funcionar con cambios menores de versión.

Compatibilidad del modelo : uno de los errores más frecuentes es guardar su modelo con Pickle o Joblib y luego cambiar el modelo antes de intentar restaurar desde un archivo. La estructura interna del modelo debe permanecer sin cambios entre guardar y recargar.

Un último problema con Pickle y Joblib está relacionado con la seguridad. Ambas herramientas pueden contener código malicioso, por lo que no se recomienda restaurar datos de fuentes no confiables o no autenticadas.

Conclusiones

En esta publicación describimos tres herramientas para guardar y restaurar modelos de scikit-learn. Las bibliotecas Pickle y Joblib son rápidas y fáciles de usar, pero tienen problemas de compatibilidad en diferentes versiones de Python y cambios en el modelo de aprendizaje. Por otro lado, el enfoque manual es más difícil de implementar y debe modificarse con cualquier cambio en la estructura del modelo, pero en el lado positivo podría adaptarse fácilmente a varias necesidades y no tiene problemas de compatibilidad.

Cómo convertir su impresora 3D en un plotter en dos pasos


Un plotter o trazador es un dispositivo que puede dibujar texto e imágenes en papel con un utensilio ( por ejemplo un bolígrafo). 

Si pensamos en en el hardware necesario , podemos pensar que un buen atajo puede ser una vieja ( o no) impresora 3D pues estas ya incluyen todo el hardware y la electrónica que necesitamos: sólo hay que encontrar la manera de adjuntar un utensilio de dibujo y cómo decirle que dibuje.

En realidad como vamos a ver es mucho más fácil de lo que nos podemos imaginar, asi que en esta publicación de blog, aprenderá cómo puede hacer su propio dibujo de impresora.

Ejemplo del primer dibujo de su impresora 3D! 

Convertir una impresora 3D en una impresora 2D

Quizás se pregunte cuál es la utilidad de convertir una impresora 3D en algo que pueda dibujar imágenes 2D en un papel. Después de todo, las impresoras convencionales hacen eso desde hace varias décadas, ¿no es eso un paso atrás?

Pues , un plotter le permitirá dibujar con bolígrafo, lápices de colores, crayones, marcadores e incluso una pluma (básicamente todo lo que pueda dejar marcas en un papel). Pero no solo eso, incluso podemos dibujar en diferentes materiales, como cartón o vidrio. También puede ser creativo con tipos de tinta únicos, como dorada, plateada o que brillan en la oscuridad

Una utilidad innegable para los electrónicos es ayudar en la fabricación de circuitos impresos pues normalmente el diseño de la pcb se realiza calcando el diseño en la parte del cobre y luego hay que volver hay que repintar el diseño con un rotulador edding ( Además incluso puede ayudar en el taladrado con un cnc los orificios para los componentes)

Paso 1 – Colocación de un utensilio de dibujo

Desea montar de manera confiable un bolígrafo en el cabezal de la impresora y asegurarse de que la punta del bolígrafo quede un poco por debajo de la boquilla. Empecé diseñando una pequeña parte de este propósito. Se sujeta al cabezal de la impresora utilizando un pequeño tornillo M3 para fijar el bolígrafo en él:

Puede conseguir el modelo en thingiverse aquí . Debe adaptarse a cualquier impresora Creality Ender-3 o CR-20, y posiblemente a otras impresoras Creality. También es personalizable, por lo que puede modificar las dimensiones (si desea colocar un marcador más grande o necesita un ajuste más ajustado con la impresora).

Para otras impresoras, deberá diseñar su propio mecanismo de montaje (cuando lo haga, comparta un enlace en los comentarios). Si bien también es posible usar tornillos para montar el bolígrafo, personalmente prefiero el mecanismo de recorte, ya que me permite cambiar entre los modos de impresora 3D y trazador muy rápido, y también cambiar los bolígrafos muy rápido.

Paso 2 – Calibración

Una vez que haya montado correctamente su lápiz en su impresora, es hora de calibrarlo. Deberá adjuntar una hoja de papel a la cama de la impresora:

Bolígrafo montado, papel adjunto, ¡listo para su comando!

A continuación, deberá encontrar la altura correcta para imprimir. Se recomiendo usar Repetier Host pen lugar del clasico Cura, pues Repetier Host hara todo mucho más fácil ).

Antes de comenzar, asegúrese de que la plataforma de la impresora esté nivelada y que tanto la boquilla como la plataforma de la impresora estén frías.

Después de ubicar su impresora, vaya a la pestaña «Control manual» dentro de Repetier y mueva el cabezal de impresión hacia arriba hasta que la punta del bolígrafo esté por encima del papel. Luego, mueva su eje X / Y al borde de donde desea que esté su dibujo. Finalmente, mueva el eje Z hacia abajo en incrementos de 0,1 mm, hasta que vea que la punta del bolígrafo toca el papel. A continuación, puede mover un poco la X / Y y comprobar que el bolígrafo realmente deja un rastro en el papel. Cuando termine, observe los valores X / Y / Z que aparecen en la línea superior:

Calibración de la posición de su lápiz en Repetier Host.

En mi caso, los valores fueron 47 para X, 40 para Y y 14,6 para Z. Usaremos estos valores en breve cuando generemos el archivo GCode para imprimir.

Paso 3: elegir qué imprimir y generacion del gcode

Esa es una dificil pues existen infinitass opciones. Sin embargo, deberá obtenerlo en formato vectorial, por lo que si usa Google Imágenes, agregue el texto type:svg al final de su consulta de búsqueda. También puede convertir imágenes JPEG y PNG a SVG , pero sugeriría comenzar con algo que ya viene como un vector para simplificar las cosas.

Cuando se comenza un proyecto asi seguro que se piensa en el tiempo para conseguir el hardware correcto, pero se sorprenderalo rápido que se hace funcionar la parte del hardware. Sin embargo, el software es otra historia completamente diferente; como siempre, el software es donde reside la verdadera complejidad .

 Además de Repetier Host mencionado anteriormente, también necesita obtener Inkscape (que, por cierto, ¡también es útil si desea crear arte de PCB !).

Dentro de Inkscape, cree un nuevo archivo y vaya al menú Archivo → Propiedades del documento (Acceso directo: Ctrl + Shift + D). Luego, establezca el tamaño del documento un poco más pequeño que el tamaño de la cama de impresión y asegúrese también de usarlo mm para las unidades.

Una vez que haya establecido el tamaño, puede importar cualquier archivo SVG que desee o simplemente dibujar un texto con la herramienta Texto:

Cuando termine, con el texto aún seleccionado, haga clic en el menú Ruta → Objeto a ruta (Mayús + Ctrl + C). Esto convertirá el texto en una serie de puntos conectados por líneas, lo cual es necesario para alimentar la impresora. Puede agregar más elementos como espirales y formas de estrella, repitiendo la operación «Objeto a ruta» para cada uno:

Al imprimir, los objetos no se rellenarán, por lo que es posible que desee eliminar su color de relleno y establecer su color de trazo en negro (o el color de su lápiz), para obtener una representación más precisa del resultado final. Seleccione todos los objetos (Ctrl + A) y luego elimine el relleno y aplique color negro para el trazo (Ctrl + Shift + F):

Establecer el color de la pintura de trazo en negro

Cuando esté satisfecho con el resultado, es hora de generar el GCode para la impresora. Usaremos una extensión llamada «Gcodetools», que viene incluida con Inkscape (si no, tiene una versión anterior y necesita actualizar).

Comenzaremos definiendo los puntos de orientación, que le dicen a la impresora cómo mapear las líneas en la pantalla en el papel. Vaya al Menú de extensiones → Gcodetools → Puntos de orientación  y después de asegurarse de que el modo “2 puntos” esté seleccionado, haga clic en Aplicar y luego en Cerrar . Ahora debería ver dos nuevos elementos de texto agregados en la parte inferior de su dibujo:

Estos son los puntos de orientación. Cada punto es una lista de coordenadas X, Y, Z que especifica la ubicación de destino de ese punto en el sistema de coordenadas de la impresora. Debe editarlos para que coincidan con la X / Y que encontró en el paso de calibración y establecer la Z (la tercera coordenada) en 0.

Edite el texto en el punto izquierdo y actualícelo para que contenga las coordenadas X / Y que encontró. En mi caso lo fue (47; 40; 0). Para el punto correcto, agregue 100 al valor X, copie el Y / Z del primero, por ejemplo (147; 40; 0):

A continuación, necesitamos generar una herramienta y configurar su velocidad. Este paso es opcional, pero si no lo hace, su impresora se dibujará realmente muy lento. Vaya al menú Extensiones → Gcodetools → Biblioteca de herramientas  y seleccione «predeterminado» en «Tipos de herramientas»:

Haga clic en Aplicar y luego en Cerrar, y debería ver un rectángulo verde con muchas configuraciones agregadas a su dibujo:

Puede alejar este rectángulo (junto con todos los valores) para que no se sobreponga en su dibujo. Luego, desea editar el texto y cambiar los valores de «Alimentación», «Alimentación de penetración», «Alimentación de paso» para establecer la velocidad de movimiento de la impresora al dibujar. Yo uso 4500 para todos ellos (la unidad es mm / min, por lo que este valor corresponde a 75 mm / seg).

¡Finalmente estamos listos para generar el GCode! Seleccione todos los elementos en su dibujo (Ctrl + A) y vaya a Extensiones → Gcodetools → Ruta a Gcode…

Allí, vaya a la pestaña Opciones y establezca «Escala a lo largo del eje Z» en 1, y «Desplazamiento a lo largo del eje Z» al valor Z que encontró en el paso de calibración, menos uno (encontré 14.6, así que lo configuré aquí a 13.6):

A continuación, vaya a la pestaña Preferencias y establezca el nombre del archivo de salida y la ruta del directorio cuando desee que se guarde. También puede configurar la altura segura Z en un valor más bajo, para acelerar la impresión (yo uso 5):

Finalmente, cambie a la pestaña Ruta a Gcode , configure la Función de profundidad en 1y haga clic en Aplicar. Tardará unos segundos y es posible que muestre una advertencia acerca de que no se han seleccionado rutas, que puede ignorar con seguridad. Debería ver una nueva capa en la parte superior de su dibujo, mostrando los movimientos del cabezal de impresión en el archivo Gcode generado:

En este punto, sugiero abrir el archivo .gcode en un editor de texto y verificar que se vea legítimo, especialmente que los valores Z coincidan con el valor de calibración que encontró:

¡GCode generado! Tenga en cuenta que el valor Z es 14.60000 aquí

También sugiero editar la primera linea G00 y agregar F4500 al final, de lo contrario, su impresora podría hacer que el movimiento inicial del cabezal sea realmente lento:

¡Eso es! Estás listo para imprimir. Cargue su archivo Gcode en el host de Repetier y debería ver su dibujo en la pantalla:

Diga su oración, haga clic en el botón «Iniciar impresión» y … ¡disfrute del espectáculo!

Fuente :https://urish.medium.com/

Introducción a python científico


Muchas áreas de carácter científico-técnico la adecuada elección del software y/o lenguaje de programación empleado es determinante, de cara a la potencia, versatilidad, facilidad de uso y acceso por parte de todos los usuarios en sus propios dispositivos, de manera generalizada y gratuita.

Dentro del software libre, uno de los que últimamente ha tenido una mejora sustancial, con la inclusión de potentes y versátiles nuevos módulos de cálculo simbólico (SymPy), numérico (NumPy, SciPy) y gráfico (PyPlot y Matplotlib) ha sido sin duda Python, y de ahí su vertiginosa evolución y expansión a nivel mundial, no sólo en el ámbito académico, sino también en el científico e industrial. De hecho, basta con echar un vistazo a las numerosas propuestas, tanto de comunidades de desarrolladores como de empresas privadas, surgidas a raíz de la versión de base inicial de Python, como por ejemplo IPython (interface interactivo de fácil uso, que gracias a Jupyter Notebook permite una versión HTML similar a los notebooks de Mathematica o Mapple) o Spyder (entorno integrado para cálculo científico parecido al de Matlab u Octave).

Por otro lado existen versiones completas de desarrollo, integrando Python como soporte de cálculo, pero con editores avanzados de texto para la programación y la depuración de código, ventanas de gráficos y datos, etc. La mayoría de estas plataformas integradas están disponibles para los distintos sistemas operativos Linux, MacOS X y Windows. Entre ellas cabría destacar Enthought Python Distribution (EPD), PyCharm y Anaconda CE (de Continuum Analytics).

Aunque no podamos abarcar todos los aspectos «básicos» del python científico, intentaremos en este resumen dar una idea de las principales librerías un funciones que podemos usar para NILM (Non-Intrusive Load Monitoring) sin olvidar los fundamentos de :Matplotlib y Numpy

Matplotlib: visualización con Python 

Matplotlib es una biblioteca completa para crear visualizaciones estáticas, animadas e interactivas en Python haciendo que las cosas fáciles sean fáciles y las difíciles posibles.

Nos permite crear :

  • Desarrollando gráficos de calidad de publicación con solo unas pocas líneas de código
  • Utilizando figuras interactivas que puedan hacer zoom, desplazarse, actualizar …

Personalizar

  • Tomando el control total de los estilos de línea, las propiedades de la fuente, las propiedades de los ejes …
  • Exportando e incrustando en varios formatos de archivo y entornos interactivos

Ampliar

  • Explorando la funcionalidad personalizada proporcionada por paquetes de terceros
  • Obteniendo más información sobre Matplotlib a través de los numerosos recursos de aprendizaje externos

Matplotlib es en resumen la librería de python para dibujar (equivalente al plot en matlab).

matplotlib

Puede encontrar mas información en el sitio oficial https://matplotlib.org/

Numpy

NumPy es una biblioteca para el lenguaje de programación Python que da soporte para crear vectores y matrices grandes multidimensionales, junto con una gran colección de funciones matemáticas de alto nivel para operar con ellas.

Numpy es pues una librería especializada para operaciones con matrices y vectores

Puede encontrar mas información en l sitio oficial https://numpy.org/

La imagen tiene un atributo ALT vacío; su nombre de archivo es image-11.png

Primeros pasos

Primero, es necesario importarlas al workspace

import numpy as np
import matplotlib.pyplot as plt

Opciones de visualizacion de matplotlib para un notebook

%matplotlib inline
plt.rcParams['figure.figsize'] = (13, 6)
plt.style.use('ggplot')

Otras importaciones:

import warnings
warnings.filterwarnings('ignore')

Crear arrays en python es muy sencillo y se puede hacer de forma nativa usando un tipo list. Sin embargo, aquí consideramos arrays del tipo numpy pues esto arrays incluyen funciones que facilitan las operaciones matemáticas y su manipulación

v=[1,2,3] # tipo list
v=np.array([1,2,3]) # array numpy
print (v)
print ("Dimensiones: " + str(v.ndim)) # numero de dimensiones
print ("Elementos: " + str(v.size)) # numero de elementos
print ("Longitud de las dimensiones: " + str(v.shape)) # longitud de cada dimensión
[1 2 3]
Dimensiones: 1
Elementos: 3
Longitud de las dimensiones: (3,)

Crear una matriz de 2 x 3:

v=np.array([[1,2,3], [4,5,6]])
print (v)
print ('Dimensiones: ' + str(v.ndim)) # numero de dimensiones
print ('Elementos: '+str(v.size)) # numero de elementos
print ('Longitud de las dimensiones: '+str(v.shape)) # longitud de cada dimensión
[[1 2 3]
 [4 5 6]]
Dimensiones: 2
Elementos: 6
Longitud de las dimensiones: (2, 3)

Crear una Matriz triple de 2 x 3 x 2 :

v=np.array([[[1,2], [3,4]],[[5,6],  [7,8]]])
print (v)
print ("Dimensiones: " + str(v.ndim)) # numero de dimensiones
print ("Elementos: "+str(v.size)) # numero de elementos
print ("Longitud de las dimensiones: "+str(v.shape) )# longitud de cada dimensión

[[[1 2], 
      [3 4]],

 [[5 6], 
      [7 8]]]
Dimensiones: 3
Elementos: 8
Longitud de las dimensiones: (2, 2, 2)

Utilizamos la función reshape para redimensionar los arrays

1 dimension

print (v.reshape(8,))
[1 2 3 4 5 6 7 8]

2 dimensiones

print (v.reshape(2,4))
[[1 2 3 4]
 [5 6 7 8]]

Matriz Identidad de 5×5

print (np.identity(5))
[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

Matriz de unos de 5×5

print ( np.ones([5,5]))
[[1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]
 [1. 1. 1. 1. 1.]]

Matriz de ceros de 5×5:

print (np.zeros([5,5]))
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

Las operaciones por definición son elementwise

a=np.arange(5)
b=10*np.ones(5)
print ("vector a: "+str(a))
print ("vector b: "+str(b))
print ("suma b+a: "+str(b-a))
print ("resta b-a: "+str(b+a))
print ("producto b*a: "+str(b*a))
vector a: [0 1 2 3 4]
vector b: [10. 10. 10. 10. 10.]
suma b+a: [10.  9.  8.  7.  6.]
resta b-a: [10. 11. 12. 13. 14.]
producto b*a: [ 0. 10. 20. 30. 40.]

El producto de los vectores es:

a.dot(b)
100.0

Para las matrices tenemos que:

a=np.identity(3)
b=np.array([[1,2,3],[4,5,6],[7,8,9]])
print ("matriz a:\n"+str(a))
print ("matriz b:\n"+str(b))
print ("producto a*b:\n"+str(a.dot(b)))
print ("producto elementwise a.*b:\n"+str(a*b))
matriz a:
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
matriz b:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
producto a*b:
[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]
producto elementwise a.*b:
[[1. 0. 0.]
 [0. 5. 0.]
 [0. 0. 9.]]

Vector formado por un rango de valores:

print ("De 0 a 10: " + str(np.arange(10)))
print ("De 10 a 20 de paso 0.5: "+str(np.arange(10,20,0.5)))
De 0 a 10: [0 1 2 3 4 5 6 7 8 9]
De 10 a 20 de paso 0.5: [10.  10.5 11.  11.5 12.  12.5 13.  13.5 14.  14.5 15.  15.5 16.  16.5
 17.  17.5 18.  18.5 19.  19.5]

Función linspace:

np.linspace(0,2*np.pi,10) # de 0 a 2*pi en 10 puntos equidistantes
array([0.        , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,
       3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])

función random:

np.random.rand(10)
array([0.63623588, 0.83924558, 0.35833155, 0.33835148, 0.53247758,
       0.0950348 , 0.2805706 , 0.47285484, 0.8696919 , 0.78361161])

Dibujar una función seno

t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.plot(t, s)
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('Sinusoidal')
plt.grid(True)

Dibujar una función chirp

x=np.linspace(0,3*np.pi,500)
plt.plot(x,np.sin(x**2))
plt.title("A simple chirp")
Text(0.5, 1.0, 'A simple chirp')

Definir una función en Python

En python, las funciones pueden estar definidas en cualquier parte pero siempre antes de su llamada. En python, las anidaciones (bucles, if conditions, functions, etc.) se realizan mediante indentación, no existe el statement end. Las funciones se definen así:

def funcion_suma(x): 
    suma=0
    for i in x: 
        suma=suma+i
    return suma 
v=np.arange(10)
print (funcion_suma(v))
45

Aunque, como hemos dicho antes, numpy facilita las operaciones matemáticas y ya incluye una serie de operaciones:

print (v.sum())
print (v.cumsum())
print (v.mean())
45
[ 0  1  3  6 10 15 21 28 36 45]
4.5

Para saber más sobre numpy:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

http://www.sam.math.ethz.ch/~raoulb/teaching/PythonTutorial/intro_numpy.html

(O simplemente «googleando»: numpy tutorial)

Pandas

Pandas (Python Data Analysis Library) es una librería de python para el análisis y manipulación de una gran cantidad de datos. También facilita el uso de «timeseries»

La llamada a la librería es:

import pandas as pd

Dado un archivo csv, la función read_csv carga los datos en un dataframe

# El parámetro parse_dates indica a pandas que al cargar este csv la primera columna [0] es de tipo datetime
df=pd.read_csv('data/events.csv',parse_dates=[0])

Las primeras N filas del dataFrame se puede visualizar de la siguiente forma

N=4
df.head(N)
timestamplabelphase
02011-10-20 12:22:01.473111A
12011-10-20 12:37:40.507111A
22011-10-20 13:23:55.390111A
32011-10-20 13:39:08.157111A

Y las N últimas columnas

df.tail(N)
timestamplabelphase
24812011-10-27 12:57:17.079111A
24822011-10-27 13:10:45.112111A
24832011-10-27 13:54:08.862111A
24842011-10-27 14:07:21.612111A

Podemos filtar por un cierto valor

df[df.phase=='B'].head()
timestamplabelphase
122011-10-20 15:45:54.590204B
132011-10-20 15:47:31.223204B
142011-10-20 16:09:00.424204B
182011-10-20 17:42:00.657155B
192011-10-20 17:42:04.407157B

Y hacer agrupaciones

df2=df.sort_values(['label','phase']).groupby(['label','phase']).count()
df2
timestamp
labelphase
101B26
102B25
103B24
108A16
111A619
1125A1
1126A1
1127A1
1200A1
1201A1

161 rows × 1 columns

Las nuevas columnas se crean fácilmente. Compatible con numpy.

df['x']=25*np.random.rand(len(df))
df['y']=100*np.sin(2*np.pi*np.linspace(0,2*np.pi,len(df)))
df['z']=df.x+df.y
df.head(5)
timestamplabelphasexyz
02011-10-20 12:22:01.473111A0.0167760.0000000.016776
12011-10-20 12:37:40.507111A5.6400571.5892417.229298
22011-10-20 13:23:55.390111A5.6322523.1780818.810333
32011-10-20 13:39:08.157111A9.2871414.76611914.053259
42011-10-20 14:25:51.473111A9.3135696.35295215.666521

Para dibujar sólo necesitamos usar la función plot

df.z.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e3ba88080>

Existen ciertas funciones predefinidas que facilitan los cálculos

df.z.cumsum().plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e3b801e80>

Y se pueden concatenar

# Si integramos y derivamos obtenemos la misma señal
df.z.cumsum().diff().plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e32625320>

Unas de las herramientas más potentes de pandas es la manipulación de timeseries

df.index=df.timestamp
df.z.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e325e6518>

Podemos filtar por fechas

d1='2011-10-21'
d2='2011-10-23'
df[(df.index>d1)&(df.index<d2)].z.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e325d5588>

Existe una gran flexibilidad a la hora de resamplear un dataframe

# Cada día 
df.resample('1D',how='sum')
labelxyz
timestamp
2011-10-20233182044.60316112047.56801914092.171180
2011-10-21507894364.168081-4531.116500-166.948419
2011-10-221356456971.7315141811.9787858783.710300
2011-10-231021845445.726210-4029.5292421416.196968
2011-10-24462593554.5631237284.89716310839.460286
2011-10-25525523933.715959-4712.890577-779.174618
2011-10-26590843503.958137-7682.254604-4178.296467
2011-10-27181921325.9193697454.6146868780.534055
# Cada 6 horas
df.resample('6H',how='count')
timestamplabelphasexyz
timestamp
2011-10-20 12:00:00373737373737
2011-10-20 18:00:00135135135135135135
2011-10-21 00:00:00160160160160160160
2011-10-21 06:00:00676767676767
2011-10-21 12:00:00262626262626
2011-10-21 18:00:00828282828282
2011-10-22 00:00:00242424242424
2011-10-22 06:00:00107107107107107107
2011-10-22 12:00:00215215215215215215
2011-10-22 18:00:00203203203203203203
2011-10-23 00:00:00636363636363
2011-10-23 06:00:00646464646464
2011-10-23 12:00:00737373737373
2011-10-23 18:00:00237237237237237237
2011-10-24 00:00:00363636363636
2011-10-24 06:00:00393939393939
2011-10-24 12:00:00494949494949
2011-10-24 18:00:00162162162162162162
2011-10-25 00:00:00333333333333
2011-10-25 06:00:00919191919191
2011-10-25 12:00:00373737373737
2011-10-25 18:00:00152152152152152152
2011-10-26 00:00:00232323232323
2011-10-26 06:00:00616161616161
2011-10-26 12:00:00161616161616
2011-10-26 18:00:00196196196196196196
2011-10-27 00:00:00363636363636
2011-10-27 06:00:00555555555555
2011-10-27 12:00:00666666

Para aprender más sobre pandas:

http://pandas.pydata.org/pandas-docs/stable/tutorials.html

http://pandas.pydata.org/pandas-docs/stable/10min.html

Detector de eventos

Vamos a crear un detector de eventos.

Dado el consumo eléctrico de una vivienda (voltage y corriente) queremos detectar en que momento se produce una conexión de un dispositivo. Para ello, filtraremos la señal sinusoidal obteniendo el valor eficaz de la corriente cada cierto intervalo. Los cambios en el valor eficaz van a determinar las conexiones y desconexiones de los distintos dispositivos. Derivando este valor eficaz, obtenemos picos en los que existe un cambio en el valor eficaz y, por lo tanto, posibles candidatos a eventos de conexión/desconexión. Finalmente, usando un detector de picos filtraremos los eventos reales del resto.

Mediremos nuestros resultados usando métricas estándar de NILM.

Paso por paso

Importar pandas, numpy y matplotlib tal y como se ha visto anteriormente

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Definir una funcion llamada rms_function que devuelva un valor rms y que tenga como parámetro de entrada un vector de valores

# función rms 
def rms_function(x): 
    return np.sqrt(np.mean(np.square(x)))

Usar el siguiente path para cargar los datos en un dataframe df de pandas. Como parámetros: el índice es la columna 0 (index_col) y la fecha está en la columna 1 (parse_dates)

path='data/smart_meter_data.csv'
df= ...
path='data/smart_meter_data.csv'
df=pd.read_csv(path, parse_dates=[1],index_col=[0])

Mostrar las 5 primeras columnas del dataframe

df.head(5)
datetimeivlabelappl_namephase
02011-10-20 12:21:58.9730000.444955159.194375111RefrigeratorA
12011-10-20 12:21:58.9730830.402501160.677554111RefrigeratorA
22011-10-20 12:21:58.9731660.444955161.845163111RefrigeratorA
32011-10-20 12:21:58.9732491.102993163.107443111RefrigeratorA
42011-10-20 12:21:58.9733321.952074164.243495111RefrigeratorA

Imprimir mínimo y máximo de datetime y la diferencia de ambos

print (df.datetime.min())
print (df.datetime.max())
print (df.datetime.max()-df.datetime.min())
2011-10-20 12:21:58.973000
2011-10-20 12:23:03.713996
0 days 00:01:04.740996

Seleccionar datetime como índice del dataframe df

df.index=df.datetime

Periodo y frequencia de muestreo

# frecuencia
ts=df.datetime.diff().mean().total_seconds()
print (str(ts)+' seconds')
fs=1/ts
print ( str(fs)+' Hz')
8.3e-05 seconds
12048.192771084337 Hz

Dibujar Voltage (v) haciendo zoom en el intervalo de 100ms (6 periodos aproximadamente)

d1='2011-10-20 12:22:29.9'
d2='2011-10-20 12:22:30'
df[(df.index>d1)&(df.index<d2)].v.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e2b9f86d8>
df.i.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e2e274d30>

Resamplear mediante la función resample de pandas a 50ms (’50L’). La función rms_function se pasará como parámetro para obtener cada valor del resampleado. El resultado debe de guardarse en un dataframe nuevo llamado rms . Dibujar el resultado.

rms=pd.DataFrame(df.i.resample(....))
rms=pd.DataFrame(df.i.resample('50L',how=rms_function))
rms.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e2f8848d0>

Hacer la derivada del dataframe rms y guardar el resultado en rms_diff.

rms_diff=rms.diff()

Dibujar el resultado (rms_diff)

rms_diff.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e2f7f9fd0>

Guardar los valores de la columna «i» en una variable «y» en forma de array

y=rms_diff.i.values
Modifica los parámetros th_noise y dist de la función detect_peaks para obener los índices de los eventos y evaluar las métricas. Realizar el proceso 3 veces. ¿ Con qué valores de th_noise y dist se obtienen mejores resultados en las métricas?
th_noise=5
dist=5
from detect_peaks import detect_peaks
indexes=detect_peaks(y,mph=th_noise,mpd=dist)
dates=rms_diff.ix[indexes].index

Cuantos eventos hemos detectado

print (str(len(indexes))+' eventos detectados')
8 eventos detectados

Dibujamos los eventos y la corriente en una misma gráfica

plt.vlines(dates,-80,80)
df.i.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f6e2f79ca58>

Métricas

from IPython.display import Image
Image(filename='metricas1.png')
Image(filename='metricas2.png')

Obtener las métricas: recall, precision y F1

FP=0.
P=9.
N=len(df)-P
TN=N-FP
P=9.
N=len(df)-P
TP=8.
FP=0.
FN=1.
TN=N-FP
recall=TP/(TP+FN)
precision=TP/(TP+FP)
F1=2*precision*recall/(precision+recall)
print (recall)
print (precision)
print (F1)
0.8888888888888888
1.0
0.9411764705882353

*Parámetros optimizados: * th_noise=0.1 y dist=5

*Con esto obtenemos : * recall=1, precision=1 y F1=1;

Cómo configurar Jupyter Notebook con Python 3 en Ubuntu 18.04


Vamos a ver como a configurar Jupyter Notebook en un maquina con Ubuntu 18.04, y aprender a conectarse al Notebook y a utilizarlo. Jupyter Notebooks (o simplemente Notebooks) es un conjunto de documentos producidos por la aplicación Jupyter Notebook, la cual contiene tanto elementos de código icomo de texto enriquecido (párrafos, ecuaciones, cifras y enlaces, entre otros) que ayudan a presentar y compartir la investigación que puede reproducirse.

Al final de esta guía, podrá ejecutar código de Python 3 usando un Jupyter Notebook en ejecución.

Configurar Python

Para iniciar el proceso, instalaremos las dependencias que necesitamos para nuestro entorno de programación de Python desde los repositorios de Ubuntu. Ubuntu 18.04 viene con Python 3.6 previamente instalado. Usaremos el administrador de paquetes de Python pip para instalar componentes adicionales más tarde.

Necesitaremos primero actualizar el índice de paquetes local apt y luego descargaremos e instalaremos los paquetes:

sudo apt update

A continuación, instale pip y los archivos de encabezado de Python, utilizados por algunas dependencias de Jupyter:

sudo apt install python3-pip python3-dev

Ahora podemos proceder a configurar un entorno virtual de Python en el que instalaremos Jupyter.

Crear un entorno virtual de Python para Jupyter

Ahora Python 3, sus archivos de encabezado y pip están listos para comenzar, podemos crear un entorno virtual de Python para administrar nuestros proyectos. Instalaremos Jupyter en este entorno virtual.

Para ello, primero necesitaremos acceso al comando virtualenv, que podemos instalar con pip.

Actualice pip e instale el paquete escribiendo lo siguiente:

sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv

El indicador -H garantiza que la política de seguridad defina la variable de entorno home como el directorio de inicio del usuario de destino.

Con virtualenv ya instalado, podemos comenzar a crear nuestro entorno. Cree un directorio en el que podamos guardar los archivos de nuestro proyecto y posiciónese en él: Daremos a este directorio el nombre my_project_dir, pero deberá usar un nombre que sea significativo para usted y para el trabajo que está desarrolle.

mkdir ~/my_project_dir
cd ~/my_project_dir

En el directorio del proyecto, crearemos un entorno virtual de Python. A los efectos de este tutorial, le daremos el nombre my_project_env, pero debería asignarle uno que se relacione con su proyecto.

virtualenv my_project_env

Con esto, se creará un directorio llamado my_project_env dentro de su directorio my_project_dir. Dentro de este, se instalarán una versión local de Python y una versión local de pip. Podemos usar esto para instalar y configurar un entorno aislado de Python para Jupyter.

Antes de instalar Jupyter, debemos activar el entorno virtual. Puede hacerlo escribiendo lo siguiente:

source my_project_env/bin/activate

Su línea de comandos cambiará para indicar que ahora realizará operaciones en un entorno virtual de Python. Tendrá un aspecto similar al siguiente: (my_project_env)[email protected]:~/my_project_dir$.

Con esto, estará listo para instalar Jupyter en este entorno virtual.

Instalar Jupyter

Una vez activado su entorno virtual, instale Jupyter con la instancia local de pip.

Nota: Cuando se active el entorno virtual (cuando (my_project_env) se encuentre al inicio de su línea de comandos), use pip en lugar de pip3, incluso si emplea Python 3. La copia del entorno virtual de la herramienta siempre se llama pip, independientemente de la versión de Python.

pip install jupyter

En este punto, habrá instalado con éxito todo el software necesario para ejecutar Jupyter. Ahora podremos iniciar el servidor de Notebook.

Ejecutar Jupyter Notebook

Ya dispone de todo lo que necesita para ejecutar Jupyter Notebook. Para ejecutarlo, introduzca el siguiente comando:

jupyter notebook

Se mostrará un registro de las actividades de Jupyter Notebook en el terminal. Cuando se ejecuta Jupyter Notebook, este funciona en un número de puerto específico. Normalmente, el primer notebook que ejecute usará el puerto 8888. Para verificar el número de puerto específico en el que se ejecuta Jupyter Notebook, consulte el resultado del comando utilizado para iniciarlo:

Output[I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret
[I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir
[I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at:
[I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72
[I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser.
[C 21:23:21.361 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

Si ejecuta Jupyter Notebook en una computadora local (no en un servidor), puede dirigirse a la URL que se muestra para conectarse a Jupyter Notebook. Si ejecuta Jupyter Notebook en un servidor, deberá establecer conexión con este usando túneles SSH.

Usar Jupyter Notebook

Si Jupyter Notebook aún no está en ejecución, inícielo con el comando jupyter notebook.

Con esto, debería establecer conexión con este usando un navegador web. Jupyter Notebook es una herramienta muy poderosa que dispone de muchas características. En esta sección se mostrarán algunas de las características básicas para que comience a usar el Notebook. Jupyter Notebook mostrará todos los archivos y las carpetas en el directorio desde el que se ejecuta. Por ello, cuando trabaje en un proyecto asegúrese de iniciarlo desde el directorio del proyecto.

Para crear un nuevo archivo de Notebook, seleccione New > Python 3 en el menú desplegable que se encuentra en la parte superior derecha:

Crear un nuevo notebook de Python 3

Con esto se abrirá un Notebook. Ahora podemos ejecutar el código de Python en la celda o cambiar la celda a lenguaje de marcado. Por ejemplo, cambie la primera celda para aceptar el lenguaje de marcado haciendo clic en Cell > Cell Type > Markdown en la barra de navegación de la parte superior. Con esto, podremos escribir notas usando el lenguaje de marcado e incluso incluir ecuaciones escritas en LaTeX disponiéndolas entre los símbolos de $$. Por ejemplo, escriba lo siguiente en la celda después del cambio a lenguaje de marcado:

# First Equation

Let us now implement the following equation:
$$ y = x^2$$

where $x = 2$

Para convertir el lenguaje de marcado en texto enriquecido, presione CTRL + ENTER. Deberían aparecer los siguientes resultados:

Resultados de lenguaje de marcado

Puede utilizar las celdas de lenguaje de marcado para crear notas y documentar su código. Implementaremos esa ecuación e imprimiremos el resultado. Haga clic en la celda superior y presione ALT+ENTER para añadir una celda debajo de esta. Ingrese el código siguiente en la nueva celda.

x = 2
y = x**2
print(y)

Para ejecutar el código, presione CTRL+ENTER. Obtendrá los siguientes resultados:

Resultado de la primera ecuación

Ahora podrá importar módulos y usar el Notebook como lo haría con cualquier otro entorno de desarrollo de Python.

A partir de aquí, puede iniciar un proyecto de análisis y visualización de datos o por ejemplo ,si está interesado en abordar el tema en mayor profundidad, puede investigar sobre Visualización y pronóstico de series de tiempo.

Como ejemplo , en las lineas siguientes mostramos una ejecución de los comandos anteriormente vistos:

[email protected]:~$ sudo apt install python3-pip python3-dev
[sudo] contraseña para carlos: 
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
python3-dev ya está en su versión más reciente (3.8.2-0ubuntu2).
python3-pip ya está en su versión más reciente (20.0.2-5ubuntu1.5).
Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios.
  distro-info libfprint-2-tod1 libllvm9
Utilice «sudo apt autoremove» para eliminarlos.
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 40 no actualizados.
[email protected]:~$ sudo -H pip3 install --upgrade pip
Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (21.1.3)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[email protected]:~$ sudo -H pip3 install virtualenv
Requirement already satisfied: virtualenv in /usr/local/lib/python3.8/dist-packages (20.4.7)
Requirement already satisfied: distlib<1,>=0.3.1 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (0.3.2)
Requirement already satisfied: six<2,>=1.9.0 in /usr/lib/python3/dist-packages (from virtualenv) (1.14.0)
Requirement already satisfied: appdirs<2,>=1.4.3 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (1.4.4)
Requirement already satisfied: filelock<4,>=3.0.0 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (3.0.12)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[email protected]:~$ ls
Descargas   Escritorio  Música      Público  Vídeos
Documentos  Imágenes    Plantillas  snap
[email protected]:~$ mkdir ~/mi_proyecto_dir
[email protected]:~$ mkdir ~/mi_proyecto_dir
mkdir: no se puede crear el directorio «/home/carlos/mi_proyecto_dir»: El archivo ya existe
[email protected]:~$ cd ~/mi_proyecto_dir
[email protected]:~/mi_proyecto_dir$ virtualenv mi_proyecto_env
created virtual environment CPython3.8.5.final.0-64 in 458ms
  creator CPython3Posix(dest=/home/carlos/mi_proyecto_dir/mi_proyecto_env, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/carlos/.local/share/virtualenv)
    added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[email protected]:~/mi_proyecto_dir$ source mi_proyecto_env/bin/activate
(mi_proyecto_env) [email protected]:~/mi_proyecto_dir$ pip install jupyter
Collecting jupyter
  Downloading jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)
Collecting ipykernel
  Downloading ipykernel-5.5.5-py3-none-any.whl (120 kB)
     |████████████████████████████████| 120 kB 2.7 MB/s 
Collecting jupyter-console
  Downloading jupyter_console-6.4.0-py3-none-any.whl (22 kB)
Collecting notebook
  Downloading notebook-6.4.0-py3-none-any.whl (9.5 MB)
     |████████████████████████████████| 9.5 MB 9.2 MB/s 
Collecting qtconsole
  Downloading qtconsole-5.1.0-py3-none-any.whl (119 kB)
     |████████████████████████████████| 119 kB 1.6 MB/s 
Collecting ipywidgets
  Downloading ipywidgets-7.6.3-py2.py3-none-any.whl (121 kB)
     |████████████████████████████████| 121 kB 1.6 MB/s 
Collecting nbconvert
  Downloading nbconvert-6.1.0-py3-none-any.whl (551 kB)
     |████████████████████████████████| 551 kB 2.3 MB/s 
Collecting ipython>=5.0.0
  Downloading ipython-7.25.0-py3-none-any.whl (786 kB)
     |████████████████████████████████| 786 kB 3.2 MB/s 
Collecting tornado>=4.2
  Downloading tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl (427 kB)
     |████████████████████████████████| 427 kB 3.2 MB/s 
Collecting traitlets>=4.1.0
  Downloading traitlets-5.0.5-py3-none-any.whl (100 kB)
     |████████████████████████████████| 100 kB 2.9 MB/s 
Collecting jupyter-client
  Downloading jupyter_client-6.1.12-py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 3.3 MB/s 
Collecting pygments
  Downloading Pygments-2.9.0-py3-none-any.whl (1.0 MB)
     |████████████████████████████████| 1.0 MB 4.6 MB/s 
Requirement already satisfied: setuptools>=18.5 in ./mi_proyecto_env/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->jupyter) (57.0.0)
Collecting matplotlib-inline
  Downloading matplotlib_inline-0.1.2-py3-none-any.whl (8.2 kB)
Collecting pexpect>4.3
  Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
     |████████████████████████████████| 59 kB 3.4 MB/s 
Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0
  Downloading prompt_toolkit-3.0.19-py3-none-any.whl (368 kB)
     |████████████████████████████████| 368 kB 3.5 MB/s 
Collecting jedi>=0.16
  Downloading jedi-0.18.0-py2.py3-none-any.whl (1.4 MB)
     |████████████████████████████████| 1.4 MB 2.7 MB/s 
Collecting backcall
  Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting pickleshare
  Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting decorator
  Downloading decorator-5.0.9-py3-none-any.whl (8.9 kB)
Collecting parso<0.9.0,>=0.8.0
  Downloading parso-0.8.2-py2.py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 1.7 MB/s 
Collecting ptyprocess>=0.5
  Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting wcwidth
  Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Collecting ipython-genutils
  Downloading ipython_genutils-0.2.0-py2.py3-none-any.whl (26 kB)
Collecting nbformat>=4.2.0
  Downloading nbformat-5.1.3-py3-none-any.whl (178 kB)
     |████████████████████████████████| 178 kB 3.7 MB/s 
Collecting widgetsnbextension~=3.5.0
  Downloading widgetsnbextension-3.5.1-py2.py3-none-any.whl (2.2 MB)
     |████████████████████████████████| 2.2 MB 4.5 MB/s 
Collecting jupyterlab-widgets>=1.0.0
  Downloading jupyterlab_widgets-1.0.0-py3-none-any.whl (243 kB)
     |████████████████████████████████| 243 kB 2.8 MB/s 
Collecting jsonschema!=2.5.0,>=2.4
  Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
     |████████████████████████████████| 56 kB 2.4 MB/s 
Collecting jupyter-core
  Downloading jupyter_core-4.7.1-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 545 kB/s 
Collecting six>=1.11.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting attrs>=17.4.0
  Downloading attrs-21.2.0-py2.py3-none-any.whl (53 kB)
     |████████████████████████████████| 53 kB 1.7 MB/s 
Collecting pyrsistent>=0.14.0
  Downloading pyrsistent-0.17.3.tar.gz (106 kB)
     |████████████████████████████████| 106 kB 4.7 MB/s 
Collecting pyzmq>=17
  Downloading pyzmq-22.1.0-cp38-cp38-manylinux2010_x86_64.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 9.0 MB/s 
Collecting argon2-cffi
  Downloading argon2_cffi-20.1.0-cp35-abi3-manylinux1_x86_64.whl (97 kB)
     |████████████████████████████████| 97 kB 2.4 MB/s 
Collecting terminado>=0.8.3
  Downloading terminado-0.10.1-py3-none-any.whl (14 kB)
Collecting Send2Trash>=1.5.0
  Downloading Send2Trash-1.7.1-py3-none-any.whl (17 kB)
Collecting prometheus-client
  Downloading prometheus_client-0.11.0-py2.py3-none-any.whl (56 kB)
     |████████████████████████████████| 56 kB 2.9 MB/s 
Collecting jinja2
  Downloading Jinja2-3.0.1-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 5.3 MB/s 
Collecting python-dateutil>=2.1
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |████████████████████████████████| 227 kB 6.1 MB/s 
Collecting cffi>=1.0.0
  Downloading cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl (411 kB)
     |████████████████████████████████| 411 kB 5.6 MB/s 
Collecting pycparser
  Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 6.4 MB/s 
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl (30 kB)
Collecting defusedxml
  Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting jupyterlab-pygments
  Downloading jupyterlab_pygments-0.1.2-py2.py3-none-any.whl (4.6 kB)
Collecting pandocfilters>=1.4.1
  Downloading pandocfilters-1.4.3.tar.gz (16 kB)
Collecting entrypoints>=0.2.2
  Downloading entrypoints-0.3-py2.py3-none-any.whl (11 kB)
Collecting testpath
  Downloading testpath-0.5.0-py3-none-any.whl (84 kB)
     |████████████████████████████████| 84 kB 2.3 MB/s 
Collecting nbclient<0.6.0,>=0.5.0
  Downloading nbclient-0.5.3-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 156 kB/s 
Collecting mistune<2,>=0.8.1
  Downloading mistune-0.8.4-py2.py3-none-any.whl (16 kB)
Collecting bleach
  Downloading bleach-3.3.0-py2.py3-none-any.whl (283 kB)
     |████████████████████████████████| 283 kB 2.0 MB/s 
Collecting async-generator
  Downloading async_generator-1.10-py3-none-any.whl (18 kB)
Collecting nest-asyncio
  Downloading nest_asyncio-1.5.1-py3-none-any.whl (5.0 kB)
Collecting webencodings
  Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Collecting packaging
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 2.3 MB/s 
Collecting pyparsing>=2.0.2
  Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
     |████████████████████████████████| 67 kB 2.3 MB/s 
Collecting qtpy
  Downloading QtPy-1.9.0-py2.py3-none-any.whl (54 kB)
     |████████████████████████████████| 54 kB 1.6 MB/s 
Building wheels for collected packages: pyrsistent, pandocfilters
  Building wheel for pyrsistent (setup.py) ... done
  Created wheel for pyrsistent: filename=pyrsistent-0.17.3-cp38-cp38-linux_x86_64.whl size=106707 sha256=e6bbf1c3ab821bff25db37c383511188da3a4f86108ffafb72e36a85a06af1a7
  Stored in directory: /home/carlos/.cache/pip/wheels/3d/22/08/7042eb6309c650c7b53615d5df5cc61f1ea9680e7edd3a08d2
  Building wheel for pandocfilters (setup.py) ... done
  Created wheel for pandocfilters: filename=pandocfilters-1.4.3-py3-none-any.whl size=8006 sha256=b9ea03260cb4b2803d7d4ce8b6af9838ccd6c5a1509e73f783636910928a9d84
  Stored in directory: /home/carlos/.cache/pip/wheels/fc/39/52/8d6f3cec1cca4ceb44d658427c35711b19d89dbc4914af657f
Successfully built pyrsistent pandocfilters
Installing collected packages: ipython-genutils, traitlets, six, pyrsistent, attrs, wcwidth, tornado, pyzmq, python-dateutil, pyparsing, ptyprocess, parso, jupyter-core, jsonschema, webencodings, pygments, pycparser, prompt-toolkit, pickleshare, pexpect, packaging, nest-asyncio, nbformat, matplotlib-inline, MarkupSafe, jupyter-client, jedi, decorator, backcall, async-generator, testpath, pandocfilters, nbclient, mistune, jupyterlab-pygments, jinja2, ipython, entrypoints, defusedxml, cffi, bleach, terminado, Send2Trash, prometheus-client, nbconvert, ipykernel, argon2-cffi, notebook, widgetsnbextension, qtpy, jupyterlab-widgets, qtconsole, jupyter-console, ipywidgets, jupyter
Successfully installed MarkupSafe-2.0.1 Send2Trash-1.7.1 argon2-cffi-20.1.0 async-generator-1.10 attrs-21.2.0 backcall-0.2.0 bleach-3.3.0 cffi-1.14.5 decorator-5.0.9 defusedxml-0.7.1 entrypoints-0.3 ipykernel-5.5.5 ipython-7.25.0 ipython-genutils-0.2.0 ipywidgets-7.6.3 jedi-0.18.0 jinja2-3.0.1 jsonschema-3.2.0 jupyter-1.0.0 jupyter-client-6.1.12 jupyter-console-6.4.0 jupyter-core-4.7.1 jupyterlab-pygments-0.1.2 jupyterlab-widgets-1.0.0 matplotlib-inline-0.1.2 mistune-0.8.4 nbclient-0.5.3 nbconvert-6.1.0 nbformat-5.1.3 nest-asyncio-1.5.1 notebook-6.4.0 packaging-20.9 pandocfilters-1.4.3 parso-0.8.2 pexpect-4.8.0 pickleshare-0.7.5 prometheus-client-0.11.0 prompt-toolkit-3.0.19 ptyprocess-0.7.0 pycparser-2.20 pygments-2.9.0 pyparsing-2.4.7 pyrsistent-0.17.3 python-dateutil-2.8.1 pyzmq-22.1.0 qtconsole-5.1.0 qtpy-1.9.0 six-1.16.0 terminado-0.10.1 testpath-0.5.0 tornado-6.1 traitlets-5.0.5 wcwidth-0.2.5 webencodings-0.5.1 widgetsnbextension-3.5.1
WARNING: You are using pip version 21.1.2; however, version 21.1.3 is available.
You should consider upgrading via the '/home/carlos/mi_proyecto_dir/mi_proyecto_env/bin/python -m pip install --upgrade pip' command.
(mi_proyecto_env) [email protected]:~/mi_proyecto_dir$ jupyter notebook
[I 18:20:27.709 NotebookApp] Writing notebook server cookie secret to /home/carlos/.local/share/jupyter/runtime/notebook_cookie_secret
[I 18:20:28.151 NotebookApp] Serving notebooks from local directory: /home/carlos/mi_proyecto_dir
[I 18:20:28.151 NotebookApp] Jupyter Notebook 6.4.0 is running at:
[I 18:20:28.151 NotebookApp] http://localhost:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
[I 18:20:28.151 NotebookApp]  or http://127.0.0.1:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
[I 18:20:28.151 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 18:20:28.257 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///home/carlos/.local/share/jupyter/runtime/nbserver-3327-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
     or http://127.0.0.1:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69

Configuración de Visual Studio Code y WSL para el desarrollo MPI


Muchos planes de estudios requieren que se realicen pequeños programas con  MPI como parte del curso de Computación paralela, por lo que en este post   intentaremos ver como hacer la configuración de WSL (Subsistema de Windows para Linux) y Visual Studio Code para el desarrollo de MPI, que se ejecuta en Ubuntu WSL Distro de Microsoft Store

Configuración de WSL

En las versiones recientes de Windows, WSL está habilitado de forma predeterminada y todo lo que necesita hacer es instalar una distribución debajo de él.

Comenzaremos descargando la distribución de Ubuntu de Microsoft Store. Abra la tienda desde el menú de inicio y busque Ubuntu 18.04 o haga clic aquí

Imagen para publicación
Toca «Obtener» para instalar la distribución de Ubuntu de WSL

después de  instalarlo, ábralo y siga todas las instrucciones para ingresar su nombre de usuario y contraseña predeterminados, etcétera.

Instalación de OpenMPI y herramientas de compilación para OpenMPI

Ahora debería estar mirando una ventana de línea de comandos, ejecutando bash, con el logotipo de ubuntu como el icono de la aplicación en la barra de tareas. Si ve esto, significa que ha instalado con éxito la distribución de Ubuntu en WSL

Ahora escriba el siguiente comando para instalar OpenMPI. En el caso de la siguiente captura de pantalla, ya se ha instalado.

sudo apt update && sudo apt install openmpi-bin libopenmpi-dev

Después de esto, inmediatamente podrá usar mpicc y mpirun para ejecutar y compilar programas que usen MPI, pero pronto verá este mensaje.

WARNING: Linux kernel CMA support was requested via thebtl_vader_single_copy_mechanism MCA variable, but CMA support isnot available due to restrictive ptrace settings.

Esto se debe a uno de los parámetros con los que WSL está configurado de forma predeterminada. Para resolver esto, necesitamos ejecutar este comando

  echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Después de esto, la advertencia simplemente desaparecerá.

Para compilar con MPI  simplemente debemos usr el compilador mpicc  , como por ejemplo:

>mpicc -o ejemplo ejemplo.c

Y para ejecutarlo usaremos mpirun  pasándole con el argumento -n el numero de procesadores:

mpirun -n 2 ./ejemplo

Ahora veamos un ejemplo sencillo para probar mpi :

 

#include<stdio.h>

#include<mpi.h>

int main( int argc, char* argv[] ) {

    int rank, size;

  

    // Paralelismo

    MPI_Init( &argc, &argv );

    // Indice del proceso

    MPI_Comm_size( MPI_COMM_WORLD, &size );

    // Tamano del comunicador seleccionado

    MPI_Comm_rank( MPI_COMM_WORLD, &rank );

    printf( "Hola mundo! Soy el proceso numero %d. En total somos %d procesos.\n", rank, size );




    MPI_Finalize();

}

 

 Para poder ejecutar con más procesadores  de los que físicamente tiene el equipo al usar  mpirun  pasándole con el argumento -n (el numero de procesadores) , nos dará un error :
>mpirun -n 4 ./ejemplo
There are not enough slots available in the system to satisfy the 3slots that were requested by the application:
  ./Step6-SendReceive
Either request fewer slots for your application, or make more slotsavailable for use.
A "slot" is the Open MPI term for an allocatable unit where we canlaunch a process.  The number of slots available are defined by theenvironment in which Open MPI processes are run:
  1. Hostfile, via "slots=N" clauses (N defaults to number of     processor cores if not provided)  2. The --host command line parameter, via a ":N" suffix on the     hostname (N defaults to 1 if not provided)  3. Resource manager (e.g., SLURM, PBS/Torque, LSF, etc.)  4. If none of a hostfile, the --host command line parameter, or an     RM is present, Open MPI defaults to the number of processor cores
In all the above cases, if you want Open MPI to default to the numberof hardware threads instead of the number of processor cores, use the--use-hwthread-cpus option.
Alternatively, you can use the --oversubscribe option to ignore thenumber of available slots when deciding the number of processes tolaunch.

Como no es difícil de adivinar el error advierte de que intentamos ejecutar  en mas procesadores los que realmente se tienen en nuestra máquina .Para simular los procesadores que no se tiene podemos utilizar el flag –oversubscribe

 
Sería así:
mpirun -np 4 –oversubscribe ./programa

 

 

Si solo desea ejecutar programas en el terminal y no necesitar configurar Visual Studio Code, ahora puede hacerlo usando mpicc y mpirun desde la consola .De lo contrario, siga leyendo para descubrir cómo configurar VSCode para la tarea.

Configuración de VSCode

Suponemos que ya tiene VSCode instalado, si no, descárguelos de su sitio web .

Necesitaremos instalar WSL Remote desde su página de Extensiones de Visual Studio , después de eso, haga clic en el nuevo ícono en la parte inferior izquierda para iniciar una nueva sesión de WSL.

Imagen para publicación

Después de eso, le pedirá que elija un directorio que desea abrir. Continúe y abra el directorio en el que planea realizar su desarrollo.

Para habilitar el resaltado de sintaxis, intellisense y otras características conscientes del lenguaje, también necesitamos configurar el soporte C / C ++ en VSCode. Para eso, vaya al panel de extensiones e instálelo

Imagen para publicación

Ahora, por defecto, VSCode no va a poder encontrar mpi.h, lo cual es fundamental para poder brindar sugerencias para Interfaces MPI, para eso necesitaremos configurar el includePath y la ruta ejecutable en el C / C ++ Ajustes.

 

Probablemente tenga  un archivo llamado c_ccp_properties.json en la carpeta .vscode en su directorio del programa 
    "configurations": [

        {

            "name": "Win32",

            "includePath": [

                "${workspaceFolder}/**", "C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\"

            ],

            "defines": [

                "_DEBUG",

                "UNICODE",

                "_UNICODE"

            ],

            "compilerPath": "C:\\MinGW\\bin\\gcc.exe",

            "cStandard": "gnu11",

            "cppStandard": "gnu++14",

            "intelliSenseMode": "windows-gcc-x86"

        }

    ],

    "version": 4

}

 Modifique ese archivo llamado c_ccp_properties.json en la carpeta .vscode en su directorio del programa MPI para poderlo  ejecutar desde Linux :

{

    "configurations": [

        {

            "name": "Linux",

            "includePath": [

                "${workspaceFolder}/**",

                "/usr/lib/x86_64-linux-gnu/openmpi/include"

            ],

            "defines": [],

            "compilerPath": "/usr/bin/mpicc",

            "cStandard": "c11",

            "cppStandard": "c++17",

            "intelliSenseMode": "clang-x64"

        }

    ],

    "version": 4

}
 
Se puede conseguir auto construcción y ejecución  por lo que además  de lo anteriror, si desea poder compilar y ejecutar directamente desde VSCode, debemos agregar las siguientes tareas de compilación y lanzamiento
 
fichero=launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(mpirun) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/usr/bin/mpirun",
"args": ["-np", "4", "${fileDirname}/${fileBasenameNoExtension}.out"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,

}
]
}

fichero task.json

 
{

    "version": "2.0.0",

    "tasks": [

        {

            "type": "shell",

            "label": "gcc build active file",

            "command": "/usr/bin/gcc",

            "args": [

                "-g",

                "${file}",

                "-o",

                "${fileDirname}/${fileBasenameNoExtension}"

            ],

            "options": {

                "cwd": "/usr/bin"

            },

            "problemMatcher": [

                "$gcc"

            ],

            "group": "build"

        },

        {

            "type": "shell",

            "label": "mpicc build active file",

            "command": "/usr/bin/mpicc",

            "args": [

                "-g",

                "${file}",

                "-o",

                "${fileDirname}/${fileBasenameNoExtension}.out"

            ],

            "options": {

                "cwd": "/usr/bin"

            },

            "problemMatcher": [

                "$gcc"

            ],

            "group": {

                "kind": "build",

                "isDefault": true

            }

        },

    ]

}

Con esa configuración, debería poder usar sus atajos de teclado predeterminados para Ejecutar sin depurar (Ctrl + F5) y Generar (Ctrl + Shift + B) para construir y ejecutar sus programas MPI.

Como crear un USB de arranque desde linux


A veces nuestro equipo Windows o Linux puede tener ciertos problemas en funcionalidades que no sabemos achacar si es al propio sistema operativo, a alguna aplicacion que hayamos instalado qeu entre en conflicto con otra o quizas algun componente hardware. Pensando en estos casos una solucion muy interesante es arrancar con una unidad USB que contenga la maxima cantidad de drivers y sw basico para probar si es achacable al propio sistema operativo o algun aspecto del hardware que nos este fallando

En este post , pues vamos a ver como generar una unidad USB con la que salir de dudas y que seguro mas una vez nos podra sacar de algun apuro ¿le interesa el tema pues no nos demoremos mas y veamos los pasos a seguir?

1. Información general

Con una memoria USB de arranque de Ubuntu, puede:

  • Instalar o actualizar Ubuntu
  • Pruebe la experiencia de escritorio de Ubuntu sin tocar la configuración de su PC
  • Inicie Ubuntu en una máquina prestada o desde un cibercafé
  • Utilice las herramientas instaladas de forma predeterminada en la memoria USB para reparar o arreglar una configuración rota

Crear una memoria USB de arranque de Ubuntu es muy simple, especialmente desde Ubuntu mismo, y cubriremos el proceso en los siguientes pasos.

Alternativamente, también tenemos tutoriales para ayudarlo a crear una memoria USB de arranque desde Microsoft Windows y Apple macOS .

 

2. Requisitos

Necesitará:

  • Una memoria USB / unidad flash de 4 GB o más
  • Ubuntu Desktop 14.04 o posterior instalado
  • Un archivo ISO de Ubuntu. Consulte Obtener Ubuntu para obtener enlaces de descarga.
  • Xubuntu es un sistema operativo Linux elegante y fácil de usar basado en Ubuntu y desarrollado por la comunidad.. Xubuntu incluye Xfce, que es un entorno de escritorio estable, ligero y configurable.Es ideal para quien quiera lo mejor de sus PCs, portátiles y netbooks dándoles un aspecto moderno y obteniendo funcionalidades suficientes y eficientes para el día a día. Además, funciona bien en máquinas antiguas.Para más información, visite el sitio web de Xubuntu. Puede probar tambien la version Xubuntu 20.01 desde here.
Descarga una ISO de Ubuntu

Por cierto ,la «X» en Xubuntu proviene de Xfce, el ambiente de escritorio de Xubuntu. Así también la palabra «ubuntu» muestra la dependencia y el uso del núcleo de Ubuntu, que a su vez representa el núcleo filosófico del sistema operativo. Un significado aproximado de la palabra ubuntu es «humanidad hacia los demás». Para conocer más sobre la filosofía e ideales detrás de Ubuntu y Xubuntu puede ir a la página Filosofía de Ubuntu [En inglés].

Además de utilizar el núcleo de Ubuntu, Xubuntu también utiliza la infraestructura proporcionada y patrocinada por Canonical Ltd., una compañía fundada por Mark Shuttleworth.

3. Inicie Startup Disk Creator

Vamos a utilizar una aplicación llamada ‘Startup Disk Creator’ para escribir la imagen ISO en su memoria USB. Esto se instala de forma predeterminada en Ubuntu y se puede iniciar de la siguiente manera:

  1. Inserte su memoria USB (seleccione ‘No hacer nada’ si se lo solicita Ubuntu)
  2. En Ubuntu 18.04 y versiones posteriores, use el icono de la parte inferior izquierda para abrir ‘Mostrar aplicaciones’
  3. En versiones anteriores de Ubuntu, use el ícono superior izquierdo para abrir el tablero
  4. Utilice el campo de búsqueda para buscar Startup Disk Creator
  5. Seleccione Startup Disk Creator de los resultados para iniciar la aplicación
Buscar Startup Disk Creator

 

Si no lo tiene instalado ,para instalar la aplicación desde consola , ejecute los siguientes comandos:

sudo apt update
sudo apt install usb-creator-gtk

Además, si está ejecutando KDE o Kubuntu en lugar de Ubuntu o Ubuntu Gnome, probablemente debería usar en usb-creator-kdelugar de usb-creator-gtk:

sudo apt update
sudo apt install usb-creator-kde

Además, si está utilizando LXQT en Lubuntu, probablemente desee utilizar usb-creator-kde.

4. Selección de ISO y USB

Cuando se inicie, Startup Disk Creator buscará los archivos ISO en su carpeta de Descargas , así como cualquier almacenamiento USB adjunto en el que pueda escribir.

Es probable que tanto su ISO de Ubuntu como el dispositivo USB correcto se hayan detectado y configurado como ‘Imagen de disco de origen’ y ‘Disco para usar’ en la ventana de la aplicación. De lo contrario, use el botón ‘Otro’ para ubicar su archivo ISO y seleccione el dispositivo USB exacto que desea usar de la lista de dispositivos.

Haga clic en Crear disco de inicio para iniciar el proceso.

Hacer dispositivo USB

5. Confirme el dispositivo USB

Antes de realizar cambios permanentes, se le pedirá que confirme que el dispositivo USB que ha elegido es correcto. Esto es importante porque todos los datos almacenados actualmente en este dispositivo se destruirán.

Después de confirmar, se iniciará el proceso de escritura y aparecerá una barra de progreso.

Progreso de escritura USB

6. Instalación completa

¡Eso es todo! Ahora tiene Ubuntu en una memoria USB, de arranque y listo para funcionar.

Si desea instalar Ubuntu, eche un vistazo a nuestro tutorial de instalación de escritorio de Ubuntu .

Escritura USB completa

Buscando mas  ayuda

Si se queda atascado, la ayuda siempre está a mano. He  aquí algunas referencias que nos pueden ayudar:

 

Instalación de python en Linux


Muchos proyectos que manejan elementos multimedia están escritos actualmente en Python como por ejemplo el proyecto PRMC, que es una colección de módulos de Python escritos en Python [ 3 ] ), por lo lo tanto, necesitará un intérprete y saber cómo desarrollar / ejecutar programas Python ( módulos y paquetes ). .

La mayoría de los sistemas operativos actuales basados ​​en Unix (Linux, FreeBSD y OSX) utilizan Python para ejecutar algunas de sus «tareas diarias», lo que significa que ya hay disponible un intérprete de Python. Sin embargo, normalmente es mejor utilizar nuestro propio intérprete porque:

  1. Podemos elegir la versión de Python y los paquetes.
  2. Podemos optimizar la compilación del intérprete en función de nuestras necesidades (por ejemplo, incluyendo soporte Tk o no).
  3. Por defecto, todos los paquetes de Python se instalarán en un repositorio diferente de los paquetes del sistema, lo que facilita el aislamiento de Python del sistema / usuario y la eliminación del intérprete.

En Windows, debe instalar Python, sí o sí, desde el sitio web oficial . Sin embargo, tenga en cuenta que esta «guía» solo contempla la instalación de Python en máquinas con sistema operativo basado en Unix.

Instalación de Python.

         sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
         cd
         curl https://pyenv.run | bash
         cat << EOF >> ~/.bashrh
         export PATH="$HOME/.pyenv/bin:$PATH"
         eval "$(pyenv init -)"
         EOF
         source ~/.bashrc
         pyenv install -v 3.8.5
         pyenv virtualenv 3.8.5 tm

 

  • Recuerde que necesitará activarlo cuando quiera trabajar en este proyecto:   
        pyenv activate tm

 Es una buena idea agregar esto al archivo ~ / .bashrc .

  • Instale un IDE para programar con Python. Recomiendo a Thonny si no está acostumbrado a ningún otro.
     pip instalar thonny  

Recursos de programación Python.

Si ni domina Python para seguir este curso puede  seguir algún tutorial de programación de Python, como The Python Tutorial 1 ] sobre todo si se da cuenta de que el lenguaje es un revés para ti.

Si necesita comenzar con Python desde cero, una introducción a Python como este taller de YAPT 2 ] también podría ser útil. 

También puede consultar también el tutorial de Python de ZetCode .

Aquí otros enlaces interesantes sobre Python:

[1]   El tutorial de Python .

[2]   YAPT .

[3]   Sitio web de Python .

Instalar Xubuntu en un USB


La siguiente “guía” le ayuda a instalar Xubuntu en una unidad USB externa , que debe tener al menos 8GB de capacidad (la instalación mínima de Xubuntu 20.04 necesita alrededor de 5GB). También necesitará un disco USB externo temporal con al menos 4GB para arrancar desde él la imagen de instalación de Xubuntu (o para grabar un disco óptico ).

Por supuesto si tiene un ordenador con suficientes recursos (al menos 8 GB de RAM), también puedes instalar Xubuntu en una máquina virtual (VirtualBox, por ejemplo). En este caso, necesitará al menos 4 GB de RAM y 8 GB de espacio en disco a Xubuntu.

Xubuntu es un sistema operativo Linux basado en Ubuntu y desarrollado por la comunidad.

Xubuntu es un sistema operativo elegante y fácil de usar. Xubuntu incluye Xfce, que es un entorno de escritorio estable, ligero y configurable.

Es ideal para quien quiera lo mejor de sus PCs, portátiles y netbooks dándoles un aspecto moderno y obteniendo funcionalidades suficientes y eficientes para el día a día. Además, funciona bien en máquinas antiguas.

Para más información, visite el sitio web de Xubuntu.

Acerca del nombre

La «X» en Xubuntu proviene de Xfce, el ambiente de escritorio de Xubuntu. Así también la palabra «ubuntu» muestra la dependencia y el uso del núcleo de Ubuntu, que a su vez representa el núcleo filosófico del sistema operativo. Un significado aproximado de la palabra ubuntu es «humanidad hacia los demás». Para conocer más sobre la filosofía e ideales detrás de Ubuntu y Xubuntu puede ir a la página Filosofía de Ubuntu [En inglés].

Además de utilizar el núcleo de Ubuntu, Xubuntu también utiliza la infraestructura proporcionada y patrocinada por Canonical Ltd., una compañía fundada por Mark Shuttleworth.

 Instalación de Xubuntu en un pen-drive USB

Suponiendo que haya decidido usar Xubuntu 20.04 en un disco USB, estos son los pasos que debe realizar (para instalar Xubuntu en una partición de disco de su computadora, las instrucciones son casi las mismas):

  1. Descargue la imagen de instalación desde aquí .
  2. “Grabe” la unidad USB de 4GB con la imagen. Dependiendo de su sistema operativo actual, use las siguientes instrucciones para Windows , OSX , Ubuntu (y derivados) , o la consola para todos los Linux.
  3. Inicie la imagen desde el puerto USB. Este paso depende de su ordenador. La mayoría de las PC pueden elegir el dispositivo de inicio presionando la tecla F12 cuando la PC se está iniciando. En una Mac, debe mantener presionada la tecla alt cuando se está iniciando.
  4. Seleccione la opción Probar Xubuntu sin instalar .
  5. Cuando el sistema operativo se esté ejecutando, con fi gure la red.
  6. Inserte también la unidad USB de 8GB donde se instalará Xubuntu.
  7. Seleccione Instalar Xubuntu 20.04 LTS .
  8. Seleccione inglés como idioma utilizado durante la instalación y el sistema instalado. Esto le ayudará en caso de que necesite buscar información en Internet, proporcionando las descripciones de los errores en inglés.
  9. Seleccione la distribución de su teclado (probablemente español ).
  10. Abra una terminal y escriba:   df – h para ver todas las particiones de disco montadas y su capacidad. Tenga en cuenta que no se debe montar ninguna partición de / dev / sda (el disco duro) (aunque puede hacerlo, no es necesario montar ninguna partición del disco duro), la partición / dev / sdb1 (con Xubuntu image) debe montarse y, finalmente, si Thunar (el administrador de archivos predeterminado en Xubuntu) ha reconocido la primera partición de la segunda unidad USB externa , debe aparecer como / dev / sdc1. Esta partición debe desmontarse para instalar en ella Xubuntu. De todos modos, si continúa con el proceso de instalación sin desmontarlo, el instalador le pedirá que lo haga. En esta descripción, se ha supuesto que su ordenador  solo tiene un disco duro.
  11. Elija Descargar actualizaciones mientras instala Xubuntu e Instale software de terceros para gráficos y hardware Wi-Fi y formatos de medios adicionales , para tener acceso al último software disponible para Ubuntu (y sus derivados).
  12. Elija Borrar disco e instale Xubuntu . Ignore las funciones avanzadas. Espere un par de minutos
  13. Seleccione la unidad correspondiente a la unidad USB de 8 GB ( / dev / sdc ). ¡No elija / dev / sda (el disco principal de su ordenador  pues podria borrar su contenido)! Seleccione / dev / sdc !!
  14. En este punto de la instalación, debe considerar (dependiendo de la cantidad de memoria RAM instalada en su computadora y el tamaño de la unidad USB) crear una partición específica para realizar el intercambio. La regla del pulgar es crear una partición con el mismo tamaño que la RAM. Sin embargo, probablemente no pueda hacer eso en una unidad USB de 8 GB porque se necesitan al menos 5 GB para una instalación de Xubuntu. De todos modos, tenga en cuenta que este paso es opcional porque siempre puede realizar el intercambio en un archivo (un proceso un poco más lento que usar la partición dedicada). Tenga en cuenta también que PRMC requiere solo algunos MB de memoria para ejecutarse y, por lo tanto, probablemente no necesitará intercambiar ninguna página de memoria en absoluto. Si decide crear una partición de intercambio específica, haga clic en “herramienta avanzada de particionamiento” y realice las modificaciones que desee, y también verifique que el cargador de arranque ( GRUB ) esté instalado en / dev / sdc1 . Pero recuerde, todas las acciones descritas en este punto son opcionales (excepto seleccionar / dev / sdc1 para GRUB).
  15. Haga clic en Instalar ahora. Algo parecido a: Si continúa, los cambios que se enumeran a continuación se escribirán en los discos. De lo contrario, podrá realizar más cambios manualmente. ADVERTENCIA: Esto destruirá todos los datos de las particiones que haya eliminado, así como de las particiones que se formatearán. Se cambian las tablas de particiones de los siguientes dispositivos:  SCSI8 (0,0,0) (sdc) Se formatearán las siguientes particiones:  partición # 1 de SCSI8 (0,0,0) (sdc) como ESP  partición # 2 de SCSI8 (0,0,0) (sdc) como ext4
  16. Elija su zona horaria.
  17. Configure su cuenta personal, nombre de host y proceso de registro.
  18. Espere a que finalice la instalación y arranque su nuevo Xubuntu. No se preocupe si grub etiqueta Xubuntu como Ubuntu. Esto es normal.

Primeros pasos con Terraform


Desde hace un tiempo se oye hablar mucho de DevOps, una fusión que combina las áreas de   Desarrollo,Operaciones y Control de calidad

Es una extensión natural de metodologías Agile y es habitual el uso de los principios CAMS, cuyas siglas vienen de:

  • Cultura relacionada con comunicación humana, procesos y herramientas
  • Automatización de procesos
  • Monitorización
  • Sharing feedback, buenas prácticas y conocimiento

En DevOps son habituales las prácticas siguientes:

  • Planificación ágil
  • Despliegue continuo (CI/CD). La subida de cambios al repositorio de código desencadena la ejecución de pruebas automatizadas que finalmente  realizan el despliegue de los cambios tras superarse las pruebas.
  • Infraestructura como código (Infrastructure as Code). Se trata del desarrollo de scripts para las tareas de despliegue y gestión de la infraestructura
  • Contenedorización. Combinada con la Infraestructura como código permite el despliegue instantáneo de aplicaciones en contenedores.
  • Microservicios. Facilita el aislamiento de problemas y maximiza la producción
  • Infraestructura cloud. Favorece la disponibilidad y la automatización.

 

En este post vamos a ver Terraform, una herramienta para construir, modificar y versionar infraestructura de forma segura y eficiente.

Terraform es una herramienta de orquestación de código abierto desarrollado por Hashicorp que nos permite definir nuestra infraestructura como código, esto quiere decir que es posible escribir en un fichero de texto la definición de nuestra infraestructura usando un lenguaje de programación declarativo y simple.

Terraform tiene soporte para una gran cantidad de proveedores de infraestructura local o en la nube, Amazon Web Services (AWS), Digital Ocean, Microsoft Azure, VMware vSphere, son ejemplos de proveedores de servicios. Puedes ver todos los proveedores soportados en la documentación de Terraform.

 

Estos proveedores de nube cuentan con sus propias herramientas de infraestructura como código, por ejemplo algunos de ellos como Amazon AWS que tiene a CloudFormation que solo soporta la infraestructura en Amazon, OpenStack tiene Heat, Azure tiene Resource Manager, pero Terraform no está cerrado a un proveedor en específico, puede trabajar con todos ellos e incluso de forma simultánea sin ningún inconveniente.

Instalación en sistema operativo Windows

La instalación de Terraform es muy sencilla. Se descarga como un binario que hay que descomprimir y luego se coloca en un directorio incluido en el PATH del sistema y. Probamos su funcionamiento desde la terminal con terraform donde a encontramos el ejecutable.

Bueno, estos son los pasos  a seguir para instalar Terraform en ambiente Windows:

Nos iremos a la  página oficial https://www.terraform.io/downloads.html.

 

Seleccionamos el sistema operativo y la arquitectura, en nuestro caso elegiremos Windows 64­bit puesto que lo instalaremos en una maquina Windows 10.

Creamos un directorio para el ejecutable de Terraform,copiamos el fichero descargado anteriormente al directorio terraform y nos situamos en el directorio terraform.,Justo entonces descomprimimos el ejecutable ( necesitaremos el winzip instlado ) en el interior del directorio creado anteriormente.

Ahora vamos a añadir la variable de entorno de Terraform para el usuario, para ello en el de cortana buscamos «Configuracion avanzada del sistema » y pinchamos en este . A continuacion pulsamos en Variables de entorno

 

En la siguiente pantalla pulsamos el botón Nueva.

Asignamos un nombre a la variable y en el botón Examinar archivo buscamos la ruta del ejecutable de Terraform.

Ahora desde una ventana de símbolo de sistema comprobamos que Terraform funciona escribiendo terraform -v.

 

NOTA:  En el caso de usar Linux seguiriamos unos pasos similares: Seleccionamos desde la pagina de descargas de Terraform el sistema operativo y la arquitectura, ( normalmente Linux 64­bit puesto si por ejemplo lo instalasemos en una maquina Debian jessie) .Creamos un directorio para los binarios de Terraform y moveremos el fichero descargado anteriormente al interior de la carpeta.Nos situamos en el directorio terraform,descomprimimos los binarios de Terraform con el comando unzip.Finalmente exportamos las variables de entorno de Terraform con el comando export PATH=/home/usuario/terraform:$PATH y comprobamos que se ha instalado bien ejecutando terraform –version.

 

Sintaxis

Hashicorp usa su propio lenguaje de configuración para la descripción de la infraestructura.

Los archivos Terraform se pueden escribir en dos formatos:

  • HashiCorp Configuration Language (HCL). El formato preferido es el HCL. Desde Terraform 0.12 está disponible HCL2 y se recomienda usar HCL2La extensión de los archivos es .tf

  • JSON. La extensión de los archivos es .tf.json

El objetivo de Terraform es declarar recursos. Todas las características del lenguaje giran en torno a hacer que la definición de recursos sea más flexible y convniente.

Los recursos puede agruparse en módulos, que crean una unidad de configuración de nivel más alto. Un recurso describe un objeto básico de infraestructura, mientras que un módulo describe un conjunto de objetos y sus relaciones para crear un sistema mayor.

 

Una configuración Terraform consta de un módulo raíz donde comienza la evaluación. El módulo puede contener módulos hijo que se van llamando unos a otros. La configuración más sencilla de módulo contendría sólo un archivo .tf (main.tf) aunque se recomienda una organización como la siguiente:

  • main.tf: Configuración de lo recursos del módulo

  • providers.tf: Proveedor de los recursos del módulo.Terraform puede crear stacks de infraestructura en varios proveedores. Por ejemplo, una configuración podría crear infraestructura en Google Cloud Platform y en OpenStack-DI.Hay gran cantidad de proveedores Terraform, tanto oficiales, mantenidos por Hashicorp, (AWS, Azure, Google Cloud Platform, Heroku, Kubernetes, MongoDB Atlas, OpenStack, VMware Cloud, VMware vSphere, …​) como de la comunidad y terceros (OpenShift, Trello, Telegram, …​).Porejemplo para openstack usarimos este archivo

     

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.openstack_password
      auth_url    = var.openstack_auth_url
    }
  • variables.tf Variables de entrada-Las variables de entrada se usan como parámetros para los módulos. Se crean mediante bloques variable.Las variables se usan siguiendo esta sintaxis var.<variable>. POr ejemplo para openstack usariamos esta sintaxis:

     

    variable "openstack_user_name" {
        description = "The username for the Tenant."
        default  = "your-openstack-user"
    }
    
    variable "openstack_tenant_name" {
        description = "The name of the Tenant."
        default  = "your-openstack-project"
    }
    
    variable "openstack_password" {
        description = "The password for the Tenant."
        default  = "your-openstack-password"
    }
    
    variable "openstack_auth_url" {
        description = "The endpoint url to connect to OpenStack."
        default  = "http://openstack.di.ual.es:5000/v3"
    }
    
    variable "openstack_keypair" {
        description = "The keypair to be used."
        default  = "your-openstack-keypair-name"
    }



  • output.tf: Variables de salida.Sse usan para pasar valores a otros módulos o para mostrar en el CLI un resultado tras un despliegue con terraform apply.Se definen con bloques output y un identificador único. Normalmente, toman como valor una expresión (p.e. una IP generada para una instancia creada).

NOTA: Para evitar introducir datos sensibles en los archivos de configuración y evitar que queden expuestos en el sistema de control de versiones es buena práctica configurar valores sensibles en variables de entorno.

El convenio de Terraform es que definamos en la shell las variables precedidas de TF_VAR_. Por ejemplo, definimos una variable de entorno TF_VAR_PASSWORD que será accedida por Terraform como PASSWORD.

Seguiremos estos pasos:

  1. Configurar la variables en la shell

    $ export TF_VAR_PASSWORD=xxxx
  2. Cargar la variable en Terraform en el archivo variables.tf

    ...
    variable "PASSWORD" {} 
    ...
      La variable de entorno TF_VAR_PASSWORD es reconocida en Terraform como PASSWORD
  3. Usar la variable en Terraform en el el archivo providers.tf

    provider "openstack" {
      user_name   = var.openstack_user_name
      tenant_name = var.openstack_tenant_name
      password    = var.PASSWORD 
      auth_url    = var.openstack_auth_url
    }

Idenpotencia

Una característica muy interesante de Terraform es la idempotencia, así como la facilidad para aplicar cambios. Si volvemos a ejecutar un despliegue con terraform apply y no ha habido cambios en los archivos de configuración tras el último despliegue (cuyo estado quedó almacenado en el archivo .tfstate), el despliegue quedará intacto. Es decir, no se volverá a crear infraestructura repetida ni se reemplazará la infraestructura creada por una nueva si no hay cambios en los archivos de configuración.

Sin embargo, si modificamos la configuración modificando los archivos Terraform estaremos indicando un nuevo estado al que queremos llegar. En este caso, al aplicar terraform apply sí se desplegarán los cambios realizados en la configuración. Sin embargo, sólo se desplegarán los cambios, manteniendo intacta la configuración no modificada.

Estos son los pasos que se deben seguir para construir, mantener y eliminar una infraestructura con Terraform.

  1. Inicializar el directorio del proyecto Terraform (terraform init). El comando descarga todos los componentes necesarios, incluyendo módulos y plugins.

  2. Crear un plan de ejecución (terraform plan). El comando determina las acciones necesarias para alcanzar el estado deseado especificado en los archivos de configuración.

  3. Crear o modificar la infraestructura (terraform apply). Terraform es idempotente. Al usar este comando sólo se ejecutan los cambios que se hayan realizado en los archivos de configuración sin volver a crear lo que ya existe y no se ha modificado. Para esto se utilizan los archivos de estado.

  4. Mostrar las variables de salida de un despliegue (terraform output).

  5. Eliminar la infraestructura (terraform destroy). Se usa para eliminar la infraestructura creada.

Como lanzar terraform

Dentro de cada carpeta de ejemplos ejecuta:

$ terraform init
$ terraform apply

Tras unos instantes se mostrarán las IPs asignadas a las máquinas virtuales creadas y aprovisionadas.

El comandoterraform init  creará una carpeta .terraform con en plugin de OpenStack instalado y disponible para ser usado en el proyecto.

 

Ejemplos  para probar   todo esto que hemos visto  tanto en Open Stack como Google Cloud Platform se pueden encontar en  https://github.com/ualmtorres/terraform-examples