elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: 1 [2] 3 4 5
11  Programación / Java / contribución pruebas unitarias asynchronas en: 18 Julio 2019, 09:36 am
esta es una contribución pequeña

Cuando haces prueba a código que es asynchrono junit  muestra mensaje inesperado y te manda al demonio mostrándote el dedo del medio como cuando le dices a la panchita que quieres hacer cosas indecorosas con ella

Este es un código de ejemplo de como hacer una prueba unitaria a código que es asynchrono

Código
  1. package testingasync;
  2.  
  3. import java.util.concurrent.CountDownLatch;
  4. import java.util.concurrent.TimeUnit;
  5. import org.junit.Test;
  6. import static org.junit.Assert.*;
  7.  
  8. public class asyn_gretting_should_Test {
  9.  
  10.    private static interface Callback<T> {
  11.        void call(T t);
  12.    }
  13.  
  14.    private static class AssynGreating {
  15.  
  16.        public void sayHi(String name, Callback<String> callback) {
  17.            new Thread(() -> callback.call("hi " + name)).start();
  18.        }
  19.    }
  20.  
  21.    @Test
  22.    public void say_hi() throws InterruptedException {
  23.        CountDownLatch countDownLatch = new CountDownLatch(1);
  24.        StringBuilder stringBuilder = new StringBuilder();
  25.        new AssynGreating().sayHi("luis", (name) -> {
  26.            stringBuilder.append(name);
  27.            countDownLatch.countDown();
  28.        });
  29.        countDownLatch.await(1, TimeUnit.SECONDS);
  30.        assertEquals("hi luis", stringBuilder.toString());
  31.    }
  32. }
  33.  
  34.  

pro favor den una respuesta aunque sea troll pero no me rachasen y no me respondan
12  Programación / Java / contribución mini ejemplo de lenguaje interpretado en: 15 Noviembre 2018, 21:32 pm
hola para todos aquellos que se preguntan como crear su propio evaluador de expresiones del tipo 5*4 +3 -2 *(5) a qui les tengo un pequeño ejemplito en menos de 81 lineas y sin usar regex


