blog de OscarRyz

Imprimir año en formato calendario (ejercicio)

Ya es viernes! así que algo entretenido.

Siguiendo el espíritu de esta pregunta:
http://www.javamexico.org/blogs/jsrivero22/crear_un_calendario

El ejercicio es imprimir el calendario del año así:

                             2015

      January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3   1  2  3  4  5  6  7   1  2  3  4  5  6  7
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   8  9 10 11 12 13 14
11 12 13 14 15 16 17  15 16 17 18 19 20 21  15 16 17 18 19 20 21
18 19 20 21 22 23 24  22 23 24 25 26 27 28  22 23 24 25 26 27 28
25 26 27 28 29 30 31                        29 30 31
                                            
       April                  May                   June
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4                  1  2      1  2  3  4  5  6
 5  6  7  8  9 10 11   3  4  5  6  7  8  9   7  8  9 10 11 12 13
12 13 14 15 16 17 18  10 11 12 13 14 15 16  14 15 16 17 18 19 20
19 20 21 22 23 24 25  17 18 19 20 21 22 23  21 22 23 24 25 26 27
26 27 28 29 30        24 25 26 27 28 29 30  28 29 30

Operaciones con tiempo (ejercicio)

TL;DR

Escribir un programa en la línea de comandos que reciba: ultima hora de entrada en formato hh:mm AM/PM (o 24hrs) y un total de horas trabajadas en la semana como número de punto flotante (1 hr y media se escribiría 1.50 ).

La salida debe de ser:

1) Cuántas horas se llevan trabajadas hasta el momento de la ejecución del programa sin importar el formato (eg. has trabajado 23.5 hrs o has trabajado 23h30m )
2) A que hora se habrá llegado al siguiente multiplicador de 8. ( eg puedes salir a las 5:58 pm )

Ejemplo de ejecución:

~ $ date
Thu Apr 16 17:50:26 CDT 2015
~ $ t 01:33pm 25.58
Tiempo transcurrido: 29h51m47.999725341s
Salida a las: 19:58

Version larga.

Una forma útil de aprender nuevas cosas es hacer aplicaciones pequeñas de utilería. En mi trabajo tengo reloj checador que me dice cuánto he trabajado pero no dice cuándo habré trabajado N hrs.

Ejemplo, si entro a las 9 am salgo de comer de 12 a 1 y ya son las 4 de la tarde el reloj de ve así:

regular 09:00am
regular 12:00pm     3hrs

comida 12:00pm
comida 01:00pm 

regular 01:00pm
regular 

Más fácil que FizzBuzz

En reddit el día de hoy apareció el siguiente link:

http://www.thousandtyone.com/blog/EasierThanFizzBuzzWhyCantProgrammersPr...

"Más fácil que FizzBuzz, ¿por que los programadores no pueden imprimir del 100 al 1?" (por cierto no explica por qué)

Básicamente se trata de resolver este problema:

"Imprimir del 100 al 1 con la restricción de que el código debe de comenzar con: for ( int i = 0;, no puede haber nada antes y no se puede usar más de un loop"

Y explica que muchísimos fallan con eso, el tiempo ideal es de < 2 minutos, y si tardan más de 10 estan fuera (yo tarde 2:07 y funcionó en el primer intento).

Ahí se los dejo nomás para entretenerse:

public class M {
    public static void main( String ... a ) {
        for (int i = 0;
     }
}

Luego discutimos si tiene algún valor este tipo de preguntas y/o si alguien que se tarda más de 10 minutos o le toma varios intentos vale la pena ser considerado continuar siendo entrevistado.

Probar una cadena de llamadas con Mockito

Como @neodevelop explica en esta entrada: http://www.javamexico.org/blogs/neodevelop/pruebas_de_unidad_con_mockito... se puede probar con Mockito si un metodo fue llamado o no utilizando verify(objeto).nombreDelMetodo();

Utilice varias veces esa comprobación hasta que me fallo recientemente en un escenario como el siguiente: quería ver si mi nuevo método PhoneManager.getPhone(id) estaba invocando el método Profile.getPhone()

// FAIL
// prueba que el getter getPhone fue invocado:
class PhoneManagerTest {
    @InjectMocks PhoneManager phoneManager;
    @Mock Profile profile;
    ...
    @Test
    public void testGetPhone() {
        Assert.assertEquals("(55) 5658-1111", phoneManager.getContactPhone(1));
        Mockito.verify(profile).getPhone();
    }

El problema es que profile no es un atributo de PhoneManager sino que es obtenido con una cadena de llamadas como esta:

Profile profile = phoneManager.getAccountAdapter().getProfileService().getProfileById(id);

Ejemplo de aplicacion web + cliente usando Spring MVC y HttpComponents

Estaba escribiendo en una respuesta aquí en Java México como usar algún framework para hacer una aplicación cliente / servidor usando JSON como formato de transporte y HTTP como protocolo.

Según yo era así de fácil

Ajaaa si, mira usa Spring MVC y HttpClient; aqui esta Google ...

Pero sinceramente jamás he hecho precisamente ese ejercicio y como hacía tiempo que quería hacerlo y andaba insomne hice esto.

https://github.com/OscarRyz/webapp-demo

//-- App.java
public class App  {
    public static void main( String[] args ) throws Exception {
        Loteria  loteria =  new Loteria();
        Ticket t = loteria.ganador();
        System.out.println( t );
    }
}

// Cliente -- Loteria.java
public class Loteria {
   public String path(String path) {
      return "http://localhost:8080/loteria/"+ path;
   }
   
