sábado, 23 de febrero de 2013

Un vistazo a Perl


Resulta que tuve la necesidad de escribir unos scripts para procesar archivos y estuve probando este lenguaje y me pareció muy útil.

En sistemas Windows existen dos alternativas http://strawberryperl.com/  y http://www.activestate.com/activeperl .

En Linux y Mac viene por dafault instalado. La sintaxis del lenguaje es parecida a C.


En Windows recomiendan usar Strawberry Perl.

#!/usr/bin/perl
#en Linux
print "Hola bienvenido a mi blog";


Ejecutar desde terminal:

perl programa.pl

Hola bienvenidos a mi blog

Lo que me parece muy útil es que puedes ejecutar procesos/comandos desde un programa:


#!/usr/bin/perl

#en Linux


$ver="ls -a";

print "Tratando de ejecutar el comando [ $ver ]  desde Perl:\n";

system($ver);


Espero hacer más ejemplos.


Links:

http://perl-tutorial.org/
http://www.perltutorial.org/
http://perlenespanol.com/tutoriales/
http://perldoc.perl.org/index-tutorials.html




sábado, 16 de febrero de 2013

Ceylon: comparativa con otros lenguajes


Como ya se ha escrito aqui en este sitio, Ceylon es un lenguaje de programación en desarrollo que pretende tomar lo bueno de Java y olvidarse de lo malo.

¿Cómo compilo/ejecuto un programa en Ceylon?

Antes de comenzar comenzar debes decargar la versión actual 0.4 (Analytical Engine). Compilar: ceylon compile source\programa.ceylon Ejecutar: ceylon run default

El clásico programa Hola mundo

En Ceylon. holamundo.ceylon
doc "Esto se usa para documentar el programa" 
by "el autor" 
void run(){ print("Hola mundo"); } 

Si todo sale bien debe imprimir:
"Hola mundo"

En Groovy. holamundo.groovy
println "Hola mundo" 

En Python. holamundo.py
print "Hola mundo" 

En Scala.
Holamundo.scala
object Holamundo{ def main(args: Array[String]){ println("Hola mundo"); } } 

En Java. Holamundo.java
public class Holamundo{ public static void main(String[] args){ System.out.println("Hola mundo"); } } 

En Clojure. holamundo.cjl
(printl "Hola mundo") 
En C. holamundo.c
#include "stdio.h" void main(){ printf("Hola mundo"); }

¿Cómo importar librerías/paquetes?

En Ceylon.
  import tuPaquete { Clase1, Clase2} import Clase {metodo1, metodo2} 

En Groovy. import tuPaquete import tuPaquete.Clase; 

En Python. from modulo import nombre from modulo import * 

En Scala. import tuPaquete._; import tuPaquete.Clase; 

En Java. import tuPaquete; import tupaquete.*; 

