3 dic 2010

Un juego en Java

Para mi programa orientado a objetos "recicle" un programa que aun le faltan corregir errores de programación, que son notables cuando se juega y aveces los controles no responden a la orden.

El lenguaje de programación utilizado es Java, incluyo muchas librerías para que funcione bien, como las necesarias para crear ventanas, paneles, colocar archivos de imagen, para uso del teclado, uso de botones, y más.

Estaba pensado principalmente para que este programa se integrará a una aplicación cliente-servidor, pero me rendí hace tiempo porque me estresaba tanto que no hiciera lo que yo pensaba que haría, sin embargo, no lo dejaré así, espero y si hay tiempo suficiente para dedicarselo al programa, lo terminaría en estas vacaciones.

Es un juego de piedra, papel o tijera, pero ahora de forma gráfica.

Estas son capturas de la ventana creada para el juego.

Así se ve la ventana al inicio del juego.


Es posible seleccionar las opciones de piedra, papel o tijera, mediante los botones, o por el teclado con los números del 1 al 4, según se indica.


Como esta creado para que sea jugado por dos personas, es necesario ocultar la selección del primer jugador para que el segundo no haga trampa.


Cuando los dos jugadores están listos y ya seleccionaron su figura, el juego muestra quien es el ganador.


Esto es una captura del código en la parte de la clase principal, donde es creada la ventana.


No pego el código aquí porque es demasiado extenso y no será posible entenderlo así nada mas. Cuando lo tenga terminado si es posible les comparto el código para los interesados en crear algo parecido, aunque espero y no solo se lo vayan a copiar y cambiarle variables para entregarlo como suyo en trabajos posteriores.

Programación orientada a objetos

La programación orientada a objetos se hiso famoso a principios de los años 90s, es un paradigma de programación que utiliza objetos y sus interacciones para realizar aplicaciones, se basa en técnicas como herencia, abstracción, polimorfismo y encapsulamiento.

Origen

Los conceptos de programación orientada a objetos tienen sus orígenes en Simula 67 un lenguaje diseñado para hacer simulaciones, aunque más tarde estos conceptos fueron refinados en Smaltalk diseñado para ser un lenguaje dinámico en el cual los objetos se podían crear y modificar en tiempo de ejecución.

Fue a mediados de los años 80s cuando la programación orientada a objetos tomo una posición dominante en la programación, en gran parte gracias a C++, además por su característica de interfaces graficas de usuarios, en donde la programación orientada a objetos está muy bien adaptada.

¿Qué son los objetos?

Son entidades que se componen fundamentalmente de ESTADO(atributo), COMPORTAMIENTO(método) e IDENTIDAD.

Estado, el estado se compone de datos.

Comportamiento, se refiere principalmente a los métodos que tiene cada objeto, se puede decir que a las operaciones que se pueden hacer con él.

Identidad, se refiere a una propiedad del objeto que lo hace único, lo diferencia de los demás.

La comunicación entre los objetos se lleva a cabo mediante métodos, esta comunicación ayuda a cambiar el estado de los mismos objetos, esta característica es la que hace que los objetos sean indivisibles, es decir no se separa el estado y el comportamiento.

Los métodos y atributos están muy relacionados por la propiedad de conjunto, en esta propiedad se destaca que una clase necesita métodos para poder tratar los atributos que tiene.

Conceptos de POO

La programación orientada a objetos maneja conceptos muy diferentes a los demás lenguajes y es muy importante saber de que trata cada uno para entender la POO.

Clase: Es en donde se define las propiedades y comportamientos de los objetos.
Herencia: Por ejemplo se tiene una clase A y otra B en donde la clase A tiene definidos sus atributos y operaciones, la clase B puede utilizar estos mismos atributos y operaciones como si se hubieran declarado en ella, a esto es a lo que se le llama herencia.
Objeto: Es la entidad que se compone de atributos y comportamientos que reaccionan a eventos.
Método: Es lo que puede hacer un objeto, puede cambiar las propiedades del objeto o generar eventos.

Características de POO

Abstracción
Se refiere a las características y comportamientos de los objetos, por ejemplo al decir que tenemos una clase a la que llamamos perro, se pueden obtener características y comportamientos que podría tener cualquier perro por ejemplo patas, pelo, cola, y entre los comportamientos ladrar, morder, comer.

