Latino – Nuevo lenguaje de programación con sintaxis en español

Hola les hago una invitación a todos los desarrolladores y al público en general para la creación de un nuevo lenguaje de programción con sintaxis en español y que sea lo más natural posible.

Este proyecto nace de la necesidad de incrementar la educación de nivel básico (primaria y secundaria) debido a que los niños tienen la capacidad de entender la lógica a muy temprana edad y es en esta edad cuando más aprenden, esto motivará a los niños y jovenes por interesarse en el mundo del desarrollo de aplicaciones.

¿Y por que un lenguaje de programación más?
Si es bien sabido que ya hay muchos lenguajes de programación; pero no tenemos un lenguaje para programar con sintaxis en español, y entonces ¿por qué no hacer uno?

¿Cuantos de ustedes no batallaron con el inglés?
¿Cúal seria la ventaja si no tuvieras que preocuparte por aprender javascript, html, css y mysql para desarrollar tus paginas web?

Pues bien si este proyecto suena ambicioso, realmente les puedo decir que dependerá de la participación de todos nosotros para que esto sea posible.

A continuación menciono las principales caracteristas de este proyecto:
1. Simplicidad: La sintaxis debera de ser lo más natural posible al lenguaje español.
2. Sencillo de aprender: Al ser simple aprenderas más rápido este nuevo lenguaje.
3. Libre: Cualquiera puede descargar el código fuente del lenguaje, extender las librerias basicas y crear sus propias librerias si asi lo desea.
4. Lenguaje de alto nivel: Cuando escribas código no tendrás que preocuparte por detalles de bajo nivel, como manejar la memoria empleada en tu programa.
5. Portable: Cuando escribas tus programas en "latino" podras ejecutarlo en cualquier plataforma.
6. Orientado a Objetos: Permitirá programación orientada a procedimientos así como orientada a objetos.

Pues bien veamos algunas de las definiciones para este lenguaje:

Comentarios:
Los comentarios estaran delimitados por comillas dobles ("), sólo será considerado
como comentario si la línea empieza con dicho cáracter,o es precedido con espacios o tabuladores.

"Este es un comentario de una linea"
"Este es
un comentario
multilinea"
"Este es un comentario con espacios al inicio de la linea"

Variables:
Se declaran indicando el tipo de dato que almacenará y su identificador.
El tipo de dato es opcional cuando se inicializa con un valor la variable.

identificador = valor
[tipo_dato] identificador
entero numero = 1

Constantes:
Cuando se declara una constante con la palabra clave [constante], también
se debe asignar el valor forzosamente.

constante decimal PI = 3.1416

Estructuras de control:
si (if): Evalua una condicion y si el resultado es [verdadero] ejecuta
las instrucciones a continuacion.

si (condicion)
"codigo"
fin

En caso de que el resultado de la condición sea [falso] se deberá de ejecutar
el código despues de la palabra reservada [otro]

si (condicion)
"codigo"
otro
"codigo"
fin

Es posible el anidamiento de las sentencias [si] de la siguiente manera:

si (condicion)
"codigo"
otro si (condicion)
"codigo"
otro
"codigo"
fin
fin

elegir (switch): Evalua una opción de multiples posibles casos.

elegir (opcion):
caso "1":
"codigo"
caso "2":
"codigo"
otro:
"codigo"
fin

desde (for): Hace que una instrucción o bloque de instrucciones se repitan
desde un valor inicial hasta un final

desde 0 hasta 10
imprimir(i)
fin
salida: 0 1 2 3 4 5 6 7 8 9 10

desde 10 hasta 0
imprimir(i)
fin
salida: 10 9 8 7 6 5 4 3 2 1 0

Se puede especificar el incremento del ciclo con la palabra clave [incremento]

i = 10
desde i hasta 50 incremento = 10
imprimir(i)
fin
salida: 10 20 30 40 50

mientras (while): Hace que una instrucción o bloque de instrucciones se repitan
mientras la condición sea [verdadero]

mientras (condicion)
"codigo"
fin

hacer-mientras (do-while): Hace que una instrucción o bloque de instrucciones
se repitan mientra la condicion sea [verdadero],
las intrucciones de codigo se ejecutan al menos una vez.

hacer
"codigo"
mientras (condicion)

se puede condicionar salir del bucle o continuar con la siguiente permutación
con las palabras clave [romper y continuar]

i = 0
desde i hasta 10
si i == 5
romper
imprimir(i)
fin
fin
salida: 0 1 2 3 4 5

i = 0
desde i hasta 10
si i == 5
continuar
imprimir(i)
fin
fin
salida: 0 1 2 3 4 6 7 8 9 10

Puedes ver la definición completa en GitHub

Le doy las gracias a todos aquellos que me ha estado apoyando en este proyecto en especial a Francisco Javier Carazo Gil por darme la oportunidad de públicar este artículo en Linux Hispano.

Julia, un prometedor lenguaje de programación

julia

A la hora de programar cálculo científico existen los famosos lenguajes de programación como MATLAB/Octave, R o incluso Python. Sin embargo, estos lenguajes pecan en varios aspectos como eficiencia, paralelización, etc. Últimamente está creciendo en popularidad un nuevo lenguaje que corrige estas deficiencias. Se llama Julia y éstas son algunas de sus principales características:

· Sintaxis sencilla y elegante al estilo MATLAB/Octave.
· Compilador JIT que ofrece una alta eficiencia.
· Diseñado para programar fácilmente sistemas distribuidos y/o paralelos.
· La licencia de Julia es de código abierto, exactamente la MIT.

Si os entra la curiosidad os recomiendo enormemente que le echéis un vistazo a su página web y, si aún tenéis más interés, que lo catéis un poco.

Enlace oficial: The Julia Language.

Ancla

Navegar dentro de una misma página HTML

AnclaAunque la navegación dentro de un mismo documento web es algo que lleva mucho tiempo funcionando dentro de las tecnologías web, a día de hoy, a vuelto a estar de moda gracias a los themes que aprovechan la navegación vertical sin cambio de URL. ¿Cómo funciona esta forma de navegar? Creo que todos conocéis la siguiente forma:

<a href="url_de_enlace">parte legible del enlace</a>

Con la que navegamos a URL de fuera del documento. Pero también podemos indicar la URL de dentro del documento, ¿cómo hacerlo? Se puede hacer de diferentes formas, usando jQuery por ejemplo, con lo que ampliamos las posibilidad y dotamos de más efectos a la misma acción. Sin embargo, explicaré en esta entrada la forma básica, la que ofrece la tecnología web de forma propia sin añadidos.

Lo primero es definir las diferentes secciones dentro de la página a la que podremos saltar. Lo haremos con el elemento HTML anchor, ancla, que tanto usamos para enlazar pero que tan pocas veces usamos como "ancla" dentro del mismo documento:

<a name="pie_de_pagina"/>

Como puedes ver se usa de forma única, sin etiqueta de apertura y cierre y además no se verá por parte del usuario. Los enlaces en ese mismo documento que nos llevarán a esta sección tendrán esta forma:

<a href="#pie_de_pagina">como podéis ver en el pie de página</a>

Tan sencillo como esto, ya véis que la etiqueta <a> tiene más usos de los que esperabas.

Por cierto, si te interesa todo este tema de programación web, te recomiendo que leas el curso de WordPress que estoy dando ahora mismo en CODECTION o esta entrada donde cuento cómo crear una tienda online.

wp_kses-vs-strip_tags

wp_kses() o cómo limpiar cadenas HTML en WordPress para evitar ataques XSS

Cuando desarrollo plugins y themes para WordPress en CODECTION siempre procuro mirar por la seguridad, "sanitizando" variables tanto para evitar ataques vía inyección SQL como para evitar ataques XSS. Es muy frecuente, que si recibes peticiones y luego las devuelves por pantalla, las variables que manejes, si las maneja el usuario de alguna manera, puedan terminar siendo el origen de una ataque XSS.

Algo tan sencillo como pasar una etiqueta script o iframe en un sitio conveniente y además de un ataque XSS, eres una fuente de phising para el resto de la red. Por fortuna, WordPress facilita mucho la vida al desarrollador al respecto y para evitar este tipo de ataques nos ofrece una función que además es extensible en su funcionamiento vía parámetros.

La función en cuestión es wp_kses() y aunque es similar a strip_tags(), una función nativa de PHP, suele recomendarse para cuestiones de seguridad.

wp_kses-vs-strip_tags

¿Para qué usamos wp_kses?

Básicamente deciros que sirve para limpiar una cadena de elementos HTML indeseados (imaginad otros usos que no sea el de seguridad, se me viene a la cabeza un uso de "limpieza" de una cadena proveniente de Microsft Word o LibreOffice Write).

Tiene esta forma:

wp_kses($string, $allowed_html, $allowed_protocols);

Y los parámetros que recibe indican exactamente:

  • $string: cadena a filtrar
  • $allowed_html: etiquetas HTML que se permitirán y que no se limpiaran
  • $allowed_protocols: protocolos permitidos, por defecto vienen unos pocos y siempre se asegura que no va a permitirse etiquetas ni invocaciones a ficheros JavaScript

La función devolverá el código HTML totalmente limpiado.

El segundo parámetro es interesante, porque podemos definir también qué atributos pasarán de cada etiqueta, un ejemplo curioso:

array(
    'a' => array(
        'href' => array(),
        'title' => array()
    ),
    'br' => array(),
    'em' => array(),
    'strong' => array(),
);

Ejemplo

El ejemplo es original de Simon Wheatly. Tenemos de entrada:

Wisi <a href="#" style="color: red;">defui nunc</a> dignissim <strong class="weird">transverbero ideo vel</strong> utinam blandit, iaceo meus epulae enim amet nibh sed brevitas. Pala consequat <script type="text/javascript" src="http://example.com/certainly/do/not/want/this.js"></script> capio sino regula typicus <small>luptatum</small> olim ullamcorper uxor in verto.

Vamos a dejar sólo:

  • La etiqueta 'a' y sus atributos 'href', 'title' y 'target'
  • Y las etiquetas 'em' y 'strong' => array()

El código sería este:

$entrada = 'Wisi <a href="#" style="color: red;">defui nunc</a> dignissim <strong class="weird">transverbero ideo vel</strong> utinam blandit, iaceo meus epulae enim amet nibh sed brevitas. Pala consequat <script type="text/javascript" src="http://example.com/certainly/do/not/want/this.js"></script> capio sino regula typicus <small>luptatum</small> olim ullamcorper uxor in verto.';
$etiquetas_permitidas = array(
'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ),
'em' => array(),
'strong' => array(),
);
$salida= wp_kses( $entrada, $etiquetas_permitidas );
echo $salida;

Y la salida, con los elementos HTML recortados:

Wisi defui nunc dignissim transverbero ideo vel utinam blandit, iaceo meus epulae enim amet nibh sed brevitas. Pala consequat  capio sino regula typicus luptatum olim ullamcorper uxor in verto.

¿Útil no? Además de por seguridad os puede interesar para filtrar ciertos elementos de forma que podáis eliminar código HTML que provenga de Microsoft Word o de cualquier otro sitio.

Lo mejor de mi RSS del 30 de junio al 6 de julio de 2014

Más de uno nos leerá ya desde la playa, estamos ya en julio y en este fresco verano andaluz (fresco lo digo sin ironía alguna, extrañamente fresco por ahora) os traigo lo mejor que he leído esta semana en mi lector de RSS favorito, Feedly:

Esta semana en Linux Hispano ha habido más contenido del que normalmente solemos generar, a ver si conseguimos sacar tiempo suficiente para seguir alimentando este portal, que tras 10 años en la red se lo merece.

Logo PHP

Manejo básico del búfer en PHP

Logo PHPSiempre que manejamos PHP, existe la problemática de mezclar la vista y funcionalidad. Este problema se da a varios niveles y es más complejo y da más quebraderos de cabeza cuanto más se enrevesan código y funcionalidad, el caso típico es cuando guardamos parte de la vista en una cadena y la devolvemos o la imprimimos. Al meter la vista dentro de la cadena, el código se vuelve poco legible y además hay ocasiones en las que este métodos llega a ser inoperable.

Veamos un ejemplo:

$cadena = "Voy a preparar una cadena con parte de la vista";
$cadena .= "Para devolverla";
$cadena .= "Aquí podríamos meter código HTML";
return $cadena;

Ese caso llevado al extremo sería mucho más grande, con variedad de código HTML y JavaScript en su interior y con un enrevesamiento tal que haría muy complejo su manejo y mantenimiento.

Gracias a que PHP nos ofrece multitud de soluciones, la solución es bien sencilla. Usar las funciones de búfer. Un apunte rápido:

  • ob_start(): abre el búfer
  • ob_get_contents(): obtiene los elementos que hay en ese momento en el búfer
  • ob_end_clean(): cierra el búfer y lo limpia

Con estas tres funciones, el código equivalente al de arriba, sería tan simple como el que sigue:

ob_start();
?>
Voy a preparar una cadena con parte de la vista
Para devolverla
Aquí podríamos meter código HTML
<?php
$cadena = ob_get_contents();
ob_end_clean();

return $cadena;

Podremos jugar tanto como queramos con el código HTML, en lugar de hacer una salida a pantalla, se acumulará en el búfer y podremos manejarlo en forma de variable. Además de ese tipo de salida, podremos manejar salidas con echos también para acumular datos en el búfer.

Sin lugar  dudas, una funcionalidad estupenda de PHP para hacer más legible el código y ampliar más aún su potencia. Yo lo uso prácticamente a diario desarrollando con WordPress.

Desarrollo con WordPress

Cómo obtener la dirección URL actual en WordPress

Hay muchas formas de hacerlo, pero las que pasan por usar directamente $_SERVER como la vía que se muestra en este ejemplo no me convencen para nada.

Así que ya que usamos WordPress, vamos a ayudarnos de éste para hacerlo.

Lo primero es entender qué significa obtener la dirección URL actual, en resumidas palabras obtener lo que tenemos en la barra de direcciones (si no hemos modificado su contenido previamente, de cajón ;-) ) Con la función add_query_arg, si no le pasamos ningún elemento (array()) obtendremos la ruta actual de la forma /página/subpágina/ pero si lo que deseamos es la dirección completa tendremos que usar home_url. Así, si introducimos lo siguiente:

