Aprende a generar dinero desde casa

Caja Pop-Up "Me gusta" de Facebook en Blogger

Si poseemos gran tráfico por parte de Google y queremos hacer que esos visitantes sean también fans en nuestra página de Facebook, con este Pop-up será facilísimo.

Sin vueltas, vamos a explicar cómo agregar una caja Pop-Up "Me gusta" de Facebook en Blogger:

Nos dirigimos a nuestro blog, vamos al apartado de Diseño y agregamos un gadget HTML/Javascript. Una vez creado, agregaremos el siguiente código al gadget:








Buscamos donde dice "http://www.facebook.com/DirecciónDeTuFanpage" y lo editamos por la URL de nuestra fanpage. Dicho esto, guardamos y podemos visualizar el cartel emergente en nuestro sitio web.

Escribir en un archivo con Java

¿Cómo escribir archivos en Java? Anteriormente publicamos una muy útil y sencilla guía que explica el proceso de creación de archivos. La guía la puedes encontrar aquí.

Una vez que creamos un archivo, desearemos muchas veces escribir información en él. Por ejemplo, si creamos un archivo para almacenar un log de información podemos escribir todos los cambios que vayan sucediendo en la aplicación. O si desarrollamos una aplicación de chat tal vez desearíamos guardar un historial de las conversaciones. Todo esto se hace posible mediante la escritura de archivos.

Java ofrece una librería exclusiva para este propósito, la librería FileWriter, la cual tiene muchas opciones para el desarrollo de esta clase de códigos. En acompañamiento a ella, para este fin usaremos de igual forma la librería BufferedWriter, esa librería nos ayuda a escribir los archivos mediante la implementación de un Buffer de caracteres, es decir, un lugar en donde se almacenan varios caracteres para facilitar su escritura sin causar conflictos o problemas.

En fin, necesitamos importar ambas librerías, para ello utilizaremos el siguiente código:

import java.io.BufferedWriter;
import java.io.FileWriter;

Una vez importadas las librerías nos enfocaremos en desarrollar una función o método que reciba como parámetros a la línea que deseamos escribir en el archivo, y el archivo al que deseamos escribir dicha línea. Al haber completado este paso será muy fácil llamarlo desde cualquier parte del programa mediante una única línea.

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
 public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
    }
}

Ese método será llenado con lo que iremos armando poco a poco. Por fines de eficiencia es una función booleana, es decir que retornará true o false dependiendo de lo que codifiquemos, con ello podemos sacar provecho y mostrar un mensaje de error en caso de que sea false o hacer lo que debamos hacer en caso de ser true.

Las clases que importamos ofrecen utilidades excelentes para nuestro propósito, usando la clase FileWriter declararemos un objeto homónimo direccionando a nuestro archivo, y un escritor de Buffer: BufferedWriter, direccionando a nuestro FileWriter anterior, con lo que el código quedaría de la siguiente forma:

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
 public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);
        BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
    }
}

Recuerda: el archivo estará en una dirección absoluta o relativa de acuerdo a como lo configures.

Ahora que tenemos listos esos datos nos olvidaremos del FileWriter escribir_archivo, y daremos uso únicamente al BufferedWriter, el cual se encargará de escribir los datos.

En el siguiente código vamos a utilizar el método write() de esa clase para escribir en el fichero, el cual recibe como parámetro la línea a escribir, la cual a su vez fue enviada al método con el nombre: linea_a_guardar . Posteriormente usaremos el método newLine() para agregar un salto, lo que permitirá que el siguiente texto que escribamos no se pegue al anterior, esta línea es opcional. Muchas veces también se quiere escribir un texto continuo sin saltos.

Al terminar de guardar una línea debemos cerrar la conexión entre el archivo y java, pero para ello debemos primeramente “drenar” el Buffer para que se escriban todos los datos. Posteriormente cerramos el proceso.

Utilizamos un bloque try-catch para capturar excepciones, en caso de encontrar un problema se emitirá un error que significa que el archivo no se escribió, por lo que devolverá el método el valor false, y en caso de que sí se haya escrito todo el método devolverá true. Podemos ver la importancia de la captura y manejo de excepciones en este ejemplo. Una vez que se haya devuelto un valor el programa sabrá que hacer de acuerdo a lo que se le haya indicado.