Encapsulamiento
Consiste en unir en la clase las variables y métodos, esto quiere decir tener todo en una sola entidad. La utilidad del encapsulamiento se debe a que facilita el uso de clases, es decir se puede utilizar alguna clase compleja, pero para usarla no necesitamos saber cómo es que lo hace sino más bien que lo haga, el encapsulamiento permite utilizar una clase sin saber cómo es que hace su función.

Ocultamiento
Ocultamiento es la capacidad de la clase para ocultar los detalles internos de la clase y mostrar solo los útiles para el sistema. Permite controlar y restringir el uso de la clase, controlar porque se pueden modificar los estados de la clase y restringir porque la clase tendrá cierto comportamiento al que otra clase no podrá entrar.

Polimorfismo
Esto quiere decir que se pueden tener diferentes objetos, con distintos comportamientos pero que comparten el mismo nombre.

Recolección de basura
Se refiere a que el programador no debe de preocuparse por asignar o liberar memoria ya que el entorno decidirá cuando se cree un objeto en asignar la memoria o cuando ya no se utiliza en liberarla.

Programa ejemplo en lenguaje JAVA, en el que se muestra la herencia:
public class Mamifero{
    private int patas;
    private String nombre;
    public void imprimirPatas(){
      JOptionPane.showMessageDialog(null," Tiene " + patas +
      "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE);
    }
    public Mamifero(String nombre, int patas){
      this.nombre = nombre;
      this.patas = patas;
    }
  }
 
  public class Perro extends Mamifero {
    public Perro(String nombre){
      super(nombre, 4);
    }
  }
 
  public class Gato extends Mamifero {
    public Gato(String nombre){
      super(nombre, 4);
    }
  }
 
  public class CrearPerro {
    public static void main(String [] args) {
      Perro perrito = new Perro("Canelita");
      perrito.imprimirPatas();
    }
  }

UML

El modelamiento visual es muy importante en el análisis Orientado a objetos. El Lenguaje de Modelamiento Unificado (UML), tiene como fin modelar cualquier tipo de sistema utilizando los conceptos de orientación a objetos, este lenguaje es entendible para máquinas y humanos.

El UML tiene elementos y diagramas que permiten modelar los sistemas orientados a objetos, este modelamiento es flexible al cambio y es posible crear componentes plenamente reutilizables.
Racional Rose es uno de los programas más conocidos para este fin, también existe otro llamado Poseidon que permite su uso libremente.

Lenguajes orientados a objetos:

Java
PHP5
C++
Ruby
Pascal
Delphi
Python

Referencias: Ejemplo de herencia | Java | Programación orientada a objetos

Problema lógico

El problema lógico que elegí no lo pude resolver mediante algún programa lógico, pero aquí trataré de dar una explicación de la solución.

Elevador

"Un hombre trabaja en el piso 10 y siempre toma el ascensor hasta el nivel del suelo al final del día. Sin embargo, cada mañana, sólo toma el ascensor hasta el 7º piso y sube las escaleras hasta el piso 10, incluso cuando se tiene prisa."


Bueno, para empezar analicemos lo que nos dice la redacción.

Si el hombre trabaja en el piso 10, y cuando termina de trabajar baja por el elevador desde ese mismo piso 10 hasta la planta baja. Con esto sabemos que si existe elevador que llegue hasta el piso 10.

Lo extraño es que cuando él sube, solo llega hasta el piso 7, y de ahí sube por las escaleras.

Propondré razones por las que probablemente no pueda subir por el elevador a partir del piso 7.

1) Podría ser que los botones para los pisos 8, 9 y 10 no funcionen correctamente.

2) Tal vez el hombre tenga un problema psicológico y le tenga temor a presionar los botones del piso 8 en adelante. La verdad no creo.

3) El número 7 es el de la suerte y pese a lo que pese se baja en ese piso para tener suerte todo el día. Yo ni por tanta creencia haría eso.

4) Los botones de los pisos 8, 9 y 10, los pusieron tan arriba que nadie los alcanza.

5) Y junto con el anterior deducimos también que el problema podría estar en la estatura del hombre.

Como no había forma de saber la razón real por la que el hombre hace eso todos los días, no me quedó otra más que ver la respuesta del problema, la cual fue:

El hombre es de muy baja estatura, y solo alcanza hasta el piso 7.

Así de simple fue la respuesta.

Pero y si lo hubiera intentado crear en algún lenguaje lógico como prolog, tendría que haber incluido muchas expresiones de las cosas posibles y no posibles.

El hombre tendría que subir todos los días solo en el elevador, ya que si subiera con otra persona, podría pedir que presionen por el el botón del piso 10.
Contemplar que una persona bajita no alcanzará todos los botones, y una persona alta sí.

Y me puse a pensar en que hombre podrá ser tan pequeño que ni saltando alcance el piso 10, y encontré el probable hombre trabajador del piso 10.


Estoy casi seguro que es Mini-Me.

Enlace: Elevator

Basic

Basic es un lenguaje de programación creado para personas que apenas comienzan en el ambiente de la programación, no es del todo complicado, por lo tanto es muy sencillo realizar programas con una interfaz gráfica.

Para un programador esto no es correcto, pero como vamos empezando, usar de vez en cuando alguna plataforma para crear programas no esta tan mal, siempre y cuando no abusemos del uso de ellas.

En este caso podemos ver un convertidor de moneda en donde ingresamos la cantidad de pesos que se desean cambiar y al oprimir el botón de la moneda, al final tenemos el resultado de la conversión y un botón para borrar los campos anteriores.

La interfaz la realice en Gambas IDE, tan sencillo como lo es arrastrar botones y cajas de texto.

El código:

# Gambas Form File 2.0

{ Form Form
  MoveScaled(0,0,75,68)
  Background = &HBFFFFF&
  Text = ("")
  { Button2 Button
    MoveScaled(32,33,9,8)
    Background = &HFFAF5F&
    Text = ("Euros")
  }
  { Button3 Button
    MoveScaled(48,33,9,8)
    Background = &HFFAF5F&
    Text = ("Libras")
  }
  { Button5 Button
    MoveScaled(15,33,9,8)
    Background = &HFFAF5F&
    Text = ("Dolares")
  }
  { TextBox1 TextBox
    MoveScaled(17,12,36,7)
    Font = Font["+6"]
    Text = ("")
  }
  { Label1 Label
    MoveScaled(5,1,62,4)
    Font = Font["Bold,+6"]
    Text = ("Sistema para cambio de monedas")
  }
  { Label2 Label
    MoveScaled(11,7,49,5)
    Text = ("1) Introduce los pesos mexicanos que deseas cambiar ")
  }
  { Label3 Label
    MoveScaled(14,27,51,4)
    Text = ("2) Ahora selecciona el boton de preferencia")
  }
  { TextBox2 TextBox
    MoveScaled(15,50,43,8)
    Font = Font["+6"]
    Text = ("")
  }
  { Label4 Label
    MoveScaled(12,45,48,4)
    Text = ("3) Su cambio a la moneda seleccionada")
  }
  { Button1 Button
    MoveScaled(52,62,15,3)
    Text = ("Borrar")
  }
}


Y las imágenes que no pueden faltar. Son de la interfaz que nos permite crear estas aplicaciones, así como la aplicación en sí.





Enlace: Gambas

Programa Fortran

En fortran dado a que se usa principalmente para cálculos matemáticos y científicos, hice un programa que nos dice las raíces ya sean reales o imaginarias, de una ecuación de segundo grado, y que se escribe de la siguiente forma:


Y se puede resolver con la fórmula general para obtener las raíces, la cual esta también incluida en la imagen anterior.

El código.

PROGRAM raiz
      REAL disc, xa, xb, xi, xr, a, b, c
      PRINT*, 'Solucion ecuacion de segundo grado'
      PRINT*, 'Escribe el valor de a'
      READ(*,*) a
      PRINT*, 'Escribe el valor de b'
      READ(*,*) b
      PRINT*, 'Escribe el valor de c'
      READ(*,*) c
      disc = (b*b)-(4*a*c)
      IF (disc .GT. 0.0) THEN
         xa = (-b + (sqrt(disc)))/(2*a)
         xb = (-b - (sqrt(disc)))/(2*a)
         PRINT*, 'Raiz = ',xa
         PRINT*, 'Raiz = ',xb
      ELSEIF (disc .EQ. 0) THEN
         x1 = (-b) / (2.0 * a);
         PRINT*, 'La ecuacion solo tiene una raiz = ',x1
      ELSE
         xr = (-b/(2.0*a));
         xi = (sqrt(-disc)/(2.0*a));
         PRINT*, 'Raiz real',xr
         PRINT*, 'Raiz imaginaria',xi
      ENDIF       
      STOP
      END

A grandes rasgos, lo que puedo decir del programa, es que después de recibir las constantes que son los valores de a, b y c de la ecuación, trabajamos con ellas para hacer los cálculos como la formula general lo indica y tomando en cuenta las diferentes salidas que podemos tener, ya sean dos raíces, una sola raíz, o raíces imaginarias, y que esto lo determina el valor del discriminante.


Que lo identificamos mejor como lo que se encuentra dentro de la raíz cuadrada de la fórmula general.

Con el valor del discriminante podemos saber como serán nuestras raíces. Si es mayor a cero tendremos dos raíces, si es igual a cero solo tendremos una, y si es menor a cero tendremos raíces imaginarias.

Para compilarlo haremos lo siguiente:


Es muy parecido a como lo hacemos en C. El -o se lo agrego para ponerle un nombre al archivo que sera el ejecutable.

Veamos algunas ejecuciones del programa, con diferentes valores de a, b y c, para mostrar los tres casos diferentes.

Una sola raíz:


Dos raíces reales:


Raíces imaginarias:


Esto es todo para esta entrada.

Programación Fortran

Encontré un PDF en internet alojado en Google Docs, es un pequeño manual para Fortran. Guarde una copia en el Google Docs personal y les comparto el archivo para que lo chequen y busquen ahí cosas básicas para programas en este lenguaje.





Descargar: Introducción a la programación Fortran

Un JavaScript para tu blog

Hace tiempo al ver algunos Blogs me topaba con una imagen en algún costado de la pantalla, que era para seguir al dueño del blog en Twitter.


Me preguntaba como hacían para que pareciera que queda estático en la pantalla en una misma posición, y como daban al usuario las opciones de poner su cuenta y lugar de posición sin tener que hacer un cambio al código en sí, para cada diferente usuario de esta opción de "Follow Me".

Entrando al código fuente de uno de los Blogs que tenia esto, me di a la tarea de encontrar el archivo que hacía esto, y lo encontré. Fue un JavaScript, lo descargue y comenze a experimentar con el código, intentando entender que hacía todo ese embrollo.

Cuando entendía que hacía ciertas partes del código, me di a la tarea de editarlo, y crear el mio propio.

La siguiente imagen muestra parte del código después de modificarlo, no esta completo porque no alcanzo toda la pantalla.


Después lo agregue a mi blog de Programación Web, también en un costado de la página, y para que cuando pasaran el indicador del ratón se despliegue una etiqueta que dice Lenguajes, precisamente por que al dar clic te envía a este blog, que es para la materia de Lenguajes de Programación.



La forma en que lo agregue al blog fue un tanto simple.

Subí mi archivo a un servidor web donde puedo acceder siempre al archivo.

Agregue un gadget a la columna derecha de mi blog de los de tipo HTML/JavaScript, para poder colocar el siguiente código, que es el que accede a el archivo del servidor y además nos da las opciones a configurar.

<script src='http://usuarios.multimania.es/ramon/blogs.js' type='text/javascript'></script>
<script type='text/javascript' charset='utf-8'>
<!--tfb.account = 'http://ramonesteban.blogspot.com/';
tfb.top = 140;
tfb.showbadge();
-->
</script>

Inclusive si les interesa, podrían agregar también esta etiqueta para su blog si así lo desean, colocando el código anterior como un gadget tal y como lo hice yo. Solo sería cuestión de cambiar la dirección de su blog, y si desean cambiar a que altura lo desean.

Número aleatorio en Python

Este programa que hice fue a partir de un juego un poco más complejo, que te hace elegir un número entero, el que tu quieras, y la computadora elige otro aleatoriamente.

Estos dos números se suman, y si el número sumado es par, el usuario será el ganador, en caso contrario será la computadora quien habrá ganado.

El código.

#!/usr/bin/python

import random

numero = input("Escribe tu numero >> ")
cpu = random.choice(range(10))

valor = cpu + numero

print "\nEl numero elegido por la computaora es", cpu
print "La suma de los numeros es", valor

if (valor % 2 == 0):
    print "\nEs par - Has ganado"
else:
    print "\nEs impar - Perdiste, gana la computadora"

Explicación.

#!/usr/bin/python
La ruta donde se encuentra nuestro intérprete, la podemos buscar con which python.

import random
Agregamos la Liberia random que nos permitirá obtener números aleatorios.

numero = input("Escribe tu numero >> ")
Recibimos el número elegido por el usuario, almacenado en la variable número.

cpu = random.choice(range(10))
Obtenemos un número aleatorio que sea menor a 10, y lo almacenamos en la variable cpu.

valor = cpu + numero
Sumamos estos dos números para obtener el valor que veremos si es par o no.

print "\nEl numero elegido por la computaora es", cpu
print "La suma de los numeros es", valor

Mostramos el número aleatorio elegido por la computadora y la suma de los dos números.

if (valor % 2 == 0):
print "\nEs par - Has ganado"

Para saber si es par o no, obtenemos el módulo de dos, si el resultado de esto es cero, significa que si es par, y mostramos que ganó.

else:
print "\nEs impar - Perdiste, gana la computadora"

En caso contrario de que no se cumpla la condición anterior, es decir, que no fue par, mostramos que perdio.

Veamos una imagen de su ejecución.


Enlace: Obtener números pseudo aleatorios en Python

Otro AWK

Dado que AWK nos permite manejar archivos y procesar datos escritos en ellos de una forma sencilla, ahora un programa para calcular el promedio de un grupo de alumnos.

Primero tenemos el archivo donde se encuentra nuestra lista de nombres y la calificación de cada uno de los alumnos.

Archivo lista.txt


Ahora el código del programa.

Archivo promedio.awk
#!/usr/bin/awk -f 

# Ejecutar como:
# awk -f ./promedio.awk lista.txt"

BEGIN {
  suma = 0;
  contador = 0;
  print "Resultados obtenidos:";
}
{
  suma = suma + $2
  contador = contador + 1
}
END {
  prom = suma / contador;
  print "Los alumnos evaluados fueron " contador;
  print "El promedio del grupo es " prom;
}

La ejecución del programa y el resultado que nos arroja.


En el código al inicio igualamos a cero las variables que usaremos, que son suma y contador, suma para el total de calificaciones y contador para saber cuantos alumnos fueron calificados, y con estos dos datos obtener un promedio.

El archivo se lee linea por linea, y en la parte de "suma" esta sumando la calificación, que se encuentra en la segunda columna con la suma total en ese momento, e incrementamos el contador en uno por cada linea, que nos indicará la cantidad de alumnos.

Al final se imprimen los resultados del contador, es decir, cantidad de alumnos, y promedio del grupo.

2 dic 2010

Ahora tutoriales para Shell

Ahora les dejo unos buenos tutoriales donde pueden apoyarse para la creación de sus programas en Shell, están muy bien explicados, tienen las herramientas más comunes que solemos utilizar.

Por si fuera poco están en español, cosa que aveces es difícil encontrar buenas referencias que estén en español dado a que la mayoría de los manuales y tutoriales buenos los encontraremos en inglés.

Bueno ya sin tanto rollo les dejo los vínculos a estas dos páginas muy interesantes:

Tutorial de programación en shell

Taller de programación shell

Shell

Ahora les tengo mi código en Shell, este script es un menú que nos muestra varias opciones de cosas que podemos ejecutar desde el Terminal. Las opciones que nos muestra son para abrir el navegador Firefox, abrir Emacs, ya sea en una ventana independiente o en el mismo terminal, abrir gedit y también incluí el programa en AWK de una de las entradas anteriores, este que convierte HTML.

El código es el siguiente:
#!/bin/sh

echo "Escribe el número de tu selección:"
echo "1) Abrir Firefox"
echo "2) Abrir Emacs"
echo "3) Abrir Emacs en el Terminal"
echo "4) Abrir Gedit"
echo "5) De HTML a HTML"
read opc

case $opc in
1)
 firefox &;;
2)
 emacs &;;
3)
 emacs -nw;;
4)
 gedit &;;
5)
 echo "Archivo a convertir:"
 read arch1
 echo "Nombre del nuevo archivo:"
 read arch2
 awk -f ~/Documents/Programs/convierte.awk $arch1 > $arch2;;
*)
 echo "Opción no válida";;
esac
Lo que hace es que al ser ejecutado el script te muestra el menú con las opciones indicadas, y espera a que ingreses el número de tu selección. Después de dar enter se realiza la instrucción escrita según la opción seleccionada. El último asterisco se usa para una entrada no definida, y muestra un mensaje de error.

En la imagen les muestro como se ejecuta el script en el terminal y como se verá nuestro menú:


Ahora si elegimos la opción 1, que es abrir el navegador web Firefox, pasaría los siguiente en nuestro escritorio:


Cabe notar que nuestro terminal puede seguir usándose para otras cosas, aunque el proceso del navegador este activo, ya que agregué un amperson "&" al final de la instrucción.

Agregar nuestro menú como comando

Como el archivo lo tenemos solo en una carpeta, solo podrá ser ejecutado desde esa carpeta, o sino escribiendo toda la dirección del archivo. Es decir, que si yo me encuentro en una carpeta diferente como Pictures, tendría que indicar donde esta localizado el script para poder ejecutarlo. Esto no es lo mejor, y queremos tener este menú disponible en cualquier carpeta. También sería buena idea colocar un alias para ejecutar de una forma más simple este script.

Veamos como realizar esto...

1) Primero vamos a copiar el archivo menu.sh a la carpeta del usuario.

Nota: El nombre del archivo copiado le puse un punto (.) al inicio para que sea un archivo oculto y que no sea visible entre las carpetas del usuario y no vaya a ser borrado accidentalmente.

2) Regresaré a la carpeta principal del usuario.

Enseguida de eso muestro el listado de archivos, incluyendo los ocultos para que vean que el archivo ya fue copiado a esa carpeta.

También se muestra en color verde porque tiene permiso de ser ejecutado por todos los usuarios de esta computadora. Esto lo hice con chmod a+x .menu.sh

Hasta aquí ya tenemos el archivo para ser ejecutado desde la carpeta principal del usuario, que es la que abre el terminal de forma predeterminada.

3) Agregar un alias para usar esta instrucción en cualquier carpeta del terminal, como un comando más.
-Abrimos el archivo .bashrc (emacs -nw .bashrc).

-Agregaremos la siguiente linea:
alias menu='~/.menu.sh'
Lo que hace esta linea es que cuando escribamos "menu" en el terminal, ejecutaremos nuestro script. No olvides guardar el archivo.


Ahora en la próxima vez que abramos el terminal y escribamos "menu" se nos desplegará el menú de nuestro script en shell.


Y no importa en que directorio nos encontremos, podremos usar nuestro nuevo comando.


Estas opciones son solo unas comunes, pero podríamos completar un menú un tanto más complejo, dependiendo de las necesidades de cada usuario.

Soy nuevo en AWK

Las página donde estuve buscando información sobre el uso de AWK fue la siguiente:
The GNU Awk User's Guide

Es un manual muy extenso y completo de AWK. Tiene practicamente todo lo que se puede hacer con AWK, ya que al parecer es la página oficial.

La página esta en inglés, pero hasta yo lo pude entender.

Los temas incluidos en este manual son los siguientes:
General Introduction
1 Getting Started with awk
2 Regular Expressions
3 Reading Input Files
4 Printing Output
5 Expressions
6 Patterns, Actions, and Variables
7 Arrays in awk
8 Functions
9 Internationalization with gawk
10 Advanced Features of gawk
11 Running awk and gawk
12 A Library of awk Functions
13 Practical awk Programs

Vienen ejemplos, así que no estaría mal darles un vistazo.

AWK

AWK es un lenguaje de programación creado con la finalidad de procesar datos basados en texto.

"AWK es ejemplo de un lenguaje de programación que usa ampliamente el tipo de datos de listas asociativas, y expresiones regulares."

Cree un pequeño programa que es de gran ayuda para cuando queremos colocar código HTML en nuestro blog, mediante la edición HTML. Como les mencione en una de mis publicaciones, la posibilidad de colocar código en nuestro blog, y sin que pierda formato se puede colocar entre las etiquetas <:pre> ... <:/pre>, pero hay un problema con esto, ya que si copiamos y pegamos el código tal cual de nuestro archivo html que deseamos mostrar, el cuadro de edición de nuestro blog nos mostrará un mensaje de que no esta permitido el uso de ciertas etiquetas, por ejemplo la de html, head y body, son unas de las que no podemos colocar tal cual las tenemos en un archivo en HTML.