$url_actual = home_url( add_query_arg( array() ) );

Obtenemos http://nuestra-web.com/página/subpágina Justo lo que queremos :)

¿Problemas? Si estás en una instalación dentro de un subdominio entonces esto no te funcionará, ya que home_url  te devolverá nuestra-web.com/subdominioadd_query_arg retornará subdominio/página/subpágina. Así, una solución para este caso y al mismo tiempo genérica será:

$url_actual = home_url( add_query_arg( array(), $wp->request ) );

imagemagick

PHP Fatal error: Class ‘Imagick’ not found

imagemagickSi manejáis PHP y sois usuarios de Linux sabréis que una de las mejores librerías que existen para manejar imágenes, con operaciones a todos los niveles, es imagemagick.

En caso de que la estéis usando y obtengáis un error 500 del servidor, si activáis los errores, es posible que tengáis algo así:

PHP Fatal error:  Class 'Imagick' not found 

El error se debe a que no tenéis instalada la librería correctamente, la solución es simple:

apt-get install imagemagick php5-imagick

Tras esto reiniciáis el servicio y listo:

sudo service apache2 restart

Obtener nombre, dirección y otros detalles de un blog dentro una red de blogs WordPress

Las redes de blogs WordPress, los antiguos WordPress Multisite, son una alternativa muy funcional para poder mantener multitud de sitios, en una sola instalación. No tienen por qué ser blogs, ni formar parte de una red como tal, sino pertenecer a una misma instalación para ahorrar en recursos y en mantenimiento.

