Home » noviembre 2013
Limitaciones en la herencia en Java

herencia en Java
Limitaciones en la herencia en Java Todos los campos y métodos de una clase son siempre accesibles para el código de la misma clase. Para controlar el entrada desde otras clases, y para controlar la herencia por las subclase, los miembros (atributos y metodos) de las clases tienen tres modificadores probables de control de entrada: public: Los miembros declarados public son accesibles en cualquier espacio en que sea accesible la clase, y son heredados por las subclases. private: Los miembros declarados private son accesibles solo en la particular clase. protected: Los miembros declarados protected son accesibles sólo para sus subclases Por ejemplo: class Padre { // Hereda de Object // Atributos private int numeroFavorito, nacidoHace, dineroDisponible; // Métodos public int getApuesta() { return numeroFavorito; } protected int getEdad() { return nacidoHace; } private int getSaldo() { return dineroDisponible; } } class Hija extends Padre { // Definición } class Visita { // Definición } En este ejemplo, un objeto de la clase Hija, hereda los tres atributos (numeroFavorito, nacidoHace y dineroDisponible) y los tres métodos ( getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podrá invocarlos. Cuando se llame al método getEdad() de un objeto de la clase Hija, se devolverá el valor de la variable de instancia nacidoHace de ese objeto, y no de uno de la clase Padre. Sin embargo, un objeto de la clase Hija, no podrá invocar al método getSaldo() de un objeto de la clase Padre, con lo que se evita que el Hijo conozca el estado de la cuenta corriente de un Padre. La clase Visita, solo podra alcanzar al metodo getApuesta(), para averiguar el numero favorito de un Padre, pero de ninguna forma podra conocer ni su saldo, ni su edad (seria una indiscrecion, ¿no?).

LOS THREADS O PROGRAMACIÓN MULTIHILO en Java

MULTIHILO en Java
LOS THREADS O PROGRAMACIÓN MULTIHILO en Java A. Introducción Mientras la ejecucion de los proyectos tienen lugar muchas operaciones que precisan de una espera; en busca de una interaccion con el exterior, dejando pasar el tiempo, esperando a que otro proceso acabe... Java faculta que estos tiempos desaprovechados sean utilizados por el programador para hacer algunas tareas, y asi aprovechar el microprocesador mientras toda la ejecucion del programa. Para ello implementa el concepto de threads, o hilos de control del programa. Mediante el uso de varios threads, se alcanza ejecutar varios procesos en paralelo, de manera que cuando uno de ellos este esperando determinado evento, permita que el microprocesador ejecute determinadoo de los otros threads en espera. Cuando el evento que el primer thread esperaba sucede, de nuevo se intercambian los threads para que el primer thread continue su ejecucion. Todo esto viene a suplir a la técnica de exclusión mutua denominada utilización de semáforos, extendida entre los programadores de C en UNIX. B. Utilización de thread Para crear un thread, se ha de implementar una clase, extendiendo la clase fundamento Runnable, y crear un objeto de la clase Thread. Este objeto representara un nuevo hilo de control, que sera accionado cuando invoquemos al metodo start() del thread. En ese momento este hilo se activara, ejecutando (si el planificador de hilos estima que es el momento), el metodo run() de la clase en que todo esto suceda. Por ejemplo, el proximo proyecto emplea dos hilos, el hilo común main, y el hilo thDemo que creamos: import java.io.*; import java.net.*; class ThreadDemo implements Runnable { ThreadDemo() { Thread thDemo = new Thread( this, "ThDemo" ); thDemo.start(); } public void run() { try { Thread.sleep(3000); } catch( InterruptedException e ) { } System.out.println("Saliendo del hilo hijo"); } public static void main( String args[] ){ new ThreadDemo(); try { for ( int i = 5 ; i >0 ; i-- ) { System.out.println(" Seg: " + i ); Thread.sleep(1000); } } catch( InterruptedException e ) { } System.out.println("Saliendo del main"); } } Ambos hilos aguardan utilizando el metodo sleep() de la clase Thread; thDemo tres segundos, y main cinco segundos. Java utilizara los tres segundos de thDemo para ir aguardando los tres primeros segundos del hilo main. Por lo tanto la salida por pantalla al ejecutar el proyecto es: prompt> java ThreadDemo Seg: 5 Seg: 4 Seg: 3 Saliendo del hilo hijo Seg: 2 Seg: 1 Saliendo del hilo main C. Sincronización de threads Mientras la ejecucion de un programa, muchas veces varios procesos han de hacer tareas de una manera sincronizada, actuando en un algun orden. Para ello en Java se emplean la palabra reservada syncronized, en la declaracion de los procesos con este tipo de caracteristicas. Los procesos declarados como syncronized mediante la utilización de excepciones, y de las funciones wait() y notifiy(), respectivamente esperarán a que otro proceso acabe antes de continuar su ejecución. A continuacion se va a ir viendo como implementar el clasico asunto de exclusion mutua conocido como el asunto del productor/consumidor, en el que dos procesos han de alcanzar a una rabo comun, en la que el proceso productor inserta fundamentos en la pila, y el proceso consumidor ha de ir consumiendo los fundamentos en la pila, cada vez que sean insertados: class ColaSincronizada { int n; boolean bandera = false; synchronized int obten() { if ( !bandera ) try wait(); catch( InterruptedException e ); System.out.println( "Obtenido: " + n ); bandera = false; notify(); return n; } synchronized void coloca( int paramN ) { if ( bandera ) try wait(); catch( InterruptedException e ); n = paramN; bandera =true; System.out.println( "Colocado: " + n ); notify(); } } class Productor implements Runnable { ColaSincronizada colaProductor; Productor( ColaSincronizada paramCola ) { colaProductor = paramCola; new Thread( this, "Producer" ).start(); } public void run() { int i = 0; while ( true ) // Bucle infinito colaProductor.coloca( i++ ); } } class Consumidor implements Runnable { ColaSincronizada colaConsumidor; Consumidor( ColaSincronizada paramCola ) { colaConsumidor = paramCola; new Thread( this, "Consumidor" ).start(); } public void run() { while ( true ) // Bucle infinito colaConsumidor.obten( ); } } public static void main( String args[] ) { ColaSincronizada colaLocal = new ColaSincronizada(); new Productor( colaLocal ); new Consumidor( colaLocal ); } La salida del proyecto sera: Colocado: 1 Obtenido: 1 Colocado: 2 Obtenido: 2 Colocado: 3 Obtenido: 3 . . . D. Y mucho más La utilización de programación concurrente y de los hilos de Java con toda su potencia va mucho más allá de los metas de este tutorial. Lo que aquí se ha visto es simplemente una introducción para que el lector sea consciente de cuál es la potencia de este tipo de programación. La utilización de los threads se extiende con métodos para que el programador controle la alternancia de los hilos. Estos métodos son: suspend(); Bloquea temporalmente la ejecución de un hilo. resume(); Activa un hilo bloqueado. stop(); Termina la ejecución de un hilo.

Java, Eclipse- Errores comunes con LibGDX

Unable to resolve target 'android-x' Lo que hay que realizar es realizar click derecho en el Package del programa de Android, ir a propiedades. Dentro de la ventana de propiedades seleccionar Android a la izquierda y escoger una versión de Android a la derecha. Si no encuentras alternativas debes descargarlas desde el Android SDK Manager. Para descargar desde el SDK Manager debes abrirlo desde la barra de dispositivos de Eclipse y descargar las veriones de Android que quieras The project cannot be build since... Ve a las propiedades del programa de html, selecciona Web Toolkit a la izquierda, a la derecha haz click en Configure SDKs... Ve a Downloa y a Open Browser, descarga GWT SDK Cuando termine extraelo en determinado espacio y en Configure SDKs... selecciona Add y busca lo que habéis descargado Unbound Ve a las propiedades del programa de html, ve a Java Build Path y elimina GWT SDK [unbound]. Si es indispensable haz click en Add Library... Doble click en Google Web Toolkit y selecciona Default SDK

Operaciones avanzadas en la herencia en Java

herencia en Java
Operaciones avanzadas en la herencia en Java a.) Introducción En el capítulo previo ya se han estudiado los bases de la herencia en Java. Sin embargo, el lenguaje tiene muchas más probabilidades en este aspecto, como estudiaremos a continuación. Conviene recordar que estamos utilizando el codigo de la clase MiPunto, cuyo codigo se puede descubrir en el artículo "II.5. Clases y Objetos" de este tutorial. b.) Los fundamentos globales: static A veces se quiere crear un metodo o una variable que se emplea afuera del contexto de cualquier instancia, es decir, de una forma global a un programa. Todo lo que se tiene que realizar es declarar estos fundamentos como static. Esta es la forma que tiene Java de implementar funciones y variables globales. Por ejemplo: static int a = 3; static void metodoGlobal() { // implementación del método } No se puede realizar referencia a this o a super dentro de una metodo static. Mediante atributos estaticos, todas las instancias de una clase asimismo del lugar propio para variables de instancia, comparten un lugar comun. Esto es provechoso para modelizar casos de la vida real. Otro apariencia en el que es provechoso static es en la creacion de metodos a los que se puede llamar directamente diciendo el nombre de la clase en la que estan declarados. Se puede llamar a cualquier metodo static, o mencionarse a cualquier variable static, provechosoizando el operador punto con el nombre de la clase, sin necesidad de crear un objeto de ese tipo: class ClaseStatic { int atribNoStatic = 42; static int atribStatic = 99; static void metodoStatic() { System.out.println("Met. static = " + atribStatic); } static void metodoNoStatic() { System.out.println("Met. no static = " + atribNoStatic); } } El próximo codigo es capaz de llamar a metodoStatic y atribStatic nombrando directamente la clase (sin objeto, sin new), por haber sido declarados static. System.out.println("At. static = " + ClaseStatic.atribStatic); ClaseStatic.metodoStatic(); // Sin instancia new ClaseStatic().metodoNoStatic(); // Hace falta instancia Si ejecutamos este proyecto obtendriamos: At. static = 99 Met. static = 99 Met. no static = 42 Debe tenerse en cuenta que en un método estático tan sólo puede hacerse refernecia a variables estáticas. c.) Las clases y métodos abstractos: abstract Hay situaciones en las que se requiere definir una clase que represente un concepto abstracto, y por lo tanto no se pueda proporcionar una implementacion completa de algunos de sus metodos. Se puede declarar que ciertos métodos han de ser sobrescritos en las subclases, utilizando el modificador de tipo abstract. A estos métodos también se les llama responsabilidad de subclase. Cualquier subclase de una clase abstract debe implementar todos los métodos abstract de la superclase o bien ser declarada también como abstract. Cualquier clase que contenga métodos declarados como abstract también se tiene que declarar como abstract, y no se podrán crear instancias de felicidad clase (operador new). Por último se pueden declarar constructores abstract o métodos abstract static. Veamos un ejemplo de clases abstractas: abstract class claseA { abstract void metodoAbstracto(); void metodoConcreto() { System.out.println("En el metodo tangible de claseA"); } } class claseB extends claseA { void metodoAbstracto(){ System.out.println("En el metodo abstracto de claseB"); } } La clase abstracta claseA ha implementado el método tangible metodoConcreto(), pero el método metodoAbstracto() era abstracto y por eso ha tenido que ser redefinido en la clase hija claseB. claseA referenciaA = new claseB(); referenciaA.metodoAbstracto(); referenciaA.metodoConcreto(); La salida de la ejecucion del proyecto es: En el metodo abstracto de claseB En el metodo tangible de claseA

PAQUETES en Java

PAQUETES en Java
PAQUETES en Java A. Introducción Los paquetes son el mecanismo por el que Java faculta agrupar clases, interfaces, excepciones y constantes. De esta forma, se agrupan conjuntos de estructuras de datos y de clases con determinado tipo de relacion en comun. Con la idea de mantener la reutilizacion y facilidad de uso de los paquetes extendidos es conveniente que las clases e interfaces contenidas en los mismos tengan alguna relacion funcional. De esta forma los desarrolladores ya tendran una idea de lo que estan buscando y facilmente sabran que pueden descubrir dentro de un paquete. B. Creación de un paquete a.) Declaración Para declarar un paquete se emplea la sentencia package seguida del nombre del paquete que estemos creando: package NombrePaquete; La articula que ha de seguir un fichero fuente en Java es: Una única sentencia de paquete (opcional). Las sentencias de importación deseadas (opcional). La declaración de una (y sólo una) clase pública (public). Las clases privadas del paquete (opcional). Por lo tanto la sentencia de declaración de paquete ha de ser la primera en un archivo fuente Java. b.) Nomenclatura Para que los nombres de paquete puedan ser facilmente reutilizados en toda una compañia o inclusive en todo el mundo es conveniente darles nombres unicos. Esto puede ser una tarea realmente tediosa dentro de una mayor empresa, y plenamente imposible dentro de la comunidad de Internet. Por eso se propone asignar como paquetes y subpaquetes el nombre de dominio dentro de Internet. Se verá un ejemplo para un dominio que se llamase japon.magic.com, un nombre apropiado sería com.magic.japon.paquete. c.) Subpaquetes Cada paquete puede tener a su vez paquetes con contenidos parecidos, de manera que un programador probablemente estara interesado en estructurar sus paquetes de manera jerarquica. Para eso se determinan los subpaquetes. Para crear un subpaquete bastará con Guardar el paquete hijo en un directorio Paquete/Subpaquete. Así una clase dentro de un subpaquete como Paquete.Subpaquete.clase estará codificada en el fichero Paquete/Subpaquete.java. El JDK determina una variable de ámbito denominada CLASSPATH que gestiona las rutas en las que el JDK busca los subpaquetes. El directorio actual suele estar siempre incluido en la variable de ámbito CLASSPATH. Para más información sobre el JDK véase el "Apéndice I. JDK" de este tutorial. C. Uso de un paquete Con el fin de importar paquetes ya extendidos se emplea la sentencia import seguida del nombre de paquete o paquetes a importar. Se pueden importar todos los fundamentos de un paquete o sólo algunos. Para importar todas las clases e interfaces de un paquete se emplea el metacaracter *: import PaquetePrueba.*; Tambien tiene lugar la probabilidad de que se deseen importar solo determinadas de las clases de un cierto paquete o subpaquete: import Paquete.Subpaquete1.Subpaquete2.Clase1; Para alcanzar a los fundamentos de un paquete, no es indispensable importar explicitamente el paquete en que aparecen, sino que basta con referenciar el fundamento tras una especificacion completa de la ruta de paquetes y subpaquetes en que se encuentra. Paquete.Subpaquetes1.Subpaquete2.Clase_o_Interfaz.elemento En la API de Java se incluyen un conjunto de paquetes ya extendidos que se pueden incluir en cualquier aplicación (o applet) Java que se desarrolle. Estos paquetes son explicados con más detalle en el capítulo "III.1.Bibliotecas de la API de Java" de este tutorial. D. Ámbito de los fundamentos de un paquete Al introducir el concepto de paquete, aparece la duda de cómo proteger los fundamentos de una clase, qué visibilidad presentan respecto al resto de fundamentos del paquete, respecto a los de otros paquetes... Ya en la herencia se vieron los identificadores de visibilidad public (visible a todas las clases), private (no visible mas que para la particular clase), y protected (visible a clases hijas). Por defecto se estima los fundamentos (clases, variables y metodos) de un mismo paquete como visibles entre ellos (supliendo las denominadas clases amigas de C++).

Java development, Comentarios anonimos en la web

anonimos en la web
En el caso de sitios de comentarios ?en abierto?, cualquier usuario puede agregar su comentario a contenidos publicados. La consecuencia: ese comentario es indexado por buscadores conjuntamente con el texto del artículo redactado por el autor. De rostro a un buscador, contribuye a la indexacion de los contenidos. Por tanto el nivel de los comentaristas y sus comentarios influyen en la valoracion que un usuario puede realizar de un sitio web. Experiencias y sorpresas Desde mis experiencias personales como autor, desarrollador y responsable técnico de sitios web, he tenido experiencias encontradas: Comentarios de mayor valor: Se dan situaciones en las que los comentarios aportan más que el propio artículo como es el caso de Flash ¿Cuál es el problema? y los comentarios de Maelmori acerca de SVG y sus posibilidades. Utilizacion de un articulo como un foro de ayuda: n-Gage de Nokia: todo en uno, un articulo publicado de manera rapida para mostrar un producto, ha servido como un chico foro de apoyo entre usuarios potenciales y actuales del telefono-consola de Nokia e inclusive algunos intentos de ligue. Confunsión y venganza: Un artículo sin título intencionado, CSS sitios que dan un paso adelante comenzó a recibir mayor porción de comentarios, algunos con mucha gracia, en los que usuarios simulaban ser protagonistas de la serie juvenil de Antena 3 (España)Un paso adelante. Tras verificar las estadisticas de buscadores, se detecto que el titulo era engañoso por lo que dado el buen posicionamiento de alzado en Google, muchos usuarios que buscaban informacion sobre la serie y sus protagonistas eran redireccionados a este articulo. Decepcionados, se ?vengaban? posteando este tipo de mensajes. Tras un cambio en el título original del artículo a ?CSS: sitios que van un paso por delante?, se ha superado la ?crisis?. Flames: asuntos candentes como Flash si o Flash no o pirateria, encienden debates apasionados en los que, en mi opinion, los comentaristas apenas se leen entre si. Resultado, mas de veinte comentarios por producto desde una perspectiva personal. Insultos: situaciones que comienzan de manera prometedora se transmaneran en algo desagradable debido a el apasionamiento de los comentaristas. Unido en muchas ocasiones a alguna falta de educacion hace que el tono bordee en el agravio o sea directamente ofensivo. Ortografia: el codigo SMS es una verdad que se traslada a la escritura cotidiana. Dependiendo de la edad estimada de los comentaristas, se intuye por la tematica del producto y el apasionamiento. Por otro lado, resulta preocupante la mayor porción de faltas de ortografia que se observan en muchos comentarios. Los usuarios no leen: mayor porcion de comentarios son redactados sin apenas leer ni asimilar ni el contenido del propio articulo ni el de los comentarios anteriores. No solo no se aporta valor al articulo, sino que se redunda en asuntos ya tratados con anterioridad. Código malicioso: usuarios que tratan de introducir en el sistema código HTML y Javascript con el fin de perjudicar el sitio web. Por ejemplo, ventanas ?alert? de Javascript, redirecciones, banners propios, imágenes no autorizadas? Pruebas: chequeo del funcionamiento del sistema de comentarios pulsando el boton ?Enviar comentarios? sin teclear mensaje sdeterminados o introduciendo secuencias de caracteres ?gfgfgfgfgffgfg?. Mensajes improcedentes: un sistema abierto entraña sus riesgos, por ejemplo, nos hemos encontrado anuncios de ?Se vende-Se compra? que nada tienen que ver ni con el contenido del artículo ni mucho menos con la filosofía del sitio web. Felicitaciones y alabanzas: hay mensajes cuyo contenido es exclusivamente dar las gracias por un esfuerzo o felicitar. Aunque a todos nos suena oir esta melodia (tanto como apreciaciónes constructivas), generalmente aportan escaso a un articulo. Para ello está el formulario de contacto. Determinadas conclusiones Personalmente, la experiencia de los comentarios en articulos ha sido positiva pero trabajosa, debido a la necesidad de ?vigilancia? continua del tono funcionario por los usuarios. Antes de beber medidas extremas, como desactivar el sistema, podrian realizarse determinadas acciones correctoras de comportamientos perversos. La primera medida es recordar que la probabilidad de relatar un articulo se cimienta en el tono constructivo y educado de los relatarios y que la no observacion de estas reglas pueden dar espacio a la edicion o eliminacion de los relatarios. Para eludir que un sistema de comentarios se convierta en un vertedero podemos beber medidas como: Configurar artículos como ?comentables? o ?no comentables? según la temática que aborden imposibilitando que los usuarios añadan sus comentarios. Separación artículo y comentarios, destinando estos a página aparte. De este modo se separaría claramente el artículo de los comentarios. Registro de usuarios: Obligar a un registro mínimo a los usuarios como mail y contraseña, para reducir la anonimidad, fuente de tentaciones de malicia. Este punto haría que los comentarios resultaran más ?meditados?. Filtrado de comentarios mediante un proyecto que detecte palabras malsonantes o codigo malicioso y tome medidas como diferir la publicacion, alertar al autor por correo o directamente no dar de alta el comentario. Un consejo: oculta las medidas de seguridad para eludir que tu sistema se convierta en un juego de burla. Borrado de comentarios: eliminación de aquellos comentarios insultantes o improcedentes. Ortografía ¿Se deberían editar y corregir los errores de ortografía? ¿Hasta que punto? Bloqueo de usuarios: deteccion de aquellos usuarios maliciosos para bloquear su futuro entrada al sistema de comentarios.

Java development, Como diferenciar información de Públicidad

diferenciar información de Públicidad
"Has heredado una mayor tierra" es el eslogan de la campaña del Ministerio de Recurso Ambiente. Esta campaña muestra una serie de imagenes idilicas sin indicar su localizacion con lo que podrian haber sido rodadas en cualquier espacio de Europa o ser imagenes obtenidas de determinado banco de imagenes... Junto a estas imagenes se narra un texto generico con frases idilicas escaso comprometidas (Manten el silencio, cuida esta tierra...). Esta campaña es pura publicidad. No se indica acciones concretas, no se aporta información, datos, referencias. ¿Cual es el meta de esta campaña?. La misma cierra con el logotipo del Ministerio junto a una pastilla que indica "Desarrollo Sostenible" y la dirección web del Ministerio www.mma.es. Evidentemente al llegar al site no hay ninguna referencia al asunto de desarrollo sostenible y el resto del site tiene una articula escaso entendible con epigrafes del estilo "Procedimientos", "Normativa"... En comun toda la informacion esta enterrada debajo series mas o menos espesas de menus que no suelen llevar a ninguna conclusion clara para participar, comprender que esta pasando, conseguir informacion. Por ejemplo, en el menú relacionado con el "Suceso Prestige", la sección de "últimas noticias" nos lleva a la sección genérica del ministerio de la presidencia. Campaña de los pasos a nivel entre la Cruz Roja y Renfe La campaña de la Cruz Roja sobre los pasos a nivel me desconcertó por varios motivos. - ¿No tiene la Cruz Roja nada mas significativo que realizar que relatar los peligros de los pasos a nivel en España? - ¿No tiene Renfe (la compañia de ferrocarriles española) nada mejor que realizar con su dinero que "publicitar" la precaucion? Digo publicitar porque de nuevo la informacion brilla por su ausencia y el espectador es sometido a un "impacto" de determinado tipo. Por supuesto, esta campaña tiene cero desarrollo en la página de la "Cruz Roja" y Renfe. Supongo que una campaña de publicidad tiene su sentido si despues somos capaces de convertir a los espectadores en determinado tipo de "cliente" o "usuario" pero quedarnos en el impacto y a correr vanaliza mucho la informacion que se presenta y se genera alguna insensibilizacion de los espectadores. Manos Unidas Supongo que la lista de campañas de publicidad que tienen escaso de informacion podria seguir y seguir pero estos 3 asuntos son lo suficientemente delicados como para no tomarlos a la ligera. Si el ecologismo, Cruz Roja y Manos Unidas caen en el lado oscuro del Marketing, es que la cosa está muy mal. El marketing social tiene su sentido y es clave aplicarlo, pero estos ejemplos son 3 casos muy malos y demasiado notables como para dejarlos pasar. Manos Unidas muestra una campaña que si tiene, por lo menos, una estabilidad visual en el site. Pero que siendo un banner no muestra ni un link. Es decir, el usuario puede ver estos anuncios con el texto "Cada minuto una mujer sufre explotacion en Asia" pero no puede pinchar, no puede profundizar, no puede verificar que se esta haciendo, etc... Y como en el resto de ejemplos aqui comentados, todos los spots tienen una produccion excelente, tienen una presencia en medios bastante notable pero no informan... y utilizar estos asuntos para realizar publicidad cuando menos deberia ser moralmente cuestionable y no deberia dejarse pasar. La web es la dispositivo de difusion de informacion por defecto ya que no tiene coste de impresion y se tiene una difusion casi infinita. Estas camapañas, de nuevo, deberian servir para convertir a ciudadanos pasivos en "usuarios"... pero si estas ONGs, Ministerios, etc... siguen ciegos al potencial disponible y eligen seguir lanzando campañas de rostro a la galeria, conseguiremos una sociedad pasiva e insensible.

Java development, Copias en diseños web

Copias en diseños web
Este articulo defiende la copia frente a sus detractores para animar a los autores a que copien y modifiquen las ideas de otros. En el diseño web actual copiar de quienes lo hacen bien es mas indispensable que nunca. El meta es generar los estandares que permitan establecer las fundamentos del buen diseño web para no caer en la re-invencion, economizar esfuerzo y facilitar el uso. La evitación del término ?copiar? La palabra ?copiar? agrada mal, por eso siempre se han utilizado siempre otros terminos mucho mas elegantes; inspiracion, basado en, a dividir de, discipulo de, en la linea de?, son formas de decir que se ha copiado en gran o menor medida a otro autor. Cuando se dice que la prosa de Umbral debe mucho a la de Baroja, no se dice otra cosa que Umbral utiliza/copia muchos fundamentos de la prosa de Baroja, aunque quede mucho más elegante lo primero. La mala imagen de la copia Se suele imaginar al copiador como un ser malévolo en un sótano oscuro, dispuesto a sacar provecho de las ideas de otro sin ningún esfuerzo. Alguien que arruina al creador original y se lucra a su costa. Esta es una idea maniquea que olvida que todos los autores o inventores, especialmente los más conocidos, han copiado. Y eso es precisamente lo que ha permitido a sus obras ser excepcionales: basarse (copiar) en algo anterior. El merito de los masivos creadores ha sido combinar las ideas de otros autores previos de forma diferente, exponerlas de otro modo, introducir cambios o agregar elementos. Los masivos creadores han utilizado creaciones de otros en su propio beneficio, pero no hay nada que oponer a ello, al contrario, es lo normal, de la nada no puede salir nada. La evolucion de las creaciones siempre ha sido asi, copia tras copia, chico cambio tras chico cambio. Ningun mayor autor ha inventado nada de 0 porque reinventar la rueda suele dar como fruto una rueda bastante imperfecta. Los autores reaccionan mal ante la copia Cuando los autores descubren que son copiados o alguien ha utilizado sus ideas se lo cogen mal y se sienten engañados. Por ello el copiador intenta esconder que su artículo es una copia, lo que aun empeora mas la situacion. Un autor copiado deberia estar orgulloso, se le esta reconociendo el merito. Aconsejo tomarse a bien las copias por algúnas razones: Es inevitable, como la muerte y los impuestos. El resultado negativo es minimo. La mayoria de las copias suelen ser de peor calidad que la original y apenas van a quitarle beneficios. El resultado efectivo compensa: Las copias amplian la difusion de la idea original y esto si trae masivos beneficios al autor. Si la copia no es chapucera y triunfa mas que la original, entonces no triunfa por ser copia sino por ser realmente mejor. En ese caso se merece los beneficios que pueda tener y aun tendra mas efectos efectivo para el autor original. Es cierto que en el pasado era sencillo ?robar ideas? de alguien y atribuirselas a uno mismo, esto es el verdadero plagio. Aunque fue descubierto el plagio el autor original lo tenia dificil para llegar a un mayor recurso de difusion y denunciarlo o demostrarlo. Esto ya es imposible que suceda y los plagios se descubren inmediatamente. Vacunarse contra las copias y conseguir beneficios de ellas es sencillo: - Realizar publicas rápidamente las nuevas ideas - Permitir las copias con licencia copyleft. Cuando la copia está permitida, los copiadores citarán al autor original en cada copia, con todos los beneficios que eso le acarrea. Personalmente he perdido la cuenta de los sitios web donde publican copias de mis articulos. Usar licencia copyleft hace quienes copian mis articulos siempre me nombren y me avisen. La difusion de mis articulos gracias a las copias me ha permitido llegar a muchas personas y conseguir clientes para construir mi carrera de consultor de usabilidad independiente. Copiar, también implica mejorar Al identico que todo es mejorable, la idea original tambien lo es. Por ello realizar copias identicas no suele tener mucho sentido. Quien copia tiene la oportunidad de usar el tiempo ahorrado en mejorar la copia. Copiar también implica sacar lo mejor de la idea original. Diferenciar la esencia, lo bueno de la idea original, de lo complementario y superfluo. Copiar solo la esencia y realizar mejoras es lo que distingue a las buenas copias de las malas. Por ello copiar con exito tiene mucho merito. La copia idéntica en la que el copiador no aporta nada, solo contribuye a difundir la idea original, difícilmente va a perjudicar al autor. Superar el miedo a copiar En algunos entornos el miedo a copiar ha sido ampliamente superado, el tramo de la automocion, por ejemplo. Nadie discute que el volante de los coches sea redondo, que tengan cuatro ruedas, el sentido en que se abren las puertas, etc. En esos casos ha aparecido el estándar. Los fabricantes de automoviles han necesitado tiempo hasta percibir las ventajas de los estandares, pero lo han hecho. Al comienzo cada coche era unico y hasta no hace tanto aun existian diferencias muy significativas. Actualmente todos los coches son muy parecidos, pero nadie dice que la creatividad haya muerto en el tramo de la automocion, ni confunde un Mercedes con un Seat. Tiene mucho mérito que cualquier conductor pueda conducir cualquier modelo de coche sin aprendizaje porque los controles son los mismos. Inclusive los volantes de los coches de Formula 1 con usuarios muy específicos y metas muy diferentes, siguen siendo redondos. La originalidad y la creatividad se ha ya que en su espacio y tiene sus limites en el diseño de automoviles. Los estándares en diseño web En diseño web se está aún muy lejos de establecer estándares fijos, pero es cierto que ya hay muchos fundamentos que se van perfilando como estándares. Los estandares afectan sobre todo a los fundamentos de interaccion del sitio y de arquitectura de informacion, los que definen su usabilidad. Tambien a la tecnologia, pero en esta area no vamos a entrar en este articulo. Sorprende entonces que muchos diseñadores sigan senderos propios y se escuden en la creatividad, la experimentacion o la originalidad para defender sus diseños. Desconocer los limites de la creatividad en el diseño web implica no diferenciar donde hay que seguir el estándar (hablando en plata, copiar) y donde se pueden introducir cambios (se puede experimentar). Evidentemente estos limites son distintos segun el meta del sitio web, lo personales, destinados al arte, diseño o la experimentacion, pueden realizar practicamente lo que quieran. Lo que llama la vigilancia es que muchos sitios de masivos corporaciones en España tengan diseños que ignoran los estandares. La creatividad tiene su sitio en el diseño web de identico modo que en muchos otros entornos donde es un fundamento mas, pero no el dominante. La situación en España Es especialmente escandalosa la situacion del diseño web en España y lo lejos que esta de los estandares. Podriamos buscar determinadas causas: Es un área de conocimiento muy reciente y apenas hay información en castellano. Desgraciadamente en España gusta escaso leer en inglés. No hay limitaciones fisicas. Un coche con 5 ruedas objetivamente no voltea bien, pero si las alternativas de una web estan en menus desplegables que nadie encuentra, se suele alegar que es un asunto subjetivo Por los inicios propias del tramo hay mucho diseñador grafico con veleidades de artista. Los directivos no saben diferenciar el buen diseño del malo y por tanto no saben a quien tienen que copiar. Apenas hay diseñadores de la interacción Esta combinacion de agentes hace que en España la gran fracción del diseño web sea de dos tipos: Copias flagrantes e identicas de otros sitios. Lo peor del caso es que muchas veces la web copiada no es ninguna maravilla. En espacio de copiar a webs americanas exitosas (una garantia) las webs españolas se copian sus imperfectas ruedas recien re-inventadas unas a otras. Originales y/o exuberantes. Determinadas web son totalmente distintos del resto, no se sabe de que modo llegaron a esta solucion de diseño, pero ahi estan. Lo que si esta diafano es que la web es tan propia y distinto del resto que hay que tener mucha buena voluntad para aprender a usarla en la primera visita. Una hipotesis práctica, alguien copia a Alzado.org Imaginemos el peor de los casos. Alguien copiase a Alzado.org (esto esta permitido), pero que se atribuyese la autoria de vuestros contenidos violando las cláusulas de vuestra licencia copyleft. Pueden pasar dos cosas: Que fue una copia mejorada: Vuestros artículos llegarían a más gente de la que llegamos con Alzado.org. Esta gente tarde o temprano descubriría a los autores originales, por lo que cuanto más éxito tenga la copia más éxito tendríamos nosotros, un éxito que jamás hubieramos tenido por nosotros mismos. Google es fantastico para encontrar copias, por fuerza los contenidos identicos surgen uno al lado del otro en los frutos casi siempre. No es probable esconder que las copias son tales ni a los autores ni a los lectores. Que nos copiasen seria asimismo un aliciente para introducir mejoras en Alzado, que a su vez copiaria las mejoras del otro sitio. Que fue una copia identica: El resultado seria el mismo, solo que al no haber mejoras no tendria mas exito que Alzado, pero a fin de cuentas ampliaria la difusion de los productos de Alzado.org

Entradas populares