Para instalar postgresql en OSX Yosemite, primero instala homebrew.

Después ejecuta

brew install postgres ó brew install postgresql, son sinónimos

crea un enlace simbólico para que se ejecute postgres al iniciar tu máquina (el comando aparece en las notas, al instalar con brew)

ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents

instala Lunchy para administrar de una forma más sencilla los servicios

gem install lunchy

inicia el servicio postgres

lunchy start postgres

crea una base de datos

createdb demo

si no especificas un nombre para la base de datos, creará una con el nombre del usuario que ejecuta el comando y este mismo se convierte en el propietario.

Conéctate a la base de datos

psql -d demo

Ya en el prompt de postgresql puedes ejecutar varios comandos

\conninfo
\l
\d

Para más información sobre postgresql, consulta la documentación.

Para comenzar un proyecto, de las primeras cosas que necesitamos es una base de datos. En ubuntu podemos utilizar postgresql.

Para instalar postgres basta con ejecutar el siguiente comando

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

Una vez instalado podemos conectarnos como el usuario postgres (super admin)

sudo -i -u postgres
psql

Una vez en el prompt de postgresql podemos ejecutar los siguientes comandos

\conninfo    # nos muestra información de nuestra conexión
\conn database_name    # cambiar la base de datos activa
\d    # lista los objetos de la base de datos
\dt    # lista las tablas de la base de datos
\q    # salir del prompt de postgresql

Ya fuera del prompt de postgresql podemos crear un usuario y su base de datos de la siguiente manera

createuser -D -A -P username
createdb -O username dbname

El primer comando crea un usuario sin privilegio de crear bases de datos (-D), ni agregar usuarios (-A) y nos preguntará la contraseña para el usuario (-P). El segundo comando crea la base de datos y asigna como propietario al usuario que especifiquemos.

Para conectarnos como un usuario diferente necesitamos hacerlo de la siguiente manera

psql -U username -h 127.0.0.1 database

Fuentes:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-14-04
http://stackoverflow.com/questions/8420761/postgres-authentication-fails-when-try-to-login-with-different-unix-user
https://help.ubuntu.com/community/PostgreSQL#Managing_users_and_rights

Cairo Dock es mi lanzador por defecto en las últimas versiones de Ubuntu que he instalado. Me agrada estéticamente y tiene varias funcionalidades.

Este, como otros lanzadores (AWN, Unity Launcher, Docky), tiene problemas con identificar correctamente las ventanas de las aplicaciones Java. De estas, las que utilizo principalmente son Eclipse y WebStorm. Pues me di a la tarea de como resolver este problema y poder poner mi lanzador directamente en la barra de Cairo Dock, pero te debe funcionar también con los otros.

Primero crea tu lanzador (archivo .desktop), por ejemplo para WebStorm

[Desktop Entry]
Type=Application
Name=Web Storm
Comment=Web Development IDE
Icon=/home/cirovladimir/Apps/web-storm-6.0.1/bin/webide.png
Exec=/home/cirovladimir/Apps/web-storm-6.0.1/bin/webstorm.sh
Terminal=false
Categories=Development;IDE;Java;
StartupWMClass=jetbrains-webstorm

La línea importante es la que dice StartupWMClass=jetbrains-webstorm.

Para obtener el valor correcto de esta variable para otras aplicaciones puedes ejecutar el comando

xprops | grep WM_CLASS

y dar clic en la ventana de la aplicación

Fuentes:

http://askubuntu.com/questions/36434/how-can-i-remove-duplicate-icons-for-launched-java-programs-in-the-launcher
https://bugs.launchpad.net/docky/+bug/484610

GWT – UUID

marzo 2, 2012

Para identificar un elemento podemos utilizar un UUID. La ventaja de utilizar UUID’s es que los podemos crear tanto en el cliente como en el servidor. Al ser prácticamente únicos, las probabilidades de una colisión son mínimas.

En Java creas un nuevo UUID de la siguiente manera

import java.util.UUID;
String id=UUID.randomUUID().toString();

Pues en GWT no podemos utilizar esta clase porque no ha sido emulada( implementada ). Afortunadamente existe una implementación en Javascript que ha sido traducida a Java.

package de.hypergraphs.hyena.core.shared.data;

/**
File: Math.uuid.js
Version: 1.3
Change History:
  v1.0 - first release
  v1.1 - less code and 2x performance boost (by minimizing calls to Math.random())
  v1.2 - Add support for generating non-standard uuids of arbitrary length
  v1.3 - Fixed IE7 bug (can't use []'s to access string chars.  Thanks, Brian R.)
  v1.4 - Changed method to be "Math.uuid". Added support for radix argument.  Use module pattern for better encapsulation.

Latest version:   http://www.broofa.com/Tools/Math.uuid.js
Information:      http://www.broofa.com/blog/?p=151
Contact:          robert@broofa.com
----
Copyright (c) 2008, Robert Kieffer
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of Robert Kieffer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

public class UUID {
	private static final char[] CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();
	/**
	 * Generate a random uuid of the specified length. Example: uuid(15) returns
	 * "VcydxgltxrVZSTV"
	 *
	 * @param len
	 *            the desired number of characters
	 */
	public static String uuid(int len) {
		return uuid(len, CHARS.length);
	}
	/**
	 * Generate a random uuid of the specified length, and radix. Examples:
*</pre>
<ul>*
	<li>uuid(8, 2) returns "01001010" (8 character ID, base=2)
*</li>
	<li>uuid(8, 10) returns "47473046" (8 character ID, base=10)
*</li>
	<li>uuid(8, 16) returns "098F4D35" (8 character ID, base=16)
 *</li>
</ul>
<pre>
	 *
	 * @param len
	 *            the desired number of characters
	 * @param radix
	 *            the number of allowable values for each character (must be  CHARS.length) {
			throw new IllegalArgumentException();
		}
		char[] uuid = new char[len];
		// Compact form
		for (int i = 0; i < len; i++) {
			uuid[i] = CHARS[(int)(Math.random()*radix)];
		}
		return new String(uuid);
	}
	/**
	 * Generate a RFC4122, version 4 ID. Example:
	 * "92329D39-6F5C-4520-ABFC-AAB64544E172"
	 */
	public static String uuid() {
		char[] uuid = new char[36];
		int r;

		// rfc4122 requires these characters
		uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
		uuid[14] = '4';

		// Fill in random data.  At i==19 set the high bits of clock sequence as
		// per rfc4122, sec. 4.1.5
		for (int i = 0; i < 36; i++) {
			if (uuid[i] == 0) {
				r = (int) (Math.random()*16);
				uuid[i] = CHARS[(i == 19) ? (r & 0x3) | 0x8 : r & 0xf];
			}
		}
		return new String(uuid);
	}
}

Fuentes:
http://www.2ality.com/2009/01/uuids-for-gwt.html
https://github.com/broofa/node-uuid

Primero vamos a crear un servicio web (SOAP) utilizando Apache CXF. Necesitas tener instalado m2eclipse -ya viene con Eclipse Indigo– y m2e-wtp

Creamos un nuevo proyecto de Maven


Seleccionamos el arquetipo

Establecemos las coordenadas de Maven

Nos queda un proyecto de la siguiente manera

Para probarlo, abrimos el archivo pom.xml y agregamos el plugin “jetty-maven-plugin

<plugin>
    <groupId>org.mortbay.jetty</groupId>
         <artifactId>jetty-maven-plugin</artifactId>
    <version>8.0.1.v20110908</version>
</plugin>

Ahora podemos ejecutarlo dando clic en el proyecto y luego en “Run As…->Maven build…”, pon “jetty:run” en Goals

Al final, verás en la consola un texto como el siguiente

INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1f60f2b: defining beans []; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@16d8a64
Oct 10, 2011 3:59:37 PM org.apache.cxf.transport.servlet.AbstractCXFServlet replaceDestinationFactory
INFO: Servlet transport factory already registered
2011-10-10 15:59:37.112:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080 STARTING
[INFO] Started Jetty Server

Abre tu navegador y ve a http://localhost:8080

Si das clic en el enlace que te muestra podrás ver el WSDL del servicio web. Puedes probar el servicio con una herramienta como SoapUI o el WSDL Explorer de Eclipse.

Bueno, pues ahora lo importante de este artículo, ¿cómo podemos depurar el código de los servicios web? Y con depurar me refiero a establecer breakpoints, examinar variables, ejecutar línea por línea, etc.
Tienes que abrir una consola -no pude hacerlo directamente en Eclipse- e ir al directorio de tu proyecto, una vez ahí, ejecuta el comando

mvnDebug jetty:run

deja abierta la consola y regresa a Eclipse. Da clic derecho en tu proyecto y luego en “Debug As…->Debug Configurations…”. Da clic derecho en “Remote Java Application” y selecciona “New”

deja los valores por default y da clic en Debug. Establece un breakpoint en el código generado e invoca el servicio, verás como la ejecución se detiene y podrás examinar las variables 😀

I’ve just installed Eclipse Indigo and Google Plugin for Eclipse. Then, I created a new -empty- Web Application Project and added a Module and Entry Point successfully, but when I tried to add a new HTML Page to contain my module I couldn’t. The create new html page wizard did nothing when I pressed the finish button. I switched Eclipse to previous version -helios- but the same problem occurred. Even tried to switch java jdk from openjdk to oracle(sun) jdk but didn’t work.
An issue has been reported in the gwt issue tracker but has not been addressed. Meanwhile…Is there a way to install a previous version of Google Plugin for Eclipse?

I’m going to see if the same problem occurs on Ubuntu 10.10 …. 🙂
Unfortunately it works in Ubuntu… same Eclipse and Google Plugin version 😦
It works if you use GWT 2.2.0, you can download previous versions from here.
Or you could just add a simple html page and paste the following contents replacing your module’s name appropriately, “samples” in this case

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Samples</title>
<script type="text/javascript" language="javascript" src="samples/samples.nocache.js"></script>
</head>

<body>

</body>
</html>

Para conectarte a un RAC de Oracle selecciona el tipo de conexion “Avanzada” y escribe directamente la URL de conexion de la siguiente forma:

jdbc:oracle:thin:@
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db-service)
(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))
)
)

donde host1-vip es la dirección IP del nodo 1
donde host2-vip es la dirección IP del nodo 2
donde db_service es el nombre de servicio de la base de datos (preguntale a tu DBA ;-))

Fuente: forums.sun.com

tip: Esta misma URL de conexión la puedes utilizar en el código de tus aplicaciones 😛 jiuu

Have a nice day, byte!