Si tenéis dudas de cómo se usan o de qué posibilidades tienen, que no es el objetivo de este artículo, preguntadme en comentarios y os comento e incluso podemos preparar una entrada sobre ello.

Vayamos al grano. Normalmente, las redes blogs suelen agrupar blogs de una misma temática. En esos casos, lo normal es que haya un blog que sea el "resumen" o "índice" del resto. Para esos casos, se suele desarrollar un Page Template o shortcode que muestra la información que deseamos al respecto.

Dentro de la programación de ese Page Template o shortcode necesitamos incluir información relativa a los blogs de nuestra red. Os voy a explicar cómo hacerlo.

Función get_blog_details()

Esta función devuelve un objeto con los datos del blog, tiene dos parámetros:

  • field: de tipo mixed, es decir, acepta varios tipos. Sirve para definir a qué blog nos referimos y podemos hacerlo enviando el ID del sitio dentro de la red o su slug (también podemos hacerlo pasándole más campos, un array con varios campos: dominio, ruta...). Si no lo enviamos, devuelve los datos del blog actual.
  • get_all:  para que devuelva todos los datos del blog o sólo los que definamos, si no lo ponemos devuelve todos.

Ejemplo de uso

Y ahora viene el uso, veamos un ejemplo. Este ejemplo obtiene todos los blogs de una red y muestra sus nombres con sus enlaces:

$blog_list = wp_get_sites();

foreach ($blog_list as $blog):
	$detalles = get_blog_details($blog["blog_id"]);
?>
	<h2 class="post-title"><a href="<?php echo $detalles->siteurl; ?>"><?php echo $detalles->blogname; ?></a></h2>
<?php endforeach; ?>

Si queréis saber qué más contiene el objeto detalles os recomiendo leer la referencia de la función, ver cómo está implementada y la referencia de las tablas WordPress. Y más inmediato todavía es hacerle un var_dump($detalles).

Comentarios, preguntas y dudas; ya sabéis, en la parte de comentarios.

MySQL logo

Ordenando consultas con valores NULL en MySQL

MySQL logoCuando trabajamos con bases de datos, normalmente tendremos casos en los que existan valores nulos tanto en nuestras tablas como en el resultado de nuestras consultas. Sin embargo, esta realidad, también provoca que algunas acciones como las ordenaciones sean problemáticas. Para poder superar estas dificultades disponemos de funciones como coalesce() (buscad dentro del enlace).

La función coalesce()

¿Qué hace esta función? Recibe una serie de parámetros y devuelve el primero que no es nulo.

Forma de uso

Por lo tanto, si tenemos una columna edad, por ejemplo, que puede ser nulo o no serlo, y ponemos:

COALESCE(edad, 0) esta función devolverá la edad si no es nula y si es nula, el primer valor no nulo de la lista de parámetros, como sólo hay dos parámetros, será el siguiente, 0.

Ordenando con valores nulos

Siguiendo este ejemplo podríamos hacer una ordenación a nuestro antojo, es decir, si queremos ordenar primero las fechas de los más mayores, es decir, en sentido descendente y poner al final los valores nulos, podríamos hacer justo:

SELECT nombre, apellidos FROM personas ORDER BY (edad, 0)

Logo MySQL

Listar todas las tablas de una base de datos en MySQL

Siempre que trabajamos con MySQL o con cualquier otro sistema gestor de bases de datos relacional tenemos la costumbre de hacer operaciones sobre las tablas y no sobre las bases de datos en sí. Básicamente lo único que hacemos es:

 USE mi_base_de_datos

O con el lenguaje que estemos usando la elegimos y trabajamos sobre ella o como mucho haciendo consultas entre varias bases de datos.

Logo MySQL

Sin embargo, hoy trabajando en un proyecto que estoy haciendo para un cliente de CODECTION, he tenido la necesidad de listar y operar sobre los nombres de las tablas de una base de datos. ¿Cómo lo he hecho?

