Publicado el Deja un comentario

Menú contextual “Documento nuevo” no existe en el administrador de archivos de Ubuntu 18.04 LTS

Para mi sorpresa después de estar usando la versión 18.04 LTS de Ubuntu me encuentro que la opción del menú contextual del administrador de archivos, “Documento nuevo”, ya no aparece. La opción “Carpeta nueva” sigue apareciendo pero por alguna extraña razón eliminaron la de crear un documento nuevo.

Para hacer que aparezca de nuevo es necesario hacer lo siguiente: haga un archivo de texto vacío en la carpeta “Plantillas”, que se debe de encontrar dentro de tu “Carpeta personal”, y nombre dicho archivo el nombre que quiera que aparezca en el sub menú de “Documento nuevo”. En mi caso nombré el archivo “Documento nuevo.txt” . Si no se encuentra la carpeta “Plantillas”, créela y coloque el archivo como se describió anteriormente.

Una vez hecho esto, inmediatamente se activará la opción “Documento nuevo” en el menú contextual del administrador de archivos de Ubuntu.

Espero y les sirva. ¡Deja tus dudas y/o comentarios!

¡Hasta pronto!

 

 

Publicado el Deja un comentario

Instalación del sistema operativo en un servidor Proliant ML30 Gen9: no reconoce el CD/DVD.

Al tratar de instalar el Sistema Operativo Ubuntu Server 18.04 LTS en un servidor Proliant ML30 Gen9 de HP, simplemente no arrancaba del DVD de instalación insertado en la unidad óptica. Era como si no hubiera un disco insertado, trataba de hacer el “booteo” desde la red.

Después de varios intentos y descartando que fuera la configuración del modo de boot UEFI, encontré la razón: el controlador SATA donde se encuentra conectada la unidad óptica está deshabilitada por defecto. Para habilitarla después de la etapa POST presionar F9 para entrar al menú de System Utilities, ahi seleccionar la opción System Configuration -> Bios/Plataform Configuration (RBSU) -> PCI Device Enable/Disable -> Embedded SATA Controller #1: Intel (R) SATA Controller y habilitarla cambiando el valor a Enabled.

Una vez habilitada esta opción, reiniciamos el equipo, presionamos F11 después de la etapa de POST  para seleccionar la secuencia de boot y ahí selecionamos nuestra unidad de CD/DVD y presionamos Intro y listo, el servidor arrancará el CD o DVD de instalación.

¿Dudas? ¿Erratas? ¡Deja tu comentario!

¡Hasta pronto!

Publicado el Deja un comentario

La utilería Brasero se congela después de actualizar a Ubuntu 18.04 LTS

Después de actualizar Ubuntu de 16.04 LTS a la nueva versión 18.04 LTS e intentar quemar un disco de música, al iniciar la grabación del CD simplemente Brasero de congelaba y no grababa nada.

Al parecer hay un bug reportado y se debe a los permisos que le asigna la actualización a ciertos archivos del Brasero.  Para solucionarlo hay que hacer los cambios de permiso que indica en el bug reportado de la siguiente forma:

Una vez realizado estos cambios, Braso debe funcionar sin problemas.

¿Dudas? ¿Algúna sugerencia? ¡Haz tu comentario!

¡Hasta la próxima!

 

Publicado el Deja un comentario

Convertir o mostrar fecha como texto en Excel

Para mostrar como texto una fecha en Excel, podemos usar la siguiente fórmula:

La celda B1, utiliza la funcion TEXTO() para convertir tanto el numero de día como el número del mes de la fecha en la celda A1 a sus nombres correspondientes. Las funciones DIA() y AÑO(), para obtener el día y el año respectivamente de la misma fecha  y  la función CONCAT() para concatenar los resultados de las fórmulas y los textos necesarios que formarán el texto resultante final.

Podemos también concatenar los textos utilizando el símbolo & (et o ampersand) en lugar de la función CONCAT() y obtendremos el mismo resultado como se muestra la fórmula en la celda C1:

Pueden jugar con los textos y las posiciones para lograr el texto resultante requerido.