   public Ticket ganador() throws Exception {
      DefaultHttpClient httpclient = new DefaultHttpClient();
      HttpResponse response = httpclient.execute(new HttpGet(path("/ganador")));
      ObjectMapper mapper = new ObjectMapper();

Nightcode

Encontré este editor escrito en clojure que me pareció muy interesante.

El código esta en Github y el sitio es:

http://nightcode.info/

Por si les interesa.

Chau!

<code></code>

Utiliza <code></code> al escribir codigo en el sitio

Asi esto:

Se ve asi:

public class Ejemplo {
    public static void main( String ... args ) {
        for ( String n : args ) {
            System.out.printf("Hola %s%n", n );
        }
    }
}

Ejemplo de un equipo de fútbol

Pongo esto aquí por si a alguien le sirve.

import java.util.Scanner;

class Equipo {
    private String nombre;
    private int juegosJugados;
    private int juegosGanados;
    private int juegosEmpatados;
    private int juegosPerdidos;
    private int golesFavor;
    private int golesEnContra;

    public int calcularPuntos() {
        return juegosJugados * 3 + juegosEmpatados;
    }
    public int calcularBono() {
        return calcularPuntos() * 100
        + golesFavor * 500
        - juegosPerdidos * 500
        + (juegosJugados % 2 == 0 ? 5000 : 0);
    }
    public String toString()  {
        return String.format("Nombre: %-20s, Bono: %-10d, Puntos: %-10d", nombre, calcularBono(), calcularPuntos());
    }
    public static Equipo creaEquipo( String nombre, int jj, int jg, int je, int jp, int gf, int ge ) {
        Equipo e          = new Equipo();
        e.nombre          = nombre;
        e.juegosJugados   = jj;
        e.juegosGanados   = jg;
        e.juegosEmpatados = je;
        e.juegosPerdidos  = jp;
        e.golesFavor      = gf;
        e.golesEnContra   = ge;
        return e;
    }

}

Todo sobre Java 8

Este post es del mes pasado y habia olvidado comentarlo aca

http://www.techempower.com/blog/2013/03/26/everything-about-java-8/

En resumen, algunas de las cosas nuevas que tiene Java 8 estan:

- Closures finalmente
- Implementacion por default en ias interfaces
- Interfaces funcionales
- Mejora (leve) en la inferencia en tipos genericos
- Java Time (ya era tiempo... juar juar, entienden Tiempo? ash...)
- Un monton de cambios en las bibliotecas para tomar ventajas de los closures.

Día de Ryz, 2013

El año que acaba de concluir fue bastante lento para Ryz, la razón es que me pasaron muchas cosas.

- Cambié de trabajo para entrar a Knowtion y esto me absorbió la mayor parte de mi tiempo libre.
- La otra gran parte de mi tiempo libre me la pesé haciendo otras cosas que me hacían mucho, mucho, pero muucho muy feliz.

Estuvo bien, no hay queja. El objetivo de Ryz no es competir contra los otros lenguajes, ni siquiera contra Java mismo, no hay prisa.

En el 2012 lenguajes existentes y nuevos han ido consolidando algo que pretende hacer Ryz, simplificar el uso de Java. Java 8 incluirá closures finalmente, IDE's como Intellj IDEA 12 ya tienen soporte para ello. La comunidad (al menos en la que me encuentro) tiene ya bastante familiaridad con el uso de bloques y la programación funcional está empezando a consolidarse como paradigma al lado de la POO. Hay al menos un lenguaje con tipado estructurado que está siendo usado con éxito en producción actualmente. Todos hablan ya de Smalltalk y así por el estilo. Mucho e esto estaba en la base de Ryz, mucho solo en mi cabeza.

Distribuir contenido