Código
  1. package javaapplication17;
  2.  
  3. import java.util.HashMap;
  4.  
  5. public class Interpreter {
  6.  
  7.    private final HashMap<String, String> variables = new HashMap<>();
  8.  
  9.    public static void main(String[] args) {
  10.         Interpreter interpreter = new Interpreter();
  11.        //calculation
  12.        for (String text : new String[]{
  13.            "1",
  14.            "12",
  15.            "5^2",
  16.            "12+13",
  17.            "4+2-1",
  18.            "(1)",
  19.            "(4/2+1*2)",
  20.            "(1+3)+(5+6-3+13)",
  21.            "3*(4+2)",
  22.            "3*4*(5+3)+16+2",
  23.            "8*7+(4+3+6*(5+4))",}) {
  24.  
  25.            System.out.println("text= " + text + " " + interpreter.evalProgram(text));
  26.        }
  27.        //programing feature booleans
  28.        System.out.println();
  29.        System.out.println("booleans");
  30.        System.out.println();
  31.        for (String text : new String[]{
  32.            "1<2",
  33.            "2>3",
  34.            "12>13",
  35.            "12<14",
  36.            "(5+1)<14",
  37.            "14<(5+1)",
  38.            "(1+2)-3<4*2",
  39.            "true",
  40.            "false",
  41.            "false&true",
  42.            "false&true",
  43.            "false&true|true",
  44.            "true&false|true",
  45.            "1+2<3&4<2|false",
  46.            "(1+2)*3-1<4|false&true|(3+1)<4"}) {
  47.            Interpreter programEvaluetor = new Interpreter();
  48.            final String evalBoolean = programEvaluetor.evalProgram(text);
  49.            System.out.println(text + " = " + evalBoolean);
  50.        }
  51.        //simple scripts
  52.  
  53.        System.out.println();
  54.        System.out.println("programs");
  55.        System.out.println();
  56.        for (String text : new String[]{
  57.            "1",
  58.            "3+2-1",
  59.            "3+2-1\n1+2+1",
  60.            "4*5\n5*3",
  61.            "5*8\n4+2\n5+5+5",
  62.            "a=3*4\na",
  63.            "b=3*4\nb",
  64.            "abc=3*4\nabc\ncde=2*5+1\ncde",
  65.            "a=2\nb=3\nc=a+b\nc",
  66.            "c=true\nc",}) {
  67.            Interpreter programEvaluetor = new Interpreter();
  68.            System.out.println("=======program================================");
  69.            System.out.println(text);
  70.            System.out.println("=======endprogram=============================");
  71.            System.out.println("=======output program=========================");
  72.            System.out.println(programEvaluetor.evalProgram(text));
  73.            System.out.println("=======end output program=====================");
  74.            System.out.println("");
  75.            System.out.println("");
  76.        }
  77.  
  78.        //conditionals programs
  79.        System.out.println();
  80.        System.out.println("conditionals programs");
  81.        System.out.println();
  82.        for (String text : new String[]{
  83.            "1\nif(true){\n2\n}",
  84.            "if(false){\n1\n}",
  85.            "2\nif(true){\n1\n}",
  86.            "2\nif(false){\n1\n}\n3",
  87.            "1\nif(true){\n2\n}\n3",}) {
  88.            Interpreter programEvaluetor = new Interpreter();
  89.            System.out.println("=======program================================");
  90.            System.out.println(text);
  91.            System.out.println("=======endprogram=============================");
  92.            System.out.println("=======output program=========================");
  93.            System.out.println(programEvaluetor.evalProgram(text));
  94.            System.out.println("=======end output program=====================");
  95.            System.out.println("");
  96.            System.out.println("");
  97.        }
  98.        //conditionals programs
  99.    }
  100.  
  101.    private boolean evalCondition(String condition) {
  102.        final String evalBoleanExpresion = evalBoleanExpresion(condition.substring(3, condition.length() - 2));
  103.        return Boolean.parseBoolean(evalBoleanExpresion);
  104.    }
  105.  
  106.    private String evalProgram(final String expresion) {
  107.        String[] comands = expresion.split("\n");
  108.        String result = "";
  109.        boolean run = true;
  110.        for (int i = 0; i < comands.length; i++) {
  111.            String comand = comands[i];
  112.            if (comand.startsWith("if")) {
  113.                run = evalCondition(comand);
  114.                continue;
  115.            }
  116.  
  117.            if (comand.startsWith("}")) {
  118.                run = true;
  119.                continue;
  120.            }
  121.  
  122.            if (run) {
  123.                final String evalComand = evalComand(comand);
  124.                if (!evalComand.isEmpty()) {
  125.                    result += evalComand + "\n";
  126.                }
  127.            }
  128.  
  129.        }
  130.  
  131.        return result.isEmpty() ? "" : result.substring(0, result.length() - 1);
  132.    }
  133.  
  134.    private String evalComand(String expresion) {
  135.        String[] comandPart = expresion.split("=");
  136.        String result = "";
  137.  
  138.        if (comandPart.length == 1) {
  139.            String candidate = comandPart[0];
  140.            if (candidate.equals("true") || candidate.equals("false")) {
  141.                return eval(expresion);
  142.            }
  143.            if (candidate.chars().allMatch(Character::isLetter)) {
  144.                return "" + variables.get(candidate);
  145.            }
  146.            return eval(expresion);
  147.        }
  148.        if (comandPart.length == 2) {
  149.            variables.put(comandPart[0], (eval(comandPart[1])));
  150.  
  151.            return "";
  152.        }
  153.  
  154.        return result;
  155.    }
  156.  
  157.    private String eval(String inputString) {
  158.  
  159.        String buffer = "";
  160.        int beginIndex = -1;
  161.  
  162.        for (int i = 0; i < inputString.length(); i++) {
  163.            final char character = inputString.charAt(i);
  164.            if (character == '(') {
  165.                beginIndex = i;
  166.                buffer = "";
  167.                buffer += character;
  168.            }
  169.            if (!buffer.isEmpty()) {
  170.                String charLetter = (character + "");
  171.                buffer += charLetter.equals("(") || charLetter.equals(")") ? "" : charLetter;
  172.            }
  173.            if (character == ')') {
  174.  
  175.                buffer += character;
  176.                inputString = inputString.substring(0, beginIndex) + evalParentesis(buffer) + inputString.substring(beginIndex + buffer.length());
  177.                i = 0;
  178.                buffer = "";
  179.  
  180.            }
  181.        }
  182.  
  183.        return "" + evalExpresion(inputString);
  184.    }
  185.  
  186.    private String evalParentesis(String coeficientString) {
  187.  
  188.        return evalExpresion(coeficientString.substring(1, coeficientString.length() - 1));
  189.    }
  190.  
  191.    private String evalExpresion(String expresion) {
  192.        String result = "";
  193.        if (expresion.contains("<")
  194.                || expresion.contains(">")
  195.                || expresion.contains("&")
  196.                || expresion.contains("|")
  197.                || expresion.contains("true")
  198.                || expresion.contains("false")) {
  199.            result = evalBoleanExpresion(expresion);
  200.        } else {
  201.            result = evalAddExpresion(expresion) + "";
  202.        }
  203.  
  204.        return result;
  205.    }
  206.  
  207.    private int evalAddExpresion(String expresion) {
  208.        char[] characters = expresion.toCharArray();
  209.        String buffer = "";
  210.        int result = 0;
  211.        for (int i = 0; i < expresion.length(); i++) {
  212.            char character = expresion.charAt(i);
  213.            buffer += character;
  214.            if (i == characters.length - 1
  215.                    || characters[i + 1] == '+'
  216.                    || characters[i + 1] == '-') {
  217.  
  218.                if (buffer.startsWith("-")) {
  219.                    result -= evalSub(buffer.replace("-", ""));
  220.                } else {
  221.                    result += evalSub(buffer.replace("+", ""));
  222.                }
  223.                buffer = "";
  224.            }
  225.  
  226.        }
  227.  
  228.        return result;
  229.    }
  230.  
  231.    private int evalSub(final String expresion) {
  232.        char[] characters = expresion.toCharArray();
  233.        String buffer = "";
  234.        int result = 1;
  235.        for (int i = 0; i < expresion.length(); i++) {
  236.            char character = expresion.charAt(i);
  237.            buffer += character;
  238.            if (i == characters.length - 1
  239.                    || characters[i + 1] == '*'
  240.                    || characters[i + 1] == '/') {
  241.  
  242.                if (buffer.startsWith("/")) {
  243.                    result /= evalExpo(buffer.replace("/", ""));
  244.                } else {
  245.                    result *= evalExpo(buffer.replace("*", ""));
  246.                }
  247.                buffer = "";
  248.            }
  249.  
  250.        }
  251.  
  252.        return result;
  253.    }
  254.  
  255.    private int evalExpo(final String expresion) {
  256.        char[] characters = expresion.toCharArray();
  257.        String buffer = "";
  258.        int result = 1;
  259.        for (int i = expresion.length() - 1; i >= 0; i--) {
  260.            char character = expresion.charAt(i);
  261.            buffer = character + buffer;
  262.            if (i == 0 || characters[i - 1] == '^') {
  263.                result = (int) (Math.pow(Integer.parseInt(evalElement(buffer.replace("^", ""))), (result)));
  264.                buffer = "";
  265.            }
  266.  
  267.        }
  268.        return result;
  269.    }
  270.  
  271.    private String evalElement(String expresion) {
  272.  
  273.        if (expresion.chars().allMatch(Character::isLetter)) {
  274.            return variables.get(expresion);
  275.        } else {
  276.            return expresion;
  277.        }
  278.  
  279.    }
  280.  
  281.    private String evalBoleanExpresion(String expresion) {
  282.        char[] characters = expresion.toCharArray();
  283.        String buffer = "";
  284.        boolean result = true;
  285.        for (int i = 0; i < expresion.length(); i++) {
  286.            char character = expresion.charAt(i);
  287.            buffer += character;
  288.            if (i == characters.length - 1
  289.                    || characters[i + 1] == '&'
  290.                    || characters[i + 1] == '|') {
  291.  
  292.                if (buffer.startsWith("&")) {
  293.                    result &= Boolean.parseBoolean(evalBooleanElement(buffer.replace("&", "")));
  294.                } else if (buffer.startsWith("|")) {
  295.                    result |= Boolean.parseBoolean(evalBooleanElement(buffer.replace("|", "")));
  296.                } else {
  297.                    result = Boolean.parseBoolean(evalBooleanElement(buffer));
  298.                }
  299.                buffer = "";
  300.            }
  301.  
  302.        }
  303.  
  304.        return result + "";
  305.    }
  306.  
  307.    private String evalBooleanElement(final String expresion) {
  308.        String result = "";
  309.        if (expresion.contains("<") || expresion.contains(">")) {
  310.  
  311.            String[] split = expresion.split("<|>");
  312.            String left = evalExpresion(split[0]);
  313.            String right = evalExpresion(split[1]);
  314.  
  315.            if (expresion.contains("<")) {
  316.                result = "" + (Integer.parseInt(left) < Integer.parseInt(right));
  317.  
  318.            }
  319.            if (expresion.contains(">")) {
  320.                result = "" + (Integer.parseInt(left) > Integer.parseInt(right));
  321.            }
  322.        } else {
  323.            result = expresion;
  324.        }
  325.  
  326.        return result;
  327.    }
  328. }
  329.  
  330.  
  331.  

