miércoles, 14 de febrero de 2018

Contar el total de repeticiones de una palabra en archivo | Programas en C



Ya había pensado en compartir los programas en C y demás programas en otros lenguajes de programación que me dejaban en la facultad, pero, por alguna razón no lo había hecho.

Les comparto ahora un programa en C, que cuenta el total de repeticiones de una palabra dentro de un archivo de texto.

Aquí el código:

#include <stdio.h> #include <string.h> #include <ctype.h> #define MAXCHAR 1000 int main() { FILE *fp; char cad_arch[MAXCHAR]; char* nom_archivo = "prueba.txt"; char cad_buscar[30], palabra_extraida[20]; int i = 0, j = 0, contador = 0; printf("Ingresa la palabra a buscar: "); scanf("%s", cad_buscar); fp = fopen(nom_archivo, "r"); if (fp == NULL){ printf("No se puede abrir el archivo %s", nom_archivo); return 1; } printf("\n\t\t--- Contenido del archivo ---\n\n"); while (fgets(cad_arch, MAXCHAR, fp) != NULL){ printf("%s", cad_arch); for (i = 0; i < strlen(cad_arch); i++){ while (i < strlen(cad_arch) && !isspace(cad_arch[i]) && isalnum(cad_arch[i])){ palabra_extraida[j++] = cad_arch[i++]; } if(j != 0){ palabra_extraida[j] = '\0'; if (strcmp(palabra_extraida, cad_buscar) == 0){ contador++; } j = 0; } } } printf("\nTotal de coincidencias: %d\n", contador); fclose(fp); return 0; }

Se usan funciones básicas de las librerías para cadenas y comparaciones.

El archivo puede contener este tipo de palabras y oraciones:

.hola hola .hola hola .hola hola -hola hola holis, adios, no, lo, hola hola
1, 1, 2, 3 hola
.hola h
fin hola
-hola,
-hola,
hol
holamundo
-hola, mundo

El archivo de ejemplo, se busca la palabra hola, y es posible contarla incluso, si hay comas, puntos, guiones o algún otro caracter especial.

La imagen es un ejemplo de ejecución.

viernes, 2 de febrero de 2018

Glosarios, acrónimos y referencias con TexStudio LaTeX

Imagen 1


TexStudio

TeXstudio ha sido creado por Texmaker en 2009, debido al proceso de desarrollo no abierto de Texmaker y a las diferentes filosofías en cuanto a la configurabilidad y características. Originalmente se llamaba TeXmakerX porque comenzó como un pequeño juego de extensiones para Texmaker con la esperanza de que algún día se integraran en Texmaker. Mientras que en algunos puntos usted todavía puede ver que TeXstudio se origina de Texmaker, los cambios significativos en las características y la base de código lo han hecho a un programa completamente independiente.
TeXstudio se ejecuta en Windows, Unix/Linux, BSD y Mac OS X. Está licenciado bajo la GPL v2. Al ser de código abierto, usted es libre de utilizarlo y modificarlo a su gusto.


Es mi editor de documentos LaTeX actualmente, es completo, fácil de utilizar, y viene incluido en los repositorios de mi distro Favorita, es decir, en Fedora.

El documento que les compartiré ahora, es sobre cómo compilar glosario, acrónimos y referencias en un documento LaTeX utilizando TexStudio.

1.- Configurar TexStudio

Lo primero es configurar TexStudio para que se compilen todas las características en un sólo clic.

Ir a menú <Opciones><Configurar TexStudio>

Imagen 2

Clic en la opción <Mostrar opciones avanzadas>

Seleccionar la opción <Compilar> y clic en el botón de <Configuración>


Imagen 3


Agregar las configuraciones como se ven en la imagen de arriba.

Si desean compilar el archivo de ejemplo que les dejaré aquí, necesitan instalar minted, aquí cómo instalarlo en Fedora y Windows.

Además, es necesario agregar la opción --shell-escape en la compilación de comandos en <Opciones> <Configurar TexStudio> en la opción <Comandos>

Imagen 4


2.- Paquetes básicos para glosario, acrónimos y referencias

Los paquetes necesarios son los siguientes:

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\languageshorthands{spanish}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage{fancyhdr}
\usepackage{apacite}
\usepackage[acronym]{glossaries}


\makeglossaries

Configuración de glosarios, acrónimos y referencias. En este ejemplo, los datos se incluyen por separado y en el documento aparecen en hojas independientes.

\glossarystyle{altlistgroup}
% se incluye el archivo de definición de acrónimos
\include{acronimos}
% se incluye el archivo de definición de glsario
\include{glosario}

Sin, más aquí les dejo el archivo descargable con el ejemplo completo, y sin necesidad de paquetes adicionales complejos. Todo lo que necesitan es Texlive, de preferencia completo.



Aquí les dejo el PDF completo del tutorial, del primer archivo descargable, contiene imágenes, los archivos .tex etc.





Y eso sería todo, espero que sea de utilidad.

miércoles, 31 de enero de 2018

Instalar PostgreSQL 10 y pgAdmin 4 en Fedora 27


PostgreSQL 10

PostgreSQL es un poderoso sistema de base de datos de objetos-relacional de código abierto. Cuenta con más de 15 años de desarrollo activo y una arquitectura comprobada que le ha ganado una sólida reputación por su fiabilidad, integridad de datos y corrección. Funciona en todos los sistemas operativos principales, incluyendo Linux, UNIX (AIX, BSD, HP-UX, MacOS, Solaris) y Windows. Es totalmente compatible con ACID, tiene soporte completo para llaves extranjeras, uniones, vistas, disparadores y procedimientos almacenados (en múltiples idiomas). Incluye la mayoría de los tipos de datos SQL: 2008, incluyendo INTEGER, NUMÉRICO, BOOLEAN, CHAR, VARCHAR, DATE, INTERVALO y TIMESTAMP. También soporta el almacenamiento de objetos binarios grandes, incluyendo imágenes, sonidos o video. Cuenta con interfaces de programación nativa para C/C++, Java,. Net, Perl, Python, Ruby, Tcl, ODBC, entre otros, y documentación excepcional.


**Realizar copias de seguridad
Antes de continuar, es necesario realizar copias de seguridad de las bases de datos que se tengan.

Desinstalar cualquier versión previa que se tenga de postgresql.

sudo dnf remove postgresql-server pgadmin3

Añadir el repositorio de PostgreSQL 10

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/10/fedora/fedora-27-x86_64/pgdg-fedora10-10-3.noarch.rpm

Instalar PostgreSQL 10


sudo dnf install postgresql10-server postgresql10 pgadmin4-v2

Este comando instalará todos los siguientes paquetes:




Iniciar en modo root:


su -
Iniciar PGDATA


# /usr/pgsql-10/bin/postgresql-10-setup initdb
Este comando mostrará una ventana similar a la siguiente:




Iniciar el servicio de PostgreSQL 10:

# systemctl start postgresql-10.service

Verificar la instalación y cambiar la contraseña:


su - postgres -c "psql"
Este comando mostrará la siguiente salida:

Ahí se cambia la contraseña, para poder utilizar el gestor.

Modificar el archivo postgresql.conf para editar el puerto la ip en la que se ejecutará el proceso.

# gedit /var/lib/pgsql/10/data/postgresql.conf 

Y agregar lo siguiente:

#Descomentar las siguiente líneas, tienen que quedar así.
listen_addresses = '*'  # what IP address(es) to listen on;
port = 5432    # (change requires restart)

Configuración del archivo pg_hba.conf

# gedit  /var/lib/pgsql/10/data/pg_hba.conf

Y modificar lo siguiente esto:


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/24            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Reiniciar el servicio de PostgreSQL 10:


# systemctl restart postgresql-10.service

Ahora, acceder a la gestor de base de datos desde una interfaz gráfica. Anteriormente se utilizaba pgAdmin III, sin embargo en la nueva versión no abre correctamente la sesión. De tal manera que ahora utilizo dbeaver para acceder a las base de datos.


Ahora iniciar pgAdmin 4


Interfaz de pgAdmin 4



La interfaz de pgAdmin 4 es realmente simple de utiliza y muy fácil. En esta ocasión simplemente mostraré cómo crear una nueva conexión y ya ustedes realizarán el resto. Recordar que siempre existen herramientas externas como dbeaver, para conectarse en modo gráfico al gestor de la base de datos.



Rellenar los campos de datos requeridos:




Una vez agregada la conexión, se podrá editar y configurar de la siguiente manera:




Fuentes:
https://www.postgresql.org/download/
https://tecadmin.net/install-postgresql-server-centos/
https://linuxgx.blogspot.mx/2016/11/instalar-postgresql-96-y-pgadmin-iii-en.html
https://linuxgx.blogspot.mx/2017/08/instalar-postgresql-96-y-pgadmin-iii-en.html

martes, 30 de enero de 2018

Laptop Lemur System76



Comprar en el extranjero

Primero que nada, cuando se realiza una compra en línea, y sobre todo si la empresa no es muy conocida, es necesario investigarla a fondo, si tienes sucursales, físicas, que exista un número real, etc.

La empresa se llama Systema76, sitio oficial https://system76.com/. Su página es relativamente simple, pero muy fácil de utilizar, nada del otro mundo. Así que mi investigación inicio en youtube, buscando a los compradores que ya tenían un equipo de dicha empresa. Una vez que hallé toda la información necesaria para tomar la decisión de comprarla, pues lo hice, la compra se hace directamente desde su página oficial.

El tiempo de llegada fue de 4días, el proceso de compra con el banco fueron de 4 días también, recordemos que fue una compra internacional.

El equipo debe pagarse aduana, y lo paga el cliente, además, el precio de la página oficial, incluye costo de envío adicional, mediante UPS.

Por qué compré dicho equipo?

Primero, la relación de costo y características, sin incluir costos de envíos y aduana, son completamente proporcionales desde mi punto de vista, y sobre todo considerando que en México, no es posible hallar por ejemplo un i7 de séptima generación,  8 de RAM, y 1TB en HDD, por menos de 18mil pesos MXN y mucho menos si lo consideramos en octava generación.

Otras de las característica que tiene este equipo, es que es 100% compatible con Linux, es decir, que todo el hardware, es compatible con todos los SO Linux y los drivers que vienen por defecto en dichos SO. Eso me consta, lo he probado en estos últimos días.



Es decir, que todos los componentes internos son desmontables, y lo pueden corroborar en la imagen de arriba.

Las características con las que cuenta el equipo son  las siguientes https://system76.com/laptops/lemur:

Operating System: Pop!_OS 17.10 (64-bit) or Ubuntu 16.04.3 LTS (64-bit)
Processor: 7th Gen Intel® Core i3-7100U or 8th Gen Intel® Core i7-8550U
                  i3-7100U: 2.4 GHz – 3 MB cache – 2 cores – 4 threads
                  i7-8550U: 1.8 up to 4.0 GHz – 8 MB cache – 4 cores – 8 threads
Display 14.1″ 1920×1080 IPS, Matte Finish
Graphics Intel® HD Graphics 620
Memory Up to 32 GB Dual Channel DDR4 @ 2133 MHz
Storage M.2 SSD, 2.5″ 7mm height drive. Up to 6 TB total
Expansion USB 3.1 Type-C, USB 3.0 Type-A, USB 2.0 Type-A, SD Card Reader
Input Multitouch Touchpad, Chiclet Keyboard
Networking Gigabit Ethernet, Intel® Wireless-AC, Bluetooth
Video Ports HDMI, VGA
Audio Stereo Speakers, Stereo Mic, Headphone Jack, Mic Jack, 5.1 channel (HDMI)
Camera 720p (1280×960) HD Webcam
Security Disabled ME, Kensington® Lock
Battery Removable 4 Cell Smart Li-Ion – 44 Wh
Charger 40 W, AC-in 100–240 V, 50–60 Hz
Dimensions 13.4″ × 9.5″ × 0.9″ (34.01 × 24.21 × 2.21 cm)
Weight 3.6 lbs. (1.6 kg.)

Actualmente en  mi equipo tiene 24GB de ram, 2TB HDD sata 2.5 y 120GB en SSD.


Redimiento actual

No hay otra manera más fácil de probar el rendimiento que iniciar todas aplicaciones posibles:
Y ver el funcionamiento del procesamiento:

Inicié todas 2 máquinas virtuales de Windows 10 de 64bits y 1 con kali y una más con Fedora 27, con VirtualBox. Navegador, VLC, Aquí la imagen:




En monitor del sistema, se visualiza de la siguiente manera:



En modo terminal, se visualiza así de bonito



Una vez finalizado y cerrado todos los programas abiertos, los procesos ya bajan un poco, he aquí el resultado:




En cuando al uso, a pesar de todas aplicaciones abiertas, la navegación entre ventanas, búsqueda archivos, cambio de pestañas en el navegador, e incluso la reproducción de vídeos, es estable, liviana, no se congela el sistema, no se pasma, nada de nada. Definitivamente es un equipo que vale la pena.


Conclusión

Este equipo efectivamente, cumple sus características en relación al costo. En pesos Mexicanos tiene un costo aproximadamente de 18mil, considerando el precio del dólar. Además, hay que pagar el costo de envío y aduana. Sin embargo sí lo vale. Y ahora puedo decir que la empresa sí existe.

El equipo cumple sus características, en las mini-pruebas, si es que le podemos llamar así, el ventilador, proceso del disco, etc, no hay alteración que sea significativa.

Actualmente tengo un disco SSD de 120GB donde está el SO, el cual tarda aproximadamente unos 18 segundos en iniciar. Además, tengo un HDD de 2TB normal, el cual almacena los datos e información independiente al SO, y hasta ahora va perfecto.

viernes, 26 de enero de 2018

Instalar MySQL 8.0.X en Fedora 27



Ya está la versión 8.0 de MySQL, y aquí los pasos para la instalación. en Fedora 27.

Éstos pasos los he probado y verificado en mi propia máquina. Así que cualquier duda que tengan, espero poder ayudarlos.

Instalación del repositorio de MySQL

Previo a la instalación de este repositorio, es necesario eliminar los repos anteriores de mysql, por ejemplo de la version 5.6 ó 5.7, estos repositorios solo se eliminan los archivos mysql-*.repo que haya en la ruta /etc/yum.repos.d

Instalación del nuevo repositorio:

sudo dnf install https://dev.mysql.com/get/mysql57-community-release-fc27-10.noarch.rpm


Instalación de MySQL 8.0.X


sudo dnf --enablerepo=mysql80-community install mysql-community-server


Instalar MySQL


sudo dnf --enablerepo=mysql80-community install mysql-community-server


Iniciar MySQL

systemctl start mysqld.service

## use restart after update

systemctl enable mysqld.service

Obtener la contraseña aleatoria generada automáticamente

Si solo van a actualizar MySQL, la contraseña a utilizar es la anterior que se usaba para root, si es una instalación nueva, entonces se obtiene de esta manera.

grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log |tail -1

Y la salida será parecida a esta:

2018-01-20T21:11:44.229891Z 1 [Note] A temporary password is generated for root@localhost: -et)QoL4MLid

Si por alguna razón no les da ninguna salida el comando, pueden buscar manualmente la contraseña, el archivo se encuentra en la ruta  sudo gedit /var/log/mysqld.log

Instalación segura de MySQL

Ahora, es necesario realizar las siguientes configuraciones de MySQL:
  • Cambiar la contraseña
  • Eliminar usuarios anónimos
  • Deshabilitar accesos remotos
  • Eliminar bases de datos de prueba y sus accesos
  • Recargar permisos de usuarios
Este proceso inicia con el siguiente comando:

su -
/usr/bin/mysql_secure_installation

Seguir los pasos del instructivo, así como se muestra en la salida de ejemplo siguiente:

Securing the MySQL server deployment.

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 

Re-enter new password: 

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password: 

Re-enter new password: 

Estimated strength of the password: 50 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

Conectarse a localhost

En mi caso, iniciaremos con root, utilizando la contraseña que se haya establecido en los pasos de arriba, y cambiar el tipo de autenticación de MySQL.

A partir de la versión 5.7.x se agregó un nuevo método de autenticación que se llama caching_sha2_password, sin embargo, la configuración es un poco tediosa en linux para poderla utilizar con MySQL Workbench.

mysql -h localhost -u root -p
Esto iniciará el prompt de mysql:

Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.4-rc-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Cambiar contraseña del usuario root y convertirlo a tipo por defecto de autenticación de mysql:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'nueva-o-la-misma-contraseña';


Agregar el servicio de MySQL el firewall

firewall-cmd --permanent --zone=public --add-service=mysql

## ó ##

firewall-cmd --permanent --zone=public --add-port=3306/tcp


Reinicia el servicio de MySQL

systemctl restart firewalld.service


Instalación de MySQL Workbench

sudo dnf --disablerepo=\* --enablerepo='mysql*-community*' list available
sudo dnf install mysql-workbench-community



Fuentes: