Home » junio 2014
Java y javascript, cosas de java

Aunque el título se refiera al programador Java, estas normas son aplicables a cualquier tipo de programador. A excepción de la norma número 6, que es específica al lenguaje de programación Java. 1. Relata el código. Cuando estamos escribiendo código nuevo, es sencillo comprender lo que se está haciendo, pero si no tocamos ese código por un periodo de tiempo y poseemos que regresar al mismo, ya no es tan obvio. Relatar el código te ayudará a comprender más rápidamente la lógica del programa. 2. No compliques las cosas. Muchas veces deseamos solucionar determinado asunto de la forma más enredada porque está guay. Busca la forma más simple de resolver las cosas. Esto te ayudará a comprender el código mejor y a mantenerlo de una forma más eficiente y es menos propenso a errores. 3. Menos es más, no es siempre bueno. Muchos lenguajes de programación te facultan concatenar funciones y muchas veces deseamos realizar algúnas cosas a la vez en una línea. Esto dificulta la lectura y la lógca del código. 4. Evita el hard coding. Usa las constantes, de este modo si necesitamos cambiar este valor, sólo poseemos que realizarlo en la constante y no en el resto del código. Si es valor es algo que va a ir cambiando a lo largo de la vida del programa, sería mejor usar archivos externos de configuración (XML, propiedades, fundamento de datos, etc), de esta manera no poseemos que adaptar el código, recompilar y redistribuir la nueva versión. 5. No reinventes . Aprovéchate de los marcos de esfuerzo (frameworks) existentes y de los patrones de diseño. Están ampliamente probados. 6. Cuidado con los prints y la concatenación de Strings. Usualmente tendemos a escribir prints por todo el programa, con la intención de depurar vuestra aplicación. Esto puede afectar seriamente al rendimiento de la aplicación. Usa determinado tipo de mecanismo para que esos prints solo se ejecuten cuando estemos en la fase de desarrollo. La concatenación de String puede ser otra de las operaciones que afectan al rendimiento del programa. Si vas a realizar muchas operaciones de concatenación, en Java la clase String es inmutable, por lo tanto cada vez que haces una concatenación estás desreferenciando los Strings que estas concatenando y formando un nuevo String. En Java tienes disponibles 2 clases que incrementan drásticamente el rendimiento para este tipo de operaciones. StringBuffer y StringBuilder. StringBuilder es inclusive más veloz que StringBuffer, ya que este no es thread-safe. Por lo tanto si el código de desde el que estas haciendo las concatenaciones no es multihilo usa StringBuilder, si no, usa StringBuffer. 7. Pon vigilancia al interfaz de usuario. El apariencia del interfaz de usuario, la manera de navegar por el mismo y la comodidad a la hora de usar el mismo, van a depender mucho de la aceptación y el éxito de tu aplicación. Seguid el mismo estilo en toda la aplicación, escoge cuidadosamente el título de las ventanas, etiquetas de texto, etc. Seguid el mismo diseño que otros sistemas ampliamente aceptados. Pon tu interfaz a pruebas con tu mujer, marido, novi@, amig@, etc. Para ver como se mueve por la aplicación, etc. 8. Documentación. Es lo que personalmente odio más. Escribir documentación es muy pesado y en el momento en el que estamos trabajando en un programa todo tiene sentido y sencillo de seguir. Pero de nuevo, cuando poseemos que regresar al programa después de un tiempo ya no nos parecerá tan obvio como pensabamos. Además si el programa no era lo suficiente grande como para solicitar a más de una persona para laborar en el mismo, recuerda que el programa puede aumentar y solicitar a uno o más programadores incorporarse al programa. O simplemente el programa pasa a manos de otra persona. Es una de las tareas más pesadas, pero de las que más que se agradecen a lo largo del tiempo. 9. Unidades de testeo. Es una muy buena y reomendada práctica que debemos realizar inclusive antes de escribir vuestros paquetes, librerías, etc. Y son las unidades de testeo. Esto nos va a ayudar de una manera muy rápida si nuestras funciones funcionan como deben. Nos va economizar mucho tiempo en el futuro (cada vez que tengamos que adaptar nuestras funciones) y es otra de las estrategias que nos ayudará a reducir el número de yerros en vuestro programa. 10. Calidad, no cantidad. Es mejor entregar un proyecto con las funciones escenciales bien desarrolladas, a entregar un proyecto lleno de funciones y que cada dos por tres el mismo se cuelgue o no haga lo que se supone que tiene que hacer. Aunque el título se refiera al programador Java, estas normas son aplicables a cualquier tipo de programador. A excepción de la norma número 6, que es específica al lenguaje de programación Java.

Java y javascript, cosas dejava parte 4

Investigadores de la Universidad de Illinois (USA) han extendido un circuito capaz de devolver automáticamente la conductividad eléctrica a fracciónes de él que la hayan perdido por cierta rotura. En la actualidad, un fallo de esta naturaleza obliga a cambiar elchip, y son yerros cada vez más comunes debido al incremento de densidad con que se fabrican estos dispositivos. El invento consiste en ubicar unas microcápsulas de metal líquido, de unos 10 micrones de diámetro, arriba de las zonas del chip que realizan la conducción eléctrica. Si se produce una rotura en el material conductor el metal líquido se desliza en la brecha en microsegundos. En las pruebas un 90 por ciento de los chips dotados de este mecanismo se autorrepararon recuperando un 99 por ciento de la conductividad original. La principal aplicación podría estar en vehículos o instrumentos militares o espaciales, donde los circuitos electrónicos no pueden ser reemplazados o reparados. Una mayor ventaja de este sistema es que es localizado y autónomo. O sea, las microcápsulas unicamente se rompen en aquellos espacios donde hay un problema y lo hacen sin necesidad de supervisión humana.

Java y javascript, cosas que no debería incluir en su biografía en Twitter

La conciencia de lo que es mejor y peor en Twitter es en ocasiones subjetiva. Lo que para unos es simplemente spam, para otros puede ser una interesante conversación. Sin embargo, hay decidedas cosas que logran colocar de acuerdo a la cada vez más populosa comunidad tuitera. Una de ellas es que la biografía decide en buena fracción el éxito o el fracaso de una cuenta en la famosa red de microblogging. Para ayudarnos a saber si estamos haciendo las cosas bien o simplemente si debemos realizar borrón y cuenta, AllTwitter enumera a continuación los principales yerros que los tuiteros cometen en su biografía para esta red social: 1. Frases como ?gurú delos social media?, ?ninja de los social media? o parecidas denotan que el usuario no sabe en verdad de lo que está hablando. 2. Una descripción que abuse excesivamente del ?autobombo?. 3. Muchos emoticonos (a menos que el usuario sea un preadolescente): *~*~*~ o ^-^-^-^. 4. Expresiones como #TeamFollowBack. 5. Declararse abiertamente ?adicto? a algo: adicto a la tecnología, adicto al cine, adicto al fitness, etc. 6. Utilizar en espacio de ?adicto? palabras como ?aficionado?, ?geek? o simplemente términos que están en verdad vacíos de significado. 7. #Una #lista de #palabras que el #usuario #piensa que #merecen #convertirse en #hashtag y no lo merecen en realidad. 8. Bromas minoritarias en sólo entenderá el 1% de los seguidores del usuario. 9. Yerros de ortografía. 10. Yerros gramaticales. 11. Yerros de puntuación. 12. Cualquier cosa que suene a cliché. 13. Que el usuario presuma en la biografía de tener mucho sentido del humor o ser muy divertido. 14. Ser deshonesto. 15. Afirmar que ?nuestros pensamientos son propios? y creer que con esta frase protegeremos a vuestra compañía de cualquier probable daño. 16. Las palabrotas. 17. Las palabras ?please?, ?follow? y ?me? juntas. 18. Una ?ristra? de cosas que el usuario estima interesantes. 19. La incorporación de muchas palabras clave. 20. Descripciones ambiguas y semimotivacionales como ?trabajamos para inspirar e inspiramos un buen trabajo?. 21. Describirnos a nosotros mismos como ?comilones?. 22. Citar excesivamente a otras personas. Al fin y al cabo, se trata de vuestra biografía, no la de otro. 23. Pensar que una fracción de vuestra biografía es tan significativo que merece SER ESCRITA EN MAYÚSCULAS. 24. Referirse a logros conseguidos hace ya años. 25. Utilizar expresiones como ?resume-speak? o aferrarnos a una descripción aburrida y previsible de nosotros mismos. 25 cosas que jamás debería incluir en su biografía en Twitter

Java y javascript, crear el contenido web para que sea efectivo

¿Cómo hay que crear el contenido web para que sea efectivo, para que sea provechoso y los visitantes estén dispuestos a dedicar unos minutos de su ocupada vida a leerlo? En el producto How to Create Web Content that Works ofrece 20 consejos que pueden ayudar a crear un contenido efectivo. Me ha llamado la vigilancia porque algunos de los consejos coinciden absolutamente con algunos consejos de la accesibilidad web. En realidad, cuando hablamos de estándares, diseño, usabilidad, accesibilidad, SEO o experiencia de usuario, todo ello se puede resumir en una sola palabra: CALIDAD. Todo lo anterior, y otras cosas, son agentes que influyen en que un espacio web sea malo, bueno o excelente. Los consejos que surgen en este producto son (a continuación del consejo, destacado en negrita, he ya que algunos ejemplos de puntos de verificación de WCAG 1.0 que guardan relación con el consejo): El contenido tiene que ser corto, preciso y bien presentado. 12.3 Divida los bloques largos de información en grupos más manejables cuando sea natural y apropiado. 13.1 Identifique claramente el meta de cada vínculo. 14.1 Utilice el lenguaje apropiado más diáfano y simple para el contenido de un sitio. Pon el contenido más significativo al comienzo de la página. 13.8 Localice la información marcada al comienzo de los encabezamientos, párrafos, listas, etc. El titular de la página es tan significativo como el contenido mismo. 12.1 Titule cada marco para facilitar su identificación y navegación. Emplea los encabezados para articula el contenido. Añade una tabla de contenido si la página es larga. Emplea los estilos visuales (negrita, cursiva, etc.) para resaltar las fracciónes más importantes. Emplea párrafos cortos. 3.5 Utilice fundamentos de encabezado para transmitir la articula lógica y utilícelos de acuerdo con la especificación. 12.3 Divida los bloques largos de información en grupos más manejables cuando sea natural y apropiado. Evita la jerga, los acrónimos y el contenido con un lenguaje complejo. 4.2 Especifique la extensión de cada abreviatura o acrónimo cuando aparezcan por primera vez en el documento. Cuando tengas porciónes, ofrece información adicional que permita comparar la porción para saber cómo de grande o de pequeña es. Ponte en la piel del lector y proporcionale la información que busca. Asegúrate de que toda la información es exacta e incluye las fuentes utilizadas. Si tienes una idea para una historia, no la publiques inmediatamente. Escríbela y revísala mientras varios días. Cuando escribas sobre algo muy común, encuentra cómo puedes mejorar lo que otros ya han escrito. Invierte determinado tiempo en ?revivir? tu contenido antiguo ya publicado. El contenido debe ser accesible desde distintos plataformas. No te olvides del estilo de impresión. Cuida la calidad de la primera imagen y de la miniatura de tu contenido. Evita las imágenes muy comunes. Crea vídeos para complementar tu contenido. Aplica consejos del SEO. Debes averiguar cuánta gente comparte tu contenido en las redes sociales. Con Google Analytics, no te fijes en ?Pages Views?, fíjate en ?Average Time Spent on a Page?. El meta no es publicar cuanto más contenido, mejor, sino publicar contenido de calidad.

Java y javascript, Curso ADF 11g

Creación de Componentes de Negocio Si no culmino los capítulos previos y desea iniciar desde este capítulo, puede descargar el próximo código para continuar el curso. Código anterior Generalmente en los programas que desarrollo hay requerimientos comunes que generalmente lo soluciono con la herramienta. Estos son : Inicializar los valores de los identificadores únicos. (Primary Key de las tablas). Es decir, inicializar con un correlativo este campo. Para eso, usaremos un objeto sequencial en la fundamento de datos que es la mejor práctica en estos casos. Inicializar campos de fecha. Existen muchas veces campos fecha, en vuestros desarrollos, que los usuarios nos piden que se inicialice, por ejemplo, con la fecha actual. Bueno tiene lugar una forma sencilla de realizar esto que lo explicamos en este post. Vuestra entidad Movimiento (Padre), tiene un atributo total, que debería acumular los subtotal de todos sus detalles. En este post mostraremos como programar esta regla. INICIALIZAR CORRELATIVO 1. Como comentamos al inicio, una de las actividades más comunes en el desarrollo de una aplicación, es inicializar los datos correlativos que están afiliados generalmente a la PK de una tabla. En esta caso, la mejor práctica es realizar uso de un objeto sequence de la fundamento de datos, que no asegurará usar un único valor para estos atributos. Bien empecemos formando los objetos sequence en vuestra BD. Ejecutemos los próximos comandos en la BD (conectado con el usuarios ventas): create sequence cliente_seq start with 100; create sequence producto_seq start with 100; create sequence movimiento_seq start with 100; 2. Ahora en la bd crear triggers que actualice la pk de la tabla Cliente; create or replace trigger insert_cliente_id DECLARE Por favor repita lo mismo para crear los triggers afiliados a la tabla Resultado y Movimiento 3. Bien, regresemos a la aplicación ADF y haga doble clic sobre la entidad Cliente. 4. En la fracción izquierda se mostrará una pantalla con la configuración asociada a la entidad Cliente. Note que la sección Attributes presenta los atributos de los clientes. Si hacemos doble clic sobre el atributo ClienteId se abrirá otra pantalla que permitirá configurar las propiedades de ese atributo. Region Attribute. Value Type y Value: Algunas veces deseamos inicializar un atributo con un valor especifico ó en fundamento a una formula. Bien estos temas justamente ayudan a eso. El ?Value Type? decide el tipo de inicialización que usaremos, si es ?Literal?, esperará un valor fijo en el tema ?Value?, por el opuesto si seteamos el valor a ?Expression?, se esperará una formula (Se puede usar groovy) para asignar un valor. Persisten: Indica que el atributo es persistente contra la BD, es decir hay una columna que almacenará los valores de ese atributo. La sección inferior ?Database Column?, brinda la configuración asociada a esta propiedad. Mandatory: Implica Obligatorio. Region Updatable Acá se decide si se permitirá laa actualización de este campo. Los valores Always y Never son evidentes en su uso. En el caso de While New indicará que ese atributo sólo se actulizará cuando ingresemos un nuevo registro. Es decir no faculta actualizarse. Region Refresh After Algunas veces los valores de los atributos, se cargarán posteriormente a una acción de la BD. En esa región se indica después de que operación se volverá a actualizar este valor. 5. Bien, despues de la aclaración teórica, apliquemos lo aprendido. Para asociar el atributo ClienteId con el fruto del triger de BD simplemente cambiemos su propiedad Type por DBSequence. Pulse Apply. Analicemos que ha cambiado con esta configuración. Region Atributte. El tema mandatory se ha ? des seleccionado?, porque se hace esto?, bueno se asume que el valor de este atributo provendrá de la BD posterior a la inserción. Es decir el usuario no colocará ningún valor mientras el ingreso de datos y en consecuencia la aplicación no debe cerciorar si este tema esta vacío ó requerido. Region Updatable La dispositivo ha colocado esta propiedad en ?While New?, tiene sentido?. Pues si, porque este tema será sólo completado mientras la inserción. Es decir no debe ser modificable. Es como si dejáramos adaptar una Pk de fundamento de datos. Region Refresh After. Se seleccionó Insert. Esto implica que el valor de atributo se actualizará posterior al ingreso de datos. Cuando vamos a crear un nuevo cliente, lo que va a pasar es que vamos a crear una instancia de la entidad, como un objeto, bien esa instancia mediante cierta acción volcará su contenido contra la tabla cliente, luego de insertarse entonces el valor del tema CLIENTE_ID de la tabla será regresado al objeto para actualizar el atributo cliente id de la instancia de la entidad. (Refresh After Insert). Pulse Ok para volver al editor. 6. Para probar este funcionamiento, ejecute el módulo de aplicación. Clic derecho sobre él y RUN. 7. Elija la Vista ClienteVO y pulse el boton (+) 8. Complete los datos. Note que el tema ClienteId se ha cargado con un valor temporal (-2) en este ejemplo. Es decir, no es indispensable llenarlo. Pulse el boton Commit 9. Notará que una vez que se grabo el registro se cargó el verdadero valor del atributo ClienteId, lo que demuestra que vuestra configuración ha sido correcta. ASIGNAR FECHA 10. Vuestra próximo actividad, consiste en inicializar el atributo Fecha de la entidad movimiento con la fecha actual. Bien, esta actividad es sencilla. Haga dobhe clic sobre la entidad Movimiento. 11. A continuación, seleccione la categoría Attributes y haga doble clic sobre el atributo Fecha. 12. La pantalla que se presenta faculta configurar las propiedades del atributo Fecha. Tal como se explicó en el paso 4, podemos usar las propiedades ?Value Type? y ?Value? para definir los valores iniciales que tendrá las instancias de la entidad. En este caso usaremos Groovy, que es un lenguaje de Scripting, y que ADF puede usar para elaborar expresiones que se evalúan en tiempo de ejecución. Puede conocer más del uso de Groovy en ADF en el próximo enlace. 14. Realicé el paso 6, para probar los componentes. Elija ahora la vista MovimientoVO. 15. Pulse el botón para añadir un nuevo registro y note que se ha inicializado el tema Fecha con el valor actual. VALIDAR MOVIMIENTO 17. En el editor, elija la categoría ?Relationship? y en la sección Beahivior seleccion la casilla ?Composition Association? Si desea conocer más de este tipo de validaciones puede ir al próximo enlace. El primero ?Rule Definition?, faculta definir que norma decide que el dato procesado es Valido. El tercero ?Failure Handling? ayuda a personalizar el mensaje que deseamos arrojar al usuario cuando la validación no ha sido cumplida. Que implica todo esto?. Que se hará una validación del operador count de la relación, es decir del conteo de los detalles. Luego, se aguarda que el valor obtenido ?Sea Mayor que? un valor literal que ingresemos. En este caso 0. 20. Ahora elija la pestaña ?Failure Handling? y coloque el mensaje que se disparará cuando no se cumpla la validación. 21. Pulse Ok, grabe los cambios y ejecutemos el modulo de aplicación, como en el paso 6, para probar este cambio. Haga clic sobre el View Link MovimientoDetalleVL, para ver la un movimiento con sus detalles. 22. Ahora para ver el resultado de validación. Pulse el botón a nivel del movimiento. CALCULO DE UN ATRIBUTO TOTAL EN BASE A DETALLES. 25. Bueno, en vuestra situación necesitaremos proyecto el componente Movimiento, así que habilitaremos un clase Java asociada a dicho componente. Para eso haga doble clic sobre dicho componente, elija la categoría Java y haga clic sobre la alternativa ?Edit java options? 26. Bien , esta consola proporciona la alternativa de asociar una clase java a la entidad y personalizar su comportamiento camino código. Seleccione la alternativa ?Generate Entity Object Class? y también la casilla de Accesors. 28. Haga doble clic sobre la clase MovimientoImpl.java y agreguemos el próximo método. public void calcularTotal(){ Analicemos el código que hemos colocado. Esté método se descubre en la entidad movimiento y lo que hace es : float totalDetalle=0; RowIterator iteDetalle = this.getDetalle(); while(iteDetalle.hasNext()) Row filaDetalle = iteDetalle.next(); totalDetalle = totalDetalle + ((Number)filaDetalle.getAttribute("Subtotal")).floatValue(); Finalmente asignamos el valor calculado en el atributo Total de la entidad Movimiento. this.setTotal(new Number(totalDetalle)); Haga doble clic sobre la entidad Detalle, de forma parecida al paso 25, para habilitar la creación de clases. Tal como se presenta a continuación. Revisemos que implica cada uno de sus checks. Generate Entity Object Class: Esto faculta asociar una clase Java a la entidad. Sobre esta clase se crearán los métodos que se indican a continuación. Accesors: Crea los métodos get y set de cada atributo. Habilítalo Habilítalo Nota adicional: Nosotros ejecutamos este método cuando pulsamos el botón de guardar cambios en la fundamento de datos ( ) desde el módulo de aplicaciones. Create Method. Crea el método Create(), que es un metodo que se dispara cuando se instancia un nuevo registro de la entidad. Es parecida a un constructor de la entidad. No lo habilite Nota adicional: Nosotros ejecutamos este método cuando pulsamos el botón de Adicionar un nueva Fila ( ) desde el módulo de aplicaciones. Remore Method. Crea el método remove() que como su nombre indica cuando se elimina una instancia de la entidad. No lo habilite Nota adicional: Nosotros ejecutamos este método cuando pulsamos el botón de Eliminar una Fila ( ) desde el módulo de aplicaciones. Pulse Ok y Grabe los cambios. 30. Bien, haga doble clic sobre la clase DetalleImpl.java y ubíquese en el método doDML(). Sobre escríbalo de la próximo manera. protected void doDML(int operation, TransactionEvent e) { 31. Notemos lo próximo, el método doDML se ejecuta cada vez que el usuario confirma una acción de añadir adaptar o descartar sobre la entidad detalle. Nosotros hemos incluido la próximo línea this.getMovimiento().calcularTotal(); Que lo que hace es calcular los detalles del movimiento vinculado y actualizar el atributo total del mismo. 32. Probemos este último cambio. Ejecute el modulo de aplicación y ubíquese en el viewlink que faculta ver los datos del movimiento y detalle, 33. Agregué un nuevo detalle usando el botón de Agregar Fila sobre los detalles 34. Ingrese valores pertinentes a ese detalle. 35. Finalmente, aplique los cambios de toda la transacción. 36. Finalmente notemos que el valor del total del movimiento se ha actualizado correctamente. 37. Felicitaciones, ha culminado la personalización de las entidades en su aplicación ADF. Capítulos posteriores permitirán personalizar las vistas y el módulo de aplicación. Si desea comparar su resultado, con vuestro código puede descargarlo del próximo enlace.

Java y javascript, Cómo reparar la batería del portátil

Salvo que lo hayas comprado recientemente, estoy convencido que si os pregunto si nuestro ? laptop? tiene determinado problema, la inmensa mayoría me contestará que le falla la bateríaY es que, con diferencia, se trata del componente que más dificultades suele da en vuestros ordenadores portátiles. Personalmente, opto por dejarla quitada (al 40% de carga si va a estar mientras mucho tiempo sin utilizar) ya que suelo usarlo conectado a la corriente eléctrica pero, aun así, imagino que me dará dificultades como a todos los ?mortales? En este producto quiero compartir con vosotros un par de soluciones (y no estoy hablando de comprar baterías compatibles baratas en la tienda de los ?chinos? de la esquina jeje) que espero que os ayude a solucionar probables dificultades con la alimentación de nuestros equipos. El remedio doméstico ¿Recordáis cuando se puso de moda meter las pilas en el congelador para que durasen más y/o apurarlas al máximo? Pues algo así es lo que recomiendan en el próximo vídeo (luego veréis por qué La idea es meter (2 o 3 días) la batería (al 40-50% de carga) en el congelador envuelta en una bolsa de plástico descongelarla (2 o 3 horas) y secarla bien cargarla al 100% en vuestro portátil quitar el cable de alimentación y darle caña al ordenador hasta que se agote la batería Por probar no perdemos nada, si no funciona podemos pasar a tratar de arreglar la batería del portátil Reparando la batería Si no te da miedo abrir por la mitad la carcasa de tu batería (no temas, no explotará ) observarás algo semejante a¿¡¿sorprendido de descubrir pilas dentro ?!? pues creo que ahora habéis experto el causa (que no se explica en el vídeo) de por qué se puede intentar meter la batería en el congelador En el próximo vídeo podéis contemplar el proceso completo (incluyendo dónde comprar las pilas recargables a un buen precio) Para el que lo prefiera, el producto original de juan_pirulo (gracias por compartir la información/experiencia compañero) Conclusió Dos opción  de solución hardware a tener en cuenta a la hora de intentar recuperar la batería de nuestro portátil sin gastar demasiado dinero en ello. Espero que, como mínimo, os sirva para aprender algo nuevo (lo que hay dentro de esa caja de plástico a la que tanto miedo nos meten para que no la abramos) y, si alguien alcanza reparar su ordenador ojalá lo comparta con el resto a través de los comentarios (seguro que nos alegramos por él como es debido

Java y javascript, Darwin y el Diseño Inteligente

las bacterias, las arqueas y los eucariotas Los eucariotas son organismos como nosotros, que tienen células complejas. Incluyen una mayor variedad de organismos, la mayoría de ellos microscópicos. Y este árbol universal de la vida está construido con arreglo a la convención de que la extensión de las ramas es aproximadamente proporcional a la diversidad de organismos que tiene lugar en esa rama. Y hay la fracción tan pequeña de toda la vida que representan los animales. Las bacterias, todos hemos oído de ellas y usualmente se pensad de bacterias como organismos que causan enfermedades y otros daños pero de hecho son primordiales para el proceso de la vida porque son los que contribuyen a la modificacion de la materia muerta de otros organismos, a hacerla disponible para que otros organismos la puedan utilizar. Y hay una mayor diversidad de bacterias. Muy interesantes son los arquea, organismos que sólo se identificaron como grupo distintivo hace treinta y cinco años... Sólo que antes de ese tiempo se conocían determinadas especies que se creían que eran bacterias muy anómalas. Por ejemplo, bacterias que pueden multiplicarse en agua a temperaturas  próximas a la ebullición. Y otras características distintivas. Y el descubrimiento de especies de arquea continúa sin parar. Viven prácticamente en el océano. Entre los animales hay treinta y cinco filos, grupos, uno de los cuales son los vertebrados. Entre los vertebrados hay algúnas clases de organismos; uno de ellos incluye las ratas y ratones, los conejos y los primates.  Y nosotros representamos un chico grupo dentro de otro grupo relativamente chico de los animales. Y aún dentro de los primates representamos una especie entre muchas. Estrechamente vinculadas con los chimpancés. Tenemos antepasados comunes con ellos que vivieron hace siete millones de años. Y después una relación cada vez más remota, con los otros primates. No sólo somos una especie entre los dos millones, más o menos, que se han descrito, sino que si pensamos en términos de la evolución a largo plazo, se calcula que menos del 1 x 1000, y probablemente más, como el 1 x 10.000 de todas las especies que han existido en el pasado han sobrevivido al presente. O de otra manera, que el 99,9 % de otras especies que existieron en el pasado se extinguieron o que desea decir que en la anécdota de la vida han existido más de mil millones de especies. Y la vuestra asimismo es de evolución muy reciente. La evolución de los humanos modernos, homo sapiens, ocurre, aproximadamente, hace 150.000 años en África. La vida, el antepasado universal de todos los organismos, se origina, aproximadamente hace 3.500 millones de años. Es difícil pensar en millones de años y miles de millones de años  pero si yo hago una modificacion momentánea de escala, donde la vida inicia el 1 de enero, a primera hora de la mañana y en este momento es el 31 de diciembre a media noche, y en esa escala vuestra especie surge el 31 de diciembre a las 23h45min. La transición del antepasado general que poseemos con los chimpances a vuestra especie actual,  los  homínidos, homíninos, como eligen llamarlo actualmente los antropólogos, ocurre a través de una serie de especies, algúnas de las cuales se han identificado a través de fósiles... donde como notables pueden mencionarse: austrolopithecus afarensis, otra después homo habilis y homo erectus. Australopithecus afarensis es notable porque fuesese su descubrimiento de un individuo que llegó a ser llamado Lucy, llamada así porque cuando la descubrieron los investigadores escuchaban un disco de los Beatles ?Lucy in the sky with diamonds? y entonces se les sucedió darle el nombre de Lucy. Y Lucy fuesese muy significativo porque sirvió para confirmar una idea que era general, de que vuestros antepasados fueseseron bípedos, casi desde el comienzo de la separación con respecto a los chimpancés. Durante que el cerebro crece mucho más tarde. El de Lucy no existía pero despues se descubrieron otros y saben que era un cerebro chico de unos trescientos gramos, comparable al de un chimpancé moderno. Y tuvo también un interés histórico, porque a este descubrimiento se le dio mucha publicidad y tuvo como consecuencia que entidades gubernamentales, por ejemplo de los EEUU pero no sólo allí, decidieran invertir más en estudios paleontológicos humanos. Y también muchas entidades privadas. En la evolución desde australopithecus afarensis hasta los humanos modernos ocurren algúnas cosas; una de ellas es un incremento del dimensión del cuerpo (y del cerebro); en los mamíferos estos dos apariencias están relacionados, y esta relación común se llama alometría, el cambio es proporcional, con arreglo a cierta ecuación que es relativamente sencilla. El caso es si el incremento del cerebro de 40o cms cúbicos) a 1400 está relacionado con el dimensión del cuerpo o no. Y una indicación de que no lo está... En la anécdota de los homínidos hubo momentos en que subsistían tres o cuatro especies distintos pero unicamente una sobrevivió dando espacio a vuestra especie. Entre los autralopithecus hubo uno robusto que sin embargo tenía el cerebro pequeño. Entonces algo pasa en la evolución humana que dispara el dimensión del cerebro. Y eso se reconoce entre los antropólogos con la identificación de un nuevo género, el género homo (homo habilis, etc, erectus, sapiens). Una cosa que sucede con homo habilis y que va a ser muy significativo es que los individuos de esta especie construían instrumentos, simples, de piedra, que los utilizaban o para cazar o para reñirse unos con otros; en cualquier caso por eso se les llama habilis. ¿Cuál es la razón por la que el cerebro aumenta? Para esa pregunta no existe, hoy por hoy, ninguna hipótesis que sea convincente. La creencia más favorecida tiene que ver, precisamente, con el uso de herramientas. La postura bípeda surge muy pronto en los homínidos, lo que pasa mientras los primeros millones de años es una serie de transformaciones morfológicas que incluyen una postura más erguida todavía pero muy significativo un cambio completo de la morfología de los brazos y sobre todo de la mano. Nosotros poseemos una mano que es un artefacto terriblemente provechoso y sutil. Los antropoides, chimpancés y gorilas, tienen manos pero no tienen esta versibilidad, por ejemplo para manejar objetos, porque aunque tienen un pulgar no está completamente contrario como el nuestro. Entonces, esa creencia dice que una vez que se desarrolló la mano como un órgano para manejar objetos, tan sutil y tan elaborado, esto hizo que empezaran vuestros antepasados homo hábilis a desarrollar utensilios. Y el desarrollar utensilios, con arreglo a esta creencia, fuese muy provechoso desde el punto de vista evolutivo. Que desea decir que los que construían utensilios tenían más posibilidad de multiplicarse y abandonar descendencia. Y los que son capaces de desarrollar utensilios son los más inteligentes. La construcción de utensilios necesita la formación de imágenes mentales, de realidades que no están presentes. Y ese es un atributo distintivamente humano. Así que los genes que se relacionaban con la mayor inteligencia fueron aumentando en frecuencia. Así hasta llegar al mayor cerebro y a la capacidad intelectual enorme que los humanos tenemos. La idea es que hay un ciclo de realimentación positiva ( pero que no está universalmente aceptada entre los antropólogos ni ha sido corroborada). Una cosa que pasa y que hoy no voy a discutir en detalle es que esto necesita la reducción de la mandíbula, como un compromiso para que la cabeza del niño pueda pasar por el canal de nacimiento de la madre. Aunque hay jalones intermedios, conocemos que homo erectus evolucionó hace 1,8 millones de años en esa región de África tropical y oriental. Y que muy pronto emigraron a través del viejo mundo. Esto es bastante admirable porque son los primeros emigrantes, al menos trascontinentales, entre vuestros antepasados. En unas cuevas al norte de Pekín se han encontrado fósiles humanos a los que se les ha dado la fecha de 1,9 millones de años que es la fecha que se da como el primer inicio de los homo erectus en África. Estos datos tienen yerros estimados, probables, pero lo que desea decir es que el que estaba ya en China y el que había llegado a Java hace 1,8 millones de años y también a Georgia, en el margen entre Europa y Asia, hace 1,7 millones de años con arreglo a estos estimados... Esto desea decir que por razones que no entendemos los homo erectus decidieron emigrar afuera de África y colonizaron una buena fracción del viejo mundo, en relativamente escaso tiempo. La cuestión es qué es lo que ocurre en la evolución de homo erectus a homo sapiens y con respecto a esto hay dos hipótesis. Una que dice que erectus emigra de África a Asia y Europa y que, entonces, estas poblaciones evolucionan gradualmente como una especie sola pero con poblaciones diferentes y se convierten en homo sapiens. Pero tenían que existir intercambios genéticos en las dos direcciones para que esto pudiera tener lugar, porque una especie no puede evolucionar de otra especie, independientemente en espacios independientes. Tenían que estar genéticamente comunicados. La otra creencia que es la colonización de África, dice que las especies de homo erectus y las próximos se extinguen en Asia y en Europa y homo sapiens evoluciona en África y de nuevo tienen espacio nuevas colonizaciones. La creencia favorecida, sobre todo debida a datos moleculares, es la del inicio africano del homo sapiens. Pero también es problable la existencia de algúnas colonizaciones y no unicamente de una original. La colonización de sapiens sucede hace unos cien mil años. Y relativamente escaso tiempo después, en esta escala evolutiva, llegan hasta Australia. Se calcula entre cincuenta y sesenta mil años. Más de cuarenta mil  y llegan también a China y bajando a lo que es Indonesia hace también esos sesenta mil años; sin embargo, colonizan Europa sólo hace 35.000 años. Esto es raro proque aunque cruzar el estrecho de Gibraltar sea difícil, evidentemente la distancia es mucho más corta y aún con los emigrantes que tuvieron que ir por el recurso oriente para llegar a estas zonas remotas, podían haber llegado a África Occidental mucho más pronto. Y éste es uno de los muchos enigmas que quedan por resolver. La aclaración más racionable son los neandertales. Sabemos que los neandertales ocupaban Europa occidental, empezando hace unos 200 mil años y llegando hasta lo que es hoy en día Persia. Y los neandertales eran seres humanos con cerebro tan grande como el vuestro y se pensad que inteligentes, y posiblemente ellos constituyeron una barrera para la emigración de homo sapiens. Los últimos neandertales que se conocen son de España, de cerca de Gibraltar y también de muy cerca de Santander, de hace unos veintitantos mil años. En cualquier caso, lo que si conocemos es que América se coloniza más tarde y parece que se mueve muy rápidamente hasta llegar al sur de Sudamérica. Y esa es la anécdota de la evolución morfológica de los seres humanos modernos. Además de las características que nos caracterizan de los monos antropoides de manera muy notablemente, el incremento del cerebro y la postura erguida, los pulgares contrarios y esto que  facilita la construcción de herramientas, sumado a la reducción de mandíbula, pero hay otras muchas características muy interesantes; como, por ejemplo, la ovulación críptica. Los primates anuncian que están en estro con una hinchazón de los órganos sexuales externos, que frecuentemente adquieren un color vivo, un rojo, entonces la hembra anuncia que es fecundo en ese momento, un macho viene, se aparea con ella y la selección natural no favorece que el macho se quede allí, con una vez que ya se ha apareado con una hembra, porque la probabilidad de fertilizar los óvulos, cuando la hembra es fecundo, es muy grande, mucho más del 90%. Lo que la selección natural favorecía en vuestros antepasados más remotos es el que este macho afuera busca(n)do por otra hembra.  Porque el que hiciera eso tenía más probabilidad de multiplicar sus genes. Genes que promovieran a los humanos la probabilidad de aparearse con más hembras. La ovulación en los seres humanos es críptica, no hay este anuncio, por decirlo así, de cuando la mujer es fértil. Y esto, seguramente, es la razón principal por la que evoluciona la familia nuclear. La noción de tio y mujer con los niños. Porque ahora el macho, que se ha apareado con una hembra que no sabe si es fértil, evidentemente la selección natural no favorecen los genes que se vaya buscando otra hembra, sino que se quede allí, tratando de nuevo de aparearse con esta hembra. Y así crecer la posibilidad de tener hijos, de tener descendencia. Y la otra rostro de esa moneda es la recepción sexual continua, que las hembras de los primates no tienen. Una vez que se han apareado se contraen los órganos sexuales y de hecho el apareamiento es físicamente imposible. Y ahora quiero concentrarme en los caracteres comportamentuales. Muy notablemente la inteligencia. Tenemos capacidades intelectuales muy diferentes del resto de los animales, incluyendo la capacidad de abstracción, pudiendo maneras conceptos universales, generales; también la formación de categorías, ver objetos individuales como miembros de clases generales. Necesitan formar imágenes, de realidades que no están presentes, que es un atributo exclusivamente humano. Y tenemos, finalmente, el razonamiento lógico. Pero otro atributo comportamentual de los humanos es el comportamiento ético, que vamos a explorar. ¿Hasta qué punto el comportamiento ético es un fruto de la evolución biológica? ¿o hasta que punto es un fruto de la evolución cultural? Hay una polémica significativo sobre esta materia, en que los filósofos en común arguyen, que la ética es artículo de una evolución cultural. Y los biólogos, en común, arguyen que el comportamiento ético es un fruto de la evolución biológica que nos ha dado esa inteligencia tan avanzada como tenemos. Lo que me parece que es el caso, en estos argumentos, es que están hablando de cuestiones diferentes. Los biólogos hablan frecuentemente de los juicios morales. La capacidad de juzgar acciones como buenas o malas. Y, entonces, como voy a arguir yo, eso es una consecuencia de la evolución biológica. No podemos eludir el juzgar acciones como moralmente buenas o malas en términos de sus consecuencias. Los filósofos están más preocupados con las reglas de moralidad, los códigos morales. Las reglas con arreglo a las cuales decidimos qué es lo que es bueno y qué es lo que es malo, que es distinto al juzgar cosas como buenas o malas. Esta pequeña distinción creo que se puede alumbrar con esta comparación. La misma diferencia tiene lugar con respecto al lenguaje simbólico. Los humanos poseemos todos una capacidad para expresarnos en lenguaje simbólico, hablado o escrito. Esta capacidad no decide el lenguaje que se va a hablar; o sea que hay una distinción entre la capacidad del lenguaje y los lenguajes que se hablan y yo quiero indicar que hay una distinción entre la capacidad de realizar juicios morales y los códigos morales, las reglas de moralidad con arreglo a las cuales juzgamos que acciones son buenas y qué acciones son malas. Las cláusulas necesarias para realizar juicios morales son tres: - La capacidad de anticipar las consecuencias de las acciones propias. Esto es indispensable para que haya moralidad. Para que haya juicios morales. Porque el apretar el gatillo no es una acción moral. El apretar el gatillo se convierte en una acción moral si yo sé que la bala va a ser disparada y va a matar a mi enemigo. Las acciones que hacemos son morales o no en términos de las consecuencias que tienen. Esto necesita anticipar el futuro. Tener la capacidad de abstracción que es la capacidad asociada con el mayor desarrollo intelectual. - La capacidad de realizar juicios de valor, que tiene que ver con la segunda de las capacidades que mencionaba anteriormente, el ser capaz de formar categorías generales, que ocupan a todos los miembros de una categoría porque esto es lo que hace que yo anticipe el valor de lo que está en juego . Peras y manzanas y prefiero las peras a las manzanas, o al revés. Los juicios de valor son de muchas clases. Pueden ser gaómicos, estéticos, religiosos, morales, económicos - Abierta albedrío, que sólo es probable cuando soy consciente de que puedo apretar el gatillo o puedo no hacerlo. En cualquier caso esto implica, de nuevo, la capacidad de comparar entidades distintos y verlas como miembros de clases generales. Y asimismo esta capacidad nos hace, cuando estamos confrontados entre dos opciones, de mentalmente explorar otras alternativas. La propuesta que yo estoy haciendo es que existan esas tres capacidades, y la capacidad de realizar juicios morales,  como consecuencia de la evolución biológica (la construcción de dispositivos y el incremento del cerebro), que ha sido alguna por esa evolución. El comportamiento ético tiene dos componentes: el de realizar juicios morales y el otro los códigos morales: las reglas con arreglo a las cuales juzgamos que acciones son buenas y qué acciones son malas.  Y la alternativa que yo les presento, es que los códigos morales son un fruto de la evolución cultural, algunas por la experiencia de las sociedades humanas. Los códigos morales cambian, son diferentes en diferentes culturas y en diferentes tiempos de la historia. Y ocurre evolución cultural porque tiene lugar variación con respecto a los valores culturales. Hay variación entre individuos y hay variación entre grupos. Llegando a casos extremos, uno tiene esa situación en Pakistán de una mujer que es violada y la matan porque eso es totalmente no aceptable, a pesar de que ella no había hecho nada para ser violada sino tratar de defenderse. Pero los parientes creen que tienen la obligación moral de matarla. Y así con muchos otros ejemplos que uno pudiera presentar. Y también hay variación histórica. Ejemplo, con el que quizá ustedes estén de acuerdo, es que el mandato bíblico de ?creced y multiplicaos y ocupad la tierra?, hoy en día no es algo que nosotros consideremos como una obligación moral, al contrario: creemos que hay que limitar el número de hijos que uno tiene; en cualquier caso que la mayoría tiene la obligación de controlar la extensión de población. Y la evolución cultural depende de la herencia cultural. Y aquí si que hay unas consideraciones importantes: - La herencia cultural no es como la herencia biológica, que se transmite de un individuo a sus hijos. Sino que se transmite por enseñanza, imitación y asimilación.  Esto es de mayor relevancia porque una innovación cultural, una mutación cultural, se puede transmitir a toda la humanidad o a un número enorme de individuos, de millones y millones, en menos de una generación (caso de los teléfonos móviles que todos hemos incorporado en nuestras vidas). Y esta enseñanza evolutiva es mucho más rápida que la transmisión genética o biológica. Esto es probable porque es transmisión horizontal asimismo de vertical. No sólo se transmite de padres a hijos sino a todos los miembros de la sociedad potencial. Para la consideración de los biólogos, y con respecto a la herencia biológica manifestamos que: no hay herencia lamarkiana, que los caracteres adquiridos, por ejemplo, construir masivos músculos yendo al gimnasio eso no se transmite a los hijos, no son heredables. En el caso de la herencia cultura si hay herencia lamarkiana. Porque las ideas, tradiciones y hábitos adquiridos mientras nuestras vidas sí que los podemos transmitir, y, de nuevo, no sólo a vuestros hijos sino a todo el resto de la sociedad. El que haya una herencia cultural, dado que hay variación cultural, también hace probable el que haya selección natural, que es el proceso importante de la evolución, en la que se necesita que haya variación y transmisión diferencial. El nonoteísmo, en cuanto a la selección cultural, es un ejemplo notable y que se introduce en lo que hoy en día es el oriente cercano hace 2.700 años, más o menos. Ya saben que hay una especie de monoteísmo que está en la biblia que es más antiguo, de seiscientos años de cristo, aunque fueran mil no afectaría mucho el caso. Porque parece ser que el monoteísmo moderno surge sólo entre los israelitas mientras la colonización de Babilonia, donde surgen también los masivos profetas. En cualquier caso, ahí tienen una noción que surge en un grupo chico de individuos humanos y que sin embargo, hoy en día, lo acepta la mitad de la humanidad. No cabe duda de que la selección natural, con respecto a conceptos religiosos o morales es muy efectiva. De nuevo doy el ejemplo de los diez mandamientos, los israelitas huyendo de Egipto era un grupo, a lo sumo, de varios cientos de individuos, y tenían que sobrevivir y sobrevivieron en el desierto del Sinaí, ante cláusulas miserables y Moisés sube a  la montaña y dice: aquí poseo la revelación de Dios, los diez mandamientos. Normas muy estrictas para que el grupo pudiera sobrevivir esa vida miserable y de falta de alimento que tenían en el desierto, y, entonces, el inicio de los diez mandamientos lo conocemos muy bien, pasa ahí, en ese grupo chico de israelitas y, sin embargo, hoy día, los aceptan todas las religiones monoteístas. Hay que tener en cuenta, siempre, que en el caso de los valores morales y el ejemplo de los diez mandamientos es muy apropiado que lo que Moisés les está diciendo a los israelitas es: esto es lo que es bueno y esto es lo que es malo, hay que comportarse de esta forma y no de la otra. Pero si cometes adulterio te vamos a matar, además. Y decir que la autoridad civil, no cabe duda de que juega un papel significativo en las reglas prácticas de moralidad. Hay un reforzamiento que lo vemos también de día a día. Y para la gente que tiene teorías religiosas, que son la mayoría de la humanidad, hay también un refuerzo de la autoridad divina, porque Moisés les dice también: por cierto, no creas que te puedes fugar si habéis cometido adulterio y que no te vamos a encontrar porque está Dios y Dios te va a castigar. Evidentemente la evolución cultural (y la moral en particular) tiene que ser congruente con la evolución biológica (capacidad moral o capacidad intrínseca de realizar juicios de valor). Dando un ejemplo extremo: si ha existido en el pasado una sociedad en la cual la regla suprema de moralidad es el ser célibe y la gente observa ese valor moral, esa sociedad no existe, no ha dejado descendientes. Hay proponentes entre los biólogos que dicen no sólo la capacidad moral, sino el comportamiento moral y las normas con arreglo a los cuales los individuos se comportan, tienen también un componente genético, evolutivo. Estos proponentes se encuadran dentro de la categoría de la sociobiología o los proponentes de lo que se llama psicología evolutiva. Estos estudios se cimientan principalmente en el comportamiento de los insectos sociales. En el turno de preguntas aparecen los próximos criterios: - La hibridación (migraciones de etnias que se mezclan) crece la tasa de evolución pero en el humano moderno esto es insignificante en comparación con el progreso de la evolución cultural. N0 nos adaptamos cambiando los genes de acuerdo con las necesidades del ambiente, sino que cambiamos el ambiente de acuerdo con las necesidades de los genes. Por eso la evolución humana, la evolución cultural, pasa tan rápidamente.  Ejemplo fácil es la colonización de países fríos (somos todavía animales tropicales) donde por recurso de la ropa y la vivienda se crea la temperatura idónea para la supervivencia. De forma parecido los humanos viajamos por los rios y mares de forma más eficaz que ningun pez y no hemos evolucionado agallas. Lo mismo con el aire y las alas. Todo esto es evolución cultural. - La revolución tecnológica también conlleva asimismo de progreso una crisis enorme (bombas atómicas) que nos pudiera llevar a la extinción, y si dañamos lo suficiente el ambiente también.  Valores morales, estéticos  y lenguajes evolucionan también pero mucho más lentamente que la tecnología. La tecnología está asociada con el dinero y eso es un mayor estimulante. - Como ?anécdota? en EEUU cuesta cien veces más enviar a la muerte a un hombre  que mantenerlo con vida y tras las rejas. - La evolución biológica es irreversible. No se puede dar marcha atrás.

Java y javascript, De la LAPAO

El mes pasado, las Cortes de Aragón aprobaron un esperpento de enormes proporciones. El catalán que se Hablad en la región pasaba de llamarse catalán a llamarse LAPAO (Lengua Aragonesa Propia del Área Oriental); y el aragonés pasaba a denominarse LAPAPYP (Lengua Aragonesa Propia de las Áreas Pirenaica Y Prepirenaica). Ahora, el PP valenciano supera ese esperpento que ya consigue dimensiones épicas. Resulta que el PP valenciano le está viendo las orejas al lobo y se ve perdiendo las próximas elecciones (mejor dicho, ganando pero sin poder gobernar). Lo dicen hasta sus encuestas internas. ¿Y qué se puede realizar para remontar? Nada mejor que resucitar el discusión identitario, la bandera y el idioma, que tan buenos frutos les ha proporcionado siempre a la derecha valenciana (frente a los socialistas, que en este asunto siempre se han destinado a nadar y guardar la ropa al mismo tiempo). Así pues, el PP valenciano pretende ahora aprobar una proposición no de ley de tramitación especial de urgencia para instar a la RAE a que reconozca el valenciano como idioma distinto del catalán (algo propio de la RAE de 1959, por cierto). La argumentación del PP es, cuanto menos, estrambótica. Resulta que parece ser ahora que el valenciano ya se escribía (y, por tanto, hablaba) en el siglo VI antes de Cristo. Posteriormente, obtendría influencias de griegos, fenicios y latinos hasta llegar a vuestros días. ¡Toma ya! Tenemos que una idioma que creíamos que procede del latín, resulta que es más antigua que el latín. Sencillamente delirante. Por cierto, merece ver el documento con la propuesta del PP. Las faltas de ortografía del documento no sé si son resultado de no haber pasado el corrector o es que está escrito en valenciano-íbero. Los esperpentos de la LAPAO y la LAPAPYP en Aragón y del nuevo valenciano-íbero en Valencia son resultado de una innegable ola de anticatalanismo dentro de los tramos más rancios de la derecha españolista, y en tangible dentro del PP. Habrá algunos que alegue que los nacionalistas catalanes (que no los catalanes, dos términos que suelen confundirse) son antiespañoles. Pero Cataluña lleva años pidiendo la independencia. Muchos años. Ya deberías saber torearles sin necesidad de realizar el ridículo. La lengua, da idéntico la que sea, debería servirnos para comunicarnos con los demás. No debería ser causa de disputas ideológicas estériles que sirven menos que un discusión sobre el sexo de los ángeles. En vez de estar discutiendo estas tonterías deberíamos echar a estos corruptos y chupópteros que nos gobiernan. Pero seguro que hay más de un paleto que acaba votando al PP de nuevo por aquello de los invasores catalanes y el "No mos fareu catalans".

Java y javascript, definiciones relacionadas con la web

El World Wide Web Consortium, abreviado W3C, es un consorcio internacional que produce recomendaciones para la World Wide Web. Está dirigida por Tim Berners-Lee, el creador original de URL (Uniform Resource Locator, Localizador Uniforme de Recursos), HTTP (HyperText Transfer Protocol, Protocolo de Transferencia de HiperTexto) y HTML (Lenguaje de Marcado de HiperTexto) que son las principales tecnologías sobre las que se cimienta la Web. La Web Accessibility Initiative (WAI) o Iniciativa para la Accesibilidad Web es una rama del World Wide Web Consortium que vela por la accesibilidad de la Web. TIPOS DE FORMATOS MÁS COMUNES EN LA RED Los ficheros comprimidos más comunes son los que tienen estas extensiones .ZIP, .SIT y .TAR. Los formatos de ficheros de gráficos más comunes en la Web son aquellos con extensiones .jpg y .gif. Para vídeo, las extensiones populares son .AVI y .RAM para PC, .MPG (abreviatura de MPEG), que es independiente de plataforma, pero necesita su propio reproductor, y .MOV y .QT para películas QuickTime. El formato de archivo de sonido más popular actualmente es .MP3. Los documentos con formato son .doc y .pdf. TIPOS DE FORMATOS MÁS COMUNES EN LA REDLos ficheros comprimidos más comunes son los que tienen estas extensiones .ZIP, .SIT y .TAR. Los formatos de ficheros de gráficos más comunes en la Web son aquellos con extensiones .jpg y .gif.Para vídeo, las extensiones populares son .AVI y .RAM para PC, .MPG (abreviatura de MPEG), que es independiente de plataforma, pero necesita su propio reproductor, y .MOV y .QT para películas QuickTime. El formato de archivo de sonido más popular actualmente es .MP3.Los documentos con formato son .doc y .pdf. HTML, siglas de HyperText Markup Language (Lenguaje de Marcado de Hipertexto), es el lenguaje de marcado predominante para la preparación de páginas web. Es usado para describir la articula y el contenido en manera de texto, así como para complementar el texto con objetos tales como imágenes. HTML se escribe en manera de ?etiquetas?, rodeadas por corchetes angulares (,>). HTML también puede describir, hasta un cierto punto, la aspecto de un documento, y puede incluir un script (por ejemplo Javascript), el cual puede afectar el comportamiento de navegadores web y otros procesadores de HTML. XML, siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible), es un metalenguaje extensible de etiquetas extendido por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y faculta definir la gramática de lenguajes particulares (de la misma forma que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una forma de definir lenguajes para distintos necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML. Hypertext Transfer Protocol o HTTP (en español protocolo de transferencia de hipertexto) es el protocolo usado en cada transacción de laWorld Wide Web. HTTP fuese extendido por el World Wide Web Consortium y la Internet Engineering Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, siendo el más significativo de ellos el RFC 2616, que especifica la versión 1.1. HTTP determina la sintaxis y la semántica que emplean los fundamentos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y Seguid el esquema petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la petición (un navegador web o un spider) se lo conoce como ?user agent? (agente del usuario). A la información transmitida se la llama medio y se la identifica mediante un localizador uniforme de medios (URL). Los medios pueden ser archivos, el fruto de la ejecución de un programa, una consulta a una fundamento de datos, la traducción automática de un documento, etc. Hypertext Transfer Protocol Secure (en español: Protocolo seguro de transferencia de hipertexto), más conocido por sus siglas HTTPS, es un protocolo de red basado en el protocolo HTTP, dedicado a la transferencia segura de datos de hipertexto, es decir, es la versión segura de HTTP. Es utilizado principalmente por entidades bancarias, tiendas en línea, y cualquier tipo de servicio que requiera el envío de datos personales o contraseñas. Java es un lenguaje de programación orientado a objetos extendido por Sun Microsystems a comienzos de los años 90. El lenguaje en sí mismo coge mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina dispositivos de debajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. *El World Wide Web Consortium, abreviado W3C, es un consorcio internacional que produce recomendaciones para la World Wide Web. Está dirigida por Tim Berners-Lee, el creador original de URL (Uniform Resource Locator, Localizador Uniforme de Recursos), HTTP (HyperText Transfer Protocol, Protocolo de Transferencia de HiperTexto) y HTML (Lenguaje de Marcado de HiperTexto) que son las principales tecnologías sobre las que se cimienta la Web. La Web Accessibility Initiative (WAI) o Iniciativa para la Accesibilidad Web es una rama del World Wide Web Consortium que vela por la accesibilidad de la Web. TIPOS DE FORMATOS MÁS COMUNES EN LA REDLos ficheros comprimidos más comunes son los que tienen estas extensiones .ZIP, .SIT y .TAR.Los formatos de ficheros de gráficos más comunes en la Web son aquellos con extensiones .jpg y .gif.Para vídeo, las extensiones populares son .AVI y .RAM para PC, .MPG (abreviatura de MPEG), que es independiente de plataforma, pero necesita su propio reproductor, y .MOV y .QT para películas QuickTime.El formato de archivo de sonido más popular actualmente es .MP3.Los documentos con formato son .doc y .pdf.TIPOS DE FORMATOS MÁS COMUNES EN LA REDLos ficheros comprimidos más comunes son los que tienen estas extensiones .ZIP, .SIT y .TAR. Los formatos de ficheros de gráficos más comunes en la Web son aquellos con extensiones .jpg y .gif.Para vídeo, las extensiones populares son .AVI y .RAM para PC, .MPG (abreviatura de MPEG), que es independiente de plataforma, pero necesita su propio reproductor, y .MOV y .QT para películas QuickTime. El formato de archivo de sonido más popular actualmente es .MP3.Los documentos con formato son .doc y .pdf. HTML, siglas de HyperText Markup Language (Lenguaje de Marcado de Hipertexto), es el lenguaje de marcado predominante para la preparación de páginas web. Es usado para describir la articula y el contenido en manera de texto, así como para complementar el texto con objetos tales como imágenes. HTML se escribe en manera de ?etiquetas?, rodeadas por corchetes angulares (,>). HTML también puede describir, hasta un cierto punto, la aspecto de un documento, y puede incluir un script (por ejemplo Javascript), el cual puede afectar el comportamiento de navegadores web y otros procesadores de HTML. XML, siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible), es un metalenguaje extensible de etiquetas extendido por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y faculta definir la gramática de lenguajes particulares (de la misma forma que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una forma de definir lenguajes para distintos necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML. Hypertext Transfer Protocol o HTTP (en español protocolo de transferencia de hipertexto) es el protocolo usado en cada transacción de laWorld Wide Web. HTTP fuese extendido por el World Wide Web Consortium y la Internet Engineering Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, siendo el más significativo de ellos el RFC 2616, que especifica la versión 1.1. HTTP determina la sintaxis y la semántica que emplean los fundamentos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y Seguid el esquema petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la petición (un navegador web o un spider) se lo conoce como ?user agent? (agente del usuario). A la información transmitida se la llama medio y se la identifica mediante un localizador uniforme de medios (URL). Los medios pueden ser archivos, el fruto de la ejecución de un programa, una consulta a una fundamento de datos, la traducción automática de un documento, etc. Hypertext Transfer Protocol Secure (en español: Protocolo seguro de transferencia de hipertexto), más conocido por sus siglas HTTPS, es un protocolo de red basado en el protocolo HTTP, dedicado a la transferencia segura de datos de hipertexto, es decir, es la versión segura de HTTP. Es utilizado principalmente por entidades bancarias, tiendas en línea, y cualquier tipo de servicio que requiera el envío de datos personales o contraseñas. Java es un lenguaje de programación orientado a objetos extendido por Sun Microsystems a comienzos de los años 90. El lenguaje en sí mismo coge mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina dispositivos de debajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.

Java y javascript, Depuración EN JAVA

En el post previo mencioné los mecanismos básicos para controlar la ejecución del programa: puntos de interrupción, step over y step in. En esta tercera fracción voy a completar la idea con algunos más para parar el proyecto y una explicación significativo sobre el nivel de granularidad con que se pueden indicar estos puntos de la ejecución en el código fuente. También, les voy a contar sobre algunos otras maneras especiales para regresar atrás en el tiempo o alterar (casi) arbitrariamente la ejecución, cosas que en la práctica facultan considerar algúnas veces un mismo error, o ensayar determinadas soluciones antes de codificarlas. La ventaja reside en no tener que reiniciar el proyecto y llegar una vez más hasta el punto conflictivo, lo cual puede llevar bastante tiempo o ser tedioso. Pero además, como resultado colateral, esto sentará una fundamento que permitirá realizar algunos trucos para sortear ciertas limitaciones más adelante cuando hablemos de inspección de expresiones y otras acciones similares. El último mecanismo normal para parar el proyecto según las lineas del código fuente que falta referir es el que faculta ejecutar hasta alguna línea. Este mecanismo, válido cuando el proyecto ya se ha detenido preliminarmente por cierta otra razón. Podemos ubicar el cursor en una línea de código e indicarle al depurador que continúe ejecutando usualmente hasta conseguir esa línea (Shift+F7). Antes de hacerlo, ZinjaI verifica que la línea del cursor sea válida, y si no lo es, avisa y no avanza, para eludir sorpresas. Pero si consideramos que una instrucción de código C++ fuente se puede traducir al compilar en muchas instrucciones de código de máquina, hay un nivel de granularidad más fino que el depurador podría controlar (y de hecho lo hace). Sin embargo, realizar esto solo tiene sentido si conocemos mucho de ensamblador y de como funcionan los compiladores y estamos mirando detalles muy muy finos. Por ejemplo, si estamos optimizando hasta el nivel de código de máquina (cosa que usualmente solo se hace en motores de videojuegos muy específicos, o en drivers), o si poseemos la osadía de depurar código para el cual no poseemos información de depuración o sus fuentes. Ambas situaciones no son para nada comunes entre usuarios de ZinjaI, y todavía no me han tocado a mi tampoco, así que ZinjaI todavía no tiene un conjunto de controles para ver y ejecutar instrucciones de ensamblador. Entonces es significativo a saber es que los puntos de interrupción y demás "lugares" del código fuente generalmente se le indican al depurador por número de línea, y en una línea puede haber muchas instrucciones. Por ejemplo, una línea "if (a>b) max=a; else max=b;" solo permitirá parar la ejecución justo antes de valorar la condición, y avanzar hasta después del if completo. Pero si dividimos esa linea en tres, una con el if, otra con la acción por verdadero y otra con la acción por falso, podemos ahora diferenciar las tres partes. Por esto, para depurar, conviene eludir lineas largas con muchas instrucciones, y ubicar solo una instrucción/condición por línea. controlar mejor al ejecución desde el depurador La manera que queda de parar el proyecto es recibiendo una señal. La señal la puede generar el usuario (por ejemplo, Ctrl+C en la consola), el lanzamiento de una excepción (esas cosas de try-catch-throw-etc estilo java), o el sistema operativo (como por ejemplo, en una violación de segmento). Los dos últimos casos son los más comunes, porque implican yerros que normalmente deseamos corregir y por ello estamos depurando. El primero es el que simula ZinjaI cuando usamos el botón de Pausa para parar la ejecución en un momento dado (y no por llegar a cierto punto), simula una señal de interrupción y esto hace que gdb retome el control. En verdad hay una manera más y escaso general de parar el proyecto que es generando una de estas situaciones desde el mismo proyecto que está siendo depurado. En este producto hablé de la macro _revienta, que emplea este mecanismo para hacerse pasar por un punto de interrupción, y es muy provechoso para reemplazar a assert. Ahora que conocemos ejecutar y detener, podemos pensar en cosas más raras. Una de ellas es regresar el tiempo atrás. Desde hace determinadas versiones gdb incorporó un mecanismo para deshacer la ejecución. Este mecanismo consiste en verdad en ir registrando todos los cambios de cada instrucción, guardando los valores viejos de las variables que se van modificando, y unas cuantas cosas más que llevan mucho tiempo y memoria (todo tarea del depurador). En ZinjaI figura como "Ejecución hacia atrás" en el menú de depuración. Primero hay que habilitarla para que registre todos los cambios, despues ejecutar usualmente paso a paso hacia adelante, y en determinado momento que querramos, podemos deshacer esos pasos. Esto agrada muy prometedor cuando uno lo lee, y por eso lo incorporé en ZinjaI ni bien lo implementó gdb, pero personalmente casi jamás lo he usado, y en varios casos no funciona correctamente (el depurador se cierra sin aviso, tal vez en versiones futuras de gdb se torne más estable). Otras dos alternativas más interesantes y que sí uso mucho son las de salir de una función sin terminar de ejecutarla, y la de brincar arbitrariamente por el código. La primera (return, Ctrl+F6 en ZinjaI) sirve para salir de una función sin ejecutar los que falte de la misma. Para ello, si la función no es de tipo void, debemos ingresar el valor de retorno que el depurador incluirá en la memoria como si lo hubiese retornado la función. Esto es provechoso cuando una función no retorna lo que necesitamos para continuar depurando. Pero más provechoso todavía es poder pausar la ejecución en un punto, y continuar desde otro. Supongamos que veníamos analizando una función, y empezamos a avanzar sin prestar mucha atención, y de pronto la función sale, o saltea una articula de control, o una variable coge un valor inesperado, etc. Una manera de averiguar qué ocurrió es regresar a ejecutar el programa, esta vez deteniendonos antes, o progresando paso a paso con más cuidado. Pero regresar a ejecutar el proyecto puede ser tedioso y llevar tiempo. En muchos casos basta con decirle al depurador que modifique los registros para que el proyecto crea que estaba en otra posición (antes del error) y continúe desde allí, regresando así a ejecutar la fracción que nos interesa. Un caso tradicional es cuando damos step over en una llamada a función y vemos que retorna algo inesperado. Si nos interesa ver qué pasa dentro de la función, podemos regresar a ejecutarla, pero esta vez con step in. Para eso, en ZinjaI, vamos con el cursor a la linea de la llamada y presionamos Ctrl+F5 (Continuar desde aquí). Ahora, el proyecto pensará que estaba por ejectuar esa línea, porque el depurador habrá modificado los registros que dicen donde va la ejecución. Y allí podemos continuar con step in para ver que ocurre. No siempre es posible, y hay que utilizarlo con cuidado (nos faculta por ejemplo brincar de una función a otra, pero eso no se debe, probablemente destruyamos el stack al salir de la función), pero es una de las alternativas que más uso cuando depuro. Hay que tener cuidado porque a diferencia de la ejecución hacia atrás, aquí al regresar el punto de ejecución a una instrucción previa, no volvemos los estados de las variables al estado que tenían cuando se ejecutó esa instrucción por primera vez, así que normalmente conviene regresar un escaso más a determinado punto donde se asignen las variables (por ejemplo al principio de una función) para que la segunda ejecución de la instrucción de interés sea realmente útil. En la consola se observa que el proyecto ya avanzó hasta el final mostrando el fruto (y con es_primo quedando en falso), pero en ZinjaI la saeta verde en el borde indica que se volvió el punto de ejecución (Ctrl+F5) a la línea donde inicializa la bandera. Finalmente, quedarían por tapar las alternativas del breakpoint (shift+click sobre el punto rojo), que facultan definir entre otras cosas una condición a evaluar, de manera que la ejecución continúe si la condición no se cumple. Esto es útil, pero hay que notar que el depurador internamente detendrá siempre el programa, evaluará la condición, y continuará automáticamente si no se cumple, dando la sensación de que en verdad no se detuvo. Si la linea en cuestión se ejecuta muchas veces, este procedimiento ralentizará notablemente (mucho) la ejecución del programa. Una alternativa más simple y eficiente, si se sabe de antemano cuantas veces la condición será falsa antes de ser verdadera, es introducir esa porción en el tema de "ignorar" para que ignore las primeras pasadas por esa línea. Nuevamente el depurador se detendrá, contará y seguirá, pero esto es más rápido, ya que lo lento en el caso previo es en común la evaluación de la condición.

Java y javascript, Descargar Adobe Creative Suite 6 Master Collection

La nueva familia de los artículos de Adobe CS6 ya lleva unos días (un par de semanas aprox.) de recién estrenado. Casi de inmediato en muchos blogs o foros desde el mismo día de su lanzamiento (no oficial), CS6 ya se encontraba disponible para su descarga alojado en determinado server subidos por terceras personas. Recién apartir de ayer 07/05/2012 el lanzamiento ya es oficial (pueden verlo en la web de Adobe) y por ello Adobe Creative Suite 6 ya está disponible para su descarga inmediata y compra directa. A continuación mostraremos una serie de links de descarga directa TRIAL (de prueba) por 30 días de todos los artículos individuales de Adobe CS6 en los principales idiomas. Estos enlaces son los auténticos y originales pues son ficheros que residen en los servidores de Adobe, por lo que son los ficheros de instalación originales. Por otro lado, es muy significativo que tengan en cuenta lo siguiente: En la versión para Windows cada proyecto de CS6 se distribuye de dos maneras, un archivo .EXE y un archivo de 7-Zip (.7z) El fichero EXE sólo funcionará una vez pues es algo parecida a un gestor o asistente de descarga que - valga la redundancia - descargará los ficheros necesarios de instalación. Por otro lado el archivo .7z es la descarga completa y directa de todos los ficheros de instalación en formato comprimido y usable cuántas veces deseen. Los idiomas soportados cambian según el producto. Principalmente se distinguen por los paquetes LS (LS16, LS3, LS4, LS7, etc) cuya aclaración podrá ser leída mas adelante en este mismo artículo. Tenga en cuenta que la descarga TRIAL de Adobe Photoshop CS6 es siempre la versión extendida (Extended version) que tiene todas las características de Photoshop por 30 días, incluyendo el contenido 3D y basado en movimiento), ya después de instalarlos ustedes pueden usar el método de activación que más les convenga y dejarlos con sus funcionalidades completas comprando el producto. Acerca del Idioma en las descargas (Idioma de destino LS): Antes de empezar la descarga, lea detalladamente la próximo indicación para saber cuál es el idioma que elegirá LS3: ko-KR / zh-CN / zh-T LS4: da-DK / de-DE / es- es-MX / fi-FI / fr-FR / fr-CA / it-IT / nb-NO / nl-NL / pt-BR / sv-S LS1 en-US / en-UK / en-GB / ja-JP En una aclaración breve, el LS4 es la descarga que contiene al idioma Español (es-ES y es-MX), entretanto que el LS16 contiene al idioma Inglés (en-US y en-GB) Instrucciones muy importantes, si no las sigues obtendrás una y otra vez el mensaje "Access Denied" Para poder descargar desde los links que mostraremos más adelante, debes por obligación tener una cuenta gratuita en la web de Adobe e empezar sesión en ella. Esto es sumamente significativo ya que al no realizarlo se te negará el entrada a la descarga y obtendrás el mensaje de "Access Denied", parecida a lo siguiente: Access Denied You don't have permission to access " Reference #18.1e1b434d.1336522896.19e859ae Es indispensable estar logueados en vuestra cuenta porque sólo así Adobe establecerá una cookie de sesión en vuestro navegador lo que nos permitirá alcanzar a los enlaces de descarga directa. Porfavor, realice las próximos indicaciones al detalle para que pueda hacer la descarga, caso opuesto tendrá problemas: Da click en el próximo link de la web de Adobe para que inicies sesión en tu cuenta o para que te registres gratuitamente (te tomará un minuto): Registro en la web de Adobe Si ya tienes una cuenta creada, recuerda que tu ID de Adobe es tu dirección de correo electrónico con el que te registraste, entonces comienza sesión con él (marca la casilla de "Recordármela" Es probable que aún habiéndote logueado, sigas sin poder descargar de los links, para solucionarlo debes simular descargar una aplicación cualquiera de Adobe desde su particular web. Por ejemplo puedes dirigirte al próximo link para simular descargar Acrobat XI Pro Simular descargar Acrobat XI Pro y allí presiona el botón Descargar ahora que se descubre al final. Emergerá una pequeña ventana pop-up para descargar el trial de nombre AdobeDownloadAssintant.exe

Entradas populares