en un futuro agregare la funcionalidad de de agregar variables funciones bucles y condicionales para que se paresca a javascript   ::)

porfavor cuentenme lo que quieran del post preguntas traumas amensas o respuesta troll pero no me ignoren por que soy una perra de atención


diganme si lo han usado y en que
13  Programación / Java / Patrom mvp en: 7 Noviembre 2013, 02:25 am
Patron mvp

Pobre tu que esta buscando en la página 10 de google tratando de buscar algún código ejemplo de como se usar el patrón mvp y solo encuentras las pagina de Martin Fowler que te parece demasiado complicada para que la entiendas (si la llegas a leer por que esta en ingles)
Te dedico estas palabras aburridas y académicas que por compromiso y por presunción innecesaria escribo para malograrte la vida y mostrar que se mucho mas que tu y que puede escribir mucho sin decir nada que valga la pena.
Si ya sé que solo quieres ver código que no te gusta leer así que te recomiendo que te saltes a la parte práctica donde se muestra el código y los diagramas de clases

Limitaciones del proyecto
Este proyecto no es por ningún motivo amplio ni toma en consideración todos los puntos que deben ser tomados en cuenta para desarrollar una aplicación digna de un profesional. Se pasaron por alto varios temas como el manejo de errores e hilos. Tampoco voy a decir que soy un experto en el patrón ni que lo he usado en varios proyectos así que no puedo dar consejos de como funciona el patrón en aplicaciones grandes ni los posibles errores que presente en ellos.

Que es el patrón mvp
El patrón de diseño mvp es un patrón para el desarrollo de interface de usuario que se caracteriza por trabajar con una clase y dos interfaces. La primera clase es llamada presentador que actúa como intermediario entre la vista (como interface) y el modelo (como interface).
Poniendo en palabras que cualquier programador entienda, El presentador es una clase concreta  y por el constructor le pasamos la vista y el modelo en forma de interfaces.
La comunicación entre la vista y el presentador se desarrolla mediante el uso del patrón observador. La comunicación entre el modelo y el presentador es también por el patrón observador pero es poco usual. Tranquilo vamos ha desarrollar un ejemplo practico para que los conceptos queden claro XD somos programadores y nos gusta el código


Deja de trabajar sin pensar lo que haces y toma en cuenta que cualquier patrón que uses tiene sus desventajas y que debes escoger siempre el que mas se amolde a tus necesidades nada es perfecto “no existen las balas de plata”

Que desventajas y limitaciones tiene
•   Requiere una gran cantidad de código que no vale la pena hacer en proyectos fáciles y simples
•   Requiere una inmensa cantidad de código para conectar los presentadores con sus vistas y sus modelos Requiere que crees interfaces para que puedas usar el patrón observador por cada acción (como presionar un botón)
•   Requiere que pienses en la vista en forma abstracta lo cual es difícil para los formularios muy grandes

Cuales son sus ventajas
•   La vista puede ser fácilmente cambiada
•   La vista puede ser trabajada incluso por una persona diferente
•   La vista y el modelo pueden cambiar y ser muy diferentes sin que eso afecte demasiado el sistema.
 La verdad es que todo cambio en el modelo siempre obliga cambios en la vista y lo único que se logra con estar menos “desacoplado” es que sea mas fácil hacer cambio pero siempre va haber cambios. La única forma de cambiar el modelo sin malograr la vista es mediante el uso de frameworks que autogeneren la vista mediante reflexión

Cuando usarlo
Recomiendo que uses el patrón para migrar un sistema de escritorio legacy (prácticamente todos están en estado legacy no se hagan los locos) en el cual la vista allá pasado de moda y los usuario quiera algo mas sexy, mas cool, mas “empresarial”. Me refiero a que se puede hacer poco a poco refactoring y cambiar a pedazos la vista  
Recomiendo también usarlo cuando se quiera hacer aplicaciones de escritorio en las cuales se quiera mantener varias vistas en simultaneo (swing , javafx, awt)

Cuales son sus variantes
•   No usar interface para el modelo
•   Ni tampoco tener un modelo para formularios simples
•   Considerar alas clases Servicio como modelo

Diagrama de clases del patrón
 


Aplicación practica
Vamos a mostrar un simple mantenimiento de personal usando swing y el patrón mvp
Diagrama de clases

En este caso decido no crear una interface para el modelo por que no le vi el sentido
 

Interface grafica


 
Fragmentos de código