/*Clase que escribe nueva información en los archivos
*Por: Daniel Ortiz Costa
*/

import java.io.BufferedWriter;
import java.io.FileWriter;

public class Archivos{
    public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) {
        BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);

        try {
            escribir_buffer.write(linea_a_guardar);
            escribir_buffer.newLine();
            escribir_buffer.flush();
            escribir_buffer.close();
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
        return true;
    }
}

El código que está arriba es el completo. Recuerda colocarlo en su propia clase o en la que sea más apropiado según el código de tu programa. A continuación mostraremos un ejemplo de como utilizar este código. Para ello lo instanciaremos desde otra clase:

public class Test{
 public static void main (String [] args){
  Archivos archivos = new Archivos();
  archivos.escribirEnArchivo ("Juanito es un hombre", "Frases.txt");
  archivos.escribirEnArchivo ("Me llamo David", "Frases.txt");
  archivos.escribirEnArchivo ("Mi casa es fea", "Datos.txt");
 }
}

Al final tendremos un archivo Frases.txt con los datos escritos y un Datos.txt con nueva información. Recuerda que este código NO crea un archivo, para saber como realizar ese proceso puedes revisar la anterior guía publicada.

Si tu código no está diseñado con clases o métodos es fácil solo tomar lo básico. Ejemplo del código que no utiliza clases, objetos o funciones:

public class Test{
 public static void main (String [] args){
  BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo);
        FileWriter escribir_archivo = new FileWriter(nombre_archivo);

        String linea_a_guardar = "Lo que deseas guardar";

        try {
            escribir_buffer.write(linea_a_guardar);
            escribir_buffer.newLine();
            escribir_buffer.flush();
            escribir_buffer.close();
        } catch (Exception e) {
            System.out.println(e);
        }
 }
}

¿Cómo crear archivos en Java?

Java proporciona una excelente forma de controlar los archivos, crearlos y leerlos mediante la librería File y algunas otras herramientas muy interesantes que nos permiten su creación.

Primeramente, para crear un archivo con Java debemos hacer uso de la clase de archivos. Viendo este tutorial podemos entender como verificar también si un archivo existe y si no crearlo; sin embargo nos centraremos específicamente en como crear un archivo de la nada, para ello debemos hacer uso de la librería File. Debemos traerla a la aplicación y lo hacemos importándola de la siguiente manera:

import java.io.File;

Una vez que la tengamos importada, escogemos el método o función en el que querramos crear el archivo. Eso depende de cada uno, en la guía haremos el proceso dentro del Main. Para ello debemos continuar armando nuestro código, ahora necesitamos establecer el nombre del archivo, es recomendable que uses una String, aunque puedes hacerlo directamente:

import java.io.File;

public class Archivos{
 public static void main (String [] args){
  String nombredelarchivo = "TuArchivo.txt";
 }
}

A continuación referenciaremos el nombre del archivo para poder crearlo, finalmente aplicaremos la función createNewFile() que pertenece a la importada clase File:

import java.io.File;

public class Archivos{
 public static void main (String [] args){
  String nombredelarchivo = "TuArchivo.txt";
  File archivo = new File (nombredelarchivo);
  try {                
            archivo.createNewFile();
        } catch (Exception e) {
            System.out.println("No se ha podido crear el archivo");
        }
 }
}

Pueden notar que utilizamos un control de excepciones con el bloque Try-Catch para emitir un error personalizado en caso de cualquier problema con la creación del archivo (lo cual usualmente no debería pasar).

Ese código es la estructura básica que te permite crear un archivo para cualquier utilidad que quieras darle. ¿Escribir en un fichero?, ¿Leer datos?, bueno eso lo veremos en otros tutoriales que puedes buscar en el sitio. Por el momento esperamos que este concepto te sirva.

Comprobar que un archivo exista, caso contrario crearlo en Java

¿Cómo comprobamos que un archivo exista en Java?, ¿Cómo lo creamos en caso de no existir? Generalmente cuando desarrollamos aplicaciones que utilizan determinadas clases de archivos en su ejecución no queremos que se presenten problemas en caso de que un fichero importante falte, tampoco queremos que el usuario tenga que encargarse de crear un archivo con un determinado formato porque perdería interactividad nuestro programa.

