Mostrando entradas con la etiqueta php. Mostrar todas las entradas
Mostrando entradas con la etiqueta php. Mostrar todas las entradas

jueves, 22 de mayo de 2014

La informática que nos rodea

Cuando alguien me dice que va a estudiar informática me da algo de miedo porque creo que esa persona no sabe dónde se está metiendo. Ni siquiera creo que sepan lo que significa ese término. Es un mundo de inmensas posibilidades y no se puede tomar a la ligera.

Por cierto, que la gente suele decirme estas cosas del mismo modo que me dicen que han dejado de fumar; como si yo fuera la policía de la salud o un experto en informática. Cosas que no me considero en absoluto.

No me considero informático aunque haya hecho trabajos propios de un informático. Y puede que tenga más conocimientos de algún tema que algunos profesionales. Pero cada día hay novedades y cambios en este mundo y no estoy puesto en ellos, ni me intereso activamente por informarme de todo. Al margen de que es inabarcable y está lleno de incertidumbre sobre qué métodos son mejores para hacer según qué cosas.

Pero ahora mismo, en este artículo, quiero explicar en qué consiste "esto de los ordenadores" desde mi punto de vista "apasionado del software". Porque es cierto que no debemos dar la espalda a la informática o su evolución que sería el mundo de Internet, la Aldea Global; o lo que llaman las I.T. (Tecnologías de la Información). Y que aunque tengamos cierta habilidad adquirida puede que nos abrume tanta posibilidad, o el simple hecho de desconocer esas posibilidades.

No prestar suficiente atención a esto te convierte ya, hoy día, en un analfabeto.

A mi me empezó a enganchar la informática con menos de 10 años. Y por entonces ya programé en Basic en un cuaderno en los recreos (sin ordenador), y poco después algunas chicas me preguntaban, también en los recreos, si leía la biblia, porque tenía un pequeño libro muy gordo... que en realidad era un diccionario de términos informáticos de bolsillo. jajaja.

El caso es que a mí la informática nunca me atrajo como una profesión sino como una herramienta para crear contenidos, comunicarme con ella, divertirme y como un cosmos de exploración infinito.

Como yo, otras personas vieron en su día algunas posibilidades de la informática que les permitió ganarse la vida gracias a que también les gustó algún aspecto de la tecnología o los sistemas informáticos; bien sea el hardware como evolución de la electrónica, la programación, edición de contenidos, análisis de datos científicos, o algún otro uso divulgativo, literario, artístico o del mundo del entretenimiento.

Así que hubo un tiempo en que era suficiente con saber decir "ordenador" para tener trabajo. Ya que las aplicaciones de "esta tontería" son casi ilimitadas.

Pero ¿qué es un ordenador?

Un ordenador no es más que una serie de circuitos integrados o micro-chips conectados a varios periféricos con un sistema que permite al usuario dar órdenes y recibir respuesta a ellas.

Gracias a los programas estas órdenes pueden ser automatizadas para evitar tareas que de otro modo serían tediosas y rutinarias.

Pero las cosas no son tan maravillosas y sencillas como parece.

Un procesador, CPU, (o Unidad Central de Procesado) es un micro-chip que, como otros micro-chips con distintas funciones en el ordenador, recibe datos binarios y devuelve respuestas correspondientes según lo recibido, siendo capaz de realizar millones de cálculos y operaciones por segundo.

Toda pieza de hardware tiene micro-chips que reciben y envían datos binarios; Unos y ceros.

Por ejemplo, un teclado recibe las señales de cada pulsación y envía el código correspondiente en un estándard establecido para que el ordenador interprete qué teclas se están pulsando.

Las tarjetas gráficas tienen procesadores que reciben datos con ordenes para ser convertidas en señales de vídeo que se representan en el monitor.

Una impresora tiene un procesador que recibe señales para hacer mover sus mecanismos e imprimir en papel lo envíado.

El código binario de las máquinas es algo más que complicado para que las personas corrientes podamos comunicarnos con ellas al nivel más directo (bajo nivel). Además, cada fabricante, en ocasiones, inventa su propio juego de órdenes binarias para sus aparatos que luego han de ser "estandarizadas" con pequeños programas que podríamos llamar drivers, o controladores.

Y todo el hardware debe controlarse con programas. Pero hay tantas formas de programar como granos de arena en una playa, o modelos de iPhone.

Programación a Bajo Nivel:
La programación a bajo nivel está reservada a mentes superdotadas. No digo que haga falta ser un genio, pero podemos sacar de este grupo a políticos o tertulianos de TV y el mundo del "famoseo".

Programar a bajo nivel significa que das las instrucciones, no al sistema operativo (que se instala en un ordenador) sino directamente a los micro-chips que controlan el ordenador (o dispositivo).

El código máquina son órdenes en lenguaje que el procesador puede entender directamente sin necesidad de aplicaciones que hagan de interprete para hacer su tarea. De modo que las aplicaciones hechas a este nivel o en ensamblador, lenguaje (también de bajo nivel) un poco más "humano" que el código máquina pero igual de complicado, funcionan con más eficiencia y velocidad que otras aplicaciones hechas a otros niveles.