Por si no les ha pasado, les muestro con la siguiente imagen el problema.

Y ahora les muestro la forma de corregir esto, que es cambiando la apertura y cierre de etiqueta, cambiando por el código que representa ese carácter.

Pero cambiar uno por uno los signos "<" y ">" de nuestro código HTML, sería demasiado tardado para una página un tanto extensa.

Por eso cree este pequeño script en AWK que nos cambia estos dos caracteres por su correspondiente representación.

El código es el siguiente:
#!/usr/bin/awk -f
{
gsub("<","\\<");
gsub(">","\\>");
print $0
}
En pocas palabras lo que hace es de un archivo de entrada, en este caso un archivo html, cambia los signos por su correspondiente, y el html nuevo es guardado en un archivo diferente.

Veamos un ejemplo de ejecución:
Como vemos el archivo de entrada es el index.html, y como salida pido que se cree un archivo llamado nuevo.html que será el que ahora fue editado.

Este es el archivo index.html que necesito cambiar:

Este es el archivo nuevo.html creado:

Ahora a partir de este último archivo ya puedo copiar y pegar código para mis entradas en el blog, sin perder tanto tiempo.

Se que el código es muy simple, pero sirve.

Estadísticas de lenguajes script

Hace un par de días buscaba información acerca de que lenguajes script se utilizan más últimamente, sobre todo por aquellos trabajos que requieren conocimiento de alguno de estos lenguajes, y me encontré con la siguiente información.

Los datos son en base a las ofertas de trabajo que hay, y muestran que JavaScript es el lenguaje básico para muchos trabajos en México, junto con otros lenguajes como Ruby, Rails, PHP y Python, ya que son los que se podría decir que están de moda, sobre todo para los sitios web actuales.

El autor del blog RegularGeek ha estudiado la evolución de las ofertas de trabajo en servicios como Indeed.com y SimplyHired.com, que permiten conocer la presencia de ofertas de trabajo en el mercado de Estados Unidos en el ámbito de la programación.

Nos presenta unas gráficas que nos muestran el uso y popularidad de los lenguajes más usados y requeridos por empresas.

El estudio se ha centrado en los lenguajes de script, y ha incluido propuestas muy destacadas en la actualidad como Ruby, Rails, Python, PHP, JavaScript, Flex y Groovy.


Datos de Indeed indican que JavaScript sigue siendo el más popular de todos los lenguajes, mientras que PHP es otro de los que mejor están creciendo junto a Python, que también se está distanciando de sus competidores.


La gráfica anterior muestra la evolución de los dos últimos años, y allí se comprueba que JavaScript no destaca tanto como en el caso anterior, y que Flex es uno de los más utilizados, aunque parece perder algo de popularidad frente a PHP o Python.


Esta última gráfica muestra las tendencias relativas, y muestra una perspectiva de las tendencias de las ofertas de trabajo, comparando el crecimiento de los lenguajes frente al porcentaje de todas las ofertas. En estos datos queda claro que Groovy, aun siendo uno de los menos populares, está ganando muchísimo interés, algo que también se cumple para Ruby o Rails.

En las conclusiones el autor del artículo original indica que JavaScript es un lenguaje casi imprescindible en este campo, mientras que tanto Python como Groovy también se están convirtiendo en lenguajes de script obligatorios en el curricular de cualquier programador.

Esto nos podría dar una idea sobre que lenguajes deberíamos tomar en cuenta más en nuestro aprendizaje, ya que en un futuro nosotros seremos los próximos programadores. Tal vez en uno o dos años estas estadísticas cambien, y necesitamos estar preparados para esos cambios.

Enlace: Muy Linux

El archivo .bash_history

Mientras me encontraba haciendo la entrada anterior, recordé que en clase junto con otros compañeros nos preguntábamos algo acerca del Terminal de Ubuntu, ¿dónde se guardarán los comandos que escribimos en el terminal?, ¿se guardará el historial completo desde que empezamos a usar el terminal?

Ya que desde que empezamos a usar nuestra ventana del Terminal, notamos que las instrucciones que le dábamos a la computadora se quedaban guardados, y solo bastaba ir con la tecla de dirección arriba para poder ver las instrucciones usadas anteriormente.

Entonces, donde se quedan estas instrucciones...

Ahora ya lo sé. En la carpeta principal del usuario, como en la entrada anterior, cuando escribíamos ls -a, para que nos mostrará los archivos ocultos, me percate del archivo .bash_history el cual me llamo la atención, por lo que decidí abrirlo en Emacs, y cual fue mi sorpresa al ver un listado con todas esas instrucciones que he usado desde el Terminal.


Y no solo fueron las más recientes, sino que se encuentra la primer instrucción escrita en el Terminal, en mi caso fue con la que abrí el archivo sources.list con el editor gedit.

Así que con esto, las dos preguntas formuladas quedaron resueltas:
El historial de instrucciones se guardan en el archivo .bash_history y si se guarda el historial completo desde que usamos por primera vez el Terminal.

El archivo .bashrc

El archivo .bashrc se encuentra dentro de la carpeta principal del usuario, que por lo general se encuentra en la ruta /home/usuario/.bashrc.

Este archivo tiene la configuración de nuestra consola, terminal, bash o como lo llamemos personalmente, que es donde podemos interactuar por medio de texto con nuestra computadora, en una interfaz no gráfica.

Este archivo es ejecutado cuando abrimos un Terminal en nuestra computadora, con un sistema Unix en mi caso Ubuntu 10.04, el cual podemos editar para hacer un sin fin de cosas, desde mostrar un simple texto, hasta funciones que nos simplifiquen el uso mediante este Terminal.

Yo he hecho cambios muy simples en mi archivo .bashrc, pero si podemos hacer grandes cosas, inclusive para trabajar con ciertos programas es necesario editar este archivo para agregar una funciones nuevas.

Para ver nuestro archivo .bashrc de nuestra computadora se hace lo siguiente:

1) Abrimos un Terminal en nuestro escritorio.


2) Escribimos cd para cerciorarnos de que nos encontramos en la carpeta del usuario.


3) Escribimos ls -a para observar todos los archivos que se encuentran dentro de la carpeta principal del usuario.


4) Una vez desplegados los archivos podremos notar que tenemos ahí el archivo .bashrc que es el que editaremos.


5) Abriremos este archivo en nuestro editor preferido, en mi caso usare Emacs para trabajar desde el mismo terminal, la instrucción se escribe como se ve en la imagen.


6) Y después de esto tendremos en el Terminal el archivo abierto.


Bueno por ahora ya tenemos el archivo en el Terminal y ya podemos trabajar en él.

Vamos a poner un pequeño texto que haremos que se muestre siempre al inicio al abrir el Terminal.

Nos dirigimos al inicio del archivo, después de las lineas comentarizadas, y escribimos algún texto, aquí esta lo que escribí yo: echo "Propiedad de Esteban".

Guardamos con Ctrl-X Ctrl-S, y cerramos con Ctrl-X Ctrl-C.

Ahora cuando abramos nuestro terminal nos aparecerá así:


Ahora cambiare lo que en el Terminal aparece como ubuntu@ubuntu.

Cambie la linea donde tenemos el PS1, deje como comentario la linea tal y como estaba originalmente por si después deseo regresar al estado anterior. Noten los cambios que hice. Cambie el nombre del usuario y el equipo, coloque una diagonal invertida, así como el signo de dolar por un mayor que.

Así se veía antes.

Así se ve ahora.


Otras cosas que he añadido, y que a mi me han sido de gran utilidad, es agregar "alias", que nos permiten simplificar algún comando largo que utilicemos frecuentemente. En mi caso cuando deseo acceder a algún servidor donde tengo hosting, es un una cadena larga y la simplifique a una sola palabra.


El alias lo agregue para entrar a mi hosting en Joyent, por supuesto donde dice miusuario lo cambie por el real, la imagen aparece así solo para ejemplificar.

Y ahora cuando deseo ingresar rápidamente al servidor, escribo acceder, doy enter, y en automático me pide el password para ingresar.


Esto y muchas cosas más son posibles de configurar del archivo .bashrc, una de las cosas más comunes que cambian los usuarios es el formato y colores. Otros más experimentados colocan funciones que ejecuten alguna acción.

Enlace: Para cambiar los colores del Terminal