Una vez que hayamos finalizado con el diseño de un programa es bueno utilizar esta clase para evitar toda esta clase de situaciones. Es de hecho muy beneficioso llamar a esta clase al arrancar la aplicación para que el proceso comprobatorio se ejecute al inicio y evitemos problemas posteriores.

Recuerda crear una clase para almacenar todo este código:

package proyectorestaurante;

/*
*Clase que comprueba que existan los archivos
*Por: Daniel Ortiz Costa
*/

import java.io.File;

public class Comprobaciones {    

    //Comprueba que exista un archivo en un directorio
    public void comprobarArchivo(String nombre_archivo, String nombre_carpeta) {

        File directorio = new File(nombre_carpeta);

        File archivo = new File(directorio, nombre_archivo);

        //Comprueba si el directorio no existe
        if (!directorio.exists()) {

            //En caso de no hacerlo, lo crea
            directorio.mkdir();
        }

        //Comprueba si el archivo existe
        if (!archivo.exists()) {
            try {
                //En caso de no hacerlo 
                archivo.createNewFile();
            } catch (Exception e) {
                System.out.println("No se ha podido crear el archivo");
            }
        }
    }
}

El código requiere como parámetros el nombre del archivo y el nombre del directorio absoluto o relativo que se encuentre instalado.

¿Cómo ejecutarlo? Simplemente debes instanciar la clase con un objeto y llamar al método principal. Así:

Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombredearchivo', 'Carpeta');

Un ejemplo de como comprobar la existencia:

//Comprobación relativa
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'Datos');

//Comprobación de subdirectorio relativo a un subdirectorio
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'Datos/Nombres');

//Comprobación de directorio absoluto
Comprobaciones comprobaciones = new Comprobaciones();
comprobaciones.comprobarArchivo('nombres.txt', 'C:/Datos');

Esperamos que encuentres útil este código, recuerda que el mismo solo recreará el archivo, es cuestión tuya de manejar el llenado de los datos si es que tu inicial no debe estar vacío. Posteriormente colocaremos un artículo relacionado al manejo de datos con archivos en detalle.

Comparación Java vs Python: ¿Cuál es más rápido?

Hablemos de estos dos populares lenguajes de programación. Tanto Java como Python son lenguajes interpretados (a pesar de que solo una parte de Java lo es), pero ¿Cuál resulta más rápido al momento de ejecutar pedazos de código, o inclusive programas complejos?

Enfoquémonos en el concepto principal: Ninguno de los dos como tal es más rápido que el otro puesto que los lenguajes de programación no tienen velocidad. Lo que sí podemos comparar es la velocidad de las implementaciones de cada uno de ellos.


Veremos un poco en detalle cómo las funcionalidades de cada uno resultan ventajosas en ciertos casos. A fin de este artículo se necesita utilizar benchmarking. Benchmarking no es nada más que el uso de distintos programas, códigos o lo que sea necesario para comparar el rendimiento de varias situaciones.

Usando códigos de diferentes fuentes que cumplen la misma funcionalidad podemos notar que:

  • Tabla de datos hash: El procesamiento y formación de una tabla hash resulta casi 5 veces más rápido en Python.
  • Entrada y salida de datos: De igual forma Python lleva una ventaja al momento de procesar datos y valores de entrada y salida.
  • Listas y arreglos: El equivalente de un arreglo en Python: Una lista, resulta ser más lento en procesamiento y formación que en Java.
  • Ejecución de métodos nativos: Los métodos nativos se ejecutan de forma más rápida usando la Máquina Virtual de Java.
  • Inicialización del intérprete: Tanto Java como Python son interpretados, es decir tienen módulos que traducen lo codificado en otro lenguaje que posteriormente será traducido. El intérprete de Python se carga cuatro veces más rápido que el de Java, lo que es notable al momento de correr aplicaciones por primera vez codificadas en cualquiera de los lenguajes.
  • Colocación de objetos: Java resulta tener una aplastante victoria en el momento de colocar objetos en memoria, tomándole aproximadamente 8 veces menos tiempo. Python aún no tiene el nivel del lenguaje de la tacita en este punto.
  • La velocidad del intérprete: Quizás el punto más interesante. Java por el momento también tiene una ventaja al momento de convertir el código de fuente en Bytecode. Python resulta un poco más lento en rendimiento general al momento de correr aplicaciones grandes, como juegos por ejemplo.