Lenguajes compilados:
Entre medio hay diversos lenguajes de programación, con distintos tipos de estructura, que pueden ser compilados, generando un programa similar a los que genera el ensamblador, para que el ordenador haga lo que se le pida. La mayoría de aplicaciones profesionales se hacen en estos lenguajes; usando C, C++, Java (aunque este lenguaje es una excepción, dentro de la categoría, ya que emplea un intérprete creando una máquina virtual que se comunica con el procesador, de modo que no es tan eficiente), etc.

Lenguajes de alto nivel / scripting:
Aunque se llamen de alto nivel, no son los lenguajes con los que puedas presumir de tener un "nivel alto" en informática; Aunque desde luego programar está muy por encima de eso que ponen algunos en su currículum de "Conocimientos medio-alto de informática a nivel usuario".

Para presumir aprende código máquina de varios tipos de procesador comunes en smartphones, tablets y aparatos raros que nadie entiende y entonces estaríamos hablando de un erudito. jejeje.

Estos lenguajes de programación usan un intérprete intermedio que adapta las órdendes para realizar las tareas ordenadas por el programa. Tiene la ventaja de que la sintaxis es más fácil de entender; al no estar compilado puedes ver cómo están hechos otros programas y aprender más fácilmente.

Además ofrecen una facilidad muy grande para interactuar con otros programas y por tanto crear aplicaciones más útiles y complejas.


Este es el tipo de lenguaje que conozco un poco. Y es también de los más utilizados para hacer algunas aplicaciones, incluso algunas bastante potentes. En ocasiones puede llegar a compilarse para no requerir intérprete pero nunca llegarán a funcionar tan bien como las programadas en lenguajes compilados o a bajo nivel.

En esta categoría están lenguajes como Python, Perl, PHP, REXX, ARexx, AppleScript, VBScript, Ruby, Lua, etc.

Conocer las peculiaridades de cada lenguaje se queda a vuestra curiosidad.

A mayor curiosidad mejor. Aunque podéis caer en un pozo sin fin. Porque, a menos que seais muy disciplinados, el tiempo que os puede robar la "informática" pueden ser eones.

No se deben despreciar tampoco los conocimientos en lenguajes de consulta de bases de datos como SQL y derivados. Puesto que en muchas ocasiones lo único que se hace en un ordenador es almacenar, crear, modificar y eliminar datos; Cosa que se hace muy eficientemente desde muchos de estos lenguajes de programación y pueden ahorrar reescribir aplicaciones que hacen las mismas cosas pero usan contenidos diferentes.
Temible
Código Máquina
/ Ensamblador
de ZX Spectrum

Esto es algo que aprendí gracias a PHP y pelearme con sistemas de contenido web que emplean bases de datos para todo.

Si quieres aprender a hacer páginas web, lo tienes muy sencillo y bien estructurado en lugares como http://www.w3schools.com/

Ahora bien, no le debes tener miedo al inglés. ¡Al menos no es código máquina! Eso sí que da miedo.

Scripting:
Abrir una consola y teclear órdenes en vez de hacer click en el icono de un complaciente entorno gráfico del sistema operativo (que probablemte abra un script ya programado) es también un modo más directo de hacer algunas cosas en el ordenador. Se puede programar una serie de órdenes mediante scripts que permiten automatizar todo tipo de tareas. En PCs con Windows se emplea DOS o cosas más avanzadas como Windows Powershell, mientras que en sistemas Linux o Mac lo suyo es el Bash scripting.

En móviles Android he visto que existe alguna implementación de Lua, Luarida. Que puede ser interesante para hacer cierta automatización de tareas. Y tímidos intentos de portar otros lenguajes de script. Y es posible acceder a la consola y usar Bash con algunas limitaciones, ya que es un sistema Linux con una máquina virtual integrada, a'lla Java.

Cualquiera de estos lenguajes no sirve para nada sin una cabeza abierta para la lógica, razonamiento, algunos cálculos matemáticos, bastante intuición o capacidad de concentración, y un montón de imaginación para hacer realidad cualquier cosa que te propongas.

Más en wikipedia:
Historia de la computación
Timeline of computing

Esto es muy largo. Si hay algún error o imprecisión o quieres comentar algo... cuéntamelo en un comentario (abajo).

jueves, 24 de abril de 2014

Breve parada en Kyōto

Este artículo debería haber sido sobre anime pero, una vez más, recurro a mi material de viajes.

El primer shinkansen(tren bala japonés) en que monté, de un total de seis, en mi primer viaje por Japón (y único, por ahora, en octubre de 2011) fue desde Yokohama hasta Kobe.

Hacer fotos o captar vídeo desde trenes en marcha me resultó un poco frustrante. Ya que una gran parte de mi tiempo en Japón consistía en viajar en trenes. El resultado deja bastante que desear con la sencilla cámara de vídeo doméstica de pocos controles manuales que usé, y no digamos con mi viejo móvil con cámara hipermétrope de foco fijo. Añadiendo a esto la dificultad de estar en movimiento sin saber qué se verá después, o cuando entraremos en uno de los muchos túneles que hay en Japón.

En algunas grabaciones me daba por experimentar a cambiar el framerate de la cámara para ver si lograba captar a alta velocidad alguna imagen que en cámara lenta pudiese quedar más o menos decente. Pero siempre quedaba mejor el framerate de la cámara, de unos 30fps.