Código
  1. public class PresentadorMantenimientoPersonal {
  2.  
  3. private final PanMantenimientoPersonal panMantenimientoPersonal;
  4. private final ServicioPersonal servicioPersonas;
  5.  
  6. public PresentadorMantenimientoPersonal(
  7. PanMantenimientoPersonal panMantenimientoPersonalM,
  8. ServicioPersonal servicioPersonas) {
  9. this.panMantenimientoPersonal = panMantenimientoPersonalM;
  10. this.servicioPersonas = servicioPersonas;
  11. }
  12.  
  13. public void run() {
  14.  
  15. panMantenimientoPersonal.addAgregoListener(new AgregoListener() {
  16. @Override
  17. public void fueAgregado() {
  18. agrego();
  19. }
  20. });
  21. panMantenimientoPersonal.addModificoListener(new ModificoListener() {
  22. @Override
  23. public void fueModificado() {
  24. modificado();
  25. }
  26. });
  27. panMantenimientoPersonal.addEliminadoListener(new EliminadoListener() {
  28. @Override
  29. public void fueEliminado() {
  30. eliminado();
  31. }
  32. });
  33. }
  34.  
  35. private void eliminado() {
  36. Personal leeido = panMantenimientoPersonal.leerPersonal();
  37. servicioPersonas.eliminar(leeido.getCodigo());
  38. panMantenimientoPersonal.mostrar(servicioPersonas.lista());
  39.  
  40. }
  41.  
  42. private void modificado() {
  43. Personal leeido = panMantenimientoPersonal.leerPersonal();
  44. servicioPersonas.modifica(leeido);
  45. panMantenimientoPersonal.mostrar(servicioPersonas.lista());
  46.  
  47. }
  48.  
  49. private void agrego() {
  50. Personal leeido = panMantenimientoPersonal.leerPersonal();
  51. servicioPersonas.agregar(leeido);
  52. panMantenimientoPersonal.mostrar(servicioPersonas.lista());
  53. }
  54.  
  55. }
  56.  

Código
  1. import java.util.List;
  2.  
  3.  
  4. public interface PanMantenimientoPersonal {
  5.  
  6. void addAgregoListener(AgregoListener agregoListener);
  7.  
  8. void addModificoListener(ModificoListener modificoListener);
  9.  
  10. void addEliminadoListener(EliminadoListener eliminadoListener);
  11.  
  12. Personal leerPersonal();
  13.  
  14. void mostrar(List<Personal> lista);
  15.  
  16. }
  17.  

Código
  1. import java.awt.Container;
  2.  
  3. public class PanMantenimientoPersonalSwing extends JPanel implements
  4. PanMantenimientoPersonal {
  5. public PanMantenimientoPersonalSwing() {
  6. setLayout(null);
  7.  
  8. JLabel lblNombre = new JLabel("codigo");
  9. lblNombre.setBounds(10, 11, 56, 14);
  10. add(lblNombre);
  11.  
  12. txtCodigo = new JTextField();
  13. txtCodigo.setBounds(73, 8, 86, 20);
  14. add(txtCodigo);
  15. txtCodigo.setColumns(10);
  16.  
  17. JLabel label = new JLabel("Nombre");
  18. label.setBounds(10, 39, 56, 14);
  19. add(label);
  20.  
  21. txtNombre = new JTextField();
  22. txtNombre.setColumns(10);
  23. txtNombre.setBounds(73, 36, 86, 20);
  24. add(txtNombre);
  25.  
  26. JLabel lblApellido = new JLabel("Apellido");
  27. lblApellido.setBounds(10, 67, 56, 14);
  28. add(lblApellido);
  29.  
  30. txtApellido = new JTextField();
  31. txtApellido.setColumns(10);
  32. txtApellido.setBounds(73, 64, 86, 20);
  33. add(txtApellido);
  34.  
  35. JLabel lblEdad = new JLabel("Edad");
  36. lblEdad.setBounds(10, 95, 56, 14);
  37. add(lblEdad);
  38.  
  39. txtEdad = new JTextField();
  40. txtEdad.setColumns(10);
  41. txtEdad.setBounds(73, 92, 86, 20);
  42. add(txtEdad);
  43.  
  44. JScrollPane scrollPane = new JScrollPane();
  45. scrollPane.setBounds(10, 148, 419, 142);
  46. add(scrollPane);
  47.  
  48. table = new JTable();
  49. table.setModel(new DefaultTableModel(new Object[][] {}, new String[] {
  50. "codigo", "nombre", "apellido", "edad", "sueldo" }));
  51. scrollPane.setViewportView(table);
  52.  
  53. JLabel lblSueldo = new JLabel("sueldo");
  54. lblSueldo.setBounds(10, 123, 56, 14);
  55. add(lblSueldo);
  56.  
  57. txtSueldo = new JTextField();
  58. txtSueldo.setColumns(10);
  59. txtSueldo.setBounds(73, 120, 86, 20);
  60. add(txtSueldo);
  61.  
  62. JButton btnAgrega = new JButton("agrega");
  63. btnAgrega.addActionListener(new ActionListener() {
  64. public void actionPerformed(ActionEvent e) {
  65. for (AgregoListener agregoListener : listaAgregoListener) {
  66. agregoListener.fueAgregado();
  67. }
  68. }
  69. });
  70. btnAgrega.setBounds(175, 7, 89, 23);
  71. add(btnAgrega);
  72.  
  73. JButton btnModifica = new JButton("modifica");
  74. btnModifica.addActionListener(new ActionListener() {
  75. public void actionPerformed(ActionEvent e) {
  76. for (ModificoListener modificoListener : listaModificoListener) {
  77. modificoListener.fueModificado();
  78. }
  79. }
  80. });
  81. btnModifica.setBounds(175, 35, 89, 23);
  82. add(btnModifica);
  83.  
  84. JButton btnElimina = new JButton("elimina");
  85. btnElimina.addActionListener(new ActionListener() {
  86. public void actionPerformed(ActionEvent e) {
  87. for (EliminadoListener eliminadoListener : listaEliminadoListener) {
  88. eliminadoListener.fueEliminado();
  89. }
  90. }
  91. });
  92. btnElimina.setBounds(175, 63, 89, 23);
  93. add(btnElimina);
  94. }
  95.  
  96. private List<AgregoListener> listaAgregoListener = new ArrayList<>();
  97. private List<ModificoListener> listaModificoListener = new ArrayList<>();
  98. private List<EliminadoListener> listaEliminadoListener = new ArrayList<>();
  99. private JTextField txtCodigo;
  100. private JTextField txtNombre;
  101. private JTextField txtApellido;
  102. private JTextField txtEdad;
  103. private JTable table;
  104. private JTextField txtSueldo;
  105.  
  106. @Override
  107. public void addAgregoListener(AgregoListener agregoListener) {
  108. listaAgregoListener.add(agregoListener);
  109. }
  110.  
  111. @Override
  112. public void addModificoListener(ModificoListener modificoListener) {
  113. listaModificoListener.add(modificoListener);
  114. }
  115.  
  116. @Override
  117. public void addEliminadoListener(EliminadoListener eliminadoListener) {
  118. listaEliminadoListener.add(eliminadoListener);
  119. }
  120.  
  121. @Override
  122. public Personal leerPersonal() {
  123. int codigo = Integer.parseInt(txtCodigo.getText());
  124. String nombre = txtNombre.getText();
  125. String apellido = txtApellido.getText();
  126. double sueldo = Double.parseDouble(txtSueldo.getText());
  127. int edad = Integer.parseInt(txtEdad.getText());
  128. return new Personal(codigo, nombre, apellido, sueldo, edad);
  129. }
  130.  
  131. @Override
  132. public void mostrar(List<Personal> lista) {
  133. DefaultTableModel model = (DefaultTableModel) table.getModel();
  134. model.setRowCount(0);
  135. for (Personal personal : lista)
  136. model.addRow(aFila(personal));
  137.  
  138. }
  139.  
  140. private Vector<Object> aFila(Personal personal) {
  141. Vector<Object> result = new Vector<>();
  142. result.add(personal.getCodigo());
  143. result.add(personal.getNombre());
  144. result.add(personal.getApellido());
  145. result.add(personal.getSueldo());
  146. result.add(personal.getEdad());
  147.  
  148. return result;
  149. }
  150. }
  151.  


