Cómo resolver el cubo de Rubik en 5 pasos

El cubo de Rubik es uno de esos inventos que siempre ha llamado la atención por el gran reto que representa, pues resolverlo no es tarea sencilla para muchas personas. Es uno de los juegos más populares en todo el mundo y se calcula que se han venido más de 400 millones de ellos.

Resolver el cubo de Rubik es una tarea que puede tomar horas e incluso días para quienes no tenemos mucha experiencia con él, aunque el récord mundial esté actualmente en 4,69 segundos necesitaremos mucha practica para tan siquiera acércanos a ese tiempo. Lo que muchos no saben es que detrás del cubo de Rubik se esconde cierta lógica que permite establecer una serie de pasos para que sea mucho más sencillo resolverlo, sin tener que ser unos expertos en el tema.


Retos y oportunidades para el líder del siglo XXI

Las empresas que quieran sobrevivir en el mundo de hoy y en el de mañana deben adaptarse a un entorno radicalmente distinto al de ayer: los clientes, las funciones de producción, los canales de distribución, los mercados, los equipos humanos… Los líderes empresariales se ven forzados a replantearse todas las etapas de la cadena de valor.

Para John Kotter (Harvard University) una empresa que no esté revisando constantemente su rumbo y no realice los ajustes necesarios tiene muy pocas posibilidades de sobrevivir. La clave reside en compaginar las exigencias diarias de la actividad empresarial con la identificación temprana de riesgos y oportunidades, formulando iniciativas estratégicas e innovadoras con agilidad y poniéndolas en práctica con la rapidez requerida. Para ello propone un esquema organizativo “dual” en el que coexisten áreas de la empresa estructuradas jerárquicamente con áreas organizadas en red.
En todo proceso de cambio, el papel de los consejeros delegados y de los consejos de administración es clave. William Klepper (Columbia Business School) sostiene que el estilo del consejero delegado debe encajar con el del negocio en cada momento de su ciclo, y que el consejo de administración necesita intervenir de forma activa para ayudarle a cerrar posibles brechas entre sus habilidades/estilo y los requerimientos de la compañía.

Los entornos cambian en todos los sectores, ninguna empresa está “a salvo”. Francisco González (BBVA) analiza cómo estos cambios están afectando a la industria financiera y sostiene que para sobrevivir y progresar, los bancos tienen que aprovechar su ventaja competitiva fundamental: la información que poseen sobre sus clientes, convirtiéndola en conocimiento para ofrecerles a estos una mejor experiencia. En su artículo para OpenMind repasa los elementos principales del proceso que se ha llevado a cabo en BBVA para transformarse de un banco convencional “analógico” a una nueva empresa “digital” basada en el conocimiento.
La capacidad de anticipación y adaptación de las organizaciones dependerá en gran medida de su capacidad para innovar. Para Henry Chesbrough (Haas School of Business), considerado el padre de la innovación abierta, este concepto ha cambiado la gestión de la innovación dentro de las empresas. En un principio, la innovación abierta se entendió y se puso en práctica en forma de colaboraciones entre dos empresas para abrir el proceso de innovación interna. Sin embargo,la innovación abierta se va a expandir más allá. En el futuro cada vez cobrarán más relevancia el diseño y la gestión de comunidades de innovación.

Pero la supervivencia exige algo más que innovar. Según Carol A. Adams (Monash University) la empresa del futuro hará negocios de manera distinta porque comprenderá el valor de sus relaciones y de los recursos y servicios que le proporciona su entorno natural. Será muy diferente a la empresa de hoy. Tendrá que estar más integrada en la sociedad civil y no permanecer aislada y centrada en la persecución de beneficios. Esa integración ha de ser tanto física (es decir, con el mundo natural y el equilibrio de la naturaleza) como ética (con los valores sociales).

Las empresas de mañana no tendrán nada que ver con las empresas de hoy. Descubre más sobre las empresas del futuro en el libro Reinventar la empresa en la era digital.

Dory Gascueña para OpenMind
@dorygascu

Fuente: https://www.bbvaopenmind.com