De todas formas cada pedacito de vídeo de duración suficiente que capté es un grato recuerdo y transmite el ambiente sonoro y detalles gráficos del enigmático y apacible país del Sol Naciente.

Quiero compartir aquí un breve momento en que el shinkansen pasó por Kyōto, visto desde la ventanilla del tren.

 


jueves, 4 de julio de 2013

A saco con los kanji

Prólogo:

Anki es un famoso programa que ayuda a memorizar cualquier materia con una técnica de repaso espaciado. Básicamente ayuda a memorizar cosas más deprisa que medios convencionales. Ya que se gana tiempo al repasar más a menudo sólo aquellas cosas que olvidas con más frecuencia, dejando para más tarde lo que olvidas menos.

La memoria funciona de tal forma que cuando aprendes algo empiezas a olvidarlo; pero si justo antes de olvidarlo del todo lo vuelves a repasar tarda más en olvidarse, y si antes de olvidarlo de nuevo lo repasas y vuelves a repasar con este sistema, como unas 10 veces, es muy probable que ya no lo olvides nunca.

Actualmente tras un curso de octubre a junio, con clases semanales casi particulares de japonés con el libro de texto みんなの日本語, estoy de "vacaciones" y toca repasar lo aprendido. Además tras varias "paradas técnicas" estoy siguiendo con constancia el libro del Dr. Heisig, Marc Bernabé y Verónica Calafell "Kanji para Recordar 1" donde se puede lograr perder el miedo a los kanji y se aprende a reconocerlos de forma imaginativa.

Desde mayo llevo un buen ritmo el aprendizaje de los temidos jōyō kanji, o letras chinas de uso general en japonés, incluyendo el suplemento. Cada día aprendo 10 nuevos kanji y los agrego(¿cómo? más abajo lo explico.) a mi mazo de repaso en Anki.

Hay 2 formas de usar Anki para aprender idiomas: Lo que llaman el modo "Reconocimiento" y el modo "Producción".

El Reconocimiento consiste en ver algo en el idioma que estás aprendiendo, tratar de adivinar la traducción a tu idioma y ver si has acertado en el reverso de la nota (carta o flashcard) que se genera con Anki.

Heisig recomienda la segunda forma de usar Anki, que quizás es más dura al comienzo pero doy fe de que es mucho mejor. Aunque combinar un poco ambas técnicas no puede hacer daño cuando ya has madurado bastante el repaso.

El modo Producción con "Kanji para recordar", consiste en adivinar como es el dibujo del kanji viendo primero la "palabra clave" en tu idioma. Ya que lo que se aprende con Kpr1 no son exactamente traducciones a tu idioma sino una interpretación del significado más común para un kanji (que puede tener varios significados) o incluso algo totalmente inventado, que no tenga que ver con su significado habitual, y que puede venir bien para recordarlo y asociarlo como componente en otros kanji. Al tiempo que aprendes a dibujarlo con tu propia mano en el orden correcto de los trazos lo que también te ayuda a recordarlo con otro tipo de memoria; que no sea un simple reconoce, repite, y repasa.

ANKI:

Con el tiempo he ido aprendiendo de las muchas ventajas que tiene Anki. Aunque aún habrá cosas que no controlo.

Su principal ventaja es que puedes usarlo en el smartphone, tablet, el ordenador en cualquier sitio con acceso a la web ankiweb. Y sincronizar tu progreso en los distintos dispositivos.

Poco a poco le he ido sacando bastante partido.

Lo ideal para aprender algo con Anki es hacerse uno mismo el mazo conforme va aprendiendo lo que sea. Aquí tenéis un vídeo tutorial básico que hice sobre cómo hacer y actualizar un mazo.



Para los Kanji se pueden encontrar mazos compartidos de muchos métodos diferentes. Incluyendo el de Kanji para Recordar. Pero, como ya he dicho, es mejor hacerse uno el mazo conforme va aprendiendo, en el caso de este es más importante porque con el método de Heisig deben aprenderse en cierto orden y Anki sólo debe usarse para repasar los aprendidos.

Los mazos que he encontrado en castellano no incluyen los 196 nuevos kanji que le faltan a KpR1 desde la reforma de los jōyō kanji de 2010.

Me lié la manta a la cabeza y los adapté con ayuda del proyecto diccionario Kanjidic2 que es un texto en forma de "base de datos" XML que incluye kanjis, traducciones en distintos idiomas, número de trazos y distintos códigos de indices incluyendo los Heisig.

También requerí algún mazo en inglés y los fui adaptando más o menos.

Encontré algún término cambiado que se había corregido en KpR como "castigar" por "reprimenda" así que los arreglé. Pero puede haber alguna incosistencia más respecto al libro y suplemento.

Aún así la última edición a la venta todavía tiene alguna errata y seguramente cambiará el índice respecto a la futura edición que incluya el suplemento.

Un problema que me encuentro a menudo es que algunos kanji de los recientemente aprobados han cambiado de forma y casi siempre usan el mismo código Unicode lo que hace que no se vean como deben verse.

Por ahora el tipo de letra que yo conozco que más se acerca a tener todos bien es una fuente ttf llamada "Hiragino Mincho Pro" (enlaces abajo).