SHOW FULL TABLES FROM mi_base_de_datos

Y obtenéis un listado de todas las tablas que hay en esa base de datos.

De hecho, podéis hacer consultas del tipo:

SHOW FULL TABLES FROM mi_base_de_datos LIKE '%busqueda%'

Así tenéis una más herramientas todavía para trabajar con nuestra querida MySQL.

WordPress administrador

Comprobar en WordPress si el usuario actual es administrador

WordPress utiliza un mecanismo sencillo y potente para redirigir el flujo en función de varias circunstancias, son las llamadas Conditional Tags y nos sirven por ejemplo para definir en un fichero diferentes comportamientos en función de:

  • el tipo de URL visualizada si es de archivo, del loop principal, si es un post, si es una página
  • el ID de la página o post que estamos viendo
  • si pertenece a una categoría u a otra o a una categoría u otra

Una consulta frecuente que me hacen y que veo en Internet mucho (además de que yo mismo caí en su día, son muchos años desarrollando con WordPressç) es cómo distinguir si estamos ante un usuario administrador o de otro tipo.

¿Qué ocurre? La confusión

Hay un Conditional Tag que es is_admin() pero que no sirve para eso, sino para distinguir si estamos en una pantalla de administración (de back-end, de escritorio) o de front-end.

WordPress administrador

La solución

No tenemos una función directa para hacer esa labor. Podríamos por ejemplo recoger el rol del usuario actual, pero sería algo más largo que hacer una comparación directa. La función que solemos usar para esa labor es: current_user_can().

if ( current_user_can('manage_options') ) {
 echo 'El usuario puede gestionar opciones, es decir, es un administrador';
}

Básicamente preguntamos ¿este usuario puede hacer algo propio de los administradores? Para ver una tabla completa de capacidades disponibles en WordPress tenéis aquí la lista.

 

Obtener una lista HTML de todas las categorías en WordPress

Como todos sabréis si usáis WordPress, toda la información que el sistema maneja: las entradas, las páginas, o cualquier otro tipo de dato que hayáis creado (los llamados Custom Post Type), se estructura en base una taxonomía.

Las taxonomías por defecto son dos, que aunque internamente se implementan igual, externamente funcionan de forma diferente. Las categorías actúan comos los capítulos de un libro, como la tabla de contenido inicial, partiendo el contenido del blog en temáticas y las etiquetas actúan como el índice final donde se referencias temáticas de forma cruzada, el llamado índice de palabras (que dan lugar a nubes de etiquetas similares a las que os muestro a continuación).

WordPress nube de tags

Si manejáis otro tipo de datos, podéis crear vuestras propias taxonomías y así personalizar al máximo esta potencialidad para conseguir que WordPress sea una auténtica plataforma para desarrollar aplicaciones web.

Por cualquier razón, podéis queréis tener una lista de tipo <select><option> en HTML de las categorías, podéis usar las siguientes funciones que he creado y que uso para esto mismo:

function get_list_categories(){
	return get_list_subcategories(0);
}

function get_list_subcategories($parent){
	$result = "";

	$args = array(
		'taxonomy'	=> "category",
		'parent'	=> $parent,
		'hide_empty' => 0
	);

	$categories = get_categories($args);

	foreach($categories as $category)
		$result .= '<option value="'.$category->cat_ID.'">' . $category->cat_name . '</option>';

	return $result;
}

Si tenéis dudas preguntadme pero básicamente hay dos llamadas:

  • get_list_categories(): para llamar a todas las subcategorías de padre 0, es decir, las categorías padre que no tienen hijas.
  • get_list_subcategories($parent): indicando el ID del padre, obtenemos todas la categorías que son hijas inmediatas del padre definido en $parent.

Internamente básicamente tiene funcionalidad la segunda función y hace una llamada a la función de la API get_categories pasándole los argumentos para conseguir que nos devuelva de la taxonomía estándar, "category", todas las categorías (sin esconder las que están vacías) cuyo padre inmediato es $parent.