Código
  1.  
  2. import java.awt.BorderLayout;
  3.  
  4. import javax.swing.JFrame;
  5.  
  6. public class Main {
  7. public static void main(String[] args) {
  8. PanMantenimientoPersonalSwing panMantenimientoPersonal = new PanMantenimientoPersonalSwing();
  9. new PresentadorMantenimientoPersonal(panMantenimientoPersonal//
  10. , new ServicioPersonal())//
  11. .run();
  12.  
  13. JFrame jFrame = new JFrame();
  14. jFrame.setSize(500, 400);
  15. jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  16. jFrame.setLocationRelativeTo(null);
  17. jFrame.setLayout(new BorderLayout());
  18. jFrame.getContentPane().add(panMantenimientoPersonal,
  19. BorderLayout.CENTER);
  20. jFrame.setVisible(true);
  21. }
  22. }
  23.  

Aprendizaje y evolución
En el desarrollo se puede apreciar que el manejo de eventos no puede ser mas simple son solamente varios ArrayList que guardan varios eventos
Supongamos por ejemplo que un día el jefecito se le ocurrió que la vista esta fea y que le gustaría cambiar a javafx bueno pues simplemente cambiaríamos el main de esta manera

Código
  1. PanMantenimientoPersonalJfx panMantenimientoPersonal = new PanMantenimientoPersonalJfx ();
  2. new PresentadorMantenimientoPersonal(panMantenimientoPersonal//
  3. , new ServicioPersonal())//
  4. .run();
  5. mostrarEnVentana(panMantenimientoPersonal) ;

Solo crearíamos la vista imprentaríamos los métodos de la interface PanMantenimientoPersonal pero todo el resto de la aplicación no tendría que cambiar
Para los haraganes como descargar y usar el código

Por favor necesito que me ataquen
Traumas, críticas (destructivas), trolleos, venganzas, asuntos personales, propuestas indecentes, amenazas y tal vez preguntas son bienvenidas
14  Programación / Java / creacion de graficos estadisticos en tiempo real en: 30 Mayo 2013, 18:52 pm
este código es genial y se ve muy bien me permite crear gráficos estadísticos en tiempo real es muy util para hacer monitoreos

porfavor respondan aunquesea para insultar pero no me ignoren

Código
  1.  
  2. import java.awt.BorderLayout;
  3.  
  4.  
  5. import org.jfree.chart.ChartFactory;
  6. import org.jfree.chart.ChartPanel;
  7. import org.jfree.chart.JFreeChart;
  8. import org.jfree.data.time.Second;
  9. import org.jfree.data.time.DynamicTimeSeriesCollection;
  10.  
  11. import java.awt.Component;
  12. import java.awt.Container;
  13. import java.awt.Dimension;
  14. import java.awt.LayoutManager;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.sql.Time;
  18. import java.util.Random;
  19.  
  20. import javax.swing.JFrame;
  21. import javax.swing.JPanel;
  22. import javax.swing.Timer;
  23.  
  24. public class FormularioPrincipal extends JFrame {
  25.  
  26. public FormularioPrincipal() {
  27.  
  28. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29. setLayout(new BorderLayout());
  30. add(new PanelGraphicaEnTiempoReal());
  31. }
  32.  
  33. public static void main(String[] args) {
  34. FormularioPrincipal frmPrincipal = new FormularioPrincipal();
  35. frmPrincipal.setVisible(true);
  36. }
  37.  
  38. private static class PanelGraphicaEnTiempoReal extends JPanel implements ActionListener {
  39.  
  40. private DynamicTimeSeriesCollection contenidoSerieDinamica;
  41. private JFreeChart graphicaDeTiempo;
  42. private Timer cronometro;
  43. private Random generadorDeAleatorios;
  44.  
  45. private int segundo;
  46. private int minuto;
  47. private int hora;
  48. private int dia;
  49. private int mes;
  50. private int año;
  51. private int indiceSerie;
  52. private String nombreDeLaSerie;
  53.  
  54.  
  55.  
  56. public PanelGraphicaEnTiempoReal() {
  57.  
  58. generadorDeAleatorios=new Random();
  59. cronometro=new Timer(200,this);
  60.  
  61.  
  62. contenidoSerieDinamica = new DynamicTimeSeriesCollection(
  63. getCantidadDeSeries(),
  64. getCantidadPorSerie(),
  65. enSegundos());//crea el contenido de la serie dinamica
  66.  
  67. contenidoSerieDinamica.setTimeBase(new Second(segundo=0,minuto=0,hora=0,dia=1,mes=1,año=2013));//pone el primer instante
  68. contenidoSerieDinamica.addSeries(valoresDeLaSerie(), indiceSerie=0,nombreDeLaSerie="ventas");//agrega una serie
  69.  
  70. graphicaDeTiempo = ChartFactory.createTimeSeriesChart(
  71. getTitulo(),
  72. getEtiquetaDelasX(),
  73. getEtiquetaDelasY(),
  74. contenidoSerieDinamica,
  75. tieneLeyenda(),
  76. tienToolTip(),
  77. tineUrl());//crea una grafica de tiempo
  78.  
  79. ChartPanel panelDeLaGraphica = new ChartPanel(graphicaDeTiempo);//crea un panel para graficas
  80.  
  81.  
  82. add(panelDeLaGraphica);
  83.  
  84. cronometro.start();
  85. }
  86.  
  87. private float[] valoresDeLaSerie() {
  88. float[] respuesta = new float[getCantidadPorSerie()];
  89. Random creadorDeAleatorios = new Random();
  90. for (int i = 0; i < respuesta.length; i++) {
  91. respuesta[i]=creadorDeAleatorios.nextFloat();//crea un aleatorio;
  92. }
  93. return respuesta;
  94. }
  95.  
  96. @Override
  97. public void actionPerformed(ActionEvent e) {
  98. contenidoSerieDinamica.advanceTime();//avansa el tiempo
  99. contenidoSerieDinamica.appendData(new float[]{generadorDeAleatorios.nextFloat()});//agrega un aleatorio
  100. }
  101.  
  102. private boolean tineUrl() {
  103. return false;
  104. }
  105.  
  106. private boolean tienToolTip() {
  107. return true;
  108. }
  109.  
  110. private boolean tieneLeyenda() {
  111. return true;
  112. }
  113.  
  114. private String getEtiquetaDelasY() {
  115.  
  116. return "ventas";
  117. }
  118.  
  119. private String getEtiquetaDelasX() {
  120. return "hh:mm:ss";
  121. }
  122.  
  123. public String getTitulo() {
  124.  
  125. return "ventas";
  126. }
  127.  
  128. private Second enSegundos() {
  129. return new Second();
  130. }
  131.  
  132. public int getCantidadPorSerie() {
  133.  
  134. return 120;
  135. }
  136.  
  137. public int getCantidadDeSeries() {
  138. return 1;
  139. }
  140.  
  141.  
  142. }
  143.  
  144. }
  145.  