Para repasar el orden de los trazos es muy importante disponer del tipo de letra KanjiStrokeOrder (abajo enlace).

Sin embargo para que funcione en el móvil (uso Android, con Ankidroid) el archivo debe introducirse en la aplicación de escritorio (Windows, Linux, Mac) en la carpeta del usuario en la raiz de la carpeta de archivos multimedia compartida conocida como "collection.media/" (~/Anki/Usuario/collection.media/_KanjiStrokeOrders.ttf en linux, o algo parecido)

Además, según la plataforma es posible que haya que poner un guión bajo delante y corregir la plantilla de las tarjetas para que haga referencia a esa fuente para mostrar los kanji. Tal que así, en el apartado Estilo de los "Tipos de Tarjeta":

@font-face {
font-family: MiKanjiStrokeOrders;
font-style: normal;
font-weight: normal;
src: url('_KanjiStrokeOrders.ttf') format('truetype');
}

.jp {
font-family: miKanjiStrokeOrders;
}


.mobile .jp {
font-family: miKanjiStrokeOrders;
}

.mac .jp {
font-family: KanjiStrokeOrders;
}

.win .jp {
font-family: KanjiStrokeOrders;
}

.linux .jp {
font-family: KanjiStrokeOrders;
}




De este modo al sincronizar el contenido multimedia en el móvil se puede ver el tipo de letra con la fuente mostrando el orden de los trazos. Aunque ojo con el wifi/3G porque lo font ocupa unos 18MB.

En ocasiones me ha fallado al principio no mostrándose el kanji con la nueva font en el móvil. Pero se soluciona dándole a editar una nota y al grabarla o cancelar se ven todas ya.

El problema con los kanji que han cambiado de forma tiene más difícil solución. Este por ejemplo ahora tiene un trazo más:


Sólo cabe esperar a ver si se actualiza en más sitios y el autor de la fuente KanjiStrokeOrders lo actualiza también.


Hasta hace bien poco además de Anki usaba la web Kanji Koohii, donde hay una nutrida comunidad de usuarios que siguen alguna de las versiones de Kanji para Recordar en español, inglés, alemán, italiano... y comparten historias imaginativas para ayudar a la mnemotecnia. Pero existe un plugin para Anki (escritorio, mac, win, linux) que te permite importar tu progreso de la web de Kanji Koohii y hacer lo mismo que haces en esa web en el Anki, simplificando un poco el proceso cuando usas varios mazos de aprendizaje.

Todo esto no tiene ningún sentido si no sigues el libro de KpR1 pues los índices Heisig no tienen nada que ver con el orden en que están estructurados los exámenes y frecuencia de uso de los kanji. Heisig propone aprenderlos todos sin excepción. Saltándose la tediosa labor de aprender su lectura y los compuestos en principio, pero sirviendo de magníficos cimientos para enfrentarse a ello después.

Los mazos que se encuentran por Anki incluyen los kanji de los libros Kanji para Recordar 1 y "Remember the Kanji 3". Que parece ser, este tercer libro no saldrá en España, puesto que con la técnica de KpR se pueden aprender los casi 1000 de RtK3 y los cerca de 47.000 más de los kanji japoneses no tan habituales. (Por si alguien se lo pregunta aún, el libro "Kanji para Recordar II" enseña las lecturas y los compuestos de los jōyō.)


Así pues, me programé una serie de scripts que sirven para consultar las tablas de kanji jōyō y la que tiene los añadidos en 2010 y los ordena como deberían ser estudiados en el orden que propone Heisig según el suplemento.

De modo que, cuando aprendo 10 kanji, le digo el número de índice Heisig que va primero y se generan 10 (o los que quiera) en un archivo .csv que importó fácil y rápidamente en el mazo que tengo para los kanji recien aprendidos. Y que llegará a tener 2199 kanji allá por noviembre, si nada se tuerce.

Además como a partir de cierta lección los kanji sólo se ven en su forma de imprenta y a veces me confunde respecto a la forma manuscrita, para dibujarlos bien creé otro script que genera el número de hojas de 10 kanji que le pida, para tener para varios días  (con la fuente KanjiStokeOrders). Aunque por ejemplo la última lección del libro, he visto por anticipado que es preferible no disponer de esa forma para que seas tú mismo quien averigüe la forma manuscrita.


Para consultas puntuales me creé tres scripts accesibles mediante un atajo de teclado como las teclas F6, F7 y Shift+F7. Que muestran el kanji (y lo copian al clipboard para pegarlo donde quiera; muy útil para mirar un diccionario o hacer búsquedas) al que le corresponde un índice Heisig. O lo contrario, con F7, meto un kanji y me dice el índice Heisig. Y más divertido aún, personalizado y complejo, el script que arranco cuando pulso Shift-F7 me pregunta el kanji y me dice cuándo me toca estudiarlo, su palabra clave, número de trazos y una cantidad extra de información útil.



Además del mazo "Kanji Koohii" y el de mis clases basadas en Minna no nihongo, tengo un tercer mazo donde metía los que olvidaba cuando usaba la web de Kanji Koohii, porque en esa web me resultaba problemático que llegasen a acumularse kanji para reaprenderlos y nunca pulsaba que me habían resultado "olvidados / mal 1" sino que evitaba poner que habían sido "fáciles 3 (o 4 en Anki)", dejando como poco en "bien 2".


