sábado, 22 de febrero de 2014

Programando en Ruby ... no. 3

¿Existe alguna forma para programar aplicaciones gáficas en Ruby?
Si, hay varias alternativas como http://visualruby.net/

¿Cómo instalarlo (en Linux)?
sudo apt-get install -y glade-gtk2 libgtksourceview2.0-dev gtk2-engines-pixbuf
sudo apt-get install ruby1.9.3-dev
sudo apt-get install ruby-dev
sudo gem install visualruby
#para ejecutarlo desde terminal escribimos:
vr

También existe para sistemas Windows.

Otras alternativas son:


Algunos ejercicios de programación básica en Ruby.


1. Sumatoria del 1 al 10
lista=[1,2,3,4,5,6,7,8,9,10]
suma=0

#con each
lista.each do |l|
  suma=suma+l.to_i
end

puts "Suma (each): #{suma}"

#con while
suma=0
cont=0
tam=lista.size
while cont<tam do
  suma=suma+lista[cont]
  cont=cont+1
end
puts "Suma (while): #{suma}"

#con until
i=0
num=lista.size
suma=0
until i>num
  suma=suma+i
  i+=1
end
puts "Suma (until): #{suma}"

#con for
suma=0
for l3 in lista
  suma=suma+l3.to_i
end
puts "Suma (for): #{suma}"

 2. Algunas formas para ejecutar comandos
#comando ls ,en Linux, para mostar el contenido de un directorio
comando='ls -ltr'
puts `#{comando}`
p "---------------------------------------------"
puts %x{ls -ltr}
p "---------------------------------------------"
puts `ls -ltr`
p "---------------------------------------------"

# comando date, para mostrar fecha del sistema
mi_comando= %x[date]
p mi_comando
puts mi_comando.class
p "---------------------------------------------"
# comando cal, para mostrar calemdario
otro_comando= system "cal"
p otro_comando #true
puts otro_comando.class#TrueClass

3. Clase en Ruby
class No_Terrestre

  def initialize(nombre)
    @nombre=nombre
  end

  attr_accessor :nombre

end

begin
  roger=No_Terrestre.new('Roger')
  puts "nombre: #{roger.nombre}"
  roger.nombre="Jonh Stwart"
  puts "ahora su nombre es: #{roger.nombre}"

  puts "nombre de la clase a la que pertenece: "
  puts roger.class
 

rescue Exception => e
  puts "Ha ocurrido un error"
end

Links

viernes, 14 de febrero de 2014

Python: Uso de PyZenity

¿Qué es PyZenity?
Es una librería creada por Brian Ramos que nos permite hacer uso de cuadros de diálogo Zenity.

¿Cómo puedo usar PyZenity?

  1. Descargar la última versión http://brianramos.com/software/PyZenity/PyZenity-0.1.7.tar.gz
  2. Desempaquetar
  3. Ir a la carpeta PyZenity
  4. Desde terminal teclear (como root): python setup.py install
  5. Entra al repl de Python tecleando: python 


Tendremos instalado PyZenity.


1. Una calculadora básica (solo funciona en sistemas Linux)

from PyZenity import InfoMessage
from PyZenity import Question
from PyZenity import ErrorMessage
from PyZenity import GetText
import os

x1, x2,res=0.0, 0.0, 0.0

def main():
os.system('clear')

menu='\t[ Menu ]\n1. Suma\n2. Resta\n3. Producto\n4. Division\n5. Salir'
opcion=GetText(text=menu, entry_text='', password=False)


if opcion == "1":
  cad="Suma"
elif opcion == "2":
cad="Resta"
elif opcion == "3":
cad="Producto"
elif opcion == "4":
cad="Division"
elif opcion == "5":
cad="Salir"
else:
cad="opcion invalida"


if cad == "opcion invalida":
ErrorMessage('Error, '+cad)
else:
InfoMessage('Introduciste: '+cad)

if cad=="Suma":
x1=float(GetText(text='Introduce un numero', entry_text='',password=False))
x2=float(GetText(text='Introduce otro numero', entry_text='',password=False))
res=x1+x2
InfoMessage('La suma obtenida es: '+str(res))
elif cad=="Resta":
x1=float(GetText(text='Introduce un numero', entry_text='',password=False))
x2=float(GetText(text='Introduce otro numero', entry_text='',password=False))
res=x1-x2
InfoMessage('La resta obtenida es: '+str(res))
elif cad=="Producto":
x1=float(GetText(text='Introduce un numero', entry_text='',password=False))
x2=float(GetText(text='Introduce otro numero', entry_text='',password=False))
res=x1*x2
InfoMessage('El producto obtenido es: '+str(res))
elif cad=="Division":
x1=float(GetText(text='Introduce un numero', entry_text='',password=False))
x2=float(GetText(text='Introduce otro numero', entry_text='',password=False))
res=x1/x2
InfoMessage('La division obtenida es: '+str(res))
else:
ErrorMessage('Error, '+cad)



if __name__ == '__main__':
main()










2. Crear una tabla
from PyZenity import InfoMessage
from PyZenity import List
from PyZenity import ErrorMessage
from PyZenity import GetText
import os
import sys
 
 
so,comando='',''
continuar=''
 
def lista():
return List(["Escoge","Autor","Lenguaje"], title="Selecciona un lenguaje", boolstyle="radiolist", editable=False, select_col="ALL", sep='|', data=[["","Guido","Python"],["","Gosling","Java"]])
    
def activa(c):
os.system(c)
#print lista()
res=lista()
print "Elegiste: "
print "Autor: ",res[0],", lenguaje: ",res[1]
 
continuar=GetText(text='Deseas continuar? [Si-> S,s , No-> N,n] ', entry_text='', password=False)
 
if continuar == "S" or continuar == "s":
main()
elif continuar == "N" or continuar == "n":
exit()
else:
exit()
 
 
 
def main():
so=sys.platform
if so=="linux2" or so=="darwin":
comando='clear'
else:
comando='cls'
 
activa(comando)
 
 
if __name__ == '__main__':
main()








Links
http://brianramos.com/?page_id=38
http://es.wikipedia.org/wiki/Zenity

domingo, 2 de febrero de 2014

Linux Bash ... no. 2

Zenity
Es una aplicación que nos permite usar componentes gráficos Gtk. Para instalarlo: sudo apt-get install zenity

¿Qué es Gtk?
Es un conjunto de librerías que nos sirve para desarrollar aplicaciones gráficas muy al estilo de Java Swing.

1. Introducir una cadena y mostrar el contenido (entrada.sh)
clear
NOMBRE=$(zenity --entry --text "Introduce tu nombre: ")
echo "Hola $NOMBRE"
zenity --info --text "Hola $NOMBRE"



Lo puedes ejecutar (debes darle permiso de ejecución) con: sh entrada.sh y/o  ./entrada.sh

2. Cajas de dialogo (elegir.sh)
clear
zenity --question --title="Se ha encontrado un error" --text "Seguro quiere reiniciar?"

RES=$?

if [ $RES -eq 0 ]; then
zenity --info --text "Elegiste reiniciar"
elif [ $RES -eq 1 ]; then
zenity --info --text "Elegiste NO reiniciar"
fi


Ejecutar: sh elegir y/o ./elegir.sh

Links:
http://blog.desdelinux.net/usos-practicos-de-la-caja-de-dialog-zenity/
http://bitelia.com/2010/04/comando-linux-zenity-ventanas-de-dialogo-gtk
http://es.wikipedia.org/wiki/GTK%2B
http://www.yolinux.com/TUTORIALS/GTK+ProgrammingTips.html

Groovy: comparativa con otros lenguajes ... no.2

En este post vamos a realizar un ejercicio muy sencillo de programación básica.

Un convertidor de dólares a pesos.

Iniciamos con Groovy:

static main(args){

//definimos la constante "CAMBIO"
def CAMBIO=13.3481
def dolar=System.console().readLine 'Introduce dolar:'
println "valor (usd): $dolar"
dolar=Double.parseDouble(dolar)
println "cambio (mxn): ${dolar*CAMBIO}"
}

En Python:
global CAMBIO
CAMBIO=13.3481
dolar=0.0
dolar=float(raw_input('Introduce dolares: '))
print "valor (usd): $",dolar
print "cambio (mxn): %f"%(dolar*CAMBIO)

En Ruby:
CAMBIO=13.3481
dolar=0.00
puts "Introduce dolares: "
STDOUT.flush
dolar=gets.chomp
dolar=dolar.to_f
puts "valor introducido (usd):$ #{dolar}"
puts "cambio (mxn): $ #{dolar*CAMBIO}"

En Perl:
use strict;
use warnings;
use constant CAMBIO => 13.3481;

my($dolar,$resultado);

print "Introduce dolares: \n";
$dolar=<STDIN>;
chomp($dolar);
print "valor (usd): $dolar\n";
$resultado=$dolar*CAMBIO;
print "cambio (mxn): $resultado\n";

En Scala:
object Scalar extends App{
val CAMBIO=13.3481
Console.println("Introduce dolares:")
var dolar:Double=readDouble
Console.println("valor (usd): "+dolar)

def resultado={
dolar*CAMBIO
}
Console.println("cambio (mxn):"+resultado)

}
En Bash:
clear
CAMBIO=13.3481
echo "Introduce dolares: "
read DOLAR
echo "valor (usd): $DOLAR"
RESULTADO=`echo "$DOLAR * $CAMBIO" | bc -l`
echo "cambio (mxn): $RESULTADO"


sábado, 25 de enero de 2014

Programando en C++ ... no. 3

Herencia

En este ejemplo se van a crear dos clases:

  • una clase base llamada Ingenieria
  • y una clase hija llamada Ingenieria_Computacion

La clase base (Ingenieria) heredará a la clase hija (Ingenieria_Computacion) sus atributos y métodos.


#include <iostream>
#include<string>

using namespace std;


class Ingenieria{
private:
int anyosEstudio;

public:
Ingenieria();
virtual ~Ingenieria();
void setAnyosEstudio(int anyosEstudio);
int getAnyosEstudio();

};

class Ingenieria_Computacion: public Ingenieria{
private:
string especialidad;

public:
Ingenieria_Computacion();
virtual ~Ingenieria_Computacion();
void setEspecialidad(string especialidad);
string getEspecialidad();

};

Ingenieria::Ingenieria(){
 cout<<"Objeto Ingenieria creado"<<endl;
}

Ingenieria::~Ingenieria(){
 cout<<"Objeto Ingenieria destruido"<<endl;
}

void Ingenieria::setAnyosEstudio(int anyosEstudio){this->anyosEstudio=anyosEstudio;}
int Ingenieria::getAnyosEstudio(){return this->anyosEstudio;}

Ingenieria_Computacion::Ingenieria_Computacion(){
  cout<<"Objeto Ingenieria_Computacion creado"<<endl;
}


Ingenieria_Computacion::~Ingenieria_Computacion(){
  cout<<"Objeto Ingenieria_Computacion destruido"<<endl;
}

void Ingenieria_Computacion::setEspecialidad(string especialidad){this->especialidad=especialidad;}
string Ingenieria_Computacion::getEspecialidad(){return this->especialidad;}

int main(){
   Ingenieria_Computacion ingeniero=Ingenieria_Computacion();
   ingeniero.setAnyosEstudio(5);
   ingeniero.setEspecialidad("redes de computadoras");
   cout<<"anyos de estudio: "<<ingeniero.getAnyosEstudio()<<endl;
   cout<<"especialidad: "<<ingeniero.getEspecialidad()<<endl;
  return 0;
}


Resultado:


lunes, 6 de enero de 2014

Programadores ...

  • Le gusta lo sencillo
  • No es muy "robusto" ni "pesado"

class Pythonista:
        def __init__(self, nombre): 
             self.nombre=nombre


 #main
 codeMonkey=Pythonista('Steve')
 print codeMonkey.nombre


  •  No muy confiable para algunos
  •  Puede sorprender 


 def lista=['libertad','groovy','amor y paz']

lista.each{it-> println "$it"}










  •  Demasiado "robusto" y "pesado" para algunos
  •  Le gusta la dificultad
 /**
*@author yo merito
*@date hoy
*/
public class Javesco{
/**
*@param args
*/
public static void main(String ... args){
  
      System.out.println("Un espacio demasiado pequeño");
 }

}



  • No le parece "adecuado"  todo lo que tenga que ver con la libertad
  • Debes sujetarte a sus normas



 NO ME PERMITO COMPARTIR CÓDIGO










  •  No le toman mucho interés o seriedad
  •  A algunos les puede parecer molesto
 class No_Terrestre
         def initialize(nombre)
           @nombre=nombre
         end

     attr_reader :nombre
