lunes, enero 23, 2017

Sincrum - Guia de estilo para el desarrollo en GeneXus

Gracias a Daniel Monza: Buenas prácticas con genexus

 # Sincrum - Guia de estilo para el desarrollo en GeneXus


Definición de nombres

  - 1.1 Se debe ser descriptivo con los nombres.
     Se intenta que el nombre sea autodescriptivo.
   
    // mal
    Proc: CliCre

    // bien
    Proc: ClienteCrear
    ```


  - 1.2 Utilizar PascalCase al nombrar objetos, atributos y variables.

   
    // mal
    clientecrear

    // bien
    ClienteCrear
    ```

    - 1.3 No utilizar underscore al inicio o final en ningún tipo de objeto, atributo o variable.
   Esto puede hacer suponer a un programador proveniente de otros lenguajes que tiene algún significado de privacidad.

   
    // mal
    &_CliNom = "John Doe"
    &CliNom_ = "John Doe"
    Proc: _ClienteCrear

    // bien
    &CliNom = "John Doe"
    ```

   - 1.4 Nombrar los dominios enumerados comenzando con la entidad en singular y siguiendo con el enumerado en plural sin abreviar estos.

   
    // mal
    DocumentoTipo
    DocumentosTipos
    DocTipos
   
    // bien
    DocumentoTipos (Venta,Compra,etc)
    DocumentoModos (Credito, Débito)
    ```

  - 1.5 Nombrar procedimientos relacionados mediante Entidad + Atributo(depende el caso) + Complemento + Acción.
     Esto permite agrupar los objetos de la misma entidad en la selección de objetos entre otros.
   
   
    // mal
    CreCli
    UpsertCliente
    FechaCliente
   
    // bien
    ClienteUpsert
    ClienteEliminar
    ClienteFechaModificadoGet
    ClienteFechaModificadoSet
    DocumentoRecalculo
    ```

  - 1.6 Utilizar [nomenclatura GIK](http://wiki.genexus.com/commwiki/servlet/wiki?1872,GIK) para nombrar atributos. En lo posible, intentar utilizar los nombres completos en lugar de 3 caracteres.
    > Estandard desde los inicios de GeneXus.
   
   
    // mal
    CreCliFch
    FechaCreadoCliente
   
    // bien
    CliFchCre
   
    // mejor
    ClienteFechaCreado
    ```

  - 1.7 Las transacciones deben tener el nombre de la entidad en plural.
    Las transacciones definen el nombre de las tablas en GeneXus. Se defien en plural ya que estas contienen N registros de la misma entidad.
   
   
    // mal
    Trn:Articulo
    Trn:Cliente
   
    // bien
    Trn:Clientes
    Trn:Articulos
    ```
- 2.1 Siempre que se pueda, utilizar tabuladores en lugar de "espacios". De esta forma, cada uno puede visializar la cantidad de espacioes que prefiera, ya que se configura en GeneXus. En los casos que no se pueda, y para definir un criterio, se utiliza una identación/tabulación de 3 espacios.
    Esto es porque la mayoría de los comandos queda mas legibles con esta tabulación.

   
    // mal
    if &DocumentoTipo = DocumentoTipos.Venta
    msg("Venta")
    endif

    // mal
    if &DocumentoTipo = DocumentoTipos.Venta
      msg("Venta")
    endif

    // mal
    if &DocumentoTipo = DocumentoTipos.Venta
        msg("Venta")
    endif

    // bien
    if &DocumentoTipo = DocumentoTipos.Venta
       msg("Venta")
    endif
    ```

- 2.2 Se deben identar las condiciónes y comandos dentro de un for each.

   
    // mal
    for each
    where DocumentoTipo = DocumentoTipos.Venta
    ...
    endfor

    // mal
    for each
    defined by ClienteNombre
    ...
    endfor

    // bien
    for each
        where DocumentoTipo = DocumentoTipos.Venta
        ...
    endfor
    ```

- 2.3 Dejar un espacio antes de cada parámetro.
    Hace a la sentencia más sencilla de leer.

        // mal
    parm(in:PaiId,out:&PaiNom);

    // bien
    parm( in:PaiId, out:&PaiNom);

    // mal
    &Fecha = ymdtod(2017,01,01)

    // bien
    &Fecha = ymdtod( 2017, 01, 01)
    ```

Dominios enumerados
- 3.1Evitar la utilización de textos/números fijos cuando pueden existir multiples valores.
    Simplificar la lectura y no necesitar recordar el texto específico de cada opción.

        // mal
    if &HttpResponse = "GET"
   
    // bien
    if &HttpResponse = HttpMethods.Get
    ```


Structured Data Types
- 4.1 Utilizar New() en la creación de SDT en lugar de Clone().
   Queda claro que se está trabajando con un nuevo item.

    // &Cliente SDT:Cliente
    // &Clientes lista de SDT:Cliente
   
    // mal
    for each Clientes
        &Cliente.CliNom = CliNom
        &Clientes.Add( &Cliente.Clone() )
    endfor
   
    // bien
    for each Clientes
        &Cliente = new()
        &Cliente.CliNom = CliNom
        &Clientes.Add( &Cliente )
    endfor
    ```
- 4.1 Desde que GeneXus permite definir variables como listas, evitar crear SDT del tipo lista.
    Al definir la variable del item particular, se lo marca como lista.

     // mal
    SDT:Clientes : Lista
        ClienteItem
            CliNom
   
    // bien
    SDT:Cliente
           CliNom
    ```
 Strings

- 5.1Utilizar [format](http://wiki.genexus.com/commwiki/servlet/wiki?8406,Format%20function) para desplegar mensajes conteniendo datos.
    Si la aplicación se va a traducir en diferentes lenguajes no hay que re-programar los mensajes.

   
    // mal
    &Msg = "El cliente Nro." + &CliId.ToString() + " se llama " + &CliNom
   
    // bien
    &Msg = format( "El cliente Nro. %1 se llama %2", &CliId.ToString(), &CliNom)
    ```

- 5.2 Utilizar !"" para strings que no deben ser traducidos.
    Un traductor puede modificar constantes o códigos específicos del sistema y pueden afectar el funcionamiento, por ejemplo parámetros.

   
    // mal
    &ParVal = ParamGet( "GLOBAL ENCRYPT KEY")
   
    // bien
    &ParVal = ParamGet( !"GLOBAL ENCRYPT KEY")
    ```

Comentarios

- 6.1 Utilizar `/** ... */` para comentarios multi-línea.

   
    // mal
    // CrearCliente crea una nuevo cliente
    // según las variables:
    // &CliNom
    // &CliDir
    sub 'CrearCliente'
      // ...
    endsub

    // bien
    /**
     * CrearCliente crea una nuevo cliente
     * según las variables:
     * &CliNom
     * &CliDir
     */
    sub 'CrearCliente'
      // ...
    endsub
    ```

- 6.2 Utilizar `//` para comentarios de una sola línea. Estos comentarios deben estar una línea antes del sujeto a comentar. Dejar una línea en blanco antes del comentarios a no ser que seal la pimer línea del bloque.

   
    // mal
    &CliNom = "John Doe" // Se asigna el nombre a la variable

    // bien
    // Se asigna el nombre a la variable
    &CliNom = "John Doe"

    // mal
    sub 'CrearCliente'
      msg( "Creando cliente", status )
      // Se crea el cliente
      &ClienteBC = new()
      &ClienteBC.CliNom = "John Doe"
      &ClienteBC.Save()
    endsub

    // bien
    sub 'CrearCliente'
      msg( "Creando cliente", status )

      // Se crea el cliente
      &ClienteBC = new()
      &ClienteBC.CliNom = "John Doe"
      &ClienteBC.Save()
    endsub

    // también está bien
    sub 'CrearCliente'
      // Se crea el cliente
      &ClienteBC = new()
      &ClienteBC.CliNom = "John Doe"
      &ClienteBC.Save()
    endsub
    ```

- 6.3 Comenzar todos los comentarios con un espacio para que sean sencillos de leer.

   
    // mal
    //Está activo
    &IsActive = true

    // bien
    // Está activo
    &IsActive = true

    // mal
    /**
     *Se obtiene el nombre de la empresa
     *para luego desplegarlo
     */
    &EmpNom = EmpresaNombreGet( &EmpId)

    // bien
    /**
     * Se obtiene el nombre de la empresa
     * para luego desplegarlo
     */
    &EmpNom = EmpresaNombreGet( &EmpId)
    ```

 - 6.4 Agregar pefijos en los comentarios con `FIXME` o `TODO` ayudan a otros desarrolladores a entender rapidamente si se está ante un posible problema que necesita ser revisado o si se está sugiriendo una solución a un problema existente. Estos son diferentes a los comentarios regulares porque conllevan a acciones. Estas acciones son `FIXME: -- necesita resolverse` or `TODO: -- necesita implementarse`.


- 6.5 Usar `// FIXME:` para marcar problemas.

  // FIXME: Revisar cuando &Divisor es 0    &Total = &Dividendo / &Divisor
    ```

- 6.6 Usar `// TODO:` para marcar implementaciones a realizar.

   
    // TODO: Implementar la subrutina
    sub "CrearCliente"
    endsub
    ```

 Comandos y funciones

 - 7.1 Utilizar minúsculas al nombrar comandos.
    Esto optimiza el desarrollo ya que los comandos y funciones provistas por el lenguaje se utilizan tan frecuentemente y no es necesario especificarlos en PascalCase.

   
    // mal
    For Each
        Where CliCod = &CliCod
        Msg(CliNom)
    EndFor

    // bien
    for each
        where CliCod = &CliCod
        msg(CliNom)
    endfor
   
    // mal
    &Fecha = YmdToD( 2017, 01, 01)

    // bien
    &Fecha = ymdtod( 2017, 01, 01)
    ```

- 7.2 Utilizar [do case](http://wiki.genexus.com/commwiki/servlet/wiki?31605,Do%20Case%20command) siempre que se pueda a fín de sustituir [if](http://wiki.genexus.com/commwiki/servlet/wiki?8608,If+Command,) anidados. Dejar un espacio entre cada bloque de case.

   
    // mal
    if &DocTipo = DocumentoTipos.Venta
       ...
    else
          if &DocTipo = DocumentoTipos.Compra
          ...
       endif
    endif
   
    // también mal
    do case
       case &DocTipo = DocumentoTipos.Venta
          ...
       case &DocTipo = DocumentoTipos.Compra
          ...
    endcase
   
    // bien
    do case
       case &DocTipo = DocumentoTipos.Venta
          ...
      
       case &DocTipo = DocumentoTipos.Compra
          ...
      
       otherwise
          ...
    endcase
    ```

 Parámetros

- 8.1 Utilizar SDT en lugar de multiples parámetros.
   La lectura queda confusa y cuando se modifican los parámetros hay que revisar todos los llamadores. Esto algunas veces no es posible, por ejemplo en webpanels.
 
   
    // mal
    parm( in:&CliNom, in:&CliApe, in:&CliTel, in:&CliDir, in:&CliDOB)
     
    // bien
    parm( in:&sdtCliente )
    ```
Recursos

**Lectura interesante**

  - [GeneXus Wiki](http://wiki.genexus.com/) - GeneXus

Empresas que utilizan esta guia

  Esta es una lista de las empresas que están utilizando esta guia de desarrollo.  This is a list of organizations that are using this style guide. Haganos saber si su empresa utiliza esta guia o un fork de la misma y lo agregaremos.

- Sincrum (http://sincrum.com)

Colaboradores

  - Son bienvenidos a colaborar.

Licencia

Documento Original creado por Daniel Monza bajo licencia MIT](LICENSE)
basado en [la guia de Javascript de AirBNB](http://airbnb.io/javascript/)

jueves, diciembre 29, 2016

Desbloquear cuenta Drupal

Cuando desplega el siguiente mensaje:

Lo sentimos, ha existido más de 5 intentos fallidos de iniciar sesión con esta cuenta. Ha quedado temporalmente bloqueada. Inténtelo de nuevo más tarde o solicite una nueva contraseña.

domingo, noviembre 20, 2016

Recibir Correos con genexus.

Resultado de imagen de recibir correos 
Uno de los problemas frecuentes que se tiene para el proceso de GESTION DE CORREOS es su recepeciòn, aqui un pequeño ejemplo de como hacerlo, cuando el correo tiene adjuntos.


// La variables &Envio y &Recibo deben estar definidas de tipo MailMessage
// &MensSMTP debe ser de tipo SMTPSession y
// &MensPOP3 de tipo POP3Session
// y las variables &DirTo y &DirCc deben ser de tipo MailRecipient.

// La variable &From debe ser de Tipo: MailRecipien
// La variable &Mensaje debe ser de tipo: MAPISessio

// La variable &MensPOP3 debe ser de tipo: POP3Session
// La variable &MiXml debe ser de tipo: LongVarChar(2M)

// La variable &Recibo debe ser de tipo: MailMessage
// La variable &SDTAjuntosItem debe ser una estructura de datos para guardar los archivos y mensajes recibidos.

    &Carpeta.Source        =    "c:/Tomcat7/webapps/temporal/"
    &MensPOP3.Host      =     "pop.googlemail.com"
    &MensPOP3.Host      =     "pop.gmx.com"
    &MensPOP3.Port       =    995
    &MensPOP3.Secure   =    1
    &MensPOP3.UserName     =     "sasasarespaldos@gmx.es"
    &MensPOP3.Password     =     "xxxx2015zxxxz"
    &MensPOP3.AttachDir    =    &Carpeta.GetAbsoluteName()    //    "c:/Tomcat7/webapps/temporal/"
//    &MensPOP3.NewMessages = 1
    &Errores    =    &MensPOP3.Login()
    &MsgError    =    &MensPOP3.ErrDescription
    If &MensPOP3.Count > 0    //Hay mensajes para recibir
        &Nro    = &MensPOP3.Count
        &Pos    =     1
        Do While &Pos    <=     &Nro
            &MensPOP3.Receive(&Recibo)
            &Errores     =     &MensPOP3.ErrCode
            &MsgError      =    &MensPOP3.ErrDescription
            If &Errores    =    0
                &Contador                 =    &Recibo.Attachments.Count
                For &Ubi     =    1    TO     &Contador
                    &SDTAjuntosItem            =    new()
                    &SDTAjuntosItem.Nombre    =    &Recibo.Attachments.Item(&Ubi).ToLower()
                    &Adjuntos.Add(&SDTAjuntosItem)
                    If &SDTAjuntosItem.Nombre.Contains(".xml")
                        &Archivo.Source    =    &Carpeta.GetAbsoluteName()    +    "\"    +    &Recibo.Attachments.Item(&Ubi).Trim()
                        &MiXml            =    &Archivo.ReadAllText()
                    Endif   
                EndFor
                &From         =     &Recibo.From
                &Cuenta     =    &From.Address
                &Nombre     =    &From.Name
                &Fechaenv     =     &Recibo.DateSent
                &Fecharec     =     &Recibo.DateReceived
                &Sub         =     &Recibo.Subject
                &Textohtml     =     &Recibo.HTMLText
                &Texto         =    &Recibo.Text
            EndIf   
            &Pos        +=    1
        EndDo
    Endif
Endevent

Un detalle de las variables utilizadas:

sábado, agosto 20, 2016

Instalar Centos 7 + LAMP, Cinnamon y Postgres

Seguir las siguentes secuencias:

Instalar RED con IP ESTATICA

Articulo Referenciado

yum -y install NetworkManager-tui
nmtui

Seleccionanos de Forma MANUAL y asignamos los datos respectivos de la RED.

-Verificamos cambios ejecutando
cat /etc/sysconfig/network-scripts/ifcfg-enp0s3


BOOTPROTO determina el tipo de configuración que tiene la interfaz, puede ser none (ninguna), static (estática) odhcp (asignación de ip dinámica por dhcp) por lo general en un servidor siempre se debe configurar como static.
IPV6INIT y IPV6_AUTOCONF indicas si deseas activar el protocolo IP versión 6 y que se autoconfigure, en el ejemplo seleccionamos que no lo usaremos y que no se configure.
ONBOOT si la interfaz de red que estás configurando debe de levantarse de forma automática cuando arranca el servicio network entonces debes configurar esta opción como “yes” de lo contrario el servidor arrancará y la interfaz permanecerá desactivada hasta que manualmente la actives. Recuerda que CentOS 7 siempre configura esta opción como “no” por lo que no tendrás conexión a la red por default en la interfaces de red.
IPADDR0 es la primera dirección IP de la interfaz, recuerda que puede haber varias.
PREFIX0 es el pefijo de red, antes llamado NETMASK de la primera IP, recuerda que puede haber varias.
GATEWAY0 es la puerta de enlace o la pasarela de la primera IP y puede haber varias.

DNS1 es la dirección IP del servidor de resolución de nombres de dominio.
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
HWADDR="08:00:27:FE:4D:FE"
TYPE="Ethernet"
BOOTPROTO="none" #reemplazé por none
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
UUID="f324bc5d-6c62-437d-bdaa-6f223a96c14f"
ONBOOT="yes"
#Adicionar los parametros de tu red
#dirección de ip
IPADDR="192.168.111.152"
#mascara de red
NETMASK="255.255.255.0"
#puerta de enlace
GATEWAY="192.168.111.255"
#DNS
DNS1="192.168.111.255"
4. Parar y levantar el servicio
chkconfig network on
systemctl stop NetworkManager 
systemctl restart network 
5. verificar
ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.111.152 netmask 255.255.255.0 broadcast 192.168.111.255
inet6 fe80::a00:27ff:fefe:4dfe prefixlen 64 scopeid 0x20<link>
ether 08:00:27:fe:4d:fe txqueuelen 1000 (Ethernet)
RX packets 3371 bytes 343916 (335.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2225 bytes 264926 (258.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 1976 bytes 136112 (132.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1976 bytes 136112 (132.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Actualizar repositorio:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum -y install epel-release


Instalar Mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
 
Revisar si ya tiene instalado: 
yum repolist enabled | grep "mysql.*-community.*"
 
Instalar Mysql 
yum install mysql-community-server 
 
 Activar Mysql
systemctl start mysqld
 systemctl enable mysqld   // Auto Arranque

Revsar estado
systemctl status mysqld

Referencia: Referencia

Deshabilitar el Firewall
systemctl stop  firewalld
systemctl disable  firewalld

 Inicializar MYSQL

mysql_secure_installation


Responder las preguntas:

Activar para que puedan acceder remotamente con el usurioa ROOT
mysql -u root
password.

mysql> use mysql;
mysql> update user set password=PASSWORD("NuevoPass") where User='root';
mysql> flush privileges;
mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%.%.%.%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

mysql> quit


Instala Apache2
yum -y install httpd

Iniciar Http.
systemctl start httpd.service

systemctl enable httpd.service

Revisar en el navegador.
http://localhost

Instalar Php5
yum -y install php

 systemctl restart httpd.service

 Crear script de prueba de PHP
vi /var/www/html/info.php
Digitar lo siguiente:
<?php
phpinfo();
?>

En el navegador  http://localhost/info.php



Instalamos PHP para Mysql
yum -y install php-mysql
yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
Reiniciamos Apache2:
 systemctl restart httpd.service

En el navegador  http://localhost/info.php , desplegaran mas modulos.
 
Instalamos PHPMYAdmin
yum install phpMyAdmin

Editar el siguiente archivo:
vi /etc/httpd/conf.d/phpMyAdmin.conf 

Reemplazar por lo siguente:
[...]
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

#<Directory /usr/share/phpMyAdmin/>
#   <IfModule mod_authz_core.c>
#     # Apache 2.4
#     <RequireAny>
#       Require ip 127.0.0.1
#       Require ip ::1
#     </RequireAny>
#   </IfModule>
#   <IfModule !mod_authz_core.c>
#     # Apache 2.2
#     Order Deny,Allow
#     Deny from All
#     Allow from 127.0.0.1
#     Allow from ::1
#   </IfModule>
#</Directory>


<Directory /usr/share/phpMyAdmin/>
        Options none
        AllowOverride Limit
        Require all granted
</Directory>

[...] 
 
Shift-ZZ, para grabar.
 
 
Debe quedar asi:
# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

#<Directory /usr/share/phpMyAdmin/>
#   <IfModule mod_authz_core.c>
#     # Apache 2.4
#     <RequireAny>
#       Require ip 127.0.0.1
#       Require ip ::1
#     </RequireAny>
#   </IfModule>
#   <IfModule !mod_authz_core.c>
#     # Apache 2.2
#     Order Deny,Allow
#     Deny from All
#     Allow from 127.0.0.1
#     Allow from ::1
#   </IfModule>
#</Directory>

<Directory /usr/share/phpMyAdmin/>
        Options none
        AllowOverride Limit
        Require all granted
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>
 
 
Reiniciamos Apache2:
 systemctl restart httpd.service

En el navegador:  http://localhost/phpmyadmin nos desplega el acceso a Mysql

 
 
Inicio de sesión sin contraseña está prohibido por la configuración (consulte AllowNoPassword)

Fuente: http://www.enmimaquinafunciona.com/pregunta/8332/phpmyadmin-en-ubuntu-lampara-inicio-de-sesion-sin-contrasena-esta-prohibido-por-la-configuracion-consulte-allownopassword

Si reporta el siguiente error:
Inicio de sesión sin contraseña está prohibido por la configuración (consulte AllowNoPassword)

Editar el siguiente archivo
/etc/phpmyadmin/config.inc.php.

Fuente: http://www.enmimaquinafunciona.com/pregunta/8332/phpmyadmin-en-ubuntu-lampara-inicio-de-sesion-sin-contrasena-esta-prohibido-por-la-configuracion-consulte-allownopassword

vi /etc/phpMyAdmin/config.inc.php











$cfg['Servers'][$i]['user']          = 'root';   // Asignar Usuario de MYSQL

$cfg['Servers'][$i]['AllowNoPassword'] = TRUE;
$cfg['Servers'][$i]['password']      = '';  // Puedes asignar un Password

Reiniciamos Apache2:
 systemctl restart httpd.service

Instalar CINNAMON.
yum -y groups install "Server with GUI"  
yum --enablerepo=epel -y install cinnamon*
echo "exec /usr/bin/cinnamon-session" >> ~/.xinitrc
startx

Otra Forma:
yum -y install epel-release
yum -y groupinstall "X Window system"
yum -y install lightdm
yum -y install cinnamon
systemctl isolate graphical.target

Que Arranque siempre con en modo grafico
systemctl set-default graphical.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'


Instalar PostgreSql.
yum install http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-redhat94-9.4-1.noarch.rpm
 
Luego:
 yum -y update

Instalamos la BD.
yum groupinstall "PostgreSQL Database Server 9.4 PGDG"
Inicializamos la Base de datos
/usr/pgsql-9.4/bin/postgresql94-setup initdb
Iniciamos el servicio.
systemctl start postgresql-9.4.service
Autoarranque:
systemctl enable postgresql-9.4.service
Reiniciamos
systemctl restart postgresql-9.4.service

Verificar la intalacion:
su - postgres
$ psql
 
Debe desplegar:
psql (9.4.1)
Type "help" for help.

postgres=# 

Cambiamos el Password:
password postgres
 
Editamos el Archivo: 
vi /var/lib/pgsql/9.4/data/postgresql.conf 
 
Adicionamos lo siguiente, para que se conecten cualquier usuario. 
listen_addresses = '*'
port = 5432
 Asignamos permisos:
vi /var/lib/pgsql/9.4/data/pg_hba.conf
 
 Todos puede accesar a la todas las bases de datos.
host    all             all             0.0.0.0/0               trust 
# "local" is for Unix domain socket connections only
local   all             all                                     trust
 
Reiniciamos el servicio
systemctl start postgresql-9.4.service
 
 
Instalamos PhpPgAdmin
yum install phpPgAdmin
 
Editamos:
vi /etc/httpd/conf.d/phpPgAdmin.conf

Copiamos lo siguiente:
#
# 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 host example.com
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order deny,allow
#        Deny from all
        Allow from all
#       Allow from ::1
        # Allow from .example.com
    </IfModule>
</Location> 
 
Reiniciamos Postgres 
systemctl start postgresql-9.4.service

Reiniciamos Apache:
systemctl restart httpd.service
 
En el navegador:  
http://IP/phpPgAdmin/
 
Usuario: postgres
Password: postgres 


Instalar Tomcat Via YUM:

yum install tomcat
 
Se ubicara en: /usr/share/tomcat
Las aplicaciones estan en: /usr/share/tomcat/webapps  
 
Editar opciones del Tomcat:
vi /usr/share/tomcat/conf/tomcat.conf
 
Asignar memoria:
 
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"  

Instalar aplicaciones adicionales:
yum install tomcat-webapps tomcat-admin-webapps 
 
Se adicionan: ROOT, examples, sample, manager, and host-manager web apps a la carpeta: tomcat/webapps 

Instala Documentacion:
yum install tomcat-docs-webapp tomcat-javadoc
.
Crear usuarios:
vi /usr/share/tomcat/conf/tomcat-users.xml

 <tomcat-users> 
<user username="admin" password="password" roles="manager-gui,admin-gui"/> </tomcat-users>

Reiniciar el Tomcat
systemctl start tomcat
 
Si registra un error intentamos de esta forma:
systemctl restart tomcat
 
Que inicie al momento de iniciar el servidor: 
systemctl enable tomcat  

Descargar para monitorear al Tomcat:

https://github.com/psi-probe/psi-probe/releases

Descargar el WAR
https://github.com/psi-probe/psi-probe/releases/download/2.4.0.SP1/probe.war

Mover a
/usr/share/tomcat/webapps  

Reiniciar el Tomcat
systemctl restart tomcat
 
En el Navegador:
http://localhost:8080/probe
 
Nos pide un usuario y clave registrados anteriormente, 
luego nos presentara la siguiente pantalla.
 
 


 
Luego todas las aplicaciones: 
 
Podemos desplgar el WAR desde esta pantalla:










Inicio de sesión sin contraseña está prohibido por la configuración (consulte AllowNoPassword)

Fuente: http://www.enmimaquinafunciona.com/pregunta/8332/phpmyadmin-en-ubuntu-lampara-inicio-de-sesion-sin-contrasena-esta-prohibido-por-la-configuracion-consulte-allownopassword