Posteriormente se obtiene una colección de objetos de categorías al que le extraemos la cat_ID y la cat_name para usarlos en la representación de la colección.

Enviar Mails con Java 1

Enviar Mails con Java

 

Algunas de las aplicaciones que realizamos como programadores tienen la necesidad de Enviar Correos Electronicos por muchas razones, aqui veremos como realizarlo con JavaMail. JavaMail es una expansion de Java (no viene incluida, es un paquete externo) que facilita la Gestion de Correos Electronicos desde Java, se encarga de las tareas de conexion, autentificacion, seguridad y encriptacion para facilitar la tarea de los programadores. En este Ejemplo veremos como enviar mails con java utilizando una cuenta de Gmail a la que JavaMail se conectara, veamos como hacerlo...

REQUERIMIENTOS

 

DESARROLLO
Este Ejemplo fue realizado en 2 clases, la clase Proceso que realiza la sesion con Gmail y otra llamada Ventana que se encarga de crear la interfaz Grafica, armar el mensaje y enviarlo. Recuerda que debes importar la libreria de JavaMail.

Clase Principal

public class Proceso {
    static String username,contraseña;
    static Properties p;
    static Session sesion;

    public static void main(String args[]){
        try {
            setup();
            Ventana v = new Ventana(sesion);
        } catch (Exception ex) {
            Logger.getLogger(Proceso.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private static void setup() throws MessagingException {
        //datos de conexion
        username = "tuUsername@gmail.com";
        contraseña = "tuContraseña";
	//propiedades de la conexion
        p = new Properties();
        p.put("mail.smtp.auth", "true");
        p.put("mail.smtp.starttls.enable", "true");
        p.put("mail.smtp.host", "smtp.gmail.com");
        p.put("mail.smtp.port", "587");

        //creamos la sesion
        sesion = crearSesion();
    }

    private static Session crearSesion() {
        Session session = Session.getInstance(p,
          new javax.mail.Authenticator() {
            @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, contraseña);
                }
          });
        return session;
    }    
}

Clase Ventana
Para esta Clase unicamente cabe recalcar el codigo de el boton "Enviar" que obtiene la informacion de las 2 cajas de texto (Mail to:,Asunto) y del TextArea(Mensaje) y arma el mensaje para posteriormente enviarlo.

//obtenemos datos de mensaje
String para = jTextField1.getText();
String asunto = jTextField2.getText();
String texto = jTextArea1.getText();

//Construimos el Mensaje
Message mensaje = new MimeMessage(sesion);
try {
mensaje.setRecipient(Message.RecipientType.TO, new InternetAddress(para));
mensaje.setSubject(asunto);
mensaje.setText(texto);
//Enviamos el Mensaje
Transport.send(mensaje);
JOptionPane.showMessageDialog(null, "Mail Enviado Correctamente", "Enviado",JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
Logger.getLogger(Ventana.class.getName()).log(Level.SEVERE, null, ex);
}
//limpiamos cajas de texto y textarea
jTextField1.setText("");
jTextField2.setText("");
jTextArea1.setText("");

 

RESULTADO

Enviar Mails con Java 1

Enviar Mails con Java 2

 

Dudas o Comentarios?

Logo de Android

./adb: No existe el archivo o el directorio, problemas desarrollando con Android

Probablemente hayáis tenido problemas intentando desarrollar con Android cuando habéis intentado echar a andar el fichero adb para por ejemplo lanzar el emulador.

El problema es que al ejecutarlo dice algo así como: "./adb: No existe el archivo o el directorio" aunque estemos en el terminal y veamos con nuestros ojos que está el fichero, que tiene el bit de ejecución marcado y que todo es correcto.

Si te ocurre esto, lo más seguro es que estés usando una distribución de 64 bits y el IDE de Android necesita compatibilidad con 32 bits.

La solución es sencilla: instala el paquete ia32-libs, desde el Centro de Software de Ubuntu, desde Synaptic o incluso desde la terminal: sudo apt-get install ia32-libs.

Logo de Android


1 2 9 10