miércoles, 30 de noviembre de 2016

GaussJordan en C



Cuando estudias programación, posiblemente uno de los programas básicos que te pedirán es el de GaussJordan, o tal vez no, pero como sea, aquí les comparto uno que desarrollé cuando lo necesité.

Es bastante simple, utiliza memoria dinámica para todo el cálculo y además si no encuentra solución pues envía un mensaje que no lo hay.

Hay muchas cosas que se necesitan pulir, por ejemplo, si ingresan más 20 ecuaciones, a veces se cicla. Claro, hay programas mucho más complejos que ya resuelven este problema, pero cuando a uno se lo piden, pues no es tan simple desarrollarlo.

El código es el siguiente, el cual solo se copia, se pega a un documento de texto y se compila con c, en mi caso utilizo geany para eso:

/* Autor: Fernando Merino
 * Programa: Método de Gauss-Jordan
 * Descripción: El método de Gauss-Jordan soluciona sistemas de ecuaciones
 * simultáneas.
 * */

#include <stdio.h>
#include <stdlib.h>

void gausJordan(float **matriz,int n,float *raices);
void imprimirMatriz(float *raices,int n);
void leerValores(float **matriz,int n);

int main(){
 int n;
 float **matriz,*raices;
 printf("Ingrese el número de ecuaciones (n): ");
 scanf("%d",&n);
 getchar();
 matriz=(float**) malloc (sizeof (float*)*n);
 raices=(float*) malloc (sizeof (float*)*n);
 leerValores(matriz,n);
 gausJordan(matriz,n,raices);
 printf("Solución \n\n");
 imprimirMatriz(raices,n);
 getchar();
 return 0;
}
void imprimirMatriz(float *raices,int n){
 int i;
 for(i=0;i<n;i++){
  printf("X%d = %f\n",i+1,raices[i]);
 }
}
void gausJordan(float **matriz,int n,float *raices){
 int i,j,k;
 float termino;
 for(i=0;i<n;i++){
  if(matriz[i][i]==0.0){
   fprintf(stderr,"Error: División entre 0:: No hay solución!!!\n\n");
   system("pause");
   return ;
  }
  for(k=0;k<n;k++){
   if(k!=i){
    termino=matriz[k][i]/matriz[i][i];
    for(j=0;j<=n;j++){
     matriz[k][j]-=termino*matriz[i][j];
    }
   }
  }
 }
 for(i=0;i<n;i++){
  termino=matriz[i][n]/matriz[i][i];
  raices[i]=termino;
 } 
}
void leerValores(float **matriz,int n){
 int i,j;
 for(i=0;i<n;i++){
  matriz[i]=(float*) malloc (sizeof(float)*(n+1));
  for(j=0;j<n;j++){
   printf("Ingrese coeficiente de 'X%d' de la ecuación %d: ",j+1,i+1);
   scanf("%f",&matriz[i][j]);
  }
  printf("Ingrese el resultado de la ecuación %d ",i+1);
  scanf("%f",&matriz[i][n]);
 }
}


Ahora, lo que le trato de implementar, es muestre los resultados en fracciones, todo el proceso, es decir, que se le ingrese algo así 1/4, y que así se lo lleve en todo el proceso, y que al final de un resultado en fracciones. Si alguien ya lo tiene por ahí y que sea en C, y quiera compartirlo, me parecería perfecto, esto más por hobbie. Gracias y espero que les sirva.

Configurar phppgAdmin para conectar con PostgreSQL en Fedora 25



phpPgAdmin es una aplicación web que provee una manera conveniente a los usuarios para crear bases de datos, tablas, alterarlas y consultar sus datos usando el lenguaje estándar SQL.

phpPgAdmin estuvo basado en phpMyAdmin, pero hoy día ya no comparte código con él; incluso provee las mismas funcionalidades y más a los usuarios del servidor de base de datos PostgreSQL.

Es muy útil cuando pgAdmin III no sea compatible con la versión que se tenga de postgresql, por ejemplo pgadmin III hasta hoy 30 de noviembre 2016, aún no tiene soporte como tal para postgresql 9.6, por ende este tipo de opciones son una alternativa.

La instalación y configuración para fedora 25 con postgresql 9.6 es la que veremos a continuación. Sin embargo, estos mismos pasos se pueden aplicar para otras versiones.

Ahora, aquí se da por entendido que postgresql ya está instalado y funcionando previamente.