end

#main
codeMonkey=No_Terrestre.new('Roger')
puts "Hola #{codeMonkey.nombre}"





  • Considera a otros como advenedizos
  • Debes cuidar tu "forma de hacer las cosas"


#include<stdio.h>

int main(){
  printf("no se me da la gana escribir funciones");
  return 0;
}











  • Solo algunos le entienden ... solo algunos
  • Muy confuso ... mucho



use strict;
use warnings;

my($cad);
$cad='Tal vez esto sirva'.'  o tal vez no';











  • Prefiere lo funcional y lo pragmático
  • Refinado y estricto


object Scalar extends App{
     Console.println("Deja de ver mi martini")
}












  • Le gusta lo directo, nada de palabrerías  insulsas
  • Cuida todo lo que escribes y dices, en serio hazlo 
void run(){
   print("Si ves esto, es porque sabes leer ");
}



Un poco de humor para todos.

domingo, 5 de enero de 2014

Programando en Ruby ... no. 2


Crear una clase en Ruby

ejemplos.rb
 
class Manguera

    def initialize(longitud,color)
        @longitud=longitud
        @color=color
    end

    attr_reader :longitud, :color
end

#'main' del programa
begin
#instanciamos la clase 'Manguera'
    manguera=Manguera.new('50 mts','negra')
rescue
    @error_message="#{$!}"
ensure
#imprimimos los datos
    puts "color: #{manguera.color} , longitud: #{manguera.longitud}"
end


Ruby es un lenguaje muy parecido a Python ,si tienes tiempo programando en el te parecerá bastante familiar.


¿Cómo quedaría la clase en Python?

ejemplos.py

class Manguera:
    def __init__(self,longitud,color):
        self.color=color
        self.longitud=longitud


try:
    manguera=Manguera('35 mts','naranja')
except Exception, e:
    print e
finally:
    print "color: %s, longitud: %s"%(manguera.color,manguera.longitud)

Modificando el código de la clase (en Ruby), podemos introducir valores:

class Manguera
    def initialize(longitud,color)
        @longitud=longitud
        @color=color
    end

    attr_reader :longitud, :color
end


color=''
longitud=''
begin
   #pedimos el color 
    puts "Color: "
    STDOUT.flush
    color=gets.chomp
   #pedimos la longitud
    puts "Longitud: "
    STDOUT.flush
    longitud=gets.chomp

    if color!='' and longitud!=''
        manguera=Manguera.new(longitud,color)
    end
   
rescue
    @error_message="#{$!}"
ensure
    puts "color: #{manguera.color} , longitud: #{manguera.longitud}"
end


También podriamos crear un método para visualizar los datos:

class Manguera
    def initialize(longitud,color)
        @longitud=longitud
        @color=color
    end

   #creamos  el método para visualizar los datos
   def verDatos
         puts "color:  #{color} , longitud: #{longitud}"
   end

    attr_reader :longitud, :color
end


color=''
longitud=''

=begin
     nota: esto es un comentario
=end

begin
   #pedimos el color 
    puts "Color: "
    STDOUT.flush
    color=gets.chomp
   #pedimos la longitud
    puts "Longitud: "
    STDOUT.flush
    longitud=gets.chomp

    if color!='' and longitud!=''
        manguera=Manguera.new(longitud,color)
    end
   
rescue
    @error_message="#{$!}"
ensure
    manguera.verDatos
end


Links:
http://codemonkeyjunior.blogspot.mx/2013/05/un-vistazo-ruby.html
http://codemonkeyjunior.blogspot.mx/2013/06/programando-en-ruby-no-1.html
http://www.elclubdelprogramador.com/category/programacion/ruby/

Jai un lenguaje de programación inspirado en C++

Hoy hablaremos de un nuevo lenguaje de programación llamado Jai . Se trata de un lenguaje de programación que está desarrolland...

Etiquetas

Archivo del blog