En Clojure. (import '(tuPaquete)) 
En C. #include "modulo.h"

¿Cómo introducir/mostrar datos?

He aqui unos ejemplos de como introducir y mostrar datos.

 En Ceylon. introducirDatos.ceylon
import java.util { Scanner }
import java.lang { System { sin=\Iin } } 

doc "método principal del programa" 
shared void run(){ 
 Scanner teclado=Scanner(sin); 
 //introducir nombre y edad 
 print("Tu nombre: "); 
 String nombre=teclado.nextLine(); 
 print("Tu edad: "); Integer edad=teclado.nextInt(); 
 //mostramos los datos 
 print("Hola " nombre " tienes " edad " años de edad");
 } 

En Groovy. introducirDatos.groovy
import java.util.Scanner 
 static main(args){ 
Scanner teclado = new Scanner(System.in) 
def nombre="" 
def edad=0 
println "Tu nombre: " 
nombre=teclado.nextLine() 
println "Tu edad: " 
edad=teclado.nextInt() 
 println "Hola ${nombre} tienes ${edad} años de edad" } 

En Python. holamundo.py nombre=raw_input("Tu nombre: ") edad=int(raw_input("Tu edad: ")) print "Hola %s tienes %d años de edad"%(nombre,edad) 

En Scala.
IntroduceDatos.scala

object IntroduceDatos{ 
 def main(args: Array[String]){ 
 var nombre=readLine("Tu nombre: "); 
 println("Tu edad"); var edad=readInt(); 
 println("Hola "+nombre+" tienes "+edad+" años de edad"); } } 

En Java. IntroduceDatos.java

import java.util.Scanner; 
public class IntroduceDatos{ 
 public static void main(String[] args){ 
 Scanner teclado=new Scanner(System.in); 
 String nombre=""; 
 int edad=0;
 System.out.println("Tu nombre: ");
 nombre=teclado.nextLine(); 
 System.out.println("Tu edad: "); 
 edad=teclado.nextInt(); 
 System.out.println("Hola " +nombre +" tienes " +edad+" años de edad");
 } } 

En Clojure. introduceDatos.cjl
;; introducir datos (import '(java.util Scanner)) (def scan (Scanner. *in*)) (println "Tu nombre: ") 
(def nombre (.nextLine scan)) (println "Tu edad: ")
 (def edad (.nextInt scan))
 (println "Hola") 
(println nombre) 
(println "Tienes ") 
(println edad) 
(println " años de edad") 

En C. introduceDatos.c
#include "stdio.h" void main(){ 
 char[10] nombre; 
 int edad=0; 
 printf("Tu nombre: "); 
 gets(nombre); 
 printf("Tu edad: "); scanf("%d",edad); printf("Hola %c tienes %d anyos de edad",nombre,edad); }

Puede parecer algo confuso, pero haber que pasa con las clases.

Crear clases

En este caso omito a C y a Clojure (usted disculpe).
En Ceylon. ejemploClase.ceylon
doc "defino una clase" 
class Clase(){ 
 shared void mensaje(){ 
 print("Hola desde un metodo"); } } 

doc "método principal del programa" 
void run(){ 
activa(Clase()); } 
 void activa(Clase clase){ clase.mensaje(); }


En Groovy. ejemploClase.groovy

class Clase{ def mensaje(){ 
 println "Hola desde un metodo" } } 
 static main(args){ 
 activa(new Clase()) } 

 def activa(clase){ clase.mensaje() } 

En Python. holamundo.py
class Clase: def mensaje(self): 
  print "Hola desde un metodo" 

  def activa(clase): clase.mensaje() 

  def main(): 
   activa(Clase()) 

 if __name__ == "__main__": 
   main() 

En Scala.
EjemploClase.scala

class Clase(){ 
 def mensaje(){ 
 println("Hola desde un metodo"); } } 
 object EjemploClase{ 
 def main(args: Array[String]){ 
 activa(new Clase()); } def activa(clase:Clase){ clase.mensaje(); } } 

En Java. EjemploClase.java

public class EjemploClase{ 
 public static void main(String[] args){ 
 new EjemploClase().activa(new Clase()); } 

 public void activa(Clase clase){ clase.mensaje(); } } 

 class Clase{ 
 public void mensaje(){ 
 System.out.println("Hola desde un metodo"); 
 } 
}

¿Por qué Ceylon, ... es mejor que Scala y/o Groovy?

Hacer una comparativa con otros lenguajes es válido, lo que es un poco "injusto" decidir si es o no mejor que X o Y lenguaje, ya que el lenguaje todavía esta en desarrollo. Algunos consideran que Groovy es mejor que Java, otros que Scala no es mejor si no mucho mejor que Java y Groovy juntos. Otros más que en RedHat debio sumarse a Scala y no crear un nuevo lenguaje como Ceylon.
No importa si crees que tu programa esta bien escrito ... siempre va ocurrir un error
Según yo algunos de los problemas que tienen lenguajes como Scala y Groovy son:
  1. Scala: es muy dificil aprender y cada vez se vuelve más complejo (no quiere decir que sea malo)
  2. Groovy: debes tener cuidado de no olvidar crear métodos, inicializar variables,etc.

sábado, 2 de febrero de 2013

Scala ... ejemplos sencillos no. 2

Ejecutar un comando/proceso desde Scala

import scala.sys.process_

object Scalar extends App{
  "ls -la"!
}

Debería mostrarte una lista de directorios y archivos (en Linux). En Windows sería:

import scala.sys.process_

object Scalar extends App{
  "dir"!
}


En Groovy es:

class Groovy{
  static main(args){
     println "ls -la".execute().text
   }
}

En Python:


import os

def inicio():
  os.system("ls -la")

inicio()





sábado, 19 de enero de 2013

Ejemplo de patrón de diseño Singleton



Los patrones de diseño son una forma de escribir código de manera más ordenada.

Los patrones se dividen en tres grandes grupos: 
  • Creacionales → Cómo instanciar objetos de manera flexible. 
  • Estructurales → Cómo organizar clases y objetos para formar estructuras más grandes. - 
  • Comportamentales → Cómo gestionar la comunicación y responsabilidades entre objetos.
Nos enfocaremos en el patrón Singleton. El cuales es un patrón de diseño de software que restringe la instanciación de una clase a una sola instancia. ¿Para qué sirve el patrón Singleton?
Crear una instancia única de una clase.  Se me ocurre que necesito obtener una lista de registros de una base de datos.

Singleton en la vida real
Las clases java.langMath y java.lang.Runtime de Java son un ejemplo del patrón Singleton.


Ejemplo. Definir una clase que siga este patrón y muestre su nombre.

Singleton.java

package com.inforhomex.app;

public class Singleton{

 private static Singleton singleton=null;

 private Singleton(){}

 public static Singleton getSingleton(){
  if(singleton==null){
   singleton=new Singleton();
  }
  return singleton;
 }
//aqui muestra el nombre 'Singleton'
 public void ver(){
  System.out.println("Estoy desde la clase: "+this.getClass().getName());
 }
}

Ahora la clase principal:

Principal.java
package com.inforhomex.app;

public class Principal{
 public static void main(String[] args) {
  Singleton singleton=Singleton.getSingleton();
  singleton.ver();
 }
}

Actualización:
Aquí otro ejemplo del uso del patrón singleton, obtener los valores de una lista:
package com.inforhomex.app;

import java.util.List;
import java.util.ArrayList;

public class Codemonkey{
  public static void main(String[] args) {
    List<Integer> lista =new ArrayList<Integer>();
    lista.add(12);
    lista.add(3);
    lista.add(90);
    lista.add(32);
    lista.add(8);

    Singleton ejemplo=Singleton.getSingleton();
    ejemplo.getLista(lista);
  }
}



sábado, 29 de diciembre de 2012

Aprende Python de manera divertida



Programar puede parecer difícil (a veces imposible), pero con un poco de ayuda podemos empezar desde el clásico programa "Hola mundo" hasta programas mucho más elaborados.

Una herramienta para iniciar con el lenguaje es Python Turtle, nos permite jugar un poco con el lenguaje mientras aprendemos a usarlo.


import turtle as tortuga

tortuga.setup(700,500)
raphael=tortuga.Screen()
raphael.bgcolor("lightblue")
raphael.title("Hola Leonardo")

leonardo=tortuga.Turtle()
leonardo.color("red")
leonardo.pensize(3)
leonardo.forward(300)
leonardo.left(120)
leonardo.forward(300)
leonardo.exitonclick()


Este código también puede correr en el IDLE (Windows) de Python. Existen además otras herramientas  gráficas como RUR-PLE y/o Guido Van Robot que parecen muy interesantes.


¿Estás herramientas me van enseñar a programar?
No, el fin es que conozcan el lenguaje, que leas, escribas notas y practiques mucho. Estas herramientas están enfocadas a principiantes.

Python Turtle
http://pythonturtle.org/

RUR-PLE (Python Learning Environment)
http://rur-ple.sourceforge.net/

Guido Van Robot
http://gvr.sourceforge.net/

swfk
http://code.google.com/p/swfk/


Referencias

Invent with Python
http://inventwithpython.com/makinggames.pdf


Teaching kids programming
http://baheyeldin.com/technology/teaching-kids-programming.html

viernes, 21 de diciembre de 2012

Visual Basic Script




Visual Basic Script


Alguna vez tuve que usar Visual Basic Script para ejecutar algunas tareas como abrir el navegador en una página en específico, abrir Excel y/o Word.

VBScript   básicamente es lo mismo que el VB tradicional.

Dim aviso As String

aviso="Hola este es un simple mensaje"

MsgBox aviso, vbInformation,"Aviso del sistema"

Estructuras de control


' Selectivas

If 9==0 Then
   'no es correcto

Else If 9==9 Then
   ' es correcto

Else
   ' hacer nada

End If

Dim numero As Integer

numero =12

Select Case numero
     Case 1:
             'hacer algo

     Case 2 To 12:
            ' hacer otra cosa

     Case Else:

          'hacer nada

End Select


' Repetitivas

For n=1 To 10
    ' hacer algo
Next n

Do  While variable < MAX
     'hacer otra cosa
Loop

While contador <90
   'repetir
Wend


For Each variable In grupo
   'repetir
Next variable


Se me ocurrió  hacer un programita en Java para ejecutar estos archivos y encontré este link http://www.ehowenespanol.com/ejecutar-script-vbs-java-como_111019/

Si quiero abrir una página creo un script que tenga lo siguiente:

set shell = CreateObject("Shell.Application")
shell.Open "http://codemonkeyjunior.blogspot.mx/"

MsgBox "Listo ventana abierta",vbInformation,"Aviso del sistema"


Se guarda con la extensión *.vbs  ahora crear la clase Java.

Ejecuta.java


import java.lang.Runtime;
import java.io.*;

public class Ejecuta{
public static void main(String[] args) {
try{
Runtime.getRuntime().exec("wscript C:\\prueba.vbs");
}catch(Exception ex){
ex.printStackTrace(System.err);
}
}
}

Algunos usos de VBScript es en la programación descriptiva (no sabía que existía), en la elaboración de pruebas de software (QTP), automatización de procesos,etc.

Ejemplo. Abrir el navegador y logearse a su cuenta de Hotmail.

1. Abrir navegador
2. Ingresar a hotmail
3. Introducir cuenta y password
4. Revisar los mensajes enviados
5. Borrar los mensajes de un contacto en específico
6. Cerrar sesión
7. Apagar sistema

Todo esto mediante un script.


Links:
http://www.visualbasicscript.com/
http://testingbaires.com/tag/programacion-descriptiva/
http://mercuryquicktestprofessional.blogspot.mx/2007/10/vb-script-and-qtp-part1.html

sábado, 24 de noviembre de 2012

Programando en Groovy al estilo Java no. 2



He aqui más ejemplos de Groovy.

1. Paso de parámetros desde Groovy (algo muy parecido a Java):


static void main(String ... args)throws Exception {
def cont=0
def listaVacia=[]
if(args){
args.each{it->
println "${it}, indice: ${cont}"
listaVacia[cont]=it
cont++
}
println "total: "+cont
println "lista: ${listaVacia}"
}else{
throw new Exception("ha ocurrido un error")
}
}
El código es muy sencillo así que no explico mucho sobre el.

2. Calcular el salario bruto y neto:
class Servicios{

def obtenerEntero(){
return (new Scanner(System.in).nextInt())
}

def obtenerReal(){
return (new Scanner(System.in).nextDouble())
}

def obtenerCadena(){
return (new Scanner(System.in).nextLine())
}

def salarioBruto(h,t,e){
return (h*t+e*t*1.5)
}

def salarioNeto(salB){
if(salB<=300){
return salB 
}else{
return salB*0.9
}
}

}

static void main(String ... args) {
def obj=new Servicios()
def extras=0
def horas=0
def tasa=0.0

  try{
println "Introduce horas: "
horas=obj.obtenerEntero()
println "Horas: ${horas}"
println "Introduce tasa: "
tasa=obj.obtenerReal()
println "tasa: ${tasa}"
}catch(ex){
println "error: ${ex}"+"  , causa: "+ex.getCause()
}


try{
if(horas<=38){
extras=0
}else{
   extras=horas-38
   horas=38
   }
}catch(ex){
println "error: ${ex}"+"  , causa: "+ex.getCause()
}

println "salario bruto: "+obj.salarioBruto(horas,tasa,extras)
println "salario neto: "+obj.salarioNeto(obj.salarioBruto(horas,tasa,extras))


}

3. Conexión  MySQL y Groovy usando el  "gestor de dependencias" @Grapes:
import groovy.sql.*
import groovy.grape.Grape


static void main(String ... args)throws Exception {
if(args.size()==0){
throw new Exception("error: debes introducir datos")
}else{
def usuario=args[0]
def clave=args[1]
println "usuario: "+args[0]
inicio(usuario,clave)

}
}

@Grapes([
@Grab('mysql:mysql-connector-java:5.1.12'),
@GrabConfig(systemClassLoader=true)
])
def inicio(usuario,clave){
println "bienvenido: ${usuario}"
                Sql sql=Sql.newInstance("jdbc:mysql://localhost/agenda",usuario,clave,"com.mysql.jdbc.Driver")
                sql.eachRow("select * from usuarios") {
                        println "Usuarios de la base: ${it.nomb_us}"
                }
}

Pattern Matching en sencillas palabras (o no tanto)

El pattern matching es una técnica para comparar estructuras de datos contra un patrón y, si coincide, extraer valores o ejecutar lóg...

Etiquetas

Archivo del blog