Instalar phpPgAdmin y httpd.
sudo dnf -y install phpPgAdmin httpd
Configurar archivo:
su -c "gedit /etc/httpd/conf.d/phpPgAdmin.conf"
El archivo debe quedar de la siguiente manera, en caso de que haya líneas de más, comentarlas con #.

#
# This configuration file maps the phpPgAdmin directory into the URL space.
# By default this application is only accessible from the local host.
#

Alias /phpPgAdmin /usr/share/phpPgAdmin

<Location /phpPgAdmin>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted
        #Require local
        #Require host example.com
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order deny,allow
        Allow from all
        Allow from 127.0.0.1
        Allow from ::1
        # Allow from .example.com
    </IfModule>
</Location>

Iniciar o Reiniciar el servicios de apache:
sudo service httpd start

Configurar el archivo /etc/phpPgAdmin/config.inc.php para phpPgAdmin.
su -c "gedit /etc/phpPgAdmin/config.inc.php"
Buscar las siguientes líneas y modificarlas de tal modo que queden de la siguiente manera:
[...]
# esta línea debe quedar así:
$conf['servers'][0]['host'] = 'localhost';


[...]
# esta línea debe quedar así
$conf['extra_login_security'] = false;


[...]
La siguiente línea debe quedar así
$conf['owned_only'] = true;

Una vez finalizada la configuración del archivo, iniciar o reiniciar los servicios de postgresql, en este ejemplo se usó postgresql 9.6, por ente el comando es el siguiente, adecuarlo de acuerdo a la versión de postgresql que estén usando.

sudo systemctl start postgresql-9.6.service

Ahora, ir al http://localhost/phpPgAdmin y mostrará la siguiente ventana:


Ir a la opción que dice <Página web de phpPgAdmin>


Ingresar el usuario y la contraseña que usan para postgresql, si les llegara a marcar error de inicio de sesión, a pesar de que está bien, es debido a que Selinux requiere una instrucción para permitir el acceso. Del tal modo que eso se soluciona con la siguiente instrucción.

sudo setsebool -P httpd_can_network_connect_db 1



Ingresar nuevamente con usuario y contraseña, y listo, ahora tendrán la ventana de administración del servidor de postgresql desde el navegador.



sábado, 26 de noviembre de 2016

Instalar Skype en Fedora 25


¿Qué es Skype?

Skype es un software que permite que todo el mundo se comunique. Millones de personas y empresas ya usan Skype para hacer llamadas y videollamadas gratis individuales y grupales, enviar mensajes instantáneos y compartir archivos con otras personas que usan Skype. Puedes usar Skype en lo que mejor se adapte a tus necesidades: en tu teléfono móvil, equipo informático o TV con Skype.


La instalación es la siguiente:

Abrir la terminal: E ir ingresando los siguiente comandos:

Instalar dependencias:

sudo dnf install alsa-lib.i686 fontconfig.i686 freetype.i686 glib2.i686 libSM.i686 libXScrnSaver.i686 libXi.i686 libXrandr.i686 libXrender.i686 libXv.i686 libstdc++.i686 pulseaudio-libs.i686 qt.i686 qt-x11.i686 zlib.i686 qtwebkit.i686
Descargar el instalador:

cd ~/Descargas && wget --trust-server-names https://get.skype.com/go/getskype-linux-beta-fc10
Instalación de skype:

sudo  dnf install skype-4.3.0.37-fedora.i586.rpm
Una vez que haya finalizado, vamos al cajón de aplicaciones e iniciamos skype. Seleccionar idioma de preferencia y aceptar términos y condiciones.


Abrirá una ventana como la de abajo, ingresar usuario y contraseña.


Esperar que inicie sesión...


Y listo, ya tienen skype en Fedora 25. 



viernes, 25 de noviembre de 2016

ZSH y un tema para Fedora 25


Ya mencionado que mi motor de interprete de comandos en Linux es ZSH.

~~ Instalación ~~

La instalación es realmente simple, solo ejecutar los siguientes comandos en el orden en el que están:


$ sudo dnf -y install git zsh util-linux-user
$ git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
$ cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
$ cp ~/.zshrc ~/.zshrc.orig
$ sudo chsh -s /bin/zsh linuxitos

Para que los efectos se visualicen en el usuario, es necesario reiniciar sesión.

~~ Configurando el tema que muestran las imágenes. ~~~