15  Programación / Java / como crear formularios en: 11 Diciembre 2011, 03:20 am
Esta vez voy hablar con evidencias
Veamos como un desarrollador normal creando un formulario


Código
  1.  
  2. package com.ejemplo;
  3.  
  4. public class PanFeoContacto extends javax.swing.JPanel {
  5.  
  6.    public PanFeoContacto() {
  7.        initComponents();
  8.    }
  9.  
  10.  
  11.    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  12.    private void initComponents() {
  13.  
  14.        jLabel1 = new javax.swing.JLabel();
  15.        jLabel2 = new javax.swing.JLabel();
  16.        jTextField1 = new javax.swing.JTextField();
  17.        jTextField2 = new javax.swing.JTextField();
  18.        jLabel3 = new javax.swing.JLabel();
  19.        jTextField3 = new javax.swing.JTextField();
  20.        jLabel4 = new javax.swing.JLabel();
  21.        jSpinner1 = new javax.swing.JSpinner();
  22.  
  23.        jLabel1.setText("Nombre");
  24.  
  25.        jLabel2.setText("Apellido");
  26.  
  27.        jLabel3.setText("Direcion");
  28.  
  29.        jLabel4.setText("Edad");
  30.  
  31.        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
  32.        this.setLayout(layout);
  33.        layout.setHorizontalGroup(
  34.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  35.            .addGroup(layout.createSequentialGroup()
  36.                .addContainerGap()
  37.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  38.                    .addGroup(layout.createSequentialGroup()
  39.                        .addComponent(jLabel1)
  40.                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  41.                        .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE))
  42.                    .addGroup(layout.createSequentialGroup()
  43.                        .addComponent(jLabel2)
  44.                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  45.                        .addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 460, Short.MAX_VALUE))
  46.                    .addGroup(layout.createSequentialGroup()
  47.                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  48.                            .addComponent(jLabel3)
  49.                            .addComponent(jLabel4))
  50.                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  51.                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  52.                            .addComponent(jSpinner1, javax.swing.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE)
  53.                            .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 459, Short.MAX_VALUE))))
  54.                .addContainerGap())
  55.        );
  56.        layout.setVerticalGroup(
  57.            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  58.            .addGroup(layout.createSequentialGroup()
  59.                .addContainerGap()
  60.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  61.                    .addComponent(jLabel1)
  62.                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  63.                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  64.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  65.                    .addComponent(jLabel2)
  66.                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  67.                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  68.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  69.                    .addComponent(jLabel3)
  70.                    .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  71.                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  72.                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  73.                    .addComponent(jLabel4)
  74.                    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  75.                .addContainerGap(191, Short.MAX_VALUE))
  76.        );
  77.    }// </editor-fold>                        
  78.  
  79.  
  80.    // Variables declaration - do not modify                    
  81.    private javax.swing.JLabel jLabel1;
  82.    private javax.swing.JLabel jLabel2;
  83.    private javax.swing.JLabel jLabel3;
  84.    private javax.swing.JLabel jLabel4;
  85.    private javax.swing.JSpinner jSpinner1;
  86.    private javax.swing.JTextField jTextField1;
  87.    private javax.swing.JTextField jTextField2;
  88.    private javax.swing.JTextField jTextField3;
  89.    // End of variables declaration                  
  90.  
  91. }
  92.  
  93.  

todo el código es incomprensible inmantenible difícil de entender de modificar es mas el ide no te permite editar casi la totalidad de código
es mas para modificarlo tienes que usar una serie de pasos en el ide eso de precodigo postcodigo solo funciona con netbeans y require un horrible xml de ayuda que te lo crea el ide solo funciono en netbeans
 estorba si usas eclipse y esto solo es un ejemplo trivial la realidad es que me vi en la desgracia de usar formulario 10 veces más complicados con 10 veces de código con más de 50 componentes con paneles dentro de otro y con diferentes layauts y enzima al estilo wizard para que quepa en la pantalla casi me dieron ganas de renunciar al ver que cada vez que modifica un componente todo se desarmaba desaparecían paneles enteros y solo funcionaba con la paleta