[FIX] NS_ERROR_NET_INADEQUATE_SECURITY en Firefox 48

Después de actualizar  firefox a su mas reciente versión (Mozilla Firefox 48.0) en mi máquina con linux debian, inmediatamente no fue posible acceder a las mayoría de los sitios mas comunes, entiéndase google, yahoo, facebook
Da un error de NS_ERROR_NET_INADEQUATE_SECURITY cuando visito la mayoría de los sitios como Google o incluso mozzila.org  (support.mozzila.org si funciona)




Este mensaje parece estar asociado con los sitios que están utilizando el protocolo HTTP 2 / (recientemente soportado en Firefox), pero no se fijo un nivel de seguridad adecuado para ese protocolo.Así que una opción sería la de decirle a Firefox que NO utilice http 2, de modo que los sitios usaran de nuevo http 1.1.

Solución temporal y actual, espero que en la siguiente y esperada versión de firefox solución este bug

Procedimiento

============
about:config en la barra de direcciones y pulse Enter. Haga clic en el botón de la promesa de tener cuidado.




  1. En el cuadro de búsqueda arriba de la lista, escriba SPD estamos buscando el valor network.http.spdy.enabled.http2
  2. Doble clic en network.http.spdy.enabled.http2 para cambiar el valor de verdadero a falso


Reinicia y esta solución temporal funciona, evidentemente en la siguiente versión hacer lo mismo pero volviendo a poner el valor en true/verdadero
Mi recomendación es no usar esta versión de firefox al menos en linux (firefox 48),

7 Cosas que debes mantener en secreto según la sabiduría Hindú


1. No debes divulgar tus planes a futuro, ni a corto, ni mediano ni largo plazo. Evita comentarlos con los demás antes de que estos se cumplan pues en algunas ocasiones estos no pueden ser los más ideales pero finalmente son tuyos, pero si los expones pueden ser blanco fácil de ser criticados e incluso destruidos.

2. Cuando realices actos de caridad ¡quédate con ellos! no es necesario alardear por ahí lo que has hecho, lo que hagas de corazón guárdalo precisamente allí pues de andarlo divulgando le quitas lo extraordinario y maravilloso que tu gesto de bondad ha sido. Atesóralo y guárdalo sólo para ti, no es necesario que recibas halagos de los demás, esto sólo te lleva a la arrogancia y a decir verdad, el que alardea es porque no lo ha hecho de buena fe.

3. Compartir tus limitaciones de sueño, alimentación, sexuales, etcétera no siempre es la mejor opción, la austeridad física te trae beneficios así que, todo lo que realices guárdalo para ti, lo más importante es tener armonía con uno mismo.

4. La valentía y heroísmo no se grita a los cuatro vientos, todas las personas enfrentamos distintas pruebas y desafíos casi a diario, así que lo mejor es callar, es evidente aquellas pruebas externas y por estas la gente siempre suele recibir recompensas pero por las internas, el reconocimiento termina siendo de nosotros para nosotros mismos y eso es aún más gratificante.

5. El conocimiento espiritual se vive, no se expone. Es algo nuestro que no tiene por qué ser compartido con los demás, no es egoísmo, simplemente es atesorar lo que tenemos, la única excepción sería compartirlo en beneficio de alguien más pero sobre todo, tuyo.

6. Tu problemas familiares y conflictos que enfrentas son sólo tuyos, mientras menos hablas de ellos, el lazo con tu familia será más fuerte e indestructible. Entre más se mencionan y exhiben los problemas, estos más suelen crecer y más te sueles estancar. Dialógalo con tu familia y salva la relación en lugar de perjudicarla contando a los demás lo que no debes.

7. No derroches mala energía hablando mal de las personas o repitiendo las cosas negativas que otros dijeron de los demás. Un tonto que entra con los zapatos sucios a casa no es diferente a uno que entra a casa hablando pestes de los demás.
Esperamos que sigas estos consejos y tu día a día cambie positivamente.


Controlar actividades de usuarios en Linux



 Para Debian y familia

apt-get install acct



 Para Red Hat y familia


# yum install psacct