¿Dudas? Deja tu comentario.

¡Hasta pronto!

Publicado el Deja un comentario

Numerar por grupos los resultados de una consulta SQL en Oracle

En el post pasado vimos como numerar los resultados de una consulta desde 1 a el total de registros devueltos por la consulta con la función ROW_NUMBER(). Ahora queremos que numere desde 1  hasta el número de registros que exista en cada grupo distinto de datos que regrese la consulta. Para ejemplificar usaremos la consulta siguiente a la tabla EMPLOYEES:

PARTITION BY le indica a la función ROW_NUMBER(), que va a numerar a partir de 1 por cada grupo de registro con diferente valor en el campo DEPARTMENT_ID.  ORDER BY le indica que va a numerar los registros de cada grupo de acuerdo al orden ascendente del valor del campo LAST_NAME

Veamos el fragmento del resultado que daría la consulta SQL anterior para entender mejor el funcionamiento:

Como vemos en el resultado, la numeración (columna NUMERO_CONSECUTIVO en el resultado) reinicia con 1 por cada valor de DEPARTMENT_ID distinto y los numera de acuerdo al orden del valor LAST_NAME: en el DEPARTMENT_ID “10” sólo existe 1 empleado y tiene el valor de “Whalen” en el campo LAST_NAME. En el DEPARTMENT_ID “20” existen 2 empleados con los valores “Fay” y “Hartstein” y los numeró de acuerdo al orden alfabético, a “Fay” le dió el NUMERO_CONSECUTIVO “1” y a “Hartstein” el 2. En el DEPARTMENT_ID “30” hay 6 empleados y los numeró del 1 al 6 de acuerdo al orden alfabético de LAST_NAME y así sucesivamente con el resto de los empleados.

Si existiera una clausula ORDER BY en la sentencia, el orden del despliegue de salida  sería por los campos indicados en dicha cláusula.

¿Dudas? ¿Preguntas? Deja tus comentarios. ¡Hasta la próxima!

 

 

Publicado el Deja un comentario

Numerar los resultados de una consulta SQL en Oracle

Queremos que los resultados de una consulta SQL en una base de datos ORACLE sean numerados del 1 al total de registros o filas obtenidas en la consulta.

Para ello podemos utilizar la función ROW_NUMBER()  de la siguiente forma:

Nos daría como resultado algo como esto:

En la sentencia SQL anterior, estamos indicando que numere los resultados de acuerdo al orden del campo DEPARTMENT_NAME (nombre del departamento) y le asigne a esa numeración el nomnre de NUMERO_CONSECUTIVO.  La cláusula ORDER BY en la función ROW_NUMBER() es obligatoria. Este ordenamiento es independiente de el orden que se le puede dar al resultado final. Si sólo existe el ordenamiento de la función ROW_NUMBER() en la sentencia SQL, el resultado de la consulta saldrá ordenado por el orden indicado en ésta. Por ejemplo la siguiente sentencia:

En donde agregamos que muestre el campo DEPARTMENT_ID y que el resultado final lo ordene por éste mismo campo, daría como resultado esto:

Como se puede observar, el orden del resultado ahora es por el campo DEPARTMENT_ID, sin embargo la numeración es asignada de acuerdo al orden del campo DEPARTMENT_NAME. Como vemos el departamento  llamado “Accounting” sigue conservando el número 1 en la columna “NUMERO_CONSECUTIVO”, el departamento “Administration” el número 2 y así sucesivamente.

¿Dudas? Deja tu comentario.

¡Hasta la próxima!

 

Publicado el Deja un comentario

Cómo hacer inners joins (concatenaciones internas) con la ORM de Django

Bueno, estamos ahora aquí en un proyecto que utiliza Django como su marco de trabajo.  Y aprendiendo su ORM (mapeo objeto-relacional) me tope con la necesidad de hacer las famosas concatenaciones (joins) entre dos o más entidades.

Anteriormente he trabajado con las ORM de java (Hibernate, EclipseLink) y de .Net (Entity Framework) así que la de ORM  de Django y su QuerySet debería ser capaz de hacer concatenaciones (joins).