El tema lo desarrolló un usuario de github Link, yo realicé algunos cambios solamente.

Primero, es necesario descargar el siguiente archivo:

Descomprimirlo en descargas, e instalar las fuentes que vienen dentro de la carpeta tema_zsh, para esto solo doble click en el botón instalar, como se ve en la imagen de abajo.



Hacer lo mismo para todos los demás archivos otf y ttf.

Una vez hecho eso, ahora ejecutamos los siguientes comandos:


cd ~/Descargas
cd tema_zsh
mkdir ~/.fonts
cp PowerlineSymbols.otf ~/.fonts/
mkdir -p ~/.config/fontconfig/conf.d
cp 10-powerline-symbols.conf ~/.config/fontconfig/conf.d
Y ahora, actualizamos la caché de fuentes:
fc-cache -vf ~/.fonts/

Copiar el tema a la carpeta de temas de .oh-my-zsh/themes
cp bullet-train.zsh-theme ~/.oh-my-zsh/themes/

Ahora, solo queda abrir el archivo .zshrc que está en la carpeta personal, y reemplazar el nombre del tema que esté en la línea que dice ZSH_THEME="" por el nuevo tema, el cual quedaría así. ZSH_THEME="bullet-train".

gedit ~/.zshrc

y modificar el archivo:


Y con eso, podrán obtener el resultado de las imágenes de arriba.

Mi personalización de Gnome 3.22 en Fedora 25 con Wayland


Con la llegada de Fedora 25 y traendo por defecto Wayland y Gnome 3.22, algunos temas de ventanas, de gnome-shell, extensiones, de íconos incluso del cursos han dejado de funcionar.

En mi caso, traigo configuraciones desde Fedora 23, y he venido actualizando mediante conexión a internet, hasta ahora no he tenido ningún problema "grave".

Una de los detalles que cuido mucho de mi distro Favorita todavía (migrando a apricity), es la combinación simple y estética de la interfaces, botones, estilos del cursor, borde de ventana íconos, etc.

Es más que evidente, que "en gustos se rompen géneros, y que para todos hay colores", así que la configuración que van a ver, para mi es lo mejor.

Los temás, los he bajado de http://gnome-look.org algunos de ellos ya no están disponibles en esa página, pero les dejaré los links de descarga.

Los temas son completamente compatibles con gnome 3.22 en Fedora 25 y sea en modo Wyaland o XOrg.

1.- Tema de Gnome Shell: Para mi es importante modificar hasta el último detalle de mi distro, para sentirme cómodo en su utilización.
Este lo he venido modificando desde la versión 3.18 de Gnome, la versión original la pueden consultar en este link.






2.- Tema de Ventana: El tema de ventana que uso se llama, Arc. Lo pueden encontrar aquí.
Este tema le modifiqué, el cuadro de búsqueda, para que en todo lugar en el que se presente el cuadro de búsqueda, aparezca con los bordes redondeados:









3.- Tema de cursor: El cursor no tiene muchos cambios, solo descargué y lo he utilizado, link de descarga original:




4.- Tema de íconos: Si hay algo a lo que más tiempo le he dedicado, es a los íconos, me gusta que cada archivo tenga exactamente el ícono que le corresponde. Este tema está disponible en este link.

Al tema le he añadido íconos de archivos:
- lnk de windows, arduino, matlab, c++, c, bash, iso, microsft office, latex, bibtex, rar, sql, apk, pascal, makefile, modifiqué firefox, google-chrome, nautilus, gnome-terminal.









Como ya dije, en gustos se rompen géneros. Gracias por visitar.

jueves, 24 de noviembre de 2016

Instalar MariaDB en Fedora 25

Si bien MySQL es uno de los sistemas de gestión de bases de datos relacionales (SGBDR) más populares, también es cierto que hay otros desarrollos interesantes. Es el caso de MariaDB, un fork de MySQL implementado por la comunidad.

¿Por qué usar MariaDB?

La adquisición de MySQL por parte de Oracle ha llevado a muchos usuarios a pensar que quizá el proyecto esté entrando en un periodo de decadencia. Y MariaDB ofrece unas características muy apetecibles:
  1. Servidor SQL con licencia GPL.
  2. Robusto, seguro y escalable.
  3. Más rápido con cargas complejas.
  4. Inclusión de más motores de almacenamiento. Junto a los mecanismos de almacenamiento estándar (MyISAM, BLACKHOLE, CSV, MEMORY y ARCHIVE) se incluyen otros, entre los que destacan dos nuevos como: XtraDB que reemplaza a InnoDB y FederatedX que sustituye a Federated.
  5. Integración de completas herramientas de testeo.
  6. Compatible con MySQL.