Tras su instalación, tendremos que arrancar el proceso que lleva el mismo nombre que el paquete. A partir de este momento, acct estará ya recolectando datos para nosotros, así que toca ver la forma de explotar los datos que almacena.
  • ac
    Este comando se encarga de sacar información de tiempo de conexión de usuario al sistema.
    # ac -p
       root                  1823.40
       javier                0.00
    
       total     1823.40
    
  • sa
    No muestra un sumario de información relativa a las estadísticas de ejecución de cada usuario.
    # sa -u
       -7365568   0.00  cpu    979k  mem  accton
       -7365568   0.00  cpu  26288k  mem  touch
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu    979k  mem  consoletype
       -7365568   0.00  cpu  26528k  mem  psacct       *
       -7365568   0.00  cpu  26608k  mem  psacct
       -7365568   0.00  cpu  28928k  mem  ls
       -7365568   0.31  cpu  27696k  mem  bash
       -7365568   1.41  cpu  17472k  mem  sshd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu   4332k  mem  unix_chkpwd
       -7365568   0.00  cpu  16416k  mem  sshd         *
       ...
    
  • lastcomm
    Muestra todos los comandos que los usuarios han ejecutado en el sistema. Este es el comando más potente, sin dudarlo, ya que permite sacar mucha información o ser muy cotilla, lo que prefiramos.
     
    A parte del comando ejecutado, también nos indica la fecha, el usuario y dónde se ejecutó.
    # lastcomm
       gtbl           root   pts/0   0.00 secs Sun Jun 22 13:48
       sh         F   root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       gzip           root   pts/0   0.00 secs Sun Jun 22 13:48
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       hostname       root   pts/0   0.00 secs Sun Jun 22 13:23
       bash       F   root   pts/0   0.00 secs Sun Jun 22 13:23
       id             root   pts/0   0.00 secs Sun Jun 22 13:23
       sshd      SF   sshd   ---     0.00 secs Sun Jun 22 13:23
       ...
    
    Como ves, información muy valiosa para análisis en caso de desastre.













El camino hacia el ordenador cuántico: qubits y qudits

Una de las tareas clave para la computación cuántica es la correcta y competente manipulación de los qubits (o bits cuánticos), las unidades básicas de información. Esta operación no es nada fácil, debido principalmente a que un excelente control supone un reto a la hora de preparar sistemas cuánticos. Al mismo tiempo, se debe aplicar una secuencia correcta de operaciones. Además, hay que ser capaz de medir los qubits, y para ello deben estar totalmente aislados del medio para evitar decoherencia. Existen numerosos artículos con diferentes propuestas de sistemas para transferir estados cuánticos. Pero, ¿existe ya el ordenador cuántico? ¿Cuáles son los mejores qubits?

Richard Feynman acuñó la idea de que ciertas operaciones deberían ser computadas mucho más eficientemente con ordenadores mecánico cuánticos en vez de ordenadores clásicos. Sin embargo, el crear un ordenador cuántico no es una tarea fácil. De hecho, es extremadamente desafiante. Entonces, ¿por qué hay tanto afán en conseguir un ordenador cuántico? Debemos tener claro que es improbable que un ordenador de estas características sirva para mirar el correo electrónico o navegar por Internet. Por otro lado, un ordenador clásico posee limitaciones en la clase de tareas que puede realizar. Un ordenador cuántico permite una aceleración a la hora de computar algunos algoritmos clásicos, además de algunas operaciones complejas (por ejemplo, el algoritmo de Shor [1]). Otras tareas pueden ser llevadas a cabo solamente utilizando un ordenador cuántico, como operaciones complicadas de la talla de simulaciones de sistemas físicos de muchos cuerpos o de procesos biológicos.



Richard Feynman / Imagen: Caltech

En la escala atómica, las leyes de la mecánica cuántica gobiernan sobre las clásicas. Así, citando la ley de Moore: “El número de transistores por pulgada cuadrada en circuitos integrados se ha multiplicado por dos cada año”, llevará a la contracción de los transistores, donde los efectos cuánticos dominarán sobre los dispositivos clásicos.

¿Qué es un qubit?

Un bit es la unidad básica de información en la computación clásica. De forma análoga, el qubit es la unidad básica de la computación cuántica. Un qubit es un sistema mecánico-cuántico de dos estados, de hecho, una entidad abstracta que se puede realizar físicamente de diferentes maneras. La principal diferencia entre un bit y un qubit es que mientras que en un ordenador clásico la unidad de información codificará ya sea un 0 ó un 1, la naturaleza del principio de superposición en la mecánica cuántica permite que el qubit pueda estar en una superposición de ambos estados al mismo tiempo (ver figura 2).

 Esto implica que un ordenador cuántico pueda realizar muchos más cálculos simultáneamente: un sistema con N qubits podría ejecutar 2N cálculos en paralelo.


Diferencia entre un bit clásico y un bit cuántico

Bit, qubit, qudit

Los qubits son capaces de almacenar la información cuántica durante cierto periodo de tiempo denominado tiempo de coherencia. Cuando el sistema se conecta con el medio ambiente debido a interacciones no deseadas y fuera de control, existe una tendencia del sistema cuántico a perder su cuanticidad [2], llamándose a este proceso decoherencia.
Otra característica importante es que múltiples qubits pueden mostrar entrelazamiento cuántico, lo que posibilita que un conjunto de qubits pueda expresar una correlación más alta que los sistemas clásicos. En el estado entrelazado, un sistema no puede ser descrito a través de un estado local.
Un qubit es un sistema bidimensional; del mismo modo que un qudit es un sistema d-dimensional. Desafortunadamente, cuando tratamos de operar matemáticamente con ellos  se generan algunas dificultades [3]. Sin embargo, hay varias opciones que están siendo estudiadas y que podrían arrojar algo de luz a este respecto, y facilitar el uso de los qudits en aplicaciones prácticas. A largo plazo, los qudits podría simplificar algunas simulaciones de sistemas mecánicos cuánticos y mejorar la criptografía cuántica.

Araceli Venegas Gómez

Como crear un demonio (Servicios)

¿Que demonios existen en nuestro sistema?

Para conocer los demonios que tenemos en nuestro sistema debemos ejecutar el siguiente comando desde una terminal:
ls -l /etc/init.d/
Esto nos va a listar una serie de archivos que son scripts los cuales son los demonios. Esto scripts contienen el código para iniciar o para nuestro demonio, pero no necesariamente el programa que se ejecuta debe estar en esta carpeta, puede estar en cualquier parte del sistema.
Veamos un ejemplo de lo que nos puede mostrar por la consola de la terminal:
-rwxr-xr-x 1 root root 1175 2010-11-22 08:04 binfmt-support
-rwxr-xr-x 1 root root 1784 2011-04-04 22:35 bluetooth
-rwxr-xr-x 1 root root 2341 2009-09-07 15:58 bootlogd

¿Como iniciar y detener los demonios?

Para poder iniciar un demonio ya existente en nuestro sistema operativo debemos ejecutar el siguiente comando:
/etc/init.d/demonio start
Si en cambio lo queremos detener deberemos ejecutar:
/etc/init.d/demonio stop
Veamos como podemos usar estos comando para por ejemplo iniciar el demonio de impresión
/etc/init.d/cups start
/etc/init.d/cups stop

¿Como crear mi propio demonio?

Antes que nada en este post mostraremos como crear un demonio por medio de un script, para ello lo primero que haremos es abrir el editor que mas nos guste (vi, nano, gedit) y copiaremos el siguiente template para la creación del demonio.

# Script template para demonios
#!/bin/sh

programa=/home/usuario/programa/ #HOME del programa a ejecutar
startup=$programa/bin/startup.sh #código para iniciar el programa
shutdown=$programa/bin/shutdown.sh #código para parar el programa

start(){
echo -n $"Starting service: "
$startup
RETVAL=$?
echo
}

stop(){
echo -n $"Stopping service: "
$shutdown
RETVAL=$?
echo
}

restart(){
stop
sleep 10
start
}

# Dependiento del parametro que se le pase
#start - stop - restart ejecuta la función correspondiente.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usar: $0 {start|stop|restart}"
exit 1
esac