Para hacer concatenaciones internas en Django, utilizamos la función select_related(). Según la documentación, esta función sólo sigue relaciones de llaves foráneas (foreign-key), es decir, de tablas hijas a tablas padre o relaciones de uno a uno.

Imagina los registros en una tabla que representa los artículos vendidos de una factura. Llamaremos a la table linea_factura. Esta tabla tendrá como llaves foráneas el identificador de la factura de la tabla factura y el identificador del artículo de la tabla articulo.

Con select_related() sólo podríamos seguir las relaciones de llaves foráneas, es decir sólo podríamos relacional las lineas de la factura con la factura y/o con los artículos pero no en el sentido contrario, es decir, de la factura hacia las lineas de la factura, o de artículos  la linea de artículo. Para esto existe otra función que aún no he probado y espero tratar más adelante.

El código siguiente, que omite la definición de los modelos,  para obtener el QuerySet quedaría así:

lineas_factura = linea_factura.objects.select_related(‘factura’)
.select_relate(‘articulo’).filter(factura__no = 89)

Una vez que el programa haga referencia a la variable lineas_factura, este QuerySet lanzará la consulta sql con dos joins y cargará con los registros de linea_factura y la información relacionada de la tabla factura y de la tabla artículo, donde el número de  factura sea igual a 89. Es decir, la factura número 89 y su detalle.

Espero les sea claro. Si no, comenta el post.

¡Hasta la próxima!

 

Publicado el Deja un comentario

Herramientas de SAGA no se muestran en QGIS 2.18 en Ubuntu 16.04

Después de instalar la versión de 2.18 de QGIS y de haber instalado la versión 2.2.3 de SAGA en mi PC con Ubuntu 16.04, las herramientas de SAGA no me aparecían en la caja de herramientas de QGIS.

Buscando en internet encontré la solución en el sitio de gis.stackexchange.com.

Cerré QGIS y edité el archivo:  /usr/share/qgis/python/plugins/processing/algs/saga/SagaAlgorithmProvider.py
Cambiando la línea 76:
if not version.startswith(‘2.3.’):
por:
if not version.startswith(‘2.2.‘):

Guardé cambios, ejecuté nuevamente QGIS y las herramientas de SAGA aparecieron. Al parecer las nuevas versiones de QGIS 2.18 busca la versión 2.3.x de SAGA, y es por eso que no inicializaba las herramientas.

¡Hasta la próxima!

Publicado el Deja un comentario

Cómo definir una llave primaria (primary key) en una tabla existente en Oracle.

Supongamos que tenemos una tabla sin llave primaria y todos sus campos fueron definidos para aceptar valores nulos. El comando CREATE TABLE de dicha tabla se ejecutó así:

Una llave primaria o PRIMARY KEY puede estar formada por uno o varios campos, cuyos valores permiten identificar un sólo registro en la tabla. Luego entonces el campo que vayamos a escoger no debe permitir valores nulos (sin valor) ni repetidos. Identificamos que los valores del campo CVE_ENT son irrepetibles y que identifican a un sólo registro en la tabla.

Para modificar las propiedades de este campo y  que este no permita nulos de ahora en adelante, ejecutamos la siguiente sentencia:

Alteramos la tabla ENTIDAD modificando el campo CEV_ENT especificándole la restricción NOT NULL. Una vez ejecutada la sentencia, el campo ya no permitirá valores nulos.

Una vez logrado esto, procedemos a definir el campo CEVE_ENT como llave primaria de la tabla de esta forma:

Alteramos la tabla ENTIDAD agregando la restricción llave primaria (PRIMARY KEY) llamada ENTIDAD_PK conformada por el campo CVE_ENT.

Cabe aclarar que la restricción PRIMARY KEY, en Oracle, lleva implícito el no aceptar valores nulos en los campos que la conforman, sin embargo es buena práctica especificar explícitamente antes que el campo o campos que conformarán dicha llave primaria no acepten nulos con la sentencia ALTER que vimos anteriormente, ya que algunos motores de bases de datos así lo requieren.

¡Hasta la próxima!