Además, a eso hay que añadirle:
  1. MariaDB es la versión de código totalmente abierto de MySQL
  2. Funciona como MySQL y es compatible con las configuraciones de MySQL
  3. Fedora y Red Hat/CentOS están migrando a MariaDB desde Fedora 19/RHEL 7/7 CentOS.
Por lo tanto, esto hace que pensemos en migrar también.


Nota: Si se tiene una versión previa de MySQL, es necesario desinstalarla por completo. Además realizar un respaldo de las bases de datos utilizadas. A pesar de que mariadb es compatible con mysql, es mejor hacer una instalación limpia.

También es necesario respaldar el archivo my.cnf que está en la ruta /etc, para esto utilizar el siguiente comando:


$ sudo mv -vi /etc/my.cnf /etc/my.cnf.bk
Este archivo servirá en caso de que mariadb no quiera iniciar al finalizar la instalación.

Ahora desinstalar mysql, devido a que se puede tener x versión instalada, dejaré esta opción abierta para todos.

En mi caso tenía la versión 5.7. Y el proceso fue el siguiente:

$ sudo dnf remove mysql-community-libs mysql-community-server
Después eliminar las siguientes carpetas de configuración de mysql, ojo, es necesario respaldar las bases de datos que hayan creado, ya que al eliminar estas carpetas se eliminarán también:

sudo rm -rf /var/lib/mysql

sudo rm -rf /etc/mysql
Y con eso se finaliza la desinstalación de mysql.

Para que los cambios tengan efecto, reiniciar el equipo:
$ reboot


Instalación de mariadb:

En Fedora 25, está en los repositorios por default por lo tanto no hay necesidad de agregarlos.

Instalando:
sudo dnf install mariadb mariadb-server 
La instalación muestra lo siguiente:

Iniciar el servicio de mariadb:
## Iniciar el servicio
systemctl start mariadb.service


## habilitar que el servicio inicio con el SO

systemctl enable mariadb.service


MariaDB (MySQL) Secure Installation

Con este proceso se cambian las siguiente configuraciones:
  1. Establecer contraseña para el usuario root de mariadb
  2. Eliminar usuarios anónimos
  3. Deshabitliar acceso remotos para el usuario root
  4. Eliminar las bases de datos de prueba
  5. Recargar los privilegios de las tablas

Iniciando:

/usr/bin/mysql_secure_installation
Este comando muestra lo siguiente:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we\'ll need the current
password for the root user.  If you\'ve just installed MariaDB, and
you haven\'t set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
 
Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
 
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!
 
By default, MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!
 
Cleaning up...
 
All done!  If you\'ve completed all of the above steps, your MariaDB
installation should now be secure.
 
Thanks for using MariaDB!

Y listo. Con eso ya tienen instalado mariadb. Ahora pueden instalar dbeaver como editor gráfico para la edición de consultas, creación de base de datos, etc.


E instalarlo de acuerdo a la versión descargada:

sudo rpm -ivh dbeaver-ce-3.8.0-stable.x86_64.rpm
Con eso podrán administrar mariadb de manera gráfica:


Gracias por visitar, espero que les sea de utilidad.

Instalar Postgresql 9.6 y pgAdmin III en Fedora 25


PostgreSQL es un poderoso sistema de base de datos relacional de objetos de código abierto. Cuenta con más de 15 años de desarrollo activo y una arquitectura probada que le ha valido una sólida reputación de fiabilidad, integridad de datos y corrección. Se ejecuta en todos los principales sistemas operativos, incluyendo Linux, UNIX (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows. Es totalmente compatible con ACID, tiene soporte completo para claves externas, combinaciones, vistas, disparadores y procedimientos almacenados (en varios idiomas). Incluye la mayoría de los tipos de datos SQL: 2008, incluyendo INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL y TIMESTAMP. También admite el almacenamiento de objetos grandes binarios, incluyendo imágenes, sonidos o video. Tiene interfaces de programación nativas para C / C ++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, entre otros, y documentación excepcional.


En la versión 25 de fedora, por defecto viene la versión 9.5 en los repositorios, pero sí es posible instalar la versión 9.6 con los siguientes pasos:

1.- Instalar el repositorio

#Para fedora 25 x86_64

sudo dnf install https://download.postgresql.org/pub/repos/yum/9.6/fedora/fedora-25-x86_64/pgdg-fedora96-9.6-3.noarch.rpm


2.- Ingresar como root

su -

3.- Instar los paquetes

dnf install postgresql96-server pgadmin3_96

Mostrará la siguiente ventana en la terminal:

4.- Iniciar initbd

/usr/pgsql-9.6/bin/postgresql96-setup initdb

Mostrará algo así:

5.- Iniciar el demonio de postgresql96

systemctl start postgresql-9.6
#Si quieren iniciar postgresql al iniciar el sistema usar este comando

systemctl enable postgresql-9.5


6.- Ingresar desde la consola a la línea de comandos de postgresql

su - postgres
-bash-4.3$ psql
psql (9.6.1)
Digite «help» para obtener ayuda.

postgres=#


7.- Cambiar la contraseña de postgresql por defecto

\password postgres


8.- Configuración de archivos:

gedit  /var/lib/pgsql/9.6/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)

9.- Configurar las IP's al archivo siguiente para postgresql.

gedit  /var/lib/pgsql/9.6/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

10.- Reiniciar postgresql 9.6

systemctl start postgresql-9.6

Adicionalmente abrir pgAdminIII y crear una conexión:


Y eso sería todo.

Bakspace para regresar a la carpeta anterior en Nautilus - Gnome 3.22


Todos creamos hábitos en el uso de la computadora, aún más cuando se es programador, los atajos de teclado, accesos directos, o comandos son nuestro día a día en el trabajo. Cuando algunas de las cosas tan simples como "Usar la tecla retroceso BackSpace" cambia y ya no funciona para regresar  a la carpeta anterior, en nuestro Explorador de archivos favoritos como lo es Nautilus en mi caso, es todo un caos. Primero, porque mecánicamente nuestro cerebro ha programado esa función, que cuando uno quiera ir a la carpeta anterior, simplemente el cerebro ejecuta la orden y nuestra mano automáticamente reacciona y presiona la tecla. Pero qué pasa cuando dicha función ya no está ahí?

En mi caso, me pareció una transición frustrante, utilizar dos teclas  para retroceder a la carpeta anterior en Nautilus. Afortunadamente, esto se podía revertir con agregar ciertas líneas a accels, una archivo de configuración de nautilus. Pero después, eso ya no funcionó en la versiones de Fedora 23 en adelante.

Y aquí entra lo interesante de utilizar Linux, que siempre habrá alguien capaz de encontrar una forma de revertir, modificar o agregar funcionalidades que los desarrolladores de las distros GNU/Linux hayan cambiado.

Bueno, la solución a este problema fue creado por un usuario de GitHub que se puede encontrar aquí https://github.com/riclc/nautilus_backspace

Los pasos son los siguientes,  y también se pueden encontrar en la página siguiente:

Paso 1: Instalar nautilus-python

$ sudo dnf install nautilus-python

En Aprcity se instala este paquete:

$ sudo dnf install python2-nautilus


Paso 2: Crear el siguiente directorio

$ mkdir -p .local/share/nautilus-python/extensions

Paso 3: Crear un archivo con el nombre de: BackspaceBack.py 



$ gedit .local/share/nautilus-python/extensions/BackspaceBack.py

e ir a al link y copiar el contenido que tiene y pegarlo en el archivo, o copiar el siguiente y guardarlo.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# by Ricardo Lenz, 2016-jun
# riclc@hotmail.com
#

import os, gi
gi.require_version('Nautilus', '3.0')
from gi.repository import GObject, Nautilus, Gtk, Gio, GLib

def ok():
    app = Gtk.Application.get_default()
    print app.set_accels_for_action( "win.up", ["BackSpace"] )
    #print app.get_actions_for_accel("BackSpace")
    #print app.get_actions_for_accel("<alt>Up")


class BackspaceBack(GObject.GObject, Nautilus.LocationWidgetProvider):
    def __init__(self):
        pass
    
    def get_widget(self, uri, window):
        ok()
        return None

Paso 4: Reiniciar Nautilus.

$ killall nautilus

Y  con eso ya tenemos de vuelta la función de la tecla de retroceso para volver al directorio anterior en Nautilus.