exit 0
 
El template anterior es tan solo un simple ejemplo, pero se le pueden agregar mas cosas y hacerlo mas complejo como por ejemplo: que guarde un log de las tareas que se están haciendo, que guarde el PID del proceso y lo mate con este o agregar un parámetro status para chequear si el demonio se encuentra levantado entre otras cosas.

¿Como hacer que se inicie automáticamente?

Para que un demonio se inicie o se detenga automáticamente cuando iniciamos y apagamos el sistema respectivamente debemos asignar los runlevels.

¿Que son los runlevels?

El término runlevel o nivel de ejecución se refiere al modo de operación en los sistemas operativos que implementan el estilo de sistema de arranque de iniciación tipo UNIX System V.
Veamos otra definicion, según la Wikipedia: “En términos prácticos, cuando el computador entra al runlevel 0, está apagado, y cuando entra al runlevel 6, se reinicia. Los runlevels intermedios (1 a 5) difieren en relación a qué unidades de disco se montan, y qué servicios de red son iniciados. Los niveles más bajos se utilizan para el mantenimiento o la recuperación de emergencia, ya que por lo general no ofrecen ningún servicio de red. Los detalles particulares de configuración del runlevel varía bastante entre sistemas operativos, y ligeramente entre los administradores de sistema.”

Los 7 niveles de ejecución(runlevels) estandar

Nivel de ejecución Nombre  Descripción 
0 Alto Alto o cierre del sistema (Apagado)
1  Modo de usuario único (Monousuario) No configura la interfaz de red o los demonios de inicio, ni permite que ingresen otro usuarios que no sean el usuario root, sin contraseña. Este nivel de ejecución permite reparar problemas, o hacer pruebas en el sistema.
2  Multiusuario Multiusuario sin soporte de red.
3  Multiusuario con soporte de red. Inicia el sistema normalmente.
4  – No usado.
5 Multiusuario gráfico (X11) Similar al nivel de ejecución 3 + display manager.
6  Reinicio  Se reinicia el sistema.

 ¿Como asigno un runlevels?

Antes que nada debemos copiar nuestro script(miScript) a /etc/init.d/ que es donde están los scripts de los demonios:

sudo cp miScript /etc/init.d/
 
Luego darles los permisos necesarios para el owner, group y ejecución:

sudo chmod ug+x /etc/init.d/miScript
 
Para asignar los runlevels tenemos dos formas:
  • Manualmente
Para poder asignarle los runlevels manualmente lo que se hace es crear enlaces simbólicos de nuestro script en los directorios de los runlevels para los demonios. Estos directorios estan en /etc/rcX.d/ donde la X es un número que corresponde al runlevel por ejemplo /etc/rc3.d/. Algo que vale la pena aclarar es que habría que crear enlaces simbólicos para todos los runlevels.
Si hacemos un ls -l en cualquier de estos directorios vamos a obtener algo así:
 
$ ls -l /etc/rc6.d/

total 4
lrwxrwxrwx 1 root root 18 2011-08-19 18:14 K01nxsensor -> ../init.d/nxsensor
lrwxrwxrwx 1 root root 18 2011-08-19 18:14 K01nxserver -> ../init.d/nxserver
lrwxrwxrwx 1 root root 18 2011-11-08 12:56 K01timidity -> ../init.d/timidity
lrwxrwxrwx 1 root root 17 2011-07-13 11:09 K09apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2011-07-11 12:44 K20hddtemp -> ../init.d/hddtemp
lrwxrwxrwx 1 root root 20 2012-02-17 18:44 K20nullmailer -> ../init.d/nullmailer
lrwxrwxrwx 1 root root 27 2011-07-11 12:44 K20speech-dispatcher -> ../init.d/speech-dispatcher
lrwxrwxrwx 1 root root 29 2011-07-11 12:44 S10unattended-upgrades -> ../init.d/unattended-upgrades
lrwxrwxrwx 1 root root 18 2011-07-11 12:44 S20sendsigs -> ../init.d/sendsigs
lrwxrwxrwx 1 root root 17 2011-07-11 12:44 S30urandom -> ../init.d/urandom
lrwxrwxrwx 1 root root 22 2011-07-11 12:44 S31umountnfs.sh -> ../init.d/umountnfs.sh
lrwxrwxrwx 1 root root 20 2011-07-11 12:44 S35networking -> ../init.d/networking
 
 
Como se puede ver son todos enlaces simbólicos de scripts pero renombrados con la siguiente nomenclatura:

S[prioridad][nombre script]
K[prioridad][nombre script]
 
Donde la S significa el start de demonio, K el kill y  la prioridad es un numero de 00 a 99 para decir en que orden se van a ejecutar(puede haber demonios con la misma prioridad).
Ahora para crear los enlaces simbólicos debemos hacerlo en los runlevels adecuados. Para iniciar en el runlevel 5 (multiusuario gráfico) y 3 (multiusuario) y para pararlo en el runlevel 6 (reinicio) y 0 (apagado). Lo hacemos con el comando ln de la siguiente manera:

$ ln -s /etc/init.d/miscript /etc/rc5.d/S30miScript
$ ln -s /etc/init.d/miscript /etc/rc3.d/S30miScript
$ ln -s /etc/init.d/miscript /etc/rc6.d/K05miScript
$ ln -s /etc/init.d/miscript /etc/rc0.d/K05miScript
 
Con esto alcanzaría para para levantar de modo automático el demonio.
  • Automáticamente
Con el siguiente comando nos ahorramos todo lo de la primera parte con la diferencia de que las prioridades se asignan automáticamente:
sudo update-rc.d jboss defaults
Si vemos en la ayuda del update-rc.d vemos que tenemos también la posibilidad de especificarle la prioridad.
Con esto ya tenemos nuestro demonio y si queremos lo podemos iniciar con start.

Crear un usuario y asignarle permisos en PostgreSQL

Abrir un cliente de PostgreSQL

Para poder desarrollar este nanotutorial necesitamos tener disponible una sesión cliente en un servidor PostgreSQL. Para esto debemos iniciar el cliente con el siguiente comando:
 
psql -U postgres -h localhost -W
 

Crear usuario

Para crear un usuario lo haremos con el siguiente comando:

CREATE USER usuario PASSWORD 'password';
 
 

Eliminar usuario

Si deseamos eliminar un usuario debemos ejecutar el siguiente comando:

DROP USER usuario;
 
 

ALTER ROLE

El manejo de roles en PostgreSQL permite diferentes configuraciones, entre ellas estan:
  • SUPERUSER/NOSUPERUSER. Super usuario, privilegios para crear bases de datos y usuarios.
  • CREATEDB/NOCREATEDB. Permite crear bases de datos.
  • CREATEROLE/NOCREATEROLE. Permite crear roles.
  • CREATEUSER/NOCREATEUSER. Permite crear usuarios.
  • LOGIN/NOLOGIN. Este atributo hace la diferencia entre un rol y usuario. Ya que el usuario tiene permisos para acceder a la base de datos a traves de un cliente.
  • PASSWORD. Permite alterar la contraseña.
  • VALID UNTIL. Expiración de usuarios.
Para cambiar la configuracion de un usuario o rol debemos ejecutar el siguiente comando.

ALTE ROLE <nombre del rol> WITH <opciones>

Asignar permisos de super usuario a un usuario

El permiso de super usuario es el mas alto. Con este usuario se podrán administrar todos los objetos del motor de base de datos.
Para asignar este privilegio a un rol lo hacemos con el siguiente comando:

ALTER ROLE usuario WITH SUPERUSER;

Cambiar la contraseña de un usuario

Para cambiar la contraseña de un usuario es necesario ejecutar el siguiente comando:

ALTER ROLE usuario WITH PASSWORD 'nuevopassword';
 
 

Crear una base de datos con un usuario específico como propietario

Todas las bases de datos que creamos con un usuario que tenga los privilegios
CREATEDB automáticamente asignan como propietario al usuario mismo. Si lo que queremos crear es un usuario limitado, la forma de crearlo con una base de datos específica será:

CREATE DATABASE baseDatos_website WITH OWNER usuario;
 
 

Asignar todos los permisos a un usuario a una base de datos existente

Cuando recien hemos creado un usuario y queremos darle permisos a una base de datos existente, podemos utilizar el siguiente comando:

GRANT ALL PRIVILEGES ON DATABASE usuario_website TO basedatos;
 
 

Cómo restringir el máximo de logins ssh simultáneos de un usuario específico en Red Hat Enterprise Linux

Para esto vamos a partir de los siguientes datos.
  • Servidor: kepler.eureka.com.ve 192.168.4.101
  • Cliente: localhost
Para comenzar debemos primeramente ver si tenemos el modulo “pam_limits.co” presente en nuestro sistema. Para esto hacemos una búsqueda de este valor en el archivo correspondiente:
  • [root@kepler ~]# grep limit /etc/pam.d/system-auth
  • session required pam_limits.so
  • [root@kepler ~]#
Una vez comprobado esto, pues procedemos a la configuración en donde vamos a limitar al usuario existente “runner” a solo 1 sesión simultanea. Y al resto de los usuarios a solamente 2 sesiones. Para realizar esto entonces agregaremos las lineas correspondientes en el archivo “/etc/security/limits.conf
  • [root@kepler~]# tail -n5 /etc/security/limits.conf
  • runner hard maxlogins 1
  • * hard maxlogins 2

PostgreSQL: Fechas y Horas


1) FECHA ACTUAL

SELECT CURRENT_DATE; --> Rpta: "2009-11-06"
SELECT CURRENT_TIME; --> Rpta: "04:51:26.0625-05"
SELECT CURRENT_TIMESTAMP; --> Rpta: "2009-11-06 04:51:56.015625-05"
SELECT CURRENT_TIME (1); --> Rpta: "04:52:11.70-05" ( precision )
SELECT CURRENT_TIMESTAMP (2); --> Rpta: "2009-11-06 04:52:35.66-05" ( precision )
SELECT LOCALTIME; --> Rpta: "04:52:54.890625"
SELECT LOCALTIMESTAMP; --> Rpta: "2009-11-06 04:53:04.640625"
SELECT LOCALTIME (2); --> Rpta: "04:53:11.92" ( precision )
SELECT LOCALTIMESTAMP (2); --> Rpta: "2009-11-06 04:53:24.03" ( precision )
SELECT now(); --> Rpta: "2009-11-06 04:53:30.515625-05"
SELECT timeofday(); --> Rpta: "Fri Nov 06 04:53:34.921875 2009 COT"
SELECT TIMESTAMP 'now'; --> Rpta: "2009-11-06 04:53:40.203125"
SELECT TIME 'now'; --> Rpta: "04:53:51.703125"

2) WITHOUT/WITH TIME ZONE

SELECT TIMESTAMP WITHOUT TIME ZONE 'now'; --> Rpta: "2009-11-06 04:55:05.84375"
SELECT TIMESTAMP WITH TIME ZONE 'now'; --> Rpta: "2009-11-06 04:55:13.9375-05"

3) AT TIME ZONE: CONVERSIÓN A DIFERENTES ZONAS HORARIAS

SELECT TIMESTAMP WITH TIME ZONE '2009-11-06 17:05:01' AT TIME ZONE 'UTC-6'; --> Rpta: "2009-11-07 04:05:01"
SELECT TIMESTAMP WITH TIME ZONE '2009-11-06 17:05:01' AT TIME ZONE 'UTC-7'; --> Rpta: "2009-11-07 05:05:01"
SELECT TIMESTAMP WITH TIME ZONE '2009-11-06 17:05:01' AT TIME ZONE 'UTC-8'; --> Rpta: "2009-11-07 06:05:01"
SELECT TIMESTAMP WITH TIME ZONE '2009-11-06 17:05:01' AT TIME ZONE 'MST'; --> Rpta: "2009-11-06 15:05:01"
SELECT TIMESTAMP WITH TIME ZONE '2009-11-06 17:05:01' AT TIME ZONE 'PST'; --> Rpta: "2009-11-06 14:05:01"

4) EXTRACT

SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 3 (MILENIO)
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 21 (SIGLO)
SELECT EXTRACT(DECADE FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 200 (DÉCADA)
SELECT EXTRACT(YEAR FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 2009 (AÑO)
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 4 (TRIMESTRE(1-4))
SELECT EXTRACT(MONTH FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 11 (MES(1-12))
SELECT EXTRACT(WEEK FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 45 (NUM. SEMANA)
SELECT EXTRACT(DAY FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 6 (DIA)
SELECT EXTRACT(HOUR FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 17 (HORA(0 - 23))
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 5 (MINUTO)
SELECT EXTRACT(SECOND FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 1 (SEGUNDO)
SELECT EXTRACT(MICROSECONDS FROM TIMESTAMP '2009-11-06 17:05:01.5'); --> Rpta: 1500000 (MICROSEGUNDO)
SELECT EXTRACT(MILLISECONDS FROM TIMESTAMP '2009-11-06 17:05:01.5'); --> Rpta: 1500 (MILISEGUNDO)
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 1257545101 (SEGUNDOS DESDE 1970-01-01 00:00:00-00)
SELECT EXTRACT(DOW FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 5 (DIA DE LA SEMANA(0-6)(0=Domingo))
SELECT EXTRACT(DOY FROM TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 310 (DIA DEL AÑO(1 - 365/366))

5) DATE_PART
SELECT date_part('YEAR', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 2009 (AÑO)
SELECT date_part('MONTH', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 11 (MES(1-12))
SELECT date_part('DAY', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 6 (DIA)
SELECT date_part('HOUR', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 17 (HORA(0 - 23))
SELECT date_part('MINUTE', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 5 (MINUTO)
SELECT date_part('SECOND', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: 1 (SEGUNDO)

6) DATE TRUNC

SELECT date_trunc('YEAR', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-01-01 00:00:00" (AÑO)
SELECT date_trunc('MONTH', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-11-01 00:00:00" (MES(1-12))
SELECT date_trunc('DAY', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-11-06 00:00:00" (DIA)
SELECT date_trunc('HOUR', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-11-06 17:00:00" (HORA(0 - 23))
SELECT date_trunc('MINUTE', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-11-06 17:05:00" (MINUTO)
SELECT date_trunc('SECOND', TIMESTAMP '2009-11-06 17:05:01'); --> Rpta: "2009-11-06 17:05:01" (SEGUNDO)

7) INTERVAL

SELECT EXTRACT(YEAR FROM INTERVAL '2009 years 24 months'); --> Rpta: 2011
SELECT EXTRACT(MONTH FROM INTERVAL '2009 years 25 months'); --> Rpta: 1 (MES(0 - 11))
SELECT date_part('HOUR', INTERVAL '5 hours 3 minutes'); --> Rpta: 5
SELECT date_trunc('HOUR', INTERVAL '5 hours 3 minutes'); --> Rpta: "05:00:00"

8) OPERACIONES CON FECHAS
SELECT date '2009-11-06 17:05:01' + integer '10'; --> Rpta: "2009-11-16 17:05:01"
SELECT date '2009-11-06 17:05:01' + interval '1 hour'; --> Rpta: "2009-11-06 18:05:01"
SELECT interval '24 hours'; --> Rpta: "24:00:00"
SELECT interval '12 hours 5 minutes 10 seconds'; --> Rpta: "12:05:10"
SELECT time '01:00' + interval '3 hours'; --> Rpta: "04:00:00"
SELECT timestamp '2009-11-06 17:05:01' - timestamp '2009-10-06 17:05:01'; --> Rpta: "31 days"
SELECT time '2009-11-06 17:05:01' - time '2009-11-06 16:05:01'; --> Rpta: "01:00:00"

CONCLUSIONES:

–CURRENT_TIME y CURRENT_TIMESTAMP: Entregan valores con TIME ZONE.
–LOCALTIME y LOCALTIMESTAMP: Entregan values sin TIME ZONE.
–now() es similar a CURRENT_TIMESTAMP

Libros de PostgreSQL
Para que ste blog siga creciendo:


Visitenos en:

Instagram