blog de OscarRyz

Presentación de Ryz en el HackerRoomMx ( vie. 27 mayo 2011 8 p.m. )

Después de casi un mes de atraso derivado entre otras cosas que mi disco duro voló, por fin he decidido hacer una presentación del lenguaje de programación Ryz que llega al fin a su pre-pre-pre-Alpha release.

En esta presentación hablaré sobre las características del lenguaje y algunos aspectos sobre su origen, estado actual y siguientes pasos. Habrá claro algún ejemplo para que no sea todo teórico.

En esta presentación no hablaré sobre la implementación, en parte porque da pena y en parte porque no es la idea ( para no desilusionarse tan rápido ) Pero si no nos corren pues podemos quedarnos ahí un rato programando :)

Importante Esta es una versión pre-pre-pre-alpha y como tal tiene muchisimas "areas de oportunidad" :P, quedan advertidos.

La cita es el siguiente viernes 27 de mayo 2011 a las 8 p.m. en el mismísimo HackerRoom:

Rio Volga 80, Mezzanine 2-A
Col. Cuauhtemoc
Mexico, DF 06500

Atte:

Oscar Reyes de la Cruz
@OscarRyz
@ryz_language

(tiny) ls para Windows con Java

Actualmente estoy forzado a trabajar en una máquina con Windows pero cuando llevas algún tiempo trabajando en UNIX o en Linux y se usa la linea de comandos para navegar el sistema de archivos, es mucho, pero mucho muy molesto escribir en automático ls y obtener lo siguiente:

C:\Users\oreyes\java>ls -l
"ls" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

Aaaaaaaargggg!!!, las primeras... 255 veces, pasa, pero en la 256 se me acabó la paciencia!!!

Anteriormente había llegado a instalar cygwin pero no esta vez, no quiero todo el stack.

¿Entonces? Hice un programa en Java!

Acá les dejo el código fuente, no se trata de hace un ( mal ) sustituto de ls si no simplemente ayudarme a llenar el hueco.

Además aproveche para poner una "descripción humana" del tamaño de archivos ( en algún shell era una opción como ls -lH pero después ya no lo encontré )

 
package dir;

import java.io.File;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.text.DecimalFormat;