Los demás mazos los he descargado de la sección Shared Decks de Anki y sólo les hago algo de caso si tengo mucho tiempo libre. (casi nunca) Están para probar.

La versión de escritorio es necesaria para hacer labores de sincronización, estadísticas, etc más fácil. Aunque sería posible actualizar mazos y añadir flashcards (notas) desde la app móvil. Pero siempre es más fácil de automatizar todo con la versión de ordenador.


Enlaces:

Si alguien quiere importarse el mazo de 2199 kanji aquí va en formato .csv, incluyendo los campos separados por tabulación: 'kanji', 'palabra clave', 'historia' (campo vacío para añadir una historia mnemotécnica), 'número de trazos', e 'índice heisig'.


Puede haber imprecisiones, y alguna modificación mía, por ejemplo en el kanji de índice Heisig 940A pone la vieja forma del kanji en la 'palabra clave', cuya nueva forma es un código unicode diferente; tal que así: 'artículos de papelería (viejo: 箋)'.


Pero como lo ideal es crearse el mazo poco a poco: Aquí va mi script para crear un archivo CSV personalizado (casi me quedo sin cenar por adaptarlo para la Web ;))


  • Tipo de letra con kanji de estilo manuscrito con indicación del orden de los trazos: KanjiStokeOrders (última versión conocida v3.000 - 9MB comprimida en zip)
  • Tipo de letra con kanji de imprenta bastante completa. He convertido la que encontré a formato TTF que la hace compatible con Libreoffice y otros programas: Hiragino-mincho-pro-w3

Y eso es todo. Espero que sea de utilidad.
Cualquier duda preguntar e iré aclarando.

viernes, 15 de mayo de 2009

Kanji

Un día, aun no se muy bién por qué, me dió la venada y empecé a estudiar hiragana y katakana. El libro se presentaba como un aperitivo para enfrentarse después a los "temidos kanji".

Me costó solo tres días aprender el silabario hiragana, a razón de dos lecciones diarias, con descanso entre una y otra.

Y tardé una semana más para el katakana, a otro ritmo, pero que en total fue menos tiempo invertido que las 4 horas y poco que tardé en aprender los 45 fonemas básicos escritos del primer silabario y sus variaciones. Me queda alguna laguna a la hora de pasar de silabas latinas a kana, pero lo contrario no me pasa nunca.

El método me pareció bastante ingenioso y hasta adictivo. Así que di el siguiente paso, y pese a no poder permitírmelo ahora me gasté un dineral en el libro para aprender kanji aconsejado, del mismo autor, y también, para complementar, compré otros aparéntemente más caóticos de autores españoles: "Japonés para gente manga".

Creo que a veces es mejor hacer las cosas de forma desordenada, sin mucha severidad pero el libro de kanji poco a poco ha absorvido toda mi atención y estoy "secuestrado" por él.

La meta es aprenderse unos 2042 kanji. Y aprender a aprender otros en el futuro.

Pero hay un toque de rebeldía que me inquieta y es que a diferencia de cualquier otro método para aprenderlos, en este caso no se aprende su pronunciación, ni sus combinaciones con otros kanji. En teoría, de este modo luego resultará más fácil aprender japonés. Como también lo logran los chinos. Y hay quien dice que con este libro también se podría aprender chino, que son lenguas muy diferentes.

En el segundo volumen del libro, cuando haya logrado memorizar todos sin olvidar ninguno, empezaré a ver como se pronuncian en japonés y posibles combinaciones. Y es que el japonés forma nuevas palabras a partir de otras.

Aun así, el léxico y la gramática básica poco a poco los he ido relegando a un segundo plano. Cada vez me resultaba más difícil avanzar en el libro de "japonés para gente manga" porque no me lo tomaba tan en serio como el libro de los kanji.

Tendré que buscarle un hueco, con el cuaderno al lado y más concentración, como hago con el otro libro. Pero creo que debo dejarlo en hibernación hasta terminar lo otro.

"Kanji para recordar 1" de James W. Heisig está escrito originalmente en el año 1977. Fue revisado por el autor y traducido al castellano en torno a 2003 y la 3ª edición, que poseo, impresa en 2008.

No hay que correr. Al principio podía pasarme una hora o hasta dos seguidas aprendiendo una lección entera de entre 15 a 40 kanji. Aunque alguna lección podía llevarme tan solo media hora.

Pero al terminar la décima lección y ver que olvidaba algunos kanji usando este método, que consiste en Recordar absolutamente todos; he vuelto a repasar a conciencia y ahora puedo invertir hasta media hora en un solo kanji.

No porque me la pase repitiendo la escritura o repitiendo una y otra vez nada... sino porque con algunos kanji me cuesta ese tiempo imaginar una relación mental, siguiendo las instrucciones del libro.

De todos modos ir despacio y repasar lo que se olvida no viene mal y he aprendido algo importante sobre el orden de los trazos que la primera vez que lo leí no lo había llegado a asimilar bien.

El autor dice que esta parte es la fácil. Así que habrá que Creer.

Hay que despertar mucho la imaginación. En eso consiste el método. Y puede valer para aprender otras cosas que no sean japonés.

También hay que tener en cuenta que estamos en el siglo XXI.
Cuando se escribió el libro no había PDAs, Google, ordenadores o teléfonos móviles táctiles. Así que cuando se propone un método para el repaso no hay que intentar seguirlo exactamente del mismo modo. Comprar cartulinas y cortarlas para tener más de 2000 es muy laborioso y caro.

Compré algunas cartulinas troqueladas (para tarjetas de visita, en cantidad totalmente insuficiente) que al final serán tarjetas de visita para el próximo Broadcast, seguramente.

Y un par de blocks de hojas de papel para 500 notas, que empecé partiendo por la mitad y garabateé con kanjis unos cuantos. Aunque la meta de que no se viera la parte de atrás quedaba un poco frustrada.

Finalmente he cogido casi todos los kanji (por ahora unos 1500) desde una web donde están introduciendolos en el orden del libro, los he puesto en una base de datos; he montado un foro de "Oekaki" en servidor local y he empezado a dibujar cada kanji con una tableta gráfica, siguiendo el orden correcto de los trazos, que además se conservan para observar la animación (algo imposible, por ahora, en papel). Así los dibujo gastando menos material de papelería y de forma "respetuosa con el medio ambiente".

También he programado una web en PHP para mostrar los kanji introducidos en las bases de datos, escogiendo un número máximo (hasta el que quiera repasar) y de forma aleatoria aparece un kanji dentro de los aprendidos, con un botón para ver su significado.

De este modo puedo repasar e ir escribiendo una sola vez (como pide el libro) y si fallo en alguno, ver la referencia para volverlo a aprender en el libro.

Puede que publique parte de esta web con los kanjis dibujados por mí, aunque mi caligrafía es horrorosa con la tableta gráfica (con el ratón es mejor), pero puede venir bien para ver el orden de los trazos de algún kanji, o para buscar significados.



Y no se que más contar. Contaré hasta diez

一二三四五六七八九十


-Lo siento, Dr. Heisig pero ya se pronunciar estos kanji.-

¿Podré contener las ganas de aprender más japonés hasta que memorize los principales kanji?

¿Acabaré de estudiarlos todos antes de viajar por primera vez al país del sol naciente?

¿Entenderán todos los humanos que lean esta entrada del blog algunas expresiones que he puesto como "oekaki", "blog", "servidor local", "php", "hiragana", "kana", "kanji"?

Y cuando usas Linux Gentoo y aprendes japonés ¿dejas de ser humano?

viernes, 21 de noviembre de 2008

Xml Http Request

El Ajax sigue haciendo mella en mí y no es el equipo de fútbol, ni el detergente.

Programando una web de gestión de contenidos mediante base de datos, formularios y archivos de imagen he pasado como un par de sesiones maratonianas hasta implementar varias funciones específicas.

Como Google Chrome aún está un poco verde para estas cosas del desarrollo, he seguido usando Firefox y todos sus maravillosos complementos, como Web-developer, Firebug y algunos más que me he puesto; como FirePHP y Live-HTTP-headers.

Estas herramientas ayudan a lidiar con peticiones XML, JSON, cabeceras POST, etc. Y dan buenos detalles para depuración en caso de errores de compatibilidad, sintaxis, o fallo garrafal en CSS, Javascript y otros estándares de la web.

Cuando por fin he completado una sección de la web de gestión he ido a reponer fuerzas y después lo he probado con otros navegadores y hay que ver cómo la lío...

En Chrome no funciona bien. Y en Internet Explorer los márgenes y algún estilo CSS no se comporta igual. (Lo que me recuerda cuando traté de ejecutar mi primer programa Basic, aunque éste no es, ni mucho menos, mi primer uso de Javascript, CSS, PHP y HTML)

Arf.. El típico problema de siempre.

De todos modos sabía que iba a pasar y se cuales son los cambios que hay que hacer en cada caso. Ojala podría decirle a mis clientes y sus visitantes que no usen más que Firefox. Qué no existe otra cosa en el universo. ;)

Lo del Chrome creo que tiene que ver con que se me ocurrió jugar con el "hash", la parte del URL que no puede verse en servidor; http://lo.que.sea/pagina.html#hash

Buscaba un truco para obtener un enlace "permanente", tratando de imitar un sistema beta de mapas que tiene Yahoo. Pero eso ha complicado el código y le ha quitado funcionalidad.

Seguramente es la parte en la que se me atraganta Chrome y me llevará un tiempo deshacerlo.

Lo del IE es más sencillo de arreglar, aunque algo fastidioso. En lugar de usar anchuras o alturas máximas habrá que poner unas dimensiones estáticas y disminuir margenes allí donde sobran; ya que el IE no los trata del mismo modo que los demás navegadores.

El punto fuerte del sistema que estoy mejorando es que hace muchas cosas con solo pulsar unos botones o rellenar campos de texto; además de presentarse de forma atractiva gracias a las bondades de la librería javascript Jquery y sus complementos.


Gracias a ello, pulsando un botón se puede cargar una serie de páginas que consulten o actualicen bases de datos y muestren una respuesta sin recargar la web.

El XmlHttpRequest, o XHR, es un curioso descubrimiento.

Cuando se empezó a utilizar se sabía que la tecnología existía varios años atrás. Como pasó con América. Décadas antes de que Colón llegase a pisar su suelo, navegantes chinos ya habían cartografiado partes de su costa en mapas que circularon de un lugar a otro del mundo hasta que el genovés decidió darles uso.

¿Cuántas cosas valiosas están esperando ser explotadas por algún sagaz aventurero?

¿El motor de hidrógeno?
¿Biomedicina genética?
¿control remoto mental bidireccional?

Ya no queda nada por inventar pero sí mucho por descubrir.

martes, 11 de noviembre de 2008

No olviden ajaxizarse

Hay que renovarse, mineralizarse y poner Ajax a nuestras Super-webs.

Porque, aunque conlleve algún inconveniente y los más "veteranos" prefieran quedarse como estaban, las ventajas superan las desventajas.

¿Y qué diantres es eso del Ajax? ¿Un detergente para webs?

No.

Ajax es el nombre que recibe el conjunto de técnicas que combinan distintos lenguajes de programación web (xhtml, css, javascript y PHP o similar) con un modo de transmisión de datos entre cliente y servidor sin requerir cargar la web completa; descubierto de forma casual hace pocos años, aunque podía haberse implementado en nuestras webs antes de darse a conocer por los pioneros.

Lo usan Google, Yahoo y otros en sus portales Web2.0 más famosos: GMail, Flickr, Youtube, Google Maps, etc, etc...

Para los más valientes desarrolladores hay una librería javascript que permite incorporar el Ajax y tropocientos efectos interactivos más.

Con JQuery y opcionalmente infinidad de plugins surgidos para ampliar aun más esta librería es posible dar cierta vidilla a las webs. Ejemplo: Otro Blog de Anime - Al arrancar la página se despliega el logotipo de la cabecera como una cortinilla, aparece la barra lateral y se muestran los contenidos con un fundido.

Cosas como estas no requieren ni tres líneas nuevas en la plantilla de blogger.

Ahora bien cuando profundizamos en las infinitas posibilidades de JQuery es posible transformar completamente nuestras webs. Y eso es lo que acabo de hacer con parte de mi blog.

El hecho de ir añadiendo cosas y más cosas a la barra lateral hacía tiempo que me daba una sensación de poco práctico y poco estético. Así que iba dejando para más tarde el proyecto de crear un "megapanel" que englobe los contenidos con pestañas, por fin, la tarde del domingo decidí liarme la manta a la cabeza (o es la toalla?) y lo hice.

He encogido un poco la radio "Last.FM" y ahora tiene más sentido porque muchos enlaces, como los de entradas recientes de "este Blog" pueden ser pulsados sin que se recargue la web, de modo que podéis sumergiros en toda la perolata de artículos que he ido escribiendo en los últimos meses sin interrumpir la música, o sin requerir abrir otra ventana para el reproductor de last.fm.

Más adelante puede que sustituya "Last.FM" por "Imeem.com", que permite seleccionar una lista de canciones preferida de forma más conveniente;

Y quizás cada artículo lleve su propia "banda sonora". Eso sí. No voy a seleccionar música nueva todos los días.

Por cierto... CSS y Javascript en acción: Pulsa aquí y verás que gracia!!


FIN

martes, 3 de junio de 2008

Enlaces Dinámicos

Aunque hablar en otro idioma o programar en lenguajes de ordenador puede ser frustrante. Toda forma de comunicación me parece interesante.

Se me da bién programar en PHP, y aunque en Blogger no hay un modo sencillo de integrar scripts PHP; cuando el blog está alojado en un site propio no me resulta difícil meter el código que yo quiera gracias a técnicas de web interactiva AJAX (Javascript, CSS y PHP); Como las que usan Google Maps, GMail, y otras webs dinámicas.

Desde que inicié el Blog quise que los enlaces de interés de amigos y allegados se ordenasen de modo inteligente por sí solos.
De manera que cuando una página enlazada sea actualizada suba puestos en el orden de aparición de los enlaces. De ese modo basta con visitar mi página para ver si los demás han hecho algún cambio.

El primero que le encuentra utilidad soy yo. Aunque para obtener novedades via RSS lo que más uso es el programa de correo Mozilla Thunderbird.

Confío que este "ranking" anime a mis amigos enlazados a "competir". Aunque algunos ya llevan velocidad de vértigo a la hora de públicar nuevas entradas y no hay quién les alcance.

La rutina que he programado no la he encontrado hecha pero sabía que podía hacerse y es un placer tener la cabeza lo suficientemente despejada como para lograr lo que quieres aunque lleve un par de días o tres de eliminación de errores y perfeccionamiento.

El PHP es bastante potente, por ejemplo a la hora de convertir las fechas de publicación de los feeds RSS, a un formato comprensible incluso teniendo en cuenta la hora GMT, que algunos Bloggers ni se molestan en configurar bien.

Las horas aparecen correctamente aunque no es mérito de ninguna compleja rútina mía sino simplemente de una funcion, strtotime(); y date() que sirve para dar forma a la fecha con la estructura deseada.

Una ventaja es que todos los enlaces que he incluido tienen feed RSS qué es bastante sencillo de procesar con lenguajes lógicos.

Para evitar que se visiten las páginas web de la lista de enlaces todas las veces que visitamos MeGaPéuTiCo, he hecho uso de una base de datos que se actualizará una sola vez cada doce horas, siempre que se visite pasado ese tiempo. Además las visitas de mi página no se tendrán en cuenta en la mayoría de contadores de las webs ya que la rutina solo lee una mínima parte de información del feed RSS (unos 4 KB), sin cargar imágenes que suelen incluir los contadores de terceros.

El resultado de mi rutina aparece una vez cargados todos los elementos del blog en la barra lateral en la sección "ENLACES DINÁMICOS".

¿Qué te parece?



Mi rutina tiene 278 líneas, incluyendo datos de enlaces, y ocupa unos siete KB, más un enlace externo que usa la plantilla Blogger a otro código de otros 7 KB con funciones Javascript que ponen en marcha la magia del AJAX.

Si a alguien le interesa el source code, podría tratar de adaptarlo para su uso por terceros.


Básicamente mi programa hace ésto (leételo solo si tienes la cabeza receptiva):

- Almacena en distintas matrices de variables lo siguiente:
- - enlaces de feeds
- - enlaces finales que son mostrados en vez de lo que se procesan
- - titulo del enlace
- - Tipo de enlace (pensaba que para cada página necesitaría una rutina distinta para encontrar la fecha, pero ha sido suficiente con un solo tipo: RSS)

- guarda una variable con el timestamp, o la fecha/hora unix, actual.

- se define una función que hace comprobaciones de cada enlace de feed en busca de los primeros 3500 bytes del archivo xml, localizando la primera vez que aparecen las cadenas '<pubDate>' y '</pubDate>', extrayendo la fecha y convirtiendola a unix para finalmente devolver la fecha en formato final.

- Se define una función que comprueba cada enlace proporcionado para ver en los metadatos de la página la fecha de modificación de la página. Esto era para otros tipos de página web y finalmente he decidido no usar este tipo de página porque se tenian en cuenta comentarios u otros cambios que realmente no afectan a la actualización real de la página.

- Se definen funciones para conexión a la base de datos.

- Se define función para desconexión de la base de datos.

- Se define función para obtener fecha-hora de la base de datos que indica cuando se miraron las páginas web enlazadas por última vez.

- Se define función para actualizar fecha-hora en la base de datos cuando se miran las páginas web enlazadas.

- Se define función que llama a la función pertiente para obtener la fecha de cada enlace web teniendo en cuenta el tipo de página.

- - La función se asegura también de actualizar la base de datos con cada fecha obtenida.

- Se define función que mira la fecha-hora del enlace en la base de datos pero si no se encuentra llama a la función anterior para obtenerla de la web.

* Ahora comienza el programa :)

- Se crea un pointer de conexión a la base de datos.

- Se obtiene en una variable la fecha-hora que indica cuando se miraron las páginas web mediante la función definida.

- Se calcula la diferencia entre la fecha/hora actual y la fecha-hora en que se actualizó la base de datos.

- Se cuentan el número de valores en la matriz de enlaces de feeds.

- Se inicializa una variable que tendrá en cuenta si se han visitado páginas web nuevas para actualizar su fecha.

- Comienza un bucle con el número de enlaces de la matriz.

- Si han pasado más de 43199 segundos (12 horas o más)

- - Se mira efectivamente cada enlace de la matriz en sus webs respectivas con la función correspondiente.

- - La variable inicializada pasa a ser de valor 1 para actualizar cuando salgamos del bucle la fecha-hora de actualización de la base de datos.

- Si han pasado 431999 segundo o menos...

- - Se mira la fecha-hora guardada para cada enlace en base de datos

- Como soy un poco pavico a la hora de programar y he formateado los meses sin ceros a la izquierda y no me he querido molestar en convertirlo dos veces, ahora me aseguro que si el quinto carácter de la fecha es un guión '-', una variable haga de sumando cero, pero si no es un guión significa que el enlace devuelve los meses 10, 11 ó 12 y por tanto le doy a la variable un valor a sumar de 1.

- En las siguientes líneas de código con ayuda de la variable anterior obtengo la hora, minuto, segundo, día, mes y año de la fecha para finalmente crear una matriz asociada a cada enlace con el timestamp unix, qué es más fácil de ordenar...

...Esta rutina entonces creo que dejará de funcionar en unos 30 años cuando llegue el fatídico Bug de la fecha unix en 2038.

Estas dos últimas cosas (que son 12 líneas de código las podía haber resuelto con strtotime(), pero como aprendo sobre la marcha ya está hecho. Qué le vamos a hacer.


- A continuación se ordena en orden inverso la matriz según su valor timestamp, sin desordenar la clave en que fue definida.

- VISUALIZACIÓN: Se emplean todas las claves de la matriz en el nuevo orden para mostrar las matrices de enlace, título y fecha en formato legible, con sus correspondientes retornos de carro.

- Tras todo esto se mira si la variable inicializada indica que se debe actualizar la fecha-hora en que la base de datos ha obtenido cambios.

- - Si se cumple se llama a la función correspondiente.

- Se llama a la función de desconexión de la base de datos.

Y FIN.


¿Cuántos cineastas hacen falta para programar un PHP?
A ver quién acaba el chiste.