Archivo

Archivo para la categoría ‘Programación’

Especificaciones

Friday, 13 de November de 2009

Sé que muchos programadores se sentirán identificados con esta carta.

¿Qué pasaría si en vez de programadores fueramos arquitectos?, unos dirán que sólo es el cambio de carrera, pero ¿y si ahora le agregamos que los jefes nos explican el problema y sus requerimientos de la misma en como la informan a los programadores?

Estimado Sr. Arquitecto:
Por favor diseñe y construya una casa para mi. No estoy muy seguro de lo que necesito, así que tendrá que usar su imaginación. Mi casa debería tener entre dos y cuarenta y cinco dormitorios. Simplemente asegúrese de que todo esté pensado de forma que sea sencillo añadir o quitar dormitorios. Cuando
me traiga los modelos, tomaré la decisión sobre lo que quiero. Además, tráigame un resumen de los costes para cada configuración de manera que pueda elegir una de ellas de manera arbitraria.
Tenga en cuenta que la nueva casa debe costar bastante menos que la casa en la que estoy viviendo ahora. Pero asegúrese, de todas formas, de que corrige todas las deficiencias que existen en mi casa actual (el suelo de la cocina vibra cuando ando por el, y las paredes no tienen suficiente aislamiento).
Mientras diseña, tenga en cuenta que quiero mantener los costes de mantenimiento lo mas bajos posibles. Esto significará la incorporación de materiales mas costosos coste como el aluminio, la fibra de vidrio o el vinilo. (Si elige no considerar el aluminio, prepárese para explicar su decisión en todo detalle.)
Por favor asegúrese de que se utilicen las prácticas mas modernas de diseño y lo último de lo último en materiales a la hora de construir la casa, ya que deseo poder presumir de haber utilizado las mas actuales ideas y métodos. Tenga en cuenta, de todas formas, que la cocina debería diseñarse para acomodar, entre otras cosas, mi nevera Gibson del 52.
Para asegurarse de que esté construyendo la casa de manera correcta para toda la familia, contacte con cada uno de mis hijos e hijas, y también con mis nueros y nueras. Mi suegra tendrá también bastantes cosas que decir sobre como debería diseñarse la casa, ya que nos visita al menos una vez al
año. Asegúrese de que considera cada una de las opciones que le propongan cuidadosamente y asegúrese también de elegir la decisión acertada. Yo, de cualquier forma, siempre tendré la última palabra y podré rectificar cualquier elección que tome.
Por favor no me moleste con los pequeños detalles de momento. Su trabajo es desarrollar una idea general del diseño de la casa: captar la idea. Este momento, por ejemplo, no es el apropiado para elegir el color de la alfombra.
En cualquier caso, recuerde que a mi esposa le gusta el azul.
Además, no se preocupe aún de adquirir los materiales necesarios para construir la casa. Su prioridad es la de desarrollar planos detallados y especificaciones. De todas formas, una vez que yo apruebe esos planos, espero que la casa esté construida en 48 horas.
Aunque esté diseñando esta casa específicamente para mí, tenga en cuenta que antes o después tendré que venderla a otra persona. De manera que debería ser atrayente para una gran variedad de compradores potenciales. Por favor
asegúrese antes de que finalice los planos de que halla un consenso sobre las características de la casa entre la población de la zona. Le aconsejo que eche un vistazo a la casa que mi vecino se construyó el año pasado. Nos encanta. Tiene bastantes características que también queremos en nuestra nueva casa, especialmente la piscina de 75 pies. Aplicando la ingeniería de
manera cuidadosa, creo que no tendrá dificultades en añadirlo al diseño final sin que tenga ningún impacto en el coste.
Por favor prepare un conjunto completo de modelos. No es necesario por ahora que prepare el diseño real, dado que solo queremos los modelos para calcular los costes de la obra. Tenga en cuenta, de todas formas, que usted será el responsable de cualquier incremento en el precio debido a cambios posteriores en el diseño.
¡Debería estar emocionado por trabajar en un proyecto tan interesante como este! Poder utilizar las últimas técnicas y materiales y el que le den tanta libertad en sus diseños es algo que no ocurre muy a menudo. Contacte conmigo tan pronto como sea posible con una lista completa de sus ideas y sus planes.

*Postdata:* Mi esposa acaba de decirme que no está de acuerdo con algunas de las instrucciones que le doy en esta carta. Como arquitecto, es su responsabilidad el resolver estas diferencias entre mi esposa y yo. Yo ya lo he intentado en el pasado y fui incapaz de conseguirlo. Si no puede hacer frente a esta responsabilidad, tendré que contratar a otro arquitecto.

*PostPostdata:* Quizás lo que necesite ni tan si quiera sea una casa, sino una caravana. Por favor aconséjeme lo mas pronto posible si ese es el caso..

VN:F [1.0.9_379]

Ancelot Humor, Programación, computación , , ,

Errores comunes al programar en JAVA

Monday, 23 de March de 2009

Si ha estado trabajando con Java por algún tiempo, es seguro que habrá cometido estos errores al menos un par de veces. Los errores de programación en Java, así como en otros lenguajes, ocurren más que todo en la sintaxis y errores en la lógica. Los errores en la sintaxis son causados cuando el compilar Java (javac) no puede reconocer la sentencia. Esto causa que el compilador devuelva un mensaje de error, usualmente con una línea de código de referencia. También se conoce a los errores de sintaxis como errores en tiempo de compilación.

Los errores de lógica son conocidos como BUGS. Estos son los errores que nos tomarán tiempo hasta encontrarlos. Si damos a elegir, cualquier programador elegiría los errores en tiempo de compilación. A mi me ha tomado hasta varios días hacer el debug cuando suceden errores de lógica, y eso, usando todas las herramientas disponibles: archivos logs, mensajes System.out, debuggers, etc.

Los siguientes errores aparecen en la mayoría de programadores cada cierto tiempo, pero podemos verlo regularmente en el código de los programadores novatos.

Tenemos que cuidarnos de estos errores para evitarlos y pulir nuestro código.

  • El nombre de la Clase pública no coincide con el nombre del archivo
    Cada archivo .java puede contener sólo una Clase pública. El nombre de esa Clase pública debe coincidir exactamente con el nombre del archivo antes de la extensión .java, respetando incluso las mayúsculas y minúsculas. Por ejemplo, una Clase pública llamada MyClass debe estar en un archivo MyClass.java y no en myclass.java. Este es un error de sintaxis.
  • Una Clase no está en el directorio correcto
    Este error de sintaxis ocurre si el comando javac no puede encontrar un archivo .java en el directorio esperado. Si una Clase está en el paquete por defecto (no tiene la declaración del package en la primera línea), entonces esta Clase pertenece al directorio actual de trabajo o al directorio donde apunta el flag sourcepath del javac. Si una Clase está a un paquete, entonces pertenece a un subdirectorio debajo del directorio actual de trabajo o a un subdirectorio debajo del directorio donde apunta el flan sourcepath del javac. Por ejemplo, si existe una Clase llamada com.hello.HelloWorld entonces su nombre es HelloWorld y su paquete es com.hello. Si el flan sourcepath está configurada a c:src, entonces el archivo HelloWorld.java debe estar ubicado en el subdirectorio: c:srccomhello.
  • Usando equals contra la asignación ( == versus = )
    En Java este error puede ser incluso un error de lógica o sintaxis. Para comparar 2 referencias para igualarlas se usa el operador == (el operador de igualdad). Para asignar el valor de la derecha a la variable de la izquierda se usa el operador = (operador de asignación). Los programadores novatos a veces escriben: if (miValor = valorEsperado) Este código intenta evaluar el valorEsperado como un valor booleano en lugar de intentar la evaluación de igualdad entre miValor y valorEsperado. Si valorEsperado es del tipo booleano, entonces el código tendrá un error de lógica y probará si el valorEsperado es verdadero o falso. Si valorEsperado no es del tipo booleano, entonces el código lanzará un error de compilación debido a que la estructura if requiere un valor booleano que sea retornado de la comparación (miValor = valorEsperado), pero en Java el operador = siempre retorna el valor de la derecha.
  • Error en mayúsculas y minúsculas.
    Java es un lenguaje case sensitive, esto es que debemos respetar las mayúsculas y minúsculas. (miVar no es igual a mivar). Si hacemos referencia a un identificador que no está bien escrito entonces obtendremos un error de sintaxis.
  • Olvidar que los índices en Java empiezan en 0.
    Los índices de los arreglos de Java y las listas empiezan en 0, myArray[0], o myList.get(0). Asegurarse que su loop for no cause errores por este motivo. Si hacemos más loops de los que son posibles, entonces obtendremos el error: ArrayIndexOutBounds exception. Si hacemos menos loops de los requeridos, entonces tendremos un error de lógica.
  • NullPointerException
    El NullPointerException, la maldición de los programadores en Java. Los NullPointerExceptions son errores de lógica causados cuando un programa intenta acceder a métodos o atributos en una referencia que está nula. Si nuestro objeto no ha sido inicializado o ha sido establecido a null con el operador =, entonces la llamada el método o el acceso a uno de sus atributos no es válido.

Espero que esta lista corta de errores de código le ayude a pensar de manera defensiva a la hora de escribir código. Mientras más errores evitemos, entonces más productivos seremos, tanto en tiempo de desarrollo como también el código más refinado.

VN:F [1.0.9_379]

Ancelot Programación, java , , ,

Domingo en la mañana, starbucks Santiago-Chile

Thursday, 5 de March de 2009

Difundiendo este gran evento que reune a gente ligada a la web sin importar el tema o motivo.

Fuente: pulsoSocial

powered by Wordpress Multibox Plugin v1.3.5

domingo en la mañana santiago de chile
Este domingo 8 de Marzo se llevara acabo Domingo en la Mañana en Santigo de Chile en el Starbucks que queda en Calle San Sebastian, 2946, Las Condes, empezando a las 10:30 am.

Que es Domingo en la Mañana?

Es como una mini-uncoference muy casual donde emprendedores, developers, diseñadores, bloggers, y en general profesionales de la web se reunen a compartir sus proyectos y sus ideas.

DELM en Santiago

Después de que se llevara acabo DELM en Mexico, Bogota, Medellin y Sincelejo, Lina Ceballos publico un articulo invitandonos a hacer un DELM en nuestra ciudad, y no mucho tiempo después, Maria del Carmen hizo un DELM en Quito, y Daniel Falcón nos conto como fue el DELM en Lima.  Bueno, entonces ahora me toca a mi en Santiago :)

En el poco tempo que he llevado en Santiago, me he dado cuenta que la comunidad web es grande y bien establecida, y mientras en otras ciudades como Quito y Medellín el DELM es como una semilla para crear una comunidad web, creo que en Santiago DELM servirá como un foro para compartir ideas y proyectos de una manera mucho mas casual que por ejemplo First Tuesday (al cual asistí anoche, que por si es un evento impresionante, pero eso lo dejare para otro articulo.)

Pero porque un Domingo?

La primera vez que escuche de el concepto de Sunday Morning o Domingo en la Mañana lo primero que pensé fue, pero quien se va a levantar un domingo en la mañana a ir a una cosa de estas? Yo ya había participado en BarCamps, WordCamps, RefreshMiami, South Florinda Interactive Marketing Assoc., BlogOrlando y otros eventos relacionados que son de el mismo estilo, pero nunca un Domingo.  Es mas, primero me pareció una pésima idea, pero después caí en cuenta que si se hace un domingo, y en la mañana, solo la gente mas apasionada y mas comprometida con sus proyectos serian los únicos que harían ese pequeño sacrificio. Ese es el tipo gente que de verdad quiero conocer, y los emprendedores que siempre estamos buscando en PulsoSocial.

Información del evento:

Fecha: Domingo, Marzo 8, 2009
Hora: 10:30am – 1:30pm
Ubicación:
Starbucks
Calle San Sebastián, 2946, Las Condes
Santiago, Chile

Confirma tu asistencia en Facebook

El mapa

starbucks

VN:F [1.0.9_379]

Ancelot Anuncios, Programación, Tecnología , ,

KeyEvent simple en java

Tuesday, 24 de February de 2009

Este código me fué de mucha ayuda cuando recién empecé a ver algo de java en el instituto, espero que le sirva a las nuevas generaciones de programadores.

Acá tenemos un keyListener, su función es captar los eventos del teclado,tanto con o sin modificadores, esto se refiere a si el usuario usa SHIFT o no.

El código está funcionando, es autónomo, para ejecutar el ejemplo se debe agregar al proyecto a darle RUN.

JAVA:
  1. package keyListener;
  2.  
  3. import javax.swing.*;
  4. import java.awt.event.*;
  5. import java.awt.BorderLayout;
  6. import java.awt.Dimension;
  7.  
  8. public class KeyEventDemo extends JPanel
  9. implements KeyListener,
  10. JTextArea displayArea;
  11. JTextField typingArea;
  12. static final String nuevaLinea = "\n";
  13.  
  14. public KeyEventDemo() {
  15. super(new BorderLayout());
  16.  
  17. JButton button = new JButton("Clear");
  18. button.addActionListener(this);
  19.  
  20. typingArea = new JTextField(20);
  21. typingArea.addKeyListener(this);
  22.  
  23. displayArea = new JTextArea();
  24. displayArea.setEditable(false);
  25. JScrollPane scrollPane = new JScrollPane(displayArea);
  26. scrollPane.setPreferredSize(new Dimension(375, 125));
  27.  
  28. add(typingArea, BorderLayout.PAGE_START);
  29. add(scrollPane, BorderLayout.CENTER);
  30. add(button, BorderLayout.PAGE_END);
  31. }
  32.  
  33. /** Handle the key typed event from the text field. */
  34. public void keyTyped(KeyEvent e) {
  35. displayInfo(e, "KEY TYPED: ");
  36. }
  37.  
  38. /** Handle the key pressed event from the text field. */
  39. public void keyPressed(KeyEvent e) {
  40. displayInfo(e, "KEY PRESSED: ");
  41. }
  42.  
  43. /** Handle the key released event from the text field. */
  44. public void keyReleased(KeyEvent e) {
  45. displayInfo(e, "KEY RELEASED: ");
  46. }
  47.  
  48. /** Handle the button click. */
  49. public void actionPerformed(ActionEvent e) {
  50. //Limpia los componentes de texto.
  51. displayArea.setText("");
  52. typingArea.setText("");
  53.  
  54. //Vuelve el foco al área de tipeo.
  55. typingArea.requestFocusInWindow();
  56. }
  57.  
  58. protected void displayInfo(KeyEvent e, String s){
  59. String keyString, modString, tmpString,
  60. actionString, locationString;
  61.  
  62. int id = e.getID();
  63. if (id == KeyEvent.KEY_TYPED) {
  64. char c = e.getKeyChar();
  65. keyString = "key character = '" + c + "'";
  66. } else {
  67. int keyCode = e.getKeyCode();
  68. keyString = "key code = " + keyCode
  69. + " ("
  70. + KeyEvent.getKeyText(keyCode)
  71. + ")";
  72. }
  73.  
  74. int modifiers = e.getModifiersEx();
  75. modString = "modificadores = " + modifiers;
  76. tmpString = KeyEvent.getModifiersExText(modifiers);
  77. if (tmpString.length()> 0) {
  78. modString += " (" + tmpString + ")";
  79. } else {
  80. modString += " (sin modificadores)";
  81. }
  82.  
  83. actionString = "¿Tecla de acción? ";
  84. if (e.isActionKey()) {
  85. actionString += "SI";
  86. } else {
  87. actionString += "NO";
  88. }
  89.  
  90. locationString = "Ubicación tecla: ";
  91. int location = e.getKeyLocation();
  92. if (location == KeyEvent.KEY_LOCATION_STANDARD) {
  93. locationString += "standard";
  94. } else if (location == KeyEvent.KEY_LOCATION_LEFT) {
  95. locationString += "izquierda";
  96. } else if (location == KeyEvent.KEY_LOCATION_RIGHT) {
  97. locationString += "derecha";
  98. } else if (location == KeyEvent.KEY_LOCATION_NUMPAD) {
  99. locationString += "numpad";
  100. } else {
  101. // (location == KeyEvent.KEY_LOCATION_UNKNOWN)
  102. locationString += "desconocido";
  103. }
  104.  
  105. displayArea.append(s + nuevaLinea
  106. + "    " + keyString + nuevaLinea
  107. + "    " + modString + nuevaLinea
  108. + "    " + actionString + nuevaLinea
  109. + "    " + locationString + nuevaLinea);
  110. displayArea.setCaretPosition(displayArea.getDocument().getLength());
  111. }
  112.  
  113. /**
  114. * Se crea la GUI y se muestra.
  115. */
  116. private static void createAndShowGUI() {
  117. //Se crea y setea la ventana.
  118. JFrame frame = new JFrame("KeyEventDemo");
  119. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  120.  
  121. //Se crea y setea el content pane.
  122. JComponent newContentPane = new KeyEventDemo();
  123. newContentPane.setOpaque(true); //content panes deben ser opacos
  124. frame.setContentPane(newContentPane);
  125.  
  126. //Muestra la ventana
  127. frame.pack();
  128. frame.setVisible(true);
  129. }
  130.  
  131. public static void main(String[] args) {
  132. //Creando y mostrando la gui de esta aplicación.
  133. javax.swing.SwingUtilities.invokeLater(new Runnable() {
  134. public void run() {
  135. createAndShowGUI();
  136. }
  137. });
  138. }
  139. }

VN:F [1.0.9_379]

Ancelot Programación, java , , ,

SDK v1.1 de Android ya está disponible

Wednesday, 11 de February de 2009

El software que nos permite desarrollar aplicaciones que corran en equipos con Android como Sistema Operativo, ha sido actualizado a la versión 1.1 release 1.

Según se informa en la página de los desarrolladores, los cambios incluidos en esta nueva versión no son muchos, pero recomiendan actualizarla con el objeto de aprovechar nuevas APIs y una nueva imagen del emulador.

powered by Wordpress Multibox Plugin v1.3.5

android sdk

android sdk

El detalle de las modificaciones que incluye la actualización se pueden ver en este link. Para quienes deseen descargarla, lo pueden hacer desde este otro link.

VN:F [1.0.9_379]

Ancelot Programación , ,

Niño de Singapur crea programa para iPhone a los 9 años

Thursday, 5 de February de 2009

powered by Wordpress Multibox Plugin v1.3.5

programador de 9 añosUn niño de Singapur de apenas nueve años es el autor de una nueva aplicación de iPhone descargada más de 4.000 veces de la tienda iTunes en las últimas dos semanas, informó hoy la prensa local.

Lim Ding Wen, en cuarto curso de primaria, ha creado un programa llamado "Doodle Kids" que permite a los usuarios del iPhone pintar con los dedos tocando la pantalla táctil del aparato y después borrar la pantalla agitando el teléfono.

"Creé el programa para mis hermanas pequeñas, a las que les gusta dibujar", dijo Lim. Sus hermanas tienen 3 y 5 años.

Este niño prodigio, que a los nueve años maneja ya con fluidez hasta seis lenguajes de programación informática, comenzó a usar el computador cuando sólo tenía dos años y desde entonces ha completado hasta 20 programas de elaboración propia.

Su padre, un ingeniero informático, comparte la afición del hijo y confiesa que cada mañana, ambos revisan las estadísticas de iTunes para comprobar cuál ha recibido más descargas.

Lim trabaja ahora en una nueva aplicación para el iPhone, un juego de cienciaficción titulado "Invader Wars".

VN:F [1.0.9_379]
Rating: 6.0/10 (1 voto cast)

Ancelot Programación