public final class Ls {

Nano ejemplo de Javassist

Complementando esta entrada de Rodrigo y estas otras de Enrique, aquí va mi nano ejemplo para modificar una clase con javassist.

Me estaba preguntando si sería posible modificar el bytecode de una clase, pero además salvarlo para que ya no exista dependencia con la biblioteca durante la ejecución.

A menos que haya leído mal en los ejemplos de Rodrigo y Enrique, se modificaba la clase en Runtime, en este ejemplo se modificará en "build-time" que es como se llama cuando se modificar el .class

Primero vemos que hay en el directorio:

C:\Users\oreyes\langs\java\javassistdemo>dir

29/02/2009  23:55 p.m.                57 Code.java
03/07/2009  12:03 a.m.           614,203 javassist.jar
29/02/2009  23:53 p.m.               432 ModifyIt.java

¡¡Feliz día de Reyes!!

¡¡Feliz día de Reyes!!

Desde que estaba en la universidad, siempre quise crear mi propio lenguaje de programación, pero siempre lo consideré algo mucho muy complejo y propio para Doctores en computación ( y no es que no lo sea, sigue siendo complejísimo, solo que ahora no lo considero como una tarea casi imposible ), y pues nunca le entré.

Recientemente ( 3 - 4 años ) con el florecimiento de tantísimos lenguajes de programación me la pasaba siempre pensando: "Por que no tiene esto?, por que no tiene aquello? y por que no tiene lo otro? y por que no? y por que no?" y de tantos por que noes, me dije a mi mismo: "Mi mismo, ¡¿por que no te dejas de quejar y lo haces tu mismo?!". ¿El resultado? Me di cuenta que no solo es difícil escribir un nuevo lenguaje de programación sino que ¡diseñarlo! es ya es de por sí una tarea muy compleja y cuesta mucho trabajo crear algo que sea a la vez original y "usable".

Aún así insistí.

El resultado es este lenguaje de programación que por no encontrar mejor nombre le puse Ryz - pronunciado Reyes :-" )

hola.Mundo {
  main( ) {
    out.println("Hola mundo Ryz!")

Una Java más Pythonico. ¿si o no?

Con uds. Python!

Python es un lenguaje de programación que entre sus características más distitivas está el uso de la identación para definir bloques.

Esto fue inicialmente muy polémico y ahora es considerado como una de las características más importantes del lenguaje, por que nos ayuda ( casi forza ) a tener un estilo consistente.

Para quién aún no haya visto Python este es un ejemplo sencillo:

class Persona:
  def saluda(self, aquien = '' ):
    if aquien == '':
      print 'Hola extraño'
    else:
      print 'Hola %s' % aquien
  def edad( self ):
    return self.edad

class Main:
  def main():
    Persona().saluda()

Para entender la recursividad primero hay que entender la recursividad

Si ya entendiste la recursividad no leas esto.

La recursividad funciona de la siguiente manera:

  • Primero se tiene una o más condiciones base. Estas condiciones son usadas para saber cuando hay que parar.

  • Se tienen varios parámetros de entrada con los que se va a trabajar. Uno o varios de estos parámetros serán usados en las condiciones base.

  • Finalmente se tienen varias operaciones a realizar. La funcion que estamos definiendo será resuelta al llamarse a sí misma con parámetros nuevos, de lo contrario entrará en un ciclo infinito

Entonces, con esta información en mente, podemos hacer el siguiente pseudo código para ver si existe un elemento usando busqueda binaria

Aquí va un ejemplo de TDD

Aquí va un ejemplo de TDD.

Hace tiempo que quería escribir esto y con el fin del horario de verano resulta que tengo una hora extra así que aquí va.

No voy a extenderme mucho en que es el TDD ( desarrollo dirigido por pruebas ) ni por que es importante, ni como usar un framework como JUnit o TestNG, espero que baste con decir que el efecto más importante que tiene el TDD es que una vez terminado el desarrollo, el código ya tiene pruebas automatizadas.

Me parece que un ejemplo suficientemente sencillo y no tan trivial puede ser construir un evaluador de expresiones booleanas, donde se pase un string como:

( verdadero y falso ) o verdadero

y nos diga que el resultado es

verdadero

Sé que un evaluador como este puede ser escrito muy fácilmente con un generador lexico, pero no es la idea ahora. La idea es hacer un ejemplo que sea suficientemente interesante.

Del problema al código en 4 pasos - Con iteraciones

Los cuatro pasos que escribí aquí: http://bit.ly/DelProblemaAlCodigoEn4Pasos son un hiper-resumen de varias metodologías de desarrollo que metidas a una licuadora y en mi propia interpretación pueden ayudar a pasar de la definición del problema al código.

Funcionan muy bien para problemas pequeños, pero podrían parecer insuficientes para un problema más grande ( o un proyecto profesional ) pero no lo son. Son la base de la programación y muchos programadores experimentados los siguen aplicando, aunque en forma tan automática que no se dan cuenta.

El primero paso es entender el problema y muchas veces eso es lo primero que falla.

"...el primer paso para obtener lo que quieres, es saber lo que quieres..."

Pero, no te desesperes si no entiendes tu problema de un jalón. Es muy común que en proyectos grandes no se logre entender en su totalidad el problema de un solo golpe, y definitivamente intentar codificarlo todo y pretender que funcione a la primera es totalmente irreal.

Usar Iteraciones

Aportación Java México - PCJ - Como pasar del problema al código en 4 pasos.

Estuve pensando y pensando y repensando que podría escribir, pero no me decidía por ningún tema.

Contestando esta pregunta me encontré con que es muy común no saber como pasar de la descripción del problema ( la especificación funcional ) al código.

Esto pasa en todos los niveles y es mucho, muchísimo más difícil cuando se se está empezando a programar, pero incluso programadores profesionales fallan en alguna parte ( sobre todo en el primer paso: "entender el problema" ).

Pensando en eso y en los muchos principiantes que se encuentran en una situación totalmente desesperada de no saber ni por donde empezar, mi aportación es explicar como en 4 pasos se puede pasar del problema al código.

  • Paso 1.- Lee el problema y entiéndelo ( hasta que todo este claro )
  • Paso 2.- Identificar variables y funciones
  • Paso 3.- Escribir paso a paso como se resuelve el problema ( escribir el algoritmo o pseudo-código )
  • Paso 4. - Escribir el código!!

La descripción del problema que tiene nuestro compañero es:

Prueba de formato

Esta en mi primera entrada y quisiera ver que tan difñicil es hacerla.

¿Como serán las listas?

  • Uno
  • dos
  • tres

Realmente necesito todo ese HTML
MMMhh nada bien

Que pasa si :

- Uno
- Dos
- Tres

???

class Employee {
    private final String name;
    private final int emplid;
    public Employee( String name, int emplid )  {
        this.name = name;
        this.emplid = emplid;
    }
}

Bold Italic

http://www.javamexico.org

Que hay de las imagenes ?

Y que tal los videos?

Distribuir contenido