Java es un lenguaje de 3 tiempos a diferencia de Python que es de 2.

En Java se siguen los siguientes pasos resumidos:

  • Se interpreta el código de fuente en Bytecode
  • El Bytecode es ejecutado en la máquina virtual
  • La máquina virtual trabaja posteriormente con la máquina física

En Python:

  • Se interpreta el código de fuente
  • Se trabaja directamente con la máquina física
Este paso adicional hace que el rendimiento de Java resulte un poco más “pesado” en el sentido estricto.

Vamos a ver una comparación un poco más detallada:

Java es ciertamente un buen lenguaje, pero hay lenguajes para cada cosa. Si hablamos de un lenguaje basado en flujos de datos quizás querramos pensar 2 veces cuál utilizar. El enfoque en flujos (digamos por ejemplo un bucle for que imprima un millón de datos) resulta bastante mejor en Python al momento de presentar datos en una consola. Lo que nos hace notar que Java pudo haber sido pensado en un propósito más de “usuario final” que  ”usuario experimental”.

Considerando que el intérprete de Java resulta vastamente más rápido que el de Python, el hecho de que la entrada y salida de datos sea más veloz en Python resulta destacable. Al momento de enforcarnos en listas de datos, los vectores de Java funcionan a una velocidad mayor que la de los operadores list[] del intérprete reptiliano.

Hablando desde el punto de vista del programador la velocidad de creación de aplicaciones en Python es probablemente la más rápida. Con Java se requiere el excesivo uso de encabezados, definiciones, llaves y métodos. Un ejemplo sencillo:

Si deseamos una aplicación vacía que no haga absolutamente nada, ¿Qué debemos hacer?
  • En Python: NADA, literalmente un archivo vacío resulta en una aplicación que no haga ningún cálculo o proceso.
  • En Java: Debemos definir una clase de prueba, un método de inicialización vacío y correrlo.
En cuentas resumidas:

El intérprete de Java resulta extensamente superior al de Python. Quizás resultado de más años y dinero invertidos en su desarrollo. Sin embargo, no todo es color de rosa. Técnicamente podemos hablar de la ventaja de ese componente en programas que dependen de la velocidad. En ellos va a ser claro que Java tiene un desempeño mejor, pero en referencia a la gran cantidad de código base que Python posee en C, este principio se puede contradecir. Si por ejemplo nuestra aplicación consiste en escribir archivos de historiales originados por un chat proveniente de la conexión de red, la velocidad de escritura no va a importar tanto al ser prioridad la velocidad con la que llegan los datos de la red, lo cual entra en el concepto de “Entrada y salida”, algo en lo que Python tiene su ventaja.

Obviamente Python resulta bastante más fácil para programar que Java: Un código muchísimo más limpio y que evita decenas de posibles confusiones. Resulta ventajoso también el hecho de que a pesar de que la documentación de la API de Java es mucho más extensa y organizada, en Python todo es más fácil de recordar al ser mucho menos.

Java resulta más conveniente para programación basada en sistemas, sin embargo un programador de Python puede ser más productivo. Todo gracias a que menos tiempo empleado en desarrollar una aplicación = más tiempo libre para otras aplicaciones.

Ambos son lenguajes de tipado fuerte, lo que los diferencia es que uno usa tipado estático y el otro dinámico. Siendo una de las ventajas de Python el uso de tipos a objetos dinámicos, lo que genera eficiencia en el desarrollo. Resumiendo todo lo de arriba, Java es menos consiso que Python.

Ningún lenguaje de programación es mejor que otro. Pero siempre un lenguaje de programación es mejor que otro PARA CIERTAS COSAS. El asunto está en saber qué necesito para mi aplicación.

Un problema grave es cuando un programador se enfoca en uno de ellos, porque se cierra a muchas posibilidades.