Solo pensar en hacerle refactoring es ciencia ficion


Bueno pues ágamos lo a mano solo usando swing


Código
  1. package com.ejemplo;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Container;
  5. import java.awt.GridBagConstraints;
  6. import java.awt.GridBagLayout;
  7. import java.awt.Insets;
  8. import javax.swing.JLabel;
  9. import javax.swing.JPanel;
  10. import javax.swing.JSpinner;
  11. import javax.swing.JTextField;
  12. import javax.swing.SpinnerNumberModel;
  13.  
  14.  
  15. public class PanelContacto {
  16.  
  17.    private final JPanel panel = new JPanel();
  18.  
  19.  
  20.    public PanelContacto() {
  21.        Insets insets = new Insets(5, 5, 5, 5);
  22.        panel.setLayout(new GridBagLayout());
  23.        panel.add(new JLabel("Nombre"), new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
  24.        panel.add(new JTextField(), new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
  25.        panel.add(new JLabel("Apellido"), new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
  26.        panel.add(new JTextField(), new GridBagConstraints(1, 2, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
  27.        panel.add(new JLabel("Direcion"), new GridBagConstraints(0, 3, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
  28.        panel.add(new JTextField(), new GridBagConstraints(1, 3, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
  29.        panel.add(new JLabel("Edad"), new GridBagConstraints(0, 4, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0));
  30.        panel.add(new JSpinner(new SpinnerNumberModel(1, 1, 100, 1)), new GridBagConstraints(1, 4, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0));
  31.  
  32.    }
  33.  
  34.    public Container getPanel() {
  35.        JPanel respuesta = new JPanel();
  36.        respuesta.setLayout(new BorderLayout());
  37.        respuesta.add(panel, BorderLayout.NORTH);
  38.        return respuesta;
  39.    }
  40. }
  41.  
  42.  

Es feo pero es 100 veces mejor que la opción anterior además requiere algunos hacks(los layauts de swing son malos)


Luego de hacer refactoring y usar el patrón de diseño builder + interface fluida

Código
  1. package com.ejemplo;
  2.  
  3.  
  4. import java.awt.Container;
  5. import javax.swing.JSpinner;
  6. import javax.swing.JTextField;
  7. import javax.swing.SpinnerNumberModel;
  8.  
  9. public class PanelConPatronBuilder {
  10.  
  11.    public PanelConPatronBuilder() {
  12.    }
  13.  
  14.    public Container getPanel() {
  15.  
  16.        return new PanelBuilder().agregaFila("Nombre", new JTextField()).
  17.                agregaFila("Apellido", new JTextField()).
  18.                agregaFila("Direcion", new JTextField()).
  19.                agregaFila("Edad", new JSpinner(new SpinnerNumberModel(1, 1, 100, 1))).getPanel();
  20.    }
  21. }
  22.  
  23.  
  24.  

U eso es genial mira el código habla por sí solo pero requiera ayuda de una clase echa en casa que tendrías que mantener y crear en caso de que la pierdas 

Aquí está la clase


Código
  1. package com.ejemplo;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Container;
  5. import java.awt.GridBagConstraints;
  6. import java.awt.GridBagLayout;
  7. import java.awt.Insets;
  8. import javax.swing.JComponent;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11.  
  12. public class PanelBuilder {
  13.  
  14.    private final Container panel=new JPanel();
  15.    private final Insets insets = new Insets(5, 5, 5, 5);
  16.    int cont = -1;
  17.  
  18.    public PanelBuilder() {
  19.  
  20.        panel.setLayout(new GridBagLayout());
  21.    }
  22.  
  23.  
  24.  
  25.  
  26.    public PanelBuilder agregaFila(String nombre,JComponent jTextField) {
  27.        panel.add(new JLabel(nombre), restricionDeEtiqueta(++cont));
  28.        panel.add(jTextField, restricionComponente(cont));
  29.        return  this;
  30.    }
  31.  
  32.    private GridBagConstraints restricionComponente(int cont) {
  33.        return new GridBagConstraints(1, cont, 1, 1, 1, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.HORIZONTAL, insets, 0, 0);
  34.    }
  35.  
  36.    private GridBagConstraints restricionDeEtiqueta(int cont) {
  37.        return new GridBagConstraints(0, cont, 1, 1, 0, 0, GridBagConstraints.FIRST_LINE_START, GridBagConstraints.NONE, insets, 0, 0);
  38.    }
  39.  
  40.    public Container getPanel() {
  41.        JPanel respuesta = new JPanel();
  42.        respuesta.setLayout(new BorderLayout());
  43.        respuesta.add(panel, BorderLayout.NORTH);
  44.        return respuesta;
  45.    }
  46. }
  47.  


Ahora si es enserio usando la ayuda de un librería externa bien echa

package com.ejemplo;

import java.awt.Container;
import org.metawidget.swing.SwingMetawidget;
Código
  1. public class PanelContactoMetaWidtget {
  2.  
  3.    public Container getPanel() {
  4.        SwingMetawidget swingMetawidget =new SwingMetawidget();
  5.        swingMetawidget.setToInspect(new Contacto());
  6.        return swingMetawidget;
  7.    }
  8. }
  9.  

Y requiere un pojo de toda la vida
package com.ejemplo;

Código
  1. public class Contacto {
  2.  
  3.    private String nombre;
  4.    private String apellido;
  5.    private String direcion;
  6.    private int edad;
  7.  
  8.    public String getNombre() {
  9.        return nombre;
  10.    }
  11.  
  12.    public void setNombre(String nombre) {
  13.        this.nombre = nombre;
  14.    }
  15.  
  16.    public String getApellido() {
  17.        return apellido;
  18.    }
  19.  
  20.    public void setApellido(String apellido) {
  21.        this.apellido = apellido;
  22.    }
  23.  
  24.    public String getDirecion() {
  25.        return direcion;
  26.    }
  27.  
  28.  
  29. public void setDirecion(String direcion) {
  30.        this.direcion = direcion;
  31.    }
  32.  
  33.    public int getEdad() {
  34.        return edad;
  35.    }
  36.  
  37.    public void setEdad(int edad) {
  38.        this.edad = edad;
  39.  
  40.    }
  41. }
  42.  
y esta librería te obliga a programar orientado a objetos lo cual es bueno porque en un proyecto grande igual tendrías todo partido en varias clases pongámonos esta clase librería te pide que crees la clase contacto que es un pojo que lo arias de toda maneras en caso de que el contacto cambie automáticamente la vista se actualizaría
Digamos que tienes 100 paneles de contacto en caso de que cambie el contacto solo modificarías la clase contacto


metawidget http://metawidget.org/
builder http://architects.dzone.com/news/factories-builders-and-fluent-






16  Programación / Java / Como redactar tu código para exponer dudas en: 2 Enero 2011, 06:17 am
Siempre que alguien me pide ayuda en lo que se refiere a programación me quedo asi  :-X  :rolleyes:  :(
veo el código y es imposible de entender y cuando digo que es difícil de entender digo que es casi imposible es en ese momento que sierro mi boca para no hacerle recordar a todo su familia por la frustración que me producen al tratar de entender lo que hacen una vez que les entiendo viene la parte mas difícil no es que quiera hablar de mi pensamiento filosófico ni dármela de genio ni nada tengo que aplicar algunas técnicas razonables casi científicas creo que la única forma de entender un problema y solucionarlo es cuestión de una abstracción y usar mi cerebro en forma lo mas razonablemente posible usar todo lo que me enseñaron en el colegio con lo que se refiere a la lógica, el método científico, el análisis es decir que es bueno desempolvar el hemisferio izquierdo
Luego me pongo a ver trato de dividir el problema en pequeñas partes independientes que se pueden probar en independientemente y comprobar pedacito por pedacito si esta bien trato de ver los síntomas pero o sorpresa eso es casi imposible

Miro el código y todo esta acoplado no puedo asegurarme de que una clase esta correcta porque ni siquiera se bajo que posible valores la clase murió

"•$"$"•$"•$  >:( está demasiado acoplado
No puedo hacer absolutamente nada a menos que configure 3 ficheros properties 5 xml levantar un servidor web levantar una base de datos levantar un servidor ldap configurar el path de quien sabe qué y además el código solo funciona en linux por que se le ocurrió que ejecuta programas por la consola dependiente de linux con lo mucho que odio linux yo soy gek soy informático pero no lo suficiente gek para usar linux (que comience el flame)
Luego de levantar el servidor en la nube requerido para que corra el programa me doy cuenta de que si toco cualquier cosa el sistema explota y solo termino empeorando todo por tratar de "arreglarlo" "•$"•$•$%&& todo depende de todo que si hago un cambio en una clase se apaga la luz del vecino y se prende mi televisor nadie sabe porque   :xD algunas veces me pregunto parase que usa magia negra nadie sabe cómo funciona
lo peor de todo es que el programa ni siquiera me avisa que fallo (la mayoría de bese miserablemente) y tengo que hacer una secuencia larga de pasos en el gui para reproducir el error y luego hacer otra serie de pasos largos para comprobar que hubo un error



17  Seguridad Informática / Nivel Web / respuesta contradicotria en sql injection en: 5 Septiembre 2010, 05:36 am
hola foreros
estoy tratando de obtener información de una pagina vulnerable(no me gusta hacer maldades solo es un interés académico)
bien reconocí que la pagina es vulnerable por que al ponerle en el url

Código:
xxxxxxx.php?id='
me voto de resultado

Citar
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\\' AND active = 'T'' at line 1

con lo cual ya se que es mysql con php y ademas me pasa un pedaso del query y que es vulnerable

luego al tratar de averiguar cuantas columnas vota la consulta puse

xxxxxxx.php?id=4 order by 10/*

me voto error pero con 9 no con lo que averigüe que tiene 9 columnas

acá viene lo extraño cuando trato de sacar mas información usando union

Código:
xxxxxxx.php?id=4 union all select 1,2,3,4,5,6,7,8,9/*

me vota esta respuesta contradictoria
Citar
The used SELECT statements have a different number of columns


18  Programación / Java / ide para beans biding en: 24 Julio 2009, 05:24 am
alguien conoce algun ide que me perimita trabajar con beans biding que no me cancelel el codigo
o alguien sabe si existe un plugin para eclipse para usar beans biding
19  Programación / Java / manejando el tamaño relativo a el de la resolucion de la pantalla en: 12 Julio 2009, 22:41 pm
evitando que sea demasiado grande

Código:
package com.luchitowork.graficos;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Container;

import javax.swing.UIManager;

public class Proseos_graficos{

    public static void Centrate(Container frame){
        Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize=frame.getSize();
        if(frameSize.height>screenSize.height){
            frameSize.height=screenSize.height;
        }
        if(frameSize.width>screenSize.width){
            frameSize.width=screenSize.width;
        }
        frame.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
    }
    public static void tamañoenprocentaje(Container frame, Double poraltura,Double porancho){
        //poner el alto y el ancho en porcentaje de la ventana
         poraltura=poraltura/100;
         porancho=porancho/100;
         frame.setSize((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()*porancho),(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()*poraltura));
    }
   
}


centrando ventana

Código:
this.setLocationRelativeTo(null);

maximisando Ventana

Código:
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
20  Programación / Java / conexion cerrada? en: 22 Abril 2009, 07:57 am

Código:
        Connection con = null;
        try {
            //FactoriTableModel fac=new FactoriTableModel();
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection("jdbc:odbc:dsnDBLE", "ELIO", "");
            ResultSet rs = con.prepareCall("listProducts").executeQuery();
            while (rs.next()) {
                System.out.print(con.isClosed()+"\n");
                System.out.print(rs.getString(1)+"\n");
            }
            //jTable1.setModel(fac.getTableModel(con,"listProducts"));
        } catch (ClassNotFoundException f) {
            f.getMessage();
        } catch (SQLException f) {
            f.getMessage();
        }


esto me imprime
Citar
false
Beverages
false
Beverages
false
Condiments
false
Condiments
false
Condiments
..
..........


como me puede explicar como es posible que haga una consulta con la conexion serrada
Páginas: 1 [2] 3 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines